[{"data":1,"prerenderedAt":174680},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu":3,"wiki-doc-nav":2192},{"id":4,"title":5,"body":6,"description":57,"extension":2186,"meta":2187,"navigation":541,"path":2188,"seo":2189,"stem":2190,"__hash__":2191},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":8,"toc":2162},"minimark",[9,13,18,22,25,47,50,61,64,68,71,113,116,134,137,187,190,201,205,208,214,217,262,265,299,302,338,343,346,396,399,405,408,414,418,421,427,430,434,437,487,490,504,507,511,1227,1230,1243,1246,1257,1260,1263,1282,1296,1299,1322,1325,1328,1372,1375,1378,1398,1405,1408,1426,1441,1444,1450,1453,1459,1476,1483,1514,1525,1559,1570,1587,1598,1606,1612,1626,1629,1651,1658,1672,1677,1707,1717,1742,1753,1776,1779,1796,1799,1808,1815,1837,1850,1871,1880,1920,1931,1935,1938,1944,1947,1950,1956,1959,1981,1984,1988,2028,2032,2035,2046,2049,2052,2079,2082,2092,2098,2101,2107,2109,2115,2119,2122,2126,2129,2155,2158],[10,11,5],"h1",{"id":12},"_6控制任务cartpole",[14,15,17],"h2",{"id":16},"_1目标说明","1.目标说明",[19,20,21],"p",{},"本章搭建一个最小 Cartpole 控制任务。",[19,23,24],{},"你将学习:",[26,27,28,32,35,38,41,44],"ol",{},[29,30,31],"li",{},"slide joint",[29,33,34],{},"hinge joint",[29,36,37],{},"cart force actuator",[29,39,40],{},"状态观测",[29,42,43],{},"简单控制循环",[29,45,46],{},"reward 设计雏形",[19,48,49],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[51,52,58],"pre",{"className":53,"code":55,"language":56,"meta":57},[54],"language-text","小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n","text","",[59,60,55],"code",{"__ignoreMap":57},[19,62,63],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,65,67],{"id":66},"_2环境与依赖安装","2.环境与依赖安装",[19,69,70],{},"Fedora 44 系统依赖:",[51,72,76],{"className":73,"code":74,"language":75,"meta":57,"style":57},"language-bash shiki shiki-themes github-light github-dark","sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n","bash",[59,77,78],{"__ignoreMap":57},[79,80,83,87,91,94,98,101,104,107,110],"span",{"class":81,"line":82},"line",1,[79,84,86],{"class":85},"sScJk","sudo",[79,88,90],{"class":89},"sZZnC"," dnf",[79,92,93],{"class":89}," install",[79,95,97],{"class":96},"sj4cs"," -y",[79,99,100],{"class":89}," python3",[79,102,103],{"class":89}," python3-pip",[79,105,106],{"class":89}," mesa-libGL",[79,108,109],{"class":89}," mesa-dri-drivers",[79,111,112],{"class":89}," glfw\n",[19,114,115],{},"pip:",[51,117,119],{"className":73,"code":118,"language":75,"meta":57,"style":57},"pip install \"mujoco>=2.3\" numpy\n",[59,120,121],{"__ignoreMap":57},[79,122,123,126,128,131],{"class":81,"line":82},[79,124,125],{"class":85},"pip",[79,127,93],{"class":89},[79,129,130],{"class":89}," \"mujoco>=2.3\"",[79,132,133],{"class":89}," numpy\n",[19,135,136],{},"conda:",[51,138,140],{"className":73,"code":139,"language":75,"meta":57,"style":57},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[59,141,142,165,176],{"__ignoreMap":57},[79,143,144,147,150,153,156,159,162],{"class":81,"line":82},[79,145,146],{"class":85},"conda",[79,148,149],{"class":89}," create",[79,151,152],{"class":96}," -n",[79,154,155],{"class":89}," mujoco-cartpole",[79,157,158],{"class":89}," python=",[79,160,161],{"class":96},"3.10",[79,163,164],{"class":96}," -y\n",[79,166,168,170,173],{"class":81,"line":167},2,[79,169,146],{"class":85},[79,171,172],{"class":89}," activate",[79,174,175],{"class":89}," mujoco-cartpole\n",[79,177,179,181,183,185],{"class":81,"line":178},3,[79,180,125],{"class":85},[79,182,93],{"class":89},[79,184,130],{"class":89},[79,186,133],{"class":89},[19,188,189],{},"版本冲突说明:",[26,191,192,195,198],{},[29,193,194],{},"本章不依赖 Gymnasium。",[29,196,197],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[29,199,200],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,202,204],{"id":203},"_3核心概念解释","3.核心概念解释",[19,206,207],{},"Cartpole 的模型结构:",[51,209,212],{"className":210,"code":211,"language":56,"meta":57},[54],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[59,213,211],{"__ignoreMap":57},[19,215,216],{},"小车通过 slide joint 左右移动:",[51,218,222],{"className":219,"code":220,"language":221,"meta":57,"style":57},"language-xml shiki shiki-themes github-light github-dark","\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n","xml",[59,223,224],{"__ignoreMap":57},[79,225,226,230,234,237,240,243,246,248,251,254,256,259],{"class":81,"line":82},[79,227,229],{"class":228},"sVt8B","\u003C",[79,231,233],{"class":232},"s9eBZ","joint",[79,235,236],{"class":85}," name",[79,238,239],{"class":228},"=",[79,241,242],{"class":89},"\"cart_x\"",[79,244,245],{"class":85}," type",[79,247,239],{"class":228},[79,249,250],{"class":89},"\"slide\"",[79,252,253],{"class":85}," axis",[79,255,239],{"class":228},[79,257,258],{"class":89},"\"1 0 0\"",[79,260,261],{"class":228},"\u002F>\n",[19,263,264],{},"杆子通过 hinge joint 旋转:",[51,266,268],{"className":219,"code":267,"language":221,"meta":57,"style":57},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[59,269,270],{"__ignoreMap":57},[79,271,272,274,276,278,280,283,285,287,290,292,294,297],{"class":81,"line":82},[79,273,229],{"class":228},[79,275,233],{"class":232},[79,277,236],{"class":85},[79,279,239],{"class":228},[79,281,282],{"class":89},"\"pole_hinge\"",[79,284,245],{"class":85},[79,286,239],{"class":228},[79,288,289],{"class":89},"\"hinge\"",[79,291,253],{"class":85},[79,293,239],{"class":228},[79,295,296],{"class":89},"\"0 1 0\"",[79,298,261],{"class":228},[19,300,301],{},"控制力作用在小车 slide joint 上:",[51,303,305],{"className":219,"code":304,"language":221,"meta":57,"style":57},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[59,306,307],{"__ignoreMap":57},[79,308,309,311,314,316,318,321,324,326,328,331,333,336],{"class":81,"line":82},[79,310,229],{"class":228},[79,312,313],{"class":232},"motor",[79,315,236],{"class":85},[79,317,239],{"class":228},[79,319,320],{"class":89},"\"cart_motor\"",[79,322,323],{"class":85}," joint",[79,325,239],{"class":228},[79,327,242],{"class":89},[79,329,330],{"class":85}," gear",[79,332,239],{"class":228},[79,334,335],{"class":89},"\"10\"",[79,337,261],{"class":228},[339,340,342],"h3",{"id":341},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,344,345],{},"这个简化模型有两个关节：",[347,348,349,366],"table",{},[350,351,352],"thead",{},[353,354,355,360,363],"tr",{},[356,357,359],"th",{"align":358},"left","关节",[356,361,362],{"align":358},"类型",[356,364,365],{"align":358},"对应状态",[367,368,369,383],"tbody",{},[353,370,371,377,380],{},[372,373,374],"td",{"align":358},[59,375,376],{},"cart_x",[372,378,379],{"align":358},"slide",[372,381,382],{"align":358},"小车 x 位置",[353,384,385,390,393],{},[372,386,387],{"align":358},[59,388,389],{},"pole_hinge",[372,391,392],{"align":358},"hinge",[372,394,395],{"align":358},"杆子角度",[19,397,398],{},"所以：",[51,400,403],{"className":401,"code":402,"language":56,"meta":57},[54],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[59,404,402],{"__ignoreMap":57},[19,406,407],{},"把它们拼起来就是观测：",[51,409,412],{"className":410,"code":411,"language":56,"meta":57},[54],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[59,413,411],{"__ignoreMap":57},[339,415,417],{"id":416},"action-是什么","action 是什么",[19,419,420],{},"本章只有一个 actuator：",[51,422,425],{"className":423,"code":424,"language":56,"meta":57},[54],"data.ctrl[0] = action\n",[59,426,424],{"__ignoreMap":57},[19,428,429],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[339,431,433],{"id":432},"reward-是什么","reward 是什么",[19,435,436],{},"奖励函数：",[51,438,442],{"className":439,"code":440,"language":441,"meta":57,"style":57},"language-python shiki shiki-themes github-light github-dark","return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n","python",[59,443,444],{"__ignoreMap":57},[79,445,446,450,453,456,459,462,465,468,471,474,476,479,482,484],{"class":81,"line":82},[79,447,449],{"class":448},"szBVR","return",[79,451,452],{"class":96}," float",[79,454,455],{"class":228},"(",[79,457,458],{"class":96},"1.0",[79,460,461],{"class":448}," -",[79,463,464],{"class":96}," 0.1",[79,466,467],{"class":448}," *",[79,469,470],{"class":228}," cart_x ",[79,472,473],{"class":448},"*",[79,475,470],{"class":228},[79,477,478],{"class":448},"-",[79,480,481],{"class":228}," pole_angle ",[79,483,473],{"class":448},[79,485,486],{"class":228}," pole_angle)\n",[19,488,489],{},"含义：",[26,491,492,498,501],{},[29,493,494,495,497],{},"基础奖励是 ",[59,496,458],{},"。",[29,499,500],{},"小车离中心越远，扣分越多。",[29,502,503],{},"杆子角度越大，扣分越多。",[19,505,506],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,508,510],{"id":509},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[51,512,514],{"className":439,"code":513,"language":441,"meta":57,"style":57},"import mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"cartpole\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n\n    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n\n      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n        \u003Cgeom name=\"pole_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.8\" size=\"0.03\" mass=\"0.2\" rgba=\"1 0.2 0.1 1\"\u002F>\n      \u003C\u002Fbody>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\n  \u003Cactuator>\n    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n  \u003C\u002Factuator>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n\n\ndef compute_reward(obs: np.ndarray) -> float:\n    cart_x = obs[0]\n    pole_angle = obs[1]\n    return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    data.qpos[1] = 0.1\n    mujoco.mj_forward(model, data)\n\n    total_reward = 0.0\n\n    for step in range(1000):\n        obs = get_observation(data)\n        pole_angle = obs[1]\n        pole_angular_velocity = obs[3]\n\n        action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n        action = np.clip(action, -1.0, 1.0)\n\n        data.ctrl[0] = action\n        mujoco.mj_step(model, data)\n\n        reward = compute_reward(get_observation(data))\n        total_reward += reward\n\n        if step % 100 == 0:\n            print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n\n    print(\"total_reward:\", round(total_reward, 3))\n    print(\"final obs:\", np.round(get_observation(data), 3))\n\n\nif __name__ == \"__main__\":\n    main()\n",[59,515,516,524,537,543,548,560,566,572,577,583,589,594,600,606,612,617,623,629,635,641,647,653,658,664,670,676,682,688,693,698,710,719,724,729,746,763,778,809,814,819,835,851,862,867,883,889,894,905,910,933,944,958,973,978,1004,1025,1030,1045,1051,1056,1067,1079,1084,1106,1151,1156,1178,1195,1200,1205,1221],{"__ignoreMap":57},[79,517,518,521],{"class":81,"line":82},[79,519,520],{"class":448},"import",[79,522,523],{"class":228}," mujoco\n",[79,525,526,528,531,534],{"class":81,"line":167},[79,527,520],{"class":448},[79,529,530],{"class":228}," numpy ",[79,532,533],{"class":448},"as",[79,535,536],{"class":228}," np\n",[79,538,539],{"class":81,"line":178},[79,540,542],{"emptyLinePlaceholder":541},true,"\n",[79,544,546],{"class":81,"line":545},4,[79,547,542],{"emptyLinePlaceholder":541},[79,549,551,554,557],{"class":81,"line":550},5,[79,552,553],{"class":96},"XML",[79,555,556],{"class":448}," =",[79,558,559],{"class":89}," \"\"\"\n",[79,561,563],{"class":81,"line":562},6,[79,564,565],{"class":89},"\u003Cmujoco model=\"cartpole\">\n",[79,567,569],{"class":81,"line":568},7,[79,570,571],{"class":89},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[79,573,575],{"class":81,"line":574},8,[79,576,542],{"emptyLinePlaceholder":541},[79,578,580],{"class":81,"line":579},9,[79,581,582],{"class":89},"  \u003Cworldbody>\n",[79,584,586],{"class":81,"line":585},10,[79,587,588],{"class":89},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[79,590,592],{"class":81,"line":591},11,[79,593,542],{"emptyLinePlaceholder":541},[79,595,597],{"class":81,"line":596},12,[79,598,599],{"class":89},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[79,601,603],{"class":81,"line":602},13,[79,604,605],{"class":89},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[79,607,609],{"class":81,"line":608},14,[79,610,611],{"class":89},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[79,613,615],{"class":81,"line":614},15,[79,616,542],{"emptyLinePlaceholder":541},[79,618,620],{"class":81,"line":619},16,[79,621,622],{"class":89},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[79,624,626],{"class":81,"line":625},17,[79,627,628],{"class":89},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[79,630,632],{"class":81,"line":631},18,[79,633,634],{"class":89},"        \u003Cgeom name=\"pole_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.8\" size=\"0.03\" mass=\"0.2\" rgba=\"1 0.2 0.1 1\"\u002F>\n",[79,636,638],{"class":81,"line":637},19,[79,639,640],{"class":89},"      \u003C\u002Fbody>\n",[79,642,644],{"class":81,"line":643},20,[79,645,646],{"class":89},"    \u003C\u002Fbody>\n",[79,648,650],{"class":81,"line":649},21,[79,651,652],{"class":89},"  \u003C\u002Fworldbody>\n",[79,654,656],{"class":81,"line":655},22,[79,657,542],{"emptyLinePlaceholder":541},[79,659,661],{"class":81,"line":660},23,[79,662,663],{"class":89},"  \u003Cactuator>\n",[79,665,667],{"class":81,"line":666},24,[79,668,669],{"class":89},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[79,671,673],{"class":81,"line":672},25,[79,674,675],{"class":89},"  \u003C\u002Factuator>\n",[79,677,679],{"class":81,"line":678},26,[79,680,681],{"class":89},"\u003C\u002Fmujoco>\n",[79,683,685],{"class":81,"line":684},27,[79,686,687],{"class":89},"\"\"\"\n",[79,689,691],{"class":81,"line":690},28,[79,692,542],{"emptyLinePlaceholder":541},[79,694,696],{"class":81,"line":695},29,[79,697,542],{"emptyLinePlaceholder":541},[79,699,701,704,707],{"class":81,"line":700},30,[79,702,703],{"class":448},"def",[79,705,706],{"class":85}," get_observation",[79,708,709],{"class":228},"(data: mujoco.MjData) -> np.ndarray:\n",[79,711,713,716],{"class":81,"line":712},31,[79,714,715],{"class":448},"    return",[79,717,718],{"class":228}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[79,720,722],{"class":81,"line":721},32,[79,723,542],{"emptyLinePlaceholder":541},[79,725,727],{"class":81,"line":726},33,[79,728,542],{"emptyLinePlaceholder":541},[79,730,732,734,737,740,743],{"class":81,"line":731},34,[79,733,703],{"class":448},[79,735,736],{"class":85}," compute_reward",[79,738,739],{"class":228},"(obs: np.ndarray) -> ",[79,741,742],{"class":96},"float",[79,744,745],{"class":228},":\n",[79,747,749,752,754,757,760],{"class":81,"line":748},35,[79,750,751],{"class":228},"    cart_x ",[79,753,239],{"class":448},[79,755,756],{"class":228}," obs[",[79,758,759],{"class":96},"0",[79,761,762],{"class":228},"]\n",[79,764,766,769,771,773,776],{"class":81,"line":765},36,[79,767,768],{"class":228},"    pole_angle ",[79,770,239],{"class":448},[79,772,756],{"class":228},[79,774,775],{"class":96},"1",[79,777,762],{"class":228},[79,779,781,783,785,787,789,791,793,795,797,799,801,803,805,807],{"class":81,"line":780},37,[79,782,715],{"class":448},[79,784,452],{"class":96},[79,786,455],{"class":228},[79,788,458],{"class":96},[79,790,461],{"class":448},[79,792,464],{"class":96},[79,794,467],{"class":448},[79,796,470],{"class":228},[79,798,473],{"class":448},[79,800,470],{"class":228},[79,802,478],{"class":448},[79,804,481],{"class":228},[79,806,473],{"class":448},[79,808,486],{"class":228},[79,810,812],{"class":81,"line":811},38,[79,813,542],{"emptyLinePlaceholder":541},[79,815,817],{"class":81,"line":816},39,[79,818,542],{"emptyLinePlaceholder":541},[79,820,822,824,827,830,833],{"class":81,"line":821},40,[79,823,703],{"class":448},[79,825,826],{"class":85}," main",[79,828,829],{"class":228},"() -> ",[79,831,832],{"class":96},"None",[79,834,745],{"class":228},[79,836,838,841,843,846,848],{"class":81,"line":837},41,[79,839,840],{"class":228},"    model ",[79,842,239],{"class":448},[79,844,845],{"class":228}," mujoco.MjModel.from_xml_string(",[79,847,553],{"class":96},[79,849,850],{"class":228},")\n",[79,852,854,857,859],{"class":81,"line":853},42,[79,855,856],{"class":228},"    data ",[79,858,239],{"class":448},[79,860,861],{"class":228}," mujoco.MjData(model)\n",[79,863,865],{"class":81,"line":864},43,[79,866,542],{"emptyLinePlaceholder":541},[79,868,870,873,875,878,880],{"class":81,"line":869},44,[79,871,872],{"class":228},"    data.qpos[",[79,874,775],{"class":96},[79,876,877],{"class":228},"] ",[79,879,239],{"class":448},[79,881,882],{"class":96}," 0.1\n",[79,884,886],{"class":81,"line":885},45,[79,887,888],{"class":228},"    mujoco.mj_forward(model, data)\n",[79,890,892],{"class":81,"line":891},46,[79,893,542],{"emptyLinePlaceholder":541},[79,895,897,900,902],{"class":81,"line":896},47,[79,898,899],{"class":228},"    total_reward ",[79,901,239],{"class":448},[79,903,904],{"class":96}," 0.0\n",[79,906,908],{"class":81,"line":907},48,[79,909,542],{"emptyLinePlaceholder":541},[79,911,913,916,919,922,925,927,930],{"class":81,"line":912},49,[79,914,915],{"class":448},"    for",[79,917,918],{"class":228}," step ",[79,920,921],{"class":448},"in",[79,923,924],{"class":96}," range",[79,926,455],{"class":228},[79,928,929],{"class":96},"1000",[79,931,932],{"class":228},"):\n",[79,934,936,939,941],{"class":81,"line":935},50,[79,937,938],{"class":228},"        obs ",[79,940,239],{"class":448},[79,942,943],{"class":228}," get_observation(data)\n",[79,945,947,950,952,954,956],{"class":81,"line":946},51,[79,948,949],{"class":228},"        pole_angle ",[79,951,239],{"class":448},[79,953,756],{"class":228},[79,955,775],{"class":96},[79,957,762],{"class":228},[79,959,961,964,966,968,971],{"class":81,"line":960},52,[79,962,963],{"class":228},"        pole_angular_velocity ",[79,965,239],{"class":448},[79,967,756],{"class":228},[79,969,970],{"class":96},"3",[79,972,762],{"class":228},[79,974,976],{"class":81,"line":975},53,[79,977,542],{"emptyLinePlaceholder":541},[79,979,981,984,986,989,991,993,996,999,1001],{"class":81,"line":980},54,[79,982,983],{"class":228},"        action ",[79,985,239],{"class":448},[79,987,988],{"class":96}," 2.0",[79,990,467],{"class":448},[79,992,481],{"class":228},[79,994,995],{"class":448},"+",[79,997,998],{"class":96}," 0.5",[79,1000,467],{"class":448},[79,1002,1003],{"class":228}," pole_angular_velocity\n",[79,1005,1007,1009,1011,1014,1016,1018,1021,1023],{"class":81,"line":1006},55,[79,1008,983],{"class":228},[79,1010,239],{"class":448},[79,1012,1013],{"class":228}," np.clip(action, ",[79,1015,478],{"class":448},[79,1017,458],{"class":96},[79,1019,1020],{"class":228},", ",[79,1022,458],{"class":96},[79,1024,850],{"class":228},[79,1026,1028],{"class":81,"line":1027},56,[79,1029,542],{"emptyLinePlaceholder":541},[79,1031,1033,1036,1038,1040,1042],{"class":81,"line":1032},57,[79,1034,1035],{"class":228},"        data.ctrl[",[79,1037,759],{"class":96},[79,1039,877],{"class":228},[79,1041,239],{"class":448},[79,1043,1044],{"class":228}," action\n",[79,1046,1048],{"class":81,"line":1047},58,[79,1049,1050],{"class":228},"        mujoco.mj_step(model, data)\n",[79,1052,1054],{"class":81,"line":1053},59,[79,1055,542],{"emptyLinePlaceholder":541},[79,1057,1059,1062,1064],{"class":81,"line":1058},60,[79,1060,1061],{"class":228},"        reward ",[79,1063,239],{"class":448},[79,1065,1066],{"class":228}," compute_reward(get_observation(data))\n",[79,1068,1070,1073,1076],{"class":81,"line":1069},61,[79,1071,1072],{"class":228},"        total_reward ",[79,1074,1075],{"class":448},"+=",[79,1077,1078],{"class":228}," reward\n",[79,1080,1082],{"class":81,"line":1081},62,[79,1083,542],{"emptyLinePlaceholder":541},[79,1085,1087,1090,1092,1095,1098,1101,1104],{"class":81,"line":1086},63,[79,1088,1089],{"class":448},"        if",[79,1091,918],{"class":228},[79,1093,1094],{"class":448},"%",[79,1096,1097],{"class":96}," 100",[79,1099,1100],{"class":448}," ==",[79,1102,1103],{"class":96}," 0",[79,1105,745],{"class":228},[79,1107,1109,1112,1114,1117,1120,1123,1126,1128,1131,1134,1136,1139,1141,1143,1146,1148],{"class":81,"line":1108},64,[79,1110,1111],{"class":96},"            print",[79,1113,455],{"class":228},[79,1115,1116],{"class":89},"\"step:\"",[79,1118,1119],{"class":228},", step, ",[79,1121,1122],{"class":89},"\"obs:\"",[79,1124,1125],{"class":228},", np.round(obs, ",[79,1127,970],{"class":96},[79,1129,1130],{"class":228},"), ",[79,1132,1133],{"class":89},"\"action:\"",[79,1135,1020],{"class":228},[79,1137,1138],{"class":96},"round",[79,1140,455],{"class":228},[79,1142,742],{"class":96},[79,1144,1145],{"class":228},"(action), ",[79,1147,970],{"class":96},[79,1149,1150],{"class":228},"))\n",[79,1152,1154],{"class":81,"line":1153},65,[79,1155,542],{"emptyLinePlaceholder":541},[79,1157,1159,1162,1164,1167,1169,1171,1174,1176],{"class":81,"line":1158},66,[79,1160,1161],{"class":96},"    print",[79,1163,455],{"class":228},[79,1165,1166],{"class":89},"\"total_reward:\"",[79,1168,1020],{"class":228},[79,1170,1138],{"class":96},[79,1172,1173],{"class":228},"(total_reward, ",[79,1175,970],{"class":96},[79,1177,1150],{"class":228},[79,1179,1181,1183,1185,1188,1191,1193],{"class":81,"line":1180},67,[79,1182,1161],{"class":96},[79,1184,455],{"class":228},[79,1186,1187],{"class":89},"\"final obs:\"",[79,1189,1190],{"class":228},", np.round(get_observation(data), ",[79,1192,970],{"class":96},[79,1194,1150],{"class":228},[79,1196,1198],{"class":81,"line":1197},68,[79,1199,542],{"emptyLinePlaceholder":541},[79,1201,1203],{"class":81,"line":1202},69,[79,1204,542],{"emptyLinePlaceholder":541},[79,1206,1208,1211,1214,1216,1219],{"class":81,"line":1207},70,[79,1209,1210],{"class":448},"if",[79,1212,1213],{"class":96}," __name__",[79,1215,1100],{"class":448},[79,1217,1218],{"class":89}," \"__main__\"",[79,1220,745],{"class":228},[79,1222,1224],{"class":81,"line":1223},71,[79,1225,1226],{"class":228},"    main()\n",[19,1228,1229],{},"保存为：",[51,1231,1233],{"className":73,"code":1232,"language":75,"meta":57,"style":57},"touch ch6_cartpole.py\n",[59,1234,1235],{"__ignoreMap":57},[79,1236,1237,1240],{"class":81,"line":82},[79,1238,1239],{"class":85},"touch",[79,1241,1242],{"class":89}," ch6_cartpole.py\n",[19,1244,1245],{},"运行：",[51,1247,1249],{"className":73,"code":1248,"language":75,"meta":57,"style":57},"python ch6_cartpole.py\n",[59,1250,1251],{"__ignoreMap":57},[79,1252,1253,1255],{"class":81,"line":82},[79,1254,441],{"class":85},[79,1256,1242],{"class":89},[339,1258,1259],{"id":1259},"代码逐段解释",[19,1261,1262],{},"构造观测：",[51,1264,1266],{"className":439,"code":1265,"language":441,"meta":57,"style":57},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[59,1267,1268,1276],{"__ignoreMap":57},[79,1269,1270,1272,1274],{"class":81,"line":82},[79,1271,703],{"class":448},[79,1273,706],{"class":85},[79,1275,709],{"class":228},[79,1277,1278,1280],{"class":81,"line":167},[79,1279,715],{"class":448},[79,1281,718],{"class":228},[19,1283,1284,1287,1288,1291,1292,1295],{},[59,1285,1286],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[59,1289,1290],{},"qpos"," 2 维，",[59,1293,1294],{},"qvel"," 2 维，所以 obs 是 4 维。",[19,1297,1298],{},"设置初始角度：",[51,1300,1302],{"className":439,"code":1301,"language":441,"meta":57,"style":57},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[59,1303,1304,1317],{"__ignoreMap":57},[79,1305,1306,1309,1311,1313,1315],{"class":81,"line":82},[79,1307,1308],{"class":228},"data.qpos[",[79,1310,775],{"class":96},[79,1312,877],{"class":228},[79,1314,239],{"class":448},[79,1316,882],{"class":96},[79,1318,1319],{"class":81,"line":167},[79,1320,1321],{"class":228},"mujoco.mj_forward(model, data)\n",[19,1323,1324],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,1326,1327],{},"简单反馈控制：",[51,1329,1331],{"className":439,"code":1330,"language":441,"meta":57,"style":57},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[59,1332,1333,1354],{"__ignoreMap":57},[79,1334,1335,1338,1340,1342,1344,1346,1348,1350,1352],{"class":81,"line":82},[79,1336,1337],{"class":228},"action ",[79,1339,239],{"class":448},[79,1341,988],{"class":96},[79,1343,467],{"class":448},[79,1345,481],{"class":228},[79,1347,995],{"class":448},[79,1349,998],{"class":96},[79,1351,467],{"class":448},[79,1353,1003],{"class":228},[79,1355,1356,1358,1360,1362,1364,1366,1368,1370],{"class":81,"line":167},[79,1357,1337],{"class":228},[79,1359,239],{"class":448},[79,1361,1013],{"class":228},[79,1363,478],{"class":448},[79,1365,458],{"class":96},[79,1367,1020],{"class":228},[79,1369,458],{"class":96},[79,1371,850],{"class":228},[19,1373,1374],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,1376,1377],{},"限制动作：",[51,1379,1381],{"className":439,"code":1380,"language":441,"meta":57,"style":57},"np.clip(action, -1.0, 1.0)\n",[59,1382,1383],{"__ignoreMap":57},[79,1384,1385,1388,1390,1392,1394,1396],{"class":81,"line":82},[79,1386,1387],{"class":228},"np.clip(action, ",[79,1389,478],{"class":448},[79,1391,458],{"class":96},[79,1393,1020],{"class":228},[79,1395,458],{"class":96},[79,1397,850],{"class":228},[19,1399,1400,1401,1404],{},"因为 XML 里 ",[59,1402,1403],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[339,1406,1407],{"id":1407},"代码逐行细讲",[51,1409,1410],{"className":439,"code":1265,"language":441,"meta":57,"style":57},[59,1411,1412,1420],{"__ignoreMap":57},[79,1413,1414,1416,1418],{"class":81,"line":82},[79,1415,703],{"class":448},[79,1417,706],{"class":85},[79,1419,709],{"class":228},[79,1421,1422,1424],{"class":81,"line":167},[79,1423,715],{"class":448},[79,1425,718],{"class":228},[19,1427,1428,1429,1432,1433,1436,1437,1440],{},"这段定义了一个函数，用来获取当前观测。",[59,1430,1431],{},"data.qpos.copy()"," 是位置数组副本，",[59,1434,1435],{},"data.qvel.copy()"," 是速度数组副本。",[59,1438,1439],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,1442,1443],{},"在本章模型里：",[51,1445,1448],{"className":1446,"code":1447,"language":56,"meta":57},[54],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[59,1449,1447],{"__ignoreMap":57},[19,1451,1452],{},"所以返回的 obs 是：",[51,1454,1457],{"className":1455,"code":1456,"language":56,"meta":57},[54],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[59,1458,1456],{"__ignoreMap":57},[51,1460,1462],{"className":439,"code":1461,"language":441,"meta":57,"style":57},"def compute_reward(obs: np.ndarray) -> float:\n",[59,1463,1464],{"__ignoreMap":57},[79,1465,1466,1468,1470,1472,1474],{"class":81,"line":82},[79,1467,703],{"class":448},[79,1469,736],{"class":85},[79,1471,739],{"class":228},[79,1473,742],{"class":96},[79,1475,745],{"class":228},[19,1477,1478,1479,1482],{},"这行定义奖励函数。输入是观测 ",[59,1480,1481],{},"obs","，输出是一个浮点数奖励。",[51,1484,1486],{"className":439,"code":1485,"language":441,"meta":57,"style":57},"cart_x = obs[0]\npole_angle = obs[1]\n",[59,1487,1488,1501],{"__ignoreMap":57},[79,1489,1490,1493,1495,1497,1499],{"class":81,"line":82},[79,1491,1492],{"class":228},"cart_x ",[79,1494,239],{"class":448},[79,1496,756],{"class":228},[79,1498,759],{"class":96},[79,1500,762],{"class":228},[79,1502,1503,1506,1508,1510,1512],{"class":81,"line":167},[79,1504,1505],{"class":228},"pole_angle ",[79,1507,239],{"class":448},[79,1509,756],{"class":228},[79,1511,775],{"class":96},[79,1513,762],{"class":228},[19,1515,1516,1517,1520,1521,1524],{},"数组索引从 0 开始。",[59,1518,1519],{},"obs[0]"," 是第一个元素，也就是小车位置。",[59,1522,1523],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[51,1526,1527],{"className":439,"code":440,"language":441,"meta":57,"style":57},[59,1528,1529],{"__ignoreMap":57},[79,1530,1531,1533,1535,1537,1539,1541,1543,1545,1547,1549,1551,1553,1555,1557],{"class":81,"line":82},[79,1532,449],{"class":448},[79,1534,452],{"class":96},[79,1536,455],{"class":228},[79,1538,458],{"class":96},[79,1540,461],{"class":448},[79,1542,464],{"class":96},[79,1544,467],{"class":448},[79,1546,470],{"class":228},[79,1548,473],{"class":448},[79,1550,470],{"class":228},[79,1552,478],{"class":448},[79,1554,481],{"class":228},[79,1556,473],{"class":448},[79,1558,486],{"class":228},[19,1560,1561,1562,1565,1566,1569],{},"这行计算奖励。",[59,1563,1564],{},"cart_x * cart_x"," 是小车位置的平方，",[59,1567,1568],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[51,1571,1573],{"className":439,"code":1572,"language":441,"meta":57,"style":57},"data.qpos[1] = 0.1\n",[59,1574,1575],{"__ignoreMap":57},[79,1576,1577,1579,1581,1583,1585],{"class":81,"line":82},[79,1578,1308],{"class":228},[79,1580,775],{"class":96},[79,1582,877],{"class":228},[79,1584,239],{"class":448},[79,1586,882],{"class":96},[19,1588,1589,1590,1593,1594,1597],{},"手动设置杆子的初始角度。因为 ",[59,1591,1592],{},"qpos[0]"," 是小车位置，",[59,1595,1596],{},"qpos[1]"," 是杆子角度，所以这里改的是杆子。",[51,1599,1600],{"className":439,"code":1321,"language":441,"meta":57,"style":57},[59,1601,1602],{"__ignoreMap":57},[79,1603,1604],{"class":81,"line":82},[79,1605,1321],{"class":228},[19,1607,1608,1609,1611],{},"手动修改 ",[59,1610,1290],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[51,1613,1615],{"className":439,"code":1614,"language":441,"meta":57,"style":57},"total_reward = 0.0\n",[59,1616,1617],{"__ignoreMap":57},[79,1618,1619,1622,1624],{"class":81,"line":82},[79,1620,1621],{"class":228},"total_reward ",[79,1623,239],{"class":448},[79,1625,904],{"class":96},[19,1627,1628],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[51,1630,1632],{"className":439,"code":1631,"language":441,"meta":57,"style":57},"for step in range(1000):\n",[59,1633,1634],{"__ignoreMap":57},[79,1635,1636,1639,1641,1643,1645,1647,1649],{"class":81,"line":82},[79,1637,1638],{"class":448},"for",[79,1640,918],{"class":228},[79,1642,921],{"class":448},[79,1644,924],{"class":96},[79,1646,455],{"class":228},[79,1648,929],{"class":96},[79,1650,932],{"class":228},[19,1652,1653,1654,1657],{},"循环 1000 步。",[59,1655,1656],{},"step"," 是当前步数，从 0 到 999。",[51,1659,1661],{"className":439,"code":1660,"language":441,"meta":57,"style":57},"obs = get_observation(data)\n",[59,1662,1663],{"__ignoreMap":57},[79,1664,1665,1668,1670],{"class":81,"line":82},[79,1666,1667],{"class":228},"obs ",[79,1669,239],{"class":448},[79,1671,943],{"class":228},[19,1673,1674,1675,497],{},"读取当前状态，保存到 ",[59,1676,1481],{},[51,1678,1680],{"className":439,"code":1679,"language":441,"meta":57,"style":57},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[59,1681,1682,1694],{"__ignoreMap":57},[79,1683,1684,1686,1688,1690,1692],{"class":81,"line":82},[79,1685,1505],{"class":228},[79,1687,239],{"class":448},[79,1689,756],{"class":228},[79,1691,775],{"class":96},[79,1693,762],{"class":228},[79,1695,1696,1699,1701,1703,1705],{"class":81,"line":167},[79,1697,1698],{"class":228},"pole_angular_velocity ",[79,1700,239],{"class":448},[79,1702,756],{"class":228},[79,1704,970],{"class":96},[79,1706,762],{"class":228},[19,1708,1709,1710,1713,1714,497],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[59,1711,1712],{},"obs[3]","？因为 obs 的顺序是 ",[59,1715,1716],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[51,1718,1720],{"className":439,"code":1719,"language":441,"meta":57,"style":57},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[59,1721,1722],{"__ignoreMap":57},[79,1723,1724,1726,1728,1730,1732,1734,1736,1738,1740],{"class":81,"line":82},[79,1725,1337],{"class":228},[79,1727,239],{"class":448},[79,1729,988],{"class":96},[79,1731,467],{"class":448},[79,1733,481],{"class":228},[79,1735,995],{"class":448},[79,1737,998],{"class":96},[79,1739,467],{"class":448},[79,1741,1003],{"class":228},[19,1743,1744,1745,1748,1749,1752],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[59,1746,1747],{},"2.0"," 和 ",[59,1750,1751],{},"0.5"," 是人为设置的系数，不是固定公式。",[51,1754,1756],{"className":439,"code":1755,"language":441,"meta":57,"style":57},"action = np.clip(action, -1.0, 1.0)\n",[59,1757,1758],{"__ignoreMap":57},[79,1759,1760,1762,1764,1766,1768,1770,1772,1774],{"class":81,"line":82},[79,1761,1337],{"class":228},[79,1763,239],{"class":448},[79,1765,1013],{"class":228},[79,1767,478],{"class":448},[79,1769,458],{"class":96},[79,1771,1020],{"class":228},[79,1773,458],{"class":96},[79,1775,850],{"class":228},[19,1777,1778],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[51,1780,1781],{"className":439,"code":424,"language":441,"meta":57,"style":57},[59,1782,1783],{"__ignoreMap":57},[79,1784,1785,1788,1790,1792,1794],{"class":81,"line":82},[79,1786,1787],{"class":228},"data.ctrl[",[79,1789,759],{"class":96},[79,1791,877],{"class":228},[79,1793,239],{"class":448},[79,1795,1044],{"class":228},[19,1797,1798],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[51,1800,1802],{"className":439,"code":1801,"language":441,"meta":57,"style":57},"mujoco.mj_step(model, data)\n",[59,1803,1804],{"__ignoreMap":57},[79,1805,1806],{"class":81,"line":82},[79,1807,1801],{"class":228},[19,1809,1810,1811,1814],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[59,1812,1813],{},"data.ctrl[0]"," 计算小车和杆子的下一刻状态。",[51,1816,1818],{"className":439,"code":1817,"language":441,"meta":57,"style":57},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[59,1819,1820,1829],{"__ignoreMap":57},[79,1821,1822,1825,1827],{"class":81,"line":82},[79,1823,1824],{"class":228},"reward ",[79,1826,239],{"class":448},[79,1828,1066],{"class":228},[79,1830,1831,1833,1835],{"class":81,"line":167},[79,1832,1621],{"class":228},[79,1834,1075],{"class":448},[79,1836,1078],{"class":228},[19,1838,1839,1840,1842,1843,1846,1847,497],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[59,1841,1075],{}," 是简写，",[59,1844,1845],{},"total_reward += reward"," 等价于 ",[59,1848,1849],{},"total_reward = total_reward + reward",[51,1851,1853],{"className":439,"code":1852,"language":441,"meta":57,"style":57},"if step % 100 == 0:\n",[59,1854,1855],{"__ignoreMap":57},[79,1856,1857,1859,1861,1863,1865,1867,1869],{"class":81,"line":82},[79,1858,1210],{"class":448},[79,1860,918],{"class":228},[79,1862,1094],{"class":448},[79,1864,1097],{"class":96},[79,1866,1100],{"class":448},[79,1868,1103],{"class":96},[79,1870,745],{"class":228},[19,1872,1873,1875,1876,1879],{},[59,1874,1094],{}," 是取余数。",[59,1877,1878],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[51,1881,1883],{"className":439,"code":1882,"language":441,"meta":57,"style":57},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[59,1884,1885],{"__ignoreMap":57},[79,1886,1887,1890,1892,1894,1896,1898,1900,1902,1904,1906,1908,1910,1912,1914,1916,1918],{"class":81,"line":82},[79,1888,1889],{"class":96},"print",[79,1891,455],{"class":228},[79,1893,1116],{"class":89},[79,1895,1119],{"class":228},[79,1897,1122],{"class":89},[79,1899,1125],{"class":228},[79,1901,970],{"class":96},[79,1903,1130],{"class":228},[79,1905,1133],{"class":89},[79,1907,1020],{"class":228},[79,1909,1138],{"class":96},[79,1911,455],{"class":228},[79,1913,742],{"class":96},[79,1915,1145],{"class":228},[79,1917,970],{"class":96},[79,1919,1150],{"class":228},[19,1921,1922,1923,1926,1927,1930],{},"打印当前步数、观测和动作。",[59,1924,1925],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[59,1928,1929],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,1932,1934],{"id":1933},"_5运行结果说明","5.运行结果说明",[19,1936,1937],{},"观测向量:",[51,1939,1942],{"className":1940,"code":1941,"language":56,"meta":57},[54],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[59,1943,1941],{"__ignoreMap":57},[19,1945,1946],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,1948,1949],{},"每隔 100 步会打印一次：",[51,1951,1954],{"className":1952,"code":1953,"language":56,"meta":57},[54],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[59,1955,1953],{"__ignoreMap":57},[19,1957,1958],{},"重点观察：",[26,1960,1961,1967,1972],{},[29,1962,1963,1966],{},[59,1964,1965],{},"pole_angle"," 是否越来越大。",[29,1968,1969,1971],{},[59,1970,376],{}," 是否跑得太远。",[29,1973,1974,1975,1978,1979,497],{},"action 是否经常被 clip 到 ",[59,1976,1977],{},"-1"," 或 ",[59,1980,775],{},[19,1982,1983],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,1985,1987],{"id":1986},"_6验证步骤","6.验证步骤",[26,1989,1990,1996,1999,2006,2016,2022,2025],{},[29,1991,1992,1993,497],{},"把初始角度改为 ",[59,1994,1995],{},"data.qpos[1] = 0.3",[29,1997,1998],{},"重新运行，观察控制是否变差。",[29,2000,2001,2002,2005],{},"把 actuator ",[59,2003,2004],{},"gear"," 改小。",[29,2007,2008,2009,2012,2013,497],{},"打印 ",[59,2010,2011],{},"model.nq, model.nv, model.nu","，应为 ",[59,2014,2015],{},"2 2 1",[29,2017,2018,2019,2021],{},"把 reward 里的 ",[59,2020,1568],{}," 系数改大，观察总奖励变化。",[29,2023,2024],{},"把控制器改成反号，观察杆子是否更容易倒。",[29,2026,2027],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,2029,2031],{"id":2030},"_7常见错误与解决方案","7.常见错误与解决方案",[339,2033,2034],{"id":2034},"杆子方向和预期不一致",[19,2036,2037,2038,2041,2042,2045],{},"检查 ",[59,2039,2040],{},"axis=\"0 1 0\""," 和 capsule 的 ",[59,2043,2044],{},"fromto","，必要时用 viewer 可视化确认。",[339,2047,2048],{"id":2048},"控制器越控越倒",[19,2050,2051],{},"说明反馈符号可能反了，尝试:",[51,2053,2055],{"className":439,"code":2054,"language":441,"meta":57,"style":57},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[59,2056,2057],{"__ignoreMap":57},[79,2058,2059,2061,2063,2065,2067,2069,2071,2073,2075,2077],{"class":81,"line":82},[79,2060,1337],{"class":228},[79,2062,239],{"class":448},[79,2064,461],{"class":448},[79,2066,1747],{"class":96},[79,2068,467],{"class":448},[79,2070,481],{"class":228},[79,2072,478],{"class":448},[79,2074,998],{"class":96},[79,2076,467],{"class":448},[79,2078,1003],{"class":228},[339,2080,2081],{"id":2081},"小车飞走",[19,2083,2084,2085,2087,2088,2091],{},"降低 ",[59,2086,2004],{}," 或缩小 ",[59,2089,2090],{},"action"," 的 clip 范围。",[339,2093,2095,2097],{"id":2094},"obs3-为什么是杆子角速度",[59,2096,1712],{}," 为什么是杆子角速度",[19,2099,2100],{},"因为这个模型里：",[51,2102,2105],{"className":2103,"code":2104,"language":56,"meta":57},[54],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[59,2106,2104],{"__ignoreMap":57},[19,2108,398],{},[51,2110,2113],{"className":2111,"code":2112,"language":56,"meta":57},[54],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[59,2114,2112],{"__ignoreMap":57},[339,2116,2118],{"id":2117},"reward-变成负数是否错误","reward 变成负数是否错误",[19,2120,2121],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,2123,2125],{"id":2124},"_8本章小结","8.本章小结",[19,2127,2128],{},"一个控制任务通常包含：",[26,2130,2131,2134,2143,2149,2152],{},[29,2132,2133],{},"模型：Cartpole 的 body、joint、actuator。",[29,2135,2136,2137,2139,2140,2142],{},"观测：从 ",[59,2138,1290],{},"、",[59,2141,1294],{}," 里取状态。",[29,2144,2145,2146,497],{},"动作：写入 ",[59,2147,2148],{},"data.ctrl",[29,2150,2151],{},"奖励：根据任务目标打分。",[29,2153,2154],{},"循环：obs -> action -> step -> reward。",[19,2156,2157],{},"这就是后面 Gymnasium 环境的基本骨架。",[2159,2160,2161],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":57,"searchDepth":167,"depth":167,"links":2163},[2164,2165,2166,2171,2175,2176,2177,2185],{"id":16,"depth":167,"text":17},{"id":66,"depth":167,"text":67},{"id":203,"depth":167,"text":204,"children":2167},[2168,2169,2170],{"id":341,"depth":178,"text":342},{"id":416,"depth":178,"text":417},{"id":432,"depth":178,"text":433},{"id":509,"depth":167,"text":510,"children":2172},[2173,2174],{"id":1259,"depth":178,"text":1259},{"id":1407,"depth":178,"text":1407},{"id":1933,"depth":167,"text":1934},{"id":1986,"depth":167,"text":1987},{"id":2030,"depth":167,"text":2031,"children":2178},[2179,2180,2181,2182,2184],{"id":2034,"depth":178,"text":2034},{"id":2048,"depth":178,"text":2048},{"id":2081,"depth":178,"text":2081},{"id":2094,"depth":178,"text":2183},"obs[3] 为什么是杆子角速度",{"id":2117,"depth":178,"text":2118},{"id":2124,"depth":167,"text":2125},"md",{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":5,"description":57},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",[2193,7232,8337,9755,12714,14065,15553,16641,25396,25409,26002,26028,26152,26393,26458,26476,26489,26536,26659,26828,27027,27206,27411,27547,27642,27679,27692,28002,28740,29448,29469,30488,32118,32269,32282,32294,32589,52388,52403,52420,52453,55321,78666,94810,94831,94944,95065,95835,96498,96859,96897,97003,97103,97146,97172,97233,98885,98986,99011,99502,100002,101082,101365,102107,102609,102621,104584,106239,107727,109404,111321,112986,115008,118478,118910,119373,120122,123066,123414,123436,123792,127099,127111,127514,127537,127684,127851,128056,128357,128914,129571,131502,133100,133749,135243,136674,137909,139603,141355,143765,143881,144816,145027,145912,147147,147375,147388,148543,150955,153323,156644,159121,160765,162542,164555,167607,169787,172314,174508],{"id":2194,"title":2195,"body":2196,"description":57,"extension":2186,"meta":7227,"navigation":541,"path":7228,"seo":7229,"stem":7230,"__hash__":7231},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":2197,"toc":7199},[2198,2201,2205,2208,2212,2223,2227,2231,2234,2237,2240,2243,2246,2272,2276,2279,2282,2285,2288,2337,2341,2359,2361,2375,2378,2386,2389,3238,3245,3262,3266,3352,3356,3362,3448,3452,3490,3494,3558,3562,3566,3573,3584,3588,3593,3597,3602,3606,3611,3615,3619,3624,3874,3879,4017,4022,4277,4280,4288,4292,4297,4400,4403,4700,4709,4810,4813,4816,4819,4822,5082,5087,5226,5229,5407,5410,5538,5541,5693,5697,5702,5705,5716,5724,5727,5833,5837,5841,5846,5896,5901,5906,5930,5935,5988,5991,5996,6171,6176,6461,6466,6862,6866,6871,6928,6933,6941,6944,7084,7087,7196],[10,2199,2195],{"id":2200},"_1基础入门",[14,2202,2204],{"id":2203},"_11注释","1.1注释",[19,2206,2207],{},"\u002F\u002F或者\u002F* *\u002F",[14,2209,2211],{"id":2210},"_12命名","1.2命名",[26,2213,2214,2217,2220],{},[29,2215,2216],{},"字母数字下划线",[29,2218,2219],{},"开头必须是字母或_",[29,2221,2222],{},"不能使用关键词",[14,2224,2226],{"id":2225},"_13数据类型","1.3数据类型",[339,2228,2230],{"id":2229},"_131整形","1.3.1整形",[19,2232,2233],{},"short 短整形 2",[19,2235,2236],{},"int 整形 4",[19,2238,2239],{},"long 长整形 win4 linux32位4 linux64位8",[19,2241,2242],{},"long long 长长整形 8",[19,2244,2245],{},"利用sizeof可以求数据类型占用的内存空间大小",[51,2247,2251],{"className":2248,"code":2249,"language":2250,"meta":57,"style":57},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[59,2252,2253,2265],{"__ignoreMap":57},[79,2254,2255,2258,2260,2263],{"class":81,"line":82},[79,2256,2257],{"class":448},"sizeof",[79,2259,455],{"class":228},[79,2261,2262],{"class":448},"int",[79,2264,850],{"class":228},[79,2266,2267,2269],{"class":81,"line":167},[79,2268,2257],{"class":448},[79,2270,2271],{"class":228},"(num)\n",[339,2273,2275],{"id":2274},"_132浮点型","1.3.2浮点型",[19,2277,2278],{},"float 单精度 4节 7位有效数字",[19,2280,2281],{},"double 双精度 8节 15-16有效数字",[19,2283,2284],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,2286,2287],{},"注意点：",[51,2289,2291],{"className":2248,"code":2290,"language":2250,"meta":57,"style":57},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[59,2292,2293,2315],{"__ignoreMap":57},[79,2294,2295,2297,2300,2302,2305,2308,2311],{"class":81,"line":82},[79,2296,742],{"class":448},[79,2298,2299],{"class":228}," f1",[79,2301,239],{"class":448},[79,2303,2304],{"class":96},"3.14",[79,2306,2307],{"class":448},"f",[79,2309,2310],{"class":228},";",[79,2312,2314],{"class":2313},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[79,2316,2317,2319,2322,2324,2326,2329,2332,2334],{"class":81,"line":167},[79,2318,742],{"class":448},[79,2320,2321],{"class":228}," f2",[79,2323,239],{"class":448},[79,2325,970],{"class":96},[79,2327,2328],{"class":448},"e",[79,2330,2331],{"class":96},"2",[79,2333,2310],{"class":228},[79,2335,2336],{"class":2313}," \u002F\u002F科学记数法\n",[339,2338,2340],{"id":2339},"_133字符型","1.3.3字符型",[51,2342,2344],{"className":2248,"code":2343,"language":2250,"meta":57,"style":57},"char ch='a'\n",[59,2345,2346],{"__ignoreMap":57},[79,2347,2348,2351,2354,2356],{"class":81,"line":82},[79,2349,2350],{"class":448},"char",[79,2352,2353],{"class":228}," ch",[79,2355,239],{"class":448},[79,2357,2358],{"class":89},"'a'\n",[19,2360,2287],{},[26,2362,2363,2366,2369,2372],{},[29,2364,2365],{},"在显示字符型变量时，只能单引号，双引号x",[29,2367,2368],{},"单引号内只能一个字符，不能字符串",[29,2370,2371],{},"c和c++字符型变量只占用一个字符",[29,2373,2374],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,2376,2377],{},"ASCII码大致由以下两部分组成：",[26,2379,2380,2383],{},[29,2381,2382],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[29,2384,2385],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,2387,2388],{},"ASCII码表格：",[347,2390,2391,2432],{},[350,2392,2393],{},[353,2394,2395,2402,2407,2411,2416,2420,2424,2428],{},[356,2396,2397,2401],{},[2398,2399,2400],"strong",{},"ASCII","值",[356,2403,2404],{},[2398,2405,2406],{},"控制字符",[356,2408,2409,2401],{},[2398,2410,2400],{},[356,2412,2413],{},[2398,2414,2415],{},"字符",[356,2417,2418,2401],{},[2398,2419,2400],{},[356,2421,2422],{},[2398,2423,2415],{},[356,2425,2426,2401],{},[2398,2427,2400],{},[356,2429,2430],{},[2398,2431,2415],{},[367,2433,2434,2458,2483,2508,2533,2559,2583,2608,2634,2659,2685,2710,2735,2760,2785,2811,2837,2861,2886,2911,2936,2961,2986,3011,3036,3061,3086,3112,3137,3161,3186,3212],{},[353,2435,2436,2438,2441,2444,2447,2450,2453,2456],{},[372,2437,759],{},[372,2439,2440],{},"NUT",[372,2442,2443],{},"32",[372,2445,2446],{},"(space)",[372,2448,2449],{},"64",[372,2451,2452],{},"@",[372,2454,2455],{},"96",[372,2457,2139],{},[353,2459,2460,2462,2465,2468,2471,2474,2477,2480],{},[372,2461,775],{},[372,2463,2464],{},"SOH",[372,2466,2467],{},"33",[372,2469,2470],{},"!",[372,2472,2473],{},"65",[372,2475,2476],{},"A",[372,2478,2479],{},"97",[372,2481,2482],{},"a",[353,2484,2485,2487,2490,2493,2496,2499,2502,2505],{},[372,2486,2331],{},[372,2488,2489],{},"STX",[372,2491,2492],{},"34",[372,2494,2495],{},"\"",[372,2497,2498],{},"66",[372,2500,2501],{},"B",[372,2503,2504],{},"98",[372,2506,2507],{},"b",[353,2509,2510,2512,2515,2518,2521,2524,2527,2530],{},[372,2511,970],{},[372,2513,2514],{},"ETX",[372,2516,2517],{},"35",[372,2519,2520],{},"#",[372,2522,2523],{},"67",[372,2525,2526],{},"C",[372,2528,2529],{},"99",[372,2531,2532],{},"c",[353,2534,2535,2538,2541,2544,2547,2550,2553,2556],{},[372,2536,2537],{},"4",[372,2539,2540],{},"EOT",[372,2542,2543],{},"36",[372,2545,2546],{},"$",[372,2548,2549],{},"68",[372,2551,2552],{},"D",[372,2554,2555],{},"100",[372,2557,2558],{},"d",[353,2560,2561,2564,2567,2570,2572,2575,2578,2581],{},[372,2562,2563],{},"5",[372,2565,2566],{},"ENQ",[372,2568,2569],{},"37",[372,2571,1094],{},[372,2573,2574],{},"69",[372,2576,2577],{},"E",[372,2579,2580],{},"101",[372,2582,2328],{},[353,2584,2585,2588,2591,2594,2597,2600,2603,2606],{},[372,2586,2587],{},"6",[372,2589,2590],{},"ACK",[372,2592,2593],{},"38",[372,2595,2596],{},"&",[372,2598,2599],{},"70",[372,2601,2602],{},"F",[372,2604,2605],{},"102",[372,2607,2307],{},[353,2609,2610,2613,2616,2619,2622,2625,2628,2631],{},[372,2611,2612],{},"7",[372,2614,2615],{},"BEL",[372,2617,2618],{},"39",[372,2620,2621],{},",",[372,2623,2624],{},"71",[372,2626,2627],{},"G",[372,2629,2630],{},"103",[372,2632,2633],{},"g",[353,2635,2636,2639,2642,2645,2647,2650,2653,2656],{},[372,2637,2638],{},"8",[372,2640,2641],{},"BS",[372,2643,2644],{},"40",[372,2646,455],{},[372,2648,2649],{},"72",[372,2651,2652],{},"H",[372,2654,2655],{},"104",[372,2657,2658],{},"h",[353,2660,2661,2664,2667,2670,2673,2676,2679,2682],{},[372,2662,2663],{},"9",[372,2665,2666],{},"HT",[372,2668,2669],{},"41",[372,2671,2672],{},")",[372,2674,2675],{},"73",[372,2677,2678],{},"I",[372,2680,2681],{},"105",[372,2683,2684],{},"i",[353,2686,2687,2690,2693,2696,2698,2701,2704,2707],{},[372,2688,2689],{},"10",[372,2691,2692],{},"LF",[372,2694,2695],{},"42",[372,2697,473],{},[372,2699,2700],{},"74",[372,2702,2703],{},"J",[372,2705,2706],{},"106",[372,2708,2709],{},"j",[353,2711,2712,2715,2718,2721,2723,2726,2729,2732],{},[372,2713,2714],{},"11",[372,2716,2717],{},"VT",[372,2719,2720],{},"43",[372,2722,995],{},[372,2724,2725],{},"75",[372,2727,2728],{},"K",[372,2730,2731],{},"107",[372,2733,2734],{},"k",[353,2736,2737,2740,2743,2746,2748,2751,2754,2757],{},[372,2738,2739],{},"12",[372,2741,2742],{},"FF",[372,2744,2745],{},"44",[372,2747,2621],{},[372,2749,2750],{},"76",[372,2752,2753],{},"L",[372,2755,2756],{},"108",[372,2758,2759],{},"l",[353,2761,2762,2765,2768,2771,2773,2776,2779,2782],{},[372,2763,2764],{},"13",[372,2766,2767],{},"CR",[372,2769,2770],{},"45",[372,2772,478],{},[372,2774,2775],{},"77",[372,2777,2778],{},"M",[372,2780,2781],{},"109",[372,2783,2784],{},"m",[353,2786,2787,2790,2793,2796,2799,2802,2805,2808],{},[372,2788,2789],{},"14",[372,2791,2792],{},"SO",[372,2794,2795],{},"46",[372,2797,2798],{},".",[372,2800,2801],{},"78",[372,2803,2804],{},"N",[372,2806,2807],{},"110",[372,2809,2810],{},"n",[353,2812,2813,2816,2819,2822,2825,2828,2831,2834],{},[372,2814,2815],{},"15",[372,2817,2818],{},"SI",[372,2820,2821],{},"47",[372,2823,2824],{},"\u002F",[372,2826,2827],{},"79",[372,2829,2830],{},"O",[372,2832,2833],{},"111",[372,2835,2836],{},"o",[353,2838,2839,2842,2845,2848,2850,2853,2856,2859],{},[372,2840,2841],{},"16",[372,2843,2844],{},"DLE",[372,2846,2847],{},"48",[372,2849,759],{},[372,2851,2852],{},"80",[372,2854,2855],{},"P",[372,2857,2858],{},"112",[372,2860,19],{},[353,2862,2863,2866,2869,2872,2874,2877,2880,2883],{},[372,2864,2865],{},"17",[372,2867,2868],{},"DCI",[372,2870,2871],{},"49",[372,2873,775],{},[372,2875,2876],{},"81",[372,2878,2879],{},"Q",[372,2881,2882],{},"113",[372,2884,2885],{},"q",[353,2887,2888,2891,2894,2897,2899,2902,2905,2908],{},[372,2889,2890],{},"18",[372,2892,2893],{},"DC2",[372,2895,2896],{},"50",[372,2898,2331],{},[372,2900,2901],{},"82",[372,2903,2904],{},"R",[372,2906,2907],{},"114",[372,2909,2910],{},"r",[353,2912,2913,2916,2919,2922,2924,2927,2930,2933],{},[372,2914,2915],{},"19",[372,2917,2918],{},"DC3",[372,2920,2921],{},"51",[372,2923,970],{},[372,2925,2926],{},"83",[372,2928,2929],{},"S",[372,2931,2932],{},"115",[372,2934,2935],{},"s",[353,2937,2938,2941,2944,2947,2949,2952,2955,2958],{},[372,2939,2940],{},"20",[372,2942,2943],{},"DC4",[372,2945,2946],{},"52",[372,2948,2537],{},[372,2950,2951],{},"84",[372,2953,2954],{},"T",[372,2956,2957],{},"116",[372,2959,2960],{},"t",[353,2962,2963,2966,2969,2972,2974,2977,2980,2983],{},[372,2964,2965],{},"21",[372,2967,2968],{},"NAK",[372,2970,2971],{},"53",[372,2973,2563],{},[372,2975,2976],{},"85",[372,2978,2979],{},"U",[372,2981,2982],{},"117",[372,2984,2985],{},"u",[353,2987,2988,2991,2994,2997,2999,3002,3005,3008],{},[372,2989,2990],{},"22",[372,2992,2993],{},"SYN",[372,2995,2996],{},"54",[372,2998,2587],{},[372,3000,3001],{},"86",[372,3003,3004],{},"V",[372,3006,3007],{},"118",[372,3009,3010],{},"v",[353,3012,3013,3016,3019,3022,3024,3027,3030,3033],{},[372,3014,3015],{},"23",[372,3017,3018],{},"TB",[372,3020,3021],{},"55",[372,3023,2612],{},[372,3025,3026],{},"87",[372,3028,3029],{},"W",[372,3031,3032],{},"119",[372,3034,3035],{},"w",[353,3037,3038,3041,3044,3047,3049,3052,3055,3058],{},[372,3039,3040],{},"24",[372,3042,3043],{},"CAN",[372,3045,3046],{},"56",[372,3048,2638],{},[372,3050,3051],{},"88",[372,3053,3054],{},"X",[372,3056,3057],{},"120",[372,3059,3060],{},"x",[353,3062,3063,3066,3069,3072,3074,3077,3080,3083],{},[372,3064,3065],{},"25",[372,3067,3068],{},"EM",[372,3070,3071],{},"57",[372,3073,2663],{},[372,3075,3076],{},"89",[372,3078,3079],{},"Y",[372,3081,3082],{},"121",[372,3084,3085],{},"y",[353,3087,3088,3091,3094,3097,3100,3103,3106,3109],{},[372,3089,3090],{},"26",[372,3092,3093],{},"SUB",[372,3095,3096],{},"58",[372,3098,3099],{},":",[372,3101,3102],{},"90",[372,3104,3105],{},"Z",[372,3107,3108],{},"122",[372,3110,3111],{},"z",[353,3113,3114,3117,3120,3123,3125,3128,3131,3134],{},[372,3115,3116],{},"27",[372,3118,3119],{},"ESC",[372,3121,3122],{},"59",[372,3124,2310],{},[372,3126,3127],{},"91",[372,3129,3130],{},"[",[372,3132,3133],{},"123",[372,3135,3136],{},"{",[353,3138,3139,3142,3145,3148,3150,3153,3155,3158],{},[372,3140,3141],{},"28",[372,3143,3144],{},"FS",[372,3146,3147],{},"60",[372,3149,229],{},[372,3151,3152],{},"92",[372,3154,2824],{},[372,3156,3157],{},"124",[372,3159,3160],{},"|",[353,3162,3163,3166,3169,3172,3174,3177,3180,3183],{},[372,3164,3165],{},"29",[372,3167,3168],{},"GS",[372,3170,3171],{},"61",[372,3173,239],{},[372,3175,3176],{},"93",[372,3178,3179],{},"]",[372,3181,3182],{},"125",[372,3184,3185],{},"}",[353,3187,3188,3191,3194,3197,3200,3203,3206,3209],{},[372,3189,3190],{},"30",[372,3192,3193],{},"RS",[372,3195,3196],{},"62",[372,3198,3199],{},">",[372,3201,3202],{},"94",[372,3204,3205],{},"^",[372,3207,3208],{},"126",[372,3210,3211],{},"`",[353,3213,3214,3217,3220,3223,3226,3229,3232,3235],{},[372,3215,3216],{},"31",[372,3218,3219],{},"US",[372,3221,3222],{},"63",[372,3224,3225],{},"?",[372,3227,3228],{},"95",[372,3230,3231],{},"_",[372,3233,3234],{},"127",[372,3236,3237],{},"DEL",[19,3239,3240,3241,3244],{},"ASCII 码大致由以下",[2398,3242,3243],{},"两部分组","成：",[3246,3247,3248,3255],"ul",{},[29,3249,3250,3251,3254],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[2398,3252,3253],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[29,3256,3257,3258,3261],{},"ASCII 打印字符：数字 ",[2398,3259,3260],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[339,3263,3265],{"id":3264},"_134转义字符","1.3.4转义字符",[51,3267,3269],{"className":2248,"code":3268,"language":2250,"meta":57,"style":57},"\u002F\u002F换行符\ncout \u003C\u003C\"hello world\u002Fn\"; \u002F\u002F就等同于如下：\ncout \u003C\u003C\"hello world\"\u003C\u003Cendl;\n\u002F\u002F反斜杠\ncout \u003C\u003C\"\u002F\u002F\"\u003C\u003Cendl;\n\u002F\u002F水平制表符\ncout \u003C\u003C\"aaaa\\thelloworld\"\u003C\u003Cendl; \u002F\u002F输出窗口时有对齐效果\n",[59,3270,3271,3276,3292,3306,3311,3324,3329],{"__ignoreMap":57},[79,3272,3273],{"class":81,"line":82},[79,3274,3275],{"class":2313},"\u002F\u002F换行符\n",[79,3277,3278,3281,3284,3287,3289],{"class":81,"line":167},[79,3279,3280],{"class":228},"cout ",[79,3282,3283],{"class":448},"\u003C\u003C",[79,3285,3286],{"class":89},"\"hello world\u002Fn\"",[79,3288,2310],{"class":228},[79,3290,3291],{"class":2313}," \u002F\u002F就等同于如下：\n",[79,3293,3294,3296,3298,3301,3303],{"class":81,"line":178},[79,3295,3280],{"class":228},[79,3297,3283],{"class":448},[79,3299,3300],{"class":89},"\"hello world\"",[79,3302,3283],{"class":448},[79,3304,3305],{"class":228},"endl;\n",[79,3307,3308],{"class":81,"line":545},[79,3309,3310],{"class":2313},"\u002F\u002F反斜杠\n",[79,3312,3313,3315,3317,3320,3322],{"class":81,"line":550},[79,3314,3280],{"class":228},[79,3316,3283],{"class":448},[79,3318,3319],{"class":89},"\"\u002F\u002F\"",[79,3321,3283],{"class":448},[79,3323,3305],{"class":228},[79,3325,3326],{"class":81,"line":562},[79,3327,3328],{"class":2313},"\u002F\u002F水平制表符\n",[79,3330,3331,3333,3335,3338,3341,3344,3346,3349],{"class":81,"line":568},[79,3332,3280],{"class":228},[79,3334,3283],{"class":448},[79,3336,3337],{"class":89},"\"aaaa",[79,3339,3340],{"class":96},"\\t",[79,3342,3343],{"class":89},"helloworld\"",[79,3345,3283],{"class":448},[79,3347,3348],{"class":228},"endl;",[79,3350,3351],{"class":2313}," \u002F\u002F输出窗口时有对齐效果\n",[339,3353,3355],{"id":3354},"_135字符串型","1.3.5字符串型",[19,3357,3358,3359,3361],{},"char 变量名",[79,3360],{},"=\"字符串值\"",[51,3363,3365],{"className":2248,"code":3364,"language":2250,"meta":57,"style":57},"\u002F\u002Fc风格字符串\n\u002F\u002F注意事项：\n\u002F\u002F1.char字符串名[]\n\u002F\u002F2.等号后面要用双引号，包含起来字符串\nchar str[]=\"hello world\";\ncout \u003C\u003Cstr\u003C\u003Cendl;\n\u002F\u002Fc++风格字符串\n\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\nstring str2=\"hello world\";\ncout \u003C\u003Cstr2\u003C\u003Cendl;\n",[59,3366,3367,3372,3377,3382,3387,3401,3414,3419,3424,3435],{"__ignoreMap":57},[79,3368,3369],{"class":81,"line":82},[79,3370,3371],{"class":2313},"\u002F\u002Fc风格字符串\n",[79,3373,3374],{"class":81,"line":167},[79,3375,3376],{"class":2313},"\u002F\u002F注意事项：\n",[79,3378,3379],{"class":81,"line":178},[79,3380,3381],{"class":2313},"\u002F\u002F1.char字符串名[]\n",[79,3383,3384],{"class":81,"line":545},[79,3385,3386],{"class":2313},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[79,3388,3389,3391,3394,3396,3398],{"class":81,"line":550},[79,3390,2350],{"class":448},[79,3392,3393],{"class":228}," str[]",[79,3395,239],{"class":448},[79,3397,3300],{"class":89},[79,3399,3400],{"class":228},";\n",[79,3402,3403,3405,3407,3410,3412],{"class":81,"line":562},[79,3404,3280],{"class":228},[79,3406,3283],{"class":448},[79,3408,3409],{"class":228},"str",[79,3411,3283],{"class":448},[79,3413,3305],{"class":228},[79,3415,3416],{"class":81,"line":568},[79,3417,3418],{"class":2313},"\u002F\u002Fc++风格字符串\n",[79,3420,3421],{"class":81,"line":574},[79,3422,3423],{"class":2313},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[79,3425,3426,3429,3431,3433],{"class":81,"line":579},[79,3427,3428],{"class":228},"string str2",[79,3430,239],{"class":448},[79,3432,3300],{"class":89},[79,3434,3400],{"class":228},[79,3436,3437,3439,3441,3444,3446],{"class":81,"line":585},[79,3438,3280],{"class":228},[79,3440,3283],{"class":448},[79,3442,3443],{"class":228},"str2",[79,3445,3283],{"class":448},[79,3447,3305],{"class":228},[339,3449,3451],{"id":3450},"_136布尔类型bool","1.3.6布尔类型bool",[51,3453,3455],{"className":2248,"code":3454,"language":2250,"meta":57,"style":57},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[59,3456,3457,3472],{"__ignoreMap":57},[79,3458,3459,3462,3465,3467,3470],{"class":81,"line":82},[79,3460,3461],{"class":448},"bool",[79,3463,3464],{"class":228}," flag",[79,3466,239],{"class":448},[79,3468,3469],{"class":96},"true",[79,3471,3400],{"class":228},[79,3473,3474,3477,3480,3483,3485,3487],{"class":81,"line":167},[79,3475,3476],{"class":228},"cout",[79,3478,3479],{"class":448},"\u003C\u003Csizeof",[79,3481,3482],{"class":228},"(flag)",[79,3484,3283],{"class":448},[79,3486,3348],{"class":228},[79,3488,3489],{"class":2313}," \u002F\u002F查看布尔占内存空间\n",[14,3491,3493],{"id":3492},"_14键盘输入cin","1.4键盘输入cin",[51,3495,3497],{"className":2248,"code":3496,"language":2250,"meta":57,"style":57},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[59,3498,3499,3512,3529,3540],{"__ignoreMap":57},[79,3500,3501,3503,3506,3508,3510],{"class":81,"line":82},[79,3502,2262],{"class":448},[79,3504,3505],{"class":228}," a",[79,3507,239],{"class":448},[79,3509,759],{"class":96},[79,3511,3400],{"class":228},[79,3513,3514,3516,3518,3521,3523,3525,3527],{"class":81,"line":167},[79,3515,3476],{"class":228},[79,3517,3283],{"class":448},[79,3519,3520],{"class":89},"\"请给整型变量a赋值\"",[79,3522,3283],{"class":448},[79,3524,2482],{"class":228},[79,3526,3283],{"class":448},[79,3528,3305],{"class":228},[79,3530,3531,3534,3537],{"class":81,"line":178},[79,3532,3533],{"class":228},"cin ",[79,3535,3536],{"class":448},">>",[79,3538,3539],{"class":228}," a;\n",[79,3541,3542,3544,3546,3549,3552,3554,3556],{"class":81,"line":545},[79,3543,3280],{"class":228},[79,3545,3283],{"class":448},[79,3547,3548],{"class":89}," \"整型变量a=\"",[79,3550,3551],{"class":448}," \u003C\u003C",[79,3553,2482],{"class":228},[79,3555,3283],{"class":448},[79,3557,3305],{"class":228},[14,3559,3561],{"id":3560},"_15运算符","1.5运算符",[339,3563,3565],{"id":3564},"_151算术运算符","1.5.1算术运算符",[19,3567,3568,3572],{},[3569,3570],"img",{"alt":57,"src":3571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[26,3574,3575,3578,3581],{},[29,3576,3577],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[29,3579,3580],{},"两个小数不可以做取模运算",[29,3582,3583],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[339,3585,3587],{"id":3586},"_152赋值运算符","1.5.2赋值运算符",[19,3589,3590],{},[3569,3591],{"alt":57,"src":3592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[339,3594,3596],{"id":3595},"_153比较运算符","1.5.3比较运算符",[19,3598,3599],{},[3569,3600],{"alt":57,"src":3601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[339,3603,3605],{"id":3604},"_154逻辑运算符","1.5.4逻辑运算符",[19,3607,3608],{},[3569,3609],{"alt":57,"src":3610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,3612,3614],{"id":3613},"_16程序流程结构","1.6程序流程结构",[339,3616,3618],{"id":3617},"_161选择结构","1.6.1选择结构",[26,3620,3621],{},[29,3622,3623],{},"if语句\n单行、多行、多条件if语句",[51,3625,3627],{"className":2248,"code":3626,"language":2250,"meta":57,"style":57},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\nif(score>600)\n{\n    cout\u003C\u003C'这是单行if语句'\u003C\u003Cendl;\n}\n\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\ncin >> score\nif(score\u003C=600)\n{\n    cout>>\"小于等于600\"\u003C\u003Cendl;\n}\nelse\n{\n    cout>>\"大于600\">>endl;\n}\n\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\nif (0\u003Cnum\u003C100)\n{\n    cout\u003C\u003C\"小于100\"\u003C\u003Cendl;\n}\nelse if (nmu>=100&&num\u003C200)\n{\n    cout\u003C\u003C\"不小于100且小于200\"\u003C\u003Cendl; \u002F\u002F可以无限else if,python中是elif：\n}\nelse\n{\n    cout\u003C\u003C\"不小于200\"\u003C\u003Cendl;\n}\n\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[59,3628,3629,3634,3648,3653,3667,3672,3677,3686,3699,3703,3716,3720,3725,3729,3742,3746,3751,3771,3775,3788,3792,3820,3824,3840,3844,3848,3852,3865,3869],{"__ignoreMap":57},[79,3630,3631],{"class":81,"line":82},[79,3632,3633],{"class":2313},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[79,3635,3636,3638,3641,3643,3646],{"class":81,"line":167},[79,3637,1210],{"class":448},[79,3639,3640],{"class":228},"(score",[79,3642,3199],{"class":448},[79,3644,3645],{"class":96},"600",[79,3647,850],{"class":228},[79,3649,3650],{"class":81,"line":178},[79,3651,3652],{"class":228},"{\n",[79,3654,3655,3658,3660,3663,3665],{"class":81,"line":545},[79,3656,3657],{"class":228},"    cout",[79,3659,3283],{"class":448},[79,3661,3662],{"class":89},"'这是单行if语句'",[79,3664,3283],{"class":448},[79,3666,3305],{"class":228},[79,3668,3669],{"class":81,"line":550},[79,3670,3671],{"class":228},"}\n",[79,3673,3674],{"class":81,"line":562},[79,3675,3676],{"class":2313},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[79,3678,3679,3681,3683],{"class":81,"line":568},[79,3680,3533],{"class":228},[79,3682,3536],{"class":448},[79,3684,3685],{"class":228}," score\n",[79,3687,3688,3690,3692,3695,3697],{"class":81,"line":574},[79,3689,1210],{"class":448},[79,3691,3640],{"class":228},[79,3693,3694],{"class":448},"\u003C=",[79,3696,3645],{"class":96},[79,3698,850],{"class":228},[79,3700,3701],{"class":81,"line":579},[79,3702,3652],{"class":228},[79,3704,3705,3707,3709,3712,3714],{"class":81,"line":585},[79,3706,3657],{"class":228},[79,3708,3536],{"class":448},[79,3710,3711],{"class":89},"\"小于等于600\"",[79,3713,3283],{"class":448},[79,3715,3305],{"class":228},[79,3717,3718],{"class":81,"line":591},[79,3719,3671],{"class":228},[79,3721,3722],{"class":81,"line":596},[79,3723,3724],{"class":448},"else\n",[79,3726,3727],{"class":81,"line":602},[79,3728,3652],{"class":228},[79,3730,3731,3733,3735,3738,3740],{"class":81,"line":608},[79,3732,3657],{"class":228},[79,3734,3536],{"class":448},[79,3736,3737],{"class":89},"\"大于600\"",[79,3739,3536],{"class":448},[79,3741,3305],{"class":228},[79,3743,3744],{"class":81,"line":614},[79,3745,3671],{"class":228},[79,3747,3748],{"class":81,"line":619},[79,3749,3750],{"class":2313},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[79,3752,3753,3755,3758,3760,3762,3765,3767,3769],{"class":81,"line":625},[79,3754,1210],{"class":448},[79,3756,3757],{"class":228}," (",[79,3759,759],{"class":96},[79,3761,229],{"class":448},[79,3763,3764],{"class":228},"num",[79,3766,229],{"class":448},[79,3768,2555],{"class":96},[79,3770,850],{"class":228},[79,3772,3773],{"class":81,"line":631},[79,3774,3652],{"class":228},[79,3776,3777,3779,3781,3784,3786],{"class":81,"line":637},[79,3778,3657],{"class":228},[79,3780,3283],{"class":448},[79,3782,3783],{"class":89},"\"小于100\"",[79,3785,3283],{"class":448},[79,3787,3305],{"class":228},[79,3789,3790],{"class":81,"line":643},[79,3791,3671],{"class":228},[79,3793,3794,3797,3800,3803,3806,3808,3811,3813,3815,3818],{"class":81,"line":649},[79,3795,3796],{"class":448},"else",[79,3798,3799],{"class":448}," if",[79,3801,3802],{"class":228}," (nmu",[79,3804,3805],{"class":448},">=",[79,3807,2555],{"class":96},[79,3809,3810],{"class":448},"&&",[79,3812,3764],{"class":228},[79,3814,229],{"class":448},[79,3816,3817],{"class":96},"200",[79,3819,850],{"class":228},[79,3821,3822],{"class":81,"line":655},[79,3823,3652],{"class":228},[79,3825,3826,3828,3830,3833,3835,3837],{"class":81,"line":660},[79,3827,3657],{"class":228},[79,3829,3283],{"class":448},[79,3831,3832],{"class":89},"\"不小于100且小于200\"",[79,3834,3283],{"class":448},[79,3836,3348],{"class":228},[79,3838,3839],{"class":2313}," \u002F\u002F可以无限else if,python中是elif：\n",[79,3841,3842],{"class":81,"line":666},[79,3843,3671],{"class":228},[79,3845,3846],{"class":81,"line":672},[79,3847,3724],{"class":448},[79,3849,3850],{"class":81,"line":678},[79,3851,3652],{"class":228},[79,3853,3854,3856,3858,3861,3863],{"class":81,"line":684},[79,3855,3657],{"class":228},[79,3857,3283],{"class":448},[79,3859,3860],{"class":89},"\"不小于200\"",[79,3862,3283],{"class":448},[79,3864,3305],{"class":228},[79,3866,3867],{"class":81,"line":690},[79,3868,3671],{"class":228},[79,3870,3871],{"class":81,"line":695},[79,3872,3873],{"class":2313},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[26,3875,3876],{"start":167},[29,3877,3878],{},"三目运算符",[51,3880,3882],{"className":2248,"code":3881,"language":2250,"meta":57,"style":57},"\u002F\u002F创建三个变量a,b,c\n\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\nint a=20,b=10,c=0;\nc=(a>b?a:b)\ncout\u003C\u003C\"c=\"\u003C\u003Cc\u003C\u003Cendl;\n\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n(a>b?a:b)=100;\ncout\u003C\u003Ca\u003C\u003Cendl; \u002F\u002F100  a是大于b的，将100赋值给了a\ncout\u003C\u003Cb\u003C\u003Cendl; \u002F\u002F10   a>b,b还是原值\n",[59,3883,3884,3889,3894,3920,3942,3959,3964,3987,4002],{"__ignoreMap":57},[79,3885,3886],{"class":81,"line":82},[79,3887,3888],{"class":2313},"\u002F\u002F创建三个变量a,b,c\n",[79,3890,3891],{"class":81,"line":167},[79,3892,3893],{"class":2313},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[79,3895,3896,3898,3900,3902,3904,3907,3909,3911,3914,3916,3918],{"class":81,"line":178},[79,3897,2262],{"class":448},[79,3899,3505],{"class":228},[79,3901,239],{"class":448},[79,3903,2940],{"class":96},[79,3905,3906],{"class":228},",b",[79,3908,239],{"class":448},[79,3910,2689],{"class":96},[79,3912,3913],{"class":228},",c",[79,3915,239],{"class":448},[79,3917,759],{"class":96},[79,3919,3400],{"class":228},[79,3921,3922,3924,3926,3929,3931,3933,3935,3937,3939],{"class":81,"line":545},[79,3923,2532],{"class":228},[79,3925,239],{"class":448},[79,3927,3928],{"class":228},"(a",[79,3930,3199],{"class":448},[79,3932,2507],{"class":228},[79,3934,3225],{"class":448},[79,3936,2482],{"class":228},[79,3938,3099],{"class":448},[79,3940,3941],{"class":228},"b)\n",[79,3943,3944,3946,3948,3951,3953,3955,3957],{"class":81,"line":550},[79,3945,3476],{"class":228},[79,3947,3283],{"class":448},[79,3949,3950],{"class":89},"\"c=\"",[79,3952,3283],{"class":448},[79,3954,2532],{"class":228},[79,3956,3283],{"class":448},[79,3958,3305],{"class":228},[79,3960,3961],{"class":81,"line":562},[79,3962,3963],{"class":2313},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[79,3965,3966,3968,3970,3972,3974,3976,3978,3981,3983,3985],{"class":81,"line":568},[79,3967,3928],{"class":228},[79,3969,3199],{"class":448},[79,3971,2507],{"class":228},[79,3973,3225],{"class":448},[79,3975,2482],{"class":228},[79,3977,3099],{"class":448},[79,3979,3980],{"class":228},"b)",[79,3982,239],{"class":448},[79,3984,2555],{"class":96},[79,3986,3400],{"class":228},[79,3988,3989,3991,3993,3995,3997,3999],{"class":81,"line":574},[79,3990,3476],{"class":228},[79,3992,3283],{"class":448},[79,3994,2482],{"class":228},[79,3996,3283],{"class":448},[79,3998,3348],{"class":228},[79,4000,4001],{"class":2313}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[79,4003,4004,4006,4008,4010,4012,4014],{"class":81,"line":579},[79,4005,3476],{"class":228},[79,4007,3283],{"class":448},[79,4009,2507],{"class":228},[79,4011,3283],{"class":448},[79,4013,3348],{"class":228},[79,4015,4016],{"class":2313}," \u002F\u002F10   a>b,b还是原值\n",[26,4018,4019],{"start":178},[29,4020,4021],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[51,4023,4025],{"className":2248,"code":4024,"language":2250,"meta":57,"style":57},"\u002F\u002F案例-电影打分\n#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    int score=0;\n    cout\u003C\u003C\"电影打分：\"\u003C\u003Cendl;\n    cin>>score;\n    switch(score)\n    {\n        case 10:cout\u003C\u003C\"经典\"\u003C\u003Cendl;break;\n        case 9:cout\u003C\u003C\"经典\"\u003C\u003Cendl;break;\n        case 8:cout\u003C\u003C\"非常好\"\u003C\u003Cendl;break;\n        case 7:cout\u003C\u003C\"非常好\"\u003C\u003Cendl;break;\n        case 6:cout\u003C\u003C\"一般\"\u003C\u003Cendl;break;\n        case 5:cout\u003C\u003C\"一般\"\u003C\u003Cendl;break;\n        default:cout\u003C\u003C\"烂片\"\u003C\u003Cendl;break;\n    }\n}\n",[59,4026,4027,4032,4040,4053,4062,4066,4080,4093,4103,4111,4116,4141,4162,4184,4205,4227,4248,4268,4273],{"__ignoreMap":57},[79,4028,4029],{"class":81,"line":82},[79,4030,4031],{"class":2313},"\u002F\u002F案例-电影打分\n",[79,4033,4034,4037],{"class":81,"line":167},[79,4035,4036],{"class":448},"#include",[79,4038,4039],{"class":89},"\u003Ciostream>\n",[79,4041,4042,4045,4048,4051],{"class":81,"line":178},[79,4043,4044],{"class":448},"using",[79,4046,4047],{"class":448}," namespace",[79,4049,4050],{"class":85}," std",[79,4052,3400],{"class":228},[79,4054,4055,4057,4059],{"class":81,"line":545},[79,4056,2262],{"class":448},[79,4058,826],{"class":85},[79,4060,4061],{"class":228},"()\n",[79,4063,4064],{"class":81,"line":550},[79,4065,3652],{"class":228},[79,4067,4068,4071,4074,4076,4078],{"class":81,"line":562},[79,4069,4070],{"class":448},"    int",[79,4072,4073],{"class":228}," score",[79,4075,239],{"class":448},[79,4077,759],{"class":96},[79,4079,3400],{"class":228},[79,4081,4082,4084,4086,4089,4091],{"class":81,"line":568},[79,4083,3657],{"class":228},[79,4085,3283],{"class":448},[79,4087,4088],{"class":89},"\"电影打分：\"",[79,4090,3283],{"class":448},[79,4092,3305],{"class":228},[79,4094,4095,4098,4100],{"class":81,"line":574},[79,4096,4097],{"class":228},"    cin",[79,4099,3536],{"class":448},[79,4101,4102],{"class":228},"score;\n",[79,4104,4105,4108],{"class":81,"line":579},[79,4106,4107],{"class":448},"    switch",[79,4109,4110],{"class":228},"(score)\n",[79,4112,4113],{"class":81,"line":585},[79,4114,4115],{"class":228},"    {\n",[79,4117,4118,4121,4124,4127,4129,4132,4134,4136,4139],{"class":81,"line":591},[79,4119,4120],{"class":448},"        case",[79,4122,4123],{"class":96}," 10",[79,4125,4126],{"class":228},":cout",[79,4128,3283],{"class":448},[79,4130,4131],{"class":89},"\"经典\"",[79,4133,3283],{"class":448},[79,4135,3348],{"class":228},[79,4137,4138],{"class":448},"break",[79,4140,3400],{"class":228},[79,4142,4143,4145,4148,4150,4152,4154,4156,4158,4160],{"class":81,"line":596},[79,4144,4120],{"class":448},[79,4146,4147],{"class":96}," 9",[79,4149,4126],{"class":228},[79,4151,3283],{"class":448},[79,4153,4131],{"class":89},[79,4155,3283],{"class":448},[79,4157,3348],{"class":228},[79,4159,4138],{"class":448},[79,4161,3400],{"class":228},[79,4163,4164,4166,4169,4171,4173,4176,4178,4180,4182],{"class":81,"line":602},[79,4165,4120],{"class":448},[79,4167,4168],{"class":96}," 8",[79,4170,4126],{"class":228},[79,4172,3283],{"class":448},[79,4174,4175],{"class":89},"\"非常好\"",[79,4177,3283],{"class":448},[79,4179,3348],{"class":228},[79,4181,4138],{"class":448},[79,4183,3400],{"class":228},[79,4185,4186,4188,4191,4193,4195,4197,4199,4201,4203],{"class":81,"line":608},[79,4187,4120],{"class":448},[79,4189,4190],{"class":96}," 7",[79,4192,4126],{"class":228},[79,4194,3283],{"class":448},[79,4196,4175],{"class":89},[79,4198,3283],{"class":448},[79,4200,3348],{"class":228},[79,4202,4138],{"class":448},[79,4204,3400],{"class":228},[79,4206,4207,4209,4212,4214,4216,4219,4221,4223,4225],{"class":81,"line":614},[79,4208,4120],{"class":448},[79,4210,4211],{"class":96}," 6",[79,4213,4126],{"class":228},[79,4215,3283],{"class":448},[79,4217,4218],{"class":89},"\"一般\"",[79,4220,3283],{"class":448},[79,4222,3348],{"class":228},[79,4224,4138],{"class":448},[79,4226,3400],{"class":228},[79,4228,4229,4231,4234,4236,4238,4240,4242,4244,4246],{"class":81,"line":619},[79,4230,4120],{"class":448},[79,4232,4233],{"class":96}," 5",[79,4235,4126],{"class":228},[79,4237,3283],{"class":448},[79,4239,4218],{"class":89},[79,4241,3283],{"class":448},[79,4243,3348],{"class":228},[79,4245,4138],{"class":448},[79,4247,3400],{"class":228},[79,4249,4250,4253,4255,4257,4260,4262,4264,4266],{"class":81,"line":625},[79,4251,4252],{"class":448},"        default",[79,4254,4126],{"class":228},[79,4256,3283],{"class":448},[79,4258,4259],{"class":89},"\"烂片\"",[79,4261,3283],{"class":448},[79,4263,3348],{"class":228},[79,4265,4138],{"class":448},[79,4267,3400],{"class":228},[79,4269,4270],{"class":81,"line":631},[79,4271,4272],{"class":228},"    }\n",[79,4274,4275],{"class":81,"line":637},[79,4276,3671],{"class":228},[19,4278,4279],{},"if和switch区别：",[3246,4281,4282,4285],{},[29,4283,4284],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[29,4286,4287],{},"switch优点：结构清晰，执行效率高",[339,4289,4291],{"id":4290},"_162循环结构","1.6.2循环结构",[26,4293,4294],{},[29,4295,4296],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[51,4298,4300],{"className":2248,"code":4299,"language":2250,"meta":57,"style":57},"\u002F\u002F打印0-9数字\nint main()\n{\n    int num=0;\n    while(num\u003C10)\n    {\n       std::cout\u003C\u003Cnum\u003C\u003Cstd::endl;\n        num++;\n    }\n    system(\"pause\")\n}\n",[59,4301,4302,4307,4315,4319,4332,4346,4350,4370,4380,4384,4396],{"__ignoreMap":57},[79,4303,4304],{"class":81,"line":82},[79,4305,4306],{"class":2313},"\u002F\u002F打印0-9数字\n",[79,4308,4309,4311,4313],{"class":81,"line":167},[79,4310,2262],{"class":448},[79,4312,826],{"class":85},[79,4314,4061],{"class":228},[79,4316,4317],{"class":81,"line":178},[79,4318,3652],{"class":228},[79,4320,4321,4323,4326,4328,4330],{"class":81,"line":545},[79,4322,4070],{"class":448},[79,4324,4325],{"class":228}," num",[79,4327,239],{"class":448},[79,4329,759],{"class":96},[79,4331,3400],{"class":228},[79,4333,4334,4337,4340,4342,4344],{"class":81,"line":550},[79,4335,4336],{"class":448},"    while",[79,4338,4339],{"class":228},"(num",[79,4341,229],{"class":448},[79,4343,2689],{"class":96},[79,4345,850],{"class":228},[79,4347,4348],{"class":81,"line":562},[79,4349,4115],{"class":228},[79,4351,4352,4355,4358,4360,4362,4364,4367],{"class":81,"line":568},[79,4353,4354],{"class":85},"       std",[79,4356,4357],{"class":228},"::cout",[79,4359,3283],{"class":448},[79,4361,3764],{"class":228},[79,4363,3283],{"class":448},[79,4365,4366],{"class":85},"std",[79,4368,4369],{"class":228},"::endl;\n",[79,4371,4372,4375,4378],{"class":81,"line":574},[79,4373,4374],{"class":228},"        num",[79,4376,4377],{"class":448},"++",[79,4379,3400],{"class":228},[79,4381,4382],{"class":81,"line":579},[79,4383,4272],{"class":228},[79,4385,4386,4389,4391,4394],{"class":81,"line":585},[79,4387,4388],{"class":85},"    system",[79,4390,455],{"class":228},[79,4392,4393],{"class":89},"\"pause\"",[79,4395,850],{"class":228},[79,4397,4398],{"class":81,"line":591},[79,4399,3671],{"class":228},[19,4401,4402],{},"注意：写好循环条件，避免死循环情况",[51,4404,4406],{"className":2248,"code":4405,"language":2250,"meta":57,"style":57},"\u002F\u002F循环结构-猜数字\n#include \u003Ciostream>\n#include \u003Cctime>\nusing namespace std;\nint main()\n{\n    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n    srand((unsigned int)time(NULL));\n\n    \u002F\u002F1.系统生成随机数\n    \u002F\u002Frand()%100 \u002F\u002F生成0-99的随机数\n    int num=rand()%100+1; \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n    \u002F\u002F2.玩家猜测\n    int val=0;\n    while (1)\n    {\n        cin>>val;\n        \u002F\u002F3.判断玩家猜测\n        if(val\u003Cnum) \n        {\n            cout\u003C\u003C\"猜小了！\"\u003C\u003Cendl;\n        }\n        else if (val>num)\n        {\n            cout\u003C\u003C\"猜大了！\"\u003C\u003Cendl;\n        }\n        else\n        {\n            cout\u003C\u003C\"猜对了！\"\u003C\u003Cendl;\n            break;\n        }\n        \u002F\u002F猜对 退出游戏\n        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n    }\n}\n",[59,4407,4408,4413,4420,4427,4437,4445,4449,4454,4481,4485,4490,4498,4525,4530,4535,4548,4558,4562,4572,4577,4589,4594,4608,4613,4628,4632,4645,4649,4654,4658,4671,4678,4682,4687,4692,4696],{"__ignoreMap":57},[79,4409,4410],{"class":81,"line":82},[79,4411,4412],{"class":2313},"\u002F\u002F循环结构-猜数字\n",[79,4414,4415,4417],{"class":81,"line":167},[79,4416,4036],{"class":448},[79,4418,4419],{"class":89}," \u003Ciostream>\n",[79,4421,4422,4424],{"class":81,"line":178},[79,4423,4036],{"class":448},[79,4425,4426],{"class":89}," \u003Cctime>\n",[79,4428,4429,4431,4433,4435],{"class":81,"line":545},[79,4430,4044],{"class":448},[79,4432,4047],{"class":448},[79,4434,4050],{"class":85},[79,4436,3400],{"class":228},[79,4438,4439,4441,4443],{"class":81,"line":550},[79,4440,2262],{"class":448},[79,4442,826],{"class":85},[79,4444,4061],{"class":228},[79,4446,4447],{"class":81,"line":562},[79,4448,3652],{"class":228},[79,4450,4451],{"class":81,"line":568},[79,4452,4453],{"class":2313},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[79,4455,4456,4459,4462,4465,4468,4470,4473,4475,4478],{"class":81,"line":574},[79,4457,4458],{"class":85},"    srand",[79,4460,4461],{"class":228},"((",[79,4463,4464],{"class":448},"unsigned",[79,4466,4467],{"class":448}," int",[79,4469,2672],{"class":228},[79,4471,4472],{"class":85},"time",[79,4474,455],{"class":228},[79,4476,4477],{"class":96},"NULL",[79,4479,4480],{"class":228},"));\n",[79,4482,4483],{"class":81,"line":579},[79,4484,542],{"emptyLinePlaceholder":541},[79,4486,4487],{"class":81,"line":585},[79,4488,4489],{"class":2313},"    \u002F\u002F1.系统生成随机数\n",[79,4491,4492,4495],{"class":81,"line":591},[79,4493,4494],{"class":2313},"    \u002F\u002Frand()%100",[79,4496,4497],{"class":2313}," \u002F\u002F生成0-99的随机数\n",[79,4499,4500,4502,4504,4506,4509,4512,4514,4516,4518,4520,4522],{"class":81,"line":596},[79,4501,4070],{"class":448},[79,4503,4325],{"class":228},[79,4505,239],{"class":448},[79,4507,4508],{"class":85},"rand",[79,4510,4511],{"class":228},"()",[79,4513,1094],{"class":448},[79,4515,2555],{"class":96},[79,4517,995],{"class":448},[79,4519,775],{"class":96},[79,4521,2310],{"class":228},[79,4523,4524],{"class":2313}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[79,4526,4527],{"class":81,"line":602},[79,4528,4529],{"class":2313},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[79,4531,4532],{"class":81,"line":608},[79,4533,4534],{"class":2313},"    \u002F\u002F2.玩家猜测\n",[79,4536,4537,4539,4542,4544,4546],{"class":81,"line":614},[79,4538,4070],{"class":448},[79,4540,4541],{"class":228}," val",[79,4543,239],{"class":448},[79,4545,759],{"class":96},[79,4547,3400],{"class":228},[79,4549,4550,4552,4554,4556],{"class":81,"line":619},[79,4551,4336],{"class":448},[79,4553,3757],{"class":228},[79,4555,775],{"class":96},[79,4557,850],{"class":228},[79,4559,4560],{"class":81,"line":625},[79,4561,4115],{"class":228},[79,4563,4564,4567,4569],{"class":81,"line":631},[79,4565,4566],{"class":228},"        cin",[79,4568,3536],{"class":448},[79,4570,4571],{"class":228},"val;\n",[79,4573,4574],{"class":81,"line":637},[79,4575,4576],{"class":2313},"        \u002F\u002F3.判断玩家猜测\n",[79,4578,4579,4581,4584,4586],{"class":81,"line":643},[79,4580,1089],{"class":448},[79,4582,4583],{"class":228},"(val",[79,4585,229],{"class":448},[79,4587,4588],{"class":228},"num) \n",[79,4590,4591],{"class":81,"line":649},[79,4592,4593],{"class":228},"        {\n",[79,4595,4596,4599,4601,4604,4606],{"class":81,"line":655},[79,4597,4598],{"class":228},"            cout",[79,4600,3283],{"class":448},[79,4602,4603],{"class":89},"\"猜小了！\"",[79,4605,3283],{"class":448},[79,4607,3305],{"class":228},[79,4609,4610],{"class":81,"line":660},[79,4611,4612],{"class":228},"        }\n",[79,4614,4615,4618,4620,4623,4625],{"class":81,"line":666},[79,4616,4617],{"class":448},"        else",[79,4619,3799],{"class":448},[79,4621,4622],{"class":228}," (val",[79,4624,3199],{"class":448},[79,4626,4627],{"class":228},"num)\n",[79,4629,4630],{"class":81,"line":672},[79,4631,4593],{"class":228},[79,4633,4634,4636,4638,4641,4643],{"class":81,"line":678},[79,4635,4598],{"class":228},[79,4637,3283],{"class":448},[79,4639,4640],{"class":89},"\"猜大了！\"",[79,4642,3283],{"class":448},[79,4644,3305],{"class":228},[79,4646,4647],{"class":81,"line":684},[79,4648,4612],{"class":228},[79,4650,4651],{"class":81,"line":690},[79,4652,4653],{"class":448},"        else\n",[79,4655,4656],{"class":81,"line":695},[79,4657,4593],{"class":228},[79,4659,4660,4662,4664,4667,4669],{"class":81,"line":700},[79,4661,4598],{"class":228},[79,4663,3283],{"class":448},[79,4665,4666],{"class":89},"\"猜对了！\"",[79,4668,3283],{"class":448},[79,4670,3305],{"class":228},[79,4672,4673,4676],{"class":81,"line":712},[79,4674,4675],{"class":448},"            break",[79,4677,3400],{"class":228},[79,4679,4680],{"class":81,"line":721},[79,4681,4612],{"class":228},[79,4683,4684],{"class":81,"line":726},[79,4685,4686],{"class":2313},"        \u002F\u002F猜对 退出游戏\n",[79,4688,4689],{"class":81,"line":731},[79,4690,4691],{"class":2313},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[79,4693,4694],{"class":81,"line":748},[79,4695,4272],{"class":228},[79,4697,4698],{"class":81,"line":765},[79,4699,3671],{"class":228},[26,4701,4702],{"start":167},[29,4703,4704,4705,4708],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[2398,4706,4707],{},"do...while会先执行一次循环语句","，在判断循环语句",[51,4710,4712],{"className":2248,"code":4711,"language":2250,"meta":57,"style":57},"\u002F\u002F在屏幕中输出0-9这10个数字\nint main()\n{\n    int num=0;\n    do \n    {\n        std::cout\u003C\u003Cnum\u003C\u003Cstd::endl;\n        num++\n    }\n    while(num\u003C10);\n    system(\"pause\");\n}\n",[59,4713,4714,4719,4727,4731,4743,4751,4755,4772,4779,4783,4796,4806],{"__ignoreMap":57},[79,4715,4716],{"class":81,"line":82},[79,4717,4718],{"class":2313},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[79,4720,4721,4723,4725],{"class":81,"line":167},[79,4722,2262],{"class":448},[79,4724,826],{"class":85},[79,4726,4061],{"class":228},[79,4728,4729],{"class":81,"line":178},[79,4730,3652],{"class":228},[79,4732,4733,4735,4737,4739,4741],{"class":81,"line":545},[79,4734,4070],{"class":448},[79,4736,4325],{"class":228},[79,4738,239],{"class":448},[79,4740,759],{"class":96},[79,4742,3400],{"class":228},[79,4744,4745,4748],{"class":81,"line":550},[79,4746,4747],{"class":448},"    do",[79,4749,4750],{"class":228}," \n",[79,4752,4753],{"class":81,"line":562},[79,4754,4115],{"class":228},[79,4756,4757,4760,4762,4764,4766,4768,4770],{"class":81,"line":568},[79,4758,4759],{"class":85},"        std",[79,4761,4357],{"class":228},[79,4763,3283],{"class":448},[79,4765,3764],{"class":228},[79,4767,3283],{"class":448},[79,4769,4366],{"class":85},[79,4771,4369],{"class":228},[79,4773,4774,4776],{"class":81,"line":574},[79,4775,4374],{"class":228},[79,4777,4778],{"class":448},"++\n",[79,4780,4781],{"class":81,"line":579},[79,4782,4272],{"class":228},[79,4784,4785,4787,4789,4791,4793],{"class":81,"line":585},[79,4786,4336],{"class":448},[79,4788,4339],{"class":228},[79,4790,229],{"class":448},[79,4792,2689],{"class":96},[79,4794,4795],{"class":228},");\n",[79,4797,4798,4800,4802,4804],{"class":81,"line":591},[79,4799,4388],{"class":85},[79,4801,455],{"class":228},[79,4803,4393],{"class":89},[79,4805,4795],{"class":228},[79,4807,4808],{"class":81,"line":596},[79,4809,3671],{"class":228},[19,4811,4812],{},"案例-水仙花数",[19,4814,4815],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,4817,4818],{},"例如：1^3+5^3+3^3=153",[19,4820,4821],{},"请用do...while语句，求出所有3位数的水仙花数",[51,4823,4825],{"className":2248,"code":4824,"language":2250,"meta":57,"style":57},"#include \u003Ciostream>\nusing namespace std;\nint main()\n{\n    \u002F\u002F1.先打印所有三位数字\n    int num=100;\n    do \n    {\n        \u002F\u002F2.从所有三位数字中找到水仙花数\n        int a=0; \u002F\u002F个位\n        int b=0; \u002F\u002F十位\n        int c=0; \u002F\u002F百位\n        a=num%10;\n        b=num\u002F10%10;\n        c=num\u002F100;\n        if(a*a*a+b*b*b+c*c*c == num) \u002F\u002F如果是水仙花数，才打印\n        {\n            cout\u003C\u003Cnum\u003C\u003Cendl;\n        }\n        num++;\n    }\n    while (num \u003C 1000);\n}\n",[59,4826,4827,4833,4843,4851,4855,4860,4872,4878,4882,4887,4903,4919,4935,4950,4969,4984,5032,5036,5048,5052,5060,5064,5078],{"__ignoreMap":57},[79,4828,4829,4831],{"class":81,"line":82},[79,4830,4036],{"class":448},[79,4832,4419],{"class":89},[79,4834,4835,4837,4839,4841],{"class":81,"line":167},[79,4836,4044],{"class":448},[79,4838,4047],{"class":448},[79,4840,4050],{"class":85},[79,4842,3400],{"class":228},[79,4844,4845,4847,4849],{"class":81,"line":178},[79,4846,2262],{"class":448},[79,4848,826],{"class":85},[79,4850,4061],{"class":228},[79,4852,4853],{"class":81,"line":545},[79,4854,3652],{"class":228},[79,4856,4857],{"class":81,"line":550},[79,4858,4859],{"class":2313},"    \u002F\u002F1.先打印所有三位数字\n",[79,4861,4862,4864,4866,4868,4870],{"class":81,"line":562},[79,4863,4070],{"class":448},[79,4865,4325],{"class":228},[79,4867,239],{"class":448},[79,4869,2555],{"class":96},[79,4871,3400],{"class":228},[79,4873,4874,4876],{"class":81,"line":568},[79,4875,4747],{"class":448},[79,4877,4750],{"class":228},[79,4879,4880],{"class":81,"line":574},[79,4881,4115],{"class":228},[79,4883,4884],{"class":81,"line":579},[79,4885,4886],{"class":2313},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[79,4888,4889,4892,4894,4896,4898,4900],{"class":81,"line":585},[79,4890,4891],{"class":448},"        int",[79,4893,3505],{"class":228},[79,4895,239],{"class":448},[79,4897,759],{"class":96},[79,4899,2310],{"class":228},[79,4901,4902],{"class":2313}," \u002F\u002F个位\n",[79,4904,4905,4907,4910,4912,4914,4916],{"class":81,"line":591},[79,4906,4891],{"class":448},[79,4908,4909],{"class":228}," b",[79,4911,239],{"class":448},[79,4913,759],{"class":96},[79,4915,2310],{"class":228},[79,4917,4918],{"class":2313}," \u002F\u002F十位\n",[79,4920,4921,4923,4926,4928,4930,4932],{"class":81,"line":596},[79,4922,4891],{"class":448},[79,4924,4925],{"class":228}," c",[79,4927,239],{"class":448},[79,4929,759],{"class":96},[79,4931,2310],{"class":228},[79,4933,4934],{"class":2313}," \u002F\u002F百位\n",[79,4936,4937,4940,4942,4944,4946,4948],{"class":81,"line":602},[79,4938,4939],{"class":228},"        a",[79,4941,239],{"class":448},[79,4943,3764],{"class":228},[79,4945,1094],{"class":448},[79,4947,2689],{"class":96},[79,4949,3400],{"class":228},[79,4951,4952,4955,4957,4959,4961,4963,4965,4967],{"class":81,"line":608},[79,4953,4954],{"class":228},"        b",[79,4956,239],{"class":448},[79,4958,3764],{"class":228},[79,4960,2824],{"class":448},[79,4962,2689],{"class":96},[79,4964,1094],{"class":448},[79,4966,2689],{"class":96},[79,4968,3400],{"class":228},[79,4970,4971,4974,4976,4978,4980,4982],{"class":81,"line":614},[79,4972,4973],{"class":228},"        c",[79,4975,239],{"class":448},[79,4977,3764],{"class":228},[79,4979,2824],{"class":448},[79,4981,2555],{"class":96},[79,4983,3400],{"class":228},[79,4985,4986,4988,4990,4992,4994,4996,4998,5000,5002,5004,5006,5008,5010,5012,5014,5016,5018,5020,5023,5026,5029],{"class":81,"line":619},[79,4987,1089],{"class":448},[79,4989,3928],{"class":228},[79,4991,473],{"class":448},[79,4993,2482],{"class":228},[79,4995,473],{"class":448},[79,4997,2482],{"class":228},[79,4999,995],{"class":448},[79,5001,2507],{"class":228},[79,5003,473],{"class":448},[79,5005,2507],{"class":228},[79,5007,473],{"class":448},[79,5009,2507],{"class":228},[79,5011,995],{"class":448},[79,5013,2532],{"class":228},[79,5015,473],{"class":448},[79,5017,2532],{"class":228},[79,5019,473],{"class":448},[79,5021,5022],{"class":228},"c ",[79,5024,5025],{"class":448},"==",[79,5027,5028],{"class":228}," num)",[79,5030,5031],{"class":2313}," \u002F\u002F如果是水仙花数，才打印\n",[79,5033,5034],{"class":81,"line":625},[79,5035,4593],{"class":228},[79,5037,5038,5040,5042,5044,5046],{"class":81,"line":631},[79,5039,4598],{"class":228},[79,5041,3283],{"class":448},[79,5043,3764],{"class":228},[79,5045,3283],{"class":448},[79,5047,3305],{"class":228},[79,5049,5050],{"class":81,"line":637},[79,5051,4612],{"class":228},[79,5053,5054,5056,5058],{"class":81,"line":643},[79,5055,4374],{"class":228},[79,5057,4377],{"class":448},[79,5059,3400],{"class":228},[79,5061,5062],{"class":81,"line":649},[79,5063,4272],{"class":228},[79,5065,5066,5068,5071,5073,5076],{"class":81,"line":655},[79,5067,4336],{"class":448},[79,5069,5070],{"class":228}," (num ",[79,5072,229],{"class":448},[79,5074,5075],{"class":96}," 1000",[79,5077,4795],{"class":228},[79,5079,5080],{"class":81,"line":660},[79,5081,3671],{"class":228},[26,5083,5084],{"start":178},[29,5085,5086],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[51,5088,5090],{"className":2248,"code":5089,"language":2250,"meta":57,"style":57},"\u002F\u002F从数字0-9打印\nfor(int i=0;i\u003C10;i++)\n{\n    cout\u003C\u003Ci\u003C\u003Cendl;\n}\n\u002F\u002F上式可以进行拆分\nint i=0\nfor(;;;)\n{\n    if(i>=10)\n    {\n        break;\n    }\n    cout\u003C\u003Ci\u003C\u003Cendl;\n    i++;\n}\n",[59,5091,5092,5097,5125,5129,5141,5145,5150,5161,5168,5172,5186,5190,5197,5201,5213,5222],{"__ignoreMap":57},[79,5093,5094],{"class":81,"line":82},[79,5095,5096],{"class":2313},"\u002F\u002F从数字0-9打印\n",[79,5098,5099,5101,5103,5105,5108,5110,5112,5115,5117,5119,5121,5123],{"class":81,"line":167},[79,5100,1638],{"class":448},[79,5102,455],{"class":228},[79,5104,2262],{"class":448},[79,5106,5107],{"class":228}," i",[79,5109,239],{"class":448},[79,5111,759],{"class":96},[79,5113,5114],{"class":228},";i",[79,5116,229],{"class":448},[79,5118,2689],{"class":96},[79,5120,5114],{"class":228},[79,5122,4377],{"class":448},[79,5124,850],{"class":228},[79,5126,5127],{"class":81,"line":178},[79,5128,3652],{"class":228},[79,5130,5131,5133,5135,5137,5139],{"class":81,"line":545},[79,5132,3657],{"class":228},[79,5134,3283],{"class":448},[79,5136,2684],{"class":228},[79,5138,3283],{"class":448},[79,5140,3305],{"class":228},[79,5142,5143],{"class":81,"line":550},[79,5144,3671],{"class":228},[79,5146,5147],{"class":81,"line":562},[79,5148,5149],{"class":2313},"\u002F\u002F上式可以进行拆分\n",[79,5151,5152,5154,5156,5158],{"class":81,"line":568},[79,5153,2262],{"class":448},[79,5155,5107],{"class":228},[79,5157,239],{"class":448},[79,5159,5160],{"class":96},"0\n",[79,5162,5163,5165],{"class":81,"line":574},[79,5164,1638],{"class":448},[79,5166,5167],{"class":228},"(;;;)\n",[79,5169,5170],{"class":81,"line":579},[79,5171,3652],{"class":228},[79,5173,5174,5177,5180,5182,5184],{"class":81,"line":585},[79,5175,5176],{"class":448},"    if",[79,5178,5179],{"class":228},"(i",[79,5181,3805],{"class":448},[79,5183,2689],{"class":96},[79,5185,850],{"class":228},[79,5187,5188],{"class":81,"line":591},[79,5189,4115],{"class":228},[79,5191,5192,5195],{"class":81,"line":596},[79,5193,5194],{"class":448},"        break",[79,5196,3400],{"class":228},[79,5198,5199],{"class":81,"line":602},[79,5200,4272],{"class":228},[79,5202,5203,5205,5207,5209,5211],{"class":81,"line":608},[79,5204,3657],{"class":228},[79,5206,3283],{"class":448},[79,5208,2684],{"class":228},[79,5210,3283],{"class":448},[79,5212,3305],{"class":228},[79,5214,5215,5218,5220],{"class":81,"line":614},[79,5216,5217],{"class":228},"    i",[79,5219,4377],{"class":448},[79,5221,3400],{"class":228},[79,5223,5224],{"class":81,"line":619},[79,5225,3671],{"class":228},[19,5227,5228],{},"小练习",[51,5230,5232],{"className":2248,"code":5231,"language":2250,"meta":57,"style":57},"#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    \u002F\u002F敲桌子案例\n    \u002F\u002F1.先输出1-100的数字\n    for(int i=1; i\u003C=100; i++)\n    {\n        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n        if(i%7==0 || i%10==7 || i\u002F10==7)\n        {\n            cout\u003C\u003C\"敲桌子\"\u003C\u003Cendl;\n        }\n        else\n        {\n            cout\u003C\u003Ci\u003C\u003Cendl;\n        }\n    }\n}\n",[59,5233,5234,5240,5250,5258,5262,5267,5272,5299,5303,5308,5313,5354,5358,5371,5375,5379,5383,5395,5399,5403],{"__ignoreMap":57},[79,5235,5236,5238],{"class":81,"line":82},[79,5237,4036],{"class":448},[79,5239,4039],{"class":89},[79,5241,5242,5244,5246,5248],{"class":81,"line":167},[79,5243,4044],{"class":448},[79,5245,4047],{"class":448},[79,5247,4050],{"class":85},[79,5249,3400],{"class":228},[79,5251,5252,5254,5256],{"class":81,"line":178},[79,5253,2262],{"class":448},[79,5255,826],{"class":85},[79,5257,4061],{"class":228},[79,5259,5260],{"class":81,"line":545},[79,5261,3652],{"class":228},[79,5263,5264],{"class":81,"line":550},[79,5265,5266],{"class":2313},"    \u002F\u002F敲桌子案例\n",[79,5268,5269],{"class":81,"line":562},[79,5270,5271],{"class":2313},"    \u002F\u002F1.先输出1-100的数字\n",[79,5273,5274,5276,5278,5280,5282,5284,5286,5289,5291,5293,5295,5297],{"class":81,"line":568},[79,5275,915],{"class":448},[79,5277,455],{"class":228},[79,5279,2262],{"class":448},[79,5281,5107],{"class":228},[79,5283,239],{"class":448},[79,5285,775],{"class":96},[79,5287,5288],{"class":228},"; i",[79,5290,3694],{"class":448},[79,5292,2555],{"class":96},[79,5294,5288],{"class":228},[79,5296,4377],{"class":448},[79,5298,850],{"class":228},[79,5300,5301],{"class":81,"line":574},[79,5302,4115],{"class":228},[79,5304,5305],{"class":81,"line":579},[79,5306,5307],{"class":2313},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[79,5309,5310],{"class":81,"line":585},[79,5311,5312],{"class":2313},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[79,5314,5315,5317,5319,5321,5323,5325,5327,5330,5332,5334,5336,5338,5340,5342,5344,5346,5348,5350,5352],{"class":81,"line":591},[79,5316,1089],{"class":448},[79,5318,5179],{"class":228},[79,5320,1094],{"class":448},[79,5322,2612],{"class":96},[79,5324,5025],{"class":448},[79,5326,759],{"class":96},[79,5328,5329],{"class":448}," ||",[79,5331,5107],{"class":228},[79,5333,1094],{"class":448},[79,5335,2689],{"class":96},[79,5337,5025],{"class":448},[79,5339,2612],{"class":96},[79,5341,5329],{"class":448},[79,5343,5107],{"class":228},[79,5345,2824],{"class":448},[79,5347,2689],{"class":96},[79,5349,5025],{"class":448},[79,5351,2612],{"class":96},[79,5353,850],{"class":228},[79,5355,5356],{"class":81,"line":596},[79,5357,4593],{"class":228},[79,5359,5360,5362,5364,5367,5369],{"class":81,"line":602},[79,5361,4598],{"class":228},[79,5363,3283],{"class":448},[79,5365,5366],{"class":89},"\"敲桌子\"",[79,5368,3283],{"class":448},[79,5370,3305],{"class":228},[79,5372,5373],{"class":81,"line":608},[79,5374,4612],{"class":228},[79,5376,5377],{"class":81,"line":614},[79,5378,4653],{"class":448},[79,5380,5381],{"class":81,"line":619},[79,5382,4593],{"class":228},[79,5384,5385,5387,5389,5391,5393],{"class":81,"line":625},[79,5386,4598],{"class":228},[79,5388,3283],{"class":448},[79,5390,2684],{"class":228},[79,5392,3283],{"class":448},[79,5394,3305],{"class":228},[79,5396,5397],{"class":81,"line":631},[79,5398,4612],{"class":228},[79,5400,5401],{"class":81,"line":637},[79,5402,4272],{"class":228},[79,5404,5405],{"class":81,"line":643},[79,5406,3671],{"class":228},[19,5408,5409],{},"嵌套实现星图",[51,5411,5413],{"className":2248,"code":5412,"language":2250,"meta":57,"style":57},"#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    for (int i=0;i\u003C10;i++)\n    {\n        for (int j=0;j\u003C10;j++)\n        {\n            cout\u003C\u003C\"*\";\n        }\n        cout\u003C\u003Cendl;\n    }\n}\n",[59,5414,5415,5421,5431,5439,5443,5469,5473,5502,5506,5517,5521,5530,5534],{"__ignoreMap":57},[79,5416,5417,5419],{"class":81,"line":82},[79,5418,4036],{"class":448},[79,5420,4039],{"class":89},[79,5422,5423,5425,5427,5429],{"class":81,"line":167},[79,5424,4044],{"class":448},[79,5426,4047],{"class":448},[79,5428,4050],{"class":85},[79,5430,3400],{"class":228},[79,5432,5433,5435,5437],{"class":81,"line":178},[79,5434,2262],{"class":448},[79,5436,826],{"class":85},[79,5438,4061],{"class":228},[79,5440,5441],{"class":81,"line":545},[79,5442,3652],{"class":228},[79,5444,5445,5447,5449,5451,5453,5455,5457,5459,5461,5463,5465,5467],{"class":81,"line":550},[79,5446,915],{"class":448},[79,5448,3757],{"class":228},[79,5450,2262],{"class":448},[79,5452,5107],{"class":228},[79,5454,239],{"class":448},[79,5456,759],{"class":96},[79,5458,5114],{"class":228},[79,5460,229],{"class":448},[79,5462,2689],{"class":96},[79,5464,5114],{"class":228},[79,5466,4377],{"class":448},[79,5468,850],{"class":228},[79,5470,5471],{"class":81,"line":562},[79,5472,4115],{"class":228},[79,5474,5475,5478,5480,5482,5485,5487,5489,5492,5494,5496,5498,5500],{"class":81,"line":568},[79,5476,5477],{"class":448},"        for",[79,5479,3757],{"class":228},[79,5481,2262],{"class":448},[79,5483,5484],{"class":228}," j",[79,5486,239],{"class":448},[79,5488,759],{"class":96},[79,5490,5491],{"class":228},";j",[79,5493,229],{"class":448},[79,5495,2689],{"class":96},[79,5497,5491],{"class":228},[79,5499,4377],{"class":448},[79,5501,850],{"class":228},[79,5503,5504],{"class":81,"line":574},[79,5505,4593],{"class":228},[79,5507,5508,5510,5512,5515],{"class":81,"line":579},[79,5509,4598],{"class":228},[79,5511,3283],{"class":448},[79,5513,5514],{"class":89},"\"*\"",[79,5516,3400],{"class":228},[79,5518,5519],{"class":81,"line":585},[79,5520,4612],{"class":228},[79,5522,5523,5526,5528],{"class":81,"line":591},[79,5524,5525],{"class":228},"        cout",[79,5527,3283],{"class":448},[79,5529,3305],{"class":228},[79,5531,5532],{"class":81,"line":596},[79,5533,4272],{"class":228},[79,5535,5536],{"class":81,"line":602},[79,5537,3671],{"class":228},[19,5539,5540],{},"乘法口诀表",[51,5542,5544],{"className":2248,"code":5543,"language":2250,"meta":57,"style":57},"#include \u003Ciostream>\nusing namespace std;\nint main()\n{\n    for(int i=1;i\u003C10;i++)\n    {\n        for(int j=1;j\u003C=i;j++)\n        {\n            cout\u003C\u003Cj\u003C\u003C\"*\"\u003C\u003Ci\u003C\u003C\"=\"\u003C\u003Ci*j\u003C\u003C'\\t';\n        }\n        cout\u003C\u003Cendl;\n    }\n} \n",[59,5545,5546,5552,5562,5570,5574,5600,5604,5629,5633,5673,5677,5685,5689],{"__ignoreMap":57},[79,5547,5548,5550],{"class":81,"line":82},[79,5549,4036],{"class":448},[79,5551,4419],{"class":89},[79,5553,5554,5556,5558,5560],{"class":81,"line":167},[79,5555,4044],{"class":448},[79,5557,4047],{"class":448},[79,5559,4050],{"class":85},[79,5561,3400],{"class":228},[79,5563,5564,5566,5568],{"class":81,"line":178},[79,5565,2262],{"class":448},[79,5567,826],{"class":85},[79,5569,4061],{"class":228},[79,5571,5572],{"class":81,"line":545},[79,5573,3652],{"class":228},[79,5575,5576,5578,5580,5582,5584,5586,5588,5590,5592,5594,5596,5598],{"class":81,"line":550},[79,5577,915],{"class":448},[79,5579,455],{"class":228},[79,5581,2262],{"class":448},[79,5583,5107],{"class":228},[79,5585,239],{"class":448},[79,5587,775],{"class":96},[79,5589,5114],{"class":228},[79,5591,229],{"class":448},[79,5593,2689],{"class":96},[79,5595,5114],{"class":228},[79,5597,4377],{"class":448},[79,5599,850],{"class":228},[79,5601,5602],{"class":81,"line":562},[79,5603,4115],{"class":228},[79,5605,5606,5608,5610,5612,5614,5616,5618,5620,5622,5625,5627],{"class":81,"line":568},[79,5607,5477],{"class":448},[79,5609,455],{"class":228},[79,5611,2262],{"class":448},[79,5613,5484],{"class":228},[79,5615,239],{"class":448},[79,5617,775],{"class":96},[79,5619,5491],{"class":228},[79,5621,3694],{"class":448},[79,5623,5624],{"class":228},"i;j",[79,5626,4377],{"class":448},[79,5628,850],{"class":228},[79,5630,5631],{"class":81,"line":574},[79,5632,4593],{"class":228},[79,5634,5635,5637,5639,5641,5643,5645,5647,5649,5651,5654,5656,5658,5660,5662,5664,5667,5669,5671],{"class":81,"line":579},[79,5636,4598],{"class":228},[79,5638,3283],{"class":448},[79,5640,2709],{"class":228},[79,5642,3283],{"class":448},[79,5644,5514],{"class":89},[79,5646,3283],{"class":448},[79,5648,2684],{"class":228},[79,5650,3283],{"class":448},[79,5652,5653],{"class":89},"\"=\"",[79,5655,3283],{"class":448},[79,5657,2684],{"class":228},[79,5659,473],{"class":448},[79,5661,2709],{"class":228},[79,5663,3283],{"class":448},[79,5665,5666],{"class":89},"'",[79,5668,3340],{"class":96},[79,5670,5666],{"class":89},[79,5672,3400],{"class":228},[79,5674,5675],{"class":81,"line":585},[79,5676,4612],{"class":228},[79,5678,5679,5681,5683],{"class":81,"line":591},[79,5680,5525],{"class":228},[79,5682,3283],{"class":448},[79,5684,3305],{"class":228},[79,5686,5687],{"class":81,"line":596},[79,5688,4272],{"class":228},[79,5690,5691],{"class":81,"line":602},[79,5692,3671],{"class":228},[339,5694,5696],{"id":5695},"_163跳出语句","1.6.3跳出语句",[26,5698,5699],{},[29,5700,5701],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,5703,5704],{},"break使用时机：",[3246,5706,5707,5710,5713],{},[29,5708,5709],{},"出现在switch条件语句中，作用是终止case并跳出switch",[29,5711,5712],{},"出现在循环结构中，作用是跳出当前的循环结构",[29,5714,5715],{},"出现在嵌套循环中，跳出最近的内层循环语句",[26,5717,5718,5721],{"start":167},[29,5719,5720],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[29,5722,5723],{},"goto语句\n语法：goto 标记;",[19,5725,5726],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[51,5728,5730],{"className":2248,"code":5729,"language":2250,"meta":57,"style":57},"int main()\n{\n    cout\u003C\u003C\"1\"\u003C\u003Cendl;\n    goto FLAG;\n    cout\u003C\u003C\"2\"\u003C\u003Cendl;\n    cout\u003C\u003C\"3\"\u003C\u003Cendl;\n    cout\u003C\u003C\"4\"\u003C\u003Cendl;\n    FLAG:\n    cout\u003C\u003C\"5\"\u003C\u003Cendl;\u002F\u002F跳过了2,3,4,直接到5\n}\n",[59,5731,5732,5740,5744,5757,5767,5780,5793,5806,5813,5829],{"__ignoreMap":57},[79,5733,5734,5736,5738],{"class":81,"line":82},[79,5735,2262],{"class":448},[79,5737,826],{"class":85},[79,5739,4061],{"class":228},[79,5741,5742],{"class":81,"line":167},[79,5743,3652],{"class":228},[79,5745,5746,5748,5750,5753,5755],{"class":81,"line":178},[79,5747,3657],{"class":228},[79,5749,3283],{"class":448},[79,5751,5752],{"class":89},"\"1\"",[79,5754,3283],{"class":448},[79,5756,3305],{"class":228},[79,5758,5759,5762,5765],{"class":81,"line":545},[79,5760,5761],{"class":448},"    goto",[79,5763,5764],{"class":85}," FLAG",[79,5766,3400],{"class":228},[79,5768,5769,5771,5773,5776,5778],{"class":81,"line":550},[79,5770,3657],{"class":228},[79,5772,3283],{"class":448},[79,5774,5775],{"class":89},"\"2\"",[79,5777,3283],{"class":448},[79,5779,3305],{"class":228},[79,5781,5782,5784,5786,5789,5791],{"class":81,"line":562},[79,5783,3657],{"class":228},[79,5785,3283],{"class":448},[79,5787,5788],{"class":89},"\"3\"",[79,5790,3283],{"class":448},[79,5792,3305],{"class":228},[79,5794,5795,5797,5799,5802,5804],{"class":81,"line":568},[79,5796,3657],{"class":228},[79,5798,3283],{"class":448},[79,5800,5801],{"class":89},"\"4\"",[79,5803,3283],{"class":448},[79,5805,3305],{"class":228},[79,5807,5808,5811],{"class":81,"line":574},[79,5809,5810],{"class":85},"    FLAG",[79,5812,745],{"class":228},[79,5814,5815,5817,5819,5822,5824,5826],{"class":81,"line":579},[79,5816,3657],{"class":228},[79,5818,3283],{"class":448},[79,5820,5821],{"class":89},"\"5\"",[79,5823,3283],{"class":448},[79,5825,3348],{"class":228},[79,5827,5828],{"class":2313},"\u002F\u002F跳过了2,3,4,直接到5\n",[79,5830,5831],{"class":81,"line":585},[79,5832,3671],{"class":228},[14,5834,5836],{"id":5835},"_17数组","1.7数组",[339,5838,5840],{"id":5839},"_171一维数组","1.7.1一维数组",[26,5842,5843],{},[29,5844,5845],{},"一维数组定义方式",[347,5847,5848,5858],{},[350,5849,5850],{},[353,5851,5852,5855],{},[356,5853,5854],{},"方式",[356,5856,5857],{},"注意事项",[367,5859,5860,5874,5884],{},[353,5861,5862,5868],{},[372,5863,5864,5865,2310],{},"数据类型 数组名",[79,5866,5867],{},"数组长度",[372,5869,5870,5871,5873],{},"这种方式是先定义再arr",[79,5872,2684],{},"赋值",[353,5875,5876,5881],{},[372,5877,5864,5878,5880],{},[79,5879,5867],{},"={值1,值2....};",[372,5882,5883],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[353,5885,5886,5890],{},[372,5887,5864,5888,5880],{},[79,5889],{},[372,5891,5892,5893,5895],{},"int arr",[79,5894],{},";这是不正确的，按照这样的方式定义必须有初始长度",[26,5897,5898],{"start":167},[29,5899,5900],{},"一维数组数组名\n用途：",[3246,5902,5903],{},[29,5904,5905],{},"1.可以统计整个数组在内存中的长度：",[51,5907,5909],{"className":2248,"code":5908,"language":2250,"meta":57,"style":57},"sizeof(arr);\nsizeof(arr[0]);\n",[59,5910,5911,5918],{"__ignoreMap":57},[79,5912,5913,5915],{"class":81,"line":82},[79,5914,2257],{"class":448},[79,5916,5917],{"class":228},"(arr);\n",[79,5919,5920,5922,5925,5927],{"class":81,"line":167},[79,5921,2257],{"class":448},[79,5923,5924],{"class":228},"(arr[",[79,5926,759],{"class":96},[79,5928,5929],{"class":228},"]);\n",[3246,5931,5932],{},[29,5933,5934],{},"2.可以获取数组在内存中的首地址:",[51,5936,5938],{"className":2248,"code":5937,"language":2250,"meta":57,"style":57},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[59,5939,5940,5945,5958,5963],{"__ignoreMap":57},[79,5941,5942],{"class":81,"line":82},[79,5943,5944],{"class":2313},"\u002F\u002F查看16进制的首地址\n",[79,5946,5947,5949,5951,5954,5956],{"class":81,"line":167},[79,5948,3476],{"class":228},[79,5950,3283],{"class":448},[79,5952,5953],{"class":228},"arr",[79,5955,3283],{"class":448},[79,5957,3305],{"class":228},[79,5959,5960],{"class":81,"line":178},[79,5961,5962],{"class":2313},"\u002F\u002F看10进制数\n",[79,5964,5965,5967,5969,5971,5973,5975,5977,5980,5982,5984,5986],{"class":81,"line":545},[79,5966,3476],{"class":228},[79,5968,3283],{"class":448},[79,5970,455],{"class":228},[79,5972,2262],{"class":448},[79,5974,2672],{"class":228},[79,5976,2596],{"class":448},[79,5978,5979],{"class":228},"arr[",[79,5981,759],{"class":96},[79,5983,3179],{"class":228},[79,5985,3283],{"class":448},[79,5987,3305],{"class":228},[19,5989,5990],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[3246,5992,5993],{},[29,5994,5995],{},"1️⃣五只小猪称体重",[51,5997,5999],{"className":2248,"code":5998,"language":2250,"meta":57,"style":57},"#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    int arr[5]={300,350,200,400,250};\n    int tmp=0;\n    for (int i=0;i\u003C5;i++)\n    {\n        if(tmp\u003Carr[i])\n        {\n            tmp=arr[i];\n        }\n    }\n    cout\u003C\u003Ctmp\u003C\u003Cendl;\n    return 0;\n}\n",[59,6000,6001,6007,6017,6025,6029,6069,6082,6108,6112,6124,6128,6138,6142,6146,6159,6167],{"__ignoreMap":57},[79,6002,6003,6005],{"class":81,"line":82},[79,6004,4036],{"class":448},[79,6006,4039],{"class":89},[79,6008,6009,6011,6013,6015],{"class":81,"line":167},[79,6010,4044],{"class":448},[79,6012,4047],{"class":448},[79,6014,4050],{"class":85},[79,6016,3400],{"class":228},[79,6018,6019,6021,6023],{"class":81,"line":178},[79,6020,2262],{"class":448},[79,6022,826],{"class":85},[79,6024,4061],{"class":228},[79,6026,6027],{"class":81,"line":545},[79,6028,3652],{"class":228},[79,6030,6031,6033,6036,6038,6040,6042,6044,6047,6049,6052,6054,6056,6058,6061,6063,6066],{"class":81,"line":550},[79,6032,4070],{"class":448},[79,6034,6035],{"class":228}," arr[",[79,6037,2563],{"class":96},[79,6039,3179],{"class":228},[79,6041,239],{"class":448},[79,6043,3136],{"class":228},[79,6045,6046],{"class":96},"300",[79,6048,2621],{"class":228},[79,6050,6051],{"class":96},"350",[79,6053,2621],{"class":228},[79,6055,3817],{"class":96},[79,6057,2621],{"class":228},[79,6059,6060],{"class":96},"400",[79,6062,2621],{"class":228},[79,6064,6065],{"class":96},"250",[79,6067,6068],{"class":228},"};\n",[79,6070,6071,6073,6076,6078,6080],{"class":81,"line":562},[79,6072,4070],{"class":448},[79,6074,6075],{"class":228}," tmp",[79,6077,239],{"class":448},[79,6079,759],{"class":96},[79,6081,3400],{"class":228},[79,6083,6084,6086,6088,6090,6092,6094,6096,6098,6100,6102,6104,6106],{"class":81,"line":568},[79,6085,915],{"class":448},[79,6087,3757],{"class":228},[79,6089,2262],{"class":448},[79,6091,5107],{"class":228},[79,6093,239],{"class":448},[79,6095,759],{"class":96},[79,6097,5114],{"class":228},[79,6099,229],{"class":448},[79,6101,2563],{"class":96},[79,6103,5114],{"class":228},[79,6105,4377],{"class":448},[79,6107,850],{"class":228},[79,6109,6110],{"class":81,"line":574},[79,6111,4115],{"class":228},[79,6113,6114,6116,6119,6121],{"class":81,"line":579},[79,6115,1089],{"class":448},[79,6117,6118],{"class":228},"(tmp",[79,6120,229],{"class":448},[79,6122,6123],{"class":228},"arr[i])\n",[79,6125,6126],{"class":81,"line":585},[79,6127,4593],{"class":228},[79,6129,6130,6133,6135],{"class":81,"line":591},[79,6131,6132],{"class":228},"            tmp",[79,6134,239],{"class":448},[79,6136,6137],{"class":228},"arr[i];\n",[79,6139,6140],{"class":81,"line":596},[79,6141,4612],{"class":228},[79,6143,6144],{"class":81,"line":602},[79,6145,4272],{"class":228},[79,6147,6148,6150,6152,6155,6157],{"class":81,"line":608},[79,6149,3657],{"class":228},[79,6151,3283],{"class":448},[79,6153,6154],{"class":228},"tmp",[79,6156,3283],{"class":448},[79,6158,3305],{"class":228},[79,6160,6161,6163,6165],{"class":81,"line":614},[79,6162,715],{"class":448},[79,6164,1103],{"class":96},[79,6166,3400],{"class":228},[79,6168,6169],{"class":81,"line":619},[79,6170,3671],{"class":228},[3246,6172,6173],{},[29,6174,6175],{},"2️⃣数组元素逆置",[51,6177,6179],{"className":2248,"code":6178,"language":2250,"meta":57,"style":57},"\u002F\u002F元素逆置\n#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n   int arr[5]={1,2,3,4,5};\n   int start=0;\u002F\u002F起始下标\n   int end=sizeof(arr)\u002Fsizeof(arr[0])-1;\u002F\u002F结束下标\n   while (start\u003Cend)\n   {\n    \u002F\u002F实现元素互换代码\n    int temp=arr[start];\n    arr[start]=arr[end];\n    arr[end]=temp;\n    \u002F\u002F下标更新\n    start++;\n    end--;\n   }\n   \u002F\u002F输出逆置后的数组\n   for (int i=0;i\u003C5;i++)\n   {\n    cout\u003C\u003Carr[i]\u003C\u003C\" \";\n   }\n   system(\"pause\");\n   return 0;\n}\n",[59,6180,6181,6186,6192,6202,6210,6214,6249,6265,6297,6310,6315,6320,6332,6342,6352,6357,6366,6376,6381,6386,6413,6417,6433,6437,6448,6457],{"__ignoreMap":57},[79,6182,6183],{"class":81,"line":82},[79,6184,6185],{"class":2313},"\u002F\u002F元素逆置\n",[79,6187,6188,6190],{"class":81,"line":167},[79,6189,4036],{"class":448},[79,6191,4039],{"class":89},[79,6193,6194,6196,6198,6200],{"class":81,"line":178},[79,6195,4044],{"class":448},[79,6197,4047],{"class":448},[79,6199,4050],{"class":85},[79,6201,3400],{"class":228},[79,6203,6204,6206,6208],{"class":81,"line":545},[79,6205,2262],{"class":448},[79,6207,826],{"class":85},[79,6209,4061],{"class":228},[79,6211,6212],{"class":81,"line":550},[79,6213,3652],{"class":228},[79,6215,6216,6219,6221,6223,6225,6227,6229,6231,6233,6235,6237,6239,6241,6243,6245,6247],{"class":81,"line":562},[79,6217,6218],{"class":448},"   int",[79,6220,6035],{"class":228},[79,6222,2563],{"class":96},[79,6224,3179],{"class":228},[79,6226,239],{"class":448},[79,6228,3136],{"class":228},[79,6230,775],{"class":96},[79,6232,2621],{"class":228},[79,6234,2331],{"class":96},[79,6236,2621],{"class":228},[79,6238,970],{"class":96},[79,6240,2621],{"class":228},[79,6242,2537],{"class":96},[79,6244,2621],{"class":228},[79,6246,2563],{"class":96},[79,6248,6068],{"class":228},[79,6250,6251,6253,6256,6258,6260,6262],{"class":81,"line":568},[79,6252,6218],{"class":448},[79,6254,6255],{"class":228}," start",[79,6257,239],{"class":448},[79,6259,759],{"class":96},[79,6261,2310],{"class":228},[79,6263,6264],{"class":2313},"\u002F\u002F起始下标\n",[79,6266,6267,6269,6272,6275,6278,6281,6283,6285,6288,6290,6292,6294],{"class":81,"line":574},[79,6268,6218],{"class":448},[79,6270,6271],{"class":228}," end",[79,6273,6274],{"class":448},"=sizeof",[79,6276,6277],{"class":228},"(arr)",[79,6279,6280],{"class":448},"\u002Fsizeof",[79,6282,5924],{"class":228},[79,6284,759],{"class":96},[79,6286,6287],{"class":228},"])",[79,6289,478],{"class":448},[79,6291,775],{"class":96},[79,6293,2310],{"class":228},[79,6295,6296],{"class":2313},"\u002F\u002F结束下标\n",[79,6298,6299,6302,6305,6307],{"class":81,"line":579},[79,6300,6301],{"class":448},"   while",[79,6303,6304],{"class":228}," (start",[79,6306,229],{"class":448},[79,6308,6309],{"class":228},"end)\n",[79,6311,6312],{"class":81,"line":585},[79,6313,6314],{"class":228},"   {\n",[79,6316,6317],{"class":81,"line":591},[79,6318,6319],{"class":2313},"    \u002F\u002F实现元素互换代码\n",[79,6321,6322,6324,6327,6329],{"class":81,"line":596},[79,6323,4070],{"class":448},[79,6325,6326],{"class":228}," temp",[79,6328,239],{"class":448},[79,6330,6331],{"class":228},"arr[start];\n",[79,6333,6334,6337,6339],{"class":81,"line":602},[79,6335,6336],{"class":228},"    arr[start]",[79,6338,239],{"class":448},[79,6340,6341],{"class":228},"arr[end];\n",[79,6343,6344,6347,6349],{"class":81,"line":608},[79,6345,6346],{"class":228},"    arr[end]",[79,6348,239],{"class":448},[79,6350,6351],{"class":228},"temp;\n",[79,6353,6354],{"class":81,"line":614},[79,6355,6356],{"class":2313},"    \u002F\u002F下标更新\n",[79,6358,6359,6362,6364],{"class":81,"line":619},[79,6360,6361],{"class":228},"    start",[79,6363,4377],{"class":448},[79,6365,3400],{"class":228},[79,6367,6368,6371,6374],{"class":81,"line":625},[79,6369,6370],{"class":228},"    end",[79,6372,6373],{"class":448},"--",[79,6375,3400],{"class":228},[79,6377,6378],{"class":81,"line":631},[79,6379,6380],{"class":228},"   }\n",[79,6382,6383],{"class":81,"line":637},[79,6384,6385],{"class":2313},"   \u002F\u002F输出逆置后的数组\n",[79,6387,6388,6391,6393,6395,6397,6399,6401,6403,6405,6407,6409,6411],{"class":81,"line":643},[79,6389,6390],{"class":448},"   for",[79,6392,3757],{"class":228},[79,6394,2262],{"class":448},[79,6396,5107],{"class":228},[79,6398,239],{"class":448},[79,6400,759],{"class":96},[79,6402,5114],{"class":228},[79,6404,229],{"class":448},[79,6406,2563],{"class":96},[79,6408,5114],{"class":228},[79,6410,4377],{"class":448},[79,6412,850],{"class":228},[79,6414,6415],{"class":81,"line":649},[79,6416,6314],{"class":228},[79,6418,6419,6421,6423,6426,6428,6431],{"class":81,"line":655},[79,6420,3657],{"class":228},[79,6422,3283],{"class":448},[79,6424,6425],{"class":228},"arr[i]",[79,6427,3283],{"class":448},[79,6429,6430],{"class":89},"\" \"",[79,6432,3400],{"class":228},[79,6434,6435],{"class":81,"line":660},[79,6436,6380],{"class":228},[79,6438,6439,6442,6444,6446],{"class":81,"line":666},[79,6440,6441],{"class":85},"   system",[79,6443,455],{"class":228},[79,6445,4393],{"class":89},[79,6447,4795],{"class":228},[79,6449,6450,6453,6455],{"class":81,"line":672},[79,6451,6452],{"class":448},"   return",[79,6454,1103],{"class":96},[79,6456,3400],{"class":228},[79,6458,6459],{"class":81,"line":678},[79,6460,3671],{"class":228},[3246,6462,6463],{},[29,6464,6465],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[51,6467,6469],{"className":2248,"code":6468,"language":2250,"meta":57,"style":57},"\u002F\u002F冒泡排序,升序\n#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    int arr[9] = {4,2,8,0,5,7,1,3,9};\n    cout\u003C\u003C\"排序前：\"\u003C\u003Cendl;\n    for (int i=0;i\u003C9;i++)\n    {\n        cout\u003C\u003Carr[i]\u003C\u003C\" \";\n    }\n    \u002F\u002F开始冒泡排序\n    \u002F\u002F总共排序轮数为 元素个数-1\n    for (int i=0;i\u003C9-1;i++)\n    {\n        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n        for (int j=0;j\u003C9-i-1;j++)\n        {\n            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n            if(arr[j]>arr[j+1])\n            {\n                int temp=arr[j];\n                arr[j]=arr[j+1];\n                arr[j+1]=temp;\n            }\n        }\n    }\n    cout\u003C\u003C\"排序后：\"\u003C\u003Cendl;\n    for (int i=0;i\u003C9;i++)\n    {\n        cout\u003C\u003Carr[i]\u003C\u003C\" \";\n    }\n    return 0;\n}\n",[59,6470,6471,6476,6482,6492,6500,6504,6555,6568,6594,6598,6612,6616,6621,6626,6656,6660,6665,6699,6703,6708,6728,6733,6745,6761,6776,6781,6785,6789,6802,6828,6832,6846,6850,6858],{"__ignoreMap":57},[79,6472,6473],{"class":81,"line":82},[79,6474,6475],{"class":2313},"\u002F\u002F冒泡排序,升序\n",[79,6477,6478,6480],{"class":81,"line":167},[79,6479,4036],{"class":448},[79,6481,4039],{"class":89},[79,6483,6484,6486,6488,6490],{"class":81,"line":178},[79,6485,4044],{"class":448},[79,6487,4047],{"class":448},[79,6489,4050],{"class":85},[79,6491,3400],{"class":228},[79,6493,6494,6496,6498],{"class":81,"line":545},[79,6495,2262],{"class":448},[79,6497,826],{"class":85},[79,6499,4061],{"class":228},[79,6501,6502],{"class":81,"line":550},[79,6503,3652],{"class":228},[79,6505,6506,6508,6510,6512,6514,6516,6519,6521,6523,6525,6527,6529,6531,6533,6535,6537,6539,6541,6543,6545,6547,6549,6551,6553],{"class":81,"line":562},[79,6507,4070],{"class":448},[79,6509,6035],{"class":228},[79,6511,2663],{"class":96},[79,6513,877],{"class":228},[79,6515,239],{"class":448},[79,6517,6518],{"class":228}," {",[79,6520,2537],{"class":96},[79,6522,2621],{"class":228},[79,6524,2331],{"class":96},[79,6526,2621],{"class":228},[79,6528,2638],{"class":96},[79,6530,2621],{"class":228},[79,6532,759],{"class":96},[79,6534,2621],{"class":228},[79,6536,2563],{"class":96},[79,6538,2621],{"class":228},[79,6540,2612],{"class":96},[79,6542,2621],{"class":228},[79,6544,775],{"class":96},[79,6546,2621],{"class":228},[79,6548,970],{"class":96},[79,6550,2621],{"class":228},[79,6552,2663],{"class":96},[79,6554,6068],{"class":228},[79,6556,6557,6559,6561,6564,6566],{"class":81,"line":568},[79,6558,3657],{"class":228},[79,6560,3283],{"class":448},[79,6562,6563],{"class":89},"\"排序前：\"",[79,6565,3283],{"class":448},[79,6567,3305],{"class":228},[79,6569,6570,6572,6574,6576,6578,6580,6582,6584,6586,6588,6590,6592],{"class":81,"line":574},[79,6571,915],{"class":448},[79,6573,3757],{"class":228},[79,6575,2262],{"class":448},[79,6577,5107],{"class":228},[79,6579,239],{"class":448},[79,6581,759],{"class":96},[79,6583,5114],{"class":228},[79,6585,229],{"class":448},[79,6587,2663],{"class":96},[79,6589,5114],{"class":228},[79,6591,4377],{"class":448},[79,6593,850],{"class":228},[79,6595,6596],{"class":81,"line":579},[79,6597,4115],{"class":228},[79,6599,6600,6602,6604,6606,6608,6610],{"class":81,"line":585},[79,6601,5525],{"class":228},[79,6603,3283],{"class":448},[79,6605,6425],{"class":228},[79,6607,3283],{"class":448},[79,6609,6430],{"class":89},[79,6611,3400],{"class":228},[79,6613,6614],{"class":81,"line":591},[79,6615,4272],{"class":228},[79,6617,6618],{"class":81,"line":596},[79,6619,6620],{"class":2313},"    \u002F\u002F开始冒泡排序\n",[79,6622,6623],{"class":81,"line":602},[79,6624,6625],{"class":2313},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[79,6627,6628,6630,6632,6634,6636,6638,6640,6642,6644,6646,6648,6650,6652,6654],{"class":81,"line":608},[79,6629,915],{"class":448},[79,6631,3757],{"class":228},[79,6633,2262],{"class":448},[79,6635,5107],{"class":228},[79,6637,239],{"class":448},[79,6639,759],{"class":96},[79,6641,5114],{"class":228},[79,6643,229],{"class":448},[79,6645,2663],{"class":96},[79,6647,478],{"class":448},[79,6649,775],{"class":96},[79,6651,5114],{"class":228},[79,6653,4377],{"class":448},[79,6655,850],{"class":228},[79,6657,6658],{"class":81,"line":614},[79,6659,4115],{"class":228},[79,6661,6662],{"class":81,"line":619},[79,6663,6664],{"class":2313},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[79,6666,6667,6669,6671,6673,6675,6677,6679,6681,6683,6685,6687,6689,6691,6693,6695,6697],{"class":81,"line":625},[79,6668,5477],{"class":448},[79,6670,3757],{"class":228},[79,6672,2262],{"class":448},[79,6674,5484],{"class":228},[79,6676,239],{"class":448},[79,6678,759],{"class":96},[79,6680,5491],{"class":228},[79,6682,229],{"class":448},[79,6684,2663],{"class":96},[79,6686,478],{"class":448},[79,6688,2684],{"class":228},[79,6690,478],{"class":448},[79,6692,775],{"class":96},[79,6694,5491],{"class":228},[79,6696,4377],{"class":448},[79,6698,850],{"class":228},[79,6700,6701],{"class":81,"line":631},[79,6702,4593],{"class":228},[79,6704,6705],{"class":81,"line":637},[79,6706,6707],{"class":2313},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[79,6709,6710,6713,6716,6718,6721,6723,6725],{"class":81,"line":643},[79,6711,6712],{"class":448},"            if",[79,6714,6715],{"class":228},"(arr[j]",[79,6717,3199],{"class":448},[79,6719,6720],{"class":228},"arr[j",[79,6722,995],{"class":448},[79,6724,775],{"class":96},[79,6726,6727],{"class":228},"])\n",[79,6729,6730],{"class":81,"line":649},[79,6731,6732],{"class":228},"            {\n",[79,6734,6735,6738,6740,6742],{"class":81,"line":655},[79,6736,6737],{"class":448},"                int",[79,6739,6326],{"class":228},[79,6741,239],{"class":448},[79,6743,6744],{"class":228},"arr[j];\n",[79,6746,6747,6750,6752,6754,6756,6758],{"class":81,"line":660},[79,6748,6749],{"class":228},"                arr[j]",[79,6751,239],{"class":448},[79,6753,6720],{"class":228},[79,6755,995],{"class":448},[79,6757,775],{"class":96},[79,6759,6760],{"class":228},"];\n",[79,6762,6763,6766,6768,6770,6772,6774],{"class":81,"line":666},[79,6764,6765],{"class":228},"                arr[j",[79,6767,995],{"class":448},[79,6769,775],{"class":96},[79,6771,3179],{"class":228},[79,6773,239],{"class":448},[79,6775,6351],{"class":228},[79,6777,6778],{"class":81,"line":672},[79,6779,6780],{"class":228},"            }\n",[79,6782,6783],{"class":81,"line":678},[79,6784,4612],{"class":228},[79,6786,6787],{"class":81,"line":684},[79,6788,4272],{"class":228},[79,6790,6791,6793,6795,6798,6800],{"class":81,"line":690},[79,6792,3657],{"class":228},[79,6794,3283],{"class":448},[79,6796,6797],{"class":89},"\"排序后：\"",[79,6799,3283],{"class":448},[79,6801,3305],{"class":228},[79,6803,6804,6806,6808,6810,6812,6814,6816,6818,6820,6822,6824,6826],{"class":81,"line":695},[79,6805,915],{"class":448},[79,6807,3757],{"class":228},[79,6809,2262],{"class":448},[79,6811,5107],{"class":228},[79,6813,239],{"class":448},[79,6815,759],{"class":96},[79,6817,5114],{"class":228},[79,6819,229],{"class":448},[79,6821,2663],{"class":96},[79,6823,5114],{"class":228},[79,6825,4377],{"class":448},[79,6827,850],{"class":228},[79,6829,6830],{"class":81,"line":700},[79,6831,4115],{"class":228},[79,6833,6834,6836,6838,6840,6842,6844],{"class":81,"line":712},[79,6835,5525],{"class":228},[79,6837,3283],{"class":448},[79,6839,6425],{"class":228},[79,6841,3283],{"class":448},[79,6843,6430],{"class":89},[79,6845,3400],{"class":228},[79,6847,6848],{"class":81,"line":721},[79,6849,4272],{"class":228},[79,6851,6852,6854,6856],{"class":81,"line":726},[79,6853,715],{"class":448},[79,6855,1103],{"class":96},[79,6857,3400],{"class":228},[79,6859,6860],{"class":81,"line":731},[79,6861,3671],{"class":228},[339,6863,6865],{"id":6864},"_172二维数组","1.7.2二维数组",[26,6867,6868],{},[29,6869,6870],{},"二维数组的四种定义方式",[347,6872,6873,6882],{},[350,6874,6875],{},[353,6876,6877,6880],{},[356,6878,6879],{},"序号",[356,6881,5854],{},[367,6883,6884,6894,6903,6912,6921],{},[353,6885,6886,6888],{},[372,6887,775],{},[372,6889,6890,6891,2310],{},"数据类型 数组名[行数]",[79,6892,6893],{},"列数",[353,6895,6896,6898],{},[372,6897,2331],{},[372,6899,6890,6900,6902],{},[79,6901,6893],{},"={ {数据1,数据2}，{数据3，数据4}... }",[353,6904,6905,6907],{},[372,6906,970],{},[372,6908,6890,6909,6911],{},[79,6910,6893],{},"={数据1,数据2,数据3...}",[353,6913,6914,6916],{},[372,6915,2537],{},[372,6917,6918,6919,6911],{},"数据类型 数组名[]",[79,6920,6893],{},[353,6922,6923,6926],{},[372,6924,6925],{},"注意：不能只省略列数",[372,6927],{},[26,6929,6930],{"start":167},[29,6931,6932],{},"二维数组数组名",[3246,6934,6935,6938],{},[29,6936,6937],{},"1.查看二维数组所占内存空间",[29,6939,6940],{},"2.获取二维数组首地址",[19,6942,6943],{},"已知二维数组，求二维数组的行数与列数",[51,6945,6947],{"className":2248,"code":6946,"language":2250,"meta":57,"style":57},"int main()\n{\n    int arr[2][3]=\n    {\n        {1,2,3},\n        {4,5,6}\n    };\n    cout\u003C\u003C\"二维数组的行数\"\u003C\u003Csizeof(arr)\u002Fsizeof(arr[0])\u003C\u003Cendl;\n    cout\u003C\u003C\"二维数组的列数\"\u003C\u003Csizeof(arr[0])\u002Fsizeof(arr[0][0])\u003C\u003Cendl;\n}\n",[59,6948,6949,6957,6961,6979,6983,7001,7017,7022,7047,7080],{"__ignoreMap":57},[79,6950,6951,6953,6955],{"class":81,"line":82},[79,6952,2262],{"class":448},[79,6954,826],{"class":85},[79,6956,4061],{"class":228},[79,6958,6959],{"class":81,"line":167},[79,6960,3652],{"class":228},[79,6962,6963,6965,6967,6969,6972,6974,6976],{"class":81,"line":178},[79,6964,4070],{"class":448},[79,6966,6035],{"class":228},[79,6968,2331],{"class":96},[79,6970,6971],{"class":228},"][",[79,6973,970],{"class":96},[79,6975,3179],{"class":228},[79,6977,6978],{"class":448},"=\n",[79,6980,6981],{"class":81,"line":545},[79,6982,4115],{"class":228},[79,6984,6985,6988,6990,6992,6994,6996,6998],{"class":81,"line":550},[79,6986,6987],{"class":228},"        {",[79,6989,775],{"class":96},[79,6991,2621],{"class":228},[79,6993,2331],{"class":96},[79,6995,2621],{"class":228},[79,6997,970],{"class":96},[79,6999,7000],{"class":228},"},\n",[79,7002,7003,7005,7007,7009,7011,7013,7015],{"class":81,"line":562},[79,7004,6987],{"class":228},[79,7006,2537],{"class":96},[79,7008,2621],{"class":228},[79,7010,2563],{"class":96},[79,7012,2621],{"class":228},[79,7014,2587],{"class":96},[79,7016,3671],{"class":228},[79,7018,7019],{"class":81,"line":568},[79,7020,7021],{"class":228},"    };\n",[79,7023,7024,7026,7028,7031,7033,7035,7037,7039,7041,7043,7045],{"class":81,"line":574},[79,7025,3657],{"class":228},[79,7027,3283],{"class":448},[79,7029,7030],{"class":89},"\"二维数组的行数\"",[79,7032,3479],{"class":448},[79,7034,6277],{"class":228},[79,7036,6280],{"class":448},[79,7038,5924],{"class":228},[79,7040,759],{"class":96},[79,7042,6287],{"class":228},[79,7044,3283],{"class":448},[79,7046,3305],{"class":228},[79,7048,7049,7051,7053,7056,7058,7060,7062,7064,7066,7068,7070,7072,7074,7076,7078],{"class":81,"line":579},[79,7050,3657],{"class":228},[79,7052,3283],{"class":448},[79,7054,7055],{"class":89},"\"二维数组的列数\"",[79,7057,3479],{"class":448},[79,7059,5924],{"class":228},[79,7061,759],{"class":96},[79,7063,6287],{"class":228},[79,7065,6280],{"class":448},[79,7067,5924],{"class":228},[79,7069,759],{"class":96},[79,7071,6971],{"class":228},[79,7073,759],{"class":96},[79,7075,6287],{"class":228},[79,7077,3283],{"class":448},[79,7079,3305],{"class":228},[79,7081,7082],{"class":81,"line":585},[79,7083,3671],{"class":228},[19,7085,7086],{},"查看二维数组首地址",[51,7088,7090],{"className":2248,"code":7089,"language":2250,"meta":57,"style":57},"cout\u003C\u003C\"二维数组首地址：\"\u003C\u003Carr\u003C\u003Cendl;\ncout\u003C\u003C\"二维数组第一行的首地址：\"\u003C\u003C(int)arr[0]\u003C\u003Cendl;\ncout\u003C\u003C\"二维数组第二行的首地址：\"\u003C\u003C(int)arr[1]\u003C\u003Cendl;\ncout\u003C\u003C\"二维数组第一个元素的首地址:\"\u003C\u003C(int)&arr[0][0]\u003C\u003Cendl;\u002F\u002F对于数，要加取址符\n",[59,7091,7092,7109,7135,7160],{"__ignoreMap":57},[79,7093,7094,7096,7098,7101,7103,7105,7107],{"class":81,"line":82},[79,7095,3476],{"class":228},[79,7097,3283],{"class":448},[79,7099,7100],{"class":89},"\"二维数组首地址：\"",[79,7102,3283],{"class":448},[79,7104,5953],{"class":228},[79,7106,3283],{"class":448},[79,7108,3305],{"class":228},[79,7110,7111,7113,7115,7118,7120,7122,7124,7127,7129,7131,7133],{"class":81,"line":167},[79,7112,3476],{"class":228},[79,7114,3283],{"class":448},[79,7116,7117],{"class":89},"\"二维数组第一行的首地址：\"",[79,7119,3283],{"class":448},[79,7121,455],{"class":228},[79,7123,2262],{"class":448},[79,7125,7126],{"class":228},")arr[",[79,7128,759],{"class":96},[79,7130,3179],{"class":228},[79,7132,3283],{"class":448},[79,7134,3305],{"class":228},[79,7136,7137,7139,7141,7144,7146,7148,7150,7152,7154,7156,7158],{"class":81,"line":178},[79,7138,3476],{"class":228},[79,7140,3283],{"class":448},[79,7142,7143],{"class":89},"\"二维数组第二行的首地址：\"",[79,7145,3283],{"class":448},[79,7147,455],{"class":228},[79,7149,2262],{"class":448},[79,7151,7126],{"class":228},[79,7153,775],{"class":96},[79,7155,3179],{"class":228},[79,7157,3283],{"class":448},[79,7159,3305],{"class":228},[79,7161,7162,7164,7166,7169,7171,7173,7175,7177,7179,7181,7183,7185,7187,7189,7191,7193],{"class":81,"line":545},[79,7163,3476],{"class":228},[79,7165,3283],{"class":448},[79,7167,7168],{"class":89},"\"二维数组第一个元素的首地址:\"",[79,7170,3283],{"class":448},[79,7172,455],{"class":228},[79,7174,2262],{"class":448},[79,7176,2672],{"class":228},[79,7178,2596],{"class":448},[79,7180,5979],{"class":228},[79,7182,759],{"class":96},[79,7184,6971],{"class":228},[79,7186,759],{"class":96},[79,7188,3179],{"class":228},[79,7190,3283],{"class":448},[79,7192,3348],{"class":228},[79,7194,7195],{"class":2313},"\u002F\u002F对于数，要加取址符\n",[2159,7197,7198],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":57,"searchDepth":167,"depth":167,"links":7200},[7201,7202,7203,7211,7212,7218,7223],{"id":2203,"depth":167,"text":2204},{"id":2210,"depth":167,"text":2211},{"id":2225,"depth":167,"text":2226,"children":7204},[7205,7206,7207,7208,7209,7210],{"id":2229,"depth":178,"text":2230},{"id":2274,"depth":178,"text":2275},{"id":2339,"depth":178,"text":2340},{"id":3264,"depth":178,"text":3265},{"id":3354,"depth":178,"text":3355},{"id":3450,"depth":178,"text":3451},{"id":3492,"depth":167,"text":3493},{"id":3560,"depth":167,"text":3561,"children":7213},[7214,7215,7216,7217],{"id":3564,"depth":178,"text":3565},{"id":3586,"depth":178,"text":3587},{"id":3595,"depth":178,"text":3596},{"id":3604,"depth":178,"text":3605},{"id":3613,"depth":167,"text":3614,"children":7219},[7220,7221,7222],{"id":3617,"depth":178,"text":3618},{"id":4290,"depth":178,"text":4291},{"id":5695,"depth":178,"text":5696},{"id":5835,"depth":167,"text":5836,"children":7224},[7225,7226],{"id":5839,"depth":178,"text":5840},{"id":6864,"depth":178,"text":6865},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":2195,"description":57},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":7233,"title":7234,"body":7235,"description":57,"extension":2186,"meta":8332,"navigation":541,"path":8333,"seo":8334,"stem":8335,"__hash__":8336},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":7236,"toc":8324},[7237,7240,7244,7252,7258,7261,7327,7331,7334,7410,7414,7417,7420,7423,7636,7640,7645,7709,7714,7781,7786,7876,7879,7984,7988,7991,7997,8141,8145,8148,8162,8165,8210,8213,8321],[10,7238,7234],{"id":7239},"_2函数",[14,7241,7243],{"id":7242},"_21函数概述","2.1函数概述",[26,7245,7246,7249],{},[29,7247,7248],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[29,7250,7251],{},"语法：",[51,7253,7256],{"className":7254,"code":7255,"language":56,"meta":57},[54],"返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n",[59,7257,7255],{"__ignoreMap":57},[19,7259,7260],{},"小案例",[51,7262,7264],{"className":2248,"code":7263,"language":2250,"meta":57,"style":57},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[59,7265,7266,7271,7295,7299,7316,7323],{"__ignoreMap":57},[79,7267,7268],{"class":81,"line":82},[79,7269,7270],{"class":2313},"\u002F\u002Fnum1,num2形参\n",[79,7272,7273,7275,7278,7280,7282,7286,7288,7290,7293],{"class":81,"line":167},[79,7274,2262],{"class":448},[79,7276,7277],{"class":85}," add",[79,7279,455],{"class":228},[79,7281,2262],{"class":448},[79,7283,7285],{"class":7284},"s4XuR"," num1",[79,7287,2621],{"class":228},[79,7289,2262],{"class":448},[79,7291,7292],{"class":7284}," num2",[79,7294,850],{"class":228},[79,7296,7297],{"class":81,"line":178},[79,7298,3652],{"class":228},[79,7300,7301,7303,7306,7308,7311,7313],{"class":81,"line":545},[79,7302,4070],{"class":448},[79,7304,7305],{"class":228}," sum",[79,7307,239],{"class":448},[79,7309,7310],{"class":228},"num1",[79,7312,995],{"class":448},[79,7314,7315],{"class":228},"num2;\n",[79,7317,7318,7320],{"class":81,"line":550},[79,7319,715],{"class":448},[79,7321,7322],{"class":228}," sum;\n",[79,7324,7325],{"class":81,"line":562},[79,7326,3671],{"class":228},[14,7328,7330],{"id":7329},"_22函数调用","2.2函数调用",[19,7332,7333],{},"调用刚刚写的求和函数",[51,7335,7337],{"className":2248,"code":7336,"language":2250,"meta":57,"style":57},"int main()\n{\n    \u002F\u002Fa,b实参\n    int a=0;\n    int b=0;\n    cin>>a,b;\n    \u002F\u002F调用函数时，实参值传给了形参\n    cout\u003C\u003Cadd(a,b);\n}\n",[59,7338,7339,7347,7351,7356,7368,7380,7389,7394,7406],{"__ignoreMap":57},[79,7340,7341,7343,7345],{"class":81,"line":82},[79,7342,2262],{"class":448},[79,7344,826],{"class":85},[79,7346,4061],{"class":228},[79,7348,7349],{"class":81,"line":167},[79,7350,3652],{"class":228},[79,7352,7353],{"class":81,"line":178},[79,7354,7355],{"class":2313},"    \u002F\u002Fa,b实参\n",[79,7357,7358,7360,7362,7364,7366],{"class":81,"line":545},[79,7359,4070],{"class":448},[79,7361,3505],{"class":228},[79,7363,239],{"class":448},[79,7365,759],{"class":96},[79,7367,3400],{"class":228},[79,7369,7370,7372,7374,7376,7378],{"class":81,"line":550},[79,7371,4070],{"class":448},[79,7373,4909],{"class":228},[79,7375,239],{"class":448},[79,7377,759],{"class":96},[79,7379,3400],{"class":228},[79,7381,7382,7384,7386],{"class":81,"line":562},[79,7383,4097],{"class":228},[79,7385,3536],{"class":448},[79,7387,7388],{"class":228},"a,b;\n",[79,7390,7391],{"class":81,"line":568},[79,7392,7393],{"class":2313},"    \u002F\u002F调用函数时，实参值传给了形参\n",[79,7395,7396,7398,7400,7403],{"class":81,"line":574},[79,7397,3657],{"class":228},[79,7399,3283],{"class":448},[79,7401,7402],{"class":85},"add",[79,7404,7405],{"class":228},"(a,b);\n",[79,7407,7408],{"class":81,"line":579},[79,7409,3671],{"class":228},[14,7411,7413],{"id":7412},"_23值传递","2.3值传递",[19,7415,7416],{},"值传递就是函数调用时实参将数值传给形参",[19,7418,7419],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,7421,7422],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[51,7424,7426],{"className":2248,"code":7425,"language":2250,"meta":57,"style":57},"void swap(int num1,int num2)\n{\n    cout\u003C\u003C\"交换前：\"\u003C\u003Cendl;\n    cout\u003C\u003C\"num1=\"\u003C\u003Cnum1\u003C\u003Cendl;\n    cout\u003C\u003C\"num2=\"\u003C\u003Cnum2\u003C\u003Cendl;\n    int temp=num1;\n    num1=num2;\n    num2=temp;\n    cout\u003C\u003C\"交换后：\"\u003C\u003Cendl;\n    cout\u003C\u003C\"num1=\"\u003C\u003Cnum1\u003C\u003Cendl;\n    cout\u003C\u003C\"num2=\"\u003C\u003Cnum2\u003C\u003Cendl;\n    return;\u002F\u002F或者不写\n}\nint main()\n{\n    int a=10;\n    int b=20;\n    swap(a,b);\n}\n",[59,7427,7428,7450,7454,7467,7484,7502,7513,7522,7531,7544,7560,7576,7585,7589,7597,7601,7613,7625,7632],{"__ignoreMap":57},[79,7429,7430,7433,7436,7438,7440,7442,7444,7446,7448],{"class":81,"line":82},[79,7431,7432],{"class":448},"void",[79,7434,7435],{"class":85}," swap",[79,7437,455],{"class":228},[79,7439,2262],{"class":448},[79,7441,7285],{"class":7284},[79,7443,2621],{"class":228},[79,7445,2262],{"class":448},[79,7447,7292],{"class":7284},[79,7449,850],{"class":228},[79,7451,7452],{"class":81,"line":167},[79,7453,3652],{"class":228},[79,7455,7456,7458,7460,7463,7465],{"class":81,"line":178},[79,7457,3657],{"class":228},[79,7459,3283],{"class":448},[79,7461,7462],{"class":89},"\"交换前：\"",[79,7464,3283],{"class":448},[79,7466,3305],{"class":228},[79,7468,7469,7471,7473,7476,7478,7480,7482],{"class":81,"line":545},[79,7470,3657],{"class":228},[79,7472,3283],{"class":448},[79,7474,7475],{"class":89},"\"num1=\"",[79,7477,3283],{"class":448},[79,7479,7310],{"class":228},[79,7481,3283],{"class":448},[79,7483,3305],{"class":228},[79,7485,7486,7488,7490,7493,7495,7498,7500],{"class":81,"line":550},[79,7487,3657],{"class":228},[79,7489,3283],{"class":448},[79,7491,7492],{"class":89},"\"num2=\"",[79,7494,3283],{"class":448},[79,7496,7497],{"class":228},"num2",[79,7499,3283],{"class":448},[79,7501,3305],{"class":228},[79,7503,7504,7506,7508,7510],{"class":81,"line":562},[79,7505,4070],{"class":448},[79,7507,6326],{"class":228},[79,7509,239],{"class":448},[79,7511,7512],{"class":228},"num1;\n",[79,7514,7515,7518,7520],{"class":81,"line":568},[79,7516,7517],{"class":228},"    num1",[79,7519,239],{"class":448},[79,7521,7315],{"class":228},[79,7523,7524,7527,7529],{"class":81,"line":574},[79,7525,7526],{"class":228},"    num2",[79,7528,239],{"class":448},[79,7530,6351],{"class":228},[79,7532,7533,7535,7537,7540,7542],{"class":81,"line":579},[79,7534,3657],{"class":228},[79,7536,3283],{"class":448},[79,7538,7539],{"class":89},"\"交换后：\"",[79,7541,3283],{"class":448},[79,7543,3305],{"class":228},[79,7545,7546,7548,7550,7552,7554,7556,7558],{"class":81,"line":585},[79,7547,3657],{"class":228},[79,7549,3283],{"class":448},[79,7551,7475],{"class":89},[79,7553,3283],{"class":448},[79,7555,7310],{"class":228},[79,7557,3283],{"class":448},[79,7559,3305],{"class":228},[79,7561,7562,7564,7566,7568,7570,7572,7574],{"class":81,"line":591},[79,7563,3657],{"class":228},[79,7565,3283],{"class":448},[79,7567,7492],{"class":89},[79,7569,3283],{"class":448},[79,7571,7497],{"class":228},[79,7573,3283],{"class":448},[79,7575,3305],{"class":228},[79,7577,7578,7580,7582],{"class":81,"line":596},[79,7579,715],{"class":448},[79,7581,2310],{"class":228},[79,7583,7584],{"class":2313},"\u002F\u002F或者不写\n",[79,7586,7587],{"class":81,"line":602},[79,7588,3671],{"class":228},[79,7590,7591,7593,7595],{"class":81,"line":608},[79,7592,2262],{"class":448},[79,7594,826],{"class":85},[79,7596,4061],{"class":228},[79,7598,7599],{"class":81,"line":614},[79,7600,3652],{"class":228},[79,7602,7603,7605,7607,7609,7611],{"class":81,"line":619},[79,7604,4070],{"class":448},[79,7606,3505],{"class":228},[79,7608,239],{"class":448},[79,7610,2689],{"class":96},[79,7612,3400],{"class":228},[79,7614,7615,7617,7619,7621,7623],{"class":81,"line":625},[79,7616,4070],{"class":448},[79,7618,4909],{"class":228},[79,7620,239],{"class":448},[79,7622,2940],{"class":96},[79,7624,3400],{"class":228},[79,7626,7627,7630],{"class":81,"line":631},[79,7628,7629],{"class":85},"    swap",[79,7631,7405],{"class":228},[79,7633,7634],{"class":81,"line":637},[79,7635,3671],{"class":228},[14,7637,7639],{"id":7638},"_24函数的常见形式","2.4函数的常见形式",[26,7641,7642],{},[29,7643,7644],{},"无参无返",[51,7646,7648],{"className":2248,"code":7647,"language":2250,"meta":57,"style":57},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[59,7649,7650,7659,7663,7676,7680,7688,7692,7697,7705],{"__ignoreMap":57},[79,7651,7652,7654,7657],{"class":81,"line":82},[79,7653,7432],{"class":448},[79,7655,7656],{"class":85}," test01",[79,7658,4061],{"class":228},[79,7660,7661],{"class":81,"line":167},[79,7662,3652],{"class":228},[79,7664,7665,7667,7669,7672,7674],{"class":81,"line":178},[79,7666,3657],{"class":228},[79,7668,3283],{"class":448},[79,7670,7671],{"class":89},"\"你好\"",[79,7673,3283],{"class":448},[79,7675,3305],{"class":228},[79,7677,7678],{"class":81,"line":545},[79,7679,3671],{"class":228},[79,7681,7682,7684,7686],{"class":81,"line":550},[79,7683,2262],{"class":448},[79,7685,826],{"class":85},[79,7687,4061],{"class":228},[79,7689,7690],{"class":81,"line":562},[79,7691,3652],{"class":228},[79,7693,7694],{"class":81,"line":568},[79,7695,7696],{"class":2313},"    \u002F\u002F函数调用\n",[79,7698,7699,7702],{"class":81,"line":574},[79,7700,7701],{"class":85},"    test01",[79,7703,7704],{"class":228},"();\n",[79,7706,7707],{"class":81,"line":579},[79,7708,3671],{"class":228},[26,7710,7711],{"start":167},[29,7712,7713],{},"有参无返",[51,7715,7717],{"className":2248,"code":7716,"language":2250,"meta":57,"style":57},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[59,7718,7719,7734,7738,7750,7754,7762,7766,7777],{"__ignoreMap":57},[79,7720,7721,7723,7726,7728,7730,7732],{"class":81,"line":82},[79,7722,7432],{"class":448},[79,7724,7725],{"class":85}," test02",[79,7727,455],{"class":228},[79,7729,2262],{"class":448},[79,7731,3505],{"class":7284},[79,7733,850],{"class":228},[79,7735,7736],{"class":81,"line":167},[79,7737,3652],{"class":228},[79,7739,7740,7742,7744,7746,7748],{"class":81,"line":178},[79,7741,3657],{"class":228},[79,7743,3283],{"class":448},[79,7745,7671],{"class":89},[79,7747,3283],{"class":448},[79,7749,3305],{"class":228},[79,7751,7752],{"class":81,"line":545},[79,7753,3671],{"class":228},[79,7755,7756,7758,7760],{"class":81,"line":550},[79,7757,2262],{"class":448},[79,7759,826],{"class":85},[79,7761,4061],{"class":228},[79,7763,7764],{"class":81,"line":562},[79,7765,3652],{"class":228},[79,7767,7768,7771,7773,7775],{"class":81,"line":568},[79,7769,7770],{"class":85},"    test02",[79,7772,455],{"class":228},[79,7774,2555],{"class":96},[79,7776,4795],{"class":228},[79,7778,7779],{"class":81,"line":574},[79,7780,3671],{"class":228},[26,7782,7783],{"start":178},[29,7784,7785],{},"无参有返",[51,7787,7789],{"className":2248,"code":7788,"language":2250,"meta":57,"style":57},"int test03()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n    return 100;\n}\nint main()\n{\n    int num1=test03();\n    cout\u003C\u003C\"num1=\"\u003C\u003Cnum1\u003C\u003Cendl; \u002F\u002F100\n}\n",[59,7790,7791,7800,7804,7816,7824,7828,7836,7840,7853,7872],{"__ignoreMap":57},[79,7792,7793,7795,7798],{"class":81,"line":82},[79,7794,2262],{"class":448},[79,7796,7797],{"class":85}," test03",[79,7799,4061],{"class":228},[79,7801,7802],{"class":81,"line":167},[79,7803,3652],{"class":228},[79,7805,7806,7808,7810,7812,7814],{"class":81,"line":178},[79,7807,3657],{"class":228},[79,7809,3283],{"class":448},[79,7811,7671],{"class":89},[79,7813,3283],{"class":448},[79,7815,3305],{"class":228},[79,7817,7818,7820,7822],{"class":81,"line":545},[79,7819,715],{"class":448},[79,7821,1097],{"class":96},[79,7823,3400],{"class":228},[79,7825,7826],{"class":81,"line":550},[79,7827,3671],{"class":228},[79,7829,7830,7832,7834],{"class":81,"line":562},[79,7831,2262],{"class":448},[79,7833,826],{"class":85},[79,7835,4061],{"class":228},[79,7837,7838],{"class":81,"line":568},[79,7839,3652],{"class":228},[79,7841,7842,7844,7846,7848,7851],{"class":81,"line":574},[79,7843,4070],{"class":448},[79,7845,7285],{"class":228},[79,7847,239],{"class":448},[79,7849,7850],{"class":85},"test03",[79,7852,7704],{"class":228},[79,7854,7855,7857,7859,7861,7863,7865,7867,7869],{"class":81,"line":579},[79,7856,3657],{"class":228},[79,7858,3283],{"class":448},[79,7860,7475],{"class":89},[79,7862,3283],{"class":448},[79,7864,7310],{"class":228},[79,7866,3283],{"class":448},[79,7868,3348],{"class":228},[79,7870,7871],{"class":2313}," \u002F\u002F100\n",[79,7873,7874],{"class":81,"line":585},[79,7875,3671],{"class":228},[19,7877,7878],{},"4.有参有返",[51,7880,7882],{"className":2248,"code":7881,"language":2250,"meta":57,"style":57},"int test04(int a)\n{\n    cout\u003C\u003C\"hello\"\u003C\u003Cendl;\n    return a;\n}\nint mian()\n{\n    int b=1;\n    int c=test04(b);\n    cout\u003C\u003Cc\u003C\u003Cendl; \u002F\u002F1\n}\n",[59,7883,7884,7899,7903,7916,7922,7926,7935,7939,7951,7965,7980],{"__ignoreMap":57},[79,7885,7886,7888,7891,7893,7895,7897],{"class":81,"line":82},[79,7887,2262],{"class":448},[79,7889,7890],{"class":85}," test04",[79,7892,455],{"class":228},[79,7894,2262],{"class":448},[79,7896,3505],{"class":7284},[79,7898,850],{"class":228},[79,7900,7901],{"class":81,"line":167},[79,7902,3652],{"class":228},[79,7904,7905,7907,7909,7912,7914],{"class":81,"line":178},[79,7906,3657],{"class":228},[79,7908,3283],{"class":448},[79,7910,7911],{"class":89},"\"hello\"",[79,7913,3283],{"class":448},[79,7915,3305],{"class":228},[79,7917,7918,7920],{"class":81,"line":545},[79,7919,715],{"class":448},[79,7921,3539],{"class":228},[79,7923,7924],{"class":81,"line":550},[79,7925,3671],{"class":228},[79,7927,7928,7930,7933],{"class":81,"line":562},[79,7929,2262],{"class":448},[79,7931,7932],{"class":85}," mian",[79,7934,4061],{"class":228},[79,7936,7937],{"class":81,"line":568},[79,7938,3652],{"class":228},[79,7940,7941,7943,7945,7947,7949],{"class":81,"line":574},[79,7942,4070],{"class":448},[79,7944,4909],{"class":228},[79,7946,239],{"class":448},[79,7948,775],{"class":96},[79,7950,3400],{"class":228},[79,7952,7953,7955,7957,7959,7962],{"class":81,"line":579},[79,7954,4070],{"class":448},[79,7956,4925],{"class":228},[79,7958,239],{"class":448},[79,7960,7961],{"class":85},"test04",[79,7963,7964],{"class":228},"(b);\n",[79,7966,7967,7969,7971,7973,7975,7977],{"class":81,"line":585},[79,7968,3657],{"class":228},[79,7970,3283],{"class":448},[79,7972,2532],{"class":228},[79,7974,3283],{"class":448},[79,7976,3348],{"class":228},[79,7978,7979],{"class":2313}," \u002F\u002F1\n",[79,7981,7982],{"class":81,"line":591},[79,7983,3671],{"class":228},[14,7985,7987],{"id":7986},"_25函数的声明","2.5函数的声明",[19,7989,7990],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,7992,7993,7994],{},"函数的",[2398,7995,7996],{},"声明可以多次，但是函数的定义只能有一次",[51,7998,8000],{"className":2248,"code":7999,"language":2250,"meta":57,"style":57},"\u002F\u002F函数声明\n\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\nint max(int a,int b);\u002F\u002F这样函数就可以写在后面，不报错了\nint main() \n{\n    int a=10;\n    int b=20;\n    cout\u003C\u003Cmax(a,b)\u003C\u003Cendl;\n}\nint max(int a,int b)\n{\n    return a>b?a:b;\n}\n",[59,8001,8002,8007,8012,8037,8046,8050,8062,8074,8090,8094,8114,8118,8137],{"__ignoreMap":57},[79,8003,8004],{"class":81,"line":82},[79,8005,8006],{"class":2313},"\u002F\u002F函数声明\n",[79,8008,8009],{"class":81,"line":167},[79,8010,8011],{"class":2313},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[79,8013,8014,8016,8019,8021,8023,8025,8027,8029,8031,8034],{"class":81,"line":178},[79,8015,2262],{"class":448},[79,8017,8018],{"class":85}," max",[79,8020,455],{"class":228},[79,8022,2262],{"class":448},[79,8024,3505],{"class":7284},[79,8026,2621],{"class":228},[79,8028,2262],{"class":448},[79,8030,4909],{"class":7284},[79,8032,8033],{"class":228},");",[79,8035,8036],{"class":2313},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[79,8038,8039,8041,8043],{"class":81,"line":545},[79,8040,2262],{"class":448},[79,8042,826],{"class":85},[79,8044,8045],{"class":228},"() \n",[79,8047,8048],{"class":81,"line":550},[79,8049,3652],{"class":228},[79,8051,8052,8054,8056,8058,8060],{"class":81,"line":562},[79,8053,4070],{"class":448},[79,8055,3505],{"class":228},[79,8057,239],{"class":448},[79,8059,2689],{"class":96},[79,8061,3400],{"class":228},[79,8063,8064,8066,8068,8070,8072],{"class":81,"line":568},[79,8065,4070],{"class":448},[79,8067,4909],{"class":228},[79,8069,239],{"class":448},[79,8071,2940],{"class":96},[79,8073,3400],{"class":228},[79,8075,8076,8078,8080,8083,8086,8088],{"class":81,"line":574},[79,8077,3657],{"class":228},[79,8079,3283],{"class":448},[79,8081,8082],{"class":85},"max",[79,8084,8085],{"class":228},"(a,b)",[79,8087,3283],{"class":448},[79,8089,3305],{"class":228},[79,8091,8092],{"class":81,"line":579},[79,8093,3671],{"class":228},[79,8095,8096,8098,8100,8102,8104,8106,8108,8110,8112],{"class":81,"line":585},[79,8097,2262],{"class":448},[79,8099,8018],{"class":85},[79,8101,455],{"class":228},[79,8103,2262],{"class":448},[79,8105,3505],{"class":7284},[79,8107,2621],{"class":228},[79,8109,2262],{"class":448},[79,8111,4909],{"class":7284},[79,8113,850],{"class":228},[79,8115,8116],{"class":81,"line":591},[79,8117,3652],{"class":228},[79,8119,8120,8122,8124,8126,8128,8130,8132,8134],{"class":81,"line":596},[79,8121,715],{"class":448},[79,8123,3505],{"class":228},[79,8125,3199],{"class":448},[79,8127,2507],{"class":228},[79,8129,3225],{"class":448},[79,8131,2482],{"class":228},[79,8133,3099],{"class":448},[79,8135,8136],{"class":228},"b;\n",[79,8138,8139],{"class":81,"line":602},[79,8140,3671],{"class":228},[14,8142,8144],{"id":8143},"_26函数的分文件编写","2.6函数的分文件编写",[19,8146,8147],{},"4个步骤：",[3246,8149,8150,8153,8156,8159],{},[29,8151,8152],{},"1.创建后缀名为.h的头文件",[29,8154,8155],{},"2.创建后缀名为.cpp的源文件",[29,8157,8158],{},"3.在头文件中写函数的定义",[29,8160,8161],{},"4.在源文件中写函数的定义\n示例：",[19,8163,8164],{},"头文件：swap.h",[51,8166,8168],{"className":2248,"code":8167,"language":2250,"meta":57,"style":57},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[59,8169,8170,8176,8186,8190],{"__ignoreMap":57},[79,8171,8172,8174],{"class":81,"line":82},[79,8173,4036],{"class":448},[79,8175,4039],{"class":89},[79,8177,8178,8180,8182,8184],{"class":81,"line":167},[79,8179,4044],{"class":448},[79,8181,4047],{"class":448},[79,8183,4050],{"class":85},[79,8185,3400],{"class":228},[79,8187,8188],{"class":81,"line":178},[79,8189,8006],{"class":2313},[79,8191,8192,8194,8196,8198,8200,8202,8204,8206,8208],{"class":81,"line":545},[79,8193,7432],{"class":448},[79,8195,7435],{"class":85},[79,8197,455],{"class":228},[79,8199,2262],{"class":448},[79,8201,3505],{"class":7284},[79,8203,2621],{"class":228},[79,8205,2262],{"class":448},[79,8207,4909],{"class":7284},[79,8209,4795],{"class":228},[19,8211,8212],{},"源文件：swap.cpp",[51,8214,8216],{"className":2248,"code":8215,"language":2250,"meta":57,"style":57},"#include \"swap.h\"\n\u002F\u002F函数的定义\nvoid swap(int a,int b)\n{\n    int temp=a;\n    a=b;\n    b=temp;\n    cout\u003C\u003C\"a=\"\u003C\u003Ca\u003C\u003Cendl;\n    cout\u003C\u003C\"b=\"\u003C\u003Cb\u003C\u003Cendl;\n}\n",[59,8217,8218,8225,8230,8250,8254,8265,8274,8283,8300,8317],{"__ignoreMap":57},[79,8219,8220,8222],{"class":81,"line":82},[79,8221,4036],{"class":448},[79,8223,8224],{"class":89}," \"swap.h\"\n",[79,8226,8227],{"class":81,"line":167},[79,8228,8229],{"class":2313},"\u002F\u002F函数的定义\n",[79,8231,8232,8234,8236,8238,8240,8242,8244,8246,8248],{"class":81,"line":178},[79,8233,7432],{"class":448},[79,8235,7435],{"class":85},[79,8237,455],{"class":228},[79,8239,2262],{"class":448},[79,8241,3505],{"class":7284},[79,8243,2621],{"class":228},[79,8245,2262],{"class":448},[79,8247,4909],{"class":7284},[79,8249,850],{"class":228},[79,8251,8252],{"class":81,"line":545},[79,8253,3652],{"class":228},[79,8255,8256,8258,8260,8262],{"class":81,"line":550},[79,8257,4070],{"class":448},[79,8259,6326],{"class":228},[79,8261,239],{"class":448},[79,8263,8264],{"class":228},"a;\n",[79,8266,8267,8270,8272],{"class":81,"line":562},[79,8268,8269],{"class":228},"    a",[79,8271,239],{"class":448},[79,8273,8136],{"class":228},[79,8275,8276,8279,8281],{"class":81,"line":568},[79,8277,8278],{"class":228},"    b",[79,8280,239],{"class":448},[79,8282,6351],{"class":228},[79,8284,8285,8287,8289,8292,8294,8296,8298],{"class":81,"line":574},[79,8286,3657],{"class":228},[79,8288,3283],{"class":448},[79,8290,8291],{"class":89},"\"a=\"",[79,8293,3283],{"class":448},[79,8295,2482],{"class":228},[79,8297,3283],{"class":448},[79,8299,3305],{"class":228},[79,8301,8302,8304,8306,8309,8311,8313,8315],{"class":81,"line":579},[79,8303,3657],{"class":228},[79,8305,3283],{"class":448},[79,8307,8308],{"class":89},"\"b=\"",[79,8310,3283],{"class":448},[79,8312,2507],{"class":228},[79,8314,3283],{"class":448},[79,8316,3305],{"class":228},[79,8318,8319],{"class":81,"line":585},[79,8320,3671],{"class":228},[2159,8322,8323],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":57,"searchDepth":167,"depth":167,"links":8325},[8326,8327,8328,8329,8330,8331],{"id":7242,"depth":167,"text":7243},{"id":7329,"depth":167,"text":7330},{"id":7412,"depth":167,"text":7413},{"id":7638,"depth":167,"text":7639},{"id":7986,"depth":167,"text":7987},{"id":8143,"depth":167,"text":8144},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":7234,"description":57},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":8338,"title":8339,"body":8340,"description":8347,"extension":2186,"meta":9750,"navigation":541,"path":9751,"seo":9752,"stem":9753,"__hash__":9754},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":8341,"toc":9740},[8342,8345,8348,8352,8513,8517,8520,8523,8526,8529,8668,8672,8675,8678,8681,8746,8750,8755,8822,8825,8829,8832,8843,8848,8868,8871,8876,8895,8898,8902,8921,8924,8928,9163,9167,9170,9173,9176,9338,9341,9345,9348,9354,9737],[10,8343,8339],{"id":8344},"_3指针",[19,8346,8347],{},"通过指针保存一个地址，指针就是个地址",[14,8349,8351],{"id":8350},"_31定义指针","3.1定义指针",[51,8353,8355],{"className":2248,"code":8354,"language":2250,"meta":57,"style":57},"int main()\n{\n    \u002F\u002F1.定义指针\n    int a=10;\n    \u002F\u002F指针定义语法：数据类型*指针变量名;\n    int*p;\n    p=&a;\n    cout\u003C\u003C\"a的地址为：\"\u003C\u003C&a\u003C\u003Cendl;\n    cout\u003C\u003C\"指针p为：\"\u003C\u003Cp\u003C\u003Cendl;\u002F\u002F指针p表示的就是a的地址\n\n    \u002F\u002F2.使用指针\n    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n    *p=1000;\n    cout\u003C\u003C*p\u003C\u003Cendl;\u002F\u002F1000\n    cout\u003C\u003Ca\u003C\u003Cendl;\u002F\u002F1000\n}\n",[59,8356,8357,8365,8369,8374,8386,8391,8399,8409,8427,8447,8451,8456,8461,8466,8479,8495,8509],{"__ignoreMap":57},[79,8358,8359,8361,8363],{"class":81,"line":82},[79,8360,2262],{"class":448},[79,8362,826],{"class":85},[79,8364,4061],{"class":228},[79,8366,8367],{"class":81,"line":167},[79,8368,3652],{"class":228},[79,8370,8371],{"class":81,"line":178},[79,8372,8373],{"class":2313},"    \u002F\u002F1.定义指针\n",[79,8375,8376,8378,8380,8382,8384],{"class":81,"line":545},[79,8377,4070],{"class":448},[79,8379,3505],{"class":228},[79,8381,239],{"class":448},[79,8383,2689],{"class":96},[79,8385,3400],{"class":228},[79,8387,8388],{"class":81,"line":550},[79,8389,8390],{"class":2313},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[79,8392,8393,8396],{"class":81,"line":562},[79,8394,8395],{"class":448},"    int*",[79,8397,8398],{"class":228},"p;\n",[79,8400,8401,8404,8407],{"class":81,"line":568},[79,8402,8403],{"class":228},"    p",[79,8405,8406],{"class":448},"=&",[79,8408,8264],{"class":228},[79,8410,8411,8413,8415,8418,8421,8423,8425],{"class":81,"line":574},[79,8412,3657],{"class":228},[79,8414,3283],{"class":448},[79,8416,8417],{"class":89},"\"a的地址为：\"",[79,8419,8420],{"class":448},"\u003C\u003C&",[79,8422,2482],{"class":228},[79,8424,3283],{"class":448},[79,8426,3305],{"class":228},[79,8428,8429,8431,8433,8436,8438,8440,8442,8444],{"class":81,"line":579},[79,8430,3657],{"class":228},[79,8432,3283],{"class":448},[79,8434,8435],{"class":89},"\"指针p为：\"",[79,8437,3283],{"class":448},[79,8439,19],{"class":228},[79,8441,3283],{"class":448},[79,8443,3348],{"class":228},[79,8445,8446],{"class":2313},"\u002F\u002F指针p表示的就是a的地址\n",[79,8448,8449],{"class":81,"line":585},[79,8450,542],{"emptyLinePlaceholder":541},[79,8452,8453],{"class":81,"line":591},[79,8454,8455],{"class":2313},"    \u002F\u002F2.使用指针\n",[79,8457,8458],{"class":81,"line":596},[79,8459,8460],{"class":2313},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[79,8462,8463],{"class":81,"line":602},[79,8464,8465],{"class":2313},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[79,8467,8468,8471,8473,8475,8477],{"class":81,"line":608},[79,8469,8470],{"class":448},"    *",[79,8472,19],{"class":228},[79,8474,239],{"class":448},[79,8476,929],{"class":96},[79,8478,3400],{"class":228},[79,8480,8481,8483,8486,8488,8490,8492],{"class":81,"line":614},[79,8482,3657],{"class":228},[79,8484,8485],{"class":448},"\u003C\u003C*",[79,8487,19],{"class":228},[79,8489,3283],{"class":448},[79,8491,3348],{"class":228},[79,8493,8494],{"class":2313},"\u002F\u002F1000\n",[79,8496,8497,8499,8501,8503,8505,8507],{"class":81,"line":619},[79,8498,3657],{"class":228},[79,8500,3283],{"class":448},[79,8502,2482],{"class":228},[79,8504,3283],{"class":448},[79,8506,3348],{"class":228},[79,8508,8494],{"class":2313},[79,8510,8511],{"class":81,"line":625},[79,8512,3671],{"class":228},[14,8514,8516],{"id":8515},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,8518,8519],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,8521,8522],{},"在32位操作系统下：占用4个字节空间",[19,8524,8525],{},"在64位操作系统下：占用8个字节空间",[19,8527,8528],{},"上方是不管啥数据类型的",[51,8530,8532],{"className":2248,"code":8531,"language":2250,"meta":57,"style":57},"int main()\n{\n    \u002F\u002F指针所占内存空间\n    int a=10;\n    \u002F\u002Fint *p;\n    \u002F\u002Fp=&a;\n    \u002F\u002F上述可以写为以下：\n    int *p=&a;\n    cout \u003C\u003C\"sizeof(int *)\"\u003C\u003Csizeof(p)\u003C\u003Cendl;\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n    cout \u003C\u003C\"sizeof(int *)\"\u003C\u003Csizeof(int *)\u003C\u003Cendl  \u002F\u002F4字节(32位的话)\n    cout \u003C\u003C\"sizeof(char *)\"\u003C\u003Csizeof(char *)\u003C\u003Cendl; \u002F\u002F4字节(32位的话)\n}\n",[59,8533,8534,8542,8546,8551,8563,8568,8573,8578,8590,8612,8638,8664],{"__ignoreMap":57},[79,8535,8536,8538,8540],{"class":81,"line":82},[79,8537,2262],{"class":448},[79,8539,826],{"class":85},[79,8541,4061],{"class":228},[79,8543,8544],{"class":81,"line":167},[79,8545,3652],{"class":228},[79,8547,8548],{"class":81,"line":178},[79,8549,8550],{"class":2313},"    \u002F\u002F指针所占内存空间\n",[79,8552,8553,8555,8557,8559,8561],{"class":81,"line":545},[79,8554,4070],{"class":448},[79,8556,3505],{"class":228},[79,8558,239],{"class":448},[79,8560,2689],{"class":96},[79,8562,3400],{"class":228},[79,8564,8565],{"class":81,"line":550},[79,8566,8567],{"class":2313},"    \u002F\u002Fint *p;\n",[79,8569,8570],{"class":81,"line":562},[79,8571,8572],{"class":2313},"    \u002F\u002Fp=&a;\n",[79,8574,8575],{"class":81,"line":568},[79,8576,8577],{"class":2313},"    \u002F\u002F上述可以写为以下：\n",[79,8579,8580,8582,8584,8586,8588],{"class":81,"line":574},[79,8581,4070],{"class":448},[79,8583,467],{"class":448},[79,8585,19],{"class":228},[79,8587,8406],{"class":448},[79,8589,8264],{"class":228},[79,8591,8592,8595,8597,8600,8602,8605,8607,8609],{"class":81,"line":579},[79,8593,8594],{"class":228},"    cout ",[79,8596,3283],{"class":448},[79,8598,8599],{"class":89},"\"sizeof(int *)\"",[79,8601,3479],{"class":448},[79,8603,8604],{"class":228},"(p)",[79,8606,3283],{"class":448},[79,8608,3348],{"class":228},[79,8610,8611],{"class":2313},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[79,8613,8614,8616,8618,8620,8622,8624,8626,8628,8630,8632,8635],{"class":81,"line":585},[79,8615,8594],{"class":228},[79,8617,3283],{"class":448},[79,8619,8599],{"class":89},[79,8621,3479],{"class":448},[79,8623,455],{"class":228},[79,8625,2262],{"class":448},[79,8627,467],{"class":448},[79,8629,2672],{"class":228},[79,8631,3283],{"class":448},[79,8633,8634],{"class":228},"endl",[79,8636,8637],{"class":2313},"  \u002F\u002F4字节(32位的话)\n",[79,8639,8640,8642,8644,8647,8649,8651,8653,8655,8657,8659,8661],{"class":81,"line":591},[79,8641,8594],{"class":228},[79,8643,3283],{"class":448},[79,8645,8646],{"class":89},"\"sizeof(char *)\"",[79,8648,3479],{"class":448},[79,8650,455],{"class":228},[79,8652,2350],{"class":448},[79,8654,467],{"class":448},[79,8656,2672],{"class":228},[79,8658,3283],{"class":448},[79,8660,3348],{"class":228},[79,8662,8663],{"class":2313}," \u002F\u002F4字节(32位的话)\n",[79,8665,8666],{"class":81,"line":596},[79,8667,3671],{"class":228},[14,8669,8671],{"id":8670},"_33空指针","3.3空指针",[19,8673,8674],{},"空指针：指针变量指向内存中编号为0的空间",[19,8676,8677],{},"用途：初始化指针变量",[19,8679,8680],{},"注意：空指针指向的内存是不可以访问的",[51,8682,8684],{"className":2248,"code":8683,"language":2250,"meta":57,"style":57},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[59,8685,8686,8694,8698,8703,8717,8722,8737,8742],{"__ignoreMap":57},[79,8687,8688,8690,8692],{"class":81,"line":82},[79,8689,2262],{"class":448},[79,8691,826],{"class":85},[79,8693,4061],{"class":228},[79,8695,8696],{"class":81,"line":167},[79,8697,3652],{"class":228},[79,8699,8700],{"class":81,"line":178},[79,8701,8702],{"class":2313},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[79,8704,8705,8707,8709,8711,8713,8715],{"class":81,"line":545},[79,8706,4070],{"class":448},[79,8708,467],{"class":448},[79,8710,19],{"class":228},[79,8712,239],{"class":448},[79,8714,4477],{"class":96},[79,8716,3400],{"class":228},[79,8718,8719],{"class":81,"line":550},[79,8720,8721],{"class":2313},"    \u002F\u002F2.空指针不能进行访问\n",[79,8723,8724,8726,8728,8730,8732,8734],{"class":81,"line":562},[79,8725,8470],{"class":448},[79,8727,19],{"class":228},[79,8729,239],{"class":448},[79,8731,2555],{"class":96},[79,8733,2310],{"class":228},[79,8735,8736],{"class":2313},"\u002F\u002F直接报错，压根不能访问\n",[79,8738,8739],{"class":81,"line":568},[79,8740,8741],{"class":2313},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[79,8743,8744],{"class":81,"line":574},[79,8745,3671],{"class":228},[14,8747,8749],{"id":8748},"_34野指针","3.4野指针",[19,8751,8752],{},[2398,8753,8754],{},"指针变量指向非法的内存空间",[51,8756,8758],{"className":2248,"code":8757,"language":2250,"meta":57,"style":57},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[59,8759,8760,8768,8772,8801,8806,8818],{"__ignoreMap":57},[79,8761,8762,8764,8766],{"class":81,"line":82},[79,8763,2262],{"class":448},[79,8765,826],{"class":85},[79,8767,4061],{"class":228},[79,8769,8770],{"class":81,"line":167},[79,8771,3652],{"class":228},[79,8773,8774,8776,8778,8780,8782,8784,8786,8788,8790,8793,8796,8798],{"class":81,"line":178},[79,8775,4070],{"class":448},[79,8777,467],{"class":448},[79,8779,19],{"class":228},[79,8781,239],{"class":448},[79,8783,455],{"class":228},[79,8785,2262],{"class":448},[79,8787,467],{"class":448},[79,8789,2672],{"class":228},[79,8791,8792],{"class":448},"0x",[79,8794,8795],{"class":96},"1100",[79,8797,2310],{"class":228},[79,8799,8800],{"class":2313}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[79,8802,8803],{"class":81,"line":545},[79,8804,8805],{"class":2313},"    \u002F\u002F访问野指针报错\n",[79,8807,8808,8810,8812,8814,8816],{"class":81,"line":550},[79,8809,3657],{"class":228},[79,8811,8485],{"class":448},[79,8813,19],{"class":228},[79,8815,3283],{"class":448},[79,8817,3305],{"class":228},[79,8819,8820],{"class":81,"line":562},[79,8821,3671],{"class":228},[19,8823,8824],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,8826,8828],{"id":8827},"_35const修饰指针","3.5const修饰指针",[19,8830,8831],{},"三种情况：",[3246,8833,8834,8837,8840],{},[29,8835,8836],{},"const修饰指针 常量指针",[29,8838,8839],{},"const修饰常量 指针常量",[29,8841,8842],{},"const即修饰指针，又修饰常量",[26,8844,8845],{},[29,8846,8847],{},"常量指针",[51,8849,8851],{"className":2248,"code":8850,"language":2250,"meta":57,"style":57},"const int *p=&a;\n",[59,8852,8853],{"__ignoreMap":57},[79,8854,8855,8858,8860,8862,8864,8866],{"class":81,"line":82},[79,8856,8857],{"class":448},"const",[79,8859,4467],{"class":448},[79,8861,467],{"class":448},[79,8863,19],{"class":228},[79,8865,8406],{"class":448},[79,8867,8264],{"class":228},[19,8869,8870],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[26,8872,8873],{"start":167},[29,8874,8875],{},"指针常量",[51,8877,8879],{"className":2248,"code":8878,"language":2250,"meta":57,"style":57},"int *const p=&a;\n",[59,8880,8881],{"__ignoreMap":57},[79,8882,8883,8885,8888,8891,8893],{"class":81,"line":82},[79,8884,2262],{"class":448},[79,8886,8887],{"class":448}," *const",[79,8889,8890],{"class":228}," p",[79,8892,8406],{"class":448},[79,8894,8264],{"class":228},[19,8896,8897],{},"指针的指向不可以改，指针指向的值可以改",[26,8899,8900],{"start":178},[29,8901,8842],{},[51,8903,8905],{"className":2248,"code":8904,"language":2250,"meta":57,"style":57},"const int *const p=&a;\n",[59,8906,8907],{"__ignoreMap":57},[79,8908,8909,8911,8913,8915,8917,8919],{"class":81,"line":82},[79,8910,8857],{"class":448},[79,8912,4467],{"class":448},[79,8914,8887],{"class":448},[79,8916,8890],{"class":228},[79,8918,8406],{"class":448},[79,8920,8264],{"class":228},[19,8922,8923],{},"指针的指向和指针指向的值都不可以改变",[14,8925,8927],{"id":8926},"_36指针和数组","3.6指针和数组",[51,8929,8931],{"className":2248,"code":8930,"language":2250,"meta":57,"style":57},"int main()\n{\n    \u002F\u002F利用指针访问数组中的元素\n    int arr[10]={1,2,3,4,5,6,7,8,9,10};\n    cout\u003C\u003C\"数组的第一个元素为：\"\u003C\u003Carr[0]\u003C\u003Cendl;\n    int *p=arr;\u002F\u002F注意数才要加取地址符号&\n    cout\u003C\u003C\"数组的第一个元素为：\"\u003C\u003C*p\u003C\u003Cendl;\n    p++; \u002F\u002F让指针向后偏移4个字节\n    cout\u003C\u003C\"数组的第二个元素为：\"\u003C\u003C*p\u003C\u003Cendl;\n    \u002F\u002F利用指针遍历数组\n    int *p2=arr;\n    for (int i=0;i\u003C10;i++)\n    {\n        cout\u003C\u003C*p2\u003C\u003Cendl;\n        p2++;\n    }\n}\n",[59,8932,8933,8941,8945,8950,9004,9025,9041,9057,9068,9085,9090,9104,9130,9134,9146,9155,9159],{"__ignoreMap":57},[79,8934,8935,8937,8939],{"class":81,"line":82},[79,8936,2262],{"class":448},[79,8938,826],{"class":85},[79,8940,4061],{"class":228},[79,8942,8943],{"class":81,"line":167},[79,8944,3652],{"class":228},[79,8946,8947],{"class":81,"line":178},[79,8948,8949],{"class":2313},"    \u002F\u002F利用指针访问数组中的元素\n",[79,8951,8952,8954,8956,8958,8960,8962,8964,8966,8968,8970,8972,8974,8976,8978,8980,8982,8984,8986,8988,8990,8992,8994,8996,8998,9000,9002],{"class":81,"line":545},[79,8953,4070],{"class":448},[79,8955,6035],{"class":228},[79,8957,2689],{"class":96},[79,8959,3179],{"class":228},[79,8961,239],{"class":448},[79,8963,3136],{"class":228},[79,8965,775],{"class":96},[79,8967,2621],{"class":228},[79,8969,2331],{"class":96},[79,8971,2621],{"class":228},[79,8973,970],{"class":96},[79,8975,2621],{"class":228},[79,8977,2537],{"class":96},[79,8979,2621],{"class":228},[79,8981,2563],{"class":96},[79,8983,2621],{"class":228},[79,8985,2587],{"class":96},[79,8987,2621],{"class":228},[79,8989,2612],{"class":96},[79,8991,2621],{"class":228},[79,8993,2638],{"class":96},[79,8995,2621],{"class":228},[79,8997,2663],{"class":96},[79,8999,2621],{"class":228},[79,9001,2689],{"class":96},[79,9003,6068],{"class":228},[79,9005,9006,9008,9010,9013,9015,9017,9019,9021,9023],{"class":81,"line":550},[79,9007,3657],{"class":228},[79,9009,3283],{"class":448},[79,9011,9012],{"class":89},"\"数组的第一个元素为：\"",[79,9014,3283],{"class":448},[79,9016,5979],{"class":228},[79,9018,759],{"class":96},[79,9020,3179],{"class":228},[79,9022,3283],{"class":448},[79,9024,3305],{"class":228},[79,9026,9027,9029,9031,9033,9035,9038],{"class":81,"line":562},[79,9028,4070],{"class":448},[79,9030,467],{"class":448},[79,9032,19],{"class":228},[79,9034,239],{"class":448},[79,9036,9037],{"class":228},"arr;",[79,9039,9040],{"class":2313},"\u002F\u002F注意数才要加取地址符号&\n",[79,9042,9043,9045,9047,9049,9051,9053,9055],{"class":81,"line":568},[79,9044,3657],{"class":228},[79,9046,3283],{"class":448},[79,9048,9012],{"class":89},[79,9050,8485],{"class":448},[79,9052,19],{"class":228},[79,9054,3283],{"class":448},[79,9056,3305],{"class":228},[79,9058,9059,9061,9063,9065],{"class":81,"line":574},[79,9060,8403],{"class":228},[79,9062,4377],{"class":448},[79,9064,2310],{"class":228},[79,9066,9067],{"class":2313}," \u002F\u002F让指针向后偏移4个字节\n",[79,9069,9070,9072,9074,9077,9079,9081,9083],{"class":81,"line":579},[79,9071,3657],{"class":228},[79,9073,3283],{"class":448},[79,9075,9076],{"class":89},"\"数组的第二个元素为：\"",[79,9078,8485],{"class":448},[79,9080,19],{"class":228},[79,9082,3283],{"class":448},[79,9084,3305],{"class":228},[79,9086,9087],{"class":81,"line":585},[79,9088,9089],{"class":2313},"    \u002F\u002F利用指针遍历数组\n",[79,9091,9092,9094,9096,9099,9101],{"class":81,"line":591},[79,9093,4070],{"class":448},[79,9095,467],{"class":448},[79,9097,9098],{"class":228},"p2",[79,9100,239],{"class":448},[79,9102,9103],{"class":228},"arr;\n",[79,9105,9106,9108,9110,9112,9114,9116,9118,9120,9122,9124,9126,9128],{"class":81,"line":596},[79,9107,915],{"class":448},[79,9109,3757],{"class":228},[79,9111,2262],{"class":448},[79,9113,5107],{"class":228},[79,9115,239],{"class":448},[79,9117,759],{"class":96},[79,9119,5114],{"class":228},[79,9121,229],{"class":448},[79,9123,2689],{"class":96},[79,9125,5114],{"class":228},[79,9127,4377],{"class":448},[79,9129,850],{"class":228},[79,9131,9132],{"class":81,"line":602},[79,9133,4115],{"class":228},[79,9135,9136,9138,9140,9142,9144],{"class":81,"line":608},[79,9137,5525],{"class":228},[79,9139,8485],{"class":448},[79,9141,9098],{"class":228},[79,9143,3283],{"class":448},[79,9145,3305],{"class":228},[79,9147,9148,9151,9153],{"class":81,"line":614},[79,9149,9150],{"class":228},"        p2",[79,9152,4377],{"class":448},[79,9154,3400],{"class":228},[79,9156,9157],{"class":81,"line":619},[79,9158,4272],{"class":228},[79,9160,9161],{"class":81,"line":625},[79,9162,3671],{"class":228},[14,9164,9166],{"id":9165},"_37指针和函数","3.7指针和函数",[19,9168,9169],{},"利用指针做函数参数，可以修改实参的值",[19,9171,9172],{},"值传递：只改变形参，不改变实参",[19,9174,9175],{},"地址传递：",[51,9177,9179],{"className":2248,"code":9178,"language":2250,"meta":57,"style":57},"void swap(int *p1,int *p2)\n{\n    int temp=*p1;\n    *p1=*p2;\n    *p2=temp;\n}\nint main()\n{\n    int a=10;\n    int b=20;\n    \u002F\u002F地址传递\n    swap(&a,&b);\n    cout\u003C\u003Ca\u003C\u003Cendl;\u002F\u002F20\n    cout\u003C\u003Cb\u003C\u003Cendl;\u002F\u002F10\n}\n",[59,9180,9181,9206,9210,9222,9233,9243,9247,9255,9259,9271,9283,9288,9304,9319,9334],{"__ignoreMap":57},[79,9182,9183,9185,9187,9189,9191,9193,9196,9198,9200,9202,9204],{"class":81,"line":82},[79,9184,7432],{"class":448},[79,9186,7435],{"class":85},[79,9188,455],{"class":228},[79,9190,2262],{"class":448},[79,9192,467],{"class":448},[79,9194,9195],{"class":7284},"p1",[79,9197,2621],{"class":228},[79,9199,2262],{"class":448},[79,9201,467],{"class":448},[79,9203,9098],{"class":7284},[79,9205,850],{"class":228},[79,9207,9208],{"class":81,"line":167},[79,9209,3652],{"class":228},[79,9211,9212,9214,9216,9219],{"class":81,"line":178},[79,9213,4070],{"class":448},[79,9215,6326],{"class":228},[79,9217,9218],{"class":448},"=*",[79,9220,9221],{"class":228},"p1;\n",[79,9223,9224,9226,9228,9230],{"class":81,"line":545},[79,9225,8470],{"class":448},[79,9227,9195],{"class":228},[79,9229,9218],{"class":448},[79,9231,9232],{"class":228},"p2;\n",[79,9234,9235,9237,9239,9241],{"class":81,"line":550},[79,9236,8470],{"class":448},[79,9238,9098],{"class":228},[79,9240,239],{"class":448},[79,9242,6351],{"class":228},[79,9244,9245],{"class":81,"line":562},[79,9246,3671],{"class":228},[79,9248,9249,9251,9253],{"class":81,"line":568},[79,9250,2262],{"class":448},[79,9252,826],{"class":85},[79,9254,4061],{"class":228},[79,9256,9257],{"class":81,"line":574},[79,9258,3652],{"class":228},[79,9260,9261,9263,9265,9267,9269],{"class":81,"line":579},[79,9262,4070],{"class":448},[79,9264,3505],{"class":228},[79,9266,239],{"class":448},[79,9268,2689],{"class":96},[79,9270,3400],{"class":228},[79,9272,9273,9275,9277,9279,9281],{"class":81,"line":585},[79,9274,4070],{"class":448},[79,9276,4909],{"class":228},[79,9278,239],{"class":448},[79,9280,2940],{"class":96},[79,9282,3400],{"class":228},[79,9284,9285],{"class":81,"line":591},[79,9286,9287],{"class":2313},"    \u002F\u002F地址传递\n",[79,9289,9290,9292,9294,9296,9299,9301],{"class":81,"line":596},[79,9291,7629],{"class":85},[79,9293,455],{"class":228},[79,9295,2596],{"class":448},[79,9297,9298],{"class":228},"a,",[79,9300,2596],{"class":448},[79,9302,9303],{"class":228},"b);\n",[79,9305,9306,9308,9310,9312,9314,9316],{"class":81,"line":602},[79,9307,3657],{"class":228},[79,9309,3283],{"class":448},[79,9311,2482],{"class":228},[79,9313,3283],{"class":448},[79,9315,3348],{"class":228},[79,9317,9318],{"class":2313},"\u002F\u002F20\n",[79,9320,9321,9323,9325,9327,9329,9331],{"class":81,"line":608},[79,9322,3657],{"class":228},[79,9324,3283],{"class":448},[79,9326,2507],{"class":228},[79,9328,3283],{"class":448},[79,9330,3348],{"class":228},[79,9332,9333],{"class":2313},"\u002F\u002F10\n",[79,9335,9336],{"class":81,"line":614},[79,9337,3671],{"class":228},[19,9339,9340],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,9342,9344],{"id":9343},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,9346,9347],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,9349,9350,9351,9353],{},"例如数组：int arr",[79,9352,2689],{},"={4,3,6,9,1,2,10,8,7,5}",[51,9355,9357],{"className":2248,"code":9356,"language":2250,"meta":57,"style":57},"#include\u003Ciostream>\nusing namespace std;\nvoid bubbleSort(int *p,int len)\n{\n    for(int i=0;i\u003Clen-1;i++)\n    {\n        for(int j=0;j\u003Clen-i-1;j++)\n        {\n            if(p[j]>p[j+1])\n            {\n                int temp=p[j];\n                p[j]=p[j+1];\n                p[j+1]=temp;\n            }\n        }\n    }\n}\n\nint main()\n{\n    \u002F\u002F 1.创建数组\n    int arr[10]={4,3,6,9,1,2,10,8,7,5};\n    int len=10;\n    int *p=arr;\n    \u002F\u002F 2.创建函数，实现冒泡排序\n    bubbleSort(p,len);\n\n    \u002F\u002F 3.打印排序后的数组\n    for (int i=0; i\u003Clen; i++)\n    {\n        cout\u003C\u003C*p\u003C\u003C\"\";\n        p++;\n    }\n}\n",[59,9358,9359,9365,9375,9399,9403,9434,9438,9472,9476,9494,9498,9509,9524,9539,9543,9547,9551,9555,9559,9567,9571,9576,9630,9642,9654,9659,9667,9671,9676,9701,9705,9720,9729,9733],{"__ignoreMap":57},[79,9360,9361,9363],{"class":81,"line":82},[79,9362,4036],{"class":448},[79,9364,4039],{"class":89},[79,9366,9367,9369,9371,9373],{"class":81,"line":167},[79,9368,4044],{"class":448},[79,9370,4047],{"class":448},[79,9372,4050],{"class":85},[79,9374,3400],{"class":228},[79,9376,9377,9379,9382,9384,9386,9388,9390,9392,9394,9397],{"class":81,"line":178},[79,9378,7432],{"class":448},[79,9380,9381],{"class":85}," bubbleSort",[79,9383,455],{"class":228},[79,9385,2262],{"class":448},[79,9387,467],{"class":448},[79,9389,19],{"class":7284},[79,9391,2621],{"class":228},[79,9393,2262],{"class":448},[79,9395,9396],{"class":7284}," len",[79,9398,850],{"class":228},[79,9400,9401],{"class":81,"line":545},[79,9402,3652],{"class":228},[79,9404,9405,9407,9409,9411,9413,9415,9417,9419,9421,9424,9426,9428,9430,9432],{"class":81,"line":550},[79,9406,915],{"class":448},[79,9408,455],{"class":228},[79,9410,2262],{"class":448},[79,9412,5107],{"class":228},[79,9414,239],{"class":448},[79,9416,759],{"class":96},[79,9418,5114],{"class":228},[79,9420,229],{"class":448},[79,9422,9423],{"class":228},"len",[79,9425,478],{"class":448},[79,9427,775],{"class":96},[79,9429,5114],{"class":228},[79,9431,4377],{"class":448},[79,9433,850],{"class":228},[79,9435,9436],{"class":81,"line":562},[79,9437,4115],{"class":228},[79,9439,9440,9442,9444,9446,9448,9450,9452,9454,9456,9458,9460,9462,9464,9466,9468,9470],{"class":81,"line":568},[79,9441,5477],{"class":448},[79,9443,455],{"class":228},[79,9445,2262],{"class":448},[79,9447,5484],{"class":228},[79,9449,239],{"class":448},[79,9451,759],{"class":96},[79,9453,5491],{"class":228},[79,9455,229],{"class":448},[79,9457,9423],{"class":228},[79,9459,478],{"class":448},[79,9461,2684],{"class":228},[79,9463,478],{"class":448},[79,9465,775],{"class":96},[79,9467,5491],{"class":228},[79,9469,4377],{"class":448},[79,9471,850],{"class":228},[79,9473,9474],{"class":81,"line":574},[79,9475,4593],{"class":228},[79,9477,9478,9480,9483,9485,9488,9490,9492],{"class":81,"line":579},[79,9479,6712],{"class":448},[79,9481,9482],{"class":228},"(p[j]",[79,9484,3199],{"class":448},[79,9486,9487],{"class":228},"p[j",[79,9489,995],{"class":448},[79,9491,775],{"class":96},[79,9493,6727],{"class":228},[79,9495,9496],{"class":81,"line":585},[79,9497,6732],{"class":228},[79,9499,9500,9502,9504,9506],{"class":81,"line":591},[79,9501,6737],{"class":448},[79,9503,6326],{"class":228},[79,9505,239],{"class":448},[79,9507,9508],{"class":228},"p[j];\n",[79,9510,9511,9514,9516,9518,9520,9522],{"class":81,"line":596},[79,9512,9513],{"class":228},"                p[j]",[79,9515,239],{"class":448},[79,9517,9487],{"class":228},[79,9519,995],{"class":448},[79,9521,775],{"class":96},[79,9523,6760],{"class":228},[79,9525,9526,9529,9531,9533,9535,9537],{"class":81,"line":602},[79,9527,9528],{"class":228},"                p[j",[79,9530,995],{"class":448},[79,9532,775],{"class":96},[79,9534,3179],{"class":228},[79,9536,239],{"class":448},[79,9538,6351],{"class":228},[79,9540,9541],{"class":81,"line":608},[79,9542,6780],{"class":228},[79,9544,9545],{"class":81,"line":614},[79,9546,4612],{"class":228},[79,9548,9549],{"class":81,"line":619},[79,9550,4272],{"class":228},[79,9552,9553],{"class":81,"line":625},[79,9554,3671],{"class":228},[79,9556,9557],{"class":81,"line":631},[79,9558,542],{"emptyLinePlaceholder":541},[79,9560,9561,9563,9565],{"class":81,"line":637},[79,9562,2262],{"class":448},[79,9564,826],{"class":85},[79,9566,4061],{"class":228},[79,9568,9569],{"class":81,"line":643},[79,9570,3652],{"class":228},[79,9572,9573],{"class":81,"line":649},[79,9574,9575],{"class":2313},"    \u002F\u002F 1.创建数组\n",[79,9577,9578,9580,9582,9584,9586,9588,9590,9592,9594,9596,9598,9600,9602,9604,9606,9608,9610,9612,9614,9616,9618,9620,9622,9624,9626,9628],{"class":81,"line":655},[79,9579,4070],{"class":448},[79,9581,6035],{"class":228},[79,9583,2689],{"class":96},[79,9585,3179],{"class":228},[79,9587,239],{"class":448},[79,9589,3136],{"class":228},[79,9591,2537],{"class":96},[79,9593,2621],{"class":228},[79,9595,970],{"class":96},[79,9597,2621],{"class":228},[79,9599,2587],{"class":96},[79,9601,2621],{"class":228},[79,9603,2663],{"class":96},[79,9605,2621],{"class":228},[79,9607,775],{"class":96},[79,9609,2621],{"class":228},[79,9611,2331],{"class":96},[79,9613,2621],{"class":228},[79,9615,2689],{"class":96},[79,9617,2621],{"class":228},[79,9619,2638],{"class":96},[79,9621,2621],{"class":228},[79,9623,2612],{"class":96},[79,9625,2621],{"class":228},[79,9627,2563],{"class":96},[79,9629,6068],{"class":228},[79,9631,9632,9634,9636,9638,9640],{"class":81,"line":660},[79,9633,4070],{"class":448},[79,9635,9396],{"class":228},[79,9637,239],{"class":448},[79,9639,2689],{"class":96},[79,9641,3400],{"class":228},[79,9643,9644,9646,9648,9650,9652],{"class":81,"line":666},[79,9645,4070],{"class":448},[79,9647,467],{"class":448},[79,9649,19],{"class":228},[79,9651,239],{"class":448},[79,9653,9103],{"class":228},[79,9655,9656],{"class":81,"line":672},[79,9657,9658],{"class":2313},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[79,9660,9661,9664],{"class":81,"line":678},[79,9662,9663],{"class":85},"    bubbleSort",[79,9665,9666],{"class":228},"(p,len);\n",[79,9668,9669],{"class":81,"line":684},[79,9670,542],{"emptyLinePlaceholder":541},[79,9672,9673],{"class":81,"line":690},[79,9674,9675],{"class":2313},"    \u002F\u002F 3.打印排序后的数组\n",[79,9677,9678,9680,9682,9684,9686,9688,9690,9692,9694,9697,9699],{"class":81,"line":695},[79,9679,915],{"class":448},[79,9681,3757],{"class":228},[79,9683,2262],{"class":448},[79,9685,5107],{"class":228},[79,9687,239],{"class":448},[79,9689,759],{"class":96},[79,9691,5288],{"class":228},[79,9693,229],{"class":448},[79,9695,9696],{"class":228},"len; i",[79,9698,4377],{"class":448},[79,9700,850],{"class":228},[79,9702,9703],{"class":81,"line":700},[79,9704,4115],{"class":228},[79,9706,9707,9709,9711,9713,9715,9718],{"class":81,"line":712},[79,9708,5525],{"class":228},[79,9710,8485],{"class":448},[79,9712,19],{"class":228},[79,9714,3283],{"class":448},[79,9716,9717],{"class":89},"\"\"",[79,9719,3400],{"class":228},[79,9721,9722,9725,9727],{"class":81,"line":721},[79,9723,9724],{"class":228},"        p",[79,9726,4377],{"class":448},[79,9728,3400],{"class":228},[79,9730,9731],{"class":81,"line":726},[79,9732,4272],{"class":228},[79,9734,9735],{"class":81,"line":731},[79,9736,3671],{"class":228},[2159,9738,9739],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":57,"searchDepth":167,"depth":167,"links":9741},[9742,9743,9744,9745,9746,9747,9748,9749],{"id":8350,"depth":167,"text":8351},{"id":8515,"depth":167,"text":8516},{"id":8670,"depth":167,"text":8671},{"id":8748,"depth":167,"text":8749},{"id":8827,"depth":167,"text":8828},{"id":8926,"depth":167,"text":8927},{"id":9165,"depth":167,"text":9166},{"id":9343,"depth":167,"text":9344},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":8339,"description":8347},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":9756,"title":9757,"body":9758,"description":9765,"extension":2186,"meta":12709,"navigation":541,"path":12710,"seo":12711,"stem":12712,"__hash__":12713},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":9759,"toc":12700},[9760,9763,9766,9770,9773,9776,9787,10115,10118,10122,10125,10132,10387,10391,10394,10397,10552,10556,10559,10562,10768,10772,10775,11078,11081,11089,11093,11096,11247,11249,11260,11317,11321,11326,11963,11971,11974,12068,12071,12691,12697],[10,9761,9757],{"id":9762},"_4结构体",[19,9764,9765],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,9767,9769],{"id":9768},"_41结构体定义与使用","4.1结构体定义与使用",[19,9771,9772],{},"语法：struct 结构体名 {结构体成员列表}；",[19,9774,9775],{},"通过结构体创建变量的方式：",[3246,9777,9778,9781,9784],{},[29,9779,9780],{},"struct 结构体名 变量名",[29,9782,9783],{},"struct 结构体名 变量名={成员1值，成员2值...}",[29,9785,9786],{},"定义结构体时顺便创建变量",[51,9788,9790],{"className":2248,"code":9789,"language":2250,"meta":57,"style":57},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\nstruct Student\n{\n    \u002F\u002F成员列表\n\n    \u002F\u002F姓名\n    string name;\n    \u002F\u002F年龄\n    int age;\n    \u002F\u002F分数\n    int score;\n};\nstruct School\n{\n    \u002F\u002F成员列表\n\n    \u002F\u002F姓名\n    string name;\n    \u002F\u002F年龄\n    int age;\n    \u002F\u002F分数\n    int score;\n} s3; \u002F\u002F创建结构体时就创建了变量\nint main()\n{\n    \u002F\u002F2.通过学生类型创建具体学生\n    \u002F\u002F2.1 struct Student s1;\n    struct Student s1;\n    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n    s1.name=\"张三\";\n    s1.age=18;\n    s1.score=66;\n    \u002F\u002F输出结果\n    cout\u003C\u003Cs1.name\u003C\u003Cs1.age\u003C\u003Cs1.score\u003C\u003Cendl;\n\n    \u002F\u002F2.2 struct Student s2={...}\n    struct Student s2={\"王五\",18,66};\n\n    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n    s3.name=\"1\";\n    s3.age=18;\n    s3.score=20;\n}\n",[59,9791,9792,9798,9808,9815,9820,9828,9832,9837,9841,9846,9851,9856,9863,9868,9875,9879,9886,9890,9894,9898,9902,9906,9910,9916,9920,9926,9934,9942,9946,9951,9956,9967,9972,9984,9995,10006,10011,10034,10038,10043,10069,10073,10078,10089,10100,10111],{"__ignoreMap":57},[79,9793,9794,9796],{"class":81,"line":82},[79,9795,4036],{"class":448},[79,9797,4039],{"class":89},[79,9799,9800,9802,9804,9806],{"class":81,"line":167},[79,9801,4044],{"class":448},[79,9803,4047],{"class":448},[79,9805,4050],{"class":85},[79,9807,3400],{"class":228},[79,9809,9810,9812],{"class":81,"line":178},[79,9811,4036],{"class":448},[79,9813,9814],{"class":89},"\u003Cstring>\n",[79,9816,9817],{"class":81,"line":545},[79,9818,9819],{"class":2313},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[79,9821,9822,9825],{"class":81,"line":550},[79,9823,9824],{"class":448},"struct",[79,9826,9827],{"class":85}," Student\n",[79,9829,9830],{"class":81,"line":562},[79,9831,3652],{"class":228},[79,9833,9834],{"class":81,"line":568},[79,9835,9836],{"class":2313},"    \u002F\u002F成员列表\n",[79,9838,9839],{"class":81,"line":574},[79,9840,542],{"emptyLinePlaceholder":541},[79,9842,9843],{"class":81,"line":579},[79,9844,9845],{"class":2313},"    \u002F\u002F姓名\n",[79,9847,9848],{"class":81,"line":585},[79,9849,9850],{"class":228},"    string name;\n",[79,9852,9853],{"class":81,"line":591},[79,9854,9855],{"class":2313},"    \u002F\u002F年龄\n",[79,9857,9858,9860],{"class":81,"line":596},[79,9859,4070],{"class":448},[79,9861,9862],{"class":228}," age;\n",[79,9864,9865],{"class":81,"line":602},[79,9866,9867],{"class":2313},"    \u002F\u002F分数\n",[79,9869,9870,9872],{"class":81,"line":608},[79,9871,4070],{"class":448},[79,9873,9874],{"class":228}," score;\n",[79,9876,9877],{"class":81,"line":614},[79,9878,6068],{"class":228},[79,9880,9881,9883],{"class":81,"line":619},[79,9882,9824],{"class":448},[79,9884,9885],{"class":85}," School\n",[79,9887,9888],{"class":81,"line":625},[79,9889,3652],{"class":228},[79,9891,9892],{"class":81,"line":631},[79,9893,9836],{"class":2313},[79,9895,9896],{"class":81,"line":637},[79,9897,542],{"emptyLinePlaceholder":541},[79,9899,9900],{"class":81,"line":643},[79,9901,9845],{"class":2313},[79,9903,9904],{"class":81,"line":649},[79,9905,9850],{"class":228},[79,9907,9908],{"class":81,"line":655},[79,9909,9855],{"class":2313},[79,9911,9912,9914],{"class":81,"line":660},[79,9913,4070],{"class":448},[79,9915,9862],{"class":228},[79,9917,9918],{"class":81,"line":666},[79,9919,9867],{"class":2313},[79,9921,9922,9924],{"class":81,"line":672},[79,9923,4070],{"class":448},[79,9925,9874],{"class":228},[79,9927,9928,9931],{"class":81,"line":678},[79,9929,9930],{"class":228},"} s3;",[79,9932,9933],{"class":2313}," \u002F\u002F创建结构体时就创建了变量\n",[79,9935,9936,9938,9940],{"class":81,"line":684},[79,9937,2262],{"class":448},[79,9939,826],{"class":85},[79,9941,4061],{"class":228},[79,9943,9944],{"class":81,"line":690},[79,9945,3652],{"class":228},[79,9947,9948],{"class":81,"line":695},[79,9949,9950],{"class":2313},"    \u002F\u002F2.通过学生类型创建具体学生\n",[79,9952,9953],{"class":81,"line":700},[79,9954,9955],{"class":2313},"    \u002F\u002F2.1 struct Student s1;\n",[79,9957,9958,9961,9964],{"class":81,"line":712},[79,9959,9960],{"class":448},"    struct",[79,9962,9963],{"class":85}," Student",[79,9965,9966],{"class":228}," s1;\n",[79,9968,9969],{"class":81,"line":721},[79,9970,9971],{"class":2313},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[79,9973,9974,9977,9979,9982],{"class":81,"line":726},[79,9975,9976],{"class":228},"    s1.name",[79,9978,239],{"class":448},[79,9980,9981],{"class":89},"\"张三\"",[79,9983,3400],{"class":228},[79,9985,9986,9989,9991,9993],{"class":81,"line":731},[79,9987,9988],{"class":228},"    s1.age",[79,9990,239],{"class":448},[79,9992,2890],{"class":96},[79,9994,3400],{"class":228},[79,9996,9997,10000,10002,10004],{"class":81,"line":748},[79,9998,9999],{"class":228},"    s1.score",[79,10001,239],{"class":448},[79,10003,2498],{"class":96},[79,10005,3400],{"class":228},[79,10007,10008],{"class":81,"line":765},[79,10009,10010],{"class":2313},"    \u002F\u002F输出结果\n",[79,10012,10013,10015,10017,10020,10022,10025,10027,10030,10032],{"class":81,"line":780},[79,10014,3657],{"class":228},[79,10016,3283],{"class":448},[79,10018,10019],{"class":228},"s1.name",[79,10021,3283],{"class":448},[79,10023,10024],{"class":228},"s1.age",[79,10026,3283],{"class":448},[79,10028,10029],{"class":228},"s1.score",[79,10031,3283],{"class":448},[79,10033,3305],{"class":228},[79,10035,10036],{"class":81,"line":811},[79,10037,542],{"emptyLinePlaceholder":541},[79,10039,10040],{"class":81,"line":816},[79,10041,10042],{"class":2313},"    \u002F\u002F2.2 struct Student s2={...}\n",[79,10044,10045,10047,10049,10052,10054,10056,10059,10061,10063,10065,10067],{"class":81,"line":821},[79,10046,9960],{"class":448},[79,10048,9963],{"class":85},[79,10050,10051],{"class":228}," s2",[79,10053,239],{"class":448},[79,10055,3136],{"class":228},[79,10057,10058],{"class":89},"\"王五\"",[79,10060,2621],{"class":228},[79,10062,2890],{"class":96},[79,10064,2621],{"class":228},[79,10066,2498],{"class":96},[79,10068,6068],{"class":228},[79,10070,10071],{"class":81,"line":837},[79,10072,542],{"emptyLinePlaceholder":541},[79,10074,10075],{"class":81,"line":853},[79,10076,10077],{"class":2313},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[79,10079,10080,10083,10085,10087],{"class":81,"line":864},[79,10081,10082],{"class":228},"    s3.name",[79,10084,239],{"class":448},[79,10086,5752],{"class":89},[79,10088,3400],{"class":228},[79,10090,10091,10094,10096,10098],{"class":81,"line":869},[79,10092,10093],{"class":228},"    s3.age",[79,10095,239],{"class":448},[79,10097,2890],{"class":96},[79,10099,3400],{"class":228},[79,10101,10102,10105,10107,10109],{"class":81,"line":885},[79,10103,10104],{"class":228},"    s3.score",[79,10106,239],{"class":448},[79,10108,2940],{"class":96},[79,10110,3400],{"class":228},[79,10112,10113],{"class":81,"line":891},[79,10114,3671],{"class":228},[19,10116,10117],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,10119,10121],{"id":10120},"_42结构体数组","4.2结构体数组",[19,10123,10124],{},"将自定义的结构体放入到数组中方便维护",[19,10126,10127,10128,10131],{},"语法：struct 结构体名 数组名",[79,10129,10130],{},"元素个数","={ {}，{},...{} };",[51,10133,10135],{"className":2248,"code":10134,"language":2250,"meta":57,"style":57},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n\u002F\u002F1.定义结构体\nstruct Student\n{\n    string name;\n    int age;\n    int score;\n\n};\nint main()\n{\n    \u002F\u002F2.创建结构体数组\n    struct Student stuArray[2]=\n    {\n        {\"张三\",18,100},\n        {\"1\",15,15}\n    }\n    \u002F\u002F3.给结构体数组中的元素赋值\n    stuArray[1].name=\"2\";\n    stuArray[1].age=2;\n    stuArray[1].score=2;\n    \u002F\u002F4.遍历结构体数组\n    for (int i=0;i\u003C2;i++)\n    {\n        cout\u003C\u003CstuArray[i].name\u003C\u003CstuArray[i].age\u003C\u003CstuArray[i].score\u003C\u003Cendl;\n    }\n}\n",[59,10136,10137,10143,10153,10159,10164,10170,10174,10178,10184,10190,10194,10198,10206,10210,10215,10230,10234,10250,10266,10270,10275,10291,10306,10321,10326,10352,10356,10379,10383],{"__ignoreMap":57},[79,10138,10139,10141],{"class":81,"line":82},[79,10140,4036],{"class":448},[79,10142,4039],{"class":89},[79,10144,10145,10147,10149,10151],{"class":81,"line":167},[79,10146,4044],{"class":448},[79,10148,4047],{"class":448},[79,10150,4050],{"class":85},[79,10152,3400],{"class":228},[79,10154,10155,10157],{"class":81,"line":178},[79,10156,4036],{"class":448},[79,10158,9814],{"class":89},[79,10160,10161],{"class":81,"line":545},[79,10162,10163],{"class":2313},"\u002F\u002F1.定义结构体\n",[79,10165,10166,10168],{"class":81,"line":550},[79,10167,9824],{"class":448},[79,10169,9827],{"class":85},[79,10171,10172],{"class":81,"line":562},[79,10173,3652],{"class":228},[79,10175,10176],{"class":81,"line":568},[79,10177,9850],{"class":228},[79,10179,10180,10182],{"class":81,"line":574},[79,10181,4070],{"class":448},[79,10183,9862],{"class":228},[79,10185,10186,10188],{"class":81,"line":579},[79,10187,4070],{"class":448},[79,10189,9874],{"class":228},[79,10191,10192],{"class":81,"line":585},[79,10193,542],{"emptyLinePlaceholder":541},[79,10195,10196],{"class":81,"line":591},[79,10197,6068],{"class":228},[79,10199,10200,10202,10204],{"class":81,"line":596},[79,10201,2262],{"class":448},[79,10203,826],{"class":85},[79,10205,4061],{"class":228},[79,10207,10208],{"class":81,"line":602},[79,10209,3652],{"class":228},[79,10211,10212],{"class":81,"line":608},[79,10213,10214],{"class":2313},"    \u002F\u002F2.创建结构体数组\n",[79,10216,10217,10219,10221,10224,10226,10228],{"class":81,"line":614},[79,10218,9960],{"class":448},[79,10220,9963],{"class":85},[79,10222,10223],{"class":228}," stuArray[",[79,10225,2331],{"class":96},[79,10227,3179],{"class":228},[79,10229,6978],{"class":448},[79,10231,10232],{"class":81,"line":619},[79,10233,4115],{"class":228},[79,10235,10236,10238,10240,10242,10244,10246,10248],{"class":81,"line":625},[79,10237,6987],{"class":228},[79,10239,9981],{"class":89},[79,10241,2621],{"class":228},[79,10243,2890],{"class":96},[79,10245,2621],{"class":228},[79,10247,2555],{"class":96},[79,10249,7000],{"class":228},[79,10251,10252,10254,10256,10258,10260,10262,10264],{"class":81,"line":631},[79,10253,6987],{"class":228},[79,10255,5752],{"class":89},[79,10257,2621],{"class":228},[79,10259,2815],{"class":96},[79,10261,2621],{"class":228},[79,10263,2815],{"class":96},[79,10265,3671],{"class":228},[79,10267,10268],{"class":81,"line":637},[79,10269,4272],{"class":228},[79,10271,10272],{"class":81,"line":643},[79,10273,10274],{"class":2313},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[79,10276,10277,10280,10282,10285,10287,10289],{"class":81,"line":649},[79,10278,10279],{"class":228},"    stuArray[",[79,10281,775],{"class":96},[79,10283,10284],{"class":228},"].name",[79,10286,239],{"class":448},[79,10288,5775],{"class":89},[79,10290,3400],{"class":228},[79,10292,10293,10295,10297,10300,10302,10304],{"class":81,"line":655},[79,10294,10279],{"class":228},[79,10296,775],{"class":96},[79,10298,10299],{"class":228},"].age",[79,10301,239],{"class":448},[79,10303,2331],{"class":96},[79,10305,3400],{"class":228},[79,10307,10308,10310,10312,10315,10317,10319],{"class":81,"line":660},[79,10309,10279],{"class":228},[79,10311,775],{"class":96},[79,10313,10314],{"class":228},"].score",[79,10316,239],{"class":448},[79,10318,2331],{"class":96},[79,10320,3400],{"class":228},[79,10322,10323],{"class":81,"line":666},[79,10324,10325],{"class":2313},"    \u002F\u002F4.遍历结构体数组\n",[79,10327,10328,10330,10332,10334,10336,10338,10340,10342,10344,10346,10348,10350],{"class":81,"line":672},[79,10329,915],{"class":448},[79,10331,3757],{"class":228},[79,10333,2262],{"class":448},[79,10335,5107],{"class":228},[79,10337,239],{"class":448},[79,10339,759],{"class":96},[79,10341,5114],{"class":228},[79,10343,229],{"class":448},[79,10345,2331],{"class":96},[79,10347,5114],{"class":228},[79,10349,4377],{"class":448},[79,10351,850],{"class":228},[79,10353,10354],{"class":81,"line":678},[79,10355,4115],{"class":228},[79,10357,10358,10360,10362,10365,10367,10370,10372,10375,10377],{"class":81,"line":684},[79,10359,5525],{"class":228},[79,10361,3283],{"class":448},[79,10363,10364],{"class":228},"stuArray[i].name",[79,10366,3283],{"class":448},[79,10368,10369],{"class":228},"stuArray[i].age",[79,10371,3283],{"class":448},[79,10373,10374],{"class":228},"stuArray[i].score",[79,10376,3283],{"class":448},[79,10378,3305],{"class":228},[79,10380,10381],{"class":81,"line":690},[79,10382,4272],{"class":228},[79,10384,10385],{"class":81,"line":695},[79,10386,3671],{"class":228},[14,10388,10390],{"id":10389},"_43结构体指针","4.3结构体指针",[19,10392,10393],{},"作用：通过指针访问结构体中的成员",[19,10395,10396],{},"利用操作符->可以通过结构体指针访问结构体属性",[51,10398,10400],{"className":2248,"code":10399,"language":2250,"meta":57,"style":57},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n\u002F\u002F1.定义结构体\nstruct Student\n{\n    string name;\n    int age;\n    int score;\n};\nint main()\n{\n    \u002F\u002F创建学生结构体变量\n    struct Student s={\"张三\",18,200};\n    \u002F\u002F通过指针指向结构体变量\n    struct Student *p=&s\n    \u002F\u002F通过指针访问结构体变量中的数据\n    cout\u003C\u003Cp->name\u003C\u003Cp->age\u003C\u003Cp->score\u003C\u003Cendl;\n}\n",[59,10401,10402,10408,10418,10424,10428,10434,10438,10442,10448,10454,10458,10466,10470,10475,10500,10505,10520,10525,10548],{"__ignoreMap":57},[79,10403,10404,10406],{"class":81,"line":82},[79,10405,4036],{"class":448},[79,10407,4039],{"class":89},[79,10409,10410,10412,10414,10416],{"class":81,"line":167},[79,10411,4044],{"class":448},[79,10413,4047],{"class":448},[79,10415,4050],{"class":85},[79,10417,3400],{"class":228},[79,10419,10420,10422],{"class":81,"line":178},[79,10421,4036],{"class":448},[79,10423,9814],{"class":89},[79,10425,10426],{"class":81,"line":545},[79,10427,10163],{"class":2313},[79,10429,10430,10432],{"class":81,"line":550},[79,10431,9824],{"class":448},[79,10433,9827],{"class":85},[79,10435,10436],{"class":81,"line":562},[79,10437,3652],{"class":228},[79,10439,10440],{"class":81,"line":568},[79,10441,9850],{"class":228},[79,10443,10444,10446],{"class":81,"line":574},[79,10445,4070],{"class":448},[79,10447,9862],{"class":228},[79,10449,10450,10452],{"class":81,"line":579},[79,10451,4070],{"class":448},[79,10453,9874],{"class":228},[79,10455,10456],{"class":81,"line":585},[79,10457,6068],{"class":228},[79,10459,10460,10462,10464],{"class":81,"line":591},[79,10461,2262],{"class":448},[79,10463,826],{"class":85},[79,10465,4061],{"class":228},[79,10467,10468],{"class":81,"line":596},[79,10469,3652],{"class":228},[79,10471,10472],{"class":81,"line":602},[79,10473,10474],{"class":2313},"    \u002F\u002F创建学生结构体变量\n",[79,10476,10477,10479,10481,10484,10486,10488,10490,10492,10494,10496,10498],{"class":81,"line":608},[79,10478,9960],{"class":448},[79,10480,9963],{"class":85},[79,10482,10483],{"class":228}," s",[79,10485,239],{"class":448},[79,10487,3136],{"class":228},[79,10489,9981],{"class":89},[79,10491,2621],{"class":228},[79,10493,2890],{"class":96},[79,10495,2621],{"class":228},[79,10497,3817],{"class":96},[79,10499,6068],{"class":228},[79,10501,10502],{"class":81,"line":614},[79,10503,10504],{"class":2313},"    \u002F\u002F通过指针指向结构体变量\n",[79,10506,10507,10509,10511,10513,10515,10517],{"class":81,"line":619},[79,10508,9960],{"class":448},[79,10510,9963],{"class":85},[79,10512,467],{"class":448},[79,10514,19],{"class":228},[79,10516,8406],{"class":448},[79,10518,10519],{"class":228},"s\n",[79,10521,10522],{"class":81,"line":625},[79,10523,10524],{"class":2313},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[79,10526,10527,10529,10531,10534,10536,10539,10541,10544,10546],{"class":81,"line":631},[79,10528,3657],{"class":228},[79,10530,3283],{"class":448},[79,10532,10533],{"class":228},"p->name",[79,10535,3283],{"class":448},[79,10537,10538],{"class":228},"p->age",[79,10540,3283],{"class":448},[79,10542,10543],{"class":228},"p->score",[79,10545,3283],{"class":448},[79,10547,3305],{"class":228},[79,10549,10550],{"class":81,"line":637},[79,10551,3671],{"class":228},[14,10553,10555],{"id":10554},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,10557,10558],{},"作用：结构体中的成员可以是另一个结构体",[19,10560,10561],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[51,10563,10565],{"className":2248,"code":10564,"language":2250,"meta":57,"style":57},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n\u002F\u002F定义学生结构体\nstruct Student \n{\n    string name;\n    int age;\n    int score;\n}\n\u002F\u002F定义老师结构体\nstruct Teacher\n{\n    int id;\n    string name;\n    int age;\n    Student stu;\n}\nint main() \n{\n    \u002F\u002F结构体嵌套结构体\n    \u002F\u002F创建老师\n    Teacher t;\n    t.id=100;\n    t.name=\"老王\";\n    t.age=18;\n    t.stu.name=\"小王\"；\n    t.stu.age=20;\n    t.stu.score=6;\n}\n",[59,10566,10567,10573,10583,10589,10594,10602,10606,10610,10616,10622,10626,10631,10638,10642,10649,10653,10659,10664,10668,10676,10680,10685,10690,10695,10706,10718,10729,10742,10753,10764],{"__ignoreMap":57},[79,10568,10569,10571],{"class":81,"line":82},[79,10570,4036],{"class":448},[79,10572,4039],{"class":89},[79,10574,10575,10577,10579,10581],{"class":81,"line":167},[79,10576,4044],{"class":448},[79,10578,4047],{"class":448},[79,10580,4050],{"class":85},[79,10582,3400],{"class":228},[79,10584,10585,10587],{"class":81,"line":178},[79,10586,4036],{"class":448},[79,10588,9814],{"class":89},[79,10590,10591],{"class":81,"line":545},[79,10592,10593],{"class":2313},"\u002F\u002F定义学生结构体\n",[79,10595,10596,10598,10600],{"class":81,"line":550},[79,10597,9824],{"class":448},[79,10599,9963],{"class":85},[79,10601,4750],{"class":228},[79,10603,10604],{"class":81,"line":562},[79,10605,3652],{"class":228},[79,10607,10608],{"class":81,"line":568},[79,10609,9850],{"class":228},[79,10611,10612,10614],{"class":81,"line":574},[79,10613,4070],{"class":448},[79,10615,9862],{"class":228},[79,10617,10618,10620],{"class":81,"line":579},[79,10619,4070],{"class":448},[79,10621,9874],{"class":228},[79,10623,10624],{"class":81,"line":585},[79,10625,3671],{"class":228},[79,10627,10628],{"class":81,"line":591},[79,10629,10630],{"class":2313},"\u002F\u002F定义老师结构体\n",[79,10632,10633,10635],{"class":81,"line":596},[79,10634,9824],{"class":448},[79,10636,10637],{"class":85}," Teacher\n",[79,10639,10640],{"class":81,"line":602},[79,10641,3652],{"class":228},[79,10643,10644,10646],{"class":81,"line":608},[79,10645,4070],{"class":448},[79,10647,10648],{"class":228}," id;\n",[79,10650,10651],{"class":81,"line":614},[79,10652,9850],{"class":228},[79,10654,10655,10657],{"class":81,"line":619},[79,10656,4070],{"class":448},[79,10658,9862],{"class":228},[79,10660,10661],{"class":81,"line":625},[79,10662,10663],{"class":228},"    Student stu;\n",[79,10665,10666],{"class":81,"line":631},[79,10667,3671],{"class":228},[79,10669,10670,10672,10674],{"class":81,"line":637},[79,10671,2262],{"class":448},[79,10673,826],{"class":85},[79,10675,8045],{"class":228},[79,10677,10678],{"class":81,"line":643},[79,10679,3652],{"class":228},[79,10681,10682],{"class":81,"line":649},[79,10683,10684],{"class":2313},"    \u002F\u002F结构体嵌套结构体\n",[79,10686,10687],{"class":81,"line":655},[79,10688,10689],{"class":2313},"    \u002F\u002F创建老师\n",[79,10691,10692],{"class":81,"line":660},[79,10693,10694],{"class":228},"    Teacher t;\n",[79,10696,10697,10700,10702,10704],{"class":81,"line":666},[79,10698,10699],{"class":228},"    t.id",[79,10701,239],{"class":448},[79,10703,2555],{"class":96},[79,10705,3400],{"class":228},[79,10707,10708,10711,10713,10716],{"class":81,"line":672},[79,10709,10710],{"class":228},"    t.name",[79,10712,239],{"class":448},[79,10714,10715],{"class":89},"\"老王\"",[79,10717,3400],{"class":228},[79,10719,10720,10723,10725,10727],{"class":81,"line":678},[79,10721,10722],{"class":228},"    t.age",[79,10724,239],{"class":448},[79,10726,2890],{"class":96},[79,10728,3400],{"class":228},[79,10730,10731,10734,10736,10739],{"class":81,"line":684},[79,10732,10733],{"class":228},"    t.stu.name",[79,10735,239],{"class":448},[79,10737,10738],{"class":89},"\"小王\"",[79,10740,10741],{"class":228},"；\n",[79,10743,10744,10747,10749,10751],{"class":81,"line":690},[79,10745,10746],{"class":228},"    t.stu.age",[79,10748,239],{"class":448},[79,10750,2940],{"class":96},[79,10752,3400],{"class":228},[79,10754,10755,10758,10760,10762],{"class":81,"line":695},[79,10756,10757],{"class":228},"    t.stu.score",[79,10759,239],{"class":448},[79,10761,2587],{"class":96},[79,10763,3400],{"class":228},[79,10765,10766],{"class":81,"line":700},[79,10767,3671],{"class":228},[14,10769,10771],{"id":10770},"_45结构体做函数参数","4.5结构体做函数参数",[19,10773,10774],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[51,10776,10778],{"className":2248,"code":10777,"language":2250,"meta":57,"style":57},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\nstruct Student\n{\n    string name;\n    int age;\n    int score;\n};\n\u002F\u002F打印学生信息的函数\n\u002F\u002F值传递\nvoid printStudent1(struct Student s)\n{\n    cout \u003C\u003C s.name \u003C\u003C \" \" \u003C\u003C s.age \u003C\u003C \" \" \u003C\u003C s.score \u003C\u003C endl;\n}\n\u002F\u002F地址传递\nvoid printStudent2(struct Student *s)\n{\n    cout \u003C\u003C s->name \u003C\u003C \" \" \u003C\u003C s->age \u003C\u003C \" \" \u003C\u003C s->score \u003C\u003C endl;\n}\nint main()\n{\n    struct Student s;\n    s.name = \"张三\";\n    s.age = 20;\n    s.score = 85;\n    cout\u003C\u003C\"值传递:\"\u003C\u003Cendl;\n    printStudent1(s);\n    cout\u003C\u003C\"地址传递:\"\u003C\u003Cendl;\n    printStudent2(&s); \n    return 0;\n}\n",[59,10779,10780,10786,10796,10802,10808,10812,10816,10822,10828,10832,10837,10842,10859,10863,10896,10900,10905,10924,10928,10959,10963,10971,10975,10984,10996,11008,11020,11033,11041,11054,11066,11074],{"__ignoreMap":57},[79,10781,10782,10784],{"class":81,"line":82},[79,10783,4036],{"class":448},[79,10785,4039],{"class":89},[79,10787,10788,10790,10792,10794],{"class":81,"line":167},[79,10789,4044],{"class":448},[79,10791,4047],{"class":448},[79,10793,4050],{"class":85},[79,10795,3400],{"class":228},[79,10797,10798,10800],{"class":81,"line":178},[79,10799,4036],{"class":448},[79,10801,9814],{"class":89},[79,10803,10804,10806],{"class":81,"line":545},[79,10805,9824],{"class":448},[79,10807,9827],{"class":85},[79,10809,10810],{"class":81,"line":550},[79,10811,3652],{"class":228},[79,10813,10814],{"class":81,"line":562},[79,10815,9850],{"class":228},[79,10817,10818,10820],{"class":81,"line":568},[79,10819,4070],{"class":448},[79,10821,9862],{"class":228},[79,10823,10824,10826],{"class":81,"line":574},[79,10825,4070],{"class":448},[79,10827,9874],{"class":228},[79,10829,10830],{"class":81,"line":579},[79,10831,6068],{"class":228},[79,10833,10834],{"class":81,"line":585},[79,10835,10836],{"class":2313},"\u002F\u002F打印学生信息的函数\n",[79,10838,10839],{"class":81,"line":591},[79,10840,10841],{"class":2313},"\u002F\u002F值传递\n",[79,10843,10844,10846,10849,10851,10853,10855,10857],{"class":81,"line":596},[79,10845,7432],{"class":448},[79,10847,10848],{"class":85}," printStudent1",[79,10850,455],{"class":228},[79,10852,9824],{"class":448},[79,10854,9963],{"class":85},[79,10856,10483],{"class":7284},[79,10858,850],{"class":228},[79,10860,10861],{"class":81,"line":602},[79,10862,3652],{"class":228},[79,10864,10865,10867,10869,10872,10874,10877,10879,10882,10884,10886,10888,10891,10893],{"class":81,"line":608},[79,10866,8594],{"class":228},[79,10868,3283],{"class":448},[79,10870,10871],{"class":228}," s.name ",[79,10873,3283],{"class":448},[79,10875,10876],{"class":89}," \" \"",[79,10878,3551],{"class":448},[79,10880,10881],{"class":228}," s.age ",[79,10883,3283],{"class":448},[79,10885,10876],{"class":89},[79,10887,3551],{"class":448},[79,10889,10890],{"class":228}," s.score ",[79,10892,3283],{"class":448},[79,10894,10895],{"class":228}," endl;\n",[79,10897,10898],{"class":81,"line":614},[79,10899,3671],{"class":228},[79,10901,10902],{"class":81,"line":619},[79,10903,10904],{"class":2313},"\u002F\u002F地址传递\n",[79,10906,10907,10909,10912,10914,10916,10918,10920,10922],{"class":81,"line":625},[79,10908,7432],{"class":448},[79,10910,10911],{"class":85}," printStudent2",[79,10913,455],{"class":228},[79,10915,9824],{"class":448},[79,10917,9963],{"class":85},[79,10919,467],{"class":448},[79,10921,2935],{"class":7284},[79,10923,850],{"class":228},[79,10925,10926],{"class":81,"line":631},[79,10927,3652],{"class":228},[79,10929,10930,10932,10934,10937,10939,10941,10943,10946,10948,10950,10952,10955,10957],{"class":81,"line":637},[79,10931,8594],{"class":228},[79,10933,3283],{"class":448},[79,10935,10936],{"class":228}," s->name ",[79,10938,3283],{"class":448},[79,10940,10876],{"class":89},[79,10942,3551],{"class":448},[79,10944,10945],{"class":228}," s->age ",[79,10947,3283],{"class":448},[79,10949,10876],{"class":89},[79,10951,3551],{"class":448},[79,10953,10954],{"class":228}," s->score ",[79,10956,3283],{"class":448},[79,10958,10895],{"class":228},[79,10960,10961],{"class":81,"line":643},[79,10962,3671],{"class":228},[79,10964,10965,10967,10969],{"class":81,"line":649},[79,10966,2262],{"class":448},[79,10968,826],{"class":85},[79,10970,4061],{"class":228},[79,10972,10973],{"class":81,"line":655},[79,10974,3652],{"class":228},[79,10976,10977,10979,10981],{"class":81,"line":660},[79,10978,9960],{"class":448},[79,10980,9963],{"class":85},[79,10982,10983],{"class":228}," s;\n",[79,10985,10986,10989,10991,10994],{"class":81,"line":666},[79,10987,10988],{"class":228},"    s.name ",[79,10990,239],{"class":448},[79,10992,10993],{"class":89}," \"张三\"",[79,10995,3400],{"class":228},[79,10997,10998,11001,11003,11006],{"class":81,"line":672},[79,10999,11000],{"class":228},"    s.age ",[79,11002,239],{"class":448},[79,11004,11005],{"class":96}," 20",[79,11007,3400],{"class":228},[79,11009,11010,11013,11015,11018],{"class":81,"line":678},[79,11011,11012],{"class":228},"    s.score ",[79,11014,239],{"class":448},[79,11016,11017],{"class":96}," 85",[79,11019,3400],{"class":228},[79,11021,11022,11024,11026,11029,11031],{"class":81,"line":684},[79,11023,3657],{"class":228},[79,11025,3283],{"class":448},[79,11027,11028],{"class":89},"\"值传递:\"",[79,11030,3283],{"class":448},[79,11032,3305],{"class":228},[79,11034,11035,11038],{"class":81,"line":690},[79,11036,11037],{"class":85},"    printStudent1",[79,11039,11040],{"class":228},"(s);\n",[79,11042,11043,11045,11047,11050,11052],{"class":81,"line":695},[79,11044,3657],{"class":228},[79,11046,3283],{"class":448},[79,11048,11049],{"class":89},"\"地址传递:\"",[79,11051,3283],{"class":448},[79,11053,3305],{"class":228},[79,11055,11056,11059,11061,11063],{"class":81,"line":700},[79,11057,11058],{"class":85},"    printStudent2",[79,11060,455],{"class":228},[79,11062,2596],{"class":448},[79,11064,11065],{"class":228},"s); \n",[79,11067,11068,11070,11072],{"class":81,"line":712},[79,11069,715],{"class":448},[79,11071,1103],{"class":96},[79,11073,3400],{"class":228},[79,11075,11076],{"class":81,"line":721},[79,11077,3671],{"class":228},[19,11079,11080],{},"注意：",[3246,11082,11083,11086],{},[29,11084,11085],{},"1.先定义结构体，不要在函数中写结构体的定义",[29,11087,11088],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,11090,11092],{"id":11091},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,11094,11095],{},"用const防止误操作",[51,11097,11099],{"className":2248,"code":11098,"language":2250,"meta":57,"style":57},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\nsctuct Student\n{\n    string name;\n    int age;\n    int score;\n};\nvoid printStudents(student s)\n{\n    cout\u003C\u003Cs.name\u003C\u003Cs.age\u003C\u003Cs.score\u003C\u003Cendl;\n}\nint main() \n{\n    Student s={\"张三\",18,18};\n    printStudent(s);\n\n}\n",[59,11100,11101,11107,11117,11123,11128,11132,11136,11142,11148,11152,11168,11172,11195,11199,11207,11211,11232,11239,11243],{"__ignoreMap":57},[79,11102,11103,11105],{"class":81,"line":82},[79,11104,4036],{"class":448},[79,11106,4039],{"class":89},[79,11108,11109,11111,11113,11115],{"class":81,"line":167},[79,11110,4044],{"class":448},[79,11112,4047],{"class":448},[79,11114,4050],{"class":85},[79,11116,3400],{"class":228},[79,11118,11119,11121],{"class":81,"line":178},[79,11120,4036],{"class":448},[79,11122,9814],{"class":89},[79,11124,11125],{"class":81,"line":545},[79,11126,11127],{"class":228},"sctuct Student\n",[79,11129,11130],{"class":81,"line":550},[79,11131,3652],{"class":228},[79,11133,11134],{"class":81,"line":562},[79,11135,9850],{"class":228},[79,11137,11138,11140],{"class":81,"line":568},[79,11139,4070],{"class":448},[79,11141,9862],{"class":228},[79,11143,11144,11146],{"class":81,"line":574},[79,11145,4070],{"class":448},[79,11147,9874],{"class":228},[79,11149,11150],{"class":81,"line":579},[79,11151,6068],{"class":228},[79,11153,11154,11156,11159,11161,11164,11166],{"class":81,"line":585},[79,11155,7432],{"class":448},[79,11157,11158],{"class":85}," printStudents",[79,11160,455],{"class":228},[79,11162,11163],{"class":85},"student",[79,11165,10483],{"class":7284},[79,11167,850],{"class":228},[79,11169,11170],{"class":81,"line":591},[79,11171,3652],{"class":228},[79,11173,11174,11176,11178,11181,11183,11186,11188,11191,11193],{"class":81,"line":596},[79,11175,3657],{"class":228},[79,11177,3283],{"class":448},[79,11179,11180],{"class":228},"s.name",[79,11182,3283],{"class":448},[79,11184,11185],{"class":228},"s.age",[79,11187,3283],{"class":448},[79,11189,11190],{"class":228},"s.score",[79,11192,3283],{"class":448},[79,11194,3305],{"class":228},[79,11196,11197],{"class":81,"line":602},[79,11198,3671],{"class":228},[79,11200,11201,11203,11205],{"class":81,"line":608},[79,11202,2262],{"class":448},[79,11204,826],{"class":85},[79,11206,8045],{"class":228},[79,11208,11209],{"class":81,"line":614},[79,11210,3652],{"class":228},[79,11212,11213,11216,11218,11220,11222,11224,11226,11228,11230],{"class":81,"line":619},[79,11214,11215],{"class":228},"    Student s",[79,11217,239],{"class":448},[79,11219,3136],{"class":228},[79,11221,9981],{"class":89},[79,11223,2621],{"class":228},[79,11225,2890],{"class":96},[79,11227,2621],{"class":228},[79,11229,2890],{"class":96},[79,11231,6068],{"class":228},[79,11233,11234,11237],{"class":81,"line":625},[79,11235,11236],{"class":85},"    printStudent",[79,11238,11040],{"class":228},[79,11240,11241],{"class":81,"line":631},[79,11242,542],{"emptyLinePlaceholder":541},[79,11244,11245],{"class":81,"line":637},[79,11246,3671],{"class":228},[19,11248,11080],{},[3246,11250,11251,11254,11257],{},[29,11252,11253],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[29,11255,11256],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[29,11258,11259],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[51,11261,11263],{"className":2248,"code":11262,"language":2250,"meta":57,"style":57},"void printStudents(const student *s)\n{\n    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n    cout\u003C\u003Cs.name\u003C\u003Cs.age\u003C\u003Cs.score\u003C\u003Cendl;\n}\n",[59,11264,11265,11284,11288,11293,11313],{"__ignoreMap":57},[79,11266,11267,11269,11271,11273,11275,11278,11280,11282],{"class":81,"line":82},[79,11268,7432],{"class":448},[79,11270,11158],{"class":85},[79,11272,455],{"class":228},[79,11274,8857],{"class":448},[79,11276,11277],{"class":85}," student",[79,11279,467],{"class":448},[79,11281,2935],{"class":7284},[79,11283,850],{"class":228},[79,11285,11286],{"class":81,"line":167},[79,11287,3652],{"class":228},[79,11289,11290],{"class":81,"line":178},[79,11291,11292],{"class":2313},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[79,11294,11295,11297,11299,11301,11303,11305,11307,11309,11311],{"class":81,"line":545},[79,11296,3657],{"class":228},[79,11298,3283],{"class":448},[79,11300,11180],{"class":228},[79,11302,3283],{"class":448},[79,11304,11185],{"class":228},[79,11306,3283],{"class":448},[79,11308,11190],{"class":228},[79,11310,3283],{"class":448},[79,11312,3305],{"class":228},[79,11314,11315],{"class":81,"line":550},[79,11316,3671],{"class":228},[14,11318,11320],{"id":11319},"_47案例","4.7案例",[26,11322,11323],{},[29,11324,11325],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[51,11327,11329],{"className":2248,"code":11328,"language":2250,"meta":57,"style":57},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n#include\u003Cctime>\n\u002F\u002F定义学生结构体\nstruct Student\n{\n    string sName;\n    int age;\n    int score;\n};\n\u002F\u002F定义老师结构体\nstruct Teacher\n{\n    string tName;\n    \u002F\u002F学生数组\n    struct Student sArray[5];\n};\n\u002F\u002F给老师和学生赋值的函数\nvoid allocateSpace(struct Teacher tArray[],int len)\n{\n    string nameSeed=\"ABCDE\";\n    for (int i = 0; i \u003C len; i++)\n    {\n        tArray[i].tName = \"Teacher_\";\n        tArray[i].tName +=nameSeed[i];\n\n        \u002F\u002F通过循环给每名老师带的学生赋值\n        for (int j = 0; j \u003C 5; j++)\n        {\n            tArray[i].sArray[j].sName = \"Student_\";\n            tArray[i].sArray[j].sName += nameSeed[j];\n            int random=rand()%60+40;\u002F\u002F40~99\n            tArray[i].sArray[j].age = 20;\n            tArray[i].sArray[j].score = random;\n        }\n    }\n}\n\u002F\u002F打印所有信息的函数\nvoid printInfo(struct Teacher tArray[], int len)\n{\n    for (int i = 0; i \u003C len; i++)\n    {\n        cout \u003C\u003C \"Teacher: \" \u003C\u003C tArray[i].tName \u003C\u003C endl;\n        for (int j = 0; j \u003C 5; j++)\n        {\n            cout \u003C\u003C \"\\tStudent: \" \u003C\u003C tArray[i].sArray[j].sName\u003C\u003Cendl;\n            cout \u003C\u003C \"\\tAge: \" \u003C\u003C tArray[i].sArray[j].age \u003C\u003C endl;\n            cout \u003C\u003C \"\\tScore: \" \u003C\u003C tArray[i].sArray[j].score \u003C\u003C endl;   \n        }\n    }\n}\nint main()\n{\n    \u002F\u002F随机数种子\n    srand((unsigned int)time(NULL));\n    \u002F\u002F1.创建3名老师的数组\n    struct Teacher tArray[3];\n    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n    int len = sizeof(tArray) \u002F sizeof(tArray[0]);\n    allocateSpace(tArray, len);\n    \u002F\u002F3.打印所有老师及所带的学生信息\n    printInfo(tArray, len);\n\n}\n",[59,11330,11331,11337,11347,11353,11360,11364,11370,11374,11379,11385,11391,11395,11399,11405,11409,11414,11419,11432,11436,11441,11467,11471,11483,11510,11514,11526,11535,11539,11544,11573,11577,11589,11598,11625,11636,11646,11650,11654,11658,11663,11687,11691,11715,11719,11738,11764,11768,11792,11814,11837,11841,11845,11849,11857,11861,11866,11886,11891,11904,11909,11935,11943,11948,11955,11959],{"__ignoreMap":57},[79,11332,11333,11335],{"class":81,"line":82},[79,11334,4036],{"class":448},[79,11336,4039],{"class":89},[79,11338,11339,11341,11343,11345],{"class":81,"line":167},[79,11340,4044],{"class":448},[79,11342,4047],{"class":448},[79,11344,4050],{"class":85},[79,11346,3400],{"class":228},[79,11348,11349,11351],{"class":81,"line":178},[79,11350,4036],{"class":448},[79,11352,9814],{"class":89},[79,11354,11355,11357],{"class":81,"line":545},[79,11356,4036],{"class":448},[79,11358,11359],{"class":89},"\u003Cctime>\n",[79,11361,11362],{"class":81,"line":550},[79,11363,10593],{"class":2313},[79,11365,11366,11368],{"class":81,"line":562},[79,11367,9824],{"class":448},[79,11369,9827],{"class":85},[79,11371,11372],{"class":81,"line":568},[79,11373,3652],{"class":228},[79,11375,11376],{"class":81,"line":574},[79,11377,11378],{"class":228},"    string sName;\n",[79,11380,11381,11383],{"class":81,"line":579},[79,11382,4070],{"class":448},[79,11384,9862],{"class":228},[79,11386,11387,11389],{"class":81,"line":585},[79,11388,4070],{"class":448},[79,11390,9874],{"class":228},[79,11392,11393],{"class":81,"line":591},[79,11394,6068],{"class":228},[79,11396,11397],{"class":81,"line":596},[79,11398,10630],{"class":2313},[79,11400,11401,11403],{"class":81,"line":602},[79,11402,9824],{"class":448},[79,11404,10637],{"class":85},[79,11406,11407],{"class":81,"line":608},[79,11408,3652],{"class":228},[79,11410,11411],{"class":81,"line":614},[79,11412,11413],{"class":228},"    string tName;\n",[79,11415,11416],{"class":81,"line":619},[79,11417,11418],{"class":2313},"    \u002F\u002F学生数组\n",[79,11420,11421,11423,11425,11428,11430],{"class":81,"line":625},[79,11422,9960],{"class":448},[79,11424,9963],{"class":85},[79,11426,11427],{"class":228}," sArray[",[79,11429,2563],{"class":96},[79,11431,6760],{"class":228},[79,11433,11434],{"class":81,"line":631},[79,11435,6068],{"class":228},[79,11437,11438],{"class":81,"line":637},[79,11439,11440],{"class":2313},"\u002F\u002F给老师和学生赋值的函数\n",[79,11442,11443,11445,11448,11450,11452,11455,11458,11461,11463,11465],{"class":81,"line":643},[79,11444,7432],{"class":448},[79,11446,11447],{"class":85}," allocateSpace",[79,11449,455],{"class":228},[79,11451,9824],{"class":448},[79,11453,11454],{"class":85}," Teacher",[79,11456,11457],{"class":7284}," tArray",[79,11459,11460],{"class":228},"[],",[79,11462,2262],{"class":448},[79,11464,9396],{"class":7284},[79,11466,850],{"class":228},[79,11468,11469],{"class":81,"line":649},[79,11470,3652],{"class":228},[79,11472,11473,11476,11478,11481],{"class":81,"line":655},[79,11474,11475],{"class":228},"    string nameSeed",[79,11477,239],{"class":448},[79,11479,11480],{"class":89},"\"ABCDE\"",[79,11482,3400],{"class":228},[79,11484,11485,11487,11489,11491,11494,11496,11498,11501,11503,11506,11508],{"class":81,"line":660},[79,11486,915],{"class":448},[79,11488,3757],{"class":228},[79,11490,2262],{"class":448},[79,11492,11493],{"class":228}," i ",[79,11495,239],{"class":448},[79,11497,1103],{"class":96},[79,11499,11500],{"class":228},"; i ",[79,11502,229],{"class":448},[79,11504,11505],{"class":228}," len; i",[79,11507,4377],{"class":448},[79,11509,850],{"class":228},[79,11511,11512],{"class":81,"line":666},[79,11513,4115],{"class":228},[79,11515,11516,11519,11521,11524],{"class":81,"line":672},[79,11517,11518],{"class":228},"        tArray[i].tName ",[79,11520,239],{"class":448},[79,11522,11523],{"class":89}," \"Teacher_\"",[79,11525,3400],{"class":228},[79,11527,11528,11530,11532],{"class":81,"line":678},[79,11529,11518],{"class":228},[79,11531,1075],{"class":448},[79,11533,11534],{"class":228},"nameSeed[i];\n",[79,11536,11537],{"class":81,"line":684},[79,11538,542],{"emptyLinePlaceholder":541},[79,11540,11541],{"class":81,"line":690},[79,11542,11543],{"class":2313},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[79,11545,11546,11548,11550,11552,11555,11557,11559,11562,11564,11566,11569,11571],{"class":81,"line":695},[79,11547,5477],{"class":448},[79,11549,3757],{"class":228},[79,11551,2262],{"class":448},[79,11553,11554],{"class":228}," j ",[79,11556,239],{"class":448},[79,11558,1103],{"class":96},[79,11560,11561],{"class":228},"; j ",[79,11563,229],{"class":448},[79,11565,4233],{"class":96},[79,11567,11568],{"class":228},"; j",[79,11570,4377],{"class":448},[79,11572,850],{"class":228},[79,11574,11575],{"class":81,"line":700},[79,11576,4593],{"class":228},[79,11578,11579,11582,11584,11587],{"class":81,"line":712},[79,11580,11581],{"class":228},"            tArray[i].sArray[j].sName ",[79,11583,239],{"class":448},[79,11585,11586],{"class":89}," \"Student_\"",[79,11588,3400],{"class":228},[79,11590,11591,11593,11595],{"class":81,"line":721},[79,11592,11581],{"class":228},[79,11594,1075],{"class":448},[79,11596,11597],{"class":228}," nameSeed[j];\n",[79,11599,11600,11603,11606,11608,11610,11612,11614,11616,11618,11620,11622],{"class":81,"line":726},[79,11601,11602],{"class":448},"            int",[79,11604,11605],{"class":228}," random",[79,11607,239],{"class":448},[79,11609,4508],{"class":85},[79,11611,4511],{"class":228},[79,11613,1094],{"class":448},[79,11615,3147],{"class":96},[79,11617,995],{"class":448},[79,11619,2644],{"class":96},[79,11621,2310],{"class":228},[79,11623,11624],{"class":2313},"\u002F\u002F40~99\n",[79,11626,11627,11630,11632,11634],{"class":81,"line":731},[79,11628,11629],{"class":228},"            tArray[i].sArray[j].age ",[79,11631,239],{"class":448},[79,11633,11005],{"class":96},[79,11635,3400],{"class":228},[79,11637,11638,11641,11643],{"class":81,"line":748},[79,11639,11640],{"class":228},"            tArray[i].sArray[j].score ",[79,11642,239],{"class":448},[79,11644,11645],{"class":228}," random;\n",[79,11647,11648],{"class":81,"line":765},[79,11649,4612],{"class":228},[79,11651,11652],{"class":81,"line":780},[79,11653,4272],{"class":228},[79,11655,11656],{"class":81,"line":811},[79,11657,3671],{"class":228},[79,11659,11660],{"class":81,"line":816},[79,11661,11662],{"class":2313},"\u002F\u002F打印所有信息的函数\n",[79,11664,11665,11667,11670,11672,11674,11676,11678,11681,11683,11685],{"class":81,"line":821},[79,11666,7432],{"class":448},[79,11668,11669],{"class":85}," printInfo",[79,11671,455],{"class":228},[79,11673,9824],{"class":448},[79,11675,11454],{"class":85},[79,11677,11457],{"class":7284},[79,11679,11680],{"class":228},"[], ",[79,11682,2262],{"class":448},[79,11684,9396],{"class":7284},[79,11686,850],{"class":228},[79,11688,11689],{"class":81,"line":837},[79,11690,3652],{"class":228},[79,11692,11693,11695,11697,11699,11701,11703,11705,11707,11709,11711,11713],{"class":81,"line":853},[79,11694,915],{"class":448},[79,11696,3757],{"class":228},[79,11698,2262],{"class":448},[79,11700,11493],{"class":228},[79,11702,239],{"class":448},[79,11704,1103],{"class":96},[79,11706,11500],{"class":228},[79,11708,229],{"class":448},[79,11710,11505],{"class":228},[79,11712,4377],{"class":448},[79,11714,850],{"class":228},[79,11716,11717],{"class":81,"line":864},[79,11718,4115],{"class":228},[79,11720,11721,11724,11726,11729,11731,11734,11736],{"class":81,"line":869},[79,11722,11723],{"class":228},"        cout ",[79,11725,3283],{"class":448},[79,11727,11728],{"class":89}," \"Teacher: \"",[79,11730,3551],{"class":448},[79,11732,11733],{"class":228}," tArray[i].tName ",[79,11735,3283],{"class":448},[79,11737,10895],{"class":228},[79,11739,11740,11742,11744,11746,11748,11750,11752,11754,11756,11758,11760,11762],{"class":81,"line":885},[79,11741,5477],{"class":448},[79,11743,3757],{"class":228},[79,11745,2262],{"class":448},[79,11747,11554],{"class":228},[79,11749,239],{"class":448},[79,11751,1103],{"class":96},[79,11753,11561],{"class":228},[79,11755,229],{"class":448},[79,11757,4233],{"class":96},[79,11759,11568],{"class":228},[79,11761,4377],{"class":448},[79,11763,850],{"class":228},[79,11765,11766],{"class":81,"line":891},[79,11767,4593],{"class":228},[79,11769,11770,11773,11775,11778,11780,11783,11785,11788,11790],{"class":81,"line":896},[79,11771,11772],{"class":228},"            cout ",[79,11774,3283],{"class":448},[79,11776,11777],{"class":89}," \"",[79,11779,3340],{"class":96},[79,11781,11782],{"class":89},"Student: \"",[79,11784,3551],{"class":448},[79,11786,11787],{"class":228}," tArray[i].sArray[j].sName",[79,11789,3283],{"class":448},[79,11791,3305],{"class":228},[79,11793,11794,11796,11798,11800,11802,11805,11807,11810,11812],{"class":81,"line":907},[79,11795,11772],{"class":228},[79,11797,3283],{"class":448},[79,11799,11777],{"class":89},[79,11801,3340],{"class":96},[79,11803,11804],{"class":89},"Age: \"",[79,11806,3551],{"class":448},[79,11808,11809],{"class":228}," tArray[i].sArray[j].age ",[79,11811,3283],{"class":448},[79,11813,10895],{"class":228},[79,11815,11816,11818,11820,11822,11824,11827,11829,11832,11834],{"class":81,"line":912},[79,11817,11772],{"class":228},[79,11819,3283],{"class":448},[79,11821,11777],{"class":89},[79,11823,3340],{"class":96},[79,11825,11826],{"class":89},"Score: \"",[79,11828,3551],{"class":448},[79,11830,11831],{"class":228}," tArray[i].sArray[j].score ",[79,11833,3283],{"class":448},[79,11835,11836],{"class":228}," endl;   \n",[79,11838,11839],{"class":81,"line":935},[79,11840,4612],{"class":228},[79,11842,11843],{"class":81,"line":946},[79,11844,4272],{"class":228},[79,11846,11847],{"class":81,"line":960},[79,11848,3671],{"class":228},[79,11850,11851,11853,11855],{"class":81,"line":975},[79,11852,2262],{"class":448},[79,11854,826],{"class":85},[79,11856,4061],{"class":228},[79,11858,11859],{"class":81,"line":980},[79,11860,3652],{"class":228},[79,11862,11863],{"class":81,"line":1006},[79,11864,11865],{"class":2313},"    \u002F\u002F随机数种子\n",[79,11867,11868,11870,11872,11874,11876,11878,11880,11882,11884],{"class":81,"line":1027},[79,11869,4458],{"class":85},[79,11871,4461],{"class":228},[79,11873,4464],{"class":448},[79,11875,4467],{"class":448},[79,11877,2672],{"class":228},[79,11879,4472],{"class":85},[79,11881,455],{"class":228},[79,11883,4477],{"class":96},[79,11885,4480],{"class":228},[79,11887,11888],{"class":81,"line":1032},[79,11889,11890],{"class":2313},"    \u002F\u002F1.创建3名老师的数组\n",[79,11892,11893,11895,11897,11900,11902],{"class":81,"line":1047},[79,11894,9960],{"class":448},[79,11896,11454],{"class":85},[79,11898,11899],{"class":228}," tArray[",[79,11901,970],{"class":96},[79,11903,6760],{"class":228},[79,11905,11906],{"class":81,"line":1053},[79,11907,11908],{"class":2313},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[79,11910,11911,11913,11916,11918,11921,11924,11926,11928,11931,11933],{"class":81,"line":1058},[79,11912,4070],{"class":448},[79,11914,11915],{"class":228}," len ",[79,11917,239],{"class":448},[79,11919,11920],{"class":448}," sizeof",[79,11922,11923],{"class":228},"(tArray) ",[79,11925,2824],{"class":448},[79,11927,11920],{"class":448},[79,11929,11930],{"class":228},"(tArray[",[79,11932,759],{"class":96},[79,11934,5929],{"class":228},[79,11936,11937,11940],{"class":81,"line":1069},[79,11938,11939],{"class":85},"    allocateSpace",[79,11941,11942],{"class":228},"(tArray, len);\n",[79,11944,11945],{"class":81,"line":1081},[79,11946,11947],{"class":2313},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[79,11949,11950,11953],{"class":81,"line":1086},[79,11951,11952],{"class":85},"    printInfo",[79,11954,11942],{"class":228},[79,11956,11957],{"class":81,"line":1108},[79,11958,542],{"emptyLinePlaceholder":541},[79,11960,11961],{"class":81,"line":1153},[79,11962,3671],{"class":228},[26,11964,11965],{"start":167},[29,11966,11967,11970],{},[2398,11968,11969],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,11972,11973],{},"五名英雄信息如下：",[51,11975,11979],{"className":11976,"code":11977,"language":11978,"meta":57,"style":57},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[59,11980,11981,11999,12016,12033,12050],{"__ignoreMap":57},[79,11982,11983,11985,11988,11990,11992,11994,11997],{"class":81,"line":82},[79,11984,6987],{"class":228},[79,11986,11987],{"class":89},"\"刘备\"",[79,11989,2621],{"class":228},[79,11991,3015],{"class":96},[79,11993,2621],{"class":228},[79,11995,11996],{"class":89},"\"男\"",[79,11998,7000],{"class":228},[79,12000,12001,12003,12006,12008,12010,12012,12014],{"class":81,"line":167},[79,12002,6987],{"class":228},[79,12004,12005],{"class":89},"\"关羽\"",[79,12007,2621],{"class":228},[79,12009,2990],{"class":96},[79,12011,2621],{"class":228},[79,12013,11996],{"class":89},[79,12015,7000],{"class":228},[79,12017,12018,12020,12023,12025,12027,12029,12031],{"class":81,"line":178},[79,12019,6987],{"class":228},[79,12021,12022],{"class":89},"\"张飞\"",[79,12024,2621],{"class":228},[79,12026,2940],{"class":96},[79,12028,2621],{"class":228},[79,12030,11996],{"class":89},[79,12032,7000],{"class":228},[79,12034,12035,12037,12040,12042,12044,12046,12048],{"class":81,"line":545},[79,12036,6987],{"class":228},[79,12038,12039],{"class":89},"\"赵云\"",[79,12041,2621],{"class":228},[79,12043,2965],{"class":96},[79,12045,2621],{"class":228},[79,12047,11996],{"class":89},[79,12049,7000],{"class":228},[79,12051,12052,12054,12057,12059,12061,12063,12066],{"class":81,"line":550},[79,12053,6987],{"class":228},[79,12055,12056],{"class":89},"\"貂蝉\"",[79,12058,2621],{"class":228},[79,12060,2915],{"class":96},[79,12062,2621],{"class":228},[79,12064,12065],{"class":89},"\"女\"",[79,12067,7000],{"class":228},[19,12069,12070],{},"代码：",[51,12072,12074],{"className":2248,"code":12073,"language":2250,"meta":57,"style":57},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\nstruct Sanguo\n{\n    string name;\n    int age;\n    string gender;\n};\n\u002F\u002F定义排序函数\nvoid bubbleSort(Sanguo *s,int len)\n{\n    for(int i=0;i\u003Clen;i++)\n    {\n     for (int j=0;j\u003Clen-1-i;j++)\n     {\n         if ((s+j)->age > (s+j+1)->age)\n         {\n             Sanguo temp=*(s+j);\n             *(s+j)=*(s+j+1);\n             *(s+j+1)=temp;\n         }\n     }\n    }\n}\n\u002F\u002F定义打印函数\nvoid printInfo(Sanguo *s,int len)\n{\n    for (int i=0;i\u003Clen;i++)\n    {\n        cout\u003C\u003C\"\\t姓名：\"\u003C\u003C(s+i)->name\u003C\u003C\"\\t年龄：\"\u003C\u003C(s+i)->age\u003C\u003C\"\\t性别：\"\u003C\u003C(s+i)->gender\u003C\u003Cendl;\n    }\n}\nint main()\n{\n    \u002F\u002F定义结构体变量\n    Sanguo s1[5]=\n    {\n        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n    };\n    int len=sizeof(s1)\u002Fsizeof(s1[0]);\n    Sanguo *s = &s1[0];\n    \u002F\u002F排序前：\n    cout \u003C\u003C \"排序前：\" \u003C\u003C endl;\n    printInfo(s,len);\n    \u002F\u002F调用排序函数\n    bubbleSort(s,len);\n    \u002F\u002F排序后\n    cout \u003C\u003C \"排序后：\" \u003C\u003C endl;\n    printInfo(s,len);\n}\n",[59,12075,12076,12082,12092,12098,12105,12109,12113,12119,12124,12128,12133,12156,12160,12185,12189,12222,12227,12256,12261,12276,12302,12322,12327,12332,12336,12340,12345,12367,12371,12395,12399,12461,12465,12469,12477,12481,12486,12497,12501,12517,12533,12549,12565,12581,12585,12605,12627,12632,12645,12652,12657,12663,12668,12681,12687],{"__ignoreMap":57},[79,12077,12078,12080],{"class":81,"line":82},[79,12079,4036],{"class":448},[79,12081,4039],{"class":89},[79,12083,12084,12086,12088,12090],{"class":81,"line":167},[79,12085,4044],{"class":448},[79,12087,4047],{"class":448},[79,12089,4050],{"class":85},[79,12091,3400],{"class":228},[79,12093,12094,12096],{"class":81,"line":178},[79,12095,4036],{"class":448},[79,12097,9814],{"class":89},[79,12099,12100,12102],{"class":81,"line":545},[79,12101,9824],{"class":448},[79,12103,12104],{"class":85}," Sanguo\n",[79,12106,12107],{"class":81,"line":550},[79,12108,3652],{"class":228},[79,12110,12111],{"class":81,"line":562},[79,12112,9850],{"class":228},[79,12114,12115,12117],{"class":81,"line":568},[79,12116,4070],{"class":448},[79,12118,9862],{"class":228},[79,12120,12121],{"class":81,"line":574},[79,12122,12123],{"class":228},"    string gender;\n",[79,12125,12126],{"class":81,"line":579},[79,12127,6068],{"class":228},[79,12129,12130],{"class":81,"line":585},[79,12131,12132],{"class":2313},"\u002F\u002F定义排序函数\n",[79,12134,12135,12137,12139,12141,12144,12146,12148,12150,12152,12154],{"class":81,"line":591},[79,12136,7432],{"class":448},[79,12138,9381],{"class":85},[79,12140,455],{"class":228},[79,12142,12143],{"class":85},"Sanguo",[79,12145,467],{"class":448},[79,12147,2935],{"class":7284},[79,12149,2621],{"class":228},[79,12151,2262],{"class":448},[79,12153,9396],{"class":7284},[79,12155,850],{"class":228},[79,12157,12158],{"class":81,"line":596},[79,12159,3652],{"class":228},[79,12161,12162,12164,12166,12168,12170,12172,12174,12176,12178,12181,12183],{"class":81,"line":602},[79,12163,915],{"class":448},[79,12165,455],{"class":228},[79,12167,2262],{"class":448},[79,12169,5107],{"class":228},[79,12171,239],{"class":448},[79,12173,759],{"class":96},[79,12175,5114],{"class":228},[79,12177,229],{"class":448},[79,12179,12180],{"class":228},"len;i",[79,12182,4377],{"class":448},[79,12184,850],{"class":228},[79,12186,12187],{"class":81,"line":608},[79,12188,4115],{"class":228},[79,12190,12191,12194,12196,12198,12200,12202,12204,12206,12208,12210,12212,12214,12216,12218,12220],{"class":81,"line":614},[79,12192,12193],{"class":448},"     for",[79,12195,3757],{"class":228},[79,12197,2262],{"class":448},[79,12199,5484],{"class":228},[79,12201,239],{"class":448},[79,12203,759],{"class":96},[79,12205,5491],{"class":228},[79,12207,229],{"class":448},[79,12209,9423],{"class":228},[79,12211,478],{"class":448},[79,12213,775],{"class":96},[79,12215,478],{"class":448},[79,12217,5624],{"class":228},[79,12219,4377],{"class":448},[79,12221,850],{"class":228},[79,12223,12224],{"class":81,"line":619},[79,12225,12226],{"class":228},"     {\n",[79,12228,12229,12232,12235,12237,12240,12242,12245,12247,12249,12251,12253],{"class":81,"line":625},[79,12230,12231],{"class":448},"         if",[79,12233,12234],{"class":228}," ((s",[79,12236,995],{"class":448},[79,12238,12239],{"class":228},"j)->age ",[79,12241,3199],{"class":448},[79,12243,12244],{"class":228}," (s",[79,12246,995],{"class":448},[79,12248,2709],{"class":228},[79,12250,995],{"class":448},[79,12252,775],{"class":96},[79,12254,12255],{"class":228},")->age)\n",[79,12257,12258],{"class":81,"line":631},[79,12259,12260],{"class":228},"         {\n",[79,12262,12263,12266,12268,12271,12273],{"class":81,"line":637},[79,12264,12265],{"class":228},"             Sanguo temp",[79,12267,9218],{"class":448},[79,12269,12270],{"class":228},"(s",[79,12272,995],{"class":448},[79,12274,12275],{"class":228},"j);\n",[79,12277,12278,12281,12283,12285,12288,12290,12292,12294,12296,12298,12300],{"class":81,"line":643},[79,12279,12280],{"class":448},"             *",[79,12282,12270],{"class":228},[79,12284,995],{"class":448},[79,12286,12287],{"class":228},"j)",[79,12289,9218],{"class":448},[79,12291,12270],{"class":228},[79,12293,995],{"class":448},[79,12295,2709],{"class":228},[79,12297,995],{"class":448},[79,12299,775],{"class":96},[79,12301,4795],{"class":228},[79,12303,12304,12306,12308,12310,12312,12314,12316,12318,12320],{"class":81,"line":649},[79,12305,12280],{"class":448},[79,12307,12270],{"class":228},[79,12309,995],{"class":448},[79,12311,2709],{"class":228},[79,12313,995],{"class":448},[79,12315,775],{"class":96},[79,12317,2672],{"class":228},[79,12319,239],{"class":448},[79,12321,6351],{"class":228},[79,12323,12324],{"class":81,"line":655},[79,12325,12326],{"class":228},"         }\n",[79,12328,12329],{"class":81,"line":660},[79,12330,12331],{"class":228},"     }\n",[79,12333,12334],{"class":81,"line":666},[79,12335,4272],{"class":228},[79,12337,12338],{"class":81,"line":672},[79,12339,3671],{"class":228},[79,12341,12342],{"class":81,"line":678},[79,12343,12344],{"class":2313},"\u002F\u002F定义打印函数\n",[79,12346,12347,12349,12351,12353,12355,12357,12359,12361,12363,12365],{"class":81,"line":684},[79,12348,7432],{"class":448},[79,12350,11669],{"class":85},[79,12352,455],{"class":228},[79,12354,12143],{"class":85},[79,12356,467],{"class":448},[79,12358,2935],{"class":7284},[79,12360,2621],{"class":228},[79,12362,2262],{"class":448},[79,12364,9396],{"class":7284},[79,12366,850],{"class":228},[79,12368,12369],{"class":81,"line":690},[79,12370,3652],{"class":228},[79,12372,12373,12375,12377,12379,12381,12383,12385,12387,12389,12391,12393],{"class":81,"line":695},[79,12374,915],{"class":448},[79,12376,3757],{"class":228},[79,12378,2262],{"class":448},[79,12380,5107],{"class":228},[79,12382,239],{"class":448},[79,12384,759],{"class":96},[79,12386,5114],{"class":228},[79,12388,229],{"class":448},[79,12390,12180],{"class":228},[79,12392,4377],{"class":448},[79,12394,850],{"class":228},[79,12396,12397],{"class":81,"line":700},[79,12398,4115],{"class":228},[79,12400,12401,12403,12405,12407,12409,12412,12414,12416,12418,12421,12423,12425,12427,12430,12432,12434,12436,12439,12441,12443,12445,12448,12450,12452,12454,12457,12459],{"class":81,"line":712},[79,12402,5525],{"class":228},[79,12404,3283],{"class":448},[79,12406,2495],{"class":89},[79,12408,3340],{"class":96},[79,12410,12411],{"class":89},"姓名：\"",[79,12413,3283],{"class":448},[79,12415,12270],{"class":228},[79,12417,995],{"class":448},[79,12419,12420],{"class":228},"i)->name",[79,12422,3283],{"class":448},[79,12424,2495],{"class":89},[79,12426,3340],{"class":96},[79,12428,12429],{"class":89},"年龄：\"",[79,12431,3283],{"class":448},[79,12433,12270],{"class":228},[79,12435,995],{"class":448},[79,12437,12438],{"class":228},"i)->age",[79,12440,3283],{"class":448},[79,12442,2495],{"class":89},[79,12444,3340],{"class":96},[79,12446,12447],{"class":89},"性别：\"",[79,12449,3283],{"class":448},[79,12451,12270],{"class":228},[79,12453,995],{"class":448},[79,12455,12456],{"class":228},"i)->gender",[79,12458,3283],{"class":448},[79,12460,3305],{"class":228},[79,12462,12463],{"class":81,"line":721},[79,12464,4272],{"class":228},[79,12466,12467],{"class":81,"line":726},[79,12468,3671],{"class":228},[79,12470,12471,12473,12475],{"class":81,"line":731},[79,12472,2262],{"class":448},[79,12474,826],{"class":85},[79,12476,4061],{"class":228},[79,12478,12479],{"class":81,"line":748},[79,12480,3652],{"class":228},[79,12482,12483],{"class":81,"line":765},[79,12484,12485],{"class":2313},"    \u002F\u002F定义结构体变量\n",[79,12487,12488,12491,12493,12495],{"class":81,"line":780},[79,12489,12490],{"class":228},"    Sanguo s1[",[79,12492,2563],{"class":96},[79,12494,3179],{"class":228},[79,12496,6978],{"class":448},[79,12498,12499],{"class":81,"line":811},[79,12500,4115],{"class":228},[79,12502,12503,12505,12507,12509,12511,12513,12515],{"class":81,"line":816},[79,12504,6987],{"class":228},[79,12506,11987],{"class":89},[79,12508,2621],{"class":228},[79,12510,3015],{"class":96},[79,12512,2621],{"class":228},[79,12514,11996],{"class":89},[79,12516,7000],{"class":228},[79,12518,12519,12521,12523,12525,12527,12529,12531],{"class":81,"line":821},[79,12520,6987],{"class":228},[79,12522,12005],{"class":89},[79,12524,2621],{"class":228},[79,12526,2990],{"class":96},[79,12528,2621],{"class":228},[79,12530,11996],{"class":89},[79,12532,7000],{"class":228},[79,12534,12535,12537,12539,12541,12543,12545,12547],{"class":81,"line":837},[79,12536,6987],{"class":228},[79,12538,12022],{"class":89},[79,12540,2621],{"class":228},[79,12542,2940],{"class":96},[79,12544,2621],{"class":228},[79,12546,11996],{"class":89},[79,12548,7000],{"class":228},[79,12550,12551,12553,12555,12557,12559,12561,12563],{"class":81,"line":853},[79,12552,6987],{"class":228},[79,12554,12039],{"class":89},[79,12556,2621],{"class":228},[79,12558,2965],{"class":96},[79,12560,2621],{"class":228},[79,12562,11996],{"class":89},[79,12564,7000],{"class":228},[79,12566,12567,12569,12571,12573,12575,12577,12579],{"class":81,"line":864},[79,12568,6987],{"class":228},[79,12570,12056],{"class":89},[79,12572,2621],{"class":228},[79,12574,2915],{"class":96},[79,12576,2621],{"class":228},[79,12578,12065],{"class":89},[79,12580,7000],{"class":228},[79,12582,12583],{"class":81,"line":869},[79,12584,7021],{"class":228},[79,12586,12587,12589,12591,12593,12596,12598,12601,12603],{"class":81,"line":885},[79,12588,4070],{"class":448},[79,12590,9396],{"class":228},[79,12592,6274],{"class":448},[79,12594,12595],{"class":228},"(s1)",[79,12597,6280],{"class":448},[79,12599,12600],{"class":228},"(s1[",[79,12602,759],{"class":96},[79,12604,5929],{"class":228},[79,12606,12607,12610,12612,12615,12617,12620,12623,12625],{"class":81,"line":891},[79,12608,12609],{"class":228},"    Sanguo ",[79,12611,473],{"class":448},[79,12613,12614],{"class":228},"s ",[79,12616,239],{"class":448},[79,12618,12619],{"class":448}," &",[79,12621,12622],{"class":228},"s1[",[79,12624,759],{"class":96},[79,12626,6760],{"class":228},[79,12628,12629],{"class":81,"line":896},[79,12630,12631],{"class":2313},"    \u002F\u002F排序前：\n",[79,12633,12634,12636,12638,12641,12643],{"class":81,"line":907},[79,12635,8594],{"class":228},[79,12637,3283],{"class":448},[79,12639,12640],{"class":89}," \"排序前：\"",[79,12642,3551],{"class":448},[79,12644,10895],{"class":228},[79,12646,12647,12649],{"class":81,"line":912},[79,12648,11952],{"class":85},[79,12650,12651],{"class":228},"(s,len);\n",[79,12653,12654],{"class":81,"line":935},[79,12655,12656],{"class":2313},"    \u002F\u002F调用排序函数\n",[79,12658,12659,12661],{"class":81,"line":946},[79,12660,9663],{"class":85},[79,12662,12651],{"class":228},[79,12664,12665],{"class":81,"line":960},[79,12666,12667],{"class":2313},"    \u002F\u002F排序后\n",[79,12669,12670,12672,12674,12677,12679],{"class":81,"line":975},[79,12671,8594],{"class":228},[79,12673,3283],{"class":448},[79,12675,12676],{"class":89}," \"排序后：\"",[79,12678,3551],{"class":448},[79,12680,10895],{"class":228},[79,12682,12683,12685],{"class":81,"line":980},[79,12684,11952],{"class":85},[79,12686,12651],{"class":228},[79,12688,12689],{"class":81,"line":1006},[79,12690,3671],{"class":228},[19,12692,12693,12694,12696],{},"注意：使用指针时直接用传首地址**&s",[79,12695,759],{},"**",[2159,12698,12699],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":57,"searchDepth":167,"depth":167,"links":12701},[12702,12703,12704,12705,12706,12707,12708],{"id":9768,"depth":167,"text":9769},{"id":10120,"depth":167,"text":10121},{"id":10389,"depth":167,"text":10390},{"id":10554,"depth":167,"text":10555},{"id":10770,"depth":167,"text":10771},{"id":11091,"depth":167,"text":11092},{"id":11319,"depth":167,"text":11320},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":9757,"description":9765},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":12715,"title":12716,"body":12717,"description":57,"extension":2186,"meta":14060,"navigation":541,"path":14061,"seo":14062,"stem":14063,"__hash__":14064},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":12718,"toc":14054},[12719,12722,12726,12732,12746,12751,12754,12758,12765,12771,12774,12781,12787,12792,12795,12798,12801,13365,13368,13382,13386,13391,13407,13547,13550,13556,13559,13564,13572,13680,13683,13688,13691,13696,13699,13705,13708,14051],[10,12720,12716],{"id":12721},"_5程序内存模型",[14,12723,12725],{"id":12724},"_51内存分区模型","5.1内存分区模型",[19,12727,12728,12729],{},"C++程序在执行时，将内存大方向划分为",[2398,12730,12731],{},"4个区域",[3246,12733,12734,12737,12740,12743],{},[29,12735,12736],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[29,12738,12739],{},"全局区：存放全局变量和静态变量以及常量",[29,12741,12742],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[29,12744,12745],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,12747,12748],{},[2398,12749,12750],{},"内存四区意义：",[19,12752,12753],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[339,12755,12757],{"id":12756},"_511程序运行前","5.1.1程序运行前",[19,12759,12760,12761,12764],{},"​\t在程序编译后，生成了exe可执行程序，",[2398,12762,12763],{},"未执行该程序前","分为两个区域",[19,12766,12767,12768],{},"​\t",[2398,12769,12770],{},"代码区：",[19,12772,12773],{},"​\t\t存放 CPU 执行的机器指令",[19,12775,12776,12777,12780],{},"​\t\t代码区是",[2398,12778,12779],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,12782,12776,12783,12786],{},[2398,12784,12785],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,12788,12767,12789],{},[2398,12790,12791],{},"全局区：",[19,12793,12794],{},"​\t\t全局变量和静态变量存放在此.",[19,12796,12797],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,12799,12800],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[51,12802,12804],{"className":2248,"code":12803,"language":2250,"meta":57,"style":57},"\u002F\u002F全局变量\nint g_a = 10;\nint g_b = 10;\n\n\u002F\u002F全局常量\nconst int c_g_a = 10;\nconst int c_g_b = 10;\n\nint main() {\n\n    \u002F\u002F局部变量\n    int a = 10;\n    int b = 10;\n\n    \u002F\u002F打印地址\n    cout \u003C\u003C \"局部变量a地址为： \" \u003C\u003C (int)&a \u003C\u003C endl;\n    cout \u003C\u003C \"局部变量b地址为： \" \u003C\u003C (int)&b \u003C\u003C endl;\n\n    cout \u003C\u003C \"全局变量g_a地址为： \" \u003C\u003C  (int)&g_a \u003C\u003C endl;\n    cout \u003C\u003C \"全局变量g_b地址为： \" \u003C\u003C  (int)&g_b \u003C\u003C endl;\n\n    \u002F\u002F静态变量\n    static int s_a = 10;\n    static int s_b = 10;\n\n    cout \u003C\u003C \"静态变量s_a地址为： \" \u003C\u003C (int)&s_a \u003C\u003C endl;\n    cout \u003C\u003C \"静态变量s_b地址为： \" \u003C\u003C (int)&s_b \u003C\u003C endl;\n\n    cout \u003C\u003C \"字符串常量地址为： \" \u003C\u003C (int)&\"hello world\" \u003C\u003C endl;\n    cout \u003C\u003C \"字符串常量地址为： \" \u003C\u003C (int)&\"hello world1\" \u003C\u003C endl;\n\n    cout \u003C\u003C \"全局常量c_g_a地址为： \" \u003C\u003C (int)&c_g_a \u003C\u003C endl;\n    cout \u003C\u003C \"全局常量c_g_b地址为： \" \u003C\u003C (int)&c_g_b \u003C\u003C endl;\n\n    const int c_l_a = 10;\n    const int c_l_b = 10;\n    cout \u003C\u003C \"局部常量c_l_a地址为： \" \u003C\u003C (int)&c_l_a \u003C\u003C endl;\n    cout \u003C\u003C \"局部常量c_l_b地址为： \" \u003C\u003C (int)&c_l_b \u003C\u003C endl;\n\n    system(\"pause\");\n\n    return 0;\n}\n",[59,12805,12806,12811,12824,12837,12841,12846,12861,12876,12880,12889,12893,12898,12911,12924,12928,12933,12959,12985,12989,13016,13042,13046,13051,13067,13082,13086,13112,13138,13142,13167,13192,13196,13222,13248,13252,13268,13283,13309,13335,13339,13349,13353,13361],{"__ignoreMap":57},[79,12807,12808],{"class":81,"line":82},[79,12809,12810],{"class":2313},"\u002F\u002F全局变量\n",[79,12812,12813,12815,12818,12820,12822],{"class":81,"line":167},[79,12814,2262],{"class":448},[79,12816,12817],{"class":228}," g_a ",[79,12819,239],{"class":448},[79,12821,4123],{"class":96},[79,12823,3400],{"class":228},[79,12825,12826,12828,12831,12833,12835],{"class":81,"line":178},[79,12827,2262],{"class":448},[79,12829,12830],{"class":228}," g_b ",[79,12832,239],{"class":448},[79,12834,4123],{"class":96},[79,12836,3400],{"class":228},[79,12838,12839],{"class":81,"line":545},[79,12840,542],{"emptyLinePlaceholder":541},[79,12842,12843],{"class":81,"line":550},[79,12844,12845],{"class":2313},"\u002F\u002F全局常量\n",[79,12847,12848,12850,12852,12855,12857,12859],{"class":81,"line":562},[79,12849,8857],{"class":448},[79,12851,4467],{"class":448},[79,12853,12854],{"class":228}," c_g_a ",[79,12856,239],{"class":448},[79,12858,4123],{"class":96},[79,12860,3400],{"class":228},[79,12862,12863,12865,12867,12870,12872,12874],{"class":81,"line":568},[79,12864,8857],{"class":448},[79,12866,4467],{"class":448},[79,12868,12869],{"class":228}," c_g_b ",[79,12871,239],{"class":448},[79,12873,4123],{"class":96},[79,12875,3400],{"class":228},[79,12877,12878],{"class":81,"line":574},[79,12879,542],{"emptyLinePlaceholder":541},[79,12881,12882,12884,12886],{"class":81,"line":579},[79,12883,2262],{"class":448},[79,12885,826],{"class":85},[79,12887,12888],{"class":228},"() {\n",[79,12890,12891],{"class":81,"line":585},[79,12892,542],{"emptyLinePlaceholder":541},[79,12894,12895],{"class":81,"line":591},[79,12896,12897],{"class":2313},"    \u002F\u002F局部变量\n",[79,12899,12900,12902,12905,12907,12909],{"class":81,"line":596},[79,12901,4070],{"class":448},[79,12903,12904],{"class":228}," a ",[79,12906,239],{"class":448},[79,12908,4123],{"class":96},[79,12910,3400],{"class":228},[79,12912,12913,12915,12918,12920,12922],{"class":81,"line":602},[79,12914,4070],{"class":448},[79,12916,12917],{"class":228}," b ",[79,12919,239],{"class":448},[79,12921,4123],{"class":96},[79,12923,3400],{"class":228},[79,12925,12926],{"class":81,"line":608},[79,12927,542],{"emptyLinePlaceholder":541},[79,12929,12930],{"class":81,"line":614},[79,12931,12932],{"class":2313},"    \u002F\u002F打印地址\n",[79,12934,12935,12937,12939,12942,12944,12946,12948,12950,12952,12955,12957],{"class":81,"line":619},[79,12936,8594],{"class":228},[79,12938,3283],{"class":448},[79,12940,12941],{"class":89}," \"局部变量a地址为： \"",[79,12943,3551],{"class":448},[79,12945,3757],{"class":228},[79,12947,2262],{"class":448},[79,12949,2672],{"class":228},[79,12951,2596],{"class":448},[79,12953,12954],{"class":228},"a ",[79,12956,3283],{"class":448},[79,12958,10895],{"class":228},[79,12960,12961,12963,12965,12968,12970,12972,12974,12976,12978,12981,12983],{"class":81,"line":625},[79,12962,8594],{"class":228},[79,12964,3283],{"class":448},[79,12966,12967],{"class":89}," \"局部变量b地址为： \"",[79,12969,3551],{"class":448},[79,12971,3757],{"class":228},[79,12973,2262],{"class":448},[79,12975,2672],{"class":228},[79,12977,2596],{"class":448},[79,12979,12980],{"class":228},"b ",[79,12982,3283],{"class":448},[79,12984,10895],{"class":228},[79,12986,12987],{"class":81,"line":631},[79,12988,542],{"emptyLinePlaceholder":541},[79,12990,12991,12993,12995,12998,13000,13003,13005,13007,13009,13012,13014],{"class":81,"line":637},[79,12992,8594],{"class":228},[79,12994,3283],{"class":448},[79,12996,12997],{"class":89}," \"全局变量g_a地址为： \"",[79,12999,3551],{"class":448},[79,13001,13002],{"class":228},"  (",[79,13004,2262],{"class":448},[79,13006,2672],{"class":228},[79,13008,2596],{"class":448},[79,13010,13011],{"class":228},"g_a ",[79,13013,3283],{"class":448},[79,13015,10895],{"class":228},[79,13017,13018,13020,13022,13025,13027,13029,13031,13033,13035,13038,13040],{"class":81,"line":643},[79,13019,8594],{"class":228},[79,13021,3283],{"class":448},[79,13023,13024],{"class":89}," \"全局变量g_b地址为： \"",[79,13026,3551],{"class":448},[79,13028,13002],{"class":228},[79,13030,2262],{"class":448},[79,13032,2672],{"class":228},[79,13034,2596],{"class":448},[79,13036,13037],{"class":228},"g_b ",[79,13039,3283],{"class":448},[79,13041,10895],{"class":228},[79,13043,13044],{"class":81,"line":649},[79,13045,542],{"emptyLinePlaceholder":541},[79,13047,13048],{"class":81,"line":655},[79,13049,13050],{"class":2313},"    \u002F\u002F静态变量\n",[79,13052,13053,13056,13058,13061,13063,13065],{"class":81,"line":660},[79,13054,13055],{"class":448},"    static",[79,13057,4467],{"class":448},[79,13059,13060],{"class":228}," s_a ",[79,13062,239],{"class":448},[79,13064,4123],{"class":96},[79,13066,3400],{"class":228},[79,13068,13069,13071,13073,13076,13078,13080],{"class":81,"line":666},[79,13070,13055],{"class":448},[79,13072,4467],{"class":448},[79,13074,13075],{"class":228}," s_b ",[79,13077,239],{"class":448},[79,13079,4123],{"class":96},[79,13081,3400],{"class":228},[79,13083,13084],{"class":81,"line":672},[79,13085,542],{"emptyLinePlaceholder":541},[79,13087,13088,13090,13092,13095,13097,13099,13101,13103,13105,13108,13110],{"class":81,"line":678},[79,13089,8594],{"class":228},[79,13091,3283],{"class":448},[79,13093,13094],{"class":89}," \"静态变量s_a地址为： \"",[79,13096,3551],{"class":448},[79,13098,3757],{"class":228},[79,13100,2262],{"class":448},[79,13102,2672],{"class":228},[79,13104,2596],{"class":448},[79,13106,13107],{"class":228},"s_a ",[79,13109,3283],{"class":448},[79,13111,10895],{"class":228},[79,13113,13114,13116,13118,13121,13123,13125,13127,13129,13131,13134,13136],{"class":81,"line":684},[79,13115,8594],{"class":228},[79,13117,3283],{"class":448},[79,13119,13120],{"class":89}," \"静态变量s_b地址为： \"",[79,13122,3551],{"class":448},[79,13124,3757],{"class":228},[79,13126,2262],{"class":448},[79,13128,2672],{"class":228},[79,13130,2596],{"class":448},[79,13132,13133],{"class":228},"s_b ",[79,13135,3283],{"class":448},[79,13137,10895],{"class":228},[79,13139,13140],{"class":81,"line":690},[79,13141,542],{"emptyLinePlaceholder":541},[79,13143,13144,13146,13148,13151,13153,13155,13157,13159,13161,13163,13165],{"class":81,"line":695},[79,13145,8594],{"class":228},[79,13147,3283],{"class":448},[79,13149,13150],{"class":89}," \"字符串常量地址为： \"",[79,13152,3551],{"class":448},[79,13154,3757],{"class":228},[79,13156,2262],{"class":448},[79,13158,2672],{"class":228},[79,13160,2596],{"class":448},[79,13162,3300],{"class":89},[79,13164,3551],{"class":448},[79,13166,10895],{"class":228},[79,13168,13169,13171,13173,13175,13177,13179,13181,13183,13185,13188,13190],{"class":81,"line":700},[79,13170,8594],{"class":228},[79,13172,3283],{"class":448},[79,13174,13150],{"class":89},[79,13176,3551],{"class":448},[79,13178,3757],{"class":228},[79,13180,2262],{"class":448},[79,13182,2672],{"class":228},[79,13184,2596],{"class":448},[79,13186,13187],{"class":89},"\"hello world1\"",[79,13189,3551],{"class":448},[79,13191,10895],{"class":228},[79,13193,13194],{"class":81,"line":712},[79,13195,542],{"emptyLinePlaceholder":541},[79,13197,13198,13200,13202,13205,13207,13209,13211,13213,13215,13218,13220],{"class":81,"line":721},[79,13199,8594],{"class":228},[79,13201,3283],{"class":448},[79,13203,13204],{"class":89}," \"全局常量c_g_a地址为： \"",[79,13206,3551],{"class":448},[79,13208,3757],{"class":228},[79,13210,2262],{"class":448},[79,13212,2672],{"class":228},[79,13214,2596],{"class":448},[79,13216,13217],{"class":228},"c_g_a ",[79,13219,3283],{"class":448},[79,13221,10895],{"class":228},[79,13223,13224,13226,13228,13231,13233,13235,13237,13239,13241,13244,13246],{"class":81,"line":726},[79,13225,8594],{"class":228},[79,13227,3283],{"class":448},[79,13229,13230],{"class":89}," \"全局常量c_g_b地址为： \"",[79,13232,3551],{"class":448},[79,13234,3757],{"class":228},[79,13236,2262],{"class":448},[79,13238,2672],{"class":228},[79,13240,2596],{"class":448},[79,13242,13243],{"class":228},"c_g_b ",[79,13245,3283],{"class":448},[79,13247,10895],{"class":228},[79,13249,13250],{"class":81,"line":731},[79,13251,542],{"emptyLinePlaceholder":541},[79,13253,13254,13257,13259,13262,13264,13266],{"class":81,"line":748},[79,13255,13256],{"class":448},"    const",[79,13258,4467],{"class":448},[79,13260,13261],{"class":228}," c_l_a ",[79,13263,239],{"class":448},[79,13265,4123],{"class":96},[79,13267,3400],{"class":228},[79,13269,13270,13272,13274,13277,13279,13281],{"class":81,"line":765},[79,13271,13256],{"class":448},[79,13273,4467],{"class":448},[79,13275,13276],{"class":228}," c_l_b ",[79,13278,239],{"class":448},[79,13280,4123],{"class":96},[79,13282,3400],{"class":228},[79,13284,13285,13287,13289,13292,13294,13296,13298,13300,13302,13305,13307],{"class":81,"line":780},[79,13286,8594],{"class":228},[79,13288,3283],{"class":448},[79,13290,13291],{"class":89}," \"局部常量c_l_a地址为： \"",[79,13293,3551],{"class":448},[79,13295,3757],{"class":228},[79,13297,2262],{"class":448},[79,13299,2672],{"class":228},[79,13301,2596],{"class":448},[79,13303,13304],{"class":228},"c_l_a ",[79,13306,3283],{"class":448},[79,13308,10895],{"class":228},[79,13310,13311,13313,13315,13318,13320,13322,13324,13326,13328,13331,13333],{"class":81,"line":811},[79,13312,8594],{"class":228},[79,13314,3283],{"class":448},[79,13316,13317],{"class":89}," \"局部常量c_l_b地址为： \"",[79,13319,3551],{"class":448},[79,13321,3757],{"class":228},[79,13323,2262],{"class":448},[79,13325,2672],{"class":228},[79,13327,2596],{"class":448},[79,13329,13330],{"class":228},"c_l_b ",[79,13332,3283],{"class":448},[79,13334,10895],{"class":228},[79,13336,13337],{"class":81,"line":816},[79,13338,542],{"emptyLinePlaceholder":541},[79,13340,13341,13343,13345,13347],{"class":81,"line":821},[79,13342,4388],{"class":85},[79,13344,455],{"class":228},[79,13346,4393],{"class":89},[79,13348,4795],{"class":228},[79,13350,13351],{"class":81,"line":837},[79,13352,542],{"emptyLinePlaceholder":541},[79,13354,13355,13357,13359],{"class":81,"line":853},[79,13356,715],{"class":448},[79,13358,1103],{"class":96},[79,13360,3400],{"class":228},[79,13362,13363],{"class":81,"line":864},[79,13364,3671],{"class":228},[19,13366,13367],{},"总结：",[3246,13369,13370,13373,13376,13379],{},[29,13371,13372],{},"c++中程序运行前分为全局区和代码区",[29,13374,13375],{},"代码区特点是共享和只读",[29,13377,13378],{},"全局区中存放全局变量、静态变量、常量",[29,13380,13381],{},"常量区中存放const修饰的全局常量和字符串常量",[339,13383,13385],{"id":13384},"_512程序运行后","5.1.2程序运行后",[26,13387,13388],{},[29,13389,13390],{},"栈区：",[3246,13392,13393,13400],{},[29,13394,13395,13396,13399],{},"由编译器自动分配释放, 存放",[2398,13397,13398],{},"函数的参数值,局部变量","等",[29,13401,13402,13403,13406],{},"注意事项：",[2398,13404,13405],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[51,13408,13410],{"className":2248,"code":13409,"language":2250,"meta":57,"style":57},"int * func()\n{\n    int a = 10; \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n    return &a; \u002F\u002F放回局部变量的地址\n}\n\nint main() {\n    \u002F\u002F接受func的返回值\n    int *p = func();\n    cout \u003C\u003C *p \u003C\u003C endl; \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n    cout \u003C\u003C *p \u003C\u003C endl; \u002F\u002F第二次这个数据不再保留\n    system(\"pause\");\n    return 0;\n}\n",[59,13411,13412,13423,13427,13442,13454,13458,13462,13470,13475,13490,13508,13525,13535,13543],{"__ignoreMap":57},[79,13413,13414,13416,13418,13421],{"class":81,"line":82},[79,13415,2262],{"class":448},[79,13417,467],{"class":448},[79,13419,13420],{"class":85}," func",[79,13422,4061],{"class":228},[79,13424,13425],{"class":81,"line":167},[79,13426,3652],{"class":228},[79,13428,13429,13431,13433,13435,13437,13439],{"class":81,"line":178},[79,13430,4070],{"class":448},[79,13432,12904],{"class":228},[79,13434,239],{"class":448},[79,13436,4123],{"class":96},[79,13438,2310],{"class":228},[79,13440,13441],{"class":2313}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[79,13443,13444,13446,13448,13451],{"class":81,"line":545},[79,13445,715],{"class":448},[79,13447,12619],{"class":448},[79,13449,13450],{"class":228},"a;",[79,13452,13453],{"class":2313}," \u002F\u002F放回局部变量的地址\n",[79,13455,13456],{"class":81,"line":550},[79,13457,3671],{"class":228},[79,13459,13460],{"class":81,"line":562},[79,13461,542],{"emptyLinePlaceholder":541},[79,13463,13464,13466,13468],{"class":81,"line":568},[79,13465,2262],{"class":448},[79,13467,826],{"class":85},[79,13469,12888],{"class":228},[79,13471,13472],{"class":81,"line":574},[79,13473,13474],{"class":2313},"    \u002F\u002F接受func的返回值\n",[79,13476,13477,13479,13481,13484,13486,13488],{"class":81,"line":579},[79,13478,4070],{"class":448},[79,13480,467],{"class":448},[79,13482,13483],{"class":228},"p ",[79,13485,239],{"class":448},[79,13487,13420],{"class":85},[79,13489,7704],{"class":228},[79,13491,13492,13494,13496,13498,13500,13502,13505],{"class":81,"line":585},[79,13493,8594],{"class":228},[79,13495,3283],{"class":448},[79,13497,467],{"class":448},[79,13499,13483],{"class":228},[79,13501,3283],{"class":448},[79,13503,13504],{"class":228}," endl;",[79,13506,13507],{"class":2313}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[79,13509,13510,13512,13514,13516,13518,13520,13522],{"class":81,"line":591},[79,13511,8594],{"class":228},[79,13513,3283],{"class":448},[79,13515,467],{"class":448},[79,13517,13483],{"class":228},[79,13519,3283],{"class":448},[79,13521,13504],{"class":228},[79,13523,13524],{"class":2313}," \u002F\u002F第二次这个数据不再保留\n",[79,13526,13527,13529,13531,13533],{"class":81,"line":596},[79,13528,4388],{"class":85},[79,13530,455],{"class":228},[79,13532,4393],{"class":89},[79,13534,4795],{"class":228},[79,13536,13537,13539,13541],{"class":81,"line":602},[79,13538,715],{"class":448},[79,13540,1103],{"class":96},[79,13542,3400],{"class":228},[79,13544,13545],{"class":81,"line":608},[79,13546,3671],{"class":228},[19,13548,13549],{},"输出结果：",[19,13551,13552],{},[3569,13553],{"alt":13554,"src":13555},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,13557,13558],{},"总结：不要返回局部变量的地址",[26,13560,13561],{"start":167},[29,13562,13563],{},"堆区",[3246,13565,13566,13569],{},[29,13567,13568],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[29,13570,13571],{},"在c++中主要利用new在堆区开辟内存",[51,13573,13575],{"className":2248,"code":13574,"language":2250,"meta":57,"style":57},"int  *func()  \u002F\u002F函数返回指针\n{\n    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n   int *p= new int(10);\n   return p;\n}\nint main()\n{\n    \u002F\u002F在堆区开辟数据\n    int *p=func();\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[59,13576,13577,13592,13596,13601,13622,13629,13633,13641,13645,13650,13664,13676],{"__ignoreMap":57},[79,13578,13579,13581,13584,13587,13589],{"class":81,"line":82},[79,13580,2262],{"class":448},[79,13582,13583],{"class":448},"  *",[79,13585,13586],{"class":85},"func",[79,13588,4511],{"class":228},[79,13590,13591],{"class":2313},"  \u002F\u002F函数返回指针\n",[79,13593,13594],{"class":81,"line":167},[79,13595,3652],{"class":228},[79,13597,13598],{"class":81,"line":178},[79,13599,13600],{"class":2313},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[79,13602,13603,13605,13607,13609,13611,13614,13616,13618,13620],{"class":81,"line":545},[79,13604,6218],{"class":448},[79,13606,467],{"class":448},[79,13608,19],{"class":228},[79,13610,239],{"class":448},[79,13612,13613],{"class":448}," new",[79,13615,4467],{"class":448},[79,13617,455],{"class":228},[79,13619,2689],{"class":96},[79,13621,4795],{"class":228},[79,13623,13624,13626],{"class":81,"line":550},[79,13625,6452],{"class":448},[79,13627,13628],{"class":228}," p;\n",[79,13630,13631],{"class":81,"line":562},[79,13632,3671],{"class":228},[79,13634,13635,13637,13639],{"class":81,"line":568},[79,13636,2262],{"class":448},[79,13638,826],{"class":85},[79,13640,4061],{"class":228},[79,13642,13643],{"class":81,"line":574},[79,13644,3652],{"class":228},[79,13646,13647],{"class":81,"line":579},[79,13648,13649],{"class":2313},"    \u002F\u002F在堆区开辟数据\n",[79,13651,13652,13654,13656,13658,13660,13662],{"class":81,"line":585},[79,13653,4070],{"class":448},[79,13655,467],{"class":448},[79,13657,19],{"class":228},[79,13659,239],{"class":448},[79,13661,13586],{"class":85},[79,13663,7704],{"class":228},[79,13665,13666,13668,13670,13672,13674],{"class":81,"line":591},[79,13667,3657],{"class":228},[79,13669,8485],{"class":448},[79,13671,19],{"class":228},[79,13673,3283],{"class":448},[79,13675,3305],{"class":228},[79,13677,13678],{"class":81,"line":596},[79,13679,3671],{"class":228},[19,13681,13682],{},"图片展示：",[19,13684,13685],{},[3569,13686],{"alt":13554,"src":13687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,13689,13690],{},"堆区内存由程序员管生死！！！",[26,13692,13693],{"start":178},[29,13694,13695],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,13697,13698],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,13700,13701,13702],{},"​语法：",[59,13703,13704],{}," new 数据类型",[19,13706,13707],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[51,13709,13711],{"className":2248,"code":13710,"language":2250,"meta":57,"style":57},"\u002F\u002F1.new的基本语法\nint *func()\n{\n    \u002F\u002F在堆区创建整型数据\n    \u002F\u002Fnew返回的是该数据类型的指针\n    int *p=new int(10);\u002F\u002Fnew啥类型就返回啥类型数据的指针\n}\nvoid test01()\n{\n    int *p=func();\n    cout\u003C\u003C*p\u003C\u003Cendl;\n    cout\u003C\u003C*p\u003C\u003Cendl;\n    cout\u003C\u003C*p\u003C\u003Cendl;\n    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n    delete p;\u002F\u002F删除这块地址\n}\n\u002F\u002F2.在堆区利用new开辟数组\nvoid test02()\n{\n    \u002F\u002F创建10整数数据的数组，在堆区\n    int *arr=new int[10];\u002F\u002F10代表数组有10个元素\n    for (int i=0;i\u003C10;i++)\n    {\n        arr[i]=i+100;\u002F\u002F给10个元素赋值100～109\n    }\n    for (int i=0;i\u003C10;i++)\n    {\n        cout\u003C\u003Carr[i]\u003C\u003Cendl;\n    }\n    \u002F\u002F释放堆区数组\n    \u002F\u002F释放数组的时候 要加[]才可以\n    delete[] arr;\n}\n\nint main()\n{\n    test01();\n    test02();\n}\n\n",[59,13712,13713,13718,13728,13732,13737,13742,13764,13768,13776,13780,13794,13806,13818,13830,13835,13840,13851,13855,13860,13868,13872,13877,13899,13925,13929,13947,13951,13977,13981,13993,13997,14002,14007,14015,14019,14023,14031,14035,14041,14047],{"__ignoreMap":57},[79,13714,13715],{"class":81,"line":82},[79,13716,13717],{"class":2313},"\u002F\u002F1.new的基本语法\n",[79,13719,13720,13722,13724,13726],{"class":81,"line":167},[79,13721,2262],{"class":448},[79,13723,467],{"class":448},[79,13725,13586],{"class":85},[79,13727,4061],{"class":228},[79,13729,13730],{"class":81,"line":178},[79,13731,3652],{"class":228},[79,13733,13734],{"class":81,"line":545},[79,13735,13736],{"class":2313},"    \u002F\u002F在堆区创建整型数据\n",[79,13738,13739],{"class":81,"line":550},[79,13740,13741],{"class":2313},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[79,13743,13744,13746,13748,13750,13753,13755,13757,13759,13761],{"class":81,"line":562},[79,13745,4070],{"class":448},[79,13747,467],{"class":448},[79,13749,19],{"class":228},[79,13751,13752],{"class":448},"=new",[79,13754,4467],{"class":448},[79,13756,455],{"class":228},[79,13758,2689],{"class":96},[79,13760,8033],{"class":228},[79,13762,13763],{"class":2313},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[79,13765,13766],{"class":81,"line":568},[79,13767,3671],{"class":228},[79,13769,13770,13772,13774],{"class":81,"line":574},[79,13771,7432],{"class":448},[79,13773,7656],{"class":85},[79,13775,4061],{"class":228},[79,13777,13778],{"class":81,"line":579},[79,13779,3652],{"class":228},[79,13781,13782,13784,13786,13788,13790,13792],{"class":81,"line":585},[79,13783,4070],{"class":448},[79,13785,467],{"class":448},[79,13787,19],{"class":228},[79,13789,239],{"class":448},[79,13791,13586],{"class":85},[79,13793,7704],{"class":228},[79,13795,13796,13798,13800,13802,13804],{"class":81,"line":591},[79,13797,3657],{"class":228},[79,13799,8485],{"class":448},[79,13801,19],{"class":228},[79,13803,3283],{"class":448},[79,13805,3305],{"class":228},[79,13807,13808,13810,13812,13814,13816],{"class":81,"line":596},[79,13809,3657],{"class":228},[79,13811,8485],{"class":448},[79,13813,19],{"class":228},[79,13815,3283],{"class":448},[79,13817,3305],{"class":228},[79,13819,13820,13822,13824,13826,13828],{"class":81,"line":602},[79,13821,3657],{"class":228},[79,13823,8485],{"class":448},[79,13825,19],{"class":228},[79,13827,3283],{"class":448},[79,13829,3305],{"class":228},[79,13831,13832],{"class":81,"line":608},[79,13833,13834],{"class":2313},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[79,13836,13837],{"class":81,"line":614},[79,13838,13839],{"class":2313},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[79,13841,13842,13845,13848],{"class":81,"line":619},[79,13843,13844],{"class":448},"    delete",[79,13846,13847],{"class":228}," p;",[79,13849,13850],{"class":2313},"\u002F\u002F删除这块地址\n",[79,13852,13853],{"class":81,"line":625},[79,13854,3671],{"class":228},[79,13856,13857],{"class":81,"line":631},[79,13858,13859],{"class":2313},"\u002F\u002F2.在堆区利用new开辟数组\n",[79,13861,13862,13864,13866],{"class":81,"line":637},[79,13863,7432],{"class":448},[79,13865,7725],{"class":85},[79,13867,4061],{"class":228},[79,13869,13870],{"class":81,"line":643},[79,13871,3652],{"class":228},[79,13873,13874],{"class":81,"line":649},[79,13875,13876],{"class":2313},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[79,13878,13879,13881,13883,13885,13887,13889,13891,13893,13896],{"class":81,"line":655},[79,13880,4070],{"class":448},[79,13882,467],{"class":448},[79,13884,5953],{"class":228},[79,13886,13752],{"class":448},[79,13888,4467],{"class":448},[79,13890,3130],{"class":228},[79,13892,2689],{"class":96},[79,13894,13895],{"class":228},"];",[79,13897,13898],{"class":2313},"\u002F\u002F10代表数组有10个元素\n",[79,13900,13901,13903,13905,13907,13909,13911,13913,13915,13917,13919,13921,13923],{"class":81,"line":660},[79,13902,915],{"class":448},[79,13904,3757],{"class":228},[79,13906,2262],{"class":448},[79,13908,5107],{"class":228},[79,13910,239],{"class":448},[79,13912,759],{"class":96},[79,13914,5114],{"class":228},[79,13916,229],{"class":448},[79,13918,2689],{"class":96},[79,13920,5114],{"class":228},[79,13922,4377],{"class":448},[79,13924,850],{"class":228},[79,13926,13927],{"class":81,"line":666},[79,13928,4115],{"class":228},[79,13930,13931,13934,13936,13938,13940,13942,13944],{"class":81,"line":672},[79,13932,13933],{"class":228},"        arr[i]",[79,13935,239],{"class":448},[79,13937,2684],{"class":228},[79,13939,995],{"class":448},[79,13941,2555],{"class":96},[79,13943,2310],{"class":228},[79,13945,13946],{"class":2313},"\u002F\u002F给10个元素赋值100～109\n",[79,13948,13949],{"class":81,"line":678},[79,13950,4272],{"class":228},[79,13952,13953,13955,13957,13959,13961,13963,13965,13967,13969,13971,13973,13975],{"class":81,"line":684},[79,13954,915],{"class":448},[79,13956,3757],{"class":228},[79,13958,2262],{"class":448},[79,13960,5107],{"class":228},[79,13962,239],{"class":448},[79,13964,759],{"class":96},[79,13966,5114],{"class":228},[79,13968,229],{"class":448},[79,13970,2689],{"class":96},[79,13972,5114],{"class":228},[79,13974,4377],{"class":448},[79,13976,850],{"class":228},[79,13978,13979],{"class":81,"line":690},[79,13980,4115],{"class":228},[79,13982,13983,13985,13987,13989,13991],{"class":81,"line":695},[79,13984,5525],{"class":228},[79,13986,3283],{"class":448},[79,13988,6425],{"class":228},[79,13990,3283],{"class":448},[79,13992,3305],{"class":228},[79,13994,13995],{"class":81,"line":700},[79,13996,4272],{"class":228},[79,13998,13999],{"class":81,"line":712},[79,14000,14001],{"class":2313},"    \u002F\u002F释放堆区数组\n",[79,14003,14004],{"class":81,"line":721},[79,14005,14006],{"class":2313},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[79,14008,14009,14012],{"class":81,"line":726},[79,14010,14011],{"class":448},"    delete[]",[79,14013,14014],{"class":228}," arr;\n",[79,14016,14017],{"class":81,"line":731},[79,14018,3671],{"class":228},[79,14020,14021],{"class":81,"line":748},[79,14022,542],{"emptyLinePlaceholder":541},[79,14024,14025,14027,14029],{"class":81,"line":765},[79,14026,2262],{"class":448},[79,14028,826],{"class":85},[79,14030,4061],{"class":228},[79,14032,14033],{"class":81,"line":780},[79,14034,3652],{"class":228},[79,14036,14037,14039],{"class":81,"line":811},[79,14038,7701],{"class":85},[79,14040,7704],{"class":228},[79,14042,14043,14045],{"class":81,"line":816},[79,14044,7770],{"class":85},[79,14046,7704],{"class":228},[79,14048,14049],{"class":81,"line":821},[79,14050,3671],{"class":228},[2159,14052,14053],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":57,"searchDepth":167,"depth":167,"links":14055},[14056],{"id":12724,"depth":167,"text":12725,"children":14057},[14058,14059],{"id":12756,"depth":178,"text":12757},{"id":13384,"depth":178,"text":13385},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":12716,"description":57},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":14066,"title":14067,"body":14068,"description":57,"extension":2186,"meta":15548,"navigation":541,"path":15549,"seo":15550,"stem":15551,"__hash__":15552},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":14069,"toc":15540},[14070,14073,14077,14080,14083,14252,14256,14261,14278,14283,14435,14439,14442,14445,14838,14842,14845,14850,14853,15165,15169,15175,15335,15337,15345,15349,15352,15359,15537],[10,14071,14067],{"id":14072},"_6引用",[14,14074,14076],{"id":14075},"_61引用基本用法","6.1引用基本用法",[19,14078,14079],{},"引用的本质：给变量起别名",[19,14081,14082],{},"语法：数据类型 &别名=原名",[51,14084,14086],{"className":2248,"code":14085,"language":2250,"meta":57,"style":57},"int main() {\n\n    int a = 10;\n    int &b = a;\n\n    cout \u003C\u003C \"a = \" \u003C\u003C a \u003C\u003C endl;\u002F\u002F10\n    cout \u003C\u003C \"b = \" \u003C\u003C b \u003C\u003C endl;\u002F\u002F10\n\n    b = 100;\n\n    cout \u003C\u003C \"a = \" \u003C\u003C a \u003C\u003C endl;\u002F\u002F100\n    cout \u003C\u003C \"b = \" \u003C\u003C b \u003C\u003C endl;\u002F\u002F100\n\n    system(\"pause\");\n\n    return 0;\n}\n",[59,14087,14088,14096,14100,14112,14124,14128,14147,14166,14170,14181,14185,14204,14222,14226,14236,14240,14248],{"__ignoreMap":57},[79,14089,14090,14092,14094],{"class":81,"line":82},[79,14091,2262],{"class":448},[79,14093,826],{"class":85},[79,14095,12888],{"class":228},[79,14097,14098],{"class":81,"line":167},[79,14099,542],{"emptyLinePlaceholder":541},[79,14101,14102,14104,14106,14108,14110],{"class":81,"line":178},[79,14103,4070],{"class":448},[79,14105,12904],{"class":228},[79,14107,239],{"class":448},[79,14109,4123],{"class":96},[79,14111,3400],{"class":228},[79,14113,14114,14116,14118,14120,14122],{"class":81,"line":545},[79,14115,4070],{"class":448},[79,14117,12619],{"class":448},[79,14119,12980],{"class":228},[79,14121,239],{"class":448},[79,14123,3539],{"class":228},[79,14125,14126],{"class":81,"line":550},[79,14127,542],{"emptyLinePlaceholder":541},[79,14129,14130,14132,14134,14137,14139,14141,14143,14145],{"class":81,"line":562},[79,14131,8594],{"class":228},[79,14133,3283],{"class":448},[79,14135,14136],{"class":89}," \"a = \"",[79,14138,3551],{"class":448},[79,14140,12904],{"class":228},[79,14142,3283],{"class":448},[79,14144,13504],{"class":228},[79,14146,9333],{"class":2313},[79,14148,14149,14151,14153,14156,14158,14160,14162,14164],{"class":81,"line":568},[79,14150,8594],{"class":228},[79,14152,3283],{"class":448},[79,14154,14155],{"class":89}," \"b = \"",[79,14157,3551],{"class":448},[79,14159,12917],{"class":228},[79,14161,3283],{"class":448},[79,14163,13504],{"class":228},[79,14165,9333],{"class":2313},[79,14167,14168],{"class":81,"line":574},[79,14169,542],{"emptyLinePlaceholder":541},[79,14171,14172,14175,14177,14179],{"class":81,"line":579},[79,14173,14174],{"class":228},"    b ",[79,14176,239],{"class":448},[79,14178,1097],{"class":96},[79,14180,3400],{"class":228},[79,14182,14183],{"class":81,"line":585},[79,14184,542],{"emptyLinePlaceholder":541},[79,14186,14187,14189,14191,14193,14195,14197,14199,14201],{"class":81,"line":591},[79,14188,8594],{"class":228},[79,14190,3283],{"class":448},[79,14192,14136],{"class":89},[79,14194,3551],{"class":448},[79,14196,12904],{"class":228},[79,14198,3283],{"class":448},[79,14200,13504],{"class":228},[79,14202,14203],{"class":2313},"\u002F\u002F100\n",[79,14205,14206,14208,14210,14212,14214,14216,14218,14220],{"class":81,"line":596},[79,14207,8594],{"class":228},[79,14209,3283],{"class":448},[79,14211,14155],{"class":89},[79,14213,3551],{"class":448},[79,14215,12917],{"class":228},[79,14217,3283],{"class":448},[79,14219,13504],{"class":228},[79,14221,14203],{"class":2313},[79,14223,14224],{"class":81,"line":602},[79,14225,542],{"emptyLinePlaceholder":541},[79,14227,14228,14230,14232,14234],{"class":81,"line":608},[79,14229,4388],{"class":85},[79,14231,455],{"class":228},[79,14233,4393],{"class":89},[79,14235,4795],{"class":228},[79,14237,14238],{"class":81,"line":614},[79,14239,542],{"emptyLinePlaceholder":541},[79,14241,14242,14244,14246],{"class":81,"line":619},[79,14243,715],{"class":448},[79,14245,1103],{"class":96},[79,14247,3400],{"class":228},[79,14249,14250],{"class":81,"line":625},[79,14251,3671],{"class":228},[14,14253,14255],{"id":14254},"_62引用的注意事项","6.2引用的注意事项",[26,14257,14258],{},[29,14259,14260],{},"引用必须要初始化",[51,14262,14264],{"className":2248,"code":14263,"language":2250,"meta":57,"style":57},"int &b;\u002F\u002F非常错误！\n",[59,14265,14266],{"__ignoreMap":57},[79,14267,14268,14270,14272,14275],{"class":81,"line":82},[79,14269,2262],{"class":448},[79,14271,12619],{"class":448},[79,14273,14274],{"class":228},"b;",[79,14276,14277],{"class":2313},"\u002F\u002F非常错误！\n",[26,14279,14280],{"start":167},[29,14281,14282],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[51,14284,14286],{"className":2248,"code":14285,"language":2250,"meta":57,"style":57},"int main() {\n    int a = 10;\n    int b = 20;\n    \u002F\u002Fint &c; \u002F\u002F错误，引用必须初始化\n    int &c = a; \u002F\u002F一旦初始化后，就不可以更改\n    c = b; \u002F\u002F这是赋值操作，不是更改引用\n    cout \u003C\u003C \"a = \" \u003C\u003C a \u003C\u003C endl;\u002F\u002F20\n    cout \u003C\u003C \"b = \" \u003C\u003C b \u003C\u003C endl;\u002F\u002F20\n    cout \u003C\u003C \"c = \" \u003C\u003C c \u003C\u003C endl;\u002F\u002F20\n    system(\"pause\");\n    return 0;\n}\n",[59,14287,14288,14296,14308,14320,14328,14344,14357,14375,14393,14413,14423,14431],{"__ignoreMap":57},[79,14289,14290,14292,14294],{"class":81,"line":82},[79,14291,2262],{"class":448},[79,14293,826],{"class":85},[79,14295,12888],{"class":228},[79,14297,14298,14300,14302,14304,14306],{"class":81,"line":167},[79,14299,4070],{"class":448},[79,14301,12904],{"class":228},[79,14303,239],{"class":448},[79,14305,4123],{"class":96},[79,14307,3400],{"class":228},[79,14309,14310,14312,14314,14316,14318],{"class":81,"line":178},[79,14311,4070],{"class":448},[79,14313,12917],{"class":228},[79,14315,239],{"class":448},[79,14317,11005],{"class":96},[79,14319,3400],{"class":228},[79,14321,14322,14325],{"class":81,"line":545},[79,14323,14324],{"class":2313},"    \u002F\u002Fint &c;",[79,14326,14327],{"class":2313}," \u002F\u002F错误，引用必须初始化\n",[79,14329,14330,14332,14334,14336,14338,14341],{"class":81,"line":550},[79,14331,4070],{"class":448},[79,14333,12619],{"class":448},[79,14335,5022],{"class":228},[79,14337,239],{"class":448},[79,14339,14340],{"class":228}," a;",[79,14342,14343],{"class":2313}," \u002F\u002F一旦初始化后，就不可以更改\n",[79,14345,14346,14349,14351,14354],{"class":81,"line":562},[79,14347,14348],{"class":228},"    c ",[79,14350,239],{"class":448},[79,14352,14353],{"class":228}," b;",[79,14355,14356],{"class":2313}," \u002F\u002F这是赋值操作，不是更改引用\n",[79,14358,14359,14361,14363,14365,14367,14369,14371,14373],{"class":81,"line":568},[79,14360,8594],{"class":228},[79,14362,3283],{"class":448},[79,14364,14136],{"class":89},[79,14366,3551],{"class":448},[79,14368,12904],{"class":228},[79,14370,3283],{"class":448},[79,14372,13504],{"class":228},[79,14374,9318],{"class":2313},[79,14376,14377,14379,14381,14383,14385,14387,14389,14391],{"class":81,"line":574},[79,14378,8594],{"class":228},[79,14380,3283],{"class":448},[79,14382,14155],{"class":89},[79,14384,3551],{"class":448},[79,14386,12917],{"class":228},[79,14388,3283],{"class":448},[79,14390,13504],{"class":228},[79,14392,9318],{"class":2313},[79,14394,14395,14397,14399,14402,14404,14407,14409,14411],{"class":81,"line":579},[79,14396,8594],{"class":228},[79,14398,3283],{"class":448},[79,14400,14401],{"class":89}," \"c = \"",[79,14403,3551],{"class":448},[79,14405,14406],{"class":228}," c ",[79,14408,3283],{"class":448},[79,14410,13504],{"class":228},[79,14412,9318],{"class":2313},[79,14414,14415,14417,14419,14421],{"class":81,"line":585},[79,14416,4388],{"class":85},[79,14418,455],{"class":228},[79,14420,4393],{"class":89},[79,14422,4795],{"class":228},[79,14424,14425,14427,14429],{"class":81,"line":591},[79,14426,715],{"class":448},[79,14428,1103],{"class":96},[79,14430,3400],{"class":228},[79,14432,14433],{"class":81,"line":596},[79,14434,3671],{"class":228},[14,14436,14438],{"id":14437},"_63引用做函数参数","6.3引用做函数参数",[19,14440,14441],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,14443,14444],{},"优点：可以简化指针修改实参",[51,14446,14448],{"className":2248,"code":14447,"language":2250,"meta":57,"style":57},"\u002F\u002F1. 值传递\nvoid mySwap01(int a, int b) {\n    int temp = a;\n    a = b;\n    b = temp;\n}\n\n\u002F\u002F2. 地址传递\nvoid mySwap02(int* a, int* b) {\n    int temp = *a;\n    *a = *b;\n    *b = temp;\n}\n\n\u002F\u002F3. 引用传递\nvoid mySwap03(int& a, int& b) {\n    int temp = a;\n    a = b;\n    b = temp;\n}\n\nint main() {\n\n    int a = 10;\n    int b = 20;\n\n    mySwap01(a, b);\u002F\u002F值传递，形参不会修饰实参\n    cout \u003C\u003C \"a:\" \u003C\u003C a \u003C\u003C \" b:\" \u003C\u003C b \u003C\u003C endl;\n\n    mySwap02(&a, &b);\u002F\u002F地址传递，形参会修饰实参\n    cout \u003C\u003C \"a:\" \u003C\u003C a \u003C\u003C \" b:\" \u003C\u003C b \u003C\u003C endl;\n\n    mySwap03(a, b);\u002F\u002F引用传递，形参会修饰实参\n    cout \u003C\u003C \"a:\" \u003C\u003C a \u003C\u003C \" b:\" \u003C\u003C b \u003C\u003C endl;\n\n    system(\"pause\");\n\n    return 0;\n}\n\n",[59,14449,14450,14455,14477,14488,14498,14507,14511,14515,14520,14542,14554,14566,14576,14580,14584,14589,14611,14621,14629,14637,14641,14645,14653,14657,14669,14681,14685,14696,14722,14726,14746,14770,14774,14784,14808,14812,14822,14826,14834],{"__ignoreMap":57},[79,14451,14452],{"class":81,"line":82},[79,14453,14454],{"class":2313},"\u002F\u002F1. 值传递\n",[79,14456,14457,14459,14462,14464,14466,14468,14470,14472,14474],{"class":81,"line":167},[79,14458,7432],{"class":448},[79,14460,14461],{"class":85}," mySwap01",[79,14463,455],{"class":228},[79,14465,2262],{"class":448},[79,14467,3505],{"class":7284},[79,14469,1020],{"class":228},[79,14471,2262],{"class":448},[79,14473,4909],{"class":7284},[79,14475,14476],{"class":228},") {\n",[79,14478,14479,14481,14484,14486],{"class":81,"line":178},[79,14480,4070],{"class":448},[79,14482,14483],{"class":228}," temp ",[79,14485,239],{"class":448},[79,14487,3539],{"class":228},[79,14489,14490,14493,14495],{"class":81,"line":545},[79,14491,14492],{"class":228},"    a ",[79,14494,239],{"class":448},[79,14496,14497],{"class":228}," b;\n",[79,14499,14500,14502,14504],{"class":81,"line":550},[79,14501,14174],{"class":228},[79,14503,239],{"class":448},[79,14505,14506],{"class":228}," temp;\n",[79,14508,14509],{"class":81,"line":562},[79,14510,3671],{"class":228},[79,14512,14513],{"class":81,"line":568},[79,14514,542],{"emptyLinePlaceholder":541},[79,14516,14517],{"class":81,"line":574},[79,14518,14519],{"class":2313},"\u002F\u002F2. 地址传递\n",[79,14521,14522,14524,14527,14529,14532,14534,14536,14538,14540],{"class":81,"line":579},[79,14523,7432],{"class":448},[79,14525,14526],{"class":85}," mySwap02",[79,14528,455],{"class":228},[79,14530,14531],{"class":448},"int*",[79,14533,3505],{"class":7284},[79,14535,1020],{"class":228},[79,14537,14531],{"class":448},[79,14539,4909],{"class":7284},[79,14541,14476],{"class":228},[79,14543,14544,14546,14548,14550,14552],{"class":81,"line":585},[79,14545,4070],{"class":448},[79,14547,14483],{"class":228},[79,14549,239],{"class":448},[79,14551,467],{"class":448},[79,14553,8264],{"class":228},[79,14555,14556,14558,14560,14562,14564],{"class":81,"line":591},[79,14557,8470],{"class":448},[79,14559,12954],{"class":228},[79,14561,239],{"class":448},[79,14563,467],{"class":448},[79,14565,8136],{"class":228},[79,14567,14568,14570,14572,14574],{"class":81,"line":596},[79,14569,8470],{"class":448},[79,14571,12980],{"class":228},[79,14573,239],{"class":448},[79,14575,14506],{"class":228},[79,14577,14578],{"class":81,"line":602},[79,14579,3671],{"class":228},[79,14581,14582],{"class":81,"line":608},[79,14583,542],{"emptyLinePlaceholder":541},[79,14585,14586],{"class":81,"line":614},[79,14587,14588],{"class":2313},"\u002F\u002F3. 引用传递\n",[79,14590,14591,14593,14596,14598,14601,14603,14605,14607,14609],{"class":81,"line":619},[79,14592,7432],{"class":448},[79,14594,14595],{"class":85}," mySwap03",[79,14597,455],{"class":228},[79,14599,14600],{"class":448},"int&",[79,14602,3505],{"class":7284},[79,14604,1020],{"class":228},[79,14606,14600],{"class":448},[79,14608,4909],{"class":7284},[79,14610,14476],{"class":228},[79,14612,14613,14615,14617,14619],{"class":81,"line":625},[79,14614,4070],{"class":448},[79,14616,14483],{"class":228},[79,14618,239],{"class":448},[79,14620,3539],{"class":228},[79,14622,14623,14625,14627],{"class":81,"line":631},[79,14624,14492],{"class":228},[79,14626,239],{"class":448},[79,14628,14497],{"class":228},[79,14630,14631,14633,14635],{"class":81,"line":637},[79,14632,14174],{"class":228},[79,14634,239],{"class":448},[79,14636,14506],{"class":228},[79,14638,14639],{"class":81,"line":643},[79,14640,3671],{"class":228},[79,14642,14643],{"class":81,"line":649},[79,14644,542],{"emptyLinePlaceholder":541},[79,14646,14647,14649,14651],{"class":81,"line":655},[79,14648,2262],{"class":448},[79,14650,826],{"class":85},[79,14652,12888],{"class":228},[79,14654,14655],{"class":81,"line":660},[79,14656,542],{"emptyLinePlaceholder":541},[79,14658,14659,14661,14663,14665,14667],{"class":81,"line":666},[79,14660,4070],{"class":448},[79,14662,12904],{"class":228},[79,14664,239],{"class":448},[79,14666,4123],{"class":96},[79,14668,3400],{"class":228},[79,14670,14671,14673,14675,14677,14679],{"class":81,"line":672},[79,14672,4070],{"class":448},[79,14674,12917],{"class":228},[79,14676,239],{"class":448},[79,14678,11005],{"class":96},[79,14680,3400],{"class":228},[79,14682,14683],{"class":81,"line":678},[79,14684,542],{"emptyLinePlaceholder":541},[79,14686,14687,14690,14693],{"class":81,"line":684},[79,14688,14689],{"class":85},"    mySwap01",[79,14691,14692],{"class":228},"(a, b);",[79,14694,14695],{"class":2313},"\u002F\u002F值传递，形参不会修饰实参\n",[79,14697,14698,14700,14702,14705,14707,14709,14711,14714,14716,14718,14720],{"class":81,"line":690},[79,14699,8594],{"class":228},[79,14701,3283],{"class":448},[79,14703,14704],{"class":89}," \"a:\"",[79,14706,3551],{"class":448},[79,14708,12904],{"class":228},[79,14710,3283],{"class":448},[79,14712,14713],{"class":89}," \" b:\"",[79,14715,3551],{"class":448},[79,14717,12917],{"class":228},[79,14719,3283],{"class":448},[79,14721,10895],{"class":228},[79,14723,14724],{"class":81,"line":695},[79,14725,542],{"emptyLinePlaceholder":541},[79,14727,14728,14731,14733,14735,14738,14740,14743],{"class":81,"line":700},[79,14729,14730],{"class":85},"    mySwap02",[79,14732,455],{"class":228},[79,14734,2596],{"class":448},[79,14736,14737],{"class":228},"a, ",[79,14739,2596],{"class":448},[79,14741,14742],{"class":228},"b);",[79,14744,14745],{"class":2313},"\u002F\u002F地址传递，形参会修饰实参\n",[79,14747,14748,14750,14752,14754,14756,14758,14760,14762,14764,14766,14768],{"class":81,"line":712},[79,14749,8594],{"class":228},[79,14751,3283],{"class":448},[79,14753,14704],{"class":89},[79,14755,3551],{"class":448},[79,14757,12904],{"class":228},[79,14759,3283],{"class":448},[79,14761,14713],{"class":89},[79,14763,3551],{"class":448},[79,14765,12917],{"class":228},[79,14767,3283],{"class":448},[79,14769,10895],{"class":228},[79,14771,14772],{"class":81,"line":721},[79,14773,542],{"emptyLinePlaceholder":541},[79,14775,14776,14779,14781],{"class":81,"line":726},[79,14777,14778],{"class":85},"    mySwap03",[79,14780,14692],{"class":228},[79,14782,14783],{"class":2313},"\u002F\u002F引用传递，形参会修饰实参\n",[79,14785,14786,14788,14790,14792,14794,14796,14798,14800,14802,14804,14806],{"class":81,"line":731},[79,14787,8594],{"class":228},[79,14789,3283],{"class":448},[79,14791,14704],{"class":89},[79,14793,3551],{"class":448},[79,14795,12904],{"class":228},[79,14797,3283],{"class":448},[79,14799,14713],{"class":89},[79,14801,3551],{"class":448},[79,14803,12917],{"class":228},[79,14805,3283],{"class":448},[79,14807,10895],{"class":228},[79,14809,14810],{"class":81,"line":748},[79,14811,542],{"emptyLinePlaceholder":541},[79,14813,14814,14816,14818,14820],{"class":81,"line":765},[79,14815,4388],{"class":85},[79,14817,455],{"class":228},[79,14819,4393],{"class":89},[79,14821,4795],{"class":228},[79,14823,14824],{"class":81,"line":780},[79,14825,542],{"emptyLinePlaceholder":541},[79,14827,14828,14830,14832],{"class":81,"line":811},[79,14829,715],{"class":448},[79,14831,1103],{"class":96},[79,14833,3400],{"class":228},[79,14835,14836],{"class":81,"line":816},[79,14837,3671],{"class":228},[14,14839,14841],{"id":14840},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,14843,14844],{},"作用：引用是可以作为函数的返回值存在的",[19,14846,11080,14847],{},[2398,14848,14849],{},"不要返回局部变量引用",[19,14851,14852],{},"用法：函数调用作为左值",[51,14854,14856],{"className":11976,"code":14855,"language":11978,"meta":57,"style":57},"\u002F\u002F返回局部变量引用\nint& test01() {\n    int a = 10; \u002F\u002F局部变量\n    return a;\n}\n\n\u002F\u002F返回静态变量引用\nint& test02() {\n    static int a = 20;\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n    return a;\n}\n\nint main() {\n\n    \u002F\u002F不能返回局部变量的引用\n    int& ref = test01();\n    cout \u003C\u003C \"ref = \" \u003C\u003C ref \u003C\u003C endl;\u002F\u002F10 第一次正确，是因为编译器做了保留\n    cout \u003C\u003C \"ref = \" \u003C\u003C ref \u003C\u003C endl;\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n\n    \u002F\u002F如果函数做左值，那么必须返回引用\n    int& ref2 = test02();\n    cout \u003C\u003C \"ref2 = \" \u003C\u003C ref2 \u003C\u003C endl; \u002F\u002F20\n    cout \u003C\u003C \"ref2 = \" \u003C\u003C ref2 \u003C\u003C endl; \u002F\u002F20\n\n    test02() = 1000;\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n\n    cout \u003C\u003C \"ref2 = \" \u003C\u003C ref2 \u003C\u003C endl; \u002F\u002F1000\n    cout \u003C\u003C \"ref2 = \" \u003C\u003C ref2 \u003C\u003C endl; \u002F\u002F1000\n\n    system(\"pause\");\n\n    return 0;\n}\n",[59,14857,14858,14863,14871,14886,14892,14896,14900,14905,14913,14930,14936,14940,14944,14952,14956,14961,14975,14995,15014,15018,15023,15036,15056,15074,15078,15094,15098,15117,15135,15139,15149,15153,15161],{"__ignoreMap":57},[79,14859,14860],{"class":81,"line":82},[79,14861,14862],{"class":2313},"\u002F\u002F返回局部变量引用\n",[79,14864,14865,14867,14869],{"class":81,"line":167},[79,14866,14600],{"class":448},[79,14868,7656],{"class":85},[79,14870,12888],{"class":228},[79,14872,14873,14875,14877,14879,14881,14883],{"class":81,"line":178},[79,14874,4070],{"class":448},[79,14876,12904],{"class":228},[79,14878,239],{"class":448},[79,14880,4123],{"class":96},[79,14882,2310],{"class":228},[79,14884,14885],{"class":2313}," \u002F\u002F局部变量\n",[79,14887,14888,14890],{"class":81,"line":545},[79,14889,715],{"class":448},[79,14891,3539],{"class":228},[79,14893,14894],{"class":81,"line":550},[79,14895,3671],{"class":228},[79,14897,14898],{"class":81,"line":562},[79,14899,542],{"emptyLinePlaceholder":541},[79,14901,14902],{"class":81,"line":568},[79,14903,14904],{"class":2313},"\u002F\u002F返回静态变量引用\n",[79,14906,14907,14909,14911],{"class":81,"line":574},[79,14908,14600],{"class":448},[79,14910,7725],{"class":85},[79,14912,12888],{"class":228},[79,14914,14915,14917,14919,14921,14923,14925,14927],{"class":81,"line":579},[79,14916,13055],{"class":448},[79,14918,4467],{"class":448},[79,14920,12904],{"class":228},[79,14922,239],{"class":448},[79,14924,11005],{"class":96},[79,14926,2310],{"class":228},[79,14928,14929],{"class":2313},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[79,14931,14932,14934],{"class":81,"line":585},[79,14933,715],{"class":448},[79,14935,3539],{"class":228},[79,14937,14938],{"class":81,"line":591},[79,14939,3671],{"class":228},[79,14941,14942],{"class":81,"line":596},[79,14943,542],{"emptyLinePlaceholder":541},[79,14945,14946,14948,14950],{"class":81,"line":602},[79,14947,2262],{"class":448},[79,14949,826],{"class":85},[79,14951,12888],{"class":228},[79,14953,14954],{"class":81,"line":608},[79,14955,542],{"emptyLinePlaceholder":541},[79,14957,14958],{"class":81,"line":614},[79,14959,14960],{"class":2313},"    \u002F\u002F不能返回局部变量的引用\n",[79,14962,14963,14966,14969,14971,14973],{"class":81,"line":619},[79,14964,14965],{"class":448},"    int&",[79,14967,14968],{"class":228}," ref ",[79,14970,239],{"class":448},[79,14972,7656],{"class":85},[79,14974,7704],{"class":228},[79,14976,14977,14979,14981,14984,14986,14988,14990,14992],{"class":81,"line":625},[79,14978,8594],{"class":228},[79,14980,3283],{"class":448},[79,14982,14983],{"class":89}," \"ref = \"",[79,14985,3551],{"class":448},[79,14987,14968],{"class":228},[79,14989,3283],{"class":448},[79,14991,13504],{"class":228},[79,14993,14994],{"class":2313},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[79,14996,14997,14999,15001,15003,15005,15007,15009,15011],{"class":81,"line":631},[79,14998,8594],{"class":228},[79,15000,3283],{"class":448},[79,15002,14983],{"class":89},[79,15004,3551],{"class":448},[79,15006,14968],{"class":228},[79,15008,3283],{"class":448},[79,15010,13504],{"class":228},[79,15012,15013],{"class":2313},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[79,15015,15016],{"class":81,"line":637},[79,15017,542],{"emptyLinePlaceholder":541},[79,15019,15020],{"class":81,"line":643},[79,15021,15022],{"class":2313},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[79,15024,15025,15027,15030,15032,15034],{"class":81,"line":649},[79,15026,14965],{"class":448},[79,15028,15029],{"class":228}," ref2 ",[79,15031,239],{"class":448},[79,15033,7725],{"class":85},[79,15035,7704],{"class":228},[79,15037,15038,15040,15042,15045,15047,15049,15051,15053],{"class":81,"line":655},[79,15039,8594],{"class":228},[79,15041,3283],{"class":448},[79,15043,15044],{"class":89}," \"ref2 = \"",[79,15046,3551],{"class":448},[79,15048,15029],{"class":228},[79,15050,3283],{"class":448},[79,15052,13504],{"class":228},[79,15054,15055],{"class":2313}," \u002F\u002F20\n",[79,15057,15058,15060,15062,15064,15066,15068,15070,15072],{"class":81,"line":660},[79,15059,8594],{"class":228},[79,15061,3283],{"class":448},[79,15063,15044],{"class":89},[79,15065,3551],{"class":448},[79,15067,15029],{"class":228},[79,15069,3283],{"class":448},[79,15071,13504],{"class":228},[79,15073,15055],{"class":2313},[79,15075,15076],{"class":81,"line":666},[79,15077,542],{"emptyLinePlaceholder":541},[79,15079,15080,15082,15085,15087,15089,15091],{"class":81,"line":672},[79,15081,7770],{"class":85},[79,15083,15084],{"class":228},"() ",[79,15086,239],{"class":448},[79,15088,5075],{"class":96},[79,15090,2310],{"class":228},[79,15092,15093],{"class":2313},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[79,15095,15096],{"class":81,"line":678},[79,15097,542],{"emptyLinePlaceholder":541},[79,15099,15100,15102,15104,15106,15108,15110,15112,15114],{"class":81,"line":684},[79,15101,8594],{"class":228},[79,15103,3283],{"class":448},[79,15105,15044],{"class":89},[79,15107,3551],{"class":448},[79,15109,15029],{"class":228},[79,15111,3283],{"class":448},[79,15113,13504],{"class":228},[79,15115,15116],{"class":2313}," \u002F\u002F1000\n",[79,15118,15119,15121,15123,15125,15127,15129,15131,15133],{"class":81,"line":690},[79,15120,8594],{"class":228},[79,15122,3283],{"class":448},[79,15124,15044],{"class":89},[79,15126,3551],{"class":448},[79,15128,15029],{"class":228},[79,15130,3283],{"class":448},[79,15132,13504],{"class":228},[79,15134,15116],{"class":2313},[79,15136,15137],{"class":81,"line":695},[79,15138,542],{"emptyLinePlaceholder":541},[79,15140,15141,15143,15145,15147],{"class":81,"line":700},[79,15142,4388],{"class":85},[79,15144,455],{"class":228},[79,15146,4393],{"class":89},[79,15148,4795],{"class":228},[79,15150,15151],{"class":81,"line":712},[79,15152,542],{"emptyLinePlaceholder":541},[79,15154,15155,15157,15159],{"class":81,"line":721},[79,15156,715],{"class":448},[79,15158,1103],{"class":96},[79,15160,3400],{"class":228},[79,15162,15163],{"class":81,"line":726},[79,15164,3671],{"class":228},[14,15166,15168],{"id":15167},"_65引用的本质","6.5引用的本质",[19,15170,15171,15172],{},"本质：",[2398,15173,15174],{},"引用的本质在c++内部实现是一个指针常量.",[51,15176,15178],{"className":2248,"code":15177,"language":2250,"meta":57,"style":57},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\nvoid func(int& ref){\n    ref = 100; \u002F\u002F ref是引用，转换为*ref = 100\n}\nint main(){\n    int a = 10;\n    \n    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n    int& ref = a; \n    ref = 20; \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n    \n    cout \u003C\u003C \"a:\" \u003C\u003C a \u003C\u003C endl;\n    cout \u003C\u003C \"ref:\" \u003C\u003C ref \u003C\u003C endl;\n    \n    func(a);\n    return 0;\n}\n",[59,15179,15180,15185,15201,15215,15219,15228,15240,15245,15250,15261,15274,15278,15294,15311,15315,15323,15331],{"__ignoreMap":57},[79,15181,15182],{"class":81,"line":82},[79,15183,15184],{"class":2313},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[79,15186,15187,15189,15191,15193,15195,15198],{"class":81,"line":167},[79,15188,7432],{"class":448},[79,15190,13420],{"class":85},[79,15192,455],{"class":228},[79,15194,14600],{"class":448},[79,15196,15197],{"class":7284}," ref",[79,15199,15200],{"class":228},"){\n",[79,15202,15203,15206,15208,15210,15212],{"class":81,"line":178},[79,15204,15205],{"class":228},"    ref ",[79,15207,239],{"class":448},[79,15209,1097],{"class":96},[79,15211,2310],{"class":228},[79,15213,15214],{"class":2313}," \u002F\u002F ref是引用，转换为*ref = 100\n",[79,15216,15217],{"class":81,"line":545},[79,15218,3671],{"class":228},[79,15220,15221,15223,15225],{"class":81,"line":550},[79,15222,2262],{"class":448},[79,15224,826],{"class":85},[79,15226,15227],{"class":228},"(){\n",[79,15229,15230,15232,15234,15236,15238],{"class":81,"line":562},[79,15231,4070],{"class":448},[79,15233,12904],{"class":228},[79,15235,239],{"class":448},[79,15237,4123],{"class":96},[79,15239,3400],{"class":228},[79,15241,15242],{"class":81,"line":568},[79,15243,15244],{"class":228},"    \n",[79,15246,15247],{"class":81,"line":574},[79,15248,15249],{"class":2313},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[79,15251,15252,15254,15256,15258],{"class":81,"line":579},[79,15253,14965],{"class":448},[79,15255,14968],{"class":228},[79,15257,239],{"class":448},[79,15259,15260],{"class":228}," a; \n",[79,15262,15263,15265,15267,15269,15271],{"class":81,"line":585},[79,15264,15205],{"class":228},[79,15266,239],{"class":448},[79,15268,11005],{"class":96},[79,15270,2310],{"class":228},[79,15272,15273],{"class":2313}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[79,15275,15276],{"class":81,"line":591},[79,15277,15244],{"class":228},[79,15279,15280,15282,15284,15286,15288,15290,15292],{"class":81,"line":596},[79,15281,8594],{"class":228},[79,15283,3283],{"class":448},[79,15285,14704],{"class":89},[79,15287,3551],{"class":448},[79,15289,12904],{"class":228},[79,15291,3283],{"class":448},[79,15293,10895],{"class":228},[79,15295,15296,15298,15300,15303,15305,15307,15309],{"class":81,"line":602},[79,15297,8594],{"class":228},[79,15299,3283],{"class":448},[79,15301,15302],{"class":89}," \"ref:\"",[79,15304,3551],{"class":448},[79,15306,14968],{"class":228},[79,15308,3283],{"class":448},[79,15310,10895],{"class":228},[79,15312,15313],{"class":81,"line":608},[79,15314,15244],{"class":228},[79,15316,15317,15320],{"class":81,"line":614},[79,15318,15319],{"class":85},"    func",[79,15321,15322],{"class":228},"(a);\n",[79,15324,15325,15327,15329],{"class":81,"line":619},[79,15326,715],{"class":448},[79,15328,1103],{"class":96},[79,15330,3400],{"class":228},[79,15332,15333],{"class":81,"line":625},[79,15334,3671],{"class":228},[19,15336,13367],{},[26,15338,15339,15342],{},[29,15340,15341],{},"引用的本质，就是一个指针常量",[29,15343,15344],{},"引用一旦初始化，就不可以发生改变",[14,15346,15348],{"id":15347},"_66常量引用","6.6常量引用",[19,15350,15351],{},"作用：常量引用主要用来修饰形参",[19,15353,15354,15355,15358],{},"在函数形参列表中，可以加",[2398,15356,15357],{},"const修饰形参","，防止形参改变实参",[51,15360,15362],{"className":2248,"code":15361,"language":2250,"meta":57,"style":57},"\u002F\u002F引用使用的场景，通常用来修饰形参\n\u002F\u002F加上const就不能修改实参的\nvoid showValue(const int& v) {\n    \u002F\u002Fv += 100;\n    cout \u003C\u003C v \u003C\u003C endl;\n}\n\nint main() {\n\n    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n    const int& ref = 10;\n\n    \u002F\u002Fref = 100;  \u002F\u002F加入const后不可以修改变量\n    cout \u003C\u003C ref \u003C\u003C endl;\n\n    \u002F\u002F函数中利用常量引用防止误操作修改实参\n    int a = 10;\n    showValue(a);\n\n    system(\"pause\");\n\n    return 0;\n}\n",[59,15363,15364,15369,15374,15393,15398,15411,15415,15419,15427,15431,15436,15441,15455,15459,15467,15479,15483,15488,15500,15507,15511,15521,15525,15533],{"__ignoreMap":57},[79,15365,15366],{"class":81,"line":82},[79,15367,15368],{"class":2313},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[79,15370,15371],{"class":81,"line":167},[79,15372,15373],{"class":2313},"\u002F\u002F加上const就不能修改实参的\n",[79,15375,15376,15378,15381,15383,15385,15388,15391],{"class":81,"line":178},[79,15377,7432],{"class":448},[79,15379,15380],{"class":85}," showValue",[79,15382,455],{"class":228},[79,15384,8857],{"class":448},[79,15386,15387],{"class":448}," int&",[79,15389,15390],{"class":7284}," v",[79,15392,14476],{"class":228},[79,15394,15395],{"class":81,"line":545},[79,15396,15397],{"class":2313},"    \u002F\u002Fv += 100;\n",[79,15399,15400,15402,15404,15407,15409],{"class":81,"line":550},[79,15401,8594],{"class":228},[79,15403,3283],{"class":448},[79,15405,15406],{"class":228}," v ",[79,15408,3283],{"class":448},[79,15410,10895],{"class":228},[79,15412,15413],{"class":81,"line":562},[79,15414,3671],{"class":228},[79,15416,15417],{"class":81,"line":568},[79,15418,542],{"emptyLinePlaceholder":541},[79,15420,15421,15423,15425],{"class":81,"line":574},[79,15422,2262],{"class":448},[79,15424,826],{"class":85},[79,15426,12888],{"class":228},[79,15428,15429],{"class":81,"line":579},[79,15430,542],{"emptyLinePlaceholder":541},[79,15432,15433],{"class":81,"line":585},[79,15434,15435],{"class":2313},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[79,15437,15438],{"class":81,"line":591},[79,15439,15440],{"class":2313},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[79,15442,15443,15445,15447,15449,15451,15453],{"class":81,"line":596},[79,15444,13256],{"class":448},[79,15446,15387],{"class":448},[79,15448,14968],{"class":228},[79,15450,239],{"class":448},[79,15452,4123],{"class":96},[79,15454,3400],{"class":228},[79,15456,15457],{"class":81,"line":602},[79,15458,542],{"emptyLinePlaceholder":541},[79,15460,15461,15464],{"class":81,"line":608},[79,15462,15463],{"class":2313},"    \u002F\u002Fref = 100;",[79,15465,15466],{"class":2313},"  \u002F\u002F加入const后不可以修改变量\n",[79,15468,15469,15471,15473,15475,15477],{"class":81,"line":614},[79,15470,8594],{"class":228},[79,15472,3283],{"class":448},[79,15474,14968],{"class":228},[79,15476,3283],{"class":448},[79,15478,10895],{"class":228},[79,15480,15481],{"class":81,"line":619},[79,15482,542],{"emptyLinePlaceholder":541},[79,15484,15485],{"class":81,"line":625},[79,15486,15487],{"class":2313},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[79,15489,15490,15492,15494,15496,15498],{"class":81,"line":631},[79,15491,4070],{"class":448},[79,15493,12904],{"class":228},[79,15495,239],{"class":448},[79,15497,4123],{"class":96},[79,15499,3400],{"class":228},[79,15501,15502,15505],{"class":81,"line":637},[79,15503,15504],{"class":85},"    showValue",[79,15506,15322],{"class":228},[79,15508,15509],{"class":81,"line":643},[79,15510,542],{"emptyLinePlaceholder":541},[79,15512,15513,15515,15517,15519],{"class":81,"line":649},[79,15514,4388],{"class":85},[79,15516,455],{"class":228},[79,15518,4393],{"class":89},[79,15520,4795],{"class":228},[79,15522,15523],{"class":81,"line":655},[79,15524,542],{"emptyLinePlaceholder":541},[79,15526,15527,15529,15531],{"class":81,"line":660},[79,15528,715],{"class":448},[79,15530,1103],{"class":96},[79,15532,3400],{"class":228},[79,15534,15535],{"class":81,"line":666},[79,15536,3671],{"class":228},[2159,15538,15539],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":57,"searchDepth":167,"depth":167,"links":15541},[15542,15543,15544,15545,15546,15547],{"id":14075,"depth":167,"text":14076},{"id":14254,"depth":167,"text":14255},{"id":14437,"depth":167,"text":14438},{"id":14840,"depth":167,"text":14841},{"id":15167,"depth":167,"text":15168},{"id":15347,"depth":167,"text":15348},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":14067,"description":57},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":15554,"title":15555,"body":15556,"description":57,"extension":2186,"meta":16636,"navigation":541,"path":16637,"seo":16638,"stem":16639,"__hash__":16640},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":15557,"toc":16628},[15558,15561,15565,15568,15573,15804,15806,15817,15821,15824,15832,15936,15939,15943,15946,15950,15953,15958,15980,15986,16313,16316,16320,16328,16625],[10,15559,15555],{"id":15560},"_7函数高级部分",[14,15562,15564],{"id":15563},"_71函数默认参数","7.1函数默认参数",[19,15566,15567],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,15569,7251,15570],{},[59,15571,15572],{}," 返回值类型  函数名 （参数= 默认值）{}",[51,15574,15576],{"className":2248,"code":15575,"language":2250,"meta":57,"style":57},"int func(int a, int b = 10, int c = 10) {\n    return a + b + c;\n}\n\n\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\nint func2(int a = 10, int b = 10);\nint func2(int a, int b) {\n    return a + b;\n}\n\nint main() {\n\n    cout \u003C\u003C \"ret = \" \u003C\u003C func(20, 20) \u003C\u003C endl;\n    cout \u003C\u003C \"ret = \" \u003C\u003C func(100) \u003C\u003C endl;\n\n    system(\"pause\");\n\n    return 0;\n}\n",[59,15577,15578,15612,15627,15631,15635,15640,15645,15674,15694,15704,15708,15712,15720,15724,15752,15774,15778,15788,15792,15800],{"__ignoreMap":57},[79,15579,15580,15582,15584,15586,15588,15590,15592,15594,15596,15598,15600,15602,15604,15606,15608,15610],{"class":81,"line":82},[79,15581,2262],{"class":448},[79,15583,13420],{"class":85},[79,15585,455],{"class":228},[79,15587,2262],{"class":448},[79,15589,3505],{"class":7284},[79,15591,1020],{"class":228},[79,15593,2262],{"class":448},[79,15595,4909],{"class":7284},[79,15597,556],{"class":448},[79,15599,4123],{"class":96},[79,15601,1020],{"class":228},[79,15603,2262],{"class":448},[79,15605,4925],{"class":7284},[79,15607,556],{"class":448},[79,15609,4123],{"class":96},[79,15611,14476],{"class":228},[79,15613,15614,15616,15618,15620,15622,15624],{"class":81,"line":167},[79,15615,715],{"class":448},[79,15617,12904],{"class":228},[79,15619,995],{"class":448},[79,15621,12917],{"class":228},[79,15623,995],{"class":448},[79,15625,15626],{"class":228}," c;\n",[79,15628,15629],{"class":81,"line":178},[79,15630,3671],{"class":228},[79,15632,15633],{"class":81,"line":545},[79,15634,542],{"emptyLinePlaceholder":541},[79,15636,15637],{"class":81,"line":550},[79,15638,15639],{"class":2313},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[79,15641,15642],{"class":81,"line":562},[79,15643,15644],{"class":2313},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[79,15646,15647,15649,15652,15654,15656,15658,15660,15662,15664,15666,15668,15670,15672],{"class":81,"line":568},[79,15648,2262],{"class":448},[79,15650,15651],{"class":85}," func2",[79,15653,455],{"class":228},[79,15655,2262],{"class":448},[79,15657,3505],{"class":7284},[79,15659,556],{"class":448},[79,15661,4123],{"class":96},[79,15663,1020],{"class":228},[79,15665,2262],{"class":448},[79,15667,4909],{"class":7284},[79,15669,556],{"class":448},[79,15671,4123],{"class":96},[79,15673,4795],{"class":228},[79,15675,15676,15678,15680,15682,15684,15686,15688,15690,15692],{"class":81,"line":574},[79,15677,2262],{"class":448},[79,15679,15651],{"class":85},[79,15681,455],{"class":228},[79,15683,2262],{"class":448},[79,15685,3505],{"class":7284},[79,15687,1020],{"class":228},[79,15689,2262],{"class":448},[79,15691,4909],{"class":7284},[79,15693,14476],{"class":228},[79,15695,15696,15698,15700,15702],{"class":81,"line":579},[79,15697,715],{"class":448},[79,15699,12904],{"class":228},[79,15701,995],{"class":448},[79,15703,14497],{"class":228},[79,15705,15706],{"class":81,"line":585},[79,15707,3671],{"class":228},[79,15709,15710],{"class":81,"line":591},[79,15711,542],{"emptyLinePlaceholder":541},[79,15713,15714,15716,15718],{"class":81,"line":596},[79,15715,2262],{"class":448},[79,15717,826],{"class":85},[79,15719,12888],{"class":228},[79,15721,15722],{"class":81,"line":602},[79,15723,542],{"emptyLinePlaceholder":541},[79,15725,15726,15728,15730,15733,15735,15737,15739,15741,15743,15745,15748,15750],{"class":81,"line":608},[79,15727,8594],{"class":228},[79,15729,3283],{"class":448},[79,15731,15732],{"class":89}," \"ret = \"",[79,15734,3551],{"class":448},[79,15736,13420],{"class":85},[79,15738,455],{"class":228},[79,15740,2940],{"class":96},[79,15742,1020],{"class":228},[79,15744,2940],{"class":96},[79,15746,15747],{"class":228},") ",[79,15749,3283],{"class":448},[79,15751,10895],{"class":228},[79,15753,15754,15756,15758,15760,15762,15764,15766,15768,15770,15772],{"class":81,"line":614},[79,15755,8594],{"class":228},[79,15757,3283],{"class":448},[79,15759,15732],{"class":89},[79,15761,3551],{"class":448},[79,15763,13420],{"class":85},[79,15765,455],{"class":228},[79,15767,2555],{"class":96},[79,15769,15747],{"class":228},[79,15771,3283],{"class":448},[79,15773,10895],{"class":228},[79,15775,15776],{"class":81,"line":619},[79,15777,542],{"emptyLinePlaceholder":541},[79,15779,15780,15782,15784,15786],{"class":81,"line":625},[79,15781,4388],{"class":85},[79,15783,455],{"class":228},[79,15785,4393],{"class":89},[79,15787,4795],{"class":228},[79,15789,15790],{"class":81,"line":631},[79,15791,542],{"emptyLinePlaceholder":541},[79,15793,15794,15796,15798],{"class":81,"line":637},[79,15795,715],{"class":448},[79,15797,1103],{"class":96},[79,15799,3400],{"class":228},[79,15801,15802],{"class":81,"line":643},[79,15803,3671],{"class":228},[19,15805,13367],{},[26,15807,15808,15811,15814],{},[29,15809,15810],{},"我传就用我；没传就用你",[29,15812,15813],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[29,15815,15816],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,15818,15820],{"id":15819},"_72函数的占位参数","7.2函数的占位参数",[19,15822,15823],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,15825,15826,15828,15829],{},[2398,15827,7251],{}," ",[59,15830,15831],{},"返回值类型 函数名 (数据类型){}",[51,15833,15835],{"className":2248,"code":15834,"language":2250,"meta":57,"style":57},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\nvoid func(int a, int) {\n    cout \u003C\u003C \"this is func\" \u003C\u003C endl;\n}\nint main() {\n\n    func(10,10); \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n\n    system(\"pause\");\n\n    return 0;\n}\n",[59,15836,15837,15842,15860,15873,15877,15885,15889,15906,15910,15920,15924,15932],{"__ignoreMap":57},[79,15838,15839],{"class":81,"line":82},[79,15840,15841],{"class":2313},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[79,15843,15844,15846,15848,15850,15852,15854,15856,15858],{"class":81,"line":167},[79,15845,7432],{"class":448},[79,15847,13420],{"class":85},[79,15849,455],{"class":228},[79,15851,2262],{"class":448},[79,15853,3505],{"class":7284},[79,15855,1020],{"class":228},[79,15857,2262],{"class":448},[79,15859,14476],{"class":228},[79,15861,15862,15864,15866,15869,15871],{"class":81,"line":178},[79,15863,8594],{"class":228},[79,15865,3283],{"class":448},[79,15867,15868],{"class":89}," \"this is func\"",[79,15870,3551],{"class":448},[79,15872,10895],{"class":228},[79,15874,15875],{"class":81,"line":545},[79,15876,3671],{"class":228},[79,15878,15879,15881,15883],{"class":81,"line":550},[79,15880,2262],{"class":448},[79,15882,826],{"class":85},[79,15884,12888],{"class":228},[79,15886,15887],{"class":81,"line":562},[79,15888,542],{"emptyLinePlaceholder":541},[79,15890,15891,15893,15895,15897,15899,15901,15903],{"class":81,"line":568},[79,15892,15319],{"class":85},[79,15894,455],{"class":228},[79,15896,2689],{"class":96},[79,15898,2621],{"class":228},[79,15900,2689],{"class":96},[79,15902,8033],{"class":228},[79,15904,15905],{"class":2313}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[79,15907,15908],{"class":81,"line":574},[79,15909,542],{"emptyLinePlaceholder":541},[79,15911,15912,15914,15916,15918],{"class":81,"line":579},[79,15913,4388],{"class":85},[79,15915,455],{"class":228},[79,15917,4393],{"class":89},[79,15919,4795],{"class":228},[79,15921,15922],{"class":81,"line":585},[79,15923,542],{"emptyLinePlaceholder":541},[79,15925,15926,15928,15930],{"class":81,"line":591},[79,15927,715],{"class":448},[79,15929,1103],{"class":96},[79,15931,3400],{"class":228},[79,15933,15934],{"class":81,"line":596},[79,15935,3671],{"class":228},[19,15937,15938],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,15940,15942],{"id":15941},"_73函数重载","7.3函数重载",[19,15944,15945],{},"意思是函数名是可以相同的",[339,15947,15949],{"id":15948},"_731基本语法","7.3.1基本语法",[19,15951,15952],{},"作用：函数名可以相同，提高复用性",[19,15954,15955],{},[2398,15956,15957],{},"函数重载满足条件：",[3246,15959,15960,15963,15966],{},[29,15961,15962],{},"同一个作用域下",[29,15964,15965],{},"函数名称相同",[29,15967,15968,15969,15972,15973,15976,15977],{},"函数参数",[2398,15970,15971],{},"类型不同","  或者 ",[2398,15974,15975],{},"个数不同"," 或者 ",[2398,15978,15979],{},"顺序不同",[19,15981,15982,15985],{},[2398,15983,15984],{},"注意:","  函数的返回值不可以作为函数重载的条件",[51,15987,15989],{"className":11976,"code":15988,"language":11978,"meta":57,"style":57},"\u002F\u002F函数重载需要函数都在同一个作用域下\nvoid func()\n{\n    cout \u003C\u003C \"func 的调用！\" \u003C\u003C endl;\n}\nvoid func(int a)\n{\n    cout \u003C\u003C \"func (int a) 的调用！\" \u003C\u003C endl;\n}\nvoid func(double a)\n{\n    cout \u003C\u003C \"func (double a)的调用！\" \u003C\u003C endl;\n}\nvoid func(int a ,double b)\n{\n    cout \u003C\u003C \"func (int a ,double b) 的调用！\" \u003C\u003C endl;\n}\nvoid func(double a ,int b)\n{\n    cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n}\n\n\u002F\u002F函数返回值不可以作为函数重载条件\n\u002F\u002Fint func(double a, int b)\n\u002F\u002F{\n\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n\u002F\u002F}\n\n\nint main() {\n\n    func();\n    func(10);\n    func(3.14);\n    func(10,3.14);\n    func(3.14 , 10);\n    \n    system(\"pause\");\n\n    return 0;\n}\n",[59,15990,15991,15996,16004,16008,16021,16025,16039,16043,16056,16060,16075,16079,16092,16096,16117,16121,16134,16138,16158,16162,16175,16179,16183,16188,16193,16198,16203,16208,16212,16216,16224,16228,16234,16244,16254,16268,16283,16287,16297,16301,16309],{"__ignoreMap":57},[79,15992,15993],{"class":81,"line":82},[79,15994,15995],{"class":2313},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[79,15997,15998,16000,16002],{"class":81,"line":167},[79,15999,7432],{"class":448},[79,16001,13420],{"class":85},[79,16003,4061],{"class":228},[79,16005,16006],{"class":81,"line":178},[79,16007,3652],{"class":228},[79,16009,16010,16012,16014,16017,16019],{"class":81,"line":545},[79,16011,8594],{"class":228},[79,16013,3283],{"class":448},[79,16015,16016],{"class":89}," \"func 的调用！\"",[79,16018,3551],{"class":448},[79,16020,10895],{"class":228},[79,16022,16023],{"class":81,"line":550},[79,16024,3671],{"class":228},[79,16026,16027,16029,16031,16033,16035,16037],{"class":81,"line":562},[79,16028,7432],{"class":448},[79,16030,13420],{"class":85},[79,16032,455],{"class":228},[79,16034,2262],{"class":448},[79,16036,3505],{"class":7284},[79,16038,850],{"class":228},[79,16040,16041],{"class":81,"line":568},[79,16042,3652],{"class":228},[79,16044,16045,16047,16049,16052,16054],{"class":81,"line":574},[79,16046,8594],{"class":228},[79,16048,3283],{"class":448},[79,16050,16051],{"class":89}," \"func (int a) 的调用！\"",[79,16053,3551],{"class":448},[79,16055,10895],{"class":228},[79,16057,16058],{"class":81,"line":579},[79,16059,3671],{"class":228},[79,16061,16062,16064,16066,16068,16071,16073],{"class":81,"line":585},[79,16063,7432],{"class":448},[79,16065,13420],{"class":85},[79,16067,455],{"class":228},[79,16069,16070],{"class":448},"double",[79,16072,3505],{"class":7284},[79,16074,850],{"class":228},[79,16076,16077],{"class":81,"line":591},[79,16078,3652],{"class":228},[79,16080,16081,16083,16085,16088,16090],{"class":81,"line":596},[79,16082,8594],{"class":228},[79,16084,3283],{"class":448},[79,16086,16087],{"class":89}," \"func (double a)的调用！\"",[79,16089,3551],{"class":448},[79,16091,10895],{"class":228},[79,16093,16094],{"class":81,"line":602},[79,16095,3671],{"class":228},[79,16097,16098,16100,16102,16104,16106,16108,16111,16113,16115],{"class":81,"line":608},[79,16099,7432],{"class":448},[79,16101,13420],{"class":85},[79,16103,455],{"class":228},[79,16105,2262],{"class":448},[79,16107,3505],{"class":7284},[79,16109,16110],{"class":228}," ,",[79,16112,16070],{"class":448},[79,16114,4909],{"class":7284},[79,16116,850],{"class":228},[79,16118,16119],{"class":81,"line":614},[79,16120,3652],{"class":228},[79,16122,16123,16125,16127,16130,16132],{"class":81,"line":619},[79,16124,8594],{"class":228},[79,16126,3283],{"class":448},[79,16128,16129],{"class":89}," \"func (int a ,double b) 的调用！\"",[79,16131,3551],{"class":448},[79,16133,10895],{"class":228},[79,16135,16136],{"class":81,"line":625},[79,16137,3671],{"class":228},[79,16139,16140,16142,16144,16146,16148,16150,16152,16154,16156],{"class":81,"line":631},[79,16141,7432],{"class":448},[79,16143,13420],{"class":85},[79,16145,455],{"class":228},[79,16147,16070],{"class":448},[79,16149,3505],{"class":7284},[79,16151,16110],{"class":228},[79,16153,2262],{"class":448},[79,16155,4909],{"class":7284},[79,16157,850],{"class":228},[79,16159,16160],{"class":81,"line":637},[79,16161,3652],{"class":228},[79,16163,16164,16166,16168,16171,16173],{"class":81,"line":643},[79,16165,8594],{"class":228},[79,16167,3283],{"class":448},[79,16169,16170],{"class":89}," \"func (double a ,int b)的调用！\"",[79,16172,3551],{"class":448},[79,16174,10895],{"class":228},[79,16176,16177],{"class":81,"line":649},[79,16178,3671],{"class":228},[79,16180,16181],{"class":81,"line":655},[79,16182,542],{"emptyLinePlaceholder":541},[79,16184,16185],{"class":81,"line":660},[79,16186,16187],{"class":2313},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[79,16189,16190],{"class":81,"line":666},[79,16191,16192],{"class":2313},"\u002F\u002Fint func(double a, int b)\n",[79,16194,16195],{"class":81,"line":672},[79,16196,16197],{"class":2313},"\u002F\u002F{\n",[79,16199,16200],{"class":81,"line":678},[79,16201,16202],{"class":2313},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[79,16204,16205],{"class":81,"line":684},[79,16206,16207],{"class":2313},"\u002F\u002F}\n",[79,16209,16210],{"class":81,"line":690},[79,16211,542],{"emptyLinePlaceholder":541},[79,16213,16214],{"class":81,"line":695},[79,16215,542],{"emptyLinePlaceholder":541},[79,16217,16218,16220,16222],{"class":81,"line":700},[79,16219,2262],{"class":448},[79,16221,826],{"class":85},[79,16223,12888],{"class":228},[79,16225,16226],{"class":81,"line":712},[79,16227,542],{"emptyLinePlaceholder":541},[79,16229,16230,16232],{"class":81,"line":721},[79,16231,15319],{"class":85},[79,16233,7704],{"class":228},[79,16235,16236,16238,16240,16242],{"class":81,"line":726},[79,16237,15319],{"class":85},[79,16239,455],{"class":228},[79,16241,2689],{"class":96},[79,16243,4795],{"class":228},[79,16245,16246,16248,16250,16252],{"class":81,"line":731},[79,16247,15319],{"class":85},[79,16249,455],{"class":228},[79,16251,2304],{"class":96},[79,16253,4795],{"class":228},[79,16255,16256,16258,16260,16262,16264,16266],{"class":81,"line":748},[79,16257,15319],{"class":85},[79,16259,455],{"class":228},[79,16261,2689],{"class":96},[79,16263,2621],{"class":228},[79,16265,2304],{"class":96},[79,16267,4795],{"class":228},[79,16269,16270,16272,16274,16276,16279,16281],{"class":81,"line":765},[79,16271,15319],{"class":85},[79,16273,455],{"class":228},[79,16275,2304],{"class":96},[79,16277,16278],{"class":228}," , ",[79,16280,2689],{"class":96},[79,16282,4795],{"class":228},[79,16284,16285],{"class":81,"line":780},[79,16286,15244],{"class":228},[79,16288,16289,16291,16293,16295],{"class":81,"line":811},[79,16290,4388],{"class":85},[79,16292,455],{"class":228},[79,16294,4393],{"class":89},[79,16296,4795],{"class":228},[79,16298,16299],{"class":81,"line":816},[79,16300,542],{"emptyLinePlaceholder":541},[79,16302,16303,16305,16307],{"class":81,"line":821},[79,16304,715],{"class":448},[79,16306,1103],{"class":96},[79,16308,3400],{"class":228},[79,16310,16311],{"class":81,"line":837},[79,16312,3671],{"class":228},[19,16314,16315],{},"重点：函数返回值不可以作为函数重载条件！",[339,16317,16319],{"id":16318},"_732注意事项","7.3.2注意事项",[3246,16321,16322,16325],{},[29,16323,16324],{},"引用作为重载条件!!!",[29,16326,16327],{},"函数重载碰到函数默认参数",[51,16329,16331],{"className":2248,"code":16330,"language":2250,"meta":57,"style":57},"\u002F\u002F函数重载注意事项\n\u002F\u002F1、引用作为重载条件\n\nvoid func(int &a)\n{\n    cout \u003C\u003C \"func (int &a) 调用 \" \u003C\u003C endl;\n}\n\nvoid func(const int &a)\n{\n    cout \u003C\u003C \"func (const int &a) 调用 \" \u003C\u003C endl;\n}\n\n\n\u002F\u002F2、函数重载碰到函数默认参数\n\nvoid func2(int a, int b = 10)\n{\n    cout \u003C\u003C \"func2(int a, int b = 10) 调用\" \u003C\u003C endl;\n}\n\nvoid func2(int a)\n{\n    cout \u003C\u003C \"func2(int a) 调用\" \u003C\u003C endl;\n}\n\nint main() {\n    \n    int a = 10;\n    func(a); \u002F\u002F调用无const   因为a本身是个变量，可读可写\n    func(10);\u002F\u002F调用有const   10是个常量\n\n\n    \u002F\u002Ffunc2(10); \u002F\u002F碰到默认参数产生歧义，需要避免\n\n    system(\"pause\");\n\n    return 0;\n}\n",[59,16332,16333,16338,16343,16347,16363,16367,16380,16384,16388,16406,16410,16423,16427,16431,16435,16440,16444,16468,16472,16485,16489,16493,16507,16511,16524,16528,16532,16540,16544,16556,16566,16579,16583,16587,16595,16599,16609,16613,16621],{"__ignoreMap":57},[79,16334,16335],{"class":81,"line":82},[79,16336,16337],{"class":2313},"\u002F\u002F函数重载注意事项\n",[79,16339,16340],{"class":81,"line":167},[79,16341,16342],{"class":2313},"\u002F\u002F1、引用作为重载条件\n",[79,16344,16345],{"class":81,"line":178},[79,16346,542],{"emptyLinePlaceholder":541},[79,16348,16349,16351,16353,16355,16357,16359,16361],{"class":81,"line":545},[79,16350,7432],{"class":448},[79,16352,13420],{"class":85},[79,16354,455],{"class":228},[79,16356,2262],{"class":448},[79,16358,12619],{"class":448},[79,16360,2482],{"class":7284},[79,16362,850],{"class":228},[79,16364,16365],{"class":81,"line":550},[79,16366,3652],{"class":228},[79,16368,16369,16371,16373,16376,16378],{"class":81,"line":562},[79,16370,8594],{"class":228},[79,16372,3283],{"class":448},[79,16374,16375],{"class":89}," \"func (int &a) 调用 \"",[79,16377,3551],{"class":448},[79,16379,10895],{"class":228},[79,16381,16382],{"class":81,"line":568},[79,16383,3671],{"class":228},[79,16385,16386],{"class":81,"line":574},[79,16387,542],{"emptyLinePlaceholder":541},[79,16389,16390,16392,16394,16396,16398,16400,16402,16404],{"class":81,"line":579},[79,16391,7432],{"class":448},[79,16393,13420],{"class":85},[79,16395,455],{"class":228},[79,16397,8857],{"class":448},[79,16399,4467],{"class":448},[79,16401,12619],{"class":448},[79,16403,2482],{"class":7284},[79,16405,850],{"class":228},[79,16407,16408],{"class":81,"line":585},[79,16409,3652],{"class":228},[79,16411,16412,16414,16416,16419,16421],{"class":81,"line":591},[79,16413,8594],{"class":228},[79,16415,3283],{"class":448},[79,16417,16418],{"class":89}," \"func (const int &a) 调用 \"",[79,16420,3551],{"class":448},[79,16422,10895],{"class":228},[79,16424,16425],{"class":81,"line":596},[79,16426,3671],{"class":228},[79,16428,16429],{"class":81,"line":602},[79,16430,542],{"emptyLinePlaceholder":541},[79,16432,16433],{"class":81,"line":608},[79,16434,542],{"emptyLinePlaceholder":541},[79,16436,16437],{"class":81,"line":614},[79,16438,16439],{"class":2313},"\u002F\u002F2、函数重载碰到函数默认参数\n",[79,16441,16442],{"class":81,"line":619},[79,16443,542],{"emptyLinePlaceholder":541},[79,16445,16446,16448,16450,16452,16454,16456,16458,16460,16462,16464,16466],{"class":81,"line":625},[79,16447,7432],{"class":448},[79,16449,15651],{"class":85},[79,16451,455],{"class":228},[79,16453,2262],{"class":448},[79,16455,3505],{"class":7284},[79,16457,1020],{"class":228},[79,16459,2262],{"class":448},[79,16461,4909],{"class":7284},[79,16463,556],{"class":448},[79,16465,4123],{"class":96},[79,16467,850],{"class":228},[79,16469,16470],{"class":81,"line":631},[79,16471,3652],{"class":228},[79,16473,16474,16476,16478,16481,16483],{"class":81,"line":637},[79,16475,8594],{"class":228},[79,16477,3283],{"class":448},[79,16479,16480],{"class":89}," \"func2(int a, int b = 10) 调用\"",[79,16482,3551],{"class":448},[79,16484,10895],{"class":228},[79,16486,16487],{"class":81,"line":643},[79,16488,3671],{"class":228},[79,16490,16491],{"class":81,"line":649},[79,16492,542],{"emptyLinePlaceholder":541},[79,16494,16495,16497,16499,16501,16503,16505],{"class":81,"line":655},[79,16496,7432],{"class":448},[79,16498,15651],{"class":85},[79,16500,455],{"class":228},[79,16502,2262],{"class":448},[79,16504,3505],{"class":7284},[79,16506,850],{"class":228},[79,16508,16509],{"class":81,"line":660},[79,16510,3652],{"class":228},[79,16512,16513,16515,16517,16520,16522],{"class":81,"line":666},[79,16514,8594],{"class":228},[79,16516,3283],{"class":448},[79,16518,16519],{"class":89}," \"func2(int a) 调用\"",[79,16521,3551],{"class":448},[79,16523,10895],{"class":228},[79,16525,16526],{"class":81,"line":672},[79,16527,3671],{"class":228},[79,16529,16530],{"class":81,"line":678},[79,16531,542],{"emptyLinePlaceholder":541},[79,16533,16534,16536,16538],{"class":81,"line":684},[79,16535,2262],{"class":448},[79,16537,826],{"class":85},[79,16539,12888],{"class":228},[79,16541,16542],{"class":81,"line":690},[79,16543,15244],{"class":228},[79,16545,16546,16548,16550,16552,16554],{"class":81,"line":695},[79,16547,4070],{"class":448},[79,16549,12904],{"class":228},[79,16551,239],{"class":448},[79,16553,4123],{"class":96},[79,16555,3400],{"class":228},[79,16557,16558,16560,16563],{"class":81,"line":700},[79,16559,15319],{"class":85},[79,16561,16562],{"class":228},"(a);",[79,16564,16565],{"class":2313}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[79,16567,16568,16570,16572,16574,16576],{"class":81,"line":712},[79,16569,15319],{"class":85},[79,16571,455],{"class":228},[79,16573,2689],{"class":96},[79,16575,8033],{"class":228},[79,16577,16578],{"class":2313},"\u002F\u002F调用有const   10是个常量\n",[79,16580,16581],{"class":81,"line":721},[79,16582,542],{"emptyLinePlaceholder":541},[79,16584,16585],{"class":81,"line":726},[79,16586,542],{"emptyLinePlaceholder":541},[79,16588,16589,16592],{"class":81,"line":731},[79,16590,16591],{"class":2313},"    \u002F\u002Ffunc2(10);",[79,16593,16594],{"class":2313}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[79,16596,16597],{"class":81,"line":748},[79,16598,542],{"emptyLinePlaceholder":541},[79,16600,16601,16603,16605,16607],{"class":81,"line":765},[79,16602,4388],{"class":85},[79,16604,455],{"class":228},[79,16606,4393],{"class":89},[79,16608,4795],{"class":228},[79,16610,16611],{"class":81,"line":780},[79,16612,542],{"emptyLinePlaceholder":541},[79,16614,16615,16617,16619],{"class":81,"line":811},[79,16616,715],{"class":448},[79,16618,1103],{"class":96},[79,16620,3400],{"class":228},[79,16622,16623],{"class":81,"line":816},[79,16624,3671],{"class":228},[2159,16626,16627],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":57,"searchDepth":167,"depth":167,"links":16629},[16630,16631,16632],{"id":15563,"depth":167,"text":15564},{"id":15819,"depth":167,"text":15820},{"id":15941,"depth":167,"text":15942,"children":16633},[16634,16635],{"id":15948,"depth":178,"text":15949},{"id":16318,"depth":178,"text":16319},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":15555,"description":57},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":16642,"title":16643,"body":16644,"description":25390,"extension":2186,"meta":25391,"navigation":541,"path":25392,"seo":25393,"stem":25394,"__hash__":25395},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":16645,"toc":25371},[16646,16649,16655,16662,16667,16670,16673,16676,16680,16684,16687,16690,16698,16703,16706,16713,16718,16877,16880,17132,17135,17138,17141,17146,17149,17152,17163,17168,17404,17408,17418,17421,17429,17576,17580,17583,17586,17590,18035,18039,18047,18055,18961,18968,18973,19600,19603,19606,19609,19728,19731,19818,19821,19947,19950,20044,20047,20400,20404,20412,20416,20423,20426,20429,20440,20446,20451,20463,20471,20491,20499,20516,20702,20705,20709,20712,20715,20718,20721,20724,20727,20730,21190,21196,21200,21203,21214,21801,21804,22293,22297,22300,22303,22306,22309,22312,22320,22716,22720,22723,22726,23173,23176,23179,23184,23187,23192,23195,23199,23202,23204,23210,23213,23519,23529,23570,23574,23577,23579,23612,23615,23922,23924,23939,23942,23965,23974,23980,23983,23987,23990,23993,23998,24009,24014,24022,24027,24157,24160,24163,24338,24343,24555,24559,24562,24676,24681,24920,24924,24928,24931,24934,24939,25044,25047,25050,25053,25057,25168,25171,25174,25179,25231,25234,25237,25242,25288,25291,25296,25364,25366,25369],[10,16647,16643],{"id":16648},"_8类和对象",[19,16650,16651,16652],{},"C++面向对象的三大特性为",[2398,16653,16654],{},"封装、继承、多态",[19,16656,16657,16658,16661],{},"C++认为",[2398,16659,16660],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,16663,16664],{},[2398,16665,16666],{},"例如：",[19,16668,16669],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,16671,16672],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,16674,16675],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,16677,16679],{"id":16678},"_81封装","8.1封装",[339,16681,16683],{"id":16682},"_811封装的意义","8.1.1封装的意义",[19,16685,16686],{},"封装是C++面向对象三大特性之一",[19,16688,16689],{},"封装的意义：",[3246,16691,16692,16695],{},[29,16693,16694],{},"将属性和行为作为一个整体，表现生活中的事物",[29,16696,16697],{},"将属性和行为加以权限控制",[19,16699,16700],{},[2398,16701,16702],{},"封装意义一：",[19,16704,16705],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,16707,16708,15828,16710],{},[2398,16709,7251],{},[59,16711,16712],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[26,16714,16715],{},[29,16716,16717],{},"**示例1：**设计一个圆类，求圆的周长",[51,16719,16721],{"className":2248,"code":16720,"language":2250,"meta":57,"style":57},"class Circle\n{\n    \u002F\u002F访问权限\n    \u002F\u002F公共权限\npublic:\n    \u002F\u002F属性\n    int m_r;\n    \u002F\u002F行为\n    double calculateZC()\n    {\n        return 2*PI*m_r;\n    }\n};\nint main()\n{\n    \u002F\u002F通过圆类 创建具体的圆(对象)\n    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n    Circle c1;\n    \u002F\u002F给圆对象 的属性进行赋值\n    c1.m_r=10;\n    cout\u003C\u003C\"圆的周长\"\u003C\u003Cc1.calculateZC()\u003C\u003Cendl;\n}\n",[59,16722,16723,16731,16735,16740,16745,16750,16755,16762,16767,16777,16781,16799,16803,16807,16815,16819,16824,16829,16834,16839,16850,16873],{"__ignoreMap":57},[79,16724,16725,16728],{"class":81,"line":82},[79,16726,16727],{"class":448},"class",[79,16729,16730],{"class":85}," Circle\n",[79,16732,16733],{"class":81,"line":167},[79,16734,3652],{"class":228},[79,16736,16737],{"class":81,"line":178},[79,16738,16739],{"class":2313},"    \u002F\u002F访问权限\n",[79,16741,16742],{"class":81,"line":545},[79,16743,16744],{"class":2313},"    \u002F\u002F公共权限\n",[79,16746,16747],{"class":81,"line":550},[79,16748,16749],{"class":448},"public:\n",[79,16751,16752],{"class":81,"line":562},[79,16753,16754],{"class":2313},"    \u002F\u002F属性\n",[79,16756,16757,16759],{"class":81,"line":568},[79,16758,4070],{"class":448},[79,16760,16761],{"class":228}," m_r;\n",[79,16763,16764],{"class":81,"line":574},[79,16765,16766],{"class":2313},"    \u002F\u002F行为\n",[79,16768,16769,16772,16775],{"class":81,"line":579},[79,16770,16771],{"class":448},"    double",[79,16773,16774],{"class":85}," calculateZC",[79,16776,4061],{"class":228},[79,16778,16779],{"class":81,"line":585},[79,16780,4115],{"class":228},[79,16782,16783,16786,16789,16791,16794,16796],{"class":81,"line":591},[79,16784,16785],{"class":448},"        return",[79,16787,16788],{"class":96}," 2",[79,16790,473],{"class":448},[79,16792,16793],{"class":228},"PI",[79,16795,473],{"class":448},[79,16797,16798],{"class":228},"m_r;\n",[79,16800,16801],{"class":81,"line":596},[79,16802,4272],{"class":228},[79,16804,16805],{"class":81,"line":602},[79,16806,6068],{"class":228},[79,16808,16809,16811,16813],{"class":81,"line":608},[79,16810,2262],{"class":448},[79,16812,826],{"class":85},[79,16814,4061],{"class":228},[79,16816,16817],{"class":81,"line":614},[79,16818,3652],{"class":228},[79,16820,16821],{"class":81,"line":619},[79,16822,16823],{"class":2313},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[79,16825,16826],{"class":81,"line":625},[79,16827,16828],{"class":2313},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[79,16830,16831],{"class":81,"line":631},[79,16832,16833],{"class":228},"    Circle c1;\n",[79,16835,16836],{"class":81,"line":637},[79,16837,16838],{"class":2313},"    \u002F\u002F给圆对象 的属性进行赋值\n",[79,16840,16841,16844,16846,16848],{"class":81,"line":643},[79,16842,16843],{"class":228},"    c1.m_r",[79,16845,239],{"class":448},[79,16847,2689],{"class":96},[79,16849,3400],{"class":228},[79,16851,16852,16854,16856,16859,16861,16864,16867,16869,16871],{"class":81,"line":649},[79,16853,3657],{"class":228},[79,16855,3283],{"class":448},[79,16857,16858],{"class":89},"\"圆的周长\"",[79,16860,3283],{"class":448},[79,16862,16863],{"class":228},"c1.",[79,16865,16866],{"class":85},"calculateZC",[79,16868,4511],{"class":228},[79,16870,3283],{"class":448},[79,16872,3305],{"class":228},[79,16874,16875],{"class":81,"line":655},[79,16876,3671],{"class":228},[19,16878,16879],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[51,16881,16883],{"className":2248,"code":16882,"language":2250,"meta":57,"style":57},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\nclass Student\n{\npublic:\n    string m_name;\n    int m_id;\n    \u002F\u002F赋值姓名\n    void setName(string name)\n    {\n        m_name=name;\n    }\n    \u002F\u002F赋值学号\n    void setId(int id)\n    {\n        m_id=id;\n    }\n    \u002F\u002F打印学生信息\n    void printInfo()\n    {\n        cout\u003C\u003C\"姓名：\"\u003C\u003Cm_name\u003C\u003C\" \"\u003C\u003C\"学号：\"\u003C\u003Cm_id\u003C\u003Cendl;\n    }\n};\nint main()\n{\n    \u002F\u002F实例化\n    Student s1;\n    s1.setName(\"张三\");\n    s1.setId(123456);\n    s1.printInfo();\n}\n",[59,16884,16885,16891,16901,16907,16913,16917,16921,16926,16933,16938,16955,16959,16969,16973,16978,16994,16998,17008,17012,17017,17025,17029,17061,17065,17069,17077,17081,17086,17091,17105,17119,17128],{"__ignoreMap":57},[79,16886,16887,16889],{"class":81,"line":82},[79,16888,4036],{"class":448},[79,16890,4039],{"class":89},[79,16892,16893,16895,16897,16899],{"class":81,"line":167},[79,16894,4044],{"class":448},[79,16896,4047],{"class":448},[79,16898,4050],{"class":85},[79,16900,3400],{"class":228},[79,16902,16903,16905],{"class":81,"line":178},[79,16904,4036],{"class":448},[79,16906,9814],{"class":89},[79,16908,16909,16911],{"class":81,"line":545},[79,16910,16727],{"class":448},[79,16912,9827],{"class":85},[79,16914,16915],{"class":81,"line":550},[79,16916,3652],{"class":228},[79,16918,16919],{"class":81,"line":562},[79,16920,16749],{"class":448},[79,16922,16923],{"class":81,"line":568},[79,16924,16925],{"class":228},"    string m_name;\n",[79,16927,16928,16930],{"class":81,"line":574},[79,16929,4070],{"class":448},[79,16931,16932],{"class":228}," m_id;\n",[79,16934,16935],{"class":81,"line":579},[79,16936,16937],{"class":2313},"    \u002F\u002F赋值姓名\n",[79,16939,16940,16943,16946,16948,16951,16953],{"class":81,"line":585},[79,16941,16942],{"class":448},"    void",[79,16944,16945],{"class":85}," setName",[79,16947,455],{"class":228},[79,16949,16950],{"class":85},"string",[79,16952,236],{"class":7284},[79,16954,850],{"class":228},[79,16956,16957],{"class":81,"line":591},[79,16958,4115],{"class":228},[79,16960,16961,16964,16966],{"class":81,"line":596},[79,16962,16963],{"class":228},"        m_name",[79,16965,239],{"class":448},[79,16967,16968],{"class":228},"name;\n",[79,16970,16971],{"class":81,"line":602},[79,16972,4272],{"class":228},[79,16974,16975],{"class":81,"line":608},[79,16976,16977],{"class":2313},"    \u002F\u002F赋值学号\n",[79,16979,16980,16982,16985,16987,16989,16992],{"class":81,"line":614},[79,16981,16942],{"class":448},[79,16983,16984],{"class":85}," setId",[79,16986,455],{"class":228},[79,16988,2262],{"class":448},[79,16990,16991],{"class":7284}," id",[79,16993,850],{"class":228},[79,16995,16996],{"class":81,"line":619},[79,16997,4115],{"class":228},[79,16999,17000,17003,17005],{"class":81,"line":625},[79,17001,17002],{"class":228},"        m_id",[79,17004,239],{"class":448},[79,17006,17007],{"class":228},"id;\n",[79,17009,17010],{"class":81,"line":631},[79,17011,4272],{"class":228},[79,17013,17014],{"class":81,"line":637},[79,17015,17016],{"class":2313},"    \u002F\u002F打印学生信息\n",[79,17018,17019,17021,17023],{"class":81,"line":643},[79,17020,16942],{"class":448},[79,17022,11669],{"class":85},[79,17024,4061],{"class":228},[79,17026,17027],{"class":81,"line":649},[79,17028,4115],{"class":228},[79,17030,17031,17033,17035,17038,17040,17043,17045,17047,17049,17052,17054,17057,17059],{"class":81,"line":655},[79,17032,5525],{"class":228},[79,17034,3283],{"class":448},[79,17036,17037],{"class":89},"\"姓名：\"",[79,17039,3283],{"class":448},[79,17041,17042],{"class":228},"m_name",[79,17044,3283],{"class":448},[79,17046,6430],{"class":89},[79,17048,3283],{"class":448},[79,17050,17051],{"class":89},"\"学号：\"",[79,17053,3283],{"class":448},[79,17055,17056],{"class":228},"m_id",[79,17058,3283],{"class":448},[79,17060,3305],{"class":228},[79,17062,17063],{"class":81,"line":660},[79,17064,4272],{"class":228},[79,17066,17067],{"class":81,"line":666},[79,17068,6068],{"class":228},[79,17070,17071,17073,17075],{"class":81,"line":672},[79,17072,2262],{"class":448},[79,17074,826],{"class":85},[79,17076,4061],{"class":228},[79,17078,17079],{"class":81,"line":678},[79,17080,3652],{"class":228},[79,17082,17083],{"class":81,"line":684},[79,17084,17085],{"class":2313},"    \u002F\u002F实例化\n",[79,17087,17088],{"class":81,"line":690},[79,17089,17090],{"class":228},"    Student s1;\n",[79,17092,17093,17096,17099,17101,17103],{"class":81,"line":695},[79,17094,17095],{"class":228},"    s1.",[79,17097,17098],{"class":85},"setName",[79,17100,455],{"class":228},[79,17102,9981],{"class":89},[79,17104,4795],{"class":228},[79,17106,17107,17109,17112,17114,17117],{"class":81,"line":700},[79,17108,17095],{"class":228},[79,17110,17111],{"class":85},"setId",[79,17113,455],{"class":228},[79,17115,17116],{"class":96},"123456",[79,17118,4795],{"class":228},[79,17120,17121,17123,17126],{"class":81,"line":712},[79,17122,17095],{"class":228},[79,17124,17125],{"class":85},"printInfo",[79,17127,7704],{"class":228},[79,17129,17130],{"class":81,"line":721},[79,17131,3671],{"class":228},[19,17133,17134],{},"类中的属性和行为统称为成员",[19,17136,17137],{},"属性：成员属性(成员变量)",[19,17139,17140],{},"方法：成员函数(成员方法)",[19,17142,17143],{},[2398,17144,17145],{},"封装意义二：",[19,17147,17148],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,17150,17151],{},"访问权限有三种：",[26,17153,17154,17157,17160],{},[29,17155,17156],{},"public        公共权限",[29,17158,17159],{},"protected 保护权限",[29,17161,17162],{},"private      私有权限",[19,17164,17165],{},[2398,17166,17167],{},"示例：",[51,17169,17171],{"className":11976,"code":17170,"language":11978,"meta":57,"style":57},"\u002F\u002F三种权限\n\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n\nclass Person\n{\n    \u002F\u002F姓名  公共权限\npublic:\n    string m_Name;\n\n    \u002F\u002F汽车  保护权限\nprotected:\n    string m_Car;\n\n    \u002F\u002F银行卡密码  私有权限\nprivate:\n    int m_Password;\n\npublic:\n    void func()\n    {\n        m_Name = \"张三\";\n        m_Car = \"拖拉机\";\n        m_Password = 123456;\n    }\n};\n\nint main() {\n\n    Person p;\n    p.m_Name = \"李四\";\n    \u002F\u002Fp.m_Car = \"奔驰\";  \u002F\u002F保护权限类外访问不到\n    \u002F\u002Fp.m_Password = 123; \u002F\u002F私有权限类外访问不到\n\n    system(\"pause\");\n\n    return 0;\n}\n",[59,17172,17173,17178,17183,17188,17193,17197,17204,17208,17213,17217,17222,17226,17231,17236,17241,17245,17250,17255,17262,17266,17270,17278,17282,17293,17305,17317,17321,17325,17329,17337,17341,17346,17358,17366,17374,17378,17388,17392,17400],{"__ignoreMap":57},[79,17174,17175],{"class":81,"line":82},[79,17176,17177],{"class":2313},"\u002F\u002F三种权限\n",[79,17179,17180],{"class":81,"line":167},[79,17181,17182],{"class":2313},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[79,17184,17185],{"class":81,"line":178},[79,17186,17187],{"class":2313},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[79,17189,17190],{"class":81,"line":545},[79,17191,17192],{"class":2313},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[79,17194,17195],{"class":81,"line":550},[79,17196,542],{"emptyLinePlaceholder":541},[79,17198,17199,17201],{"class":81,"line":562},[79,17200,16727],{"class":448},[79,17202,17203],{"class":85}," Person\n",[79,17205,17206],{"class":81,"line":568},[79,17207,3652],{"class":228},[79,17209,17210],{"class":81,"line":574},[79,17211,17212],{"class":2313},"    \u002F\u002F姓名  公共权限\n",[79,17214,17215],{"class":81,"line":579},[79,17216,16749],{"class":448},[79,17218,17219],{"class":81,"line":585},[79,17220,17221],{"class":228},"    string m_Name;\n",[79,17223,17224],{"class":81,"line":591},[79,17225,542],{"emptyLinePlaceholder":541},[79,17227,17228],{"class":81,"line":596},[79,17229,17230],{"class":2313},"    \u002F\u002F汽车  保护权限\n",[79,17232,17233],{"class":81,"line":602},[79,17234,17235],{"class":448},"protected:\n",[79,17237,17238],{"class":81,"line":608},[79,17239,17240],{"class":228},"    string m_Car;\n",[79,17242,17243],{"class":81,"line":614},[79,17244,542],{"emptyLinePlaceholder":541},[79,17246,17247],{"class":81,"line":619},[79,17248,17249],{"class":2313},"    \u002F\u002F银行卡密码  私有权限\n",[79,17251,17252],{"class":81,"line":625},[79,17253,17254],{"class":448},"private:\n",[79,17256,17257,17259],{"class":81,"line":631},[79,17258,4070],{"class":448},[79,17260,17261],{"class":228}," m_Password;\n",[79,17263,17264],{"class":81,"line":637},[79,17265,542],{"emptyLinePlaceholder":541},[79,17267,17268],{"class":81,"line":643},[79,17269,16749],{"class":448},[79,17271,17272,17274,17276],{"class":81,"line":649},[79,17273,16942],{"class":448},[79,17275,13420],{"class":85},[79,17277,4061],{"class":228},[79,17279,17280],{"class":81,"line":655},[79,17281,4115],{"class":228},[79,17283,17284,17287,17289,17291],{"class":81,"line":660},[79,17285,17286],{"class":228},"        m_Name ",[79,17288,239],{"class":448},[79,17290,10993],{"class":89},[79,17292,3400],{"class":228},[79,17294,17295,17298,17300,17303],{"class":81,"line":666},[79,17296,17297],{"class":228},"        m_Car ",[79,17299,239],{"class":448},[79,17301,17302],{"class":89}," \"拖拉机\"",[79,17304,3400],{"class":228},[79,17306,17307,17310,17312,17315],{"class":81,"line":672},[79,17308,17309],{"class":228},"        m_Password ",[79,17311,239],{"class":448},[79,17313,17314],{"class":96}," 123456",[79,17316,3400],{"class":228},[79,17318,17319],{"class":81,"line":678},[79,17320,4272],{"class":228},[79,17322,17323],{"class":81,"line":684},[79,17324,6068],{"class":228},[79,17326,17327],{"class":81,"line":690},[79,17328,542],{"emptyLinePlaceholder":541},[79,17330,17331,17333,17335],{"class":81,"line":695},[79,17332,2262],{"class":448},[79,17334,826],{"class":85},[79,17336,12888],{"class":228},[79,17338,17339],{"class":81,"line":700},[79,17340,542],{"emptyLinePlaceholder":541},[79,17342,17343],{"class":81,"line":712},[79,17344,17345],{"class":228},"    Person p;\n",[79,17347,17348,17351,17353,17356],{"class":81,"line":721},[79,17349,17350],{"class":228},"    p.m_Name ",[79,17352,239],{"class":448},[79,17354,17355],{"class":89}," \"李四\"",[79,17357,3400],{"class":228},[79,17359,17360,17363],{"class":81,"line":726},[79,17361,17362],{"class":2313},"    \u002F\u002Fp.m_Car = \"奔驰\";",[79,17364,17365],{"class":2313},"  \u002F\u002F保护权限类外访问不到\n",[79,17367,17368,17371],{"class":81,"line":731},[79,17369,17370],{"class":2313},"    \u002F\u002Fp.m_Password = 123;",[79,17372,17373],{"class":2313}," \u002F\u002F私有权限类外访问不到\n",[79,17375,17376],{"class":81,"line":748},[79,17377,542],{"emptyLinePlaceholder":541},[79,17379,17380,17382,17384,17386],{"class":81,"line":765},[79,17381,4388],{"class":85},[79,17383,455],{"class":228},[79,17385,4393],{"class":89},[79,17387,4795],{"class":228},[79,17389,17390],{"class":81,"line":780},[79,17391,542],{"emptyLinePlaceholder":541},[79,17393,17394,17396,17398],{"class":81,"line":811},[79,17395,715],{"class":448},[79,17397,1103],{"class":96},[79,17399,3400],{"class":228},[79,17401,17402],{"class":81,"line":816},[79,17403,3671],{"class":228},[339,17405,17407],{"id":17406},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,17409,17410,17411,17414,17415],{},"在C++中 struct和class唯一的",[2398,17412,17413],{},"区别","就在于 ",[2398,17416,17417],{},"默认的访问权限不同",[19,17419,17420],{},"区别：",[3246,17422,17423,17426],{},[29,17424,17425],{},"struct 默认权限为公共",[29,17427,17428],{},"class   默认权限为私有",[51,17430,17432],{"className":11976,"code":17431,"language":11978,"meta":57,"style":57},"class C1\n{\n    int  m_A; \u002F\u002F默认是私有权限\n};\n\nstruct C2\n{\n    int m_A;  \u002F\u002F默认是公共权限\n};\n\nint main() {\n\n    C1 c1;\n    c1.m_A = 10; \u002F\u002F错误，访问权限是私有\n\n    C2 c2;\n    c2.m_A = 10; \u002F\u002F正确，访问权限是公共\n\n    system(\"pause\");\n\n    return 0;\n}\n",[59,17433,17434,17441,17445,17455,17459,17463,17470,17474,17484,17488,17492,17500,17504,17509,17523,17527,17532,17546,17550,17560,17564,17572],{"__ignoreMap":57},[79,17435,17436,17438],{"class":81,"line":82},[79,17437,16727],{"class":448},[79,17439,17440],{"class":85}," C1\n",[79,17442,17443],{"class":81,"line":167},[79,17444,3652],{"class":228},[79,17446,17447,17449,17452],{"class":81,"line":178},[79,17448,4070],{"class":448},[79,17450,17451],{"class":228},"  m_A;",[79,17453,17454],{"class":2313}," \u002F\u002F默认是私有权限\n",[79,17456,17457],{"class":81,"line":545},[79,17458,6068],{"class":228},[79,17460,17461],{"class":81,"line":550},[79,17462,542],{"emptyLinePlaceholder":541},[79,17464,17465,17467],{"class":81,"line":562},[79,17466,9824],{"class":448},[79,17468,17469],{"class":85}," C2\n",[79,17471,17472],{"class":81,"line":568},[79,17473,3652],{"class":228},[79,17475,17476,17478,17481],{"class":81,"line":574},[79,17477,4070],{"class":448},[79,17479,17480],{"class":228}," m_A;",[79,17482,17483],{"class":2313},"  \u002F\u002F默认是公共权限\n",[79,17485,17486],{"class":81,"line":579},[79,17487,6068],{"class":228},[79,17489,17490],{"class":81,"line":585},[79,17491,542],{"emptyLinePlaceholder":541},[79,17493,17494,17496,17498],{"class":81,"line":591},[79,17495,2262],{"class":448},[79,17497,826],{"class":85},[79,17499,12888],{"class":228},[79,17501,17502],{"class":81,"line":596},[79,17503,542],{"emptyLinePlaceholder":541},[79,17505,17506],{"class":81,"line":602},[79,17507,17508],{"class":228},"    C1 c1;\n",[79,17510,17511,17514,17516,17518,17520],{"class":81,"line":608},[79,17512,17513],{"class":228},"    c1.m_A ",[79,17515,239],{"class":448},[79,17517,4123],{"class":96},[79,17519,2310],{"class":228},[79,17521,17522],{"class":2313}," \u002F\u002F错误，访问权限是私有\n",[79,17524,17525],{"class":81,"line":614},[79,17526,542],{"emptyLinePlaceholder":541},[79,17528,17529],{"class":81,"line":619},[79,17530,17531],{"class":228},"    C2 c2;\n",[79,17533,17534,17537,17539,17541,17543],{"class":81,"line":625},[79,17535,17536],{"class":228},"    c2.m_A ",[79,17538,239],{"class":448},[79,17540,4123],{"class":96},[79,17542,2310],{"class":228},[79,17544,17545],{"class":2313}," \u002F\u002F正确，访问权限是公共\n",[79,17547,17548],{"class":81,"line":631},[79,17549,542],{"emptyLinePlaceholder":541},[79,17551,17552,17554,17556,17558],{"class":81,"line":637},[79,17553,4388],{"class":85},[79,17555,455],{"class":228},[79,17557,4393],{"class":89},[79,17559,4795],{"class":228},[79,17561,17562],{"class":81,"line":643},[79,17563,542],{"emptyLinePlaceholder":541},[79,17565,17566,17568,17570],{"class":81,"line":649},[79,17567,715],{"class":448},[79,17569,1103],{"class":96},[79,17571,3400],{"class":228},[79,17573,17574],{"class":81,"line":655},[79,17575,3671],{"class":228},[339,17577,17579],{"id":17578},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,17581,17582],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,17584,17585],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,17587,17588],{},[2398,17589,17167],{},[51,17591,17593],{"className":11976,"code":17592,"language":11978,"meta":57,"style":57},"class Person {\npublic:\n\n    \u002F\u002F姓名设置可读可写\n    void setName(string name) {\n        m_Name = name;\n    }\n    string getName()\n    {\n        return m_Name;\n    }\n\n\n    \u002F\u002F获取年龄 \n    int getAge() {\n        return m_Age;\n    }\n    \u002F\u002F设置年龄\n    void setAge(int age) {\n        if (age \u003C 0 || age > 150) {\n            cout \u003C\u003C \"你个老妖精!\" \u003C\u003C endl;\n            return;\n        }\n        m_Age = age;\n    }\n\n    \u002F\u002F情人设置为只写\n    void setLover(string lover) {\n        m_Lover = lover;\n    }\n\nprivate:\n    string m_Name; \u002F\u002F可读可写  姓名\n    \n    int m_Age; \u002F\u002F只读  年龄\n\n    string m_Lover; \u002F\u002F只写  情人\n};\n\nint main() {\n\n    Person p;\n    \u002F\u002F姓名设置\n    p.setName(\"张三\");\n    cout \u003C\u003C \"姓名： \" \u003C\u003C p.getName() \u003C\u003C endl;\n\n    \u002F\u002F年龄设置\n    p.setAge(50);\n    cout \u003C\u003C \"年龄： \" \u003C\u003C p.getAge() \u003C\u003C endl;\n\n    \u002F\u002F情人设置\n    p.setLover(\"苍井\");\n    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;  \u002F\u002F只写属性，不可以读取\n\n    system(\"pause\");\n\n    return 0;\n}\n",[59,17594,17595,17605,17609,17613,17618,17632,17641,17645,17655,17659,17666,17670,17674,17678,17683,17692,17699,17703,17708,17724,17747,17760,17767,17771,17780,17784,17788,17793,17809,17819,17823,17827,17831,17839,17843,17853,17857,17865,17869,17873,17881,17885,17889,17894,17907,17930,17934,17939,17952,17974,17978,17983,17997,18005,18009,18019,18023,18031],{"__ignoreMap":57},[79,17596,17597,17599,17602],{"class":81,"line":82},[79,17598,16727],{"class":448},[79,17600,17601],{"class":85}," Person",[79,17603,17604],{"class":228}," {\n",[79,17606,17607],{"class":81,"line":167},[79,17608,16749],{"class":448},[79,17610,17611],{"class":81,"line":178},[79,17612,542],{"emptyLinePlaceholder":541},[79,17614,17615],{"class":81,"line":545},[79,17616,17617],{"class":2313},"    \u002F\u002F姓名设置可读可写\n",[79,17619,17620,17622,17624,17626,17628,17630],{"class":81,"line":550},[79,17621,16942],{"class":448},[79,17623,16945],{"class":85},[79,17625,455],{"class":228},[79,17627,16950],{"class":85},[79,17629,236],{"class":7284},[79,17631,14476],{"class":228},[79,17633,17634,17636,17638],{"class":81,"line":562},[79,17635,17286],{"class":228},[79,17637,239],{"class":448},[79,17639,17640],{"class":228}," name;\n",[79,17642,17643],{"class":81,"line":568},[79,17644,4272],{"class":228},[79,17646,17647,17650,17653],{"class":81,"line":574},[79,17648,17649],{"class":85},"    string",[79,17651,17652],{"class":85}," getName",[79,17654,4061],{"class":228},[79,17656,17657],{"class":81,"line":579},[79,17658,4115],{"class":228},[79,17660,17661,17663],{"class":81,"line":585},[79,17662,16785],{"class":448},[79,17664,17665],{"class":228}," m_Name;\n",[79,17667,17668],{"class":81,"line":591},[79,17669,4272],{"class":228},[79,17671,17672],{"class":81,"line":596},[79,17673,542],{"emptyLinePlaceholder":541},[79,17675,17676],{"class":81,"line":602},[79,17677,542],{"emptyLinePlaceholder":541},[79,17679,17680],{"class":81,"line":608},[79,17681,17682],{"class":2313},"    \u002F\u002F获取年龄 \n",[79,17684,17685,17687,17690],{"class":81,"line":614},[79,17686,4070],{"class":448},[79,17688,17689],{"class":85}," getAge",[79,17691,12888],{"class":228},[79,17693,17694,17696],{"class":81,"line":619},[79,17695,16785],{"class":448},[79,17697,17698],{"class":228}," m_Age;\n",[79,17700,17701],{"class":81,"line":625},[79,17702,4272],{"class":228},[79,17704,17705],{"class":81,"line":631},[79,17706,17707],{"class":2313},"    \u002F\u002F设置年龄\n",[79,17709,17710,17712,17715,17717,17719,17722],{"class":81,"line":637},[79,17711,16942],{"class":448},[79,17713,17714],{"class":85}," setAge",[79,17716,455],{"class":228},[79,17718,2262],{"class":448},[79,17720,17721],{"class":7284}," age",[79,17723,14476],{"class":228},[79,17725,17726,17728,17731,17733,17735,17737,17740,17742,17745],{"class":81,"line":643},[79,17727,1089],{"class":448},[79,17729,17730],{"class":228}," (age ",[79,17732,229],{"class":448},[79,17734,1103],{"class":96},[79,17736,5329],{"class":448},[79,17738,17739],{"class":228}," age ",[79,17741,3199],{"class":448},[79,17743,17744],{"class":96}," 150",[79,17746,14476],{"class":228},[79,17748,17749,17751,17753,17756,17758],{"class":81,"line":649},[79,17750,11772],{"class":228},[79,17752,3283],{"class":448},[79,17754,17755],{"class":89}," \"你个老妖精!\"",[79,17757,3551],{"class":448},[79,17759,10895],{"class":228},[79,17761,17762,17765],{"class":81,"line":655},[79,17763,17764],{"class":448},"            return",[79,17766,3400],{"class":228},[79,17768,17769],{"class":81,"line":660},[79,17770,4612],{"class":228},[79,17772,17773,17776,17778],{"class":81,"line":666},[79,17774,17775],{"class":228},"        m_Age ",[79,17777,239],{"class":448},[79,17779,9862],{"class":228},[79,17781,17782],{"class":81,"line":672},[79,17783,4272],{"class":228},[79,17785,17786],{"class":81,"line":678},[79,17787,542],{"emptyLinePlaceholder":541},[79,17789,17790],{"class":81,"line":684},[79,17791,17792],{"class":2313},"    \u002F\u002F情人设置为只写\n",[79,17794,17795,17797,17800,17802,17804,17807],{"class":81,"line":690},[79,17796,16942],{"class":448},[79,17798,17799],{"class":85}," setLover",[79,17801,455],{"class":228},[79,17803,16950],{"class":85},[79,17805,17806],{"class":7284}," lover",[79,17808,14476],{"class":228},[79,17810,17811,17814,17816],{"class":81,"line":695},[79,17812,17813],{"class":228},"        m_Lover ",[79,17815,239],{"class":448},[79,17817,17818],{"class":228}," lover;\n",[79,17820,17821],{"class":81,"line":700},[79,17822,4272],{"class":228},[79,17824,17825],{"class":81,"line":712},[79,17826,542],{"emptyLinePlaceholder":541},[79,17828,17829],{"class":81,"line":721},[79,17830,17254],{"class":448},[79,17832,17833,17836],{"class":81,"line":726},[79,17834,17835],{"class":228},"    string m_Name;",[79,17837,17838],{"class":2313}," \u002F\u002F可读可写  姓名\n",[79,17840,17841],{"class":81,"line":731},[79,17842,15244],{"class":228},[79,17844,17845,17847,17850],{"class":81,"line":748},[79,17846,4070],{"class":448},[79,17848,17849],{"class":228}," m_Age;",[79,17851,17852],{"class":2313}," \u002F\u002F只读  年龄\n",[79,17854,17855],{"class":81,"line":765},[79,17856,542],{"emptyLinePlaceholder":541},[79,17858,17859,17862],{"class":81,"line":780},[79,17860,17861],{"class":228},"    string m_Lover;",[79,17863,17864],{"class":2313}," \u002F\u002F只写  情人\n",[79,17866,17867],{"class":81,"line":811},[79,17868,6068],{"class":228},[79,17870,17871],{"class":81,"line":816},[79,17872,542],{"emptyLinePlaceholder":541},[79,17874,17875,17877,17879],{"class":81,"line":821},[79,17876,2262],{"class":448},[79,17878,826],{"class":85},[79,17880,12888],{"class":228},[79,17882,17883],{"class":81,"line":837},[79,17884,542],{"emptyLinePlaceholder":541},[79,17886,17887],{"class":81,"line":853},[79,17888,17345],{"class":228},[79,17890,17891],{"class":81,"line":864},[79,17892,17893],{"class":2313},"    \u002F\u002F姓名设置\n",[79,17895,17896,17899,17901,17903,17905],{"class":81,"line":869},[79,17897,17898],{"class":228},"    p.",[79,17900,17098],{"class":85},[79,17902,455],{"class":228},[79,17904,9981],{"class":89},[79,17906,4795],{"class":228},[79,17908,17909,17911,17913,17916,17918,17921,17924,17926,17928],{"class":81,"line":885},[79,17910,8594],{"class":228},[79,17912,3283],{"class":448},[79,17914,17915],{"class":89}," \"姓名： \"",[79,17917,3551],{"class":448},[79,17919,17920],{"class":228}," p.",[79,17922,17923],{"class":85},"getName",[79,17925,15084],{"class":228},[79,17927,3283],{"class":448},[79,17929,10895],{"class":228},[79,17931,17932],{"class":81,"line":891},[79,17933,542],{"emptyLinePlaceholder":541},[79,17935,17936],{"class":81,"line":896},[79,17937,17938],{"class":2313},"    \u002F\u002F年龄设置\n",[79,17940,17941,17943,17946,17948,17950],{"class":81,"line":907},[79,17942,17898],{"class":228},[79,17944,17945],{"class":85},"setAge",[79,17947,455],{"class":228},[79,17949,2896],{"class":96},[79,17951,4795],{"class":228},[79,17953,17954,17956,17958,17961,17963,17965,17968,17970,17972],{"class":81,"line":912},[79,17955,8594],{"class":228},[79,17957,3283],{"class":448},[79,17959,17960],{"class":89}," \"年龄： \"",[79,17962,3551],{"class":448},[79,17964,17920],{"class":228},[79,17966,17967],{"class":85},"getAge",[79,17969,15084],{"class":228},[79,17971,3283],{"class":448},[79,17973,10895],{"class":228},[79,17975,17976],{"class":81,"line":935},[79,17977,542],{"emptyLinePlaceholder":541},[79,17979,17980],{"class":81,"line":946},[79,17981,17982],{"class":2313},"    \u002F\u002F情人设置\n",[79,17984,17985,17987,17990,17992,17995],{"class":81,"line":960},[79,17986,17898],{"class":228},[79,17988,17989],{"class":85},"setLover",[79,17991,455],{"class":228},[79,17993,17994],{"class":89},"\"苍井\"",[79,17996,4795],{"class":228},[79,17998,17999,18002],{"class":81,"line":975},[79,18000,18001],{"class":2313},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[79,18003,18004],{"class":2313},"  \u002F\u002F只写属性，不可以读取\n",[79,18006,18007],{"class":81,"line":980},[79,18008,542],{"emptyLinePlaceholder":541},[79,18010,18011,18013,18015,18017],{"class":81,"line":1006},[79,18012,4388],{"class":85},[79,18014,455],{"class":228},[79,18016,4393],{"class":89},[79,18018,4795],{"class":228},[79,18020,18021],{"class":81,"line":1027},[79,18022,542],{"emptyLinePlaceholder":541},[79,18024,18025,18027,18029],{"class":81,"line":1032},[79,18026,715],{"class":448},[79,18028,1103],{"class":96},[79,18030,3400],{"class":228},[79,18032,18033],{"class":81,"line":1047},[79,18034,3671],{"class":228},[339,18036,18038],{"id":18037},"_814封装案例","8.1.4封装案例",[26,18040,18041],{},[29,18042,18043,18046],{},[2398,18044,18045],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[3246,18048,18049,18052],{},[29,18050,18051],{},"求出立方体的面积和体积",[29,18053,18054],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[51,18056,18058],{"className":2248,"code":18057,"language":2250,"meta":57,"style":57},"#include\u003Ciostream>\nusing namespace std;\nclass Cube\n{\npublic:\n    \u002F\u002F输入长宽高\n    void setLwh(int l,int w,int h)\n    {\n        m_L=l;\n        m_W=w;\n        m_H=h;\n    }\n    int mianji()\n    {\n        return 2*(m_L*m_W + m_L*m_H + m_W*m_H);\n    }\n    int tiji()\n    {\n        return m_L*m_W*m_H;\n    }\n    \u002F\u002F获取长宽高\n    int getLength()\n    {\n        return m_L;\n    }\n    int getWidth()\n    {\n        return m_W;\n    }\n    int getHeight()\n    {\n        return m_H;\n    }\n    \u002F\u002F成员函数判断两个立方体是否相等\n    bool isEqual(Cube c)\n    {\n        if (c.getLength() == m_L && c.getWidth() == m_W && c.getHeight() == m_H)\n        {\n            return true;\n        }\n        else\n        {\n            return false;\n        }\n    }\n    \u002F\u002F私有属性\nprivate:\n    int m_L;\n    int m_W;\n    int m_H;\n\n};\n\u002F\u002F全局函数判断两个立方体是否相等\nbool isEqual(Cube c1,Cube c2)\n{\n    return (c1.getLength() == c2.getLength()) && (c1.getWidth() == c2.getWidth()) && (c1.getHeight() == c2.getHeight());\n}\nint main()\n{\n    Cube c1;\n    \u002F\u002F输入立方体的长宽高\n    cout\u003C\u003C\"请输入第一个立方体的长、宽、高：\"\u003C\u003Cendl;\n    int l,w,h,l1,w1,h1;\n    cin>>l>>w>>h;\n    c1.setLwh(l,w,h);\n    \u002F\u002F面积\n    cout\u003C\u003C\"立方体的表面积为：\"\u003C\u003Cc1.mianji()\u003C\u003Cendl;\n    \u002F\u002F体积\n    cout\u003C\u003C\"立方体的体积为：\"\u003C\u003Cc1.tiji()\u003C\u003Cendl;\n    cout\u003C\u003C\"请输入第二个立方体的长、宽、高：\"\u003C\u003Cendl;\n    cin>>l1>>w1>>h1;\n    Cube c2;\n    c2.setLwh(l1,w1,h1);\n    cout\u003C\u003C\"第二个立方体的表面积为：\"\u003C\u003Cc2.mianji()\u003C\u003Cendl;\n    cout\u003C\u003C\"第二个立方体的体积为：\"\u003C\u003Cc2.tiji()\u003C\u003Cendl;\n\n    \u002F\u002F判断两个立方体的表面积和体积是否相等\n    cout\u003C\u003C\"内部函数判断结果：\"\u003C\u003Cendl;\n    if (c1.isEqual(c2))\n    {\n        cout\u003C\u003C\"两个立方体相等\"\u003C\u003Cendl;\n    }\n    else\n    {\n        cout\u003C\u003C\"两个立方体不相等\"\u003C\u003Cendl;\n    }\n\n    cout\u003C\u003C\"全局函数判断结果：\"\u003C\u003Cendl;\n    if (isEqual(c1, c2))\n    {\n        cout\u003C\u003C\"两个立方体相等\"\u003C\u003Cendl;\n    }\n    else\n    {\n        cout\u003C\u003C\"两个立方体不相等\"\u003C\u003Cendl;\n    }\n}\n",[59,18059,18060,18066,18076,18083,18087,18091,18096,18126,18130,18140,18150,18160,18164,18173,18177,18213,18217,18226,18230,18246,18250,18255,18264,18268,18275,18279,18288,18292,18299,18303,18312,18316,18323,18327,18332,18349,18353,18399,18403,18412,18416,18420,18424,18433,18437,18441,18446,18450,18456,18462,18468,18472,18476,18481,18503,18507,18561,18565,18573,18577,18582,18587,18600,18607,18623,18634,18639,18661,18666,18688,18701,18720,18726,18737,18760,18782,18787,18793,18807,18820,18825,18839,18844,18850,18855,18869,18874,18879,18893,18905,18910,18923,18928,18933,18938,18951,18956],{"__ignoreMap":57},[79,18061,18062,18064],{"class":81,"line":82},[79,18063,4036],{"class":448},[79,18065,4039],{"class":89},[79,18067,18068,18070,18072,18074],{"class":81,"line":167},[79,18069,4044],{"class":448},[79,18071,4047],{"class":448},[79,18073,4050],{"class":85},[79,18075,3400],{"class":228},[79,18077,18078,18080],{"class":81,"line":178},[79,18079,16727],{"class":448},[79,18081,18082],{"class":85}," Cube\n",[79,18084,18085],{"class":81,"line":545},[79,18086,3652],{"class":228},[79,18088,18089],{"class":81,"line":550},[79,18090,16749],{"class":448},[79,18092,18093],{"class":81,"line":562},[79,18094,18095],{"class":2313},"    \u002F\u002F输入长宽高\n",[79,18097,18098,18100,18103,18105,18107,18110,18112,18114,18117,18119,18121,18124],{"class":81,"line":568},[79,18099,16942],{"class":448},[79,18101,18102],{"class":85}," setLwh",[79,18104,455],{"class":228},[79,18106,2262],{"class":448},[79,18108,18109],{"class":7284}," l",[79,18111,2621],{"class":228},[79,18113,2262],{"class":448},[79,18115,18116],{"class":7284}," w",[79,18118,2621],{"class":228},[79,18120,2262],{"class":448},[79,18122,18123],{"class":7284}," h",[79,18125,850],{"class":228},[79,18127,18128],{"class":81,"line":574},[79,18129,4115],{"class":228},[79,18131,18132,18135,18137],{"class":81,"line":579},[79,18133,18134],{"class":228},"        m_L",[79,18136,239],{"class":448},[79,18138,18139],{"class":228},"l;\n",[79,18141,18142,18145,18147],{"class":81,"line":585},[79,18143,18144],{"class":228},"        m_W",[79,18146,239],{"class":448},[79,18148,18149],{"class":228},"w;\n",[79,18151,18152,18155,18157],{"class":81,"line":591},[79,18153,18154],{"class":228},"        m_H",[79,18156,239],{"class":448},[79,18158,18159],{"class":228},"h;\n",[79,18161,18162],{"class":81,"line":596},[79,18163,4272],{"class":228},[79,18165,18166,18168,18171],{"class":81,"line":602},[79,18167,4070],{"class":448},[79,18169,18170],{"class":85}," mianji",[79,18172,4061],{"class":228},[79,18174,18175],{"class":81,"line":608},[79,18176,4115],{"class":228},[79,18178,18179,18181,18183,18185,18188,18190,18193,18195,18198,18200,18203,18205,18208,18210],{"class":81,"line":614},[79,18180,16785],{"class":448},[79,18182,16788],{"class":96},[79,18184,473],{"class":448},[79,18186,18187],{"class":228},"(m_L",[79,18189,473],{"class":448},[79,18191,18192],{"class":228},"m_W ",[79,18194,995],{"class":448},[79,18196,18197],{"class":228}," m_L",[79,18199,473],{"class":448},[79,18201,18202],{"class":228},"m_H ",[79,18204,995],{"class":448},[79,18206,18207],{"class":228}," m_W",[79,18209,473],{"class":448},[79,18211,18212],{"class":228},"m_H);\n",[79,18214,18215],{"class":81,"line":619},[79,18216,4272],{"class":228},[79,18218,18219,18221,18224],{"class":81,"line":625},[79,18220,4070],{"class":448},[79,18222,18223],{"class":85}," tiji",[79,18225,4061],{"class":228},[79,18227,18228],{"class":81,"line":631},[79,18229,4115],{"class":228},[79,18231,18232,18234,18236,18238,18241,18243],{"class":81,"line":637},[79,18233,16785],{"class":448},[79,18235,18197],{"class":228},[79,18237,473],{"class":448},[79,18239,18240],{"class":228},"m_W",[79,18242,473],{"class":448},[79,18244,18245],{"class":228},"m_H;\n",[79,18247,18248],{"class":81,"line":643},[79,18249,4272],{"class":228},[79,18251,18252],{"class":81,"line":649},[79,18253,18254],{"class":2313},"    \u002F\u002F获取长宽高\n",[79,18256,18257,18259,18262],{"class":81,"line":655},[79,18258,4070],{"class":448},[79,18260,18261],{"class":85}," getLength",[79,18263,4061],{"class":228},[79,18265,18266],{"class":81,"line":660},[79,18267,4115],{"class":228},[79,18269,18270,18272],{"class":81,"line":666},[79,18271,16785],{"class":448},[79,18273,18274],{"class":228}," m_L;\n",[79,18276,18277],{"class":81,"line":672},[79,18278,4272],{"class":228},[79,18280,18281,18283,18286],{"class":81,"line":678},[79,18282,4070],{"class":448},[79,18284,18285],{"class":85}," getWidth",[79,18287,4061],{"class":228},[79,18289,18290],{"class":81,"line":684},[79,18291,4115],{"class":228},[79,18293,18294,18296],{"class":81,"line":690},[79,18295,16785],{"class":448},[79,18297,18298],{"class":228}," m_W;\n",[79,18300,18301],{"class":81,"line":695},[79,18302,4272],{"class":228},[79,18304,18305,18307,18310],{"class":81,"line":700},[79,18306,4070],{"class":448},[79,18308,18309],{"class":85}," getHeight",[79,18311,4061],{"class":228},[79,18313,18314],{"class":81,"line":712},[79,18315,4115],{"class":228},[79,18317,18318,18320],{"class":81,"line":721},[79,18319,16785],{"class":448},[79,18321,18322],{"class":228}," m_H;\n",[79,18324,18325],{"class":81,"line":726},[79,18326,4272],{"class":228},[79,18328,18329],{"class":81,"line":731},[79,18330,18331],{"class":2313},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[79,18333,18334,18337,18340,18342,18345,18347],{"class":81,"line":748},[79,18335,18336],{"class":448},"    bool",[79,18338,18339],{"class":85}," isEqual",[79,18341,455],{"class":228},[79,18343,18344],{"class":85},"Cube",[79,18346,4925],{"class":7284},[79,18348,850],{"class":228},[79,18350,18351],{"class":81,"line":765},[79,18352,4115],{"class":228},[79,18354,18355,18357,18360,18363,18365,18367,18370,18372,18375,18378,18380,18382,18385,18387,18389,18392,18394,18396],{"class":81,"line":780},[79,18356,1089],{"class":448},[79,18358,18359],{"class":228}," (c.",[79,18361,18362],{"class":85},"getLength",[79,18364,15084],{"class":228},[79,18366,5025],{"class":448},[79,18368,18369],{"class":228}," m_L ",[79,18371,3810],{"class":448},[79,18373,18374],{"class":228}," c.",[79,18376,18377],{"class":85},"getWidth",[79,18379,15084],{"class":228},[79,18381,5025],{"class":448},[79,18383,18384],{"class":228}," m_W ",[79,18386,3810],{"class":448},[79,18388,18374],{"class":228},[79,18390,18391],{"class":85},"getHeight",[79,18393,15084],{"class":228},[79,18395,5025],{"class":448},[79,18397,18398],{"class":228}," m_H)\n",[79,18400,18401],{"class":81,"line":811},[79,18402,4593],{"class":228},[79,18404,18405,18407,18410],{"class":81,"line":816},[79,18406,17764],{"class":448},[79,18408,18409],{"class":96}," true",[79,18411,3400],{"class":228},[79,18413,18414],{"class":81,"line":821},[79,18415,4612],{"class":228},[79,18417,18418],{"class":81,"line":837},[79,18419,4653],{"class":448},[79,18421,18422],{"class":81,"line":853},[79,18423,4593],{"class":228},[79,18425,18426,18428,18431],{"class":81,"line":864},[79,18427,17764],{"class":448},[79,18429,18430],{"class":96}," false",[79,18432,3400],{"class":228},[79,18434,18435],{"class":81,"line":869},[79,18436,4612],{"class":228},[79,18438,18439],{"class":81,"line":885},[79,18440,4272],{"class":228},[79,18442,18443],{"class":81,"line":891},[79,18444,18445],{"class":2313},"    \u002F\u002F私有属性\n",[79,18447,18448],{"class":81,"line":896},[79,18449,17254],{"class":448},[79,18451,18452,18454],{"class":81,"line":907},[79,18453,4070],{"class":448},[79,18455,18274],{"class":228},[79,18457,18458,18460],{"class":81,"line":912},[79,18459,4070],{"class":448},[79,18461,18298],{"class":228},[79,18463,18464,18466],{"class":81,"line":935},[79,18465,4070],{"class":448},[79,18467,18322],{"class":228},[79,18469,18470],{"class":81,"line":946},[79,18471,542],{"emptyLinePlaceholder":541},[79,18473,18474],{"class":81,"line":960},[79,18475,6068],{"class":228},[79,18477,18478],{"class":81,"line":975},[79,18479,18480],{"class":2313},"\u002F\u002F全局函数判断两个立方体是否相等\n",[79,18482,18483,18485,18487,18489,18491,18494,18496,18498,18501],{"class":81,"line":980},[79,18484,3461],{"class":448},[79,18486,18339],{"class":85},[79,18488,455],{"class":228},[79,18490,18344],{"class":85},[79,18492,18493],{"class":7284}," c1",[79,18495,2621],{"class":228},[79,18497,18344],{"class":85},[79,18499,18500],{"class":7284}," c2",[79,18502,850],{"class":228},[79,18504,18505],{"class":81,"line":1006},[79,18506,3652],{"class":228},[79,18508,18509,18511,18514,18516,18518,18520,18523,18525,18528,18530,18532,18534,18536,18538,18540,18542,18544,18546,18548,18550,18552,18554,18556,18558],{"class":81,"line":1027},[79,18510,715],{"class":448},[79,18512,18513],{"class":228}," (c1.",[79,18515,18362],{"class":85},[79,18517,15084],{"class":228},[79,18519,5025],{"class":448},[79,18521,18522],{"class":228}," c2.",[79,18524,18362],{"class":85},[79,18526,18527],{"class":228},"()) ",[79,18529,3810],{"class":448},[79,18531,18513],{"class":228},[79,18533,18377],{"class":85},[79,18535,15084],{"class":228},[79,18537,5025],{"class":448},[79,18539,18522],{"class":228},[79,18541,18377],{"class":85},[79,18543,18527],{"class":228},[79,18545,3810],{"class":448},[79,18547,18513],{"class":228},[79,18549,18391],{"class":85},[79,18551,15084],{"class":228},[79,18553,5025],{"class":448},[79,18555,18522],{"class":228},[79,18557,18391],{"class":85},[79,18559,18560],{"class":228},"());\n",[79,18562,18563],{"class":81,"line":1032},[79,18564,3671],{"class":228},[79,18566,18567,18569,18571],{"class":81,"line":1047},[79,18568,2262],{"class":448},[79,18570,826],{"class":85},[79,18572,4061],{"class":228},[79,18574,18575],{"class":81,"line":1053},[79,18576,3652],{"class":228},[79,18578,18579],{"class":81,"line":1058},[79,18580,18581],{"class":228},"    Cube c1;\n",[79,18583,18584],{"class":81,"line":1069},[79,18585,18586],{"class":2313},"    \u002F\u002F输入立方体的长宽高\n",[79,18588,18589,18591,18593,18596,18598],{"class":81,"line":1081},[79,18590,3657],{"class":228},[79,18592,3283],{"class":448},[79,18594,18595],{"class":89},"\"请输入第一个立方体的长、宽、高：\"",[79,18597,3283],{"class":448},[79,18599,3305],{"class":228},[79,18601,18602,18604],{"class":81,"line":1086},[79,18603,4070],{"class":448},[79,18605,18606],{"class":228}," l,w,h,l1,w1,h1;\n",[79,18608,18609,18611,18613,18615,18617,18619,18621],{"class":81,"line":1108},[79,18610,4097],{"class":228},[79,18612,3536],{"class":448},[79,18614,2759],{"class":228},[79,18616,3536],{"class":448},[79,18618,3035],{"class":228},[79,18620,3536],{"class":448},[79,18622,18159],{"class":228},[79,18624,18625,18628,18631],{"class":81,"line":1153},[79,18626,18627],{"class":228},"    c1.",[79,18629,18630],{"class":85},"setLwh",[79,18632,18633],{"class":228},"(l,w,h);\n",[79,18635,18636],{"class":81,"line":1158},[79,18637,18638],{"class":2313},"    \u002F\u002F面积\n",[79,18640,18641,18643,18645,18648,18650,18652,18655,18657,18659],{"class":81,"line":1180},[79,18642,3657],{"class":228},[79,18644,3283],{"class":448},[79,18646,18647],{"class":89},"\"立方体的表面积为：\"",[79,18649,3283],{"class":448},[79,18651,16863],{"class":228},[79,18653,18654],{"class":85},"mianji",[79,18656,4511],{"class":228},[79,18658,3283],{"class":448},[79,18660,3305],{"class":228},[79,18662,18663],{"class":81,"line":1197},[79,18664,18665],{"class":2313},"    \u002F\u002F体积\n",[79,18667,18668,18670,18672,18675,18677,18679,18682,18684,18686],{"class":81,"line":1202},[79,18669,3657],{"class":228},[79,18671,3283],{"class":448},[79,18673,18674],{"class":89},"\"立方体的体积为：\"",[79,18676,3283],{"class":448},[79,18678,16863],{"class":228},[79,18680,18681],{"class":85},"tiji",[79,18683,4511],{"class":228},[79,18685,3283],{"class":448},[79,18687,3305],{"class":228},[79,18689,18690,18692,18694,18697,18699],{"class":81,"line":1207},[79,18691,3657],{"class":228},[79,18693,3283],{"class":448},[79,18695,18696],{"class":89},"\"请输入第二个立方体的长、宽、高：\"",[79,18698,3283],{"class":448},[79,18700,3305],{"class":228},[79,18702,18703,18705,18707,18710,18712,18715,18717],{"class":81,"line":1223},[79,18704,4097],{"class":228},[79,18706,3536],{"class":448},[79,18708,18709],{"class":228},"l1",[79,18711,3536],{"class":448},[79,18713,18714],{"class":228},"w1",[79,18716,3536],{"class":448},[79,18718,18719],{"class":228},"h1;\n",[79,18721,18723],{"class":81,"line":18722},72,[79,18724,18725],{"class":228},"    Cube c2;\n",[79,18727,18729,18732,18734],{"class":81,"line":18728},73,[79,18730,18731],{"class":228},"    c2.",[79,18733,18630],{"class":85},[79,18735,18736],{"class":228},"(l1,w1,h1);\n",[79,18738,18740,18742,18744,18747,18749,18752,18754,18756,18758],{"class":81,"line":18739},74,[79,18741,3657],{"class":228},[79,18743,3283],{"class":448},[79,18745,18746],{"class":89},"\"第二个立方体的表面积为：\"",[79,18748,3283],{"class":448},[79,18750,18751],{"class":228},"c2.",[79,18753,18654],{"class":85},[79,18755,4511],{"class":228},[79,18757,3283],{"class":448},[79,18759,3305],{"class":228},[79,18761,18763,18765,18767,18770,18772,18774,18776,18778,18780],{"class":81,"line":18762},75,[79,18764,3657],{"class":228},[79,18766,3283],{"class":448},[79,18768,18769],{"class":89},"\"第二个立方体的体积为：\"",[79,18771,3283],{"class":448},[79,18773,18751],{"class":228},[79,18775,18681],{"class":85},[79,18777,4511],{"class":228},[79,18779,3283],{"class":448},[79,18781,3305],{"class":228},[79,18783,18785],{"class":81,"line":18784},76,[79,18786,542],{"emptyLinePlaceholder":541},[79,18788,18790],{"class":81,"line":18789},77,[79,18791,18792],{"class":2313},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[79,18794,18796,18798,18800,18803,18805],{"class":81,"line":18795},78,[79,18797,3657],{"class":228},[79,18799,3283],{"class":448},[79,18801,18802],{"class":89},"\"内部函数判断结果：\"",[79,18804,3283],{"class":448},[79,18806,3305],{"class":228},[79,18808,18810,18812,18814,18817],{"class":81,"line":18809},79,[79,18811,5176],{"class":448},[79,18813,18513],{"class":228},[79,18815,18816],{"class":85},"isEqual",[79,18818,18819],{"class":228},"(c2))\n",[79,18821,18823],{"class":81,"line":18822},80,[79,18824,4115],{"class":228},[79,18826,18828,18830,18832,18835,18837],{"class":81,"line":18827},81,[79,18829,5525],{"class":228},[79,18831,3283],{"class":448},[79,18833,18834],{"class":89},"\"两个立方体相等\"",[79,18836,3283],{"class":448},[79,18838,3305],{"class":228},[79,18840,18842],{"class":81,"line":18841},82,[79,18843,4272],{"class":228},[79,18845,18847],{"class":81,"line":18846},83,[79,18848,18849],{"class":448},"    else\n",[79,18851,18853],{"class":81,"line":18852},84,[79,18854,4115],{"class":228},[79,18856,18858,18860,18862,18865,18867],{"class":81,"line":18857},85,[79,18859,5525],{"class":228},[79,18861,3283],{"class":448},[79,18863,18864],{"class":89},"\"两个立方体不相等\"",[79,18866,3283],{"class":448},[79,18868,3305],{"class":228},[79,18870,18872],{"class":81,"line":18871},86,[79,18873,4272],{"class":228},[79,18875,18877],{"class":81,"line":18876},87,[79,18878,542],{"emptyLinePlaceholder":541},[79,18880,18882,18884,18886,18889,18891],{"class":81,"line":18881},88,[79,18883,3657],{"class":228},[79,18885,3283],{"class":448},[79,18887,18888],{"class":89},"\"全局函数判断结果：\"",[79,18890,3283],{"class":448},[79,18892,3305],{"class":228},[79,18894,18896,18898,18900,18902],{"class":81,"line":18895},89,[79,18897,5176],{"class":448},[79,18899,3757],{"class":228},[79,18901,18816],{"class":85},[79,18903,18904],{"class":228},"(c1, c2))\n",[79,18906,18908],{"class":81,"line":18907},90,[79,18909,4115],{"class":228},[79,18911,18913,18915,18917,18919,18921],{"class":81,"line":18912},91,[79,18914,5525],{"class":228},[79,18916,3283],{"class":448},[79,18918,18834],{"class":89},[79,18920,3283],{"class":448},[79,18922,3305],{"class":228},[79,18924,18926],{"class":81,"line":18925},92,[79,18927,4272],{"class":228},[79,18929,18931],{"class":81,"line":18930},93,[79,18932,18849],{"class":448},[79,18934,18936],{"class":81,"line":18935},94,[79,18937,4115],{"class":228},[79,18939,18941,18943,18945,18947,18949],{"class":81,"line":18940},95,[79,18942,5525],{"class":228},[79,18944,3283],{"class":448},[79,18946,18864],{"class":89},[79,18948,3283],{"class":448},[79,18950,3305],{"class":228},[79,18952,18954],{"class":81,"line":18953},96,[79,18955,4272],{"class":228},[79,18957,18959],{"class":81,"line":18958},97,[79,18960,3671],{"class":228},[26,18962,18963],{"start":167},[29,18964,18965],{},[2398,18966,18967],{},"练习案例2：点和圆的关系",[3246,18969,18970],{},[29,18971,18972],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[51,18974,18976],{"className":2248,"code":18975,"language":2250,"meta":57,"style":57},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Ccmath>\nclass Point\n{\npublic:\n    \u002F\u002F赋值\n    void setPoint(double x, double y) { m_x = x; m_y = y; }\n    \u002F\u002F获取坐标\n    double getX() { return m_x; }\n    double getY() { return m_y; }\n\nprivate:\n    double m_x;\n    double m_y;\n};\nclass Circle\n{\npublic:\n    \u002F\u002F赋值\n    void setRadius(double r) { m_r = r; }\n    void setCenter(Point center) { m_center = center; }\n    \u002F\u002F获取属性\n    double getRadius() { return m_r; }\n    Point getCenter() { return m_center; }\n\nprivate:\n    double m_r;\n    \u002F\u002F在类中可以让另一个类作为本来的成员\n    Point m_center;\n};\nvoid isInCircle(Circle &c,Point &p)\n{\n    double dx = c.getCenter().getX() - p.getX();\n    double dy = c.getCenter().getY() - p.getY();\n    double distance = sqrt(dx * dx + dy * dy);\n    if (distance \u003C c.getRadius())\n    {\n        cout \u003C\u003C \"点在圆内\" \u003C\u003C endl;\n    }\n    else\n    {\n        cout \u003C\u003C \"点在圆外\" \u003C\u003C endl;\n    }\n}\nint main()\n{\n    \u002F\u002F实例化\n    Circle c1;\n    Point p1;\n    \u002F\u002F赋值\n    cout\u003C\u003C\"请输入圆的半径：\";\n    double r;\n    cin>>r;\n    c1.setRadius(r);\n    cout\u003C\u003C\"请输入圆心坐标：\";\n    double x, y;\n    cin>>x>>y;\n    p1.setPoint(x, y);\n    c1.setCenter(p1);\n    cout\u003C\u003C\"请输入测试点坐标：\";\n    double x1, y1;\n    cin>>x1>>y1;\n    Point p2;\n    p2.setPoint(x1, y1);\n    isInCircle(c1, p2);\n}\n",[59,18977,18978,18984,18994,19001,19008,19012,19016,19021,19055,19060,19075,19089,19093,19097,19104,19111,19115,19121,19125,19129,19133,19155,19178,19183,19197,19212,19216,19220,19226,19231,19236,19240,19266,19270,19300,19328,19356,19373,19377,19390,19394,19398,19402,19415,19419,19423,19431,19435,19439,19443,19448,19452,19463,19470,19479,19489,19500,19507,19520,19531,19541,19552,19559,19573,19578,19588,19596],{"__ignoreMap":57},[79,18979,18980,18982],{"class":81,"line":82},[79,18981,4036],{"class":448},[79,18983,4039],{"class":89},[79,18985,18986,18988,18990,18992],{"class":81,"line":167},[79,18987,4044],{"class":448},[79,18989,4047],{"class":448},[79,18991,4050],{"class":85},[79,18993,3400],{"class":228},[79,18995,18996,18998],{"class":81,"line":178},[79,18997,4036],{"class":448},[79,18999,19000],{"class":89},"\u003Ccmath>\n",[79,19002,19003,19005],{"class":81,"line":545},[79,19004,16727],{"class":448},[79,19006,19007],{"class":85}," Point\n",[79,19009,19010],{"class":81,"line":550},[79,19011,3652],{"class":228},[79,19013,19014],{"class":81,"line":562},[79,19015,16749],{"class":448},[79,19017,19018],{"class":81,"line":568},[79,19019,19020],{"class":2313},"    \u002F\u002F赋值\n",[79,19022,19023,19025,19028,19030,19032,19035,19037,19039,19042,19045,19047,19050,19052],{"class":81,"line":574},[79,19024,16942],{"class":448},[79,19026,19027],{"class":85}," setPoint",[79,19029,455],{"class":228},[79,19031,16070],{"class":448},[79,19033,19034],{"class":7284}," x",[79,19036,1020],{"class":228},[79,19038,16070],{"class":448},[79,19040,19041],{"class":7284}," y",[79,19043,19044],{"class":228},") { m_x ",[79,19046,239],{"class":448},[79,19048,19049],{"class":228}," x; m_y ",[79,19051,239],{"class":448},[79,19053,19054],{"class":228}," y; }\n",[79,19056,19057],{"class":81,"line":579},[79,19058,19059],{"class":2313},"    \u002F\u002F获取坐标\n",[79,19061,19062,19064,19067,19070,19072],{"class":81,"line":585},[79,19063,16771],{"class":448},[79,19065,19066],{"class":85}," getX",[79,19068,19069],{"class":228},"() { ",[79,19071,449],{"class":448},[79,19073,19074],{"class":228}," m_x; }\n",[79,19076,19077,19079,19082,19084,19086],{"class":81,"line":591},[79,19078,16771],{"class":448},[79,19080,19081],{"class":85}," getY",[79,19083,19069],{"class":228},[79,19085,449],{"class":448},[79,19087,19088],{"class":228}," m_y; }\n",[79,19090,19091],{"class":81,"line":596},[79,19092,542],{"emptyLinePlaceholder":541},[79,19094,19095],{"class":81,"line":602},[79,19096,17254],{"class":448},[79,19098,19099,19101],{"class":81,"line":608},[79,19100,16771],{"class":448},[79,19102,19103],{"class":228}," m_x;\n",[79,19105,19106,19108],{"class":81,"line":614},[79,19107,16771],{"class":448},[79,19109,19110],{"class":228}," m_y;\n",[79,19112,19113],{"class":81,"line":619},[79,19114,6068],{"class":228},[79,19116,19117,19119],{"class":81,"line":625},[79,19118,16727],{"class":448},[79,19120,16730],{"class":85},[79,19122,19123],{"class":81,"line":631},[79,19124,3652],{"class":228},[79,19126,19127],{"class":81,"line":637},[79,19128,16749],{"class":448},[79,19130,19131],{"class":81,"line":643},[79,19132,19020],{"class":2313},[79,19134,19135,19137,19140,19142,19144,19147,19150,19152],{"class":81,"line":649},[79,19136,16942],{"class":448},[79,19138,19139],{"class":85}," setRadius",[79,19141,455],{"class":228},[79,19143,16070],{"class":448},[79,19145,19146],{"class":7284}," r",[79,19148,19149],{"class":228},") { m_r ",[79,19151,239],{"class":448},[79,19153,19154],{"class":228}," r; }\n",[79,19156,19157,19159,19162,19164,19167,19170,19173,19175],{"class":81,"line":655},[79,19158,16942],{"class":448},[79,19160,19161],{"class":85}," setCenter",[79,19163,455],{"class":228},[79,19165,19166],{"class":85},"Point",[79,19168,19169],{"class":7284}," center",[79,19171,19172],{"class":228},") { m_center ",[79,19174,239],{"class":448},[79,19176,19177],{"class":228}," center; }\n",[79,19179,19180],{"class":81,"line":660},[79,19181,19182],{"class":2313},"    \u002F\u002F获取属性\n",[79,19184,19185,19187,19190,19192,19194],{"class":81,"line":666},[79,19186,16771],{"class":448},[79,19188,19189],{"class":85}," getRadius",[79,19191,19069],{"class":228},[79,19193,449],{"class":448},[79,19195,19196],{"class":228}," m_r; }\n",[79,19198,19199,19202,19205,19207,19209],{"class":81,"line":672},[79,19200,19201],{"class":85},"    Point",[79,19203,19204],{"class":85}," getCenter",[79,19206,19069],{"class":228},[79,19208,449],{"class":448},[79,19210,19211],{"class":228}," m_center; }\n",[79,19213,19214],{"class":81,"line":678},[79,19215,542],{"emptyLinePlaceholder":541},[79,19217,19218],{"class":81,"line":684},[79,19219,17254],{"class":448},[79,19221,19222,19224],{"class":81,"line":690},[79,19223,16771],{"class":448},[79,19225,16761],{"class":228},[79,19227,19228],{"class":81,"line":695},[79,19229,19230],{"class":2313},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[79,19232,19233],{"class":81,"line":700},[79,19234,19235],{"class":228},"    Point m_center;\n",[79,19237,19238],{"class":81,"line":712},[79,19239,6068],{"class":228},[79,19241,19242,19244,19247,19249,19252,19254,19256,19258,19260,19262,19264],{"class":81,"line":721},[79,19243,7432],{"class":448},[79,19245,19246],{"class":85}," isInCircle",[79,19248,455],{"class":228},[79,19250,19251],{"class":85},"Circle",[79,19253,12619],{"class":448},[79,19255,2532],{"class":7284},[79,19257,2621],{"class":228},[79,19259,19166],{"class":85},[79,19261,12619],{"class":448},[79,19263,19],{"class":7284},[79,19265,850],{"class":228},[79,19267,19268],{"class":81,"line":726},[79,19269,3652],{"class":228},[79,19271,19272,19274,19277,19279,19281,19284,19287,19290,19292,19294,19296,19298],{"class":81,"line":731},[79,19273,16771],{"class":448},[79,19275,19276],{"class":228}," dx ",[79,19278,239],{"class":448},[79,19280,18374],{"class":228},[79,19282,19283],{"class":85},"getCenter",[79,19285,19286],{"class":228},"().",[79,19288,19289],{"class":85},"getX",[79,19291,15084],{"class":228},[79,19293,478],{"class":448},[79,19295,17920],{"class":228},[79,19297,19289],{"class":85},[79,19299,7704],{"class":228},[79,19301,19302,19304,19307,19309,19311,19313,19315,19318,19320,19322,19324,19326],{"class":81,"line":748},[79,19303,16771],{"class":448},[79,19305,19306],{"class":228}," dy ",[79,19308,239],{"class":448},[79,19310,18374],{"class":228},[79,19312,19283],{"class":85},[79,19314,19286],{"class":228},[79,19316,19317],{"class":85},"getY",[79,19319,15084],{"class":228},[79,19321,478],{"class":448},[79,19323,17920],{"class":228},[79,19325,19317],{"class":85},[79,19327,7704],{"class":228},[79,19329,19330,19332,19335,19337,19340,19343,19345,19347,19349,19351,19353],{"class":81,"line":765},[79,19331,16771],{"class":448},[79,19333,19334],{"class":228}," distance ",[79,19336,239],{"class":448},[79,19338,19339],{"class":85}," sqrt",[79,19341,19342],{"class":228},"(dx ",[79,19344,473],{"class":448},[79,19346,19276],{"class":228},[79,19348,995],{"class":448},[79,19350,19306],{"class":228},[79,19352,473],{"class":448},[79,19354,19355],{"class":228}," dy);\n",[79,19357,19358,19360,19363,19365,19367,19370],{"class":81,"line":780},[79,19359,5176],{"class":448},[79,19361,19362],{"class":228}," (distance ",[79,19364,229],{"class":448},[79,19366,18374],{"class":228},[79,19368,19369],{"class":85},"getRadius",[79,19371,19372],{"class":228},"())\n",[79,19374,19375],{"class":81,"line":811},[79,19376,4115],{"class":228},[79,19378,19379,19381,19383,19386,19388],{"class":81,"line":816},[79,19380,11723],{"class":228},[79,19382,3283],{"class":448},[79,19384,19385],{"class":89}," \"点在圆内\"",[79,19387,3551],{"class":448},[79,19389,10895],{"class":228},[79,19391,19392],{"class":81,"line":821},[79,19393,4272],{"class":228},[79,19395,19396],{"class":81,"line":837},[79,19397,18849],{"class":448},[79,19399,19400],{"class":81,"line":853},[79,19401,4115],{"class":228},[79,19403,19404,19406,19408,19411,19413],{"class":81,"line":864},[79,19405,11723],{"class":228},[79,19407,3283],{"class":448},[79,19409,19410],{"class":89}," \"点在圆外\"",[79,19412,3551],{"class":448},[79,19414,10895],{"class":228},[79,19416,19417],{"class":81,"line":869},[79,19418,4272],{"class":228},[79,19420,19421],{"class":81,"line":885},[79,19422,3671],{"class":228},[79,19424,19425,19427,19429],{"class":81,"line":891},[79,19426,2262],{"class":448},[79,19428,826],{"class":85},[79,19430,4061],{"class":228},[79,19432,19433],{"class":81,"line":896},[79,19434,3652],{"class":228},[79,19436,19437],{"class":81,"line":907},[79,19438,17085],{"class":2313},[79,19440,19441],{"class":81,"line":912},[79,19442,16833],{"class":228},[79,19444,19445],{"class":81,"line":935},[79,19446,19447],{"class":228},"    Point p1;\n",[79,19449,19450],{"class":81,"line":946},[79,19451,19020],{"class":2313},[79,19453,19454,19456,19458,19461],{"class":81,"line":960},[79,19455,3657],{"class":228},[79,19457,3283],{"class":448},[79,19459,19460],{"class":89},"\"请输入圆的半径：\"",[79,19462,3400],{"class":228},[79,19464,19465,19467],{"class":81,"line":975},[79,19466,16771],{"class":448},[79,19468,19469],{"class":228}," r;\n",[79,19471,19472,19474,19476],{"class":81,"line":980},[79,19473,4097],{"class":228},[79,19475,3536],{"class":448},[79,19477,19478],{"class":228},"r;\n",[79,19480,19481,19483,19486],{"class":81,"line":1006},[79,19482,18627],{"class":228},[79,19484,19485],{"class":85},"setRadius",[79,19487,19488],{"class":228},"(r);\n",[79,19490,19491,19493,19495,19498],{"class":81,"line":1027},[79,19492,3657],{"class":228},[79,19494,3283],{"class":448},[79,19496,19497],{"class":89},"\"请输入圆心坐标：\"",[79,19499,3400],{"class":228},[79,19501,19502,19504],{"class":81,"line":1032},[79,19503,16771],{"class":448},[79,19505,19506],{"class":228}," x, y;\n",[79,19508,19509,19511,19513,19515,19517],{"class":81,"line":1047},[79,19510,4097],{"class":228},[79,19512,3536],{"class":448},[79,19514,3060],{"class":228},[79,19516,3536],{"class":448},[79,19518,19519],{"class":228},"y;\n",[79,19521,19522,19525,19528],{"class":81,"line":1053},[79,19523,19524],{"class":228},"    p1.",[79,19526,19527],{"class":85},"setPoint",[79,19529,19530],{"class":228},"(x, y);\n",[79,19532,19533,19535,19538],{"class":81,"line":1058},[79,19534,18627],{"class":228},[79,19536,19537],{"class":85},"setCenter",[79,19539,19540],{"class":228},"(p1);\n",[79,19542,19543,19545,19547,19550],{"class":81,"line":1069},[79,19544,3657],{"class":228},[79,19546,3283],{"class":448},[79,19548,19549],{"class":89},"\"请输入测试点坐标：\"",[79,19551,3400],{"class":228},[79,19553,19554,19556],{"class":81,"line":1081},[79,19555,16771],{"class":448},[79,19557,19558],{"class":228}," x1, y1;\n",[79,19560,19561,19563,19565,19568,19570],{"class":81,"line":1086},[79,19562,4097],{"class":228},[79,19564,3536],{"class":448},[79,19566,19567],{"class":228},"x1",[79,19569,3536],{"class":448},[79,19571,19572],{"class":228},"y1;\n",[79,19574,19575],{"class":81,"line":1108},[79,19576,19577],{"class":228},"    Point p2;\n",[79,19579,19580,19583,19585],{"class":81,"line":1153},[79,19581,19582],{"class":228},"    p2.",[79,19584,19527],{"class":85},[79,19586,19587],{"class":228},"(x1, y1);\n",[79,19589,19590,19593],{"class":81,"line":1158},[79,19591,19592],{"class":85},"    isInCircle",[79,19594,19595],{"class":228},"(c1, p2);\n",[79,19597,19598],{"class":81,"line":1180},[79,19599,3671],{"class":228},[19,19601,19602],{},"在类中可以让另一个类作为本来的成员",[19,19604,19605],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,19607,19608],{},"创建point.h",[51,19610,19612],{"className":2248,"code":19611,"language":2250,"meta":57,"style":57},"#pragma once \u002F\u002F防止头文件重复包含\n#include\u003Ciostream>\nusing namespace std;\nclass Point\n{\n\u002F\u002F做好声明与变量定义就可以\npublic:\n    \u002F\u002F赋值\n    void setPoint(double x, double y);\n    \u002F\u002F获取坐标\n    double getX();\n    double getY();\n\nprivate:\n    double m_x;\n    double m_y;\n};\n",[59,19613,19614,19625,19631,19641,19647,19651,19656,19660,19664,19684,19688,19696,19704,19708,19712,19718,19724],{"__ignoreMap":57},[79,19615,19616,19619,19622],{"class":81,"line":82},[79,19617,19618],{"class":448},"#pragma",[79,19620,19621],{"class":85}," once",[79,19623,19624],{"class":2313}," \u002F\u002F防止头文件重复包含\n",[79,19626,19627,19629],{"class":81,"line":167},[79,19628,4036],{"class":448},[79,19630,4039],{"class":89},[79,19632,19633,19635,19637,19639],{"class":81,"line":178},[79,19634,4044],{"class":448},[79,19636,4047],{"class":448},[79,19638,4050],{"class":85},[79,19640,3400],{"class":228},[79,19642,19643,19645],{"class":81,"line":545},[79,19644,16727],{"class":448},[79,19646,19007],{"class":85},[79,19648,19649],{"class":81,"line":550},[79,19650,3652],{"class":228},[79,19652,19653],{"class":81,"line":562},[79,19654,19655],{"class":2313},"\u002F\u002F做好声明与变量定义就可以\n",[79,19657,19658],{"class":81,"line":568},[79,19659,16749],{"class":448},[79,19661,19662],{"class":81,"line":574},[79,19663,19020],{"class":2313},[79,19665,19666,19668,19670,19672,19674,19676,19678,19680,19682],{"class":81,"line":579},[79,19667,16942],{"class":448},[79,19669,19027],{"class":85},[79,19671,455],{"class":228},[79,19673,16070],{"class":448},[79,19675,19034],{"class":7284},[79,19677,1020],{"class":228},[79,19679,16070],{"class":448},[79,19681,19041],{"class":7284},[79,19683,4795],{"class":228},[79,19685,19686],{"class":81,"line":585},[79,19687,19059],{"class":2313},[79,19689,19690,19692,19694],{"class":81,"line":591},[79,19691,16771],{"class":448},[79,19693,19066],{"class":85},[79,19695,7704],{"class":228},[79,19697,19698,19700,19702],{"class":81,"line":596},[79,19699,16771],{"class":448},[79,19701,19081],{"class":85},[79,19703,7704],{"class":228},[79,19705,19706],{"class":81,"line":602},[79,19707,542],{"emptyLinePlaceholder":541},[79,19709,19710],{"class":81,"line":608},[79,19711,17254],{"class":448},[79,19713,19714,19716],{"class":81,"line":614},[79,19715,16771],{"class":448},[79,19717,19103],{"class":228},[79,19719,19720,19722],{"class":81,"line":619},[79,19721,16771],{"class":448},[79,19723,19110],{"class":228},[79,19725,19726],{"class":81,"line":625},[79,19727,6068],{"class":228},[19,19729,19730],{},"创建point.cpp",[51,19732,19734],{"className":2248,"code":19733,"language":2250,"meta":57,"style":57},"#include\u003Cpoint.h>\n\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n    void Point::setPoint(double x, double y) { m_x = x; m_y = y; }\n    \u002F\u002F获取坐标\n    double Point::getX() { return m_x; }\n    double Point::getY() { return m_y; }\n",[59,19735,19736,19743,19748,19782,19786,19802],{"__ignoreMap":57},[79,19737,19738,19740],{"class":81,"line":82},[79,19739,4036],{"class":448},[79,19741,19742],{"class":89},"\u003Cpoint.h>\n",[79,19744,19745],{"class":81,"line":167},[79,19746,19747],{"class":2313},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[79,19749,19750,19752,19755,19758,19760,19762,19764,19766,19768,19770,19772,19774,19776,19778,19780],{"class":81,"line":178},[79,19751,16942],{"class":448},[79,19753,19754],{"class":85}," Point",[79,19756,19757],{"class":228},"::",[79,19759,19527],{"class":85},[79,19761,455],{"class":228},[79,19763,16070],{"class":448},[79,19765,19034],{"class":7284},[79,19767,1020],{"class":228},[79,19769,16070],{"class":448},[79,19771,19041],{"class":7284},[79,19773,19044],{"class":228},[79,19775,239],{"class":448},[79,19777,19049],{"class":228},[79,19779,239],{"class":448},[79,19781,19054],{"class":228},[79,19783,19784],{"class":81,"line":545},[79,19785,19059],{"class":2313},[79,19787,19788,19790,19792,19794,19796,19798,19800],{"class":81,"line":550},[79,19789,16771],{"class":448},[79,19791,19754],{"class":85},[79,19793,19757],{"class":228},[79,19795,19289],{"class":85},[79,19797,19069],{"class":228},[79,19799,449],{"class":448},[79,19801,19074],{"class":228},[79,19803,19804,19806,19808,19810,19812,19814,19816],{"class":81,"line":562},[79,19805,16771],{"class":448},[79,19807,19754],{"class":85},[79,19809,19757],{"class":228},[79,19811,19317],{"class":85},[79,19813,19069],{"class":228},[79,19815,449],{"class":448},[79,19817,19088],{"class":228},[19,19819,19820],{},"创建circle.h",[51,19822,19824],{"className":2248,"code":19823,"language":2250,"meta":57,"style":57},"#pragma once\n#include\u003Ciostream>\nusing namespace std;\n#include\u003Cpoint.h>\nclass Circle\n{\npublic:\n    \u002F\u002F赋值\n    void setRadius(double r);\n    void setCenter(Point center);\n    \u002F\u002F获取属性\n    double getRadius();\n    Point getCenter();\n\nprivate:\n    double m_r;\n    \u002F\u002F在类中可以让另一个类作为本来的成员\n    Point m_center;\n};\n",[59,19825,19826,19833,19839,19849,19855,19861,19865,19869,19873,19887,19901,19905,19913,19921,19925,19929,19935,19939,19943],{"__ignoreMap":57},[79,19827,19828,19830],{"class":81,"line":82},[79,19829,19618],{"class":448},[79,19831,19832],{"class":85}," once\n",[79,19834,19835,19837],{"class":81,"line":167},[79,19836,4036],{"class":448},[79,19838,4039],{"class":89},[79,19840,19841,19843,19845,19847],{"class":81,"line":178},[79,19842,4044],{"class":448},[79,19844,4047],{"class":448},[79,19846,4050],{"class":85},[79,19848,3400],{"class":228},[79,19850,19851,19853],{"class":81,"line":545},[79,19852,4036],{"class":448},[79,19854,19742],{"class":89},[79,19856,19857,19859],{"class":81,"line":550},[79,19858,16727],{"class":448},[79,19860,16730],{"class":85},[79,19862,19863],{"class":81,"line":562},[79,19864,3652],{"class":228},[79,19866,19867],{"class":81,"line":568},[79,19868,16749],{"class":448},[79,19870,19871],{"class":81,"line":574},[79,19872,19020],{"class":2313},[79,19874,19875,19877,19879,19881,19883,19885],{"class":81,"line":579},[79,19876,16942],{"class":448},[79,19878,19139],{"class":85},[79,19880,455],{"class":228},[79,19882,16070],{"class":448},[79,19884,19146],{"class":7284},[79,19886,4795],{"class":228},[79,19888,19889,19891,19893,19895,19897,19899],{"class":81,"line":585},[79,19890,16942],{"class":448},[79,19892,19161],{"class":85},[79,19894,455],{"class":228},[79,19896,19166],{"class":85},[79,19898,19169],{"class":7284},[79,19900,4795],{"class":228},[79,19902,19903],{"class":81,"line":591},[79,19904,19182],{"class":2313},[79,19906,19907,19909,19911],{"class":81,"line":596},[79,19908,16771],{"class":448},[79,19910,19189],{"class":85},[79,19912,7704],{"class":228},[79,19914,19915,19917,19919],{"class":81,"line":602},[79,19916,19201],{"class":85},[79,19918,19204],{"class":85},[79,19920,7704],{"class":228},[79,19922,19923],{"class":81,"line":608},[79,19924,542],{"emptyLinePlaceholder":541},[79,19926,19927],{"class":81,"line":614},[79,19928,17254],{"class":448},[79,19930,19931,19933],{"class":81,"line":619},[79,19932,16771],{"class":448},[79,19934,16761],{"class":228},[79,19936,19937],{"class":81,"line":625},[79,19938,19230],{"class":2313},[79,19940,19941],{"class":81,"line":631},[79,19942,19235],{"class":228},[79,19944,19945],{"class":81,"line":637},[79,19946,6068],{"class":228},[19,19948,19949],{},"创建circle.cpp",[51,19951,19953],{"className":2248,"code":19952,"language":2250,"meta":57,"style":57},"#include\u003Ccircle.h>\nvoid Circle::setRadius(double r) { m_r = r; }\nvoid Circle::setCenter(Point center) { m_center = center; }\n\u002F\u002F获取属性\ndouble Circle::getRadius() { return m_r; }\nPoint Circle::getCenter() { return m_center; }\n",[59,19954,19955,19962,19985,20007,20012,20028],{"__ignoreMap":57},[79,19956,19957,19959],{"class":81,"line":82},[79,19958,4036],{"class":448},[79,19960,19961],{"class":89},"\u003Ccircle.h>\n",[79,19963,19964,19966,19969,19971,19973,19975,19977,19979,19981,19983],{"class":81,"line":167},[79,19965,7432],{"class":448},[79,19967,19968],{"class":85}," Circle",[79,19970,19757],{"class":228},[79,19972,19485],{"class":85},[79,19974,455],{"class":228},[79,19976,16070],{"class":448},[79,19978,19146],{"class":7284},[79,19980,19149],{"class":228},[79,19982,239],{"class":448},[79,19984,19154],{"class":228},[79,19986,19987,19989,19991,19993,19995,19997,19999,20001,20003,20005],{"class":81,"line":178},[79,19988,7432],{"class":448},[79,19990,19968],{"class":85},[79,19992,19757],{"class":228},[79,19994,19537],{"class":85},[79,19996,455],{"class":228},[79,19998,19166],{"class":85},[79,20000,19169],{"class":7284},[79,20002,19172],{"class":228},[79,20004,239],{"class":448},[79,20006,19177],{"class":228},[79,20008,20009],{"class":81,"line":545},[79,20010,20011],{"class":2313},"\u002F\u002F获取属性\n",[79,20013,20014,20016,20018,20020,20022,20024,20026],{"class":81,"line":550},[79,20015,16070],{"class":448},[79,20017,19968],{"class":85},[79,20019,19757],{"class":228},[79,20021,19369],{"class":85},[79,20023,19069],{"class":228},[79,20025,449],{"class":448},[79,20027,19196],{"class":228},[79,20029,20030,20032,20034,20036,20038,20040,20042],{"class":81,"line":562},[79,20031,19166],{"class":85},[79,20033,19968],{"class":85},[79,20035,19757],{"class":228},[79,20037,19283],{"class":85},[79,20039,19069],{"class":228},[79,20041,449],{"class":448},[79,20043,19211],{"class":228},[19,20045,20046],{},"使用封装的类",[51,20048,20050],{"className":2248,"code":20049,"language":2250,"meta":57,"style":57},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Ccircle.h>\n#include\u003Cpoint.h>\nvoid isInCircle(Circle &c,Point &p)\n{\n    double dx = c.getCenter().getX() - p.getX();\n    double dy = c.getCenter().getY() - p.getY();\n    double distance = sqrt(dx * dx + dy * dy);\n    if (distance \u003C c.getRadius())\n    {\n        cout \u003C\u003C \"点在圆内\" \u003C\u003C endl;\n    }\n    else\n    {\n        cout \u003C\u003C \"点在圆外\" \u003C\u003C endl;\n    }\n}\nint main()\n{\n    \u002F\u002F实例化\n    Circle c1;\n    Point p1;\n    \u002F\u002F赋值\n    cout\u003C\u003C\"请输入圆的半径：\";\n    double r;\n    cin>>r;\n    c1.setRadius(r);\n    cout\u003C\u003C\"请输入圆心坐标：\";\n    double x, y;\n    cin>>x>>y;\n    p1.setPoint(x, y);\n    c1.setCenter(p1);\n    cout\u003C\u003C\"请输入测试点坐标：\";\n    double x1, y1;\n    cin>>x1>>y1;\n    Point p2;\n    p2.setPoint(x1, y1);\n    isInCircle(c1, p2);\n}\n",[59,20051,20052,20058,20068,20074,20080,20104,20108,20134,20160,20184,20198,20202,20214,20218,20222,20226,20238,20242,20246,20254,20258,20262,20266,20270,20274,20284,20290,20298,20306,20316,20322,20334,20342,20350,20360,20366,20378,20382,20390,20396],{"__ignoreMap":57},[79,20053,20054,20056],{"class":81,"line":82},[79,20055,4036],{"class":448},[79,20057,4039],{"class":89},[79,20059,20060,20062,20064,20066],{"class":81,"line":167},[79,20061,4044],{"class":448},[79,20063,4047],{"class":448},[79,20065,4050],{"class":85},[79,20067,3400],{"class":228},[79,20069,20070,20072],{"class":81,"line":178},[79,20071,4036],{"class":448},[79,20073,19961],{"class":89},[79,20075,20076,20078],{"class":81,"line":545},[79,20077,4036],{"class":448},[79,20079,19742],{"class":89},[79,20081,20082,20084,20086,20088,20090,20092,20094,20096,20098,20100,20102],{"class":81,"line":550},[79,20083,7432],{"class":448},[79,20085,19246],{"class":85},[79,20087,455],{"class":228},[79,20089,19251],{"class":85},[79,20091,12619],{"class":448},[79,20093,2532],{"class":7284},[79,20095,2621],{"class":228},[79,20097,19166],{"class":85},[79,20099,12619],{"class":448},[79,20101,19],{"class":7284},[79,20103,850],{"class":228},[79,20105,20106],{"class":81,"line":562},[79,20107,3652],{"class":228},[79,20109,20110,20112,20114,20116,20118,20120,20122,20124,20126,20128,20130,20132],{"class":81,"line":568},[79,20111,16771],{"class":448},[79,20113,19276],{"class":228},[79,20115,239],{"class":448},[79,20117,18374],{"class":228},[79,20119,19283],{"class":85},[79,20121,19286],{"class":228},[79,20123,19289],{"class":85},[79,20125,15084],{"class":228},[79,20127,478],{"class":448},[79,20129,17920],{"class":228},[79,20131,19289],{"class":85},[79,20133,7704],{"class":228},[79,20135,20136,20138,20140,20142,20144,20146,20148,20150,20152,20154,20156,20158],{"class":81,"line":574},[79,20137,16771],{"class":448},[79,20139,19306],{"class":228},[79,20141,239],{"class":448},[79,20143,18374],{"class":228},[79,20145,19283],{"class":85},[79,20147,19286],{"class":228},[79,20149,19317],{"class":85},[79,20151,15084],{"class":228},[79,20153,478],{"class":448},[79,20155,17920],{"class":228},[79,20157,19317],{"class":85},[79,20159,7704],{"class":228},[79,20161,20162,20164,20166,20168,20170,20172,20174,20176,20178,20180,20182],{"class":81,"line":579},[79,20163,16771],{"class":448},[79,20165,19334],{"class":228},[79,20167,239],{"class":448},[79,20169,19339],{"class":85},[79,20171,19342],{"class":228},[79,20173,473],{"class":448},[79,20175,19276],{"class":228},[79,20177,995],{"class":448},[79,20179,19306],{"class":228},[79,20181,473],{"class":448},[79,20183,19355],{"class":228},[79,20185,20186,20188,20190,20192,20194,20196],{"class":81,"line":585},[79,20187,5176],{"class":448},[79,20189,19362],{"class":228},[79,20191,229],{"class":448},[79,20193,18374],{"class":228},[79,20195,19369],{"class":85},[79,20197,19372],{"class":228},[79,20199,20200],{"class":81,"line":591},[79,20201,4115],{"class":228},[79,20203,20204,20206,20208,20210,20212],{"class":81,"line":596},[79,20205,11723],{"class":228},[79,20207,3283],{"class":448},[79,20209,19385],{"class":89},[79,20211,3551],{"class":448},[79,20213,10895],{"class":228},[79,20215,20216],{"class":81,"line":602},[79,20217,4272],{"class":228},[79,20219,20220],{"class":81,"line":608},[79,20221,18849],{"class":448},[79,20223,20224],{"class":81,"line":614},[79,20225,4115],{"class":228},[79,20227,20228,20230,20232,20234,20236],{"class":81,"line":619},[79,20229,11723],{"class":228},[79,20231,3283],{"class":448},[79,20233,19410],{"class":89},[79,20235,3551],{"class":448},[79,20237,10895],{"class":228},[79,20239,20240],{"class":81,"line":625},[79,20241,4272],{"class":228},[79,20243,20244],{"class":81,"line":631},[79,20245,3671],{"class":228},[79,20247,20248,20250,20252],{"class":81,"line":637},[79,20249,2262],{"class":448},[79,20251,826],{"class":85},[79,20253,4061],{"class":228},[79,20255,20256],{"class":81,"line":643},[79,20257,3652],{"class":228},[79,20259,20260],{"class":81,"line":649},[79,20261,17085],{"class":2313},[79,20263,20264],{"class":81,"line":655},[79,20265,16833],{"class":228},[79,20267,20268],{"class":81,"line":660},[79,20269,19447],{"class":228},[79,20271,20272],{"class":81,"line":666},[79,20273,19020],{"class":2313},[79,20275,20276,20278,20280,20282],{"class":81,"line":672},[79,20277,3657],{"class":228},[79,20279,3283],{"class":448},[79,20281,19460],{"class":89},[79,20283,3400],{"class":228},[79,20285,20286,20288],{"class":81,"line":678},[79,20287,16771],{"class":448},[79,20289,19469],{"class":228},[79,20291,20292,20294,20296],{"class":81,"line":684},[79,20293,4097],{"class":228},[79,20295,3536],{"class":448},[79,20297,19478],{"class":228},[79,20299,20300,20302,20304],{"class":81,"line":690},[79,20301,18627],{"class":228},[79,20303,19485],{"class":85},[79,20305,19488],{"class":228},[79,20307,20308,20310,20312,20314],{"class":81,"line":695},[79,20309,3657],{"class":228},[79,20311,3283],{"class":448},[79,20313,19497],{"class":89},[79,20315,3400],{"class":228},[79,20317,20318,20320],{"class":81,"line":700},[79,20319,16771],{"class":448},[79,20321,19506],{"class":228},[79,20323,20324,20326,20328,20330,20332],{"class":81,"line":712},[79,20325,4097],{"class":228},[79,20327,3536],{"class":448},[79,20329,3060],{"class":228},[79,20331,3536],{"class":448},[79,20333,19519],{"class":228},[79,20335,20336,20338,20340],{"class":81,"line":721},[79,20337,19524],{"class":228},[79,20339,19527],{"class":85},[79,20341,19530],{"class":228},[79,20343,20344,20346,20348],{"class":81,"line":726},[79,20345,18627],{"class":228},[79,20347,19537],{"class":85},[79,20349,19540],{"class":228},[79,20351,20352,20354,20356,20358],{"class":81,"line":731},[79,20353,3657],{"class":228},[79,20355,3283],{"class":448},[79,20357,19549],{"class":89},[79,20359,3400],{"class":228},[79,20361,20362,20364],{"class":81,"line":748},[79,20363,16771],{"class":448},[79,20365,19558],{"class":228},[79,20367,20368,20370,20372,20374,20376],{"class":81,"line":765},[79,20369,4097],{"class":228},[79,20371,3536],{"class":448},[79,20373,19567],{"class":228},[79,20375,3536],{"class":448},[79,20377,19572],{"class":228},[79,20379,20380],{"class":81,"line":780},[79,20381,19577],{"class":228},[79,20383,20384,20386,20388],{"class":81,"line":811},[79,20385,19582],{"class":228},[79,20387,19527],{"class":85},[79,20389,19587],{"class":228},[79,20391,20392,20394],{"class":81,"line":816},[79,20393,19592],{"class":85},[79,20395,19595],{"class":228},[79,20397,20398],{"class":81,"line":821},[79,20399,3671],{"class":228},[14,20401,20403],{"id":20402},"_82对象的初始化清理","8.2对象的初始化清理",[3246,20405,20406,20409],{},[29,20407,20408],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[29,20410,20411],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[339,20413,20415],{"id":20414},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,20417,20418,20419,20422],{},"对象的",[2398,20420,20421],{},"初始化和清理","也是两个非常重要的安全问题",[19,20424,20425],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,20427,20428],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,20430,20431,20432,20435,20436,20439],{},"c++利用了",[2398,20433,20434],{},"构造函数","和",[2398,20437,20438],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,20441,20442,20443],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[2398,20444,20445],{},"我们不提供构造和析构，编译器会提供",[19,20447,20448],{},[2398,20449,20450],{},"编译器提供的构造函数和析构函数是空实现。",[3246,20452,20453,20456],{},[29,20454,20455],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[29,20457,20458,20459,20462],{},"析构函数：主要作用在于对象",[2398,20460,20461],{},"销毁前","系统自动调用，执行一些清理工作。",[19,20464,20465,20468],{},[2398,20466,20467],{},"构造函数语法：",[59,20469,20470],{},"类名(){}",[26,20472,20473,20476,20479,20482,20485],{},[29,20474,20475],{},"构造函数，没有返回值也不写void",[29,20477,20478],{},"函数名称与类名相同",[29,20480,20481],{},"构造函数可以有参数，因此可以发生重载",[29,20483,20484],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[29,20486,20487,20488,2672],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[59,20489,20490],{},"Person(){}",[19,20492,20493,15828,20496],{},[2398,20494,20495],{},"析构函数语法：",[59,20497,20498],{},"~类名(){}",[26,20500,20501,20504,20507,20513],{},[29,20502,20503],{},"析构函数，没有返回值也不写void",[29,20505,20506],{},"函数名称与类名相同,在名称前加上符号  ~",[29,20508,20509,20510],{},"析构函数不可以有参数，因此",[2398,20511,20512],{},"不可以发生重载",[29,20514,20515],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[51,20517,20519],{"className":2248,"code":20518,"language":2250,"meta":57,"style":57},"class Person\n{\npublic:\n    \u002F\u002F构造函数\n    Person()\n    {\n        cout \u003C\u003C \"Person的构造函数调用\" \u003C\u003C endl;\n    }\n    \u002F\u002F析构函数\n    ~Person()\n    {\n        cout \u003C\u003C \"Person的析构函数调用\" \u003C\u003C endl;\n    }\n\n};\n\nvoid test01()\n{\n    Person p;\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n}\n\nint main() {\n    \n    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n\n    Person p;\u002F\u002F只有构造函数\n\n    system(\"pause\");\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n\n    return 0;\n}\n",[59,20520,20521,20527,20531,20535,20540,20547,20551,20564,20568,20573,20580,20584,20597,20601,20605,20609,20613,20621,20625,20633,20637,20641,20649,20653,20658,20662,20669,20673,20686,20690,20698],{"__ignoreMap":57},[79,20522,20523,20525],{"class":81,"line":82},[79,20524,16727],{"class":448},[79,20526,17203],{"class":85},[79,20528,20529],{"class":81,"line":167},[79,20530,3652],{"class":228},[79,20532,20533],{"class":81,"line":178},[79,20534,16749],{"class":448},[79,20536,20537],{"class":81,"line":545},[79,20538,20539],{"class":2313},"    \u002F\u002F构造函数\n",[79,20541,20542,20545],{"class":81,"line":550},[79,20543,20544],{"class":85},"    Person",[79,20546,4061],{"class":228},[79,20548,20549],{"class":81,"line":562},[79,20550,4115],{"class":228},[79,20552,20553,20555,20557,20560,20562],{"class":81,"line":568},[79,20554,11723],{"class":228},[79,20556,3283],{"class":448},[79,20558,20559],{"class":89}," \"Person的构造函数调用\"",[79,20561,3551],{"class":448},[79,20563,10895],{"class":228},[79,20565,20566],{"class":81,"line":574},[79,20567,4272],{"class":228},[79,20569,20570],{"class":81,"line":579},[79,20571,20572],{"class":2313},"    \u002F\u002F析构函数\n",[79,20574,20575,20578],{"class":81,"line":585},[79,20576,20577],{"class":85},"    ~Person",[79,20579,4061],{"class":228},[79,20581,20582],{"class":81,"line":591},[79,20583,4115],{"class":228},[79,20585,20586,20588,20590,20593,20595],{"class":81,"line":596},[79,20587,11723],{"class":228},[79,20589,3283],{"class":448},[79,20591,20592],{"class":89}," \"Person的析构函数调用\"",[79,20594,3551],{"class":448},[79,20596,10895],{"class":228},[79,20598,20599],{"class":81,"line":602},[79,20600,4272],{"class":228},[79,20602,20603],{"class":81,"line":608},[79,20604,542],{"emptyLinePlaceholder":541},[79,20606,20607],{"class":81,"line":614},[79,20608,6068],{"class":228},[79,20610,20611],{"class":81,"line":619},[79,20612,542],{"emptyLinePlaceholder":541},[79,20614,20615,20617,20619],{"class":81,"line":625},[79,20616,7432],{"class":448},[79,20618,7656],{"class":85},[79,20620,4061],{"class":228},[79,20622,20623],{"class":81,"line":631},[79,20624,3652],{"class":228},[79,20626,20627,20630],{"class":81,"line":637},[79,20628,20629],{"class":228},"    Person p;",[79,20631,20632],{"class":2313},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[79,20634,20635],{"class":81,"line":643},[79,20636,3671],{"class":228},[79,20638,20639],{"class":81,"line":649},[79,20640,542],{"emptyLinePlaceholder":541},[79,20642,20643,20645,20647],{"class":81,"line":655},[79,20644,2262],{"class":448},[79,20646,826],{"class":85},[79,20648,12888],{"class":228},[79,20650,20651],{"class":81,"line":660},[79,20652,15244],{"class":228},[79,20654,20655],{"class":81,"line":666},[79,20656,20657],{"class":2313},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[79,20659,20660],{"class":81,"line":672},[79,20661,542],{"emptyLinePlaceholder":541},[79,20663,20664,20666],{"class":81,"line":678},[79,20665,20629],{"class":228},[79,20667,20668],{"class":2313},"\u002F\u002F只有构造函数\n",[79,20670,20671],{"class":81,"line":684},[79,20672,542],{"emptyLinePlaceholder":541},[79,20674,20675,20677,20679,20681,20683],{"class":81,"line":690},[79,20676,4388],{"class":85},[79,20678,455],{"class":228},[79,20680,4393],{"class":89},[79,20682,8033],{"class":228},[79,20684,20685],{"class":2313},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[79,20687,20688],{"class":81,"line":695},[79,20689,542],{"emptyLinePlaceholder":541},[79,20691,20692,20694,20696],{"class":81,"line":700},[79,20693,715],{"class":448},[79,20695,1103],{"class":96},[79,20697,3400],{"class":228},[79,20699,20700],{"class":81,"line":712},[79,20701,3671],{"class":228},[19,20703,20704],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[339,20706,20708],{"id":20707},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,20710,20711],{},"两种分类方式：",[19,20713,20714],{},"​\t按参数分为： 有参构造和无参构造",[19,20716,20717],{},"​\t按类型分为： 普通构造和拷贝构造",[19,20719,20720],{},"三种调用方式：",[19,20722,20723],{},"​\t括号法",[19,20725,20726],{},"​\t显示法",[19,20728,20729],{},"​\t隐式转换法",[51,20731,20733],{"className":2248,"code":20732,"language":2250,"meta":57,"style":57},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F1.构造函数的分类及调用\n\u002F\u002F分类\n\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n\u002F\u002F  按照类型分类 普通构造 拷贝构造\n\nclass Person \n{\npublic:\n    \u002F\u002F构造函数\n    Person()\n    {\n        cout\u003C\u003C\"Person构造函数无参构造\"\u003C\u003Cendl;\n    }\n    Person(int a)\n    {\n        age=a;\n        cout\u003C\u003C\"Person构造函数有参构造\"\u003C\u003Cendl;\n    }\n    \u002F\u002F析构函数\n    ~Person()\n    {\n        cout\u003C\u003C\"Person析构函数被调用\"\u003C\u003Cendl;\n    }\n    \u002F\u002F拷贝构造函数\n    Person(const Person &p)\n    {\n        \u002F\u002F将传入对象的age赋值给当前对象的age\n        age=p.age;\n        cout\u003C\u003C\"Person拷贝构造函数被调用\"\u003C\u003Cendl;\n    }\n    int age;\n};\n\u002F\u002F调用\nvoid test01()\n{\n    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n}\nvoid test02()\n{\n    \u002F\u002F1.括号法\n    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n\n    \u002F\u002F注意事项\n    \u002F\u002F调用默认构造函数时候，不要加()\n    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n    \u002F\u002F Person p4();\n\n    \u002F\u002F2.显示法\n    Person p1;\n    Person p2=Person(10);\n    Person p3=Person(p2);\n    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n\n    \u002F\u002F 注意事项2\n    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n\n    \u002F\u002F3.隐士转换法\n    Person p4=10;  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n    Person p5=p4; \u002F\u002F 这里会调用拷贝构造函数\n}\nint main()\n{\n    test01();\n    test02();\n    return 0;\n}\n",[59,20734,20735,20741,20751,20756,20761,20766,20771,20775,20783,20787,20791,20795,20801,20805,20818,20822,20834,20838,20847,20860,20864,20868,20874,20878,20891,20895,20900,20916,20920,20925,20934,20947,20951,20957,20961,20966,20974,20978,20983,20987,20995,20999,21004,21009,21014,21019,21024,21028,21033,21038,21043,21048,21052,21057,21062,21078,21090,21095,21099,21104,21109,21114,21118,21123,21137,21150,21154,21162,21166,21172,21178,21186],{"__ignoreMap":57},[79,20736,20737,20739],{"class":81,"line":82},[79,20738,4036],{"class":448},[79,20740,4039],{"class":89},[79,20742,20743,20745,20747,20749],{"class":81,"line":167},[79,20744,4044],{"class":448},[79,20746,4047],{"class":448},[79,20748,4050],{"class":85},[79,20750,3400],{"class":228},[79,20752,20753],{"class":81,"line":178},[79,20754,20755],{"class":2313},"\u002F\u002F1.构造函数的分类及调用\n",[79,20757,20758],{"class":81,"line":545},[79,20759,20760],{"class":2313},"\u002F\u002F分类\n",[79,20762,20763],{"class":81,"line":550},[79,20764,20765],{"class":2313},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[79,20767,20768],{"class":81,"line":562},[79,20769,20770],{"class":2313},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[79,20772,20773],{"class":81,"line":568},[79,20774,542],{"emptyLinePlaceholder":541},[79,20776,20777,20779,20781],{"class":81,"line":574},[79,20778,16727],{"class":448},[79,20780,17601],{"class":85},[79,20782,4750],{"class":228},[79,20784,20785],{"class":81,"line":579},[79,20786,3652],{"class":228},[79,20788,20789],{"class":81,"line":585},[79,20790,16749],{"class":448},[79,20792,20793],{"class":81,"line":591},[79,20794,20539],{"class":2313},[79,20796,20797,20799],{"class":81,"line":596},[79,20798,20544],{"class":85},[79,20800,4061],{"class":228},[79,20802,20803],{"class":81,"line":602},[79,20804,4115],{"class":228},[79,20806,20807,20809,20811,20814,20816],{"class":81,"line":608},[79,20808,5525],{"class":228},[79,20810,3283],{"class":448},[79,20812,20813],{"class":89},"\"Person构造函数无参构造\"",[79,20815,3283],{"class":448},[79,20817,3305],{"class":228},[79,20819,20820],{"class":81,"line":614},[79,20821,4272],{"class":228},[79,20823,20824,20826,20828,20830,20832],{"class":81,"line":619},[79,20825,20544],{"class":85},[79,20827,455],{"class":228},[79,20829,2262],{"class":448},[79,20831,3505],{"class":7284},[79,20833,850],{"class":228},[79,20835,20836],{"class":81,"line":625},[79,20837,4115],{"class":228},[79,20839,20840,20843,20845],{"class":81,"line":631},[79,20841,20842],{"class":228},"        age",[79,20844,239],{"class":448},[79,20846,8264],{"class":228},[79,20848,20849,20851,20853,20856,20858],{"class":81,"line":637},[79,20850,5525],{"class":228},[79,20852,3283],{"class":448},[79,20854,20855],{"class":89},"\"Person构造函数有参构造\"",[79,20857,3283],{"class":448},[79,20859,3305],{"class":228},[79,20861,20862],{"class":81,"line":643},[79,20863,4272],{"class":228},[79,20865,20866],{"class":81,"line":649},[79,20867,20572],{"class":2313},[79,20869,20870,20872],{"class":81,"line":655},[79,20871,20577],{"class":85},[79,20873,4061],{"class":228},[79,20875,20876],{"class":81,"line":660},[79,20877,4115],{"class":228},[79,20879,20880,20882,20884,20887,20889],{"class":81,"line":666},[79,20881,5525],{"class":228},[79,20883,3283],{"class":448},[79,20885,20886],{"class":89},"\"Person析构函数被调用\"",[79,20888,3283],{"class":448},[79,20890,3305],{"class":228},[79,20892,20893],{"class":81,"line":672},[79,20894,4272],{"class":228},[79,20896,20897],{"class":81,"line":678},[79,20898,20899],{"class":2313},"    \u002F\u002F拷贝构造函数\n",[79,20901,20902,20904,20906,20908,20910,20912,20914],{"class":81,"line":684},[79,20903,20544],{"class":85},[79,20905,455],{"class":228},[79,20907,8857],{"class":448},[79,20909,17601],{"class":85},[79,20911,12619],{"class":448},[79,20913,19],{"class":7284},[79,20915,850],{"class":228},[79,20917,20918],{"class":81,"line":690},[79,20919,4115],{"class":228},[79,20921,20922],{"class":81,"line":695},[79,20923,20924],{"class":2313},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[79,20926,20927,20929,20931],{"class":81,"line":700},[79,20928,20842],{"class":228},[79,20930,239],{"class":448},[79,20932,20933],{"class":228},"p.age;\n",[79,20935,20936,20938,20940,20943,20945],{"class":81,"line":712},[79,20937,5525],{"class":228},[79,20939,3283],{"class":448},[79,20941,20942],{"class":89},"\"Person拷贝构造函数被调用\"",[79,20944,3283],{"class":448},[79,20946,3305],{"class":228},[79,20948,20949],{"class":81,"line":721},[79,20950,4272],{"class":228},[79,20952,20953,20955],{"class":81,"line":726},[79,20954,4070],{"class":448},[79,20956,9862],{"class":228},[79,20958,20959],{"class":81,"line":731},[79,20960,6068],{"class":228},[79,20962,20963],{"class":81,"line":748},[79,20964,20965],{"class":2313},"\u002F\u002F调用\n",[79,20967,20968,20970,20972],{"class":81,"line":765},[79,20969,7432],{"class":448},[79,20971,7656],{"class":85},[79,20973,4061],{"class":228},[79,20975,20976],{"class":81,"line":780},[79,20977,3652],{"class":228},[79,20979,20980],{"class":81,"line":811},[79,20981,20982],{"class":2313},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[79,20984,20985],{"class":81,"line":816},[79,20986,3671],{"class":228},[79,20988,20989,20991,20993],{"class":81,"line":821},[79,20990,7432],{"class":448},[79,20992,7725],{"class":85},[79,20994,4061],{"class":228},[79,20996,20997],{"class":81,"line":837},[79,20998,3652],{"class":228},[79,21000,21001],{"class":81,"line":853},[79,21002,21003],{"class":2313},"    \u002F\u002F1.括号法\n",[79,21005,21006],{"class":81,"line":864},[79,21007,21008],{"class":2313},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[79,21010,21011],{"class":81,"line":869},[79,21012,21013],{"class":2313},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[79,21015,21016],{"class":81,"line":885},[79,21017,21018],{"class":2313},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[79,21020,21021],{"class":81,"line":891},[79,21022,21023],{"class":2313},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[79,21025,21026],{"class":81,"line":896},[79,21027,542],{"emptyLinePlaceholder":541},[79,21029,21030],{"class":81,"line":907},[79,21031,21032],{"class":2313},"    \u002F\u002F注意事项\n",[79,21034,21035],{"class":81,"line":912},[79,21036,21037],{"class":2313},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[79,21039,21040],{"class":81,"line":935},[79,21041,21042],{"class":2313},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[79,21044,21045],{"class":81,"line":946},[79,21046,21047],{"class":2313},"    \u002F\u002F Person p4();\n",[79,21049,21050],{"class":81,"line":960},[79,21051,542],{"emptyLinePlaceholder":541},[79,21053,21054],{"class":81,"line":975},[79,21055,21056],{"class":2313},"    \u002F\u002F2.显示法\n",[79,21058,21059],{"class":81,"line":980},[79,21060,21061],{"class":228},"    Person p1;\n",[79,21063,21064,21067,21069,21072,21074,21076],{"class":81,"line":1006},[79,21065,21066],{"class":228},"    Person p2",[79,21068,239],{"class":448},[79,21070,21071],{"class":85},"Person",[79,21073,455],{"class":228},[79,21075,2689],{"class":96},[79,21077,4795],{"class":228},[79,21079,21080,21083,21085,21087],{"class":81,"line":1027},[79,21081,21082],{"class":228},"    Person p3",[79,21084,239],{"class":448},[79,21086,21071],{"class":85},[79,21088,21089],{"class":228},"(p2);\n",[79,21091,21092],{"class":81,"line":1032},[79,21093,21094],{"class":2313},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[79,21096,21097],{"class":81,"line":1047},[79,21098,542],{"emptyLinePlaceholder":541},[79,21100,21101],{"class":81,"line":1053},[79,21102,21103],{"class":2313},"    \u002F\u002F 注意事项2\n",[79,21105,21106],{"class":81,"line":1058},[79,21107,21108],{"class":2313},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[79,21110,21111],{"class":81,"line":1069},[79,21112,21113],{"class":2313},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[79,21115,21116],{"class":81,"line":1081},[79,21117,542],{"emptyLinePlaceholder":541},[79,21119,21120],{"class":81,"line":1086},[79,21121,21122],{"class":2313},"    \u002F\u002F3.隐士转换法\n",[79,21124,21125,21128,21130,21132,21134],{"class":81,"line":1108},[79,21126,21127],{"class":228},"    Person p4",[79,21129,239],{"class":448},[79,21131,2689],{"class":96},[79,21133,2310],{"class":228},[79,21135,21136],{"class":2313},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[79,21138,21139,21142,21144,21147],{"class":81,"line":1153},[79,21140,21141],{"class":228},"    Person p5",[79,21143,239],{"class":448},[79,21145,21146],{"class":228},"p4;",[79,21148,21149],{"class":2313}," \u002F\u002F 这里会调用拷贝构造函数\n",[79,21151,21152],{"class":81,"line":1158},[79,21153,3671],{"class":228},[79,21155,21156,21158,21160],{"class":81,"line":1180},[79,21157,2262],{"class":448},[79,21159,826],{"class":85},[79,21161,4061],{"class":228},[79,21163,21164],{"class":81,"line":1197},[79,21165,3652],{"class":228},[79,21167,21168,21170],{"class":81,"line":1202},[79,21169,7701],{"class":85},[79,21171,7704],{"class":228},[79,21173,21174,21176],{"class":81,"line":1207},[79,21175,7770],{"class":85},[79,21177,7704],{"class":228},[79,21179,21180,21182,21184],{"class":81,"line":1223},[79,21181,715],{"class":448},[79,21183,1103],{"class":96},[79,21185,3400],{"class":228},[79,21187,21188],{"class":81,"line":18722},[79,21189,3671],{"class":228},[19,21191,21192,21195],{},[2398,21193,21194],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[339,21197,21199],{"id":21198},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,21201,21202],{},"C++中拷贝构造函数调用时机通常有三种情况",[3246,21204,21205,21208,21211],{},[29,21206,21207],{},"使用一个已经创建完毕的对象来初始化一个新对象",[29,21209,21210],{},"值传递的方式给函数参数传值",[29,21212,21213],{},"以值方式返回局部对象",[51,21215,21217],{"className":2248,"code":21216,"language":2250,"meta":57,"style":57},"#include\u003Ciostream>\nusing namespace std;\n\n\u002F\u002F拷贝构造函数调用时机\n\n\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n\u002F\u002F2.值传递的方式给函数参数传值\n\u002F\u002F3.以值方式返回局部对象\nclass Person\n{\npublic:\n    Person()\n    {\n        cout \u003C\u003C \"Person的默认构造函数调用\" \u003C\u003C endl;\n    }\n    \u002F\u002F有参构造\n    Person(int age)\n    {\n        m_Age = age;\n        cout \u003C\u003C \"Person的有参构造函数调用\" \u003C\u003C endl;\n    }\n    \u002F\u002F拷贝构造函数\n    Person(const Person &p)\n    {\n        m_Age = p.m_Age;\n        cout \u003C\u003C \"Person的拷贝构造函数调用\" \u003C\u003C endl;\n    }\n    ~Person()\n    {\n        cout \u003C\u003C \"Person的析构函数调用\" \u003C\u003C endl;\n    }\n    int m_Age;\n};\n\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\nvoid test01()\n{\n    Person p1(20);\n    Person p2(p1);\n    cout\u003C\u003C\"P2的年龄为：\"\u003C\u003Cp2.m_Age\u003C\u003Cendl;\n}\n\u002F\u002F 2.值传递的方式给函数参数传值\n\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\nvoid doWork(Person p)\n{\n    cout \u003C\u003C \"doWork函数调用\" \u003C\u003C endl;\n}\nvoid test02()\n{\n    Person p;\n    doWork(p);\n}\n\u002F\u002F 3.以值方式返回局部对象\nPerson doWork2()\n{\n    Person p1;\n    cout\u003C\u003C(int *)&p1\u003C\u003Cendl;\u002F\u002F打印p1的地址\n    return p1;\u002F\u002F返回局部对象，调用拷贝构造函数\n}\nvoid test03()\n{\n    Person p = doWork2();\n    cout\u003C\u003C(int *)&p\u003C\u003Cendl;\u002F\u002F打印p的地址\n}\n\n\nint main()\n{\n    \u002F\u002F test01();\n    \u002F\u002F test02();\n    test03();\n\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n\u002F\u002F 输出结果如下：\n\u002F\u002F Person的默认构造函数调用\n\u002F\u002F 0x7fffffffceec\n\u002F\u002F 0x7fffffffceec\n\u002F\u002F Person的析构函数调用\n\n\u002F\u002F 之前的输出结果如下：\n\u002F\u002F Person的默认构造函数调用\n\u002F\u002F 地址\n\u002F\u002F Person的拷贝构造函数调用\n\u002F\u002F Person的析构函数调用\n\u002F\u002F 地址\n\u002F\u002F (这两次输出的地址也是不同的) \n\u002F\u002F Person的析构函数调用     \n    return 0;\n}\n",[59,21218,21219,21225,21235,21239,21244,21248,21253,21258,21263,21269,21273,21277,21283,21287,21300,21304,21309,21321,21325,21333,21346,21350,21354,21370,21374,21383,21396,21400,21406,21410,21422,21426,21432,21436,21440,21448,21452,21465,21473,21491,21495,21500,21505,21520,21524,21537,21541,21549,21553,21557,21565,21569,21574,21583,21587,21591,21616,21626,21630,21638,21642,21653,21678,21682,21686,21690,21698,21702,21707,21712,21719,21724,21729,21734,21739,21743,21748,21752,21757,21761,21766,21771,21775,21779,21784,21789,21797],{"__ignoreMap":57},[79,21220,21221,21223],{"class":81,"line":82},[79,21222,4036],{"class":448},[79,21224,4039],{"class":89},[79,21226,21227,21229,21231,21233],{"class":81,"line":167},[79,21228,4044],{"class":448},[79,21230,4047],{"class":448},[79,21232,4050],{"class":85},[79,21234,3400],{"class":228},[79,21236,21237],{"class":81,"line":178},[79,21238,542],{"emptyLinePlaceholder":541},[79,21240,21241],{"class":81,"line":545},[79,21242,21243],{"class":2313},"\u002F\u002F拷贝构造函数调用时机\n",[79,21245,21246],{"class":81,"line":550},[79,21247,542],{"emptyLinePlaceholder":541},[79,21249,21250],{"class":81,"line":562},[79,21251,21252],{"class":2313},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[79,21254,21255],{"class":81,"line":568},[79,21256,21257],{"class":2313},"\u002F\u002F2.值传递的方式给函数参数传值\n",[79,21259,21260],{"class":81,"line":574},[79,21261,21262],{"class":2313},"\u002F\u002F3.以值方式返回局部对象\n",[79,21264,21265,21267],{"class":81,"line":579},[79,21266,16727],{"class":448},[79,21268,17203],{"class":85},[79,21270,21271],{"class":81,"line":585},[79,21272,3652],{"class":228},[79,21274,21275],{"class":81,"line":591},[79,21276,16749],{"class":448},[79,21278,21279,21281],{"class":81,"line":596},[79,21280,20544],{"class":85},[79,21282,4061],{"class":228},[79,21284,21285],{"class":81,"line":602},[79,21286,4115],{"class":228},[79,21288,21289,21291,21293,21296,21298],{"class":81,"line":608},[79,21290,11723],{"class":228},[79,21292,3283],{"class":448},[79,21294,21295],{"class":89}," \"Person的默认构造函数调用\"",[79,21297,3551],{"class":448},[79,21299,10895],{"class":228},[79,21301,21302],{"class":81,"line":614},[79,21303,4272],{"class":228},[79,21305,21306],{"class":81,"line":619},[79,21307,21308],{"class":2313},"    \u002F\u002F有参构造\n",[79,21310,21311,21313,21315,21317,21319],{"class":81,"line":625},[79,21312,20544],{"class":85},[79,21314,455],{"class":228},[79,21316,2262],{"class":448},[79,21318,17721],{"class":7284},[79,21320,850],{"class":228},[79,21322,21323],{"class":81,"line":631},[79,21324,4115],{"class":228},[79,21326,21327,21329,21331],{"class":81,"line":637},[79,21328,17775],{"class":228},[79,21330,239],{"class":448},[79,21332,9862],{"class":228},[79,21334,21335,21337,21339,21342,21344],{"class":81,"line":643},[79,21336,11723],{"class":228},[79,21338,3283],{"class":448},[79,21340,21341],{"class":89}," \"Person的有参构造函数调用\"",[79,21343,3551],{"class":448},[79,21345,10895],{"class":228},[79,21347,21348],{"class":81,"line":649},[79,21349,4272],{"class":228},[79,21351,21352],{"class":81,"line":655},[79,21353,20899],{"class":2313},[79,21355,21356,21358,21360,21362,21364,21366,21368],{"class":81,"line":660},[79,21357,20544],{"class":85},[79,21359,455],{"class":228},[79,21361,8857],{"class":448},[79,21363,17601],{"class":85},[79,21365,12619],{"class":448},[79,21367,19],{"class":7284},[79,21369,850],{"class":228},[79,21371,21372],{"class":81,"line":666},[79,21373,4115],{"class":228},[79,21375,21376,21378,21380],{"class":81,"line":672},[79,21377,17775],{"class":228},[79,21379,239],{"class":448},[79,21381,21382],{"class":228}," p.m_Age;\n",[79,21384,21385,21387,21389,21392,21394],{"class":81,"line":678},[79,21386,11723],{"class":228},[79,21388,3283],{"class":448},[79,21390,21391],{"class":89}," \"Person的拷贝构造函数调用\"",[79,21393,3551],{"class":448},[79,21395,10895],{"class":228},[79,21397,21398],{"class":81,"line":684},[79,21399,4272],{"class":228},[79,21401,21402,21404],{"class":81,"line":690},[79,21403,20577],{"class":85},[79,21405,4061],{"class":228},[79,21407,21408],{"class":81,"line":695},[79,21409,4115],{"class":228},[79,21411,21412,21414,21416,21418,21420],{"class":81,"line":700},[79,21413,11723],{"class":228},[79,21415,3283],{"class":448},[79,21417,20592],{"class":89},[79,21419,3551],{"class":448},[79,21421,10895],{"class":228},[79,21423,21424],{"class":81,"line":712},[79,21425,4272],{"class":228},[79,21427,21428,21430],{"class":81,"line":721},[79,21429,4070],{"class":448},[79,21431,17698],{"class":228},[79,21433,21434],{"class":81,"line":726},[79,21435,6068],{"class":228},[79,21437,21438],{"class":81,"line":731},[79,21439,21252],{"class":2313},[79,21441,21442,21444,21446],{"class":81,"line":748},[79,21443,7432],{"class":448},[79,21445,7656],{"class":85},[79,21447,4061],{"class":228},[79,21449,21450],{"class":81,"line":765},[79,21451,3652],{"class":228},[79,21453,21454,21457,21459,21461,21463],{"class":81,"line":780},[79,21455,21456],{"class":228},"    Person ",[79,21458,9195],{"class":85},[79,21460,455],{"class":228},[79,21462,2940],{"class":96},[79,21464,4795],{"class":228},[79,21466,21467,21469,21471],{"class":81,"line":811},[79,21468,21456],{"class":228},[79,21470,9098],{"class":85},[79,21472,19540],{"class":228},[79,21474,21475,21477,21479,21482,21484,21487,21489],{"class":81,"line":816},[79,21476,3657],{"class":228},[79,21478,3283],{"class":448},[79,21480,21481],{"class":89},"\"P2的年龄为：\"",[79,21483,3283],{"class":448},[79,21485,21486],{"class":228},"p2.m_Age",[79,21488,3283],{"class":448},[79,21490,3305],{"class":228},[79,21492,21493],{"class":81,"line":821},[79,21494,3671],{"class":228},[79,21496,21497],{"class":81,"line":837},[79,21498,21499],{"class":2313},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[79,21501,21502],{"class":81,"line":853},[79,21503,21504],{"class":2313},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[79,21506,21507,21509,21512,21514,21516,21518],{"class":81,"line":864},[79,21508,7432],{"class":448},[79,21510,21511],{"class":85}," doWork",[79,21513,455],{"class":228},[79,21515,21071],{"class":85},[79,21517,8890],{"class":7284},[79,21519,850],{"class":228},[79,21521,21522],{"class":81,"line":869},[79,21523,3652],{"class":228},[79,21525,21526,21528,21530,21533,21535],{"class":81,"line":885},[79,21527,8594],{"class":228},[79,21529,3283],{"class":448},[79,21531,21532],{"class":89}," \"doWork函数调用\"",[79,21534,3551],{"class":448},[79,21536,10895],{"class":228},[79,21538,21539],{"class":81,"line":891},[79,21540,3671],{"class":228},[79,21542,21543,21545,21547],{"class":81,"line":896},[79,21544,7432],{"class":448},[79,21546,7725],{"class":85},[79,21548,4061],{"class":228},[79,21550,21551],{"class":81,"line":907},[79,21552,3652],{"class":228},[79,21554,21555],{"class":81,"line":912},[79,21556,17345],{"class":228},[79,21558,21559,21562],{"class":81,"line":935},[79,21560,21561],{"class":85},"    doWork",[79,21563,21564],{"class":228},"(p);\n",[79,21566,21567],{"class":81,"line":946},[79,21568,3671],{"class":228},[79,21570,21571],{"class":81,"line":960},[79,21572,21573],{"class":2313},"\u002F\u002F 3.以值方式返回局部对象\n",[79,21575,21576,21578,21581],{"class":81,"line":975},[79,21577,21071],{"class":85},[79,21579,21580],{"class":85}," doWork2",[79,21582,4061],{"class":228},[79,21584,21585],{"class":81,"line":980},[79,21586,3652],{"class":228},[79,21588,21589],{"class":81,"line":1006},[79,21590,21061],{"class":228},[79,21592,21593,21595,21597,21599,21601,21603,21605,21607,21609,21611,21613],{"class":81,"line":1027},[79,21594,3657],{"class":228},[79,21596,3283],{"class":448},[79,21598,455],{"class":228},[79,21600,2262],{"class":448},[79,21602,467],{"class":448},[79,21604,2672],{"class":228},[79,21606,2596],{"class":448},[79,21608,9195],{"class":228},[79,21610,3283],{"class":448},[79,21612,3348],{"class":228},[79,21614,21615],{"class":2313},"\u002F\u002F打印p1的地址\n",[79,21617,21618,21620,21623],{"class":81,"line":1032},[79,21619,715],{"class":448},[79,21621,21622],{"class":228}," p1;",[79,21624,21625],{"class":2313},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[79,21627,21628],{"class":81,"line":1047},[79,21629,3671],{"class":228},[79,21631,21632,21634,21636],{"class":81,"line":1053},[79,21633,7432],{"class":448},[79,21635,7797],{"class":85},[79,21637,4061],{"class":228},[79,21639,21640],{"class":81,"line":1058},[79,21641,3652],{"class":228},[79,21643,21644,21647,21649,21651],{"class":81,"line":1069},[79,21645,21646],{"class":228},"    Person p ",[79,21648,239],{"class":448},[79,21650,21580],{"class":85},[79,21652,7704],{"class":228},[79,21654,21655,21657,21659,21661,21663,21665,21667,21669,21671,21673,21675],{"class":81,"line":1081},[79,21656,3657],{"class":228},[79,21658,3283],{"class":448},[79,21660,455],{"class":228},[79,21662,2262],{"class":448},[79,21664,467],{"class":448},[79,21666,2672],{"class":228},[79,21668,2596],{"class":448},[79,21670,19],{"class":228},[79,21672,3283],{"class":448},[79,21674,3348],{"class":228},[79,21676,21677],{"class":2313},"\u002F\u002F打印p的地址\n",[79,21679,21680],{"class":81,"line":1086},[79,21681,3671],{"class":228},[79,21683,21684],{"class":81,"line":1108},[79,21685,542],{"emptyLinePlaceholder":541},[79,21687,21688],{"class":81,"line":1153},[79,21689,542],{"emptyLinePlaceholder":541},[79,21691,21692,21694,21696],{"class":81,"line":1158},[79,21693,2262],{"class":448},[79,21695,826],{"class":85},[79,21697,4061],{"class":228},[79,21699,21700],{"class":81,"line":1180},[79,21701,3652],{"class":228},[79,21703,21704],{"class":81,"line":1197},[79,21705,21706],{"class":2313},"    \u002F\u002F test01();\n",[79,21708,21709],{"class":81,"line":1202},[79,21710,21711],{"class":2313},"    \u002F\u002F test02();\n",[79,21713,21714,21717],{"class":81,"line":1207},[79,21715,21716],{"class":85},"    test03",[79,21718,7704],{"class":228},[79,21720,21721],{"class":81,"line":1223},[79,21722,21723],{"class":2313},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[79,21725,21726],{"class":81,"line":18722},[79,21727,21728],{"class":2313},"\u002F\u002F 输出结果如下：\n",[79,21730,21731],{"class":81,"line":18728},[79,21732,21733],{"class":2313},"\u002F\u002F Person的默认构造函数调用\n",[79,21735,21736],{"class":81,"line":18739},[79,21737,21738],{"class":2313},"\u002F\u002F 0x7fffffffceec\n",[79,21740,21741],{"class":81,"line":18762},[79,21742,21738],{"class":2313},[79,21744,21745],{"class":81,"line":18784},[79,21746,21747],{"class":2313},"\u002F\u002F Person的析构函数调用\n",[79,21749,21750],{"class":81,"line":18789},[79,21751,542],{"emptyLinePlaceholder":541},[79,21753,21754],{"class":81,"line":18795},[79,21755,21756],{"class":2313},"\u002F\u002F 之前的输出结果如下：\n",[79,21758,21759],{"class":81,"line":18809},[79,21760,21733],{"class":2313},[79,21762,21763],{"class":81,"line":18822},[79,21764,21765],{"class":2313},"\u002F\u002F 地址\n",[79,21767,21768],{"class":81,"line":18827},[79,21769,21770],{"class":2313},"\u002F\u002F Person的拷贝构造函数调用\n",[79,21772,21773],{"class":81,"line":18841},[79,21774,21747],{"class":2313},[79,21776,21777],{"class":81,"line":18846},[79,21778,21765],{"class":2313},[79,21780,21781],{"class":81,"line":18852},[79,21782,21783],{"class":2313},"\u002F\u002F (这两次输出的地址也是不同的) \n",[79,21785,21786],{"class":81,"line":18857},[79,21787,21788],{"class":2313},"\u002F\u002F Person的析构函数调用     \n",[79,21790,21791,21793,21795],{"class":81,"line":18871},[79,21792,715],{"class":448},[79,21794,1103],{"class":96},[79,21796,3400],{"class":228},[79,21798,21799],{"class":81,"line":18876},[79,21800,3671],{"class":228},[19,21802,21803],{},"简化版理解",[51,21805,21807],{"className":2248,"code":21806,"language":2250,"meta":57,"style":57},"class Person {\npublic:\n    Person() {\n        cout \u003C\u003C \"无参构造函数!\" \u003C\u003C endl;\n        mAge = 0;\n    }\n    Person(int age) {\n        cout \u003C\u003C \"有参构造函数!\" \u003C\u003C endl;\n        mAge = age;\n    }\n    Person(const Person& p) {\n        cout \u003C\u003C \"拷贝构造函数!\" \u003C\u003C endl;\n        mAge = p.mAge;\n    }\n    \u002F\u002F析构函数在释放内存之前调用\n    ~Person() {\n        cout \u003C\u003C \"析构函数!\" \u003C\u003C endl;\n    }\npublic:\n    int mAge;\n};\n\n\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\nvoid test01() {\n\n    Person man(100); \u002F\u002Fp对象已经创建完毕\n    Person newman(man); \u002F\u002F调用拷贝构造函数\n    Person newman2 = man; \u002F\u002F拷贝构造\n\n    \u002F\u002FPerson newman3;\n    \u002F\u002Fnewman3 = man; \u002F\u002F不是调用拷贝构造函数，赋值操作\n}\n\n\u002F\u002F2. 值传递的方式给函数参数传值\n\u002F\u002F相当于Person p1 = p;\nvoid doWork(Person p1) {}\nvoid test02() {\n    Person p; \u002F\u002F无参构造函数\n    doWork(p);\n}\n\n\u002F\u002F3. 以值方式返回局部对象\nPerson doWork2()\n{\n    Person p1;\n    cout \u003C\u003C (int *)&p1 \u003C\u003C endl;\n    return p1;\n}\n\nvoid test03()\n{\n    Person p = doWork2();\n    cout \u003C\u003C (int *)&p \u003C\u003C endl;\n}\n\n\nint main() {\n\n    \u002F\u002Ftest01();\n    \u002F\u002Ftest02();\n    test03();\n\n    system(\"pause\");\n\n    return 0;\n}\n",[59,21808,21809,21817,21821,21827,21840,21851,21855,21867,21880,21888,21892,21908,21921,21930,21934,21939,21945,21958,21962,21966,21973,21977,21981,21986,21994,21998,22014,22027,22040,22044,22049,22057,22061,22065,22070,22075,22091,22099,22106,22112,22116,22120,22125,22133,22137,22141,22164,22171,22175,22179,22187,22191,22201,22223,22227,22231,22235,22243,22247,22252,22257,22263,22267,22277,22281,22289],{"__ignoreMap":57},[79,21810,21811,21813,21815],{"class":81,"line":82},[79,21812,16727],{"class":448},[79,21814,17601],{"class":85},[79,21816,17604],{"class":228},[79,21818,21819],{"class":81,"line":167},[79,21820,16749],{"class":448},[79,21822,21823,21825],{"class":81,"line":178},[79,21824,20544],{"class":85},[79,21826,12888],{"class":228},[79,21828,21829,21831,21833,21836,21838],{"class":81,"line":545},[79,21830,11723],{"class":228},[79,21832,3283],{"class":448},[79,21834,21835],{"class":89}," \"无参构造函数!\"",[79,21837,3551],{"class":448},[79,21839,10895],{"class":228},[79,21841,21842,21845,21847,21849],{"class":81,"line":550},[79,21843,21844],{"class":228},"        mAge ",[79,21846,239],{"class":448},[79,21848,1103],{"class":96},[79,21850,3400],{"class":228},[79,21852,21853],{"class":81,"line":562},[79,21854,4272],{"class":228},[79,21856,21857,21859,21861,21863,21865],{"class":81,"line":568},[79,21858,20544],{"class":85},[79,21860,455],{"class":228},[79,21862,2262],{"class":448},[79,21864,17721],{"class":7284},[79,21866,14476],{"class":228},[79,21868,21869,21871,21873,21876,21878],{"class":81,"line":574},[79,21870,11723],{"class":228},[79,21872,3283],{"class":448},[79,21874,21875],{"class":89}," \"有参构造函数!\"",[79,21877,3551],{"class":448},[79,21879,10895],{"class":228},[79,21881,21882,21884,21886],{"class":81,"line":579},[79,21883,21844],{"class":228},[79,21885,239],{"class":448},[79,21887,9862],{"class":228},[79,21889,21890],{"class":81,"line":585},[79,21891,4272],{"class":228},[79,21893,21894,21896,21898,21900,21902,21904,21906],{"class":81,"line":591},[79,21895,20544],{"class":85},[79,21897,455],{"class":228},[79,21899,8857],{"class":448},[79,21901,17601],{"class":85},[79,21903,2596],{"class":448},[79,21905,8890],{"class":7284},[79,21907,14476],{"class":228},[79,21909,21910,21912,21914,21917,21919],{"class":81,"line":596},[79,21911,11723],{"class":228},[79,21913,3283],{"class":448},[79,21915,21916],{"class":89}," \"拷贝构造函数!\"",[79,21918,3551],{"class":448},[79,21920,10895],{"class":228},[79,21922,21923,21925,21927],{"class":81,"line":602},[79,21924,21844],{"class":228},[79,21926,239],{"class":448},[79,21928,21929],{"class":228}," p.mAge;\n",[79,21931,21932],{"class":81,"line":608},[79,21933,4272],{"class":228},[79,21935,21936],{"class":81,"line":614},[79,21937,21938],{"class":2313},"    \u002F\u002F析构函数在释放内存之前调用\n",[79,21940,21941,21943],{"class":81,"line":619},[79,21942,20577],{"class":85},[79,21944,12888],{"class":228},[79,21946,21947,21949,21951,21954,21956],{"class":81,"line":625},[79,21948,11723],{"class":228},[79,21950,3283],{"class":448},[79,21952,21953],{"class":89}," \"析构函数!\"",[79,21955,3551],{"class":448},[79,21957,10895],{"class":228},[79,21959,21960],{"class":81,"line":631},[79,21961,4272],{"class":228},[79,21963,21964],{"class":81,"line":637},[79,21965,16749],{"class":448},[79,21967,21968,21970],{"class":81,"line":643},[79,21969,4070],{"class":448},[79,21971,21972],{"class":228}," mAge;\n",[79,21974,21975],{"class":81,"line":649},[79,21976,6068],{"class":228},[79,21978,21979],{"class":81,"line":655},[79,21980,542],{"emptyLinePlaceholder":541},[79,21982,21983],{"class":81,"line":660},[79,21984,21985],{"class":2313},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[79,21987,21988,21990,21992],{"class":81,"line":666},[79,21989,7432],{"class":448},[79,21991,7656],{"class":85},[79,21993,12888],{"class":228},[79,21995,21996],{"class":81,"line":672},[79,21997,542],{"emptyLinePlaceholder":541},[79,21999,22000,22002,22005,22007,22009,22011],{"class":81,"line":678},[79,22001,21456],{"class":228},[79,22003,22004],{"class":85},"man",[79,22006,455],{"class":228},[79,22008,2555],{"class":96},[79,22010,8033],{"class":228},[79,22012,22013],{"class":2313}," \u002F\u002Fp对象已经创建完毕\n",[79,22015,22016,22018,22021,22024],{"class":81,"line":684},[79,22017,21456],{"class":228},[79,22019,22020],{"class":85},"newman",[79,22022,22023],{"class":228},"(man);",[79,22025,22026],{"class":2313}," \u002F\u002F调用拷贝构造函数\n",[79,22028,22029,22032,22034,22037],{"class":81,"line":690},[79,22030,22031],{"class":228},"    Person newman2 ",[79,22033,239],{"class":448},[79,22035,22036],{"class":228}," man;",[79,22038,22039],{"class":2313}," \u002F\u002F拷贝构造\n",[79,22041,22042],{"class":81,"line":695},[79,22043,542],{"emptyLinePlaceholder":541},[79,22045,22046],{"class":81,"line":700},[79,22047,22048],{"class":2313},"    \u002F\u002FPerson newman3;\n",[79,22050,22051,22054],{"class":81,"line":712},[79,22052,22053],{"class":2313},"    \u002F\u002Fnewman3 = man;",[79,22055,22056],{"class":2313}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[79,22058,22059],{"class":81,"line":721},[79,22060,3671],{"class":228},[79,22062,22063],{"class":81,"line":726},[79,22064,542],{"emptyLinePlaceholder":541},[79,22066,22067],{"class":81,"line":731},[79,22068,22069],{"class":2313},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[79,22071,22072],{"class":81,"line":748},[79,22073,22074],{"class":2313},"\u002F\u002F相当于Person p1 = p;\n",[79,22076,22077,22079,22081,22083,22085,22088],{"class":81,"line":765},[79,22078,7432],{"class":448},[79,22080,21511],{"class":85},[79,22082,455],{"class":228},[79,22084,21071],{"class":85},[79,22086,22087],{"class":7284}," p1",[79,22089,22090],{"class":228},") {}\n",[79,22092,22093,22095,22097],{"class":81,"line":780},[79,22094,7432],{"class":448},[79,22096,7725],{"class":85},[79,22098,12888],{"class":228},[79,22100,22101,22103],{"class":81,"line":811},[79,22102,20629],{"class":228},[79,22104,22105],{"class":2313}," \u002F\u002F无参构造函数\n",[79,22107,22108,22110],{"class":81,"line":816},[79,22109,21561],{"class":85},[79,22111,21564],{"class":228},[79,22113,22114],{"class":81,"line":821},[79,22115,3671],{"class":228},[79,22117,22118],{"class":81,"line":837},[79,22119,542],{"emptyLinePlaceholder":541},[79,22121,22122],{"class":81,"line":853},[79,22123,22124],{"class":2313},"\u002F\u002F3. 以值方式返回局部对象\n",[79,22126,22127,22129,22131],{"class":81,"line":864},[79,22128,21071],{"class":85},[79,22130,21580],{"class":85},[79,22132,4061],{"class":228},[79,22134,22135],{"class":81,"line":869},[79,22136,3652],{"class":228},[79,22138,22139],{"class":81,"line":885},[79,22140,21061],{"class":228},[79,22142,22143,22145,22147,22149,22151,22153,22155,22157,22160,22162],{"class":81,"line":891},[79,22144,8594],{"class":228},[79,22146,3283],{"class":448},[79,22148,3757],{"class":228},[79,22150,2262],{"class":448},[79,22152,467],{"class":448},[79,22154,2672],{"class":228},[79,22156,2596],{"class":448},[79,22158,22159],{"class":228},"p1 ",[79,22161,3283],{"class":448},[79,22163,10895],{"class":228},[79,22165,22166,22168],{"class":81,"line":896},[79,22167,715],{"class":448},[79,22169,22170],{"class":228}," p1;\n",[79,22172,22173],{"class":81,"line":907},[79,22174,3671],{"class":228},[79,22176,22177],{"class":81,"line":912},[79,22178,542],{"emptyLinePlaceholder":541},[79,22180,22181,22183,22185],{"class":81,"line":935},[79,22182,7432],{"class":448},[79,22184,7797],{"class":85},[79,22186,4061],{"class":228},[79,22188,22189],{"class":81,"line":946},[79,22190,3652],{"class":228},[79,22192,22193,22195,22197,22199],{"class":81,"line":960},[79,22194,21646],{"class":228},[79,22196,239],{"class":448},[79,22198,21580],{"class":85},[79,22200,7704],{"class":228},[79,22202,22203,22205,22207,22209,22211,22213,22215,22217,22219,22221],{"class":81,"line":975},[79,22204,8594],{"class":228},[79,22206,3283],{"class":448},[79,22208,3757],{"class":228},[79,22210,2262],{"class":448},[79,22212,467],{"class":448},[79,22214,2672],{"class":228},[79,22216,2596],{"class":448},[79,22218,13483],{"class":228},[79,22220,3283],{"class":448},[79,22222,10895],{"class":228},[79,22224,22225],{"class":81,"line":980},[79,22226,3671],{"class":228},[79,22228,22229],{"class":81,"line":1006},[79,22230,542],{"emptyLinePlaceholder":541},[79,22232,22233],{"class":81,"line":1027},[79,22234,542],{"emptyLinePlaceholder":541},[79,22236,22237,22239,22241],{"class":81,"line":1032},[79,22238,2262],{"class":448},[79,22240,826],{"class":85},[79,22242,12888],{"class":228},[79,22244,22245],{"class":81,"line":1047},[79,22246,542],{"emptyLinePlaceholder":541},[79,22248,22249],{"class":81,"line":1053},[79,22250,22251],{"class":2313},"    \u002F\u002Ftest01();\n",[79,22253,22254],{"class":81,"line":1058},[79,22255,22256],{"class":2313},"    \u002F\u002Ftest02();\n",[79,22258,22259,22261],{"class":81,"line":1069},[79,22260,21716],{"class":85},[79,22262,7704],{"class":228},[79,22264,22265],{"class":81,"line":1081},[79,22266,542],{"emptyLinePlaceholder":541},[79,22268,22269,22271,22273,22275],{"class":81,"line":1086},[79,22270,4388],{"class":85},[79,22272,455],{"class":228},[79,22274,4393],{"class":89},[79,22276,4795],{"class":228},[79,22278,22279],{"class":81,"line":1108},[79,22280,542],{"emptyLinePlaceholder":541},[79,22282,22283,22285,22287],{"class":81,"line":1153},[79,22284,715],{"class":448},[79,22286,1103],{"class":96},[79,22288,3400],{"class":228},[79,22290,22291],{"class":81,"line":1158},[79,22292,3671],{"class":228},[339,22294,22296],{"id":22295},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,22298,22299],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,22301,22302],{},"1．默认构造函数(无参，函数体为空)",[19,22304,22305],{},"2．默认析构函数(无参，函数体为空)",[19,22307,22308],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,22310,22311],{},"构造函数调用规则如下：",[3246,22313,22314,22317],{},[29,22315,22316],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[29,22318,22319],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[51,22321,22323],{"className":2248,"code":22322,"language":2250,"meta":57,"style":57},"class Person {\npublic:\n    \u002F\u002F无参（默认）构造函数\n    Person() {\n        cout \u003C\u003C \"无参构造函数!\" \u003C\u003C endl;\n    }\n    \u002F\u002F有参构造函数\n    Person(int a) {\n        age = a;\n        cout \u003C\u003C \"有参构造函数!\" \u003C\u003C endl;\n    }\n    \u002F\u002F拷贝构造函数\n    Person(const Person& p) {\n        age = p.age;\n        cout \u003C\u003C \"拷贝构造函数!\" \u003C\u003C endl;\n    }\n    \u002F\u002F析构函数\n    ~Person() {\n        cout \u003C\u003C \"析构函数!\" \u003C\u003C endl;\n    }\npublic:\n    int age;\n};\n\nvoid test01()\n{\n    Person p1(18);\n    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n    Person p2(p1);\n\n    cout \u003C\u003C \"p2的年龄为： \" \u003C\u003C p2.age \u003C\u003C endl;\n}\n\nvoid test02()\n{\n    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n    Person p1; \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n    Person p2(10); \u002F\u002F用户提供的有参\n    Person p3(p2); \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n\n    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n    Person p4; \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n    Person p5(10); \u002F\u002F此时如果用户自己没有提供有参，会出错\n    Person p6(p5); \u002F\u002F用户自己提供拷贝构造\n}\n\nint main() {\n\n    test01();\n\n    system(\"pause\");\n\n    return 0;\n}\n",[59,22324,22325,22333,22337,22342,22348,22360,22364,22369,22381,22390,22402,22406,22410,22426,22435,22447,22451,22455,22461,22473,22477,22481,22487,22491,22495,22503,22507,22519,22524,22532,22536,22554,22558,22562,22570,22574,22579,22587,22602,22615,22619,22624,22631,22647,22660,22664,22668,22676,22680,22686,22690,22700,22704,22712],{"__ignoreMap":57},[79,22326,22327,22329,22331],{"class":81,"line":82},[79,22328,16727],{"class":448},[79,22330,17601],{"class":85},[79,22332,17604],{"class":228},[79,22334,22335],{"class":81,"line":167},[79,22336,16749],{"class":448},[79,22338,22339],{"class":81,"line":178},[79,22340,22341],{"class":2313},"    \u002F\u002F无参（默认）构造函数\n",[79,22343,22344,22346],{"class":81,"line":545},[79,22345,20544],{"class":85},[79,22347,12888],{"class":228},[79,22349,22350,22352,22354,22356,22358],{"class":81,"line":550},[79,22351,11723],{"class":228},[79,22353,3283],{"class":448},[79,22355,21835],{"class":89},[79,22357,3551],{"class":448},[79,22359,10895],{"class":228},[79,22361,22362],{"class":81,"line":562},[79,22363,4272],{"class":228},[79,22365,22366],{"class":81,"line":568},[79,22367,22368],{"class":2313},"    \u002F\u002F有参构造函数\n",[79,22370,22371,22373,22375,22377,22379],{"class":81,"line":574},[79,22372,20544],{"class":85},[79,22374,455],{"class":228},[79,22376,2262],{"class":448},[79,22378,3505],{"class":7284},[79,22380,14476],{"class":228},[79,22382,22383,22386,22388],{"class":81,"line":579},[79,22384,22385],{"class":228},"        age ",[79,22387,239],{"class":448},[79,22389,3539],{"class":228},[79,22391,22392,22394,22396,22398,22400],{"class":81,"line":585},[79,22393,11723],{"class":228},[79,22395,3283],{"class":448},[79,22397,21875],{"class":89},[79,22399,3551],{"class":448},[79,22401,10895],{"class":228},[79,22403,22404],{"class":81,"line":591},[79,22405,4272],{"class":228},[79,22407,22408],{"class":81,"line":596},[79,22409,20899],{"class":2313},[79,22411,22412,22414,22416,22418,22420,22422,22424],{"class":81,"line":602},[79,22413,20544],{"class":85},[79,22415,455],{"class":228},[79,22417,8857],{"class":448},[79,22419,17601],{"class":85},[79,22421,2596],{"class":448},[79,22423,8890],{"class":7284},[79,22425,14476],{"class":228},[79,22427,22428,22430,22432],{"class":81,"line":608},[79,22429,22385],{"class":228},[79,22431,239],{"class":448},[79,22433,22434],{"class":228}," p.age;\n",[79,22436,22437,22439,22441,22443,22445],{"class":81,"line":614},[79,22438,11723],{"class":228},[79,22440,3283],{"class":448},[79,22442,21916],{"class":89},[79,22444,3551],{"class":448},[79,22446,10895],{"class":228},[79,22448,22449],{"class":81,"line":619},[79,22450,4272],{"class":228},[79,22452,22453],{"class":81,"line":625},[79,22454,20572],{"class":2313},[79,22456,22457,22459],{"class":81,"line":631},[79,22458,20577],{"class":85},[79,22460,12888],{"class":228},[79,22462,22463,22465,22467,22469,22471],{"class":81,"line":637},[79,22464,11723],{"class":228},[79,22466,3283],{"class":448},[79,22468,21953],{"class":89},[79,22470,3551],{"class":448},[79,22472,10895],{"class":228},[79,22474,22475],{"class":81,"line":643},[79,22476,4272],{"class":228},[79,22478,22479],{"class":81,"line":649},[79,22480,16749],{"class":448},[79,22482,22483,22485],{"class":81,"line":655},[79,22484,4070],{"class":448},[79,22486,9862],{"class":228},[79,22488,22489],{"class":81,"line":660},[79,22490,6068],{"class":228},[79,22492,22493],{"class":81,"line":666},[79,22494,542],{"emptyLinePlaceholder":541},[79,22496,22497,22499,22501],{"class":81,"line":672},[79,22498,7432],{"class":448},[79,22500,7656],{"class":85},[79,22502,4061],{"class":228},[79,22504,22505],{"class":81,"line":678},[79,22506,3652],{"class":228},[79,22508,22509,22511,22513,22515,22517],{"class":81,"line":684},[79,22510,21456],{"class":228},[79,22512,9195],{"class":85},[79,22514,455],{"class":228},[79,22516,2890],{"class":96},[79,22518,4795],{"class":228},[79,22520,22521],{"class":81,"line":690},[79,22522,22523],{"class":2313},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[79,22525,22526,22528,22530],{"class":81,"line":695},[79,22527,21456],{"class":228},[79,22529,9098],{"class":85},[79,22531,19540],{"class":228},[79,22533,22534],{"class":81,"line":700},[79,22535,542],{"emptyLinePlaceholder":541},[79,22537,22538,22540,22542,22545,22547,22550,22552],{"class":81,"line":712},[79,22539,8594],{"class":228},[79,22541,3283],{"class":448},[79,22543,22544],{"class":89}," \"p2的年龄为： \"",[79,22546,3551],{"class":448},[79,22548,22549],{"class":228}," p2.age ",[79,22551,3283],{"class":448},[79,22553,10895],{"class":228},[79,22555,22556],{"class":81,"line":721},[79,22557,3671],{"class":228},[79,22559,22560],{"class":81,"line":726},[79,22561,542],{"emptyLinePlaceholder":541},[79,22563,22564,22566,22568],{"class":81,"line":731},[79,22565,7432],{"class":448},[79,22567,7725],{"class":85},[79,22569,4061],{"class":228},[79,22571,22572],{"class":81,"line":748},[79,22573,3652],{"class":228},[79,22575,22576],{"class":81,"line":765},[79,22577,22578],{"class":2313},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[79,22580,22581,22584],{"class":81,"line":780},[79,22582,22583],{"class":228},"    Person p1;",[79,22585,22586],{"class":2313}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[79,22588,22589,22591,22593,22595,22597,22599],{"class":81,"line":811},[79,22590,21456],{"class":228},[79,22592,9098],{"class":85},[79,22594,455],{"class":228},[79,22596,2689],{"class":96},[79,22598,8033],{"class":228},[79,22600,22601],{"class":2313}," \u002F\u002F用户提供的有参\n",[79,22603,22604,22606,22609,22612],{"class":81,"line":816},[79,22605,21456],{"class":228},[79,22607,22608],{"class":85},"p3",[79,22610,22611],{"class":228},"(p2);",[79,22613,22614],{"class":2313}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[79,22616,22617],{"class":81,"line":821},[79,22618,542],{"emptyLinePlaceholder":541},[79,22620,22621],{"class":81,"line":837},[79,22622,22623],{"class":2313},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[79,22625,22626,22629],{"class":81,"line":853},[79,22627,22628],{"class":228},"    Person p4;",[79,22630,22586],{"class":2313},[79,22632,22633,22635,22638,22640,22642,22644],{"class":81,"line":864},[79,22634,21456],{"class":228},[79,22636,22637],{"class":85},"p5",[79,22639,455],{"class":228},[79,22641,2689],{"class":96},[79,22643,8033],{"class":228},[79,22645,22646],{"class":2313}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[79,22648,22649,22651,22654,22657],{"class":81,"line":869},[79,22650,21456],{"class":228},[79,22652,22653],{"class":85},"p6",[79,22655,22656],{"class":228},"(p5);",[79,22658,22659],{"class":2313}," \u002F\u002F用户自己提供拷贝构造\n",[79,22661,22662],{"class":81,"line":885},[79,22663,3671],{"class":228},[79,22665,22666],{"class":81,"line":891},[79,22667,542],{"emptyLinePlaceholder":541},[79,22669,22670,22672,22674],{"class":81,"line":896},[79,22671,2262],{"class":448},[79,22673,826],{"class":85},[79,22675,12888],{"class":228},[79,22677,22678],{"class":81,"line":907},[79,22679,542],{"emptyLinePlaceholder":541},[79,22681,22682,22684],{"class":81,"line":912},[79,22683,7701],{"class":85},[79,22685,7704],{"class":228},[79,22687,22688],{"class":81,"line":935},[79,22689,542],{"emptyLinePlaceholder":541},[79,22691,22692,22694,22696,22698],{"class":81,"line":946},[79,22693,4388],{"class":85},[79,22695,455],{"class":228},[79,22697,4393],{"class":89},[79,22699,4795],{"class":228},[79,22701,22702],{"class":81,"line":960},[79,22703,542],{"emptyLinePlaceholder":541},[79,22705,22706,22708,22710],{"class":81,"line":975},[79,22707,715],{"class":448},[79,22709,1103],{"class":96},[79,22711,3400],{"class":228},[79,22713,22714],{"class":81,"line":980},[79,22715,3671],{"class":228},[339,22717,22719],{"id":22718},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,22721,22722],{},"浅拷贝：简单的赋值拷贝操作",[19,22724,22725],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[51,22727,22729],{"className":2248,"code":22728,"language":2250,"meta":57,"style":57},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\npublic:\n    \u002F\u002F默认构造函数\n    Person()\n    {\n        cout\u003C\u003C\"默认构造函数\"\u003C\u003Cendl;\n    }\n    \u002F\u002F有参构造函数\n    ~Person(int age,int height)\n    {\n        m_Age=age;\n        m_Height=new int(height);\u002F\u002F放到堆区\n        cout\u003C\u003C\"有参构造函数\"\u003C\u003Cendl;\n    }\n    \u002F\u002F深拷贝解决上述问题\n    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n    Person(const Person &p)\n    {\n        cout\u003C\u003C\"拷贝构造函数\"\u003C\u003Cendl;\n        \u002F\u002F编译器默认的写如下注释部分\n        \u002F\u002Fm_Age=p.m_Age;\n        \u002F\u002Fm_Height=p.m_Height;\n        m_Age=p.m_Age;\n        \u002F\u002F深拷贝操作\n        m_Height=new int(*p.m_Height);\n    }\n\n    \u002F\u002F析构函数\n    ~Person()\n    {\n        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n        if(m_Height != NULL)\n        {\n            delete m_Height; \u002F\u002F释放堆区内存\n            m_Height=NULL; \u002F\u002F防止野指针\n        }\n        cout\u003C\u003C\"Person的析构函数调用\"\n    }\n    int m_Age;\n    int *m_Height; \u002F\u002F定义一个指针，指向身高\n};\nvoid test01()\n{\n    Person p1(18,160);\n    cout\u003C\u003C\"p1的年龄为:\"\u003C\u003Cp1.m_Age\u003C\u003C\"身高为：\"\u003C\u003C*p1.m_Height\u003C\u003Cendl;  \u002F\u002F18\n    Person p2(p1);\n    cout\u003C\u003C\"p2的年龄为：\"\u003C\u003Cp2.m_Age\u003C\u003C\"身高为：\"\u003C\u003C*p2.m_Height\u003C\u003Cendl;  \u002F\u002F18\n    \n}\nint main()\n{\n    test01();\n}\n",[59,22730,22731,22737,22747,22753,22757,22761,22766,22772,22776,22789,22793,22797,22804,22808,22818,22833,22846,22850,22855,22860,22876,22880,22893,22898,22903,22908,22917,22922,22937,22941,22945,22949,22955,22959,22964,22979,22983,22994,23008,23012,23021,23025,23031,23043,23047,23055,23059,23076,23107,23115,23143,23147,23151,23159,23163,23169],{"__ignoreMap":57},[79,22732,22733,22735],{"class":81,"line":82},[79,22734,4036],{"class":448},[79,22736,4039],{"class":89},[79,22738,22739,22741,22743,22745],{"class":81,"line":167},[79,22740,4044],{"class":448},[79,22742,4047],{"class":448},[79,22744,4050],{"class":85},[79,22746,3400],{"class":228},[79,22748,22749,22751],{"class":81,"line":178},[79,22750,16727],{"class":448},[79,22752,17203],{"class":85},[79,22754,22755],{"class":81,"line":545},[79,22756,3652],{"class":228},[79,22758,22759],{"class":81,"line":550},[79,22760,16749],{"class":448},[79,22762,22763],{"class":81,"line":562},[79,22764,22765],{"class":2313},"    \u002F\u002F默认构造函数\n",[79,22767,22768,22770],{"class":81,"line":568},[79,22769,20544],{"class":85},[79,22771,4061],{"class":228},[79,22773,22774],{"class":81,"line":574},[79,22775,4115],{"class":228},[79,22777,22778,22780,22782,22785,22787],{"class":81,"line":579},[79,22779,5525],{"class":228},[79,22781,3283],{"class":448},[79,22783,22784],{"class":89},"\"默认构造函数\"",[79,22786,3283],{"class":448},[79,22788,3305],{"class":228},[79,22790,22791],{"class":81,"line":585},[79,22792,4272],{"class":228},[79,22794,22795],{"class":81,"line":591},[79,22796,22368],{"class":2313},[79,22798,22799,22801],{"class":81,"line":596},[79,22800,20577],{"class":85},[79,22802,22803],{"class":228},"(int age,int height)\n",[79,22805,22806],{"class":81,"line":602},[79,22807,4115],{"class":228},[79,22809,22810,22813,22815],{"class":81,"line":608},[79,22811,22812],{"class":228},"        m_Age",[79,22814,239],{"class":448},[79,22816,22817],{"class":228},"age;\n",[79,22819,22820,22823,22825,22827,22830],{"class":81,"line":614},[79,22821,22822],{"class":228},"        m_Height",[79,22824,13752],{"class":448},[79,22826,4467],{"class":448},[79,22828,22829],{"class":228},"(height);",[79,22831,22832],{"class":2313},"\u002F\u002F放到堆区\n",[79,22834,22835,22837,22839,22842,22844],{"class":81,"line":619},[79,22836,5525],{"class":228},[79,22838,3283],{"class":448},[79,22840,22841],{"class":89},"\"有参构造函数\"",[79,22843,3283],{"class":448},[79,22845,3305],{"class":228},[79,22847,22848],{"class":81,"line":625},[79,22849,4272],{"class":228},[79,22851,22852],{"class":81,"line":631},[79,22853,22854],{"class":2313},"    \u002F\u002F深拷贝解决上述问题\n",[79,22856,22857],{"class":81,"line":637},[79,22858,22859],{"class":2313},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[79,22861,22862,22864,22866,22868,22870,22872,22874],{"class":81,"line":643},[79,22863,20544],{"class":85},[79,22865,455],{"class":228},[79,22867,8857],{"class":448},[79,22869,17601],{"class":85},[79,22871,12619],{"class":448},[79,22873,19],{"class":7284},[79,22875,850],{"class":228},[79,22877,22878],{"class":81,"line":649},[79,22879,4115],{"class":228},[79,22881,22882,22884,22886,22889,22891],{"class":81,"line":655},[79,22883,5525],{"class":228},[79,22885,3283],{"class":448},[79,22887,22888],{"class":89},"\"拷贝构造函数\"",[79,22890,3283],{"class":448},[79,22892,3305],{"class":228},[79,22894,22895],{"class":81,"line":660},[79,22896,22897],{"class":2313},"        \u002F\u002F编译器默认的写如下注释部分\n",[79,22899,22900],{"class":81,"line":666},[79,22901,22902],{"class":2313},"        \u002F\u002Fm_Age=p.m_Age;\n",[79,22904,22905],{"class":81,"line":672},[79,22906,22907],{"class":2313},"        \u002F\u002Fm_Height=p.m_Height;\n",[79,22909,22910,22912,22914],{"class":81,"line":678},[79,22911,22812],{"class":228},[79,22913,239],{"class":448},[79,22915,22916],{"class":228},"p.m_Age;\n",[79,22918,22919],{"class":81,"line":684},[79,22920,22921],{"class":2313},"        \u002F\u002F深拷贝操作\n",[79,22923,22924,22926,22928,22930,22932,22934],{"class":81,"line":690},[79,22925,22822],{"class":228},[79,22927,13752],{"class":448},[79,22929,4467],{"class":448},[79,22931,455],{"class":228},[79,22933,473],{"class":448},[79,22935,22936],{"class":228},"p.m_Height);\n",[79,22938,22939],{"class":81,"line":695},[79,22940,4272],{"class":228},[79,22942,22943],{"class":81,"line":700},[79,22944,542],{"emptyLinePlaceholder":541},[79,22946,22947],{"class":81,"line":712},[79,22948,20572],{"class":2313},[79,22950,22951,22953],{"class":81,"line":721},[79,22952,20577],{"class":85},[79,22954,4061],{"class":228},[79,22956,22957],{"class":81,"line":726},[79,22958,4115],{"class":228},[79,22960,22961],{"class":81,"line":731},[79,22962,22963],{"class":2313},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[79,22965,22966,22968,22971,22974,22977],{"class":81,"line":748},[79,22967,1089],{"class":448},[79,22969,22970],{"class":228},"(m_Height ",[79,22972,22973],{"class":448},"!=",[79,22975,22976],{"class":96}," NULL",[79,22978,850],{"class":228},[79,22980,22981],{"class":81,"line":765},[79,22982,4593],{"class":228},[79,22984,22985,22988,22991],{"class":81,"line":780},[79,22986,22987],{"class":448},"            delete",[79,22989,22990],{"class":228}," m_Height;",[79,22992,22993],{"class":2313}," \u002F\u002F释放堆区内存\n",[79,22995,22996,22999,23001,23003,23005],{"class":81,"line":811},[79,22997,22998],{"class":228},"            m_Height",[79,23000,239],{"class":448},[79,23002,4477],{"class":96},[79,23004,2310],{"class":228},[79,23006,23007],{"class":2313}," \u002F\u002F防止野指针\n",[79,23009,23010],{"class":81,"line":816},[79,23011,4612],{"class":228},[79,23013,23014,23016,23018],{"class":81,"line":821},[79,23015,5525],{"class":228},[79,23017,3283],{"class":448},[79,23019,23020],{"class":89},"\"Person的析构函数调用\"\n",[79,23022,23023],{"class":81,"line":837},[79,23024,4272],{"class":228},[79,23026,23027,23029],{"class":81,"line":853},[79,23028,4070],{"class":448},[79,23030,17698],{"class":228},[79,23032,23033,23035,23037,23040],{"class":81,"line":864},[79,23034,4070],{"class":448},[79,23036,467],{"class":448},[79,23038,23039],{"class":228},"m_Height;",[79,23041,23042],{"class":2313}," \u002F\u002F定义一个指针，指向身高\n",[79,23044,23045],{"class":81,"line":869},[79,23046,6068],{"class":228},[79,23048,23049,23051,23053],{"class":81,"line":885},[79,23050,7432],{"class":448},[79,23052,7656],{"class":85},[79,23054,4061],{"class":228},[79,23056,23057],{"class":81,"line":891},[79,23058,3652],{"class":228},[79,23060,23061,23063,23065,23067,23069,23071,23074],{"class":81,"line":896},[79,23062,21456],{"class":228},[79,23064,9195],{"class":85},[79,23066,455],{"class":228},[79,23068,2890],{"class":96},[79,23070,2621],{"class":228},[79,23072,23073],{"class":96},"160",[79,23075,4795],{"class":228},[79,23077,23078,23080,23082,23085,23087,23090,23092,23095,23097,23100,23102,23104],{"class":81,"line":907},[79,23079,3657],{"class":228},[79,23081,3283],{"class":448},[79,23083,23084],{"class":89},"\"p1的年龄为:\"",[79,23086,3283],{"class":448},[79,23088,23089],{"class":228},"p1.m_Age",[79,23091,3283],{"class":448},[79,23093,23094],{"class":89},"\"身高为：\"",[79,23096,8485],{"class":448},[79,23098,23099],{"class":228},"p1.m_Height",[79,23101,3283],{"class":448},[79,23103,3348],{"class":228},[79,23105,23106],{"class":2313},"  \u002F\u002F18\n",[79,23108,23109,23111,23113],{"class":81,"line":912},[79,23110,21456],{"class":228},[79,23112,9098],{"class":85},[79,23114,19540],{"class":228},[79,23116,23117,23119,23121,23124,23126,23128,23130,23132,23134,23137,23139,23141],{"class":81,"line":935},[79,23118,3657],{"class":228},[79,23120,3283],{"class":448},[79,23122,23123],{"class":89},"\"p2的年龄为：\"",[79,23125,3283],{"class":448},[79,23127,21486],{"class":228},[79,23129,3283],{"class":448},[79,23131,23094],{"class":89},[79,23133,8485],{"class":448},[79,23135,23136],{"class":228},"p2.m_Height",[79,23138,3283],{"class":448},[79,23140,3348],{"class":228},[79,23142,23106],{"class":2313},[79,23144,23145],{"class":81,"line":946},[79,23146,15244],{"class":228},[79,23148,23149],{"class":81,"line":960},[79,23150,3671],{"class":228},[79,23152,23153,23155,23157],{"class":81,"line":975},[79,23154,2262],{"class":448},[79,23156,826],{"class":85},[79,23158,4061],{"class":228},[79,23160,23161],{"class":81,"line":980},[79,23162,3652],{"class":228},[79,23164,23165,23167],{"class":81,"line":1006},[79,23166,7701],{"class":85},[79,23168,7704],{"class":228},[79,23170,23171],{"class":81,"line":1027},[79,23172,3671],{"class":228},[19,23174,23175],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,23177,23178],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,23180,23181],{},[3569,23182],{"alt":57,"src":23183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,23185,23186],{},"浅拷贝问题要使用深拷贝来解决",[19,23188,23189],{},[3569,23190],{"alt":57,"src":23191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,23193,23194],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[339,23196,23198],{"id":23197},"_826初始化列表","8.2.6初始化列表",[19,23200,23201],{},"作用：初始化属性",[19,23203,7251],{},[51,23205,23208],{"className":23206,"code":23207,"language":56},[54],"构造函数():属性1(值1),属性2(值2).....{}\n",[59,23209,23207],{"__ignoreMap":57},[19,23211,23212],{},"例子",[51,23214,23216],{"className":2248,"code":23215,"language":2250,"meta":57,"style":57},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\n    public:\n\n    \u002F\u002F\u002F\u002F传统方式初始化\n    \u002F\u002FPerson(int a, int b, int c) {\n    \u002F\u002F  m_A = a;\n    \u002F\u002F  m_B = b;\n    \u002F\u002F  m_C = c;\n    \u002F\u002F}\n\n    \u002F\u002F初始化列表方式初始化\n    \u002F\u002F使用有参构造函数\n    Person(int a, int b, int c) :m_A(a), m_B(b), m_C(c) {}\n    void PrintPerson() {\n        cout \u003C\u003C \"mA:\" \u003C\u003C m_A \u003C\u003C endl;\n        cout \u003C\u003C \"mB:\" \u003C\u003C m_B \u003C\u003C endl;\n        cout \u003C\u003C \"mC:\" \u003C\u003C m_C \u003C\u003C endl;\n    }\nprivate:\n    int m_A;\n    int m_B;\n    int m_C;\n};\n\nint main() \n{\n\n    Person p(1, 2, 3);\n    p.PrintPerson();\n\n\n    system(\"pause\");\n\n    return 0;\n}\n",[59,23217,23218,23224,23234,23240,23244,23249,23253,23258,23263,23268,23273,23278,23283,23287,23292,23297,23340,23349,23367,23385,23403,23407,23411,23418,23425,23432,23436,23440,23448,23452,23456,23476,23485,23489,23493,23503,23507,23515],{"__ignoreMap":57},[79,23219,23220,23222],{"class":81,"line":82},[79,23221,4036],{"class":448},[79,23223,4039],{"class":89},[79,23225,23226,23228,23230,23232],{"class":81,"line":167},[79,23227,4044],{"class":448},[79,23229,4047],{"class":448},[79,23231,4050],{"class":85},[79,23233,3400],{"class":228},[79,23235,23236,23238],{"class":81,"line":178},[79,23237,16727],{"class":448},[79,23239,17203],{"class":85},[79,23241,23242],{"class":81,"line":545},[79,23243,3652],{"class":228},[79,23245,23246],{"class":81,"line":550},[79,23247,23248],{"class":448},"    public:\n",[79,23250,23251],{"class":81,"line":562},[79,23252,542],{"emptyLinePlaceholder":541},[79,23254,23255],{"class":81,"line":568},[79,23256,23257],{"class":2313},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[79,23259,23260],{"class":81,"line":574},[79,23261,23262],{"class":2313},"    \u002F\u002FPerson(int a, int b, int c) {\n",[79,23264,23265],{"class":81,"line":579},[79,23266,23267],{"class":2313},"    \u002F\u002F  m_A = a;\n",[79,23269,23270],{"class":81,"line":585},[79,23271,23272],{"class":2313},"    \u002F\u002F  m_B = b;\n",[79,23274,23275],{"class":81,"line":591},[79,23276,23277],{"class":2313},"    \u002F\u002F  m_C = c;\n",[79,23279,23280],{"class":81,"line":596},[79,23281,23282],{"class":2313},"    \u002F\u002F}\n",[79,23284,23285],{"class":81,"line":602},[79,23286,542],{"emptyLinePlaceholder":541},[79,23288,23289],{"class":81,"line":608},[79,23290,23291],{"class":2313},"    \u002F\u002F初始化列表方式初始化\n",[79,23293,23294],{"class":81,"line":614},[79,23295,23296],{"class":2313},"    \u002F\u002F使用有参构造函数\n",[79,23298,23299,23301,23303,23305,23307,23309,23311,23313,23315,23317,23319,23322,23325,23328,23331,23334,23337],{"class":81,"line":619},[79,23300,20544],{"class":85},[79,23302,455],{"class":228},[79,23304,2262],{"class":448},[79,23306,3505],{"class":7284},[79,23308,1020],{"class":228},[79,23310,2262],{"class":448},[79,23312,4909],{"class":7284},[79,23314,1020],{"class":228},[79,23316,2262],{"class":448},[79,23318,4925],{"class":7284},[79,23320,23321],{"class":228},") :",[79,23323,23324],{"class":85},"m_A",[79,23326,23327],{"class":228},"(a), ",[79,23329,23330],{"class":85},"m_B",[79,23332,23333],{"class":228},"(b), ",[79,23335,23336],{"class":85},"m_C",[79,23338,23339],{"class":228},"(c) {}\n",[79,23341,23342,23344,23347],{"class":81,"line":625},[79,23343,16942],{"class":448},[79,23345,23346],{"class":85}," PrintPerson",[79,23348,12888],{"class":228},[79,23350,23351,23353,23355,23358,23360,23363,23365],{"class":81,"line":631},[79,23352,11723],{"class":228},[79,23354,3283],{"class":448},[79,23356,23357],{"class":89}," \"mA:\"",[79,23359,3551],{"class":448},[79,23361,23362],{"class":228}," m_A ",[79,23364,3283],{"class":448},[79,23366,10895],{"class":228},[79,23368,23369,23371,23373,23376,23378,23381,23383],{"class":81,"line":637},[79,23370,11723],{"class":228},[79,23372,3283],{"class":448},[79,23374,23375],{"class":89}," \"mB:\"",[79,23377,3551],{"class":448},[79,23379,23380],{"class":228}," m_B ",[79,23382,3283],{"class":448},[79,23384,10895],{"class":228},[79,23386,23387,23389,23391,23394,23396,23399,23401],{"class":81,"line":643},[79,23388,11723],{"class":228},[79,23390,3283],{"class":448},[79,23392,23393],{"class":89}," \"mC:\"",[79,23395,3551],{"class":448},[79,23397,23398],{"class":228}," m_C ",[79,23400,3283],{"class":448},[79,23402,10895],{"class":228},[79,23404,23405],{"class":81,"line":649},[79,23406,4272],{"class":228},[79,23408,23409],{"class":81,"line":655},[79,23410,17254],{"class":448},[79,23412,23413,23415],{"class":81,"line":660},[79,23414,4070],{"class":448},[79,23416,23417],{"class":228}," m_A;\n",[79,23419,23420,23422],{"class":81,"line":666},[79,23421,4070],{"class":448},[79,23423,23424],{"class":228}," m_B;\n",[79,23426,23427,23429],{"class":81,"line":672},[79,23428,4070],{"class":448},[79,23430,23431],{"class":228}," m_C;\n",[79,23433,23434],{"class":81,"line":678},[79,23435,6068],{"class":228},[79,23437,23438],{"class":81,"line":684},[79,23439,542],{"emptyLinePlaceholder":541},[79,23441,23442,23444,23446],{"class":81,"line":690},[79,23443,2262],{"class":448},[79,23445,826],{"class":85},[79,23447,8045],{"class":228},[79,23449,23450],{"class":81,"line":695},[79,23451,3652],{"class":228},[79,23453,23454],{"class":81,"line":700},[79,23455,542],{"emptyLinePlaceholder":541},[79,23457,23458,23460,23462,23464,23466,23468,23470,23472,23474],{"class":81,"line":712},[79,23459,21456],{"class":228},[79,23461,19],{"class":85},[79,23463,455],{"class":228},[79,23465,775],{"class":96},[79,23467,1020],{"class":228},[79,23469,2331],{"class":96},[79,23471,1020],{"class":228},[79,23473,970],{"class":96},[79,23475,4795],{"class":228},[79,23477,23478,23480,23483],{"class":81,"line":721},[79,23479,17898],{"class":228},[79,23481,23482],{"class":85},"PrintPerson",[79,23484,7704],{"class":228},[79,23486,23487],{"class":81,"line":726},[79,23488,542],{"emptyLinePlaceholder":541},[79,23490,23491],{"class":81,"line":731},[79,23492,542],{"emptyLinePlaceholder":541},[79,23494,23495,23497,23499,23501],{"class":81,"line":748},[79,23496,4388],{"class":85},[79,23498,455],{"class":228},[79,23500,4393],{"class":89},[79,23502,4795],{"class":228},[79,23504,23505],{"class":81,"line":765},[79,23506,542],{"emptyLinePlaceholder":541},[79,23508,23509,23511,23513],{"class":81,"line":780},[79,23510,715],{"class":448},[79,23512,1103],{"class":96},[79,23514,3400],{"class":228},[79,23516,23517],{"class":81,"line":811},[79,23518,3671],{"class":228},[19,23520,23521,23522,23525,23526],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[2398,23523,23524],{},"参数名就是定义的对象属性","，",[2398,23527,23528],{},"属性后面的值为有参构造函数的形参",[51,23530,23532],{"className":2248,"code":23531,"language":2250,"meta":57,"style":57},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[59,23533,23534],{"__ignoreMap":57},[79,23535,23536,23538,23540,23542,23545,23547,23550,23552,23555,23557,23560,23562,23565,23567],{"class":81,"line":82},[79,23537,21071],{"class":85},[79,23539,455],{"class":228},[79,23541,2262],{"class":448},[79,23543,23544],{"class":228}," a.",[79,23546,2262],{"class":448},[79,23548,23549],{"class":228}," b,",[79,23551,2262],{"class":448},[79,23553,23554],{"class":228}," b):",[79,23556,23324],{"class":85},[79,23558,23559],{"class":228},"(a),",[79,23561,23330],{"class":85},[79,23563,23564],{"class":228},"(c),",[79,23566,23336],{"class":85},[79,23568,23569],{"class":228},"(b) {}\n",[339,23571,23573],{"id":23572},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,23575,23576],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,23578,16666],{},[51,23580,23582],{"className":2248,"code":23581,"language":2250,"meta":57,"style":57},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[59,23583,23584,23589,23594,23598,23603,23607],{"__ignoreMap":57},[79,23585,23586],{"class":81,"line":82},[79,23587,23588],{"class":228},"A{};\n",[79,23590,23591],{"class":81,"line":167},[79,23592,23593],{"class":228},"B\n",[79,23595,23596],{"class":81,"line":178},[79,23597,3652],{"class":228},[79,23599,23600],{"class":81,"line":545},[79,23601,23602],{"class":228},"    A a;\n",[79,23604,23605],{"class":81,"line":550},[79,23606,3671],{"class":228},[79,23608,23609],{"class":81,"line":562},[79,23610,23611],{"class":2313},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,23613,23614],{},"案例",[51,23616,23618],{"className":2248,"code":23617,"language":2250,"meta":57,"style":57},"\u002F\u002Fphone这个对象作为Person这个类的类成员\nclass Phone\n{\npublic：\n    \u002F\u002F 赋值(构造函数)\n    Phone(string pName)\n    {\n        m_pName=pName;\n        cout\u003C\u003C\"Phone的构造函数调用\";\n    }\n    ~Phone()\n    {\n        cout\u003C\u003C\"Phone析构函数调用\"\u003C\u003Cendl;\n    }\n    \u002F\u002F\n    string m_PName;\n};\nclass Person\n{\npublic:\n    \u002F\u002F赋值\n    Person(string name,string pname):m_name(name),m_phone.m_PName(pname) \n    {\n        cout\u003C\u003C\"Person的构造函数调用\";\n    }\n    ~Person()\n    {\n        cout\u003C\u003C\"Person析构函数调用\"\u003C\u003Cendl;\n    }\n    \u002F\u002F姓名\n    string m_name;\n    \u002F\u002F手机\n    Phone m_Phone;\n};\nvoid test01()\n{\n    Person p(\"张三\",\"安卓\");\n    cout\u003C\u003Cp.Name\u003C\u003C\"拿着：\"\u003C\u003Cp.m_phone.m_PName;\n}\nint main()\n{\n    test01();\n}\n",[59,23619,23620,23625,23632,23636,23641,23646,23660,23664,23674,23685,23689,23696,23700,23713,23717,23722,23727,23731,23737,23741,23745,23749,23780,23784,23795,23799,23805,23809,23822,23826,23830,23834,23839,23844,23848,23856,23860,23877,23896,23900,23908,23912,23918],{"__ignoreMap":57},[79,23621,23622],{"class":81,"line":82},[79,23623,23624],{"class":2313},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[79,23626,23627,23629],{"class":81,"line":167},[79,23628,16727],{"class":448},[79,23630,23631],{"class":85}," Phone\n",[79,23633,23634],{"class":81,"line":178},[79,23635,3652],{"class":228},[79,23637,23638],{"class":81,"line":545},[79,23639,23640],{"class":228},"public：\n",[79,23642,23643],{"class":81,"line":550},[79,23644,23645],{"class":2313},"    \u002F\u002F 赋值(构造函数)\n",[79,23647,23648,23651,23653,23655,23658],{"class":81,"line":562},[79,23649,23650],{"class":85},"    Phone",[79,23652,455],{"class":228},[79,23654,16950],{"class":85},[79,23656,23657],{"class":7284}," pName",[79,23659,850],{"class":228},[79,23661,23662],{"class":81,"line":568},[79,23663,4115],{"class":228},[79,23665,23666,23669,23671],{"class":81,"line":574},[79,23667,23668],{"class":228},"        m_pName",[79,23670,239],{"class":448},[79,23672,23673],{"class":228},"pName;\n",[79,23675,23676,23678,23680,23683],{"class":81,"line":579},[79,23677,5525],{"class":228},[79,23679,3283],{"class":448},[79,23681,23682],{"class":89},"\"Phone的构造函数调用\"",[79,23684,3400],{"class":228},[79,23686,23687],{"class":81,"line":585},[79,23688,4272],{"class":228},[79,23690,23691,23694],{"class":81,"line":591},[79,23692,23693],{"class":85},"    ~Phone",[79,23695,4061],{"class":228},[79,23697,23698],{"class":81,"line":596},[79,23699,4115],{"class":228},[79,23701,23702,23704,23706,23709,23711],{"class":81,"line":602},[79,23703,5525],{"class":228},[79,23705,3283],{"class":448},[79,23707,23708],{"class":89},"\"Phone析构函数调用\"",[79,23710,3283],{"class":448},[79,23712,3305],{"class":228},[79,23714,23715],{"class":81,"line":608},[79,23716,4272],{"class":228},[79,23718,23719],{"class":81,"line":614},[79,23720,23721],{"class":2313},"    \u002F\u002F\n",[79,23723,23724],{"class":81,"line":619},[79,23725,23726],{"class":228},"    string m_PName;\n",[79,23728,23729],{"class":81,"line":625},[79,23730,6068],{"class":228},[79,23732,23733,23735],{"class":81,"line":631},[79,23734,16727],{"class":448},[79,23736,17203],{"class":85},[79,23738,23739],{"class":81,"line":637},[79,23740,3652],{"class":228},[79,23742,23743],{"class":81,"line":643},[79,23744,16749],{"class":448},[79,23746,23747],{"class":81,"line":649},[79,23748,19020],{"class":2313},[79,23750,23751,23753,23755,23757,23759,23761,23763,23766,23769,23771,23774,23777],{"class":81,"line":655},[79,23752,20544],{"class":85},[79,23754,455],{"class":228},[79,23756,16950],{"class":85},[79,23758,236],{"class":7284},[79,23760,2621],{"class":228},[79,23762,16950],{"class":85},[79,23764,23765],{"class":7284}," pname",[79,23767,23768],{"class":228},"):",[79,23770,17042],{"class":85},[79,23772,23773],{"class":228},"(name),m_phone.",[79,23775,23776],{"class":85},"m_PName",[79,23778,23779],{"class":228},"(pname) \n",[79,23781,23782],{"class":81,"line":660},[79,23783,4115],{"class":228},[79,23785,23786,23788,23790,23793],{"class":81,"line":666},[79,23787,5525],{"class":228},[79,23789,3283],{"class":448},[79,23791,23792],{"class":89},"\"Person的构造函数调用\"",[79,23794,3400],{"class":228},[79,23796,23797],{"class":81,"line":672},[79,23798,4272],{"class":228},[79,23800,23801,23803],{"class":81,"line":678},[79,23802,20577],{"class":85},[79,23804,4061],{"class":228},[79,23806,23807],{"class":81,"line":684},[79,23808,4115],{"class":228},[79,23810,23811,23813,23815,23818,23820],{"class":81,"line":690},[79,23812,5525],{"class":228},[79,23814,3283],{"class":448},[79,23816,23817],{"class":89},"\"Person析构函数调用\"",[79,23819,3283],{"class":448},[79,23821,3305],{"class":228},[79,23823,23824],{"class":81,"line":695},[79,23825,4272],{"class":228},[79,23827,23828],{"class":81,"line":700},[79,23829,9845],{"class":2313},[79,23831,23832],{"class":81,"line":712},[79,23833,16925],{"class":228},[79,23835,23836],{"class":81,"line":721},[79,23837,23838],{"class":2313},"    \u002F\u002F手机\n",[79,23840,23841],{"class":81,"line":726},[79,23842,23843],{"class":228},"    Phone m_Phone;\n",[79,23845,23846],{"class":81,"line":731},[79,23847,6068],{"class":228},[79,23849,23850,23852,23854],{"class":81,"line":748},[79,23851,7432],{"class":448},[79,23853,7656],{"class":85},[79,23855,4061],{"class":228},[79,23857,23858],{"class":81,"line":765},[79,23859,3652],{"class":228},[79,23861,23862,23864,23866,23868,23870,23872,23875],{"class":81,"line":780},[79,23863,21456],{"class":228},[79,23865,19],{"class":85},[79,23867,455],{"class":228},[79,23869,9981],{"class":89},[79,23871,2621],{"class":228},[79,23873,23874],{"class":89},"\"安卓\"",[79,23876,4795],{"class":228},[79,23878,23879,23881,23883,23886,23888,23891,23893],{"class":81,"line":811},[79,23880,3657],{"class":228},[79,23882,3283],{"class":448},[79,23884,23885],{"class":228},"p.Name",[79,23887,3283],{"class":448},[79,23889,23890],{"class":89},"\"拿着：\"",[79,23892,3283],{"class":448},[79,23894,23895],{"class":228},"p.m_phone.m_PName;\n",[79,23897,23898],{"class":81,"line":816},[79,23899,3671],{"class":228},[79,23901,23902,23904,23906],{"class":81,"line":821},[79,23903,2262],{"class":448},[79,23905,826],{"class":85},[79,23907,4061],{"class":228},[79,23909,23910],{"class":81,"line":837},[79,23911,3652],{"class":228},[79,23913,23914,23916],{"class":81,"line":853},[79,23915,7701],{"class":85},[79,23917,7704],{"class":228},[79,23919,23920],{"class":81,"line":864},[79,23921,3671],{"class":228},[19,23923,11080],{},[51,23925,23927],{"className":2248,"code":23926,"language":2250,"meta":57,"style":57},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[59,23928,23929,23934],{"__ignoreMap":57},[79,23930,23931],{"class":81,"line":82},[79,23932,23933],{"class":2313},"    \u002F\u002F不需要写这个：\n",[79,23935,23936],{"class":81,"line":167},[79,23937,23938],{"class":2313},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,23940,23941],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[51,23943,23945],{"className":2248,"code":23944,"language":2250,"meta":57,"style":57},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[59,23946,23947],{"__ignoreMap":57},[79,23948,23949,23951,23954,23956,23959,23962],{"class":81,"line":82},[79,23950,21071],{"class":85},[79,23952,23953],{"class":228},"(string name.string pname):",[79,23955,17042],{"class":85},[79,23957,23958],{"class":228},"(name),",[79,23960,23961],{"class":85},"m_phone",[79,23963,23964],{"class":228},"(pname) {}\n",[19,23966,23967,23968,239,23971],{},"采用的是隐式转换法，实际为如下：\n",[59,23969,23970],{},"m_phone(pname)",[59,23972,23973],{},"Phone m_phone=pname",[19,23975,23976,23979],{},[2398,23977,23978],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,23981,23982],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[339,23984,23986],{"id":23985},"_828静态对象","8.2.8静态对象",[19,23988,23989],{},"静态对象在成员对象前static，称为静态对象",[19,23991,23992],{},"静态对象分为两类：",[26,23994,23995],{},[29,23996,23997],{},"静态成员变量",[3246,23999,24000,24003,24006],{},[29,24001,24002],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[29,24004,24005],{},"②在编译阶段分配内存",[29,24007,24008],{},"③类内声明，类外初始化",[26,24010,24011],{"start":167},[29,24012,24013],{},"静态成员函数",[3246,24015,24016,24019],{},[29,24017,24018],{},"①所有对象共享同一个函数",[29,24020,24021],{},"②静态成员函数只能访问静态成员变量",[24023,24024,24026],"h4",{"id":24025},"_8281静态成员变量","8.2.8.1静态成员变量",[51,24028,24030],{"className":2248,"code":24029,"language":2250,"meta":57,"style":57},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\npublic:\n    \u002F\u002F非静态成员变量\n    \u002F\u002F int m_A;\n    \u002F\u002F定义静态成员变量\n    static int m_A;\n\n\n};\nvoid test01()\n{\n    Person p;\n    \u002F\u002F输出类成员变量这块内存\n    cout\u003C\u003Cp.m_A\u003C\u003Cendl;\n}\nint main()\n{\n    test01()\n}\n",[59,24031,24032,24038,24048,24054,24058,24062,24067,24072,24077,24085,24089,24093,24097,24105,24109,24113,24118,24131,24135,24143,24147,24153],{"__ignoreMap":57},[79,24033,24034,24036],{"class":81,"line":82},[79,24035,4036],{"class":448},[79,24037,4039],{"class":89},[79,24039,24040,24042,24044,24046],{"class":81,"line":167},[79,24041,4044],{"class":448},[79,24043,4047],{"class":448},[79,24045,4050],{"class":85},[79,24047,3400],{"class":228},[79,24049,24050,24052],{"class":81,"line":178},[79,24051,16727],{"class":448},[79,24053,17203],{"class":85},[79,24055,24056],{"class":81,"line":545},[79,24057,3652],{"class":228},[79,24059,24060],{"class":81,"line":550},[79,24061,16749],{"class":448},[79,24063,24064],{"class":81,"line":562},[79,24065,24066],{"class":2313},"    \u002F\u002F非静态成员变量\n",[79,24068,24069],{"class":81,"line":568},[79,24070,24071],{"class":2313},"    \u002F\u002F int m_A;\n",[79,24073,24074],{"class":81,"line":574},[79,24075,24076],{"class":2313},"    \u002F\u002F定义静态成员变量\n",[79,24078,24079,24081,24083],{"class":81,"line":579},[79,24080,13055],{"class":448},[79,24082,4467],{"class":448},[79,24084,23417],{"class":228},[79,24086,24087],{"class":81,"line":585},[79,24088,542],{"emptyLinePlaceholder":541},[79,24090,24091],{"class":81,"line":591},[79,24092,542],{"emptyLinePlaceholder":541},[79,24094,24095],{"class":81,"line":596},[79,24096,6068],{"class":228},[79,24098,24099,24101,24103],{"class":81,"line":602},[79,24100,7432],{"class":448},[79,24102,7656],{"class":85},[79,24104,4061],{"class":228},[79,24106,24107],{"class":81,"line":608},[79,24108,3652],{"class":228},[79,24110,24111],{"class":81,"line":614},[79,24112,17345],{"class":228},[79,24114,24115],{"class":81,"line":619},[79,24116,24117],{"class":2313},"    \u002F\u002F输出类成员变量这块内存\n",[79,24119,24120,24122,24124,24127,24129],{"class":81,"line":625},[79,24121,3657],{"class":228},[79,24123,3283],{"class":448},[79,24125,24126],{"class":228},"p.m_A",[79,24128,3283],{"class":448},[79,24130,3305],{"class":228},[79,24132,24133],{"class":81,"line":631},[79,24134,3671],{"class":228},[79,24136,24137,24139,24141],{"class":81,"line":637},[79,24138,2262],{"class":448},[79,24140,826],{"class":85},[79,24142,4061],{"class":228},[79,24144,24145],{"class":81,"line":643},[79,24146,3652],{"class":228},[79,24148,24149,24151],{"class":81,"line":649},[79,24150,7701],{"class":85},[79,24152,4061],{"class":228},[79,24154,24155],{"class":81,"line":655},[79,24156,3671],{"class":228},[19,24158,24159],{},"此时输出是报错的：无法解析外部命令",[19,24161,24162],{},"解决这一问题：必须用到类内声明，类外初始化操作",[51,24164,24166],{"className":2248,"code":24165,"language":2250,"meta":57,"style":57},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\npublic:\n    \u002F\u002F类内声明\n    static int m_A;\n};\n\u002F\u002F类外初始化\nint Person::m_A=10;\nvoid test01()\n{\n    Person p;\n    \u002F\u002F访问变量的原内存空间\n    \u002F\u002F100\n    cout\u003C\u003Cp.m_A\u003C\u003Cendl;\n    Person p2;\n    p2.m_A=200;\n    \u002F\u002F继续访问这片空间\n    \u002F\u002F200\n    cout\u003C\u003Cp2.m_A\u003C\u003Cendl;\n}\nint main()\n{\n    test01();\n}\n",[59,24167,24168,24174,24184,24190,24194,24198,24203,24211,24215,24220,24235,24243,24247,24251,24256,24261,24273,24278,24289,24294,24299,24312,24316,24324,24328,24334],{"__ignoreMap":57},[79,24169,24170,24172],{"class":81,"line":82},[79,24171,4036],{"class":448},[79,24173,4039],{"class":89},[79,24175,24176,24178,24180,24182],{"class":81,"line":167},[79,24177,4044],{"class":448},[79,24179,4047],{"class":448},[79,24181,4050],{"class":85},[79,24183,3400],{"class":228},[79,24185,24186,24188],{"class":81,"line":178},[79,24187,16727],{"class":448},[79,24189,17203],{"class":85},[79,24191,24192],{"class":81,"line":545},[79,24193,3652],{"class":228},[79,24195,24196],{"class":81,"line":550},[79,24197,16749],{"class":448},[79,24199,24200],{"class":81,"line":562},[79,24201,24202],{"class":2313},"    \u002F\u002F类内声明\n",[79,24204,24205,24207,24209],{"class":81,"line":568},[79,24206,13055],{"class":448},[79,24208,4467],{"class":448},[79,24210,23417],{"class":228},[79,24212,24213],{"class":81,"line":574},[79,24214,6068],{"class":228},[79,24216,24217],{"class":81,"line":579},[79,24218,24219],{"class":2313},"\u002F\u002F类外初始化\n",[79,24221,24222,24224,24226,24229,24231,24233],{"class":81,"line":585},[79,24223,2262],{"class":448},[79,24225,17601],{"class":85},[79,24227,24228],{"class":228},"::m_A",[79,24230,239],{"class":448},[79,24232,2689],{"class":96},[79,24234,3400],{"class":228},[79,24236,24237,24239,24241],{"class":81,"line":591},[79,24238,7432],{"class":448},[79,24240,7656],{"class":85},[79,24242,4061],{"class":228},[79,24244,24245],{"class":81,"line":596},[79,24246,3652],{"class":228},[79,24248,24249],{"class":81,"line":602},[79,24250,17345],{"class":228},[79,24252,24253],{"class":81,"line":608},[79,24254,24255],{"class":2313},"    \u002F\u002F访问变量的原内存空间\n",[79,24257,24258],{"class":81,"line":614},[79,24259,24260],{"class":2313},"    \u002F\u002F100\n",[79,24262,24263,24265,24267,24269,24271],{"class":81,"line":619},[79,24264,3657],{"class":228},[79,24266,3283],{"class":448},[79,24268,24126],{"class":228},[79,24270,3283],{"class":448},[79,24272,3305],{"class":228},[79,24274,24275],{"class":81,"line":625},[79,24276,24277],{"class":228},"    Person p2;\n",[79,24279,24280,24283,24285,24287],{"class":81,"line":631},[79,24281,24282],{"class":228},"    p2.m_A",[79,24284,239],{"class":448},[79,24286,3817],{"class":96},[79,24288,3400],{"class":228},[79,24290,24291],{"class":81,"line":637},[79,24292,24293],{"class":2313},"    \u002F\u002F继续访问这片空间\n",[79,24295,24296],{"class":81,"line":643},[79,24297,24298],{"class":2313},"    \u002F\u002F200\n",[79,24300,24301,24303,24305,24308,24310],{"class":81,"line":649},[79,24302,3657],{"class":228},[79,24304,3283],{"class":448},[79,24306,24307],{"class":228},"p2.m_A",[79,24309,3283],{"class":448},[79,24311,3305],{"class":228},[79,24313,24314],{"class":81,"line":655},[79,24315,3671],{"class":228},[79,24317,24318,24320,24322],{"class":81,"line":660},[79,24319,2262],{"class":448},[79,24321,826],{"class":85},[79,24323,4061],{"class":228},[79,24325,24326],{"class":81,"line":666},[79,24327,3652],{"class":228},[79,24329,24330,24332],{"class":81,"line":672},[79,24331,7701],{"class":85},[79,24333,7704],{"class":228},[79,24335,24336],{"class":81,"line":678},[79,24337,3671],{"class":228},[19,24339,24340],{},[2398,24341,24342],{},"静态变量的访问",[51,24344,24346],{"className":2248,"code":24345,"language":2250,"meta":57,"style":57},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\npublic:\n    \u002F\u002F类内声明\n    static int m_A;\nprivate:\n    \u002F\u002F静态成员变量也是有访问权限的\n    static int m_B;\n};\n\u002F\u002F类外初始化\nint Person::m_A=10;\nint Person::m_B=20;\nvoid test02()\n{\n    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n    \u002F\u002F静态成员变量有两种访问方式：\n    \u002F\u002F1.通过对象进行访问\n    Person p;  \n    cout\u003C\u003Cp.m_A\u003C\u003Cendl;\n    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n    \u002F\u002F2.通过类名进行访问\n    cout\u003C\u003CPerson::m_A\u003C\u003Cendl;\n    cout\u003C\u003CPerson::m_B\u003C\u003Cendl; \u002F\u002F没有访问权限，报错\n}\nint main()\n{\n    test02();\n}\n",[59,24347,24348,24354,24364,24370,24374,24378,24382,24390,24394,24399,24407,24411,24415,24429,24444,24452,24456,24461,24466,24471,24476,24488,24493,24498,24512,24529,24533,24541,24545,24551],{"__ignoreMap":57},[79,24349,24350,24352],{"class":81,"line":82},[79,24351,4036],{"class":448},[79,24353,4039],{"class":89},[79,24355,24356,24358,24360,24362],{"class":81,"line":167},[79,24357,4044],{"class":448},[79,24359,4047],{"class":448},[79,24361,4050],{"class":85},[79,24363,3400],{"class":228},[79,24365,24366,24368],{"class":81,"line":178},[79,24367,16727],{"class":448},[79,24369,17203],{"class":85},[79,24371,24372],{"class":81,"line":545},[79,24373,3652],{"class":228},[79,24375,24376],{"class":81,"line":550},[79,24377,16749],{"class":448},[79,24379,24380],{"class":81,"line":562},[79,24381,24202],{"class":2313},[79,24383,24384,24386,24388],{"class":81,"line":568},[79,24385,13055],{"class":448},[79,24387,4467],{"class":448},[79,24389,23417],{"class":228},[79,24391,24392],{"class":81,"line":574},[79,24393,17254],{"class":448},[79,24395,24396],{"class":81,"line":579},[79,24397,24398],{"class":2313},"    \u002F\u002F静态成员变量也是有访问权限的\n",[79,24400,24401,24403,24405],{"class":81,"line":585},[79,24402,13055],{"class":448},[79,24404,4467],{"class":448},[79,24406,23424],{"class":228},[79,24408,24409],{"class":81,"line":591},[79,24410,6068],{"class":228},[79,24412,24413],{"class":81,"line":596},[79,24414,24219],{"class":2313},[79,24416,24417,24419,24421,24423,24425,24427],{"class":81,"line":602},[79,24418,2262],{"class":448},[79,24420,17601],{"class":85},[79,24422,24228],{"class":228},[79,24424,239],{"class":448},[79,24426,2689],{"class":96},[79,24428,3400],{"class":228},[79,24430,24431,24433,24435,24438,24440,24442],{"class":81,"line":608},[79,24432,2262],{"class":448},[79,24434,17601],{"class":85},[79,24436,24437],{"class":228},"::m_B",[79,24439,239],{"class":448},[79,24441,2940],{"class":96},[79,24443,3400],{"class":228},[79,24445,24446,24448,24450],{"class":81,"line":614},[79,24447,7432],{"class":448},[79,24449,7725],{"class":85},[79,24451,4061],{"class":228},[79,24453,24454],{"class":81,"line":619},[79,24455,3652],{"class":228},[79,24457,24458],{"class":81,"line":625},[79,24459,24460],{"class":2313},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[79,24462,24463],{"class":81,"line":631},[79,24464,24465],{"class":2313},"    \u002F\u002F静态成员变量有两种访问方式：\n",[79,24467,24468],{"class":81,"line":637},[79,24469,24470],{"class":2313},"    \u002F\u002F1.通过对象进行访问\n",[79,24472,24473],{"class":81,"line":643},[79,24474,24475],{"class":228},"    Person p;  \n",[79,24477,24478,24480,24482,24484,24486],{"class":81,"line":649},[79,24479,3657],{"class":228},[79,24481,3283],{"class":448},[79,24483,24126],{"class":228},[79,24485,3283],{"class":448},[79,24487,3305],{"class":228},[79,24489,24490],{"class":81,"line":655},[79,24491,24492],{"class":2313},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[79,24494,24495],{"class":81,"line":660},[79,24496,24497],{"class":2313},"    \u002F\u002F2.通过类名进行访问\n",[79,24499,24500,24502,24504,24506,24508,24510],{"class":81,"line":666},[79,24501,3657],{"class":228},[79,24503,3283],{"class":448},[79,24505,21071],{"class":85},[79,24507,24228],{"class":228},[79,24509,3283],{"class":448},[79,24511,3305],{"class":228},[79,24513,24514,24516,24518,24520,24522,24524,24526],{"class":81,"line":672},[79,24515,3657],{"class":228},[79,24517,3283],{"class":448},[79,24519,21071],{"class":85},[79,24521,24437],{"class":228},[79,24523,3283],{"class":448},[79,24525,3348],{"class":228},[79,24527,24528],{"class":2313}," \u002F\u002F没有访问权限，报错\n",[79,24530,24531],{"class":81,"line":678},[79,24532,3671],{"class":228},[79,24534,24535,24537,24539],{"class":81,"line":684},[79,24536,2262],{"class":448},[79,24538,826],{"class":85},[79,24540,4061],{"class":228},[79,24542,24543],{"class":81,"line":690},[79,24544,3652],{"class":228},[79,24546,24547,24549],{"class":81,"line":695},[79,24548,7770],{"class":85},[79,24550,7704],{"class":228},[79,24552,24553],{"class":81,"line":700},[79,24554,3671],{"class":228},[24023,24556,24558],{"id":24557},"_8282静态成员函数","8.2.8.2静态成员函数",[19,24560,24561],{},"1.静态成员函数定义与访问",[51,24563,24565],{"className":2248,"code":24564,"language":2250,"meta":57,"style":57},"class Person\n{\npublic:\n    \u002F\u002F在公共权限下定义静态成员函数\n    static void func()\n    {\n        coout\u003C\u003C\"静态成员函数的调用\"\u003C\u003Cendl;\n    }\n};\nvoid test01()\n{\n    \u002F\u002F静态成员函数的调用方式:\n    \u002F\u002F1.通过对象访问\n    Person p;\n    p.func();\n    \u002F\u002F2.通过类名访问\n    Person::func();\n}\n",[59,24566,24567,24573,24577,24581,24586,24597,24601,24615,24619,24623,24631,24635,24640,24645,24649,24657,24662,24672],{"__ignoreMap":57},[79,24568,24569,24571],{"class":81,"line":82},[79,24570,16727],{"class":448},[79,24572,17203],{"class":85},[79,24574,24575],{"class":81,"line":167},[79,24576,3652],{"class":228},[79,24578,24579],{"class":81,"line":178},[79,24580,16749],{"class":448},[79,24582,24583],{"class":81,"line":545},[79,24584,24585],{"class":2313},"    \u002F\u002F在公共权限下定义静态成员函数\n",[79,24587,24588,24590,24593,24595],{"class":81,"line":550},[79,24589,13055],{"class":448},[79,24591,24592],{"class":448}," void",[79,24594,13420],{"class":85},[79,24596,4061],{"class":228},[79,24598,24599],{"class":81,"line":562},[79,24600,4115],{"class":228},[79,24602,24603,24606,24608,24611,24613],{"class":81,"line":568},[79,24604,24605],{"class":228},"        coout",[79,24607,3283],{"class":448},[79,24609,24610],{"class":89},"\"静态成员函数的调用\"",[79,24612,3283],{"class":448},[79,24614,3305],{"class":228},[79,24616,24617],{"class":81,"line":574},[79,24618,4272],{"class":228},[79,24620,24621],{"class":81,"line":579},[79,24622,6068],{"class":228},[79,24624,24625,24627,24629],{"class":81,"line":585},[79,24626,7432],{"class":448},[79,24628,7656],{"class":85},[79,24630,4061],{"class":228},[79,24632,24633],{"class":81,"line":591},[79,24634,3652],{"class":228},[79,24636,24637],{"class":81,"line":596},[79,24638,24639],{"class":2313},"    \u002F\u002F静态成员函数的调用方式:\n",[79,24641,24642],{"class":81,"line":602},[79,24643,24644],{"class":2313},"    \u002F\u002F1.通过对象访问\n",[79,24646,24647],{"class":81,"line":608},[79,24648,17345],{"class":228},[79,24650,24651,24653,24655],{"class":81,"line":614},[79,24652,17898],{"class":228},[79,24654,13586],{"class":85},[79,24656,7704],{"class":228},[79,24658,24659],{"class":81,"line":619},[79,24660,24661],{"class":2313},"    \u002F\u002F2.通过类名访问\n",[79,24663,24664,24666,24668,24670],{"class":81,"line":625},[79,24665,20544],{"class":85},[79,24667,19757],{"class":228},[79,24669,13586],{"class":85},[79,24671,7704],{"class":228},[79,24673,24674],{"class":81,"line":631},[79,24675,3671],{"class":228},[26,24677,24678],{"start":167},[29,24679,24680],{},"静态成员函数只能访问静态成员变量",[51,24682,24684],{"className":2248,"code":24683,"language":2250,"meta":57,"style":57},"class Person\n{\npublic:\n    \u002F\u002F在公共权限下定义静态成员函数\n    static void func()\n    {\n        m_A=100; \u002F\u002F静态成员函数可以访问 静态成员变量\n        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n        coout\u003C\u003C\"静态成员函数的调用\"\u003C\u003Cendl;\n    }\n    static int m_A; \u002F\u002F静态成员变量\n    int m_B; \u002F\u002F非静态成员变量\n\nprivate:\n    \u002F\u002F静态成员变量也是有访问权限的\n    static void func2()\n    {\n        cout\u003C\u003C\"这是私有权限下的静态函数调用\"\u003C\u003Cendl;\n    }\n\n\n};\nint Person::m_A=0;\nvoid test01()\n{\n    \u002F\u002F静态成员函数的调用方式:\n    \u002F\u002F1.通过对象访问\n    Person p;\n    p.func();\n    \u002F\u002F2.通过类名访问\n    Person::func();\n    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n}\nint main()\n{\n    test01();\n}\n",[59,24685,24686,24692,24696,24700,24704,24714,24718,24732,24737,24749,24753,24764,24774,24778,24782,24786,24796,24800,24813,24817,24821,24825,24829,24843,24851,24855,24859,24863,24867,24875,24879,24889,24894,24898,24906,24910,24916],{"__ignoreMap":57},[79,24687,24688,24690],{"class":81,"line":82},[79,24689,16727],{"class":448},[79,24691,17203],{"class":85},[79,24693,24694],{"class":81,"line":167},[79,24695,3652],{"class":228},[79,24697,24698],{"class":81,"line":178},[79,24699,16749],{"class":448},[79,24701,24702],{"class":81,"line":545},[79,24703,24585],{"class":2313},[79,24705,24706,24708,24710,24712],{"class":81,"line":550},[79,24707,13055],{"class":448},[79,24709,24592],{"class":448},[79,24711,13420],{"class":85},[79,24713,4061],{"class":228},[79,24715,24716],{"class":81,"line":562},[79,24717,4115],{"class":228},[79,24719,24720,24723,24725,24727,24729],{"class":81,"line":568},[79,24721,24722],{"class":228},"        m_A",[79,24724,239],{"class":448},[79,24726,2555],{"class":96},[79,24728,2310],{"class":228},[79,24730,24731],{"class":2313}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[79,24733,24734],{"class":81,"line":574},[79,24735,24736],{"class":2313},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[79,24738,24739,24741,24743,24745,24747],{"class":81,"line":579},[79,24740,24605],{"class":228},[79,24742,3283],{"class":448},[79,24744,24610],{"class":89},[79,24746,3283],{"class":448},[79,24748,3305],{"class":228},[79,24750,24751],{"class":81,"line":585},[79,24752,4272],{"class":228},[79,24754,24755,24757,24759,24761],{"class":81,"line":591},[79,24756,13055],{"class":448},[79,24758,4467],{"class":448},[79,24760,17480],{"class":228},[79,24762,24763],{"class":2313}," \u002F\u002F静态成员变量\n",[79,24765,24766,24768,24771],{"class":81,"line":596},[79,24767,4070],{"class":448},[79,24769,24770],{"class":228}," m_B;",[79,24772,24773],{"class":2313}," \u002F\u002F非静态成员变量\n",[79,24775,24776],{"class":81,"line":602},[79,24777,542],{"emptyLinePlaceholder":541},[79,24779,24780],{"class":81,"line":608},[79,24781,17254],{"class":448},[79,24783,24784],{"class":81,"line":614},[79,24785,24398],{"class":2313},[79,24787,24788,24790,24792,24794],{"class":81,"line":619},[79,24789,13055],{"class":448},[79,24791,24592],{"class":448},[79,24793,15651],{"class":85},[79,24795,4061],{"class":228},[79,24797,24798],{"class":81,"line":625},[79,24799,4115],{"class":228},[79,24801,24802,24804,24806,24809,24811],{"class":81,"line":631},[79,24803,5525],{"class":228},[79,24805,3283],{"class":448},[79,24807,24808],{"class":89},"\"这是私有权限下的静态函数调用\"",[79,24810,3283],{"class":448},[79,24812,3305],{"class":228},[79,24814,24815],{"class":81,"line":637},[79,24816,4272],{"class":228},[79,24818,24819],{"class":81,"line":643},[79,24820,542],{"emptyLinePlaceholder":541},[79,24822,24823],{"class":81,"line":649},[79,24824,542],{"emptyLinePlaceholder":541},[79,24826,24827],{"class":81,"line":655},[79,24828,6068],{"class":228},[79,24830,24831,24833,24835,24837,24839,24841],{"class":81,"line":660},[79,24832,2262],{"class":448},[79,24834,17601],{"class":85},[79,24836,24228],{"class":228},[79,24838,239],{"class":448},[79,24840,759],{"class":96},[79,24842,3400],{"class":228},[79,24844,24845,24847,24849],{"class":81,"line":666},[79,24846,7432],{"class":448},[79,24848,7656],{"class":85},[79,24850,4061],{"class":228},[79,24852,24853],{"class":81,"line":672},[79,24854,3652],{"class":228},[79,24856,24857],{"class":81,"line":678},[79,24858,24639],{"class":2313},[79,24860,24861],{"class":81,"line":684},[79,24862,24644],{"class":2313},[79,24864,24865],{"class":81,"line":690},[79,24866,17345],{"class":228},[79,24868,24869,24871,24873],{"class":81,"line":695},[79,24870,17898],{"class":228},[79,24872,13586],{"class":85},[79,24874,7704],{"class":228},[79,24876,24877],{"class":81,"line":700},[79,24878,24661],{"class":2313},[79,24880,24881,24883,24885,24887],{"class":81,"line":712},[79,24882,20544],{"class":85},[79,24884,19757],{"class":228},[79,24886,13586],{"class":85},[79,24888,7704],{"class":228},[79,24890,24891],{"class":81,"line":721},[79,24892,24893],{"class":2313},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[79,24895,24896],{"class":81,"line":726},[79,24897,3671],{"class":228},[79,24899,24900,24902,24904],{"class":81,"line":731},[79,24901,2262],{"class":448},[79,24903,826],{"class":85},[79,24905,4061],{"class":228},[79,24907,24908],{"class":81,"line":748},[79,24909,3652],{"class":228},[79,24911,24912,24914],{"class":81,"line":765},[79,24913,7701],{"class":85},[79,24915,7704],{"class":228},[79,24917,24918],{"class":81,"line":780},[79,24919,3671],{"class":228},[339,24921,24923],{"id":24922},"_83c对象模型和this指针","8.3C++对象模型和this指针",[24023,24925,24927],{"id":24926},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,24929,24930],{},"在c++中，类内的成员变量和成员函数分开存储",[19,24932,24933],{},"只有非静态成员变量才属于类的对象上",[24935,24936,24938],"h5",{"id":24937},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[51,24940,24942],{"className":2248,"code":24941,"language":2250,"meta":57,"style":57},"#include\u003Ciostraem>\nusing namespace std;\nclass Person\n{\n\n};\nvoid test01()\n{\n    Person p;\n    cout\u003C\u003C\"size of p=\"\u003C\u003Csizeoif(p)\u003C\u003Cendl; \u002F\u002F查看这个空类的占用的内存空间\n}\nint main()\n{\n    test01();\n}\n",[59,24943,24944,24951,24961,24967,24971,24975,24979,24987,24991,24995,25018,25022,25030,25034,25040],{"__ignoreMap":57},[79,24945,24946,24948],{"class":81,"line":82},[79,24947,4036],{"class":448},[79,24949,24950],{"class":89},"\u003Ciostraem>\n",[79,24952,24953,24955,24957,24959],{"class":81,"line":167},[79,24954,4044],{"class":448},[79,24956,4047],{"class":448},[79,24958,4050],{"class":85},[79,24960,3400],{"class":228},[79,24962,24963,24965],{"class":81,"line":178},[79,24964,16727],{"class":448},[79,24966,17203],{"class":85},[79,24968,24969],{"class":81,"line":545},[79,24970,3652],{"class":228},[79,24972,24973],{"class":81,"line":550},[79,24974,542],{"emptyLinePlaceholder":541},[79,24976,24977],{"class":81,"line":562},[79,24978,6068],{"class":228},[79,24980,24981,24983,24985],{"class":81,"line":568},[79,24982,7432],{"class":448},[79,24984,7656],{"class":85},[79,24986,4061],{"class":228},[79,24988,24989],{"class":81,"line":574},[79,24990,3652],{"class":228},[79,24992,24993],{"class":81,"line":579},[79,24994,17345],{"class":228},[79,24996,24997,24999,25001,25004,25006,25009,25011,25013,25015],{"class":81,"line":585},[79,24998,3657],{"class":228},[79,25000,3283],{"class":448},[79,25002,25003],{"class":89},"\"size of p=\"",[79,25005,3283],{"class":448},[79,25007,25008],{"class":85},"sizeoif",[79,25010,8604],{"class":228},[79,25012,3283],{"class":448},[79,25014,3348],{"class":228},[79,25016,25017],{"class":2313}," \u002F\u002F查看这个空类的占用的内存空间\n",[79,25019,25020],{"class":81,"line":591},[79,25021,3671],{"class":228},[79,25023,25024,25026,25028],{"class":81,"line":596},[79,25025,2262],{"class":448},[79,25027,826],{"class":85},[79,25029,4061],{"class":228},[79,25031,25032],{"class":81,"line":602},[79,25033,3652],{"class":228},[79,25035,25036,25038],{"class":81,"line":608},[79,25037,7701],{"class":85},[79,25039,7704],{"class":228},[79,25041,25042],{"class":81,"line":614},[79,25043,3671],{"class":228},[19,25045,25046],{},"输出结果为：size of p=1",[19,25048,25049],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,25051,25052],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[24935,25054,25056],{"id":25055},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[51,25058,25060],{"className":2248,"code":25059,"language":2250,"meta":57,"style":57},"#include\u003Ciostream>\nusing namespace std;\nclass Person \n{\n    int m_A;\u002F\u002F非静态成员变量\n};\nvoid test01()\n{\n    Person p;\n    cout\u003C\u003C\"size of p=\"\u003C\u003Csizeof(p)\u003C\u003Cendl; \u002F\u002F查看不是空对象时占用多少内存\n\n}\nint main()\n{\n    test01();\n}\n",[59,25061,25062,25068,25078,25086,25090,25099,25103,25111,25115,25119,25138,25142,25146,25154,25158,25164],{"__ignoreMap":57},[79,25063,25064,25066],{"class":81,"line":82},[79,25065,4036],{"class":448},[79,25067,4039],{"class":89},[79,25069,25070,25072,25074,25076],{"class":81,"line":167},[79,25071,4044],{"class":448},[79,25073,4047],{"class":448},[79,25075,4050],{"class":85},[79,25077,3400],{"class":228},[79,25079,25080,25082,25084],{"class":81,"line":178},[79,25081,16727],{"class":448},[79,25083,17601],{"class":85},[79,25085,4750],{"class":228},[79,25087,25088],{"class":81,"line":545},[79,25089,3652],{"class":228},[79,25091,25092,25094,25096],{"class":81,"line":550},[79,25093,4070],{"class":448},[79,25095,17480],{"class":228},[79,25097,25098],{"class":2313},"\u002F\u002F非静态成员变量\n",[79,25100,25101],{"class":81,"line":562},[79,25102,6068],{"class":228},[79,25104,25105,25107,25109],{"class":81,"line":568},[79,25106,7432],{"class":448},[79,25108,7656],{"class":85},[79,25110,4061],{"class":228},[79,25112,25113],{"class":81,"line":574},[79,25114,3652],{"class":228},[79,25116,25117],{"class":81,"line":579},[79,25118,17345],{"class":228},[79,25120,25121,25123,25125,25127,25129,25131,25133,25135],{"class":81,"line":585},[79,25122,3657],{"class":228},[79,25124,3283],{"class":448},[79,25126,25003],{"class":89},[79,25128,3479],{"class":448},[79,25130,8604],{"class":228},[79,25132,3283],{"class":448},[79,25134,3348],{"class":228},[79,25136,25137],{"class":2313}," \u002F\u002F查看不是空对象时占用多少内存\n",[79,25139,25140],{"class":81,"line":591},[79,25141,542],{"emptyLinePlaceholder":541},[79,25143,25144],{"class":81,"line":596},[79,25145,3671],{"class":228},[79,25147,25148,25150,25152],{"class":81,"line":602},[79,25149,2262],{"class":448},[79,25151,826],{"class":85},[79,25153,4061],{"class":228},[79,25155,25156],{"class":81,"line":608},[79,25157,3652],{"class":228},[79,25159,25160,25162],{"class":81,"line":614},[79,25161,7701],{"class":85},[79,25163,7704],{"class":228},[79,25165,25166],{"class":81,"line":619},[79,25167,3671],{"class":228},[19,25169,25170],{},"输出结果：size of p=4",[19,25172,25173],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[26,25175,25176],{},[29,25177,25178],{},"如果加上非静态成员变量，Person类修改如下",[51,25180,25182],{"className":2248,"code":25181,"language":2250,"meta":57,"style":57},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[59,25183,25184,25190,25194,25200,25208,25212,25217],{"__ignoreMap":57},[79,25185,25186,25188],{"class":81,"line":82},[79,25187,16727],{"class":448},[79,25189,17203],{"class":85},[79,25191,25192],{"class":81,"line":167},[79,25193,3652],{"class":228},[79,25195,25196,25198],{"class":81,"line":178},[79,25197,4070],{"class":448},[79,25199,23417],{"class":228},[79,25201,25202,25204,25206],{"class":81,"line":545},[79,25203,13055],{"class":448},[79,25205,4467],{"class":448},[79,25207,23424],{"class":228},[79,25209,25210],{"class":81,"line":550},[79,25211,6068],{"class":228},[79,25213,25214],{"class":81,"line":562},[79,25215,25216],{"class":2313},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[79,25218,25219,25221,25223,25225,25227,25229],{"class":81,"line":568},[79,25220,2262],{"class":448},[79,25222,17601],{"class":85},[79,25224,24437],{"class":228},[79,25226,239],{"class":448},[79,25228,759],{"class":96},[79,25230,3400],{"class":228},[19,25232,25233],{},"输出结果：4",[19,25235,25236],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[26,25238,25239],{"start":167},[29,25240,25241],{},"加上非静态成员函数",[51,25243,25245],{"className":2248,"code":25244,"language":2250,"meta":57,"style":57},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[59,25246,25247,25254,25258,25264,25272,25276,25280,25284],{"__ignoreMap":57},[79,25248,25249,25251],{"class":81,"line":82},[79,25250,16727],{"class":448},[79,25252,25253],{"class":85},"  Person\n",[79,25255,25256],{"class":81,"line":167},[79,25257,3652],{"class":228},[79,25259,25260,25262],{"class":81,"line":178},[79,25261,4070],{"class":448},[79,25263,23417],{"class":228},[79,25265,25266,25268,25270],{"class":81,"line":545},[79,25267,16942],{"class":448},[79,25269,13420],{"class":85},[79,25271,4061],{"class":228},[79,25273,25274],{"class":81,"line":550},[79,25275,4115],{"class":228},[79,25277,25278],{"class":81,"line":562},[79,25279,542],{"emptyLinePlaceholder":541},[79,25281,25282],{"class":81,"line":568},[79,25283,4272],{"class":228},[79,25285,25286],{"class":81,"line":574},[79,25287,6068],{"class":228},[19,25289,25290],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[26,25292,25293],{"start":178},[29,25294,25295],{},"加上静态成员函数",[51,25297,25299],{"className":2248,"code":25298,"language":2250,"meta":57,"style":57},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[59,25300,25301,25307,25311,25317,25325,25329,25333,25337,25348,25352,25356,25360],{"__ignoreMap":57},[79,25302,25303,25305],{"class":81,"line":82},[79,25304,16727],{"class":448},[79,25306,25253],{"class":85},[79,25308,25309],{"class":81,"line":167},[79,25310,3652],{"class":228},[79,25312,25313,25315],{"class":81,"line":178},[79,25314,4070],{"class":448},[79,25316,23417],{"class":228},[79,25318,25319,25321,25323],{"class":81,"line":545},[79,25320,16942],{"class":448},[79,25322,13420],{"class":85},[79,25324,4061],{"class":228},[79,25326,25327],{"class":81,"line":550},[79,25328,4115],{"class":228},[79,25330,25331],{"class":81,"line":562},[79,25332,542],{"emptyLinePlaceholder":541},[79,25334,25335],{"class":81,"line":568},[79,25336,4272],{"class":228},[79,25338,25339,25341,25343,25346],{"class":81,"line":574},[79,25340,13055],{"class":448},[79,25342,24592],{"class":448},[79,25344,25345],{"class":85}," func1",[79,25347,4061],{"class":228},[79,25349,25350],{"class":81,"line":579},[79,25351,4115],{"class":228},[79,25353,25354],{"class":81,"line":585},[79,25355,542],{"emptyLinePlaceholder":541},[79,25357,25358],{"class":81,"line":591},[79,25359,4272],{"class":228},[79,25361,25362],{"class":81,"line":596},[79,25363,6068],{"class":228},[19,25365,25233],{},[19,25367,25368],{},"解释：静态成员函数也不属于类上",[2159,25370,9739],{},{"title":57,"searchDepth":167,"depth":167,"links":25372},[25373,25379],{"id":16678,"depth":167,"text":16679,"children":25374},[25375,25376,25377,25378],{"id":16682,"depth":178,"text":16683},{"id":17406,"depth":178,"text":17407},{"id":17578,"depth":178,"text":17579},{"id":18037,"depth":178,"text":18038},{"id":20402,"depth":167,"text":20403,"children":25380},[25381,25382,25383,25384,25385,25386,25387,25388,25389],{"id":20414,"depth":178,"text":20415},{"id":20707,"depth":178,"text":20708},{"id":21198,"depth":178,"text":21199},{"id":22295,"depth":178,"text":22296},{"id":22718,"depth":178,"text":22719},{"id":23197,"depth":178,"text":23198},{"id":23572,"depth":178,"text":23573},{"id":23985,"depth":178,"text":23986},{"id":24922,"depth":178,"text":24923},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":16643,"description":25390},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":25397,"title":2250,"body":25398,"description":25402,"extension":2186,"meta":25403,"navigation":541,"path":25405,"seo":25406,"stem":25407,"__hash__":25408},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":25399,"toc":25400},[],{"title":57,"searchDepth":167,"depth":167,"links":25401},[],null,{"category":25404},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":2250,"description":25402},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":25410,"title":25411,"body":25412,"description":57,"extension":2186,"meta":25997,"navigation":541,"path":25998,"seo":25999,"stem":26000,"__hash__":26001},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":25413,"toc":25979},[25414,25417,25421,25424,25427,25430,25448,25453,25456,25459,25462,25465,25470,25473,25478,25481,25484,25488,25491,25494,25500,25503,25521,25525,25529,25532,25537,25540,25544,25547,25560,25563,25567,25570,25573,25576,25601,25604,25613,25624,25639,25671,25675,25682,25690,25694,25697,25700,25705,25709,25712,25715,25720,25723,25727,25730,25733,25738,25741,25745,25750,25754,25819,25823,25826,25829,25832,25835,25838,25844,25861,25864,25878,25887,25891,25894,25897,25902,25905,25910,25915,25918,25921,25926,25931,25934,25939,25944,25947,25952,25957,25960,25963,25968,25971,25976],[10,25415,25411],{"id":25416},"_1强化学习基本认识",[14,25418,25420],{"id":25419},"_11什么是强化学习","1.1.什么是强化学习",[19,25422,25423],{},"强化学习有两部分组成：智能体和环境；",[19,25425,25426],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,25428,25429],{},"强化学习与监督学习的区别:",[26,25431,25432,25435,25438,25441],{},[29,25433,25434],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[29,25436,25437],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[29,25439,25440],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[29,25442,25443,25444,25447],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[2398,25445,25446],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,25449,25450],{},[3569,25451],{"alt":57,"src":25452},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,25454,25455],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,25457,25458],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,25460,25461],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,25463,25464],{},"获取奖励",[19,25466,25467],{},[3569,25468],{"alt":57,"src":25469},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,25471,25472],{},"强化学习可以分成标准强化学习和深度强化学习",[19,25474,25475],{},[3569,25476],{"alt":57,"src":25477},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,25479,25480],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,25482,25483],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,25485,25487],{"id":25486},"_12强化学习应用场景","1.2.强化学习应用场景",[19,25489,25490],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,25492,25493],{},"具身智能中的应用",[19,25495,25496,25499],{},[2398,25497,25498],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,25501,25502],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,25504,25505,25506,25509,25510,25513,25514,25517,25518],{},"机器人是",[2398,25507,25508],{},"躯体","，深度学习是",[2398,25511,25512],{},"神经元****网络","，VLA是",[2398,25515,25516],{},"通用的行为逻辑","，而强化学习是",[2398,25519,25520],{},"教练",[14,25522,25524],{"id":25523},"_13序列决策","1.3.序列决策",[339,25526,25528],{"id":25527},"_131智能体与环境","1.3.1.智能体与环境",[19,25530,25531],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,25533,25534],{},[3569,25535],{"alt":57,"src":25536},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,25538,25539],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[339,25541,25543],{"id":25542},"_132奖励","1.3.2.奖励",[19,25545,25546],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,25548,25549,25550,25559],{},"取某个策略的表现如何。强化学习的目的就是",[2398,25551,25552,25553,25558],{},"最大化",[2398,25554,25555],{},[2398,25556,25557],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,25561,25562],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[339,25564,25566],{"id":25565},"_133序列决策","1.3.3.序列决策",[19,25568,25569],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,25571,25572],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,25574,25575],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,25577,25578,25582,25583,25585,25586,25588,25589,25591,25592,15828,25595,15828,25598],{},[25579,25580,25581],"em",{},"Ht"," = ",[25579,25584,2836],{},"1*, a",[25579,25587,775],{},", r",[25579,25590,775],{},", . . . ,* ",[25579,25593,25594],{},"ot",[25579,25596,25597],{},", at ,",[25579,25599,25600],{},"rt",[19,25602,25603],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,25605,25606,25582,25609,3757,25611,2672],{},[25579,25607,25608],{},"st",[25579,25610,2307],{},[25579,25612,25581],{},[19,25614,25615,25616,25619,25620,25623],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[2398,25617,25618],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[2398,25621,25622],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,25625,25626,25627,25630,25631,25634,25635,25638],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[2398,25628,25629],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[2398,25632,25633],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[25579,25636,25637],{},"S, A, T, R, Ω, O, γ",")。",[19,25640,25641,25642,25644,25645,25647,25648,455,25650,25653,25654,25656,25657,455,25660,25663,25664,25666,25667,25670],{},"其中 ",[25579,25643,2929],{}," 表示状态空间，为隐变量，",[25579,25646,2476],{}," 为动作空间，",[25579,25649,2954],{},[25579,25651,25652],{},"s ′ |s, a",") 为状态转移概率，",[25579,25655,2904],{}," 为奖励函数，",[25579,25658,25659],{},"Ω",[25579,25661,25662],{},"o|s, a",") 为观测概率，",[25579,25665,2830],{}," 为观测空间，",[25579,25668,25669],{},"γ"," 为折扣因子。",[14,25672,25674],{"id":25673},"_14动作空间","1.4.动作空间",[19,25676,25677,25678,25681],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[2398,25679,25680],{},"动作空间"," ，动作空间分为:",[26,25683,25684,25687],{},[29,25685,25686],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[29,25688,25689],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,25691,25693],{"id":25692},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,25695,25696],{},"由策略、价值函数、模型三部分组成",[19,25698,25699],{},"这三者组成马尔可夫决策过程",[19,25701,25702],{},[3569,25703],{"alt":57,"src":25704},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[339,25706,25708],{"id":25707},"_151策略","1.5.1.策略",[19,25710,25711],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,25713,25714],{},"策略可分为两种：",[19,25716,25717],{},[3569,25718],{"alt":57,"src":25719},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,25721,25722],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[339,25724,25726],{"id":25725},"_152价值函数","1.5.2.价值函数",[19,25728,25729],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,25731,25732],{},"价值函数中有一个折扣因子，类似于存款利息",[19,25734,25735],{},[3569,25736],{"alt":57,"src":25737},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,25739,25740],{},"进入某个状态采取的最优动作可以通过Q函数得到",[339,25742,25744],{"id":25743},"_153模型","1.5.3.模型",[19,25746,25747],{},[3569,25748],{"alt":57,"src":25749},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,25751,25753],{"id":25752},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[347,25755,25756,25765],{},[350,25757,25758],{},[353,25759,25760,25762],{},[356,25761,362],{"align":358},[356,25763,25764],{"align":358},"特点",[367,25766,25767,25777,25787,25797,25809],{},[353,25768,25769,25774],{},[372,25770,25771],{"align":358},[2398,25772,25773],{},"基于价值的智能体",[372,25775,25776],{"align":358},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[353,25778,25779,25784],{},[372,25780,25781],{"align":358},[2398,25782,25783],{},"基于策略的智能体",[372,25785,25786],{"align":358},"直接学习策略，没有学习价值函数",[353,25788,25789,25794],{},[372,25790,25791],{"align":358},[2398,25792,25793],{},"演员-评论员智能体",[372,25795,25796],{"align":358},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[353,25798,25799,25804],{},[372,25800,25801],{"align":358},[2398,25802,25803],{},"有模型强化学习智能体",[372,25805,25806],{"align":358},[3569,25807],{"alt":57,"src":25808},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[353,25810,25811,25816],{},[372,25812,25813],{"align":358},[2398,25814,25815],{},"免模型强化学习智能体",[372,25817,25818],{"align":358},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,25820,25822],{"id":25821},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,25824,25825],{},"学习和规划是序列决策的两个基本问题",[19,25827,25828],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,25830,25831],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,25833,25834],{},"强化学习用到的库：Gym",[19,25836,25837],{},"Gym可以检验强化学习算法的优劣",[19,25839,25840,25843],{},[2398,25841,25842],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[51,25845,25847],{"className":73,"code":25846,"language":75,"meta":57,"style":57},"pip install gym==0.25.2\n",[59,25848,25849],{"__ignoreMap":57},[79,25850,25851,25853,25855,25858],{"class":81,"line":82},[79,25852,125],{"class":85},[79,25854,93],{"class":89},[79,25856,25857],{"class":89}," gym==",[79,25859,25860],{"class":96},"0.25.2\n",[19,25862,25863],{},"显示图形界面需要",[51,25865,25867],{"className":73,"code":25866,"language":75,"meta":57,"style":57},"pip install pygame\n",[59,25868,25869],{"__ignoreMap":57},[79,25870,25871,25873,25875],{"class":81,"line":82},[79,25872,125],{"class":85},[79,25874,93],{"class":89},[79,25876,25877],{"class":89}," pygame\n",[19,25879,25880,25881],{},"有关Gym库的相关文档介绍：",[2482,25882,25886],{"href":25883,"rel":25884},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[25885],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,25888,25890],{"id":25889},"_18一些补充基础概念","1.8.一些补充基础概念",[19,25892,25893],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,25895,25896],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,25898,25899],{},[3569,25900],{"alt":57,"src":25901},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,25903,25904],{},"折扣率需要自己来设定",[19,25906,25907],{},[3569,25908],{"alt":57,"src":25909},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[26,25911,25912],{},[29,25913,25914],{},"状态转移函数：",[19,25916,25917],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,25919,25920],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,25922,25923],{},[3569,25924],{"alt":57,"src":25925},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[26,25927,25928],{"start":167},[29,25929,25930],{},"动作价值函数：",[19,25932,25933],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,25935,25936],{},[3569,25937],{"alt":57,"src":25938},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[26,25940,25941],{"start":178},[29,25942,25943],{},"最优动作价值函数：",[19,25945,25946],{},"这个函数是对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,25948,25949],{},[3569,25950],{"alt":57,"src":25951},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[26,25953,25954],{"start":545},[29,25955,25956],{},"状态价值函数:",[19,25958,25959],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,25961,25962],{},"它衡量的是“一个具体动作”的长期价值",[19,25964,25965],{},[3569,25966],{"alt":57,"src":25967},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,25969,25970],{},"几个价值函数之间的比较：",[19,25972,25973],{},[3569,25974],{"alt":57,"src":25975},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[2159,25977,25978],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":57,"searchDepth":167,"depth":167,"links":25980},[25981,25982,25983,25988,25989,25994,25995,25996],{"id":25419,"depth":167,"text":25420},{"id":25486,"depth":167,"text":25487},{"id":25523,"depth":167,"text":25524,"children":25984},[25985,25986,25987],{"id":25527,"depth":178,"text":25528},{"id":25542,"depth":178,"text":25543},{"id":25565,"depth":178,"text":25566},{"id":25673,"depth":167,"text":25674},{"id":25692,"depth":167,"text":25693,"children":25990},[25991,25992,25993],{"id":25707,"depth":178,"text":25708},{"id":25725,"depth":178,"text":25726},{"id":25743,"depth":178,"text":25744},{"id":25752,"depth":167,"text":25753},{"id":25821,"depth":167,"text":25822},{"id":25889,"depth":167,"text":25890},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":25411,"description":57},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":26003,"title":26004,"body":26005,"description":26012,"extension":2186,"meta":26023,"navigation":541,"path":26024,"seo":26025,"stem":26026,"__hash__":26027},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":26006,"toc":26021},[26007,26010,26013,26018],[10,26008,26004],{"id":26009},"_2马尔可夫决策过程",[19,26011,26012],{},"这是强化学习的基本框架",[19,26014,26015],{},[3569,26016],{"alt":57,"src":26017},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,26019,26020],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":57,"searchDepth":167,"depth":167,"links":26022},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":26004,"description":26012},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":26029,"title":26030,"body":26031,"description":57,"extension":2186,"meta":26147,"navigation":541,"path":26148,"seo":26149,"stem":26150,"__hash__":26151},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":26032,"toc":26142},[26033,26036,26040,26043,26048,26053,26056,26061,26064,26069,26072,26076,26081,26084,26089,26094,26099,26102,26106,26111,26114,26119,26124,26129,26134,26137],[10,26034,26030],{"id":26035},"_3动作价值函数",[14,26037,26039],{"id":26038},"_31dqn","3.1.DQN",[19,26041,26042],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,26044,26045],{},[3569,26046],{"alt":57,"src":26047},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,26049,26050],{},[3569,26051],{"alt":57,"src":26052},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,26054,26055],{},"DQN算法的描述：",[19,26057,26058],{},[3569,26059],{"alt":57,"src":26060},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,26062,26063],{},"这里的Dense指的是全连接层",[19,26065,26066],{},[3569,26067],{"alt":57,"src":26068},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,26070,26071],{},"当前观测的状态为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,26073,26075],{"id":26074},"_32dqn的举例","3.2.DQN的举例",[19,26077,26078],{},[3569,26079],{"alt":57,"src":26080},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,26082,26083],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,26085,26086],{},[3569,26087],{"alt":57,"src":26088},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,26090,26091],{},[3569,26092],{"alt":57,"src":26093},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,26095,26096],{},[3569,26097],{"alt":57,"src":26098},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,26100,26101],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,26103,26105],{"id":26104},"_33td算法","3.3.TD算法",[19,26107,26108],{},[3569,26109],{"alt":57,"src":26110},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,26112,26113],{},"强化学习TD算法公式的粗略解释：",[19,26115,26116],{},[3569,26117],{"alt":57,"src":26118},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,26120,26121],{},[3569,26122],{"alt":57,"src":26123},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,26125,26126],{},[3569,26127],{"alt":57,"src":26128},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,26130,26131],{},[3569,26132],{"alt":57,"src":26133},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,26135,26136],{},"TD算法总结：",[19,26138,26139],{},[3569,26140],{"alt":57,"src":26141},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":57,"searchDepth":167,"depth":167,"links":26143},[26144,26145,26146],{"id":26038,"depth":167,"text":26039},{"id":26074,"depth":167,"text":26075},{"id":26104,"depth":167,"text":26105},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":26030,"description":57},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":26153,"title":26154,"body":26155,"description":57,"extension":2186,"meta":26388,"navigation":541,"path":26389,"seo":26390,"stem":26391,"__hash__":26392},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":26156,"toc":26384},[26157,26160,26164,26167,26170,26175,26180,26183,26188,26193,26196,26201,26204,26209,26212,26217,26220,26225,26228,26233,26238,26241,26246,26249,26252,26257,26260,26265,26270,26274,26277,26280,26285,26290,26293,26298,26303,26306,26311,26314,26317,26322,26325,26330,26333,26338,26343,26346,26351,26356,26359,26364,26367,26372,26375],[10,26158,26154],{"id":26159},"_4策略学习",[14,26161,26163],{"id":26162},"_41概念描述","4.1.概念描述",[19,26165,26166],{},"用神经网络（策略网络）近似策略函数",[19,26168,26169],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,26171,26172],{},[3569,26173],{"alt":57,"src":26174},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,26176,26177],{},[3569,26178],{"alt":57,"src":26179},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,26181,26182],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,26184,26185],{},[3569,26186],{"alt":57,"src":26187},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,26189,26190],{},[3569,26191],{"alt":57,"src":26192},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,26194,26195],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,26197,26198],{},[3569,26199],{"alt":57,"src":26200},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,26202,26203],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,26205,26206],{},[3569,26207],{"alt":57,"src":26208},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,26210,26211],{},"改进theta要用到策略梯度算法",[19,26213,26214],{},[3569,26215],{"alt":57,"src":26216},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,26218,26219],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,26221,26222],{},[3569,26223],{"alt":57,"src":26224},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,26226,26227],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,26229,26230],{},[3569,26231],{"alt":57,"src":26232},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,26234,26235],{},[3569,26236],{"alt":57,"src":26237},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,26239,26240],{},"梯度公式总结：",[19,26242,26243],{},[3569,26244],{"alt":57,"src":26245},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,26247,26248],{},"两个公式的分别应用场景：",[19,26250,26251],{},"对于离散的动作：",[19,26253,26254],{},[3569,26255],{"alt":57,"src":26256},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,26258,26259],{},"对于连续的动作：",[19,26261,26262],{},[3569,26263],{"alt":57,"src":26264},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,26266,26267],{},[3569,26268],{"alt":57,"src":26269},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,26271,26273],{"id":26272},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,26275,26276],{},"使用蒙特卡洛来近似计算策略梯度",[19,26278,26279],{},"蒙特卡洛法的解释如下：",[19,26281,26282],{},[3569,26283],{"alt":57,"src":26284},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,26286,26287],{},[3569,26288],{"alt":57,"src":26289},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,26291,26292],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[26,26294,26295],{},[29,26296,26297],{},"方法一：reinforce算法",[19,26299,26300],{},[3569,26301],{"alt":57,"src":26302},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,26304,26305],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[26,26307,26308],{"start":167},[29,26309,26310],{},"方法二：actor-critic算法",[19,26312,26313],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,26315,26316],{},"两个网络的构建：",[19,26318,26319],{},[3569,26320],{"alt":57,"src":26321},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,26323,26324],{},"actor网路：",[19,26326,26327],{},[3569,26328],{"alt":57,"src":26329},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,26331,26332],{},"critic网络",[19,26334,26335],{},[3569,26336],{"alt":57,"src":26337},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[26,26339,26340],{"start":178},[29,26341,26342],{},"网络的训练",[19,26344,26345],{},"网络描述",[19,26347,26348],{},[3569,26349],{"alt":57,"src":26350},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,26352,26353],{},[3569,26354],{"alt":57,"src":26355},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,26357,26358],{},"TD算法更新梯度：",[19,26360,26361],{},[3569,26362],{"alt":57,"src":26363},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,26365,26366],{},"策略网络更新梯度：",[19,26368,26369],{},[3569,26370],{"alt":57,"src":26371},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,26373,26374],{},"训练整个流程的具体描述：",[19,26376,26377,26380,26381],{},[3569,26378],{"alt":57,"src":26379},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[3569,26382],{"alt":57,"src":26383},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":57,"searchDepth":167,"depth":167,"links":26385},[26386,26387],{"id":26162,"depth":167,"text":26163},{"id":26272,"depth":167,"text":26273},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":26154,"description":57},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":26394,"title":26395,"body":26396,"description":26403,"extension":2186,"meta":26453,"navigation":541,"path":26454,"seo":26455,"stem":26456,"__hash__":26457},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":26397,"toc":26449},[26398,26401,26404,26408,26411,26416,26420,26423,26428,26431,26436,26441,26444],[10,26399,26395],{"id":26400},"_5alphago算法",[19,26402,26403],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,26405,26407],{"id":26406},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,26409,26410],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,26412,26413],{},[3569,26414],{"alt":57,"src":26415},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,26417,26419],{"id":26418},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,26421,26422],{},"采用强化学习的方式训练策略网络",[19,26424,26425],{},[3569,26426],{"alt":57,"src":26427},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,26429,26430],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,26432,26433],{},[3569,26434],{"alt":57,"src":26435},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,26437,26438],{},[3569,26439],{"alt":57,"src":26440},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,26442,26443],{},"强化学习训练策略网络的总结：",[19,26445,26446],{},[3569,26447],{"alt":57,"src":26448},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":57,"searchDepth":167,"depth":167,"links":26450},[26451,26452],{"id":26406,"depth":167,"text":26407},{"id":26418,"depth":167,"text":26419},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":26395,"description":26403},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":26459,"title":26460,"body":26461,"description":26468,"extension":2186,"meta":26471,"navigation":541,"path":26472,"seo":26473,"stem":26474,"__hash__":26475},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":26462,"toc":26469},[26463,26466],[10,26464,26460],{"id":26465},"_6价值网络",[19,26467,26468],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":57,"searchDepth":167,"depth":167,"links":26470},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":26460,"description":26468},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":26477,"title":26478,"body":26479,"description":26483,"extension":2186,"meta":26484,"navigation":541,"path":26485,"seo":26486,"stem":26487,"__hash__":26488},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":26480,"toc":26481},[],{"title":57,"searchDepth":167,"depth":167,"links":26482},[],"记录自己的强化学习笔记。",{"category":25404},"\u002Fwiki\u002F2025-12-04",{"title":26478,"description":26483},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":26490,"title":26491,"body":26492,"description":25402,"extension":2186,"meta":26531,"navigation":541,"path":26532,"seo":26533,"stem":26534,"__hash__":26535},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":26493,"toc":26529},[26494,26497,26500,26506,26509,26515,26518,26523,26526],[10,26495,26491],{"id":26496},"_1-项目概览与官方资源",[19,26498,26499],{},"官方文档：",[19,26501,26502],{},[2482,26503,26504],{"href":26504,"rel":26505},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[25885],[19,26507,26508],{},"官方代码仓库：",[19,26510,26511],{},[2482,26512,26513],{"href":26513,"rel":26514},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[25885],[19,26516,26517],{},"复现大体流程：",[19,26519,26520],{},[3569,26521],{"alt":57,"src":26522},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,26524,26525],{},"本教程的目标是打通这条链路：",[19,26527,26528],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":57,"searchDepth":167,"depth":167,"links":26530},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":26491,"description":25402},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":26537,"title":26538,"body":26539,"description":25402,"extension":2186,"meta":26654,"navigation":541,"path":26655,"seo":26656,"stem":26657,"__hash__":26658},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":26540,"toc":26649},[26541,26544,26548,26551,26558,26562,26565,26574,26584,26588,26617,26620,26646],[10,26542,26538],{"id":26543},"_2-环境准备与设备连接",[14,26545,26547],{"id":26546},"_21-系统与环境","2.1 系统与环境",[19,26549,26550],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,26552,26553,26554,26557],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[59,26555,26556],{},"lerobot"," 依赖。",[14,26559,26561],{"id":26560},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,26563,26564],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[51,26566,26568],{"className":73,"code":26567,"language":75,"meta":57,"style":57},"lerobot-find-out\n",[59,26569,26570],{"__ignoreMap":57},[79,26571,26572],{"class":81,"line":82},[79,26573,26567],{"class":85},[19,26575,26576,26577,2139,26580,26583],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[59,26578,26579],{},"\u002Fdev\u002FttyACM0",[59,26581,26582],{},"\u002Fdev\u002FttyACM1","）。",[14,26585,26587],{"id":26586},"_23-串口授权","2.3 串口授权",[51,26589,26591],{"className":73,"code":26590,"language":75,"meta":57,"style":57},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[59,26592,26593,26606],{"__ignoreMap":57},[79,26594,26595,26597,26600,26603],{"class":81,"line":82},[79,26596,86],{"class":85},[79,26598,26599],{"class":89}," chmod",[79,26601,26602],{"class":96}," 666",[79,26604,26605],{"class":89}," \u002Fdev\u002FttyACM0\n",[79,26607,26608,26610,26612,26614],{"class":81,"line":167},[79,26609,86],{"class":85},[79,26611,26599],{"class":89},[79,26613,26602],{"class":96},[79,26615,26616],{"class":89}," \u002Fdev\u002FttyACM1\n",[19,26618,26619],{},"说明：",[3246,26621,26622,26627,26633,26643],{},[29,26623,26624,26626],{},[59,26625,86],{},"：以 root 权限执行命令。",[29,26628,26629,26632],{},[59,26630,26631],{},"chmod","：修改设备节点权限。",[29,26634,26635,26638,26639,26642],{},[59,26636,26637],{},"666","：",[59,26640,26641],{},"rw-rw-rw-","，所有用户可读写。",[29,26644,26645],{},"串口号必须替换为你机器上的真实端口。",[2159,26647,26648],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":57,"searchDepth":167,"depth":167,"links":26650},[26651,26652,26653],{"id":26546,"depth":167,"text":26547},{"id":26560,"depth":167,"text":26561},{"id":26586,"depth":167,"text":26587},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":26538,"description":25402},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":26660,"title":26661,"body":26662,"description":25402,"extension":2186,"meta":26823,"navigation":541,"path":26824,"seo":26825,"stem":26826,"__hash__":26827},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":26663,"toc":26819},[26664,26668,26672,26678,26681,26738,26741,26745,26748,26816],[10,26665,26667],{"id":26666},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,26669,26671],{"id":26670},"_31-配置电机-id","3.1 配置电机 ID",[19,26673,26674,26675,26677],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[59,26676,775],{},"，需要改成机械臂链路里不冲突的编号。",[19,26679,26680],{},"方式一：用 LeRobot 命令逐步写入。",[51,26682,26684],{"className":73,"code":26683,"language":75,"meta":57,"style":57},"# 主臂舵机配置 ID\nlerobot-setup-motors \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0\n\n# 从臂舵机配置 ID\nlerobot-setup-motors \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1\n",[59,26685,26686,26691,26699,26706,26711,26715,26720,26726,26733],{"__ignoreMap":57},[79,26687,26688],{"class":81,"line":82},[79,26689,26690],{"class":2313},"# 主臂舵机配置 ID\n",[79,26692,26693,26696],{"class":81,"line":167},[79,26694,26695],{"class":85},"lerobot-setup-motors",[79,26697,26698],{"class":96}," \\\n",[79,26700,26701,26704],{"class":81,"line":178},[79,26702,26703],{"class":96},"  --teleop.type=so101_leader",[79,26705,26698],{"class":96},[79,26707,26708],{"class":81,"line":545},[79,26709,26710],{"class":96},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[79,26712,26713],{"class":81,"line":550},[79,26714,542],{"emptyLinePlaceholder":541},[79,26716,26717],{"class":81,"line":562},[79,26718,26719],{"class":2313},"# 从臂舵机配置 ID\n",[79,26721,26722,26724],{"class":81,"line":568},[79,26723,26695],{"class":85},[79,26725,26698],{"class":96},[79,26727,26728,26731],{"class":81,"line":574},[79,26729,26730],{"class":96},"  --robot.type=so101_follower",[79,26732,26698],{"class":96},[79,26734,26735],{"class":81,"line":579},[79,26736,26737],{"class":96},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,26739,26740],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,26742,26744],{"id":26743},"_32-机械臂校准","3.2 机械臂校准",[19,26746,26747],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[51,26749,26751],{"className":73,"code":26750,"language":75,"meta":57,"style":57},"# 主臂校准\nlerobot-calibrate \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0 \\\n  --teleop.id=my_awesome_leader_arm\n\n# 从臂校准\nlerobot-calibrate \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm\n",[59,26752,26753,26758,26765,26771,26778,26783,26787,26792,26798,26804,26811],{"__ignoreMap":57},[79,26754,26755],{"class":81,"line":82},[79,26756,26757],{"class":2313},"# 主臂校准\n",[79,26759,26760,26763],{"class":81,"line":167},[79,26761,26762],{"class":85},"lerobot-calibrate",[79,26764,26698],{"class":96},[79,26766,26767,26769],{"class":81,"line":178},[79,26768,26703],{"class":96},[79,26770,26698],{"class":96},[79,26772,26773,26776],{"class":81,"line":545},[79,26774,26775],{"class":96},"  --teleop.port=\u002Fdev\u002FttyACM0",[79,26777,26698],{"class":96},[79,26779,26780],{"class":81,"line":550},[79,26781,26782],{"class":96},"  --teleop.id=my_awesome_leader_arm\n",[79,26784,26785],{"class":81,"line":562},[79,26786,542],{"emptyLinePlaceholder":541},[79,26788,26789],{"class":81,"line":568},[79,26790,26791],{"class":2313},"# 从臂校准\n",[79,26793,26794,26796],{"class":81,"line":574},[79,26795,26762],{"class":85},[79,26797,26698],{"class":96},[79,26799,26800,26802],{"class":81,"line":579},[79,26801,26730],{"class":96},[79,26803,26698],{"class":96},[79,26805,26806,26809],{"class":81,"line":585},[79,26807,26808],{"class":96},"  --robot.port=\u002Fdev\u002FttyACM1",[79,26810,26698],{"class":96},[79,26812,26813],{"class":81,"line":591},[79,26814,26815],{"class":96},"  --robot.id=my_awesome_follower_arm\n",[2159,26817,26818],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":57,"searchDepth":167,"depth":167,"links":26820},[26821,26822],{"id":26670,"depth":167,"text":26671},{"id":26743,"depth":167,"text":26744},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":26661,"description":25402},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":26829,"title":26830,"body":26831,"description":25402,"extension":2186,"meta":27022,"navigation":541,"path":27023,"seo":27024,"stem":27025,"__hash__":27026},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":26832,"toc":27018},[26833,26836,26840,26887,26891,26904,26967,26970,27015],[10,26834,26830],{"id":26835},"_4-遥操与相机接入",[14,26837,26839],{"id":26838},"_41-不带相机遥操","4.1 不带相机遥操",[51,26841,26843],{"className":73,"code":26842,"language":75,"meta":57,"style":57},"lerobot-teleoperate \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0 \\\n  --teleop.id=my_awesome_leader_arm\n",[59,26844,26845,26852,26858,26864,26871,26877,26883],{"__ignoreMap":57},[79,26846,26847,26850],{"class":81,"line":82},[79,26848,26849],{"class":85},"lerobot-teleoperate",[79,26851,26698],{"class":96},[79,26853,26854,26856],{"class":81,"line":167},[79,26855,26730],{"class":96},[79,26857,26698],{"class":96},[79,26859,26860,26862],{"class":81,"line":178},[79,26861,26808],{"class":96},[79,26863,26698],{"class":96},[79,26865,26866,26869],{"class":81,"line":545},[79,26867,26868],{"class":96},"  --robot.id=my_awesome_follower_arm",[79,26870,26698],{"class":96},[79,26872,26873,26875],{"class":81,"line":550},[79,26874,26703],{"class":96},[79,26876,26698],{"class":96},[79,26878,26879,26881],{"class":81,"line":562},[79,26880,26775],{"class":96},[79,26882,26698],{"class":96},[79,26884,26885],{"class":81,"line":568},[79,26886,26782],{"class":96},[14,26888,26890],{"id":26889},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[51,26892,26894],{"className":73,"code":26893,"language":75,"meta":57,"style":57},"lerobot-find-cameras opencv\n",[59,26895,26896],{"__ignoreMap":57},[79,26897,26898,26901],{"class":81,"line":82},[79,26899,26900],{"class":85},"lerobot-find-cameras",[79,26902,26903],{"class":89}," opencv\n",[51,26905,26907],{"className":73,"code":26906,"language":75,"meta":57,"style":57},"lerobot-teleoperate \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm \\\n  --robot.cameras=\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\" \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0 \\\n  --teleop.id=my_awesome_leader_arm \\\n  --display_data=true\n",[59,26908,26909,26915,26921,26927,26933,26943,26949,26955,26962],{"__ignoreMap":57},[79,26910,26911,26913],{"class":81,"line":82},[79,26912,26849],{"class":85},[79,26914,26698],{"class":96},[79,26916,26917,26919],{"class":81,"line":167},[79,26918,26730],{"class":96},[79,26920,26698],{"class":96},[79,26922,26923,26925],{"class":81,"line":178},[79,26924,26808],{"class":96},[79,26926,26698],{"class":96},[79,26928,26929,26931],{"class":81,"line":545},[79,26930,26868],{"class":96},[79,26932,26698],{"class":96},[79,26934,26935,26938,26941],{"class":81,"line":550},[79,26936,26937],{"class":96},"  --robot.cameras=",[79,26939,26940],{"class":89},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[79,26942,26698],{"class":96},[79,26944,26945,26947],{"class":81,"line":562},[79,26946,26703],{"class":96},[79,26948,26698],{"class":96},[79,26950,26951,26953],{"class":81,"line":568},[79,26952,26775],{"class":96},[79,26954,26698],{"class":96},[79,26956,26957,26960],{"class":81,"line":574},[79,26958,26959],{"class":96},"  --teleop.id=my_awesome_leader_arm",[79,26961,26698],{"class":96},[79,26963,26964],{"class":81,"line":579},[79,26965,26966],{"class":96},"  --display_data=true\n",[19,26968,26969],{},"相机参数说明：",[3246,26971,26972,26978,26984,26993,27003,27009],{},[29,26973,26974,26977],{},[59,26975,26976],{},"front","：相机名称。",[29,26979,26980,26983],{},[59,26981,26982],{},"type: opencv","：相机驱动类型。",[29,26985,26986,26989,26990,26583],{},[59,26987,26988],{},"index_or_path","：设备编号或设备路径（如 ",[59,26991,26992],{},"\u002Fdev\u002Fvideo4",[29,26994,26995,26998,26999,27002],{},[59,26996,26997],{},"width"," \u002F ",[59,27000,27001],{},"height","：图像分辨率。",[29,27004,27005,27008],{},[59,27006,27007],{},"fps","：采样帧率。",[29,27010,27011,27014],{},[59,27012,27013],{},"--display_data=true","：启用实时可视化。",[2159,27016,27017],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":57,"searchDepth":167,"depth":167,"links":27019},[27020,27021],{"id":26838,"depth":167,"text":26839},{"id":26889,"depth":167,"text":26890},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":26830,"description":25402},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":27028,"title":27029,"body":27030,"description":25402,"extension":2186,"meta":27201,"navigation":541,"path":27202,"seo":27203,"stem":27204,"__hash__":27205},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":27031,"toc":27196},[27032,27036,27040,27045,27050,27053,27095,27101,27105,27153,27158,27162,27165,27173,27178,27183,27188,27193],[10,27033,27035],{"id":27034},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,27037,27039],{"id":27038},"_51-生成访问令牌","5.1 生成访问令牌",[19,27041,27042],{},[3569,27043],{"alt":57,"src":27044},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,27046,27047],{},[3569,27048],{"alt":57,"src":27049},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,27051,27052],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[51,27054,27056],{"className":73,"code":27055,"language":75,"meta":57,"style":57},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[59,27057,27058,27071],{"__ignoreMap":57},[79,27059,27060,27063,27066,27068],{"class":81,"line":82},[79,27061,27062],{"class":448},"export",[79,27064,27065],{"class":228}," HF_TOKEN",[79,27067,239],{"class":448},[79,27069,27070],{"class":89},"\"your_huggingface_token\"\n",[79,27072,27073,27076,27079,27082,27085,27087,27090,27092],{"class":81,"line":167},[79,27074,27075],{"class":85},"hf",[79,27077,27078],{"class":89}," auth",[79,27080,27081],{"class":89}," login",[79,27083,27084],{"class":96}," --token",[79,27086,11777],{"class":89},[79,27088,27089],{"class":228},"$HF_TOKEN",[79,27091,2495],{"class":89},[79,27093,27094],{"class":96}," --add-to-git-credential\n",[19,27096,27097,27100],{},[59,27098,27099],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,27102,27104],{"id":27103},"_52-验证登录","5.2 验证登录",[51,27106,27108],{"className":73,"code":27107,"language":75,"meta":57,"style":57},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[59,27109,27110,27140],{"__ignoreMap":57},[79,27111,27112,27115,27117,27120,27122,27124,27127,27130,27133,27135,27138],{"class":81,"line":82},[79,27113,27114],{"class":228},"HF_USER",[79,27116,239],{"class":448},[79,27118,27119],{"class":228},"$(",[79,27121,27075],{"class":85},[79,27123,27078],{"class":89},[79,27125,27126],{"class":89}," whoami",[79,27128,27129],{"class":448}," |",[79,27131,27132],{"class":85}," head",[79,27134,152],{"class":96},[79,27136,27137],{"class":96}," 1",[79,27139,850],{"class":228},[79,27141,27142,27145,27147,27150],{"class":81,"line":167},[79,27143,27144],{"class":96},"echo",[79,27146,11777],{"class":89},[79,27148,27149],{"class":228},"$HF_USER",[79,27151,27152],{"class":89},"\"\n",[19,27154,27155],{},[3569,27156],{"alt":57,"src":27157},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,27159,27161],{"id":27160},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,27163,27164],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[3246,27166,27167,27170],{},[29,27168,27169],{},"Dataset Repo（用于上传演示数据）",[29,27171,27172],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,27174,27175],{},[3569,27176],{"alt":57,"src":27177},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,27179,27180],{},[3569,27181],{"alt":57,"src":27182},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,27184,27185],{},[3569,27186],{"alt":57,"src":27187},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,27189,27190],{},[3569,27191],{"alt":57,"src":27192},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[2159,27194,27195],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":57,"searchDepth":167,"depth":167,"links":27197},[27198,27199,27200],{"id":27038,"depth":167,"text":27039},{"id":27103,"depth":167,"text":27104},{"id":27160,"depth":167,"text":27161},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":27029,"description":25402},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":27207,"title":27208,"body":27209,"description":25402,"extension":2186,"meta":27406,"navigation":541,"path":27407,"seo":27408,"stem":27409,"__hash__":27410},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":27210,"toc":27401},[27211,27215,27219,27315,27323,27328,27332,27348,27351,27355,27398],[10,27212,27214],{"id":27213},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,27216,27218],{"id":27217},"_61-录制示教数据","6.1 录制示教数据",[51,27220,27222],{"className":73,"code":27221,"language":75,"meta":57,"style":57},"lerobot-record \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm \\\n  --robot.cameras=\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\" \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0 \\\n  --teleop.id=my_awesome_leader_arm \\\n  --display_data=true \\\n  --dataset.repo_id=\"Embodied-AI-6\u002Fso101_test\" \\\n  --dataset.num_episodes=10 \\\n  --dataset.single_task=\"Grab the green cube\" \\\n  --resume=true\n",[59,27223,27224,27231,27237,27243,27249,27258,27264,27270,27276,27283,27293,27300,27310],{"__ignoreMap":57},[79,27225,27226,27229],{"class":81,"line":82},[79,27227,27228],{"class":85},"lerobot-record",[79,27230,26698],{"class":96},[79,27232,27233,27235],{"class":81,"line":167},[79,27234,26730],{"class":96},[79,27236,26698],{"class":96},[79,27238,27239,27241],{"class":81,"line":178},[79,27240,26808],{"class":96},[79,27242,26698],{"class":96},[79,27244,27245,27247],{"class":81,"line":545},[79,27246,26868],{"class":96},[79,27248,26698],{"class":96},[79,27250,27251,27253,27256],{"class":81,"line":550},[79,27252,26937],{"class":96},[79,27254,27255],{"class":89},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[79,27257,26698],{"class":96},[79,27259,27260,27262],{"class":81,"line":562},[79,27261,26703],{"class":96},[79,27263,26698],{"class":96},[79,27265,27266,27268],{"class":81,"line":568},[79,27267,26775],{"class":96},[79,27269,26698],{"class":96},[79,27271,27272,27274],{"class":81,"line":574},[79,27273,26959],{"class":96},[79,27275,26698],{"class":96},[79,27277,27278,27281],{"class":81,"line":579},[79,27279,27280],{"class":96},"  --display_data=true",[79,27282,26698],{"class":96},[79,27284,27285,27288,27291],{"class":81,"line":585},[79,27286,27287],{"class":96},"  --dataset.repo_id=",[79,27289,27290],{"class":89},"\"Embodied-AI-6\u002Fso101_test\"",[79,27292,26698],{"class":96},[79,27294,27295,27298],{"class":81,"line":591},[79,27296,27297],{"class":96},"  --dataset.num_episodes=10",[79,27299,26698],{"class":96},[79,27301,27302,27305,27308],{"class":81,"line":596},[79,27303,27304],{"class":96},"  --dataset.single_task=",[79,27306,27307],{"class":89},"\"Grab the green cube\"",[79,27309,26698],{"class":96},[79,27311,27312],{"class":81,"line":602},[79,27313,27314],{"class":96},"  --resume=true\n",[3246,27316,27317],{},[29,27318,27319,27322],{},[59,27320,27321],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,27324,27325],{},[3569,27326],{"alt":57,"src":27327},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,27329,27331],{"id":27330},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[51,27333,27335],{"className":73,"code":27334,"language":75,"meta":57,"style":57},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[59,27336,27337],{"__ignoreMap":57},[79,27338,27339,27342,27345],{"class":81,"line":82},[79,27340,27341],{"class":85},"rm",[79,27343,27344],{"class":96}," -rf",[79,27346,27347],{"class":89}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,27349,27350],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,27352,27354],{"id":27353},"_63-回放指定-episode","6.3 回放指定 episode",[51,27356,27358],{"className":73,"code":27357,"language":75,"meta":57,"style":57},"lerobot-replay \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm \\\n  --dataset.repo_id=\"Embodied-AI-6\u002Fso101_test\" \\\n  --dataset.episode=0\n",[59,27359,27360,27367,27373,27379,27385,27393],{"__ignoreMap":57},[79,27361,27362,27365],{"class":81,"line":82},[79,27363,27364],{"class":85},"lerobot-replay",[79,27366,26698],{"class":96},[79,27368,27369,27371],{"class":81,"line":167},[79,27370,26730],{"class":96},[79,27372,26698],{"class":96},[79,27374,27375,27377],{"class":81,"line":178},[79,27376,26808],{"class":96},[79,27378,26698],{"class":96},[79,27380,27381,27383],{"class":81,"line":545},[79,27382,26868],{"class":96},[79,27384,26698],{"class":96},[79,27386,27387,27389,27391],{"class":81,"line":550},[79,27388,27287],{"class":96},[79,27390,27290],{"class":89},[79,27392,26698],{"class":96},[79,27394,27395],{"class":81,"line":562},[79,27396,27397],{"class":96},"  --dataset.episode=0\n",[2159,27399,27400],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":57,"searchDepth":167,"depth":167,"links":27402},[27403,27404,27405],{"id":27217,"depth":167,"text":27218},{"id":27330,"depth":167,"text":27331},{"id":27353,"depth":167,"text":27354},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":27208,"description":25402},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":27412,"title":27413,"body":27414,"description":25402,"extension":2186,"meta":27542,"navigation":541,"path":27543,"seo":27544,"stem":27545,"__hash__":27546},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":27415,"toc":27540},[27416,27420,27483,27486,27533,27538],[10,27417,27419],{"id":27418},"_7-act-模型训练","7. ACT 模型训练",[51,27421,27423],{"className":73,"code":27422,"language":75,"meta":57,"style":57},"lerobot-train \\\n  --dataset.repo_id=\"Embodied-AI-6\u002Fso101_test\" \\\n  --policy.type=act \\\n  --output_dir=outputs\u002Ftrain\u002Fact_so101_test \\\n  --job_name=act_so101_test \\\n  --policy.device=cuda \\\n  --wandb.enable=false \\\n  --policy.repo_id=\"Embodied-AI-6\u002Flerobot_new\"\n",[59,27424,27425,27432,27440,27447,27454,27461,27468,27475],{"__ignoreMap":57},[79,27426,27427,27430],{"class":81,"line":82},[79,27428,27429],{"class":85},"lerobot-train",[79,27431,26698],{"class":96},[79,27433,27434,27436,27438],{"class":81,"line":167},[79,27435,27287],{"class":96},[79,27437,27290],{"class":89},[79,27439,26698],{"class":96},[79,27441,27442,27445],{"class":81,"line":178},[79,27443,27444],{"class":96},"  --policy.type=act",[79,27446,26698],{"class":96},[79,27448,27449,27452],{"class":81,"line":545},[79,27450,27451],{"class":96},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[79,27453,26698],{"class":96},[79,27455,27456,27459],{"class":81,"line":550},[79,27457,27458],{"class":96},"  --job_name=act_so101_test",[79,27460,26698],{"class":96},[79,27462,27463,27466],{"class":81,"line":562},[79,27464,27465],{"class":96},"  --policy.device=cuda",[79,27467,26698],{"class":96},[79,27469,27470,27473],{"class":81,"line":568},[79,27471,27472],{"class":96},"  --wandb.enable=false",[79,27474,26698],{"class":96},[79,27476,27477,27480],{"class":81,"line":574},[79,27478,27479],{"class":96},"  --policy.repo_id=",[79,27481,27482],{"class":89},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,27484,27485],{},"参数说明：",[3246,27487,27488,27494,27500,27506,27512,27521,27527],{},[29,27489,27490,27493],{},[59,27491,27492],{},"--dataset.repo_id","：训练数据集仓库。",[29,27495,27496,27499],{},[59,27497,27498],{},"--policy.type=act","：策略模型类型为 ACT。",[29,27501,27502,27505],{},[59,27503,27504],{},"--output_dir","：本地训练输出目录。",[29,27507,27508,27511],{},[59,27509,27510],{},"--job_name","：训练任务名称。",[29,27513,27514,27517,27518,26583],{},[59,27515,27516],{},"--policy.device","：训练设备（如 ",[59,27519,27520],{},"cuda",[29,27522,27523,27526],{},[59,27524,27525],{},"--wandb.enable","：是否启用 WandB 可视化。",[29,27528,27529,27532],{},[59,27530,27531],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,27534,27535],{},[3569,27536],{"alt":57,"src":27537},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[2159,27539,27400],{},{"title":57,"searchDepth":167,"depth":167,"links":27541},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":27413,"description":25402},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":27548,"title":27549,"body":27550,"description":25402,"extension":2186,"meta":27637,"navigation":541,"path":27638,"seo":27639,"stem":27640,"__hash__":27641},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":27551,"toc":27635},[27552,27555,27558,27625,27633],[10,27553,27549],{"id":27554},"_8-策略部署与自动采集",[19,27556,27557],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[51,27559,27561],{"className":73,"code":27560,"language":75,"meta":57,"style":57},"lerobot-record \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.cameras=\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\" \\\n  --robot.id=my_awesome_follower_arm \\\n  --display_data=false \\\n  --dataset.repo_id=\"Embodied-AI-6\u002Fso101_test\" \\\n  --dataset.single_task=\"Grab the green cube\" \\\n  --policy.path=\"Embodied-AI-6\u002Flerobot_new\"\n",[59,27562,27563,27569,27575,27581,27589,27595,27602,27610,27618],{"__ignoreMap":57},[79,27564,27565,27567],{"class":81,"line":82},[79,27566,27228],{"class":85},[79,27568,26698],{"class":96},[79,27570,27571,27573],{"class":81,"line":167},[79,27572,26730],{"class":96},[79,27574,26698],{"class":96},[79,27576,27577,27579],{"class":81,"line":178},[79,27578,26808],{"class":96},[79,27580,26698],{"class":96},[79,27582,27583,27585,27587],{"class":81,"line":545},[79,27584,26937],{"class":96},[79,27586,27255],{"class":89},[79,27588,26698],{"class":96},[79,27590,27591,27593],{"class":81,"line":550},[79,27592,26868],{"class":96},[79,27594,26698],{"class":96},[79,27596,27597,27600],{"class":81,"line":562},[79,27598,27599],{"class":96},"  --display_data=false",[79,27601,26698],{"class":96},[79,27603,27604,27606,27608],{"class":81,"line":568},[79,27605,27287],{"class":96},[79,27607,27290],{"class":89},[79,27609,26698],{"class":96},[79,27611,27612,27614,27616],{"class":81,"line":574},[79,27613,27304],{"class":96},[79,27615,27307],{"class":89},[79,27617,26698],{"class":96},[79,27619,27620,27623],{"class":81,"line":579},[79,27621,27622],{"class":96},"  --policy.path=",[79,27624,27482],{"class":89},[3246,27626,27627],{},[29,27628,27629,27632],{},[59,27630,27631],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[2159,27634,27400],{},{"title":57,"searchDepth":167,"depth":167,"links":27636},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":27549,"description":25402},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":27643,"title":27644,"body":27645,"description":25402,"extension":2186,"meta":27674,"navigation":541,"path":27675,"seo":27676,"stem":27677,"__hash__":27678},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":27646,"toc":27672},[27647,27651,27654,27660,27663,27669],[10,27648,27650],{"id":27649},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,27652,27653],{},"项目地址：",[19,27655,27656],{},[2482,27657,27658],{"href":27658,"rel":27659},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[25885],[19,27661,27662],{},"参考教程：",[19,27664,27665],{},[2482,27666,27667],{"href":27667,"rel":27668},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[25885],[19,27670,27671],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":57,"searchDepth":167,"depth":167,"links":27673},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":27644,"description":25402},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":27680,"title":27681,"body":27682,"description":27686,"extension":2186,"meta":27687,"navigation":541,"path":27688,"seo":27689,"stem":27690,"__hash__":27691},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":27683,"toc":27684},[],{"title":57,"searchDepth":167,"depth":167,"links":27685},[],"act复现",{"category":25404},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":27681,"description":27686},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":27693,"title":27694,"body":27695,"description":57,"extension":2186,"meta":27997,"navigation":541,"path":27998,"seo":27999,"stem":28000,"__hash__":28001},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":27696,"toc":27989},[27697,27700,27704,27714,27721,27728,27731,27738,27741,27744,27748,27760,27764,27810,27813,27816,27819,27822,27825,27829,27867,27873,27877,27931,27936,27939,27942,27947,27950,27955,27958,27961,27965,27968,27971,27975],[10,27698,27694],{"id":27699},"_1简介",[339,27701,27703],{"id":27702},"_11什么是-docker","1.1什么是 Docker？",[19,27705,27706,27707,27710,27711],{},"Docker 是一个开源的 ",[2398,27708,27709],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[2398,27712,27713],{},"一次构建，到处运行。",[19,27715,27716,27717,27720],{},"“ ",[2398,27718,27719],{},"一次构建，到处运行"," ”也就是说：",[26,27722,27723],{},[29,27724,27725],{},[2398,27726,27727],{},"之前：",[19,27729,27730],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[26,27732,27733],{},[29,27734,27735],{},[2398,27736,27737],{},"使用docker后：",[19,27739,27740],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,27742,27743],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[339,27745,27747],{"id":27746},"_12它是怎么工作的","1.2.它是怎么工作的？",[3246,27749,27750,27753],{},[29,27751,27752],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[29,27754,27755,27756,27759],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[2398,27757,27758],{},"无论在哪运行都一样稳定"," 。",[339,27761,27763],{"id":27762},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[347,27765,27766,27776],{},[350,27767,27768],{},[353,27769,27770,27773],{},[356,27771,27772],{"align":358},"概念",[356,27774,27775],{"align":358},"解释",[367,27777,27778,27786,27794,27802],{},[353,27779,27780,27783],{},[372,27781,27782],{"align":358},"镜像",[372,27784,27785],{"align":358},"Image，运行容器的模板，像是一个应用快照",[353,27787,27788,27791],{},[372,27789,27790],{"align":358},"容器",[372,27792,27793],{"align":358},"Container，运行中的镜像实例，有自己的文件系统、网络等",[353,27795,27796,27799],{},[372,27797,27798],{"align":358},"Dockerfile",[372,27800,27801],{"align":358},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[353,27803,27804,27807],{},[372,27805,27806],{"align":358},"仓库",[372,27808,27809],{"align":358},"Registry，存放镜像的地方，比如 Docker Hub",[19,27811,27812],{},"抽象化理解:",[19,27814,27815],{},"Docker镜像≈C++类",[19,27817,27818],{},"Docker容器≈C++类实例(即对象)",[19,27820,27821],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,27823,27824],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[339,27826,27828],{"id":27827},"_14类比理解","1.4.类比理解",[347,27830,27831,27841],{},[350,27832,27833],{},[353,27834,27835,27838],{},[356,27836,27837],{"align":358},"传统部署",[356,27839,27840],{"align":358},"Docker部署",[367,27842,27843,27851,27859],{},[353,27844,27845,27848],{},[372,27846,27847],{"align":358},"手动安装依赖、调试版本不一致问题",[372,27849,27850],{"align":358},"一次打包环境和代码",[353,27852,27853,27856],{},[372,27854,27855],{"align":358},"程序“裸奔”跑在系统上",[372,27857,27858],{"align":358},"程序“穿着容器”隔离运行",[353,27860,27861,27864],{},[372,27862,27863],{"align":358},"容易“在我电脑上能跑”",[372,27865,27866],{"align":358},"保证“无论在哪都能跑”",[19,27868,27869,27870],{},"就像快递包裹： ",[2398,27871,27872],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[339,27874,27876],{"id":27875},"_15docker-的核心优势","1.5.Docker 的核心优势",[347,27878,27879,27889],{},[350,27880,27881],{},[353,27882,27883,27886],{},[356,27884,27885],{"align":358},"优势",[356,27887,27888],{"align":358},"说明",[367,27890,27891,27899,27907,27915,27923],{},[353,27892,27893,27896],{},[372,27894,27895],{"align":358},"轻量级",[372,27897,27898],{"align":358},"基于系统内核共享，启动速度快，占资源少",[353,27900,27901,27904],{},[372,27902,27903],{"align":358},"跨平台",[372,27905,27906],{"align":358},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[353,27908,27909,27912],{},[372,27910,27911],{"align":358},"易于迁移部署",[372,27913,27914],{"align":358},"应用和环境一起封装，不怕依赖不一致",[353,27916,27917,27920],{},[372,27918,27919],{"align":358},"易于版本控制",[372,27921,27922],{"align":358},"镜像版本可控，支持回滚",[353,27924,27925,27928],{},[372,27926,27927],{"align":358},"生态丰富",[372,27929,27930],{"align":358},"Docker Hub 上有成千上万的现成镜像可用",[26,27932,27933],{},[29,27934,27935],{},"在Linux上可以几乎实现无性能损失。",[19,27937,27938],{},"docker里的发行版和本机共用Linux内核。",[19,27940,27941],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[26,27943,27944],{},[29,27945,27946],{},"可以快速部署在绝大多数Linux发行版",[19,27948,27949],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[26,27951,27952],{},[29,27953,27954],{},"配置环境简单",[19,27956,27957],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,27959,27960],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[26,27962,27963],{},[29,27964,27927],{},[19,27966,27967],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,27969,27970],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[339,27972,27974],{"id":27973},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[3246,27976,27977,27980,27983,27986],{},[29,27978,27979],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[29,27981,27982],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[29,27984,27985],{},"微服务架构：每个服务一个容器，灵活组合",[29,27987,27988],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":57,"searchDepth":167,"depth":167,"links":27990},[27991,27992,27993,27994,27995,27996],{"id":27702,"depth":178,"text":27703},{"id":27746,"depth":178,"text":27747},{"id":27762,"depth":178,"text":27763},{"id":27827,"depth":178,"text":27828},{"id":27875,"depth":178,"text":27876},{"id":27973,"depth":178,"text":27974},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":27694,"description":57},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":28003,"title":28004,"body":28005,"description":57,"extension":2186,"meta":28735,"navigation":541,"path":28736,"seo":28737,"stem":28738,"__hash__":28739},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":28006,"toc":28730},[28007,28010,28014,28017,28020,28026,28032,28036,28045,28048,28104,28107,28158,28161,28244,28247,28284,28288,28299,28312,28319,28322,28401,28404,28453,28456,28479,28483,28490,28493,28509,28515,28518,28534,28540,28543,28559,28573,28579,28599,28605,28608,28620,28626,28629,28643,28649,28652,28672,28677,28680,28683,28687,28690,28693,28696,28703,28706,28709,28712,28717,28722,28727],[10,28008,28004],{"id":28009},"_2安装docker",[339,28011,28013],{"id":28012},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,28015,28016],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,28018,28019],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,28021,28022],{},[2482,28023,28024],{"href":28024,"rel":28025},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[25885],[19,28027,28028],{},[2482,28029,28030],{"href":28030,"rel":28031},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[25885],[24023,28033,28035],{"id":28034},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,28037,28038,28039,28044],{},"以下内容根据 ",[2482,28040,28043],{"href":28041,"rel":28042},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[25885],"官方文档"," 修改而来。",[19,28046,28047],{},"如果你过去安装过 docker，先删掉：",[51,28049,28051],{"className":73,"code":28050,"language":75,"meta":57,"style":57},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[59,28052,28053],{"__ignoreMap":57},[79,28054,28055,28057,28060,28062,28065,28068,28071,28074,28077,28080,28083,28086,28089,28092,28095,28098,28101],{"class":81,"line":82},[79,28056,1638],{"class":448},[79,28058,28059],{"class":228}," pkg ",[79,28061,921],{"class":448},[79,28063,28064],{"class":89}," docker.io",[79,28066,28067],{"class":89}," docker-doc",[79,28069,28070],{"class":89}," docker-compose",[79,28072,28073],{"class":89}," docker-compose-v2",[79,28075,28076],{"class":89}," podman-docker",[79,28078,28079],{"class":89}," containerd",[79,28081,28082],{"class":89}," runc",[79,28084,28085],{"class":228},"; ",[79,28087,28088],{"class":448},"do",[79,28090,28091],{"class":85}," sudo",[79,28093,28094],{"class":89}," apt-get",[79,28096,28097],{"class":89}," remove",[79,28099,28100],{"class":228}," $pkg; ",[79,28102,28103],{"class":448},"done\n",[19,28105,28106],{},"首先安装依赖和GPG：",[51,28108,28112],{"className":28109,"code":28110,"language":28111,"meta":57,"style":57},"language-markdown shiki shiki-themes github-light github-dark","# Add Docker's official GPG key:\nsudo apt-get update\nsudo apt-get install ca-certificates curl\nsudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\nsudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\nsudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n\n# 如果上面这行报错就弄下面这行\nsudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n","markdown",[59,28113,28114,28119,28124,28129,28134,28139,28144,28148,28153],{"__ignoreMap":57},[79,28115,28116],{"class":81,"line":82},[79,28117,28118],{},"# Add Docker's official GPG key:\n",[79,28120,28121],{"class":81,"line":167},[79,28122,28123],{},"sudo apt-get update\n",[79,28125,28126],{"class":81,"line":178},[79,28127,28128],{},"sudo apt-get install ca-certificates curl\n",[79,28130,28131],{"class":81,"line":545},[79,28132,28133],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[79,28135,28136],{"class":81,"line":550},[79,28137,28138],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[79,28140,28141],{"class":81,"line":562},[79,28142,28143],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[79,28145,28146],{"class":81,"line":568},[79,28147,542],{"emptyLinePlaceholder":541},[79,28149,28150],{"class":81,"line":574},[79,28151,28152],{},"# 如果上面这行报错就弄下面这行\n",[79,28154,28155],{"class":81,"line":579},[79,28156,28157],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,28159,28160],{},"信任 Docker 的 GPG 公钥并添加仓库：",[51,28162,28164],{"className":73,"code":28163,"language":75,"meta":57,"style":57},"# Add the repository to Apt sources:\necho \\\n  \"deb [arch=$(dpkg --print-architecture) signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu \\\n  \"$(. \u002Fetc\u002Fos-release && echo \"$VERSION_CODENAME\")\" stable\" | \\\n  sudo tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list > \u002Fdev\u002Fnull\n",[59,28165,28166,28171,28177,28194,28227],{"__ignoreMap":57},[79,28167,28168],{"class":81,"line":82},[79,28169,28170],{"class":2313},"# Add the repository to Apt sources:\n",[79,28172,28173,28175],{"class":81,"line":167},[79,28174,27144],{"class":96},[79,28176,26698],{"class":96},[79,28178,28179,28182,28185,28188,28191],{"class":81,"line":178},[79,28180,28181],{"class":89},"  \"deb [arch=$(",[79,28183,28184],{"class":85},"dpkg",[79,28186,28187],{"class":96}," --print-architecture",[79,28189,28190],{"class":89},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[79,28192,28193],{"class":96},"\\\n",[79,28195,28196,28199,28201,28203,28206,28209,28211,28213,28216,28218,28220,28223,28225],{"class":81,"line":545},[79,28197,28198],{"class":89},"  \"",[79,28200,27119],{"class":228},[79,28202,2798],{"class":96},[79,28204,28205],{"class":89}," \u002Fetc\u002Fos-release",[79,28207,28208],{"class":228}," && ",[79,28210,27144],{"class":96},[79,28212,11777],{"class":89},[79,28214,28215],{"class":228},"$VERSION_CODENAME",[79,28217,2495],{"class":89},[79,28219,2672],{"class":228},[79,28221,28222],{"class":89},"\" stable\"",[79,28224,27129],{"class":448},[79,28226,26698],{"class":96},[79,28228,28229,28232,28235,28238,28241],{"class":81,"line":550},[79,28230,28231],{"class":85},"  sudo",[79,28233,28234],{"class":89}," tee",[79,28236,28237],{"class":89}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[79,28239,28240],{"class":448}," >",[79,28242,28243],{"class":89}," \u002Fdev\u002Fnull\n",[19,28245,28246],{},"最后安装",[51,28248,28250],{"className":73,"code":28249,"language":75,"meta":57,"style":57},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[59,28251,28252,28261],{"__ignoreMap":57},[79,28253,28254,28256,28258],{"class":81,"line":82},[79,28255,86],{"class":85},[79,28257,28094],{"class":89},[79,28259,28260],{"class":89}," update\n",[79,28262,28263,28265,28267,28269,28272,28275,28278,28281],{"class":81,"line":167},[79,28264,86],{"class":85},[79,28266,28094],{"class":89},[79,28268,93],{"class":89},[79,28270,28271],{"class":89}," docker-ce",[79,28273,28274],{"class":89}," docker-ce-cli",[79,28276,28277],{"class":89}," containerd.io",[79,28279,28280],{"class":89}," docker-buildx-plugin",[79,28282,28283],{"class":89}," docker-compose-plugin\n",[24023,28285,28287],{"id":28286},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,28289,28290,28291,28294,28295,28298],{},"查看自己自己包管理工具版本（dnf是 ",[2398,28292,28293],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[2398,28296,28297],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[51,28300,28302],{"className":73,"code":28301,"language":75,"meta":57,"style":57},"dnf --version\n",[59,28303,28304],{"__ignoreMap":57},[79,28305,28306,28309],{"class":81,"line":82},[79,28307,28308],{"class":85},"dnf",[79,28310,28311],{"class":96}," --version\n",[19,28313,28038,28314,28318],{},[2482,28315,28043],{"href":28316,"rel":28317},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[25885]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,28320,28321],{},"如果你之前安装过 docker，请先删掉",[51,28323,28325],{"className":73,"code":28324,"language":75,"meta":57,"style":57},"sudo dnf remove docker \\\n                  docker-client \\\n                  docker-client-latest \\\n                  docker-common \\\n                  docker-latest \\\n                  docker-latest-logrotate \\\n                  docker-logrotate \\\n                  docker-selinux \\\n                  docker-engine-selinux \\\n                  docker-engine\n",[59,28326,28327,28340,28347,28354,28361,28368,28375,28382,28389,28396],{"__ignoreMap":57},[79,28328,28329,28331,28333,28335,28338],{"class":81,"line":82},[79,28330,86],{"class":85},[79,28332,90],{"class":89},[79,28334,28097],{"class":89},[79,28336,28337],{"class":89}," docker",[79,28339,26698],{"class":96},[79,28341,28342,28345],{"class":81,"line":167},[79,28343,28344],{"class":89},"                  docker-client",[79,28346,26698],{"class":96},[79,28348,28349,28352],{"class":81,"line":178},[79,28350,28351],{"class":89},"                  docker-client-latest",[79,28353,26698],{"class":96},[79,28355,28356,28359],{"class":81,"line":545},[79,28357,28358],{"class":89},"                  docker-common",[79,28360,26698],{"class":96},[79,28362,28363,28366],{"class":81,"line":550},[79,28364,28365],{"class":89},"                  docker-latest",[79,28367,26698],{"class":96},[79,28369,28370,28373],{"class":81,"line":562},[79,28371,28372],{"class":89},"                  docker-latest-logrotate",[79,28374,26698],{"class":96},[79,28376,28377,28380],{"class":81,"line":568},[79,28378,28379],{"class":89},"                  docker-logrotate",[79,28381,26698],{"class":96},[79,28383,28384,28387],{"class":81,"line":574},[79,28385,28386],{"class":89},"                  docker-selinux",[79,28388,26698],{"class":96},[79,28390,28391,28394],{"class":81,"line":579},[79,28392,28393],{"class":89},"                  docker-engine-selinux",[79,28395,26698],{"class":96},[79,28397,28398],{"class":81,"line":585},[79,28399,28400],{"class":89},"                  docker-engine\n",[19,28402,28403],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[51,28405,28407],{"className":73,"code":28406,"language":75,"meta":57,"style":57},"sudo dnf -y install dnf-plugins-core\nsudo dnf config-manager addrepo --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\nsudo sed -i 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+' \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[59,28408,28409,28422,28437],{"__ignoreMap":57},[79,28410,28411,28413,28415,28417,28419],{"class":81,"line":82},[79,28412,86],{"class":85},[79,28414,90],{"class":89},[79,28416,97],{"class":96},[79,28418,93],{"class":89},[79,28420,28421],{"class":89}," dnf-plugins-core\n",[79,28423,28424,28426,28428,28431,28434],{"class":81,"line":167},[79,28425,86],{"class":85},[79,28427,90],{"class":89},[79,28429,28430],{"class":89}," config-manager",[79,28432,28433],{"class":89}," addrepo",[79,28435,28436],{"class":96}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[79,28438,28439,28441,28444,28447,28450],{"class":81,"line":178},[79,28440,86],{"class":85},[79,28442,28443],{"class":89}," sed",[79,28445,28446],{"class":96}," -i",[79,28448,28449],{"class":89}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[79,28451,28452],{"class":89}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,28454,28455],{},"最后安装：",[51,28457,28459],{"className":73,"code":28458,"language":75,"meta":57,"style":57},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[59,28460,28461],{"__ignoreMap":57},[79,28462,28463,28465,28467,28469,28471,28473,28475,28477],{"class":81,"line":82},[79,28464,86],{"class":85},[79,28466,90],{"class":89},[79,28468,93],{"class":89},[79,28470,28271],{"class":89},[79,28472,28274],{"class":89},[79,28474,28277],{"class":89},[79,28476,28280],{"class":89},[79,28478,28283],{"class":89},[339,28480,28482],{"id":28481},"_22配置环境","2.2.配置环境",[24023,28484,28486,28489],{"id":28485},"_221检查-docker-服务状态",[2398,28487,28488],{},"2.2.1.检查 Docker 服务状态"," ：",[19,28491,28492],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[51,28494,28496],{"className":73,"code":28495,"language":75,"meta":57,"style":57},"systemctl status docker\n",[59,28497,28498],{"__ignoreMap":57},[79,28499,28500,28503,28506],{"class":81,"line":82},[79,28501,28502],{"class":85},"systemctl",[79,28504,28505],{"class":89}," status",[79,28507,28508],{"class":89}," docker\n",[24023,28510,28512,28489],{"id":28511},"_222启动-docker-服务",[2398,28513,28514],{},"2.2.2.启动 Docker 服务",[19,28516,28517],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[51,28519,28521],{"className":73,"code":28520,"language":75,"meta":57,"style":57},"sudo systemctl start docker\n",[59,28522,28523],{"__ignoreMap":57},[79,28524,28525,28527,28530,28532],{"class":81,"line":82},[79,28526,86],{"class":85},[79,28528,28529],{"class":89}," systemctl",[79,28531,6255],{"class":89},[79,28533,28508],{"class":89},[24023,28535,28537,28489],{"id":28536},"_223设置-docker-开机自启",[2398,28538,28539],{},"2.2.3.设置 Docker 开机自启",[19,28541,28542],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[51,28544,28546],{"className":73,"code":28545,"language":75,"meta":57,"style":57},"sudo systemctl enable docker\n",[59,28547,28548],{"__ignoreMap":57},[79,28549,28550,28552,28554,28557],{"class":81,"line":82},[79,28551,86],{"class":85},[79,28553,28529],{"class":89},[79,28555,28556],{"class":89}," enable",[79,28558,28508],{"class":89},[24023,28560,28562,15828,28565,15828,28570,28489],{"id":28561},"_224将用户添加到-docker-组",[2398,28563,28564],{},"2.2.4.将用户添加到",[2398,28566,28567],{},[59,28568,28569],{},"docker",[2398,28571,28572],{},"组",[19,28574,28575,28576,28578],{},"使用以下命令将当前用户添加到 ",[59,28577,28569],{}," 组：",[51,28580,28582],{"className":73,"code":28581,"language":75,"meta":57,"style":57},"sudo usermod -aG docker $USER\n",[59,28583,28584],{"__ignoreMap":57},[79,28585,28586,28588,28591,28594,28596],{"class":81,"line":82},[79,28587,86],{"class":85},[79,28589,28590],{"class":89}," usermod",[79,28592,28593],{"class":96}," -aG",[79,28595,28337],{"class":89},[79,28597,28598],{"class":228}," $USER\n",[24023,28600,28602,28489],{"id":28601},"_225退出并重新登录",[2398,28603,28604],{},"2.2.5.退出并重新登录",[19,28606,28607],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[51,28609,28611],{"className":73,"code":28610,"language":75,"meta":57,"style":57},"newgrp docker\n",[59,28612,28613],{"__ignoreMap":57},[79,28614,28615,28618],{"class":81,"line":82},[79,28616,28617],{"class":85},"newgrp",[79,28619,28508],{"class":89},[24023,28621,28623,28489],{"id":28622},"_226重新启动-docker-服务如果需要",[2398,28624,28625],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,28627,28628],{},"确保 Docker 服务正在运行，可以使用以下命令：",[51,28630,28631],{"className":73,"code":28520,"language":75,"meta":57,"style":57},[59,28632,28633],{"__ignoreMap":57},[79,28634,28635,28637,28639,28641],{"class":81,"line":82},[79,28636,86],{"class":85},[79,28638,28529],{"class":89},[79,28640,6255],{"class":89},[79,28642,28508],{"class":89},[24023,28644,28646,28489],{"id":28645},"_227重启电脑后检查-docker-服务状态",[2398,28647,28648],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,28650,28651],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[51,28653,28655],{"className":73,"code":28654,"language":75,"meta":57,"style":57},"sudo reboot\nsystemctl status docker\n",[59,28656,28657,28664],{"__ignoreMap":57},[79,28658,28659,28661],{"class":81,"line":82},[79,28660,86],{"class":85},[79,28662,28663],{"class":89}," reboot\n",[79,28665,28666,28668,28670],{"class":81,"line":167},[79,28667,28502],{"class":85},[79,28669,28505],{"class":89},[79,28671,28508],{"class":89},[19,28673,28674],{},[3569,28675],{"alt":57,"src":28676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,28678,28679],{},"第三行显示enabled说明开机自启动成功",[19,28681,28682],{},"按q退出",[339,28684,28686],{"id":28685},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,28688,28689],{},"优先使用linux来使用docker是比较好的",[19,28691,28692],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,28694,28695],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,28697,28698,28699],{},"官方下载安装:",[2482,28700,28701],{"href":28701,"rel":28702},"https:\u002F\u002Fwww.docker.com\u002F",[25885],[19,28704,28705],{},"Windows的Docker显卡直通与USB直通:",[19,28707,28708],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,28710,28711],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,28713,28714],{},[3569,28715],{"alt":57,"src":28716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,28718,28719],{},[3569,28720],{"alt":57,"src":28721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,28723,28724],{},[3569,28725],{"alt":57,"src":28726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[2159,28728,28729],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":57,"searchDepth":167,"depth":167,"links":28731},[28732,28733,28734],{"id":28012,"depth":178,"text":28013},{"id":28481,"depth":178,"text":28482},{"id":28685,"depth":178,"text":28686},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":28004,"description":57},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":28741,"title":28742,"body":28743,"description":28750,"extension":2186,"meta":29443,"navigation":541,"path":29444,"seo":29445,"stem":29446,"__hash__":29447},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":28744,"toc":29437},[28745,28748,28751,28755,28760,28765,28768,28796,28801,28810,28813,28818,28822,28829,28834,28840,28844,28847,28851,28856,28948,28953,28971,28976,28997,29002,29018,29022,29027,29056,29061,29107,29112,29156,29164,29181,29186,29202,29207,29221,29224,29227,29230,29233,29262,29265,29270,29274,29277,29280,29286,29289,29292,29295,29357,29364,29369,29372,29390,29394,29397,29414,29417,29420,29434],[10,28746,28742],{"id":28747},"_3docker直通",[19,28749,28750],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[339,28752,28754],{"id":28753},"_31usb直通","3.1.USB直通",[19,28756,28757],{},[3569,28758],{"alt":57,"src":28759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[26,28761,28762],{},[29,28763,28764],{},"方法一(不是很推荐新手)：",[19,28766,28767],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[51,28769,28771],{"className":73,"code":28770,"language":75,"meta":57,"style":57},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[59,28772,28773,28781,28786],{"__ignoreMap":57},[79,28774,28775,28778],{"class":81,"line":82},[79,28776,28777],{"class":85},"ls",[79,28779,28780],{"class":89}," \u002Fdev\n",[79,28782,28783],{"class":81,"line":167},[79,28784,28785],{"class":2313},"#例如\n",[79,28787,28788,28791,28793],{"class":81,"line":178},[79,28789,28790],{"class":228},"--device",[79,28792,239],{"class":448},[79,28794,28795],{"class":89},"\u002Fdev\u002Ftty_USB0\n",[26,28797,28798],{"start":167},[29,28799,28800],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[51,28802,28804],{"className":73,"code":28803,"language":75,"meta":57,"style":57},"--privileged\n",[59,28805,28806],{"__ignoreMap":57},[79,28807,28808],{"class":81,"line":82},[79,28809,28803],{"class":85},[19,28811,28812],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,28814,28815],{},[3569,28816],{"alt":57,"src":28817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[339,28819,28821],{"id":28820},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,28823,28824,28825,28828],{},"NVIDIA Container Toolkit使用户 ",[2398,28826,28827],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,28830,28831],{},[3569,28832],{"alt":57,"src":28833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,28835,28836],{},[2482,28837,28838],{"href":28838,"rel":28839},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[25885],[24023,28841,28843],{"id":28842},"_321安装","3.2.1.安装",[19,28845,28846],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[24935,28848,28850],{"id":28849},"_3211ubuntu","3.2.1.1.Ubuntu",[26,28852,28853],{},[29,28854,28855],{},"配置存储库 并更新",[51,28857,28859],{"className":73,"code":28858,"language":75,"meta":57,"style":57},"curl -fsSL https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey | sudo gpg --dearmor -o \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg \\\n  && curl -s -L https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list | \\\n    sed 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g' | \\\n    sudo tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list \\\n  && \\\n    sudo apt-get update\n",[59,28860,28861,28890,28910,28922,28934,28940],{"__ignoreMap":57},[79,28862,28863,28866,28869,28872,28874,28876,28879,28882,28885,28888],{"class":81,"line":82},[79,28864,28865],{"class":85},"curl",[79,28867,28868],{"class":96}," -fsSL",[79,28870,28871],{"class":89}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[79,28873,27129],{"class":448},[79,28875,28091],{"class":85},[79,28877,28878],{"class":89}," gpg",[79,28880,28881],{"class":96}," --dearmor",[79,28883,28884],{"class":96}," -o",[79,28886,28887],{"class":89}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[79,28889,26698],{"class":96},[79,28891,28892,28895,28897,28900,28903,28906,28908],{"class":81,"line":167},[79,28893,28894],{"class":228},"  && ",[79,28896,28865],{"class":85},[79,28898,28899],{"class":96}," -s",[79,28901,28902],{"class":96}," -L",[79,28904,28905],{"class":89}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[79,28907,27129],{"class":448},[79,28909,26698],{"class":96},[79,28911,28912,28915,28918,28920],{"class":81,"line":178},[79,28913,28914],{"class":85},"    sed",[79,28916,28917],{"class":89}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[79,28919,27129],{"class":448},[79,28921,26698],{"class":96},[79,28923,28924,28927,28929,28932],{"class":81,"line":545},[79,28925,28926],{"class":85},"    sudo",[79,28928,28234],{"class":89},[79,28930,28931],{"class":89}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[79,28933,26698],{"class":96},[79,28935,28936,28938],{"class":81,"line":550},[79,28937,28894],{"class":228},[79,28939,28193],{"class":96},[79,28941,28942,28944,28946],{"class":81,"line":562},[79,28943,28926],{"class":85},[79,28945,28094],{"class":89},[79,28947,28260],{"class":89},[26,28949,28950],{"start":167},[29,28951,28952],{},"安装nvidia-docker2",[51,28954,28956],{"className":73,"code":28955,"language":75,"meta":57,"style":57},"sudo apt-get install -y nvidia-docker2\n",[59,28957,28958],{"__ignoreMap":57},[79,28959,28960,28962,28964,28966,28968],{"class":81,"line":82},[79,28961,86],{"class":85},[79,28963,28094],{"class":89},[79,28965,93],{"class":89},[79,28967,97],{"class":96},[79,28969,28970],{"class":89}," nvidia-docker2\n",[26,28972,28973],{"start":178},[29,28974,28975],{},"使用nvidia-ctk命令配置container runtime",[51,28977,28979],{"className":73,"code":28978,"language":75,"meta":57,"style":57},"sudo nvidia-ctk runtime configure --runtime=docker\n",[59,28980,28981],{"__ignoreMap":57},[79,28982,28983,28985,28988,28991,28994],{"class":81,"line":82},[79,28984,86],{"class":85},[79,28986,28987],{"class":89}," nvidia-ctk",[79,28989,28990],{"class":89}," runtime",[79,28992,28993],{"class":89}," configure",[79,28995,28996],{"class":96}," --runtime=docker\n",[26,28998,28999],{"start":545},[29,29000,29001],{},"重启docker服务:",[51,29003,29005],{"className":73,"code":29004,"language":75,"meta":57,"style":57},"sudo systemctl restart docker\n",[59,29006,29007],{"__ignoreMap":57},[79,29008,29009,29011,29013,29016],{"class":81,"line":82},[79,29010,86],{"class":85},[79,29012,28529],{"class":89},[79,29014,29015],{"class":89}," restart",[79,29017,28508],{"class":89},[24935,29019,29021],{"id":29020},"_3212fedora","3.2.1.2.Fedora",[26,29023,29024],{},[29,29025,29026],{},"配置存储库",[51,29028,29030],{"className":73,"code":29029,"language":75,"meta":57,"style":57},"curl -s -L https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo | \\\nsudo tee \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[59,29031,29032,29047],{"__ignoreMap":57},[79,29033,29034,29036,29038,29040,29043,29045],{"class":81,"line":82},[79,29035,28865],{"class":85},[79,29037,28899],{"class":96},[79,29039,28902],{"class":96},[79,29041,29042],{"class":89}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[79,29044,27129],{"class":448},[79,29046,26698],{"class":96},[79,29048,29049,29051,29053],{"class":81,"line":167},[79,29050,86],{"class":85},[79,29052,28234],{"class":89},[79,29054,29055],{"class":89}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[26,29057,29058],{"start":167},[29,29059,29060],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[51,29062,29064],{"className":73,"code":29063,"language":75,"meta":57,"style":57},"# 如果是RHEL或者Rocky（DNF4）\nsudo dnf config-manager --add-repo https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n\n# 如果是Feodra41+（DNF5）\nsudo dnf config-manager addrepo --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[59,29065,29066,29071,29085,29089,29094],{"__ignoreMap":57},[79,29067,29068],{"class":81,"line":82},[79,29069,29070],{"class":2313},"# 如果是RHEL或者Rocky（DNF4）\n",[79,29072,29073,29075,29077,29079,29082],{"class":81,"line":167},[79,29074,86],{"class":85},[79,29076,90],{"class":89},[79,29078,28430],{"class":89},[79,29080,29081],{"class":96}," --add-repo",[79,29083,29084],{"class":89}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[79,29086,29087],{"class":81,"line":178},[79,29088,542],{"emptyLinePlaceholder":541},[79,29090,29091],{"class":81,"line":545},[79,29092,29093],{"class":2313},"# 如果是Feodra41+（DNF5）\n",[79,29095,29096,29098,29100,29102,29104],{"class":81,"line":550},[79,29097,86],{"class":85},[79,29099,90],{"class":89},[79,29101,28430],{"class":89},[79,29103,28433],{"class":89},[79,29105,29106],{"class":96}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[26,29108,29109],{"start":178},[29,29110,29111],{},"安装NVIDIA Container Toolki包",[51,29113,29115],{"className":73,"code":29114,"language":75,"meta":57,"style":57},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[59,29116,29117,29122,29135,29139,29144],{"__ignoreMap":57},[79,29118,29119],{"class":81,"line":82},[79,29120,29121],{"class":2313},"# 如果是RHEL或者Rocky\n",[79,29123,29124,29126,29128,29130,29132],{"class":81,"line":167},[79,29125,86],{"class":85},[79,29127,90],{"class":89},[79,29129,93],{"class":89},[79,29131,97],{"class":96},[79,29133,29134],{"class":89}," nvidia-container-toolkit\n",[79,29136,29137],{"class":81,"line":178},[79,29138,542],{"emptyLinePlaceholder":541},[79,29140,29141],{"class":81,"line":545},[79,29142,29143],{"class":2313},"# 如果是Fedora\n",[79,29145,29146,29148,29150,29152,29154],{"class":81,"line":550},[79,29147,86],{"class":85},[79,29149,90],{"class":89},[79,29151,93],{"class":89},[79,29153,97],{"class":96},[79,29155,29134],{"class":89},[26,29157,29158],{"start":545},[29,29159,29160,29161,29163],{},"安装nvidia-docker2 ： 在Fedora上使用",[59,29162,28308],{},"进行安装",[51,29165,29167],{"className":73,"code":29166,"language":75,"meta":57,"style":57},"sudo dnf install -y nvidia-docker2\n",[59,29168,29169],{"__ignoreMap":57},[79,29170,29171,29173,29175,29177,29179],{"class":81,"line":82},[79,29172,86],{"class":85},[79,29174,90],{"class":89},[79,29176,93],{"class":89},[79,29178,97],{"class":96},[79,29180,28970],{"class":89},[26,29182,29183],{"start":550},[29,29184,29185],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[51,29187,29188],{"className":73,"code":28978,"language":75,"meta":57,"style":57},[59,29189,29190],{"__ignoreMap":57},[79,29191,29192,29194,29196,29198,29200],{"class":81,"line":82},[79,29193,86],{"class":85},[79,29195,28987],{"class":89},[79,29197,28990],{"class":89},[79,29199,28993],{"class":89},[79,29201,28996],{"class":96},[26,29203,29204],{"start":562},[29,29205,29206],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[51,29208,29209],{"className":73,"code":29004,"language":75,"meta":57,"style":57},[59,29210,29211],{"__ignoreMap":57},[79,29212,29213,29215,29217,29219],{"class":81,"line":82},[79,29214,86],{"class":85},[79,29216,28529],{"class":89},[79,29218,29015],{"class":89},[79,29220,28508],{"class":89},[19,29222,29223],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,29225,29226],{},"方法：",[19,29228,29229],{},"1️⃣nvidia-smi",[19,29231,29232],{},"2️⃣运行nvidia cuda 容器进行测试",[51,29234,29236],{"className":73,"code":29235,"language":75,"meta":57,"style":57},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[59,29237,29238],{"__ignoreMap":57},[79,29239,29240,29242,29244,29247,29250,29253,29256,29259],{"class":81,"line":82},[79,29241,86],{"class":85},[79,29243,28337],{"class":89},[79,29245,29246],{"class":89}," run",[79,29248,29249],{"class":96}," --rm",[79,29251,29252],{"class":96}," --gpus",[79,29254,29255],{"class":89}," all",[79,29257,29258],{"class":89}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[79,29260,29261],{"class":89}," nvidia-smi\n",[19,29263,29264],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,29266,29267],{},[3569,29268],{"alt":57,"src":29269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[339,29271,29273],{"id":29272},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,29275,29276],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,29278,29279],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,29281,29282],{},[2482,29283,29284],{"href":29284,"rel":29285},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[25885],[19,29287,29288],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,29290,29291],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,29293,29294],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[347,29296,29297,29313],{},[350,29298,29299],{},[353,29300,29301,29304,29307,29310],{},[356,29302,29303],{"align":358},"镜像类型",[356,29305,29306],{"align":358},"适用场景",[356,29308,29309],{"align":358},"示例标签",[356,29311,29312],{"align":358},"大小",[367,29314,29315,29329,29343],{},[353,29316,29317,29320,29323,29326],{},[372,29318,29319],{"align":358},"base",[372,29321,29322],{"align":358},"仅需 CUDA 运行时库",[372,29324,29325],{"align":358},"12.4.0-base-ubuntu22.04",[372,29327,29328],{"align":358},"~240MB",[353,29330,29331,29334,29337,29340],{},[372,29332,29333],{"align":358},"runtime",[372,29335,29336],{"align":358},"部署编译后的应用（含数学库）",[372,29338,29339],{"align":358},"12.4.0-runtime-ubuntu22.04",[372,29341,29342],{"align":358},"~2GB",[353,29344,29345,29348,29351,29354],{},[372,29346,29347],{"align":358},"devel",[372,29349,29350],{"align":358},"开发环境（含编译工具）",[372,29352,29353],{"align":358},"12.4.0-devel-ubuntu22.04",[372,29355,29356],{"align":358},"~3GB",[19,29358,29359,29360,29363],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[59,29361,29362],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,29365,29366],{},[3569,29367],{"alt":57,"src":29368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,29370,29371],{},"在dockerfile里就可以开头这么写：",[51,29373,29375],{"className":73,"code":29374,"language":75,"meta":57,"style":57},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[59,29376,29377,29382],{"__ignoreMap":57},[79,29378,29379],{"class":81,"line":82},[79,29380,29381],{"class":2313},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[79,29383,29384,29387],{"class":81,"line":167},[79,29385,29386],{"class":85},"FROM",[79,29388,29389],{"class":89}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[339,29391,29393],{"id":29392},"_34配置以太网","3.4.配置以太网",[19,29395,29396],{},"指定网络模式",[51,29398,29400],{"className":73,"code":29399,"language":75,"meta":57,"style":57},"--net=host \\\n",[59,29401,29402],{"__ignoreMap":57},[79,29403,29404,29407,29409,29412],{"class":81,"line":82},[79,29405,29406],{"class":228},"--net",[79,29408,239],{"class":448},[79,29410,29411],{"class":89},"host",[79,29413,26698],{"class":85},[19,29415,29416],{},"启动参数里加上这行即可。具体在下方",[19,29418,29419],{},"--net选项：指定网络模式，该选项有以下参数可选：",[3246,29421,29422,29425,29428,29431],{},[29,29423,29424],{},"--net=bridge:默认选项，表示连接到默认的网桥",[29,29426,29427],{},"--net=host:容器使用宿主机的网络",[29,29429,29430],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[29,29432,29433],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[2159,29435,29436],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":57,"searchDepth":167,"depth":167,"links":29438},[29439,29440,29441,29442],{"id":28753,"depth":178,"text":28754},{"id":28820,"depth":178,"text":28821},{"id":29272,"depth":178,"text":29273},{"id":29392,"depth":178,"text":29393},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":28742,"description":28750},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":29449,"title":29450,"body":29451,"description":29458,"extension":2186,"meta":29464,"navigation":541,"path":29465,"seo":29466,"stem":29467,"__hash__":29468},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":29452,"toc":29462},[29453,29456,29459],[10,29454,29450],{"id":29455},"_4dockerhub换源",[19,29457,29458],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,29460,29461],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":57,"searchDepth":167,"depth":167,"links":29463},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":29450,"description":29458},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":29470,"title":29471,"body":29472,"description":57,"extension":2186,"meta":30483,"navigation":541,"path":30484,"seo":30485,"stem":30486,"__hash__":30487},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":29473,"toc":30478},[29474,29477,29481,29487,29491,29494,29834,29837,29840,29843,29848,29853,29856,29859,29862,29865,29884,29887,29898,29904,30086,30096,30112,30375,30377,30401,30416,30425,30475],[10,29475,29471],{"id":29476},"_5docker命令学习",[339,29478,29480],{"id":29479},"_51参考文档","5.1.参考文档",[19,29482,29483],{},[2482,29484,29485],{"href":29485,"rel":29486},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[25885],[339,29488,29490],{"id":29489},"_52常用命令","5.2.常用命令",[19,29492,29493],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[347,29495,29496,29509],{},[350,29497,29498],{},[353,29499,29500,29503,29506],{},[356,29501,29502],{"align":358},"命令",[356,29504,29505],{"align":358},"描述",[356,29507,29508],{"align":358},"示例",[367,29510,29511,29522,29533,29544,29555,29566,29577,29588,29598,29609,29620,29631,29641,29652,29663,29674,29684,29694,29704,29714,29725,29736,29747,29758,29769,29780,29790,29801,29812,29823],{},[353,29512,29513,29516,29519],{},[372,29514,29515],{"align":358},"docker run",[372,29517,29518],{"align":358},"创建并启动一个新的容器。",[372,29520,29521],{"align":358},"docker run -it ubuntu bash",[353,29523,29524,29527,29530],{},[372,29525,29526],{"align":358},"docker build",[372,29528,29529],{"align":358},"通过指定的 Dockerfile 创建一个新的镜像。",[372,29531,29532],{"align":358},"docker build -t myimage .",[353,29534,29535,29538,29541],{},[372,29536,29537],{"align":358},"docker pull",[372,29539,29540],{"align":358},"从 Docker 仓库拉取镜像。",[372,29542,29543],{"align":358},"docker pull ubuntu",[353,29545,29546,29549,29552],{},[372,29547,29548],{"align":358},"docker push",[372,29550,29551],{"align":358},"将本地镜像推送到 Docker 仓库。",[372,29553,29554],{"align":358},"docker push myimage",[353,29556,29557,29560,29563],{},[372,29558,29559],{"align":358},"docker stop",[372,29561,29562],{"align":358},"停止一个正在运行的容器。",[372,29564,29565],{"align":358},"docker stop container_id",[353,29567,29568,29571,29574],{},[372,29569,29570],{"align":358},"docker start",[372,29572,29573],{"align":358},"启动一个已经存在的容器。",[372,29575,29576],{"align":358},"docker start container_id",[353,29578,29579,29582,29585],{},[372,29580,29581],{"align":358},"docker restart",[372,29583,29584],{"align":358},"重新启动容器。",[372,29586,29587],{"align":358},"docker restart container_id",[353,29589,29590,29593,29596],{},[372,29591,29592],{"align":358},"docker ps",[372,29594,29595],{"align":358},"列出当前正在运行的容器。",[372,29597,29592],{"align":358},[353,29599,29600,29603,29606],{},[372,29601,29602],{"align":358},"docker rm",[372,29604,29605],{"align":358},"删除一个或多个停止的容器。",[372,29607,29608],{"align":358},"docker rm container_id",[353,29610,29611,29614,29617],{},[372,29612,29613],{"align":358},"docker exec",[372,29615,29616],{"align":358},"在一个正在运行的容器中执行命令。",[372,29618,29619],{"align":358},"docker exec -it container_id bash",[353,29621,29622,29625,29628],{},[372,29623,29624],{"align":358},"docker logs",[372,29626,29627],{"align":358},"查看容器的日志输出。",[372,29629,29630],{"align":358},"docker logs container_id",[353,29632,29633,29636,29639],{},[372,29634,29635],{"align":358},"docker images",[372,29637,29638],{"align":358},"列出本地所有镜像。",[372,29640,29635],{"align":358},[353,29642,29643,29646,29649],{},[372,29644,29645],{"align":358},"docker rmi",[372,29647,29648],{"align":358},"删除一个或多个镜像。",[372,29650,29651],{"align":358},"docker rmi myimage",[353,29653,29654,29657,29660],{},[372,29655,29656],{"align":358},"docker network",[372,29658,29659],{"align":358},"管理 Docker 网络。",[372,29661,29662],{"align":358},"docker network ls",[353,29664,29665,29668,29671],{},[372,29666,29667],{"align":358},"docker volume",[372,29669,29670],{"align":358},"管理 Docker 数据卷。",[372,29672,29673],{"align":358},"docker volume ls",[353,29675,29676,29679,29682],{},[372,29677,29678],{"align":358},"docker-compose up",[372,29680,29681],{"align":358},"启动 docker-compose.yml 中定义的所有服务。",[372,29683,29678],{"align":358},[353,29685,29686,29689,29692],{},[372,29687,29688],{"align":358},"docker-compose down",[372,29690,29691],{"align":358},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[372,29693,29688],{"align":358},[353,29695,29696,29699,29702],{},[372,29697,29698],{"align":358},"docker info",[372,29700,29701],{"align":358},"显示 Docker 系统的详细信息。",[372,29703,29698],{"align":358},[353,29705,29706,29709,29712],{},[372,29707,29708],{"align":358},"docker stats",[372,29710,29711],{"align":358},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[372,29713,29708],{"align":358},[353,29715,29716,29719,29722],{},[372,29717,29718],{"align":358},"docker inspect",[372,29720,29721],{"align":358},"查看容器或镜像的详细信息（JSON 格式）。",[372,29723,29724],{"align":358},"docker inspect container_id",[353,29726,29727,29730,29733],{},[372,29728,29729],{"align":358},"docker save",[372,29731,29732],{"align":358},"将一个镜像保存为 tar 文件。",[372,29734,29735],{"align":358},"docker save -o myimage.tar myimage",[353,29737,29738,29741,29744],{},[372,29739,29740],{"align":358},"docker load",[372,29742,29743],{"align":358},"从 tar 文件中加载镜像。",[372,29745,29746],{"align":358},"docker load -i myimage.tar",[353,29748,29749,29752,29755],{},[372,29750,29751],{"align":358},"docker tag",[372,29753,29754],{"align":358},"为镜像添加标签（tag）。",[372,29756,29757],{"align":358},"docker tag myimage myimage:v1",[353,29759,29760,29763,29766],{},[372,29761,29762],{"align":358},"docker buildx build",[372,29764,29765],{"align":358},"使用 Buildx 构建多架构镜像。",[372,29767,29768],{"align":358},"docker buildx build -t myimage .",[353,29770,29771,29774,29777],{},[372,29772,29773],{"align":358},"docker buildx create",[372,29775,29776],{"align":358},"创建一个新的 Buildx 构建实例。",[372,29778,29779],{"align":358},"docker buildx create –use",[353,29781,29782,29785,29788],{},[372,29783,29784],{"align":358},"docker buildx ls",[372,29786,29787],{"align":358},"列出所有可用的 Buildx 构建实例。",[372,29789,29784],{"align":358},[353,29791,29792,29795,29798],{},[372,29793,29794],{"align":358},"docker buildx use",[372,29796,29797],{"align":358},"设置当前的 Buildx 构建实例。",[372,29799,29800],{"align":358},"docker buildx use mybuilder",[353,29802,29803,29806,29809],{},[372,29804,29805],{"align":358},"docker buildx bake",[372,29807,29808],{"align":358},"使用 Bake 文件批量构建镜像。",[372,29810,29811],{"align":358},"docker buildx bake -f bake.hcl",[353,29813,29814,29817,29820],{},[372,29815,29816],{"align":358},"docker buildx build –push",[372,29818,29819],{"align":358},"构建镜像并推送到镜像仓库。",[372,29821,29822],{"align":358},"docker buildx build –push -t myimage .",[353,29824,29825,29828,29831],{},[372,29826,29827],{"align":358},"docker buildx build –platform",[372,29829,29830],{"align":358},"构建镜像并为多个平台生成支持。",[372,29832,29833],{"align":358},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,29835,29836],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,29838,29839],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,29841,29842],{},"docker images 可以查看已经下载的镜像",[19,29844,29845],{},[3569,29846],{"alt":57,"src":29847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,29849,29850],{},[2398,29851,29852],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,29854,29855],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,29857,29858],{},"docker container logs 查看容器日志",[19,29860,29861],{},"docker top 查看容器里的进程",[19,29863,29864],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[51,29866,29868],{"className":73,"code":29867,"language":75,"meta":57,"style":57},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[59,29869,29870],{"__ignoreMap":57},[79,29871,29872,29875,29878,29881],{"class":81,"line":82},[79,29873,29874],{"class":85},"如：docker",[79,29876,29877],{"class":89}," cp",[79,29879,29880],{"class":89}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[79,29882,29883],{"class":89}," \u002Fmydata\u002Fnginx\n",[19,29885,29886],{},"docker run时在启动容器的时候会有几个常用的选项：",[3246,29888,29889,29892,29895],{},[29,29890,29891],{},"-d选项：表示后台运行",[29,29893,29894],{},"-P选项：随机端口映射",[29,29896,29897],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[339,29899,29901],{"id":29900},"_53run命令的参数非常重要",[2398,29902,29903],{},"5.3.run命令的参数（非常重要）",[347,29905,29906,29919],{},[350,29907,29908],{},[353,29909,29910,29913,29916],{},[356,29911,29912],{"align":358},"参数\u002F配置",[356,29914,29915],{"align":358},"功能说明",[356,29917,29918],{"align":358},"重要性与参考依据",[367,29920,29921,29932,29943,29954,29965,29976,29987,29998,30009,30020,30031,30042,30053,30064,30075],{},[353,29922,29923,29926,29929],{},[372,29924,29925],{"align":358},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[372,29927,29928],{"align":358},"指定容器名称，便于后续管理",[372,29930,29931],{"align":358},"替代随机生成的容器名。",[353,29933,29934,29937,29940],{},[372,29935,29936],{"align":358},"–gpus all",[372,29938,29939],{"align":358},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[372,29941,29942],{"align":358},"用于CUDA加速等GPU依赖任务。",[353,29944,29945,29948,29951],{},[372,29946,29947],{"align":358},"-e NVIDIA_DRIVER_CAPABILITIES=all",[372,29949,29950],{"align":358},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[372,29952,29953],{"align":358},"确保容器内GPU功能完整67。",[353,29955,29956,29959,29962],{},[372,29957,29958],{"align":358},"-dit",[372,29960,29961],{"align":358},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[372,29963,29964],{"align":358},"允许容器在后台运行并支持交互操作。",[353,29966,29967,29970,29973],{},[372,29968,29969],{"align":358},"–privileged",[372,29971,29972],{"align":358},"赋予容器完全主机权限（可访问设备、内核模块等）",[372,29974,29975],{"align":358},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[353,29977,29978,29981,29984],{},[372,29979,29980],{"align":358},"–net=host",[372,29982,29983],{"align":358},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[372,29985,29986],{"align":358},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[353,29988,29989,29992,29995],{},[372,29990,29991],{"align":358},"–group-add audio–group-add video–group-add dialout",[372,29993,29994],{"align":358},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[372,29996,29997],{"align":358},"避免权限问题（如避免无法调用摄像头、麦克风）。",[353,29999,30000,30003,30006],{},[372,30001,30002],{"align":358},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[372,30004,30005],{"align":358},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[372,30007,30008],{"align":358},"支持容器内运行图形界面应用（如OpenCV可视化）。",[353,30010,30011,30014,30017],{},[372,30012,30013],{"align":358},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[372,30015,30016],{"align":358},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[372,30018,30019],{"align":358},"实现容器内图形显示。",[353,30021,30022,30025,30028],{},[372,30023,30024],{"align":358},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[372,30026,30027],{"align":358},"挂载X11认证文件（只读）",[372,30029,30030],{"align":358},"确保容器有权连接宿主机显示服务。",[353,30032,30033,30036,30039],{},[372,30034,30035],{"align":358},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[372,30037,30038],{"align":358},"挂载Wayland显示协议相关目录",[372,30040,30041],{"align":358},"支持Wayland协议的图形显示。",[353,30043,30044,30047,30050],{},[372,30045,30046],{"align":358},"–ulimit nofile=1024:524288",[372,30048,30049],{"align":358},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[372,30051,30052],{"align":358},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[353,30054,30055,30058,30061],{},[372,30056,30057],{"align":358},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[372,30059,30060],{"align":358},"挂载宿主机用户目录到容器内同名路径",[372,30062,30063],{"align":358},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[353,30065,30066,30069,30072],{},[372,30067,30068],{"align":358},"-w \u002Fhome\u002Ftungchiahui",[372,30070,30071],{"align":358},"设置容器启动后的默认工作目录",[372,30073,30074],{"align":358},"直接进入项目路径，方便执行命令2324。",[353,30076,30077,30080,30083],{},[372,30078,30079],{"align":358},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[372,30081,30082],{"align":358},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[372,30084,30085],{"align":358},"提供预配置的深度学习与机器人开发环境。",[19,30087,30088,30089,30091,30092,30095],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[59,30090,86],{},"加不加",[59,30093,30094],{},"sudo -E","都无所谓。",[19,30097,30098,30099,30101,30102,30104,30105,30108,30109,30111],{},"用户已经被加到docker组了，不用",[59,30100,86],{},"也行跑，其次，",[59,30103,86],{},"运行的话，你的",[59,30106,30107],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[59,30110,30107],{},"更不可能变了。",[51,30113,30115],{"className":73,"code":30114,"language":75,"meta":57,"style":57},"sudo docker run --name=ros_opencv_cuda \\\n--gpus all \\\n-e NVIDIA_DRIVER_CAPABILITIES=all \\\n-e DISPLAY=$DISPLAY \\\n-dit \\\n--privileged \\\n--net=host \\\n--group-add audio \\\n--group-add video \\\n--group-add dialout \\\n-e XAUTHORITY=$HOME\u002F.Xauthority \\\n-e WAYLAND_DISPLAY=$WAYLAND_DISPLAY \\\n-e XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \\\n-e QT_QPA_PLATFORM=xcb \\\n-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw \\\n-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri \\\n-v $HOME\u002F.Xauthority:$HOME\u002F.Xauthority:ro \\\n-v \u002Frun\u002Fuser\u002F$(id -u)\u002Fwayland-0:\u002Frun\u002Fuser\u002F$(id -u)\u002Fwayland-0 \\\n-v \u002Frun\u002Fuser\u002F$(id -u):\u002Frun\u002Fuser\u002F$(id -u) \\\n-v $HOME:$HOME \\\n-w $HOME \\\ntungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[59,30116,30117,30130,30140,30150,30162,30169,30176,30183,30193,30202,30211,30225,30237,30249,30258,30268,30277,30292,30325,30352,30363,30370],{"__ignoreMap":57},[79,30118,30119,30121,30123,30125,30128],{"class":81,"line":82},[79,30120,86],{"class":85},[79,30122,28337],{"class":89},[79,30124,29246],{"class":89},[79,30126,30127],{"class":96}," --name=ros_opencv_cuda",[79,30129,26698],{"class":96},[79,30131,30132,30135,30138],{"class":81,"line":167},[79,30133,30134],{"class":228},"--gpus ",[79,30136,30137],{"class":89},"all",[79,30139,26698],{"class":96},[79,30141,30142,30145,30148],{"class":81,"line":178},[79,30143,30144],{"class":228},"-e ",[79,30146,30147],{"class":89},"NVIDIA_DRIVER_CAPABILITIES=all",[79,30149,26698],{"class":96},[79,30151,30152,30154,30157,30160],{"class":81,"line":545},[79,30153,30144],{"class":228},[79,30155,30156],{"class":89},"DISPLAY=",[79,30158,30159],{"class":228},"$DISPLAY ",[79,30161,28193],{"class":96},[79,30163,30164,30167],{"class":81,"line":550},[79,30165,30166],{"class":228},"-dit ",[79,30168,28193],{"class":96},[79,30170,30171,30174],{"class":81,"line":562},[79,30172,30173],{"class":228},"--privileged ",[79,30175,28193],{"class":96},[79,30177,30178,30181],{"class":81,"line":568},[79,30179,30180],{"class":228},"--net=host ",[79,30182,28193],{"class":96},[79,30184,30185,30188,30191],{"class":81,"line":574},[79,30186,30187],{"class":228},"--group-add ",[79,30189,30190],{"class":89},"audio",[79,30192,26698],{"class":96},[79,30194,30195,30197,30200],{"class":81,"line":579},[79,30196,30187],{"class":228},[79,30198,30199],{"class":89},"video",[79,30201,26698],{"class":96},[79,30203,30204,30206,30209],{"class":81,"line":585},[79,30205,30187],{"class":228},[79,30207,30208],{"class":89},"dialout",[79,30210,26698],{"class":96},[79,30212,30213,30215,30218,30220,30223],{"class":81,"line":591},[79,30214,30144],{"class":228},[79,30216,30217],{"class":89},"XAUTHORITY=",[79,30219,30107],{"class":228},[79,30221,30222],{"class":89},"\u002F.Xauthority",[79,30224,26698],{"class":96},[79,30226,30227,30229,30232,30235],{"class":81,"line":596},[79,30228,30144],{"class":228},[79,30230,30231],{"class":89},"WAYLAND_DISPLAY=",[79,30233,30234],{"class":228},"$WAYLAND_DISPLAY ",[79,30236,28193],{"class":96},[79,30238,30239,30241,30244,30247],{"class":81,"line":602},[79,30240,30144],{"class":228},[79,30242,30243],{"class":89},"XDG_RUNTIME_DIR=",[79,30245,30246],{"class":228},"$XDG_RUNTIME_DIR ",[79,30248,28193],{"class":96},[79,30250,30251,30253,30256],{"class":81,"line":608},[79,30252,30144],{"class":228},[79,30254,30255],{"class":89},"QT_QPA_PLATFORM=xcb",[79,30257,26698],{"class":96},[79,30259,30260,30263,30266],{"class":81,"line":614},[79,30261,30262],{"class":228},"-v ",[79,30264,30265],{"class":89},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[79,30267,26698],{"class":96},[79,30269,30270,30272,30275],{"class":81,"line":619},[79,30271,30262],{"class":228},[79,30273,30274],{"class":89},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[79,30276,26698],{"class":96},[79,30278,30279,30282,30285,30287,30290],{"class":81,"line":625},[79,30280,30281],{"class":228},"-v $HOME",[79,30283,30284],{"class":89},"\u002F.Xauthority:",[79,30286,30107],{"class":228},[79,30288,30289],{"class":89},"\u002F.Xauthority:ro",[79,30291,26698],{"class":96},[79,30293,30294,30296,30299,30301,30304,30307,30309,30312,30314,30316,30318,30320,30323],{"class":81,"line":631},[79,30295,30262],{"class":228},[79,30297,30298],{"class":89},"\u002Frun\u002Fuser\u002F",[79,30300,27119],{"class":228},[79,30302,30303],{"class":85},"id",[79,30305,30306],{"class":96}," -u",[79,30308,2672],{"class":228},[79,30310,30311],{"class":89},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[79,30313,27119],{"class":228},[79,30315,30303],{"class":85},[79,30317,30306],{"class":96},[79,30319,2672],{"class":228},[79,30321,30322],{"class":89},"\u002Fwayland-0",[79,30324,26698],{"class":96},[79,30326,30327,30329,30331,30333,30335,30337,30339,30342,30344,30346,30348,30350],{"class":81,"line":637},[79,30328,30262],{"class":228},[79,30330,30298],{"class":89},[79,30332,27119],{"class":228},[79,30334,30303],{"class":85},[79,30336,30306],{"class":96},[79,30338,2672],{"class":228},[79,30340,30341],{"class":89},":\u002Frun\u002Fuser\u002F",[79,30343,27119],{"class":228},[79,30345,30303],{"class":85},[79,30347,30306],{"class":96},[79,30349,15747],{"class":228},[79,30351,28193],{"class":96},[79,30353,30354,30356,30358,30361],{"class":81,"line":643},[79,30355,30281],{"class":228},[79,30357,3099],{"class":89},[79,30359,30360],{"class":228},"$HOME ",[79,30362,28193],{"class":96},[79,30364,30365,30368],{"class":81,"line":649},[79,30366,30367],{"class":228},"-w $HOME ",[79,30369,28193],{"class":96},[79,30371,30372],{"class":81,"line":655},[79,30373,30374],{"class":228},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,30376,11080],{},[26,30378,30379,30387,30390,30393],{},[29,30380,30381,15828,30383,30386],{},[59,30382,30147],{},[59,30384,30385],{},"--gpus all","没有英伟达显卡请注释。",[29,30388,30389],{},"--name后面请自己为容器起名。",[29,30391,30392],{},"最后一行仓库名称请你自己找对应的镜像填上。",[29,30394,30395,30396,497],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[25579,30397,30398],{},[2398,30399,30400],{},"请不要加",[51,30402,30404],{"className":73,"code":30403,"language":75,"meta":57,"style":57},"--ulimit nofile=1024:524288 \\\n",[59,30405,30406],{"__ignoreMap":57},[79,30407,30408,30411,30414],{"class":81,"line":82},[79,30409,30410],{"class":85},"--ulimit",[79,30412,30413],{"class":89}," nofile=1024:524288",[79,30415,26698],{"class":96},[19,30417,30418,30419,30424],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[25579,30420,30421],{},[2398,30422,30423],{},"不建议","**.**",[51,30426,30428],{"className":73,"code":30427,"language":75,"meta":57,"style":57},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[59,30429,30430,30457,30466],{"__ignoreMap":57},[79,30431,30432,30435,30438,30440,30442,30444,30446,30448,30450,30453,30455],{"class":81,"line":82},[79,30433,30434],{"class":85},"--user",[79,30436,30437],{"class":228}," $(",[79,30439,30303],{"class":85},[79,30441,30306],{"class":96},[79,30443,2672],{"class":228},[79,30445,3099],{"class":89},[79,30447,27119],{"class":228},[79,30449,30303],{"class":85},[79,30451,30452],{"class":96}," -g",[79,30454,15747],{"class":228},[79,30456,28193],{"class":96},[79,30458,30459,30461,30464],{"class":81,"line":167},[79,30460,30262],{"class":228},[79,30462,30463],{"class":89},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[79,30465,26698],{"class":96},[79,30467,30468,30470,30473],{"class":81,"line":178},[79,30469,30262],{"class":228},[79,30471,30472],{"class":89},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[79,30474,26698],{"class":96},[2159,30476,30477],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":57,"searchDepth":167,"depth":167,"links":30479},[30480,30481,30482],{"id":29479,"depth":178,"text":29480},{"id":29489,"depth":178,"text":29490},{"id":29900,"depth":178,"text":29903},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":29471,"description":57},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":30489,"title":30490,"body":30491,"description":57,"extension":2186,"meta":32113,"navigation":541,"path":32114,"seo":32115,"stem":32116,"__hash__":32117},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":30492,"toc":32108},[30493,30496,30500,30503,30725,30729,30733,30736,30842,30847,30850,30855,30858,30863,30866,30871,30874,30886,30889,30894,30901,30929,30936,31012,31017,31020,31043,31045,31120,31125,31128,31132,31140,31145,31150,31154,31165,31171,31174,31177,31200,31203,31206,31234,31237,31240,31705,31708,31713,31718,31722,31745,31750,31754,31758,31761,31764,31767,31794,31797,31800,31818,31821,31824,31846,31854,31859,31864,31868,31871,31874,31877,31880,31925,31928,31946,31949,31954,31957,31978,31981,32037,32040,32045,32049,32052,32059,32062,32065,32070,32073,32089,32092,32105],[10,30494,30490],{"id":30495},"_6手动创建docker镜像",[339,30497,30499],{"id":30498},"_61dockerfile","6.1.DockerFile",[19,30501,30502],{},"常用命令：",[347,30504,30505,30516],{},[350,30506,30507],{},[353,30508,30509,30512,30514],{},[356,30510,30511],{"align":358},"指令",[356,30513,27888],{"align":358},[356,30515,29508],{"align":358},[367,30517,30518,30528,30544,30555,30566,30577,30588,30599,30610,30624,30638,30649,30663,30674,30685,30699,30714],{},[353,30519,30520,30522,30525],{},[372,30521,29386],{"align":358},[372,30523,30524],{"align":358},"指定基础镜像，是 Dockerfile 的起点",[372,30526,30527],{"align":358},"FROM ubuntu:22.04",[353,30529,30530,30533,30536],{},[372,30531,30532],{"align":358},"LABEL",[372,30534,30535],{"align":358},"添加元数据（如作者、版本等）",[372,30537,30538,30539,30543],{"align":358},"LABEL maintainer=”",[2482,30540,30542],{"href":30541},"mailto:you@example.com","you@example.com","”",[353,30545,30546,30549,30552],{},[372,30547,30548],{"align":358},"ENV",[372,30550,30551],{"align":358},"设置环境变量",[372,30553,30554],{"align":358},"ENV PORT=8080",[353,30556,30557,30560,30563],{},[372,30558,30559],{"align":358},"ARG",[372,30561,30562],{"align":358},"构建参数，只在构建期间可用",[372,30564,30565],{"align":358},"ARG VERSION=1.0",[353,30567,30568,30571,30574],{},[372,30569,30570],{"align":358},"RUN",[372,30572,30573],{"align":358},"构建镜像时运行命令",[372,30575,30576],{"align":358},"RUN apt-get update && apt-get install -y curl",[353,30578,30579,30582,30585],{},[372,30580,30581],{"align":358},"COPY",[372,30583,30584],{"align":358},"复制文件到镜像中",[372,30586,30587],{"align":358},"COPY . \u002Fapp",[353,30589,30590,30593,30596],{},[372,30591,30592],{"align":358},"ADD",[372,30594,30595],{"align":358},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[372,30597,30598],{"align":358},"ADD archive.tar.gz \u002Fdata\u002F",[353,30600,30601,30604,30607],{},[372,30602,30603],{"align":358},"WORKDIR",[372,30605,30606],{"align":358},"设置工作目录",[372,30608,30609],{"align":358},"WORKDIR \u002Fopt",[353,30611,30612,30615,30618],{},[372,30613,30614],{"align":358},"CMD",[372,30616,30617],{"align":358},"设置容器启动时默认命令（可被 docker run 覆盖）",[372,30619,30620,30621],{"align":358},"CMD ",[79,30622,30623],{},"“node”, “index.js”",[353,30625,30626,30629,30632],{},[372,30627,30628],{"align":358},"ENTRYPOINT",[372,30630,30631],{"align":358},"设置容器启动时固定命令（通常用于 CLI 工具等）",[372,30633,30634,30635],{"align":358},"ENTRYPOINT ",[79,30636,30637],{},"“python3”",[353,30639,30640,30643,30646],{},[372,30641,30642],{"align":358},"EXPOSE",[372,30644,30645],{"align":358},"声明镜像内服务监听的端口（不会自动映射）",[372,30647,30648],{"align":358},"EXPOSE 80",[353,30650,30651,30654,30657],{},[372,30652,30653],{"align":358},"VOLUME",[372,30655,30656],{"align":358},"声明数据卷挂载点",[372,30658,30659,30660],{"align":358},"VOLUME ",[79,30661,30662],{},"“\u002Fdata”",[353,30664,30665,30668,30671],{},[372,30666,30667],{"align":358},"USER",[372,30669,30670],{"align":358},"设置后续命令执行的用户",[372,30672,30673],{"align":358},"USER appuser",[353,30675,30676,30679,30682],{},[372,30677,30678],{"align":358},"ONBUILD",[372,30680,30681],{"align":358},"当镜像作为其他镜像基础镜像时触发的构建指令",[372,30683,30684],{"align":358},"ONBUILD COPY . \u002Fsrc",[353,30686,30687,30690,30693],{},[372,30688,30689],{"align":358},"SHELL",[372,30691,30692],{"align":358},"更改默认 shell，比如将 sh -c 改为 bash -c",[372,30694,30695,30696],{"align":358},"SHELL ",[79,30697,30698],{},"“\u002Fbin\u002Fbash”, “-c”",[353,30700,30701,30704,30707],{},[372,30702,30703],{"align":358},"HEALTHCHECK",[372,30705,30706],{"align":358},"定义容器运行时的健康检查命令",[372,30708,30709,30710],{"align":358},"`HEALTHCHECK CMD curl –fail ",[2482,30711,30712],{"href":30712,"rel":30713},"http:\u002F\u002Flocalhost:8080",[25885],[353,30715,30716,30719,30722],{},[372,30717,30718],{"align":358},"STOPSIGNAL",[372,30720,30721],{"align":358},"容器停止时发送的信号",[372,30723,30724],{"align":358},"STOPSIGNAL SIGKILL",[339,30726,30728],{"id":30727},"_62自己创建容器","6.2.自己创建容器",[24023,30730,30732],{"id":30731},"_621手动创建","6.2.1.手动创建",[19,30734,30735],{},"在x86电脑上编译x86的：",[51,30737,30739],{"className":73,"code":30738,"language":75,"meta":57,"style":57},"docker build -t ros-melodic-cuda118-cudnn8-bionic:latest .\n\ndocker build -t ros-noetic-focal:latest .\n\ndocker build -t ros-humble-jammy:latest .\n\ndocker build -t ros-jazzy-noble:latest .\n\ndocker build -t ros-humble-opencv411-cuda128-cudnn970-jammy:latest .\n\ndocker build -t ros-jazzy-opencv411-cuda128-cudnn970-noble:latest .\n",[59,30740,30741,30757,30761,30774,30778,30791,30795,30808,30812,30825,30829],{"__ignoreMap":57},[79,30742,30743,30745,30748,30751,30754],{"class":81,"line":82},[79,30744,28569],{"class":85},[79,30746,30747],{"class":89}," build",[79,30749,30750],{"class":96}," -t",[79,30752,30753],{"class":89}," ros-melodic-cuda118-cudnn8-bionic:latest",[79,30755,30756],{"class":89}," .\n",[79,30758,30759],{"class":81,"line":167},[79,30760,542],{"emptyLinePlaceholder":541},[79,30762,30763,30765,30767,30769,30772],{"class":81,"line":178},[79,30764,28569],{"class":85},[79,30766,30747],{"class":89},[79,30768,30750],{"class":96},[79,30770,30771],{"class":89}," ros-noetic-focal:latest",[79,30773,30756],{"class":89},[79,30775,30776],{"class":81,"line":545},[79,30777,542],{"emptyLinePlaceholder":541},[79,30779,30780,30782,30784,30786,30789],{"class":81,"line":550},[79,30781,28569],{"class":85},[79,30783,30747],{"class":89},[79,30785,30750],{"class":96},[79,30787,30788],{"class":89}," ros-humble-jammy:latest",[79,30790,30756],{"class":89},[79,30792,30793],{"class":81,"line":562},[79,30794,542],{"emptyLinePlaceholder":541},[79,30796,30797,30799,30801,30803,30806],{"class":81,"line":568},[79,30798,28569],{"class":85},[79,30800,30747],{"class":89},[79,30802,30750],{"class":96},[79,30804,30805],{"class":89}," ros-jazzy-noble:latest",[79,30807,30756],{"class":89},[79,30809,30810],{"class":81,"line":574},[79,30811,542],{"emptyLinePlaceholder":541},[79,30813,30814,30816,30818,30820,30823],{"class":81,"line":579},[79,30815,28569],{"class":85},[79,30817,30747],{"class":89},[79,30819,30750],{"class":96},[79,30821,30822],{"class":89}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[79,30824,30756],{"class":89},[79,30826,30827],{"class":81,"line":585},[79,30828,542],{"emptyLinePlaceholder":541},[79,30830,30831,30833,30835,30837,30840],{"class":81,"line":591},[79,30832,28569],{"class":85},[79,30834,30747],{"class":89},[79,30836,30750],{"class":96},[79,30838,30839],{"class":89}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[79,30841,30756],{"class":89},[19,30843,30844],{},[3569,30845],{"alt":57,"src":30846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,30848,30849],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,30851,30852],{},[3569,30853],{"alt":57,"src":30854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,30856,30857],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[26,30859,30860],{},[29,30861,30862],{},"创建 Docker Hub 账户",[19,30864,30865],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[26,30867,30868],{"start":167},[29,30869,30870],{},"登录 Docker Hub",[19,30872,30873],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[51,30875,30877],{"className":73,"code":30876,"language":75,"meta":57,"style":57},"docker login\n",[59,30878,30879],{"__ignoreMap":57},[79,30880,30881,30883],{"class":81,"line":82},[79,30882,28569],{"class":85},[79,30884,30885],{"class":89}," login\n",[19,30887,30888],{},"输入你的 Docker Hub 用户名和密码进行验证。",[26,30890,30891],{},[29,30892,30893],{},"为你的镜像打标签",[19,30895,30896,30897,30900],{},"Docker Hub 使用 ",[59,30898,30899],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[51,30902,30904],{"className":73,"code":30903,"language":75,"meta":57,"style":57},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[59,30905,30906],{"__ignoreMap":57},[79,30907,30908,30910,30913,30915,30918,30921,30924,30926],{"class":81,"line":82},[79,30909,28569],{"class":85},[79,30911,30912],{"class":89}," tag",[79,30914,30805],{"class":89},[79,30916,30917],{"class":448}," \u003C",[79,30919,30920],{"class":89},"你的用户",[79,30922,30923],{"class":228},"名",[79,30925,3199],{"class":448},[79,30927,30928],{"class":89},"\u002Fros-jazzy-noble:latest\n",[19,30930,30931,30932,30935],{},"例如，如果你的 Docker Hub 用户名是 ",[59,30933,30934],{},"tungchiahui","，你应该执行：",[51,30937,30939],{"className":73,"code":30938,"language":75,"meta":57,"style":57},"docker tag ros-noetic-focal:latest tungchiahui\u002Fros-noetic-focal:latest\n\ndocker tag ros-humble-jammy:latest tungchiahui\u002Fros-humble-jammy:latest\n\ndocker tag ros-jazzy-noble:latest tungchiahui\u002Fros-jazzy-noble:latest\n\ndocker tag ros-humble-opencv411-cuda128-cudnn970-jammy:latest \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n\ndocker tag ros-jazzy-opencv411-cuda128-cudnn970-noble:latest tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[59,30940,30941,30952,30956,30967,30971,30982,30986,30997,31001],{"__ignoreMap":57},[79,30942,30943,30945,30947,30949],{"class":81,"line":82},[79,30944,28569],{"class":85},[79,30946,30912],{"class":89},[79,30948,30771],{"class":89},[79,30950,30951],{"class":89}," tungchiahui\u002Fros-noetic-focal:latest\n",[79,30953,30954],{"class":81,"line":167},[79,30955,542],{"emptyLinePlaceholder":541},[79,30957,30958,30960,30962,30964],{"class":81,"line":178},[79,30959,28569],{"class":85},[79,30961,30912],{"class":89},[79,30963,30788],{"class":89},[79,30965,30966],{"class":89}," tungchiahui\u002Fros-humble-jammy:latest\n",[79,30968,30969],{"class":81,"line":545},[79,30970,542],{"emptyLinePlaceholder":541},[79,30972,30973,30975,30977,30979],{"class":81,"line":550},[79,30974,28569],{"class":85},[79,30976,30912],{"class":89},[79,30978,30805],{"class":89},[79,30980,30981],{"class":89}," tungchiahui\u002Fros-jazzy-noble:latest\n",[79,30983,30984],{"class":81,"line":562},[79,30985,542],{"emptyLinePlaceholder":541},[79,30987,30988,30990,30992,30994],{"class":81,"line":568},[79,30989,28569],{"class":85},[79,30991,30912],{"class":89},[79,30993,30822],{"class":89},[79,30995,30996],{"class":89}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[79,30998,30999],{"class":81,"line":574},[79,31000,542],{"emptyLinePlaceholder":541},[79,31002,31003,31005,31007,31009],{"class":81,"line":579},[79,31004,28569],{"class":85},[79,31006,30912],{"class":89},[79,31008,30839],{"class":89},[79,31010,31011],{"class":89}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[26,31013,31014],{"start":167},[29,31015,31016],{},"推送镜像到 Docker Hub",[19,31018,31019],{},"使用以下命令将镜像推送到 Docker Hub：",[51,31021,31023],{"className":73,"code":31022,"language":75,"meta":57,"style":57},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[59,31024,31025],{"__ignoreMap":57},[79,31026,31027,31029,31032,31034,31036,31038,31040],{"class":81,"line":82},[79,31028,28569],{"class":85},[79,31030,31031],{"class":89}," push",[79,31033,30917],{"class":448},[79,31035,30920],{"class":89},[79,31037,30923],{"class":228},[79,31039,3199],{"class":448},[79,31041,31042],{"class":89},"\u002Fros-noetic-jazzy-noble:latest\n",[19,31044,16666],{},[51,31046,31048],{"className":73,"code":31047,"language":75,"meta":57,"style":57},"docker push tungchiahui\u002Fros-noetic-focal:latest\n\ndocker push tungchiahui\u002Fros-humble-jammy:latest\n\ndocker push tungchiahui\u002Fros-jazzy-noble:latest\n\ndocker push tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n\ndocker push tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n\ndocker push tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[59,31049,31050,31058,31062,31070,31074,31082,31086,31095,31099,31107,31111],{"__ignoreMap":57},[79,31051,31052,31054,31056],{"class":81,"line":82},[79,31053,28569],{"class":85},[79,31055,31031],{"class":89},[79,31057,30951],{"class":89},[79,31059,31060],{"class":81,"line":167},[79,31061,542],{"emptyLinePlaceholder":541},[79,31063,31064,31066,31068],{"class":81,"line":178},[79,31065,28569],{"class":85},[79,31067,31031],{"class":89},[79,31069,30966],{"class":89},[79,31071,31072],{"class":81,"line":545},[79,31073,542],{"emptyLinePlaceholder":541},[79,31075,31076,31078,31080],{"class":81,"line":550},[79,31077,28569],{"class":85},[79,31079,31031],{"class":89},[79,31081,30981],{"class":89},[79,31083,31084],{"class":81,"line":562},[79,31085,542],{"emptyLinePlaceholder":541},[79,31087,31088,31090,31092],{"class":81,"line":568},[79,31089,28569],{"class":85},[79,31091,31031],{"class":89},[79,31093,31094],{"class":89}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[79,31096,31097],{"class":81,"line":574},[79,31098,542],{"emptyLinePlaceholder":541},[79,31100,31101,31103,31105],{"class":81,"line":579},[79,31102,28569],{"class":85},[79,31104,31031],{"class":89},[79,31106,31011],{"class":89},[79,31108,31109],{"class":81,"line":585},[79,31110,542],{"emptyLinePlaceholder":541},[79,31112,31113,31115,31117],{"class":81,"line":591},[79,31114,28569],{"class":85},[79,31116,31031],{"class":89},[79,31118,31119],{"class":89}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[26,31121,31122],{"start":178},[29,31123,31124],{},"验证推送成功",[19,31126,31127],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,31129,31130],{},[2398,31131,5857],{},[3246,31133,31134,31137],{},[29,31135,31136],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[29,31138,31139],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,31141,31142],{},[3569,31143],{"alt":57,"src":31144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,31146,31147],{},[3569,31148],{"alt":57,"src":31149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[24023,31151,31153],{"id":31152},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,31155,31156,31157,31160,31161,31164],{},"如果您想在 ",[2398,31158,31159],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[2398,31162,31163],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,31166,31167,31168],{},"1. ",[2398,31169,31170],{},"启用 Docker 跨平台构建",[19,31172,31173],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,31175,31176],{},"第一步：启用 buildx（只需执行一次）",[51,31178,31180],{"className":73,"code":31179,"language":75,"meta":57,"style":57},"docker buildx create --name multiarch_builder --use\n",[59,31181,31182],{"__ignoreMap":57},[79,31183,31184,31186,31189,31191,31194,31197],{"class":81,"line":82},[79,31185,28569],{"class":85},[79,31187,31188],{"class":89}," buildx",[79,31190,149],{"class":89},[79,31192,31193],{"class":96}," --name",[79,31195,31196],{"class":89}," multiarch_builder",[79,31198,31199],{"class":96}," --use\n",[19,31201,31202],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,31204,31205],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[51,31207,31209],{"className":73,"code":31208,"language":75,"meta":57,"style":57},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[59,31210,31211],{"__ignoreMap":57},[79,31212,31213,31215,31217,31219,31222,31225,31228,31231],{"class":81,"line":82},[79,31214,28569],{"class":85},[79,31216,29246],{"class":89},[79,31218,29249],{"class":96},[79,31220,31221],{"class":96}," --privileged",[79,31223,31224],{"class":89}," multiarch\u002Fqemu-user-static",[79,31226,31227],{"class":96}," --reset",[79,31229,31230],{"class":96}," -p",[79,31232,31233],{"class":89}," yes\n",[19,31235,31236],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,31238,31239],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[51,31241,31243],{"className":73,"code":31242,"language":75,"meta":57,"style":57},"docker buildx build --platform linux\u002Famd64,linux\u002Farm64 -t \u003C你的镜像名>:\u003C标签> --push .\n\n# 例子：\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros:noetic-focal \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros:humble-jammy \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros:jazzy-noble \\\n --push \\\n .\n\n docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy \\\n --push \\\n .\n\n docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy \\\n --push \\\n .\n\n docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble \\\n --push \\\n .\n\n  docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy \\\n --push \\\n .\n",[59,31244,31245,31287,31291,31296,31306,31316,31325,31331,31335,31339,31349,31357,31366,31372,31376,31380,31390,31398,31407,31413,31417,31421,31431,31439,31448,31454,31458,31462,31472,31480,31489,31495,31499,31503,31513,31521,31530,31536,31540,31544,31554,31562,31571,31577,31581,31585,31595,31603,31612,31618,31622,31626,31636,31644,31653,31659,31663,31667,31678,31686,31695,31701],{"__ignoreMap":57},[79,31246,31247,31249,31251,31253,31256,31259,31261,31263,31266,31268,31270,31272,31274,31277,31280,31282,31285],{"class":81,"line":82},[79,31248,28569],{"class":85},[79,31250,31188],{"class":89},[79,31252,30747],{"class":89},[79,31254,31255],{"class":96}," --platform",[79,31257,31258],{"class":89}," linux\u002Famd64,linux\u002Farm64",[79,31260,30750],{"class":96},[79,31262,30917],{"class":448},[79,31264,31265],{"class":89},"你的镜像",[79,31267,30923],{"class":228},[79,31269,3199],{"class":448},[79,31271,3099],{"class":89},[79,31273,229],{"class":448},[79,31275,31276],{"class":89},"标",[79,31278,31279],{"class":228},"签",[79,31281,3199],{"class":448},[79,31283,31284],{"class":96}," --push",[79,31286,30756],{"class":89},[79,31288,31289],{"class":81,"line":167},[79,31290,542],{"emptyLinePlaceholder":541},[79,31292,31293],{"class":81,"line":178},[79,31294,31295],{"class":2313},"# 例子：\n",[79,31297,31298,31300,31302,31304],{"class":81,"line":545},[79,31299,28569],{"class":85},[79,31301,31188],{"class":89},[79,31303,30747],{"class":89},[79,31305,26698],{"class":96},[79,31307,31308,31311,31314],{"class":81,"line":550},[79,31309,31310],{"class":228},"--platform ",[79,31312,31313],{"class":89},"linux\u002Famd64,linux\u002Farm64",[79,31315,26698],{"class":96},[79,31317,31318,31320,31323],{"class":81,"line":562},[79,31319,30750],{"class":96},[79,31321,31322],{"class":89}," tungchiahui\u002Fros:noetic-focal",[79,31324,26698],{"class":96},[79,31326,31327,31329],{"class":81,"line":568},[79,31328,31284],{"class":96},[79,31330,26698],{"class":96},[79,31332,31333],{"class":81,"line":574},[79,31334,30756],{"class":89},[79,31336,31337],{"class":81,"line":579},[79,31338,542],{"emptyLinePlaceholder":541},[79,31340,31341,31343,31345,31347],{"class":81,"line":585},[79,31342,28569],{"class":85},[79,31344,31188],{"class":89},[79,31346,30747],{"class":89},[79,31348,26698],{"class":96},[79,31350,31351,31353,31355],{"class":81,"line":591},[79,31352,31310],{"class":228},[79,31354,31313],{"class":89},[79,31356,26698],{"class":96},[79,31358,31359,31361,31364],{"class":81,"line":596},[79,31360,30750],{"class":96},[79,31362,31363],{"class":89}," tungchiahui\u002Fros:humble-jammy",[79,31365,26698],{"class":96},[79,31367,31368,31370],{"class":81,"line":602},[79,31369,31284],{"class":96},[79,31371,26698],{"class":96},[79,31373,31374],{"class":81,"line":608},[79,31375,30756],{"class":89},[79,31377,31378],{"class":81,"line":614},[79,31379,542],{"emptyLinePlaceholder":541},[79,31381,31382,31384,31386,31388],{"class":81,"line":619},[79,31383,28569],{"class":85},[79,31385,31188],{"class":89},[79,31387,30747],{"class":89},[79,31389,26698],{"class":96},[79,31391,31392,31394,31396],{"class":81,"line":625},[79,31393,31310],{"class":228},[79,31395,31313],{"class":89},[79,31397,26698],{"class":96},[79,31399,31400,31402,31405],{"class":81,"line":631},[79,31401,30750],{"class":96},[79,31403,31404],{"class":89}," tungchiahui\u002Fros:jazzy-noble",[79,31406,26698],{"class":96},[79,31408,31409,31411],{"class":81,"line":637},[79,31410,31284],{"class":96},[79,31412,26698],{"class":96},[79,31414,31415],{"class":81,"line":643},[79,31416,30756],{"class":89},[79,31418,31419],{"class":81,"line":649},[79,31420,542],{"emptyLinePlaceholder":541},[79,31422,31423,31425,31427,31429],{"class":81,"line":655},[79,31424,28337],{"class":85},[79,31426,31188],{"class":89},[79,31428,30747],{"class":89},[79,31430,26698],{"class":96},[79,31432,31433,31435,31437],{"class":81,"line":660},[79,31434,31310],{"class":228},[79,31436,31313],{"class":89},[79,31438,26698],{"class":96},[79,31440,31441,31443,31446],{"class":81,"line":666},[79,31442,30750],{"class":96},[79,31444,31445],{"class":89}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[79,31447,26698],{"class":96},[79,31449,31450,31452],{"class":81,"line":672},[79,31451,31284],{"class":96},[79,31453,26698],{"class":96},[79,31455,31456],{"class":81,"line":678},[79,31457,30756],{"class":89},[79,31459,31460],{"class":81,"line":684},[79,31461,542],{"emptyLinePlaceholder":541},[79,31463,31464,31466,31468,31470],{"class":81,"line":690},[79,31465,28569],{"class":85},[79,31467,31188],{"class":89},[79,31469,30747],{"class":89},[79,31471,26698],{"class":96},[79,31473,31474,31476,31478],{"class":81,"line":695},[79,31475,31310],{"class":228},[79,31477,31313],{"class":89},[79,31479,26698],{"class":96},[79,31481,31482,31484,31487],{"class":81,"line":700},[79,31483,30750],{"class":96},[79,31485,31486],{"class":89}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[79,31488,26698],{"class":96},[79,31490,31491,31493],{"class":81,"line":712},[79,31492,31284],{"class":96},[79,31494,26698],{"class":96},[79,31496,31497],{"class":81,"line":721},[79,31498,30756],{"class":89},[79,31500,31501],{"class":81,"line":726},[79,31502,542],{"emptyLinePlaceholder":541},[79,31504,31505,31507,31509,31511],{"class":81,"line":731},[79,31506,28337],{"class":85},[79,31508,31188],{"class":89},[79,31510,30747],{"class":89},[79,31512,26698],{"class":96},[79,31514,31515,31517,31519],{"class":81,"line":748},[79,31516,31310],{"class":228},[79,31518,31313],{"class":89},[79,31520,26698],{"class":96},[79,31522,31523,31525,31528],{"class":81,"line":765},[79,31524,30750],{"class":96},[79,31526,31527],{"class":89}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[79,31529,26698],{"class":96},[79,31531,31532,31534],{"class":81,"line":780},[79,31533,31284],{"class":96},[79,31535,26698],{"class":96},[79,31537,31538],{"class":81,"line":811},[79,31539,30756],{"class":89},[79,31541,31542],{"class":81,"line":816},[79,31543,542],{"emptyLinePlaceholder":541},[79,31545,31546,31548,31550,31552],{"class":81,"line":821},[79,31547,28569],{"class":85},[79,31549,31188],{"class":89},[79,31551,30747],{"class":89},[79,31553,26698],{"class":96},[79,31555,31556,31558,31560],{"class":81,"line":837},[79,31557,31310],{"class":228},[79,31559,31313],{"class":89},[79,31561,26698],{"class":96},[79,31563,31564,31566,31569],{"class":81,"line":853},[79,31565,30750],{"class":96},[79,31567,31568],{"class":89}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[79,31570,26698],{"class":96},[79,31572,31573,31575],{"class":81,"line":864},[79,31574,31284],{"class":96},[79,31576,26698],{"class":96},[79,31578,31579],{"class":81,"line":869},[79,31580,30756],{"class":89},[79,31582,31583],{"class":81,"line":885},[79,31584,542],{"emptyLinePlaceholder":541},[79,31586,31587,31589,31591,31593],{"class":81,"line":891},[79,31588,28569],{"class":85},[79,31590,31188],{"class":89},[79,31592,30747],{"class":89},[79,31594,26698],{"class":96},[79,31596,31597,31599,31601],{"class":81,"line":896},[79,31598,31310],{"class":228},[79,31600,31313],{"class":89},[79,31602,26698],{"class":96},[79,31604,31605,31607,31610],{"class":81,"line":907},[79,31606,30750],{"class":96},[79,31608,31609],{"class":89}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[79,31611,26698],{"class":96},[79,31613,31614,31616],{"class":81,"line":912},[79,31615,31284],{"class":96},[79,31617,26698],{"class":96},[79,31619,31620],{"class":81,"line":935},[79,31621,30756],{"class":89},[79,31623,31624],{"class":81,"line":946},[79,31625,542],{"emptyLinePlaceholder":541},[79,31627,31628,31630,31632,31634],{"class":81,"line":960},[79,31629,28337],{"class":85},[79,31631,31188],{"class":89},[79,31633,30747],{"class":89},[79,31635,26698],{"class":96},[79,31637,31638,31640,31642],{"class":81,"line":975},[79,31639,31310],{"class":228},[79,31641,31313],{"class":89},[79,31643,26698],{"class":96},[79,31645,31646,31648,31651],{"class":81,"line":980},[79,31647,30750],{"class":96},[79,31649,31650],{"class":89}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[79,31652,26698],{"class":96},[79,31654,31655,31657],{"class":81,"line":1006},[79,31656,31284],{"class":96},[79,31658,26698],{"class":96},[79,31660,31661],{"class":81,"line":1027},[79,31662,30756],{"class":89},[79,31664,31665],{"class":81,"line":1032},[79,31666,542],{"emptyLinePlaceholder":541},[79,31668,31669,31672,31674,31676],{"class":81,"line":1047},[79,31670,31671],{"class":85},"  docker",[79,31673,31188],{"class":89},[79,31675,30747],{"class":89},[79,31677,26698],{"class":96},[79,31679,31680,31682,31684],{"class":81,"line":1053},[79,31681,31310],{"class":228},[79,31683,31313],{"class":89},[79,31685,26698],{"class":96},[79,31687,31688,31690,31693],{"class":81,"line":1058},[79,31689,30750],{"class":96},[79,31691,31692],{"class":89}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[79,31694,26698],{"class":96},[79,31696,31697,31699],{"class":81,"line":1069},[79,31698,31284],{"class":96},[79,31700,26698],{"class":96},[79,31702,31703],{"class":81,"line":1081},[79,31704,30756],{"class":89},[19,31706,31707],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,31709,31710],{},[3569,31711],{"alt":57,"src":31712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,31714,31715],{},[3569,31716],{"alt":57,"src":31717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[24023,31719,31721],{"id":31720},"_623清除构建缓存","6.2.3.清除构建缓存",[51,31723,31725],{"className":73,"code":31724,"language":75,"meta":57,"style":57},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[59,31726,31727,31732],{"__ignoreMap":57},[79,31728,31729],{"class":81,"line":82},[79,31730,31731],{"class":2313},"# 清理BuildKit构建缓存\n",[79,31733,31734,31736,31739,31742],{"class":81,"line":167},[79,31735,28569],{"class":85},[79,31737,31738],{"class":89}," builder",[79,31740,31741],{"class":89}," prune",[79,31743,31744],{"class":96}," -f\n",[19,31746,31747],{},[3569,31748],{"alt":57,"src":31749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[339,31751,31753],{"id":31752},"_63补充","6.3.补充",[24023,31755,31757],{"id":31756},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,31759,31760],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,31762,31763],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,31765,31766],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[51,31768,31770],{"className":73,"code":31769,"language":75,"meta":57,"style":57},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[59,31771,31772,31779],{"__ignoreMap":57},[79,31773,31774,31776],{"class":81,"line":82},[79,31775,29386],{"class":85},[79,31777,31778],{"class":89}," nginx\n",[79,31780,31781,31783,31786,31789,31791],{"class":81,"line":167},[79,31782,30570],{"class":85},[79,31784,31785],{"class":89}," echo",[79,31787,31788],{"class":89}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[79,31790,28240],{"class":448},[79,31792,31793],{"class":89}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,31795,31796],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,31798,31799],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[51,31801,31803],{"className":73,"code":31802,"language":75,"meta":57,"style":57},"docker build -t nginx:tuling .\n",[59,31804,31805],{"__ignoreMap":57},[79,31806,31807,31809,31811,31813,31816],{"class":81,"line":82},[79,31808,28569],{"class":85},[79,31810,30747],{"class":89},[79,31812,30750],{"class":96},[79,31814,31815],{"class":89}," nginx:tuling",[79,31817,30756],{"class":89},[19,31819,31820],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,31822,31823],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[51,31825,31827],{"className":73,"code":31826,"language":75,"meta":57,"style":57},"docker run -d -p 92:80 nginx:tuling\n",[59,31828,31829],{"__ignoreMap":57},[79,31830,31831,31833,31835,31838,31840,31843],{"class":81,"line":82},[79,31832,28569],{"class":85},[79,31834,29246],{"class":89},[79,31836,31837],{"class":96}," -d",[79,31839,31230],{"class":96},[79,31841,31842],{"class":89}," 92:80",[79,31844,31845],{"class":89}," nginx:tuling\n",[19,31847,31848,31849],{},"4、访问 ",[2482,31850,31853],{"href":31851,"rel":31852},"http:\u002F\u002FDocker%E5%AE%BF%E4%B8%BB%E6%9C%BAIP:92\u002F%EF%BC%8C%E5%8F%AF%E7%9C%8B%E5%88%B0%E4%B8%8B%E5%9B%BE%E6%89%80%E7%A4%BA%E7%95%8C%E9%9D%A2",[25885],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,31855,31856],{},[3569,31857],{"alt":57,"src":31858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,31860,31861],{},[3569,31862],{"alt":57,"src":31863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[24023,31865,31867],{"id":31866},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,31869,31870],{},"只需要知道大体流程即可",[19,31872,31873],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,31875,31876],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,31878,31879],{},"2、在Dockerfile中添加以下内容",[51,31881,31883],{"className":28109,"code":31882,"language":28111,"meta":57,"style":57},"# 基于哪个镜像\nFrom java:8\n# 复制文件到容器\nADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n# 声明需要暴露的端口\nEXPOSE 8877\n# 配置容器启动后执行的命令\nENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[59,31884,31885,31890,31895,31900,31905,31910,31915,31920],{"__ignoreMap":57},[79,31886,31887],{"class":81,"line":82},[79,31888,31889],{},"# 基于哪个镜像\n",[79,31891,31892],{"class":81,"line":167},[79,31893,31894],{},"From java:8\n",[79,31896,31897],{"class":81,"line":178},[79,31898,31899],{},"# 复制文件到容器\n",[79,31901,31902],{"class":81,"line":545},[79,31903,31904],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[79,31906,31907],{"class":81,"line":550},[79,31908,31909],{},"# 声明需要暴露的端口\n",[79,31911,31912],{"class":81,"line":562},[79,31913,31914],{},"EXPOSE 8877\n",[79,31916,31917],{"class":81,"line":568},[79,31918,31919],{},"# 配置容器启动后执行的命令\n",[79,31921,31922],{"class":81,"line":574},[79,31923,31924],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,31926,31927],{},"3、使用docker build命令构建镜像",[51,31929,31931],{"className":73,"code":31930,"language":75,"meta":57,"style":57},"docker build -t tulingmall-member:0.0.5 .\n",[59,31932,31933],{"__ignoreMap":57},[79,31934,31935,31937,31939,31941,31944],{"class":81,"line":82},[79,31936,28569],{"class":85},[79,31938,30747],{"class":89},[79,31940,30750],{"class":96},[79,31942,31943],{"class":89}," tulingmall-member:0.0.5",[79,31945,30756],{"class":89},[19,31947,31948],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,31950,31951],{},[3569,31952],{"alt":57,"src":31953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,31955,31956],{},"4、启动镜像，加-d可在后台启动",[51,31958,31960],{"className":73,"code":31959,"language":75,"meta":57,"style":57},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[59,31961,31962],{"__ignoreMap":57},[79,31963,31964,31966,31968,31970,31972,31975],{"class":81,"line":82},[79,31965,28569],{"class":85},[79,31967,29246],{"class":89},[79,31969,31837],{"class":96},[79,31971,31230],{"class":96},[79,31973,31974],{"class":89}," 8877:8877",[79,31976,31977],{"class":89}," tulingmall-member:0.0.5\n",[19,31979,31980],{},"加上JVM参数：",[51,31982,31984],{"className":73,"code":31983,"language":75,"meta":57,"style":57},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\ndocker run  -d -p 8877:8877 \\\n-e SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848  \\\n-e JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'  \\\n--cap-add=SYS_PTRACE  \\\ntulingmall-member:0.0.5\n",[59,31985,31986,31991,32006,32016,32025,32032],{"__ignoreMap":57},[79,31987,31988],{"class":81,"line":82},[79,31989,31990],{"class":2313},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[79,31992,31993,31995,31997,32000,32002,32004],{"class":81,"line":167},[79,31994,28569],{"class":85},[79,31996,29246],{"class":89},[79,31998,31999],{"class":96},"  -d",[79,32001,31230],{"class":96},[79,32003,31974],{"class":89},[79,32005,26698],{"class":96},[79,32007,32008,32010,32013],{"class":81,"line":178},[79,32009,30144],{"class":228},[79,32011,32012],{"class":89},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[79,32014,32015],{"class":96},"  \\\n",[79,32017,32018,32020,32023],{"class":81,"line":545},[79,32019,30144],{"class":228},[79,32021,32022],{"class":89},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[79,32024,32015],{"class":96},[79,32026,32027,32030],{"class":81,"line":550},[79,32028,32029],{"class":228},"--cap-add=SYS_PTRACE  ",[79,32031,28193],{"class":96},[79,32033,32034],{"class":81,"line":562},[79,32035,32036],{"class":228},"tulingmall-member:0.0.5\n",[19,32038,32039],{},"5、访问会员服务接口",[19,32041,32042],{},[3569,32043],{"alt":57,"src":32044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[24023,32046,32048],{"id":32047},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,32050,32051],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,32053,32054,32055],{},"阿里云docker镜像仓库：",[2482,32056,32057],{"href":32057,"rel":32058},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[25885],[19,32060,32061],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,32063,32064],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,32066,32067],{},[3569,32068],{"alt":57,"src":32069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,32071,32072],{},"要把镜像推送到镜像仓库",[51,32074,32076],{"className":73,"code":32075,"language":75,"meta":57,"style":57},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[59,32077,32078],{"__ignoreMap":57},[79,32079,32080,32082,32084,32086],{"class":81,"line":82},[79,32081,28569],{"class":85},[79,32083,30912],{"class":89},[79,32085,31943],{"class":89},[79,32087,32088],{"class":89}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,32090,32091],{},"最后将镜像推送到远程仓库",[51,32093,32095],{"className":73,"code":32094,"language":75,"meta":57,"style":57},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[59,32096,32097],{"__ignoreMap":57},[79,32098,32099,32101,32103],{"class":81,"line":82},[79,32100,28569],{"class":85},[79,32102,31031],{"class":89},[79,32104,32088],{"class":89},[2159,32106,32107],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":57,"searchDepth":167,"depth":167,"links":32109},[32110,32111,32112],{"id":30498,"depth":178,"text":30499},{"id":30727,"depth":178,"text":30728},{"id":31752,"depth":178,"text":31753},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":30490,"description":57},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":32119,"title":32120,"body":32121,"description":57,"extension":2186,"meta":32264,"navigation":541,"path":32265,"seo":32266,"stem":32267,"__hash__":32268},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":32122,"toc":32262},[32123,32126,32131,32136,32139,32144,32149,32152,32157,32162,32165,32170,32173,32176,32179,32182,32185,32188,32208,32230,32233,32236,32256,32259],[10,32124,32120],{"id":32125},"_7vscode远程开发",[26,32127,32128],{},[29,32129,32130],{},"插件1：微软Docker工具",[19,32132,32133],{},[3569,32134],{"alt":57,"src":32135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,32137,32138],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,32140,32141],{},[3569,32142],{"alt":57,"src":32143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[26,32145,32146],{"start":167},[29,32147,32148],{},"插件2：微软Docker远程开发工具",[19,32150,32151],{},"下面这是远程开发的插件。",[19,32153,32154],{},[3569,32155],{"alt":57,"src":32156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,32158,32159],{},[3569,32160],{"alt":57,"src":32161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,32163,32164],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,32166,32167],{},[3569,32168],{"alt":57,"src":32169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,32171,32172],{},"安装完拓展之后，vscode进行链接：",[19,32174,32175],{},"1.按ctrl+shift+p",[19,32177,32178],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,32180,32181],{},"3.选择目前运行的容器",[19,32183,32184],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,32186,32187],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[51,32189,32191],{"className":73,"code":32190,"language":75,"meta":57,"style":57},"docker run -v 主机目录:容器目录 image-name\n",[59,32192,32193],{"__ignoreMap":57},[79,32194,32195,32197,32199,32202,32205],{"class":81,"line":82},[79,32196,28569],{"class":85},[79,32198,29246],{"class":89},[79,32200,32201],{"class":96}," -v",[79,32203,32204],{"class":89}," 主机目录:容器目录",[79,32206,32207],{"class":89}," image-name\n",[51,32209,32211],{"className":73,"code":32210,"language":75,"meta":57,"style":57},"docker run -it -v \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[59,32212,32213],{"__ignoreMap":57},[79,32214,32215,32217,32219,32222,32224,32227],{"class":81,"line":82},[79,32216,28569],{"class":85},[79,32218,29246],{"class":89},[79,32220,32221],{"class":96}," -it",[79,32223,32201],{"class":96},[79,32225,32226],{"class":89}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[79,32228,32229],{"class":89}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,32231,32232],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,32234,32235],{},"查看挂载情况：",[51,32237,32239],{"className":73,"code":32238,"language":75,"meta":57,"style":57},"mount | grep -i project\n",[59,32240,32241],{"__ignoreMap":57},[79,32242,32243,32246,32248,32251,32253],{"class":81,"line":82},[79,32244,32245],{"class":85},"mount",[79,32247,27129],{"class":448},[79,32249,32250],{"class":85}," grep",[79,32252,28446],{"class":96},[79,32254,32255],{"class":89}," project\n",[19,32257,32258],{},"也可以通过ls来进行查看",[2159,32260,32261],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":57,"searchDepth":167,"depth":167,"links":32263},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":32120,"description":57},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":32270,"title":32271,"body":32272,"description":25402,"extension":2186,"meta":32276,"navigation":541,"path":32278,"seo":32279,"stem":32280,"__hash__":32281},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":32273,"toc":32274},[],{"title":57,"searchDepth":167,"depth":167,"links":32275},[],{"category":32277},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":32271,"description":25402},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":32283,"title":32284,"body":32285,"description":25402,"extension":2186,"meta":32289,"navigation":541,"path":32290,"seo":32291,"stem":32292,"__hash__":32293},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":32286,"toc":32287},[],{"title":57,"searchDepth":167,"depth":167,"links":32288},[],{"category":32277},"\u002Fwiki\u002F2025-11-10-k8s",{"title":32284,"description":25402},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":32295,"title":32296,"body":32297,"description":25402,"extension":2186,"meta":32584,"navigation":541,"path":32585,"seo":32586,"stem":32587,"__hash__":32588},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":32298,"toc":32582},[32299,32302,32310,32325,32330,32380,32383,32389,32571,32576,32579],[10,32300,32296],{"id":32301},"_1验证深度学习环境",[19,32303,32304,32305],{},"关于环境的安装，看",[2482,32306,32309],{"href":32307,"rel":32308},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[25885],"Pytorch-->深度学习",[19,32311,32312,32313,32316,32317,32320,32321,32324],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[59,32314,32315],{},"pytorch-cuda=12.4"," 是一个“ ",[2398,32318,32319],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[2398,32322,32323],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,32326,32327],{},[3569,32328],{"alt":57,"src":32329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-001.png",[51,32331,32333],{"className":73,"code":32332,"language":75,"meta":57,"style":57},"# CUDA 12.4\nconda install pytorch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 pytorch-cuda=12.4 -c pytorch -c nvidia\n",[59,32334,32335,32340],{"__ignoreMap":57},[79,32336,32337],{"class":81,"line":82},[79,32338,32339],{"class":2313},"# CUDA 12.4\n",[79,32341,32342,32344,32346,32349,32352,32355,32358,32361,32363,32366,32369,32372,32375,32377],{"class":81,"line":167},[79,32343,146],{"class":85},[79,32345,93],{"class":89},[79,32347,32348],{"class":89}," pytorch==",[79,32350,32351],{"class":96},"2.5.1",[79,32353,32354],{"class":89}," torchvision==",[79,32356,32357],{"class":96},"0.20.1",[79,32359,32360],{"class":89}," torchaudio==",[79,32362,32351],{"class":96},[79,32364,32365],{"class":89}," pytorch-cuda=",[79,32367,32368],{"class":96},"12.4",[79,32370,32371],{"class":96}," -c",[79,32373,32374],{"class":89}," pytorch",[79,32376,32371],{"class":96},[79,32378,32379],{"class":89}," nvidia\n",[19,32381,32382],{},"）：",[19,32384,32385],{},[2482,32386,32387],{"href":32387,"rel":32388},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[25885],[51,32390,32392],{"className":439,"code":32391,"language":441,"meta":57,"style":57},"# 对深度学习环境进行测试\nimport torch\n# 查看cuda是否被激活\nflag=torch.cuda.is_available()\nprint(\"cuda:\", flag)   #返回true的话说明被激活\n# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\nngpu=1\ndevice=torch.device(\"cuda:0\" if(torch.cuda.is_available() and ngpu>0) else \"cpu\")\nprint(device)\nprint(torch.cuda.get_device_name(0))\nprint(torch.rand(3,3).cuda())\n# 查看cuda和cudnn的版本\ncuda_version=torch.version.cuda\nprint(\"cuda version\",cuda_version)\ncudnn_version=torch.backends.cudnn.version()\nprint(\"cudnn version\",cudnn_version)\n",[59,32393,32394,32399,32406,32411,32421,32436,32441,32451,32488,32495,32506,32522,32527,32537,32549,32559],{"__ignoreMap":57},[79,32395,32396],{"class":81,"line":82},[79,32397,32398],{"class":2313},"# 对深度学习环境进行测试\n",[79,32400,32401,32403],{"class":81,"line":167},[79,32402,520],{"class":448},[79,32404,32405],{"class":228}," torch\n",[79,32407,32408],{"class":81,"line":178},[79,32409,32410],{"class":2313},"# 查看cuda是否被激活\n",[79,32412,32413,32416,32418],{"class":81,"line":545},[79,32414,32415],{"class":228},"flag",[79,32417,239],{"class":448},[79,32419,32420],{"class":228},"torch.cuda.is_available()\n",[79,32422,32423,32425,32427,32430,32433],{"class":81,"line":550},[79,32424,1889],{"class":96},[79,32426,455],{"class":228},[79,32428,32429],{"class":89},"\"cuda:\"",[79,32431,32432],{"class":228},", flag)   ",[79,32434,32435],{"class":2313},"#返回true的话说明被激活\n",[79,32437,32438],{"class":81,"line":562},[79,32439,32440],{"class":2313},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[79,32442,32443,32446,32448],{"class":81,"line":568},[79,32444,32445],{"class":228},"ngpu",[79,32447,239],{"class":448},[79,32449,32450],{"class":96},"1\n",[79,32452,32453,32456,32458,32461,32464,32466,32469,32472,32475,32477,32479,32481,32483,32486],{"class":81,"line":574},[79,32454,32455],{"class":228},"device",[79,32457,239],{"class":448},[79,32459,32460],{"class":228},"torch.device(",[79,32462,32463],{"class":89},"\"cuda:0\"",[79,32465,3799],{"class":448},[79,32467,32468],{"class":228},"(torch.cuda.is_available() ",[79,32470,32471],{"class":448},"and",[79,32473,32474],{"class":228}," ngpu",[79,32476,3199],{"class":448},[79,32478,759],{"class":96},[79,32480,15747],{"class":228},[79,32482,3796],{"class":448},[79,32484,32485],{"class":89}," \"cpu\"",[79,32487,850],{"class":228},[79,32489,32490,32492],{"class":81,"line":579},[79,32491,1889],{"class":96},[79,32493,32494],{"class":228},"(device)\n",[79,32496,32497,32499,32502,32504],{"class":81,"line":585},[79,32498,1889],{"class":96},[79,32500,32501],{"class":228},"(torch.cuda.get_device_name(",[79,32503,759],{"class":96},[79,32505,1150],{"class":228},[79,32507,32508,32510,32513,32515,32517,32519],{"class":81,"line":591},[79,32509,1889],{"class":96},[79,32511,32512],{"class":228},"(torch.rand(",[79,32514,970],{"class":96},[79,32516,2621],{"class":228},[79,32518,970],{"class":96},[79,32520,32521],{"class":228},").cuda())\n",[79,32523,32524],{"class":81,"line":596},[79,32525,32526],{"class":2313},"# 查看cuda和cudnn的版本\n",[79,32528,32529,32532,32534],{"class":81,"line":602},[79,32530,32531],{"class":228},"cuda_version",[79,32533,239],{"class":448},[79,32535,32536],{"class":228},"torch.version.cuda\n",[79,32538,32539,32541,32543,32546],{"class":81,"line":608},[79,32540,1889],{"class":96},[79,32542,455],{"class":228},[79,32544,32545],{"class":89},"\"cuda version\"",[79,32547,32548],{"class":228},",cuda_version)\n",[79,32550,32551,32554,32556],{"class":81,"line":614},[79,32552,32553],{"class":228},"cudnn_version",[79,32555,239],{"class":448},[79,32557,32558],{"class":228},"torch.backends.cudnn.version()\n",[79,32560,32561,32563,32565,32568],{"class":81,"line":619},[79,32562,1889],{"class":96},[79,32564,455],{"class":228},[79,32566,32567],{"class":89},"\"cudnn version\"",[79,32569,32570],{"class":228},",cudnn_version)\n",[19,32572,32573],{},[3569,32574],{"alt":57,"src":32575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-002.png",[19,32577,32578],{},"cuda:0 指的是一块显卡",[2159,32580,32581],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":57,"searchDepth":167,"depth":167,"links":32583},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":32296,"description":25402},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":32590,"title":32591,"body":32592,"description":25402,"extension":2186,"meta":52383,"navigation":541,"path":52384,"seo":52385,"stem":52386,"__hash__":52387},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":32593,"toc":52377},[32594,32597,32601,32605,32608,32613,32618,32621,32626,32631,32636,32639,32643,32648,32652,32657,32660,32665,32668,32671,32674,32677,32682,32685,32690,32695,32700,32705,32708,32712,32715,32720,33321,33326,33329,33334,33337,33340,33800,33803,33806,33809,33812,35859,35862,35867,35872,36666,36669,36674,37451,37455,39114,39118,39832,39836,39840,39845,39850,39855,39858,39863,39868,39873,39878,39883,39887,39892,41174,41179,41182,41185,41188,41343,41346,41349,42565,42570,43265,43269,43273,43278,43283,43286,43291,43296,43301,43306,43311,43316,43321,43326,43331,43336,43341,43346,43351,43356,43361,43366,43371,43376,43381,43386,43391,43396,43401,43406,43411,43416,43421,43426,43431,43436,43440,43444,43447,44925,44929,46576,46580,47274,47278,47281,47284,47828,47831,47835,47838,49235,49239,49242,49820,51607,51611,51614,52374],[10,32595,32591],{"id":32596},"_2经典神经网络",[339,32598,32600],{"id":32599},"_21lenet与alexnet","2.1.LeNet与AlexNet",[24023,32602,32604],{"id":32603},"_211原理介绍","2.1.1.原理介绍",[19,32606,32607],{},"LeNet-5",[26,32609,32610],{},[29,32611,32612],{},"原理",[19,32614,32615],{},[3569,32616],{"alt":57,"src":32617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[19,32619,32620],{},"B是batch批次；C是channel通道",[26,32622,32623],{"start":167},[29,32624,32625],{},"网络参数详细",[19,32627,32628],{},[3569,32629],{"alt":57,"src":32630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-004.png",[19,32632,32633],{},[3569,32634],{"alt":57,"src":32635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-005.png",[19,32637,32638],{},"AlexNet",[26,32640,32641],{},[29,32642,32612],{},[19,32644,32645],{},[3569,32646],{"alt":57,"src":32647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-006.png",[26,32649,32650],{"start":167},[29,32651,32625],{},[19,32653,32654],{},[3569,32655],{"alt":57,"src":32656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[19,32658,32659],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,32661,32662],{},[3569,32663],{"alt":57,"src":32664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-008.png",[19,32666,32667],{},"数据处理中的图像增强操作:",[19,32669,32670],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,32672,32673],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,32675,32676],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,32678,32679],{},[3569,32680],{"alt":57,"src":32681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-009.png",[19,32683,32684],{},"提升网络精确度的方法：LRN正则化",[19,32686,32687],{},[3569,32688],{"alt":57,"src":32689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-010.png",[19,32691,32692],{},[3569,32693],{"alt":57,"src":32694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-011.png",[26,32696,32697],{"start":178},[29,32698,32699],{},"AlexNet的总结",[19,32701,32702],{},[3569,32703],{"alt":57,"src":32704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-012.png",[19,32706,32707],{},"比LeNet模型要深一丢丢",[24023,32709,32711],{"id":32710},"_212代码实现","2.1.2.代码实现",[19,32713,32714],{},"（1）LeNet",[26,32716,32717],{},[29,32718,32719],{},"模型搭建",[51,32721,32723],{"className":439,"code":32722,"language":441,"meta":57,"style":57},"# 导入库\nimport torch\n# 导入神经网络层\nfrom torch import nn\n# 导入展示神经网络参数的包\nfrom torchsummary import summary\n\nclass LeNet(nn.Module):\n    # 模型初始化:\n    # 定义一些网络层和激活函数\n    def __init__(self):\n        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n        super(LeNet,self).__init__()\n\n        # 定义网络层\n        self.c1=nn.Conv2d(in_channels=1,out_channels=6,kernel_size=5,padding=2)\n        self.sig=nn.Sigmoid()\n        # 定义池化\n        self.s2=nn.AvgPool2d(kernel_size=2,stride=2)\n        self.c3=nn.Conv2d(in_channels=6,out_channels=16,kernel_size=5)\n        self.s4=nn.AvgPool2d(kernel_size=2,stride=2)\n        # 定义平展层\n        self.flatten=nn.Flatten()\n        # 定义全连接层\n        self.f5=nn.Linear(400,120)\n        self.f6=nn.Linear(120,84)\n        self.f7=nn.Linear(84,10)\n\n    # 写工具->写前向传播\n    def forward(self,x):\n        x=self.sig(self.c1(x))\n        x=self.s2(x)\n        x=self.sig(self.c3(x))\n        x=self.s4(x)\n        x=self.flatten(x)\n        x=self.sig(self.f5(x))\n        x=self.sig(self.f6(x))\n        x=self.f7(x)\n        return x\n\nif __name__==\"__main__\":\n    # 判断是否有cuda是否激活,有GPU会返回cuda\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    # 如果就是想指定用cpu用下方代码:\n    # device=\"cpu\"\n    # print(device)\n\n    # 实例化模型\n    # 将模型放到设备中去运行\n    model=LeNet().to(device)\n    print(summary(model,(1,28,28)))\n",[59,32724,32725,32730,32736,32741,32754,32759,32771,32775,32794,32799,32804,32815,32820,32839,32843,32848,32897,32909,32914,32943,32978,33005,33010,33022,33027,33047,33066,33085,33089,33094,33104,33121,33132,33147,33158,33169,33184,33199,33210,33217,33221,33234,33239,33262,33267,33272,33277,33281,33286,33291,33301],{"__ignoreMap":57},[79,32726,32727],{"class":81,"line":82},[79,32728,32729],{"class":2313},"# 导入库\n",[79,32731,32732,32734],{"class":81,"line":167},[79,32733,520],{"class":448},[79,32735,32405],{"class":228},[79,32737,32738],{"class":81,"line":178},[79,32739,32740],{"class":2313},"# 导入神经网络层\n",[79,32742,32743,32746,32749,32751],{"class":81,"line":545},[79,32744,32745],{"class":448},"from",[79,32747,32748],{"class":228}," torch ",[79,32750,520],{"class":448},[79,32752,32753],{"class":228}," nn\n",[79,32755,32756],{"class":81,"line":550},[79,32757,32758],{"class":2313},"# 导入展示神经网络参数的包\n",[79,32760,32761,32763,32766,32768],{"class":81,"line":562},[79,32762,32745],{"class":448},[79,32764,32765],{"class":228}," torchsummary ",[79,32767,520],{"class":448},[79,32769,32770],{"class":228}," summary\n",[79,32772,32773],{"class":81,"line":568},[79,32774,542],{"emptyLinePlaceholder":541},[79,32776,32777,32779,32782,32784,32787,32789,32792],{"class":81,"line":574},[79,32778,16727],{"class":448},[79,32780,32781],{"class":85}," LeNet",[79,32783,455],{"class":228},[79,32785,32786],{"class":85},"nn",[79,32788,2798],{"class":228},[79,32790,32791],{"class":85},"Module",[79,32793,932],{"class":228},[79,32795,32796],{"class":81,"line":579},[79,32797,32798],{"class":2313},"    # 模型初始化:\n",[79,32800,32801],{"class":81,"line":585},[79,32802,32803],{"class":2313},"    # 定义一些网络层和激活函数\n",[79,32805,32806,32809,32812],{"class":81,"line":591},[79,32807,32808],{"class":448},"    def",[79,32810,32811],{"class":96}," __init__",[79,32813,32814],{"class":228},"(self):\n",[79,32816,32817],{"class":81,"line":596},[79,32818,32819],{"class":2313},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[79,32821,32822,32825,32828,32831,32834,32837],{"class":81,"line":602},[79,32823,32824],{"class":96},"        super",[79,32826,32827],{"class":228},"(LeNet,",[79,32829,32830],{"class":96},"self",[79,32832,32833],{"class":228},").",[79,32835,32836],{"class":96},"__init__",[79,32838,4061],{"class":228},[79,32840,32841],{"class":81,"line":608},[79,32842,542],{"emptyLinePlaceholder":541},[79,32844,32845],{"class":81,"line":614},[79,32846,32847],{"class":2313},"        # 定义网络层\n",[79,32849,32850,32853,32856,32858,32861,32864,32866,32868,32870,32873,32875,32877,32879,32882,32884,32886,32888,32891,32893,32895],{"class":81,"line":619},[79,32851,32852],{"class":96},"        self",[79,32854,32855],{"class":228},".c1",[79,32857,239],{"class":448},[79,32859,32860],{"class":228},"nn.Conv2d(",[79,32862,32863],{"class":7284},"in_channels",[79,32865,239],{"class":448},[79,32867,775],{"class":96},[79,32869,2621],{"class":228},[79,32871,32872],{"class":7284},"out_channels",[79,32874,239],{"class":448},[79,32876,2587],{"class":96},[79,32878,2621],{"class":228},[79,32880,32881],{"class":7284},"kernel_size",[79,32883,239],{"class":448},[79,32885,2563],{"class":96},[79,32887,2621],{"class":228},[79,32889,32890],{"class":7284},"padding",[79,32892,239],{"class":448},[79,32894,2331],{"class":96},[79,32896,850],{"class":228},[79,32898,32899,32901,32904,32906],{"class":81,"line":625},[79,32900,32852],{"class":96},[79,32902,32903],{"class":228},".sig",[79,32905,239],{"class":448},[79,32907,32908],{"class":228},"nn.Sigmoid()\n",[79,32910,32911],{"class":81,"line":631},[79,32912,32913],{"class":2313},"        # 定义池化\n",[79,32915,32916,32918,32921,32923,32926,32928,32930,32932,32934,32937,32939,32941],{"class":81,"line":637},[79,32917,32852],{"class":96},[79,32919,32920],{"class":228},".s2",[79,32922,239],{"class":448},[79,32924,32925],{"class":228},"nn.AvgPool2d(",[79,32927,32881],{"class":7284},[79,32929,239],{"class":448},[79,32931,2331],{"class":96},[79,32933,2621],{"class":228},[79,32935,32936],{"class":7284},"stride",[79,32938,239],{"class":448},[79,32940,2331],{"class":96},[79,32942,850],{"class":228},[79,32944,32945,32947,32950,32952,32954,32956,32958,32960,32962,32964,32966,32968,32970,32972,32974,32976],{"class":81,"line":643},[79,32946,32852],{"class":96},[79,32948,32949],{"class":228},".c3",[79,32951,239],{"class":448},[79,32953,32860],{"class":228},[79,32955,32863],{"class":7284},[79,32957,239],{"class":448},[79,32959,2587],{"class":96},[79,32961,2621],{"class":228},[79,32963,32872],{"class":7284},[79,32965,239],{"class":448},[79,32967,2841],{"class":96},[79,32969,2621],{"class":228},[79,32971,32881],{"class":7284},[79,32973,239],{"class":448},[79,32975,2563],{"class":96},[79,32977,850],{"class":228},[79,32979,32980,32982,32985,32987,32989,32991,32993,32995,32997,32999,33001,33003],{"class":81,"line":649},[79,32981,32852],{"class":96},[79,32983,32984],{"class":228},".s4",[79,32986,239],{"class":448},[79,32988,32925],{"class":228},[79,32990,32881],{"class":7284},[79,32992,239],{"class":448},[79,32994,2331],{"class":96},[79,32996,2621],{"class":228},[79,32998,32936],{"class":7284},[79,33000,239],{"class":448},[79,33002,2331],{"class":96},[79,33004,850],{"class":228},[79,33006,33007],{"class":81,"line":655},[79,33008,33009],{"class":2313},"        # 定义平展层\n",[79,33011,33012,33014,33017,33019],{"class":81,"line":660},[79,33013,32852],{"class":96},[79,33015,33016],{"class":228},".flatten",[79,33018,239],{"class":448},[79,33020,33021],{"class":228},"nn.Flatten()\n",[79,33023,33024],{"class":81,"line":666},[79,33025,33026],{"class":2313},"        # 定义全连接层\n",[79,33028,33029,33031,33034,33036,33039,33041,33043,33045],{"class":81,"line":672},[79,33030,32852],{"class":96},[79,33032,33033],{"class":228},".f5",[79,33035,239],{"class":448},[79,33037,33038],{"class":228},"nn.Linear(",[79,33040,6060],{"class":96},[79,33042,2621],{"class":228},[79,33044,3057],{"class":96},[79,33046,850],{"class":228},[79,33048,33049,33051,33054,33056,33058,33060,33062,33064],{"class":81,"line":678},[79,33050,32852],{"class":96},[79,33052,33053],{"class":228},".f6",[79,33055,239],{"class":448},[79,33057,33038],{"class":228},[79,33059,3057],{"class":96},[79,33061,2621],{"class":228},[79,33063,2951],{"class":96},[79,33065,850],{"class":228},[79,33067,33068,33070,33073,33075,33077,33079,33081,33083],{"class":81,"line":684},[79,33069,32852],{"class":96},[79,33071,33072],{"class":228},".f7",[79,33074,239],{"class":448},[79,33076,33038],{"class":228},[79,33078,2951],{"class":96},[79,33080,2621],{"class":228},[79,33082,2689],{"class":96},[79,33084,850],{"class":228},[79,33086,33087],{"class":81,"line":690},[79,33088,542],{"emptyLinePlaceholder":541},[79,33090,33091],{"class":81,"line":695},[79,33092,33093],{"class":2313},"    # 写工具->写前向传播\n",[79,33095,33096,33098,33101],{"class":81,"line":700},[79,33097,32808],{"class":448},[79,33099,33100],{"class":85}," forward",[79,33102,33103],{"class":228},"(self,x):\n",[79,33105,33106,33109,33111,33113,33116,33118],{"class":81,"line":712},[79,33107,33108],{"class":228},"        x",[79,33110,239],{"class":448},[79,33112,32830],{"class":96},[79,33114,33115],{"class":228},".sig(",[79,33117,32830],{"class":96},[79,33119,33120],{"class":228},".c1(x))\n",[79,33122,33123,33125,33127,33129],{"class":81,"line":721},[79,33124,33108],{"class":228},[79,33126,239],{"class":448},[79,33128,32830],{"class":96},[79,33130,33131],{"class":228},".s2(x)\n",[79,33133,33134,33136,33138,33140,33142,33144],{"class":81,"line":726},[79,33135,33108],{"class":228},[79,33137,239],{"class":448},[79,33139,32830],{"class":96},[79,33141,33115],{"class":228},[79,33143,32830],{"class":96},[79,33145,33146],{"class":228},".c3(x))\n",[79,33148,33149,33151,33153,33155],{"class":81,"line":731},[79,33150,33108],{"class":228},[79,33152,239],{"class":448},[79,33154,32830],{"class":96},[79,33156,33157],{"class":228},".s4(x)\n",[79,33159,33160,33162,33164,33166],{"class":81,"line":748},[79,33161,33108],{"class":228},[79,33163,239],{"class":448},[79,33165,32830],{"class":96},[79,33167,33168],{"class":228},".flatten(x)\n",[79,33170,33171,33173,33175,33177,33179,33181],{"class":81,"line":765},[79,33172,33108],{"class":228},[79,33174,239],{"class":448},[79,33176,32830],{"class":96},[79,33178,33115],{"class":228},[79,33180,32830],{"class":96},[79,33182,33183],{"class":228},".f5(x))\n",[79,33185,33186,33188,33190,33192,33194,33196],{"class":81,"line":780},[79,33187,33108],{"class":228},[79,33189,239],{"class":448},[79,33191,32830],{"class":96},[79,33193,33115],{"class":228},[79,33195,32830],{"class":96},[79,33197,33198],{"class":228},".f6(x))\n",[79,33200,33201,33203,33205,33207],{"class":81,"line":811},[79,33202,33108],{"class":228},[79,33204,239],{"class":448},[79,33206,32830],{"class":96},[79,33208,33209],{"class":228},".f7(x)\n",[79,33211,33212,33214],{"class":81,"line":816},[79,33213,16785],{"class":448},[79,33215,33216],{"class":228}," x\n",[79,33218,33219],{"class":81,"line":821},[79,33220,542],{"emptyLinePlaceholder":541},[79,33222,33223,33225,33227,33229,33232],{"class":81,"line":837},[79,33224,1210],{"class":448},[79,33226,1213],{"class":96},[79,33228,5025],{"class":448},[79,33230,33231],{"class":89},"\"__main__\"",[79,33233,745],{"class":228},[79,33235,33236],{"class":81,"line":853},[79,33237,33238],{"class":2313},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[79,33240,33241,33244,33246,33248,33251,33253,33256,33258,33260],{"class":81,"line":864},[79,33242,33243],{"class":228},"    device",[79,33245,239],{"class":448},[79,33247,32460],{"class":228},[79,33249,33250],{"class":89},"\"cuda\"",[79,33252,3799],{"class":448},[79,33254,33255],{"class":228}," torch.cuda.is_available() ",[79,33257,3796],{"class":448},[79,33259,32485],{"class":89},[79,33261,850],{"class":228},[79,33263,33264],{"class":81,"line":869},[79,33265,33266],{"class":2313},"    # 如果就是想指定用cpu用下方代码:\n",[79,33268,33269],{"class":81,"line":885},[79,33270,33271],{"class":2313},"    # device=\"cpu\"\n",[79,33273,33274],{"class":81,"line":891},[79,33275,33276],{"class":2313},"    # print(device)\n",[79,33278,33279],{"class":81,"line":896},[79,33280,542],{"emptyLinePlaceholder":541},[79,33282,33283],{"class":81,"line":907},[79,33284,33285],{"class":2313},"    # 实例化模型\n",[79,33287,33288],{"class":81,"line":912},[79,33289,33290],{"class":2313},"    # 将模型放到设备中去运行\n",[79,33292,33293,33296,33298],{"class":81,"line":935},[79,33294,33295],{"class":228},"    model",[79,33297,239],{"class":448},[79,33299,33300],{"class":228},"LeNet().to(device)\n",[79,33302,33303,33305,33308,33310,33312,33314,33316,33318],{"class":81,"line":946},[79,33304,1161],{"class":96},[79,33306,33307],{"class":228},"(summary(model,(",[79,33309,775],{"class":96},[79,33311,2621],{"class":228},[79,33313,3141],{"class":96},[79,33315,2621],{"class":228},[79,33317,3141],{"class":96},[79,33319,33320],{"class":228},")))\n",[19,33322,33323],{},[3569,33324],{"alt":57,"src":33325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-013.png",[19,33327,33328],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[26,33330,33331],{"start":167},[29,33332,33333],{},"训练",[19,33335,33336],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,33338,33339],{},"在训练之前可以将数据展示看一下",[51,33341,33343],{"className":439,"code":33342,"language":441,"meta":57,"style":57},"# 建立画图的函数，用于展示数据\n# torchvision中包含很多内置的数据集\nfrom sklearn.externals.array_api_compat.torch import squeeze\nfrom torchvision.datasets import FashionMNIST\nimport numpy as np\n# 引入处理数据集的包\nfrom torchvision import transforms\n# 从torch库中引入数据处理的包\nimport torch.utils.data as Data\n# 导入画图的库\nimport matplotlib.pyplot as plt\n\n\ntrain_data=FashionMNIST(root='.\u002Fdata',\n                        train=True,\n                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n                        transform=transforms.Compose([transforms.Resize(size=224),transforms.ToTensor()]),\n                        download=True)\n\n# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\ntrain_loader=Data.DataLoader(dataset=train_data,\n                             batch_size=64,\n                             # 数据是否打乱\n                             shuffle=True,\n                             # 规定加载数据的进程\n                             num_workers=0)\n\n# 获得一个batch的数据\nfor step,(b_x,b_y) in enumerate(train_loader):\n    if step > 0:\n        break\n# squeeze()这个函数是去除张量中所有大小为1的维度\nbatch_x=b_x.squeeze().numpy()  #将四维张量移除所有维度为1的维度,并转换成numpy数组\nbatch_y=b_y.numpy()   #将张量转换成功numpy数组\nclass_label=train_data.classes  #训练集标签\n# print(class_label)\n\n# 可视化一个batch的图像\nplt.figure(figsize=(12,5))\nfor ii in np.arange(len(batch_y)):\n    plt.subplot(4,16,ii + 1)\n    plt.imshow(batch_x[ii,:,:],cmap=plt.cm.gray)\n    plt.title(class_label[batch_y[ii]],size=10)\n    plt.axis(\"off\")\n    plt.subplots_adjust(wspace=0.05)\nplt.show()\n",[59,33344,33345,33350,33355,33367,33379,33389,33394,33406,33411,33423,33428,33440,33444,33448,33469,33481,33486,33507,33518,33522,33527,33545,33556,33561,33572,33577,33588,33592,33597,33612,33624,33629,33634,33647,33660,33673,33678,33682,33687,33707,33724,33744,33757,33770,33780,33795],{"__ignoreMap":57},[79,33346,33347],{"class":81,"line":82},[79,33348,33349],{"class":2313},"# 建立画图的函数，用于展示数据\n",[79,33351,33352],{"class":81,"line":167},[79,33353,33354],{"class":2313},"# torchvision中包含很多内置的数据集\n",[79,33356,33357,33359,33362,33364],{"class":81,"line":178},[79,33358,32745],{"class":448},[79,33360,33361],{"class":228}," sklearn.externals.array_api_compat.torch ",[79,33363,520],{"class":448},[79,33365,33366],{"class":228}," squeeze\n",[79,33368,33369,33371,33374,33376],{"class":81,"line":545},[79,33370,32745],{"class":448},[79,33372,33373],{"class":228}," torchvision.datasets ",[79,33375,520],{"class":448},[79,33377,33378],{"class":228}," FashionMNIST\n",[79,33380,33381,33383,33385,33387],{"class":81,"line":550},[79,33382,520],{"class":448},[79,33384,530],{"class":228},[79,33386,533],{"class":448},[79,33388,536],{"class":228},[79,33390,33391],{"class":81,"line":562},[79,33392,33393],{"class":2313},"# 引入处理数据集的包\n",[79,33395,33396,33398,33401,33403],{"class":81,"line":568},[79,33397,32745],{"class":448},[79,33399,33400],{"class":228}," torchvision ",[79,33402,520],{"class":448},[79,33404,33405],{"class":228}," transforms\n",[79,33407,33408],{"class":81,"line":574},[79,33409,33410],{"class":2313},"# 从torch库中引入数据处理的包\n",[79,33412,33413,33415,33418,33420],{"class":81,"line":579},[79,33414,520],{"class":448},[79,33416,33417],{"class":228}," torch.utils.data ",[79,33419,533],{"class":448},[79,33421,33422],{"class":228}," Data\n",[79,33424,33425],{"class":81,"line":585},[79,33426,33427],{"class":2313},"# 导入画图的库\n",[79,33429,33430,33432,33435,33437],{"class":81,"line":591},[79,33431,520],{"class":448},[79,33433,33434],{"class":228}," matplotlib.pyplot ",[79,33436,533],{"class":448},[79,33438,33439],{"class":228}," plt\n",[79,33441,33442],{"class":81,"line":596},[79,33443,542],{"emptyLinePlaceholder":541},[79,33445,33446],{"class":81,"line":602},[79,33447,542],{"emptyLinePlaceholder":541},[79,33449,33450,33453,33455,33458,33461,33463,33466],{"class":81,"line":608},[79,33451,33452],{"class":228},"train_data",[79,33454,239],{"class":448},[79,33456,33457],{"class":228},"FashionMNIST(",[79,33459,33460],{"class":7284},"root",[79,33462,239],{"class":448},[79,33464,33465],{"class":89},"'.\u002Fdata'",[79,33467,33468],{"class":228},",\n",[79,33470,33471,33474,33476,33479],{"class":81,"line":614},[79,33472,33473],{"class":7284},"                        train",[79,33475,239],{"class":448},[79,33477,33478],{"class":96},"True",[79,33480,33468],{"class":228},[79,33482,33483],{"class":81,"line":619},[79,33484,33485],{"class":2313},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[79,33487,33488,33491,33493,33496,33499,33501,33504],{"class":81,"line":625},[79,33489,33490],{"class":7284},"                        transform",[79,33492,239],{"class":448},[79,33494,33495],{"class":228},"transforms.Compose([transforms.Resize(",[79,33497,33498],{"class":7284},"size",[79,33500,239],{"class":448},[79,33502,33503],{"class":96},"224",[79,33505,33506],{"class":228},"),transforms.ToTensor()]),\n",[79,33508,33509,33512,33514,33516],{"class":81,"line":631},[79,33510,33511],{"class":7284},"                        download",[79,33513,239],{"class":448},[79,33515,33478],{"class":96},[79,33517,850],{"class":228},[79,33519,33520],{"class":81,"line":637},[79,33521,542],{"emptyLinePlaceholder":541},[79,33523,33524],{"class":81,"line":643},[79,33525,33526],{"class":2313},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[79,33528,33529,33532,33534,33537,33540,33542],{"class":81,"line":649},[79,33530,33531],{"class":228},"train_loader",[79,33533,239],{"class":448},[79,33535,33536],{"class":228},"Data.DataLoader(",[79,33538,33539],{"class":7284},"dataset",[79,33541,239],{"class":448},[79,33543,33544],{"class":228},"train_data,\n",[79,33546,33547,33550,33552,33554],{"class":81,"line":655},[79,33548,33549],{"class":7284},"                             batch_size",[79,33551,239],{"class":448},[79,33553,2449],{"class":96},[79,33555,33468],{"class":228},[79,33557,33558],{"class":81,"line":660},[79,33559,33560],{"class":2313},"                             # 数据是否打乱\n",[79,33562,33563,33566,33568,33570],{"class":81,"line":666},[79,33564,33565],{"class":7284},"                             shuffle",[79,33567,239],{"class":448},[79,33569,33478],{"class":96},[79,33571,33468],{"class":228},[79,33573,33574],{"class":81,"line":672},[79,33575,33576],{"class":2313},"                             # 规定加载数据的进程\n",[79,33578,33579,33582,33584,33586],{"class":81,"line":678},[79,33580,33581],{"class":7284},"                             num_workers",[79,33583,239],{"class":448},[79,33585,759],{"class":96},[79,33587,850],{"class":228},[79,33589,33590],{"class":81,"line":684},[79,33591,542],{"emptyLinePlaceholder":541},[79,33593,33594],{"class":81,"line":690},[79,33595,33596],{"class":2313},"# 获得一个batch的数据\n",[79,33598,33599,33601,33604,33606,33609],{"class":81,"line":695},[79,33600,1638],{"class":448},[79,33602,33603],{"class":228}," step,(b_x,b_y) ",[79,33605,921],{"class":448},[79,33607,33608],{"class":96}," enumerate",[79,33610,33611],{"class":228},"(train_loader):\n",[79,33613,33614,33616,33618,33620,33622],{"class":81,"line":700},[79,33615,5176],{"class":448},[79,33617,918],{"class":228},[79,33619,3199],{"class":448},[79,33621,1103],{"class":96},[79,33623,745],{"class":228},[79,33625,33626],{"class":81,"line":712},[79,33627,33628],{"class":448},"        break\n",[79,33630,33631],{"class":81,"line":721},[79,33632,33633],{"class":2313},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[79,33635,33636,33639,33641,33644],{"class":81,"line":726},[79,33637,33638],{"class":228},"batch_x",[79,33640,239],{"class":448},[79,33642,33643],{"class":228},"b_x.squeeze().numpy()  ",[79,33645,33646],{"class":2313},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[79,33648,33649,33652,33654,33657],{"class":81,"line":731},[79,33650,33651],{"class":228},"batch_y",[79,33653,239],{"class":448},[79,33655,33656],{"class":228},"b_y.numpy()   ",[79,33658,33659],{"class":2313},"#将张量转换成功numpy数组\n",[79,33661,33662,33665,33667,33670],{"class":81,"line":748},[79,33663,33664],{"class":228},"class_label",[79,33666,239],{"class":448},[79,33668,33669],{"class":228},"train_data.classes  ",[79,33671,33672],{"class":2313},"#训练集标签\n",[79,33674,33675],{"class":81,"line":765},[79,33676,33677],{"class":2313},"# print(class_label)\n",[79,33679,33680],{"class":81,"line":780},[79,33681,542],{"emptyLinePlaceholder":541},[79,33683,33684],{"class":81,"line":811},[79,33685,33686],{"class":2313},"# 可视化一个batch的图像\n",[79,33688,33689,33692,33695,33697,33699,33701,33703,33705],{"class":81,"line":816},[79,33690,33691],{"class":228},"plt.figure(",[79,33693,33694],{"class":7284},"figsize",[79,33696,239],{"class":448},[79,33698,455],{"class":228},[79,33700,2739],{"class":96},[79,33702,2621],{"class":228},[79,33704,2563],{"class":96},[79,33706,1150],{"class":228},[79,33708,33709,33711,33714,33716,33719,33721],{"class":81,"line":821},[79,33710,1638],{"class":448},[79,33712,33713],{"class":228}," ii ",[79,33715,921],{"class":448},[79,33717,33718],{"class":228}," np.arange(",[79,33720,9423],{"class":96},[79,33722,33723],{"class":228},"(batch_y)):\n",[79,33725,33726,33729,33731,33733,33735,33738,33740,33742],{"class":81,"line":837},[79,33727,33728],{"class":228},"    plt.subplot(",[79,33730,2537],{"class":96},[79,33732,2621],{"class":228},[79,33734,2841],{"class":96},[79,33736,33737],{"class":228},",ii ",[79,33739,995],{"class":448},[79,33741,27137],{"class":96},[79,33743,850],{"class":228},[79,33745,33746,33749,33752,33754],{"class":81,"line":853},[79,33747,33748],{"class":228},"    plt.imshow(batch_x[ii,:,:],",[79,33750,33751],{"class":7284},"cmap",[79,33753,239],{"class":448},[79,33755,33756],{"class":228},"plt.cm.gray)\n",[79,33758,33759,33762,33764,33766,33768],{"class":81,"line":864},[79,33760,33761],{"class":228},"    plt.title(class_label[batch_y[ii]],",[79,33763,33498],{"class":7284},[79,33765,239],{"class":448},[79,33767,2689],{"class":96},[79,33769,850],{"class":228},[79,33771,33772,33775,33778],{"class":81,"line":869},[79,33773,33774],{"class":228},"    plt.axis(",[79,33776,33777],{"class":89},"\"off\"",[79,33779,850],{"class":228},[79,33781,33782,33785,33788,33790,33793],{"class":81,"line":885},[79,33783,33784],{"class":228},"    plt.subplots_adjust(",[79,33786,33787],{"class":7284},"wspace",[79,33789,239],{"class":448},[79,33791,33792],{"class":96},"0.05",[79,33794,850],{"class":228},[79,33796,33797],{"class":81,"line":891},[79,33798,33799],{"class":228},"plt.show()\n",[19,33801,33802],{},"用matplotlib进行展示的过程可以后续再补",[19,33804,33805],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,33807,33808],{},"训练次数就是按照批次过整个训练集数据的次数",[19,33810,33811],{},"模型训练：",[51,33813,33815],{"className":439,"code":33814,"language":441,"meta":57,"style":57},"import copy\nimport time\n\nimport pandas as pd\nimport torch\nfrom torch.utils.data import Dataset\nfrom torchvision.datasets import FashionMNIST\nfrom torchvision import transforms\nimport torch.utils.data as Data\nimport matplotlib.pyplot as plt\n# 导入模型\nfrom model import LeNet\nfrom torch import nn\n\n\n# 处理训练集与验证集函数--->划分数据集\ndef train_val_data_process():\n    train_data=FashionMNIST('.\u002Fdata',\n                            train=True,\n                            transform=transforms.Compose([transforms.Resize(size=28),transforms.ToTensor()]),\n                            download=True)\n    train_data,val_data=Data.random_split(train_data,[round(0.8*len(train_data)),round(0.2*len(train_data))])\n    train_dataloader = Data.DataLoader(dataset=train_data,\n                                       batch_size=128,\n                                       shuffle=True,\n                                       # 规定8个进程\n                                       num_workers=8)\n    val_dataloader=Data.DataLoader(dataset=val_data,\n                                   batch_size=128,\n                                   shuffle=True,\n                                   num_workers=8)\n    return train_dataloader,val_dataloader\n\n# 验证是否出错\n# train_val_data_process()\n\n# 定义模型训练函数\ndef train_model_process(model,train_dataloader,val_dataloader,num_epochs):\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else 'cpu')\n\n\n    # 定义优化器\n    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n    # lr为学习率\n    optimizer=torch.optim.Adam(model.parameters(),lr=0.001)\n\n    # 定义损失函数使用交叉熵损失函数\n    criterion=nn.CrossEntropyLoss()\n\n    # 将模型放到GPU中进行训练\n    model=model.to(device)\n    # 复制当前模型的参数\n    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n    best_model_wts=copy.deepcopy(model.state_dict())\n\n\n    # 初始化参数\n    # 最高准确度\n    best_acc=0.0\n    # 训练集损失列表\n    train_loss_all=[]\n    # 验证集函数列表\n    val_loss_all=[]\n    # 训练集准确度列表\n    train_acc_all=[]\n    # 验证集准确度列表\n    val_acc_all=[]\n\n    # 保存当前时间--->方便看每轮训练的时间\n    since=time.time()\n\n\n    # 准备工作完成--->开始训练模型\n    for epoch in range(num_epochs):\n        print(\"Epoch {}\u002F{}\".format(epoch,num_epochs-1))\n        print(\"-\"*10)\n\n        # 初始化参数\n        # 训练集损失函数\n        train_loss=0.0\n        # 训练集准确度\n        train_corrects=0\n        # 验证集损失函数\n        val_loss=0.0\n        # 验证集准确度\n        val_corrects=0\n        # 训练集样本数量\n        train_num=0\n        # 验证集样本数量\n        val_num=0\n        # 将数据放到设备,并开始训练\n        for step,(b_x,b_y) in enumerate(train_dataloader):\n            # 将特征放入到训练设备\n            b_x=b_x.to(device)\n            # 将标签放入到训练设备当中\n            b_y=b_y.to(device)\n            # 设置模型为训练模式\n            model.train()\n            # 将数据放到模型当中,开始前向传播\n            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n            output=model(b_x)\n            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算每一个batch的损失函数\n            loss=criterion(output,b_y)\n            # 将梯度初始化为0\n            optimizer.zero_grad()\n            # 梯度置为0后再进行反向传播\n            loss.backward()\n            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n            optimizer.step()\n            # loss.item()指的是batch的平均损失\n            train_loss+=loss.item()*b_x.size(0)\n            # 计算每个批次中正确预测的数量\n            train_corrects+=torch.sum(pre_lab==b_y.data)\n            # 计算目前为止一共处理了多少样本\n            train_num+=b_x.size(0)\n        # 验证数据\n        for step ,(b_x,b_y) in enumerate(val_dataloader):\n            # 将特征放到验证设备当中\n            b_x=b_x.to(device)\n            # 将标签放到放到训练设备当中\n            b_y=b_y.to(device)\n            # 开启验证模式，设置模型为评估模式\n            model.eval()\n            with torch.no_grad():\n                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n                output = model(b_x)\n                # 查找每一行中最大值对应的下标\n                pre_lab = torch.argmax(output, dim=1)\n                # 计算验证集上的当前 batch 损失\n                val_batch_loss = criterion(output, b_y)\n                # 对损失函数进行累加（按样本数加权）\n                val_loss += val_batch_loss.item() * b_x.size(0)\n                val_corrects += torch.sum(pre_lab == b_y.data)\n                # 当前用于验证的样本数量\n            val_num += b_x.size(0)\n        # 计算并保存每一次迭代的loss值和准确率\n        # 计算并保存训练集的loss值\n        train_loss_all.append(train_loss\u002Ftrain_num)\n        # 取双精度\n        # 计算并保存训练集的准确率\n        train_acc_all.append(train_corrects.double().item()\u002Ftrain_num)\n        # 计算并保存验证集的loss值\n        val_loss_all.append(val_loss\u002Fval_num)\n        # 计算并保存验证集的准确率\n        val_acc_all.append(val_corrects.double().item()\u002Fval_num)\n\n        # 打印训练一轮的loss值和准确率\n        print('{}train loss:{:.4f} train acc:{:.4f}'.format(epoch,train_loss_all[-1],train_acc_all[-1]))\n        print('{}val loss:{:.4f} val acc:{:.4f}'.format(epoch,val_loss_all[-1],val_acc_all[-1]))\n\n        # 判断准确度--->保存最优模型\n        if val_acc_all[-1]>best_acc:\n            # 保存当前模型准确度\n            best_acc:float=val_acc_all[-1]\n            # 保存当前的准确度\n            # model.state_dict()是当前模型的所有参数（权重和偏置）\n            best_model_wts=copy.deepcopy(model.state_dict())\n\n        # 计算耗时\n        time_use=time.time()-since\n        print('训练和验证耗费的时间{:.0f}m{:.0f}s'.format(time_use\u002F\u002F60,time_use%60))\n    # 选择最优参数\n    # 加载最高准确率下的模型参数\n    # model.load_state_dict(best_model_wts)\n    torch.save(model.state_dict(best_model_wts), '.\u002Fbest_model.pth')\n    # 或者写成\n    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n    train_process=pd.DataFrame(data={\n        \"epoch\":range(num_epochs),\n        \"train_loss_all\":train_loss_all,\n        \"val_loss_all\":val_loss_all,\n        \"train_acc_all\":train_acc_all,\n        \"val_acc_all\":val_acc_all\n    })\n    # 返回训练保存的过程\n    return train_process\n\n# 将loss值和精度按照图片的形式展示出来\ndef matplot_acc_loss(train_process):\n    # 设置图的大小\n    plt.figure(figsize=(12,4))\n    # 设置图中有几张图\n    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n    # ①loss图\n    plt.subplot(1,2,1)\n    # 补充:\n    # plt.subplot(nrows, ncols, index)\n    # nrows：行数\n    # ncols：列数\n    # index：目前选中第几个子图（从1开始）\n    plt.plot(train_process[\"epoch\"],train_process.train_loss_all,'ro-',label='train loss')\n    plt.plot(train_process[\"epoch\"],train_process.val_loss_all,'bs--',label='val loss')\n    # 添加一个图例\n    plt.legend()\n    # 给轴添加标签\n    plt.xlabel('epoch')\n    plt.ylabel('loss')\n    # ②准确度图\n    plt.subplot(1,2,2)\n    plt.plot(train_process[\"epoch\"],train_process.train_acc_all,'ro-',label='train acc')\n    plt.plot(train_process[\"epoch\"],train_process.val_acc_all,'bs--',label='val acc')\n    # 添加图例\n    plt.legend()\n    plt.xlabel(\"epoch\")\n    plt.ylabel(\"acc\")\n    plt.show()\n\n# 正式开始训练:\nif __name__==\"__main__\":\n    # 将模型实例化\n    LeNet=LeNet()\n    train_dataloader,val_dataloader=train_val_data_process()\n    train_process=train_model_process(LeNet,train_dataloader,val_dataloader,num_epochs=20)\n    matplot_acc_loss(train_process)\n",[59,33816,33817,33824,33831,33835,33847,33853,33864,33874,33884,33894,33904,33909,33921,33931,33935,33939,33944,33954,33967,33978,33995,34006,34044,34060,34072,34083,34088,34099,34115,34126,34137,34148,34155,34159,34164,34169,34173,34178,34188,34209,34213,34217,34222,34227,34232,34252,34256,34261,34271,34275,34280,34289,34294,34299,34304,34314,34318,34322,34327,34332,34342,34347,34357,34362,34371,34376,34385,34390,34399,34403,34408,34418,34422,34426,34431,34445,34473,34488,34492,34497,34502,34511,34516,34525,34530,34539,34544,34553,34558,34567,34572,34581,34586,34599,34604,34614,34619,34629,34635,34641,34647,34653,34664,34670,34690,34696,34707,34713,34719,34725,34731,34737,34743,34749,34769,34775,34791,34797,34811,34817,34832,34838,34847,34853,34862,34868,34874,34883,34889,34900,34906,34925,34931,34942,34948,34968,34984,34990,35004,35010,35016,35027,35033,35039,35049,35055,35066,35072,35082,35087,35093,35142,35189,35194,35200,35219,35225,35244,35250,35256,35266,35271,35277,35293,35338,35344,35350,35356,35367,35373,35379,35385,35403,35417,35426,35435,35444,35453,35459,35465,35473,35478,35484,35495,35501,35521,35527,35533,35539,35556,35562,35568,35574,35580,35586,35613,35637,35643,35649,35655,35666,35677,35683,35700,35723,35746,35752,35757,35766,35776,35782,35787,35793,35806,35812,35823,35834,35853],{"__ignoreMap":57},[79,33818,33819,33821],{"class":81,"line":82},[79,33820,520],{"class":448},[79,33822,33823],{"class":228}," copy\n",[79,33825,33826,33828],{"class":81,"line":167},[79,33827,520],{"class":448},[79,33829,33830],{"class":228}," time\n",[79,33832,33833],{"class":81,"line":178},[79,33834,542],{"emptyLinePlaceholder":541},[79,33836,33837,33839,33842,33844],{"class":81,"line":545},[79,33838,520],{"class":448},[79,33840,33841],{"class":228}," pandas ",[79,33843,533],{"class":448},[79,33845,33846],{"class":228}," pd\n",[79,33848,33849,33851],{"class":81,"line":550},[79,33850,520],{"class":448},[79,33852,32405],{"class":228},[79,33854,33855,33857,33859,33861],{"class":81,"line":562},[79,33856,32745],{"class":448},[79,33858,33417],{"class":228},[79,33860,520],{"class":448},[79,33862,33863],{"class":228}," Dataset\n",[79,33865,33866,33868,33870,33872],{"class":81,"line":568},[79,33867,32745],{"class":448},[79,33869,33373],{"class":228},[79,33871,520],{"class":448},[79,33873,33378],{"class":228},[79,33875,33876,33878,33880,33882],{"class":81,"line":574},[79,33877,32745],{"class":448},[79,33879,33400],{"class":228},[79,33881,520],{"class":448},[79,33883,33405],{"class":228},[79,33885,33886,33888,33890,33892],{"class":81,"line":579},[79,33887,520],{"class":448},[79,33889,33417],{"class":228},[79,33891,533],{"class":448},[79,33893,33422],{"class":228},[79,33895,33896,33898,33900,33902],{"class":81,"line":585},[79,33897,520],{"class":448},[79,33899,33434],{"class":228},[79,33901,533],{"class":448},[79,33903,33439],{"class":228},[79,33905,33906],{"class":81,"line":591},[79,33907,33908],{"class":2313},"# 导入模型\n",[79,33910,33911,33913,33916,33918],{"class":81,"line":596},[79,33912,32745],{"class":448},[79,33914,33915],{"class":228}," model ",[79,33917,520],{"class":448},[79,33919,33920],{"class":228}," LeNet\n",[79,33922,33923,33925,33927,33929],{"class":81,"line":602},[79,33924,32745],{"class":448},[79,33926,32748],{"class":228},[79,33928,520],{"class":448},[79,33930,32753],{"class":228},[79,33932,33933],{"class":81,"line":608},[79,33934,542],{"emptyLinePlaceholder":541},[79,33936,33937],{"class":81,"line":614},[79,33938,542],{"emptyLinePlaceholder":541},[79,33940,33941],{"class":81,"line":619},[79,33942,33943],{"class":2313},"# 处理训练集与验证集函数--->划分数据集\n",[79,33945,33946,33948,33951],{"class":81,"line":625},[79,33947,703],{"class":448},[79,33949,33950],{"class":85}," train_val_data_process",[79,33952,33953],{"class":228},"():\n",[79,33955,33956,33959,33961,33963,33965],{"class":81,"line":631},[79,33957,33958],{"class":228},"    train_data",[79,33960,239],{"class":448},[79,33962,33457],{"class":228},[79,33964,33465],{"class":89},[79,33966,33468],{"class":228},[79,33968,33969,33972,33974,33976],{"class":81,"line":637},[79,33970,33971],{"class":7284},"                            train",[79,33973,239],{"class":448},[79,33975,33478],{"class":96},[79,33977,33468],{"class":228},[79,33979,33980,33983,33985,33987,33989,33991,33993],{"class":81,"line":643},[79,33981,33982],{"class":7284},"                            transform",[79,33984,239],{"class":448},[79,33986,33495],{"class":228},[79,33988,33498],{"class":7284},[79,33990,239],{"class":448},[79,33992,3141],{"class":96},[79,33994,33506],{"class":228},[79,33996,33997,34000,34002,34004],{"class":81,"line":649},[79,33998,33999],{"class":7284},"                            download",[79,34001,239],{"class":448},[79,34003,33478],{"class":96},[79,34005,850],{"class":228},[79,34007,34008,34011,34013,34016,34018,34020,34023,34025,34027,34030,34032,34034,34037,34039,34041],{"class":81,"line":655},[79,34009,34010],{"class":228},"    train_data,val_data",[79,34012,239],{"class":448},[79,34014,34015],{"class":228},"Data.random_split(train_data,[",[79,34017,1138],{"class":96},[79,34019,455],{"class":228},[79,34021,34022],{"class":96},"0.8",[79,34024,473],{"class":448},[79,34026,9423],{"class":96},[79,34028,34029],{"class":228},"(train_data)),",[79,34031,1138],{"class":96},[79,34033,455],{"class":228},[79,34035,34036],{"class":96},"0.2",[79,34038,473],{"class":448},[79,34040,9423],{"class":96},[79,34042,34043],{"class":228},"(train_data))])\n",[79,34045,34046,34049,34051,34054,34056,34058],{"class":81,"line":660},[79,34047,34048],{"class":228},"    train_dataloader ",[79,34050,239],{"class":448},[79,34052,34053],{"class":228}," Data.DataLoader(",[79,34055,33539],{"class":7284},[79,34057,239],{"class":448},[79,34059,33544],{"class":228},[79,34061,34062,34065,34067,34070],{"class":81,"line":666},[79,34063,34064],{"class":7284},"                                       batch_size",[79,34066,239],{"class":448},[79,34068,34069],{"class":96},"128",[79,34071,33468],{"class":228},[79,34073,34074,34077,34079,34081],{"class":81,"line":672},[79,34075,34076],{"class":7284},"                                       shuffle",[79,34078,239],{"class":448},[79,34080,33478],{"class":96},[79,34082,33468],{"class":228},[79,34084,34085],{"class":81,"line":678},[79,34086,34087],{"class":2313},"                                       # 规定8个进程\n",[79,34089,34090,34093,34095,34097],{"class":81,"line":684},[79,34091,34092],{"class":7284},"                                       num_workers",[79,34094,239],{"class":448},[79,34096,2638],{"class":96},[79,34098,850],{"class":228},[79,34100,34101,34104,34106,34108,34110,34112],{"class":81,"line":690},[79,34102,34103],{"class":228},"    val_dataloader",[79,34105,239],{"class":448},[79,34107,33536],{"class":228},[79,34109,33539],{"class":7284},[79,34111,239],{"class":448},[79,34113,34114],{"class":228},"val_data,\n",[79,34116,34117,34120,34122,34124],{"class":81,"line":695},[79,34118,34119],{"class":7284},"                                   batch_size",[79,34121,239],{"class":448},[79,34123,34069],{"class":96},[79,34125,33468],{"class":228},[79,34127,34128,34131,34133,34135],{"class":81,"line":700},[79,34129,34130],{"class":7284},"                                   shuffle",[79,34132,239],{"class":448},[79,34134,33478],{"class":96},[79,34136,33468],{"class":228},[79,34138,34139,34142,34144,34146],{"class":81,"line":712},[79,34140,34141],{"class":7284},"                                   num_workers",[79,34143,239],{"class":448},[79,34145,2638],{"class":96},[79,34147,850],{"class":228},[79,34149,34150,34152],{"class":81,"line":721},[79,34151,715],{"class":448},[79,34153,34154],{"class":228}," train_dataloader,val_dataloader\n",[79,34156,34157],{"class":81,"line":726},[79,34158,542],{"emptyLinePlaceholder":541},[79,34160,34161],{"class":81,"line":731},[79,34162,34163],{"class":2313},"# 验证是否出错\n",[79,34165,34166],{"class":81,"line":748},[79,34167,34168],{"class":2313},"# train_val_data_process()\n",[79,34170,34171],{"class":81,"line":765},[79,34172,542],{"emptyLinePlaceholder":541},[79,34174,34175],{"class":81,"line":780},[79,34176,34177],{"class":2313},"# 定义模型训练函数\n",[79,34179,34180,34182,34185],{"class":81,"line":811},[79,34181,703],{"class":448},[79,34183,34184],{"class":85}," train_model_process",[79,34186,34187],{"class":228},"(model,train_dataloader,val_dataloader,num_epochs):\n",[79,34189,34190,34192,34194,34196,34198,34200,34202,34204,34207],{"class":81,"line":816},[79,34191,33243],{"class":228},[79,34193,239],{"class":448},[79,34195,32460],{"class":228},[79,34197,33250],{"class":89},[79,34199,3799],{"class":448},[79,34201,33255],{"class":228},[79,34203,3796],{"class":448},[79,34205,34206],{"class":89}," 'cpu'",[79,34208,850],{"class":228},[79,34210,34211],{"class":81,"line":821},[79,34212,542],{"emptyLinePlaceholder":541},[79,34214,34215],{"class":81,"line":837},[79,34216,542],{"emptyLinePlaceholder":541},[79,34218,34219],{"class":81,"line":853},[79,34220,34221],{"class":2313},"    # 定义优化器\n",[79,34223,34224],{"class":81,"line":864},[79,34225,34226],{"class":2313},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[79,34228,34229],{"class":81,"line":869},[79,34230,34231],{"class":2313},"    # lr为学习率\n",[79,34233,34234,34237,34239,34242,34245,34247,34250],{"class":81,"line":885},[79,34235,34236],{"class":228},"    optimizer",[79,34238,239],{"class":448},[79,34240,34241],{"class":228},"torch.optim.Adam(model.parameters(),",[79,34243,34244],{"class":7284},"lr",[79,34246,239],{"class":448},[79,34248,34249],{"class":96},"0.001",[79,34251,850],{"class":228},[79,34253,34254],{"class":81,"line":891},[79,34255,542],{"emptyLinePlaceholder":541},[79,34257,34258],{"class":81,"line":896},[79,34259,34260],{"class":2313},"    # 定义损失函数使用交叉熵损失函数\n",[79,34262,34263,34266,34268],{"class":81,"line":907},[79,34264,34265],{"class":228},"    criterion",[79,34267,239],{"class":448},[79,34269,34270],{"class":228},"nn.CrossEntropyLoss()\n",[79,34272,34273],{"class":81,"line":912},[79,34274,542],{"emptyLinePlaceholder":541},[79,34276,34277],{"class":81,"line":935},[79,34278,34279],{"class":2313},"    # 将模型放到GPU中进行训练\n",[79,34281,34282,34284,34286],{"class":81,"line":946},[79,34283,33295],{"class":228},[79,34285,239],{"class":448},[79,34287,34288],{"class":228},"model.to(device)\n",[79,34290,34291],{"class":81,"line":960},[79,34292,34293],{"class":2313},"    # 复制当前模型的参数\n",[79,34295,34296],{"class":81,"line":975},[79,34297,34298],{"class":2313},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[79,34300,34301],{"class":81,"line":980},[79,34302,34303],{"class":2313},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[79,34305,34306,34309,34311],{"class":81,"line":1006},[79,34307,34308],{"class":228},"    best_model_wts",[79,34310,239],{"class":448},[79,34312,34313],{"class":228},"copy.deepcopy(model.state_dict())\n",[79,34315,34316],{"class":81,"line":1027},[79,34317,542],{"emptyLinePlaceholder":541},[79,34319,34320],{"class":81,"line":1032},[79,34321,542],{"emptyLinePlaceholder":541},[79,34323,34324],{"class":81,"line":1047},[79,34325,34326],{"class":2313},"    # 初始化参数\n",[79,34328,34329],{"class":81,"line":1053},[79,34330,34331],{"class":2313},"    # 最高准确度\n",[79,34333,34334,34337,34339],{"class":81,"line":1058},[79,34335,34336],{"class":228},"    best_acc",[79,34338,239],{"class":448},[79,34340,34341],{"class":96},"0.0\n",[79,34343,34344],{"class":81,"line":1069},[79,34345,34346],{"class":2313},"    # 训练集损失列表\n",[79,34348,34349,34352,34354],{"class":81,"line":1081},[79,34350,34351],{"class":228},"    train_loss_all",[79,34353,239],{"class":448},[79,34355,34356],{"class":228},"[]\n",[79,34358,34359],{"class":81,"line":1086},[79,34360,34361],{"class":2313},"    # 验证集函数列表\n",[79,34363,34364,34367,34369],{"class":81,"line":1108},[79,34365,34366],{"class":228},"    val_loss_all",[79,34368,239],{"class":448},[79,34370,34356],{"class":228},[79,34372,34373],{"class":81,"line":1153},[79,34374,34375],{"class":2313},"    # 训练集准确度列表\n",[79,34377,34378,34381,34383],{"class":81,"line":1158},[79,34379,34380],{"class":228},"    train_acc_all",[79,34382,239],{"class":448},[79,34384,34356],{"class":228},[79,34386,34387],{"class":81,"line":1180},[79,34388,34389],{"class":2313},"    # 验证集准确度列表\n",[79,34391,34392,34395,34397],{"class":81,"line":1197},[79,34393,34394],{"class":228},"    val_acc_all",[79,34396,239],{"class":448},[79,34398,34356],{"class":228},[79,34400,34401],{"class":81,"line":1202},[79,34402,542],{"emptyLinePlaceholder":541},[79,34404,34405],{"class":81,"line":1207},[79,34406,34407],{"class":2313},"    # 保存当前时间--->方便看每轮训练的时间\n",[79,34409,34410,34413,34415],{"class":81,"line":1223},[79,34411,34412],{"class":228},"    since",[79,34414,239],{"class":448},[79,34416,34417],{"class":228},"time.time()\n",[79,34419,34420],{"class":81,"line":18722},[79,34421,542],{"emptyLinePlaceholder":541},[79,34423,34424],{"class":81,"line":18728},[79,34425,542],{"emptyLinePlaceholder":541},[79,34427,34428],{"class":81,"line":18739},[79,34429,34430],{"class":2313},"    # 准备工作完成--->开始训练模型\n",[79,34432,34433,34435,34438,34440,34442],{"class":81,"line":18762},[79,34434,915],{"class":448},[79,34436,34437],{"class":228}," epoch ",[79,34439,921],{"class":448},[79,34441,924],{"class":96},[79,34443,34444],{"class":228},"(num_epochs):\n",[79,34446,34447,34450,34452,34455,34458,34460,34462,34464,34467,34469,34471],{"class":81,"line":18784},[79,34448,34449],{"class":96},"        print",[79,34451,455],{"class":228},[79,34453,34454],{"class":89},"\"Epoch ",[79,34456,34457],{"class":96},"{}",[79,34459,2824],{"class":89},[79,34461,34457],{"class":96},[79,34463,2495],{"class":89},[79,34465,34466],{"class":228},".format(epoch,num_epochs",[79,34468,478],{"class":448},[79,34470,775],{"class":96},[79,34472,1150],{"class":228},[79,34474,34475,34477,34479,34482,34484,34486],{"class":81,"line":18789},[79,34476,34449],{"class":96},[79,34478,455],{"class":228},[79,34480,34481],{"class":89},"\"-\"",[79,34483,473],{"class":448},[79,34485,2689],{"class":96},[79,34487,850],{"class":228},[79,34489,34490],{"class":81,"line":18795},[79,34491,542],{"emptyLinePlaceholder":541},[79,34493,34494],{"class":81,"line":18809},[79,34495,34496],{"class":2313},"        # 初始化参数\n",[79,34498,34499],{"class":81,"line":18822},[79,34500,34501],{"class":2313},"        # 训练集损失函数\n",[79,34503,34504,34507,34509],{"class":81,"line":18827},[79,34505,34506],{"class":228},"        train_loss",[79,34508,239],{"class":448},[79,34510,34341],{"class":96},[79,34512,34513],{"class":81,"line":18841},[79,34514,34515],{"class":2313},"        # 训练集准确度\n",[79,34517,34518,34521,34523],{"class":81,"line":18846},[79,34519,34520],{"class":228},"        train_corrects",[79,34522,239],{"class":448},[79,34524,5160],{"class":96},[79,34526,34527],{"class":81,"line":18852},[79,34528,34529],{"class":2313},"        # 验证集损失函数\n",[79,34531,34532,34535,34537],{"class":81,"line":18857},[79,34533,34534],{"class":228},"        val_loss",[79,34536,239],{"class":448},[79,34538,34341],{"class":96},[79,34540,34541],{"class":81,"line":18871},[79,34542,34543],{"class":2313},"        # 验证集准确度\n",[79,34545,34546,34549,34551],{"class":81,"line":18876},[79,34547,34548],{"class":228},"        val_corrects",[79,34550,239],{"class":448},[79,34552,5160],{"class":96},[79,34554,34555],{"class":81,"line":18881},[79,34556,34557],{"class":2313},"        # 训练集样本数量\n",[79,34559,34560,34563,34565],{"class":81,"line":18895},[79,34561,34562],{"class":228},"        train_num",[79,34564,239],{"class":448},[79,34566,5160],{"class":96},[79,34568,34569],{"class":81,"line":18907},[79,34570,34571],{"class":2313},"        # 验证集样本数量\n",[79,34573,34574,34577,34579],{"class":81,"line":18912},[79,34575,34576],{"class":228},"        val_num",[79,34578,239],{"class":448},[79,34580,5160],{"class":96},[79,34582,34583],{"class":81,"line":18925},[79,34584,34585],{"class":2313},"        # 将数据放到设备,并开始训练\n",[79,34587,34588,34590,34592,34594,34596],{"class":81,"line":18930},[79,34589,5477],{"class":448},[79,34591,33603],{"class":228},[79,34593,921],{"class":448},[79,34595,33608],{"class":96},[79,34597,34598],{"class":228},"(train_dataloader):\n",[79,34600,34601],{"class":81,"line":18935},[79,34602,34603],{"class":2313},"            # 将特征放入到训练设备\n",[79,34605,34606,34609,34611],{"class":81,"line":18940},[79,34607,34608],{"class":228},"            b_x",[79,34610,239],{"class":448},[79,34612,34613],{"class":228},"b_x.to(device)\n",[79,34615,34616],{"class":81,"line":18953},[79,34617,34618],{"class":2313},"            # 将标签放入到训练设备当中\n",[79,34620,34621,34624,34626],{"class":81,"line":18958},[79,34622,34623],{"class":228},"            b_y",[79,34625,239],{"class":448},[79,34627,34628],{"class":228},"b_y.to(device)\n",[79,34630,34632],{"class":81,"line":34631},98,[79,34633,34634],{"class":2313},"            # 设置模型为训练模式\n",[79,34636,34638],{"class":81,"line":34637},99,[79,34639,34640],{"class":228},"            model.train()\n",[79,34642,34644],{"class":81,"line":34643},100,[79,34645,34646],{"class":2313},"            # 将数据放到模型当中,开始前向传播\n",[79,34648,34650],{"class":81,"line":34649},101,[79,34651,34652],{"class":2313},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[79,34654,34656,34659,34661],{"class":81,"line":34655},102,[79,34657,34658],{"class":228},"            output",[79,34660,239],{"class":448},[79,34662,34663],{"class":228},"model(b_x)\n",[79,34665,34667],{"class":81,"line":34666},103,[79,34668,34669],{"class":2313},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[79,34671,34673,34676,34678,34681,34684,34686,34688],{"class":81,"line":34672},104,[79,34674,34675],{"class":228},"            pre_lab",[79,34677,239],{"class":448},[79,34679,34680],{"class":228},"torch.argmax(output,",[79,34682,34683],{"class":7284},"dim",[79,34685,239],{"class":448},[79,34687,775],{"class":96},[79,34689,850],{"class":228},[79,34691,34693],{"class":81,"line":34692},105,[79,34694,34695],{"class":2313},"            # 计算每一个batch的损失函数\n",[79,34697,34699,34702,34704],{"class":81,"line":34698},106,[79,34700,34701],{"class":228},"            loss",[79,34703,239],{"class":448},[79,34705,34706],{"class":228},"criterion(output,b_y)\n",[79,34708,34710],{"class":81,"line":34709},107,[79,34711,34712],{"class":2313},"            # 将梯度初始化为0\n",[79,34714,34716],{"class":81,"line":34715},108,[79,34717,34718],{"class":228},"            optimizer.zero_grad()\n",[79,34720,34722],{"class":81,"line":34721},109,[79,34723,34724],{"class":2313},"            # 梯度置为0后再进行反向传播\n",[79,34726,34728],{"class":81,"line":34727},110,[79,34729,34730],{"class":228},"            loss.backward()\n",[79,34732,34734],{"class":81,"line":34733},111,[79,34735,34736],{"class":2313},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[79,34738,34740],{"class":81,"line":34739},112,[79,34741,34742],{"class":228},"            optimizer.step()\n",[79,34744,34746],{"class":81,"line":34745},113,[79,34747,34748],{"class":2313},"            # loss.item()指的是batch的平均损失\n",[79,34750,34752,34755,34757,34760,34762,34765,34767],{"class":81,"line":34751},114,[79,34753,34754],{"class":228},"            train_loss",[79,34756,1075],{"class":448},[79,34758,34759],{"class":228},"loss.item()",[79,34761,473],{"class":448},[79,34763,34764],{"class":228},"b_x.size(",[79,34766,759],{"class":96},[79,34768,850],{"class":228},[79,34770,34772],{"class":81,"line":34771},115,[79,34773,34774],{"class":2313},"            # 计算每个批次中正确预测的数量\n",[79,34776,34778,34781,34783,34786,34788],{"class":81,"line":34777},116,[79,34779,34780],{"class":228},"            train_corrects",[79,34782,1075],{"class":448},[79,34784,34785],{"class":228},"torch.sum(pre_lab",[79,34787,5025],{"class":448},[79,34789,34790],{"class":228},"b_y.data)\n",[79,34792,34794],{"class":81,"line":34793},117,[79,34795,34796],{"class":2313},"            # 计算目前为止一共处理了多少样本\n",[79,34798,34800,34803,34805,34807,34809],{"class":81,"line":34799},118,[79,34801,34802],{"class":228},"            train_num",[79,34804,1075],{"class":448},[79,34806,34764],{"class":228},[79,34808,759],{"class":96},[79,34810,850],{"class":228},[79,34812,34814],{"class":81,"line":34813},119,[79,34815,34816],{"class":2313},"        # 验证数据\n",[79,34818,34820,34822,34825,34827,34829],{"class":81,"line":34819},120,[79,34821,5477],{"class":448},[79,34823,34824],{"class":228}," step ,(b_x,b_y) ",[79,34826,921],{"class":448},[79,34828,33608],{"class":96},[79,34830,34831],{"class":228},"(val_dataloader):\n",[79,34833,34835],{"class":81,"line":34834},121,[79,34836,34837],{"class":2313},"            # 将特征放到验证设备当中\n",[79,34839,34841,34843,34845],{"class":81,"line":34840},122,[79,34842,34608],{"class":228},[79,34844,239],{"class":448},[79,34846,34613],{"class":228},[79,34848,34850],{"class":81,"line":34849},123,[79,34851,34852],{"class":2313},"            # 将标签放到放到训练设备当中\n",[79,34854,34856,34858,34860],{"class":81,"line":34855},124,[79,34857,34623],{"class":228},[79,34859,239],{"class":448},[79,34861,34628],{"class":228},[79,34863,34865],{"class":81,"line":34864},125,[79,34866,34867],{"class":2313},"            # 开启验证模式，设置模型为评估模式\n",[79,34869,34871],{"class":81,"line":34870},126,[79,34872,34873],{"class":228},"            model.eval()\n",[79,34875,34877,34880],{"class":81,"line":34876},127,[79,34878,34879],{"class":448},"            with",[79,34881,34882],{"class":228}," torch.no_grad():\n",[79,34884,34886],{"class":81,"line":34885},128,[79,34887,34888],{"class":2313},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[79,34890,34892,34895,34897],{"class":81,"line":34891},129,[79,34893,34894],{"class":228},"                output ",[79,34896,239],{"class":448},[79,34898,34899],{"class":228}," model(b_x)\n",[79,34901,34903],{"class":81,"line":34902},130,[79,34904,34905],{"class":2313},"                # 查找每一行中最大值对应的下标\n",[79,34907,34909,34912,34914,34917,34919,34921,34923],{"class":81,"line":34908},131,[79,34910,34911],{"class":228},"                pre_lab ",[79,34913,239],{"class":448},[79,34915,34916],{"class":228}," torch.argmax(output, ",[79,34918,34683],{"class":7284},[79,34920,239],{"class":448},[79,34922,775],{"class":96},[79,34924,850],{"class":228},[79,34926,34928],{"class":81,"line":34927},132,[79,34929,34930],{"class":2313},"                # 计算验证集上的当前 batch 损失\n",[79,34932,34934,34937,34939],{"class":81,"line":34933},133,[79,34935,34936],{"class":228},"                val_batch_loss ",[79,34938,239],{"class":448},[79,34940,34941],{"class":228}," criterion(output, b_y)\n",[79,34943,34945],{"class":81,"line":34944},134,[79,34946,34947],{"class":2313},"                # 对损失函数进行累加（按样本数加权）\n",[79,34949,34951,34954,34956,34959,34961,34964,34966],{"class":81,"line":34950},135,[79,34952,34953],{"class":228},"                val_loss ",[79,34955,1075],{"class":448},[79,34957,34958],{"class":228}," val_batch_loss.item() ",[79,34960,473],{"class":448},[79,34962,34963],{"class":228}," b_x.size(",[79,34965,759],{"class":96},[79,34967,850],{"class":228},[79,34969,34971,34974,34976,34979,34981],{"class":81,"line":34970},136,[79,34972,34973],{"class":228},"                val_corrects ",[79,34975,1075],{"class":448},[79,34977,34978],{"class":228}," torch.sum(pre_lab ",[79,34980,5025],{"class":448},[79,34982,34983],{"class":228}," b_y.data)\n",[79,34985,34987],{"class":81,"line":34986},137,[79,34988,34989],{"class":2313},"                # 当前用于验证的样本数量\n",[79,34991,34993,34996,34998,35000,35002],{"class":81,"line":34992},138,[79,34994,34995],{"class":228},"            val_num ",[79,34997,1075],{"class":448},[79,34999,34963],{"class":228},[79,35001,759],{"class":96},[79,35003,850],{"class":228},[79,35005,35007],{"class":81,"line":35006},139,[79,35008,35009],{"class":2313},"        # 计算并保存每一次迭代的loss值和准确率\n",[79,35011,35013],{"class":81,"line":35012},140,[79,35014,35015],{"class":2313},"        # 计算并保存训练集的loss值\n",[79,35017,35019,35022,35024],{"class":81,"line":35018},141,[79,35020,35021],{"class":228},"        train_loss_all.append(train_loss",[79,35023,2824],{"class":448},[79,35025,35026],{"class":228},"train_num)\n",[79,35028,35030],{"class":81,"line":35029},142,[79,35031,35032],{"class":2313},"        # 取双精度\n",[79,35034,35036],{"class":81,"line":35035},143,[79,35037,35038],{"class":2313},"        # 计算并保存训练集的准确率\n",[79,35040,35042,35045,35047],{"class":81,"line":35041},144,[79,35043,35044],{"class":228},"        train_acc_all.append(train_corrects.double().item()",[79,35046,2824],{"class":448},[79,35048,35026],{"class":228},[79,35050,35052],{"class":81,"line":35051},145,[79,35053,35054],{"class":2313},"        # 计算并保存验证集的loss值\n",[79,35056,35058,35061,35063],{"class":81,"line":35057},146,[79,35059,35060],{"class":228},"        val_loss_all.append(val_loss",[79,35062,2824],{"class":448},[79,35064,35065],{"class":228},"val_num)\n",[79,35067,35069],{"class":81,"line":35068},147,[79,35070,35071],{"class":2313},"        # 计算并保存验证集的准确率\n",[79,35073,35075,35078,35080],{"class":81,"line":35074},148,[79,35076,35077],{"class":228},"        val_acc_all.append(val_corrects.double().item()",[79,35079,2824],{"class":448},[79,35081,35065],{"class":228},[79,35083,35085],{"class":81,"line":35084},149,[79,35086,542],{"emptyLinePlaceholder":541},[79,35088,35090],{"class":81,"line":35089},150,[79,35091,35092],{"class":2313},"        # 打印训练一轮的loss值和准确率\n",[79,35094,35096,35098,35100,35102,35104,35107,35109,35112,35114,35117,35119,35121,35123,35125,35128,35130,35132,35135,35137,35139],{"class":81,"line":35095},151,[79,35097,34449],{"class":96},[79,35099,455],{"class":228},[79,35101,5666],{"class":89},[79,35103,34457],{"class":96},[79,35105,35106],{"class":89},"train loss:",[79,35108,3136],{"class":96},[79,35110,35111],{"class":448},":.4f",[79,35113,3185],{"class":96},[79,35115,35116],{"class":89}," train acc:",[79,35118,3136],{"class":96},[79,35120,35111],{"class":448},[79,35122,3185],{"class":96},[79,35124,5666],{"class":89},[79,35126,35127],{"class":228},".format(epoch,train_loss_all[",[79,35129,478],{"class":448},[79,35131,775],{"class":96},[79,35133,35134],{"class":228},"],train_acc_all[",[79,35136,478],{"class":448},[79,35138,775],{"class":96},[79,35140,35141],{"class":228},"]))\n",[79,35143,35145,35147,35149,35151,35153,35156,35158,35160,35162,35165,35167,35169,35171,35173,35176,35178,35180,35183,35185,35187],{"class":81,"line":35144},152,[79,35146,34449],{"class":96},[79,35148,455],{"class":228},[79,35150,5666],{"class":89},[79,35152,34457],{"class":96},[79,35154,35155],{"class":89},"val loss:",[79,35157,3136],{"class":96},[79,35159,35111],{"class":448},[79,35161,3185],{"class":96},[79,35163,35164],{"class":89}," val acc:",[79,35166,3136],{"class":96},[79,35168,35111],{"class":448},[79,35170,3185],{"class":96},[79,35172,5666],{"class":89},[79,35174,35175],{"class":228},".format(epoch,val_loss_all[",[79,35177,478],{"class":448},[79,35179,775],{"class":96},[79,35181,35182],{"class":228},"],val_acc_all[",[79,35184,478],{"class":448},[79,35186,775],{"class":96},[79,35188,35141],{"class":228},[79,35190,35192],{"class":81,"line":35191},153,[79,35193,542],{"emptyLinePlaceholder":541},[79,35195,35197],{"class":81,"line":35196},154,[79,35198,35199],{"class":2313},"        # 判断准确度--->保存最优模型\n",[79,35201,35203,35205,35208,35210,35212,35214,35216],{"class":81,"line":35202},155,[79,35204,1089],{"class":448},[79,35206,35207],{"class":228}," val_acc_all[",[79,35209,478],{"class":448},[79,35211,775],{"class":96},[79,35213,3179],{"class":228},[79,35215,3199],{"class":448},[79,35217,35218],{"class":228},"best_acc:\n",[79,35220,35222],{"class":81,"line":35221},156,[79,35223,35224],{"class":2313},"            # 保存当前模型准确度\n",[79,35226,35228,35231,35233,35235,35238,35240,35242],{"class":81,"line":35227},157,[79,35229,35230],{"class":228},"            best_acc:",[79,35232,742],{"class":96},[79,35234,239],{"class":448},[79,35236,35237],{"class":228},"val_acc_all[",[79,35239,478],{"class":448},[79,35241,775],{"class":96},[79,35243,762],{"class":228},[79,35245,35247],{"class":81,"line":35246},158,[79,35248,35249],{"class":2313},"            # 保存当前的准确度\n",[79,35251,35253],{"class":81,"line":35252},159,[79,35254,35255],{"class":2313},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[79,35257,35259,35262,35264],{"class":81,"line":35258},160,[79,35260,35261],{"class":228},"            best_model_wts",[79,35263,239],{"class":448},[79,35265,34313],{"class":228},[79,35267,35269],{"class":81,"line":35268},161,[79,35270,542],{"emptyLinePlaceholder":541},[79,35272,35274],{"class":81,"line":35273},162,[79,35275,35276],{"class":2313},"        # 计算耗时\n",[79,35278,35280,35283,35285,35288,35290],{"class":81,"line":35279},163,[79,35281,35282],{"class":228},"        time_use",[79,35284,239],{"class":448},[79,35286,35287],{"class":228},"time.time()",[79,35289,478],{"class":448},[79,35291,35292],{"class":228},"since\n",[79,35294,35296,35298,35300,35303,35305,35308,35310,35312,35314,35316,35318,35321,35324,35327,35329,35332,35334,35336],{"class":81,"line":35295},164,[79,35297,34449],{"class":96},[79,35299,455],{"class":228},[79,35301,35302],{"class":89},"'训练和验证耗费的时间",[79,35304,3136],{"class":96},[79,35306,35307],{"class":448},":.0f",[79,35309,3185],{"class":96},[79,35311,2784],{"class":89},[79,35313,3136],{"class":96},[79,35315,35307],{"class":448},[79,35317,3185],{"class":96},[79,35319,35320],{"class":89},"s'",[79,35322,35323],{"class":228},".format(time_use",[79,35325,35326],{"class":448},"\u002F\u002F",[79,35328,3147],{"class":96},[79,35330,35331],{"class":228},",time_use",[79,35333,1094],{"class":448},[79,35335,3147],{"class":96},[79,35337,1150],{"class":228},[79,35339,35341],{"class":81,"line":35340},165,[79,35342,35343],{"class":2313},"    # 选择最优参数\n",[79,35345,35347],{"class":81,"line":35346},166,[79,35348,35349],{"class":2313},"    # 加载最高准确率下的模型参数\n",[79,35351,35353],{"class":81,"line":35352},167,[79,35354,35355],{"class":2313},"    # model.load_state_dict(best_model_wts)\n",[79,35357,35359,35362,35365],{"class":81,"line":35358},168,[79,35360,35361],{"class":228},"    torch.save(model.state_dict(best_model_wts), ",[79,35363,35364],{"class":89},"'.\u002Fbest_model.pth'",[79,35366,850],{"class":228},[79,35368,35370],{"class":81,"line":35369},169,[79,35371,35372],{"class":2313},"    # 或者写成\n",[79,35374,35376],{"class":81,"line":35375},170,[79,35377,35378],{"class":2313},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[79,35380,35382],{"class":81,"line":35381},171,[79,35383,35384],{"class":2313},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[79,35386,35388,35391,35393,35396,35399,35401],{"class":81,"line":35387},172,[79,35389,35390],{"class":228},"    train_process",[79,35392,239],{"class":448},[79,35394,35395],{"class":228},"pd.DataFrame(",[79,35397,35398],{"class":7284},"data",[79,35400,239],{"class":448},[79,35402,3652],{"class":228},[79,35404,35406,35409,35411,35414],{"class":81,"line":35405},173,[79,35407,35408],{"class":89},"        \"epoch\"",[79,35410,3099],{"class":228},[79,35412,35413],{"class":96},"range",[79,35415,35416],{"class":228},"(num_epochs),\n",[79,35418,35420,35423],{"class":81,"line":35419},174,[79,35421,35422],{"class":89},"        \"train_loss_all\"",[79,35424,35425],{"class":228},":train_loss_all,\n",[79,35427,35429,35432],{"class":81,"line":35428},175,[79,35430,35431],{"class":89},"        \"val_loss_all\"",[79,35433,35434],{"class":228},":val_loss_all,\n",[79,35436,35438,35441],{"class":81,"line":35437},176,[79,35439,35440],{"class":89},"        \"train_acc_all\"",[79,35442,35443],{"class":228},":train_acc_all,\n",[79,35445,35447,35450],{"class":81,"line":35446},177,[79,35448,35449],{"class":89},"        \"val_acc_all\"",[79,35451,35452],{"class":228},":val_acc_all\n",[79,35454,35456],{"class":81,"line":35455},178,[79,35457,35458],{"class":228},"    })\n",[79,35460,35462],{"class":81,"line":35461},179,[79,35463,35464],{"class":2313},"    # 返回训练保存的过程\n",[79,35466,35468,35470],{"class":81,"line":35467},180,[79,35469,715],{"class":448},[79,35471,35472],{"class":228}," train_process\n",[79,35474,35476],{"class":81,"line":35475},181,[79,35477,542],{"emptyLinePlaceholder":541},[79,35479,35481],{"class":81,"line":35480},182,[79,35482,35483],{"class":2313},"# 将loss值和精度按照图片的形式展示出来\n",[79,35485,35487,35489,35492],{"class":81,"line":35486},183,[79,35488,703],{"class":448},[79,35490,35491],{"class":85}," matplot_acc_loss",[79,35493,35494],{"class":228},"(train_process):\n",[79,35496,35498],{"class":81,"line":35497},184,[79,35499,35500],{"class":2313},"    # 设置图的大小\n",[79,35502,35504,35507,35509,35511,35513,35515,35517,35519],{"class":81,"line":35503},185,[79,35505,35506],{"class":228},"    plt.figure(",[79,35508,33694],{"class":7284},[79,35510,239],{"class":448},[79,35512,455],{"class":228},[79,35514,2739],{"class":96},[79,35516,2621],{"class":228},[79,35518,2537],{"class":96},[79,35520,1150],{"class":228},[79,35522,35524],{"class":81,"line":35523},186,[79,35525,35526],{"class":2313},"    # 设置图中有几张图\n",[79,35528,35530],{"class":81,"line":35529},187,[79,35531,35532],{"class":2313},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[79,35534,35536],{"class":81,"line":35535},188,[79,35537,35538],{"class":2313},"    # ①loss图\n",[79,35540,35542,35544,35546,35548,35550,35552,35554],{"class":81,"line":35541},189,[79,35543,33728],{"class":228},[79,35545,775],{"class":96},[79,35547,2621],{"class":228},[79,35549,2331],{"class":96},[79,35551,2621],{"class":228},[79,35553,775],{"class":96},[79,35555,850],{"class":228},[79,35557,35559],{"class":81,"line":35558},190,[79,35560,35561],{"class":2313},"    # 补充:\n",[79,35563,35565],{"class":81,"line":35564},191,[79,35566,35567],{"class":2313},"    # plt.subplot(nrows, ncols, index)\n",[79,35569,35571],{"class":81,"line":35570},192,[79,35572,35573],{"class":2313},"    # nrows：行数\n",[79,35575,35577],{"class":81,"line":35576},193,[79,35578,35579],{"class":2313},"    # ncols：列数\n",[79,35581,35583],{"class":81,"line":35582},194,[79,35584,35585],{"class":2313},"    # index：目前选中第几个子图（从1开始）\n",[79,35587,35589,35592,35595,35598,35601,35603,35606,35608,35611],{"class":81,"line":35588},195,[79,35590,35591],{"class":228},"    plt.plot(train_process[",[79,35593,35594],{"class":89},"\"epoch\"",[79,35596,35597],{"class":228},"],train_process.train_loss_all,",[79,35599,35600],{"class":89},"'ro-'",[79,35602,2621],{"class":228},[79,35604,35605],{"class":7284},"label",[79,35607,239],{"class":448},[79,35609,35610],{"class":89},"'train loss'",[79,35612,850],{"class":228},[79,35614,35616,35618,35620,35623,35626,35628,35630,35632,35635],{"class":81,"line":35615},196,[79,35617,35591],{"class":228},[79,35619,35594],{"class":89},[79,35621,35622],{"class":228},"],train_process.val_loss_all,",[79,35624,35625],{"class":89},"'bs--'",[79,35627,2621],{"class":228},[79,35629,35605],{"class":7284},[79,35631,239],{"class":448},[79,35633,35634],{"class":89},"'val loss'",[79,35636,850],{"class":228},[79,35638,35640],{"class":81,"line":35639},197,[79,35641,35642],{"class":2313},"    # 添加一个图例\n",[79,35644,35646],{"class":81,"line":35645},198,[79,35647,35648],{"class":228},"    plt.legend()\n",[79,35650,35652],{"class":81,"line":35651},199,[79,35653,35654],{"class":2313},"    # 给轴添加标签\n",[79,35656,35658,35661,35664],{"class":81,"line":35657},200,[79,35659,35660],{"class":228},"    plt.xlabel(",[79,35662,35663],{"class":89},"'epoch'",[79,35665,850],{"class":228},[79,35667,35669,35672,35675],{"class":81,"line":35668},201,[79,35670,35671],{"class":228},"    plt.ylabel(",[79,35673,35674],{"class":89},"'loss'",[79,35676,850],{"class":228},[79,35678,35680],{"class":81,"line":35679},202,[79,35681,35682],{"class":2313},"    # ②准确度图\n",[79,35684,35686,35688,35690,35692,35694,35696,35698],{"class":81,"line":35685},203,[79,35687,33728],{"class":228},[79,35689,775],{"class":96},[79,35691,2621],{"class":228},[79,35693,2331],{"class":96},[79,35695,2621],{"class":228},[79,35697,2331],{"class":96},[79,35699,850],{"class":228},[79,35701,35703,35705,35707,35710,35712,35714,35716,35718,35721],{"class":81,"line":35702},204,[79,35704,35591],{"class":228},[79,35706,35594],{"class":89},[79,35708,35709],{"class":228},"],train_process.train_acc_all,",[79,35711,35600],{"class":89},[79,35713,2621],{"class":228},[79,35715,35605],{"class":7284},[79,35717,239],{"class":448},[79,35719,35720],{"class":89},"'train acc'",[79,35722,850],{"class":228},[79,35724,35726,35728,35730,35733,35735,35737,35739,35741,35744],{"class":81,"line":35725},205,[79,35727,35591],{"class":228},[79,35729,35594],{"class":89},[79,35731,35732],{"class":228},"],train_process.val_acc_all,",[79,35734,35625],{"class":89},[79,35736,2621],{"class":228},[79,35738,35605],{"class":7284},[79,35740,239],{"class":448},[79,35742,35743],{"class":89},"'val acc'",[79,35745,850],{"class":228},[79,35747,35749],{"class":81,"line":35748},206,[79,35750,35751],{"class":2313},"    # 添加图例\n",[79,35753,35755],{"class":81,"line":35754},207,[79,35756,35648],{"class":228},[79,35758,35760,35762,35764],{"class":81,"line":35759},208,[79,35761,35660],{"class":228},[79,35763,35594],{"class":89},[79,35765,850],{"class":228},[79,35767,35769,35771,35774],{"class":81,"line":35768},209,[79,35770,35671],{"class":228},[79,35772,35773],{"class":89},"\"acc\"",[79,35775,850],{"class":228},[79,35777,35779],{"class":81,"line":35778},210,[79,35780,35781],{"class":228},"    plt.show()\n",[79,35783,35785],{"class":81,"line":35784},211,[79,35786,542],{"emptyLinePlaceholder":541},[79,35788,35790],{"class":81,"line":35789},212,[79,35791,35792],{"class":2313},"# 正式开始训练:\n",[79,35794,35796,35798,35800,35802,35804],{"class":81,"line":35795},213,[79,35797,1210],{"class":448},[79,35799,1213],{"class":96},[79,35801,5025],{"class":448},[79,35803,33231],{"class":89},[79,35805,745],{"class":228},[79,35807,35809],{"class":81,"line":35808},214,[79,35810,35811],{"class":2313},"    # 将模型实例化\n",[79,35813,35815,35818,35820],{"class":81,"line":35814},215,[79,35816,35817],{"class":228},"    LeNet",[79,35819,239],{"class":448},[79,35821,35822],{"class":228},"LeNet()\n",[79,35824,35826,35829,35831],{"class":81,"line":35825},216,[79,35827,35828],{"class":228},"    train_dataloader,val_dataloader",[79,35830,239],{"class":448},[79,35832,35833],{"class":228},"train_val_data_process()\n",[79,35835,35837,35839,35841,35844,35847,35849,35851],{"class":81,"line":35836},217,[79,35838,35390],{"class":228},[79,35840,239],{"class":448},[79,35842,35843],{"class":228},"train_model_process(LeNet,train_dataloader,val_dataloader,",[79,35845,35846],{"class":7284},"num_epochs",[79,35848,239],{"class":448},[79,35850,2940],{"class":96},[79,35852,850],{"class":228},[79,35854,35856],{"class":81,"line":35855},218,[79,35857,35858],{"class":228},"    matplot_acc_loss(train_process)\n",[19,35860,35861],{},"画图的补充点学习：",[19,35863,35864],{},[3569,35865],{"alt":57,"src":35866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-014.png",[26,35868,35869],{"start":178},[29,35870,35871],{},"测试",[51,35873,35875],{"className":439,"code":35874,"language":441,"meta":57,"style":57},"import torch\nimport torch.utils.data as Data\nfrom jupyter_client.consoleapp import classes\nfrom torchvision import transforms\n# 导入数据集\nfrom torchvision.datasets import FashionMNIST\nfrom model import LeNet\n\n# 测试数据处理\ndef test_data_process():\n    test_data=FashionMNIST(root='.\u002Fdata',\n                           train=False,\n                           transform=transforms.Compose([transforms.Resize(size=28),transforms.ToTensor()]),\n                           download=True)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=LeNet()\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['T-shirt\u002Ftop','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[59,35876,35877,35883,35893,35905,35915,35920,35930,35940,35944,35949,35958,35975,35987,36004,36015,36031,36036,36047,36058,36069,36076,36080,36085,36095,36100,36117,36125,36129,36134,36143,36152,36156,36161,36166,36171,36178,36183,36195,36205,36215,36220,36224,36229,36238,36243,36259,36264,36269,36274,36288,36293,36307,36311,36316,36331,36336,36348,36352,36357,36369,36374,36382,36387,36392,36402,36407,36416,36421,36426,36430,36435,36440,36456,36464,36469,36474,36533,36539,36544,36555,36563,36571,36575,36580,36584,36589,36597,36602,36618,36623,36633,36643],{"__ignoreMap":57},[79,35878,35879,35881],{"class":81,"line":82},[79,35880,520],{"class":448},[79,35882,32405],{"class":228},[79,35884,35885,35887,35889,35891],{"class":81,"line":167},[79,35886,520],{"class":448},[79,35888,33417],{"class":228},[79,35890,533],{"class":448},[79,35892,33422],{"class":228},[79,35894,35895,35897,35900,35902],{"class":81,"line":178},[79,35896,32745],{"class":448},[79,35898,35899],{"class":228}," jupyter_client.consoleapp ",[79,35901,520],{"class":448},[79,35903,35904],{"class":228}," classes\n",[79,35906,35907,35909,35911,35913],{"class":81,"line":545},[79,35908,32745],{"class":448},[79,35910,33400],{"class":228},[79,35912,520],{"class":448},[79,35914,33405],{"class":228},[79,35916,35917],{"class":81,"line":550},[79,35918,35919],{"class":2313},"# 导入数据集\n",[79,35921,35922,35924,35926,35928],{"class":81,"line":562},[79,35923,32745],{"class":448},[79,35925,33373],{"class":228},[79,35927,520],{"class":448},[79,35929,33378],{"class":228},[79,35931,35932,35934,35936,35938],{"class":81,"line":568},[79,35933,32745],{"class":448},[79,35935,33915],{"class":228},[79,35937,520],{"class":448},[79,35939,33920],{"class":228},[79,35941,35942],{"class":81,"line":574},[79,35943,542],{"emptyLinePlaceholder":541},[79,35945,35946],{"class":81,"line":579},[79,35947,35948],{"class":2313},"# 测试数据处理\n",[79,35950,35951,35953,35956],{"class":81,"line":585},[79,35952,703],{"class":448},[79,35954,35955],{"class":85}," test_data_process",[79,35957,33953],{"class":228},[79,35959,35960,35963,35965,35967,35969,35971,35973],{"class":81,"line":591},[79,35961,35962],{"class":228},"    test_data",[79,35964,239],{"class":448},[79,35966,33457],{"class":228},[79,35968,33460],{"class":7284},[79,35970,239],{"class":448},[79,35972,33465],{"class":89},[79,35974,33468],{"class":228},[79,35976,35977,35980,35982,35985],{"class":81,"line":596},[79,35978,35979],{"class":7284},"                           train",[79,35981,239],{"class":448},[79,35983,35984],{"class":96},"False",[79,35986,33468],{"class":228},[79,35988,35989,35992,35994,35996,35998,36000,36002],{"class":81,"line":602},[79,35990,35991],{"class":7284},"                           transform",[79,35993,239],{"class":448},[79,35995,33495],{"class":228},[79,35997,33498],{"class":7284},[79,35999,239],{"class":448},[79,36001,3141],{"class":96},[79,36003,33506],{"class":228},[79,36005,36006,36009,36011,36013],{"class":81,"line":608},[79,36007,36008],{"class":7284},"                           download",[79,36010,239],{"class":448},[79,36012,33478],{"class":96},[79,36014,850],{"class":228},[79,36016,36017,36020,36022,36024,36026,36028],{"class":81,"line":614},[79,36018,36019],{"class":228},"    test_dataloader",[79,36021,239],{"class":448},[79,36023,33536],{"class":228},[79,36025,33539],{"class":7284},[79,36027,239],{"class":448},[79,36029,36030],{"class":228},"test_data,\n",[79,36032,36033],{"class":81,"line":619},[79,36034,36035],{"class":2313},"                                    # 这里是一张一张进行测试\n",[79,36037,36038,36041,36043,36045],{"class":81,"line":625},[79,36039,36040],{"class":7284},"                                    batch_size",[79,36042,239],{"class":448},[79,36044,775],{"class":96},[79,36046,33468],{"class":228},[79,36048,36049,36052,36054,36056],{"class":81,"line":631},[79,36050,36051],{"class":7284},"                                    shuffle",[79,36053,239],{"class":448},[79,36055,33478],{"class":96},[79,36057,33468],{"class":228},[79,36059,36060,36063,36065,36067],{"class":81,"line":637},[79,36061,36062],{"class":7284},"                                    num_workers",[79,36064,239],{"class":448},[79,36066,759],{"class":96},[79,36068,850],{"class":228},[79,36070,36071,36073],{"class":81,"line":643},[79,36072,715],{"class":448},[79,36074,36075],{"class":228}," test_dataloader\n",[79,36077,36078],{"class":81,"line":649},[79,36079,542],{"emptyLinePlaceholder":541},[79,36081,36082],{"class":81,"line":655},[79,36083,36084],{"class":2313},"# 定义模型测试函数\n",[79,36086,36087,36089,36092],{"class":81,"line":660},[79,36088,703],{"class":448},[79,36090,36091],{"class":85}," test_model_process",[79,36093,36094],{"class":228},"(model,test_dataloader):\n",[79,36096,36097],{"class":81,"line":666},[79,36098,36099],{"class":2313},"    # 将模型放到设备当中，先进行判断\n",[79,36101,36102,36104,36106,36108,36110,36112,36114],{"class":81,"line":672},[79,36103,33243],{"class":228},[79,36105,239],{"class":448},[79,36107,33250],{"class":89},[79,36109,3799],{"class":448},[79,36111,33255],{"class":228},[79,36113,3796],{"class":448},[79,36115,36116],{"class":89}," \"cpu\"\n",[79,36118,36119,36121,36123],{"class":81,"line":678},[79,36120,33295],{"class":228},[79,36122,239],{"class":448},[79,36124,34288],{"class":228},[79,36126,36127],{"class":81,"line":684},[79,36128,542],{"emptyLinePlaceholder":541},[79,36130,36131],{"class":81,"line":690},[79,36132,36133],{"class":2313},"    # 设置初始化参数\n",[79,36135,36136,36139,36141],{"class":81,"line":695},[79,36137,36138],{"class":228},"    test_corrects",[79,36140,239],{"class":448},[79,36142,34341],{"class":96},[79,36144,36145,36148,36150],{"class":81,"line":700},[79,36146,36147],{"class":228},"    test_num",[79,36149,239],{"class":448},[79,36151,5160],{"class":96},[79,36153,36154],{"class":81,"line":712},[79,36155,542],{"emptyLinePlaceholder":541},[79,36157,36158],{"class":81,"line":721},[79,36159,36160],{"class":2313},"    # 进行模型测试\n",[79,36162,36163],{"class":81,"line":726},[79,36164,36165],{"class":2313},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[79,36167,36168],{"class":81,"line":731},[79,36169,36170],{"class":2313},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[79,36172,36173,36176],{"class":81,"line":748},[79,36174,36175],{"class":448},"    with",[79,36177,34882],{"class":228},[79,36179,36180],{"class":81,"line":765},[79,36181,36182],{"class":2313},"        # 从数据中进行\n",[79,36184,36185,36187,36190,36192],{"class":81,"line":780},[79,36186,5477],{"class":448},[79,36188,36189],{"class":228}," test_data_x,test_data_y ",[79,36191,921],{"class":448},[79,36193,36194],{"class":228}," test_dataloader:\n",[79,36196,36197,36200,36202],{"class":81,"line":811},[79,36198,36199],{"class":228},"            test_data_x",[79,36201,239],{"class":448},[79,36203,36204],{"class":228},"test_data_x.to(device)\n",[79,36206,36207,36210,36212],{"class":81,"line":816},[79,36208,36209],{"class":228},"            test_data_y",[79,36211,239],{"class":448},[79,36213,36214],{"class":228},"test_data_y.to(device)\n",[79,36216,36217],{"class":81,"line":821},[79,36218,36219],{"class":2313},"            # 设置为验证模式\n",[79,36221,36222],{"class":81,"line":837},[79,36223,34873],{"class":228},[79,36225,36226],{"class":81,"line":853},[79,36227,36228],{"class":2313},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[79,36230,36231,36233,36235],{"class":81,"line":864},[79,36232,34658],{"class":228},[79,36234,239],{"class":448},[79,36236,36237],{"class":228},"model(test_data_x)\n",[79,36239,36240],{"class":81,"line":869},[79,36241,36242],{"class":2313},"            # 查找每一行中最大值对应的下标\n",[79,36244,36245,36247,36249,36251,36253,36255,36257],{"class":81,"line":885},[79,36246,34675],{"class":228},[79,36248,239],{"class":448},[79,36250,34680],{"class":228},[79,36252,34683],{"class":7284},[79,36254,239],{"class":448},[79,36256,775],{"class":96},[79,36258,850],{"class":228},[79,36260,36261],{"class":81,"line":891},[79,36262,36263],{"class":2313},"            # 计算正确率\n",[79,36265,36266],{"class":81,"line":896},[79,36267,36268],{"class":2313},"            # .data表示是一个不带梯度信息的tensor\n",[79,36270,36271],{"class":81,"line":907},[79,36272,36273],{"class":2313},"            # 如果预测正确，则准确度test_corrects加1\n",[79,36275,36276,36279,36281,36283,36285],{"class":81,"line":912},[79,36277,36278],{"class":228},"            test_corrects",[79,36280,1075],{"class":448},[79,36282,34785],{"class":228},[79,36284,5025],{"class":448},[79,36286,36287],{"class":228},"test_data_y.data)\n",[79,36289,36290],{"class":81,"line":935},[79,36291,36292],{"class":2313},"            # 将所有的测试样本进行累计\n",[79,36294,36295,36298,36300,36303,36305],{"class":81,"line":946},[79,36296,36297],{"class":228},"            test_num",[79,36299,1075],{"class":448},[79,36301,36302],{"class":228},"test_data_x.size(",[79,36304,759],{"class":96},[79,36306,850],{"class":228},[79,36308,36309],{"class":81,"line":960},[79,36310,542],{"emptyLinePlaceholder":541},[79,36312,36313],{"class":81,"line":975},[79,36314,36315],{"class":2313},"        # 计算准确度\n",[79,36317,36318,36321,36323,36326,36328],{"class":81,"line":980},[79,36319,36320],{"class":228},"        test_acc",[79,36322,239],{"class":448},[79,36324,36325],{"class":228},"test_corrects.double().item()",[79,36327,2824],{"class":448},[79,36329,36330],{"class":228},"test_num\n",[79,36332,36333],{"class":81,"line":1006},[79,36334,36335],{"class":2313},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[79,36337,36338,36340,36342,36345],{"class":81,"line":1027},[79,36339,34449],{"class":96},[79,36341,455],{"class":228},[79,36343,36344],{"class":89},"\"测试的准确率：\"",[79,36346,36347],{"class":228},",test_acc)\n",[79,36349,36350],{"class":81,"line":1032},[79,36351,542],{"emptyLinePlaceholder":541},[79,36353,36354],{"class":81,"line":1047},[79,36355,36356],{"class":2313},"# 实现模型的测试功能\n",[79,36358,36359,36361,36363,36365,36367],{"class":81,"line":1053},[79,36360,1210],{"class":448},[79,36362,1213],{"class":96},[79,36364,5025],{"class":448},[79,36366,33231],{"class":89},[79,36368,745],{"class":228},[79,36370,36371],{"class":81,"line":1058},[79,36372,36373],{"class":2313},"    # 加载模型\n",[79,36375,36376,36378,36380],{"class":81,"line":1069},[79,36377,33295],{"class":228},[79,36379,239],{"class":448},[79,36381,35822],{"class":228},[79,36383,36384],{"class":81,"line":1081},[79,36385,36386],{"class":2313},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[79,36388,36389],{"class":81,"line":1086},[79,36390,36391],{"class":2313},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[79,36393,36394,36397,36400],{"class":81,"line":1108},[79,36395,36396],{"class":228},"    model.load_state_dict(torch.load(",[79,36398,36399],{"class":89},"'best_model.pth'",[79,36401,1150],{"class":228},[79,36403,36404],{"class":81,"line":1153},[79,36405,36406],{"class":2313},"    # 数据加载\n",[79,36408,36409,36411,36413],{"class":81,"line":1158},[79,36410,36019],{"class":228},[79,36412,239],{"class":448},[79,36414,36415],{"class":228},"test_data_process()\n",[79,36417,36418],{"class":81,"line":1180},[79,36419,36420],{"class":2313},"    # 加载模型测试的函数\n",[79,36422,36423],{"class":81,"line":1197},[79,36424,36425],{"class":228},"    test_model_process(model,test_dataloader)\n",[79,36427,36428],{"class":81,"line":1202},[79,36429,542],{"emptyLinePlaceholder":541},[79,36431,36432],{"class":81,"line":1207},[79,36433,36434],{"class":2313},"    # 验证集推理实现：\n",[79,36436,36437],{"class":81,"line":1223},[79,36438,36439],{"class":2313},"    # 加载数据加载的更详细一些\n",[79,36441,36442,36444,36446,36448,36450,36452,36454],{"class":81,"line":18722},[79,36443,33243],{"class":228},[79,36445,239],{"class":448},[79,36447,33250],{"class":89},[79,36449,3799],{"class":448},[79,36451,33255],{"class":228},[79,36453,3796],{"class":448},[79,36455,36116],{"class":89},[79,36457,36458,36460,36462],{"class":81,"line":18728},[79,36459,33295],{"class":228},[79,36461,239],{"class":448},[79,36463,34288],{"class":228},[79,36465,36466],{"class":81,"line":18739},[79,36467,36468],{"class":2313},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[79,36470,36471],{"class":81,"line":18762},[79,36472,36473],{"class":2313},"    # 顺序不可改变\n",[79,36475,36476,36479,36481,36483,36486,36488,36491,36493,36496,36498,36501,36503,36506,36508,36511,36513,36516,36518,36521,36523,36526,36528,36531],{"class":81,"line":18784},[79,36477,36478],{"class":228},"    classes",[79,36480,239],{"class":448},[79,36482,3130],{"class":228},[79,36484,36485],{"class":89},"'T-shirt\u002Ftop'",[79,36487,2621],{"class":228},[79,36489,36490],{"class":89},"'Trouser'",[79,36492,2621],{"class":228},[79,36494,36495],{"class":89},"'Pullover'",[79,36497,2621],{"class":228},[79,36499,36500],{"class":89},"'Dress'",[79,36502,2621],{"class":228},[79,36504,36505],{"class":89},"'Coat'",[79,36507,2621],{"class":228},[79,36509,36510],{"class":89},"'Sandal'",[79,36512,2621],{"class":228},[79,36514,36515],{"class":89},"'Shirt'",[79,36517,2621],{"class":228},[79,36519,36520],{"class":89},"'Sneaker'",[79,36522,2621],{"class":228},[79,36524,36525],{"class":89},"'Bag'",[79,36527,2621],{"class":228},[79,36529,36530],{"class":89},"'Ankle boot'",[79,36532,762],{"class":228},[79,36534,36535,36537],{"class":81,"line":18789},[79,36536,36175],{"class":448},[79,36538,34882],{"class":228},[79,36540,36541],{"class":81,"line":18795},[79,36542,36543],{"class":2313},"        # 将数据和标签都放到设备当中\n",[79,36545,36546,36548,36551,36553],{"class":81,"line":18809},[79,36547,5477],{"class":448},[79,36549,36550],{"class":228}," b_x,b_y ",[79,36552,921],{"class":448},[79,36554,36194],{"class":228},[79,36556,36557,36559,36561],{"class":81,"line":18822},[79,36558,34608],{"class":228},[79,36560,239],{"class":448},[79,36562,34613],{"class":228},[79,36564,36565,36567,36569],{"class":81,"line":18827},[79,36566,34623],{"class":228},[79,36568,239],{"class":448},[79,36570,34628],{"class":228},[79,36572,36573],{"class":81,"line":18841},[79,36574,542],{"emptyLinePlaceholder":541},[79,36576,36577],{"class":81,"line":18846},[79,36578,36579],{"class":2313},"            # 设置模型为验证模式\n",[79,36581,36582],{"class":81,"line":18852},[79,36583,34873],{"class":228},[79,36585,36586],{"class":81,"line":18857},[79,36587,36588],{"class":2313},"            # 模型推理结果\n",[79,36590,36591,36593,36595],{"class":81,"line":18871},[79,36592,34658],{"class":228},[79,36594,239],{"class":448},[79,36596,34663],{"class":228},[79,36598,36599],{"class":81,"line":18876},[79,36600,36601],{"class":2313},"            # 获取最大下标，最大下标就是类别号\n",[79,36603,36604,36606,36608,36610,36612,36614,36616],{"class":81,"line":18881},[79,36605,34675],{"class":228},[79,36607,239],{"class":448},[79,36609,34680],{"class":228},[79,36611,34683],{"class":7284},[79,36613,239],{"class":448},[79,36615,775],{"class":96},[79,36617,850],{"class":228},[79,36619,36620],{"class":81,"line":18895},[79,36621,36622],{"class":2313},"            # 取出张量中的数值\n",[79,36624,36625,36628,36630],{"class":81,"line":18907},[79,36626,36627],{"class":228},"            result",[79,36629,239],{"class":448},[79,36631,36632],{"class":228},"pre_lab.item()\n",[79,36634,36635,36638,36640],{"class":81,"line":18912},[79,36636,36637],{"class":228},"            label",[79,36639,239],{"class":448},[79,36641,36642],{"class":228},"b_y.item()\n",[79,36644,36645,36647,36649,36652,36655,36658,36660,36663],{"class":81,"line":18925},[79,36646,1111],{"class":96},[79,36648,455],{"class":228},[79,36650,36651],{"class":89},"\"预测值：\"",[79,36653,36654],{"class":228},",classes[result],",[79,36656,36657],{"class":89},"\"------\"",[79,36659,2621],{"class":228},[79,36661,36662],{"class":89},"\"真实值：\"",[79,36664,36665],{"class":228},",classes[label])\n",[19,36667,36668],{},"（2）AlexNet",[26,36670,36671],{},[29,36672,36673],{},"神经网络构建",[51,36675,36677],{"className":439,"code":36676,"language":441,"meta":57,"style":57},"import torch\nfrom torch import nn\nfrom torchsummary import summary\nimport torch.nn.functional as F\n\nclass AlexNet(nn.Module):\n    def __init__(self):\n        super(AlexNet,self).__init__()\n        self.ReLu=nn.ReLU()\n        self.c1=nn.Conv2d(in_channels=1,out_channels=96,kernel_size=11,stride=4)\n        self.s2=nn.MaxPool2d(kernel_size=3,stride=2)\n        self.c3=nn.Conv2d(in_channels=96,out_channels=256,kernel_size=5,padding=2)\n        self.s4=nn.MaxPool2d(kernel_size=3,stride=2)\n        self.c5=nn.Conv2d(in_channels=256,out_channels=384,kernel_size=3,padding=1)\n        self.c6=nn.Conv2d(in_channels=384,out_channels=384,kernel_size=3,padding=1)\n        self.c7=nn.Conv2d(in_channels=384,out_channels=256,kernel_size=3,padding=1)\n        self.s8=nn.MaxPool2d(kernel_size=3,stride=2)\n        # 定义平展层\n        self.flatten=nn.Flatten()\n       # 定义全连接层\n        self.f1=nn.Linear(6*6*256,4096)\n        self.f2=nn.Linear(4096,4096)\n        self.f3=nn.Linear(4096,10)\n\n    # 定义前向传播\n    def forward(self,x):\n        x=self.ReLu(self.c1(x))\n        x=self.s2(x)\n        x=self.ReLu(self.c3(x))\n        x=self.s4(x)\n        x=self.ReLu(self.c5(x))\n        x=self.ReLu(self.c6(x))\n        x=self.ReLu(self.c7(x))\n        x=self.s8(x)\n\n        # 展平加线性全连接层\n        x=self.flatten(x)\n        x=self.ReLu(self.f1(x))\n        # 还需要dropout对神经元随机进行失活\n        x=F.dropout(x,0.5)\n        x=self.ReLu(self.f2(x))\n        x=F.dropout(x,0.5)\n        # 直接输出\n        x=self.f3(x)\n        # 前向传播输出\n        return x\n# 定义主函数，用于测试神经网络是否可以正常工作\nif __name__==\"__main__\":\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    # 模型实例化，然后将实例化的模型放到设备中\n    model=AlexNet().to(device)\n    print(summary(model,(1,227,227)))\n",[59,36678,36679,36685,36695,36705,36717,36721,36738,36746,36761,36773,36815,36842,36885,36911,36955,36998,37041,37068,37072,37082,37087,37115,37134,37153,37157,37162,37170,37185,37195,37209,37219,37234,37249,37264,37275,37279,37284,37294,37309,37314,37327,37342,37354,37359,37370,37375,37381,37386,37398,37418,37423,37432],{"__ignoreMap":57},[79,36680,36681,36683],{"class":81,"line":82},[79,36682,520],{"class":448},[79,36684,32405],{"class":228},[79,36686,36687,36689,36691,36693],{"class":81,"line":167},[79,36688,32745],{"class":448},[79,36690,32748],{"class":228},[79,36692,520],{"class":448},[79,36694,32753],{"class":228},[79,36696,36697,36699,36701,36703],{"class":81,"line":178},[79,36698,32745],{"class":448},[79,36700,32765],{"class":228},[79,36702,520],{"class":448},[79,36704,32770],{"class":228},[79,36706,36707,36709,36712,36714],{"class":81,"line":545},[79,36708,520],{"class":448},[79,36710,36711],{"class":228}," torch.nn.functional ",[79,36713,533],{"class":448},[79,36715,36716],{"class":228}," F\n",[79,36718,36719],{"class":81,"line":550},[79,36720,542],{"emptyLinePlaceholder":541},[79,36722,36723,36725,36728,36730,36732,36734,36736],{"class":81,"line":562},[79,36724,16727],{"class":448},[79,36726,36727],{"class":85}," AlexNet",[79,36729,455],{"class":228},[79,36731,32786],{"class":85},[79,36733,2798],{"class":228},[79,36735,32791],{"class":85},[79,36737,932],{"class":228},[79,36739,36740,36742,36744],{"class":81,"line":568},[79,36741,32808],{"class":448},[79,36743,32811],{"class":96},[79,36745,32814],{"class":228},[79,36747,36748,36750,36753,36755,36757,36759],{"class":81,"line":574},[79,36749,32824],{"class":96},[79,36751,36752],{"class":228},"(AlexNet,",[79,36754,32830],{"class":96},[79,36756,32833],{"class":228},[79,36758,32836],{"class":96},[79,36760,4061],{"class":228},[79,36762,36763,36765,36768,36770],{"class":81,"line":579},[79,36764,32852],{"class":96},[79,36766,36767],{"class":228},".ReLu",[79,36769,239],{"class":448},[79,36771,36772],{"class":228},"nn.ReLU()\n",[79,36774,36775,36777,36779,36781,36783,36785,36787,36789,36791,36793,36795,36797,36799,36801,36803,36805,36807,36809,36811,36813],{"class":81,"line":585},[79,36776,32852],{"class":96},[79,36778,32855],{"class":228},[79,36780,239],{"class":448},[79,36782,32860],{"class":228},[79,36784,32863],{"class":7284},[79,36786,239],{"class":448},[79,36788,775],{"class":96},[79,36790,2621],{"class":228},[79,36792,32872],{"class":7284},[79,36794,239],{"class":448},[79,36796,2455],{"class":96},[79,36798,2621],{"class":228},[79,36800,32881],{"class":7284},[79,36802,239],{"class":448},[79,36804,2714],{"class":96},[79,36806,2621],{"class":228},[79,36808,32936],{"class":7284},[79,36810,239],{"class":448},[79,36812,2537],{"class":96},[79,36814,850],{"class":228},[79,36816,36817,36819,36821,36823,36826,36828,36830,36832,36834,36836,36838,36840],{"class":81,"line":591},[79,36818,32852],{"class":96},[79,36820,32920],{"class":228},[79,36822,239],{"class":448},[79,36824,36825],{"class":228},"nn.MaxPool2d(",[79,36827,32881],{"class":7284},[79,36829,239],{"class":448},[79,36831,970],{"class":96},[79,36833,2621],{"class":228},[79,36835,32936],{"class":7284},[79,36837,239],{"class":448},[79,36839,2331],{"class":96},[79,36841,850],{"class":228},[79,36843,36844,36846,36848,36850,36852,36854,36856,36858,36860,36862,36864,36867,36869,36871,36873,36875,36877,36879,36881,36883],{"class":81,"line":596},[79,36845,32852],{"class":96},[79,36847,32949],{"class":228},[79,36849,239],{"class":448},[79,36851,32860],{"class":228},[79,36853,32863],{"class":7284},[79,36855,239],{"class":448},[79,36857,2455],{"class":96},[79,36859,2621],{"class":228},[79,36861,32872],{"class":7284},[79,36863,239],{"class":448},[79,36865,36866],{"class":96},"256",[79,36868,2621],{"class":228},[79,36870,32881],{"class":7284},[79,36872,239],{"class":448},[79,36874,2563],{"class":96},[79,36876,2621],{"class":228},[79,36878,32890],{"class":7284},[79,36880,239],{"class":448},[79,36882,2331],{"class":96},[79,36884,850],{"class":228},[79,36886,36887,36889,36891,36893,36895,36897,36899,36901,36903,36905,36907,36909],{"class":81,"line":602},[79,36888,32852],{"class":96},[79,36890,32984],{"class":228},[79,36892,239],{"class":448},[79,36894,36825],{"class":228},[79,36896,32881],{"class":7284},[79,36898,239],{"class":448},[79,36900,970],{"class":96},[79,36902,2621],{"class":228},[79,36904,32936],{"class":7284},[79,36906,239],{"class":448},[79,36908,2331],{"class":96},[79,36910,850],{"class":228},[79,36912,36913,36915,36918,36920,36922,36924,36926,36928,36930,36932,36934,36937,36939,36941,36943,36945,36947,36949,36951,36953],{"class":81,"line":608},[79,36914,32852],{"class":96},[79,36916,36917],{"class":228},".c5",[79,36919,239],{"class":448},[79,36921,32860],{"class":228},[79,36923,32863],{"class":7284},[79,36925,239],{"class":448},[79,36927,36866],{"class":96},[79,36929,2621],{"class":228},[79,36931,32872],{"class":7284},[79,36933,239],{"class":448},[79,36935,36936],{"class":96},"384",[79,36938,2621],{"class":228},[79,36940,32881],{"class":7284},[79,36942,239],{"class":448},[79,36944,970],{"class":96},[79,36946,2621],{"class":228},[79,36948,32890],{"class":7284},[79,36950,239],{"class":448},[79,36952,775],{"class":96},[79,36954,850],{"class":228},[79,36956,36957,36959,36962,36964,36966,36968,36970,36972,36974,36976,36978,36980,36982,36984,36986,36988,36990,36992,36994,36996],{"class":81,"line":614},[79,36958,32852],{"class":96},[79,36960,36961],{"class":228},".c6",[79,36963,239],{"class":448},[79,36965,32860],{"class":228},[79,36967,32863],{"class":7284},[79,36969,239],{"class":448},[79,36971,36936],{"class":96},[79,36973,2621],{"class":228},[79,36975,32872],{"class":7284},[79,36977,239],{"class":448},[79,36979,36936],{"class":96},[79,36981,2621],{"class":228},[79,36983,32881],{"class":7284},[79,36985,239],{"class":448},[79,36987,970],{"class":96},[79,36989,2621],{"class":228},[79,36991,32890],{"class":7284},[79,36993,239],{"class":448},[79,36995,775],{"class":96},[79,36997,850],{"class":228},[79,36999,37000,37002,37005,37007,37009,37011,37013,37015,37017,37019,37021,37023,37025,37027,37029,37031,37033,37035,37037,37039],{"class":81,"line":619},[79,37001,32852],{"class":96},[79,37003,37004],{"class":228},".c7",[79,37006,239],{"class":448},[79,37008,32860],{"class":228},[79,37010,32863],{"class":7284},[79,37012,239],{"class":448},[79,37014,36936],{"class":96},[79,37016,2621],{"class":228},[79,37018,32872],{"class":7284},[79,37020,239],{"class":448},[79,37022,36866],{"class":96},[79,37024,2621],{"class":228},[79,37026,32881],{"class":7284},[79,37028,239],{"class":448},[79,37030,970],{"class":96},[79,37032,2621],{"class":228},[79,37034,32890],{"class":7284},[79,37036,239],{"class":448},[79,37038,775],{"class":96},[79,37040,850],{"class":228},[79,37042,37043,37045,37048,37050,37052,37054,37056,37058,37060,37062,37064,37066],{"class":81,"line":625},[79,37044,32852],{"class":96},[79,37046,37047],{"class":228},".s8",[79,37049,239],{"class":448},[79,37051,36825],{"class":228},[79,37053,32881],{"class":7284},[79,37055,239],{"class":448},[79,37057,970],{"class":96},[79,37059,2621],{"class":228},[79,37061,32936],{"class":7284},[79,37063,239],{"class":448},[79,37065,2331],{"class":96},[79,37067,850],{"class":228},[79,37069,37070],{"class":81,"line":631},[79,37071,33009],{"class":2313},[79,37073,37074,37076,37078,37080],{"class":81,"line":637},[79,37075,32852],{"class":96},[79,37077,33016],{"class":228},[79,37079,239],{"class":448},[79,37081,33021],{"class":228},[79,37083,37084],{"class":81,"line":643},[79,37085,37086],{"class":2313},"       # 定义全连接层\n",[79,37088,37089,37091,37094,37096,37098,37100,37102,37104,37106,37108,37110,37113],{"class":81,"line":649},[79,37090,32852],{"class":96},[79,37092,37093],{"class":228},".f1",[79,37095,239],{"class":448},[79,37097,33038],{"class":228},[79,37099,2587],{"class":96},[79,37101,473],{"class":448},[79,37103,2587],{"class":96},[79,37105,473],{"class":448},[79,37107,36866],{"class":96},[79,37109,2621],{"class":228},[79,37111,37112],{"class":96},"4096",[79,37114,850],{"class":228},[79,37116,37117,37119,37122,37124,37126,37128,37130,37132],{"class":81,"line":655},[79,37118,32852],{"class":96},[79,37120,37121],{"class":228},".f2",[79,37123,239],{"class":448},[79,37125,33038],{"class":228},[79,37127,37112],{"class":96},[79,37129,2621],{"class":228},[79,37131,37112],{"class":96},[79,37133,850],{"class":228},[79,37135,37136,37138,37141,37143,37145,37147,37149,37151],{"class":81,"line":660},[79,37137,32852],{"class":96},[79,37139,37140],{"class":228},".f3",[79,37142,239],{"class":448},[79,37144,33038],{"class":228},[79,37146,37112],{"class":96},[79,37148,2621],{"class":228},[79,37150,2689],{"class":96},[79,37152,850],{"class":228},[79,37154,37155],{"class":81,"line":666},[79,37156,542],{"emptyLinePlaceholder":541},[79,37158,37159],{"class":81,"line":672},[79,37160,37161],{"class":2313},"    # 定义前向传播\n",[79,37163,37164,37166,37168],{"class":81,"line":678},[79,37165,32808],{"class":448},[79,37167,33100],{"class":85},[79,37169,33103],{"class":228},[79,37171,37172,37174,37176,37178,37181,37183],{"class":81,"line":684},[79,37173,33108],{"class":228},[79,37175,239],{"class":448},[79,37177,32830],{"class":96},[79,37179,37180],{"class":228},".ReLu(",[79,37182,32830],{"class":96},[79,37184,33120],{"class":228},[79,37186,37187,37189,37191,37193],{"class":81,"line":690},[79,37188,33108],{"class":228},[79,37190,239],{"class":448},[79,37192,32830],{"class":96},[79,37194,33131],{"class":228},[79,37196,37197,37199,37201,37203,37205,37207],{"class":81,"line":695},[79,37198,33108],{"class":228},[79,37200,239],{"class":448},[79,37202,32830],{"class":96},[79,37204,37180],{"class":228},[79,37206,32830],{"class":96},[79,37208,33146],{"class":228},[79,37210,37211,37213,37215,37217],{"class":81,"line":700},[79,37212,33108],{"class":228},[79,37214,239],{"class":448},[79,37216,32830],{"class":96},[79,37218,33157],{"class":228},[79,37220,37221,37223,37225,37227,37229,37231],{"class":81,"line":712},[79,37222,33108],{"class":228},[79,37224,239],{"class":448},[79,37226,32830],{"class":96},[79,37228,37180],{"class":228},[79,37230,32830],{"class":96},[79,37232,37233],{"class":228},".c5(x))\n",[79,37235,37236,37238,37240,37242,37244,37246],{"class":81,"line":721},[79,37237,33108],{"class":228},[79,37239,239],{"class":448},[79,37241,32830],{"class":96},[79,37243,37180],{"class":228},[79,37245,32830],{"class":96},[79,37247,37248],{"class":228},".c6(x))\n",[79,37250,37251,37253,37255,37257,37259,37261],{"class":81,"line":726},[79,37252,33108],{"class":228},[79,37254,239],{"class":448},[79,37256,32830],{"class":96},[79,37258,37180],{"class":228},[79,37260,32830],{"class":96},[79,37262,37263],{"class":228},".c7(x))\n",[79,37265,37266,37268,37270,37272],{"class":81,"line":731},[79,37267,33108],{"class":228},[79,37269,239],{"class":448},[79,37271,32830],{"class":96},[79,37273,37274],{"class":228},".s8(x)\n",[79,37276,37277],{"class":81,"line":748},[79,37278,542],{"emptyLinePlaceholder":541},[79,37280,37281],{"class":81,"line":765},[79,37282,37283],{"class":2313},"        # 展平加线性全连接层\n",[79,37285,37286,37288,37290,37292],{"class":81,"line":780},[79,37287,33108],{"class":228},[79,37289,239],{"class":448},[79,37291,32830],{"class":96},[79,37293,33168],{"class":228},[79,37295,37296,37298,37300,37302,37304,37306],{"class":81,"line":811},[79,37297,33108],{"class":228},[79,37299,239],{"class":448},[79,37301,32830],{"class":96},[79,37303,37180],{"class":228},[79,37305,32830],{"class":96},[79,37307,37308],{"class":228},".f1(x))\n",[79,37310,37311],{"class":81,"line":816},[79,37312,37313],{"class":2313},"        # 还需要dropout对神经元随机进行失活\n",[79,37315,37316,37318,37320,37323,37325],{"class":81,"line":821},[79,37317,33108],{"class":228},[79,37319,239],{"class":448},[79,37321,37322],{"class":228},"F.dropout(x,",[79,37324,1751],{"class":96},[79,37326,850],{"class":228},[79,37328,37329,37331,37333,37335,37337,37339],{"class":81,"line":837},[79,37330,33108],{"class":228},[79,37332,239],{"class":448},[79,37334,32830],{"class":96},[79,37336,37180],{"class":228},[79,37338,32830],{"class":96},[79,37340,37341],{"class":228},".f2(x))\n",[79,37343,37344,37346,37348,37350,37352],{"class":81,"line":853},[79,37345,33108],{"class":228},[79,37347,239],{"class":448},[79,37349,37322],{"class":228},[79,37351,1751],{"class":96},[79,37353,850],{"class":228},[79,37355,37356],{"class":81,"line":864},[79,37357,37358],{"class":2313},"        # 直接输出\n",[79,37360,37361,37363,37365,37367],{"class":81,"line":869},[79,37362,33108],{"class":228},[79,37364,239],{"class":448},[79,37366,32830],{"class":96},[79,37368,37369],{"class":228},".f3(x)\n",[79,37371,37372],{"class":81,"line":885},[79,37373,37374],{"class":2313},"        # 前向传播输出\n",[79,37376,37377,37379],{"class":81,"line":891},[79,37378,16785],{"class":448},[79,37380,33216],{"class":228},[79,37382,37383],{"class":81,"line":896},[79,37384,37385],{"class":2313},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[79,37387,37388,37390,37392,37394,37396],{"class":81,"line":907},[79,37389,1210],{"class":448},[79,37391,1213],{"class":96},[79,37393,5025],{"class":448},[79,37395,33231],{"class":89},[79,37397,745],{"class":228},[79,37399,37400,37402,37404,37406,37408,37410,37412,37414,37416],{"class":81,"line":912},[79,37401,33243],{"class":228},[79,37403,239],{"class":448},[79,37405,32460],{"class":228},[79,37407,33250],{"class":89},[79,37409,3799],{"class":448},[79,37411,33255],{"class":228},[79,37413,3796],{"class":448},[79,37415,32485],{"class":89},[79,37417,850],{"class":228},[79,37419,37420],{"class":81,"line":935},[79,37421,37422],{"class":2313},"    # 模型实例化，然后将实例化的模型放到设备中\n",[79,37424,37425,37427,37429],{"class":81,"line":946},[79,37426,33295],{"class":228},[79,37428,239],{"class":448},[79,37430,37431],{"class":228},"AlexNet().to(device)\n",[79,37433,37434,37436,37438,37440,37442,37445,37447,37449],{"class":81,"line":960},[79,37435,1161],{"class":96},[79,37437,33307],{"class":228},[79,37439,775],{"class":96},[79,37441,2621],{"class":228},[79,37443,37444],{"class":96},"227",[79,37446,2621],{"class":228},[79,37448,37444],{"class":96},[79,37450,33320],{"class":228},[26,37452,37453],{"start":167},[29,37454,33333],{},[51,37456,37458],{"className":439,"code":37457,"language":441,"meta":57,"style":57},"import copy\nimport time\nimport pandas as pd\nimport torch\nfrom torch.utils.data import Dataset\nfrom torchvision.datasets import FashionMNIST\nfrom torchvision import transforms\nimport torch.utils.data as Data\nimport matplotlib.pyplot as plt\n# 导入模型\nfrom model import AlexNet\nfrom torch import nn\n\n\n# 处理训练集与验证集函数--->划分数据集\ndef train_val_data_process():\n    train_data=FashionMNIST('.\u002Fdata',\n                            train=True,\n                            transform=transforms.Compose([transforms.Resize(size=227),transforms.ToTensor()]),\n                            download=True)\n    train_data,val_data=Data.random_split(train_data,[round(0.8*len(train_data)),round(0.2*len(train_data))])\n    train_dataloader = Data.DataLoader(dataset=train_data,\n                                       batch_size=128,\n                                       shuffle=True,\n                                       # 规定8个进程\n                                       num_workers=8)\n    val_dataloader=Data.DataLoader(dataset=val_data,\n                                   batch_size=128,\n                                   shuffle=True,\n                                   num_workers=8)\n    return train_dataloader,val_dataloader\n\n# 验证是否出错\n# train_val_data_process()\n\n# 定义模型训练函数\ndef train_model_process(model,train_dataloader,val_dataloader,num_epochs):\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else 'cpu')\n\n\n    # 定义优化器\n    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n    # lr为学习率\n    optimizer=torch.optim.Adam(model.parameters(),lr=0.001)\n\n    # 定义损失函数使用交叉熵损失函数\n    criterion=nn.CrossEntropyLoss()\n\n    # 将模型放到GPU中进行训练\n    model=model.to(device)\n    # 复制当前模型的参数\n    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n    best_model_wts=copy.deepcopy(model.state_dict())\n\n\n    # 初始化参数\n    # 最高准确度\n    best_acc=0.0\n    # 训练集损失列表\n    train_loss_all=[]\n    # 验证集函数列表\n    val_loss_all=[]\n    # 训练集准确度列表\n    train_acc_all=[]\n    # 验证集准确度列表\n    val_acc_all=[]\n\n    # 保存当前时间--->方便看每轮训练的时间\n    since=time.time()\n\n\n    # 准备工作完成--->开始训练模型\n    for epoch in range(num_epochs):\n        print(\"Epoch {}\u002F{}\".format(epoch,num_epochs-1))\n        print(\"-\"*10)\n\n        # 初始化参数\n        # 训练集损失函数\n        train_loss=0.0\n        # 训练集准确度\n        train_corrects=0\n        # 验证集损失函数\n        val_loss=0.0\n        # 验证集准确度\n        val_corrects=0\n        # 训练集样本数量\n        train_num=0\n        # 验证集样本数量\n        val_num=0\n        # 将数据放到设备,并开始训练\n        for step,(b_x,b_y) in enumerate(train_dataloader):\n            # 将特征放入到训练设备\n            b_x=b_x.to(device)\n            # 将标签放入到训练设备当中\n            b_y=b_y.to(device)\n            # 设置模型为训练模式\n            model.train()\n            # 将数据放到模型当中,开始前向传播\n            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n            output=model(b_x)\n            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算每一个batch的损失函数\n            loss=criterion(output,b_y)\n            # 将梯度初始化为0\n            optimizer.zero_grad()\n            # 梯度置为0后再进行反向传播\n            loss.backward()\n            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n            optimizer.step()\n            # loss.item()指的是batch的平均损失\n            train_loss+=loss.item()*b_x.size(0)\n            # 计算每个批次中正确预测的数量\n            train_corrects+=torch.sum(pre_lab==b_y.data)\n            # 计算目前为止一共处理了多少样本\n            train_num+=b_x.size(0)\n        # 验证数据\n        for step ,(b_x,b_y) in enumerate(val_dataloader):\n            # 将特征放到验证设备当中\n            b_x=b_x.to(device)\n            # 将标签放到放到训练设备当中\n            b_y=b_y.to(device)\n            # 开启验证模式，设置模型为评估模式\n            model.eval()\n            # 验证时不计算梯度以节省内存\u002F计算\n            with torch.no_grad():\n                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n                output=model(b_x)\n                # 查找每一行中最大值对应的下标\n                pre_lab=torch.argmax(output,dim=1)\n                # 计算验证集上的当前 batch 损失\n                val_batch_loss=criterion(output,b_y)\n                # 对损失函数进行累加（按样本数加权）\n                val_loss+=val_batch_loss.item()*b_x.size(0)\n                val_corrects+=torch.sum(pre_lab==b_y.data)\n            # 当前用于验证的样本数量\n            val_num+=b_x.size(0)\n        # 计算并保存每一次迭代的loss值和准确率\n        # 计算并保存训练集的loss值\n        train_loss_all.append(train_loss\u002Ftrain_num)\n        # 取双精度\n        # 计算并保存训练集的准确率\n        train_acc_all.append(train_corrects.double().item()\u002Ftrain_num)\n        # 计算并保存验证集的loss值\n        val_loss_all.append(val_loss\u002Fval_num)\n        # 计算并保存验证集的准确率\n        val_acc_all.append(val_corrects.double().item()\u002Fval_num)\n\n        # 打印训练一轮的loss值和准确率\n        print('{}train loss:{:.4f} train acc:{:.4f}'.format(epoch,train_loss_all[-1],train_acc_all[-1]))\n        print('{}val loss:{:.4f} val acc:{:.4f}'.format(epoch,val_loss_all[-1],val_acc_all[-1]))\n\n        # 判断准确度--->保存最优模型\n        if val_acc_all[-1]>best_acc:\n            # 保存当前模型准确度\n            best_acc:float=val_acc_all[-1]\n            # 保存当前的准确度\n            # model.state_dict()是当前模型的所有参数（权重和偏置）\n            best_model_wts=copy.deepcopy(model.state_dict())\n\n        # 计算耗时\n        time_use=time.time()-since\n        print('训练和验证耗费的时间{:.0f}m{:.0f}s'.format(time_use\u002F\u002F60,time_use%60))\n    # 选择最优参数并保存\n    # 保存最佳模型权重字典\n    torch.save(best_model_wts,'.\u002Fbest_model.pth')\n    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n    train_process=pd.DataFrame(data={\n        \"epoch\":range(num_epochs),\n        \"train_loss_all\":train_loss_all,\n        \"val_loss_all\":val_loss_all,\n        \"train_acc_all\":train_acc_all,\n        \"val_acc_all\":val_acc_all\n    })\n    # 返回训练保存的过程\n    return train_process\n\n# 将loss值和精度按照图片的形式展示出来\ndef matplot_acc_loss(train_process):\n    # 设置图的大小\n    plt.figure(figsize=(12,4))\n    # 设置图中有几张图\n    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n    # ①loss图\n    plt.subplot(1,2,1)\n    # 补充:\n    # plt.subplot(nrows, ncols, index)\n    # nrows：行数\n    # ncols：列数\n    # index：目前选中第几个子图（从1开始）\n    plt.plot(train_process[\"epoch\"],train_process.train_loss_all,'ro-',label='train loss')\n    plt.plot(train_process[\"epoch\"],train_process.val_loss_all,'bs--',label='val loss')\n    # 添加一个图例\n    plt.legend()\n    # 给轴添加标签\n    plt.xlabel('epoch')\n    plt.ylabel('loss')\n    # ②准确度图\n    plt.subplot(1,2,2)\n    plt.plot(train_process[\"epoch\"],train_process.train_acc_all,'ro-',label='train acc')\n    plt.plot(train_process[\"epoch\"],train_process.val_acc_all,'bs--',label='val acc')\n    # 添加图例\n    plt.legend()\n    plt.xlabel(\"epoch\")\n    plt.ylabel(\"acc\")\n    plt.show()\n\n# 正式开始训练:\nif __name__==\"__main__\":\n    # 将模型实例化\n    AlexNet=AlexNet()\n    train_dataloader,val_dataloader=train_val_data_process()\n    train_process=train_model_process(AlexNet,train_dataloader,val_dataloader,num_epochs=20)\n    matplot_acc_loss(train_process)\n",[59,37459,37460,37466,37472,37482,37488,37498,37508,37518,37528,37538,37542,37553,37563,37567,37571,37575,37583,37595,37605,37621,37631,37663,37677,37687,37697,37701,37711,37725,37735,37745,37755,37761,37765,37769,37773,37777,37781,37789,37809,37813,37817,37821,37825,37829,37845,37849,37853,37861,37865,37869,37877,37881,37885,37889,37897,37901,37905,37909,37913,37921,37925,37933,37937,37945,37949,37957,37961,37969,37973,37977,37985,37989,37993,37997,38009,38033,38047,38051,38055,38059,38067,38071,38079,38083,38091,38095,38103,38107,38115,38119,38127,38131,38143,38147,38155,38159,38167,38171,38175,38179,38183,38191,38195,38211,38215,38223,38227,38231,38235,38239,38243,38247,38251,38267,38271,38283,38287,38299,38303,38315,38319,38327,38331,38339,38343,38347,38352,38358,38362,38371,38375,38392,38396,38405,38409,38427,38440,38445,38458,38462,38466,38474,38478,38482,38490,38494,38502,38506,38514,38518,38522,38564,38606,38610,38614,38630,38634,38650,38654,38658,38666,38670,38674,38686,38724,38729,38734,38743,38747,38761,38771,38777,38783,38789,38795,38799,38803,38809,38813,38817,38825,38829,38847,38851,38855,38859,38875,38879,38883,38887,38891,38895,38915,38935,38939,38943,38947,38955,38963,38967,38983,39003,39023,39027,39031,39039,39047,39051,39055,39059,39071,39075,39085,39093,39110],{"__ignoreMap":57},[79,37461,37462,37464],{"class":81,"line":82},[79,37463,520],{"class":448},[79,37465,33823],{"class":228},[79,37467,37468,37470],{"class":81,"line":167},[79,37469,520],{"class":448},[79,37471,33830],{"class":228},[79,37473,37474,37476,37478,37480],{"class":81,"line":178},[79,37475,520],{"class":448},[79,37477,33841],{"class":228},[79,37479,533],{"class":448},[79,37481,33846],{"class":228},[79,37483,37484,37486],{"class":81,"line":545},[79,37485,520],{"class":448},[79,37487,32405],{"class":228},[79,37489,37490,37492,37494,37496],{"class":81,"line":550},[79,37491,32745],{"class":448},[79,37493,33417],{"class":228},[79,37495,520],{"class":448},[79,37497,33863],{"class":228},[79,37499,37500,37502,37504,37506],{"class":81,"line":562},[79,37501,32745],{"class":448},[79,37503,33373],{"class":228},[79,37505,520],{"class":448},[79,37507,33378],{"class":228},[79,37509,37510,37512,37514,37516],{"class":81,"line":568},[79,37511,32745],{"class":448},[79,37513,33400],{"class":228},[79,37515,520],{"class":448},[79,37517,33405],{"class":228},[79,37519,37520,37522,37524,37526],{"class":81,"line":574},[79,37521,520],{"class":448},[79,37523,33417],{"class":228},[79,37525,533],{"class":448},[79,37527,33422],{"class":228},[79,37529,37530,37532,37534,37536],{"class":81,"line":579},[79,37531,520],{"class":448},[79,37533,33434],{"class":228},[79,37535,533],{"class":448},[79,37537,33439],{"class":228},[79,37539,37540],{"class":81,"line":585},[79,37541,33908],{"class":2313},[79,37543,37544,37546,37548,37550],{"class":81,"line":591},[79,37545,32745],{"class":448},[79,37547,33915],{"class":228},[79,37549,520],{"class":448},[79,37551,37552],{"class":228}," AlexNet\n",[79,37554,37555,37557,37559,37561],{"class":81,"line":596},[79,37556,32745],{"class":448},[79,37558,32748],{"class":228},[79,37560,520],{"class":448},[79,37562,32753],{"class":228},[79,37564,37565],{"class":81,"line":602},[79,37566,542],{"emptyLinePlaceholder":541},[79,37568,37569],{"class":81,"line":608},[79,37570,542],{"emptyLinePlaceholder":541},[79,37572,37573],{"class":81,"line":614},[79,37574,33943],{"class":2313},[79,37576,37577,37579,37581],{"class":81,"line":619},[79,37578,703],{"class":448},[79,37580,33950],{"class":85},[79,37582,33953],{"class":228},[79,37584,37585,37587,37589,37591,37593],{"class":81,"line":625},[79,37586,33958],{"class":228},[79,37588,239],{"class":448},[79,37590,33457],{"class":228},[79,37592,33465],{"class":89},[79,37594,33468],{"class":228},[79,37596,37597,37599,37601,37603],{"class":81,"line":631},[79,37598,33971],{"class":7284},[79,37600,239],{"class":448},[79,37602,33478],{"class":96},[79,37604,33468],{"class":228},[79,37606,37607,37609,37611,37613,37615,37617,37619],{"class":81,"line":637},[79,37608,33982],{"class":7284},[79,37610,239],{"class":448},[79,37612,33495],{"class":228},[79,37614,33498],{"class":7284},[79,37616,239],{"class":448},[79,37618,37444],{"class":96},[79,37620,33506],{"class":228},[79,37622,37623,37625,37627,37629],{"class":81,"line":643},[79,37624,33999],{"class":7284},[79,37626,239],{"class":448},[79,37628,33478],{"class":96},[79,37630,850],{"class":228},[79,37632,37633,37635,37637,37639,37641,37643,37645,37647,37649,37651,37653,37655,37657,37659,37661],{"class":81,"line":649},[79,37634,34010],{"class":228},[79,37636,239],{"class":448},[79,37638,34015],{"class":228},[79,37640,1138],{"class":96},[79,37642,455],{"class":228},[79,37644,34022],{"class":96},[79,37646,473],{"class":448},[79,37648,9423],{"class":96},[79,37650,34029],{"class":228},[79,37652,1138],{"class":96},[79,37654,455],{"class":228},[79,37656,34036],{"class":96},[79,37658,473],{"class":448},[79,37660,9423],{"class":96},[79,37662,34043],{"class":228},[79,37664,37665,37667,37669,37671,37673,37675],{"class":81,"line":655},[79,37666,34048],{"class":228},[79,37668,239],{"class":448},[79,37670,34053],{"class":228},[79,37672,33539],{"class":7284},[79,37674,239],{"class":448},[79,37676,33544],{"class":228},[79,37678,37679,37681,37683,37685],{"class":81,"line":660},[79,37680,34064],{"class":7284},[79,37682,239],{"class":448},[79,37684,34069],{"class":96},[79,37686,33468],{"class":228},[79,37688,37689,37691,37693,37695],{"class":81,"line":666},[79,37690,34076],{"class":7284},[79,37692,239],{"class":448},[79,37694,33478],{"class":96},[79,37696,33468],{"class":228},[79,37698,37699],{"class":81,"line":672},[79,37700,34087],{"class":2313},[79,37702,37703,37705,37707,37709],{"class":81,"line":678},[79,37704,34092],{"class":7284},[79,37706,239],{"class":448},[79,37708,2638],{"class":96},[79,37710,850],{"class":228},[79,37712,37713,37715,37717,37719,37721,37723],{"class":81,"line":684},[79,37714,34103],{"class":228},[79,37716,239],{"class":448},[79,37718,33536],{"class":228},[79,37720,33539],{"class":7284},[79,37722,239],{"class":448},[79,37724,34114],{"class":228},[79,37726,37727,37729,37731,37733],{"class":81,"line":690},[79,37728,34119],{"class":7284},[79,37730,239],{"class":448},[79,37732,34069],{"class":96},[79,37734,33468],{"class":228},[79,37736,37737,37739,37741,37743],{"class":81,"line":695},[79,37738,34130],{"class":7284},[79,37740,239],{"class":448},[79,37742,33478],{"class":96},[79,37744,33468],{"class":228},[79,37746,37747,37749,37751,37753],{"class":81,"line":700},[79,37748,34141],{"class":7284},[79,37750,239],{"class":448},[79,37752,2638],{"class":96},[79,37754,850],{"class":228},[79,37756,37757,37759],{"class":81,"line":712},[79,37758,715],{"class":448},[79,37760,34154],{"class":228},[79,37762,37763],{"class":81,"line":721},[79,37764,542],{"emptyLinePlaceholder":541},[79,37766,37767],{"class":81,"line":726},[79,37768,34163],{"class":2313},[79,37770,37771],{"class":81,"line":731},[79,37772,34168],{"class":2313},[79,37774,37775],{"class":81,"line":748},[79,37776,542],{"emptyLinePlaceholder":541},[79,37778,37779],{"class":81,"line":765},[79,37780,34177],{"class":2313},[79,37782,37783,37785,37787],{"class":81,"line":780},[79,37784,703],{"class":448},[79,37786,34184],{"class":85},[79,37788,34187],{"class":228},[79,37790,37791,37793,37795,37797,37799,37801,37803,37805,37807],{"class":81,"line":811},[79,37792,33243],{"class":228},[79,37794,239],{"class":448},[79,37796,32460],{"class":228},[79,37798,33250],{"class":89},[79,37800,3799],{"class":448},[79,37802,33255],{"class":228},[79,37804,3796],{"class":448},[79,37806,34206],{"class":89},[79,37808,850],{"class":228},[79,37810,37811],{"class":81,"line":816},[79,37812,542],{"emptyLinePlaceholder":541},[79,37814,37815],{"class":81,"line":821},[79,37816,542],{"emptyLinePlaceholder":541},[79,37818,37819],{"class":81,"line":837},[79,37820,34221],{"class":2313},[79,37822,37823],{"class":81,"line":853},[79,37824,34226],{"class":2313},[79,37826,37827],{"class":81,"line":864},[79,37828,34231],{"class":2313},[79,37830,37831,37833,37835,37837,37839,37841,37843],{"class":81,"line":869},[79,37832,34236],{"class":228},[79,37834,239],{"class":448},[79,37836,34241],{"class":228},[79,37838,34244],{"class":7284},[79,37840,239],{"class":448},[79,37842,34249],{"class":96},[79,37844,850],{"class":228},[79,37846,37847],{"class":81,"line":885},[79,37848,542],{"emptyLinePlaceholder":541},[79,37850,37851],{"class":81,"line":891},[79,37852,34260],{"class":2313},[79,37854,37855,37857,37859],{"class":81,"line":896},[79,37856,34265],{"class":228},[79,37858,239],{"class":448},[79,37860,34270],{"class":228},[79,37862,37863],{"class":81,"line":907},[79,37864,542],{"emptyLinePlaceholder":541},[79,37866,37867],{"class":81,"line":912},[79,37868,34279],{"class":2313},[79,37870,37871,37873,37875],{"class":81,"line":935},[79,37872,33295],{"class":228},[79,37874,239],{"class":448},[79,37876,34288],{"class":228},[79,37878,37879],{"class":81,"line":946},[79,37880,34293],{"class":2313},[79,37882,37883],{"class":81,"line":960},[79,37884,34298],{"class":2313},[79,37886,37887],{"class":81,"line":975},[79,37888,34303],{"class":2313},[79,37890,37891,37893,37895],{"class":81,"line":980},[79,37892,34308],{"class":228},[79,37894,239],{"class":448},[79,37896,34313],{"class":228},[79,37898,37899],{"class":81,"line":1006},[79,37900,542],{"emptyLinePlaceholder":541},[79,37902,37903],{"class":81,"line":1027},[79,37904,542],{"emptyLinePlaceholder":541},[79,37906,37907],{"class":81,"line":1032},[79,37908,34326],{"class":2313},[79,37910,37911],{"class":81,"line":1047},[79,37912,34331],{"class":2313},[79,37914,37915,37917,37919],{"class":81,"line":1053},[79,37916,34336],{"class":228},[79,37918,239],{"class":448},[79,37920,34341],{"class":96},[79,37922,37923],{"class":81,"line":1058},[79,37924,34346],{"class":2313},[79,37926,37927,37929,37931],{"class":81,"line":1069},[79,37928,34351],{"class":228},[79,37930,239],{"class":448},[79,37932,34356],{"class":228},[79,37934,37935],{"class":81,"line":1081},[79,37936,34361],{"class":2313},[79,37938,37939,37941,37943],{"class":81,"line":1086},[79,37940,34366],{"class":228},[79,37942,239],{"class":448},[79,37944,34356],{"class":228},[79,37946,37947],{"class":81,"line":1108},[79,37948,34375],{"class":2313},[79,37950,37951,37953,37955],{"class":81,"line":1153},[79,37952,34380],{"class":228},[79,37954,239],{"class":448},[79,37956,34356],{"class":228},[79,37958,37959],{"class":81,"line":1158},[79,37960,34389],{"class":2313},[79,37962,37963,37965,37967],{"class":81,"line":1180},[79,37964,34394],{"class":228},[79,37966,239],{"class":448},[79,37968,34356],{"class":228},[79,37970,37971],{"class":81,"line":1197},[79,37972,542],{"emptyLinePlaceholder":541},[79,37974,37975],{"class":81,"line":1202},[79,37976,34407],{"class":2313},[79,37978,37979,37981,37983],{"class":81,"line":1207},[79,37980,34412],{"class":228},[79,37982,239],{"class":448},[79,37984,34417],{"class":228},[79,37986,37987],{"class":81,"line":1223},[79,37988,542],{"emptyLinePlaceholder":541},[79,37990,37991],{"class":81,"line":18722},[79,37992,542],{"emptyLinePlaceholder":541},[79,37994,37995],{"class":81,"line":18728},[79,37996,34430],{"class":2313},[79,37998,37999,38001,38003,38005,38007],{"class":81,"line":18739},[79,38000,915],{"class":448},[79,38002,34437],{"class":228},[79,38004,921],{"class":448},[79,38006,924],{"class":96},[79,38008,34444],{"class":228},[79,38010,38011,38013,38015,38017,38019,38021,38023,38025,38027,38029,38031],{"class":81,"line":18762},[79,38012,34449],{"class":96},[79,38014,455],{"class":228},[79,38016,34454],{"class":89},[79,38018,34457],{"class":96},[79,38020,2824],{"class":89},[79,38022,34457],{"class":96},[79,38024,2495],{"class":89},[79,38026,34466],{"class":228},[79,38028,478],{"class":448},[79,38030,775],{"class":96},[79,38032,1150],{"class":228},[79,38034,38035,38037,38039,38041,38043,38045],{"class":81,"line":18784},[79,38036,34449],{"class":96},[79,38038,455],{"class":228},[79,38040,34481],{"class":89},[79,38042,473],{"class":448},[79,38044,2689],{"class":96},[79,38046,850],{"class":228},[79,38048,38049],{"class":81,"line":18789},[79,38050,542],{"emptyLinePlaceholder":541},[79,38052,38053],{"class":81,"line":18795},[79,38054,34496],{"class":2313},[79,38056,38057],{"class":81,"line":18809},[79,38058,34501],{"class":2313},[79,38060,38061,38063,38065],{"class":81,"line":18822},[79,38062,34506],{"class":228},[79,38064,239],{"class":448},[79,38066,34341],{"class":96},[79,38068,38069],{"class":81,"line":18827},[79,38070,34515],{"class":2313},[79,38072,38073,38075,38077],{"class":81,"line":18841},[79,38074,34520],{"class":228},[79,38076,239],{"class":448},[79,38078,5160],{"class":96},[79,38080,38081],{"class":81,"line":18846},[79,38082,34529],{"class":2313},[79,38084,38085,38087,38089],{"class":81,"line":18852},[79,38086,34534],{"class":228},[79,38088,239],{"class":448},[79,38090,34341],{"class":96},[79,38092,38093],{"class":81,"line":18857},[79,38094,34543],{"class":2313},[79,38096,38097,38099,38101],{"class":81,"line":18871},[79,38098,34548],{"class":228},[79,38100,239],{"class":448},[79,38102,5160],{"class":96},[79,38104,38105],{"class":81,"line":18876},[79,38106,34557],{"class":2313},[79,38108,38109,38111,38113],{"class":81,"line":18881},[79,38110,34562],{"class":228},[79,38112,239],{"class":448},[79,38114,5160],{"class":96},[79,38116,38117],{"class":81,"line":18895},[79,38118,34571],{"class":2313},[79,38120,38121,38123,38125],{"class":81,"line":18907},[79,38122,34576],{"class":228},[79,38124,239],{"class":448},[79,38126,5160],{"class":96},[79,38128,38129],{"class":81,"line":18912},[79,38130,34585],{"class":2313},[79,38132,38133,38135,38137,38139,38141],{"class":81,"line":18925},[79,38134,5477],{"class":448},[79,38136,33603],{"class":228},[79,38138,921],{"class":448},[79,38140,33608],{"class":96},[79,38142,34598],{"class":228},[79,38144,38145],{"class":81,"line":18930},[79,38146,34603],{"class":2313},[79,38148,38149,38151,38153],{"class":81,"line":18935},[79,38150,34608],{"class":228},[79,38152,239],{"class":448},[79,38154,34613],{"class":228},[79,38156,38157],{"class":81,"line":18940},[79,38158,34618],{"class":2313},[79,38160,38161,38163,38165],{"class":81,"line":18953},[79,38162,34623],{"class":228},[79,38164,239],{"class":448},[79,38166,34628],{"class":228},[79,38168,38169],{"class":81,"line":18958},[79,38170,34634],{"class":2313},[79,38172,38173],{"class":81,"line":34631},[79,38174,34640],{"class":228},[79,38176,38177],{"class":81,"line":34637},[79,38178,34646],{"class":2313},[79,38180,38181],{"class":81,"line":34643},[79,38182,34652],{"class":2313},[79,38184,38185,38187,38189],{"class":81,"line":34649},[79,38186,34658],{"class":228},[79,38188,239],{"class":448},[79,38190,34663],{"class":228},[79,38192,38193],{"class":81,"line":34655},[79,38194,34669],{"class":2313},[79,38196,38197,38199,38201,38203,38205,38207,38209],{"class":81,"line":34666},[79,38198,34675],{"class":228},[79,38200,239],{"class":448},[79,38202,34680],{"class":228},[79,38204,34683],{"class":7284},[79,38206,239],{"class":448},[79,38208,775],{"class":96},[79,38210,850],{"class":228},[79,38212,38213],{"class":81,"line":34672},[79,38214,34695],{"class":2313},[79,38216,38217,38219,38221],{"class":81,"line":34692},[79,38218,34701],{"class":228},[79,38220,239],{"class":448},[79,38222,34706],{"class":228},[79,38224,38225],{"class":81,"line":34698},[79,38226,34712],{"class":2313},[79,38228,38229],{"class":81,"line":34709},[79,38230,34718],{"class":228},[79,38232,38233],{"class":81,"line":34715},[79,38234,34724],{"class":2313},[79,38236,38237],{"class":81,"line":34721},[79,38238,34730],{"class":228},[79,38240,38241],{"class":81,"line":34727},[79,38242,34736],{"class":2313},[79,38244,38245],{"class":81,"line":34733},[79,38246,34742],{"class":228},[79,38248,38249],{"class":81,"line":34739},[79,38250,34748],{"class":2313},[79,38252,38253,38255,38257,38259,38261,38263,38265],{"class":81,"line":34745},[79,38254,34754],{"class":228},[79,38256,1075],{"class":448},[79,38258,34759],{"class":228},[79,38260,473],{"class":448},[79,38262,34764],{"class":228},[79,38264,759],{"class":96},[79,38266,850],{"class":228},[79,38268,38269],{"class":81,"line":34751},[79,38270,34774],{"class":2313},[79,38272,38273,38275,38277,38279,38281],{"class":81,"line":34771},[79,38274,34780],{"class":228},[79,38276,1075],{"class":448},[79,38278,34785],{"class":228},[79,38280,5025],{"class":448},[79,38282,34790],{"class":228},[79,38284,38285],{"class":81,"line":34777},[79,38286,34796],{"class":2313},[79,38288,38289,38291,38293,38295,38297],{"class":81,"line":34793},[79,38290,34802],{"class":228},[79,38292,1075],{"class":448},[79,38294,34764],{"class":228},[79,38296,759],{"class":96},[79,38298,850],{"class":228},[79,38300,38301],{"class":81,"line":34799},[79,38302,34816],{"class":2313},[79,38304,38305,38307,38309,38311,38313],{"class":81,"line":34813},[79,38306,5477],{"class":448},[79,38308,34824],{"class":228},[79,38310,921],{"class":448},[79,38312,33608],{"class":96},[79,38314,34831],{"class":228},[79,38316,38317],{"class":81,"line":34819},[79,38318,34837],{"class":2313},[79,38320,38321,38323,38325],{"class":81,"line":34834},[79,38322,34608],{"class":228},[79,38324,239],{"class":448},[79,38326,34613],{"class":228},[79,38328,38329],{"class":81,"line":34840},[79,38330,34852],{"class":2313},[79,38332,38333,38335,38337],{"class":81,"line":34849},[79,38334,34623],{"class":228},[79,38336,239],{"class":448},[79,38338,34628],{"class":228},[79,38340,38341],{"class":81,"line":34855},[79,38342,34867],{"class":2313},[79,38344,38345],{"class":81,"line":34864},[79,38346,34873],{"class":228},[79,38348,38349],{"class":81,"line":34870},[79,38350,38351],{"class":2313},"            # 验证时不计算梯度以节省内存\u002F计算\n",[79,38353,38354,38356],{"class":81,"line":34876},[79,38355,34879],{"class":448},[79,38357,34882],{"class":228},[79,38359,38360],{"class":81,"line":34885},[79,38361,34888],{"class":2313},[79,38363,38364,38367,38369],{"class":81,"line":34891},[79,38365,38366],{"class":228},"                output",[79,38368,239],{"class":448},[79,38370,34663],{"class":228},[79,38372,38373],{"class":81,"line":34902},[79,38374,34905],{"class":2313},[79,38376,38377,38380,38382,38384,38386,38388,38390],{"class":81,"line":34908},[79,38378,38379],{"class":228},"                pre_lab",[79,38381,239],{"class":448},[79,38383,34680],{"class":228},[79,38385,34683],{"class":7284},[79,38387,239],{"class":448},[79,38389,775],{"class":96},[79,38391,850],{"class":228},[79,38393,38394],{"class":81,"line":34927},[79,38395,34930],{"class":2313},[79,38397,38398,38401,38403],{"class":81,"line":34933},[79,38399,38400],{"class":228},"                val_batch_loss",[79,38402,239],{"class":448},[79,38404,34706],{"class":228},[79,38406,38407],{"class":81,"line":34944},[79,38408,34947],{"class":2313},[79,38410,38411,38414,38416,38419,38421,38423,38425],{"class":81,"line":34950},[79,38412,38413],{"class":228},"                val_loss",[79,38415,1075],{"class":448},[79,38417,38418],{"class":228},"val_batch_loss.item()",[79,38420,473],{"class":448},[79,38422,34764],{"class":228},[79,38424,759],{"class":96},[79,38426,850],{"class":228},[79,38428,38429,38432,38434,38436,38438],{"class":81,"line":34970},[79,38430,38431],{"class":228},"                val_corrects",[79,38433,1075],{"class":448},[79,38435,34785],{"class":228},[79,38437,5025],{"class":448},[79,38439,34790],{"class":228},[79,38441,38442],{"class":81,"line":34986},[79,38443,38444],{"class":2313},"            # 当前用于验证的样本数量\n",[79,38446,38447,38450,38452,38454,38456],{"class":81,"line":34992},[79,38448,38449],{"class":228},"            val_num",[79,38451,1075],{"class":448},[79,38453,34764],{"class":228},[79,38455,759],{"class":96},[79,38457,850],{"class":228},[79,38459,38460],{"class":81,"line":35006},[79,38461,35009],{"class":2313},[79,38463,38464],{"class":81,"line":35012},[79,38465,35015],{"class":2313},[79,38467,38468,38470,38472],{"class":81,"line":35018},[79,38469,35021],{"class":228},[79,38471,2824],{"class":448},[79,38473,35026],{"class":228},[79,38475,38476],{"class":81,"line":35029},[79,38477,35032],{"class":2313},[79,38479,38480],{"class":81,"line":35035},[79,38481,35038],{"class":2313},[79,38483,38484,38486,38488],{"class":81,"line":35041},[79,38485,35044],{"class":228},[79,38487,2824],{"class":448},[79,38489,35026],{"class":228},[79,38491,38492],{"class":81,"line":35051},[79,38493,35054],{"class":2313},[79,38495,38496,38498,38500],{"class":81,"line":35057},[79,38497,35060],{"class":228},[79,38499,2824],{"class":448},[79,38501,35065],{"class":228},[79,38503,38504],{"class":81,"line":35068},[79,38505,35071],{"class":2313},[79,38507,38508,38510,38512],{"class":81,"line":35074},[79,38509,35077],{"class":228},[79,38511,2824],{"class":448},[79,38513,35065],{"class":228},[79,38515,38516],{"class":81,"line":35084},[79,38517,542],{"emptyLinePlaceholder":541},[79,38519,38520],{"class":81,"line":35089},[79,38521,35092],{"class":2313},[79,38523,38524,38526,38528,38530,38532,38534,38536,38538,38540,38542,38544,38546,38548,38550,38552,38554,38556,38558,38560,38562],{"class":81,"line":35095},[79,38525,34449],{"class":96},[79,38527,455],{"class":228},[79,38529,5666],{"class":89},[79,38531,34457],{"class":96},[79,38533,35106],{"class":89},[79,38535,3136],{"class":96},[79,38537,35111],{"class":448},[79,38539,3185],{"class":96},[79,38541,35116],{"class":89},[79,38543,3136],{"class":96},[79,38545,35111],{"class":448},[79,38547,3185],{"class":96},[79,38549,5666],{"class":89},[79,38551,35127],{"class":228},[79,38553,478],{"class":448},[79,38555,775],{"class":96},[79,38557,35134],{"class":228},[79,38559,478],{"class":448},[79,38561,775],{"class":96},[79,38563,35141],{"class":228},[79,38565,38566,38568,38570,38572,38574,38576,38578,38580,38582,38584,38586,38588,38590,38592,38594,38596,38598,38600,38602,38604],{"class":81,"line":35144},[79,38567,34449],{"class":96},[79,38569,455],{"class":228},[79,38571,5666],{"class":89},[79,38573,34457],{"class":96},[79,38575,35155],{"class":89},[79,38577,3136],{"class":96},[79,38579,35111],{"class":448},[79,38581,3185],{"class":96},[79,38583,35164],{"class":89},[79,38585,3136],{"class":96},[79,38587,35111],{"class":448},[79,38589,3185],{"class":96},[79,38591,5666],{"class":89},[79,38593,35175],{"class":228},[79,38595,478],{"class":448},[79,38597,775],{"class":96},[79,38599,35182],{"class":228},[79,38601,478],{"class":448},[79,38603,775],{"class":96},[79,38605,35141],{"class":228},[79,38607,38608],{"class":81,"line":35191},[79,38609,542],{"emptyLinePlaceholder":541},[79,38611,38612],{"class":81,"line":35196},[79,38613,35199],{"class":2313},[79,38615,38616,38618,38620,38622,38624,38626,38628],{"class":81,"line":35202},[79,38617,1089],{"class":448},[79,38619,35207],{"class":228},[79,38621,478],{"class":448},[79,38623,775],{"class":96},[79,38625,3179],{"class":228},[79,38627,3199],{"class":448},[79,38629,35218],{"class":228},[79,38631,38632],{"class":81,"line":35221},[79,38633,35224],{"class":2313},[79,38635,38636,38638,38640,38642,38644,38646,38648],{"class":81,"line":35227},[79,38637,35230],{"class":228},[79,38639,742],{"class":96},[79,38641,239],{"class":448},[79,38643,35237],{"class":228},[79,38645,478],{"class":448},[79,38647,775],{"class":96},[79,38649,762],{"class":228},[79,38651,38652],{"class":81,"line":35246},[79,38653,35249],{"class":2313},[79,38655,38656],{"class":81,"line":35252},[79,38657,35255],{"class":2313},[79,38659,38660,38662,38664],{"class":81,"line":35258},[79,38661,35261],{"class":228},[79,38663,239],{"class":448},[79,38665,34313],{"class":228},[79,38667,38668],{"class":81,"line":35268},[79,38669,542],{"emptyLinePlaceholder":541},[79,38671,38672],{"class":81,"line":35273},[79,38673,35276],{"class":2313},[79,38675,38676,38678,38680,38682,38684],{"class":81,"line":35279},[79,38677,35282],{"class":228},[79,38679,239],{"class":448},[79,38681,35287],{"class":228},[79,38683,478],{"class":448},[79,38685,35292],{"class":228},[79,38687,38688,38690,38692,38694,38696,38698,38700,38702,38704,38706,38708,38710,38712,38714,38716,38718,38720,38722],{"class":81,"line":35295},[79,38689,34449],{"class":96},[79,38691,455],{"class":228},[79,38693,35302],{"class":89},[79,38695,3136],{"class":96},[79,38697,35307],{"class":448},[79,38699,3185],{"class":96},[79,38701,2784],{"class":89},[79,38703,3136],{"class":96},[79,38705,35307],{"class":448},[79,38707,3185],{"class":96},[79,38709,35320],{"class":89},[79,38711,35323],{"class":228},[79,38713,35326],{"class":448},[79,38715,3147],{"class":96},[79,38717,35331],{"class":228},[79,38719,1094],{"class":448},[79,38721,3147],{"class":96},[79,38723,1150],{"class":228},[79,38725,38726],{"class":81,"line":35340},[79,38727,38728],{"class":2313},"    # 选择最优参数并保存\n",[79,38730,38731],{"class":81,"line":35346},[79,38732,38733],{"class":2313},"    # 保存最佳模型权重字典\n",[79,38735,38736,38739,38741],{"class":81,"line":35352},[79,38737,38738],{"class":228},"    torch.save(best_model_wts,",[79,38740,35364],{"class":89},[79,38742,850],{"class":228},[79,38744,38745],{"class":81,"line":35358},[79,38746,35384],{"class":2313},[79,38748,38749,38751,38753,38755,38757,38759],{"class":81,"line":35369},[79,38750,35390],{"class":228},[79,38752,239],{"class":448},[79,38754,35395],{"class":228},[79,38756,35398],{"class":7284},[79,38758,239],{"class":448},[79,38760,3652],{"class":228},[79,38762,38763,38765,38767,38769],{"class":81,"line":35375},[79,38764,35408],{"class":89},[79,38766,3099],{"class":228},[79,38768,35413],{"class":96},[79,38770,35416],{"class":228},[79,38772,38773,38775],{"class":81,"line":35381},[79,38774,35422],{"class":89},[79,38776,35425],{"class":228},[79,38778,38779,38781],{"class":81,"line":35387},[79,38780,35431],{"class":89},[79,38782,35434],{"class":228},[79,38784,38785,38787],{"class":81,"line":35405},[79,38786,35440],{"class":89},[79,38788,35443],{"class":228},[79,38790,38791,38793],{"class":81,"line":35419},[79,38792,35449],{"class":89},[79,38794,35452],{"class":228},[79,38796,38797],{"class":81,"line":35428},[79,38798,35458],{"class":228},[79,38800,38801],{"class":81,"line":35437},[79,38802,35464],{"class":2313},[79,38804,38805,38807],{"class":81,"line":35446},[79,38806,715],{"class":448},[79,38808,35472],{"class":228},[79,38810,38811],{"class":81,"line":35455},[79,38812,542],{"emptyLinePlaceholder":541},[79,38814,38815],{"class":81,"line":35461},[79,38816,35483],{"class":2313},[79,38818,38819,38821,38823],{"class":81,"line":35467},[79,38820,703],{"class":448},[79,38822,35491],{"class":85},[79,38824,35494],{"class":228},[79,38826,38827],{"class":81,"line":35475},[79,38828,35500],{"class":2313},[79,38830,38831,38833,38835,38837,38839,38841,38843,38845],{"class":81,"line":35480},[79,38832,35506],{"class":228},[79,38834,33694],{"class":7284},[79,38836,239],{"class":448},[79,38838,455],{"class":228},[79,38840,2739],{"class":96},[79,38842,2621],{"class":228},[79,38844,2537],{"class":96},[79,38846,1150],{"class":228},[79,38848,38849],{"class":81,"line":35486},[79,38850,35526],{"class":2313},[79,38852,38853],{"class":81,"line":35497},[79,38854,35532],{"class":2313},[79,38856,38857],{"class":81,"line":35503},[79,38858,35538],{"class":2313},[79,38860,38861,38863,38865,38867,38869,38871,38873],{"class":81,"line":35523},[79,38862,33728],{"class":228},[79,38864,775],{"class":96},[79,38866,2621],{"class":228},[79,38868,2331],{"class":96},[79,38870,2621],{"class":228},[79,38872,775],{"class":96},[79,38874,850],{"class":228},[79,38876,38877],{"class":81,"line":35529},[79,38878,35561],{"class":2313},[79,38880,38881],{"class":81,"line":35535},[79,38882,35567],{"class":2313},[79,38884,38885],{"class":81,"line":35541},[79,38886,35573],{"class":2313},[79,38888,38889],{"class":81,"line":35558},[79,38890,35579],{"class":2313},[79,38892,38893],{"class":81,"line":35564},[79,38894,35585],{"class":2313},[79,38896,38897,38899,38901,38903,38905,38907,38909,38911,38913],{"class":81,"line":35570},[79,38898,35591],{"class":228},[79,38900,35594],{"class":89},[79,38902,35597],{"class":228},[79,38904,35600],{"class":89},[79,38906,2621],{"class":228},[79,38908,35605],{"class":7284},[79,38910,239],{"class":448},[79,38912,35610],{"class":89},[79,38914,850],{"class":228},[79,38916,38917,38919,38921,38923,38925,38927,38929,38931,38933],{"class":81,"line":35576},[79,38918,35591],{"class":228},[79,38920,35594],{"class":89},[79,38922,35622],{"class":228},[79,38924,35625],{"class":89},[79,38926,2621],{"class":228},[79,38928,35605],{"class":7284},[79,38930,239],{"class":448},[79,38932,35634],{"class":89},[79,38934,850],{"class":228},[79,38936,38937],{"class":81,"line":35582},[79,38938,35642],{"class":2313},[79,38940,38941],{"class":81,"line":35588},[79,38942,35648],{"class":228},[79,38944,38945],{"class":81,"line":35615},[79,38946,35654],{"class":2313},[79,38948,38949,38951,38953],{"class":81,"line":35639},[79,38950,35660],{"class":228},[79,38952,35663],{"class":89},[79,38954,850],{"class":228},[79,38956,38957,38959,38961],{"class":81,"line":35645},[79,38958,35671],{"class":228},[79,38960,35674],{"class":89},[79,38962,850],{"class":228},[79,38964,38965],{"class":81,"line":35651},[79,38966,35682],{"class":2313},[79,38968,38969,38971,38973,38975,38977,38979,38981],{"class":81,"line":35657},[79,38970,33728],{"class":228},[79,38972,775],{"class":96},[79,38974,2621],{"class":228},[79,38976,2331],{"class":96},[79,38978,2621],{"class":228},[79,38980,2331],{"class":96},[79,38982,850],{"class":228},[79,38984,38985,38987,38989,38991,38993,38995,38997,38999,39001],{"class":81,"line":35668},[79,38986,35591],{"class":228},[79,38988,35594],{"class":89},[79,38990,35709],{"class":228},[79,38992,35600],{"class":89},[79,38994,2621],{"class":228},[79,38996,35605],{"class":7284},[79,38998,239],{"class":448},[79,39000,35720],{"class":89},[79,39002,850],{"class":228},[79,39004,39005,39007,39009,39011,39013,39015,39017,39019,39021],{"class":81,"line":35679},[79,39006,35591],{"class":228},[79,39008,35594],{"class":89},[79,39010,35732],{"class":228},[79,39012,35625],{"class":89},[79,39014,2621],{"class":228},[79,39016,35605],{"class":7284},[79,39018,239],{"class":448},[79,39020,35743],{"class":89},[79,39022,850],{"class":228},[79,39024,39025],{"class":81,"line":35685},[79,39026,35751],{"class":2313},[79,39028,39029],{"class":81,"line":35702},[79,39030,35648],{"class":228},[79,39032,39033,39035,39037],{"class":81,"line":35725},[79,39034,35660],{"class":228},[79,39036,35594],{"class":89},[79,39038,850],{"class":228},[79,39040,39041,39043,39045],{"class":81,"line":35748},[79,39042,35671],{"class":228},[79,39044,35773],{"class":89},[79,39046,850],{"class":228},[79,39048,39049],{"class":81,"line":35754},[79,39050,35781],{"class":228},[79,39052,39053],{"class":81,"line":35759},[79,39054,542],{"emptyLinePlaceholder":541},[79,39056,39057],{"class":81,"line":35768},[79,39058,35792],{"class":2313},[79,39060,39061,39063,39065,39067,39069],{"class":81,"line":35778},[79,39062,1210],{"class":448},[79,39064,1213],{"class":96},[79,39066,5025],{"class":448},[79,39068,33231],{"class":89},[79,39070,745],{"class":228},[79,39072,39073],{"class":81,"line":35784},[79,39074,35811],{"class":2313},[79,39076,39077,39080,39082],{"class":81,"line":35789},[79,39078,39079],{"class":228},"    AlexNet",[79,39081,239],{"class":448},[79,39083,39084],{"class":228},"AlexNet()\n",[79,39086,39087,39089,39091],{"class":81,"line":35795},[79,39088,35828],{"class":228},[79,39090,239],{"class":448},[79,39092,35833],{"class":228},[79,39094,39095,39097,39099,39102,39104,39106,39108],{"class":81,"line":35808},[79,39096,35390],{"class":228},[79,39098,239],{"class":448},[79,39100,39101],{"class":228},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[79,39103,35846],{"class":7284},[79,39105,239],{"class":448},[79,39107,2940],{"class":96},[79,39109,850],{"class":228},[79,39111,39112],{"class":81,"line":35814},[79,39113,35858],{"class":228},[26,39115,39116],{"start":178},[29,39117,35871],{},[51,39119,39121],{"className":439,"code":39120,"language":441,"meta":57,"style":57},"import torch\nimport torch.utils.data as Data\nfrom jupyter_client.consoleapp import classes\nfrom torchvision import transforms\n# 导入数据集\nfrom torchvision.datasets import FashionMNIST\nfrom model import AlexNet\nfrom 练习.AlexNet.model import AlexNet\n\n\n# 测试数据处理\ndef test_data_process():\n    test_data=FashionMNIST(root='.\u002Fdata',\n                           train=False,\n                           transform=transforms.Compose([transforms.Resize(size=227),transforms.ToTensor()]),\n                           download=True)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=AlexNet()\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['T-shirt\u002Ftop','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[59,39122,39123,39129,39139,39149,39159,39163,39173,39183,39194,39198,39202,39206,39214,39230,39240,39256,39266,39280,39284,39294,39304,39314,39320,39324,39328,39336,39340,39356,39364,39368,39372,39380,39388,39392,39396,39400,39404,39410,39414,39424,39432,39440,39444,39448,39452,39460,39464,39480,39484,39488,39492,39504,39508,39520,39524,39528,39540,39544,39554,39558,39562,39574,39578,39586,39590,39594,39602,39606,39614,39618,39622,39626,39630,39634,39650,39658,39662,39666,39714,39720,39724,39734,39742,39750,39754,39758,39762,39766,39774,39778,39794,39798,39806,39814],{"__ignoreMap":57},[79,39124,39125,39127],{"class":81,"line":82},[79,39126,520],{"class":448},[79,39128,32405],{"class":228},[79,39130,39131,39133,39135,39137],{"class":81,"line":167},[79,39132,520],{"class":448},[79,39134,33417],{"class":228},[79,39136,533],{"class":448},[79,39138,33422],{"class":228},[79,39140,39141,39143,39145,39147],{"class":81,"line":178},[79,39142,32745],{"class":448},[79,39144,35899],{"class":228},[79,39146,520],{"class":448},[79,39148,35904],{"class":228},[79,39150,39151,39153,39155,39157],{"class":81,"line":545},[79,39152,32745],{"class":448},[79,39154,33400],{"class":228},[79,39156,520],{"class":448},[79,39158,33405],{"class":228},[79,39160,39161],{"class":81,"line":550},[79,39162,35919],{"class":2313},[79,39164,39165,39167,39169,39171],{"class":81,"line":562},[79,39166,32745],{"class":448},[79,39168,33373],{"class":228},[79,39170,520],{"class":448},[79,39172,33378],{"class":228},[79,39174,39175,39177,39179,39181],{"class":81,"line":568},[79,39176,32745],{"class":448},[79,39178,33915],{"class":228},[79,39180,520],{"class":448},[79,39182,37552],{"class":228},[79,39184,39185,39187,39190,39192],{"class":81,"line":574},[79,39186,32745],{"class":448},[79,39188,39189],{"class":228}," 练习.AlexNet.model ",[79,39191,520],{"class":448},[79,39193,37552],{"class":228},[79,39195,39196],{"class":81,"line":579},[79,39197,542],{"emptyLinePlaceholder":541},[79,39199,39200],{"class":81,"line":585},[79,39201,542],{"emptyLinePlaceholder":541},[79,39203,39204],{"class":81,"line":591},[79,39205,35948],{"class":2313},[79,39207,39208,39210,39212],{"class":81,"line":596},[79,39209,703],{"class":448},[79,39211,35955],{"class":85},[79,39213,33953],{"class":228},[79,39215,39216,39218,39220,39222,39224,39226,39228],{"class":81,"line":602},[79,39217,35962],{"class":228},[79,39219,239],{"class":448},[79,39221,33457],{"class":228},[79,39223,33460],{"class":7284},[79,39225,239],{"class":448},[79,39227,33465],{"class":89},[79,39229,33468],{"class":228},[79,39231,39232,39234,39236,39238],{"class":81,"line":608},[79,39233,35979],{"class":7284},[79,39235,239],{"class":448},[79,39237,35984],{"class":96},[79,39239,33468],{"class":228},[79,39241,39242,39244,39246,39248,39250,39252,39254],{"class":81,"line":614},[79,39243,35991],{"class":7284},[79,39245,239],{"class":448},[79,39247,33495],{"class":228},[79,39249,33498],{"class":7284},[79,39251,239],{"class":448},[79,39253,37444],{"class":96},[79,39255,33506],{"class":228},[79,39257,39258,39260,39262,39264],{"class":81,"line":619},[79,39259,36008],{"class":7284},[79,39261,239],{"class":448},[79,39263,33478],{"class":96},[79,39265,850],{"class":228},[79,39267,39268,39270,39272,39274,39276,39278],{"class":81,"line":625},[79,39269,36019],{"class":228},[79,39271,239],{"class":448},[79,39273,33536],{"class":228},[79,39275,33539],{"class":7284},[79,39277,239],{"class":448},[79,39279,36030],{"class":228},[79,39281,39282],{"class":81,"line":631},[79,39283,36035],{"class":2313},[79,39285,39286,39288,39290,39292],{"class":81,"line":637},[79,39287,36040],{"class":7284},[79,39289,239],{"class":448},[79,39291,775],{"class":96},[79,39293,33468],{"class":228},[79,39295,39296,39298,39300,39302],{"class":81,"line":643},[79,39297,36051],{"class":7284},[79,39299,239],{"class":448},[79,39301,33478],{"class":96},[79,39303,33468],{"class":228},[79,39305,39306,39308,39310,39312],{"class":81,"line":649},[79,39307,36062],{"class":7284},[79,39309,239],{"class":448},[79,39311,759],{"class":96},[79,39313,850],{"class":228},[79,39315,39316,39318],{"class":81,"line":655},[79,39317,715],{"class":448},[79,39319,36075],{"class":228},[79,39321,39322],{"class":81,"line":660},[79,39323,542],{"emptyLinePlaceholder":541},[79,39325,39326],{"class":81,"line":666},[79,39327,36084],{"class":2313},[79,39329,39330,39332,39334],{"class":81,"line":672},[79,39331,703],{"class":448},[79,39333,36091],{"class":85},[79,39335,36094],{"class":228},[79,39337,39338],{"class":81,"line":678},[79,39339,36099],{"class":2313},[79,39341,39342,39344,39346,39348,39350,39352,39354],{"class":81,"line":684},[79,39343,33243],{"class":228},[79,39345,239],{"class":448},[79,39347,33250],{"class":89},[79,39349,3799],{"class":448},[79,39351,33255],{"class":228},[79,39353,3796],{"class":448},[79,39355,36116],{"class":89},[79,39357,39358,39360,39362],{"class":81,"line":690},[79,39359,33295],{"class":228},[79,39361,239],{"class":448},[79,39363,34288],{"class":228},[79,39365,39366],{"class":81,"line":695},[79,39367,542],{"emptyLinePlaceholder":541},[79,39369,39370],{"class":81,"line":700},[79,39371,36133],{"class":2313},[79,39373,39374,39376,39378],{"class":81,"line":712},[79,39375,36138],{"class":228},[79,39377,239],{"class":448},[79,39379,34341],{"class":96},[79,39381,39382,39384,39386],{"class":81,"line":721},[79,39383,36147],{"class":228},[79,39385,239],{"class":448},[79,39387,5160],{"class":96},[79,39389,39390],{"class":81,"line":726},[79,39391,542],{"emptyLinePlaceholder":541},[79,39393,39394],{"class":81,"line":731},[79,39395,36160],{"class":2313},[79,39397,39398],{"class":81,"line":748},[79,39399,36165],{"class":2313},[79,39401,39402],{"class":81,"line":765},[79,39403,36170],{"class":2313},[79,39405,39406,39408],{"class":81,"line":780},[79,39407,36175],{"class":448},[79,39409,34882],{"class":228},[79,39411,39412],{"class":81,"line":811},[79,39413,36182],{"class":2313},[79,39415,39416,39418,39420,39422],{"class":81,"line":816},[79,39417,5477],{"class":448},[79,39419,36189],{"class":228},[79,39421,921],{"class":448},[79,39423,36194],{"class":228},[79,39425,39426,39428,39430],{"class":81,"line":821},[79,39427,36199],{"class":228},[79,39429,239],{"class":448},[79,39431,36204],{"class":228},[79,39433,39434,39436,39438],{"class":81,"line":837},[79,39435,36209],{"class":228},[79,39437,239],{"class":448},[79,39439,36214],{"class":228},[79,39441,39442],{"class":81,"line":853},[79,39443,36219],{"class":2313},[79,39445,39446],{"class":81,"line":864},[79,39447,34873],{"class":228},[79,39449,39450],{"class":81,"line":869},[79,39451,36228],{"class":2313},[79,39453,39454,39456,39458],{"class":81,"line":885},[79,39455,34658],{"class":228},[79,39457,239],{"class":448},[79,39459,36237],{"class":228},[79,39461,39462],{"class":81,"line":891},[79,39463,36242],{"class":2313},[79,39465,39466,39468,39470,39472,39474,39476,39478],{"class":81,"line":896},[79,39467,34675],{"class":228},[79,39469,239],{"class":448},[79,39471,34680],{"class":228},[79,39473,34683],{"class":7284},[79,39475,239],{"class":448},[79,39477,775],{"class":96},[79,39479,850],{"class":228},[79,39481,39482],{"class":81,"line":907},[79,39483,36263],{"class":2313},[79,39485,39486],{"class":81,"line":912},[79,39487,36268],{"class":2313},[79,39489,39490],{"class":81,"line":935},[79,39491,36273],{"class":2313},[79,39493,39494,39496,39498,39500,39502],{"class":81,"line":946},[79,39495,36278],{"class":228},[79,39497,1075],{"class":448},[79,39499,34785],{"class":228},[79,39501,5025],{"class":448},[79,39503,36287],{"class":228},[79,39505,39506],{"class":81,"line":960},[79,39507,36292],{"class":2313},[79,39509,39510,39512,39514,39516,39518],{"class":81,"line":975},[79,39511,36297],{"class":228},[79,39513,1075],{"class":448},[79,39515,36302],{"class":228},[79,39517,759],{"class":96},[79,39519,850],{"class":228},[79,39521,39522],{"class":81,"line":980},[79,39523,542],{"emptyLinePlaceholder":541},[79,39525,39526],{"class":81,"line":1006},[79,39527,36315],{"class":2313},[79,39529,39530,39532,39534,39536,39538],{"class":81,"line":1027},[79,39531,36320],{"class":228},[79,39533,239],{"class":448},[79,39535,36325],{"class":228},[79,39537,2824],{"class":448},[79,39539,36330],{"class":228},[79,39541,39542],{"class":81,"line":1032},[79,39543,36335],{"class":2313},[79,39545,39546,39548,39550,39552],{"class":81,"line":1047},[79,39547,34449],{"class":96},[79,39549,455],{"class":228},[79,39551,36344],{"class":89},[79,39553,36347],{"class":228},[79,39555,39556],{"class":81,"line":1053},[79,39557,542],{"emptyLinePlaceholder":541},[79,39559,39560],{"class":81,"line":1058},[79,39561,36356],{"class":2313},[79,39563,39564,39566,39568,39570,39572],{"class":81,"line":1069},[79,39565,1210],{"class":448},[79,39567,1213],{"class":96},[79,39569,5025],{"class":448},[79,39571,33231],{"class":89},[79,39573,745],{"class":228},[79,39575,39576],{"class":81,"line":1081},[79,39577,36373],{"class":2313},[79,39579,39580,39582,39584],{"class":81,"line":1086},[79,39581,33295],{"class":228},[79,39583,239],{"class":448},[79,39585,39084],{"class":228},[79,39587,39588],{"class":81,"line":1108},[79,39589,36386],{"class":2313},[79,39591,39592],{"class":81,"line":1153},[79,39593,36391],{"class":2313},[79,39595,39596,39598,39600],{"class":81,"line":1158},[79,39597,36396],{"class":228},[79,39599,36399],{"class":89},[79,39601,1150],{"class":228},[79,39603,39604],{"class":81,"line":1180},[79,39605,36406],{"class":2313},[79,39607,39608,39610,39612],{"class":81,"line":1197},[79,39609,36019],{"class":228},[79,39611,239],{"class":448},[79,39613,36415],{"class":228},[79,39615,39616],{"class":81,"line":1202},[79,39617,36420],{"class":2313},[79,39619,39620],{"class":81,"line":1207},[79,39621,36425],{"class":228},[79,39623,39624],{"class":81,"line":1223},[79,39625,542],{"emptyLinePlaceholder":541},[79,39627,39628],{"class":81,"line":18722},[79,39629,36434],{"class":2313},[79,39631,39632],{"class":81,"line":18728},[79,39633,36439],{"class":2313},[79,39635,39636,39638,39640,39642,39644,39646,39648],{"class":81,"line":18739},[79,39637,33243],{"class":228},[79,39639,239],{"class":448},[79,39641,33250],{"class":89},[79,39643,3799],{"class":448},[79,39645,33255],{"class":228},[79,39647,3796],{"class":448},[79,39649,36116],{"class":89},[79,39651,39652,39654,39656],{"class":81,"line":18762},[79,39653,33295],{"class":228},[79,39655,239],{"class":448},[79,39657,34288],{"class":228},[79,39659,39660],{"class":81,"line":18784},[79,39661,36468],{"class":2313},[79,39663,39664],{"class":81,"line":18789},[79,39665,36473],{"class":2313},[79,39667,39668,39670,39672,39674,39676,39678,39680,39682,39684,39686,39688,39690,39692,39694,39696,39698,39700,39702,39704,39706,39708,39710,39712],{"class":81,"line":18795},[79,39669,36478],{"class":228},[79,39671,239],{"class":448},[79,39673,3130],{"class":228},[79,39675,36485],{"class":89},[79,39677,2621],{"class":228},[79,39679,36490],{"class":89},[79,39681,2621],{"class":228},[79,39683,36495],{"class":89},[79,39685,2621],{"class":228},[79,39687,36500],{"class":89},[79,39689,2621],{"class":228},[79,39691,36505],{"class":89},[79,39693,2621],{"class":228},[79,39695,36510],{"class":89},[79,39697,2621],{"class":228},[79,39699,36515],{"class":89},[79,39701,2621],{"class":228},[79,39703,36520],{"class":89},[79,39705,2621],{"class":228},[79,39707,36525],{"class":89},[79,39709,2621],{"class":228},[79,39711,36530],{"class":89},[79,39713,762],{"class":228},[79,39715,39716,39718],{"class":81,"line":18809},[79,39717,36175],{"class":448},[79,39719,34882],{"class":228},[79,39721,39722],{"class":81,"line":18822},[79,39723,36543],{"class":2313},[79,39725,39726,39728,39730,39732],{"class":81,"line":18827},[79,39727,5477],{"class":448},[79,39729,36550],{"class":228},[79,39731,921],{"class":448},[79,39733,36194],{"class":228},[79,39735,39736,39738,39740],{"class":81,"line":18841},[79,39737,34608],{"class":228},[79,39739,239],{"class":448},[79,39741,34613],{"class":228},[79,39743,39744,39746,39748],{"class":81,"line":18846},[79,39745,34623],{"class":228},[79,39747,239],{"class":448},[79,39749,34628],{"class":228},[79,39751,39752],{"class":81,"line":18852},[79,39753,542],{"emptyLinePlaceholder":541},[79,39755,39756],{"class":81,"line":18857},[79,39757,36579],{"class":2313},[79,39759,39760],{"class":81,"line":18871},[79,39761,34873],{"class":228},[79,39763,39764],{"class":81,"line":18876},[79,39765,36588],{"class":2313},[79,39767,39768,39770,39772],{"class":81,"line":18881},[79,39769,34658],{"class":228},[79,39771,239],{"class":448},[79,39773,34663],{"class":228},[79,39775,39776],{"class":81,"line":18895},[79,39777,36601],{"class":2313},[79,39779,39780,39782,39784,39786,39788,39790,39792],{"class":81,"line":18907},[79,39781,34675],{"class":228},[79,39783,239],{"class":448},[79,39785,34680],{"class":228},[79,39787,34683],{"class":7284},[79,39789,239],{"class":448},[79,39791,775],{"class":96},[79,39793,850],{"class":228},[79,39795,39796],{"class":81,"line":18912},[79,39797,36622],{"class":2313},[79,39799,39800,39802,39804],{"class":81,"line":18925},[79,39801,36627],{"class":228},[79,39803,239],{"class":448},[79,39805,36632],{"class":228},[79,39807,39808,39810,39812],{"class":81,"line":18930},[79,39809,36637],{"class":228},[79,39811,239],{"class":448},[79,39813,36642],{"class":228},[79,39815,39816,39818,39820,39822,39824,39826,39828,39830],{"class":81,"line":18935},[79,39817,1111],{"class":96},[79,39819,455],{"class":228},[79,39821,36651],{"class":89},[79,39823,36654],{"class":228},[79,39825,36657],{"class":89},[79,39827,2621],{"class":228},[79,39829,36662],{"class":89},[79,39831,36665],{"class":228},[339,39833,39835],{"id":39834},"_22vgg","2.2.VGG",[24023,39837,39839],{"id":39838},"_221原理","2.2.1.原理",[19,39841,39842],{},[3569,39843],{"alt":57,"src":39844},"\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,39846,39847],{},[3569,39848],{"alt":57,"src":39849},"\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,39851,39852],{},[3569,39853],{"alt":57,"src":39854},"\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,39856,39857],{},"参数详细描述：",[19,39859,39860],{},[3569,39861],{"alt":57,"src":39862},"\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,39864,39865],{},[3569,39866],{"alt":57,"src":39867},"\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,39869,39870],{},[3569,39871],{"alt":57,"src":39872},"\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,39874,39875],{},[3569,39876],{"alt":57,"src":39877},"\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,39879,39880],{},[3569,39881],{"alt":57,"src":39882},"\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",[24023,39884,39886],{"id":39885},"_222代码实现","2.2.2.代码实现",[26,39888,39889],{},[29,39890,39891],{},"网络搭建",[51,39893,39895],{"className":439,"code":39894,"language":441,"meta":57,"style":57},"import torch\nfrom sympy.core.sympify import kernS\nfrom torch import nn\nfrom torchsummary import summary\n\nclass VGG16(nn.Module):\n    def __init__(self):\n        super(VGG16, self).__init__()\n        # 按照块来进行搭建神经网络层,按照序列来写\n        # 这里用的是灰度图\n        self.block1=nn.Sequential(\n            nn.Conv2d(in_channels=1,out_channels=64,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=64,out_channels=64,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 第二层\n        self.block2=nn.Sequential(\n            nn.Conv2d(in_channels=64,out_channels=128,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=128,out_channels=128,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 第三层\n        self.block3=nn.Sequential(\n            nn.Conv2d(in_channels=128,out_channels=256,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=256,out_channels=256,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=256,out_channels=256,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 第四层\n        self.block4=nn.Sequential(\n            nn.Conv2d(in_channels=256,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 第五层\n        self.block5=nn.Sequential(\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 全连接层\n        self.block6=nn.Sequential(\n            # 平展操作\n            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n            nn.Flatten(),\n            nn.Linear(7*7*512,256),\n            nn.ReLU(),\n            nn.Linear(256,128),\n            nn.ReLU(),\n            nn.Linear(128,10)\n        )\n\n        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n        # 循环遍历模型\n        for m in self.modules():\n            # print(m)\n            if isinstance(m,nn.Conv2d):\n                # 凯明初始化,初始化w,对应的激活函数是relu\n                nn.init.kaiming_normal_(m.weight,nonlinearity='relu')\n                # 判断b参数是否存在\n                if m.bias is not None:\n                    # 如果参数不存在的化初始化b=0\n                    nn.init.constant_(m.bias,0)\n            # 全连接层初始化\n            elif isinstance(m,nn.Linear):\n                # 这个初始化方法是利用的是正太分布的方式\n                # 均值为0，方差为0.01\n                nn.init.normal_(m.weight,0,0.01)\n                # 初始化b参数\n                if m.bias is not None:\n                    nn.init.constant_(m.bias,0)\n\n    # 定义前向传播\n    def forward(self,x):\n        x=self.block1(x)\n        x=self.block2(x)\n        x=self.block3(x)\n        x=self.block4(x)\n        x=self.block5(x)\n        x=self.block6(x)\n        return x\n\n# 验证模型\nif __name__=='__main__':\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    print(device)\n    model=VGG16().to(device)\n    print(summary(model,(1,224,224)))\n",[59,39896,39897,39903,39915,39925,39935,39939,39956,39964,39983,39988,39993,40005,40043,40048,40084,40088,40117,40122,40127,40138,40174,40178,40214,40218,40246,40250,40255,40266,40302,40306,40342,40346,40382,40386,40414,40418,40423,40434,40471,40475,40511,40515,40551,40555,40583,40587,40592,40603,40639,40643,40679,40683,40719,40723,40751,40755,40760,40771,40776,40781,40786,40807,40811,40823,40827,40839,40843,40847,40852,40857,40872,40877,40887,40892,40907,40912,40931,40936,40945,40950,40960,40965,40970,40984,40989,41003,41011,41015,41019,41027,41038,41049,41060,41071,41082,41093,41099,41103,41108,41121,41141,41147,41156],{"__ignoreMap":57},[79,39898,39899,39901],{"class":81,"line":82},[79,39900,520],{"class":448},[79,39902,32405],{"class":228},[79,39904,39905,39907,39910,39912],{"class":81,"line":167},[79,39906,32745],{"class":448},[79,39908,39909],{"class":228}," sympy.core.sympify ",[79,39911,520],{"class":448},[79,39913,39914],{"class":228}," kernS\n",[79,39916,39917,39919,39921,39923],{"class":81,"line":178},[79,39918,32745],{"class":448},[79,39920,32748],{"class":228},[79,39922,520],{"class":448},[79,39924,32753],{"class":228},[79,39926,39927,39929,39931,39933],{"class":81,"line":545},[79,39928,32745],{"class":448},[79,39930,32765],{"class":228},[79,39932,520],{"class":448},[79,39934,32770],{"class":228},[79,39936,39937],{"class":81,"line":550},[79,39938,542],{"emptyLinePlaceholder":541},[79,39940,39941,39943,39946,39948,39950,39952,39954],{"class":81,"line":562},[79,39942,16727],{"class":448},[79,39944,39945],{"class":85}," VGG16",[79,39947,455],{"class":228},[79,39949,32786],{"class":85},[79,39951,2798],{"class":228},[79,39953,32791],{"class":85},[79,39955,932],{"class":228},[79,39957,39958,39960,39962],{"class":81,"line":568},[79,39959,32808],{"class":448},[79,39961,32811],{"class":96},[79,39963,32814],{"class":228},[79,39965,39966,39968,39970,39973,39975,39977,39979,39981],{"class":81,"line":574},[79,39967,32824],{"class":96},[79,39969,455],{"class":228},[79,39971,39972],{"class":96},"VGG16",[79,39974,1020],{"class":228},[79,39976,32830],{"class":96},[79,39978,32833],{"class":228},[79,39980,32836],{"class":96},[79,39982,4061],{"class":228},[79,39984,39985],{"class":81,"line":579},[79,39986,39987],{"class":2313},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[79,39989,39990],{"class":81,"line":585},[79,39991,39992],{"class":2313},"        # 这里用的是灰度图\n",[79,39994,39995,39997,40000,40002],{"class":81,"line":591},[79,39996,32852],{"class":96},[79,39998,39999],{"class":228},".block1",[79,40001,239],{"class":448},[79,40003,40004],{"class":228},"nn.Sequential(\n",[79,40006,40007,40010,40012,40014,40016,40018,40020,40022,40024,40026,40028,40030,40032,40034,40036,40038,40040],{"class":81,"line":596},[79,40008,40009],{"class":228},"            nn.Conv2d(",[79,40011,32863],{"class":7284},[79,40013,239],{"class":448},[79,40015,775],{"class":96},[79,40017,2621],{"class":228},[79,40019,32872],{"class":7284},[79,40021,239],{"class":448},[79,40023,2449],{"class":96},[79,40025,2621],{"class":228},[79,40027,32881],{"class":7284},[79,40029,239],{"class":448},[79,40031,970],{"class":96},[79,40033,2621],{"class":228},[79,40035,32890],{"class":7284},[79,40037,239],{"class":448},[79,40039,775],{"class":96},[79,40041,40042],{"class":228},"),\n",[79,40044,40045],{"class":81,"line":602},[79,40046,40047],{"class":228},"            nn.ReLU(),\n",[79,40049,40050,40052,40054,40056,40058,40060,40062,40064,40066,40068,40070,40072,40074,40076,40078,40080,40082],{"class":81,"line":608},[79,40051,40009],{"class":228},[79,40053,32863],{"class":7284},[79,40055,239],{"class":448},[79,40057,2449],{"class":96},[79,40059,2621],{"class":228},[79,40061,32872],{"class":7284},[79,40063,239],{"class":448},[79,40065,2449],{"class":96},[79,40067,2621],{"class":228},[79,40069,32881],{"class":7284},[79,40071,239],{"class":448},[79,40073,970],{"class":96},[79,40075,2621],{"class":228},[79,40077,32890],{"class":7284},[79,40079,239],{"class":448},[79,40081,775],{"class":96},[79,40083,40042],{"class":228},[79,40085,40086],{"class":81,"line":614},[79,40087,40047],{"class":228},[79,40089,40090,40093,40095,40097,40099,40101,40103,40105,40107,40109,40111,40113,40115],{"class":81,"line":619},[79,40091,40092],{"class":228},"            nn.MaxPool2d(",[79,40094,32881],{"class":7284},[79,40096,239],{"class":448},[79,40098,2331],{"class":96},[79,40100,2621],{"class":228},[79,40102,32936],{"class":7284},[79,40104,239],{"class":448},[79,40106,2331],{"class":96},[79,40108,2621],{"class":228},[79,40110,32890],{"class":7284},[79,40112,239],{"class":448},[79,40114,759],{"class":96},[79,40116,850],{"class":228},[79,40118,40119],{"class":81,"line":625},[79,40120,40121],{"class":228},"        )\n",[79,40123,40124],{"class":81,"line":631},[79,40125,40126],{"class":2313},"        # 第二层\n",[79,40128,40129,40131,40134,40136],{"class":81,"line":637},[79,40130,32852],{"class":96},[79,40132,40133],{"class":228},".block2",[79,40135,239],{"class":448},[79,40137,40004],{"class":228},[79,40139,40140,40142,40144,40146,40148,40150,40152,40154,40156,40158,40160,40162,40164,40166,40168,40170,40172],{"class":81,"line":643},[79,40141,40009],{"class":228},[79,40143,32863],{"class":7284},[79,40145,239],{"class":448},[79,40147,2449],{"class":96},[79,40149,2621],{"class":228},[79,40151,32872],{"class":7284},[79,40153,239],{"class":448},[79,40155,34069],{"class":96},[79,40157,2621],{"class":228},[79,40159,32881],{"class":7284},[79,40161,239],{"class":448},[79,40163,970],{"class":96},[79,40165,2621],{"class":228},[79,40167,32890],{"class":7284},[79,40169,239],{"class":448},[79,40171,775],{"class":96},[79,40173,40042],{"class":228},[79,40175,40176],{"class":81,"line":649},[79,40177,40047],{"class":228},[79,40179,40180,40182,40184,40186,40188,40190,40192,40194,40196,40198,40200,40202,40204,40206,40208,40210,40212],{"class":81,"line":655},[79,40181,40009],{"class":228},[79,40183,32863],{"class":7284},[79,40185,239],{"class":448},[79,40187,34069],{"class":96},[79,40189,2621],{"class":228},[79,40191,32872],{"class":7284},[79,40193,239],{"class":448},[79,40195,34069],{"class":96},[79,40197,2621],{"class":228},[79,40199,32881],{"class":7284},[79,40201,239],{"class":448},[79,40203,970],{"class":96},[79,40205,2621],{"class":228},[79,40207,32890],{"class":7284},[79,40209,239],{"class":448},[79,40211,775],{"class":96},[79,40213,40042],{"class":228},[79,40215,40216],{"class":81,"line":660},[79,40217,40047],{"class":228},[79,40219,40220,40222,40224,40226,40228,40230,40232,40234,40236,40238,40240,40242,40244],{"class":81,"line":666},[79,40221,40092],{"class":228},[79,40223,32881],{"class":7284},[79,40225,239],{"class":448},[79,40227,2331],{"class":96},[79,40229,2621],{"class":228},[79,40231,32936],{"class":7284},[79,40233,239],{"class":448},[79,40235,2331],{"class":96},[79,40237,2621],{"class":228},[79,40239,32890],{"class":7284},[79,40241,239],{"class":448},[79,40243,759],{"class":96},[79,40245,850],{"class":228},[79,40247,40248],{"class":81,"line":672},[79,40249,40121],{"class":228},[79,40251,40252],{"class":81,"line":678},[79,40253,40254],{"class":2313},"        # 第三层\n",[79,40256,40257,40259,40262,40264],{"class":81,"line":684},[79,40258,32852],{"class":96},[79,40260,40261],{"class":228},".block3",[79,40263,239],{"class":448},[79,40265,40004],{"class":228},[79,40267,40268,40270,40272,40274,40276,40278,40280,40282,40284,40286,40288,40290,40292,40294,40296,40298,40300],{"class":81,"line":690},[79,40269,40009],{"class":228},[79,40271,32863],{"class":7284},[79,40273,239],{"class":448},[79,40275,34069],{"class":96},[79,40277,2621],{"class":228},[79,40279,32872],{"class":7284},[79,40281,239],{"class":448},[79,40283,36866],{"class":96},[79,40285,2621],{"class":228},[79,40287,32881],{"class":7284},[79,40289,239],{"class":448},[79,40291,970],{"class":96},[79,40293,2621],{"class":228},[79,40295,32890],{"class":7284},[79,40297,239],{"class":448},[79,40299,775],{"class":96},[79,40301,40042],{"class":228},[79,40303,40304],{"class":81,"line":695},[79,40305,40047],{"class":228},[79,40307,40308,40310,40312,40314,40316,40318,40320,40322,40324,40326,40328,40330,40332,40334,40336,40338,40340],{"class":81,"line":700},[79,40309,40009],{"class":228},[79,40311,32863],{"class":7284},[79,40313,239],{"class":448},[79,40315,36866],{"class":96},[79,40317,2621],{"class":228},[79,40319,32872],{"class":7284},[79,40321,239],{"class":448},[79,40323,36866],{"class":96},[79,40325,2621],{"class":228},[79,40327,32881],{"class":7284},[79,40329,239],{"class":448},[79,40331,970],{"class":96},[79,40333,2621],{"class":228},[79,40335,32890],{"class":7284},[79,40337,239],{"class":448},[79,40339,775],{"class":96},[79,40341,40042],{"class":228},[79,40343,40344],{"class":81,"line":712},[79,40345,40047],{"class":228},[79,40347,40348,40350,40352,40354,40356,40358,40360,40362,40364,40366,40368,40370,40372,40374,40376,40378,40380],{"class":81,"line":721},[79,40349,40009],{"class":228},[79,40351,32863],{"class":7284},[79,40353,239],{"class":448},[79,40355,36866],{"class":96},[79,40357,2621],{"class":228},[79,40359,32872],{"class":7284},[79,40361,239],{"class":448},[79,40363,36866],{"class":96},[79,40365,2621],{"class":228},[79,40367,32881],{"class":7284},[79,40369,239],{"class":448},[79,40371,970],{"class":96},[79,40373,2621],{"class":228},[79,40375,32890],{"class":7284},[79,40377,239],{"class":448},[79,40379,775],{"class":96},[79,40381,40042],{"class":228},[79,40383,40384],{"class":81,"line":726},[79,40385,40047],{"class":228},[79,40387,40388,40390,40392,40394,40396,40398,40400,40402,40404,40406,40408,40410,40412],{"class":81,"line":731},[79,40389,40092],{"class":228},[79,40391,32881],{"class":7284},[79,40393,239],{"class":448},[79,40395,2331],{"class":96},[79,40397,2621],{"class":228},[79,40399,32936],{"class":7284},[79,40401,239],{"class":448},[79,40403,2331],{"class":96},[79,40405,2621],{"class":228},[79,40407,32890],{"class":7284},[79,40409,239],{"class":448},[79,40411,759],{"class":96},[79,40413,850],{"class":228},[79,40415,40416],{"class":81,"line":748},[79,40417,40121],{"class":228},[79,40419,40420],{"class":81,"line":765},[79,40421,40422],{"class":2313},"        # 第四层\n",[79,40424,40425,40427,40430,40432],{"class":81,"line":780},[79,40426,32852],{"class":96},[79,40428,40429],{"class":228},".block4",[79,40431,239],{"class":448},[79,40433,40004],{"class":228},[79,40435,40436,40438,40440,40442,40444,40446,40448,40450,40453,40455,40457,40459,40461,40463,40465,40467,40469],{"class":81,"line":811},[79,40437,40009],{"class":228},[79,40439,32863],{"class":7284},[79,40441,239],{"class":448},[79,40443,36866],{"class":96},[79,40445,2621],{"class":228},[79,40447,32872],{"class":7284},[79,40449,239],{"class":448},[79,40451,40452],{"class":96},"512",[79,40454,2621],{"class":228},[79,40456,32881],{"class":7284},[79,40458,239],{"class":448},[79,40460,970],{"class":96},[79,40462,2621],{"class":228},[79,40464,32890],{"class":7284},[79,40466,239],{"class":448},[79,40468,775],{"class":96},[79,40470,40042],{"class":228},[79,40472,40473],{"class":81,"line":816},[79,40474,40047],{"class":228},[79,40476,40477,40479,40481,40483,40485,40487,40489,40491,40493,40495,40497,40499,40501,40503,40505,40507,40509],{"class":81,"line":821},[79,40478,40009],{"class":228},[79,40480,32863],{"class":7284},[79,40482,239],{"class":448},[79,40484,40452],{"class":96},[79,40486,2621],{"class":228},[79,40488,32872],{"class":7284},[79,40490,239],{"class":448},[79,40492,40452],{"class":96},[79,40494,2621],{"class":228},[79,40496,32881],{"class":7284},[79,40498,239],{"class":448},[79,40500,970],{"class":96},[79,40502,2621],{"class":228},[79,40504,32890],{"class":7284},[79,40506,239],{"class":448},[79,40508,775],{"class":96},[79,40510,40042],{"class":228},[79,40512,40513],{"class":81,"line":837},[79,40514,40047],{"class":228},[79,40516,40517,40519,40521,40523,40525,40527,40529,40531,40533,40535,40537,40539,40541,40543,40545,40547,40549],{"class":81,"line":853},[79,40518,40009],{"class":228},[79,40520,32863],{"class":7284},[79,40522,239],{"class":448},[79,40524,40452],{"class":96},[79,40526,2621],{"class":228},[79,40528,32872],{"class":7284},[79,40530,239],{"class":448},[79,40532,40452],{"class":96},[79,40534,2621],{"class":228},[79,40536,32881],{"class":7284},[79,40538,239],{"class":448},[79,40540,970],{"class":96},[79,40542,2621],{"class":228},[79,40544,32890],{"class":7284},[79,40546,239],{"class":448},[79,40548,775],{"class":96},[79,40550,40042],{"class":228},[79,40552,40553],{"class":81,"line":864},[79,40554,40047],{"class":228},[79,40556,40557,40559,40561,40563,40565,40567,40569,40571,40573,40575,40577,40579,40581],{"class":81,"line":869},[79,40558,40092],{"class":228},[79,40560,32881],{"class":7284},[79,40562,239],{"class":448},[79,40564,2331],{"class":96},[79,40566,2621],{"class":228},[79,40568,32936],{"class":7284},[79,40570,239],{"class":448},[79,40572,2331],{"class":96},[79,40574,2621],{"class":228},[79,40576,32890],{"class":7284},[79,40578,239],{"class":448},[79,40580,759],{"class":96},[79,40582,850],{"class":228},[79,40584,40585],{"class":81,"line":885},[79,40586,40121],{"class":228},[79,40588,40589],{"class":81,"line":891},[79,40590,40591],{"class":2313},"        # 第五层\n",[79,40593,40594,40596,40599,40601],{"class":81,"line":896},[79,40595,32852],{"class":96},[79,40597,40598],{"class":228},".block5",[79,40600,239],{"class":448},[79,40602,40004],{"class":228},[79,40604,40605,40607,40609,40611,40613,40615,40617,40619,40621,40623,40625,40627,40629,40631,40633,40635,40637],{"class":81,"line":907},[79,40606,40009],{"class":228},[79,40608,32863],{"class":7284},[79,40610,239],{"class":448},[79,40612,40452],{"class":96},[79,40614,2621],{"class":228},[79,40616,32872],{"class":7284},[79,40618,239],{"class":448},[79,40620,40452],{"class":96},[79,40622,2621],{"class":228},[79,40624,32881],{"class":7284},[79,40626,239],{"class":448},[79,40628,970],{"class":96},[79,40630,2621],{"class":228},[79,40632,32890],{"class":7284},[79,40634,239],{"class":448},[79,40636,775],{"class":96},[79,40638,40042],{"class":228},[79,40640,40641],{"class":81,"line":912},[79,40642,40047],{"class":228},[79,40644,40645,40647,40649,40651,40653,40655,40657,40659,40661,40663,40665,40667,40669,40671,40673,40675,40677],{"class":81,"line":935},[79,40646,40009],{"class":228},[79,40648,32863],{"class":7284},[79,40650,239],{"class":448},[79,40652,40452],{"class":96},[79,40654,2621],{"class":228},[79,40656,32872],{"class":7284},[79,40658,239],{"class":448},[79,40660,40452],{"class":96},[79,40662,2621],{"class":228},[79,40664,32881],{"class":7284},[79,40666,239],{"class":448},[79,40668,970],{"class":96},[79,40670,2621],{"class":228},[79,40672,32890],{"class":7284},[79,40674,239],{"class":448},[79,40676,775],{"class":96},[79,40678,40042],{"class":228},[79,40680,40681],{"class":81,"line":946},[79,40682,40047],{"class":228},[79,40684,40685,40687,40689,40691,40693,40695,40697,40699,40701,40703,40705,40707,40709,40711,40713,40715,40717],{"class":81,"line":960},[79,40686,40009],{"class":228},[79,40688,32863],{"class":7284},[79,40690,239],{"class":448},[79,40692,40452],{"class":96},[79,40694,2621],{"class":228},[79,40696,32872],{"class":7284},[79,40698,239],{"class":448},[79,40700,40452],{"class":96},[79,40702,2621],{"class":228},[79,40704,32881],{"class":7284},[79,40706,239],{"class":448},[79,40708,970],{"class":96},[79,40710,2621],{"class":228},[79,40712,32890],{"class":7284},[79,40714,239],{"class":448},[79,40716,775],{"class":96},[79,40718,40042],{"class":228},[79,40720,40721],{"class":81,"line":975},[79,40722,40047],{"class":228},[79,40724,40725,40727,40729,40731,40733,40735,40737,40739,40741,40743,40745,40747,40749],{"class":81,"line":980},[79,40726,40092],{"class":228},[79,40728,32881],{"class":7284},[79,40730,239],{"class":448},[79,40732,2331],{"class":96},[79,40734,2621],{"class":228},[79,40736,32936],{"class":7284},[79,40738,239],{"class":448},[79,40740,2331],{"class":96},[79,40742,2621],{"class":228},[79,40744,32890],{"class":7284},[79,40746,239],{"class":448},[79,40748,759],{"class":96},[79,40750,850],{"class":228},[79,40752,40753],{"class":81,"line":1006},[79,40754,40121],{"class":228},[79,40756,40757],{"class":81,"line":1027},[79,40758,40759],{"class":2313},"        # 全连接层\n",[79,40761,40762,40764,40767,40769],{"class":81,"line":1032},[79,40763,32852],{"class":96},[79,40765,40766],{"class":228},".block6",[79,40768,239],{"class":448},[79,40770,40004],{"class":228},[79,40772,40773],{"class":81,"line":1047},[79,40774,40775],{"class":2313},"            # 平展操作\n",[79,40777,40778],{"class":81,"line":1053},[79,40779,40780],{"class":2313},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[79,40782,40783],{"class":81,"line":1058},[79,40784,40785],{"class":228},"            nn.Flatten(),\n",[79,40787,40788,40791,40793,40795,40797,40799,40801,40803,40805],{"class":81,"line":1069},[79,40789,40790],{"class":228},"            nn.Linear(",[79,40792,2612],{"class":96},[79,40794,473],{"class":448},[79,40796,2612],{"class":96},[79,40798,473],{"class":448},[79,40800,40452],{"class":96},[79,40802,2621],{"class":228},[79,40804,36866],{"class":96},[79,40806,40042],{"class":228},[79,40808,40809],{"class":81,"line":1081},[79,40810,40047],{"class":228},[79,40812,40813,40815,40817,40819,40821],{"class":81,"line":1086},[79,40814,40790],{"class":228},[79,40816,36866],{"class":96},[79,40818,2621],{"class":228},[79,40820,34069],{"class":96},[79,40822,40042],{"class":228},[79,40824,40825],{"class":81,"line":1108},[79,40826,40047],{"class":228},[79,40828,40829,40831,40833,40835,40837],{"class":81,"line":1153},[79,40830,40790],{"class":228},[79,40832,34069],{"class":96},[79,40834,2621],{"class":228},[79,40836,2689],{"class":96},[79,40838,850],{"class":228},[79,40840,40841],{"class":81,"line":1158},[79,40842,40121],{"class":228},[79,40844,40845],{"class":81,"line":1180},[79,40846,542],{"emptyLinePlaceholder":541},[79,40848,40849],{"class":81,"line":1197},[79,40850,40851],{"class":2313},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[79,40853,40854],{"class":81,"line":1202},[79,40855,40856],{"class":2313},"        # 循环遍历模型\n",[79,40858,40859,40861,40864,40866,40869],{"class":81,"line":1207},[79,40860,5477],{"class":448},[79,40862,40863],{"class":228}," m ",[79,40865,921],{"class":448},[79,40867,40868],{"class":96}," self",[79,40870,40871],{"class":228},".modules():\n",[79,40873,40874],{"class":81,"line":1223},[79,40875,40876],{"class":2313},"            # print(m)\n",[79,40878,40879,40881,40884],{"class":81,"line":18722},[79,40880,6712],{"class":448},[79,40882,40883],{"class":96}," isinstance",[79,40885,40886],{"class":228},"(m,nn.Conv2d):\n",[79,40888,40889],{"class":81,"line":18728},[79,40890,40891],{"class":2313},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[79,40893,40894,40897,40900,40902,40905],{"class":81,"line":18739},[79,40895,40896],{"class":228},"                nn.init.kaiming_normal_(m.weight,",[79,40898,40899],{"class":7284},"nonlinearity",[79,40901,239],{"class":448},[79,40903,40904],{"class":89},"'relu'",[79,40906,850],{"class":228},[79,40908,40909],{"class":81,"line":18762},[79,40910,40911],{"class":2313},"                # 判断b参数是否存在\n",[79,40913,40914,40917,40920,40923,40926,40929],{"class":81,"line":18784},[79,40915,40916],{"class":448},"                if",[79,40918,40919],{"class":228}," m.bias ",[79,40921,40922],{"class":448},"is",[79,40924,40925],{"class":448}," not",[79,40927,40928],{"class":96}," None",[79,40930,745],{"class":228},[79,40932,40933],{"class":81,"line":18789},[79,40934,40935],{"class":2313},"                    # 如果参数不存在的化初始化b=0\n",[79,40937,40938,40941,40943],{"class":81,"line":18795},[79,40939,40940],{"class":228},"                    nn.init.constant_(m.bias,",[79,40942,759],{"class":96},[79,40944,850],{"class":228},[79,40946,40947],{"class":81,"line":18809},[79,40948,40949],{"class":2313},"            # 全连接层初始化\n",[79,40951,40952,40955,40957],{"class":81,"line":18822},[79,40953,40954],{"class":448},"            elif",[79,40956,40883],{"class":96},[79,40958,40959],{"class":228},"(m,nn.Linear):\n",[79,40961,40962],{"class":81,"line":18827},[79,40963,40964],{"class":2313},"                # 这个初始化方法是利用的是正太分布的方式\n",[79,40966,40967],{"class":81,"line":18841},[79,40968,40969],{"class":2313},"                # 均值为0，方差为0.01\n",[79,40971,40972,40975,40977,40979,40982],{"class":81,"line":18846},[79,40973,40974],{"class":228},"                nn.init.normal_(m.weight,",[79,40976,759],{"class":96},[79,40978,2621],{"class":228},[79,40980,40981],{"class":96},"0.01",[79,40983,850],{"class":228},[79,40985,40986],{"class":81,"line":18852},[79,40987,40988],{"class":2313},"                # 初始化b参数\n",[79,40990,40991,40993,40995,40997,40999,41001],{"class":81,"line":18857},[79,40992,40916],{"class":448},[79,40994,40919],{"class":228},[79,40996,40922],{"class":448},[79,40998,40925],{"class":448},[79,41000,40928],{"class":96},[79,41002,745],{"class":228},[79,41004,41005,41007,41009],{"class":81,"line":18871},[79,41006,40940],{"class":228},[79,41008,759],{"class":96},[79,41010,850],{"class":228},[79,41012,41013],{"class":81,"line":18876},[79,41014,542],{"emptyLinePlaceholder":541},[79,41016,41017],{"class":81,"line":18881},[79,41018,37161],{"class":2313},[79,41020,41021,41023,41025],{"class":81,"line":18895},[79,41022,32808],{"class":448},[79,41024,33100],{"class":85},[79,41026,33103],{"class":228},[79,41028,41029,41031,41033,41035],{"class":81,"line":18907},[79,41030,33108],{"class":228},[79,41032,239],{"class":448},[79,41034,32830],{"class":96},[79,41036,41037],{"class":228},".block1(x)\n",[79,41039,41040,41042,41044,41046],{"class":81,"line":18912},[79,41041,33108],{"class":228},[79,41043,239],{"class":448},[79,41045,32830],{"class":96},[79,41047,41048],{"class":228},".block2(x)\n",[79,41050,41051,41053,41055,41057],{"class":81,"line":18925},[79,41052,33108],{"class":228},[79,41054,239],{"class":448},[79,41056,32830],{"class":96},[79,41058,41059],{"class":228},".block3(x)\n",[79,41061,41062,41064,41066,41068],{"class":81,"line":18930},[79,41063,33108],{"class":228},[79,41065,239],{"class":448},[79,41067,32830],{"class":96},[79,41069,41070],{"class":228},".block4(x)\n",[79,41072,41073,41075,41077,41079],{"class":81,"line":18935},[79,41074,33108],{"class":228},[79,41076,239],{"class":448},[79,41078,32830],{"class":96},[79,41080,41081],{"class":228},".block5(x)\n",[79,41083,41084,41086,41088,41090],{"class":81,"line":18940},[79,41085,33108],{"class":228},[79,41087,239],{"class":448},[79,41089,32830],{"class":96},[79,41091,41092],{"class":228},".block6(x)\n",[79,41094,41095,41097],{"class":81,"line":18953},[79,41096,16785],{"class":448},[79,41098,33216],{"class":228},[79,41100,41101],{"class":81,"line":18958},[79,41102,542],{"emptyLinePlaceholder":541},[79,41104,41105],{"class":81,"line":34631},[79,41106,41107],{"class":2313},"# 验证模型\n",[79,41109,41110,41112,41114,41116,41119],{"class":81,"line":34637},[79,41111,1210],{"class":448},[79,41113,1213],{"class":96},[79,41115,5025],{"class":448},[79,41117,41118],{"class":89},"'__main__'",[79,41120,745],{"class":228},[79,41122,41123,41125,41127,41129,41131,41133,41135,41137,41139],{"class":81,"line":34643},[79,41124,33243],{"class":228},[79,41126,239],{"class":448},[79,41128,32460],{"class":228},[79,41130,33250],{"class":89},[79,41132,3799],{"class":448},[79,41134,33255],{"class":228},[79,41136,3796],{"class":448},[79,41138,32485],{"class":89},[79,41140,850],{"class":228},[79,41142,41143,41145],{"class":81,"line":34649},[79,41144,1161],{"class":96},[79,41146,32494],{"class":228},[79,41148,41149,41151,41153],{"class":81,"line":34655},[79,41150,33295],{"class":228},[79,41152,239],{"class":448},[79,41154,41155],{"class":228},"VGG16().to(device)\n",[79,41157,41158,41160,41162,41164,41166,41168,41170,41172],{"class":81,"line":34666},[79,41159,1161],{"class":96},[79,41161,33307],{"class":228},[79,41163,775],{"class":96},[79,41165,2621],{"class":228},[79,41167,33503],{"class":96},[79,41169,2621],{"class":228},[79,41171,33503],{"class":96},[79,41173,33320],{"class":228},[26,41175,41176],{"start":167},[29,41177,41178],{},"训练代码",[19,41180,41181],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,41183,41184],{},"解决方式:",[19,41186,41187],{},"①权重初始化",[51,41189,41191],{"className":439,"code":41190,"language":441,"meta":57,"style":57},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n# 循环遍历模型\nfor m in self.modules():\n    # print(m)\n    if isinstance(m,nn.Conv2d):\n        # 凯明初始化,初始化w,对应的激活函数是relu\n        nn.init.kaiming_normal_(m.weight,nonlinearity='relu')\n        # 判断b参数是否存在\n        if m.bias is not None:\n            # 如果参数不存在的化初始化b=0\n            nn.init.constant_(m.bias,0)\n    # 全连接层初始化\n    elif isinstance(m,nn.Linear):\n        # 这个初始化方法是利用的是正太分布的方式\n        # 均值为0，方差为0.01\n        nn.init.normal_(m.weight,0,0.01)\n        # 初始化b参数\n        if m.bias is not None:\n            nn.init.constant_(m.bias,0)\n",[59,41192,41193,41198,41203,41215,41220,41228,41233,41246,41251,41265,41270,41279,41284,41293,41298,41303,41316,41321,41335],{"__ignoreMap":57},[79,41194,41195],{"class":81,"line":82},[79,41196,41197],{"class":2313},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[79,41199,41200],{"class":81,"line":167},[79,41201,41202],{"class":2313},"# 循环遍历模型\n",[79,41204,41205,41207,41209,41211,41213],{"class":81,"line":178},[79,41206,1638],{"class":448},[79,41208,40863],{"class":228},[79,41210,921],{"class":448},[79,41212,40868],{"class":96},[79,41214,40871],{"class":228},[79,41216,41217],{"class":81,"line":545},[79,41218,41219],{"class":2313},"    # print(m)\n",[79,41221,41222,41224,41226],{"class":81,"line":550},[79,41223,5176],{"class":448},[79,41225,40883],{"class":96},[79,41227,40886],{"class":228},[79,41229,41230],{"class":81,"line":562},[79,41231,41232],{"class":2313},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[79,41234,41235,41238,41240,41242,41244],{"class":81,"line":568},[79,41236,41237],{"class":228},"        nn.init.kaiming_normal_(m.weight,",[79,41239,40899],{"class":7284},[79,41241,239],{"class":448},[79,41243,40904],{"class":89},[79,41245,850],{"class":228},[79,41247,41248],{"class":81,"line":574},[79,41249,41250],{"class":2313},"        # 判断b参数是否存在\n",[79,41252,41253,41255,41257,41259,41261,41263],{"class":81,"line":579},[79,41254,1089],{"class":448},[79,41256,40919],{"class":228},[79,41258,40922],{"class":448},[79,41260,40925],{"class":448},[79,41262,40928],{"class":96},[79,41264,745],{"class":228},[79,41266,41267],{"class":81,"line":585},[79,41268,41269],{"class":2313},"            # 如果参数不存在的化初始化b=0\n",[79,41271,41272,41275,41277],{"class":81,"line":591},[79,41273,41274],{"class":228},"            nn.init.constant_(m.bias,",[79,41276,759],{"class":96},[79,41278,850],{"class":228},[79,41280,41281],{"class":81,"line":596},[79,41282,41283],{"class":2313},"    # 全连接层初始化\n",[79,41285,41286,41289,41291],{"class":81,"line":602},[79,41287,41288],{"class":448},"    elif",[79,41290,40883],{"class":96},[79,41292,40959],{"class":228},[79,41294,41295],{"class":81,"line":608},[79,41296,41297],{"class":2313},"        # 这个初始化方法是利用的是正太分布的方式\n",[79,41299,41300],{"class":81,"line":614},[79,41301,41302],{"class":2313},"        # 均值为0，方差为0.01\n",[79,41304,41305,41308,41310,41312,41314],{"class":81,"line":619},[79,41306,41307],{"class":228},"        nn.init.normal_(m.weight,",[79,41309,759],{"class":96},[79,41311,2621],{"class":228},[79,41313,40981],{"class":96},[79,41315,850],{"class":228},[79,41317,41318],{"class":81,"line":625},[79,41319,41320],{"class":2313},"        # 初始化b参数\n",[79,41322,41323,41325,41327,41329,41331,41333],{"class":81,"line":631},[79,41324,1089],{"class":448},[79,41326,40919],{"class":228},[79,41328,40922],{"class":448},[79,41330,40925],{"class":448},[79,41332,40928],{"class":96},[79,41334,745],{"class":228},[79,41336,41337,41339,41341],{"class":81,"line":637},[79,41338,41274],{"class":228},[79,41340,759],{"class":96},[79,41342,850],{"class":228},[19,41344,41345],{},"②尽可能地增加批次",[19,41347,41348],{},"训练完整代码：",[51,41350,41351],{"className":439,"code":39894,"language":441,"meta":57,"style":57},[59,41352,41353,41359,41369,41379,41389,41393,41409,41417,41435,41439,41443,41453,41489,41493,41529,41533,41561,41565,41569,41579,41615,41619,41655,41659,41687,41691,41695,41705,41741,41745,41781,41785,41821,41825,41853,41857,41861,41871,41907,41911,41947,41951,41987,41991,42019,42023,42027,42037,42073,42077,42113,42117,42153,42157,42185,42189,42193,42203,42207,42211,42215,42235,42239,42251,42255,42267,42271,42275,42279,42283,42295,42299,42307,42311,42323,42327,42341,42345,42353,42357,42365,42369,42373,42385,42389,42403,42411,42415,42419,42427,42437,42447,42457,42467,42477,42487,42493,42497,42501,42513,42533,42539,42547],{"__ignoreMap":57},[79,41354,41355,41357],{"class":81,"line":82},[79,41356,520],{"class":448},[79,41358,32405],{"class":228},[79,41360,41361,41363,41365,41367],{"class":81,"line":167},[79,41362,32745],{"class":448},[79,41364,39909],{"class":228},[79,41366,520],{"class":448},[79,41368,39914],{"class":228},[79,41370,41371,41373,41375,41377],{"class":81,"line":178},[79,41372,32745],{"class":448},[79,41374,32748],{"class":228},[79,41376,520],{"class":448},[79,41378,32753],{"class":228},[79,41380,41381,41383,41385,41387],{"class":81,"line":545},[79,41382,32745],{"class":448},[79,41384,32765],{"class":228},[79,41386,520],{"class":448},[79,41388,32770],{"class":228},[79,41390,41391],{"class":81,"line":550},[79,41392,542],{"emptyLinePlaceholder":541},[79,41394,41395,41397,41399,41401,41403,41405,41407],{"class":81,"line":562},[79,41396,16727],{"class":448},[79,41398,39945],{"class":85},[79,41400,455],{"class":228},[79,41402,32786],{"class":85},[79,41404,2798],{"class":228},[79,41406,32791],{"class":85},[79,41408,932],{"class":228},[79,41410,41411,41413,41415],{"class":81,"line":568},[79,41412,32808],{"class":448},[79,41414,32811],{"class":96},[79,41416,32814],{"class":228},[79,41418,41419,41421,41423,41425,41427,41429,41431,41433],{"class":81,"line":574},[79,41420,32824],{"class":96},[79,41422,455],{"class":228},[79,41424,39972],{"class":96},[79,41426,1020],{"class":228},[79,41428,32830],{"class":96},[79,41430,32833],{"class":228},[79,41432,32836],{"class":96},[79,41434,4061],{"class":228},[79,41436,41437],{"class":81,"line":579},[79,41438,39987],{"class":2313},[79,41440,41441],{"class":81,"line":585},[79,41442,39992],{"class":2313},[79,41444,41445,41447,41449,41451],{"class":81,"line":591},[79,41446,32852],{"class":96},[79,41448,39999],{"class":228},[79,41450,239],{"class":448},[79,41452,40004],{"class":228},[79,41454,41455,41457,41459,41461,41463,41465,41467,41469,41471,41473,41475,41477,41479,41481,41483,41485,41487],{"class":81,"line":596},[79,41456,40009],{"class":228},[79,41458,32863],{"class":7284},[79,41460,239],{"class":448},[79,41462,775],{"class":96},[79,41464,2621],{"class":228},[79,41466,32872],{"class":7284},[79,41468,239],{"class":448},[79,41470,2449],{"class":96},[79,41472,2621],{"class":228},[79,41474,32881],{"class":7284},[79,41476,239],{"class":448},[79,41478,970],{"class":96},[79,41480,2621],{"class":228},[79,41482,32890],{"class":7284},[79,41484,239],{"class":448},[79,41486,775],{"class":96},[79,41488,40042],{"class":228},[79,41490,41491],{"class":81,"line":602},[79,41492,40047],{"class":228},[79,41494,41495,41497,41499,41501,41503,41505,41507,41509,41511,41513,41515,41517,41519,41521,41523,41525,41527],{"class":81,"line":608},[79,41496,40009],{"class":228},[79,41498,32863],{"class":7284},[79,41500,239],{"class":448},[79,41502,2449],{"class":96},[79,41504,2621],{"class":228},[79,41506,32872],{"class":7284},[79,41508,239],{"class":448},[79,41510,2449],{"class":96},[79,41512,2621],{"class":228},[79,41514,32881],{"class":7284},[79,41516,239],{"class":448},[79,41518,970],{"class":96},[79,41520,2621],{"class":228},[79,41522,32890],{"class":7284},[79,41524,239],{"class":448},[79,41526,775],{"class":96},[79,41528,40042],{"class":228},[79,41530,41531],{"class":81,"line":614},[79,41532,40047],{"class":228},[79,41534,41535,41537,41539,41541,41543,41545,41547,41549,41551,41553,41555,41557,41559],{"class":81,"line":619},[79,41536,40092],{"class":228},[79,41538,32881],{"class":7284},[79,41540,239],{"class":448},[79,41542,2331],{"class":96},[79,41544,2621],{"class":228},[79,41546,32936],{"class":7284},[79,41548,239],{"class":448},[79,41550,2331],{"class":96},[79,41552,2621],{"class":228},[79,41554,32890],{"class":7284},[79,41556,239],{"class":448},[79,41558,759],{"class":96},[79,41560,850],{"class":228},[79,41562,41563],{"class":81,"line":625},[79,41564,40121],{"class":228},[79,41566,41567],{"class":81,"line":631},[79,41568,40126],{"class":2313},[79,41570,41571,41573,41575,41577],{"class":81,"line":637},[79,41572,32852],{"class":96},[79,41574,40133],{"class":228},[79,41576,239],{"class":448},[79,41578,40004],{"class":228},[79,41580,41581,41583,41585,41587,41589,41591,41593,41595,41597,41599,41601,41603,41605,41607,41609,41611,41613],{"class":81,"line":643},[79,41582,40009],{"class":228},[79,41584,32863],{"class":7284},[79,41586,239],{"class":448},[79,41588,2449],{"class":96},[79,41590,2621],{"class":228},[79,41592,32872],{"class":7284},[79,41594,239],{"class":448},[79,41596,34069],{"class":96},[79,41598,2621],{"class":228},[79,41600,32881],{"class":7284},[79,41602,239],{"class":448},[79,41604,970],{"class":96},[79,41606,2621],{"class":228},[79,41608,32890],{"class":7284},[79,41610,239],{"class":448},[79,41612,775],{"class":96},[79,41614,40042],{"class":228},[79,41616,41617],{"class":81,"line":649},[79,41618,40047],{"class":228},[79,41620,41621,41623,41625,41627,41629,41631,41633,41635,41637,41639,41641,41643,41645,41647,41649,41651,41653],{"class":81,"line":655},[79,41622,40009],{"class":228},[79,41624,32863],{"class":7284},[79,41626,239],{"class":448},[79,41628,34069],{"class":96},[79,41630,2621],{"class":228},[79,41632,32872],{"class":7284},[79,41634,239],{"class":448},[79,41636,34069],{"class":96},[79,41638,2621],{"class":228},[79,41640,32881],{"class":7284},[79,41642,239],{"class":448},[79,41644,970],{"class":96},[79,41646,2621],{"class":228},[79,41648,32890],{"class":7284},[79,41650,239],{"class":448},[79,41652,775],{"class":96},[79,41654,40042],{"class":228},[79,41656,41657],{"class":81,"line":660},[79,41658,40047],{"class":228},[79,41660,41661,41663,41665,41667,41669,41671,41673,41675,41677,41679,41681,41683,41685],{"class":81,"line":666},[79,41662,40092],{"class":228},[79,41664,32881],{"class":7284},[79,41666,239],{"class":448},[79,41668,2331],{"class":96},[79,41670,2621],{"class":228},[79,41672,32936],{"class":7284},[79,41674,239],{"class":448},[79,41676,2331],{"class":96},[79,41678,2621],{"class":228},[79,41680,32890],{"class":7284},[79,41682,239],{"class":448},[79,41684,759],{"class":96},[79,41686,850],{"class":228},[79,41688,41689],{"class":81,"line":672},[79,41690,40121],{"class":228},[79,41692,41693],{"class":81,"line":678},[79,41694,40254],{"class":2313},[79,41696,41697,41699,41701,41703],{"class":81,"line":684},[79,41698,32852],{"class":96},[79,41700,40261],{"class":228},[79,41702,239],{"class":448},[79,41704,40004],{"class":228},[79,41706,41707,41709,41711,41713,41715,41717,41719,41721,41723,41725,41727,41729,41731,41733,41735,41737,41739],{"class":81,"line":690},[79,41708,40009],{"class":228},[79,41710,32863],{"class":7284},[79,41712,239],{"class":448},[79,41714,34069],{"class":96},[79,41716,2621],{"class":228},[79,41718,32872],{"class":7284},[79,41720,239],{"class":448},[79,41722,36866],{"class":96},[79,41724,2621],{"class":228},[79,41726,32881],{"class":7284},[79,41728,239],{"class":448},[79,41730,970],{"class":96},[79,41732,2621],{"class":228},[79,41734,32890],{"class":7284},[79,41736,239],{"class":448},[79,41738,775],{"class":96},[79,41740,40042],{"class":228},[79,41742,41743],{"class":81,"line":695},[79,41744,40047],{"class":228},[79,41746,41747,41749,41751,41753,41755,41757,41759,41761,41763,41765,41767,41769,41771,41773,41775,41777,41779],{"class":81,"line":700},[79,41748,40009],{"class":228},[79,41750,32863],{"class":7284},[79,41752,239],{"class":448},[79,41754,36866],{"class":96},[79,41756,2621],{"class":228},[79,41758,32872],{"class":7284},[79,41760,239],{"class":448},[79,41762,36866],{"class":96},[79,41764,2621],{"class":228},[79,41766,32881],{"class":7284},[79,41768,239],{"class":448},[79,41770,970],{"class":96},[79,41772,2621],{"class":228},[79,41774,32890],{"class":7284},[79,41776,239],{"class":448},[79,41778,775],{"class":96},[79,41780,40042],{"class":228},[79,41782,41783],{"class":81,"line":712},[79,41784,40047],{"class":228},[79,41786,41787,41789,41791,41793,41795,41797,41799,41801,41803,41805,41807,41809,41811,41813,41815,41817,41819],{"class":81,"line":721},[79,41788,40009],{"class":228},[79,41790,32863],{"class":7284},[79,41792,239],{"class":448},[79,41794,36866],{"class":96},[79,41796,2621],{"class":228},[79,41798,32872],{"class":7284},[79,41800,239],{"class":448},[79,41802,36866],{"class":96},[79,41804,2621],{"class":228},[79,41806,32881],{"class":7284},[79,41808,239],{"class":448},[79,41810,970],{"class":96},[79,41812,2621],{"class":228},[79,41814,32890],{"class":7284},[79,41816,239],{"class":448},[79,41818,775],{"class":96},[79,41820,40042],{"class":228},[79,41822,41823],{"class":81,"line":726},[79,41824,40047],{"class":228},[79,41826,41827,41829,41831,41833,41835,41837,41839,41841,41843,41845,41847,41849,41851],{"class":81,"line":731},[79,41828,40092],{"class":228},[79,41830,32881],{"class":7284},[79,41832,239],{"class":448},[79,41834,2331],{"class":96},[79,41836,2621],{"class":228},[79,41838,32936],{"class":7284},[79,41840,239],{"class":448},[79,41842,2331],{"class":96},[79,41844,2621],{"class":228},[79,41846,32890],{"class":7284},[79,41848,239],{"class":448},[79,41850,759],{"class":96},[79,41852,850],{"class":228},[79,41854,41855],{"class":81,"line":748},[79,41856,40121],{"class":228},[79,41858,41859],{"class":81,"line":765},[79,41860,40422],{"class":2313},[79,41862,41863,41865,41867,41869],{"class":81,"line":780},[79,41864,32852],{"class":96},[79,41866,40429],{"class":228},[79,41868,239],{"class":448},[79,41870,40004],{"class":228},[79,41872,41873,41875,41877,41879,41881,41883,41885,41887,41889,41891,41893,41895,41897,41899,41901,41903,41905],{"class":81,"line":811},[79,41874,40009],{"class":228},[79,41876,32863],{"class":7284},[79,41878,239],{"class":448},[79,41880,36866],{"class":96},[79,41882,2621],{"class":228},[79,41884,32872],{"class":7284},[79,41886,239],{"class":448},[79,41888,40452],{"class":96},[79,41890,2621],{"class":228},[79,41892,32881],{"class":7284},[79,41894,239],{"class":448},[79,41896,970],{"class":96},[79,41898,2621],{"class":228},[79,41900,32890],{"class":7284},[79,41902,239],{"class":448},[79,41904,775],{"class":96},[79,41906,40042],{"class":228},[79,41908,41909],{"class":81,"line":816},[79,41910,40047],{"class":228},[79,41912,41913,41915,41917,41919,41921,41923,41925,41927,41929,41931,41933,41935,41937,41939,41941,41943,41945],{"class":81,"line":821},[79,41914,40009],{"class":228},[79,41916,32863],{"class":7284},[79,41918,239],{"class":448},[79,41920,40452],{"class":96},[79,41922,2621],{"class":228},[79,41924,32872],{"class":7284},[79,41926,239],{"class":448},[79,41928,40452],{"class":96},[79,41930,2621],{"class":228},[79,41932,32881],{"class":7284},[79,41934,239],{"class":448},[79,41936,970],{"class":96},[79,41938,2621],{"class":228},[79,41940,32890],{"class":7284},[79,41942,239],{"class":448},[79,41944,775],{"class":96},[79,41946,40042],{"class":228},[79,41948,41949],{"class":81,"line":837},[79,41950,40047],{"class":228},[79,41952,41953,41955,41957,41959,41961,41963,41965,41967,41969,41971,41973,41975,41977,41979,41981,41983,41985],{"class":81,"line":853},[79,41954,40009],{"class":228},[79,41956,32863],{"class":7284},[79,41958,239],{"class":448},[79,41960,40452],{"class":96},[79,41962,2621],{"class":228},[79,41964,32872],{"class":7284},[79,41966,239],{"class":448},[79,41968,40452],{"class":96},[79,41970,2621],{"class":228},[79,41972,32881],{"class":7284},[79,41974,239],{"class":448},[79,41976,970],{"class":96},[79,41978,2621],{"class":228},[79,41980,32890],{"class":7284},[79,41982,239],{"class":448},[79,41984,775],{"class":96},[79,41986,40042],{"class":228},[79,41988,41989],{"class":81,"line":864},[79,41990,40047],{"class":228},[79,41992,41993,41995,41997,41999,42001,42003,42005,42007,42009,42011,42013,42015,42017],{"class":81,"line":869},[79,41994,40092],{"class":228},[79,41996,32881],{"class":7284},[79,41998,239],{"class":448},[79,42000,2331],{"class":96},[79,42002,2621],{"class":228},[79,42004,32936],{"class":7284},[79,42006,239],{"class":448},[79,42008,2331],{"class":96},[79,42010,2621],{"class":228},[79,42012,32890],{"class":7284},[79,42014,239],{"class":448},[79,42016,759],{"class":96},[79,42018,850],{"class":228},[79,42020,42021],{"class":81,"line":885},[79,42022,40121],{"class":228},[79,42024,42025],{"class":81,"line":891},[79,42026,40591],{"class":2313},[79,42028,42029,42031,42033,42035],{"class":81,"line":896},[79,42030,32852],{"class":96},[79,42032,40598],{"class":228},[79,42034,239],{"class":448},[79,42036,40004],{"class":228},[79,42038,42039,42041,42043,42045,42047,42049,42051,42053,42055,42057,42059,42061,42063,42065,42067,42069,42071],{"class":81,"line":907},[79,42040,40009],{"class":228},[79,42042,32863],{"class":7284},[79,42044,239],{"class":448},[79,42046,40452],{"class":96},[79,42048,2621],{"class":228},[79,42050,32872],{"class":7284},[79,42052,239],{"class":448},[79,42054,40452],{"class":96},[79,42056,2621],{"class":228},[79,42058,32881],{"class":7284},[79,42060,239],{"class":448},[79,42062,970],{"class":96},[79,42064,2621],{"class":228},[79,42066,32890],{"class":7284},[79,42068,239],{"class":448},[79,42070,775],{"class":96},[79,42072,40042],{"class":228},[79,42074,42075],{"class":81,"line":912},[79,42076,40047],{"class":228},[79,42078,42079,42081,42083,42085,42087,42089,42091,42093,42095,42097,42099,42101,42103,42105,42107,42109,42111],{"class":81,"line":935},[79,42080,40009],{"class":228},[79,42082,32863],{"class":7284},[79,42084,239],{"class":448},[79,42086,40452],{"class":96},[79,42088,2621],{"class":228},[79,42090,32872],{"class":7284},[79,42092,239],{"class":448},[79,42094,40452],{"class":96},[79,42096,2621],{"class":228},[79,42098,32881],{"class":7284},[79,42100,239],{"class":448},[79,42102,970],{"class":96},[79,42104,2621],{"class":228},[79,42106,32890],{"class":7284},[79,42108,239],{"class":448},[79,42110,775],{"class":96},[79,42112,40042],{"class":228},[79,42114,42115],{"class":81,"line":946},[79,42116,40047],{"class":228},[79,42118,42119,42121,42123,42125,42127,42129,42131,42133,42135,42137,42139,42141,42143,42145,42147,42149,42151],{"class":81,"line":960},[79,42120,40009],{"class":228},[79,42122,32863],{"class":7284},[79,42124,239],{"class":448},[79,42126,40452],{"class":96},[79,42128,2621],{"class":228},[79,42130,32872],{"class":7284},[79,42132,239],{"class":448},[79,42134,40452],{"class":96},[79,42136,2621],{"class":228},[79,42138,32881],{"class":7284},[79,42140,239],{"class":448},[79,42142,970],{"class":96},[79,42144,2621],{"class":228},[79,42146,32890],{"class":7284},[79,42148,239],{"class":448},[79,42150,775],{"class":96},[79,42152,40042],{"class":228},[79,42154,42155],{"class":81,"line":975},[79,42156,40047],{"class":228},[79,42158,42159,42161,42163,42165,42167,42169,42171,42173,42175,42177,42179,42181,42183],{"class":81,"line":980},[79,42160,40092],{"class":228},[79,42162,32881],{"class":7284},[79,42164,239],{"class":448},[79,42166,2331],{"class":96},[79,42168,2621],{"class":228},[79,42170,32936],{"class":7284},[79,42172,239],{"class":448},[79,42174,2331],{"class":96},[79,42176,2621],{"class":228},[79,42178,32890],{"class":7284},[79,42180,239],{"class":448},[79,42182,759],{"class":96},[79,42184,850],{"class":228},[79,42186,42187],{"class":81,"line":1006},[79,42188,40121],{"class":228},[79,42190,42191],{"class":81,"line":1027},[79,42192,40759],{"class":2313},[79,42194,42195,42197,42199,42201],{"class":81,"line":1032},[79,42196,32852],{"class":96},[79,42198,40766],{"class":228},[79,42200,239],{"class":448},[79,42202,40004],{"class":228},[79,42204,42205],{"class":81,"line":1047},[79,42206,40775],{"class":2313},[79,42208,42209],{"class":81,"line":1053},[79,42210,40780],{"class":2313},[79,42212,42213],{"class":81,"line":1058},[79,42214,40785],{"class":228},[79,42216,42217,42219,42221,42223,42225,42227,42229,42231,42233],{"class":81,"line":1069},[79,42218,40790],{"class":228},[79,42220,2612],{"class":96},[79,42222,473],{"class":448},[79,42224,2612],{"class":96},[79,42226,473],{"class":448},[79,42228,40452],{"class":96},[79,42230,2621],{"class":228},[79,42232,36866],{"class":96},[79,42234,40042],{"class":228},[79,42236,42237],{"class":81,"line":1081},[79,42238,40047],{"class":228},[79,42240,42241,42243,42245,42247,42249],{"class":81,"line":1086},[79,42242,40790],{"class":228},[79,42244,36866],{"class":96},[79,42246,2621],{"class":228},[79,42248,34069],{"class":96},[79,42250,40042],{"class":228},[79,42252,42253],{"class":81,"line":1108},[79,42254,40047],{"class":228},[79,42256,42257,42259,42261,42263,42265],{"class":81,"line":1153},[79,42258,40790],{"class":228},[79,42260,34069],{"class":96},[79,42262,2621],{"class":228},[79,42264,2689],{"class":96},[79,42266,850],{"class":228},[79,42268,42269],{"class":81,"line":1158},[79,42270,40121],{"class":228},[79,42272,42273],{"class":81,"line":1180},[79,42274,542],{"emptyLinePlaceholder":541},[79,42276,42277],{"class":81,"line":1197},[79,42278,40851],{"class":2313},[79,42280,42281],{"class":81,"line":1202},[79,42282,40856],{"class":2313},[79,42284,42285,42287,42289,42291,42293],{"class":81,"line":1207},[79,42286,5477],{"class":448},[79,42288,40863],{"class":228},[79,42290,921],{"class":448},[79,42292,40868],{"class":96},[79,42294,40871],{"class":228},[79,42296,42297],{"class":81,"line":1223},[79,42298,40876],{"class":2313},[79,42300,42301,42303,42305],{"class":81,"line":18722},[79,42302,6712],{"class":448},[79,42304,40883],{"class":96},[79,42306,40886],{"class":228},[79,42308,42309],{"class":81,"line":18728},[79,42310,40891],{"class":2313},[79,42312,42313,42315,42317,42319,42321],{"class":81,"line":18739},[79,42314,40896],{"class":228},[79,42316,40899],{"class":7284},[79,42318,239],{"class":448},[79,42320,40904],{"class":89},[79,42322,850],{"class":228},[79,42324,42325],{"class":81,"line":18762},[79,42326,40911],{"class":2313},[79,42328,42329,42331,42333,42335,42337,42339],{"class":81,"line":18784},[79,42330,40916],{"class":448},[79,42332,40919],{"class":228},[79,42334,40922],{"class":448},[79,42336,40925],{"class":448},[79,42338,40928],{"class":96},[79,42340,745],{"class":228},[79,42342,42343],{"class":81,"line":18789},[79,42344,40935],{"class":2313},[79,42346,42347,42349,42351],{"class":81,"line":18795},[79,42348,40940],{"class":228},[79,42350,759],{"class":96},[79,42352,850],{"class":228},[79,42354,42355],{"class":81,"line":18809},[79,42356,40949],{"class":2313},[79,42358,42359,42361,42363],{"class":81,"line":18822},[79,42360,40954],{"class":448},[79,42362,40883],{"class":96},[79,42364,40959],{"class":228},[79,42366,42367],{"class":81,"line":18827},[79,42368,40964],{"class":2313},[79,42370,42371],{"class":81,"line":18841},[79,42372,40969],{"class":2313},[79,42374,42375,42377,42379,42381,42383],{"class":81,"line":18846},[79,42376,40974],{"class":228},[79,42378,759],{"class":96},[79,42380,2621],{"class":228},[79,42382,40981],{"class":96},[79,42384,850],{"class":228},[79,42386,42387],{"class":81,"line":18852},[79,42388,40988],{"class":2313},[79,42390,42391,42393,42395,42397,42399,42401],{"class":81,"line":18857},[79,42392,40916],{"class":448},[79,42394,40919],{"class":228},[79,42396,40922],{"class":448},[79,42398,40925],{"class":448},[79,42400,40928],{"class":96},[79,42402,745],{"class":228},[79,42404,42405,42407,42409],{"class":81,"line":18871},[79,42406,40940],{"class":228},[79,42408,759],{"class":96},[79,42410,850],{"class":228},[79,42412,42413],{"class":81,"line":18876},[79,42414,542],{"emptyLinePlaceholder":541},[79,42416,42417],{"class":81,"line":18881},[79,42418,37161],{"class":2313},[79,42420,42421,42423,42425],{"class":81,"line":18895},[79,42422,32808],{"class":448},[79,42424,33100],{"class":85},[79,42426,33103],{"class":228},[79,42428,42429,42431,42433,42435],{"class":81,"line":18907},[79,42430,33108],{"class":228},[79,42432,239],{"class":448},[79,42434,32830],{"class":96},[79,42436,41037],{"class":228},[79,42438,42439,42441,42443,42445],{"class":81,"line":18912},[79,42440,33108],{"class":228},[79,42442,239],{"class":448},[79,42444,32830],{"class":96},[79,42446,41048],{"class":228},[79,42448,42449,42451,42453,42455],{"class":81,"line":18925},[79,42450,33108],{"class":228},[79,42452,239],{"class":448},[79,42454,32830],{"class":96},[79,42456,41059],{"class":228},[79,42458,42459,42461,42463,42465],{"class":81,"line":18930},[79,42460,33108],{"class":228},[79,42462,239],{"class":448},[79,42464,32830],{"class":96},[79,42466,41070],{"class":228},[79,42468,42469,42471,42473,42475],{"class":81,"line":18935},[79,42470,33108],{"class":228},[79,42472,239],{"class":448},[79,42474,32830],{"class":96},[79,42476,41081],{"class":228},[79,42478,42479,42481,42483,42485],{"class":81,"line":18940},[79,42480,33108],{"class":228},[79,42482,239],{"class":448},[79,42484,32830],{"class":96},[79,42486,41092],{"class":228},[79,42488,42489,42491],{"class":81,"line":18953},[79,42490,16785],{"class":448},[79,42492,33216],{"class":228},[79,42494,42495],{"class":81,"line":18958},[79,42496,542],{"emptyLinePlaceholder":541},[79,42498,42499],{"class":81,"line":34631},[79,42500,41107],{"class":2313},[79,42502,42503,42505,42507,42509,42511],{"class":81,"line":34637},[79,42504,1210],{"class":448},[79,42506,1213],{"class":96},[79,42508,5025],{"class":448},[79,42510,41118],{"class":89},[79,42512,745],{"class":228},[79,42514,42515,42517,42519,42521,42523,42525,42527,42529,42531],{"class":81,"line":34643},[79,42516,33243],{"class":228},[79,42518,239],{"class":448},[79,42520,32460],{"class":228},[79,42522,33250],{"class":89},[79,42524,3799],{"class":448},[79,42526,33255],{"class":228},[79,42528,3796],{"class":448},[79,42530,32485],{"class":89},[79,42532,850],{"class":228},[79,42534,42535,42537],{"class":81,"line":34649},[79,42536,1161],{"class":96},[79,42538,32494],{"class":228},[79,42540,42541,42543,42545],{"class":81,"line":34655},[79,42542,33295],{"class":228},[79,42544,239],{"class":448},[79,42546,41155],{"class":228},[79,42548,42549,42551,42553,42555,42557,42559,42561,42563],{"class":81,"line":34666},[79,42550,1161],{"class":96},[79,42552,33307],{"class":228},[79,42554,775],{"class":96},[79,42556,2621],{"class":228},[79,42558,33503],{"class":96},[79,42560,2621],{"class":228},[79,42562,33503],{"class":96},[79,42564,33320],{"class":228},[26,42566,42567],{"start":178},[29,42568,42569],{},"测试代码",[51,42571,42573],{"className":439,"code":42572,"language":441,"meta":57,"style":57},"import torch\nimport torch.utils.data as Data\nfrom torchvision import transforms\n# 导入数据集\nfrom torchvision.datasets import FashionMNIST\nfrom model import VGG16\n\n\n# 测试数据处理\ndef test_data_process():\n    test_data=FashionMNIST(root='.\u002Fdata',\n                           train=False,\n                           transform=transforms.Compose([transforms.Resize(size=224),transforms.ToTensor()]),\n                           download=True)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=VGG16()\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['T-shirt\u002Ftop','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[59,42574,42575,42581,42591,42601,42605,42615,42626,42630,42634,42638,42646,42662,42672,42688,42698,42712,42716,42726,42736,42746,42752,42756,42760,42768,42772,42788,42796,42800,42804,42812,42820,42824,42828,42832,42836,42842,42846,42856,42864,42872,42876,42880,42884,42892,42896,42912,42916,42920,42924,42936,42940,42952,42956,42960,42972,42976,42986,42990,42994,43006,43010,43019,43023,43027,43035,43039,43047,43051,43055,43059,43063,43067,43083,43091,43095,43099,43147,43153,43157,43167,43175,43183,43187,43191,43195,43199,43207,43211,43227,43231,43239,43247],{"__ignoreMap":57},[79,42576,42577,42579],{"class":81,"line":82},[79,42578,520],{"class":448},[79,42580,32405],{"class":228},[79,42582,42583,42585,42587,42589],{"class":81,"line":167},[79,42584,520],{"class":448},[79,42586,33417],{"class":228},[79,42588,533],{"class":448},[79,42590,33422],{"class":228},[79,42592,42593,42595,42597,42599],{"class":81,"line":178},[79,42594,32745],{"class":448},[79,42596,33400],{"class":228},[79,42598,520],{"class":448},[79,42600,33405],{"class":228},[79,42602,42603],{"class":81,"line":545},[79,42604,35919],{"class":2313},[79,42606,42607,42609,42611,42613],{"class":81,"line":550},[79,42608,32745],{"class":448},[79,42610,33373],{"class":228},[79,42612,520],{"class":448},[79,42614,33378],{"class":228},[79,42616,42617,42619,42621,42623],{"class":81,"line":562},[79,42618,32745],{"class":448},[79,42620,33915],{"class":228},[79,42622,520],{"class":448},[79,42624,42625],{"class":96}," VGG16\n",[79,42627,42628],{"class":81,"line":568},[79,42629,542],{"emptyLinePlaceholder":541},[79,42631,42632],{"class":81,"line":574},[79,42633,542],{"emptyLinePlaceholder":541},[79,42635,42636],{"class":81,"line":579},[79,42637,35948],{"class":2313},[79,42639,42640,42642,42644],{"class":81,"line":585},[79,42641,703],{"class":448},[79,42643,35955],{"class":85},[79,42645,33953],{"class":228},[79,42647,42648,42650,42652,42654,42656,42658,42660],{"class":81,"line":591},[79,42649,35962],{"class":228},[79,42651,239],{"class":448},[79,42653,33457],{"class":228},[79,42655,33460],{"class":7284},[79,42657,239],{"class":448},[79,42659,33465],{"class":89},[79,42661,33468],{"class":228},[79,42663,42664,42666,42668,42670],{"class":81,"line":596},[79,42665,35979],{"class":7284},[79,42667,239],{"class":448},[79,42669,35984],{"class":96},[79,42671,33468],{"class":228},[79,42673,42674,42676,42678,42680,42682,42684,42686],{"class":81,"line":602},[79,42675,35991],{"class":7284},[79,42677,239],{"class":448},[79,42679,33495],{"class":228},[79,42681,33498],{"class":7284},[79,42683,239],{"class":448},[79,42685,33503],{"class":96},[79,42687,33506],{"class":228},[79,42689,42690,42692,42694,42696],{"class":81,"line":608},[79,42691,36008],{"class":7284},[79,42693,239],{"class":448},[79,42695,33478],{"class":96},[79,42697,850],{"class":228},[79,42699,42700,42702,42704,42706,42708,42710],{"class":81,"line":614},[79,42701,36019],{"class":228},[79,42703,239],{"class":448},[79,42705,33536],{"class":228},[79,42707,33539],{"class":7284},[79,42709,239],{"class":448},[79,42711,36030],{"class":228},[79,42713,42714],{"class":81,"line":619},[79,42715,36035],{"class":2313},[79,42717,42718,42720,42722,42724],{"class":81,"line":625},[79,42719,36040],{"class":7284},[79,42721,239],{"class":448},[79,42723,775],{"class":96},[79,42725,33468],{"class":228},[79,42727,42728,42730,42732,42734],{"class":81,"line":631},[79,42729,36051],{"class":7284},[79,42731,239],{"class":448},[79,42733,33478],{"class":96},[79,42735,33468],{"class":228},[79,42737,42738,42740,42742,42744],{"class":81,"line":637},[79,42739,36062],{"class":7284},[79,42741,239],{"class":448},[79,42743,759],{"class":96},[79,42745,850],{"class":228},[79,42747,42748,42750],{"class":81,"line":643},[79,42749,715],{"class":448},[79,42751,36075],{"class":228},[79,42753,42754],{"class":81,"line":649},[79,42755,542],{"emptyLinePlaceholder":541},[79,42757,42758],{"class":81,"line":655},[79,42759,36084],{"class":2313},[79,42761,42762,42764,42766],{"class":81,"line":660},[79,42763,703],{"class":448},[79,42765,36091],{"class":85},[79,42767,36094],{"class":228},[79,42769,42770],{"class":81,"line":666},[79,42771,36099],{"class":2313},[79,42773,42774,42776,42778,42780,42782,42784,42786],{"class":81,"line":672},[79,42775,33243],{"class":228},[79,42777,239],{"class":448},[79,42779,33250],{"class":89},[79,42781,3799],{"class":448},[79,42783,33255],{"class":228},[79,42785,3796],{"class":448},[79,42787,36116],{"class":89},[79,42789,42790,42792,42794],{"class":81,"line":678},[79,42791,33295],{"class":228},[79,42793,239],{"class":448},[79,42795,34288],{"class":228},[79,42797,42798],{"class":81,"line":684},[79,42799,542],{"emptyLinePlaceholder":541},[79,42801,42802],{"class":81,"line":690},[79,42803,36133],{"class":2313},[79,42805,42806,42808,42810],{"class":81,"line":695},[79,42807,36138],{"class":228},[79,42809,239],{"class":448},[79,42811,34341],{"class":96},[79,42813,42814,42816,42818],{"class":81,"line":700},[79,42815,36147],{"class":228},[79,42817,239],{"class":448},[79,42819,5160],{"class":96},[79,42821,42822],{"class":81,"line":712},[79,42823,542],{"emptyLinePlaceholder":541},[79,42825,42826],{"class":81,"line":721},[79,42827,36160],{"class":2313},[79,42829,42830],{"class":81,"line":726},[79,42831,36165],{"class":2313},[79,42833,42834],{"class":81,"line":731},[79,42835,36170],{"class":2313},[79,42837,42838,42840],{"class":81,"line":748},[79,42839,36175],{"class":448},[79,42841,34882],{"class":228},[79,42843,42844],{"class":81,"line":765},[79,42845,36182],{"class":2313},[79,42847,42848,42850,42852,42854],{"class":81,"line":780},[79,42849,5477],{"class":448},[79,42851,36189],{"class":228},[79,42853,921],{"class":448},[79,42855,36194],{"class":228},[79,42857,42858,42860,42862],{"class":81,"line":811},[79,42859,36199],{"class":228},[79,42861,239],{"class":448},[79,42863,36204],{"class":228},[79,42865,42866,42868,42870],{"class":81,"line":816},[79,42867,36209],{"class":228},[79,42869,239],{"class":448},[79,42871,36214],{"class":228},[79,42873,42874],{"class":81,"line":821},[79,42875,36219],{"class":2313},[79,42877,42878],{"class":81,"line":837},[79,42879,34873],{"class":228},[79,42881,42882],{"class":81,"line":853},[79,42883,36228],{"class":2313},[79,42885,42886,42888,42890],{"class":81,"line":864},[79,42887,34658],{"class":228},[79,42889,239],{"class":448},[79,42891,36237],{"class":228},[79,42893,42894],{"class":81,"line":869},[79,42895,36242],{"class":2313},[79,42897,42898,42900,42902,42904,42906,42908,42910],{"class":81,"line":885},[79,42899,34675],{"class":228},[79,42901,239],{"class":448},[79,42903,34680],{"class":228},[79,42905,34683],{"class":7284},[79,42907,239],{"class":448},[79,42909,775],{"class":96},[79,42911,850],{"class":228},[79,42913,42914],{"class":81,"line":891},[79,42915,36263],{"class":2313},[79,42917,42918],{"class":81,"line":896},[79,42919,36268],{"class":2313},[79,42921,42922],{"class":81,"line":907},[79,42923,36273],{"class":2313},[79,42925,42926,42928,42930,42932,42934],{"class":81,"line":912},[79,42927,36278],{"class":228},[79,42929,1075],{"class":448},[79,42931,34785],{"class":228},[79,42933,5025],{"class":448},[79,42935,36287],{"class":228},[79,42937,42938],{"class":81,"line":935},[79,42939,36292],{"class":2313},[79,42941,42942,42944,42946,42948,42950],{"class":81,"line":946},[79,42943,36297],{"class":228},[79,42945,1075],{"class":448},[79,42947,36302],{"class":228},[79,42949,759],{"class":96},[79,42951,850],{"class":228},[79,42953,42954],{"class":81,"line":960},[79,42955,542],{"emptyLinePlaceholder":541},[79,42957,42958],{"class":81,"line":975},[79,42959,36315],{"class":2313},[79,42961,42962,42964,42966,42968,42970],{"class":81,"line":980},[79,42963,36320],{"class":228},[79,42965,239],{"class":448},[79,42967,36325],{"class":228},[79,42969,2824],{"class":448},[79,42971,36330],{"class":228},[79,42973,42974],{"class":81,"line":1006},[79,42975,36335],{"class":2313},[79,42977,42978,42980,42982,42984],{"class":81,"line":1027},[79,42979,34449],{"class":96},[79,42981,455],{"class":228},[79,42983,36344],{"class":89},[79,42985,36347],{"class":228},[79,42987,42988],{"class":81,"line":1032},[79,42989,542],{"emptyLinePlaceholder":541},[79,42991,42992],{"class":81,"line":1047},[79,42993,36356],{"class":2313},[79,42995,42996,42998,43000,43002,43004],{"class":81,"line":1053},[79,42997,1210],{"class":448},[79,42999,1213],{"class":96},[79,43001,5025],{"class":448},[79,43003,33231],{"class":89},[79,43005,745],{"class":228},[79,43007,43008],{"class":81,"line":1058},[79,43009,36373],{"class":2313},[79,43011,43012,43014,43016],{"class":81,"line":1069},[79,43013,33295],{"class":228},[79,43015,239],{"class":448},[79,43017,43018],{"class":228},"VGG16()\n",[79,43020,43021],{"class":81,"line":1081},[79,43022,36386],{"class":2313},[79,43024,43025],{"class":81,"line":1086},[79,43026,36391],{"class":2313},[79,43028,43029,43031,43033],{"class":81,"line":1108},[79,43030,36396],{"class":228},[79,43032,36399],{"class":89},[79,43034,1150],{"class":228},[79,43036,43037],{"class":81,"line":1153},[79,43038,36406],{"class":2313},[79,43040,43041,43043,43045],{"class":81,"line":1158},[79,43042,36019],{"class":228},[79,43044,239],{"class":448},[79,43046,36415],{"class":228},[79,43048,43049],{"class":81,"line":1180},[79,43050,36420],{"class":2313},[79,43052,43053],{"class":81,"line":1197},[79,43054,36425],{"class":228},[79,43056,43057],{"class":81,"line":1202},[79,43058,542],{"emptyLinePlaceholder":541},[79,43060,43061],{"class":81,"line":1207},[79,43062,36434],{"class":2313},[79,43064,43065],{"class":81,"line":1223},[79,43066,36439],{"class":2313},[79,43068,43069,43071,43073,43075,43077,43079,43081],{"class":81,"line":18722},[79,43070,33243],{"class":228},[79,43072,239],{"class":448},[79,43074,33250],{"class":89},[79,43076,3799],{"class":448},[79,43078,33255],{"class":228},[79,43080,3796],{"class":448},[79,43082,36116],{"class":89},[79,43084,43085,43087,43089],{"class":81,"line":18728},[79,43086,33295],{"class":228},[79,43088,239],{"class":448},[79,43090,34288],{"class":228},[79,43092,43093],{"class":81,"line":18739},[79,43094,36468],{"class":2313},[79,43096,43097],{"class":81,"line":18762},[79,43098,36473],{"class":2313},[79,43100,43101,43103,43105,43107,43109,43111,43113,43115,43117,43119,43121,43123,43125,43127,43129,43131,43133,43135,43137,43139,43141,43143,43145],{"class":81,"line":18784},[79,43102,36478],{"class":228},[79,43104,239],{"class":448},[79,43106,3130],{"class":228},[79,43108,36485],{"class":89},[79,43110,2621],{"class":228},[79,43112,36490],{"class":89},[79,43114,2621],{"class":228},[79,43116,36495],{"class":89},[79,43118,2621],{"class":228},[79,43120,36500],{"class":89},[79,43122,2621],{"class":228},[79,43124,36505],{"class":89},[79,43126,2621],{"class":228},[79,43128,36510],{"class":89},[79,43130,2621],{"class":228},[79,43132,36515],{"class":89},[79,43134,2621],{"class":228},[79,43136,36520],{"class":89},[79,43138,2621],{"class":228},[79,43140,36525],{"class":89},[79,43142,2621],{"class":228},[79,43144,36530],{"class":89},[79,43146,762],{"class":228},[79,43148,43149,43151],{"class":81,"line":18789},[79,43150,36175],{"class":448},[79,43152,34882],{"class":228},[79,43154,43155],{"class":81,"line":18795},[79,43156,36543],{"class":2313},[79,43158,43159,43161,43163,43165],{"class":81,"line":18809},[79,43160,5477],{"class":448},[79,43162,36550],{"class":228},[79,43164,921],{"class":448},[79,43166,36194],{"class":228},[79,43168,43169,43171,43173],{"class":81,"line":18822},[79,43170,34608],{"class":228},[79,43172,239],{"class":448},[79,43174,34613],{"class":228},[79,43176,43177,43179,43181],{"class":81,"line":18827},[79,43178,34623],{"class":228},[79,43180,239],{"class":448},[79,43182,34628],{"class":228},[79,43184,43185],{"class":81,"line":18841},[79,43186,542],{"emptyLinePlaceholder":541},[79,43188,43189],{"class":81,"line":18846},[79,43190,36579],{"class":2313},[79,43192,43193],{"class":81,"line":18852},[79,43194,34873],{"class":228},[79,43196,43197],{"class":81,"line":18857},[79,43198,36588],{"class":2313},[79,43200,43201,43203,43205],{"class":81,"line":18871},[79,43202,34658],{"class":228},[79,43204,239],{"class":448},[79,43206,34663],{"class":228},[79,43208,43209],{"class":81,"line":18876},[79,43210,36601],{"class":2313},[79,43212,43213,43215,43217,43219,43221,43223,43225],{"class":81,"line":18881},[79,43214,34675],{"class":228},[79,43216,239],{"class":448},[79,43218,34680],{"class":228},[79,43220,34683],{"class":7284},[79,43222,239],{"class":448},[79,43224,775],{"class":96},[79,43226,850],{"class":228},[79,43228,43229],{"class":81,"line":18895},[79,43230,36622],{"class":2313},[79,43232,43233,43235,43237],{"class":81,"line":18907},[79,43234,36627],{"class":228},[79,43236,239],{"class":448},[79,43238,36632],{"class":228},[79,43240,43241,43243,43245],{"class":81,"line":18912},[79,43242,36637],{"class":228},[79,43244,239],{"class":448},[79,43246,36642],{"class":228},[79,43248,43249,43251,43253,43255,43257,43259,43261,43263],{"class":81,"line":18925},[79,43250,1111],{"class":96},[79,43252,455],{"class":228},[79,43254,36651],{"class":89},[79,43256,36654],{"class":228},[79,43258,36657],{"class":89},[79,43260,2621],{"class":228},[79,43262,36662],{"class":89},[79,43264,36665],{"class":228},[339,43266,43268],{"id":43267},"_23googlenet","2.3.GoogLeNet",[24023,43270,43272],{"id":43271},"_231原理","2.3.1.原理",[26,43274,43275],{},[29,43276,43277],{},"网络结构",[19,43279,43280],{},[3569,43281],{"alt":57,"src":43282},"\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,43284,43285],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,43287,43288],{},[3569,43289],{"alt":57,"src":43290},"\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,43292,43293],{},[3569,43294],{"alt":57,"src":43295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-025.png",[19,43297,43298],{},[3569,43299],{"alt":57,"src":43300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-026.png",[26,43302,43303],{"start":167},[29,43304,43305],{},"1x1卷积的优点",[19,43307,43308],{},[3569,43309],{"alt":57,"src":43310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-027.png",[26,43312,43313],{"start":178},[29,43314,43315],{},"全局平均池化层优点",[19,43317,43318],{},[3569,43319],{"alt":57,"src":43320},"\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,43322,43323],{},[3569,43324],{"alt":57,"src":43325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-029.png",[26,43327,43328],{"start":545},[29,43329,43330],{},"参数详细描述",[19,43332,43333],{},[3569,43334],{"alt":57,"src":43335},"\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,43337,43338],{},[3569,43339],{"alt":57,"src":43340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[19,43342,43343],{},[3569,43344],{"alt":57,"src":43345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-032.png",[19,43347,43348],{},[3569,43349],{"alt":57,"src":43350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[19,43352,43353],{},[3569,43354],{"alt":57,"src":43355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[19,43357,43358],{},[3569,43359],{"alt":57,"src":43360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[19,43362,43363],{},[3569,43364],{"alt":57,"src":43365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[19,43367,43368],{},[3569,43369],{"alt":57,"src":43370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[19,43372,43373],{},[3569,43374],{"alt":57,"src":43375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[19,43377,43378],{},[3569,43379],{"alt":57,"src":43380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[19,43382,43383],{},[3569,43384],{"alt":57,"src":43385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[19,43387,43388],{},[3569,43389],{"alt":57,"src":43390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[19,43392,43393],{},[3569,43394],{"alt":57,"src":43395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[19,43397,43398],{},[3569,43399],{"alt":57,"src":43400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[19,43402,43403],{},[3569,43404],{"alt":57,"src":43405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-044.png",[19,43407,43408],{},[3569,43409],{"alt":57,"src":43410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[19,43412,43413],{},[3569,43414],{"alt":57,"src":43415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-046.png",[19,43417,43418],{},[3569,43419],{"alt":57,"src":43420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[19,43422,43423],{},[3569,43424],{"alt":57,"src":43425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[19,43427,43428],{},[3569,43429],{"alt":57,"src":43430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-049.png",[19,43432,43433],{},[3569,43434],{"alt":57,"src":43435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-050.png",[24023,43437,43439],{"id":43438},"_232代码实现","2.3.2.代码实现",[26,43441,43442],{},[29,43443,32719],{},[19,43445,43446],{},"根据原理一步一步搭建即可",[51,43448,43450],{"className":439,"code":43449,"language":441,"meta":57,"style":57},"import torch\nfrom torch import nn\nfrom torchsummary import summary\n\nclass Inception(nn.Module):\n    def __init__(self,in_channels,c1,c2,c3,c4):\n        super(Inception,self).__init__()\n        self.ReLu=nn.ReLU()\n        # 路线1：定义1*1卷积\n        self.p1_1=nn.Conv2d(in_channels=in_channels,out_channels=c1,kernel_size=1)\n        # 路线2：定义1*1卷积和3*3\n        self.p2_1=nn.Conv2d(in_channels=in_channels,out_channels=c2[0],kernel_size=1)\n        self.p2_2=nn.Conv2d(in_channels=c2[0],out_channels=c2[1],kernel_size=3,padding=1)\n        # 路线3：定义1*1卷积和5*5\n        self.p3_1=nn.Conv2d(in_channels=in_channels,out_channels=c3[0],kernel_size=1)\n        self.p3_2=nn.Conv2d(in_channels=c3[0],out_channels=c3[1],kernel_size=5,padding=2)\n        # 路线4：定义3*3最大池化和1*1卷积\n        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n        self.p4_1=nn.MaxPool2d(kernel_size=3,stride=1,padding=1)\n        self.p4_2=nn.Conv2d(in_channels=in_channels,out_channels=c4,kernel_size=1)\n\n    def forward(self,x):\n        p1=self.ReLu(self.p1_1(x))\n        p2=self.ReLu(self.p2_2(self.ReLu(self.p2_1(x))))\n        p3=self.ReLu(self.p3_2(self.ReLu(self.p3_1(x))))\n        p4=self.ReLu(self.p4_2(self.p4_1(x)))\n        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n        return torch.cat((p1,p2,p3,p4),dim=1)\n\n\n# 搭建GoogLeNet网络\nclass GoogLeNet(nn.Module):\n    # 必须把Inception导入到里边\n    def __init__(self,Inception):\n        super(GoogLeNet,self).__init__()\n        self.b1=nn.Sequential(\n            nn.Conv2d(in_channels=1,out_channels=64,kernel_size=7,stride=2,padding=3),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b2=nn.Sequential(\n            nn.Conv2d(in_channels=64,out_channels=64,kernel_size=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=64,out_channels=192,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b3=nn.Sequential(\n            Inception(192,64,(96,128),(16,32),32),\n            Inception(256,128,(128,192),(32,96),64),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b4=nn.Sequential(\n            Inception(480,192,(96,208),(16,48),64),\n            Inception(512,160,(112,224),(24,64),64),\n            Inception(512,128,(128,256),(24,64),64),\n            Inception(512,112,(128,288),(32,64),64),\n            Inception(528,256,(160,320),(32,128),128),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b5=nn.Sequential(\n            Inception(832,256,(160,320),(32,128),128),\n            Inception(832,384,(192,384),(48,128),128),\n            nn.AdaptiveAvgPool2d((1,1)),\n            nn.Flatten(),\n            nn.Linear(1024,10)\n        )\n        # 对模型参数初始化\n        for m in self.modules():\n            if isinstance(m,nn.Conv2d):\n                nn.init.kaiming_normal_(m.weight,mode='fan_out',nonlinearity='relu')\n                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n                # ② mode = 'fan_out'决定使用的fan值：\n                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n                if m.bias is not None:\n                    nn.init.constant_(m.bias,0)\n                elif isinstance(m,nn.Linear):\n                    nn.init.normal_(m.weight,0,0.01)\n                    if m.bias is not None:\n                        nn.init.constant_(m.bias,0)\n    # 定义前向传播\n    def forward(self,x):\n        x=self.b1(x)\n        x=self.b2(x)\n        x=self.b3(x)\n        x=self.b4(x)\n        x=self.b5(x)\n        return x\n\n# 模型展示\nif __name__==\"__main__\":\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    model=GoogLeNet(Inception).to(device)\n    print(summary(model,(1,224,224)))\n",[59,43451,43452,43458,43468,43478,43482,43499,43508,43523,43533,43538,43571,43576,43613,43660,43665,43701,43748,43753,43758,43793,43825,43829,43837,43853,43877,43902,43923,43928,43943,43947,43951,43956,43973,43978,43987,44002,44013,44057,44061,44089,44093,44104,44132,44136,44173,44177,44205,44209,44220,44256,44288,44316,44320,44331,44365,44397,44429,44462,44496,44524,44528,44539,44572,44604,44618,44622,44635,44639,44644,44656,44664,44686,44691,44696,44701,44706,44711,44716,44730,44738,44747,44760,44775,44784,44788,44796,44807,44818,44829,44840,44851,44857,44861,44866,44878,44898,44907],{"__ignoreMap":57},[79,43453,43454,43456],{"class":81,"line":82},[79,43455,520],{"class":448},[79,43457,32405],{"class":228},[79,43459,43460,43462,43464,43466],{"class":81,"line":167},[79,43461,32745],{"class":448},[79,43463,32748],{"class":228},[79,43465,520],{"class":448},[79,43467,32753],{"class":228},[79,43469,43470,43472,43474,43476],{"class":81,"line":178},[79,43471,32745],{"class":448},[79,43473,32765],{"class":228},[79,43475,520],{"class":448},[79,43477,32770],{"class":228},[79,43479,43480],{"class":81,"line":545},[79,43481,542],{"emptyLinePlaceholder":541},[79,43483,43484,43486,43489,43491,43493,43495,43497],{"class":81,"line":550},[79,43485,16727],{"class":448},[79,43487,43488],{"class":85}," Inception",[79,43490,455],{"class":228},[79,43492,32786],{"class":85},[79,43494,2798],{"class":228},[79,43496,32791],{"class":85},[79,43498,932],{"class":228},[79,43500,43501,43503,43505],{"class":81,"line":562},[79,43502,32808],{"class":448},[79,43504,32811],{"class":96},[79,43506,43507],{"class":228},"(self,in_channels,c1,c2,c3,c4):\n",[79,43509,43510,43512,43515,43517,43519,43521],{"class":81,"line":568},[79,43511,32824],{"class":96},[79,43513,43514],{"class":228},"(Inception,",[79,43516,32830],{"class":96},[79,43518,32833],{"class":228},[79,43520,32836],{"class":96},[79,43522,4061],{"class":228},[79,43524,43525,43527,43529,43531],{"class":81,"line":574},[79,43526,32852],{"class":96},[79,43528,36767],{"class":228},[79,43530,239],{"class":448},[79,43532,36772],{"class":228},[79,43534,43535],{"class":81,"line":579},[79,43536,43537],{"class":2313},"        # 路线1：定义1*1卷积\n",[79,43539,43540,43542,43545,43547,43549,43551,43553,43556,43558,43560,43563,43565,43567,43569],{"class":81,"line":585},[79,43541,32852],{"class":96},[79,43543,43544],{"class":228},".p1_1",[79,43546,239],{"class":448},[79,43548,32860],{"class":228},[79,43550,32863],{"class":7284},[79,43552,239],{"class":448},[79,43554,43555],{"class":228},"in_channels,",[79,43557,32872],{"class":7284},[79,43559,239],{"class":448},[79,43561,43562],{"class":228},"c1,",[79,43564,32881],{"class":7284},[79,43566,239],{"class":448},[79,43568,775],{"class":96},[79,43570,850],{"class":228},[79,43572,43573],{"class":81,"line":591},[79,43574,43575],{"class":2313},"        # 路线2：定义1*1卷积和3*3\n",[79,43577,43578,43580,43583,43585,43587,43589,43591,43593,43595,43597,43600,43602,43605,43607,43609,43611],{"class":81,"line":596},[79,43579,32852],{"class":96},[79,43581,43582],{"class":228},".p2_1",[79,43584,239],{"class":448},[79,43586,32860],{"class":228},[79,43588,32863],{"class":7284},[79,43590,239],{"class":448},[79,43592,43555],{"class":228},[79,43594,32872],{"class":7284},[79,43596,239],{"class":448},[79,43598,43599],{"class":228},"c2[",[79,43601,759],{"class":96},[79,43603,43604],{"class":228},"],",[79,43606,32881],{"class":7284},[79,43608,239],{"class":448},[79,43610,775],{"class":96},[79,43612,850],{"class":228},[79,43614,43615,43617,43620,43622,43624,43626,43628,43630,43632,43634,43636,43638,43640,43642,43644,43646,43648,43650,43652,43654,43656,43658],{"class":81,"line":602},[79,43616,32852],{"class":96},[79,43618,43619],{"class":228},".p2_2",[79,43621,239],{"class":448},[79,43623,32860],{"class":228},[79,43625,32863],{"class":7284},[79,43627,239],{"class":448},[79,43629,43599],{"class":228},[79,43631,759],{"class":96},[79,43633,43604],{"class":228},[79,43635,32872],{"class":7284},[79,43637,239],{"class":448},[79,43639,43599],{"class":228},[79,43641,775],{"class":96},[79,43643,43604],{"class":228},[79,43645,32881],{"class":7284},[79,43647,239],{"class":448},[79,43649,970],{"class":96},[79,43651,2621],{"class":228},[79,43653,32890],{"class":7284},[79,43655,239],{"class":448},[79,43657,775],{"class":96},[79,43659,850],{"class":228},[79,43661,43662],{"class":81,"line":608},[79,43663,43664],{"class":2313},"        # 路线3：定义1*1卷积和5*5\n",[79,43666,43667,43669,43672,43674,43676,43678,43680,43682,43684,43686,43689,43691,43693,43695,43697,43699],{"class":81,"line":614},[79,43668,32852],{"class":96},[79,43670,43671],{"class":228},".p3_1",[79,43673,239],{"class":448},[79,43675,32860],{"class":228},[79,43677,32863],{"class":7284},[79,43679,239],{"class":448},[79,43681,43555],{"class":228},[79,43683,32872],{"class":7284},[79,43685,239],{"class":448},[79,43687,43688],{"class":228},"c3[",[79,43690,759],{"class":96},[79,43692,43604],{"class":228},[79,43694,32881],{"class":7284},[79,43696,239],{"class":448},[79,43698,775],{"class":96},[79,43700,850],{"class":228},[79,43702,43703,43705,43708,43710,43712,43714,43716,43718,43720,43722,43724,43726,43728,43730,43732,43734,43736,43738,43740,43742,43744,43746],{"class":81,"line":619},[79,43704,32852],{"class":96},[79,43706,43707],{"class":228},".p3_2",[79,43709,239],{"class":448},[79,43711,32860],{"class":228},[79,43713,32863],{"class":7284},[79,43715,239],{"class":448},[79,43717,43688],{"class":228},[79,43719,759],{"class":96},[79,43721,43604],{"class":228},[79,43723,32872],{"class":7284},[79,43725,239],{"class":448},[79,43727,43688],{"class":228},[79,43729,775],{"class":96},[79,43731,43604],{"class":228},[79,43733,32881],{"class":7284},[79,43735,239],{"class":448},[79,43737,2563],{"class":96},[79,43739,2621],{"class":228},[79,43741,32890],{"class":7284},[79,43743,239],{"class":448},[79,43745,2331],{"class":96},[79,43747,850],{"class":228},[79,43749,43750],{"class":81,"line":625},[79,43751,43752],{"class":2313},"        # 路线4：定义3*3最大池化和1*1卷积\n",[79,43754,43755],{"class":81,"line":631},[79,43756,43757],{"class":2313},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[79,43759,43760,43762,43765,43767,43769,43771,43773,43775,43777,43779,43781,43783,43785,43787,43789,43791],{"class":81,"line":637},[79,43761,32852],{"class":96},[79,43763,43764],{"class":228},".p4_1",[79,43766,239],{"class":448},[79,43768,36825],{"class":228},[79,43770,32881],{"class":7284},[79,43772,239],{"class":448},[79,43774,970],{"class":96},[79,43776,2621],{"class":228},[79,43778,32936],{"class":7284},[79,43780,239],{"class":448},[79,43782,775],{"class":96},[79,43784,2621],{"class":228},[79,43786,32890],{"class":7284},[79,43788,239],{"class":448},[79,43790,775],{"class":96},[79,43792,850],{"class":228},[79,43794,43795,43797,43800,43802,43804,43806,43808,43810,43812,43814,43817,43819,43821,43823],{"class":81,"line":643},[79,43796,32852],{"class":96},[79,43798,43799],{"class":228},".p4_2",[79,43801,239],{"class":448},[79,43803,32860],{"class":228},[79,43805,32863],{"class":7284},[79,43807,239],{"class":448},[79,43809,43555],{"class":228},[79,43811,32872],{"class":7284},[79,43813,239],{"class":448},[79,43815,43816],{"class":228},"c4,",[79,43818,32881],{"class":7284},[79,43820,239],{"class":448},[79,43822,775],{"class":96},[79,43824,850],{"class":228},[79,43826,43827],{"class":81,"line":649},[79,43828,542],{"emptyLinePlaceholder":541},[79,43830,43831,43833,43835],{"class":81,"line":655},[79,43832,32808],{"class":448},[79,43834,33100],{"class":85},[79,43836,33103],{"class":228},[79,43838,43839,43842,43844,43846,43848,43850],{"class":81,"line":660},[79,43840,43841],{"class":228},"        p1",[79,43843,239],{"class":448},[79,43845,32830],{"class":96},[79,43847,37180],{"class":228},[79,43849,32830],{"class":96},[79,43851,43852],{"class":228},".p1_1(x))\n",[79,43854,43855,43857,43859,43861,43863,43865,43868,43870,43872,43874],{"class":81,"line":666},[79,43856,9150],{"class":228},[79,43858,239],{"class":448},[79,43860,32830],{"class":96},[79,43862,37180],{"class":228},[79,43864,32830],{"class":96},[79,43866,43867],{"class":228},".p2_2(",[79,43869,32830],{"class":96},[79,43871,37180],{"class":228},[79,43873,32830],{"class":96},[79,43875,43876],{"class":228},".p2_1(x))))\n",[79,43878,43879,43882,43884,43886,43888,43890,43893,43895,43897,43899],{"class":81,"line":672},[79,43880,43881],{"class":228},"        p3",[79,43883,239],{"class":448},[79,43885,32830],{"class":96},[79,43887,37180],{"class":228},[79,43889,32830],{"class":96},[79,43891,43892],{"class":228},".p3_2(",[79,43894,32830],{"class":96},[79,43896,37180],{"class":228},[79,43898,32830],{"class":96},[79,43900,43901],{"class":228},".p3_1(x))))\n",[79,43903,43904,43907,43909,43911,43913,43915,43918,43920],{"class":81,"line":678},[79,43905,43906],{"class":228},"        p4",[79,43908,239],{"class":448},[79,43910,32830],{"class":96},[79,43912,37180],{"class":228},[79,43914,32830],{"class":96},[79,43916,43917],{"class":228},".p4_2(",[79,43919,32830],{"class":96},[79,43921,43922],{"class":228},".p4_1(x)))\n",[79,43924,43925],{"class":81,"line":684},[79,43926,43927],{"class":2313},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[79,43929,43930,43932,43935,43937,43939,43941],{"class":81,"line":690},[79,43931,16785],{"class":448},[79,43933,43934],{"class":228}," torch.cat((p1,p2,p3,p4),",[79,43936,34683],{"class":7284},[79,43938,239],{"class":448},[79,43940,775],{"class":96},[79,43942,850],{"class":228},[79,43944,43945],{"class":81,"line":695},[79,43946,542],{"emptyLinePlaceholder":541},[79,43948,43949],{"class":81,"line":700},[79,43950,542],{"emptyLinePlaceholder":541},[79,43952,43953],{"class":81,"line":712},[79,43954,43955],{"class":2313},"# 搭建GoogLeNet网络\n",[79,43957,43958,43960,43963,43965,43967,43969,43971],{"class":81,"line":721},[79,43959,16727],{"class":448},[79,43961,43962],{"class":85}," GoogLeNet",[79,43964,455],{"class":228},[79,43966,32786],{"class":85},[79,43968,2798],{"class":228},[79,43970,32791],{"class":85},[79,43972,932],{"class":228},[79,43974,43975],{"class":81,"line":726},[79,43976,43977],{"class":2313},"    # 必须把Inception导入到里边\n",[79,43979,43980,43982,43984],{"class":81,"line":731},[79,43981,32808],{"class":448},[79,43983,32811],{"class":96},[79,43985,43986],{"class":228},"(self,Inception):\n",[79,43988,43989,43991,43994,43996,43998,44000],{"class":81,"line":748},[79,43990,32824],{"class":96},[79,43992,43993],{"class":228},"(GoogLeNet,",[79,43995,32830],{"class":96},[79,43997,32833],{"class":228},[79,43999,32836],{"class":96},[79,44001,4061],{"class":228},[79,44003,44004,44006,44009,44011],{"class":81,"line":765},[79,44005,32852],{"class":96},[79,44007,44008],{"class":228},".b1",[79,44010,239],{"class":448},[79,44012,40004],{"class":228},[79,44014,44015,44017,44019,44021,44023,44025,44027,44029,44031,44033,44035,44037,44039,44041,44043,44045,44047,44049,44051,44053,44055],{"class":81,"line":780},[79,44016,40009],{"class":228},[79,44018,32863],{"class":7284},[79,44020,239],{"class":448},[79,44022,775],{"class":96},[79,44024,2621],{"class":228},[79,44026,32872],{"class":7284},[79,44028,239],{"class":448},[79,44030,2449],{"class":96},[79,44032,2621],{"class":228},[79,44034,32881],{"class":7284},[79,44036,239],{"class":448},[79,44038,2612],{"class":96},[79,44040,2621],{"class":228},[79,44042,32936],{"class":7284},[79,44044,239],{"class":448},[79,44046,2331],{"class":96},[79,44048,2621],{"class":228},[79,44050,32890],{"class":7284},[79,44052,239],{"class":448},[79,44054,970],{"class":96},[79,44056,40042],{"class":228},[79,44058,44059],{"class":81,"line":811},[79,44060,40047],{"class":228},[79,44062,44063,44065,44067,44069,44071,44073,44075,44077,44079,44081,44083,44085,44087],{"class":81,"line":816},[79,44064,40092],{"class":228},[79,44066,32881],{"class":7284},[79,44068,239],{"class":448},[79,44070,970],{"class":96},[79,44072,2621],{"class":228},[79,44074,32936],{"class":7284},[79,44076,239],{"class":448},[79,44078,2331],{"class":96},[79,44080,2621],{"class":228},[79,44082,32890],{"class":7284},[79,44084,239],{"class":448},[79,44086,775],{"class":96},[79,44088,850],{"class":228},[79,44090,44091],{"class":81,"line":821},[79,44092,40121],{"class":228},[79,44094,44095,44097,44100,44102],{"class":81,"line":837},[79,44096,32852],{"class":96},[79,44098,44099],{"class":228},".b2",[79,44101,239],{"class":448},[79,44103,40004],{"class":228},[79,44105,44106,44108,44110,44112,44114,44116,44118,44120,44122,44124,44126,44128,44130],{"class":81,"line":853},[79,44107,40009],{"class":228},[79,44109,32863],{"class":7284},[79,44111,239],{"class":448},[79,44113,2449],{"class":96},[79,44115,2621],{"class":228},[79,44117,32872],{"class":7284},[79,44119,239],{"class":448},[79,44121,2449],{"class":96},[79,44123,2621],{"class":228},[79,44125,32881],{"class":7284},[79,44127,239],{"class":448},[79,44129,775],{"class":96},[79,44131,40042],{"class":228},[79,44133,44134],{"class":81,"line":864},[79,44135,40047],{"class":228},[79,44137,44138,44140,44142,44144,44146,44148,44150,44152,44155,44157,44159,44161,44163,44165,44167,44169,44171],{"class":81,"line":869},[79,44139,40009],{"class":228},[79,44141,32863],{"class":7284},[79,44143,239],{"class":448},[79,44145,2449],{"class":96},[79,44147,2621],{"class":228},[79,44149,32872],{"class":7284},[79,44151,239],{"class":448},[79,44153,44154],{"class":96},"192",[79,44156,2621],{"class":228},[79,44158,32881],{"class":7284},[79,44160,239],{"class":448},[79,44162,970],{"class":96},[79,44164,2621],{"class":228},[79,44166,32890],{"class":7284},[79,44168,239],{"class":448},[79,44170,775],{"class":96},[79,44172,40042],{"class":228},[79,44174,44175],{"class":81,"line":885},[79,44176,40047],{"class":228},[79,44178,44179,44181,44183,44185,44187,44189,44191,44193,44195,44197,44199,44201,44203],{"class":81,"line":891},[79,44180,40092],{"class":228},[79,44182,32881],{"class":7284},[79,44184,239],{"class":448},[79,44186,970],{"class":96},[79,44188,2621],{"class":228},[79,44190,32936],{"class":7284},[79,44192,239],{"class":448},[79,44194,2331],{"class":96},[79,44196,2621],{"class":228},[79,44198,32890],{"class":7284},[79,44200,239],{"class":448},[79,44202,775],{"class":96},[79,44204,850],{"class":228},[79,44206,44207],{"class":81,"line":896},[79,44208,40121],{"class":228},[79,44210,44211,44213,44216,44218],{"class":81,"line":907},[79,44212,32852],{"class":96},[79,44214,44215],{"class":228},".b3",[79,44217,239],{"class":448},[79,44219,40004],{"class":228},[79,44221,44222,44225,44227,44229,44231,44234,44236,44238,44240,44243,44245,44247,44249,44252,44254],{"class":81,"line":912},[79,44223,44224],{"class":228},"            Inception(",[79,44226,44154],{"class":96},[79,44228,2621],{"class":228},[79,44230,2449],{"class":96},[79,44232,44233],{"class":228},",(",[79,44235,2455],{"class":96},[79,44237,2621],{"class":228},[79,44239,34069],{"class":96},[79,44241,44242],{"class":228},"),(",[79,44244,2841],{"class":96},[79,44246,2621],{"class":228},[79,44248,2443],{"class":96},[79,44250,44251],{"class":228},"),",[79,44253,2443],{"class":96},[79,44255,40042],{"class":228},[79,44257,44258,44260,44262,44264,44266,44268,44270,44272,44274,44276,44278,44280,44282,44284,44286],{"class":81,"line":935},[79,44259,44224],{"class":228},[79,44261,36866],{"class":96},[79,44263,2621],{"class":228},[79,44265,34069],{"class":96},[79,44267,44233],{"class":228},[79,44269,34069],{"class":96},[79,44271,2621],{"class":228},[79,44273,44154],{"class":96},[79,44275,44242],{"class":228},[79,44277,2443],{"class":96},[79,44279,2621],{"class":228},[79,44281,2455],{"class":96},[79,44283,44251],{"class":228},[79,44285,2449],{"class":96},[79,44287,40042],{"class":228},[79,44289,44290,44292,44294,44296,44298,44300,44302,44304,44306,44308,44310,44312,44314],{"class":81,"line":946},[79,44291,40092],{"class":228},[79,44293,32881],{"class":7284},[79,44295,239],{"class":448},[79,44297,970],{"class":96},[79,44299,2621],{"class":228},[79,44301,32936],{"class":7284},[79,44303,239],{"class":448},[79,44305,2331],{"class":96},[79,44307,2621],{"class":228},[79,44309,32890],{"class":7284},[79,44311,239],{"class":448},[79,44313,775],{"class":96},[79,44315,850],{"class":228},[79,44317,44318],{"class":81,"line":960},[79,44319,40121],{"class":228},[79,44321,44322,44324,44327,44329],{"class":81,"line":975},[79,44323,32852],{"class":96},[79,44325,44326],{"class":228},".b4",[79,44328,239],{"class":448},[79,44330,40004],{"class":228},[79,44332,44333,44335,44338,44340,44342,44344,44346,44348,44351,44353,44355,44357,44359,44361,44363],{"class":81,"line":980},[79,44334,44224],{"class":228},[79,44336,44337],{"class":96},"480",[79,44339,2621],{"class":228},[79,44341,44154],{"class":96},[79,44343,44233],{"class":228},[79,44345,2455],{"class":96},[79,44347,2621],{"class":228},[79,44349,44350],{"class":96},"208",[79,44352,44242],{"class":228},[79,44354,2841],{"class":96},[79,44356,2621],{"class":228},[79,44358,2847],{"class":96},[79,44360,44251],{"class":228},[79,44362,2449],{"class":96},[79,44364,40042],{"class":228},[79,44366,44367,44369,44371,44373,44375,44377,44379,44381,44383,44385,44387,44389,44391,44393,44395],{"class":81,"line":1006},[79,44368,44224],{"class":228},[79,44370,40452],{"class":96},[79,44372,2621],{"class":228},[79,44374,23073],{"class":96},[79,44376,44233],{"class":228},[79,44378,2858],{"class":96},[79,44380,2621],{"class":228},[79,44382,33503],{"class":96},[79,44384,44242],{"class":228},[79,44386,3040],{"class":96},[79,44388,2621],{"class":228},[79,44390,2449],{"class":96},[79,44392,44251],{"class":228},[79,44394,2449],{"class":96},[79,44396,40042],{"class":228},[79,44398,44399,44401,44403,44405,44407,44409,44411,44413,44415,44417,44419,44421,44423,44425,44427],{"class":81,"line":1027},[79,44400,44224],{"class":228},[79,44402,40452],{"class":96},[79,44404,2621],{"class":228},[79,44406,34069],{"class":96},[79,44408,44233],{"class":228},[79,44410,34069],{"class":96},[79,44412,2621],{"class":228},[79,44414,36866],{"class":96},[79,44416,44242],{"class":228},[79,44418,3040],{"class":96},[79,44420,2621],{"class":228},[79,44422,2449],{"class":96},[79,44424,44251],{"class":228},[79,44426,2449],{"class":96},[79,44428,40042],{"class":228},[79,44430,44431,44433,44435,44437,44439,44441,44443,44445,44448,44450,44452,44454,44456,44458,44460],{"class":81,"line":1032},[79,44432,44224],{"class":228},[79,44434,40452],{"class":96},[79,44436,2621],{"class":228},[79,44438,2858],{"class":96},[79,44440,44233],{"class":228},[79,44442,34069],{"class":96},[79,44444,2621],{"class":228},[79,44446,44447],{"class":96},"288",[79,44449,44242],{"class":228},[79,44451,2443],{"class":96},[79,44453,2621],{"class":228},[79,44455,2449],{"class":96},[79,44457,44251],{"class":228},[79,44459,2449],{"class":96},[79,44461,40042],{"class":228},[79,44463,44464,44466,44469,44471,44473,44475,44477,44479,44482,44484,44486,44488,44490,44492,44494],{"class":81,"line":1047},[79,44465,44224],{"class":228},[79,44467,44468],{"class":96},"528",[79,44470,2621],{"class":228},[79,44472,36866],{"class":96},[79,44474,44233],{"class":228},[79,44476,23073],{"class":96},[79,44478,2621],{"class":228},[79,44480,44481],{"class":96},"320",[79,44483,44242],{"class":228},[79,44485,2443],{"class":96},[79,44487,2621],{"class":228},[79,44489,34069],{"class":96},[79,44491,44251],{"class":228},[79,44493,34069],{"class":96},[79,44495,40042],{"class":228},[79,44497,44498,44500,44502,44504,44506,44508,44510,44512,44514,44516,44518,44520,44522],{"class":81,"line":1053},[79,44499,40092],{"class":228},[79,44501,32881],{"class":7284},[79,44503,239],{"class":448},[79,44505,970],{"class":96},[79,44507,2621],{"class":228},[79,44509,32936],{"class":7284},[79,44511,239],{"class":448},[79,44513,2331],{"class":96},[79,44515,2621],{"class":228},[79,44517,32890],{"class":7284},[79,44519,239],{"class":448},[79,44521,775],{"class":96},[79,44523,850],{"class":228},[79,44525,44526],{"class":81,"line":1058},[79,44527,40121],{"class":228},[79,44529,44530,44532,44535,44537],{"class":81,"line":1069},[79,44531,32852],{"class":96},[79,44533,44534],{"class":228},".b5",[79,44536,239],{"class":448},[79,44538,40004],{"class":228},[79,44540,44541,44543,44546,44548,44550,44552,44554,44556,44558,44560,44562,44564,44566,44568,44570],{"class":81,"line":1081},[79,44542,44224],{"class":228},[79,44544,44545],{"class":96},"832",[79,44547,2621],{"class":228},[79,44549,36866],{"class":96},[79,44551,44233],{"class":228},[79,44553,23073],{"class":96},[79,44555,2621],{"class":228},[79,44557,44481],{"class":96},[79,44559,44242],{"class":228},[79,44561,2443],{"class":96},[79,44563,2621],{"class":228},[79,44565,34069],{"class":96},[79,44567,44251],{"class":228},[79,44569,34069],{"class":96},[79,44571,40042],{"class":228},[79,44573,44574,44576,44578,44580,44582,44584,44586,44588,44590,44592,44594,44596,44598,44600,44602],{"class":81,"line":1086},[79,44575,44224],{"class":228},[79,44577,44545],{"class":96},[79,44579,2621],{"class":228},[79,44581,36936],{"class":96},[79,44583,44233],{"class":228},[79,44585,44154],{"class":96},[79,44587,2621],{"class":228},[79,44589,36936],{"class":96},[79,44591,44242],{"class":228},[79,44593,2847],{"class":96},[79,44595,2621],{"class":228},[79,44597,34069],{"class":96},[79,44599,44251],{"class":228},[79,44601,34069],{"class":96},[79,44603,40042],{"class":228},[79,44605,44606,44609,44611,44613,44615],{"class":81,"line":1108},[79,44607,44608],{"class":228},"            nn.AdaptiveAvgPool2d((",[79,44610,775],{"class":96},[79,44612,2621],{"class":228},[79,44614,775],{"class":96},[79,44616,44617],{"class":228},")),\n",[79,44619,44620],{"class":81,"line":1153},[79,44621,40785],{"class":228},[79,44623,44624,44626,44629,44631,44633],{"class":81,"line":1158},[79,44625,40790],{"class":228},[79,44627,44628],{"class":96},"1024",[79,44630,2621],{"class":228},[79,44632,2689],{"class":96},[79,44634,850],{"class":228},[79,44636,44637],{"class":81,"line":1180},[79,44638,40121],{"class":228},[79,44640,44641],{"class":81,"line":1197},[79,44642,44643],{"class":2313},"        # 对模型参数初始化\n",[79,44645,44646,44648,44650,44652,44654],{"class":81,"line":1202},[79,44647,5477],{"class":448},[79,44649,40863],{"class":228},[79,44651,921],{"class":448},[79,44653,40868],{"class":96},[79,44655,40871],{"class":228},[79,44657,44658,44660,44662],{"class":81,"line":1207},[79,44659,6712],{"class":448},[79,44661,40883],{"class":96},[79,44663,40886],{"class":228},[79,44665,44666,44668,44671,44673,44676,44678,44680,44682,44684],{"class":81,"line":1223},[79,44667,40896],{"class":228},[79,44669,44670],{"class":7284},"mode",[79,44672,239],{"class":448},[79,44674,44675],{"class":89},"'fan_out'",[79,44677,2621],{"class":228},[79,44679,40899],{"class":7284},[79,44681,239],{"class":448},[79,44683,40904],{"class":89},[79,44685,850],{"class":228},[79,44687,44688],{"class":81,"line":18722},[79,44689,44690],{"class":2313},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[79,44692,44693],{"class":81,"line":18728},[79,44694,44695],{"class":2313},"                # ② mode = 'fan_out'决定使用的fan值：\n",[79,44697,44698],{"class":81,"line":18739},[79,44699,44700],{"class":2313},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[79,44702,44703],{"class":81,"line":18762},[79,44704,44705],{"class":2313},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[79,44707,44708],{"class":81,"line":18784},[79,44709,44710],{"class":2313},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[79,44712,44713],{"class":81,"line":18789},[79,44714,44715],{"class":2313},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[79,44717,44718,44720,44722,44724,44726,44728],{"class":81,"line":18795},[79,44719,40916],{"class":448},[79,44721,40919],{"class":228},[79,44723,40922],{"class":448},[79,44725,40925],{"class":448},[79,44727,40928],{"class":96},[79,44729,745],{"class":228},[79,44731,44732,44734,44736],{"class":81,"line":18809},[79,44733,40940],{"class":228},[79,44735,759],{"class":96},[79,44737,850],{"class":228},[79,44739,44740,44743,44745],{"class":81,"line":18822},[79,44741,44742],{"class":448},"                elif",[79,44744,40883],{"class":96},[79,44746,40959],{"class":228},[79,44748,44749,44752,44754,44756,44758],{"class":81,"line":18827},[79,44750,44751],{"class":228},"                    nn.init.normal_(m.weight,",[79,44753,759],{"class":96},[79,44755,2621],{"class":228},[79,44757,40981],{"class":96},[79,44759,850],{"class":228},[79,44761,44762,44765,44767,44769,44771,44773],{"class":81,"line":18841},[79,44763,44764],{"class":448},"                    if",[79,44766,40919],{"class":228},[79,44768,40922],{"class":448},[79,44770,40925],{"class":448},[79,44772,40928],{"class":96},[79,44774,745],{"class":228},[79,44776,44777,44780,44782],{"class":81,"line":18846},[79,44778,44779],{"class":228},"                        nn.init.constant_(m.bias,",[79,44781,759],{"class":96},[79,44783,850],{"class":228},[79,44785,44786],{"class":81,"line":18852},[79,44787,37161],{"class":2313},[79,44789,44790,44792,44794],{"class":81,"line":18857},[79,44791,32808],{"class":448},[79,44793,33100],{"class":85},[79,44795,33103],{"class":228},[79,44797,44798,44800,44802,44804],{"class":81,"line":18871},[79,44799,33108],{"class":228},[79,44801,239],{"class":448},[79,44803,32830],{"class":96},[79,44805,44806],{"class":228},".b1(x)\n",[79,44808,44809,44811,44813,44815],{"class":81,"line":18876},[79,44810,33108],{"class":228},[79,44812,239],{"class":448},[79,44814,32830],{"class":96},[79,44816,44817],{"class":228},".b2(x)\n",[79,44819,44820,44822,44824,44826],{"class":81,"line":18881},[79,44821,33108],{"class":228},[79,44823,239],{"class":448},[79,44825,32830],{"class":96},[79,44827,44828],{"class":228},".b3(x)\n",[79,44830,44831,44833,44835,44837],{"class":81,"line":18895},[79,44832,33108],{"class":228},[79,44834,239],{"class":448},[79,44836,32830],{"class":96},[79,44838,44839],{"class":228},".b4(x)\n",[79,44841,44842,44844,44846,44848],{"class":81,"line":18907},[79,44843,33108],{"class":228},[79,44845,239],{"class":448},[79,44847,32830],{"class":96},[79,44849,44850],{"class":228},".b5(x)\n",[79,44852,44853,44855],{"class":81,"line":18912},[79,44854,16785],{"class":448},[79,44856,33216],{"class":228},[79,44858,44859],{"class":81,"line":18925},[79,44860,542],{"emptyLinePlaceholder":541},[79,44862,44863],{"class":81,"line":18930},[79,44864,44865],{"class":2313},"# 模型展示\n",[79,44867,44868,44870,44872,44874,44876],{"class":81,"line":18935},[79,44869,1210],{"class":448},[79,44871,1213],{"class":96},[79,44873,5025],{"class":448},[79,44875,33231],{"class":89},[79,44877,745],{"class":228},[79,44879,44880,44882,44884,44886,44888,44890,44892,44894,44896],{"class":81,"line":18940},[79,44881,33243],{"class":228},[79,44883,239],{"class":448},[79,44885,32460],{"class":228},[79,44887,33250],{"class":89},[79,44889,3799],{"class":448},[79,44891,33255],{"class":228},[79,44893,3796],{"class":448},[79,44895,32485],{"class":89},[79,44897,850],{"class":228},[79,44899,44900,44902,44904],{"class":81,"line":18953},[79,44901,33295],{"class":228},[79,44903,239],{"class":448},[79,44905,44906],{"class":228},"GoogLeNet(Inception).to(device)\n",[79,44908,44909,44911,44913,44915,44917,44919,44921,44923],{"class":81,"line":18958},[79,44910,1161],{"class":96},[79,44912,33307],{"class":228},[79,44914,775],{"class":96},[79,44916,2621],{"class":228},[79,44918,33503],{"class":96},[79,44920,2621],{"class":228},[79,44922,33503],{"class":96},[79,44924,33320],{"class":228},[26,44926,44927],{"start":167},[29,44928,41178],{},[51,44930,44932],{"className":439,"code":44931,"language":441,"meta":57,"style":57},"import copy\nimport time\nimport pandas as pd\nimport torch\nfrom torch.utils.data import Dataset\nfrom torchvision.datasets import FashionMNIST\nfrom torchvision import transforms\nimport torch.utils.data as Data\nimport matplotlib.pyplot as plt\n# 导入模型\nfrom model import GoogLeNet, Inception\nfrom torch import nn\n\n\n# 处理训练集与验证集函数--->划分数据集\ndef train_val_data_process():\n    train_data=FashionMNIST('.\u002Fdata',\n                            train=True,\n                            transform=transforms.Compose([transforms.Resize(size=227),transforms.ToTensor()]),\n                            download=True)\n    train_data,val_data=Data.random_split(train_data,[round(0.8*len(train_data)),round(0.2*len(train_data))])\n    train_dataloader = Data.DataLoader(dataset=train_data,\n                                       batch_size=32,\n                                       shuffle=True,\n                                       # 规定8个进程\n                                       num_workers=8)\n    val_dataloader=Data.DataLoader(dataset=val_data,\n                                   batch_size=32,\n                                   shuffle=True,\n                                   num_workers=8)\n    return train_dataloader,val_dataloader\n\n# 验证是否出错\n# train_val_data_process()\n\n# 定义模型训练函数\ndef train_model_process(model,train_dataloader,val_dataloader,num_epochs):\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else 'cpu')\n\n\n    # 定义优化器\n    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n    # lr为学习率\n    optimizer=torch.optim.Adam(model.parameters(),lr=0.001)\n\n    # 定义损失函数使用交叉熵损失函数\n    criterion=nn.CrossEntropyLoss()\n\n    # 将模型放到GPU中进行训练\n    model=model.to(device)\n    # 复制当前模型的参数\n    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n    best_model_wts=copy.deepcopy(model.state_dict())\n\n\n    # 初始化参数\n    # 最高准确度\n    best_acc=0.0\n    # 训练集损失列表\n    train_loss_all=[]\n    # 验证集函数列表\n    val_loss_all=[]\n    # 训练集准确度列表\n    train_acc_all=[]\n    # 验证集准确度列表\n    val_acc_all=[]\n\n    # 保存当前时间--->方便看每轮训练的时间\n    since=time.time()\n\n\n    # 准备工作完成--->开始训练模型\n    for epoch in range(num_epochs):\n        print(\"Epoch {}\u002F{}\".format(epoch,num_epochs-1))\n        print(\"-\"*10)\n\n        # 初始化参数\n        # 训练集损失函数\n        train_loss=0.0\n        # 训练集准确度\n        train_corrects=0\n        # 验证集损失函数\n        val_loss=0.0\n        # 验证集准确度\n        val_corrects=0\n        # 训练集样本数量\n        train_num=0\n        # 验证集样本数量\n        val_num=0\n        # 将数据放到设备,并开始训练\n        for step,(b_x,b_y) in enumerate(train_dataloader):\n            # 将特征放入到训练设备\n            b_x=b_x.to(device)\n            # 将标签放入到训练设备当中\n            b_y=b_y.to(device)\n            # 设置模型为训练模式\n            model.train()\n            # 将数据放到模型当中,开始前向传播\n            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n            output=model(b_x)\n            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算每一个batch的损失函数\n            loss=criterion(output,b_y)\n            # 将梯度初始化为0\n            optimizer.zero_grad()\n            # 梯度置为0后再进行反向传播\n            loss.backward()\n            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n            optimizer.step()\n            # loss.item()指的是batch的平均损失\n            train_loss+=loss.item()*b_x.size(0)\n            # 计算每个批次中正确预测的数量\n            train_corrects+=torch.sum(pre_lab==b_y.data)\n            # 计算目前为止一共处理了多少样本\n            train_num+=b_x.size(0)\n        # 验证数据\n        for step ,(b_x,b_y) in enumerate(val_dataloader):\n            # 将特征放到验证设备当中\n            b_x=b_x.to(device)\n            # 将标签放到放到训练设备当中\n            b_y=b_y.to(device)\n            # 开启验证模式，设置模型为评估模式\n            model.eval()\n            # 验证时不计算梯度以节省内存\u002F计算\n            with torch.no_grad():\n                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n                output=model(b_x)\n                # 查找每一行中最大值对应的下标\n                pre_lab=torch.argmax(output,dim=1)\n                # 计算验证集上的当前 batch 损失\n                val_batch_loss=criterion(output,b_y)\n                # 对损失函数进行累加（按样本数加权）\n                val_loss+=val_batch_loss.item()*b_x.size(0)\n                val_corrects+=torch.sum(pre_lab==b_y.data)\n            # 当前用于验证的样本数量\n            val_num+=b_x.size(0)\n        # 计算并保存每一次迭代的loss值和准确率\n        # 计算并保存训练集的loss值\n        train_loss_all.append(train_loss\u002Ftrain_num)\n        # 取双精度\n        # 计算并保存训练集的准确率\n        train_acc_all.append(train_corrects.double().item()\u002Ftrain_num)\n        # 计算并保存验证集的loss值\n        val_loss_all.append(val_loss\u002Fval_num)\n        # 计算并保存验证集的准确率\n        val_acc_all.append(val_corrects.double().item()\u002Fval_num)\n\n        # 打印训练一轮的loss值和准确率\n        print('{}train loss:{:.4f} train acc:{:.4f}'.format(epoch,train_loss_all[-1],train_acc_all[-1]))\n        print('{}val loss:{:.4f} val acc:{:.4f}'.format(epoch,val_loss_all[-1],val_acc_all[-1]))\n\n        # 判断准确度--->保存最优模型\n        if val_acc_all[-1]>best_acc:\n            # 保存当前模型准确度\n            best_acc:float=val_acc_all[-1]\n            # 保存当前的准确度\n            # model.state_dict()是当前模型的所有参数（权重和偏置）\n            best_model_wts=copy.deepcopy(model.state_dict())\n\n        # 计算耗时\n        time_use=time.time()-since\n        print('训练和验证耗费的时间{:.0f}m{:.0f}s'.format(time_use\u002F\u002F60,time_use%60))\n    # 选择最优参数并保存\n    # 保存最佳模型权重字典\n    torch.save(best_model_wts,'.\u002Fbest_model.pth')\n    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n    train_process=pd.DataFrame(data={\n        \"epoch\":range(num_epochs),\n        \"train_loss_all\":train_loss_all,\n        \"val_loss_all\":val_loss_all,\n        \"train_acc_all\":train_acc_all,\n        \"val_acc_all\":val_acc_all\n    })\n    # 返回训练保存的过程\n    return train_process\n\n# 将loss值和精度按照图片的形式展示出来\ndef matplot_acc_loss(train_process):\n    # 设置图的大小\n    plt.figure(figsize=(12,4))\n    # 设置图中有几张图\n    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n    # ①loss图\n    plt.subplot(1,2,1)\n    # 补充:\n    # plt.subplot(nrows, ncols, index)\n    # nrows：行数\n    # ncols：列数\n    # index：目前选中第几个子图（从1开始）\n    plt.plot(train_process[\"epoch\"],train_process.train_loss_all,'ro-',label='train loss')\n    plt.plot(train_process[\"epoch\"],train_process.val_loss_all,'bs--',label='val loss')\n    # 添加一个图例\n    plt.legend()\n    # 给轴添加标签\n    plt.xlabel('epoch')\n    plt.ylabel('loss')\n    # ②准确度图\n    plt.subplot(1,2,2)\n    plt.plot(train_process[\"epoch\"],train_process.train_acc_all,'ro-',label='train acc')\n    plt.plot(train_process[\"epoch\"],train_process.val_acc_all,'bs--',label='val acc')\n    # 添加图例\n    plt.legend()\n    plt.xlabel(\"epoch\")\n    plt.ylabel(\"acc\")\n    plt.show()\n\n# 正式开始训练:\nif __name__==\"__main__\":\n    # 将模型实例化\n    GoogLeNet=GoogLeNet(Inception)\n    train_dataloader,val_dataloader=train_val_data_process()\n    train_process=train_model_process(GoogLeNet,train_dataloader,val_dataloader,num_epochs=30)\n    matplot_acc_loss(train_process)\n",[59,44933,44934,44940,44946,44956,44962,44972,44982,44992,45002,45012,45016,45027,45037,45041,45045,45049,45057,45069,45079,45095,45105,45137,45151,45161,45171,45175,45185,45199,45209,45219,45229,45235,45239,45243,45247,45251,45255,45263,45283,45287,45291,45295,45299,45303,45319,45323,45327,45335,45339,45343,45351,45355,45359,45363,45371,45375,45379,45383,45387,45395,45399,45407,45411,45419,45423,45431,45435,45443,45447,45451,45459,45463,45467,45471,45483,45507,45521,45525,45529,45533,45541,45545,45553,45557,45565,45569,45577,45581,45589,45593,45601,45605,45617,45621,45629,45633,45641,45645,45649,45653,45657,45665,45669,45685,45689,45697,45701,45705,45709,45713,45717,45721,45725,45741,45745,45757,45761,45773,45777,45789,45793,45801,45805,45813,45817,45821,45825,45831,45835,45843,45847,45863,45867,45875,45879,45895,45907,45911,45923,45927,45931,45939,45943,45947,45955,45959,45967,45971,45979,45983,45987,46029,46071,46075,46079,46095,46099,46115,46119,46123,46131,46135,46139,46151,46189,46193,46197,46205,46209,46223,46233,46239,46245,46251,46257,46261,46265,46271,46275,46279,46287,46291,46309,46313,46317,46321,46337,46341,46345,46349,46353,46357,46377,46397,46401,46405,46409,46417,46425,46429,46445,46465,46485,46489,46493,46501,46509,46513,46517,46521,46533,46537,46547,46555,46572],{"__ignoreMap":57},[79,44935,44936,44938],{"class":81,"line":82},[79,44937,520],{"class":448},[79,44939,33823],{"class":228},[79,44941,44942,44944],{"class":81,"line":167},[79,44943,520],{"class":448},[79,44945,33830],{"class":228},[79,44947,44948,44950,44952,44954],{"class":81,"line":178},[79,44949,520],{"class":448},[79,44951,33841],{"class":228},[79,44953,533],{"class":448},[79,44955,33846],{"class":228},[79,44957,44958,44960],{"class":81,"line":545},[79,44959,520],{"class":448},[79,44961,32405],{"class":228},[79,44963,44964,44966,44968,44970],{"class":81,"line":550},[79,44965,32745],{"class":448},[79,44967,33417],{"class":228},[79,44969,520],{"class":448},[79,44971,33863],{"class":228},[79,44973,44974,44976,44978,44980],{"class":81,"line":562},[79,44975,32745],{"class":448},[79,44977,33373],{"class":228},[79,44979,520],{"class":448},[79,44981,33378],{"class":228},[79,44983,44984,44986,44988,44990],{"class":81,"line":568},[79,44985,32745],{"class":448},[79,44987,33400],{"class":228},[79,44989,520],{"class":448},[79,44991,33405],{"class":228},[79,44993,44994,44996,44998,45000],{"class":81,"line":574},[79,44995,520],{"class":448},[79,44997,33417],{"class":228},[79,44999,533],{"class":448},[79,45001,33422],{"class":228},[79,45003,45004,45006,45008,45010],{"class":81,"line":579},[79,45005,520],{"class":448},[79,45007,33434],{"class":228},[79,45009,533],{"class":448},[79,45011,33439],{"class":228},[79,45013,45014],{"class":81,"line":585},[79,45015,33908],{"class":2313},[79,45017,45018,45020,45022,45024],{"class":81,"line":591},[79,45019,32745],{"class":448},[79,45021,33915],{"class":228},[79,45023,520],{"class":448},[79,45025,45026],{"class":228}," GoogLeNet, Inception\n",[79,45028,45029,45031,45033,45035],{"class":81,"line":596},[79,45030,32745],{"class":448},[79,45032,32748],{"class":228},[79,45034,520],{"class":448},[79,45036,32753],{"class":228},[79,45038,45039],{"class":81,"line":602},[79,45040,542],{"emptyLinePlaceholder":541},[79,45042,45043],{"class":81,"line":608},[79,45044,542],{"emptyLinePlaceholder":541},[79,45046,45047],{"class":81,"line":614},[79,45048,33943],{"class":2313},[79,45050,45051,45053,45055],{"class":81,"line":619},[79,45052,703],{"class":448},[79,45054,33950],{"class":85},[79,45056,33953],{"class":228},[79,45058,45059,45061,45063,45065,45067],{"class":81,"line":625},[79,45060,33958],{"class":228},[79,45062,239],{"class":448},[79,45064,33457],{"class":228},[79,45066,33465],{"class":89},[79,45068,33468],{"class":228},[79,45070,45071,45073,45075,45077],{"class":81,"line":631},[79,45072,33971],{"class":7284},[79,45074,239],{"class":448},[79,45076,33478],{"class":96},[79,45078,33468],{"class":228},[79,45080,45081,45083,45085,45087,45089,45091,45093],{"class":81,"line":637},[79,45082,33982],{"class":7284},[79,45084,239],{"class":448},[79,45086,33495],{"class":228},[79,45088,33498],{"class":7284},[79,45090,239],{"class":448},[79,45092,37444],{"class":96},[79,45094,33506],{"class":228},[79,45096,45097,45099,45101,45103],{"class":81,"line":643},[79,45098,33999],{"class":7284},[79,45100,239],{"class":448},[79,45102,33478],{"class":96},[79,45104,850],{"class":228},[79,45106,45107,45109,45111,45113,45115,45117,45119,45121,45123,45125,45127,45129,45131,45133,45135],{"class":81,"line":649},[79,45108,34010],{"class":228},[79,45110,239],{"class":448},[79,45112,34015],{"class":228},[79,45114,1138],{"class":96},[79,45116,455],{"class":228},[79,45118,34022],{"class":96},[79,45120,473],{"class":448},[79,45122,9423],{"class":96},[79,45124,34029],{"class":228},[79,45126,1138],{"class":96},[79,45128,455],{"class":228},[79,45130,34036],{"class":96},[79,45132,473],{"class":448},[79,45134,9423],{"class":96},[79,45136,34043],{"class":228},[79,45138,45139,45141,45143,45145,45147,45149],{"class":81,"line":655},[79,45140,34048],{"class":228},[79,45142,239],{"class":448},[79,45144,34053],{"class":228},[79,45146,33539],{"class":7284},[79,45148,239],{"class":448},[79,45150,33544],{"class":228},[79,45152,45153,45155,45157,45159],{"class":81,"line":660},[79,45154,34064],{"class":7284},[79,45156,239],{"class":448},[79,45158,2443],{"class":96},[79,45160,33468],{"class":228},[79,45162,45163,45165,45167,45169],{"class":81,"line":666},[79,45164,34076],{"class":7284},[79,45166,239],{"class":448},[79,45168,33478],{"class":96},[79,45170,33468],{"class":228},[79,45172,45173],{"class":81,"line":672},[79,45174,34087],{"class":2313},[79,45176,45177,45179,45181,45183],{"class":81,"line":678},[79,45178,34092],{"class":7284},[79,45180,239],{"class":448},[79,45182,2638],{"class":96},[79,45184,850],{"class":228},[79,45186,45187,45189,45191,45193,45195,45197],{"class":81,"line":684},[79,45188,34103],{"class":228},[79,45190,239],{"class":448},[79,45192,33536],{"class":228},[79,45194,33539],{"class":7284},[79,45196,239],{"class":448},[79,45198,34114],{"class":228},[79,45200,45201,45203,45205,45207],{"class":81,"line":690},[79,45202,34119],{"class":7284},[79,45204,239],{"class":448},[79,45206,2443],{"class":96},[79,45208,33468],{"class":228},[79,45210,45211,45213,45215,45217],{"class":81,"line":695},[79,45212,34130],{"class":7284},[79,45214,239],{"class":448},[79,45216,33478],{"class":96},[79,45218,33468],{"class":228},[79,45220,45221,45223,45225,45227],{"class":81,"line":700},[79,45222,34141],{"class":7284},[79,45224,239],{"class":448},[79,45226,2638],{"class":96},[79,45228,850],{"class":228},[79,45230,45231,45233],{"class":81,"line":712},[79,45232,715],{"class":448},[79,45234,34154],{"class":228},[79,45236,45237],{"class":81,"line":721},[79,45238,542],{"emptyLinePlaceholder":541},[79,45240,45241],{"class":81,"line":726},[79,45242,34163],{"class":2313},[79,45244,45245],{"class":81,"line":731},[79,45246,34168],{"class":2313},[79,45248,45249],{"class":81,"line":748},[79,45250,542],{"emptyLinePlaceholder":541},[79,45252,45253],{"class":81,"line":765},[79,45254,34177],{"class":2313},[79,45256,45257,45259,45261],{"class":81,"line":780},[79,45258,703],{"class":448},[79,45260,34184],{"class":85},[79,45262,34187],{"class":228},[79,45264,45265,45267,45269,45271,45273,45275,45277,45279,45281],{"class":81,"line":811},[79,45266,33243],{"class":228},[79,45268,239],{"class":448},[79,45270,32460],{"class":228},[79,45272,33250],{"class":89},[79,45274,3799],{"class":448},[79,45276,33255],{"class":228},[79,45278,3796],{"class":448},[79,45280,34206],{"class":89},[79,45282,850],{"class":228},[79,45284,45285],{"class":81,"line":816},[79,45286,542],{"emptyLinePlaceholder":541},[79,45288,45289],{"class":81,"line":821},[79,45290,542],{"emptyLinePlaceholder":541},[79,45292,45293],{"class":81,"line":837},[79,45294,34221],{"class":2313},[79,45296,45297],{"class":81,"line":853},[79,45298,34226],{"class":2313},[79,45300,45301],{"class":81,"line":864},[79,45302,34231],{"class":2313},[79,45304,45305,45307,45309,45311,45313,45315,45317],{"class":81,"line":869},[79,45306,34236],{"class":228},[79,45308,239],{"class":448},[79,45310,34241],{"class":228},[79,45312,34244],{"class":7284},[79,45314,239],{"class":448},[79,45316,34249],{"class":96},[79,45318,850],{"class":228},[79,45320,45321],{"class":81,"line":885},[79,45322,542],{"emptyLinePlaceholder":541},[79,45324,45325],{"class":81,"line":891},[79,45326,34260],{"class":2313},[79,45328,45329,45331,45333],{"class":81,"line":896},[79,45330,34265],{"class":228},[79,45332,239],{"class":448},[79,45334,34270],{"class":228},[79,45336,45337],{"class":81,"line":907},[79,45338,542],{"emptyLinePlaceholder":541},[79,45340,45341],{"class":81,"line":912},[79,45342,34279],{"class":2313},[79,45344,45345,45347,45349],{"class":81,"line":935},[79,45346,33295],{"class":228},[79,45348,239],{"class":448},[79,45350,34288],{"class":228},[79,45352,45353],{"class":81,"line":946},[79,45354,34293],{"class":2313},[79,45356,45357],{"class":81,"line":960},[79,45358,34298],{"class":2313},[79,45360,45361],{"class":81,"line":975},[79,45362,34303],{"class":2313},[79,45364,45365,45367,45369],{"class":81,"line":980},[79,45366,34308],{"class":228},[79,45368,239],{"class":448},[79,45370,34313],{"class":228},[79,45372,45373],{"class":81,"line":1006},[79,45374,542],{"emptyLinePlaceholder":541},[79,45376,45377],{"class":81,"line":1027},[79,45378,542],{"emptyLinePlaceholder":541},[79,45380,45381],{"class":81,"line":1032},[79,45382,34326],{"class":2313},[79,45384,45385],{"class":81,"line":1047},[79,45386,34331],{"class":2313},[79,45388,45389,45391,45393],{"class":81,"line":1053},[79,45390,34336],{"class":228},[79,45392,239],{"class":448},[79,45394,34341],{"class":96},[79,45396,45397],{"class":81,"line":1058},[79,45398,34346],{"class":2313},[79,45400,45401,45403,45405],{"class":81,"line":1069},[79,45402,34351],{"class":228},[79,45404,239],{"class":448},[79,45406,34356],{"class":228},[79,45408,45409],{"class":81,"line":1081},[79,45410,34361],{"class":2313},[79,45412,45413,45415,45417],{"class":81,"line":1086},[79,45414,34366],{"class":228},[79,45416,239],{"class":448},[79,45418,34356],{"class":228},[79,45420,45421],{"class":81,"line":1108},[79,45422,34375],{"class":2313},[79,45424,45425,45427,45429],{"class":81,"line":1153},[79,45426,34380],{"class":228},[79,45428,239],{"class":448},[79,45430,34356],{"class":228},[79,45432,45433],{"class":81,"line":1158},[79,45434,34389],{"class":2313},[79,45436,45437,45439,45441],{"class":81,"line":1180},[79,45438,34394],{"class":228},[79,45440,239],{"class":448},[79,45442,34356],{"class":228},[79,45444,45445],{"class":81,"line":1197},[79,45446,542],{"emptyLinePlaceholder":541},[79,45448,45449],{"class":81,"line":1202},[79,45450,34407],{"class":2313},[79,45452,45453,45455,45457],{"class":81,"line":1207},[79,45454,34412],{"class":228},[79,45456,239],{"class":448},[79,45458,34417],{"class":228},[79,45460,45461],{"class":81,"line":1223},[79,45462,542],{"emptyLinePlaceholder":541},[79,45464,45465],{"class":81,"line":18722},[79,45466,542],{"emptyLinePlaceholder":541},[79,45468,45469],{"class":81,"line":18728},[79,45470,34430],{"class":2313},[79,45472,45473,45475,45477,45479,45481],{"class":81,"line":18739},[79,45474,915],{"class":448},[79,45476,34437],{"class":228},[79,45478,921],{"class":448},[79,45480,924],{"class":96},[79,45482,34444],{"class":228},[79,45484,45485,45487,45489,45491,45493,45495,45497,45499,45501,45503,45505],{"class":81,"line":18762},[79,45486,34449],{"class":96},[79,45488,455],{"class":228},[79,45490,34454],{"class":89},[79,45492,34457],{"class":96},[79,45494,2824],{"class":89},[79,45496,34457],{"class":96},[79,45498,2495],{"class":89},[79,45500,34466],{"class":228},[79,45502,478],{"class":448},[79,45504,775],{"class":96},[79,45506,1150],{"class":228},[79,45508,45509,45511,45513,45515,45517,45519],{"class":81,"line":18784},[79,45510,34449],{"class":96},[79,45512,455],{"class":228},[79,45514,34481],{"class":89},[79,45516,473],{"class":448},[79,45518,2689],{"class":96},[79,45520,850],{"class":228},[79,45522,45523],{"class":81,"line":18789},[79,45524,542],{"emptyLinePlaceholder":541},[79,45526,45527],{"class":81,"line":18795},[79,45528,34496],{"class":2313},[79,45530,45531],{"class":81,"line":18809},[79,45532,34501],{"class":2313},[79,45534,45535,45537,45539],{"class":81,"line":18822},[79,45536,34506],{"class":228},[79,45538,239],{"class":448},[79,45540,34341],{"class":96},[79,45542,45543],{"class":81,"line":18827},[79,45544,34515],{"class":2313},[79,45546,45547,45549,45551],{"class":81,"line":18841},[79,45548,34520],{"class":228},[79,45550,239],{"class":448},[79,45552,5160],{"class":96},[79,45554,45555],{"class":81,"line":18846},[79,45556,34529],{"class":2313},[79,45558,45559,45561,45563],{"class":81,"line":18852},[79,45560,34534],{"class":228},[79,45562,239],{"class":448},[79,45564,34341],{"class":96},[79,45566,45567],{"class":81,"line":18857},[79,45568,34543],{"class":2313},[79,45570,45571,45573,45575],{"class":81,"line":18871},[79,45572,34548],{"class":228},[79,45574,239],{"class":448},[79,45576,5160],{"class":96},[79,45578,45579],{"class":81,"line":18876},[79,45580,34557],{"class":2313},[79,45582,45583,45585,45587],{"class":81,"line":18881},[79,45584,34562],{"class":228},[79,45586,239],{"class":448},[79,45588,5160],{"class":96},[79,45590,45591],{"class":81,"line":18895},[79,45592,34571],{"class":2313},[79,45594,45595,45597,45599],{"class":81,"line":18907},[79,45596,34576],{"class":228},[79,45598,239],{"class":448},[79,45600,5160],{"class":96},[79,45602,45603],{"class":81,"line":18912},[79,45604,34585],{"class":2313},[79,45606,45607,45609,45611,45613,45615],{"class":81,"line":18925},[79,45608,5477],{"class":448},[79,45610,33603],{"class":228},[79,45612,921],{"class":448},[79,45614,33608],{"class":96},[79,45616,34598],{"class":228},[79,45618,45619],{"class":81,"line":18930},[79,45620,34603],{"class":2313},[79,45622,45623,45625,45627],{"class":81,"line":18935},[79,45624,34608],{"class":228},[79,45626,239],{"class":448},[79,45628,34613],{"class":228},[79,45630,45631],{"class":81,"line":18940},[79,45632,34618],{"class":2313},[79,45634,45635,45637,45639],{"class":81,"line":18953},[79,45636,34623],{"class":228},[79,45638,239],{"class":448},[79,45640,34628],{"class":228},[79,45642,45643],{"class":81,"line":18958},[79,45644,34634],{"class":2313},[79,45646,45647],{"class":81,"line":34631},[79,45648,34640],{"class":228},[79,45650,45651],{"class":81,"line":34637},[79,45652,34646],{"class":2313},[79,45654,45655],{"class":81,"line":34643},[79,45656,34652],{"class":2313},[79,45658,45659,45661,45663],{"class":81,"line":34649},[79,45660,34658],{"class":228},[79,45662,239],{"class":448},[79,45664,34663],{"class":228},[79,45666,45667],{"class":81,"line":34655},[79,45668,34669],{"class":2313},[79,45670,45671,45673,45675,45677,45679,45681,45683],{"class":81,"line":34666},[79,45672,34675],{"class":228},[79,45674,239],{"class":448},[79,45676,34680],{"class":228},[79,45678,34683],{"class":7284},[79,45680,239],{"class":448},[79,45682,775],{"class":96},[79,45684,850],{"class":228},[79,45686,45687],{"class":81,"line":34672},[79,45688,34695],{"class":2313},[79,45690,45691,45693,45695],{"class":81,"line":34692},[79,45692,34701],{"class":228},[79,45694,239],{"class":448},[79,45696,34706],{"class":228},[79,45698,45699],{"class":81,"line":34698},[79,45700,34712],{"class":2313},[79,45702,45703],{"class":81,"line":34709},[79,45704,34718],{"class":228},[79,45706,45707],{"class":81,"line":34715},[79,45708,34724],{"class":2313},[79,45710,45711],{"class":81,"line":34721},[79,45712,34730],{"class":228},[79,45714,45715],{"class":81,"line":34727},[79,45716,34736],{"class":2313},[79,45718,45719],{"class":81,"line":34733},[79,45720,34742],{"class":228},[79,45722,45723],{"class":81,"line":34739},[79,45724,34748],{"class":2313},[79,45726,45727,45729,45731,45733,45735,45737,45739],{"class":81,"line":34745},[79,45728,34754],{"class":228},[79,45730,1075],{"class":448},[79,45732,34759],{"class":228},[79,45734,473],{"class":448},[79,45736,34764],{"class":228},[79,45738,759],{"class":96},[79,45740,850],{"class":228},[79,45742,45743],{"class":81,"line":34751},[79,45744,34774],{"class":2313},[79,45746,45747,45749,45751,45753,45755],{"class":81,"line":34771},[79,45748,34780],{"class":228},[79,45750,1075],{"class":448},[79,45752,34785],{"class":228},[79,45754,5025],{"class":448},[79,45756,34790],{"class":228},[79,45758,45759],{"class":81,"line":34777},[79,45760,34796],{"class":2313},[79,45762,45763,45765,45767,45769,45771],{"class":81,"line":34793},[79,45764,34802],{"class":228},[79,45766,1075],{"class":448},[79,45768,34764],{"class":228},[79,45770,759],{"class":96},[79,45772,850],{"class":228},[79,45774,45775],{"class":81,"line":34799},[79,45776,34816],{"class":2313},[79,45778,45779,45781,45783,45785,45787],{"class":81,"line":34813},[79,45780,5477],{"class":448},[79,45782,34824],{"class":228},[79,45784,921],{"class":448},[79,45786,33608],{"class":96},[79,45788,34831],{"class":228},[79,45790,45791],{"class":81,"line":34819},[79,45792,34837],{"class":2313},[79,45794,45795,45797,45799],{"class":81,"line":34834},[79,45796,34608],{"class":228},[79,45798,239],{"class":448},[79,45800,34613],{"class":228},[79,45802,45803],{"class":81,"line":34840},[79,45804,34852],{"class":2313},[79,45806,45807,45809,45811],{"class":81,"line":34849},[79,45808,34623],{"class":228},[79,45810,239],{"class":448},[79,45812,34628],{"class":228},[79,45814,45815],{"class":81,"line":34855},[79,45816,34867],{"class":2313},[79,45818,45819],{"class":81,"line":34864},[79,45820,34873],{"class":228},[79,45822,45823],{"class":81,"line":34870},[79,45824,38351],{"class":2313},[79,45826,45827,45829],{"class":81,"line":34876},[79,45828,34879],{"class":448},[79,45830,34882],{"class":228},[79,45832,45833],{"class":81,"line":34885},[79,45834,34888],{"class":2313},[79,45836,45837,45839,45841],{"class":81,"line":34891},[79,45838,38366],{"class":228},[79,45840,239],{"class":448},[79,45842,34663],{"class":228},[79,45844,45845],{"class":81,"line":34902},[79,45846,34905],{"class":2313},[79,45848,45849,45851,45853,45855,45857,45859,45861],{"class":81,"line":34908},[79,45850,38379],{"class":228},[79,45852,239],{"class":448},[79,45854,34680],{"class":228},[79,45856,34683],{"class":7284},[79,45858,239],{"class":448},[79,45860,775],{"class":96},[79,45862,850],{"class":228},[79,45864,45865],{"class":81,"line":34927},[79,45866,34930],{"class":2313},[79,45868,45869,45871,45873],{"class":81,"line":34933},[79,45870,38400],{"class":228},[79,45872,239],{"class":448},[79,45874,34706],{"class":228},[79,45876,45877],{"class":81,"line":34944},[79,45878,34947],{"class":2313},[79,45880,45881,45883,45885,45887,45889,45891,45893],{"class":81,"line":34950},[79,45882,38413],{"class":228},[79,45884,1075],{"class":448},[79,45886,38418],{"class":228},[79,45888,473],{"class":448},[79,45890,34764],{"class":228},[79,45892,759],{"class":96},[79,45894,850],{"class":228},[79,45896,45897,45899,45901,45903,45905],{"class":81,"line":34970},[79,45898,38431],{"class":228},[79,45900,1075],{"class":448},[79,45902,34785],{"class":228},[79,45904,5025],{"class":448},[79,45906,34790],{"class":228},[79,45908,45909],{"class":81,"line":34986},[79,45910,38444],{"class":2313},[79,45912,45913,45915,45917,45919,45921],{"class":81,"line":34992},[79,45914,38449],{"class":228},[79,45916,1075],{"class":448},[79,45918,34764],{"class":228},[79,45920,759],{"class":96},[79,45922,850],{"class":228},[79,45924,45925],{"class":81,"line":35006},[79,45926,35009],{"class":2313},[79,45928,45929],{"class":81,"line":35012},[79,45930,35015],{"class":2313},[79,45932,45933,45935,45937],{"class":81,"line":35018},[79,45934,35021],{"class":228},[79,45936,2824],{"class":448},[79,45938,35026],{"class":228},[79,45940,45941],{"class":81,"line":35029},[79,45942,35032],{"class":2313},[79,45944,45945],{"class":81,"line":35035},[79,45946,35038],{"class":2313},[79,45948,45949,45951,45953],{"class":81,"line":35041},[79,45950,35044],{"class":228},[79,45952,2824],{"class":448},[79,45954,35026],{"class":228},[79,45956,45957],{"class":81,"line":35051},[79,45958,35054],{"class":2313},[79,45960,45961,45963,45965],{"class":81,"line":35057},[79,45962,35060],{"class":228},[79,45964,2824],{"class":448},[79,45966,35065],{"class":228},[79,45968,45969],{"class":81,"line":35068},[79,45970,35071],{"class":2313},[79,45972,45973,45975,45977],{"class":81,"line":35074},[79,45974,35077],{"class":228},[79,45976,2824],{"class":448},[79,45978,35065],{"class":228},[79,45980,45981],{"class":81,"line":35084},[79,45982,542],{"emptyLinePlaceholder":541},[79,45984,45985],{"class":81,"line":35089},[79,45986,35092],{"class":2313},[79,45988,45989,45991,45993,45995,45997,45999,46001,46003,46005,46007,46009,46011,46013,46015,46017,46019,46021,46023,46025,46027],{"class":81,"line":35095},[79,45990,34449],{"class":96},[79,45992,455],{"class":228},[79,45994,5666],{"class":89},[79,45996,34457],{"class":96},[79,45998,35106],{"class":89},[79,46000,3136],{"class":96},[79,46002,35111],{"class":448},[79,46004,3185],{"class":96},[79,46006,35116],{"class":89},[79,46008,3136],{"class":96},[79,46010,35111],{"class":448},[79,46012,3185],{"class":96},[79,46014,5666],{"class":89},[79,46016,35127],{"class":228},[79,46018,478],{"class":448},[79,46020,775],{"class":96},[79,46022,35134],{"class":228},[79,46024,478],{"class":448},[79,46026,775],{"class":96},[79,46028,35141],{"class":228},[79,46030,46031,46033,46035,46037,46039,46041,46043,46045,46047,46049,46051,46053,46055,46057,46059,46061,46063,46065,46067,46069],{"class":81,"line":35144},[79,46032,34449],{"class":96},[79,46034,455],{"class":228},[79,46036,5666],{"class":89},[79,46038,34457],{"class":96},[79,46040,35155],{"class":89},[79,46042,3136],{"class":96},[79,46044,35111],{"class":448},[79,46046,3185],{"class":96},[79,46048,35164],{"class":89},[79,46050,3136],{"class":96},[79,46052,35111],{"class":448},[79,46054,3185],{"class":96},[79,46056,5666],{"class":89},[79,46058,35175],{"class":228},[79,46060,478],{"class":448},[79,46062,775],{"class":96},[79,46064,35182],{"class":228},[79,46066,478],{"class":448},[79,46068,775],{"class":96},[79,46070,35141],{"class":228},[79,46072,46073],{"class":81,"line":35191},[79,46074,542],{"emptyLinePlaceholder":541},[79,46076,46077],{"class":81,"line":35196},[79,46078,35199],{"class":2313},[79,46080,46081,46083,46085,46087,46089,46091,46093],{"class":81,"line":35202},[79,46082,1089],{"class":448},[79,46084,35207],{"class":228},[79,46086,478],{"class":448},[79,46088,775],{"class":96},[79,46090,3179],{"class":228},[79,46092,3199],{"class":448},[79,46094,35218],{"class":228},[79,46096,46097],{"class":81,"line":35221},[79,46098,35224],{"class":2313},[79,46100,46101,46103,46105,46107,46109,46111,46113],{"class":81,"line":35227},[79,46102,35230],{"class":228},[79,46104,742],{"class":96},[79,46106,239],{"class":448},[79,46108,35237],{"class":228},[79,46110,478],{"class":448},[79,46112,775],{"class":96},[79,46114,762],{"class":228},[79,46116,46117],{"class":81,"line":35246},[79,46118,35249],{"class":2313},[79,46120,46121],{"class":81,"line":35252},[79,46122,35255],{"class":2313},[79,46124,46125,46127,46129],{"class":81,"line":35258},[79,46126,35261],{"class":228},[79,46128,239],{"class":448},[79,46130,34313],{"class":228},[79,46132,46133],{"class":81,"line":35268},[79,46134,542],{"emptyLinePlaceholder":541},[79,46136,46137],{"class":81,"line":35273},[79,46138,35276],{"class":2313},[79,46140,46141,46143,46145,46147,46149],{"class":81,"line":35279},[79,46142,35282],{"class":228},[79,46144,239],{"class":448},[79,46146,35287],{"class":228},[79,46148,478],{"class":448},[79,46150,35292],{"class":228},[79,46152,46153,46155,46157,46159,46161,46163,46165,46167,46169,46171,46173,46175,46177,46179,46181,46183,46185,46187],{"class":81,"line":35295},[79,46154,34449],{"class":96},[79,46156,455],{"class":228},[79,46158,35302],{"class":89},[79,46160,3136],{"class":96},[79,46162,35307],{"class":448},[79,46164,3185],{"class":96},[79,46166,2784],{"class":89},[79,46168,3136],{"class":96},[79,46170,35307],{"class":448},[79,46172,3185],{"class":96},[79,46174,35320],{"class":89},[79,46176,35323],{"class":228},[79,46178,35326],{"class":448},[79,46180,3147],{"class":96},[79,46182,35331],{"class":228},[79,46184,1094],{"class":448},[79,46186,3147],{"class":96},[79,46188,1150],{"class":228},[79,46190,46191],{"class":81,"line":35340},[79,46192,38728],{"class":2313},[79,46194,46195],{"class":81,"line":35346},[79,46196,38733],{"class":2313},[79,46198,46199,46201,46203],{"class":81,"line":35352},[79,46200,38738],{"class":228},[79,46202,35364],{"class":89},[79,46204,850],{"class":228},[79,46206,46207],{"class":81,"line":35358},[79,46208,35384],{"class":2313},[79,46210,46211,46213,46215,46217,46219,46221],{"class":81,"line":35369},[79,46212,35390],{"class":228},[79,46214,239],{"class":448},[79,46216,35395],{"class":228},[79,46218,35398],{"class":7284},[79,46220,239],{"class":448},[79,46222,3652],{"class":228},[79,46224,46225,46227,46229,46231],{"class":81,"line":35375},[79,46226,35408],{"class":89},[79,46228,3099],{"class":228},[79,46230,35413],{"class":96},[79,46232,35416],{"class":228},[79,46234,46235,46237],{"class":81,"line":35381},[79,46236,35422],{"class":89},[79,46238,35425],{"class":228},[79,46240,46241,46243],{"class":81,"line":35387},[79,46242,35431],{"class":89},[79,46244,35434],{"class":228},[79,46246,46247,46249],{"class":81,"line":35405},[79,46248,35440],{"class":89},[79,46250,35443],{"class":228},[79,46252,46253,46255],{"class":81,"line":35419},[79,46254,35449],{"class":89},[79,46256,35452],{"class":228},[79,46258,46259],{"class":81,"line":35428},[79,46260,35458],{"class":228},[79,46262,46263],{"class":81,"line":35437},[79,46264,35464],{"class":2313},[79,46266,46267,46269],{"class":81,"line":35446},[79,46268,715],{"class":448},[79,46270,35472],{"class":228},[79,46272,46273],{"class":81,"line":35455},[79,46274,542],{"emptyLinePlaceholder":541},[79,46276,46277],{"class":81,"line":35461},[79,46278,35483],{"class":2313},[79,46280,46281,46283,46285],{"class":81,"line":35467},[79,46282,703],{"class":448},[79,46284,35491],{"class":85},[79,46286,35494],{"class":228},[79,46288,46289],{"class":81,"line":35475},[79,46290,35500],{"class":2313},[79,46292,46293,46295,46297,46299,46301,46303,46305,46307],{"class":81,"line":35480},[79,46294,35506],{"class":228},[79,46296,33694],{"class":7284},[79,46298,239],{"class":448},[79,46300,455],{"class":228},[79,46302,2739],{"class":96},[79,46304,2621],{"class":228},[79,46306,2537],{"class":96},[79,46308,1150],{"class":228},[79,46310,46311],{"class":81,"line":35486},[79,46312,35526],{"class":2313},[79,46314,46315],{"class":81,"line":35497},[79,46316,35532],{"class":2313},[79,46318,46319],{"class":81,"line":35503},[79,46320,35538],{"class":2313},[79,46322,46323,46325,46327,46329,46331,46333,46335],{"class":81,"line":35523},[79,46324,33728],{"class":228},[79,46326,775],{"class":96},[79,46328,2621],{"class":228},[79,46330,2331],{"class":96},[79,46332,2621],{"class":228},[79,46334,775],{"class":96},[79,46336,850],{"class":228},[79,46338,46339],{"class":81,"line":35529},[79,46340,35561],{"class":2313},[79,46342,46343],{"class":81,"line":35535},[79,46344,35567],{"class":2313},[79,46346,46347],{"class":81,"line":35541},[79,46348,35573],{"class":2313},[79,46350,46351],{"class":81,"line":35558},[79,46352,35579],{"class":2313},[79,46354,46355],{"class":81,"line":35564},[79,46356,35585],{"class":2313},[79,46358,46359,46361,46363,46365,46367,46369,46371,46373,46375],{"class":81,"line":35570},[79,46360,35591],{"class":228},[79,46362,35594],{"class":89},[79,46364,35597],{"class":228},[79,46366,35600],{"class":89},[79,46368,2621],{"class":228},[79,46370,35605],{"class":7284},[79,46372,239],{"class":448},[79,46374,35610],{"class":89},[79,46376,850],{"class":228},[79,46378,46379,46381,46383,46385,46387,46389,46391,46393,46395],{"class":81,"line":35576},[79,46380,35591],{"class":228},[79,46382,35594],{"class":89},[79,46384,35622],{"class":228},[79,46386,35625],{"class":89},[79,46388,2621],{"class":228},[79,46390,35605],{"class":7284},[79,46392,239],{"class":448},[79,46394,35634],{"class":89},[79,46396,850],{"class":228},[79,46398,46399],{"class":81,"line":35582},[79,46400,35642],{"class":2313},[79,46402,46403],{"class":81,"line":35588},[79,46404,35648],{"class":228},[79,46406,46407],{"class":81,"line":35615},[79,46408,35654],{"class":2313},[79,46410,46411,46413,46415],{"class":81,"line":35639},[79,46412,35660],{"class":228},[79,46414,35663],{"class":89},[79,46416,850],{"class":228},[79,46418,46419,46421,46423],{"class":81,"line":35645},[79,46420,35671],{"class":228},[79,46422,35674],{"class":89},[79,46424,850],{"class":228},[79,46426,46427],{"class":81,"line":35651},[79,46428,35682],{"class":2313},[79,46430,46431,46433,46435,46437,46439,46441,46443],{"class":81,"line":35657},[79,46432,33728],{"class":228},[79,46434,775],{"class":96},[79,46436,2621],{"class":228},[79,46438,2331],{"class":96},[79,46440,2621],{"class":228},[79,46442,2331],{"class":96},[79,46444,850],{"class":228},[79,46446,46447,46449,46451,46453,46455,46457,46459,46461,46463],{"class":81,"line":35668},[79,46448,35591],{"class":228},[79,46450,35594],{"class":89},[79,46452,35709],{"class":228},[79,46454,35600],{"class":89},[79,46456,2621],{"class":228},[79,46458,35605],{"class":7284},[79,46460,239],{"class":448},[79,46462,35720],{"class":89},[79,46464,850],{"class":228},[79,46466,46467,46469,46471,46473,46475,46477,46479,46481,46483],{"class":81,"line":35679},[79,46468,35591],{"class":228},[79,46470,35594],{"class":89},[79,46472,35732],{"class":228},[79,46474,35625],{"class":89},[79,46476,2621],{"class":228},[79,46478,35605],{"class":7284},[79,46480,239],{"class":448},[79,46482,35743],{"class":89},[79,46484,850],{"class":228},[79,46486,46487],{"class":81,"line":35685},[79,46488,35751],{"class":2313},[79,46490,46491],{"class":81,"line":35702},[79,46492,35648],{"class":228},[79,46494,46495,46497,46499],{"class":81,"line":35725},[79,46496,35660],{"class":228},[79,46498,35594],{"class":89},[79,46500,850],{"class":228},[79,46502,46503,46505,46507],{"class":81,"line":35748},[79,46504,35671],{"class":228},[79,46506,35773],{"class":89},[79,46508,850],{"class":228},[79,46510,46511],{"class":81,"line":35754},[79,46512,35781],{"class":228},[79,46514,46515],{"class":81,"line":35759},[79,46516,542],{"emptyLinePlaceholder":541},[79,46518,46519],{"class":81,"line":35768},[79,46520,35792],{"class":2313},[79,46522,46523,46525,46527,46529,46531],{"class":81,"line":35778},[79,46524,1210],{"class":448},[79,46526,1213],{"class":96},[79,46528,5025],{"class":448},[79,46530,33231],{"class":89},[79,46532,745],{"class":228},[79,46534,46535],{"class":81,"line":35784},[79,46536,35811],{"class":2313},[79,46538,46539,46542,46544],{"class":81,"line":35789},[79,46540,46541],{"class":228},"    GoogLeNet",[79,46543,239],{"class":448},[79,46545,46546],{"class":228},"GoogLeNet(Inception)\n",[79,46548,46549,46551,46553],{"class":81,"line":35795},[79,46550,35828],{"class":228},[79,46552,239],{"class":448},[79,46554,35833],{"class":228},[79,46556,46557,46559,46561,46564,46566,46568,46570],{"class":81,"line":35808},[79,46558,35390],{"class":228},[79,46560,239],{"class":448},[79,46562,46563],{"class":228},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[79,46565,35846],{"class":7284},[79,46567,239],{"class":448},[79,46569,3190],{"class":96},[79,46571,850],{"class":228},[79,46573,46574],{"class":81,"line":35814},[79,46575,35858],{"class":228},[26,46577,46578],{"start":178},[29,46579,42569],{},[51,46581,46583],{"className":439,"code":46582,"language":441,"meta":57,"style":57},"import torch\nimport torch.utils.data as Data\nfrom torchvision import transforms\n# 导入数据集\nfrom torchvision.datasets import FashionMNIST\nfrom model import GoogLeNet,Inception\n\n\n# 测试数据处理\ndef test_data_process():\n    test_data=FashionMNIST(root='.\u002Fdata',\n                           train=False,\n                           transform=transforms.Compose([transforms.Resize(size=227),transforms.ToTensor()]),\n                           download=True)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=GoogLeNet(Inception)\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['T-shirt\u002Ftop','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[59,46584,46585,46591,46601,46611,46615,46625,46636,46640,46644,46648,46656,46672,46682,46698,46708,46722,46726,46736,46746,46756,46762,46766,46770,46778,46782,46798,46806,46810,46814,46822,46830,46834,46838,46842,46846,46852,46856,46866,46874,46882,46886,46890,46894,46902,46906,46922,46926,46930,46934,46946,46950,46962,46966,46970,46982,46986,46996,47000,47004,47016,47020,47028,47032,47036,47044,47048,47056,47060,47064,47068,47072,47076,47092,47100,47104,47108,47156,47162,47166,47176,47184,47192,47196,47200,47204,47208,47216,47220,47236,47240,47248,47256],{"__ignoreMap":57},[79,46586,46587,46589],{"class":81,"line":82},[79,46588,520],{"class":448},[79,46590,32405],{"class":228},[79,46592,46593,46595,46597,46599],{"class":81,"line":167},[79,46594,520],{"class":448},[79,46596,33417],{"class":228},[79,46598,533],{"class":448},[79,46600,33422],{"class":228},[79,46602,46603,46605,46607,46609],{"class":81,"line":178},[79,46604,32745],{"class":448},[79,46606,33400],{"class":228},[79,46608,520],{"class":448},[79,46610,33405],{"class":228},[79,46612,46613],{"class":81,"line":545},[79,46614,35919],{"class":2313},[79,46616,46617,46619,46621,46623],{"class":81,"line":550},[79,46618,32745],{"class":448},[79,46620,33373],{"class":228},[79,46622,520],{"class":448},[79,46624,33378],{"class":228},[79,46626,46627,46629,46631,46633],{"class":81,"line":562},[79,46628,32745],{"class":448},[79,46630,33915],{"class":228},[79,46632,520],{"class":448},[79,46634,46635],{"class":228}," GoogLeNet,Inception\n",[79,46637,46638],{"class":81,"line":568},[79,46639,542],{"emptyLinePlaceholder":541},[79,46641,46642],{"class":81,"line":574},[79,46643,542],{"emptyLinePlaceholder":541},[79,46645,46646],{"class":81,"line":579},[79,46647,35948],{"class":2313},[79,46649,46650,46652,46654],{"class":81,"line":585},[79,46651,703],{"class":448},[79,46653,35955],{"class":85},[79,46655,33953],{"class":228},[79,46657,46658,46660,46662,46664,46666,46668,46670],{"class":81,"line":591},[79,46659,35962],{"class":228},[79,46661,239],{"class":448},[79,46663,33457],{"class":228},[79,46665,33460],{"class":7284},[79,46667,239],{"class":448},[79,46669,33465],{"class":89},[79,46671,33468],{"class":228},[79,46673,46674,46676,46678,46680],{"class":81,"line":596},[79,46675,35979],{"class":7284},[79,46677,239],{"class":448},[79,46679,35984],{"class":96},[79,46681,33468],{"class":228},[79,46683,46684,46686,46688,46690,46692,46694,46696],{"class":81,"line":602},[79,46685,35991],{"class":7284},[79,46687,239],{"class":448},[79,46689,33495],{"class":228},[79,46691,33498],{"class":7284},[79,46693,239],{"class":448},[79,46695,37444],{"class":96},[79,46697,33506],{"class":228},[79,46699,46700,46702,46704,46706],{"class":81,"line":608},[79,46701,36008],{"class":7284},[79,46703,239],{"class":448},[79,46705,33478],{"class":96},[79,46707,850],{"class":228},[79,46709,46710,46712,46714,46716,46718,46720],{"class":81,"line":614},[79,46711,36019],{"class":228},[79,46713,239],{"class":448},[79,46715,33536],{"class":228},[79,46717,33539],{"class":7284},[79,46719,239],{"class":448},[79,46721,36030],{"class":228},[79,46723,46724],{"class":81,"line":619},[79,46725,36035],{"class":2313},[79,46727,46728,46730,46732,46734],{"class":81,"line":625},[79,46729,36040],{"class":7284},[79,46731,239],{"class":448},[79,46733,775],{"class":96},[79,46735,33468],{"class":228},[79,46737,46738,46740,46742,46744],{"class":81,"line":631},[79,46739,36051],{"class":7284},[79,46741,239],{"class":448},[79,46743,33478],{"class":96},[79,46745,33468],{"class":228},[79,46747,46748,46750,46752,46754],{"class":81,"line":637},[79,46749,36062],{"class":7284},[79,46751,239],{"class":448},[79,46753,759],{"class":96},[79,46755,850],{"class":228},[79,46757,46758,46760],{"class":81,"line":643},[79,46759,715],{"class":448},[79,46761,36075],{"class":228},[79,46763,46764],{"class":81,"line":649},[79,46765,542],{"emptyLinePlaceholder":541},[79,46767,46768],{"class":81,"line":655},[79,46769,36084],{"class":2313},[79,46771,46772,46774,46776],{"class":81,"line":660},[79,46773,703],{"class":448},[79,46775,36091],{"class":85},[79,46777,36094],{"class":228},[79,46779,46780],{"class":81,"line":666},[79,46781,36099],{"class":2313},[79,46783,46784,46786,46788,46790,46792,46794,46796],{"class":81,"line":672},[79,46785,33243],{"class":228},[79,46787,239],{"class":448},[79,46789,33250],{"class":89},[79,46791,3799],{"class":448},[79,46793,33255],{"class":228},[79,46795,3796],{"class":448},[79,46797,36116],{"class":89},[79,46799,46800,46802,46804],{"class":81,"line":678},[79,46801,33295],{"class":228},[79,46803,239],{"class":448},[79,46805,34288],{"class":228},[79,46807,46808],{"class":81,"line":684},[79,46809,542],{"emptyLinePlaceholder":541},[79,46811,46812],{"class":81,"line":690},[79,46813,36133],{"class":2313},[79,46815,46816,46818,46820],{"class":81,"line":695},[79,46817,36138],{"class":228},[79,46819,239],{"class":448},[79,46821,34341],{"class":96},[79,46823,46824,46826,46828],{"class":81,"line":700},[79,46825,36147],{"class":228},[79,46827,239],{"class":448},[79,46829,5160],{"class":96},[79,46831,46832],{"class":81,"line":712},[79,46833,542],{"emptyLinePlaceholder":541},[79,46835,46836],{"class":81,"line":721},[79,46837,36160],{"class":2313},[79,46839,46840],{"class":81,"line":726},[79,46841,36165],{"class":2313},[79,46843,46844],{"class":81,"line":731},[79,46845,36170],{"class":2313},[79,46847,46848,46850],{"class":81,"line":748},[79,46849,36175],{"class":448},[79,46851,34882],{"class":228},[79,46853,46854],{"class":81,"line":765},[79,46855,36182],{"class":2313},[79,46857,46858,46860,46862,46864],{"class":81,"line":780},[79,46859,5477],{"class":448},[79,46861,36189],{"class":228},[79,46863,921],{"class":448},[79,46865,36194],{"class":228},[79,46867,46868,46870,46872],{"class":81,"line":811},[79,46869,36199],{"class":228},[79,46871,239],{"class":448},[79,46873,36204],{"class":228},[79,46875,46876,46878,46880],{"class":81,"line":816},[79,46877,36209],{"class":228},[79,46879,239],{"class":448},[79,46881,36214],{"class":228},[79,46883,46884],{"class":81,"line":821},[79,46885,36219],{"class":2313},[79,46887,46888],{"class":81,"line":837},[79,46889,34873],{"class":228},[79,46891,46892],{"class":81,"line":853},[79,46893,36228],{"class":2313},[79,46895,46896,46898,46900],{"class":81,"line":864},[79,46897,34658],{"class":228},[79,46899,239],{"class":448},[79,46901,36237],{"class":228},[79,46903,46904],{"class":81,"line":869},[79,46905,36242],{"class":2313},[79,46907,46908,46910,46912,46914,46916,46918,46920],{"class":81,"line":885},[79,46909,34675],{"class":228},[79,46911,239],{"class":448},[79,46913,34680],{"class":228},[79,46915,34683],{"class":7284},[79,46917,239],{"class":448},[79,46919,775],{"class":96},[79,46921,850],{"class":228},[79,46923,46924],{"class":81,"line":891},[79,46925,36263],{"class":2313},[79,46927,46928],{"class":81,"line":896},[79,46929,36268],{"class":2313},[79,46931,46932],{"class":81,"line":907},[79,46933,36273],{"class":2313},[79,46935,46936,46938,46940,46942,46944],{"class":81,"line":912},[79,46937,36278],{"class":228},[79,46939,1075],{"class":448},[79,46941,34785],{"class":228},[79,46943,5025],{"class":448},[79,46945,36287],{"class":228},[79,46947,46948],{"class":81,"line":935},[79,46949,36292],{"class":2313},[79,46951,46952,46954,46956,46958,46960],{"class":81,"line":946},[79,46953,36297],{"class":228},[79,46955,1075],{"class":448},[79,46957,36302],{"class":228},[79,46959,759],{"class":96},[79,46961,850],{"class":228},[79,46963,46964],{"class":81,"line":960},[79,46965,542],{"emptyLinePlaceholder":541},[79,46967,46968],{"class":81,"line":975},[79,46969,36315],{"class":2313},[79,46971,46972,46974,46976,46978,46980],{"class":81,"line":980},[79,46973,36320],{"class":228},[79,46975,239],{"class":448},[79,46977,36325],{"class":228},[79,46979,2824],{"class":448},[79,46981,36330],{"class":228},[79,46983,46984],{"class":81,"line":1006},[79,46985,36335],{"class":2313},[79,46987,46988,46990,46992,46994],{"class":81,"line":1027},[79,46989,34449],{"class":96},[79,46991,455],{"class":228},[79,46993,36344],{"class":89},[79,46995,36347],{"class":228},[79,46997,46998],{"class":81,"line":1032},[79,46999,542],{"emptyLinePlaceholder":541},[79,47001,47002],{"class":81,"line":1047},[79,47003,36356],{"class":2313},[79,47005,47006,47008,47010,47012,47014],{"class":81,"line":1053},[79,47007,1210],{"class":448},[79,47009,1213],{"class":96},[79,47011,5025],{"class":448},[79,47013,33231],{"class":89},[79,47015,745],{"class":228},[79,47017,47018],{"class":81,"line":1058},[79,47019,36373],{"class":2313},[79,47021,47022,47024,47026],{"class":81,"line":1069},[79,47023,33295],{"class":228},[79,47025,239],{"class":448},[79,47027,46546],{"class":228},[79,47029,47030],{"class":81,"line":1081},[79,47031,36386],{"class":2313},[79,47033,47034],{"class":81,"line":1086},[79,47035,36391],{"class":2313},[79,47037,47038,47040,47042],{"class":81,"line":1108},[79,47039,36396],{"class":228},[79,47041,36399],{"class":89},[79,47043,1150],{"class":228},[79,47045,47046],{"class":81,"line":1153},[79,47047,36406],{"class":2313},[79,47049,47050,47052,47054],{"class":81,"line":1158},[79,47051,36019],{"class":228},[79,47053,239],{"class":448},[79,47055,36415],{"class":228},[79,47057,47058],{"class":81,"line":1180},[79,47059,36420],{"class":2313},[79,47061,47062],{"class":81,"line":1197},[79,47063,36425],{"class":228},[79,47065,47066],{"class":81,"line":1202},[79,47067,542],{"emptyLinePlaceholder":541},[79,47069,47070],{"class":81,"line":1207},[79,47071,36434],{"class":2313},[79,47073,47074],{"class":81,"line":1223},[79,47075,36439],{"class":2313},[79,47077,47078,47080,47082,47084,47086,47088,47090],{"class":81,"line":18722},[79,47079,33243],{"class":228},[79,47081,239],{"class":448},[79,47083,33250],{"class":89},[79,47085,3799],{"class":448},[79,47087,33255],{"class":228},[79,47089,3796],{"class":448},[79,47091,36116],{"class":89},[79,47093,47094,47096,47098],{"class":81,"line":18728},[79,47095,33295],{"class":228},[79,47097,239],{"class":448},[79,47099,34288],{"class":228},[79,47101,47102],{"class":81,"line":18739},[79,47103,36468],{"class":2313},[79,47105,47106],{"class":81,"line":18762},[79,47107,36473],{"class":2313},[79,47109,47110,47112,47114,47116,47118,47120,47122,47124,47126,47128,47130,47132,47134,47136,47138,47140,47142,47144,47146,47148,47150,47152,47154],{"class":81,"line":18784},[79,47111,36478],{"class":228},[79,47113,239],{"class":448},[79,47115,3130],{"class":228},[79,47117,36485],{"class":89},[79,47119,2621],{"class":228},[79,47121,36490],{"class":89},[79,47123,2621],{"class":228},[79,47125,36495],{"class":89},[79,47127,2621],{"class":228},[79,47129,36500],{"class":89},[79,47131,2621],{"class":228},[79,47133,36505],{"class":89},[79,47135,2621],{"class":228},[79,47137,36510],{"class":89},[79,47139,2621],{"class":228},[79,47141,36515],{"class":89},[79,47143,2621],{"class":228},[79,47145,36520],{"class":89},[79,47147,2621],{"class":228},[79,47149,36525],{"class":89},[79,47151,2621],{"class":228},[79,47153,36530],{"class":89},[79,47155,762],{"class":228},[79,47157,47158,47160],{"class":81,"line":18789},[79,47159,36175],{"class":448},[79,47161,34882],{"class":228},[79,47163,47164],{"class":81,"line":18795},[79,47165,36543],{"class":2313},[79,47167,47168,47170,47172,47174],{"class":81,"line":18809},[79,47169,5477],{"class":448},[79,47171,36550],{"class":228},[79,47173,921],{"class":448},[79,47175,36194],{"class":228},[79,47177,47178,47180,47182],{"class":81,"line":18822},[79,47179,34608],{"class":228},[79,47181,239],{"class":448},[79,47183,34613],{"class":228},[79,47185,47186,47188,47190],{"class":81,"line":18827},[79,47187,34623],{"class":228},[79,47189,239],{"class":448},[79,47191,34628],{"class":228},[79,47193,47194],{"class":81,"line":18841},[79,47195,542],{"emptyLinePlaceholder":541},[79,47197,47198],{"class":81,"line":18846},[79,47199,36579],{"class":2313},[79,47201,47202],{"class":81,"line":18852},[79,47203,34873],{"class":228},[79,47205,47206],{"class":81,"line":18857},[79,47207,36588],{"class":2313},[79,47209,47210,47212,47214],{"class":81,"line":18871},[79,47211,34658],{"class":228},[79,47213,239],{"class":448},[79,47215,34663],{"class":228},[79,47217,47218],{"class":81,"line":18876},[79,47219,36601],{"class":2313},[79,47221,47222,47224,47226,47228,47230,47232,47234],{"class":81,"line":18881},[79,47223,34675],{"class":228},[79,47225,239],{"class":448},[79,47227,34680],{"class":228},[79,47229,34683],{"class":7284},[79,47231,239],{"class":448},[79,47233,775],{"class":96},[79,47235,850],{"class":228},[79,47237,47238],{"class":81,"line":18895},[79,47239,36622],{"class":2313},[79,47241,47242,47244,47246],{"class":81,"line":18907},[79,47243,36627],{"class":228},[79,47245,239],{"class":448},[79,47247,36632],{"class":228},[79,47249,47250,47252,47254],{"class":81,"line":18912},[79,47251,36637],{"class":228},[79,47253,239],{"class":448},[79,47255,36642],{"class":228},[79,47257,47258,47260,47262,47264,47266,47268,47270,47272],{"class":81,"line":18925},[79,47259,1111],{"class":96},[79,47261,455],{"class":228},[79,47263,36651],{"class":89},[79,47265,36654],{"class":228},[79,47267,36657],{"class":89},[79,47269,2621],{"class":228},[79,47271,36662],{"class":89},[79,47273,36665],{"class":228},[339,47275,47277],{"id":47276},"_24训练自己的数据集","2.4.训练自己的数据集",[19,47279,47280],{},"猫狗分类任务",[19,47282,47283],{},"划分数据集和验证集",[51,47285,47287],{"className":439,"code":47286,"language":441,"meta":57,"style":57},"# 创建脚本，用于划分数据集和验证集\nimport os\n# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\nfrom shutil import copy\nimport random\n\ndef mkfile(file):\n    if not os.path.exists(file):\n        os.makedirs(file)\n\n# 获取data文件夹下所有文件夹名（即需要分类的类名）\nfile_path='data_cat_dog'\nflower_class=[cla for cla in os.listdir(file_path)]\n\n# 创建训练集train文件夹\nmkfile('data\u002Ftrain')\nfor cla in flower_class:\n    mkfile('data\u002Ftrain\u002F'+cla)\n\n# 创建验证集val文件夹\nmkfile('data\u002Ftest')\nfor cla in flower_class:\n    mkfile('data\u002Ftest\u002F'+cla)\n\n# 划分比例，训练集：测试集=9：1\nsplit_rate=0.1\n\n# 遍历所有类别的全部图像并按比例分成训练集和验证集\n# cla_path：当前类别的原始图片路径\n# images：当前类别下所有图片的文件名列表\n# num：该类别图片总数\n# eval_index：从 images 随机抽取 10% 的图片作为验证集\n\nfor cla in flower_class:\n    cla_path = file_path + '\u002F' + cla + '\u002F'  # 某一类别的子目录\n    images = os.listdir(cla_path)  # iamges 列表存储了该目录下所有图像的名称\n    num = len(images)\n    eval_index = random.sample(images, k=int(num * split_rate))  # 从images列表中随机抽取 k 个图像名称\n    # 遍历该类别下的所有图片\n    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n    for index, image in enumerate(images):\n        # eval_index 中保存验证集val的图像名称\n        if image in eval_index:\n            image_path = cla_path + image\n            new_path = 'data\u002Ftest\u002F' + cla\n            copy(image_path, new_path)  # 将选中的图像复制到新路径\n\n        # 其余的图像保存在训练集train中\n        else:\n            image_path = cla_path + image\n            new_path = 'data\u002Ftrain\u002F' + cla\n            copy(image_path, new_path)\n            # 打印进度条信息\n            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n        print(\"\\r[{}] processing [{}\u002F{}]\".format(cla, index + 1, num), end=\"\")  # processing bar\n    print()\n\nprint(\"processing done!\")\n",[59,47288,47289,47294,47301,47306,47317,47324,47328,47338,47352,47361,47365,47370,47380,47400,47404,47409,47419,47430,47443,47447,47452,47461,47471,47482,47486,47491,47501,47505,47510,47515,47520,47525,47530,47534,47544,47571,47584,47596,47623,47628,47633,47647,47652,47664,47679,47694,47702,47706,47711,47717,47729,47742,47747,47752,47757,47807,47813,47817],{"__ignoreMap":57},[79,47290,47291],{"class":81,"line":82},[79,47292,47293],{"class":2313},"# 创建脚本，用于划分数据集和验证集\n",[79,47295,47296,47298],{"class":81,"line":167},[79,47297,520],{"class":448},[79,47299,47300],{"class":228}," os\n",[79,47302,47303],{"class":81,"line":178},[79,47304,47305],{"class":2313},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[79,47307,47308,47310,47313,47315],{"class":81,"line":545},[79,47309,32745],{"class":448},[79,47311,47312],{"class":228}," shutil ",[79,47314,520],{"class":448},[79,47316,33823],{"class":228},[79,47318,47319,47321],{"class":81,"line":550},[79,47320,520],{"class":448},[79,47322,47323],{"class":228}," random\n",[79,47325,47326],{"class":81,"line":562},[79,47327,542],{"emptyLinePlaceholder":541},[79,47329,47330,47332,47335],{"class":81,"line":568},[79,47331,703],{"class":448},[79,47333,47334],{"class":85}," mkfile",[79,47336,47337],{"class":228},"(file):\n",[79,47339,47340,47342,47344,47347,47350],{"class":81,"line":574},[79,47341,5176],{"class":448},[79,47343,40925],{"class":448},[79,47345,47346],{"class":228}," os.path.exists(",[79,47348,47349],{"class":7284},"file",[79,47351,932],{"class":228},[79,47353,47354,47357,47359],{"class":81,"line":579},[79,47355,47356],{"class":228},"        os.makedirs(",[79,47358,47349],{"class":7284},[79,47360,850],{"class":228},[79,47362,47363],{"class":81,"line":585},[79,47364,542],{"emptyLinePlaceholder":541},[79,47366,47367],{"class":81,"line":591},[79,47368,47369],{"class":2313},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[79,47371,47372,47375,47377],{"class":81,"line":596},[79,47373,47374],{"class":228},"file_path",[79,47376,239],{"class":448},[79,47378,47379],{"class":89},"'data_cat_dog'\n",[79,47381,47382,47385,47387,47390,47392,47395,47397],{"class":81,"line":602},[79,47383,47384],{"class":228},"flower_class",[79,47386,239],{"class":448},[79,47388,47389],{"class":228},"[cla ",[79,47391,1638],{"class":448},[79,47393,47394],{"class":228}," cla ",[79,47396,921],{"class":448},[79,47398,47399],{"class":228}," os.listdir(file_path)]\n",[79,47401,47402],{"class":81,"line":608},[79,47403,542],{"emptyLinePlaceholder":541},[79,47405,47406],{"class":81,"line":614},[79,47407,47408],{"class":2313},"# 创建训练集train文件夹\n",[79,47410,47411,47414,47417],{"class":81,"line":619},[79,47412,47413],{"class":228},"mkfile(",[79,47415,47416],{"class":89},"'data\u002Ftrain'",[79,47418,850],{"class":228},[79,47420,47421,47423,47425,47427],{"class":81,"line":625},[79,47422,1638],{"class":448},[79,47424,47394],{"class":228},[79,47426,921],{"class":448},[79,47428,47429],{"class":228}," flower_class:\n",[79,47431,47432,47435,47438,47440],{"class":81,"line":631},[79,47433,47434],{"class":228},"    mkfile(",[79,47436,47437],{"class":89},"'data\u002Ftrain\u002F'",[79,47439,995],{"class":448},[79,47441,47442],{"class":228},"cla)\n",[79,47444,47445],{"class":81,"line":637},[79,47446,542],{"emptyLinePlaceholder":541},[79,47448,47449],{"class":81,"line":643},[79,47450,47451],{"class":2313},"# 创建验证集val文件夹\n",[79,47453,47454,47456,47459],{"class":81,"line":649},[79,47455,47413],{"class":228},[79,47457,47458],{"class":89},"'data\u002Ftest'",[79,47460,850],{"class":228},[79,47462,47463,47465,47467,47469],{"class":81,"line":655},[79,47464,1638],{"class":448},[79,47466,47394],{"class":228},[79,47468,921],{"class":448},[79,47470,47429],{"class":228},[79,47472,47473,47475,47478,47480],{"class":81,"line":660},[79,47474,47434],{"class":228},[79,47476,47477],{"class":89},"'data\u002Ftest\u002F'",[79,47479,995],{"class":448},[79,47481,47442],{"class":228},[79,47483,47484],{"class":81,"line":666},[79,47485,542],{"emptyLinePlaceholder":541},[79,47487,47488],{"class":81,"line":672},[79,47489,47490],{"class":2313},"# 划分比例，训练集：测试集=9：1\n",[79,47492,47493,47496,47498],{"class":81,"line":678},[79,47494,47495],{"class":228},"split_rate",[79,47497,239],{"class":448},[79,47499,47500],{"class":96},"0.1\n",[79,47502,47503],{"class":81,"line":684},[79,47504,542],{"emptyLinePlaceholder":541},[79,47506,47507],{"class":81,"line":690},[79,47508,47509],{"class":2313},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[79,47511,47512],{"class":81,"line":695},[79,47513,47514],{"class":2313},"# cla_path：当前类别的原始图片路径\n",[79,47516,47517],{"class":81,"line":700},[79,47518,47519],{"class":2313},"# images：当前类别下所有图片的文件名列表\n",[79,47521,47522],{"class":81,"line":712},[79,47523,47524],{"class":2313},"# num：该类别图片总数\n",[79,47526,47527],{"class":81,"line":721},[79,47528,47529],{"class":2313},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[79,47531,47532],{"class":81,"line":726},[79,47533,542],{"emptyLinePlaceholder":541},[79,47535,47536,47538,47540,47542],{"class":81,"line":731},[79,47537,1638],{"class":448},[79,47539,47394],{"class":228},[79,47541,921],{"class":448},[79,47543,47429],{"class":228},[79,47545,47546,47549,47551,47554,47556,47559,47562,47564,47566,47568],{"class":81,"line":748},[79,47547,47548],{"class":228},"    cla_path ",[79,47550,239],{"class":448},[79,47552,47553],{"class":228}," file_path ",[79,47555,995],{"class":448},[79,47557,47558],{"class":89}," '\u002F'",[79,47560,47561],{"class":448}," +",[79,47563,47394],{"class":228},[79,47565,995],{"class":448},[79,47567,47558],{"class":89},[79,47569,47570],{"class":2313},"  # 某一类别的子目录\n",[79,47572,47573,47576,47578,47581],{"class":81,"line":765},[79,47574,47575],{"class":228},"    images ",[79,47577,239],{"class":448},[79,47579,47580],{"class":228}," os.listdir(cla_path)  ",[79,47582,47583],{"class":2313},"# iamges 列表存储了该目录下所有图像的名称\n",[79,47585,47586,47589,47591,47593],{"class":81,"line":780},[79,47587,47588],{"class":228},"    num ",[79,47590,239],{"class":448},[79,47592,9396],{"class":96},[79,47594,47595],{"class":228},"(images)\n",[79,47597,47598,47601,47603,47606,47608,47610,47612,47615,47617,47620],{"class":81,"line":811},[79,47599,47600],{"class":228},"    eval_index ",[79,47602,239],{"class":448},[79,47604,47605],{"class":228}," random.sample(images, ",[79,47607,2734],{"class":7284},[79,47609,239],{"class":448},[79,47611,2262],{"class":96},[79,47613,47614],{"class":228},"(num ",[79,47616,473],{"class":448},[79,47618,47619],{"class":228}," split_rate))  ",[79,47621,47622],{"class":2313},"# 从images列表中随机抽取 k 个图像名称\n",[79,47624,47625],{"class":81,"line":816},[79,47626,47627],{"class":2313},"    # 遍历该类别下的所有图片\n",[79,47629,47630],{"class":81,"line":821},[79,47631,47632],{"class":2313},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[79,47634,47635,47637,47640,47642,47644],{"class":81,"line":837},[79,47636,915],{"class":448},[79,47638,47639],{"class":228}," index, image ",[79,47641,921],{"class":448},[79,47643,33608],{"class":96},[79,47645,47646],{"class":228},"(images):\n",[79,47648,47649],{"class":81,"line":853},[79,47650,47651],{"class":2313},"        # eval_index 中保存验证集val的图像名称\n",[79,47653,47654,47656,47659,47661],{"class":81,"line":864},[79,47655,1089],{"class":448},[79,47657,47658],{"class":228}," image ",[79,47660,921],{"class":448},[79,47662,47663],{"class":228}," eval_index:\n",[79,47665,47666,47669,47671,47674,47676],{"class":81,"line":869},[79,47667,47668],{"class":228},"            image_path ",[79,47670,239],{"class":448},[79,47672,47673],{"class":228}," cla_path ",[79,47675,995],{"class":448},[79,47677,47678],{"class":228}," image\n",[79,47680,47681,47684,47686,47689,47691],{"class":81,"line":885},[79,47682,47683],{"class":228},"            new_path ",[79,47685,239],{"class":448},[79,47687,47688],{"class":89}," 'data\u002Ftest\u002F'",[79,47690,47561],{"class":448},[79,47692,47693],{"class":228}," cla\n",[79,47695,47696,47699],{"class":81,"line":891},[79,47697,47698],{"class":228},"            copy(image_path, new_path)  ",[79,47700,47701],{"class":2313},"# 将选中的图像复制到新路径\n",[79,47703,47704],{"class":81,"line":896},[79,47705,542],{"emptyLinePlaceholder":541},[79,47707,47708],{"class":81,"line":907},[79,47709,47710],{"class":2313},"        # 其余的图像保存在训练集train中\n",[79,47712,47713,47715],{"class":81,"line":912},[79,47714,4617],{"class":448},[79,47716,745],{"class":228},[79,47718,47719,47721,47723,47725,47727],{"class":81,"line":935},[79,47720,47668],{"class":228},[79,47722,239],{"class":448},[79,47724,47673],{"class":228},[79,47726,995],{"class":448},[79,47728,47678],{"class":228},[79,47730,47731,47733,47735,47738,47740],{"class":81,"line":946},[79,47732,47683],{"class":228},[79,47734,239],{"class":448},[79,47736,47737],{"class":89}," 'data\u002Ftrain\u002F'",[79,47739,47561],{"class":448},[79,47741,47693],{"class":228},[79,47743,47744],{"class":81,"line":960},[79,47745,47746],{"class":228},"            copy(image_path, new_path)\n",[79,47748,47749],{"class":81,"line":975},[79,47750,47751],{"class":2313},"            # 打印进度条信息\n",[79,47753,47754],{"class":81,"line":980},[79,47755,47756],{"class":2313},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[79,47758,47759,47761,47763,47765,47768,47770,47772,47775,47777,47779,47781,47784,47787,47789,47791,47794,47797,47799,47801,47804],{"class":81,"line":1006},[79,47760,34449],{"class":96},[79,47762,455],{"class":228},[79,47764,2495],{"class":89},[79,47766,47767],{"class":96},"\\r",[79,47769,3130],{"class":89},[79,47771,34457],{"class":96},[79,47773,47774],{"class":89},"] processing [",[79,47776,34457],{"class":96},[79,47778,2824],{"class":89},[79,47780,34457],{"class":96},[79,47782,47783],{"class":89},"]\"",[79,47785,47786],{"class":228},".format(cla, index ",[79,47788,995],{"class":448},[79,47790,27137],{"class":96},[79,47792,47793],{"class":228},", num), ",[79,47795,47796],{"class":7284},"end",[79,47798,239],{"class":448},[79,47800,9717],{"class":89},[79,47802,47803],{"class":228},")  ",[79,47805,47806],{"class":2313},"# processing bar\n",[79,47808,47809,47811],{"class":81,"line":1027},[79,47810,1161],{"class":96},[79,47812,4061],{"class":228},[79,47814,47815],{"class":81,"line":1032},[79,47816,542],{"emptyLinePlaceholder":541},[79,47818,47819,47821,47823,47826],{"class":81,"line":1047},[79,47820,1889],{"class":96},[79,47822,455],{"class":228},[79,47824,47825],{"class":89},"\"processing done!\"",[79,47827,850],{"class":228},[19,47829,47830],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[24023,47832,47834],{"id":47833},"_242模型代码","2.4.2.模型代码",[19,47836,47837],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[51,47839,47841],{"className":439,"code":47840,"language":441,"meta":57,"style":57},"import torch\nfrom torch import nn\nfrom torchsummary import summary\n\nclass Inception(nn.Module):\n    def __init__(self,in_channels,c1,c2,c3,c4):\n        super(Inception,self).__init__()\n        self.ReLu=nn.ReLU()\n        # 路线1：定义1*1卷积\n        self.p1_1=nn.Conv2d(in_channels=in_channels,out_channels=c1,kernel_size=1)\n        # 路线2：定义1*1卷积和3*3\n        self.p2_1=nn.Conv2d(in_channels=in_channels,out_channels=c2[0],kernel_size=1)\n        self.p2_2=nn.Conv2d(in_channels=c2[0],out_channels=c2[1],kernel_size=3,padding=1)\n        # 路线3：定义1*1卷积和5*5\n        self.p3_1=nn.Conv2d(in_channels=in_channels,out_channels=c3[0],kernel_size=1)\n        self.p3_2=nn.Conv2d(in_channels=c3[0],out_channels=c3[1],kernel_size=5,padding=2)\n        # 路线4：定义3*3最大池化和1*1卷积\n        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n        self.p4_1=nn.MaxPool2d(kernel_size=3,stride=1,padding=1)\n        self.p4_2=nn.Conv2d(in_channels=in_channels,out_channels=c4,kernel_size=1)\n\n    def forward(self,x):\n        p1=self.ReLu(self.p1_1(x))\n        p2=self.ReLu(self.p2_2(self.ReLu(self.p2_1(x))))\n        p3=self.ReLu(self.p3_2(self.ReLu(self.p3_1(x))))\n        p4=self.ReLu(self.p4_2(self.p4_1(x)))\n        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n        return torch.cat((p1,p2,p3,p4),dim=1)\n\n# 搭建GoogLeNet网络\nclass GoogLeNet(nn.Module):\n    # 必须把Inception导入到里边\n    def __init__(self,Inception):\n        super(GoogLeNet,self).__init__()\n        self.b1=nn.Sequential(\n            nn.Conv2d(in_channels=3,out_channels=64,kernel_size=7,stride=2,padding=3),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b2=nn.Sequential(\n            nn.Conv2d(in_channels=64,out_channels=64,kernel_size=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=64,out_channels=192,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b3=nn.Sequential(\n            Inception(192,64,(96,128),(16,32),32),\n            Inception(256,128,(128,192),(32,96),64),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b4=nn.Sequential(\n            Inception(480,192,(96,208),(16,48),64),\n            Inception(512,160,(112,224),(24,64),64),\n            Inception(512,128,(128,256),(24,64),64),\n            Inception(512,112,(128,288),(32,64),64),\n            Inception(528,256,(160,320),(32,128),128),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b5=nn.Sequential(\n            Inception(832,256,(160,320),(32,128),128),\n            Inception(832,384,(192,384),(48,128),128),\n            nn.AdaptiveAvgPool2d((1,1)),\n            nn.Flatten(),\n            nn.Linear(1024,2)\n        )\n        # 对模型参数初始化\n        for m in self.modules():\n            if isinstance(m,nn.Conv2d):\n                nn.init.kaiming_normal_(m.weight,mode='fan_out',nonlinearity='relu')\n                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n                # ② mode = 'fan_out'决定使用的fan值：\n                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n                if m.bias is not None:\n                    nn.init.constant_(m.bias,0)\n                elif isinstance(m,nn.Linear):\n                    nn.init.normal_(m.weight,0,0.01)\n                    if m.bias is not None:\n                        nn.init.constant_(m.bias,0)\n    # 定义前向传播\n    def forward(self,x):\n        x=self.b1(x)\n        x=self.b2(x)\n        x=self.b3(x)\n        x=self.b4(x)\n        x=self.b5(x)\n        return x\n\n# 模型展示\nif __name__==\"__main__\":\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    model=GoogLeNet(Inception).to(device)\n    print(summary(model,(1,224,224)))\n",[59,47842,47843,47849,47859,47869,47873,47889,47897,47911,47921,47925,47955,47959,47993,48039,48043,48077,48123,48127,48131,48165,48195,48199,48207,48221,48243,48265,48283,48287,48301,48305,48309,48325,48329,48337,48351,48361,48405,48409,48437,48441,48451,48479,48483,48519,48523,48551,48555,48565,48597,48629,48657,48661,48671,48703,48735,48767,48799,48831,48859,48863,48873,48905,48937,48949,48953,48965,48969,48973,48985,48993,49013,49017,49021,49025,49029,49033,49037,49051,49059,49067,49079,49093,49101,49105,49113,49123,49133,49143,49153,49163,49169,49173,49177,49189,49209,49217],{"__ignoreMap":57},[79,47844,47845,47847],{"class":81,"line":82},[79,47846,520],{"class":448},[79,47848,32405],{"class":228},[79,47850,47851,47853,47855,47857],{"class":81,"line":167},[79,47852,32745],{"class":448},[79,47854,32748],{"class":228},[79,47856,520],{"class":448},[79,47858,32753],{"class":228},[79,47860,47861,47863,47865,47867],{"class":81,"line":178},[79,47862,32745],{"class":448},[79,47864,32765],{"class":228},[79,47866,520],{"class":448},[79,47868,32770],{"class":228},[79,47870,47871],{"class":81,"line":545},[79,47872,542],{"emptyLinePlaceholder":541},[79,47874,47875,47877,47879,47881,47883,47885,47887],{"class":81,"line":550},[79,47876,16727],{"class":448},[79,47878,43488],{"class":85},[79,47880,455],{"class":228},[79,47882,32786],{"class":85},[79,47884,2798],{"class":228},[79,47886,32791],{"class":85},[79,47888,932],{"class":228},[79,47890,47891,47893,47895],{"class":81,"line":562},[79,47892,32808],{"class":448},[79,47894,32811],{"class":96},[79,47896,43507],{"class":228},[79,47898,47899,47901,47903,47905,47907,47909],{"class":81,"line":568},[79,47900,32824],{"class":96},[79,47902,43514],{"class":228},[79,47904,32830],{"class":96},[79,47906,32833],{"class":228},[79,47908,32836],{"class":96},[79,47910,4061],{"class":228},[79,47912,47913,47915,47917,47919],{"class":81,"line":574},[79,47914,32852],{"class":96},[79,47916,36767],{"class":228},[79,47918,239],{"class":448},[79,47920,36772],{"class":228},[79,47922,47923],{"class":81,"line":579},[79,47924,43537],{"class":2313},[79,47926,47927,47929,47931,47933,47935,47937,47939,47941,47943,47945,47947,47949,47951,47953],{"class":81,"line":585},[79,47928,32852],{"class":96},[79,47930,43544],{"class":228},[79,47932,239],{"class":448},[79,47934,32860],{"class":228},[79,47936,32863],{"class":7284},[79,47938,239],{"class":448},[79,47940,43555],{"class":228},[79,47942,32872],{"class":7284},[79,47944,239],{"class":448},[79,47946,43562],{"class":228},[79,47948,32881],{"class":7284},[79,47950,239],{"class":448},[79,47952,775],{"class":96},[79,47954,850],{"class":228},[79,47956,47957],{"class":81,"line":591},[79,47958,43575],{"class":2313},[79,47960,47961,47963,47965,47967,47969,47971,47973,47975,47977,47979,47981,47983,47985,47987,47989,47991],{"class":81,"line":596},[79,47962,32852],{"class":96},[79,47964,43582],{"class":228},[79,47966,239],{"class":448},[79,47968,32860],{"class":228},[79,47970,32863],{"class":7284},[79,47972,239],{"class":448},[79,47974,43555],{"class":228},[79,47976,32872],{"class":7284},[79,47978,239],{"class":448},[79,47980,43599],{"class":228},[79,47982,759],{"class":96},[79,47984,43604],{"class":228},[79,47986,32881],{"class":7284},[79,47988,239],{"class":448},[79,47990,775],{"class":96},[79,47992,850],{"class":228},[79,47994,47995,47997,47999,48001,48003,48005,48007,48009,48011,48013,48015,48017,48019,48021,48023,48025,48027,48029,48031,48033,48035,48037],{"class":81,"line":602},[79,47996,32852],{"class":96},[79,47998,43619],{"class":228},[79,48000,239],{"class":448},[79,48002,32860],{"class":228},[79,48004,32863],{"class":7284},[79,48006,239],{"class":448},[79,48008,43599],{"class":228},[79,48010,759],{"class":96},[79,48012,43604],{"class":228},[79,48014,32872],{"class":7284},[79,48016,239],{"class":448},[79,48018,43599],{"class":228},[79,48020,775],{"class":96},[79,48022,43604],{"class":228},[79,48024,32881],{"class":7284},[79,48026,239],{"class":448},[79,48028,970],{"class":96},[79,48030,2621],{"class":228},[79,48032,32890],{"class":7284},[79,48034,239],{"class":448},[79,48036,775],{"class":96},[79,48038,850],{"class":228},[79,48040,48041],{"class":81,"line":608},[79,48042,43664],{"class":2313},[79,48044,48045,48047,48049,48051,48053,48055,48057,48059,48061,48063,48065,48067,48069,48071,48073,48075],{"class":81,"line":614},[79,48046,32852],{"class":96},[79,48048,43671],{"class":228},[79,48050,239],{"class":448},[79,48052,32860],{"class":228},[79,48054,32863],{"class":7284},[79,48056,239],{"class":448},[79,48058,43555],{"class":228},[79,48060,32872],{"class":7284},[79,48062,239],{"class":448},[79,48064,43688],{"class":228},[79,48066,759],{"class":96},[79,48068,43604],{"class":228},[79,48070,32881],{"class":7284},[79,48072,239],{"class":448},[79,48074,775],{"class":96},[79,48076,850],{"class":228},[79,48078,48079,48081,48083,48085,48087,48089,48091,48093,48095,48097,48099,48101,48103,48105,48107,48109,48111,48113,48115,48117,48119,48121],{"class":81,"line":619},[79,48080,32852],{"class":96},[79,48082,43707],{"class":228},[79,48084,239],{"class":448},[79,48086,32860],{"class":228},[79,48088,32863],{"class":7284},[79,48090,239],{"class":448},[79,48092,43688],{"class":228},[79,48094,759],{"class":96},[79,48096,43604],{"class":228},[79,48098,32872],{"class":7284},[79,48100,239],{"class":448},[79,48102,43688],{"class":228},[79,48104,775],{"class":96},[79,48106,43604],{"class":228},[79,48108,32881],{"class":7284},[79,48110,239],{"class":448},[79,48112,2563],{"class":96},[79,48114,2621],{"class":228},[79,48116,32890],{"class":7284},[79,48118,239],{"class":448},[79,48120,2331],{"class":96},[79,48122,850],{"class":228},[79,48124,48125],{"class":81,"line":625},[79,48126,43752],{"class":2313},[79,48128,48129],{"class":81,"line":631},[79,48130,43757],{"class":2313},[79,48132,48133,48135,48137,48139,48141,48143,48145,48147,48149,48151,48153,48155,48157,48159,48161,48163],{"class":81,"line":637},[79,48134,32852],{"class":96},[79,48136,43764],{"class":228},[79,48138,239],{"class":448},[79,48140,36825],{"class":228},[79,48142,32881],{"class":7284},[79,48144,239],{"class":448},[79,48146,970],{"class":96},[79,48148,2621],{"class":228},[79,48150,32936],{"class":7284},[79,48152,239],{"class":448},[79,48154,775],{"class":96},[79,48156,2621],{"class":228},[79,48158,32890],{"class":7284},[79,48160,239],{"class":448},[79,48162,775],{"class":96},[79,48164,850],{"class":228},[79,48166,48167,48169,48171,48173,48175,48177,48179,48181,48183,48185,48187,48189,48191,48193],{"class":81,"line":643},[79,48168,32852],{"class":96},[79,48170,43799],{"class":228},[79,48172,239],{"class":448},[79,48174,32860],{"class":228},[79,48176,32863],{"class":7284},[79,48178,239],{"class":448},[79,48180,43555],{"class":228},[79,48182,32872],{"class":7284},[79,48184,239],{"class":448},[79,48186,43816],{"class":228},[79,48188,32881],{"class":7284},[79,48190,239],{"class":448},[79,48192,775],{"class":96},[79,48194,850],{"class":228},[79,48196,48197],{"class":81,"line":649},[79,48198,542],{"emptyLinePlaceholder":541},[79,48200,48201,48203,48205],{"class":81,"line":655},[79,48202,32808],{"class":448},[79,48204,33100],{"class":85},[79,48206,33103],{"class":228},[79,48208,48209,48211,48213,48215,48217,48219],{"class":81,"line":660},[79,48210,43841],{"class":228},[79,48212,239],{"class":448},[79,48214,32830],{"class":96},[79,48216,37180],{"class":228},[79,48218,32830],{"class":96},[79,48220,43852],{"class":228},[79,48222,48223,48225,48227,48229,48231,48233,48235,48237,48239,48241],{"class":81,"line":666},[79,48224,9150],{"class":228},[79,48226,239],{"class":448},[79,48228,32830],{"class":96},[79,48230,37180],{"class":228},[79,48232,32830],{"class":96},[79,48234,43867],{"class":228},[79,48236,32830],{"class":96},[79,48238,37180],{"class":228},[79,48240,32830],{"class":96},[79,48242,43876],{"class":228},[79,48244,48245,48247,48249,48251,48253,48255,48257,48259,48261,48263],{"class":81,"line":672},[79,48246,43881],{"class":228},[79,48248,239],{"class":448},[79,48250,32830],{"class":96},[79,48252,37180],{"class":228},[79,48254,32830],{"class":96},[79,48256,43892],{"class":228},[79,48258,32830],{"class":96},[79,48260,37180],{"class":228},[79,48262,32830],{"class":96},[79,48264,43901],{"class":228},[79,48266,48267,48269,48271,48273,48275,48277,48279,48281],{"class":81,"line":678},[79,48268,43906],{"class":228},[79,48270,239],{"class":448},[79,48272,32830],{"class":96},[79,48274,37180],{"class":228},[79,48276,32830],{"class":96},[79,48278,43917],{"class":228},[79,48280,32830],{"class":96},[79,48282,43922],{"class":228},[79,48284,48285],{"class":81,"line":684},[79,48286,43927],{"class":2313},[79,48288,48289,48291,48293,48295,48297,48299],{"class":81,"line":690},[79,48290,16785],{"class":448},[79,48292,43934],{"class":228},[79,48294,34683],{"class":7284},[79,48296,239],{"class":448},[79,48298,775],{"class":96},[79,48300,850],{"class":228},[79,48302,48303],{"class":81,"line":695},[79,48304,542],{"emptyLinePlaceholder":541},[79,48306,48307],{"class":81,"line":700},[79,48308,43955],{"class":2313},[79,48310,48311,48313,48315,48317,48319,48321,48323],{"class":81,"line":712},[79,48312,16727],{"class":448},[79,48314,43962],{"class":85},[79,48316,455],{"class":228},[79,48318,32786],{"class":85},[79,48320,2798],{"class":228},[79,48322,32791],{"class":85},[79,48324,932],{"class":228},[79,48326,48327],{"class":81,"line":721},[79,48328,43977],{"class":2313},[79,48330,48331,48333,48335],{"class":81,"line":726},[79,48332,32808],{"class":448},[79,48334,32811],{"class":96},[79,48336,43986],{"class":228},[79,48338,48339,48341,48343,48345,48347,48349],{"class":81,"line":731},[79,48340,32824],{"class":96},[79,48342,43993],{"class":228},[79,48344,32830],{"class":96},[79,48346,32833],{"class":228},[79,48348,32836],{"class":96},[79,48350,4061],{"class":228},[79,48352,48353,48355,48357,48359],{"class":81,"line":748},[79,48354,32852],{"class":96},[79,48356,44008],{"class":228},[79,48358,239],{"class":448},[79,48360,40004],{"class":228},[79,48362,48363,48365,48367,48369,48371,48373,48375,48377,48379,48381,48383,48385,48387,48389,48391,48393,48395,48397,48399,48401,48403],{"class":81,"line":765},[79,48364,40009],{"class":228},[79,48366,32863],{"class":7284},[79,48368,239],{"class":448},[79,48370,970],{"class":96},[79,48372,2621],{"class":228},[79,48374,32872],{"class":7284},[79,48376,239],{"class":448},[79,48378,2449],{"class":96},[79,48380,2621],{"class":228},[79,48382,32881],{"class":7284},[79,48384,239],{"class":448},[79,48386,2612],{"class":96},[79,48388,2621],{"class":228},[79,48390,32936],{"class":7284},[79,48392,239],{"class":448},[79,48394,2331],{"class":96},[79,48396,2621],{"class":228},[79,48398,32890],{"class":7284},[79,48400,239],{"class":448},[79,48402,970],{"class":96},[79,48404,40042],{"class":228},[79,48406,48407],{"class":81,"line":780},[79,48408,40047],{"class":228},[79,48410,48411,48413,48415,48417,48419,48421,48423,48425,48427,48429,48431,48433,48435],{"class":81,"line":811},[79,48412,40092],{"class":228},[79,48414,32881],{"class":7284},[79,48416,239],{"class":448},[79,48418,970],{"class":96},[79,48420,2621],{"class":228},[79,48422,32936],{"class":7284},[79,48424,239],{"class":448},[79,48426,2331],{"class":96},[79,48428,2621],{"class":228},[79,48430,32890],{"class":7284},[79,48432,239],{"class":448},[79,48434,775],{"class":96},[79,48436,850],{"class":228},[79,48438,48439],{"class":81,"line":816},[79,48440,40121],{"class":228},[79,48442,48443,48445,48447,48449],{"class":81,"line":821},[79,48444,32852],{"class":96},[79,48446,44099],{"class":228},[79,48448,239],{"class":448},[79,48450,40004],{"class":228},[79,48452,48453,48455,48457,48459,48461,48463,48465,48467,48469,48471,48473,48475,48477],{"class":81,"line":837},[79,48454,40009],{"class":228},[79,48456,32863],{"class":7284},[79,48458,239],{"class":448},[79,48460,2449],{"class":96},[79,48462,2621],{"class":228},[79,48464,32872],{"class":7284},[79,48466,239],{"class":448},[79,48468,2449],{"class":96},[79,48470,2621],{"class":228},[79,48472,32881],{"class":7284},[79,48474,239],{"class":448},[79,48476,775],{"class":96},[79,48478,40042],{"class":228},[79,48480,48481],{"class":81,"line":853},[79,48482,40047],{"class":228},[79,48484,48485,48487,48489,48491,48493,48495,48497,48499,48501,48503,48505,48507,48509,48511,48513,48515,48517],{"class":81,"line":864},[79,48486,40009],{"class":228},[79,48488,32863],{"class":7284},[79,48490,239],{"class":448},[79,48492,2449],{"class":96},[79,48494,2621],{"class":228},[79,48496,32872],{"class":7284},[79,48498,239],{"class":448},[79,48500,44154],{"class":96},[79,48502,2621],{"class":228},[79,48504,32881],{"class":7284},[79,48506,239],{"class":448},[79,48508,970],{"class":96},[79,48510,2621],{"class":228},[79,48512,32890],{"class":7284},[79,48514,239],{"class":448},[79,48516,775],{"class":96},[79,48518,40042],{"class":228},[79,48520,48521],{"class":81,"line":869},[79,48522,40047],{"class":228},[79,48524,48525,48527,48529,48531,48533,48535,48537,48539,48541,48543,48545,48547,48549],{"class":81,"line":885},[79,48526,40092],{"class":228},[79,48528,32881],{"class":7284},[79,48530,239],{"class":448},[79,48532,970],{"class":96},[79,48534,2621],{"class":228},[79,48536,32936],{"class":7284},[79,48538,239],{"class":448},[79,48540,2331],{"class":96},[79,48542,2621],{"class":228},[79,48544,32890],{"class":7284},[79,48546,239],{"class":448},[79,48548,775],{"class":96},[79,48550,850],{"class":228},[79,48552,48553],{"class":81,"line":891},[79,48554,40121],{"class":228},[79,48556,48557,48559,48561,48563],{"class":81,"line":896},[79,48558,32852],{"class":96},[79,48560,44215],{"class":228},[79,48562,239],{"class":448},[79,48564,40004],{"class":228},[79,48566,48567,48569,48571,48573,48575,48577,48579,48581,48583,48585,48587,48589,48591,48593,48595],{"class":81,"line":907},[79,48568,44224],{"class":228},[79,48570,44154],{"class":96},[79,48572,2621],{"class":228},[79,48574,2449],{"class":96},[79,48576,44233],{"class":228},[79,48578,2455],{"class":96},[79,48580,2621],{"class":228},[79,48582,34069],{"class":96},[79,48584,44242],{"class":228},[79,48586,2841],{"class":96},[79,48588,2621],{"class":228},[79,48590,2443],{"class":96},[79,48592,44251],{"class":228},[79,48594,2443],{"class":96},[79,48596,40042],{"class":228},[79,48598,48599,48601,48603,48605,48607,48609,48611,48613,48615,48617,48619,48621,48623,48625,48627],{"class":81,"line":912},[79,48600,44224],{"class":228},[79,48602,36866],{"class":96},[79,48604,2621],{"class":228},[79,48606,34069],{"class":96},[79,48608,44233],{"class":228},[79,48610,34069],{"class":96},[79,48612,2621],{"class":228},[79,48614,44154],{"class":96},[79,48616,44242],{"class":228},[79,48618,2443],{"class":96},[79,48620,2621],{"class":228},[79,48622,2455],{"class":96},[79,48624,44251],{"class":228},[79,48626,2449],{"class":96},[79,48628,40042],{"class":228},[79,48630,48631,48633,48635,48637,48639,48641,48643,48645,48647,48649,48651,48653,48655],{"class":81,"line":935},[79,48632,40092],{"class":228},[79,48634,32881],{"class":7284},[79,48636,239],{"class":448},[79,48638,970],{"class":96},[79,48640,2621],{"class":228},[79,48642,32936],{"class":7284},[79,48644,239],{"class":448},[79,48646,2331],{"class":96},[79,48648,2621],{"class":228},[79,48650,32890],{"class":7284},[79,48652,239],{"class":448},[79,48654,775],{"class":96},[79,48656,850],{"class":228},[79,48658,48659],{"class":81,"line":946},[79,48660,40121],{"class":228},[79,48662,48663,48665,48667,48669],{"class":81,"line":960},[79,48664,32852],{"class":96},[79,48666,44326],{"class":228},[79,48668,239],{"class":448},[79,48670,40004],{"class":228},[79,48672,48673,48675,48677,48679,48681,48683,48685,48687,48689,48691,48693,48695,48697,48699,48701],{"class":81,"line":975},[79,48674,44224],{"class":228},[79,48676,44337],{"class":96},[79,48678,2621],{"class":228},[79,48680,44154],{"class":96},[79,48682,44233],{"class":228},[79,48684,2455],{"class":96},[79,48686,2621],{"class":228},[79,48688,44350],{"class":96},[79,48690,44242],{"class":228},[79,48692,2841],{"class":96},[79,48694,2621],{"class":228},[79,48696,2847],{"class":96},[79,48698,44251],{"class":228},[79,48700,2449],{"class":96},[79,48702,40042],{"class":228},[79,48704,48705,48707,48709,48711,48713,48715,48717,48719,48721,48723,48725,48727,48729,48731,48733],{"class":81,"line":980},[79,48706,44224],{"class":228},[79,48708,40452],{"class":96},[79,48710,2621],{"class":228},[79,48712,23073],{"class":96},[79,48714,44233],{"class":228},[79,48716,2858],{"class":96},[79,48718,2621],{"class":228},[79,48720,33503],{"class":96},[79,48722,44242],{"class":228},[79,48724,3040],{"class":96},[79,48726,2621],{"class":228},[79,48728,2449],{"class":96},[79,48730,44251],{"class":228},[79,48732,2449],{"class":96},[79,48734,40042],{"class":228},[79,48736,48737,48739,48741,48743,48745,48747,48749,48751,48753,48755,48757,48759,48761,48763,48765],{"class":81,"line":1006},[79,48738,44224],{"class":228},[79,48740,40452],{"class":96},[79,48742,2621],{"class":228},[79,48744,34069],{"class":96},[79,48746,44233],{"class":228},[79,48748,34069],{"class":96},[79,48750,2621],{"class":228},[79,48752,36866],{"class":96},[79,48754,44242],{"class":228},[79,48756,3040],{"class":96},[79,48758,2621],{"class":228},[79,48760,2449],{"class":96},[79,48762,44251],{"class":228},[79,48764,2449],{"class":96},[79,48766,40042],{"class":228},[79,48768,48769,48771,48773,48775,48777,48779,48781,48783,48785,48787,48789,48791,48793,48795,48797],{"class":81,"line":1027},[79,48770,44224],{"class":228},[79,48772,40452],{"class":96},[79,48774,2621],{"class":228},[79,48776,2858],{"class":96},[79,48778,44233],{"class":228},[79,48780,34069],{"class":96},[79,48782,2621],{"class":228},[79,48784,44447],{"class":96},[79,48786,44242],{"class":228},[79,48788,2443],{"class":96},[79,48790,2621],{"class":228},[79,48792,2449],{"class":96},[79,48794,44251],{"class":228},[79,48796,2449],{"class":96},[79,48798,40042],{"class":228},[79,48800,48801,48803,48805,48807,48809,48811,48813,48815,48817,48819,48821,48823,48825,48827,48829],{"class":81,"line":1032},[79,48802,44224],{"class":228},[79,48804,44468],{"class":96},[79,48806,2621],{"class":228},[79,48808,36866],{"class":96},[79,48810,44233],{"class":228},[79,48812,23073],{"class":96},[79,48814,2621],{"class":228},[79,48816,44481],{"class":96},[79,48818,44242],{"class":228},[79,48820,2443],{"class":96},[79,48822,2621],{"class":228},[79,48824,34069],{"class":96},[79,48826,44251],{"class":228},[79,48828,34069],{"class":96},[79,48830,40042],{"class":228},[79,48832,48833,48835,48837,48839,48841,48843,48845,48847,48849,48851,48853,48855,48857],{"class":81,"line":1047},[79,48834,40092],{"class":228},[79,48836,32881],{"class":7284},[79,48838,239],{"class":448},[79,48840,970],{"class":96},[79,48842,2621],{"class":228},[79,48844,32936],{"class":7284},[79,48846,239],{"class":448},[79,48848,2331],{"class":96},[79,48850,2621],{"class":228},[79,48852,32890],{"class":7284},[79,48854,239],{"class":448},[79,48856,775],{"class":96},[79,48858,850],{"class":228},[79,48860,48861],{"class":81,"line":1053},[79,48862,40121],{"class":228},[79,48864,48865,48867,48869,48871],{"class":81,"line":1058},[79,48866,32852],{"class":96},[79,48868,44534],{"class":228},[79,48870,239],{"class":448},[79,48872,40004],{"class":228},[79,48874,48875,48877,48879,48881,48883,48885,48887,48889,48891,48893,48895,48897,48899,48901,48903],{"class":81,"line":1069},[79,48876,44224],{"class":228},[79,48878,44545],{"class":96},[79,48880,2621],{"class":228},[79,48882,36866],{"class":96},[79,48884,44233],{"class":228},[79,48886,23073],{"class":96},[79,48888,2621],{"class":228},[79,48890,44481],{"class":96},[79,48892,44242],{"class":228},[79,48894,2443],{"class":96},[79,48896,2621],{"class":228},[79,48898,34069],{"class":96},[79,48900,44251],{"class":228},[79,48902,34069],{"class":96},[79,48904,40042],{"class":228},[79,48906,48907,48909,48911,48913,48915,48917,48919,48921,48923,48925,48927,48929,48931,48933,48935],{"class":81,"line":1081},[79,48908,44224],{"class":228},[79,48910,44545],{"class":96},[79,48912,2621],{"class":228},[79,48914,36936],{"class":96},[79,48916,44233],{"class":228},[79,48918,44154],{"class":96},[79,48920,2621],{"class":228},[79,48922,36936],{"class":96},[79,48924,44242],{"class":228},[79,48926,2847],{"class":96},[79,48928,2621],{"class":228},[79,48930,34069],{"class":96},[79,48932,44251],{"class":228},[79,48934,34069],{"class":96},[79,48936,40042],{"class":228},[79,48938,48939,48941,48943,48945,48947],{"class":81,"line":1086},[79,48940,44608],{"class":228},[79,48942,775],{"class":96},[79,48944,2621],{"class":228},[79,48946,775],{"class":96},[79,48948,44617],{"class":228},[79,48950,48951],{"class":81,"line":1108},[79,48952,40785],{"class":228},[79,48954,48955,48957,48959,48961,48963],{"class":81,"line":1153},[79,48956,40790],{"class":228},[79,48958,44628],{"class":96},[79,48960,2621],{"class":228},[79,48962,2331],{"class":96},[79,48964,850],{"class":228},[79,48966,48967],{"class":81,"line":1158},[79,48968,40121],{"class":228},[79,48970,48971],{"class":81,"line":1180},[79,48972,44643],{"class":2313},[79,48974,48975,48977,48979,48981,48983],{"class":81,"line":1197},[79,48976,5477],{"class":448},[79,48978,40863],{"class":228},[79,48980,921],{"class":448},[79,48982,40868],{"class":96},[79,48984,40871],{"class":228},[79,48986,48987,48989,48991],{"class":81,"line":1202},[79,48988,6712],{"class":448},[79,48990,40883],{"class":96},[79,48992,40886],{"class":228},[79,48994,48995,48997,48999,49001,49003,49005,49007,49009,49011],{"class":81,"line":1207},[79,48996,40896],{"class":228},[79,48998,44670],{"class":7284},[79,49000,239],{"class":448},[79,49002,44675],{"class":89},[79,49004,2621],{"class":228},[79,49006,40899],{"class":7284},[79,49008,239],{"class":448},[79,49010,40904],{"class":89},[79,49012,850],{"class":228},[79,49014,49015],{"class":81,"line":1223},[79,49016,44690],{"class":2313},[79,49018,49019],{"class":81,"line":18722},[79,49020,44695],{"class":2313},[79,49022,49023],{"class":81,"line":18728},[79,49024,44700],{"class":2313},[79,49026,49027],{"class":81,"line":18739},[79,49028,44705],{"class":2313},[79,49030,49031],{"class":81,"line":18762},[79,49032,44710],{"class":2313},[79,49034,49035],{"class":81,"line":18784},[79,49036,44715],{"class":2313},[79,49038,49039,49041,49043,49045,49047,49049],{"class":81,"line":18789},[79,49040,40916],{"class":448},[79,49042,40919],{"class":228},[79,49044,40922],{"class":448},[79,49046,40925],{"class":448},[79,49048,40928],{"class":96},[79,49050,745],{"class":228},[79,49052,49053,49055,49057],{"class":81,"line":18795},[79,49054,40940],{"class":228},[79,49056,759],{"class":96},[79,49058,850],{"class":228},[79,49060,49061,49063,49065],{"class":81,"line":18809},[79,49062,44742],{"class":448},[79,49064,40883],{"class":96},[79,49066,40959],{"class":228},[79,49068,49069,49071,49073,49075,49077],{"class":81,"line":18822},[79,49070,44751],{"class":228},[79,49072,759],{"class":96},[79,49074,2621],{"class":228},[79,49076,40981],{"class":96},[79,49078,850],{"class":228},[79,49080,49081,49083,49085,49087,49089,49091],{"class":81,"line":18827},[79,49082,44764],{"class":448},[79,49084,40919],{"class":228},[79,49086,40922],{"class":448},[79,49088,40925],{"class":448},[79,49090,40928],{"class":96},[79,49092,745],{"class":228},[79,49094,49095,49097,49099],{"class":81,"line":18841},[79,49096,44779],{"class":228},[79,49098,759],{"class":96},[79,49100,850],{"class":228},[79,49102,49103],{"class":81,"line":18846},[79,49104,37161],{"class":2313},[79,49106,49107,49109,49111],{"class":81,"line":18852},[79,49108,32808],{"class":448},[79,49110,33100],{"class":85},[79,49112,33103],{"class":228},[79,49114,49115,49117,49119,49121],{"class":81,"line":18857},[79,49116,33108],{"class":228},[79,49118,239],{"class":448},[79,49120,32830],{"class":96},[79,49122,44806],{"class":228},[79,49124,49125,49127,49129,49131],{"class":81,"line":18871},[79,49126,33108],{"class":228},[79,49128,239],{"class":448},[79,49130,32830],{"class":96},[79,49132,44817],{"class":228},[79,49134,49135,49137,49139,49141],{"class":81,"line":18876},[79,49136,33108],{"class":228},[79,49138,239],{"class":448},[79,49140,32830],{"class":96},[79,49142,44828],{"class":228},[79,49144,49145,49147,49149,49151],{"class":81,"line":18881},[79,49146,33108],{"class":228},[79,49148,239],{"class":448},[79,49150,32830],{"class":96},[79,49152,44839],{"class":228},[79,49154,49155,49157,49159,49161],{"class":81,"line":18895},[79,49156,33108],{"class":228},[79,49158,239],{"class":448},[79,49160,32830],{"class":96},[79,49162,44850],{"class":228},[79,49164,49165,49167],{"class":81,"line":18907},[79,49166,16785],{"class":448},[79,49168,33216],{"class":228},[79,49170,49171],{"class":81,"line":18912},[79,49172,542],{"emptyLinePlaceholder":541},[79,49174,49175],{"class":81,"line":18925},[79,49176,44865],{"class":2313},[79,49178,49179,49181,49183,49185,49187],{"class":81,"line":18930},[79,49180,1210],{"class":448},[79,49182,1213],{"class":96},[79,49184,5025],{"class":448},[79,49186,33231],{"class":89},[79,49188,745],{"class":228},[79,49190,49191,49193,49195,49197,49199,49201,49203,49205,49207],{"class":81,"line":18935},[79,49192,33243],{"class":228},[79,49194,239],{"class":448},[79,49196,32460],{"class":228},[79,49198,33250],{"class":89},[79,49200,3799],{"class":448},[79,49202,33255],{"class":228},[79,49204,3796],{"class":448},[79,49206,32485],{"class":89},[79,49208,850],{"class":228},[79,49210,49211,49213,49215],{"class":81,"line":18940},[79,49212,33295],{"class":228},[79,49214,239],{"class":448},[79,49216,44906],{"class":228},[79,49218,49219,49221,49223,49225,49227,49229,49231,49233],{"class":81,"line":18953},[79,49220,1161],{"class":96},[79,49222,33307],{"class":228},[79,49224,775],{"class":96},[79,49226,2621],{"class":228},[79,49228,33503],{"class":96},[79,49230,2621],{"class":228},[79,49232,33503],{"class":96},[79,49234,33320],{"class":228},[24023,49236,49238],{"id":49237},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,49240,49241],{},"计算图片的均值与方差，用于训练中归一化处理操作",[51,49243,49245],{"className":439,"code":49244,"language":441,"meta":57,"style":57},"# PIL（Python Imaging Library）里的 Image 用来读取图片\nfrom PIL import Image\n# os 用来处理文件夹和文件路径\nimport os\n# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\nimport numpy as np\n\n# 文件夹路径，包含所有图片文件\nfolder_path = 'data_cat_dog'\n\n# 初始化累积变量\ntotal_pixels = 0\nsum_normalized_pixel_values = np.zeros(3)  # 如果是RGB图像，需要三个通道的均值和方差\n\n# 遍历文件夹中的图片文件\nfor root, dirs, files in os.walk(folder_path):\n    for filename in files:\n        if filename.endswith(('.jpg', '.jpeg', '.png', '.bmp')):  # 可根据实际情况添加其他格式\n            image_path = os.path.join(root, filename)\n            image = Image.open(image_path)\n            image_array = np.array(image)\n\n            # 归一化像素值到0-1之间\n            normalized_image_array = image_array \u002F 255.0\n\n            # print(image_path)\n            # print(normalized_image_array.shape)\n            # 累积归一化后的像素值和像素数量\n            total_pixels += normalized_image_array.size\n            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n            sum_normalized_pixel_values += np.sum(normalized_image_array, axis=(0, 1))\n\n# 用像素总和\u002F像素总数 就得到每个通道的均值\nmean = sum_normalized_pixel_values \u002F total_pixels\n\nsum_squared_diff = np.zeros(3)\n\n# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n# os.path.join(root, filename)：得到每张图片的完整路径\n# Image.open(image_path)：打开图片\n# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\nfor root, dirs, files in os.walk(folder_path):\n    for filename in files:\n        if filename.endswith(('.jpg', '.jpeg', '.png', '.bmp')):\n            image_path = os.path.join(root, filename)\n            image = Image.open(image_path)\n            image_array = np.array(image)\n            # 归一化像素值到0-1之间\n            normalized_image_array = image_array \u002F 255.0\n            # print(normalized_image_array.shape)\n            # print(mean.shape)\n            # print(image_path)\n\n            try:\n                diff = (normalized_image_array - mean) ** 2\n                sum_squared_diff += np.sum(diff, axis=(0, 1))\n            except:\n                print(f\"捕获到自定义异常\")\n            # diff = (normalized_image_array - mean) ** 2\n            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n\nvariance = sum_squared_diff \u002F total_pixels\n\nprint(\"Mean:\", mean)\nprint(\"Variance:\", variance)\n\n",[59,49246,49247,49252,49265,49270,49276,49281,49291,49295,49300,49310,49314,49319,49329,49346,49350,49355,49367,49379,49410,49419,49429,49439,49443,49448,49463,49467,49472,49477,49482,49492,49497,49522,49526,49531,49546,49550,49563,49567,49572,49577,49582,49587,49592,49602,49612,49635,49643,49651,49659,49663,49675,49679,49684,49688,49692,49699,49719,49743,49750,49764,49769,49774,49778,49792,49796,49808],{"__ignoreMap":57},[79,49248,49249],{"class":81,"line":82},[79,49250,49251],{"class":2313},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[79,49253,49254,49256,49259,49262],{"class":81,"line":167},[79,49255,32745],{"class":448},[79,49257,49258],{"class":96}," PIL",[79,49260,49261],{"class":448}," import",[79,49263,49264],{"class":228}," Image\n",[79,49266,49267],{"class":81,"line":178},[79,49268,49269],{"class":2313},"# os 用来处理文件夹和文件路径\n",[79,49271,49272,49274],{"class":81,"line":545},[79,49273,520],{"class":448},[79,49275,47300],{"class":228},[79,49277,49278],{"class":81,"line":550},[79,49279,49280],{"class":2313},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[79,49282,49283,49285,49287,49289],{"class":81,"line":562},[79,49284,520],{"class":448},[79,49286,530],{"class":228},[79,49288,533],{"class":448},[79,49290,536],{"class":228},[79,49292,49293],{"class":81,"line":568},[79,49294,542],{"emptyLinePlaceholder":541},[79,49296,49297],{"class":81,"line":574},[79,49298,49299],{"class":2313},"# 文件夹路径，包含所有图片文件\n",[79,49301,49302,49305,49307],{"class":81,"line":579},[79,49303,49304],{"class":228},"folder_path ",[79,49306,239],{"class":448},[79,49308,49309],{"class":89}," 'data_cat_dog'\n",[79,49311,49312],{"class":81,"line":585},[79,49313,542],{"emptyLinePlaceholder":541},[79,49315,49316],{"class":81,"line":591},[79,49317,49318],{"class":2313},"# 初始化累积变量\n",[79,49320,49321,49324,49326],{"class":81,"line":596},[79,49322,49323],{"class":228},"total_pixels ",[79,49325,239],{"class":448},[79,49327,49328],{"class":96}," 0\n",[79,49330,49331,49334,49336,49339,49341,49343],{"class":81,"line":602},[79,49332,49333],{"class":228},"sum_normalized_pixel_values ",[79,49335,239],{"class":448},[79,49337,49338],{"class":228}," np.zeros(",[79,49340,970],{"class":96},[79,49342,47803],{"class":228},[79,49344,49345],{"class":2313},"# 如果是RGB图像，需要三个通道的均值和方差\n",[79,49347,49348],{"class":81,"line":608},[79,49349,542],{"emptyLinePlaceholder":541},[79,49351,49352],{"class":81,"line":614},[79,49353,49354],{"class":2313},"# 遍历文件夹中的图片文件\n",[79,49356,49357,49359,49362,49364],{"class":81,"line":619},[79,49358,1638],{"class":448},[79,49360,49361],{"class":228}," root, dirs, files ",[79,49363,921],{"class":448},[79,49365,49366],{"class":228}," os.walk(folder_path):\n",[79,49368,49369,49371,49374,49376],{"class":81,"line":625},[79,49370,915],{"class":448},[79,49372,49373],{"class":228}," filename ",[79,49375,921],{"class":448},[79,49377,49378],{"class":228}," files:\n",[79,49380,49381,49383,49386,49389,49391,49394,49396,49399,49401,49404,49407],{"class":81,"line":631},[79,49382,1089],{"class":448},[79,49384,49385],{"class":228}," filename.endswith((",[79,49387,49388],{"class":89},"'.jpg'",[79,49390,1020],{"class":228},[79,49392,49393],{"class":89},"'.jpeg'",[79,49395,1020],{"class":228},[79,49397,49398],{"class":89},"'.png'",[79,49400,1020],{"class":228},[79,49402,49403],{"class":89},"'.bmp'",[79,49405,49406],{"class":228},")):  ",[79,49408,49409],{"class":2313},"# 可根据实际情况添加其他格式\n",[79,49411,49412,49414,49416],{"class":81,"line":637},[79,49413,47668],{"class":228},[79,49415,239],{"class":448},[79,49417,49418],{"class":228}," os.path.join(root, filename)\n",[79,49420,49421,49424,49426],{"class":81,"line":643},[79,49422,49423],{"class":228},"            image ",[79,49425,239],{"class":448},[79,49427,49428],{"class":228}," Image.open(image_path)\n",[79,49430,49431,49434,49436],{"class":81,"line":649},[79,49432,49433],{"class":228},"            image_array ",[79,49435,239],{"class":448},[79,49437,49438],{"class":228}," np.array(image)\n",[79,49440,49441],{"class":81,"line":655},[79,49442,542],{"emptyLinePlaceholder":541},[79,49444,49445],{"class":81,"line":660},[79,49446,49447],{"class":2313},"            # 归一化像素值到0-1之间\n",[79,49449,49450,49453,49455,49458,49460],{"class":81,"line":666},[79,49451,49452],{"class":228},"            normalized_image_array ",[79,49454,239],{"class":448},[79,49456,49457],{"class":228}," image_array ",[79,49459,2824],{"class":448},[79,49461,49462],{"class":96}," 255.0\n",[79,49464,49465],{"class":81,"line":672},[79,49466,542],{"emptyLinePlaceholder":541},[79,49468,49469],{"class":81,"line":678},[79,49470,49471],{"class":2313},"            # print(image_path)\n",[79,49473,49474],{"class":81,"line":684},[79,49475,49476],{"class":2313},"            # print(normalized_image_array.shape)\n",[79,49478,49479],{"class":81,"line":690},[79,49480,49481],{"class":2313},"            # 累积归一化后的像素值和像素数量\n",[79,49483,49484,49487,49489],{"class":81,"line":695},[79,49485,49486],{"class":228},"            total_pixels ",[79,49488,1075],{"class":448},[79,49490,49491],{"class":228}," normalized_image_array.size\n",[79,49493,49494],{"class":81,"line":700},[79,49495,49496],{"class":2313},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[79,49498,49499,49502,49504,49507,49510,49512,49514,49516,49518,49520],{"class":81,"line":712},[79,49500,49501],{"class":228},"            sum_normalized_pixel_values ",[79,49503,1075],{"class":448},[79,49505,49506],{"class":228}," np.sum(normalized_image_array, ",[79,49508,49509],{"class":7284},"axis",[79,49511,239],{"class":448},[79,49513,455],{"class":228},[79,49515,759],{"class":96},[79,49517,1020],{"class":228},[79,49519,775],{"class":96},[79,49521,1150],{"class":228},[79,49523,49524],{"class":81,"line":721},[79,49525,542],{"emptyLinePlaceholder":541},[79,49527,49528],{"class":81,"line":726},[79,49529,49530],{"class":2313},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[79,49532,49533,49536,49538,49541,49543],{"class":81,"line":731},[79,49534,49535],{"class":228},"mean ",[79,49537,239],{"class":448},[79,49539,49540],{"class":228}," sum_normalized_pixel_values ",[79,49542,2824],{"class":448},[79,49544,49545],{"class":228}," total_pixels\n",[79,49547,49548],{"class":81,"line":748},[79,49549,542],{"emptyLinePlaceholder":541},[79,49551,49552,49555,49557,49559,49561],{"class":81,"line":765},[79,49553,49554],{"class":228},"sum_squared_diff ",[79,49556,239],{"class":448},[79,49558,49338],{"class":228},[79,49560,970],{"class":96},[79,49562,850],{"class":228},[79,49564,49565],{"class":81,"line":780},[79,49566,542],{"emptyLinePlaceholder":541},[79,49568,49569],{"class":81,"line":811},[79,49570,49571],{"class":2313},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[79,49573,49574],{"class":81,"line":816},[79,49575,49576],{"class":2313},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[79,49578,49579],{"class":81,"line":821},[79,49580,49581],{"class":2313},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[79,49583,49584],{"class":81,"line":837},[79,49585,49586],{"class":2313},"# Image.open(image_path)：打开图片\n",[79,49588,49589],{"class":81,"line":853},[79,49590,49591],{"class":2313},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[79,49593,49594,49596,49598,49600],{"class":81,"line":864},[79,49595,1638],{"class":448},[79,49597,49361],{"class":228},[79,49599,921],{"class":448},[79,49601,49366],{"class":228},[79,49603,49604,49606,49608,49610],{"class":81,"line":869},[79,49605,915],{"class":448},[79,49607,49373],{"class":228},[79,49609,921],{"class":448},[79,49611,49378],{"class":228},[79,49613,49614,49616,49618,49620,49622,49624,49626,49628,49630,49632],{"class":81,"line":885},[79,49615,1089],{"class":448},[79,49617,49385],{"class":228},[79,49619,49388],{"class":89},[79,49621,1020],{"class":228},[79,49623,49393],{"class":89},[79,49625,1020],{"class":228},[79,49627,49398],{"class":89},[79,49629,1020],{"class":228},[79,49631,49403],{"class":89},[79,49633,49634],{"class":228},")):\n",[79,49636,49637,49639,49641],{"class":81,"line":891},[79,49638,47668],{"class":228},[79,49640,239],{"class":448},[79,49642,49418],{"class":228},[79,49644,49645,49647,49649],{"class":81,"line":896},[79,49646,49423],{"class":228},[79,49648,239],{"class":448},[79,49650,49428],{"class":228},[79,49652,49653,49655,49657],{"class":81,"line":907},[79,49654,49433],{"class":228},[79,49656,239],{"class":448},[79,49658,49438],{"class":228},[79,49660,49661],{"class":81,"line":912},[79,49662,49447],{"class":2313},[79,49664,49665,49667,49669,49671,49673],{"class":81,"line":935},[79,49666,49452],{"class":228},[79,49668,239],{"class":448},[79,49670,49457],{"class":228},[79,49672,2824],{"class":448},[79,49674,49462],{"class":96},[79,49676,49677],{"class":81,"line":946},[79,49678,49476],{"class":2313},[79,49680,49681],{"class":81,"line":960},[79,49682,49683],{"class":2313},"            # print(mean.shape)\n",[79,49685,49686],{"class":81,"line":975},[79,49687,49471],{"class":2313},[79,49689,49690],{"class":81,"line":980},[79,49691,542],{"emptyLinePlaceholder":541},[79,49693,49694,49697],{"class":81,"line":1006},[79,49695,49696],{"class":448},"            try",[79,49698,745],{"class":228},[79,49700,49701,49704,49706,49709,49711,49714,49716],{"class":81,"line":1027},[79,49702,49703],{"class":228},"                diff ",[79,49705,239],{"class":448},[79,49707,49708],{"class":228}," (normalized_image_array ",[79,49710,478],{"class":448},[79,49712,49713],{"class":228}," mean) ",[79,49715,12696],{"class":448},[79,49717,49718],{"class":96}," 2\n",[79,49720,49721,49724,49726,49729,49731,49733,49735,49737,49739,49741],{"class":81,"line":1032},[79,49722,49723],{"class":228},"                sum_squared_diff ",[79,49725,1075],{"class":448},[79,49727,49728],{"class":228}," np.sum(diff, ",[79,49730,49509],{"class":7284},[79,49732,239],{"class":448},[79,49734,455],{"class":228},[79,49736,759],{"class":96},[79,49738,1020],{"class":228},[79,49740,775],{"class":96},[79,49742,1150],{"class":228},[79,49744,49745,49748],{"class":81,"line":1047},[79,49746,49747],{"class":448},"            except",[79,49749,745],{"class":228},[79,49751,49752,49755,49757,49759,49762],{"class":81,"line":1053},[79,49753,49754],{"class":96},"                print",[79,49756,455],{"class":228},[79,49758,2307],{"class":448},[79,49760,49761],{"class":89},"\"捕获到自定义异常\"",[79,49763,850],{"class":228},[79,49765,49766],{"class":81,"line":1058},[79,49767,49768],{"class":2313},"            # diff = (normalized_image_array - mean) ** 2\n",[79,49770,49771],{"class":81,"line":1069},[79,49772,49773],{"class":2313},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[79,49775,49776],{"class":81,"line":1081},[79,49777,542],{"emptyLinePlaceholder":541},[79,49779,49780,49783,49785,49788,49790],{"class":81,"line":1086},[79,49781,49782],{"class":228},"variance ",[79,49784,239],{"class":448},[79,49786,49787],{"class":228}," sum_squared_diff ",[79,49789,2824],{"class":448},[79,49791,49545],{"class":228},[79,49793,49794],{"class":81,"line":1108},[79,49795,542],{"emptyLinePlaceholder":541},[79,49797,49798,49800,49802,49805],{"class":81,"line":1153},[79,49799,1889],{"class":96},[79,49801,455],{"class":228},[79,49803,49804],{"class":89},"\"Mean:\"",[79,49806,49807],{"class":228},", mean)\n",[79,49809,49810,49812,49814,49817],{"class":81,"line":1158},[79,49811,1889],{"class":96},[79,49813,455],{"class":228},[79,49815,49816],{"class":89},"\"Variance:\"",[79,49818,49819],{"class":228},", variance)\n",[51,49821,49823],{"className":439,"code":49822,"language":441,"meta":57,"style":57},"import copy\nimport time\nimport pandas as pd\nimport torch\nfrom torch.utils.data import Dataset\nfrom torchvision.datasets import ImageFolder # 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \nfrom torchvision import transforms\nimport torch.utils.data as Data\nimport matplotlib.pyplot as plt\n# 导入模型\nfrom model import GoogLeNet, Inception\nfrom torch import nn\n\n# 处理训练集与验证集函数--->划分数据集\ndef train_val_data_process():\n    # 导入自己的数据集，并进行数据处理\n    # 定义数据集的路径\n    ROOT_PATH=r\".\u002Fdata\u002Ftrain\"\n\n    # 定义归一化方法\n    # 这里需要先计算一下数据集的均值和方差\n    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n    # 第一个参数是均值，第二个参数是方差\n    normalize=transforms.Normalize([0.162,0.151,0.138],[0.058,0.052,0.048])\n    # 定义数据集处理方法变量\n    train_transform=transforms.Compose([\n        # 调整图像大小为224*224\n        transforms.Resize((224,224)),\n        # 将图像转换为张量\n        transforms.ToTensor(),\n        normalize])\n    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n\n    # 加载数据集\n    # 传入数据集路径与处理方法\n    train_data=ImageFolder(ROOT_PATH,transform=train_transform)\n\n    train_data,val_data=Data.random_split(train_data,[round(0.8*len(train_data)),round(0.2*len(train_data))])\n    train_dataloader = Data.DataLoader(dataset=train_data,\n                                       batch_size=32,\n                                       shuffle=True,\n                                       # 规定8个进程\n                                       num_workers=8)\n    val_dataloader=Data.DataLoader(dataset=val_data,\n                                   batch_size=32,\n                                   shuffle=True,\n                                   num_workers=8)\n    return train_dataloader,val_dataloader\n\n# 验证是否出错\n# train_val_data_process()\n\n# 定义模型训练函数\ndef train_model_process(model,train_dataloader,val_dataloader,num_epochs):\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else 'cpu')\n\n    # 定义优化器\n    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n    # lr为学习率\n    optimizer=torch.optim.Adam(model.parameters(),lr=0.001)\n\n    # 定义损失函数使用交叉熵损失函数\n    criterion=nn.CrossEntropyLoss()\n\n    # 将模型放到GPU中进行训练\n    model=model.to(device)\n    # 复制当前模型的参数\n    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n    best_model_wts=copy.deepcopy(model.state_dict())\n\n    # 初始化参数\n    # 最高准确度\n    best_acc=0.0\n    # 训练集损失列表\n    train_loss_all=[]\n    # 验证集函数列表\n    val_loss_all=[]\n    # 训练集准确度列表\n    train_acc_all=[]\n    # 验证集准确度列表\n    val_acc_all=[]\n\n    # 保存当前时间--->方便看每轮训练的时间\n    since=time.time()\n\n    # 准备工作完成--->开始训练模型\n    for epoch in range(num_epochs):\n        print(\"Epoch {}\u002F{}\".format(epoch,num_epochs-1))\n        print(\"-\"*10)\n\n        # 初始化参数\n        # 训练集损失函数\n        train_loss=0.0\n        # 训练集准确度\n        train_corrects=0\n        # 验证集损失函数\n        val_loss=0.0\n        # 验证集准确度\n        val_corrects=0\n        # 训练集样本数量\n        train_num=0\n        # 验证集样本数量\n        val_num=0\n        # 将数据放到设备,并开始训练\n        for step,(b_x,b_y) in enumerate(train_dataloader):\n            # 将特征放入到训练设备\n            b_x=b_x.to(device)\n            # 将标签放入到训练设备当中\n            b_y=b_y.to(device)\n            # 设置模型为训练模式\n            model.train()\n            # 将数据放到模型当中,开始前向传播\n            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n            output=model(b_x)\n            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算每一个batch的损失函数\n            loss=criterion(output,b_y)\n            # 将梯度初始化为0\n            optimizer.zero_grad()\n            # 梯度置为0后再进行反向传播\n            loss.backward()\n            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n            optimizer.step()\n            # loss.item()指的是batch的平均损失\n            train_loss+=loss.item()*b_x.size(0)\n            # 计算每个批次中正确预测的数量\n            train_corrects+=torch.sum(pre_lab==b_y.data)\n            # 计算目前为止一共处理了多少样本\n            train_num+=b_x.size(0)\n        # 验证数据\n        for step ,(b_x,b_y) in enumerate(val_dataloader):\n            # 将特征放到验证设备当中\n            b_x=b_x.to(device)\n            # 将标签放到放到训练设备当中\n            b_y=b_y.to(device)\n            # 开启验证模式，设置模型为评估模式\n            model.eval()\n            # 验证时不计算梯度以节省内存\u002F计算\n            with torch.no_grad():\n                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n                output=model(b_x)\n                # 查找每一行中最大值对应的下标\n                pre_lab=torch.argmax(output,dim=1)\n                # 计算验证集上的当前 batch 损失\n                val_batch_loss=criterion(output,b_y)\n                # 对损失函数进行累加（按样本数加权）\n                val_loss+=val_batch_loss.item()*b_x.size(0)\n                val_corrects+=torch.sum(pre_lab==b_y.data)\n            # 当前用于验证的样本数量\n            val_num+=b_x.size(0)\n        # 计算并保存每一次迭代的loss值和准确率\n        # 计算并保存训练集的loss值\n        train_loss_all.append(train_loss\u002Ftrain_num)\n        # 取双精度\n        # 计算并保存训练集的准确率\n        train_acc_all.append(train_corrects.double().item()\u002Ftrain_num)\n        # 计算并保存验证集的loss值\n        val_loss_all.append(val_loss\u002Fval_num)\n        # 计算并保存验证集的准确率\n        val_acc_all.append(val_corrects.double().item()\u002Fval_num)\n\n        # 打印训练一轮的loss值和准确率\n        print('{}train loss:{:.4f} train acc:{:.4f}'.format(epoch,train_loss_all[-1],train_acc_all[-1]))\n        print('{}val loss:{:.4f} val acc:{:.4f}'.format(epoch,val_loss_all[-1],val_acc_all[-1]))\n\n        # 判断准确度--->保存最优模型\n        if val_acc_all[-1]>best_acc:\n            # 保存当前模型准确度\n            best_acc:float=val_acc_all[-1]\n            # 保存当前的准确度\n            # model.state_dict()是当前模型的所有参数（权重和偏置）\n            best_model_wts=copy.deepcopy(model.state_dict())\n\n        # 计算耗时\n        time_use=time.time()-since\n        print('训练和验证耗费的时间{:.0f}m{:.0f}s'.format(time_use\u002F\u002F60,time_use%60))\n    # 选择最优参数并保存\n    # 保存最佳模型权重字典\n    torch.save(best_model_wts,'.\u002Fbest_model.pth')\n    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n    train_process=pd.DataFrame(data={\n        \"epoch\":range(num_epochs),\n        \"train_loss_all\":train_loss_all,\n        \"val_loss_all\":val_loss_all,\n        \"train_acc_all\":train_acc_all,\n        \"val_acc_all\":val_acc_all\n    })\n    # 返回训练保存的过程\n    return train_process\n\n# 将loss值和精度按照图片的形式展示出来\ndef matplot_acc_loss(train_process):\n    # 设置图的大小\n    plt.figure(figsize=(12,4))\n    # 设置图中有几张图\n    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n    # ①loss图\n    plt.subplot(1,2,1)\n    # 补充:\n    # plt.subplot(nrows, ncols, index)\n    # nrows：行数\n    # ncols：列数\n    # index：目前选中第几个子图（从1开始）\n    plt.plot(train_process[\"epoch\"],train_process.train_loss_all,'ro-',label='train loss')\n    plt.plot(train_process[\"epoch\"],train_process.val_loss_all,'bs--',label='val loss')\n    # 添加一个图例\n    plt.legend()\n    # 给轴添加标签\n    plt.xlabel('epoch')\n    plt.ylabel('loss')\n    # ②准确度图\n    plt.subplot(1,2,2)\n    plt.plot(train_process[\"epoch\"],train_process.train_acc_all,'ro-',label='train acc')\n    plt.plot(train_process[\"epoch\"],train_process.val_acc_all,'bs--',label='val acc')\n    # 添加图例\n    plt.legend()\n    plt.xlabel(\"epoch\")\n    plt.ylabel(\"acc\")\n    plt.show()\n\n# 正式开始训练:\nif __name__==\"__main__\":\n    # 将模型实例化\n    GoogLeNet=GoogLeNet(Inception)\n    train_dataloader,val_dataloader=train_val_data_process()\n    train_process=train_model_process(GoogLeNet,train_dataloader,val_dataloader,num_epochs=60)\n    matplot_acc_loss(train_process)\n",[59,49824,49825,49831,49837,49847,49853,49863,49877,49887,49897,49907,49911,49921,49931,49935,49939,49947,49952,49957,49976,49980,49985,49990,49995,50000,50041,50046,50056,50061,50074,50079,50084,50089,50094,50099,50103,50108,50113,50135,50139,50171,50185,50195,50205,50209,50219,50233,50243,50253,50263,50269,50273,50277,50281,50285,50289,50297,50317,50321,50325,50329,50333,50349,50353,50357,50365,50369,50373,50381,50385,50389,50393,50401,50405,50409,50413,50421,50425,50433,50437,50445,50449,50457,50461,50469,50473,50477,50485,50489,50493,50505,50529,50543,50547,50551,50555,50563,50567,50575,50579,50587,50591,50599,50603,50611,50615,50623,50627,50639,50643,50651,50655,50663,50667,50671,50675,50679,50687,50691,50707,50711,50719,50723,50727,50731,50735,50739,50743,50747,50763,50767,50779,50783,50795,50799,50811,50815,50823,50827,50835,50839,50843,50847,50853,50857,50865,50869,50885,50889,50897,50901,50917,50929,50933,50945,50949,50953,50961,50965,50969,50977,50981,50989,50993,51001,51005,51009,51051,51093,51097,51101,51117,51121,51137,51141,51145,51153,51157,51161,51173,51211,51215,51219,51227,51231,51245,51255,51261,51267,51273,51279,51283,51287,51293,51297,51301,51309,51313,51331,51335,51339,51343,51359,51363,51367,51371,51375,51379,51399,51419,51423,51427,51431,51439,51447,51451,51467,51487,51507,51511,51516,51525,51534,51539,51544,51549,51562,51567,51576,51585,51602],{"__ignoreMap":57},[79,49826,49827,49829],{"class":81,"line":82},[79,49828,520],{"class":448},[79,49830,33823],{"class":228},[79,49832,49833,49835],{"class":81,"line":167},[79,49834,520],{"class":448},[79,49836,33830],{"class":228},[79,49838,49839,49841,49843,49845],{"class":81,"line":178},[79,49840,520],{"class":448},[79,49842,33841],{"class":228},[79,49844,533],{"class":448},[79,49846,33846],{"class":228},[79,49848,49849,49851],{"class":81,"line":545},[79,49850,520],{"class":448},[79,49852,32405],{"class":228},[79,49854,49855,49857,49859,49861],{"class":81,"line":550},[79,49856,32745],{"class":448},[79,49858,33417],{"class":228},[79,49860,520],{"class":448},[79,49862,33863],{"class":228},[79,49864,49865,49867,49869,49871,49874],{"class":81,"line":562},[79,49866,32745],{"class":448},[79,49868,33373],{"class":228},[79,49870,520],{"class":448},[79,49872,49873],{"class":228}," ImageFolder ",[79,49875,49876],{"class":2313},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[79,49878,49879,49881,49883,49885],{"class":81,"line":568},[79,49880,32745],{"class":448},[79,49882,33400],{"class":228},[79,49884,520],{"class":448},[79,49886,33405],{"class":228},[79,49888,49889,49891,49893,49895],{"class":81,"line":574},[79,49890,520],{"class":448},[79,49892,33417],{"class":228},[79,49894,533],{"class":448},[79,49896,33422],{"class":228},[79,49898,49899,49901,49903,49905],{"class":81,"line":579},[79,49900,520],{"class":448},[79,49902,33434],{"class":228},[79,49904,533],{"class":448},[79,49906,33439],{"class":228},[79,49908,49909],{"class":81,"line":585},[79,49910,33908],{"class":2313},[79,49912,49913,49915,49917,49919],{"class":81,"line":591},[79,49914,32745],{"class":448},[79,49916,33915],{"class":228},[79,49918,520],{"class":448},[79,49920,45026],{"class":228},[79,49922,49923,49925,49927,49929],{"class":81,"line":596},[79,49924,32745],{"class":448},[79,49926,32748],{"class":228},[79,49928,520],{"class":448},[79,49930,32753],{"class":228},[79,49932,49933],{"class":81,"line":602},[79,49934,542],{"emptyLinePlaceholder":541},[79,49936,49937],{"class":81,"line":608},[79,49938,33943],{"class":2313},[79,49940,49941,49943,49945],{"class":81,"line":614},[79,49942,703],{"class":448},[79,49944,33950],{"class":85},[79,49946,33953],{"class":228},[79,49948,49949],{"class":81,"line":619},[79,49950,49951],{"class":2313},"    # 导入自己的数据集，并进行数据处理\n",[79,49953,49954],{"class":81,"line":625},[79,49955,49956],{"class":2313},"    # 定义数据集的路径\n",[79,49958,49959,49962,49964,49966,49968,49970,49974],{"class":81,"line":631},[79,49960,49961],{"class":96},"    ROOT_PATH",[79,49963,239],{"class":448},[79,49965,2910],{"class":448},[79,49967,2495],{"class":89},[79,49969,2798],{"class":96},[79,49971,49973],{"class":49972},"sA_wV","\u002Fdata\u002Ftrain",[79,49975,27152],{"class":89},[79,49977,49978],{"class":81,"line":637},[79,49979,542],{"emptyLinePlaceholder":541},[79,49981,49982],{"class":81,"line":643},[79,49983,49984],{"class":2313},"    # 定义归一化方法\n",[79,49986,49987],{"class":81,"line":649},[79,49988,49989],{"class":2313},"    # 这里需要先计算一下数据集的均值和方差\n",[79,49991,49992],{"class":81,"line":655},[79,49993,49994],{"class":2313},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[79,49996,49997],{"class":81,"line":660},[79,49998,49999],{"class":2313},"    # 第一个参数是均值，第二个参数是方差\n",[79,50001,50002,50005,50007,50010,50013,50015,50018,50020,50023,50026,50029,50031,50034,50036,50039],{"class":81,"line":666},[79,50003,50004],{"class":228},"    normalize",[79,50006,239],{"class":448},[79,50008,50009],{"class":228},"transforms.Normalize([",[79,50011,50012],{"class":96},"0.162",[79,50014,2621],{"class":228},[79,50016,50017],{"class":96},"0.151",[79,50019,2621],{"class":228},[79,50021,50022],{"class":96},"0.138",[79,50024,50025],{"class":228},"],[",[79,50027,50028],{"class":96},"0.058",[79,50030,2621],{"class":228},[79,50032,50033],{"class":96},"0.052",[79,50035,2621],{"class":228},[79,50037,50038],{"class":96},"0.048",[79,50040,6727],{"class":228},[79,50042,50043],{"class":81,"line":672},[79,50044,50045],{"class":2313},"    # 定义数据集处理方法变量\n",[79,50047,50048,50051,50053],{"class":81,"line":678},[79,50049,50050],{"class":228},"    train_transform",[79,50052,239],{"class":448},[79,50054,50055],{"class":228},"transforms.Compose([\n",[79,50057,50058],{"class":81,"line":684},[79,50059,50060],{"class":2313},"        # 调整图像大小为224*224\n",[79,50062,50063,50066,50068,50070,50072],{"class":81,"line":690},[79,50064,50065],{"class":228},"        transforms.Resize((",[79,50067,33503],{"class":96},[79,50069,2621],{"class":228},[79,50071,33503],{"class":96},[79,50073,44617],{"class":228},[79,50075,50076],{"class":81,"line":695},[79,50077,50078],{"class":2313},"        # 将图像转换为张量\n",[79,50080,50081],{"class":81,"line":700},[79,50082,50083],{"class":228},"        transforms.ToTensor(),\n",[79,50085,50086],{"class":81,"line":712},[79,50087,50088],{"class":228},"        normalize])\n",[79,50090,50091],{"class":81,"line":721},[79,50092,50093],{"class":2313},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[79,50095,50096],{"class":81,"line":726},[79,50097,50098],{"class":2313},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[79,50100,50101],{"class":81,"line":731},[79,50102,542],{"emptyLinePlaceholder":541},[79,50104,50105],{"class":81,"line":748},[79,50106,50107],{"class":2313},"    # 加载数据集\n",[79,50109,50110],{"class":81,"line":765},[79,50111,50112],{"class":2313},"    # 传入数据集路径与处理方法\n",[79,50114,50115,50117,50119,50122,50125,50127,50130,50132],{"class":81,"line":780},[79,50116,33958],{"class":228},[79,50118,239],{"class":448},[79,50120,50121],{"class":228},"ImageFolder(",[79,50123,50124],{"class":96},"ROOT_PATH",[79,50126,2621],{"class":228},[79,50128,50129],{"class":7284},"transform",[79,50131,239],{"class":448},[79,50133,50134],{"class":228},"train_transform)\n",[79,50136,50137],{"class":81,"line":811},[79,50138,542],{"emptyLinePlaceholder":541},[79,50140,50141,50143,50145,50147,50149,50151,50153,50155,50157,50159,50161,50163,50165,50167,50169],{"class":81,"line":816},[79,50142,34010],{"class":228},[79,50144,239],{"class":448},[79,50146,34015],{"class":228},[79,50148,1138],{"class":96},[79,50150,455],{"class":228},[79,50152,34022],{"class":96},[79,50154,473],{"class":448},[79,50156,9423],{"class":96},[79,50158,34029],{"class":228},[79,50160,1138],{"class":96},[79,50162,455],{"class":228},[79,50164,34036],{"class":96},[79,50166,473],{"class":448},[79,50168,9423],{"class":96},[79,50170,34043],{"class":228},[79,50172,50173,50175,50177,50179,50181,50183],{"class":81,"line":821},[79,50174,34048],{"class":228},[79,50176,239],{"class":448},[79,50178,34053],{"class":228},[79,50180,33539],{"class":7284},[79,50182,239],{"class":448},[79,50184,33544],{"class":228},[79,50186,50187,50189,50191,50193],{"class":81,"line":837},[79,50188,34064],{"class":7284},[79,50190,239],{"class":448},[79,50192,2443],{"class":96},[79,50194,33468],{"class":228},[79,50196,50197,50199,50201,50203],{"class":81,"line":853},[79,50198,34076],{"class":7284},[79,50200,239],{"class":448},[79,50202,33478],{"class":96},[79,50204,33468],{"class":228},[79,50206,50207],{"class":81,"line":864},[79,50208,34087],{"class":2313},[79,50210,50211,50213,50215,50217],{"class":81,"line":869},[79,50212,34092],{"class":7284},[79,50214,239],{"class":448},[79,50216,2638],{"class":96},[79,50218,850],{"class":228},[79,50220,50221,50223,50225,50227,50229,50231],{"class":81,"line":885},[79,50222,34103],{"class":228},[79,50224,239],{"class":448},[79,50226,33536],{"class":228},[79,50228,33539],{"class":7284},[79,50230,239],{"class":448},[79,50232,34114],{"class":228},[79,50234,50235,50237,50239,50241],{"class":81,"line":891},[79,50236,34119],{"class":7284},[79,50238,239],{"class":448},[79,50240,2443],{"class":96},[79,50242,33468],{"class":228},[79,50244,50245,50247,50249,50251],{"class":81,"line":896},[79,50246,34130],{"class":7284},[79,50248,239],{"class":448},[79,50250,33478],{"class":96},[79,50252,33468],{"class":228},[79,50254,50255,50257,50259,50261],{"class":81,"line":907},[79,50256,34141],{"class":7284},[79,50258,239],{"class":448},[79,50260,2638],{"class":96},[79,50262,850],{"class":228},[79,50264,50265,50267],{"class":81,"line":912},[79,50266,715],{"class":448},[79,50268,34154],{"class":228},[79,50270,50271],{"class":81,"line":935},[79,50272,542],{"emptyLinePlaceholder":541},[79,50274,50275],{"class":81,"line":946},[79,50276,34163],{"class":2313},[79,50278,50279],{"class":81,"line":960},[79,50280,34168],{"class":2313},[79,50282,50283],{"class":81,"line":975},[79,50284,542],{"emptyLinePlaceholder":541},[79,50286,50287],{"class":81,"line":980},[79,50288,34177],{"class":2313},[79,50290,50291,50293,50295],{"class":81,"line":1006},[79,50292,703],{"class":448},[79,50294,34184],{"class":85},[79,50296,34187],{"class":228},[79,50298,50299,50301,50303,50305,50307,50309,50311,50313,50315],{"class":81,"line":1027},[79,50300,33243],{"class":228},[79,50302,239],{"class":448},[79,50304,32460],{"class":228},[79,50306,33250],{"class":89},[79,50308,3799],{"class":448},[79,50310,33255],{"class":228},[79,50312,3796],{"class":448},[79,50314,34206],{"class":89},[79,50316,850],{"class":228},[79,50318,50319],{"class":81,"line":1032},[79,50320,542],{"emptyLinePlaceholder":541},[79,50322,50323],{"class":81,"line":1047},[79,50324,34221],{"class":2313},[79,50326,50327],{"class":81,"line":1053},[79,50328,34226],{"class":2313},[79,50330,50331],{"class":81,"line":1058},[79,50332,34231],{"class":2313},[79,50334,50335,50337,50339,50341,50343,50345,50347],{"class":81,"line":1069},[79,50336,34236],{"class":228},[79,50338,239],{"class":448},[79,50340,34241],{"class":228},[79,50342,34244],{"class":7284},[79,50344,239],{"class":448},[79,50346,34249],{"class":96},[79,50348,850],{"class":228},[79,50350,50351],{"class":81,"line":1081},[79,50352,542],{"emptyLinePlaceholder":541},[79,50354,50355],{"class":81,"line":1086},[79,50356,34260],{"class":2313},[79,50358,50359,50361,50363],{"class":81,"line":1108},[79,50360,34265],{"class":228},[79,50362,239],{"class":448},[79,50364,34270],{"class":228},[79,50366,50367],{"class":81,"line":1153},[79,50368,542],{"emptyLinePlaceholder":541},[79,50370,50371],{"class":81,"line":1158},[79,50372,34279],{"class":2313},[79,50374,50375,50377,50379],{"class":81,"line":1180},[79,50376,33295],{"class":228},[79,50378,239],{"class":448},[79,50380,34288],{"class":228},[79,50382,50383],{"class":81,"line":1197},[79,50384,34293],{"class":2313},[79,50386,50387],{"class":81,"line":1202},[79,50388,34298],{"class":2313},[79,50390,50391],{"class":81,"line":1207},[79,50392,34303],{"class":2313},[79,50394,50395,50397,50399],{"class":81,"line":1223},[79,50396,34308],{"class":228},[79,50398,239],{"class":448},[79,50400,34313],{"class":228},[79,50402,50403],{"class":81,"line":18722},[79,50404,542],{"emptyLinePlaceholder":541},[79,50406,50407],{"class":81,"line":18728},[79,50408,34326],{"class":2313},[79,50410,50411],{"class":81,"line":18739},[79,50412,34331],{"class":2313},[79,50414,50415,50417,50419],{"class":81,"line":18762},[79,50416,34336],{"class":228},[79,50418,239],{"class":448},[79,50420,34341],{"class":96},[79,50422,50423],{"class":81,"line":18784},[79,50424,34346],{"class":2313},[79,50426,50427,50429,50431],{"class":81,"line":18789},[79,50428,34351],{"class":228},[79,50430,239],{"class":448},[79,50432,34356],{"class":228},[79,50434,50435],{"class":81,"line":18795},[79,50436,34361],{"class":2313},[79,50438,50439,50441,50443],{"class":81,"line":18809},[79,50440,34366],{"class":228},[79,50442,239],{"class":448},[79,50444,34356],{"class":228},[79,50446,50447],{"class":81,"line":18822},[79,50448,34375],{"class":2313},[79,50450,50451,50453,50455],{"class":81,"line":18827},[79,50452,34380],{"class":228},[79,50454,239],{"class":448},[79,50456,34356],{"class":228},[79,50458,50459],{"class":81,"line":18841},[79,50460,34389],{"class":2313},[79,50462,50463,50465,50467],{"class":81,"line":18846},[79,50464,34394],{"class":228},[79,50466,239],{"class":448},[79,50468,34356],{"class":228},[79,50470,50471],{"class":81,"line":18852},[79,50472,542],{"emptyLinePlaceholder":541},[79,50474,50475],{"class":81,"line":18857},[79,50476,34407],{"class":2313},[79,50478,50479,50481,50483],{"class":81,"line":18871},[79,50480,34412],{"class":228},[79,50482,239],{"class":448},[79,50484,34417],{"class":228},[79,50486,50487],{"class":81,"line":18876},[79,50488,542],{"emptyLinePlaceholder":541},[79,50490,50491],{"class":81,"line":18881},[79,50492,34430],{"class":2313},[79,50494,50495,50497,50499,50501,50503],{"class":81,"line":18895},[79,50496,915],{"class":448},[79,50498,34437],{"class":228},[79,50500,921],{"class":448},[79,50502,924],{"class":96},[79,50504,34444],{"class":228},[79,50506,50507,50509,50511,50513,50515,50517,50519,50521,50523,50525,50527],{"class":81,"line":18907},[79,50508,34449],{"class":96},[79,50510,455],{"class":228},[79,50512,34454],{"class":89},[79,50514,34457],{"class":96},[79,50516,2824],{"class":89},[79,50518,34457],{"class":96},[79,50520,2495],{"class":89},[79,50522,34466],{"class":228},[79,50524,478],{"class":448},[79,50526,775],{"class":96},[79,50528,1150],{"class":228},[79,50530,50531,50533,50535,50537,50539,50541],{"class":81,"line":18912},[79,50532,34449],{"class":96},[79,50534,455],{"class":228},[79,50536,34481],{"class":89},[79,50538,473],{"class":448},[79,50540,2689],{"class":96},[79,50542,850],{"class":228},[79,50544,50545],{"class":81,"line":18925},[79,50546,542],{"emptyLinePlaceholder":541},[79,50548,50549],{"class":81,"line":18930},[79,50550,34496],{"class":2313},[79,50552,50553],{"class":81,"line":18935},[79,50554,34501],{"class":2313},[79,50556,50557,50559,50561],{"class":81,"line":18940},[79,50558,34506],{"class":228},[79,50560,239],{"class":448},[79,50562,34341],{"class":96},[79,50564,50565],{"class":81,"line":18953},[79,50566,34515],{"class":2313},[79,50568,50569,50571,50573],{"class":81,"line":18958},[79,50570,34520],{"class":228},[79,50572,239],{"class":448},[79,50574,5160],{"class":96},[79,50576,50577],{"class":81,"line":34631},[79,50578,34529],{"class":2313},[79,50580,50581,50583,50585],{"class":81,"line":34637},[79,50582,34534],{"class":228},[79,50584,239],{"class":448},[79,50586,34341],{"class":96},[79,50588,50589],{"class":81,"line":34643},[79,50590,34543],{"class":2313},[79,50592,50593,50595,50597],{"class":81,"line":34649},[79,50594,34548],{"class":228},[79,50596,239],{"class":448},[79,50598,5160],{"class":96},[79,50600,50601],{"class":81,"line":34655},[79,50602,34557],{"class":2313},[79,50604,50605,50607,50609],{"class":81,"line":34666},[79,50606,34562],{"class":228},[79,50608,239],{"class":448},[79,50610,5160],{"class":96},[79,50612,50613],{"class":81,"line":34672},[79,50614,34571],{"class":2313},[79,50616,50617,50619,50621],{"class":81,"line":34692},[79,50618,34576],{"class":228},[79,50620,239],{"class":448},[79,50622,5160],{"class":96},[79,50624,50625],{"class":81,"line":34698},[79,50626,34585],{"class":2313},[79,50628,50629,50631,50633,50635,50637],{"class":81,"line":34709},[79,50630,5477],{"class":448},[79,50632,33603],{"class":228},[79,50634,921],{"class":448},[79,50636,33608],{"class":96},[79,50638,34598],{"class":228},[79,50640,50641],{"class":81,"line":34715},[79,50642,34603],{"class":2313},[79,50644,50645,50647,50649],{"class":81,"line":34721},[79,50646,34608],{"class":228},[79,50648,239],{"class":448},[79,50650,34613],{"class":228},[79,50652,50653],{"class":81,"line":34727},[79,50654,34618],{"class":2313},[79,50656,50657,50659,50661],{"class":81,"line":34733},[79,50658,34623],{"class":228},[79,50660,239],{"class":448},[79,50662,34628],{"class":228},[79,50664,50665],{"class":81,"line":34739},[79,50666,34634],{"class":2313},[79,50668,50669],{"class":81,"line":34745},[79,50670,34640],{"class":228},[79,50672,50673],{"class":81,"line":34751},[79,50674,34646],{"class":2313},[79,50676,50677],{"class":81,"line":34771},[79,50678,34652],{"class":2313},[79,50680,50681,50683,50685],{"class":81,"line":34777},[79,50682,34658],{"class":228},[79,50684,239],{"class":448},[79,50686,34663],{"class":228},[79,50688,50689],{"class":81,"line":34793},[79,50690,34669],{"class":2313},[79,50692,50693,50695,50697,50699,50701,50703,50705],{"class":81,"line":34799},[79,50694,34675],{"class":228},[79,50696,239],{"class":448},[79,50698,34680],{"class":228},[79,50700,34683],{"class":7284},[79,50702,239],{"class":448},[79,50704,775],{"class":96},[79,50706,850],{"class":228},[79,50708,50709],{"class":81,"line":34813},[79,50710,34695],{"class":2313},[79,50712,50713,50715,50717],{"class":81,"line":34819},[79,50714,34701],{"class":228},[79,50716,239],{"class":448},[79,50718,34706],{"class":228},[79,50720,50721],{"class":81,"line":34834},[79,50722,34712],{"class":2313},[79,50724,50725],{"class":81,"line":34840},[79,50726,34718],{"class":228},[79,50728,50729],{"class":81,"line":34849},[79,50730,34724],{"class":2313},[79,50732,50733],{"class":81,"line":34855},[79,50734,34730],{"class":228},[79,50736,50737],{"class":81,"line":34864},[79,50738,34736],{"class":2313},[79,50740,50741],{"class":81,"line":34870},[79,50742,34742],{"class":228},[79,50744,50745],{"class":81,"line":34876},[79,50746,34748],{"class":2313},[79,50748,50749,50751,50753,50755,50757,50759,50761],{"class":81,"line":34885},[79,50750,34754],{"class":228},[79,50752,1075],{"class":448},[79,50754,34759],{"class":228},[79,50756,473],{"class":448},[79,50758,34764],{"class":228},[79,50760,759],{"class":96},[79,50762,850],{"class":228},[79,50764,50765],{"class":81,"line":34891},[79,50766,34774],{"class":2313},[79,50768,50769,50771,50773,50775,50777],{"class":81,"line":34902},[79,50770,34780],{"class":228},[79,50772,1075],{"class":448},[79,50774,34785],{"class":228},[79,50776,5025],{"class":448},[79,50778,34790],{"class":228},[79,50780,50781],{"class":81,"line":34908},[79,50782,34796],{"class":2313},[79,50784,50785,50787,50789,50791,50793],{"class":81,"line":34927},[79,50786,34802],{"class":228},[79,50788,1075],{"class":448},[79,50790,34764],{"class":228},[79,50792,759],{"class":96},[79,50794,850],{"class":228},[79,50796,50797],{"class":81,"line":34933},[79,50798,34816],{"class":2313},[79,50800,50801,50803,50805,50807,50809],{"class":81,"line":34944},[79,50802,5477],{"class":448},[79,50804,34824],{"class":228},[79,50806,921],{"class":448},[79,50808,33608],{"class":96},[79,50810,34831],{"class":228},[79,50812,50813],{"class":81,"line":34950},[79,50814,34837],{"class":2313},[79,50816,50817,50819,50821],{"class":81,"line":34970},[79,50818,34608],{"class":228},[79,50820,239],{"class":448},[79,50822,34613],{"class":228},[79,50824,50825],{"class":81,"line":34986},[79,50826,34852],{"class":2313},[79,50828,50829,50831,50833],{"class":81,"line":34992},[79,50830,34623],{"class":228},[79,50832,239],{"class":448},[79,50834,34628],{"class":228},[79,50836,50837],{"class":81,"line":35006},[79,50838,34867],{"class":2313},[79,50840,50841],{"class":81,"line":35012},[79,50842,34873],{"class":228},[79,50844,50845],{"class":81,"line":35018},[79,50846,38351],{"class":2313},[79,50848,50849,50851],{"class":81,"line":35029},[79,50850,34879],{"class":448},[79,50852,34882],{"class":228},[79,50854,50855],{"class":81,"line":35035},[79,50856,34888],{"class":2313},[79,50858,50859,50861,50863],{"class":81,"line":35041},[79,50860,38366],{"class":228},[79,50862,239],{"class":448},[79,50864,34663],{"class":228},[79,50866,50867],{"class":81,"line":35051},[79,50868,34905],{"class":2313},[79,50870,50871,50873,50875,50877,50879,50881,50883],{"class":81,"line":35057},[79,50872,38379],{"class":228},[79,50874,239],{"class":448},[79,50876,34680],{"class":228},[79,50878,34683],{"class":7284},[79,50880,239],{"class":448},[79,50882,775],{"class":96},[79,50884,850],{"class":228},[79,50886,50887],{"class":81,"line":35068},[79,50888,34930],{"class":2313},[79,50890,50891,50893,50895],{"class":81,"line":35074},[79,50892,38400],{"class":228},[79,50894,239],{"class":448},[79,50896,34706],{"class":228},[79,50898,50899],{"class":81,"line":35084},[79,50900,34947],{"class":2313},[79,50902,50903,50905,50907,50909,50911,50913,50915],{"class":81,"line":35089},[79,50904,38413],{"class":228},[79,50906,1075],{"class":448},[79,50908,38418],{"class":228},[79,50910,473],{"class":448},[79,50912,34764],{"class":228},[79,50914,759],{"class":96},[79,50916,850],{"class":228},[79,50918,50919,50921,50923,50925,50927],{"class":81,"line":35095},[79,50920,38431],{"class":228},[79,50922,1075],{"class":448},[79,50924,34785],{"class":228},[79,50926,5025],{"class":448},[79,50928,34790],{"class":228},[79,50930,50931],{"class":81,"line":35144},[79,50932,38444],{"class":2313},[79,50934,50935,50937,50939,50941,50943],{"class":81,"line":35191},[79,50936,38449],{"class":228},[79,50938,1075],{"class":448},[79,50940,34764],{"class":228},[79,50942,759],{"class":96},[79,50944,850],{"class":228},[79,50946,50947],{"class":81,"line":35196},[79,50948,35009],{"class":2313},[79,50950,50951],{"class":81,"line":35202},[79,50952,35015],{"class":2313},[79,50954,50955,50957,50959],{"class":81,"line":35221},[79,50956,35021],{"class":228},[79,50958,2824],{"class":448},[79,50960,35026],{"class":228},[79,50962,50963],{"class":81,"line":35227},[79,50964,35032],{"class":2313},[79,50966,50967],{"class":81,"line":35246},[79,50968,35038],{"class":2313},[79,50970,50971,50973,50975],{"class":81,"line":35252},[79,50972,35044],{"class":228},[79,50974,2824],{"class":448},[79,50976,35026],{"class":228},[79,50978,50979],{"class":81,"line":35258},[79,50980,35054],{"class":2313},[79,50982,50983,50985,50987],{"class":81,"line":35268},[79,50984,35060],{"class":228},[79,50986,2824],{"class":448},[79,50988,35065],{"class":228},[79,50990,50991],{"class":81,"line":35273},[79,50992,35071],{"class":2313},[79,50994,50995,50997,50999],{"class":81,"line":35279},[79,50996,35077],{"class":228},[79,50998,2824],{"class":448},[79,51000,35065],{"class":228},[79,51002,51003],{"class":81,"line":35295},[79,51004,542],{"emptyLinePlaceholder":541},[79,51006,51007],{"class":81,"line":35340},[79,51008,35092],{"class":2313},[79,51010,51011,51013,51015,51017,51019,51021,51023,51025,51027,51029,51031,51033,51035,51037,51039,51041,51043,51045,51047,51049],{"class":81,"line":35346},[79,51012,34449],{"class":96},[79,51014,455],{"class":228},[79,51016,5666],{"class":89},[79,51018,34457],{"class":96},[79,51020,35106],{"class":89},[79,51022,3136],{"class":96},[79,51024,35111],{"class":448},[79,51026,3185],{"class":96},[79,51028,35116],{"class":89},[79,51030,3136],{"class":96},[79,51032,35111],{"class":448},[79,51034,3185],{"class":96},[79,51036,5666],{"class":89},[79,51038,35127],{"class":228},[79,51040,478],{"class":448},[79,51042,775],{"class":96},[79,51044,35134],{"class":228},[79,51046,478],{"class":448},[79,51048,775],{"class":96},[79,51050,35141],{"class":228},[79,51052,51053,51055,51057,51059,51061,51063,51065,51067,51069,51071,51073,51075,51077,51079,51081,51083,51085,51087,51089,51091],{"class":81,"line":35352},[79,51054,34449],{"class":96},[79,51056,455],{"class":228},[79,51058,5666],{"class":89},[79,51060,34457],{"class":96},[79,51062,35155],{"class":89},[79,51064,3136],{"class":96},[79,51066,35111],{"class":448},[79,51068,3185],{"class":96},[79,51070,35164],{"class":89},[79,51072,3136],{"class":96},[79,51074,35111],{"class":448},[79,51076,3185],{"class":96},[79,51078,5666],{"class":89},[79,51080,35175],{"class":228},[79,51082,478],{"class":448},[79,51084,775],{"class":96},[79,51086,35182],{"class":228},[79,51088,478],{"class":448},[79,51090,775],{"class":96},[79,51092,35141],{"class":228},[79,51094,51095],{"class":81,"line":35358},[79,51096,542],{"emptyLinePlaceholder":541},[79,51098,51099],{"class":81,"line":35369},[79,51100,35199],{"class":2313},[79,51102,51103,51105,51107,51109,51111,51113,51115],{"class":81,"line":35375},[79,51104,1089],{"class":448},[79,51106,35207],{"class":228},[79,51108,478],{"class":448},[79,51110,775],{"class":96},[79,51112,3179],{"class":228},[79,51114,3199],{"class":448},[79,51116,35218],{"class":228},[79,51118,51119],{"class":81,"line":35381},[79,51120,35224],{"class":2313},[79,51122,51123,51125,51127,51129,51131,51133,51135],{"class":81,"line":35387},[79,51124,35230],{"class":228},[79,51126,742],{"class":96},[79,51128,239],{"class":448},[79,51130,35237],{"class":228},[79,51132,478],{"class":448},[79,51134,775],{"class":96},[79,51136,762],{"class":228},[79,51138,51139],{"class":81,"line":35405},[79,51140,35249],{"class":2313},[79,51142,51143],{"class":81,"line":35419},[79,51144,35255],{"class":2313},[79,51146,51147,51149,51151],{"class":81,"line":35428},[79,51148,35261],{"class":228},[79,51150,239],{"class":448},[79,51152,34313],{"class":228},[79,51154,51155],{"class":81,"line":35437},[79,51156,542],{"emptyLinePlaceholder":541},[79,51158,51159],{"class":81,"line":35446},[79,51160,35276],{"class":2313},[79,51162,51163,51165,51167,51169,51171],{"class":81,"line":35455},[79,51164,35282],{"class":228},[79,51166,239],{"class":448},[79,51168,35287],{"class":228},[79,51170,478],{"class":448},[79,51172,35292],{"class":228},[79,51174,51175,51177,51179,51181,51183,51185,51187,51189,51191,51193,51195,51197,51199,51201,51203,51205,51207,51209],{"class":81,"line":35461},[79,51176,34449],{"class":96},[79,51178,455],{"class":228},[79,51180,35302],{"class":89},[79,51182,3136],{"class":96},[79,51184,35307],{"class":448},[79,51186,3185],{"class":96},[79,51188,2784],{"class":89},[79,51190,3136],{"class":96},[79,51192,35307],{"class":448},[79,51194,3185],{"class":96},[79,51196,35320],{"class":89},[79,51198,35323],{"class":228},[79,51200,35326],{"class":448},[79,51202,3147],{"class":96},[79,51204,35331],{"class":228},[79,51206,1094],{"class":448},[79,51208,3147],{"class":96},[79,51210,1150],{"class":228},[79,51212,51213],{"class":81,"line":35467},[79,51214,38728],{"class":2313},[79,51216,51217],{"class":81,"line":35475},[79,51218,38733],{"class":2313},[79,51220,51221,51223,51225],{"class":81,"line":35480},[79,51222,38738],{"class":228},[79,51224,35364],{"class":89},[79,51226,850],{"class":228},[79,51228,51229],{"class":81,"line":35486},[79,51230,35384],{"class":2313},[79,51232,51233,51235,51237,51239,51241,51243],{"class":81,"line":35497},[79,51234,35390],{"class":228},[79,51236,239],{"class":448},[79,51238,35395],{"class":228},[79,51240,35398],{"class":7284},[79,51242,239],{"class":448},[79,51244,3652],{"class":228},[79,51246,51247,51249,51251,51253],{"class":81,"line":35503},[79,51248,35408],{"class":89},[79,51250,3099],{"class":228},[79,51252,35413],{"class":96},[79,51254,35416],{"class":228},[79,51256,51257,51259],{"class":81,"line":35523},[79,51258,35422],{"class":89},[79,51260,35425],{"class":228},[79,51262,51263,51265],{"class":81,"line":35529},[79,51264,35431],{"class":89},[79,51266,35434],{"class":228},[79,51268,51269,51271],{"class":81,"line":35535},[79,51270,35440],{"class":89},[79,51272,35443],{"class":228},[79,51274,51275,51277],{"class":81,"line":35541},[79,51276,35449],{"class":89},[79,51278,35452],{"class":228},[79,51280,51281],{"class":81,"line":35558},[79,51282,35458],{"class":228},[79,51284,51285],{"class":81,"line":35564},[79,51286,35464],{"class":2313},[79,51288,51289,51291],{"class":81,"line":35570},[79,51290,715],{"class":448},[79,51292,35472],{"class":228},[79,51294,51295],{"class":81,"line":35576},[79,51296,542],{"emptyLinePlaceholder":541},[79,51298,51299],{"class":81,"line":35582},[79,51300,35483],{"class":2313},[79,51302,51303,51305,51307],{"class":81,"line":35588},[79,51304,703],{"class":448},[79,51306,35491],{"class":85},[79,51308,35494],{"class":228},[79,51310,51311],{"class":81,"line":35615},[79,51312,35500],{"class":2313},[79,51314,51315,51317,51319,51321,51323,51325,51327,51329],{"class":81,"line":35639},[79,51316,35506],{"class":228},[79,51318,33694],{"class":7284},[79,51320,239],{"class":448},[79,51322,455],{"class":228},[79,51324,2739],{"class":96},[79,51326,2621],{"class":228},[79,51328,2537],{"class":96},[79,51330,1150],{"class":228},[79,51332,51333],{"class":81,"line":35645},[79,51334,35526],{"class":2313},[79,51336,51337],{"class":81,"line":35651},[79,51338,35532],{"class":2313},[79,51340,51341],{"class":81,"line":35657},[79,51342,35538],{"class":2313},[79,51344,51345,51347,51349,51351,51353,51355,51357],{"class":81,"line":35668},[79,51346,33728],{"class":228},[79,51348,775],{"class":96},[79,51350,2621],{"class":228},[79,51352,2331],{"class":96},[79,51354,2621],{"class":228},[79,51356,775],{"class":96},[79,51358,850],{"class":228},[79,51360,51361],{"class":81,"line":35679},[79,51362,35561],{"class":2313},[79,51364,51365],{"class":81,"line":35685},[79,51366,35567],{"class":2313},[79,51368,51369],{"class":81,"line":35702},[79,51370,35573],{"class":2313},[79,51372,51373],{"class":81,"line":35725},[79,51374,35579],{"class":2313},[79,51376,51377],{"class":81,"line":35748},[79,51378,35585],{"class":2313},[79,51380,51381,51383,51385,51387,51389,51391,51393,51395,51397],{"class":81,"line":35754},[79,51382,35591],{"class":228},[79,51384,35594],{"class":89},[79,51386,35597],{"class":228},[79,51388,35600],{"class":89},[79,51390,2621],{"class":228},[79,51392,35605],{"class":7284},[79,51394,239],{"class":448},[79,51396,35610],{"class":89},[79,51398,850],{"class":228},[79,51400,51401,51403,51405,51407,51409,51411,51413,51415,51417],{"class":81,"line":35759},[79,51402,35591],{"class":228},[79,51404,35594],{"class":89},[79,51406,35622],{"class":228},[79,51408,35625],{"class":89},[79,51410,2621],{"class":228},[79,51412,35605],{"class":7284},[79,51414,239],{"class":448},[79,51416,35634],{"class":89},[79,51418,850],{"class":228},[79,51420,51421],{"class":81,"line":35768},[79,51422,35642],{"class":2313},[79,51424,51425],{"class":81,"line":35778},[79,51426,35648],{"class":228},[79,51428,51429],{"class":81,"line":35784},[79,51430,35654],{"class":2313},[79,51432,51433,51435,51437],{"class":81,"line":35789},[79,51434,35660],{"class":228},[79,51436,35663],{"class":89},[79,51438,850],{"class":228},[79,51440,51441,51443,51445],{"class":81,"line":35795},[79,51442,35671],{"class":228},[79,51444,35674],{"class":89},[79,51446,850],{"class":228},[79,51448,51449],{"class":81,"line":35808},[79,51450,35682],{"class":2313},[79,51452,51453,51455,51457,51459,51461,51463,51465],{"class":81,"line":35814},[79,51454,33728],{"class":228},[79,51456,775],{"class":96},[79,51458,2621],{"class":228},[79,51460,2331],{"class":96},[79,51462,2621],{"class":228},[79,51464,2331],{"class":96},[79,51466,850],{"class":228},[79,51468,51469,51471,51473,51475,51477,51479,51481,51483,51485],{"class":81,"line":35825},[79,51470,35591],{"class":228},[79,51472,35594],{"class":89},[79,51474,35709],{"class":228},[79,51476,35600],{"class":89},[79,51478,2621],{"class":228},[79,51480,35605],{"class":7284},[79,51482,239],{"class":448},[79,51484,35720],{"class":89},[79,51486,850],{"class":228},[79,51488,51489,51491,51493,51495,51497,51499,51501,51503,51505],{"class":81,"line":35836},[79,51490,35591],{"class":228},[79,51492,35594],{"class":89},[79,51494,35732],{"class":228},[79,51496,35625],{"class":89},[79,51498,2621],{"class":228},[79,51500,35605],{"class":7284},[79,51502,239],{"class":448},[79,51504,35743],{"class":89},[79,51506,850],{"class":228},[79,51508,51509],{"class":81,"line":35855},[79,51510,35751],{"class":2313},[79,51512,51514],{"class":81,"line":51513},219,[79,51515,35648],{"class":228},[79,51517,51519,51521,51523],{"class":81,"line":51518},220,[79,51520,35660],{"class":228},[79,51522,35594],{"class":89},[79,51524,850],{"class":228},[79,51526,51528,51530,51532],{"class":81,"line":51527},221,[79,51529,35671],{"class":228},[79,51531,35773],{"class":89},[79,51533,850],{"class":228},[79,51535,51537],{"class":81,"line":51536},222,[79,51538,35781],{"class":228},[79,51540,51542],{"class":81,"line":51541},223,[79,51543,542],{"emptyLinePlaceholder":541},[79,51545,51547],{"class":81,"line":51546},224,[79,51548,35792],{"class":2313},[79,51550,51552,51554,51556,51558,51560],{"class":81,"line":51551},225,[79,51553,1210],{"class":448},[79,51555,1213],{"class":96},[79,51557,5025],{"class":448},[79,51559,33231],{"class":89},[79,51561,745],{"class":228},[79,51563,51565],{"class":81,"line":51564},226,[79,51566,35811],{"class":2313},[79,51568,51570,51572,51574],{"class":81,"line":51569},227,[79,51571,46541],{"class":228},[79,51573,239],{"class":448},[79,51575,46546],{"class":228},[79,51577,51579,51581,51583],{"class":81,"line":51578},228,[79,51580,35828],{"class":228},[79,51582,239],{"class":448},[79,51584,35833],{"class":228},[79,51586,51588,51590,51592,51594,51596,51598,51600],{"class":81,"line":51587},229,[79,51589,35390],{"class":228},[79,51591,239],{"class":448},[79,51593,46563],{"class":228},[79,51595,35846],{"class":7284},[79,51597,239],{"class":448},[79,51599,3147],{"class":96},[79,51601,850],{"class":228},[79,51603,51605],{"class":81,"line":51604},230,[79,51606,35858],{"class":228},[24023,51608,51610],{"id":51609},"_242测试代码","2.4.2.测试代码",[19,51612,51613],{},"使用测试集进行测试与推理",[51,51615,51617],{"className":439,"code":51616,"language":441,"meta":57,"style":57},"import torch\nimport torch.utils.data as Data\nfrom torchvision import transforms\nfrom torchvision.datasets import ImageFolder\nfrom model import GoogLeNet,Inception\n\n# 测试数据处理\ndef test_data_process():\n   # 导入自己的数据集，并进行数据处理\n    # 定义数据集的路径\n    ROOT_PATH=r\".\u002Fdata\u002Ftest\"\n\n    # 定义归一化方法\n    # 这里需要先计算一下数据集的均值和方差\n    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n    # 第一个参数是均值，第二个参数是方差\n    normalize=transforms.Normalize([0.162,0.151,0.138],[0.058,0.052,0.048])\n    # 定义数据集处理方法变量\n    train_transform=transforms.Compose([\n        # 调整图像大小为224*224\n        transforms.Resize((224,224)),\n        # 将图像转换为张量\n        transforms.ToTensor(),\n        normalize])\n    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n\n    # 加载数据集\n    # 传入数据集路径与处理方法\n    test_data=ImageFolder(ROOT_PATH,transform=train_transform)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=GoogLeNet(Inception)\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['猫','狗']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[59,51618,51619,51625,51635,51645,51656,51666,51670,51674,51682,51687,51691,51708,51712,51716,51720,51724,51728,51760,51764,51772,51776,51788,51792,51796,51800,51804,51808,51812,51816,51820,51838,51852,51856,51866,51876,51886,51892,51896,51900,51908,51912,51928,51936,51940,51944,51952,51960,51964,51968,51972,51976,51982,51986,51996,52004,52012,52016,52020,52024,52032,52036,52052,52056,52060,52064,52076,52080,52092,52096,52100,52112,52116,52126,52130,52134,52146,52150,52158,52162,52166,52174,52178,52186,52190,52194,52198,52202,52206,52222,52230,52234,52238,52256,52262,52266,52276,52284,52292,52296,52300,52304,52308,52316,52320,52336,52340,52348,52356],{"__ignoreMap":57},[79,51620,51621,51623],{"class":81,"line":82},[79,51622,520],{"class":448},[79,51624,32405],{"class":228},[79,51626,51627,51629,51631,51633],{"class":81,"line":167},[79,51628,520],{"class":448},[79,51630,33417],{"class":228},[79,51632,533],{"class":448},[79,51634,33422],{"class":228},[79,51636,51637,51639,51641,51643],{"class":81,"line":178},[79,51638,32745],{"class":448},[79,51640,33400],{"class":228},[79,51642,520],{"class":448},[79,51644,33405],{"class":228},[79,51646,51647,51649,51651,51653],{"class":81,"line":545},[79,51648,32745],{"class":448},[79,51650,33373],{"class":228},[79,51652,520],{"class":448},[79,51654,51655],{"class":228}," ImageFolder\n",[79,51657,51658,51660,51662,51664],{"class":81,"line":550},[79,51659,32745],{"class":448},[79,51661,33915],{"class":228},[79,51663,520],{"class":448},[79,51665,46635],{"class":228},[79,51667,51668],{"class":81,"line":562},[79,51669,542],{"emptyLinePlaceholder":541},[79,51671,51672],{"class":81,"line":568},[79,51673,35948],{"class":2313},[79,51675,51676,51678,51680],{"class":81,"line":574},[79,51677,703],{"class":448},[79,51679,35955],{"class":85},[79,51681,33953],{"class":228},[79,51683,51684],{"class":81,"line":579},[79,51685,51686],{"class":2313},"   # 导入自己的数据集，并进行数据处理\n",[79,51688,51689],{"class":81,"line":585},[79,51690,49956],{"class":2313},[79,51692,51693,51695,51697,51699,51701,51703,51706],{"class":81,"line":591},[79,51694,49961],{"class":96},[79,51696,239],{"class":448},[79,51698,2910],{"class":448},[79,51700,2495],{"class":89},[79,51702,2798],{"class":96},[79,51704,51705],{"class":49972},"\u002Fdata\u002Ftest",[79,51707,27152],{"class":89},[79,51709,51710],{"class":81,"line":596},[79,51711,542],{"emptyLinePlaceholder":541},[79,51713,51714],{"class":81,"line":602},[79,51715,49984],{"class":2313},[79,51717,51718],{"class":81,"line":608},[79,51719,49989],{"class":2313},[79,51721,51722],{"class":81,"line":614},[79,51723,49994],{"class":2313},[79,51725,51726],{"class":81,"line":619},[79,51727,49999],{"class":2313},[79,51729,51730,51732,51734,51736,51738,51740,51742,51744,51746,51748,51750,51752,51754,51756,51758],{"class":81,"line":625},[79,51731,50004],{"class":228},[79,51733,239],{"class":448},[79,51735,50009],{"class":228},[79,51737,50012],{"class":96},[79,51739,2621],{"class":228},[79,51741,50017],{"class":96},[79,51743,2621],{"class":228},[79,51745,50022],{"class":96},[79,51747,50025],{"class":228},[79,51749,50028],{"class":96},[79,51751,2621],{"class":228},[79,51753,50033],{"class":96},[79,51755,2621],{"class":228},[79,51757,50038],{"class":96},[79,51759,6727],{"class":228},[79,51761,51762],{"class":81,"line":631},[79,51763,50045],{"class":2313},[79,51765,51766,51768,51770],{"class":81,"line":637},[79,51767,50050],{"class":228},[79,51769,239],{"class":448},[79,51771,50055],{"class":228},[79,51773,51774],{"class":81,"line":643},[79,51775,50060],{"class":2313},[79,51777,51778,51780,51782,51784,51786],{"class":81,"line":649},[79,51779,50065],{"class":228},[79,51781,33503],{"class":96},[79,51783,2621],{"class":228},[79,51785,33503],{"class":96},[79,51787,44617],{"class":228},[79,51789,51790],{"class":81,"line":655},[79,51791,50078],{"class":2313},[79,51793,51794],{"class":81,"line":660},[79,51795,50083],{"class":228},[79,51797,51798],{"class":81,"line":666},[79,51799,50088],{"class":228},[79,51801,51802],{"class":81,"line":672},[79,51803,50093],{"class":2313},[79,51805,51806],{"class":81,"line":678},[79,51807,50098],{"class":2313},[79,51809,51810],{"class":81,"line":684},[79,51811,542],{"emptyLinePlaceholder":541},[79,51813,51814],{"class":81,"line":690},[79,51815,50107],{"class":2313},[79,51817,51818],{"class":81,"line":695},[79,51819,50112],{"class":2313},[79,51821,51822,51824,51826,51828,51830,51832,51834,51836],{"class":81,"line":700},[79,51823,35962],{"class":228},[79,51825,239],{"class":448},[79,51827,50121],{"class":228},[79,51829,50124],{"class":96},[79,51831,2621],{"class":228},[79,51833,50129],{"class":7284},[79,51835,239],{"class":448},[79,51837,50134],{"class":228},[79,51839,51840,51842,51844,51846,51848,51850],{"class":81,"line":712},[79,51841,36019],{"class":228},[79,51843,239],{"class":448},[79,51845,33536],{"class":228},[79,51847,33539],{"class":7284},[79,51849,239],{"class":448},[79,51851,36030],{"class":228},[79,51853,51854],{"class":81,"line":721},[79,51855,36035],{"class":2313},[79,51857,51858,51860,51862,51864],{"class":81,"line":726},[79,51859,36040],{"class":7284},[79,51861,239],{"class":448},[79,51863,775],{"class":96},[79,51865,33468],{"class":228},[79,51867,51868,51870,51872,51874],{"class":81,"line":731},[79,51869,36051],{"class":7284},[79,51871,239],{"class":448},[79,51873,33478],{"class":96},[79,51875,33468],{"class":228},[79,51877,51878,51880,51882,51884],{"class":81,"line":748},[79,51879,36062],{"class":7284},[79,51881,239],{"class":448},[79,51883,759],{"class":96},[79,51885,850],{"class":228},[79,51887,51888,51890],{"class":81,"line":765},[79,51889,715],{"class":448},[79,51891,36075],{"class":228},[79,51893,51894],{"class":81,"line":780},[79,51895,542],{"emptyLinePlaceholder":541},[79,51897,51898],{"class":81,"line":811},[79,51899,36084],{"class":2313},[79,51901,51902,51904,51906],{"class":81,"line":816},[79,51903,703],{"class":448},[79,51905,36091],{"class":85},[79,51907,36094],{"class":228},[79,51909,51910],{"class":81,"line":821},[79,51911,36099],{"class":2313},[79,51913,51914,51916,51918,51920,51922,51924,51926],{"class":81,"line":837},[79,51915,33243],{"class":228},[79,51917,239],{"class":448},[79,51919,33250],{"class":89},[79,51921,3799],{"class":448},[79,51923,33255],{"class":228},[79,51925,3796],{"class":448},[79,51927,36116],{"class":89},[79,51929,51930,51932,51934],{"class":81,"line":853},[79,51931,33295],{"class":228},[79,51933,239],{"class":448},[79,51935,34288],{"class":228},[79,51937,51938],{"class":81,"line":864},[79,51939,542],{"emptyLinePlaceholder":541},[79,51941,51942],{"class":81,"line":869},[79,51943,36133],{"class":2313},[79,51945,51946,51948,51950],{"class":81,"line":885},[79,51947,36138],{"class":228},[79,51949,239],{"class":448},[79,51951,34341],{"class":96},[79,51953,51954,51956,51958],{"class":81,"line":891},[79,51955,36147],{"class":228},[79,51957,239],{"class":448},[79,51959,5160],{"class":96},[79,51961,51962],{"class":81,"line":896},[79,51963,542],{"emptyLinePlaceholder":541},[79,51965,51966],{"class":81,"line":907},[79,51967,36160],{"class":2313},[79,51969,51970],{"class":81,"line":912},[79,51971,36165],{"class":2313},[79,51973,51974],{"class":81,"line":935},[79,51975,36170],{"class":2313},[79,51977,51978,51980],{"class":81,"line":946},[79,51979,36175],{"class":448},[79,51981,34882],{"class":228},[79,51983,51984],{"class":81,"line":960},[79,51985,36182],{"class":2313},[79,51987,51988,51990,51992,51994],{"class":81,"line":975},[79,51989,5477],{"class":448},[79,51991,36189],{"class":228},[79,51993,921],{"class":448},[79,51995,36194],{"class":228},[79,51997,51998,52000,52002],{"class":81,"line":980},[79,51999,36199],{"class":228},[79,52001,239],{"class":448},[79,52003,36204],{"class":228},[79,52005,52006,52008,52010],{"class":81,"line":1006},[79,52007,36209],{"class":228},[79,52009,239],{"class":448},[79,52011,36214],{"class":228},[79,52013,52014],{"class":81,"line":1027},[79,52015,36219],{"class":2313},[79,52017,52018],{"class":81,"line":1032},[79,52019,34873],{"class":228},[79,52021,52022],{"class":81,"line":1047},[79,52023,36228],{"class":2313},[79,52025,52026,52028,52030],{"class":81,"line":1053},[79,52027,34658],{"class":228},[79,52029,239],{"class":448},[79,52031,36237],{"class":228},[79,52033,52034],{"class":81,"line":1058},[79,52035,36242],{"class":2313},[79,52037,52038,52040,52042,52044,52046,52048,52050],{"class":81,"line":1069},[79,52039,34675],{"class":228},[79,52041,239],{"class":448},[79,52043,34680],{"class":228},[79,52045,34683],{"class":7284},[79,52047,239],{"class":448},[79,52049,775],{"class":96},[79,52051,850],{"class":228},[79,52053,52054],{"class":81,"line":1081},[79,52055,36263],{"class":2313},[79,52057,52058],{"class":81,"line":1086},[79,52059,36268],{"class":2313},[79,52061,52062],{"class":81,"line":1108},[79,52063,36273],{"class":2313},[79,52065,52066,52068,52070,52072,52074],{"class":81,"line":1153},[79,52067,36278],{"class":228},[79,52069,1075],{"class":448},[79,52071,34785],{"class":228},[79,52073,5025],{"class":448},[79,52075,36287],{"class":228},[79,52077,52078],{"class":81,"line":1158},[79,52079,36292],{"class":2313},[79,52081,52082,52084,52086,52088,52090],{"class":81,"line":1180},[79,52083,36297],{"class":228},[79,52085,1075],{"class":448},[79,52087,36302],{"class":228},[79,52089,759],{"class":96},[79,52091,850],{"class":228},[79,52093,52094],{"class":81,"line":1197},[79,52095,542],{"emptyLinePlaceholder":541},[79,52097,52098],{"class":81,"line":1202},[79,52099,36315],{"class":2313},[79,52101,52102,52104,52106,52108,52110],{"class":81,"line":1207},[79,52103,36320],{"class":228},[79,52105,239],{"class":448},[79,52107,36325],{"class":228},[79,52109,2824],{"class":448},[79,52111,36330],{"class":228},[79,52113,52114],{"class":81,"line":1223},[79,52115,36335],{"class":2313},[79,52117,52118,52120,52122,52124],{"class":81,"line":18722},[79,52119,34449],{"class":96},[79,52121,455],{"class":228},[79,52123,36344],{"class":89},[79,52125,36347],{"class":228},[79,52127,52128],{"class":81,"line":18728},[79,52129,542],{"emptyLinePlaceholder":541},[79,52131,52132],{"class":81,"line":18739},[79,52133,36356],{"class":2313},[79,52135,52136,52138,52140,52142,52144],{"class":81,"line":18762},[79,52137,1210],{"class":448},[79,52139,1213],{"class":96},[79,52141,5025],{"class":448},[79,52143,33231],{"class":89},[79,52145,745],{"class":228},[79,52147,52148],{"class":81,"line":18784},[79,52149,36373],{"class":2313},[79,52151,52152,52154,52156],{"class":81,"line":18789},[79,52153,33295],{"class":228},[79,52155,239],{"class":448},[79,52157,46546],{"class":228},[79,52159,52160],{"class":81,"line":18795},[79,52161,36386],{"class":2313},[79,52163,52164],{"class":81,"line":18809},[79,52165,36391],{"class":2313},[79,52167,52168,52170,52172],{"class":81,"line":18822},[79,52169,36396],{"class":228},[79,52171,36399],{"class":89},[79,52173,1150],{"class":228},[79,52175,52176],{"class":81,"line":18827},[79,52177,36406],{"class":2313},[79,52179,52180,52182,52184],{"class":81,"line":18841},[79,52181,36019],{"class":228},[79,52183,239],{"class":448},[79,52185,36415],{"class":228},[79,52187,52188],{"class":81,"line":18846},[79,52189,36420],{"class":2313},[79,52191,52192],{"class":81,"line":18852},[79,52193,36425],{"class":228},[79,52195,52196],{"class":81,"line":18857},[79,52197,542],{"emptyLinePlaceholder":541},[79,52199,52200],{"class":81,"line":18871},[79,52201,36434],{"class":2313},[79,52203,52204],{"class":81,"line":18876},[79,52205,36439],{"class":2313},[79,52207,52208,52210,52212,52214,52216,52218,52220],{"class":81,"line":18881},[79,52209,33243],{"class":228},[79,52211,239],{"class":448},[79,52213,33250],{"class":89},[79,52215,3799],{"class":448},[79,52217,33255],{"class":228},[79,52219,3796],{"class":448},[79,52221,36116],{"class":89},[79,52223,52224,52226,52228],{"class":81,"line":18895},[79,52225,33295],{"class":228},[79,52227,239],{"class":448},[79,52229,34288],{"class":228},[79,52231,52232],{"class":81,"line":18907},[79,52233,36468],{"class":2313},[79,52235,52236],{"class":81,"line":18912},[79,52237,36473],{"class":2313},[79,52239,52240,52242,52244,52246,52249,52251,52254],{"class":81,"line":18925},[79,52241,36478],{"class":228},[79,52243,239],{"class":448},[79,52245,3130],{"class":228},[79,52247,52248],{"class":89},"'猫'",[79,52250,2621],{"class":228},[79,52252,52253],{"class":89},"'狗'",[79,52255,762],{"class":228},[79,52257,52258,52260],{"class":81,"line":18930},[79,52259,36175],{"class":448},[79,52261,34882],{"class":228},[79,52263,52264],{"class":81,"line":18935},[79,52265,36543],{"class":2313},[79,52267,52268,52270,52272,52274],{"class":81,"line":18940},[79,52269,5477],{"class":448},[79,52271,36550],{"class":228},[79,52273,921],{"class":448},[79,52275,36194],{"class":228},[79,52277,52278,52280,52282],{"class":81,"line":18953},[79,52279,34608],{"class":228},[79,52281,239],{"class":448},[79,52283,34613],{"class":228},[79,52285,52286,52288,52290],{"class":81,"line":18958},[79,52287,34623],{"class":228},[79,52289,239],{"class":448},[79,52291,34628],{"class":228},[79,52293,52294],{"class":81,"line":34631},[79,52295,542],{"emptyLinePlaceholder":541},[79,52297,52298],{"class":81,"line":34637},[79,52299,36579],{"class":2313},[79,52301,52302],{"class":81,"line":34643},[79,52303,34873],{"class":228},[79,52305,52306],{"class":81,"line":34649},[79,52307,36588],{"class":2313},[79,52309,52310,52312,52314],{"class":81,"line":34655},[79,52311,34658],{"class":228},[79,52313,239],{"class":448},[79,52315,34663],{"class":228},[79,52317,52318],{"class":81,"line":34666},[79,52319,36601],{"class":2313},[79,52321,52322,52324,52326,52328,52330,52332,52334],{"class":81,"line":34672},[79,52323,34675],{"class":228},[79,52325,239],{"class":448},[79,52327,34680],{"class":228},[79,52329,34683],{"class":7284},[79,52331,239],{"class":448},[79,52333,775],{"class":96},[79,52335,850],{"class":228},[79,52337,52338],{"class":81,"line":34692},[79,52339,36622],{"class":2313},[79,52341,52342,52344,52346],{"class":81,"line":34698},[79,52343,36627],{"class":228},[79,52345,239],{"class":448},[79,52347,36632],{"class":228},[79,52349,52350,52352,52354],{"class":81,"line":34709},[79,52351,36637],{"class":228},[79,52353,239],{"class":448},[79,52355,36642],{"class":228},[79,52357,52358,52360,52362,52364,52366,52368,52370,52372],{"class":81,"line":34715},[79,52359,1111],{"class":96},[79,52361,455],{"class":228},[79,52363,36651],{"class":89},[79,52365,36654],{"class":228},[79,52367,36657],{"class":89},[79,52369,2621],{"class":228},[79,52371,36662],{"class":89},[79,52373,36665],{"class":228},[2159,52375,52376],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}",{"title":57,"searchDepth":167,"depth":167,"links":52378},[52379,52380,52381,52382],{"id":32599,"depth":178,"text":32600},{"id":39834,"depth":178,"text":39835},{"id":43267,"depth":178,"text":43268},{"id":47276,"depth":178,"text":47277},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":32591,"description":25402},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":52389,"title":52390,"body":52391,"description":25402,"extension":2186,"meta":52398,"navigation":541,"path":52399,"seo":52400,"stem":52401,"__hash__":52402},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":52392,"toc":52396},[52393],[10,52394,52390],{"id":52395},"_3yolo模型学习",{"title":57,"searchDepth":167,"depth":167,"links":52397},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":52390,"description":25402},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":52404,"title":52405,"body":52406,"description":52413,"extension":2186,"meta":52414,"navigation":541,"path":52416,"seo":52417,"stem":52418,"__hash__":52419},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":52407,"toc":52411},[52408],[19,52409,52410],{},"yolo模型还未补充",{"title":57,"searchDepth":167,"depth":167,"links":52412},[],"深度学习学习",{"category":52415},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":52405,"description":52413},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":52421,"title":52422,"body":52423,"description":25402,"extension":2186,"meta":52448,"navigation":541,"path":52449,"seo":52450,"stem":52451,"__hash__":52452},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":52424,"toc":52446},[52425,52428,52431,52436,52443],[10,52426,52422],{"id":52427},"_1工具",[19,52429,52430],{},"提示错误插件：有问题会提前报错",[19,52432,52433],{},[3569,52434],{"alt":57,"src":52435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,52437,52438],{},[2482,52439,52442],{"href":52440,"rel":52441},"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",[25885],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,52444,52445],{},"alt键加上下箭头可以实现语句的移动",{"title":57,"searchDepth":167,"depth":167,"links":52447},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":52422,"description":25402},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":52454,"title":52455,"body":52456,"description":25402,"extension":2186,"meta":55316,"navigation":541,"path":55317,"seo":55318,"stem":55319,"__hash__":55320},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":52457,"toc":55267},[52458,52461,52465,52469,52474,52477,52482,52486,52493,52498,52505,52510,52517,52522,52526,52531,52534,52538,52543,52547,52552,52555,52558,52561,52564,52567,52570,52573,52576,52581,52586,52591,52595,52598,52601,52605,52610,52613,52621,52626,52643,52651,52656,52661,52666,52671,52676,52679,52684,52689,52693,52702,52707,52712,52716,52721,52724,52728,52733,52741,52746,52751,52754,52759,52764,52769,52772,52775,52778,52783,52788,52791,52796,52799,52804,52807,52810,52813,52818,52821,52824,52839,52844,52849,52854,52857,52860,52863,52877,52880,52885,52890,52893,52896,52899,52902,52905,52908,52911,52915,52919,52924,52928,52931,52936,52941,52944,52949,52952,52956,52961,52964,52967,52970,52973,52976,52979,52982,52985,52988,52992,52997,53002,53007,53010,53013,53017,53022,53025,53029,53032,53035,53040,53043,53046,53050,53054,53057,53062,53067,53070,53099,53104,53109,53114,53119,53123,53128,53132,53137,53140,53144,53148,53153,53157,53162,53167,53171,53176,53179,53181,53184,53189,53193,53198,53202,53206,53211,53216,53221,53226,53230,53235,53240,53245,53248,53251,53256,53259,53264,53269,53274,53279,53283,54089,54093,54435,54440,54443,54446,54449,54452,54455,54458,54461,54464,54466,54469,54471,54474,54478,54483,54486,54489,54492,54496,54501,54506,54526,54529,54533,54538,54543,54560,54564,54593,54597,54619,54621,54660,54668,54674,54678,54681,54684,54689,54694,54697,54700,54703,54708,54713,54716,54719,54722,54725,54728,54731,54734,54737,54740,54743,54746,54748,54751,54754,54757,54760,54763,54766,54769,54772,54776,54781,54784,54789,54792,54795,54798,54801,54804,54807,54810,54812,54815,54818,54821,54824,54827,54830,54834,54837,54846,54849,54854,54857,54862,54865,54868,54871,54874,54877,54880,54883,54887,54891,54894,54897,54902,54907,54912,54916,54921,54926,54929,54932,54935,54938,54941,54946,54949,54954,54956,54961,54964,54968,54973,54976,54979,54984,54988,54991,54996,54999,55002,55031,55036,55039,55042,55045,55048,55051,55055,55058,55142,55146,55149,55154,55159,55166,55169,55172,55175,55178,55181,55186,55191,55194,55197,55200,55203,55206,55209,55212,55215,55218,55220,55223,55227,55232,55237,55242,55245,55250,55255,55258,55261,55264],[10,52459,52455],{"id":52460},"_2基础语法",[14,52462,52464],{"id":52463},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[339,52466,52468],{"id":52467},"_211-js组成","2.1.1 js组成",[26,52470,52471],{},[29,52472,52473],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,52475,52476],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[26,52478,52479],{"start":167},[29,52480,52481],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[339,52483,52485],{"id":52484},"_212-js书写位置","2.1.2 js书写位置",[26,52487,52488],{},[29,52489,52490],{},[2398,52491,52492],{},"内部 JavaScript",[19,52494,52495],{},[3569,52496],{"alt":57,"src":52497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[26,52499,52500],{"start":167},[29,52501,52502],{},[2398,52503,52504],{},"外部 JavaScript",[19,52506,52507],{},[3569,52508],{"alt":57,"src":52509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[26,52511,52512],{"start":178},[29,52513,52514],{},[2398,52515,52516],{},"内联 JavaScript",[19,52518,52519],{},[3569,52520],{"alt":57,"src":52521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[339,52523,52525],{"id":52524},"_213-javascript注释","2.1.3 JavaScript注释",[19,52527,52528],{},[3569,52529],{"alt":57,"src":52530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,52532,52533],{},"alt+shift+a一定要记住！",[339,52535,52537],{"id":52536},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,52539,52540],{},[3569,52541],{"alt":57,"src":52542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[339,52544,52546],{"id":52545},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[26,52548,52549],{},[29,52550,52551],{},"输出语法：",[19,52553,52554],{},"①document.write('要出的内容')",[19,52556,52557],{},"向body内输出内容；",[19,52559,52560],{},"如果输出的内容写的是标签，也会被解析cheng",[19,52562,52563],{},"②alert('要出的内容')",[19,52565,52566],{},"页面弹出警告对话框",[19,52568,52569],{},"③console.log('控制台打印')",[19,52571,52572],{},"控制台输出语法，程序员调试使用",[19,52574,52575],{},"输入log就行，自动生成：",[19,52577,52578],{},[3569,52579],{"alt":57,"src":52580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[26,52582,52583],{"start":167},[29,52584,52585],{},"输入语法：",[19,52587,52588],{},[3569,52589],{"alt":57,"src":52590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[339,52592,52594],{"id":52593},"_2116-字面量","21.1.6 字面量",[19,52596,52597],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,52599,52600],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,52602,52604],{"id":52603},"_22-变量","2.2 变量",[26,52606,52607],{},[29,52608,52609],{},"变量声明",[19,52611,52612],{},"let 变量名",[3246,52614,52615,52618],{},[29,52616,52617],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[29,52619,52620],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[26,52622,52623],{"start":167},[29,52624,52625],{},"变量赋值",[51,52627,52631],{"className":52628,"code":52629,"language":52630,"meta":57,"style":57},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[59,52632,52633,52638],{"__ignoreMap":57},[79,52634,52635],{"class":81,"line":82},[79,52636,52637],{"class":228},"let age\n",[79,52639,52640],{"class":81,"line":167},[79,52641,52642],{"class":228},"age=18\n",[26,52644,52645,52648],{"start":178},[29,52646,52647],{},"连这些（变量的初始化）：let age=18",[29,52649,52650],{},"更新变量",[19,52652,52653],{},[3569,52654],{"alt":57,"src":52655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[26,52657,52658],{"start":550},[29,52659,52660],{},"声明多个变量",[19,52662,52663],{},[3569,52664],{"alt":57,"src":52665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[26,52667,52668],{"start":562},[29,52669,52670],{},"变量命名规则与规范",[19,52672,52673],{},[3569,52674],{"alt":57,"src":52675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,52677,52678],{},"遵守小驼峰！",[26,52680,52681],{"start":568},[29,52682,52683],{},"变量拓展-let和var的区别",[19,52685,52686],{},[3569,52687],{"alt":57,"src":52688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,52690,52692],{"id":52691},"_23-数组","2.3 数组",[51,52694,52696],{"className":52628,"code":52695,"language":52630,"meta":57,"style":57},"let arr = []\n",[59,52697,52698],{"__ignoreMap":57},[79,52699,52700],{"class":81,"line":82},[79,52701,52695],{"class":228},[19,52703,52704],{},[3569,52705],{"alt":57,"src":52706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,52708,52709],{},[3569,52710],{"alt":57,"src":52711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,52713,52715],{"id":52714},"_24-常量","2.4 常量",[19,52717,52718],{},[3569,52719],{"alt":57,"src":52720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,52722,52723],{},"const — 类似于 let ，但是变量的值无法被修改",[14,52725,52727],{"id":52726},"_25-数据类型","2.5 数据类型",[19,52729,52730],{},[3569,52731],{"alt":57,"src":52732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[26,52734,52735,52738],{},[29,52736,52737],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[29,52739,52740],{},"算数运算符：",[19,52742,52743],{},[3569,52744],{"alt":57,"src":52745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[26,52747,52748],{"start":178},[29,52749,52750],{},"数字类型（Number）",[19,52752,52753],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,52755,52756],{},[3569,52757],{"alt":57,"src":52758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[26,52760,52761],{"start":545},[29,52762,52763],{},"字符串类型（string）",[19,52765,52766],{},[3569,52767],{"alt":57,"src":52768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,52770,52771],{},"反引号也是可以使用的",[19,52773,52774],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,52776,52777],{},"例如：document.write(\"我今年\"+age+\"岁\")",[26,52779,52780],{"start":550},[29,52781,52782],{},"模板字符串",[19,52784,52785],{},[3569,52786],{"alt":57,"src":52787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,52789,52790],{},"类似于python的字符串格式化",[26,52792,52793],{"start":562},[29,52794,52795],{},"布尔类型",[19,52797,52798],{},"true 和 false",[26,52800,52801],{"start":568},[29,52802,52803],{},"未定义类型（underfined）",[19,52805,52806],{},"表示没有赋值",[19,52808,52809],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,52811,52812],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[26,52814,52815],{"start":574},[29,52816,52817],{},"null（空类型）",[19,52819,52820],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,52822,52823],{},"赋值了，但是内容为空",[51,52825,52827],{"className":52628,"code":52826,"language":52630,"meta":57,"style":57},"typeof null\n输出的是'object'，是一个对象数据类型\n",[59,52828,52829,52834],{"__ignoreMap":57},[79,52830,52831],{"class":81,"line":82},[79,52832,52833],{"class":228},"typeof null\n",[79,52835,52836],{"class":81,"line":167},[79,52837,52838],{"class":228},"输出的是'object'，是一个对象数据类型\n",[26,52840,52841],{"start":579},[29,52842,52843],{},"控制台检测数据类型",[19,52845,52846],{},[3569,52847],{"alt":57,"src":52848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[26,52850,52851],{"start":585},[29,52852,52853],{},"类型转换",[19,52855,52856],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,52858,52859],{},"转换方式：隐式转换和显示转换",[19,52861,52862],{},"①隐式转换",[3246,52864,52865,52868,52871,52874],{},[29,52866,52867],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[29,52869,52870],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[29,52872,52873],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[29,52875,52876],{},"任何数据和字符串相加结果都是字符串",[19,52878,52879],{},"②显示转换",[19,52881,52882],{},[3569,52883],{"alt":57,"src":52884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,52886,52887],{},[3569,52888],{"alt":57,"src":52889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,52891,52892],{},"在输入的时候要用好隐式转换，简单写起来",[19,52894,52895],{},"let num = +prompt(’请输入数字：‘)",[19,52897,52898],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,52900,52901],{},"console.log(parseInt('12.333px'))",[19,52903,52904],{},"输出为：12",[19,52906,52907],{},"console.log(parseInt('a'a'a12.333px'))",[19,52909,52910],{},"输出：NaN",[14,52912,52914],{"id":52913},"_26-运算符","2.6 运算符",[339,52916,52918],{"id":52917},"_261-赋值运算符","2.6.1 赋值运算符",[19,52920,52921],{},[3569,52922],{"alt":57,"src":52923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[339,52925,52927],{"id":52926},"_262-一元运算符","2.6.2 一元运算符",[19,52929,52930],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,52932,52933],{},[3569,52934],{"alt":57,"src":52935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,52937,52938],{},[3569,52939],{"alt":57,"src":52940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,52942,52943],{},"两者的区别：",[19,52945,52946],{},[3569,52947],{"alt":57,"src":52948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,52950,52951],{},"前置先自加；后置后加，代码执行完之后再加",[339,52953,52955],{"id":52954},"_263-比较运算符","2.6.3 比较运算符",[19,52957,52958],{},[3569,52959],{"alt":57,"src":52960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,52962,52963],{},"比较运算符也有隐式转换",[19,52965,52966],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,52968,52969],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,52971,52972],{},"要使用三等，开发的时候",[19,52974,52975],{},"NaN不等于任何人，包括它自己",[19,52977,52978],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,52980,52981],{},"7\u002F10=0.7",[19,52983,52984],{},"最后：0.5+0.2=0.7",[19,52986,52987],{},"字符串比较，比较的是字符对应的ASCII码",[339,52989,52991],{"id":52990},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,52993,52994],{},[3569,52995],{"alt":57,"src":52996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,52998,52999],{},[3569,53000],{"alt":57,"src":53001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,53003,53004],{},[3569,53005],{"alt":57,"src":53006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,53008,53009],{},"上述题目选D",[19,53011,53012],{},"与真2假1；或真1假2",[339,53014,53016],{"id":53015},"_265-运算符优先级","2.6.5 运算符优先级",[19,53018,53019],{},[3569,53020],{"alt":57,"src":53021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,53023,53024],{},"先算逻辑与，后算逻辑或",[14,53026,53028],{"id":53027},"_27-语句","2.7 语句",[19,53030,53031],{},"表达式：是可以被求值的代码，会有结果给我们",[19,53033,53034],{},"语句：语句是可以被执行的代码，例如prompt()",[19,53036,53037],{},[3569,53038],{"alt":57,"src":53039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,53041,53042],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,53044,53045],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[339,53047,53049],{"id":53048},"_271-分支语句","2.7.1 分支语句",[24023,53051,53053],{"id":53052},"_2711-if分支语句","2.7.1.1 if分支语句",[19,53055,53056],{},"if语句单行简单的话，可以不写{}，写在一行就行",[26,53058,53059],{},[29,53060,53061],{},"单分支语句",[19,53063,53064],{},[3569,53065],{"alt":57,"src":53066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,53068,53069],{},"除了0，所有数字都为真",[51,53071,53073],{"className":52628,"code":53072,"language":52630,"meta":57,"style":57},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[59,53074,53075,53080,53085,53090,53094],{"__ignoreMap":57},[79,53076,53077],{"class":81,"line":82},[79,53078,53079],{"class":228},"if（0) {\n",[79,53081,53082],{"class":81,"line":167},[79,53083,53084],{"class":228},"    let a=1\n",[79,53086,53087],{"class":81,"line":178},[79,53088,53089],{"class":228},"    alert(typeof a)\n",[79,53091,53092],{"class":81,"line":545},[79,53093,3671],{"class":228},[79,53095,53096],{"class":81,"line":550},[79,53097,53098],{"class":228},"不输出，括号为假\n",[26,53100,53101],{"start":167},[29,53102,53103],{},"双分支语句",[19,53105,53106],{},[3569,53107],{"alt":57,"src":53108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[26,53110,53111],{"start":178},[29,53112,53113],{},"多分支语句",[19,53115,53116],{},[3569,53117],{"alt":57,"src":53118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[24023,53120,53122],{"id":53121},"_2712-三元运算符","2.7.1.2 三元运算符",[19,53124,53125],{},[3569,53126],{"alt":57,"src":53127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[24023,53129,53131],{"id":53130},"_2713-switch语句","2.7.1.3 switch语句",[19,53133,53134],{},[3569,53135],{"alt":57,"src":53136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,53138,53139],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[339,53141,53143],{"id":53142},"_272-循环语句","2.7.2 循环语句",[24023,53145,53147],{"id":53146},"_2721-断点演示","2.7.2.1 断点演示",[19,53149,53150],{},[3569,53151],{"alt":57,"src":53152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[24023,53154,53156],{"id":53155},"_2722-while循环","2.7.2.2 while循环",[19,53158,53159],{},[3569,53160],{"alt":57,"src":53161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,53163,53164],{},[3569,53165],{"alt":57,"src":53166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[24023,53168,53170],{"id":53169},"_2723-for循环","2.7.2.3 for循环",[19,53172,53173],{},[3569,53174],{"alt":57,"src":53175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,53177,53178],{},"for(;;) {",[19,53180,3185],{},[19,53182,53183],{},"表示无限循环",[19,53185,53186],{},[3569,53187],{"alt":57,"src":53188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[24023,53190,53192],{"id":53191},"_2724-循环的退出","2.7.2.4 循环的退出",[19,53194,53195],{},[3569,53196],{"alt":57,"src":53197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,53199,53201],{"id":53200},"_28-数组","2.8 数组",[339,53203,53205],{"id":53204},"_281-基础认识","2.8.1 基础认识",[19,53207,53208],{},[3569,53209],{"alt":57,"src":53210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,53212,53213],{},[3569,53214],{"alt":57,"src":53215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,53217,53218],{},[3569,53219],{"alt":57,"src":53220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,53222,53223],{},[3569,53224],{"alt":57,"src":53225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[339,53227,53229],{"id":53228},"_282-操作数组","2.8.2 操作数组",[19,53231,53232],{},[3569,53233],{"alt":57,"src":53234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[26,53236,53237],{},[29,53238,53239],{},"添加元素",[19,53241,53242],{},[3569,53243],{"alt":57,"src":53244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,53246,53247],{},"console.log(arr.push('green'))",[19,53249,53250],{},"输出结果：为新数组的长度",[19,53252,53253],{},[3569,53254],{"alt":57,"src":53255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,53257,53258],{},"push用的非常多，一定要记住",[26,53260,53261],{},[29,53262,53263],{},"删除元素",[19,53265,53266],{},[3569,53267],{"alt":57,"src":53268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,53270,53271],{},[3569,53272],{"alt":57,"src":53273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,53275,53276],{},[3569,53277],{"alt":57,"src":53278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[339,53280,53282],{"id":53281},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[51,53284,53286],{"className":52628,"code":53285,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n    \u003Cmeta charset=\"UTF-8\">\n    \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    \u003Ctitle>Document\u003C\u002Ftitle>\n    \u003Cstyle>\n        * {\n            margin: 0;\n            padding: 0;\n        }\n\n        .box {\n            display: flex;\n            width: 700px;\n            height: 300px;\n            border-left: 1px solid pink;\n            border-bottom: 1px solid pink;\n            margin: 50px auto;\n            justify-content: space-around;\n            align-items: flex-end;\n            text-align: center;\n        }\n\n        .box>div {\n            display: flex;\n            width: 50px;\n            background-color: pink;\n            flex-direction: column;\n            justify-content: space-between;\n        }\n\n        .box div span {\n\n            margin-top: -20px;\n        }\n\n        .box div h4 {\n            margin-bottom: -35px;\n            width: 70px;\n            margin-left: -10px;\n        }\n    \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n\n    \u003Cscript>\n        \u002F\u002F 1. 四次弹框效果\n        \u002F\u002F 声明一个新的数组\n        let arr = []\n        for (let i = 1; i \u003C= 4; i++) {\n            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n            \u002F\u002F arr.push(num)\n            arr.push(prompt(`请输入第${i}季度的数据:`))\n            \u002F\u002F push记得加小括号，不是等号赋值的形式\n        }\n        \u002F\u002F console.log(arr)  ['123','135','345','234']\n        \u002F\u002F 盒子开头\n        document.write(` \u003Cdiv class=\"box\">`)\n\n        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n        for (let i = 0; i \u003C arr.length; i++) {\n            document.write(`\n              \u003Cdiv style=\"height: ${arr[i]}px;\">\n                \u003Cspan>${arr[i]}\u003C\u002Fspan>\n                \u003Ch4>第${i + 1}季度\u003C\u002Fh4>\n              \u003C\u002Fdiv>          \n            `)\n        }\n        \u002F\u002F 盒子结尾\n        document.write(` \u003C\u002Fdiv>`)\n    \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,53287,53288,53302,53318,53322,53331,53349,53373,53395,53409,53417,53424,53436,53447,53451,53455,53462,53474,53489,53502,53521,53538,53553,53565,53577,53589,53593,53597,53608,53618,53630,53642,53654,53665,53669,53673,53685,53689,53703,53707,53711,53722,53736,53748,53762,53766,53775,53784,53788,53797,53801,53810,53815,53820,53833,53861,53866,53871,53896,53901,53905,53910,53915,53930,53934,53939,53969,53981,53997,54013,54027,54032,54039,54043,54048,54061,54069,54077,54081],{"__ignoreMap":57},[79,53289,53290,53293,53296,53299],{"class":81,"line":82},[79,53291,53292],{"class":228},"\u003C!",[79,53294,53295],{"class":232},"DOCTYPE",[79,53297,53298],{"class":85}," html",[79,53300,53301],{"class":228},">\n",[79,53303,53304,53306,53308,53311,53313,53316],{"class":81,"line":167},[79,53305,229],{"class":228},[79,53307,52630],{"class":232},[79,53309,53310],{"class":85}," lang",[79,53312,239],{"class":228},[79,53314,53315],{"class":89},"\"en\"",[79,53317,53301],{"class":228},[79,53319,53320],{"class":81,"line":178},[79,53321,542],{"emptyLinePlaceholder":541},[79,53323,53324,53326,53329],{"class":81,"line":545},[79,53325,229],{"class":228},[79,53327,53328],{"class":232},"head",[79,53330,53301],{"class":228},[79,53332,53333,53336,53339,53342,53344,53347],{"class":81,"line":550},[79,53334,53335],{"class":228},"    \u003C",[79,53337,53338],{"class":232},"meta",[79,53340,53341],{"class":85}," charset",[79,53343,239],{"class":228},[79,53345,53346],{"class":89},"\"UTF-8\"",[79,53348,53301],{"class":228},[79,53350,53351,53353,53355,53358,53360,53363,53366,53368,53371],{"class":81,"line":562},[79,53352,53335],{"class":228},[79,53354,53338],{"class":232},[79,53356,53357],{"class":85}," http-equiv",[79,53359,239],{"class":228},[79,53361,53362],{"class":89},"\"X-UA-Compatible\"",[79,53364,53365],{"class":85}," content",[79,53367,239],{"class":228},[79,53369,53370],{"class":89},"\"IE=edge\"",[79,53372,53301],{"class":228},[79,53374,53375,53377,53379,53381,53383,53386,53388,53390,53393],{"class":81,"line":568},[79,53376,53335],{"class":228},[79,53378,53338],{"class":232},[79,53380,236],{"class":85},[79,53382,239],{"class":228},[79,53384,53385],{"class":89},"\"viewport\"",[79,53387,53365],{"class":85},[79,53389,239],{"class":228},[79,53391,53392],{"class":89},"\"width=device-width, initial-scale=1.0\"",[79,53394,53301],{"class":228},[79,53396,53397,53399,53402,53405,53407],{"class":81,"line":574},[79,53398,53335],{"class":228},[79,53400,53401],{"class":232},"title",[79,53403,53404],{"class":228},">Document\u003C\u002F",[79,53406,53401],{"class":232},[79,53408,53301],{"class":228},[79,53410,53411,53413,53415],{"class":81,"line":579},[79,53412,53335],{"class":228},[79,53414,2159],{"class":232},[79,53416,53301],{"class":228},[79,53418,53419,53422],{"class":81,"line":585},[79,53420,53421],{"class":232},"        *",[79,53423,17604],{"class":228},[79,53425,53426,53429,53432,53434],{"class":81,"line":591},[79,53427,53428],{"class":96},"            margin",[79,53430,53431],{"class":228},": ",[79,53433,759],{"class":96},[79,53435,3400],{"class":228},[79,53437,53438,53441,53443,53445],{"class":81,"line":596},[79,53439,53440],{"class":96},"            padding",[79,53442,53431],{"class":228},[79,53444,759],{"class":96},[79,53446,3400],{"class":228},[79,53448,53449],{"class":81,"line":602},[79,53450,4612],{"class":228},[79,53452,53453],{"class":81,"line":608},[79,53454,542],{"emptyLinePlaceholder":541},[79,53456,53457,53460],{"class":81,"line":614},[79,53458,53459],{"class":85},"        .box",[79,53461,17604],{"class":228},[79,53463,53464,53467,53469,53472],{"class":81,"line":619},[79,53465,53466],{"class":96},"            display",[79,53468,53431],{"class":228},[79,53470,53471],{"class":96},"flex",[79,53473,3400],{"class":228},[79,53475,53476,53479,53481,53484,53487],{"class":81,"line":625},[79,53477,53478],{"class":96},"            width",[79,53480,53431],{"class":228},[79,53482,53483],{"class":96},"700",[79,53485,53486],{"class":448},"px",[79,53488,3400],{"class":228},[79,53490,53491,53494,53496,53498,53500],{"class":81,"line":631},[79,53492,53493],{"class":96},"            height",[79,53495,53431],{"class":228},[79,53497,6046],{"class":96},[79,53499,53486],{"class":448},[79,53501,3400],{"class":228},[79,53503,53504,53507,53509,53511,53513,53516,53519],{"class":81,"line":637},[79,53505,53506],{"class":96},"            border-left",[79,53508,53431],{"class":228},[79,53510,775],{"class":96},[79,53512,53486],{"class":448},[79,53514,53515],{"class":96}," solid",[79,53517,53518],{"class":96}," pink",[79,53520,3400],{"class":228},[79,53522,53523,53526,53528,53530,53532,53534,53536],{"class":81,"line":643},[79,53524,53525],{"class":96},"            border-bottom",[79,53527,53431],{"class":228},[79,53529,775],{"class":96},[79,53531,53486],{"class":448},[79,53533,53515],{"class":96},[79,53535,53518],{"class":96},[79,53537,3400],{"class":228},[79,53539,53540,53542,53544,53546,53548,53551],{"class":81,"line":649},[79,53541,53428],{"class":96},[79,53543,53431],{"class":228},[79,53545,2896],{"class":96},[79,53547,53486],{"class":448},[79,53549,53550],{"class":96}," auto",[79,53552,3400],{"class":228},[79,53554,53555,53558,53560,53563],{"class":81,"line":655},[79,53556,53557],{"class":96},"            justify-content",[79,53559,53431],{"class":228},[79,53561,53562],{"class":96},"space-around",[79,53564,3400],{"class":228},[79,53566,53567,53570,53572,53575],{"class":81,"line":660},[79,53568,53569],{"class":96},"            align-items",[79,53571,53431],{"class":228},[79,53573,53574],{"class":96},"flex-end",[79,53576,3400],{"class":228},[79,53578,53579,53582,53584,53587],{"class":81,"line":666},[79,53580,53581],{"class":96},"            text-align",[79,53583,53431],{"class":228},[79,53585,53586],{"class":96},"center",[79,53588,3400],{"class":228},[79,53590,53591],{"class":81,"line":672},[79,53592,4612],{"class":228},[79,53594,53595],{"class":81,"line":678},[79,53596,542],{"emptyLinePlaceholder":541},[79,53598,53599,53601,53603,53606],{"class":81,"line":684},[79,53600,53459],{"class":85},[79,53602,3199],{"class":448},[79,53604,53605],{"class":232},"div",[79,53607,17604],{"class":228},[79,53609,53610,53612,53614,53616],{"class":81,"line":690},[79,53611,53466],{"class":96},[79,53613,53431],{"class":228},[79,53615,53471],{"class":96},[79,53617,3400],{"class":228},[79,53619,53620,53622,53624,53626,53628],{"class":81,"line":695},[79,53621,53478],{"class":96},[79,53623,53431],{"class":228},[79,53625,2896],{"class":96},[79,53627,53486],{"class":448},[79,53629,3400],{"class":228},[79,53631,53632,53635,53637,53640],{"class":81,"line":700},[79,53633,53634],{"class":96},"            background-color",[79,53636,53431],{"class":228},[79,53638,53639],{"class":96},"pink",[79,53641,3400],{"class":228},[79,53643,53644,53647,53649,53652],{"class":81,"line":712},[79,53645,53646],{"class":96},"            flex-direction",[79,53648,53431],{"class":228},[79,53650,53651],{"class":96},"column",[79,53653,3400],{"class":228},[79,53655,53656,53658,53660,53663],{"class":81,"line":721},[79,53657,53557],{"class":96},[79,53659,53431],{"class":228},[79,53661,53662],{"class":96},"space-between",[79,53664,3400],{"class":228},[79,53666,53667],{"class":81,"line":726},[79,53668,4612],{"class":228},[79,53670,53671],{"class":81,"line":731},[79,53672,542],{"emptyLinePlaceholder":541},[79,53674,53675,53677,53680,53683],{"class":81,"line":748},[79,53676,53459],{"class":85},[79,53678,53679],{"class":232}," div",[79,53681,53682],{"class":232}," span",[79,53684,17604],{"class":228},[79,53686,53687],{"class":81,"line":765},[79,53688,542],{"emptyLinePlaceholder":541},[79,53690,53691,53694,53696,53699,53701],{"class":81,"line":780},[79,53692,53693],{"class":96},"            margin-top",[79,53695,53431],{"class":228},[79,53697,53698],{"class":96},"-20",[79,53700,53486],{"class":448},[79,53702,3400],{"class":228},[79,53704,53705],{"class":81,"line":811},[79,53706,4612],{"class":228},[79,53708,53709],{"class":81,"line":816},[79,53710,542],{"emptyLinePlaceholder":541},[79,53712,53713,53715,53717,53720],{"class":81,"line":821},[79,53714,53459],{"class":85},[79,53716,53679],{"class":232},[79,53718,53719],{"class":232}," h4",[79,53721,17604],{"class":228},[79,53723,53724,53727,53729,53732,53734],{"class":81,"line":837},[79,53725,53726],{"class":96},"            margin-bottom",[79,53728,53431],{"class":228},[79,53730,53731],{"class":96},"-35",[79,53733,53486],{"class":448},[79,53735,3400],{"class":228},[79,53737,53738,53740,53742,53744,53746],{"class":81,"line":853},[79,53739,53478],{"class":96},[79,53741,53431],{"class":228},[79,53743,2599],{"class":96},[79,53745,53486],{"class":448},[79,53747,3400],{"class":228},[79,53749,53750,53753,53755,53758,53760],{"class":81,"line":864},[79,53751,53752],{"class":96},"            margin-left",[79,53754,53431],{"class":228},[79,53756,53757],{"class":96},"-10",[79,53759,53486],{"class":448},[79,53761,3400],{"class":228},[79,53763,53764],{"class":81,"line":869},[79,53765,4612],{"class":228},[79,53767,53768,53771,53773],{"class":81,"line":885},[79,53769,53770],{"class":228},"    \u003C\u002F",[79,53772,2159],{"class":232},[79,53774,53301],{"class":228},[79,53776,53777,53780,53782],{"class":81,"line":891},[79,53778,53779],{"class":228},"\u003C\u002F",[79,53781,53328],{"class":232},[79,53783,53301],{"class":228},[79,53785,53786],{"class":81,"line":896},[79,53787,542],{"emptyLinePlaceholder":541},[79,53789,53790,53792,53795],{"class":81,"line":907},[79,53791,229],{"class":228},[79,53793,53794],{"class":232},"body",[79,53796,53301],{"class":228},[79,53798,53799],{"class":81,"line":912},[79,53800,542],{"emptyLinePlaceholder":541},[79,53802,53803,53805,53808],{"class":81,"line":935},[79,53804,53335],{"class":228},[79,53806,53807],{"class":232},"script",[79,53809,53301],{"class":228},[79,53811,53812],{"class":81,"line":946},[79,53813,53814],{"class":2313},"        \u002F\u002F 1. 四次弹框效果\n",[79,53816,53817],{"class":81,"line":960},[79,53818,53819],{"class":2313},"        \u002F\u002F 声明一个新的数组\n",[79,53821,53822,53825,53828,53830],{"class":81,"line":975},[79,53823,53824],{"class":448},"        let",[79,53826,53827],{"class":228}," arr ",[79,53829,239],{"class":448},[79,53831,53832],{"class":228}," []\n",[79,53834,53835,53837,53839,53842,53844,53846,53848,53850,53852,53855,53857,53859],{"class":81,"line":980},[79,53836,5477],{"class":448},[79,53838,3757],{"class":228},[79,53840,53841],{"class":448},"let",[79,53843,11493],{"class":228},[79,53845,239],{"class":448},[79,53847,27137],{"class":96},[79,53849,11500],{"class":228},[79,53851,3694],{"class":448},[79,53853,53854],{"class":96}," 4",[79,53856,5288],{"class":228},[79,53858,4377],{"class":448},[79,53860,14476],{"class":228},[79,53862,53863],{"class":81,"line":1006},[79,53864,53865],{"class":2313},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[79,53867,53868],{"class":81,"line":1027},[79,53869,53870],{"class":2313},"            \u002F\u002F arr.push(num)\n",[79,53872,53873,53876,53879,53881,53884,53886,53889,53891,53894],{"class":81,"line":1032},[79,53874,53875],{"class":228},"            arr.",[79,53877,53878],{"class":85},"push",[79,53880,455],{"class":228},[79,53882,53883],{"class":85},"prompt",[79,53885,455],{"class":228},[79,53887,53888],{"class":89},"`请输入第${",[79,53890,2684],{"class":228},[79,53892,53893],{"class":89},"}季度的数据:`",[79,53895,1150],{"class":228},[79,53897,53898],{"class":81,"line":1047},[79,53899,53900],{"class":2313},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[79,53902,53903],{"class":81,"line":1053},[79,53904,4612],{"class":228},[79,53906,53907],{"class":81,"line":1058},[79,53908,53909],{"class":2313},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[79,53911,53912],{"class":81,"line":1069},[79,53913,53914],{"class":2313},"        \u002F\u002F 盒子开头\n",[79,53916,53917,53920,53923,53925,53928],{"class":81,"line":1081},[79,53918,53919],{"class":228},"        document.",[79,53921,53922],{"class":85},"write",[79,53924,455],{"class":228},[79,53926,53927],{"class":89},"` \u003Cdiv class=\"box\">`",[79,53929,850],{"class":228},[79,53931,53932],{"class":81,"line":1086},[79,53933,542],{"emptyLinePlaceholder":541},[79,53935,53936],{"class":81,"line":1108},[79,53937,53938],{"class":2313},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[79,53940,53941,53943,53945,53947,53949,53951,53953,53955,53957,53960,53963,53965,53967],{"class":81,"line":1153},[79,53942,5477],{"class":448},[79,53944,3757],{"class":228},[79,53946,53841],{"class":448},[79,53948,11493],{"class":228},[79,53950,239],{"class":448},[79,53952,1103],{"class":96},[79,53954,11500],{"class":228},[79,53956,229],{"class":448},[79,53958,53959],{"class":228}," arr.",[79,53961,53962],{"class":96},"length",[79,53964,5288],{"class":228},[79,53966,4377],{"class":448},[79,53968,14476],{"class":228},[79,53970,53971,53974,53976,53978],{"class":81,"line":1158},[79,53972,53973],{"class":228},"            document.",[79,53975,53922],{"class":85},[79,53977,455],{"class":228},[79,53979,53980],{"class":89},"`\n",[79,53982,53983,53986,53988,53990,53992,53994],{"class":81,"line":1180},[79,53984,53985],{"class":89},"              \u003Cdiv style=\"height: ${",[79,53987,5953],{"class":228},[79,53989,3130],{"class":89},[79,53991,2684],{"class":228},[79,53993,3179],{"class":89},[79,53995,53996],{"class":89},"}px;\">\n",[79,53998,53999,54002,54004,54006,54008,54010],{"class":81,"line":1197},[79,54000,54001],{"class":89},"                \u003Cspan>${",[79,54003,5953],{"class":228},[79,54005,3130],{"class":89},[79,54007,2684],{"class":228},[79,54009,3179],{"class":89},[79,54011,54012],{"class":89},"}\u003C\u002Fspan>\n",[79,54014,54015,54018,54020,54022,54024],{"class":81,"line":1202},[79,54016,54017],{"class":89},"                \u003Ch4>第${",[79,54019,2684],{"class":228},[79,54021,47561],{"class":448},[79,54023,27137],{"class":96},[79,54025,54026],{"class":89},"}季度\u003C\u002Fh4>\n",[79,54028,54029],{"class":81,"line":1207},[79,54030,54031],{"class":89},"              \u003C\u002Fdiv>          \n",[79,54033,54034,54037],{"class":81,"line":1223},[79,54035,54036],{"class":89},"            `",[79,54038,850],{"class":228},[79,54040,54041],{"class":81,"line":18722},[79,54042,4612],{"class":228},[79,54044,54045],{"class":81,"line":18728},[79,54046,54047],{"class":2313},"        \u002F\u002F 盒子结尾\n",[79,54049,54050,54052,54054,54056,54059],{"class":81,"line":18739},[79,54051,53919],{"class":228},[79,54053,53922],{"class":85},[79,54055,455],{"class":228},[79,54057,54058],{"class":89},"` \u003C\u002Fdiv>`",[79,54060,850],{"class":228},[79,54062,54063,54065,54067],{"class":81,"line":18762},[79,54064,53770],{"class":228},[79,54066,53807],{"class":232},[79,54068,53301],{"class":228},[79,54070,54071,54073,54075],{"class":81,"line":18784},[79,54072,53779],{"class":228},[79,54074,53794],{"class":232},[79,54076,53301],{"class":228},[79,54078,54079],{"class":81,"line":18789},[79,54080,542],{"emptyLinePlaceholder":541},[79,54082,54083,54085,54087],{"class":81,"line":18795},[79,54084,53779],{"class":228},[79,54086,52630],{"class":232},[79,54088,53301],{"class":228},[339,54090,54092],{"id":54091},"_284-冒泡排序","2.8.4 冒泡排序",[51,54094,54096],{"className":52628,"code":54095,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    let arr = [5, 4, 3, 2, 1]\n    for (let i = 0; i \u003C arr.length - 1; i++) {\n      for (let j = 0; j \u003C arr.length - i - 1; j++) {\n        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n        if (arr[j] > arr[j + 1]) {\n          \u002F\u002F 交换两个变量\n          let tmp = arr[j]\n          arr[j] = arr[j + 1]\n          arr[j + 1] = tmp\n        }\n      }\n    }\n    document.write(arr)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,54097,54098,54108,54122,54126,54134,54149,54169,54181,54189,54193,54201,54209,54241,54273,54310,54315,54334,54339,54352,54367,54383,54387,54392,54396,54406,54415,54423,54427],{"__ignoreMap":57},[79,54099,54100,54102,54104,54106],{"class":81,"line":82},[79,54101,53292],{"class":228},[79,54103,53295],{"class":232},[79,54105,53298],{"class":85},[79,54107,53301],{"class":228},[79,54109,54110,54112,54114,54116,54118,54120],{"class":81,"line":167},[79,54111,229],{"class":228},[79,54113,52630],{"class":232},[79,54115,53310],{"class":85},[79,54117,239],{"class":228},[79,54119,53315],{"class":89},[79,54121,53301],{"class":228},[79,54123,54124],{"class":81,"line":178},[79,54125,542],{"emptyLinePlaceholder":541},[79,54127,54128,54130,54132],{"class":81,"line":545},[79,54129,229],{"class":228},[79,54131,53328],{"class":232},[79,54133,53301],{"class":228},[79,54135,54136,54139,54141,54143,54145,54147],{"class":81,"line":550},[79,54137,54138],{"class":228},"  \u003C",[79,54140,53338],{"class":232},[79,54142,53341],{"class":85},[79,54144,239],{"class":228},[79,54146,53346],{"class":89},[79,54148,53301],{"class":228},[79,54150,54151,54153,54155,54157,54159,54161,54163,54165,54167],{"class":81,"line":562},[79,54152,54138],{"class":228},[79,54154,53338],{"class":232},[79,54156,236],{"class":85},[79,54158,239],{"class":228},[79,54160,53385],{"class":89},[79,54162,53365],{"class":85},[79,54164,239],{"class":228},[79,54166,53392],{"class":89},[79,54168,53301],{"class":228},[79,54170,54171,54173,54175,54177,54179],{"class":81,"line":568},[79,54172,54138],{"class":228},[79,54174,53401],{"class":232},[79,54176,53404],{"class":228},[79,54178,53401],{"class":232},[79,54180,53301],{"class":228},[79,54182,54183,54185,54187],{"class":81,"line":574},[79,54184,53779],{"class":228},[79,54186,53328],{"class":232},[79,54188,53301],{"class":228},[79,54190,54191],{"class":81,"line":579},[79,54192,542],{"emptyLinePlaceholder":541},[79,54194,54195,54197,54199],{"class":81,"line":585},[79,54196,229],{"class":228},[79,54198,53794],{"class":232},[79,54200,53301],{"class":228},[79,54202,54203,54205,54207],{"class":81,"line":591},[79,54204,54138],{"class":228},[79,54206,53807],{"class":232},[79,54208,53301],{"class":228},[79,54210,54211,54214,54216,54218,54221,54223,54225,54227,54229,54231,54233,54235,54237,54239],{"class":81,"line":596},[79,54212,54213],{"class":448},"    let",[79,54215,53827],{"class":228},[79,54217,239],{"class":448},[79,54219,54220],{"class":228}," [",[79,54222,2563],{"class":96},[79,54224,1020],{"class":228},[79,54226,2537],{"class":96},[79,54228,1020],{"class":228},[79,54230,970],{"class":96},[79,54232,1020],{"class":228},[79,54234,2331],{"class":96},[79,54236,1020],{"class":228},[79,54238,775],{"class":96},[79,54240,762],{"class":228},[79,54242,54243,54245,54247,54249,54251,54253,54255,54257,54259,54261,54263,54265,54267,54269,54271],{"class":81,"line":602},[79,54244,915],{"class":448},[79,54246,3757],{"class":228},[79,54248,53841],{"class":448},[79,54250,11493],{"class":228},[79,54252,239],{"class":448},[79,54254,1103],{"class":96},[79,54256,11500],{"class":228},[79,54258,229],{"class":448},[79,54260,53959],{"class":228},[79,54262,53962],{"class":96},[79,54264,461],{"class":448},[79,54266,27137],{"class":96},[79,54268,5288],{"class":228},[79,54270,4377],{"class":448},[79,54272,14476],{"class":228},[79,54274,54275,54278,54280,54282,54284,54286,54288,54290,54292,54294,54296,54298,54300,54302,54304,54306,54308],{"class":81,"line":608},[79,54276,54277],{"class":448},"      for",[79,54279,3757],{"class":228},[79,54281,53841],{"class":448},[79,54283,11554],{"class":228},[79,54285,239],{"class":448},[79,54287,1103],{"class":96},[79,54289,11561],{"class":228},[79,54291,229],{"class":448},[79,54293,53959],{"class":228},[79,54295,53962],{"class":96},[79,54297,461],{"class":448},[79,54299,11493],{"class":228},[79,54301,478],{"class":448},[79,54303,27137],{"class":96},[79,54305,11568],{"class":228},[79,54307,4377],{"class":448},[79,54309,14476],{"class":228},[79,54311,54312],{"class":81,"line":614},[79,54313,54314],{"class":2313},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[79,54316,54317,54319,54322,54324,54327,54329,54331],{"class":81,"line":619},[79,54318,1089],{"class":448},[79,54320,54321],{"class":228}," (arr[j] ",[79,54323,3199],{"class":448},[79,54325,54326],{"class":228}," arr[j ",[79,54328,995],{"class":448},[79,54330,27137],{"class":96},[79,54332,54333],{"class":228},"]) {\n",[79,54335,54336],{"class":81,"line":625},[79,54337,54338],{"class":2313},"          \u002F\u002F 交换两个变量\n",[79,54340,54341,54344,54347,54349],{"class":81,"line":631},[79,54342,54343],{"class":448},"          let",[79,54345,54346],{"class":228}," tmp ",[79,54348,239],{"class":448},[79,54350,54351],{"class":228}," arr[j]\n",[79,54353,54354,54357,54359,54361,54363,54365],{"class":81,"line":637},[79,54355,54356],{"class":228},"          arr[j] ",[79,54358,239],{"class":448},[79,54360,54326],{"class":228},[79,54362,995],{"class":448},[79,54364,27137],{"class":96},[79,54366,762],{"class":228},[79,54368,54369,54372,54374,54376,54378,54380],{"class":81,"line":643},[79,54370,54371],{"class":228},"          arr[j ",[79,54373,995],{"class":448},[79,54375,27137],{"class":96},[79,54377,877],{"class":228},[79,54379,239],{"class":448},[79,54381,54382],{"class":228}," tmp\n",[79,54384,54385],{"class":81,"line":649},[79,54386,4612],{"class":228},[79,54388,54389],{"class":81,"line":655},[79,54390,54391],{"class":228},"      }\n",[79,54393,54394],{"class":81,"line":660},[79,54395,4272],{"class":228},[79,54397,54398,54401,54403],{"class":81,"line":666},[79,54399,54400],{"class":228},"    document.",[79,54402,53922],{"class":85},[79,54404,54405],{"class":228},"(arr)\n",[79,54407,54408,54411,54413],{"class":81,"line":672},[79,54409,54410],{"class":228},"  \u003C\u002F",[79,54412,53807],{"class":232},[79,54414,53301],{"class":228},[79,54416,54417,54419,54421],{"class":81,"line":678},[79,54418,53779],{"class":228},[79,54420,53794],{"class":232},[79,54422,53301],{"class":228},[79,54424,54425],{"class":81,"line":684},[79,54426,542],{"emptyLinePlaceholder":541},[79,54428,54429,54431,54433],{"class":81,"line":690},[79,54430,53779],{"class":228},[79,54432,52630],{"class":232},[79,54434,53301],{"class":228},[19,54436,54437],{},[3569,54438],{"alt":57,"src":54439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,54441,54442],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,54444,54445],{},"let arr = [4, 2, 5, 1, 3]",[19,54447,54448],{},"\u002F\u002F 1.升序排列写法",[19,54450,54451],{},"arr.sort(function (a, b) {",[19,54453,54454],{},"return a - b",[19,54456,54457],{},"})",[19,54459,54460],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,54462,54463],{},"\u002F\u002F 降序排列写法",[19,54465,54451],{},[19,54467,54468],{},"return b - a",[19,54470,54457],{},[19,54472,54473],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,54475,54477],{"id":54476},"_29-函数","2.9 函数",[19,54479,54480],{},[3569,54481],{"alt":57,"src":54482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,54484,54485],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,54487,54488],{},"函数的声明用function",[19,54490,54491],{},"函数里边可以嵌套函数",[339,54493,54495],{"id":54494},"_291-函数传参","2.9.1 函数传参",[19,54497,54498],{},[3569,54499],{"alt":57,"src":54500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,54502,54503],{},[3569,54504],{"alt":57,"src":54505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[3246,54507,54508,54511,54514,54517,54520,54523],{},[29,54509,54510],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[29,54512,54513],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[29,54515,54516],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[29,54518,54519],{},"开发中尽量保持形参和实参个数一致",[29,54521,54522],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[29,54524,54525],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,54527,54528],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[339,54530,54532],{"id":54531},"_292-函数的返回值","2.9.2 函数的返回值",[19,54534,54535],{},[3569,54536],{"alt":57,"src":54537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,54539,54540],{},[3569,54541],{"alt":57,"src":54542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[3246,54544,54545,54548,54551,54554,54557],{},[29,54546,54547],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[29,54549,54550],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[29,54552,54553],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[29,54555,54556],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[29,54558,54559],{},"断点调试:进入函数内部看执行过程F11",[339,54561,54563],{"id":54562},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[51,54565,54567],{"className":52628,"code":54566,"language":52630,"meta":57,"style":57},"    function fn(a, b) {\n      console.log(a + b);\n    }\n    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[59,54568,54569,54574,54579,54583,54588],{"__ignoreMap":57},[79,54570,54571],{"class":81,"line":82},[79,54572,54573],{"class":228},"    function fn(a, b) {\n",[79,54575,54576],{"class":81,"line":167},[79,54577,54578],{"class":228},"      console.log(a + b);\n",[79,54580,54581],{"class":81,"line":178},[79,54582,4272],{"class":228},[79,54584,54585],{"class":81,"line":545},[79,54586,54587],{"class":228},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[79,54589,54590],{"class":81,"line":550},[79,54591,54592],{"class":228},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[339,54594,54596],{"id":54595},"_294-作用域","2.9.4 作用域",[3246,54598,54599,54605,54610,54613,54616],{},[29,54600,54601,54602],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[2398,54603,54604],{},"作用域",[29,54606,54607],{},[2398,54608,54609],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[29,54611,54612],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[29,54614,54615],{},"函数内部可以直接所使用全局变量",[29,54617,54618],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,54620,16666],{},[51,54622,54624],{"className":52628,"code":54623,"language":52630,"meta":57,"style":57},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[59,54625,54626,54631,54636,54640,54645,54650,54655],{"__ignoreMap":57},[79,54627,54628],{"class":81,"line":82},[79,54629,54630],{"class":228},"    function fun() {\n",[79,54632,54633],{"class":81,"line":167},[79,54634,54635],{"class":228},"      num = 10\n",[79,54637,54638],{"class":81,"line":178},[79,54639,4272],{"class":228},[79,54641,54642],{"class":81,"line":545},[79,54643,54644],{"class":228},"    fun()\n",[79,54646,54647],{"class":81,"line":550},[79,54648,54649],{"class":228},"    console.log(num)\n",[79,54651,54652],{"class":81,"line":562},[79,54653,54654],{"class":228},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[79,54656,54657],{"class":81,"line":568},[79,54658,54659],{"class":228},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[3246,54661,54662,54665],{},[29,54663,54664],{},"函数内部的形参可以看做是局部变量",[29,54666,54667],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,54669,54670,54671],{},"变量访问原则： ",[2398,54672,54673],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[339,54675,54677],{"id":54676},"_295-匿名函数","2.9.5 匿名函数",[19,54679,54680],{},"函数可以分为具名函数和匿名函数",[19,54682,54683],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[26,54685,54686],{},[29,54687,54688],{},"函数表达式",[19,54690,54691],{},[3569,54692],{"alt":57,"src":54693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,54695,54696],{},"里边也可以写参数",[19,54698,54699],{},"具名函数调用位置可以随意调整；",[19,54701,54702],{},"匿名函数函数表达式形式只能在声明后才可以使用",[26,54704,54705],{"start":167},[29,54706,54707],{},"立即执行函数",[19,54709,54710],{},[3569,54711],{"alt":57,"src":54712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,54714,54715],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,54717,54718],{},"写法：两个小括号，然后在第一个小括号中写function",[19,54720,54721],{},"(function () {})();",[19,54723,54724],{},"不要落下最后的;",[19,54726,54727],{},"立即执行函数必须要加;",[19,54729,54730],{},"分号写前写后都没问题",[19,54732,54733],{},"写前：",[19,54735,54736],{},"(function() {})()",[19,54738,54739],{},";(function () {})();",[19,54741,54742],{},"写后:",[19,54744,54745],{},"(function() {})();",[19,54747,54721],{},[19,54749,54750],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,54752,54753],{},"还有一种写法：",[19,54755,54756],{},"(function(){}());",[19,54758,54759],{},"或者:",[19,54761,54762],{},"!function(){}();",[19,54764,54765],{},"立即执行函数有时候也是可以加名字的：",[19,54767,54768],{},"(function flexible(window,document) {}(window,document));",[19,54770,54771],{},"省一些调用方法",[339,54773,54775],{"id":54774},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,54777,54778],{},[3569,54779],{"alt":57,"src":54780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,54782,54783],{},"这样就不用非得给x,y初始化了",[19,54785,54786],{},[3569,54787],{"alt":57,"src":54788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,54790,54791],{},"代码执行时先看左边",[19,54793,54794],{},"例如：console.log(false && 3+5)",[19,54796,54797],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,54799,54800],{},"&&都是真时，就返回最后一个真值",[19,54802,54803],{},"console.log(11 && 22)",[19,54805,54806],{},"输出22",[19,54808,54809],{},"逻辑与：遇真则真",[19,54811,16666],{},[19,54813,54814],{},"let age=1",[19,54816,54817],{},"console.log(11 || age++)",[19,54819,54820],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,54822,54823],{},"console.log(11 || 22)",[19,54825,54826],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,54828,54829],{},"||如果都是假的话，就取最后一个假的值了",[339,54831,54833],{"id":54832},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,54835,54836],{},"显示转换：",[19,54838,54839,54842,54843],{},[2398,54840,54841],{},"记忆","： ",[2398,54844,54845],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,54847,54848],{},"空字符串为假，其他字符串全为真",[19,54850,54851],{},[3569,54852],{"alt":57,"src":54853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,54855,54856],{},"隐式转换：",[19,54858,54859],{},[3569,54860],{"alt":57,"src":54861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,54863,54864],{},"隐式转换:",[19,54866,54867],{},"null+3=3",[19,54869,54870],{},"undefined+3=NaN",[19,54872,54873],{},"null==undefined 输出true,他两个都当0看",[19,54875,54876],{},"null===undefined 输出false",[19,54878,54879],{},"undefined做任何操作都是NaN",[19,54881,54882],{},"NaN不等于NaN，NaN表示计算错误",[14,54884,54886],{"id":54885},"_210-对象","2.10 对象",[339,54888,54890],{"id":54889},"_2101-对象的介绍","2.10.1 对象的介绍",[19,54892,54893],{},"对象也是一种数据类型，里边的数据是无序的",[19,54895,54896],{},"对象由属性和方法组成",[19,54898,54899],{},[3569,54900],{"alt":57,"src":54901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,54903,54904],{},[3569,54905],{"alt":57,"src":54906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,54908,54909],{},[3569,54910],{"alt":57,"src":54911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[339,54913,54915],{"id":54914},"_2102-对象属性","2.10.2 对象属性",[19,54917,54918],{},[3569,54919],{"alt":57,"src":54920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[26,54922,54923],{},[29,54924,54925],{},"查询对象",[19,54927,54928],{},"对象名.属性 goods.uname",[19,54930,54931],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,54933,54934],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,54936,54937],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,54939,54940],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[26,54942,54943],{"start":167},[29,54944,54945],{},"重新赋值",[19,54947,54948],{},"对象名.属性=新值",[26,54950,54951],{"start":178},[29,54952,54953],{},"增加新数据",[19,54955,54948],{},[26,54957,54958],{"start":545},[29,54959,54960],{},"删除对象中的属性",[19,54962,54963],{},"delete 对象名.属性",[339,54965,54967],{"id":54966},"_2103-对象方法","2.10.3 对象方法",[19,54969,54970],{},[3569,54971],{"alt":57,"src":54972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,54974,54975],{},"后边跟的是匿名函数",[19,54977,54978],{},"对象外面的叫函数；对象内部的叫方法",[19,54980,54981],{},[3569,54982],{"alt":57,"src":54983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[339,54985,54987],{"id":54986},"_2104-遍历对象","2.10.4 遍历对象",[19,54989,54990],{},"理解为加括号的python字典遍历",[19,54992,54993],{},[3569,54994],{"alt":57,"src":54995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,54997,54998],{},"k是字符串类型",[19,55000,55001],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[51,55003,55005],{"className":52628,"code":55004,"language":52630,"meta":57,"style":57},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[59,55006,55007,55012,55017,55022,55027],{"__ignoreMap":57},[79,55008,55009],{"class":81,"line":82},[79,55010,55011],{"class":228},"   let arr = [1, 2, 3]\n",[79,55013,55014],{"class":81,"line":167},[79,55015,55016],{"class":228},"    for (let k in arr) {\n",[79,55018,55019],{"class":81,"line":178},[79,55020,55021],{"class":228},"      console.log(k)\n",[79,55023,55024],{"class":81,"line":545},[79,55025,55026],{"class":228},"      console.log(arr[k])\n",[79,55028,55029],{"class":81,"line":550},[79,55030,4272],{"class":228},[19,55032,55033],{},[3569,55034],{"alt":57,"src":55035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,55037,55038],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,55040,55041],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,55043,55044],{},"for in 得到的k是属性名",[53807,55046,55047],{},"\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,55049,55050],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[339,55052,55054],{"id":55053},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,55056,55057],{},"数组中放对象信息",[51,55059,55061],{"className":219,"code":55060,"language":221,"meta":57,"style":57},"\u003Cscript>\n    let students = [\n      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n    ]\n    for (let i = 0; i \u003C students.length; i++) {\n      for (let k in students[i]) {\n        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n        \u002F\u002F输出每个人的名字：\n        \u002F\u002Fconsole.log(students[i].name)\n      }\n    }\n  \u003C\u002Fscript>\n",[59,55062,55063,55071,55076,55081,55086,55091,55096,55101,55106,55111,55116,55121,55126,55130,55134],{"__ignoreMap":57},[79,55064,55065,55067,55069],{"class":81,"line":82},[79,55066,229],{"class":228},[79,55068,53807],{"class":232},[79,55070,53301],{"class":228},[79,55072,55073],{"class":81,"line":167},[79,55074,55075],{"class":228},"    let students = [\n",[79,55077,55078],{"class":81,"line":178},[79,55079,55080],{"class":228},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[79,55082,55083],{"class":81,"line":545},[79,55084,55085],{"class":228},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[79,55087,55088],{"class":81,"line":550},[79,55089,55090],{"class":228},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[79,55092,55093],{"class":81,"line":562},[79,55094,55095],{"class":228},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[79,55097,55098],{"class":81,"line":568},[79,55099,55100],{"class":228},"    ]\n",[79,55102,55103],{"class":81,"line":574},[79,55104,55105],{"class":228},"    for (let i = 0; i \u003C students.length; i++) {\n",[79,55107,55108],{"class":81,"line":579},[79,55109,55110],{"class":228},"      for (let k in students[i]) {\n",[79,55112,55113],{"class":81,"line":585},[79,55114,55115],{"class":228},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[79,55117,55118],{"class":81,"line":591},[79,55119,55120],{"class":228},"        \u002F\u002F输出每个人的名字：\n",[79,55122,55123],{"class":81,"line":596},[79,55124,55125],{"class":228},"        \u002F\u002Fconsole.log(students[i].name)\n",[79,55127,55128],{"class":81,"line":602},[79,55129,54391],{"class":228},[79,55131,55132],{"class":81,"line":608},[79,55133,4272],{"class":228},[79,55135,55136,55138,55140],{"class":81,"line":614},[79,55137,54410],{"class":228},[79,55139,53807],{"class":232},[79,55141,53301],{"class":228},[339,55143,55145],{"id":55144},"_2106-内置对象","2.10.6 内置对象",[19,55147,55148],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[26,55150,55151],{},[29,55152,55153],{},"数学对象Math",[19,55155,55156],{},[3569,55157],{"alt":57,"src":55158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,55160,55161],{},[2482,55162,55165],{"href":55163,"rel":55164},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[25885],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,55167,55168],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,55170,55171],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,55173,55174],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,55176,55177],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,55179,55180],{},"null属于对象数据类型",[26,55182,55183],{"start":167},[29,55184,55185],{},"生成任意范围随机数",[19,55187,55188],{},[3569,55189],{"alt":57,"src":55190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,55192,55193],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,55195,55196],{},"乘以几就取不到几",[19,55198,55199],{},"取数组中的随机元素：",[19,55201,55202],{},"let arr = ['red', 'green', 'blue']",[19,55204,55205],{},"let random = Math.floor(Math.random() * arr.length)",[19,55207,55208],{},"console.log(arr[random])",[19,55210,55211],{},"这个函数得到的是全闭区间",[19,55213,55214],{},"function getRandom(N, M) {",[19,55216,55217],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,55219,3185],{},[19,55221,55222],{},"console.log(getRandom(4, 8))",[339,55224,55226],{"id":55225},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,55228,55229],{},[3569,55230],{"alt":57,"src":55231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,55233,55234],{},[3569,55235],{"alt":57,"src":55236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,55238,55239],{},[3569,55240],{"alt":57,"src":55241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,55243,55244],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,55246,55247],{},[3569,55248],{"alt":57,"src":55249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,55251,55252],{},[3569,55253],{"alt":57,"src":55254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,55256,55257],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,55259,55260],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,55262,55263],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[2159,55265,55266],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":57,"searchDepth":167,"depth":167,"links":55268},[55269,55277,55278,55279,55280,55281,55288,55292,55298,55307],{"id":52463,"depth":167,"text":52464,"children":55270},[55271,55272,55273,55274,55275,55276],{"id":52467,"depth":178,"text":52468},{"id":52484,"depth":178,"text":52485},{"id":52524,"depth":178,"text":52525},{"id":52536,"depth":178,"text":52537},{"id":52545,"depth":178,"text":52546},{"id":52593,"depth":178,"text":52594},{"id":52603,"depth":167,"text":52604},{"id":52691,"depth":167,"text":52692},{"id":52714,"depth":167,"text":52715},{"id":52726,"depth":167,"text":52727},{"id":52913,"depth":167,"text":52914,"children":55282},[55283,55284,55285,55286,55287],{"id":52917,"depth":178,"text":52918},{"id":52926,"depth":178,"text":52927},{"id":52954,"depth":178,"text":52955},{"id":52990,"depth":178,"text":52991},{"id":53015,"depth":178,"text":53016},{"id":53027,"depth":167,"text":53028,"children":55289},[55290,55291],{"id":53048,"depth":178,"text":53049},{"id":53142,"depth":178,"text":53143},{"id":53200,"depth":167,"text":53201,"children":55293},[55294,55295,55296,55297],{"id":53204,"depth":178,"text":53205},{"id":53228,"depth":178,"text":53229},{"id":53281,"depth":178,"text":53282},{"id":54091,"depth":178,"text":54092},{"id":54476,"depth":167,"text":54477,"children":55299},[55300,55301,55302,55303,55304,55305,55306],{"id":54494,"depth":178,"text":54495},{"id":54531,"depth":178,"text":54532},{"id":54562,"depth":178,"text":54563},{"id":54595,"depth":178,"text":54596},{"id":54676,"depth":178,"text":54677},{"id":54774,"depth":178,"text":54775},{"id":54832,"depth":178,"text":54833},{"id":54885,"depth":167,"text":54886,"children":55308},[55309,55310,55311,55312,55313,55314,55315],{"id":54889,"depth":178,"text":54890},{"id":54914,"depth":178,"text":54915},{"id":54966,"depth":178,"text":54967},{"id":54986,"depth":178,"text":54987},{"id":55053,"depth":178,"text":55054},{"id":55144,"depth":178,"text":55145},{"id":55225,"depth":178,"text":55226},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":52455,"description":25402},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":55322,"title":55323,"body":55324,"description":25402,"extension":2186,"meta":78661,"navigation":541,"path":78662,"seo":78663,"stem":78664,"__hash__":78665},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":55325,"toc":78601},[55326,55329,55332,55335,55340,55343,55346,55349,55353,55357,55363,55368,55376,55383,55386,55390,55395,55400,55405,55408,55411,55422,55425,55429,55432,55435,55440,55445,55450,55453,55456,55548,55551,55556,55559,55564,55567,55570,55575,55578,55583,55587,55590,55604,55608,55613,55616,55619,55623,55628,55631,55635,55639,55644,55648,55653,55656,55659,55662,55665,55668,55671,55676,55681,55709,55712,55715,55718,55723,55726,55729,55732,55735,55739,55768,55772,55777,55782,55785,55788,55791,55796,55910,55915,55920,56081,56086,56089,56093,56098,56103,56106,56109,56112,56115,56118,56121,56124,56127,56130,56133,56136,56139,56142,56145,56147,56150,56153,56156,56161,56165,56561,56564,56570,56574,56579,57861,57866,57869,57872,57875,57880,59076,59080,59086,59091,59094,59099,59104,59108,59112,59117,59120,59125,59128,59131,59135,60043,60046,60050,60271,60274,60277,60280,60506,60509,60733,60736,60740,60745,60748,60751,60979,60982,61015,61018,61022,61027,61031,61034,61037,61040,61043,61046,61049,61052,61057,62337,62341,62344,63437,63441,63444,63447,63450,63453,63457,63460,63463,63465,63473,64953,64957,64960,64963,64966,65175,65178,65182,65186,65191,65196,65199,65202,65207,65211,65216,65219,65328,65332,65337,65342,65345,65348,65352,65357,65362,65367,65370,65373,65384,65387,65392,65397,65400,65403,65476,65480,65485,65488,65490,65501,65505,65510,66836,66839,66842,66845,66847,66850,66853,66856,66859,66862,66865,66868,66871,66874,66877,66880,66883,66885,66887,66890,66894,67988,67991,67994,68010,68024,68027,68032,68038,68043,68047,68051,68056,68060,68065,68507,68512,68515,68519,68524,68527,68530,68534,68539,68543,68548,68553,68557,68562,68567,68570,68575,68580,68584,68589,68594,68698,68701,68705,68710,69076,69079,69082,69085,69088,69091,69094,69097,69100,70396,70400,70405,70410,70413,70416,70419,70422,70424,70429,70434,70437,70441,70446,70451,70456,70459,70462,70465,70468,70471,70476,70479,70483,70488,70493,70497,70502,70505,70510,70513,70516,70519,70522,70525,70530,70533,70536,70539,70542,70546,70551,70554,70558,70563,70566,70569,70573,70602,70605,70609,70613,70618,70622,70627,70630,70633,70636,70639,70642,70645,70648,70651,70654,70657,70660,70663,70666,70669,70673,70678,70683,70686,70690,70694,70699,70702,70706,70709,70712,70717,70722,70727,70732,70737,70740,70743,70748,70753,70757,70762,70765,70770,70773,70776,70779,70782,70787,70790,70799,70803,70808,70811,70814,70818,70821,70826,70830,70833,70839,70845,70849,70875,70878,72439,72442,72938,72941,72946,72951,72956,72960,72965,72970,72975,72979,72984,72987,72990,72993,72996,73000,73003,73008,73011,73016,73020,73025,73028,73033,73038,73043,73046,73049,73054,73059,73062,73065,73069,73072,73077,73080,73085,73088,73093,73098,73103,73106,73111,73176,73179,73190,73194,73199,73371,73375,73380,73383,73386,73389,73393,73404,73408,73411,73416,73421,73424,73427,73430,73433,73436,73438,73441,73444,73447,73452,73455,73460,73463,73467,73470,73473,73487,73491,73494,73549,73554,73557,73560,73565,73568,73572,73577,73707,73711,73716,73721,73802,73807,73811,73814,73819,73824,73830,73833,73836,73839,73843,73848,73851,73862,73866,73883,76930,76934,76937,76940,76943,76964,76968,76971,76979,76982,76987,76990,76993,76998,77003,77007,77028,77032,77037,77040,77043,77046,77049,77053,77058,77061,77065,77070,77073,77078,77081,77086,77089,77094,78297,78301,78306,78309,78314,78598],[10,55327,55323],{"id":55328},"_3web-apis",[19,55330,55331],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,55333,55334],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,55336,55337],{},[3569,55338],{"alt":57,"src":55339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,55341,55342],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,55344,55345],{},"建议数组和对象使用 const 来声明",[19,55347,55348],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,55350,55352],{"id":55351},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[339,55354,55356],{"id":55355},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,55358,55359,55362],{},[59,55360,55361],{},"document"," = HTML 文件解析后的对象化表示；",[19,55364,55365,55367],{},[59,55366,55361],{}," ≠ HTML 文件本身",[19,55369,55370,55375],{},[2398,55371,55372],{},[59,55373,55374],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,55377,55378,55382],{},[2398,55379,55380],{},[59,55381,55361],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,55384,55385],{},"document实际上为window.document的简写",[339,55387,55389],{"id":55388},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,55391,55392],{},[3569,55393],{"alt":57,"src":55394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,55396,55397],{},[3569,55398],{"alt":57,"src":55399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,55401,55402],{},[3569,55403],{"alt":57,"src":55404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,55406,55407],{},"console.dir()",[19,55409,55410],{},"dir用来打印对象",[3246,55412,55413,55416,55419],{},[29,55414,55415],{},"任何一个标签，都是一个对象",[29,55417,55418],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[29,55420,55421],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,55423,55424],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[339,55426,55428],{"id":55427},"_312-获取dom对象","3.1.2 获取DoM对象",[19,55430,55431],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,55433,55434],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,55436,55437],{},[2398,55438,55439],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[26,55441,55442],{},[29,55443,55444],{},"利用CSS选择器来获取标签元素",[19,55446,55447],{},[3569,55448],{"alt":57,"src":55449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,55451,55452],{},"里边的选择器必须必须加引号！！！",[19,55454,55455],{},"只选择第一个元素",[51,55457,55459],{"className":219,"code":55458,"language":221,"meta":57,"style":57},"\u003Cbody>\n  \u003Cdiv class=\"box\">123\u003C\u002Fdiv>\n  \u003Cdiv class=\"box\">456\u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 1.获取匹配的第一个元素\n    const box = document.querySelector('div')\n    console.dir(box)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[59,55460,55461,55469,55490,55509,55517,55522,55527,55532,55540],{"__ignoreMap":57},[79,55462,55463,55465,55467],{"class":81,"line":82},[79,55464,229],{"class":228},[79,55466,53794],{"class":232},[79,55468,53301],{"class":228},[79,55470,55471,55473,55475,55478,55480,55483,55486,55488],{"class":81,"line":167},[79,55472,54138],{"class":228},[79,55474,53605],{"class":232},[79,55476,55477],{"class":85}," class",[79,55479,239],{"class":228},[79,55481,55482],{"class":89},"\"box\"",[79,55484,55485],{"class":228},">123\u003C\u002F",[79,55487,53605],{"class":232},[79,55489,53301],{"class":228},[79,55491,55492,55494,55496,55498,55500,55502,55505,55507],{"class":81,"line":178},[79,55493,54138],{"class":228},[79,55495,53605],{"class":232},[79,55497,55477],{"class":85},[79,55499,239],{"class":228},[79,55501,55482],{"class":89},[79,55503,55504],{"class":228},">456\u003C\u002F",[79,55506,53605],{"class":232},[79,55508,53301],{"class":228},[79,55510,55511,55513,55515],{"class":81,"line":545},[79,55512,54138],{"class":228},[79,55514,53807],{"class":232},[79,55516,53301],{"class":228},[79,55518,55519],{"class":81,"line":550},[79,55520,55521],{"class":228},"    \u002F\u002F 1.获取匹配的第一个元素\n",[79,55523,55524],{"class":81,"line":562},[79,55525,55526],{"class":228},"    const box = document.querySelector('div')\n",[79,55528,55529],{"class":81,"line":568},[79,55530,55531],{"class":228},"    console.dir(box)\n",[79,55533,55534,55536,55538],{"class":81,"line":574},[79,55535,54410],{"class":228},[79,55537,53807],{"class":232},[79,55539,53301],{"class":228},[79,55541,55542,55544,55546],{"class":81,"line":579},[79,55543,53779],{"class":228},[79,55545,53794],{"class":232},[79,55547,53301],{"class":228},[19,55549,55550],{},"只选123，不选456",[19,55552,55553],{},[3569,55554],{"alt":57,"src":55555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,55557,55558],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,55560,55561],{},[3569,55562],{"alt":57,"src":55563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,55565,55566],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,55568,55569],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[26,55571,55572],{"start":167},[29,55573,55574],{},"其他方法来获取标签元素",[19,55576,55577],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,55579,55580],{},[3569,55581],{"alt":57,"src":55582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[339,55584,55586],{"id":55585},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,55588,55589],{},"设置修改DOM元素内容有两种方式：",[3246,55591,55592,55595,55598,55601],{},[29,55593,55594],{},"元素.innerText=''",[29,55596,55597],{},"元素.innerHTML=''",[29,55599,55600],{},"不写字符串输出数字也是可以的",[29,55602,55603],{},"元素.innerHtml=1",[24023,55605,55607],{"id":55606},"_3131-innertext","3.1.3.1 innerText",[19,55609,55610],{},[3569,55611],{"alt":57,"src":55612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,55614,55615],{},"思路：实现了修改盒子中的内容！",[19,55617,55618],{},"它只显示纯文本，不解析标签",[24023,55620,55622],{"id":55621},"_3132-innerhtml","3.1.3.2 innerHTML",[19,55624,55625],{},[3569,55626],{"alt":57,"src":55627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,55629,55630],{},"相比于innerText，他的强大之处在于可以解析标签",[339,55632,55634],{"id":55633},"_314-操作元素属性","3.1.4 操作元素属性",[24023,55636,55638],{"id":55637},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,55640,55641],{},[3569,55642],{"alt":57,"src":55643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[24023,55645,55647],{"id":55646},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,55649,55650],{},[3569,55651],{"alt":57,"src":55652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,55654,55655],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,55657,55658],{},"div.style.backgroundColor = 'hotpink'",[19,55660,55661],{},"如果按照css的写法，-表示减，就会出错",[19,55663,55664],{},"body元素不需要再获取，直接用就行！！！！！！",[19,55666,55667],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,55669,55670],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,55672,55673],{},[3569,55674],{"alt":57,"src":55675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,55677,55678],{},[3569,55679],{"alt":57,"src":55680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[26,55682,55683,55686,55689,55692,55695,55698],{},[29,55684,55685],{},"className这个方式就是修改很多样式的时候来使用的！",[29,55687,55688],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[29,55690,55691],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[29,55693,55694],{},"className为属性名，如果还用class的话就导致与关键字冲突",[29,55696,55697],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[29,55699,55700,55701,55706],{},"解析标签的时候就变为了",[53605,55702],{"className":55703},[55704,55705],"nav","box",[55707,55708],"br",{},[19,55710,55711],{},"例子：",[53605,55713],{"className":55714},[55704],[53807,55716,55717],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,55719,55720],{},[3569,55721],{"alt":57,"src":55722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,55724,55725],{},"追加和删除类名用classList",[19,55727,55728],{},"常用于类似于开关的操作",[19,55730,55731],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,55733,55734],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[24023,55736,55738],{"id":55737},"_3143-牢记点","3.1.4.3 牢记点",[26,55740,55741,55744,55747,55750,55753,55756,55759,55762,55765],{},[29,55742,55743],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[29,55745,55746],{},"使用style属性操作css时不要忘记引号",[29,55748,55749],{},"使用className或者classList时也不要忘记引号",[29,55751,55752],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[29,55754,55755],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[29,55757,55758],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[29,55760,55761],{},"若： let arr=['1','2',3] arr[0]=1",[29,55763,55764],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[29,55766,55767],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[339,55769,55771],{"id":55770},"_315-操作表单元素","3.1.5 操作表单元素",[26,55773,55774],{},[29,55775,55776],{},"天生的属性",[19,55778,55779],{},[3569,55780],{"alt":57,"src":55781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,55783,55784],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,55786,55787],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,55789,55790],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,55792,55793],{},[3569,55794],{"alt":57,"src":55795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[51,55797,55799],{"className":52628,"code":55798,"language":52630,"meta":57,"style":57},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n\u003Cinput type=\"checkbox\" name=\"\" id=\"\" checked>\n不选的话：\nconst input = document.querySelector('input')\ninput.checked=false\n这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n\n禁用按钮：\n它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n\u003Cbutton disabled>点击\u003C\u002Fbutton>\n\u003Cbutton>点击\u003C\u002Fbutton>\nconst bt = document.querySelector('button')\nbt.disabled = false\n",[59,55800,55801,55806,55837,55842,55847,55852,55857,55861,55866,55871,55888,55900,55905],{"__ignoreMap":57},[79,55802,55803],{"class":81,"line":82},[79,55804,55805],{"class":228},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[79,55807,55808,55810,55813,55815,55817,55820,55822,55824,55826,55828,55830,55832,55835],{"class":81,"line":167},[79,55809,229],{"class":228},[79,55811,55812],{"class":232},"input",[79,55814,245],{"class":85},[79,55816,239],{"class":228},[79,55818,55819],{"class":89},"\"checkbox\"",[79,55821,236],{"class":85},[79,55823,239],{"class":228},[79,55825,9717],{"class":89},[79,55827,16991],{"class":85},[79,55829,239],{"class":228},[79,55831,9717],{"class":89},[79,55833,55834],{"class":85}," checked",[79,55836,53301],{"class":228},[79,55838,55839],{"class":81,"line":178},[79,55840,55841],{"class":228},"不选的话：\n",[79,55843,55844],{"class":81,"line":545},[79,55845,55846],{"class":228},"const input = document.querySelector('input')\n",[79,55848,55849],{"class":81,"line":550},[79,55850,55851],{"class":228},"input.checked=false\n",[79,55853,55854],{"class":81,"line":562},[79,55855,55856],{"class":228},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[79,55858,55859],{"class":81,"line":568},[79,55860,542],{"emptyLinePlaceholder":541},[79,55862,55863],{"class":81,"line":574},[79,55864,55865],{"class":228},"禁用按钮：\n",[79,55867,55868],{"class":81,"line":579},[79,55869,55870],{"class":228},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[79,55872,55873,55875,55878,55881,55884,55886],{"class":81,"line":585},[79,55874,229],{"class":228},[79,55876,55877],{"class":232},"button",[79,55879,55880],{"class":85}," disabled",[79,55882,55883],{"class":228},">点击\u003C\u002F",[79,55885,55877],{"class":232},[79,55887,53301],{"class":228},[79,55889,55890,55892,55894,55896,55898],{"class":81,"line":591},[79,55891,229],{"class":228},[79,55893,55877],{"class":232},[79,55895,55883],{"class":228},[79,55897,55877],{"class":232},[79,55899,53301],{"class":228},[79,55901,55902],{"class":81,"line":596},[79,55903,55904],{"class":228},"const bt = document.querySelector('button')\n",[79,55906,55907],{"class":81,"line":602},[79,55908,55909],{"class":228},"bt.disabled = false\n",[26,55911,55912],{"start":167},[29,55913,55914],{},"自定义属性",[19,55916,55917],{},[3569,55918],{"alt":57,"src":55919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[51,55921,55923],{"className":219,"code":55922,"language":221,"meta":57,"style":57},"\u003Cbody>\n  \u003Cdiv data-id=\"1\" data-spm=\"我不知道\">1\u003C\u002Fdiv>\n  \u003Cdiv data-id=\"2\">2\u003C\u002Fdiv>\n  \u003Cdiv data-id=\"3\">3\u003C\u002Fdiv>\n  \u003Cdiv data-id=\"4\">4\u003C\u002Fdiv>\n  \u003Cdiv data-id=\"5\">5\u003C\u002Fdiv>\n  \u003Cscript>\n    const one = document.querySelector('div')\n    console.log(one.dataset)\n    console.log(one.dataset.id)\n    console.log(one.dataset.spm)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[59,55924,55925,55933,55961,55980,55999,56018,56037,56045,56050,56055,56060,56065,56073],{"__ignoreMap":57},[79,55926,55927,55929,55931],{"class":81,"line":82},[79,55928,229],{"class":228},[79,55930,53794],{"class":232},[79,55932,53301],{"class":228},[79,55934,55935,55937,55939,55942,55944,55946,55949,55951,55954,55957,55959],{"class":81,"line":167},[79,55936,54138],{"class":228},[79,55938,53605],{"class":232},[79,55940,55941],{"class":85}," data-id",[79,55943,239],{"class":228},[79,55945,5752],{"class":89},[79,55947,55948],{"class":85}," data-spm",[79,55950,239],{"class":228},[79,55952,55953],{"class":89},"\"我不知道\"",[79,55955,55956],{"class":228},">1\u003C\u002F",[79,55958,53605],{"class":232},[79,55960,53301],{"class":228},[79,55962,55963,55965,55967,55969,55971,55973,55976,55978],{"class":81,"line":178},[79,55964,54138],{"class":228},[79,55966,53605],{"class":232},[79,55968,55941],{"class":85},[79,55970,239],{"class":228},[79,55972,5775],{"class":89},[79,55974,55975],{"class":228},">2\u003C\u002F",[79,55977,53605],{"class":232},[79,55979,53301],{"class":228},[79,55981,55982,55984,55986,55988,55990,55992,55995,55997],{"class":81,"line":545},[79,55983,54138],{"class":228},[79,55985,53605],{"class":232},[79,55987,55941],{"class":85},[79,55989,239],{"class":228},[79,55991,5788],{"class":89},[79,55993,55994],{"class":228},">3\u003C\u002F",[79,55996,53605],{"class":232},[79,55998,53301],{"class":228},[79,56000,56001,56003,56005,56007,56009,56011,56014,56016],{"class":81,"line":550},[79,56002,54138],{"class":228},[79,56004,53605],{"class":232},[79,56006,55941],{"class":85},[79,56008,239],{"class":228},[79,56010,5801],{"class":89},[79,56012,56013],{"class":228},">4\u003C\u002F",[79,56015,53605],{"class":232},[79,56017,53301],{"class":228},[79,56019,56020,56022,56024,56026,56028,56030,56033,56035],{"class":81,"line":562},[79,56021,54138],{"class":228},[79,56023,53605],{"class":232},[79,56025,55941],{"class":85},[79,56027,239],{"class":228},[79,56029,5821],{"class":89},[79,56031,56032],{"class":228},">5\u003C\u002F",[79,56034,53605],{"class":232},[79,56036,53301],{"class":228},[79,56038,56039,56041,56043],{"class":81,"line":568},[79,56040,54138],{"class":228},[79,56042,53807],{"class":232},[79,56044,53301],{"class":228},[79,56046,56047],{"class":81,"line":574},[79,56048,56049],{"class":228},"    const one = document.querySelector('div')\n",[79,56051,56052],{"class":81,"line":579},[79,56053,56054],{"class":228},"    console.log(one.dataset)\n",[79,56056,56057],{"class":81,"line":585},[79,56058,56059],{"class":228},"    console.log(one.dataset.id)\n",[79,56061,56062],{"class":81,"line":591},[79,56063,56064],{"class":228},"    console.log(one.dataset.spm)\n",[79,56066,56067,56069,56071],{"class":81,"line":596},[79,56068,54410],{"class":228},[79,56070,53807],{"class":232},[79,56072,53301],{"class":228},[79,56074,56075,56077,56079],{"class":81,"line":602},[79,56076,53779],{"class":228},[79,56078,53794],{"class":232},[79,56080,53301],{"class":228},[19,56082,56083],{},[3569,56084],{"alt":57,"src":56085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,56087,56088],{},"document.querySelector选择的是第一个对象（元素）",[339,56090,56092],{"id":56091},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,56094,56095],{},[3569,56096],{"alt":57,"src":56097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,56099,56100],{},[3569,56101],{"alt":57,"src":56102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,56104,56105],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[53807,56107,56108],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,56110,56111],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[53807,56113,56114],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   let n1 = setInterval(fn, 1000)\n\n   console.log(n1)\n\n",[19,56116,56117],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,56119,56120],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,56122,56123],{},"单位为毫秒！！！",[19,56125,56126],{},"可以搭配匿名函数来用！！！",[19,56128,56129],{},"setInterval(function () {",[19,56131,56132],{},"alert('两秒执行一次')",[19,56134,56135],{},"}, 2000)",[19,56137,56138],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,56140,56141],{},"function fn() {",[19,56143,56144],{},"document.write(1)",[19,56146,3185],{},[19,56148,56149],{},"setInterval(fn, 1000)",[19,56151,56152],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,56154,56155],{},"setInterval('fn()', 1000)",[19,56157,56158],{},[3569,56159],{"alt":57,"src":56160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[24023,56162,56164],{"id":56163},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[51,56166,56168],{"className":52628,"code":56167,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ctextarea name=\"\" id=\"\" cols=\"30\" rows=\"10\">\n        用户注册协议\n        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n    \u003C\u002Ftextarea>\n  \u003Cbr>\n  \u003Cbutton class=\"btn\" disabled>我已经阅读用户协议(5)\u003C\u002Fbutton>\n  \u003Cscript>\n    \u002F\u002F 1. 获取元素\n    const btn = document.querySelector('.btn')\n    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n    \u002F\u002F 2. 倒计时\n    let i = 5\n    \u002F\u002F 2.1 开启定时器\n    let n = setInterval(function () {\n      i--\n      btn.innerHTML = `我已经阅读用户协议(${i})`\n      if (i === 0) {\n        clearInterval(n)  \u002F\u002F 关闭定时器\n        \u002F\u002F 定时器停了，我就可以开按钮\n        btn.disabled = false\n        btn.innerHTML = '同意'\n      }\n    }, 1000)\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,56169,56170,56180,56194,56198,56206,56220,56240,56252,56260,56264,56272,56308,56313,56318,56323,56331,56339,56361,56369,56374,56396,56401,56406,56417,56422,56442,56450,56465,56480,56491,56496,56506,56516,56520,56529,56533,56541,56549,56553],{"__ignoreMap":57},[79,56171,56172,56174,56176,56178],{"class":81,"line":82},[79,56173,53292],{"class":228},[79,56175,53295],{"class":232},[79,56177,53298],{"class":85},[79,56179,53301],{"class":228},[79,56181,56182,56184,56186,56188,56190,56192],{"class":81,"line":167},[79,56183,229],{"class":228},[79,56185,52630],{"class":232},[79,56187,53310],{"class":85},[79,56189,239],{"class":228},[79,56191,53315],{"class":89},[79,56193,53301],{"class":228},[79,56195,56196],{"class":81,"line":178},[79,56197,542],{"emptyLinePlaceholder":541},[79,56199,56200,56202,56204],{"class":81,"line":545},[79,56201,229],{"class":228},[79,56203,53328],{"class":232},[79,56205,53301],{"class":228},[79,56207,56208,56210,56212,56214,56216,56218],{"class":81,"line":550},[79,56209,54138],{"class":228},[79,56211,53338],{"class":232},[79,56213,53341],{"class":85},[79,56215,239],{"class":228},[79,56217,53346],{"class":89},[79,56219,53301],{"class":228},[79,56221,56222,56224,56226,56228,56230,56232,56234,56236,56238],{"class":81,"line":562},[79,56223,54138],{"class":228},[79,56225,53338],{"class":232},[79,56227,236],{"class":85},[79,56229,239],{"class":228},[79,56231,53385],{"class":89},[79,56233,53365],{"class":85},[79,56235,239],{"class":228},[79,56237,53392],{"class":89},[79,56239,53301],{"class":228},[79,56241,56242,56244,56246,56248,56250],{"class":81,"line":568},[79,56243,54138],{"class":228},[79,56245,53401],{"class":232},[79,56247,53404],{"class":228},[79,56249,53401],{"class":232},[79,56251,53301],{"class":228},[79,56253,56254,56256,56258],{"class":81,"line":574},[79,56255,53779],{"class":228},[79,56257,53328],{"class":232},[79,56259,53301],{"class":228},[79,56261,56262],{"class":81,"line":579},[79,56263,542],{"emptyLinePlaceholder":541},[79,56265,56266,56268,56270],{"class":81,"line":585},[79,56267,229],{"class":228},[79,56269,53794],{"class":232},[79,56271,53301],{"class":228},[79,56273,56274,56276,56279,56281,56283,56285,56287,56289,56291,56294,56296,56299,56302,56304,56306],{"class":81,"line":591},[79,56275,54138],{"class":228},[79,56277,56278],{"class":232},"textarea",[79,56280,236],{"class":85},[79,56282,239],{"class":228},[79,56284,9717],{"class":89},[79,56286,16991],{"class":85},[79,56288,239],{"class":228},[79,56290,9717],{"class":89},[79,56292,56293],{"class":85}," cols",[79,56295,239],{"class":228},[79,56297,56298],{"class":89},"\"30\"",[79,56300,56301],{"class":85}," rows",[79,56303,239],{"class":228},[79,56305,335],{"class":89},[79,56307,53301],{"class":228},[79,56309,56310],{"class":81,"line":596},[79,56311,56312],{"class":228},"        用户注册协议\n",[79,56314,56315],{"class":81,"line":602},[79,56316,56317],{"class":228},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[79,56319,56320],{"class":81,"line":608},[79,56321,56322],{"class":228},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[79,56324,56325,56327,56329],{"class":81,"line":614},[79,56326,53770],{"class":228},[79,56328,56278],{"class":232},[79,56330,53301],{"class":228},[79,56332,56333,56335,56337],{"class":81,"line":619},[79,56334,54138],{"class":228},[79,56336,55707],{"class":232},[79,56338,53301],{"class":228},[79,56340,56341,56343,56345,56347,56349,56352,56354,56357,56359],{"class":81,"line":625},[79,56342,54138],{"class":228},[79,56344,55877],{"class":232},[79,56346,55477],{"class":85},[79,56348,239],{"class":228},[79,56350,56351],{"class":89},"\"btn\"",[79,56353,55880],{"class":85},[79,56355,56356],{"class":228},">我已经阅读用户协议(5)\u003C\u002F",[79,56358,55877],{"class":232},[79,56360,53301],{"class":228},[79,56362,56363,56365,56367],{"class":81,"line":631},[79,56364,54138],{"class":228},[79,56366,53807],{"class":232},[79,56368,53301],{"class":228},[79,56370,56371],{"class":81,"line":637},[79,56372,56373],{"class":2313},"    \u002F\u002F 1. 获取元素\n",[79,56375,56376,56378,56381,56383,56386,56389,56391,56394],{"class":81,"line":643},[79,56377,13256],{"class":448},[79,56379,56380],{"class":96}," btn",[79,56382,556],{"class":448},[79,56384,56385],{"class":228}," document.",[79,56387,56388],{"class":85},"querySelector",[79,56390,455],{"class":228},[79,56392,56393],{"class":89},"'.btn'",[79,56395,850],{"class":228},[79,56397,56398],{"class":81,"line":649},[79,56399,56400],{"class":2313},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[79,56402,56403],{"class":81,"line":655},[79,56404,56405],{"class":2313},"    \u002F\u002F 2. 倒计时\n",[79,56407,56408,56410,56412,56414],{"class":81,"line":660},[79,56409,54213],{"class":448},[79,56411,11493],{"class":228},[79,56413,239],{"class":448},[79,56415,56416],{"class":96}," 5\n",[79,56418,56419],{"class":81,"line":666},[79,56420,56421],{"class":2313},"    \u002F\u002F 2.1 开启定时器\n",[79,56423,56424,56426,56429,56431,56434,56436,56439],{"class":81,"line":672},[79,56425,54213],{"class":448},[79,56427,56428],{"class":228}," n ",[79,56430,239],{"class":448},[79,56432,56433],{"class":85}," setInterval",[79,56435,455],{"class":228},[79,56437,56438],{"class":448},"function",[79,56440,56441],{"class":228}," () {\n",[79,56443,56444,56447],{"class":81,"line":678},[79,56445,56446],{"class":228},"      i",[79,56448,56449],{"class":448},"--\n",[79,56451,56452,56455,56457,56460,56462],{"class":81,"line":684},[79,56453,56454],{"class":228},"      btn.innerHTML ",[79,56456,239],{"class":448},[79,56458,56459],{"class":89}," `我已经阅读用户协议(${",[79,56461,2684],{"class":228},[79,56463,56464],{"class":89},"})`\n",[79,56466,56467,56470,56473,56476,56478],{"class":81,"line":690},[79,56468,56469],{"class":448},"      if",[79,56471,56472],{"class":228}," (i ",[79,56474,56475],{"class":448},"===",[79,56477,1103],{"class":96},[79,56479,14476],{"class":228},[79,56481,56482,56485,56488],{"class":81,"line":695},[79,56483,56484],{"class":85},"        clearInterval",[79,56486,56487],{"class":228},"(n)  ",[79,56489,56490],{"class":2313},"\u002F\u002F 关闭定时器\n",[79,56492,56493],{"class":81,"line":700},[79,56494,56495],{"class":2313},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[79,56497,56498,56501,56503],{"class":81,"line":712},[79,56499,56500],{"class":228},"        btn.disabled ",[79,56502,239],{"class":448},[79,56504,56505],{"class":96}," false\n",[79,56507,56508,56511,56513],{"class":81,"line":721},[79,56509,56510],{"class":228},"        btn.innerHTML ",[79,56512,239],{"class":448},[79,56514,56515],{"class":89}," '同意'\n",[79,56517,56518],{"class":81,"line":726},[79,56519,54391],{"class":228},[79,56521,56522,56525,56527],{"class":81,"line":731},[79,56523,56524],{"class":228},"    }, ",[79,56526,929],{"class":96},[79,56528,850],{"class":228},[79,56530,56531],{"class":81,"line":748},[79,56532,542],{"emptyLinePlaceholder":541},[79,56534,56535,56537,56539],{"class":81,"line":765},[79,56536,54410],{"class":228},[79,56538,53807],{"class":232},[79,56540,53301],{"class":228},[79,56542,56543,56545,56547],{"class":81,"line":780},[79,56544,53779],{"class":228},[79,56546,53794],{"class":232},[79,56548,53301],{"class":228},[79,56550,56551],{"class":81,"line":811},[79,56552,542],{"emptyLinePlaceholder":541},[79,56554,56555,56557,56559],{"class":81,"line":816},[79,56556,53779],{"class":228},[79,56558,52630],{"class":232},[79,56560,53301],{"class":228},[19,56562,56563],{},"不要一直想着用死循环,避免死循环",[19,56565,56566,56569],{},[59,56567,56568],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[24023,56571,56573],{"id":56572},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[26,56575,56576],{},[29,56577,56578],{},"法1",[51,56580,56582],{"className":52628,"code":56581,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n    }\n\n    li {\n      list-style: none;\n    }\n\n    .box {\n      position: relative;\n      width: 976px;\n      height: 600px;\n      margin: 100px auto;\n    }\n\n    .slider-footer {\n      position: absolute;\n      left: 0;\n      bottom: 0;\n      width: 100%;\n      height: 15%;\n      background-color: skyblue;\n    }\n\n    .slider-footer p {\n      position: absolute;\n      font-size: 28px;\n      left: 20px;\n      top: 5px;\n    }\n\n    ul {\n      position: absolute;\n      top: 55px;\n      left: 20px;\n      display: flex;\n      justify-content: space-between;\n      position: absolute;\n      width: 250px;\n      height: 20px;\n    }\n\n    ul li {\n      width: 20px;\n      height: 20px;\n      background-color: rgba(0, 0, 0, .4);\n      border-radius: 10px;\n    }\n\n    .activate {\n      background-color: #f7f7f7;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\n    \u003Cdiv class=\"slider-wrapper\">\n      \u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\" alt=\"\">\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"slider-footer\">\n      \u003Cp>对人类来说会不会太超前了?\u003C\u002Fp>\n      \u003Cul>\n        \u003Cli class=\"activate\">\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const arrImage = [\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了?', color: 'rgba(100,67,68)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说!', color: 'rgba(43,35,26)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了!', color: 'rgba(36,31,33)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚:让世界通过b站看到东方大国文化', color: 'rgba(139,98,66)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧', color: 'rgba(67,90,92)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAR', color: 'rgba(166,131,143)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题', color: 'rgba(53,29,25)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢?', color: 'rgba(99,72,114)' }\n    ]\n    const img = document.querySelector('.slider-wrapper img')\n    const p = document.querySelector('.slider-footer p')\n    const color = document.querySelector('.slider-footer')\n    const lis = document.querySelectorAll('.slider-footer ul li')\n    let i = 1\n    let timer = setInterval(function () {\n      img.src = arrImage[i].url\n      p.innerHTML = arrImage[i].title\n      color.style.backgroundColor = arrImage[i].color\n      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n      \u002F\u002F li.classList.add('activate')\n      \u002F\u002F lis[i + 1].classList.add('activate')\n      \u002F\u002F lis[i].classList.remove('activate')\n      document.querySelector('.activate')?.classList.toggle('activate')\n      lis[i].classList.add('activate')\n\n      i = (i + 1) % arrImage.length\n\n    }, 1000)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,56583,56584,56594,56608,56612,56620,56634,56654,56666,56674,56680,56691,56702,56706,56710,56717,56729,56733,56737,56744,56756,56770,56783,56797,56801,56805,56812,56823,56834,56845,56857,56869,56881,56885,56889,56897,56907,56920,56932,56945,56949,56953,56960,56970,56982,56994,57005,57016,57026,57038,57050,57054,57058,57067,57079,57091,57119,57132,57136,57140,57147,57158,57162,57170,57178,57182,57190,57204,57219,57243,57251,57266,57279,57287,57308,57320,57332,57344,57356,57368,57380,57392,57401,57409,57417,57425,57437,57460,57479,57498,57517,57536,57555,57574,57594,57598,57618,57637,57657,57678,57689,57706,57716,57726,57736,57741,57746,57751,57756,57781,57794,57798,57821,57825,57833,57841,57849,57853],{"__ignoreMap":57},[79,56585,56586,56588,56590,56592],{"class":81,"line":82},[79,56587,53292],{"class":228},[79,56589,53295],{"class":232},[79,56591,53298],{"class":85},[79,56593,53301],{"class":228},[79,56595,56596,56598,56600,56602,56604,56606],{"class":81,"line":167},[79,56597,229],{"class":228},[79,56599,52630],{"class":232},[79,56601,53310],{"class":85},[79,56603,239],{"class":228},[79,56605,53315],{"class":89},[79,56607,53301],{"class":228},[79,56609,56610],{"class":81,"line":178},[79,56611,542],{"emptyLinePlaceholder":541},[79,56613,56614,56616,56618],{"class":81,"line":545},[79,56615,229],{"class":228},[79,56617,53328],{"class":232},[79,56619,53301],{"class":228},[79,56621,56622,56624,56626,56628,56630,56632],{"class":81,"line":550},[79,56623,54138],{"class":228},[79,56625,53338],{"class":232},[79,56627,53341],{"class":85},[79,56629,239],{"class":228},[79,56631,53346],{"class":89},[79,56633,53301],{"class":228},[79,56635,56636,56638,56640,56642,56644,56646,56648,56650,56652],{"class":81,"line":562},[79,56637,54138],{"class":228},[79,56639,53338],{"class":232},[79,56641,236],{"class":85},[79,56643,239],{"class":228},[79,56645,53385],{"class":89},[79,56647,53365],{"class":85},[79,56649,239],{"class":228},[79,56651,53392],{"class":89},[79,56653,53301],{"class":228},[79,56655,56656,56658,56660,56662,56664],{"class":81,"line":568},[79,56657,54138],{"class":228},[79,56659,53401],{"class":232},[79,56661,53404],{"class":228},[79,56663,53401],{"class":232},[79,56665,53301],{"class":228},[79,56667,56668,56670,56672],{"class":81,"line":574},[79,56669,54138],{"class":228},[79,56671,2159],{"class":232},[79,56673,53301],{"class":228},[79,56675,56676,56678],{"class":81,"line":579},[79,56677,8470],{"class":232},[79,56679,17604],{"class":228},[79,56681,56682,56685,56687,56689],{"class":81,"line":585},[79,56683,56684],{"class":96},"      padding",[79,56686,53431],{"class":228},[79,56688,759],{"class":96},[79,56690,3400],{"class":228},[79,56692,56693,56696,56698,56700],{"class":81,"line":591},[79,56694,56695],{"class":96},"      margin",[79,56697,53431],{"class":228},[79,56699,759],{"class":96},[79,56701,3400],{"class":228},[79,56703,56704],{"class":81,"line":596},[79,56705,4272],{"class":228},[79,56707,56708],{"class":81,"line":602},[79,56709,542],{"emptyLinePlaceholder":541},[79,56711,56712,56715],{"class":81,"line":608},[79,56713,56714],{"class":232},"    li",[79,56716,17604],{"class":228},[79,56718,56719,56722,56724,56727],{"class":81,"line":614},[79,56720,56721],{"class":96},"      list-style",[79,56723,53431],{"class":228},[79,56725,56726],{"class":96},"none",[79,56728,3400],{"class":228},[79,56730,56731],{"class":81,"line":619},[79,56732,4272],{"class":228},[79,56734,56735],{"class":81,"line":625},[79,56736,542],{"emptyLinePlaceholder":541},[79,56738,56739,56742],{"class":81,"line":631},[79,56740,56741],{"class":85},"    .box",[79,56743,17604],{"class":228},[79,56745,56746,56749,56751,56754],{"class":81,"line":637},[79,56747,56748],{"class":96},"      position",[79,56750,53431],{"class":228},[79,56752,56753],{"class":96},"relative",[79,56755,3400],{"class":228},[79,56757,56758,56761,56763,56766,56768],{"class":81,"line":643},[79,56759,56760],{"class":96},"      width",[79,56762,53431],{"class":228},[79,56764,56765],{"class":96},"976",[79,56767,53486],{"class":448},[79,56769,3400],{"class":228},[79,56771,56772,56775,56777,56779,56781],{"class":81,"line":649},[79,56773,56774],{"class":96},"      height",[79,56776,53431],{"class":228},[79,56778,3645],{"class":96},[79,56780,53486],{"class":448},[79,56782,3400],{"class":228},[79,56784,56785,56787,56789,56791,56793,56795],{"class":81,"line":655},[79,56786,56695],{"class":96},[79,56788,53431],{"class":228},[79,56790,2555],{"class":96},[79,56792,53486],{"class":448},[79,56794,53550],{"class":96},[79,56796,3400],{"class":228},[79,56798,56799],{"class":81,"line":660},[79,56800,4272],{"class":228},[79,56802,56803],{"class":81,"line":666},[79,56804,542],{"emptyLinePlaceholder":541},[79,56806,56807,56810],{"class":81,"line":672},[79,56808,56809],{"class":85},"    .slider-footer",[79,56811,17604],{"class":228},[79,56813,56814,56816,56818,56821],{"class":81,"line":678},[79,56815,56748],{"class":96},[79,56817,53431],{"class":228},[79,56819,56820],{"class":96},"absolute",[79,56822,3400],{"class":228},[79,56824,56825,56828,56830,56832],{"class":81,"line":684},[79,56826,56827],{"class":96},"      left",[79,56829,53431],{"class":228},[79,56831,759],{"class":96},[79,56833,3400],{"class":228},[79,56835,56836,56839,56841,56843],{"class":81,"line":690},[79,56837,56838],{"class":96},"      bottom",[79,56840,53431],{"class":228},[79,56842,759],{"class":96},[79,56844,3400],{"class":228},[79,56846,56847,56849,56851,56853,56855],{"class":81,"line":695},[79,56848,56760],{"class":96},[79,56850,53431],{"class":228},[79,56852,2555],{"class":96},[79,56854,1094],{"class":448},[79,56856,3400],{"class":228},[79,56858,56859,56861,56863,56865,56867],{"class":81,"line":700},[79,56860,56774],{"class":96},[79,56862,53431],{"class":228},[79,56864,2815],{"class":96},[79,56866,1094],{"class":448},[79,56868,3400],{"class":228},[79,56870,56871,56874,56876,56879],{"class":81,"line":712},[79,56872,56873],{"class":96},"      background-color",[79,56875,53431],{"class":228},[79,56877,56878],{"class":96},"skyblue",[79,56880,3400],{"class":228},[79,56882,56883],{"class":81,"line":721},[79,56884,4272],{"class":228},[79,56886,56887],{"class":81,"line":726},[79,56888,542],{"emptyLinePlaceholder":541},[79,56890,56891,56893,56895],{"class":81,"line":731},[79,56892,56809],{"class":85},[79,56894,8890],{"class":232},[79,56896,17604],{"class":228},[79,56898,56899,56901,56903,56905],{"class":81,"line":748},[79,56900,56748],{"class":96},[79,56902,53431],{"class":228},[79,56904,56820],{"class":96},[79,56906,3400],{"class":228},[79,56908,56909,56912,56914,56916,56918],{"class":81,"line":765},[79,56910,56911],{"class":96},"      font-size",[79,56913,53431],{"class":228},[79,56915,3141],{"class":96},[79,56917,53486],{"class":448},[79,56919,3400],{"class":228},[79,56921,56922,56924,56926,56928,56930],{"class":81,"line":780},[79,56923,56827],{"class":96},[79,56925,53431],{"class":228},[79,56927,2940],{"class":96},[79,56929,53486],{"class":448},[79,56931,3400],{"class":228},[79,56933,56934,56937,56939,56941,56943],{"class":81,"line":811},[79,56935,56936],{"class":96},"      top",[79,56938,53431],{"class":228},[79,56940,2563],{"class":96},[79,56942,53486],{"class":448},[79,56944,3400],{"class":228},[79,56946,56947],{"class":81,"line":816},[79,56948,4272],{"class":228},[79,56950,56951],{"class":81,"line":821},[79,56952,542],{"emptyLinePlaceholder":541},[79,56954,56955,56958],{"class":81,"line":837},[79,56956,56957],{"class":232},"    ul",[79,56959,17604],{"class":228},[79,56961,56962,56964,56966,56968],{"class":81,"line":853},[79,56963,56748],{"class":96},[79,56965,53431],{"class":228},[79,56967,56820],{"class":96},[79,56969,3400],{"class":228},[79,56971,56972,56974,56976,56978,56980],{"class":81,"line":864},[79,56973,56936],{"class":96},[79,56975,53431],{"class":228},[79,56977,3021],{"class":96},[79,56979,53486],{"class":448},[79,56981,3400],{"class":228},[79,56983,56984,56986,56988,56990,56992],{"class":81,"line":869},[79,56985,56827],{"class":96},[79,56987,53431],{"class":228},[79,56989,2940],{"class":96},[79,56991,53486],{"class":448},[79,56993,3400],{"class":228},[79,56995,56996,56999,57001,57003],{"class":81,"line":885},[79,56997,56998],{"class":96},"      display",[79,57000,53431],{"class":228},[79,57002,53471],{"class":96},[79,57004,3400],{"class":228},[79,57006,57007,57010,57012,57014],{"class":81,"line":891},[79,57008,57009],{"class":96},"      justify-content",[79,57011,53431],{"class":228},[79,57013,53662],{"class":96},[79,57015,3400],{"class":228},[79,57017,57018,57020,57022,57024],{"class":81,"line":896},[79,57019,56748],{"class":96},[79,57021,53431],{"class":228},[79,57023,56820],{"class":96},[79,57025,3400],{"class":228},[79,57027,57028,57030,57032,57034,57036],{"class":81,"line":907},[79,57029,56760],{"class":96},[79,57031,53431],{"class":228},[79,57033,6065],{"class":96},[79,57035,53486],{"class":448},[79,57037,3400],{"class":228},[79,57039,57040,57042,57044,57046,57048],{"class":81,"line":912},[79,57041,56774],{"class":96},[79,57043,53431],{"class":228},[79,57045,2940],{"class":96},[79,57047,53486],{"class":448},[79,57049,3400],{"class":228},[79,57051,57052],{"class":81,"line":935},[79,57053,4272],{"class":228},[79,57055,57056],{"class":81,"line":946},[79,57057,542],{"emptyLinePlaceholder":541},[79,57059,57060,57062,57065],{"class":81,"line":960},[79,57061,56957],{"class":232},[79,57063,57064],{"class":232}," li",[79,57066,17604],{"class":228},[79,57068,57069,57071,57073,57075,57077],{"class":81,"line":975},[79,57070,56760],{"class":96},[79,57072,53431],{"class":228},[79,57074,2940],{"class":96},[79,57076,53486],{"class":448},[79,57078,3400],{"class":228},[79,57080,57081,57083,57085,57087,57089],{"class":81,"line":980},[79,57082,56774],{"class":96},[79,57084,53431],{"class":228},[79,57086,2940],{"class":96},[79,57088,53486],{"class":448},[79,57090,3400],{"class":228},[79,57092,57093,57095,57097,57100,57102,57104,57106,57108,57110,57112,57114,57117],{"class":81,"line":1006},[79,57094,56873],{"class":96},[79,57096,53431],{"class":228},[79,57098,57099],{"class":96},"rgba",[79,57101,455],{"class":228},[79,57103,759],{"class":96},[79,57105,1020],{"class":228},[79,57107,759],{"class":96},[79,57109,1020],{"class":228},[79,57111,759],{"class":96},[79,57113,1020],{"class":228},[79,57115,57116],{"class":96},".4",[79,57118,4795],{"class":228},[79,57120,57121,57124,57126,57128,57130],{"class":81,"line":1027},[79,57122,57123],{"class":96},"      border-radius",[79,57125,53431],{"class":228},[79,57127,2689],{"class":96},[79,57129,53486],{"class":448},[79,57131,3400],{"class":228},[79,57133,57134],{"class":81,"line":1032},[79,57135,4272],{"class":228},[79,57137,57138],{"class":81,"line":1047},[79,57139,542],{"emptyLinePlaceholder":541},[79,57141,57142,57145],{"class":81,"line":1053},[79,57143,57144],{"class":85},"    .activate",[79,57146,17604],{"class":228},[79,57148,57149,57151,57153,57156],{"class":81,"line":1058},[79,57150,56873],{"class":96},[79,57152,53431],{"class":228},[79,57154,57155],{"class":96},"#f7f7f7",[79,57157,3400],{"class":228},[79,57159,57160],{"class":81,"line":1069},[79,57161,4272],{"class":228},[79,57163,57164,57166,57168],{"class":81,"line":1081},[79,57165,54410],{"class":228},[79,57167,2159],{"class":232},[79,57169,53301],{"class":228},[79,57171,57172,57174,57176],{"class":81,"line":1086},[79,57173,53779],{"class":228},[79,57175,53328],{"class":232},[79,57177,53301],{"class":228},[79,57179,57180],{"class":81,"line":1108},[79,57181,542],{"emptyLinePlaceholder":541},[79,57183,57184,57186,57188],{"class":81,"line":1153},[79,57185,229],{"class":228},[79,57187,53794],{"class":232},[79,57189,53301],{"class":228},[79,57191,57192,57194,57196,57198,57200,57202],{"class":81,"line":1158},[79,57193,54138],{"class":228},[79,57195,53605],{"class":232},[79,57197,55477],{"class":85},[79,57199,239],{"class":228},[79,57201,55482],{"class":89},[79,57203,53301],{"class":228},[79,57205,57206,57208,57210,57212,57214,57217],{"class":81,"line":1180},[79,57207,53335],{"class":228},[79,57209,53605],{"class":232},[79,57211,55477],{"class":85},[79,57213,239],{"class":228},[79,57215,57216],{"class":89},"\"slider-wrapper\"",[79,57218,53301],{"class":228},[79,57220,57221,57224,57226,57229,57231,57234,57237,57239,57241],{"class":81,"line":1197},[79,57222,57223],{"class":228},"      \u003C",[79,57225,3569],{"class":232},[79,57227,57228],{"class":85}," src",[79,57230,239],{"class":228},[79,57232,57233],{"class":89},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[79,57235,57236],{"class":85}," alt",[79,57238,239],{"class":228},[79,57240,9717],{"class":89},[79,57242,53301],{"class":228},[79,57244,57245,57247,57249],{"class":81,"line":1202},[79,57246,53770],{"class":228},[79,57248,53605],{"class":232},[79,57250,53301],{"class":228},[79,57252,57253,57255,57257,57259,57261,57264],{"class":81,"line":1207},[79,57254,53335],{"class":228},[79,57256,53605],{"class":232},[79,57258,55477],{"class":85},[79,57260,239],{"class":228},[79,57262,57263],{"class":89},"\"slider-footer\"",[79,57265,53301],{"class":228},[79,57267,57268,57270,57272,57275,57277],{"class":81,"line":1223},[79,57269,57223],{"class":228},[79,57271,19],{"class":232},[79,57273,57274],{"class":228},">对人类来说会不会太超前了?\u003C\u002F",[79,57276,19],{"class":232},[79,57278,53301],{"class":228},[79,57280,57281,57283,57285],{"class":81,"line":18722},[79,57282,57223],{"class":228},[79,57284,3246],{"class":232},[79,57286,53301],{"class":228},[79,57288,57289,57292,57294,57296,57298,57301,57304,57306],{"class":81,"line":18728},[79,57290,57291],{"class":228},"        \u003C",[79,57293,29],{"class":232},[79,57295,55477],{"class":85},[79,57297,239],{"class":228},[79,57299,57300],{"class":89},"\"activate\"",[79,57302,57303],{"class":228},">\u003C\u002F",[79,57305,29],{"class":232},[79,57307,53301],{"class":228},[79,57309,57310,57312,57314,57316,57318],{"class":81,"line":18739},[79,57311,57291],{"class":228},[79,57313,29],{"class":232},[79,57315,57303],{"class":228},[79,57317,29],{"class":232},[79,57319,53301],{"class":228},[79,57321,57322,57324,57326,57328,57330],{"class":81,"line":18762},[79,57323,57291],{"class":228},[79,57325,29],{"class":232},[79,57327,57303],{"class":228},[79,57329,29],{"class":232},[79,57331,53301],{"class":228},[79,57333,57334,57336,57338,57340,57342],{"class":81,"line":18784},[79,57335,57291],{"class":228},[79,57337,29],{"class":232},[79,57339,57303],{"class":228},[79,57341,29],{"class":232},[79,57343,53301],{"class":228},[79,57345,57346,57348,57350,57352,57354],{"class":81,"line":18789},[79,57347,57291],{"class":228},[79,57349,29],{"class":232},[79,57351,57303],{"class":228},[79,57353,29],{"class":232},[79,57355,53301],{"class":228},[79,57357,57358,57360,57362,57364,57366],{"class":81,"line":18795},[79,57359,57291],{"class":228},[79,57361,29],{"class":232},[79,57363,57303],{"class":228},[79,57365,29],{"class":232},[79,57367,53301],{"class":228},[79,57369,57370,57372,57374,57376,57378],{"class":81,"line":18809},[79,57371,57291],{"class":228},[79,57373,29],{"class":232},[79,57375,57303],{"class":228},[79,57377,29],{"class":232},[79,57379,53301],{"class":228},[79,57381,57382,57384,57386,57388,57390],{"class":81,"line":18822},[79,57383,57291],{"class":228},[79,57385,29],{"class":232},[79,57387,57303],{"class":228},[79,57389,29],{"class":232},[79,57391,53301],{"class":228},[79,57393,57394,57397,57399],{"class":81,"line":18827},[79,57395,57396],{"class":228},"      \u003C\u002F",[79,57398,3246],{"class":232},[79,57400,53301],{"class":228},[79,57402,57403,57405,57407],{"class":81,"line":18841},[79,57404,53770],{"class":228},[79,57406,53605],{"class":232},[79,57408,53301],{"class":228},[79,57410,57411,57413,57415],{"class":81,"line":18846},[79,57412,54410],{"class":228},[79,57414,53605],{"class":232},[79,57416,53301],{"class":228},[79,57418,57419,57421,57423],{"class":81,"line":18852},[79,57420,54138],{"class":228},[79,57422,53807],{"class":232},[79,57424,53301],{"class":228},[79,57426,57427,57429,57432,57434],{"class":81,"line":18857},[79,57428,13256],{"class":448},[79,57430,57431],{"class":96}," arrImage",[79,57433,556],{"class":448},[79,57435,57436],{"class":228}," [\n",[79,57438,57439,57442,57445,57448,57451,57454,57457],{"class":81,"line":18871},[79,57440,57441],{"class":228},"      { url: ",[79,57443,57444],{"class":89},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[79,57446,57447],{"class":228},", title: ",[79,57449,57450],{"class":89},"'对人类来说会不会太超前了?'",[79,57452,57453],{"class":228},", color: ",[79,57455,57456],{"class":89},"'rgba(100,67,68)'",[79,57458,57459],{"class":228}," },\n",[79,57461,57462,57464,57467,57469,57472,57474,57477],{"class":81,"line":18876},[79,57463,57441],{"class":228},[79,57465,57466],{"class":89},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[79,57468,57447],{"class":228},[79,57470,57471],{"class":89},"'开启剑与雪的黑暗传说!'",[79,57473,57453],{"class":228},[79,57475,57476],{"class":89},"'rgba(43,35,26)'",[79,57478,57459],{"class":228},[79,57480,57481,57483,57486,57488,57491,57493,57496],{"class":81,"line":18881},[79,57482,57441],{"class":228},[79,57484,57485],{"class":89},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[79,57487,57447],{"class":228},[79,57489,57490],{"class":89},"'真正的jo厨出现了!'",[79,57492,57453],{"class":228},[79,57494,57495],{"class":89},"'rgba(36,31,33)'",[79,57497,57459],{"class":228},[79,57499,57500,57502,57505,57507,57510,57512,57515],{"class":81,"line":18895},[79,57501,57441],{"class":228},[79,57503,57504],{"class":89},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[79,57506,57447],{"class":228},[79,57508,57509],{"class":89},"'李玉刚:让世界通过b站看到东方大国文化'",[79,57511,57453],{"class":228},[79,57513,57514],{"class":89},"'rgba(139,98,66)'",[79,57516,57459],{"class":228},[79,57518,57519,57521,57524,57526,57529,57531,57534],{"class":81,"line":18907},[79,57520,57441],{"class":228},[79,57522,57523],{"class":89},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[79,57525,57447],{"class":228},[79,57527,57528],{"class":89},"'快来分享你的寒假日常吧'",[79,57530,57453],{"class":228},[79,57532,57533],{"class":89},"'rgba(67,90,92)'",[79,57535,57459],{"class":228},[79,57537,57538,57540,57543,57545,57548,57550,57553],{"class":81,"line":18912},[79,57539,57441],{"class":228},[79,57541,57542],{"class":89},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[79,57544,57447],{"class":228},[79,57546,57547],{"class":89},"'哔哩哔哩小年YEAR'",[79,57549,57453],{"class":228},[79,57551,57552],{"class":89},"'rgba(166,131,143)'",[79,57554,57459],{"class":228},[79,57556,57557,57559,57562,57564,57567,57569,57572],{"class":81,"line":18925},[79,57558,57441],{"class":228},[79,57560,57561],{"class":89},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[79,57563,57447],{"class":228},[79,57565,57566],{"class":89},"'一站式解决你的电脑配置问题'",[79,57568,57453],{"class":228},[79,57570,57571],{"class":89},"'rgba(53,29,25)'",[79,57573,57459],{"class":228},[79,57575,57576,57578,57581,57583,57586,57588,57591],{"class":81,"line":18930},[79,57577,57441],{"class":228},[79,57579,57580],{"class":89},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[79,57582,57447],{"class":228},[79,57584,57585],{"class":89},"'谁不想和小猫咪贴贴呢?'",[79,57587,57453],{"class":228},[79,57589,57590],{"class":89},"'rgba(99,72,114)'",[79,57592,57593],{"class":228}," }\n",[79,57595,57596],{"class":81,"line":18935},[79,57597,55100],{"class":228},[79,57599,57600,57602,57605,57607,57609,57611,57613,57616],{"class":81,"line":18940},[79,57601,13256],{"class":448},[79,57603,57604],{"class":96}," img",[79,57606,556],{"class":448},[79,57608,56385],{"class":228},[79,57610,56388],{"class":85},[79,57612,455],{"class":228},[79,57614,57615],{"class":89},"'.slider-wrapper img'",[79,57617,850],{"class":228},[79,57619,57620,57622,57624,57626,57628,57630,57632,57635],{"class":81,"line":18953},[79,57621,13256],{"class":448},[79,57623,8890],{"class":96},[79,57625,556],{"class":448},[79,57627,56385],{"class":228},[79,57629,56388],{"class":85},[79,57631,455],{"class":228},[79,57633,57634],{"class":89},"'.slider-footer p'",[79,57636,850],{"class":228},[79,57638,57639,57641,57644,57646,57648,57650,57652,57655],{"class":81,"line":18958},[79,57640,13256],{"class":448},[79,57642,57643],{"class":96}," color",[79,57645,556],{"class":448},[79,57647,56385],{"class":228},[79,57649,56388],{"class":85},[79,57651,455],{"class":228},[79,57653,57654],{"class":89},"'.slider-footer'",[79,57656,850],{"class":228},[79,57658,57659,57661,57664,57666,57668,57671,57673,57676],{"class":81,"line":34631},[79,57660,13256],{"class":448},[79,57662,57663],{"class":96}," lis",[79,57665,556],{"class":448},[79,57667,56385],{"class":228},[79,57669,57670],{"class":85},"querySelectorAll",[79,57672,455],{"class":228},[79,57674,57675],{"class":89},"'.slider-footer ul li'",[79,57677,850],{"class":228},[79,57679,57680,57682,57684,57686],{"class":81,"line":34637},[79,57681,54213],{"class":448},[79,57683,11493],{"class":228},[79,57685,239],{"class":448},[79,57687,57688],{"class":96}," 1\n",[79,57690,57691,57693,57696,57698,57700,57702,57704],{"class":81,"line":34643},[79,57692,54213],{"class":448},[79,57694,57695],{"class":228}," timer ",[79,57697,239],{"class":448},[79,57699,56433],{"class":85},[79,57701,455],{"class":228},[79,57703,56438],{"class":448},[79,57705,56441],{"class":228},[79,57707,57708,57711,57713],{"class":81,"line":34649},[79,57709,57710],{"class":228},"      img.src ",[79,57712,239],{"class":448},[79,57714,57715],{"class":228}," arrImage[i].url\n",[79,57717,57718,57721,57723],{"class":81,"line":34655},[79,57719,57720],{"class":228},"      p.innerHTML ",[79,57722,239],{"class":448},[79,57724,57725],{"class":228}," arrImage[i].title\n",[79,57727,57728,57731,57733],{"class":81,"line":34666},[79,57729,57730],{"class":228},"      color.style.backgroundColor ",[79,57732,239],{"class":448},[79,57734,57735],{"class":228}," arrImage[i].color\n",[79,57737,57738],{"class":81,"line":34672},[79,57739,57740],{"class":2313},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[79,57742,57743],{"class":81,"line":34692},[79,57744,57745],{"class":2313},"      \u002F\u002F li.classList.add('activate')\n",[79,57747,57748],{"class":81,"line":34698},[79,57749,57750],{"class":2313},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[79,57752,57753],{"class":81,"line":34709},[79,57754,57755],{"class":2313},"      \u002F\u002F lis[i].classList.remove('activate')\n",[79,57757,57758,57761,57763,57765,57768,57771,57774,57776,57779],{"class":81,"line":34715},[79,57759,57760],{"class":228},"      document.",[79,57762,56388],{"class":85},[79,57764,455],{"class":228},[79,57766,57767],{"class":89},"'.activate'",[79,57769,57770],{"class":228},")?.classList.",[79,57772,57773],{"class":85},"toggle",[79,57775,455],{"class":228},[79,57777,57778],{"class":89},"'activate'",[79,57780,850],{"class":228},[79,57782,57783,57786,57788,57790,57792],{"class":81,"line":34721},[79,57784,57785],{"class":228},"      lis[i].classList.",[79,57787,7402],{"class":85},[79,57789,455],{"class":228},[79,57791,57778],{"class":89},[79,57793,850],{"class":228},[79,57795,57796],{"class":81,"line":34727},[79,57797,542],{"emptyLinePlaceholder":541},[79,57799,57800,57803,57805,57807,57809,57811,57813,57815,57818],{"class":81,"line":34733},[79,57801,57802],{"class":228},"      i ",[79,57804,239],{"class":448},[79,57806,56472],{"class":228},[79,57808,995],{"class":448},[79,57810,27137],{"class":96},[79,57812,15747],{"class":228},[79,57814,1094],{"class":448},[79,57816,57817],{"class":228}," arrImage.",[79,57819,57820],{"class":96},"length\n",[79,57822,57823],{"class":81,"line":34739},[79,57824,542],{"emptyLinePlaceholder":541},[79,57826,57827,57829,57831],{"class":81,"line":34745},[79,57828,56524],{"class":228},[79,57830,929],{"class":96},[79,57832,850],{"class":228},[79,57834,57835,57837,57839],{"class":81,"line":34751},[79,57836,54410],{"class":228},[79,57838,53807],{"class":232},[79,57840,53301],{"class":228},[79,57842,57843,57845,57847],{"class":81,"line":34771},[79,57844,53779],{"class":228},[79,57846,53794],{"class":232},[79,57848,53301],{"class":228},[79,57850,57851],{"class":81,"line":34777},[79,57852,542],{"emptyLinePlaceholder":541},[79,57854,57855,57857,57859],{"class":81,"line":34793},[79,57856,53779],{"class":228},[79,57858,52630],{"class":232},[79,57860,53301],{"class":228},[19,57862,57863],{},[3569,57864],{"alt":57,"src":57865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,57867,57868],{},"?.就是短路保护,确保输出正常进行",[19,57870,57871],{},"不要忘记取余%,有时候可以用",[19,57873,57874],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[26,57876,57877],{"start":167},[29,57878,57879],{},"法2",[51,57881,57883],{"className":52628,"code":57882,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n    }\n\n    li {\n      list-style: none;\n    }\n\n    .box {\n      position: relative;\n      width: 976px;\n      height: 600px;\n      margin: 100px auto;\n    }\n\n    .slider-footer {\n      position: absolute;\n      left: 0;\n      bottom: 0;\n      width: 100%;\n      height: 15%;\n      background-color: skyblue;\n    }\n\n    .slider-footer p {\n      position: absolute;\n      font-size: 28px;\n      left: 20px;\n      top: 5px;\n    }\n\n    ul {\n      position: absolute;\n      top: 55px;\n      left: 20px;\n      display: flex;\n      justify-content: space-between;\n      position: absolute;\n      width: 250px;\n      height: 20px;\n    }\n\n    ul li {\n      width: 20px;\n      height: 20px;\n      background-color: rgba(0, 0, 0, .4);\n      border-radius: 10px;\n    }\n\n    .activate {\n      background-color: #f7f7f7;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\n    \u003Cdiv class=\"slider-wrapper\">\n      \u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\" alt=\"\">\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"slider-footer\">\n      \u003Cp>对人类来说会不会太超前了?\u003C\u002Fp>\n      \u003Cul>\n        \u003Cli class=\"activate\">\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const sliderData = [\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了?', color: 'rgba(100,67,68)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说!', color: 'rgba(43,35,26)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了!', color: 'rgba(36,31,33)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚:让世界通过b站看到东方大国文化', color: 'rgba(139,98,66)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧', color: 'rgba(67,90,92)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAR', color: 'rgba(166,131,143)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题', color: 'rgba(53,29,25)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢?', color: 'rgba(99,72,114)' }\n    ]\n    \u002F\u002F 1.获取元素\n    const img = document.querySelector('.slider-wrapper img')\n    const p = document.querySelector('.slider-footer p')\n    let i = 0\n    \u002F\u002F 2.开启定时器\n    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n    setInterval(function () {\n      i++\n      if (i >= sliderData.length) {\n        i = 0\n      }\n      \u002F\u002F 更换图片路径\n      img.src = sliderData[i].url\n      \u002F\u002F 把文字写到p里面\n      p.innerHTML = sliderData[i].title\n      \u002F\u002F 小圆点\n      \u002F\u002F 先删除以前的active\n      \u002F\u002F 只让当前li添加active\n      document.querySelector('.slider-footer .activate').classList.remove('activate')\n      document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`).classList.add('activate')\n\n    }, 1000)\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,57884,57885,57895,57909,57913,57921,57935,57955,57967,57975,57981,57991,58001,58005,58009,58015,58025,58029,58033,58039,58049,58061,58073,58087,58091,58095,58101,58111,58121,58131,58143,58155,58165,58169,58173,58181,58191,58203,58215,58227,58231,58235,58241,58251,58263,58275,58285,58295,58305,58317,58329,58333,58337,58345,58357,58369,58395,58407,58411,58415,58421,58431,58435,58443,58451,58455,58463,58477,58491,58511,58519,58533,58545,58553,58571,58583,58595,58607,58619,58631,58643,58655,58663,58671,58679,58687,58698,58714,58730,58746,58762,58778,58794,58810,58826,58830,58835,58853,58871,58881,58886,58891,58902,58908,58923,58932,58936,58941,58950,58955,58964,58969,58974,58979,59002,59032,59036,59044,59048,59056,59064,59068],{"__ignoreMap":57},[79,57886,57887,57889,57891,57893],{"class":81,"line":82},[79,57888,53292],{"class":228},[79,57890,53295],{"class":232},[79,57892,53298],{"class":85},[79,57894,53301],{"class":228},[79,57896,57897,57899,57901,57903,57905,57907],{"class":81,"line":167},[79,57898,229],{"class":228},[79,57900,52630],{"class":232},[79,57902,53310],{"class":85},[79,57904,239],{"class":228},[79,57906,53315],{"class":89},[79,57908,53301],{"class":228},[79,57910,57911],{"class":81,"line":178},[79,57912,542],{"emptyLinePlaceholder":541},[79,57914,57915,57917,57919],{"class":81,"line":545},[79,57916,229],{"class":228},[79,57918,53328],{"class":232},[79,57920,53301],{"class":228},[79,57922,57923,57925,57927,57929,57931,57933],{"class":81,"line":550},[79,57924,54138],{"class":228},[79,57926,53338],{"class":232},[79,57928,53341],{"class":85},[79,57930,239],{"class":228},[79,57932,53346],{"class":89},[79,57934,53301],{"class":228},[79,57936,57937,57939,57941,57943,57945,57947,57949,57951,57953],{"class":81,"line":562},[79,57938,54138],{"class":228},[79,57940,53338],{"class":232},[79,57942,236],{"class":85},[79,57944,239],{"class":228},[79,57946,53385],{"class":89},[79,57948,53365],{"class":85},[79,57950,239],{"class":228},[79,57952,53392],{"class":89},[79,57954,53301],{"class":228},[79,57956,57957,57959,57961,57963,57965],{"class":81,"line":568},[79,57958,54138],{"class":228},[79,57960,53401],{"class":232},[79,57962,53404],{"class":228},[79,57964,53401],{"class":232},[79,57966,53301],{"class":228},[79,57968,57969,57971,57973],{"class":81,"line":574},[79,57970,54138],{"class":228},[79,57972,2159],{"class":232},[79,57974,53301],{"class":228},[79,57976,57977,57979],{"class":81,"line":579},[79,57978,8470],{"class":232},[79,57980,17604],{"class":228},[79,57982,57983,57985,57987,57989],{"class":81,"line":585},[79,57984,56684],{"class":96},[79,57986,53431],{"class":228},[79,57988,759],{"class":96},[79,57990,3400],{"class":228},[79,57992,57993,57995,57997,57999],{"class":81,"line":591},[79,57994,56695],{"class":96},[79,57996,53431],{"class":228},[79,57998,759],{"class":96},[79,58000,3400],{"class":228},[79,58002,58003],{"class":81,"line":596},[79,58004,4272],{"class":228},[79,58006,58007],{"class":81,"line":602},[79,58008,542],{"emptyLinePlaceholder":541},[79,58010,58011,58013],{"class":81,"line":608},[79,58012,56714],{"class":232},[79,58014,17604],{"class":228},[79,58016,58017,58019,58021,58023],{"class":81,"line":614},[79,58018,56721],{"class":96},[79,58020,53431],{"class":228},[79,58022,56726],{"class":96},[79,58024,3400],{"class":228},[79,58026,58027],{"class":81,"line":619},[79,58028,4272],{"class":228},[79,58030,58031],{"class":81,"line":625},[79,58032,542],{"emptyLinePlaceholder":541},[79,58034,58035,58037],{"class":81,"line":631},[79,58036,56741],{"class":85},[79,58038,17604],{"class":228},[79,58040,58041,58043,58045,58047],{"class":81,"line":637},[79,58042,56748],{"class":96},[79,58044,53431],{"class":228},[79,58046,56753],{"class":96},[79,58048,3400],{"class":228},[79,58050,58051,58053,58055,58057,58059],{"class":81,"line":643},[79,58052,56760],{"class":96},[79,58054,53431],{"class":228},[79,58056,56765],{"class":96},[79,58058,53486],{"class":448},[79,58060,3400],{"class":228},[79,58062,58063,58065,58067,58069,58071],{"class":81,"line":649},[79,58064,56774],{"class":96},[79,58066,53431],{"class":228},[79,58068,3645],{"class":96},[79,58070,53486],{"class":448},[79,58072,3400],{"class":228},[79,58074,58075,58077,58079,58081,58083,58085],{"class":81,"line":655},[79,58076,56695],{"class":96},[79,58078,53431],{"class":228},[79,58080,2555],{"class":96},[79,58082,53486],{"class":448},[79,58084,53550],{"class":96},[79,58086,3400],{"class":228},[79,58088,58089],{"class":81,"line":660},[79,58090,4272],{"class":228},[79,58092,58093],{"class":81,"line":666},[79,58094,542],{"emptyLinePlaceholder":541},[79,58096,58097,58099],{"class":81,"line":672},[79,58098,56809],{"class":85},[79,58100,17604],{"class":228},[79,58102,58103,58105,58107,58109],{"class":81,"line":678},[79,58104,56748],{"class":96},[79,58106,53431],{"class":228},[79,58108,56820],{"class":96},[79,58110,3400],{"class":228},[79,58112,58113,58115,58117,58119],{"class":81,"line":684},[79,58114,56827],{"class":96},[79,58116,53431],{"class":228},[79,58118,759],{"class":96},[79,58120,3400],{"class":228},[79,58122,58123,58125,58127,58129],{"class":81,"line":690},[79,58124,56838],{"class":96},[79,58126,53431],{"class":228},[79,58128,759],{"class":96},[79,58130,3400],{"class":228},[79,58132,58133,58135,58137,58139,58141],{"class":81,"line":695},[79,58134,56760],{"class":96},[79,58136,53431],{"class":228},[79,58138,2555],{"class":96},[79,58140,1094],{"class":448},[79,58142,3400],{"class":228},[79,58144,58145,58147,58149,58151,58153],{"class":81,"line":700},[79,58146,56774],{"class":96},[79,58148,53431],{"class":228},[79,58150,2815],{"class":96},[79,58152,1094],{"class":448},[79,58154,3400],{"class":228},[79,58156,58157,58159,58161,58163],{"class":81,"line":712},[79,58158,56873],{"class":96},[79,58160,53431],{"class":228},[79,58162,56878],{"class":96},[79,58164,3400],{"class":228},[79,58166,58167],{"class":81,"line":721},[79,58168,4272],{"class":228},[79,58170,58171],{"class":81,"line":726},[79,58172,542],{"emptyLinePlaceholder":541},[79,58174,58175,58177,58179],{"class":81,"line":731},[79,58176,56809],{"class":85},[79,58178,8890],{"class":232},[79,58180,17604],{"class":228},[79,58182,58183,58185,58187,58189],{"class":81,"line":748},[79,58184,56748],{"class":96},[79,58186,53431],{"class":228},[79,58188,56820],{"class":96},[79,58190,3400],{"class":228},[79,58192,58193,58195,58197,58199,58201],{"class":81,"line":765},[79,58194,56911],{"class":96},[79,58196,53431],{"class":228},[79,58198,3141],{"class":96},[79,58200,53486],{"class":448},[79,58202,3400],{"class":228},[79,58204,58205,58207,58209,58211,58213],{"class":81,"line":780},[79,58206,56827],{"class":96},[79,58208,53431],{"class":228},[79,58210,2940],{"class":96},[79,58212,53486],{"class":448},[79,58214,3400],{"class":228},[79,58216,58217,58219,58221,58223,58225],{"class":81,"line":811},[79,58218,56936],{"class":96},[79,58220,53431],{"class":228},[79,58222,2563],{"class":96},[79,58224,53486],{"class":448},[79,58226,3400],{"class":228},[79,58228,58229],{"class":81,"line":816},[79,58230,4272],{"class":228},[79,58232,58233],{"class":81,"line":821},[79,58234,542],{"emptyLinePlaceholder":541},[79,58236,58237,58239],{"class":81,"line":837},[79,58238,56957],{"class":232},[79,58240,17604],{"class":228},[79,58242,58243,58245,58247,58249],{"class":81,"line":853},[79,58244,56748],{"class":96},[79,58246,53431],{"class":228},[79,58248,56820],{"class":96},[79,58250,3400],{"class":228},[79,58252,58253,58255,58257,58259,58261],{"class":81,"line":864},[79,58254,56936],{"class":96},[79,58256,53431],{"class":228},[79,58258,3021],{"class":96},[79,58260,53486],{"class":448},[79,58262,3400],{"class":228},[79,58264,58265,58267,58269,58271,58273],{"class":81,"line":869},[79,58266,56827],{"class":96},[79,58268,53431],{"class":228},[79,58270,2940],{"class":96},[79,58272,53486],{"class":448},[79,58274,3400],{"class":228},[79,58276,58277,58279,58281,58283],{"class":81,"line":885},[79,58278,56998],{"class":96},[79,58280,53431],{"class":228},[79,58282,53471],{"class":96},[79,58284,3400],{"class":228},[79,58286,58287,58289,58291,58293],{"class":81,"line":891},[79,58288,57009],{"class":96},[79,58290,53431],{"class":228},[79,58292,53662],{"class":96},[79,58294,3400],{"class":228},[79,58296,58297,58299,58301,58303],{"class":81,"line":896},[79,58298,56748],{"class":96},[79,58300,53431],{"class":228},[79,58302,56820],{"class":96},[79,58304,3400],{"class":228},[79,58306,58307,58309,58311,58313,58315],{"class":81,"line":907},[79,58308,56760],{"class":96},[79,58310,53431],{"class":228},[79,58312,6065],{"class":96},[79,58314,53486],{"class":448},[79,58316,3400],{"class":228},[79,58318,58319,58321,58323,58325,58327],{"class":81,"line":912},[79,58320,56774],{"class":96},[79,58322,53431],{"class":228},[79,58324,2940],{"class":96},[79,58326,53486],{"class":448},[79,58328,3400],{"class":228},[79,58330,58331],{"class":81,"line":935},[79,58332,4272],{"class":228},[79,58334,58335],{"class":81,"line":946},[79,58336,542],{"emptyLinePlaceholder":541},[79,58338,58339,58341,58343],{"class":81,"line":960},[79,58340,56957],{"class":232},[79,58342,57064],{"class":232},[79,58344,17604],{"class":228},[79,58346,58347,58349,58351,58353,58355],{"class":81,"line":975},[79,58348,56760],{"class":96},[79,58350,53431],{"class":228},[79,58352,2940],{"class":96},[79,58354,53486],{"class":448},[79,58356,3400],{"class":228},[79,58358,58359,58361,58363,58365,58367],{"class":81,"line":980},[79,58360,56774],{"class":96},[79,58362,53431],{"class":228},[79,58364,2940],{"class":96},[79,58366,53486],{"class":448},[79,58368,3400],{"class":228},[79,58370,58371,58373,58375,58377,58379,58381,58383,58385,58387,58389,58391,58393],{"class":81,"line":1006},[79,58372,56873],{"class":96},[79,58374,53431],{"class":228},[79,58376,57099],{"class":96},[79,58378,455],{"class":228},[79,58380,759],{"class":96},[79,58382,1020],{"class":228},[79,58384,759],{"class":96},[79,58386,1020],{"class":228},[79,58388,759],{"class":96},[79,58390,1020],{"class":228},[79,58392,57116],{"class":96},[79,58394,4795],{"class":228},[79,58396,58397,58399,58401,58403,58405],{"class":81,"line":1027},[79,58398,57123],{"class":96},[79,58400,53431],{"class":228},[79,58402,2689],{"class":96},[79,58404,53486],{"class":448},[79,58406,3400],{"class":228},[79,58408,58409],{"class":81,"line":1032},[79,58410,4272],{"class":228},[79,58412,58413],{"class":81,"line":1047},[79,58414,542],{"emptyLinePlaceholder":541},[79,58416,58417,58419],{"class":81,"line":1053},[79,58418,57144],{"class":85},[79,58420,17604],{"class":228},[79,58422,58423,58425,58427,58429],{"class":81,"line":1058},[79,58424,56873],{"class":96},[79,58426,53431],{"class":228},[79,58428,57155],{"class":96},[79,58430,3400],{"class":228},[79,58432,58433],{"class":81,"line":1069},[79,58434,4272],{"class":228},[79,58436,58437,58439,58441],{"class":81,"line":1081},[79,58438,54410],{"class":228},[79,58440,2159],{"class":232},[79,58442,53301],{"class":228},[79,58444,58445,58447,58449],{"class":81,"line":1086},[79,58446,53779],{"class":228},[79,58448,53328],{"class":232},[79,58450,53301],{"class":228},[79,58452,58453],{"class":81,"line":1108},[79,58454,542],{"emptyLinePlaceholder":541},[79,58456,58457,58459,58461],{"class":81,"line":1153},[79,58458,229],{"class":228},[79,58460,53794],{"class":232},[79,58462,53301],{"class":228},[79,58464,58465,58467,58469,58471,58473,58475],{"class":81,"line":1158},[79,58466,54138],{"class":228},[79,58468,53605],{"class":232},[79,58470,55477],{"class":85},[79,58472,239],{"class":228},[79,58474,55482],{"class":89},[79,58476,53301],{"class":228},[79,58478,58479,58481,58483,58485,58487,58489],{"class":81,"line":1180},[79,58480,53335],{"class":228},[79,58482,53605],{"class":232},[79,58484,55477],{"class":85},[79,58486,239],{"class":228},[79,58488,57216],{"class":89},[79,58490,53301],{"class":228},[79,58492,58493,58495,58497,58499,58501,58503,58505,58507,58509],{"class":81,"line":1197},[79,58494,57223],{"class":228},[79,58496,3569],{"class":232},[79,58498,57228],{"class":85},[79,58500,239],{"class":228},[79,58502,57233],{"class":89},[79,58504,57236],{"class":85},[79,58506,239],{"class":228},[79,58508,9717],{"class":89},[79,58510,53301],{"class":228},[79,58512,58513,58515,58517],{"class":81,"line":1202},[79,58514,53770],{"class":228},[79,58516,53605],{"class":232},[79,58518,53301],{"class":228},[79,58520,58521,58523,58525,58527,58529,58531],{"class":81,"line":1207},[79,58522,53335],{"class":228},[79,58524,53605],{"class":232},[79,58526,55477],{"class":85},[79,58528,239],{"class":228},[79,58530,57263],{"class":89},[79,58532,53301],{"class":228},[79,58534,58535,58537,58539,58541,58543],{"class":81,"line":1223},[79,58536,57223],{"class":228},[79,58538,19],{"class":232},[79,58540,57274],{"class":228},[79,58542,19],{"class":232},[79,58544,53301],{"class":228},[79,58546,58547,58549,58551],{"class":81,"line":18722},[79,58548,57223],{"class":228},[79,58550,3246],{"class":232},[79,58552,53301],{"class":228},[79,58554,58555,58557,58559,58561,58563,58565,58567,58569],{"class":81,"line":18728},[79,58556,57291],{"class":228},[79,58558,29],{"class":232},[79,58560,55477],{"class":85},[79,58562,239],{"class":228},[79,58564,57300],{"class":89},[79,58566,57303],{"class":228},[79,58568,29],{"class":232},[79,58570,53301],{"class":228},[79,58572,58573,58575,58577,58579,58581],{"class":81,"line":18739},[79,58574,57291],{"class":228},[79,58576,29],{"class":232},[79,58578,57303],{"class":228},[79,58580,29],{"class":232},[79,58582,53301],{"class":228},[79,58584,58585,58587,58589,58591,58593],{"class":81,"line":18762},[79,58586,57291],{"class":228},[79,58588,29],{"class":232},[79,58590,57303],{"class":228},[79,58592,29],{"class":232},[79,58594,53301],{"class":228},[79,58596,58597,58599,58601,58603,58605],{"class":81,"line":18784},[79,58598,57291],{"class":228},[79,58600,29],{"class":232},[79,58602,57303],{"class":228},[79,58604,29],{"class":232},[79,58606,53301],{"class":228},[79,58608,58609,58611,58613,58615,58617],{"class":81,"line":18789},[79,58610,57291],{"class":228},[79,58612,29],{"class":232},[79,58614,57303],{"class":228},[79,58616,29],{"class":232},[79,58618,53301],{"class":228},[79,58620,58621,58623,58625,58627,58629],{"class":81,"line":18795},[79,58622,57291],{"class":228},[79,58624,29],{"class":232},[79,58626,57303],{"class":228},[79,58628,29],{"class":232},[79,58630,53301],{"class":228},[79,58632,58633,58635,58637,58639,58641],{"class":81,"line":18809},[79,58634,57291],{"class":228},[79,58636,29],{"class":232},[79,58638,57303],{"class":228},[79,58640,29],{"class":232},[79,58642,53301],{"class":228},[79,58644,58645,58647,58649,58651,58653],{"class":81,"line":18822},[79,58646,57291],{"class":228},[79,58648,29],{"class":232},[79,58650,57303],{"class":228},[79,58652,29],{"class":232},[79,58654,53301],{"class":228},[79,58656,58657,58659,58661],{"class":81,"line":18827},[79,58658,57396],{"class":228},[79,58660,3246],{"class":232},[79,58662,53301],{"class":228},[79,58664,58665,58667,58669],{"class":81,"line":18841},[79,58666,53770],{"class":228},[79,58668,53605],{"class":232},[79,58670,53301],{"class":228},[79,58672,58673,58675,58677],{"class":81,"line":18846},[79,58674,54410],{"class":228},[79,58676,53605],{"class":232},[79,58678,53301],{"class":228},[79,58680,58681,58683,58685],{"class":81,"line":18852},[79,58682,54138],{"class":228},[79,58684,53807],{"class":232},[79,58686,53301],{"class":228},[79,58688,58689,58691,58694,58696],{"class":81,"line":18857},[79,58690,13256],{"class":448},[79,58692,58693],{"class":96}," sliderData",[79,58695,556],{"class":448},[79,58697,57436],{"class":228},[79,58699,58700,58702,58704,58706,58708,58710,58712],{"class":81,"line":18871},[79,58701,57441],{"class":228},[79,58703,57444],{"class":89},[79,58705,57447],{"class":228},[79,58707,57450],{"class":89},[79,58709,57453],{"class":228},[79,58711,57456],{"class":89},[79,58713,57459],{"class":228},[79,58715,58716,58718,58720,58722,58724,58726,58728],{"class":81,"line":18876},[79,58717,57441],{"class":228},[79,58719,57466],{"class":89},[79,58721,57447],{"class":228},[79,58723,57471],{"class":89},[79,58725,57453],{"class":228},[79,58727,57476],{"class":89},[79,58729,57459],{"class":228},[79,58731,58732,58734,58736,58738,58740,58742,58744],{"class":81,"line":18881},[79,58733,57441],{"class":228},[79,58735,57485],{"class":89},[79,58737,57447],{"class":228},[79,58739,57490],{"class":89},[79,58741,57453],{"class":228},[79,58743,57495],{"class":89},[79,58745,57459],{"class":228},[79,58747,58748,58750,58752,58754,58756,58758,58760],{"class":81,"line":18895},[79,58749,57441],{"class":228},[79,58751,57504],{"class":89},[79,58753,57447],{"class":228},[79,58755,57509],{"class":89},[79,58757,57453],{"class":228},[79,58759,57514],{"class":89},[79,58761,57459],{"class":228},[79,58763,58764,58766,58768,58770,58772,58774,58776],{"class":81,"line":18907},[79,58765,57441],{"class":228},[79,58767,57523],{"class":89},[79,58769,57447],{"class":228},[79,58771,57528],{"class":89},[79,58773,57453],{"class":228},[79,58775,57533],{"class":89},[79,58777,57459],{"class":228},[79,58779,58780,58782,58784,58786,58788,58790,58792],{"class":81,"line":18912},[79,58781,57441],{"class":228},[79,58783,57542],{"class":89},[79,58785,57447],{"class":228},[79,58787,57547],{"class":89},[79,58789,57453],{"class":228},[79,58791,57552],{"class":89},[79,58793,57459],{"class":228},[79,58795,58796,58798,58800,58802,58804,58806,58808],{"class":81,"line":18925},[79,58797,57441],{"class":228},[79,58799,57561],{"class":89},[79,58801,57447],{"class":228},[79,58803,57566],{"class":89},[79,58805,57453],{"class":228},[79,58807,57571],{"class":89},[79,58809,57459],{"class":228},[79,58811,58812,58814,58816,58818,58820,58822,58824],{"class":81,"line":18930},[79,58813,57441],{"class":228},[79,58815,57580],{"class":89},[79,58817,57447],{"class":228},[79,58819,57585],{"class":89},[79,58821,57453],{"class":228},[79,58823,57590],{"class":89},[79,58825,57593],{"class":228},[79,58827,58828],{"class":81,"line":18935},[79,58829,55100],{"class":228},[79,58831,58832],{"class":81,"line":18940},[79,58833,58834],{"class":2313},"    \u002F\u002F 1.获取元素\n",[79,58836,58837,58839,58841,58843,58845,58847,58849,58851],{"class":81,"line":18953},[79,58838,13256],{"class":448},[79,58840,57604],{"class":96},[79,58842,556],{"class":448},[79,58844,56385],{"class":228},[79,58846,56388],{"class":85},[79,58848,455],{"class":228},[79,58850,57615],{"class":89},[79,58852,850],{"class":228},[79,58854,58855,58857,58859,58861,58863,58865,58867,58869],{"class":81,"line":18958},[79,58856,13256],{"class":448},[79,58858,8890],{"class":96},[79,58860,556],{"class":448},[79,58862,56385],{"class":228},[79,58864,56388],{"class":85},[79,58866,455],{"class":228},[79,58868,57634],{"class":89},[79,58870,850],{"class":228},[79,58872,58873,58875,58877,58879],{"class":81,"line":34631},[79,58874,54213],{"class":448},[79,58876,11493],{"class":228},[79,58878,239],{"class":448},[79,58880,49328],{"class":96},[79,58882,58883],{"class":81,"line":34637},[79,58884,58885],{"class":2313},"    \u002F\u002F 2.开启定时器\n",[79,58887,58888],{"class":81,"line":34643},[79,58889,58890],{"class":2313},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[79,58892,58893,58896,58898,58900],{"class":81,"line":34649},[79,58894,58895],{"class":85},"    setInterval",[79,58897,455],{"class":228},[79,58899,56438],{"class":448},[79,58901,56441],{"class":228},[79,58903,58904,58906],{"class":81,"line":34655},[79,58905,56446],{"class":228},[79,58907,4778],{"class":448},[79,58909,58910,58912,58914,58916,58919,58921],{"class":81,"line":34666},[79,58911,56469],{"class":448},[79,58913,56472],{"class":228},[79,58915,3805],{"class":448},[79,58917,58918],{"class":228}," sliderData.",[79,58920,53962],{"class":96},[79,58922,14476],{"class":228},[79,58924,58925,58928,58930],{"class":81,"line":34672},[79,58926,58927],{"class":228},"        i ",[79,58929,239],{"class":448},[79,58931,49328],{"class":96},[79,58933,58934],{"class":81,"line":34692},[79,58935,54391],{"class":228},[79,58937,58938],{"class":81,"line":34698},[79,58939,58940],{"class":2313},"      \u002F\u002F 更换图片路径\n",[79,58942,58943,58945,58947],{"class":81,"line":34709},[79,58944,57710],{"class":228},[79,58946,239],{"class":448},[79,58948,58949],{"class":228}," sliderData[i].url\n",[79,58951,58952],{"class":81,"line":34715},[79,58953,58954],{"class":2313},"      \u002F\u002F 把文字写到p里面\n",[79,58956,58957,58959,58961],{"class":81,"line":34721},[79,58958,57720],{"class":228},[79,58960,239],{"class":448},[79,58962,58963],{"class":228}," sliderData[i].title\n",[79,58965,58966],{"class":81,"line":34727},[79,58967,58968],{"class":2313},"      \u002F\u002F 小圆点\n",[79,58970,58971],{"class":81,"line":34733},[79,58972,58973],{"class":2313},"      \u002F\u002F 先删除以前的active\n",[79,58975,58976],{"class":81,"line":34739},[79,58977,58978],{"class":2313},"      \u002F\u002F 只让当前li添加active\n",[79,58980,58981,58983,58985,58987,58990,58993,58996,58998,59000],{"class":81,"line":34745},[79,58982,57760],{"class":228},[79,58984,56388],{"class":85},[79,58986,455],{"class":228},[79,58988,58989],{"class":89},"'.slider-footer .activate'",[79,58991,58992],{"class":228},").classList.",[79,58994,58995],{"class":85},"remove",[79,58997,455],{"class":228},[79,58999,57778],{"class":89},[79,59001,850],{"class":228},[79,59003,59004,59006,59008,59010,59013,59015,59017,59019,59022,59024,59026,59028,59030],{"class":81,"line":34751},[79,59005,57760],{"class":228},[79,59007,56388],{"class":85},[79,59009,455],{"class":228},[79,59011,59012],{"class":89},"`.slider-footer ul li:nth-child(${",[79,59014,2684],{"class":228},[79,59016,47561],{"class":448},[79,59018,27137],{"class":96},[79,59020,59021],{"class":89},"})`",[79,59023,58992],{"class":228},[79,59025,7402],{"class":85},[79,59027,455],{"class":228},[79,59029,57778],{"class":89},[79,59031,850],{"class":228},[79,59033,59034],{"class":81,"line":34771},[79,59035,542],{"emptyLinePlaceholder":541},[79,59037,59038,59040,59042],{"class":81,"line":34777},[79,59039,56524],{"class":228},[79,59041,929],{"class":96},[79,59043,850],{"class":228},[79,59045,59046],{"class":81,"line":34793},[79,59047,542],{"emptyLinePlaceholder":541},[79,59049,59050,59052,59054],{"class":81,"line":34799},[79,59051,54410],{"class":228},[79,59053,53807],{"class":232},[79,59055,53301],{"class":228},[79,59057,59058,59060,59062],{"class":81,"line":34813},[79,59059,53779],{"class":228},[79,59061,53794],{"class":232},[79,59063,53301],{"class":228},[79,59065,59066],{"class":81,"line":34819},[79,59067,542],{"emptyLinePlaceholder":541},[79,59069,59070,59072,59074],{"class":81,"line":34834},[79,59071,53779],{"class":228},[79,59073,52630],{"class":232},[79,59075,53301],{"class":228},[339,59077,59079],{"id":59078},"_317-重要知识点","3.1.7 重要知识点",[19,59081,59082,59083],{},"浏览器在渲染文本时， ",[2398,59084,59085],{},"没有空格或换行符就没有“断行点”",[19,59087,59088],{},[3569,59089],{"alt":57,"src":59090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,59092,59093],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,59095,59096],{},[3569,59097],{"alt":57,"src":59098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,59100,59101],{},[3569,59102],{"alt":57,"src":59103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,59105,59107],{"id":59106},"_32-dom事件基础","3.2 DOM事件基础",[339,59109,59111],{"id":59110},"_321-事件监听","3.2.1 事件监听",[19,59113,59114],{},[3569,59115],{"alt":57,"src":59116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,59118,59119],{},"事件监听有响应的发生",[19,59121,59122],{},[3569,59123],{"alt":57,"src":59124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,59126,59127],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,59129,59130],{},"对于有名函数,要执行的函数名后边不要加()",[339,59132,59134],{"id":59133},"_322-随机点名案例","3.2.2 随机点名案例",[51,59136,59138],{"className":52628,"code":59137,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      margin: 0;\n      padding: 0;\n    }\n\n    h2 {\n      text-align: center;\n    }\n\n    .box {\n      width: 600px;\n      margin: 50px auto;\n      display: flex;\n      font-size: 25px;\n      line-height: 40px;\n    }\n\n    .qs {\n\n      width: 450px;\n      height: 40px;\n      color: red;\n\n    }\n\n    .btns {\n      text-align: center;\n    }\n\n    .btns button {\n      width: 120px;\n      height: 35px;\n      margin: 0 50px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ch2>随机点名\u003C\u002Fh2>\n  \u003Cdiv class=\"box\">\n    \u003Cspan>名字是：\u003C\u002Fspan>\n    \u003Cdiv class=\"qs\">这里显示姓名\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"btns\">\n    \u003Cbutton class=\"start\">开始\u003C\u002Fbutton>\n    \u003Cbutton class=\"end\">结束\u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n\n  \u003Cscript>\n    \u002F\u002F 数据数组\n    const arr = ['马超', '黄忠', '赵云', '关羽', '张飞']\n    const qs = document.querySelector('.qs')\n    \u002F\u002F 1.业务1.开始按钮模块\n    const start = document.querySelector('.start')\n    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n    let timerId = 0\n    \u002F\u002F 随机号要全局变量\n    let random = 0\n    \u002F\u002F 1.1 添加点击事件\n    start.addEventListener('click', function () {\n      timerId = setInterval(function () {\n        \u002F\u002F 随机数\n        random = parseInt(Math.random() * arr.length)\n        qs.innerHTML = arr[random]\n      }, 35)\n      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n      if (arr.length === 1) {\n        \u002F\u002F start.disabled = true\n        \u002F\u002F end.disabled = true\n        \u002F\u002F 可以合起来写\n        start.disabled = end.disabled = true\n      }\n    })\n    \u002F\u002F 1.2 关闭按钮模块\n    const end = document.querySelector('.end')\n    end.addEventListener('click', function () {\n      clearInterval(timerId)\n      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n      arr.splice(random, 1)\n    })\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,59139,59140,59150,59164,59168,59176,59190,59210,59222,59230,59236,59246,59256,59260,59264,59271,59282,59286,59290,59296,59308,59322,59332,59344,59357,59361,59365,59372,59376,59389,59401,59413,59417,59421,59425,59432,59442,59446,59450,59459,59471,59483,59498,59502,59510,59518,59522,59530,59543,59557,59570,59590,59598,59613,59633,59653,59661,59665,59673,59678,59714,59734,59739,59758,59763,59774,59779,59790,59795,59814,59829,59834,59860,59870,59879,59884,59900,59905,59910,59915,59930,59934,59938,59943,59962,59979,59987,59992,60007,60011,60015,60023,60031,60035],{"__ignoreMap":57},[79,59141,59142,59144,59146,59148],{"class":81,"line":82},[79,59143,53292],{"class":228},[79,59145,53295],{"class":232},[79,59147,53298],{"class":85},[79,59149,53301],{"class":228},[79,59151,59152,59154,59156,59158,59160,59162],{"class":81,"line":167},[79,59153,229],{"class":228},[79,59155,52630],{"class":232},[79,59157,53310],{"class":85},[79,59159,239],{"class":228},[79,59161,53315],{"class":89},[79,59163,53301],{"class":228},[79,59165,59166],{"class":81,"line":178},[79,59167,542],{"emptyLinePlaceholder":541},[79,59169,59170,59172,59174],{"class":81,"line":545},[79,59171,229],{"class":228},[79,59173,53328],{"class":232},[79,59175,53301],{"class":228},[79,59177,59178,59180,59182,59184,59186,59188],{"class":81,"line":550},[79,59179,54138],{"class":228},[79,59181,53338],{"class":232},[79,59183,53341],{"class":85},[79,59185,239],{"class":228},[79,59187,53346],{"class":89},[79,59189,53301],{"class":228},[79,59191,59192,59194,59196,59198,59200,59202,59204,59206,59208],{"class":81,"line":562},[79,59193,54138],{"class":228},[79,59195,53338],{"class":232},[79,59197,236],{"class":85},[79,59199,239],{"class":228},[79,59201,53385],{"class":89},[79,59203,53365],{"class":85},[79,59205,239],{"class":228},[79,59207,53392],{"class":89},[79,59209,53301],{"class":228},[79,59211,59212,59214,59216,59218,59220],{"class":81,"line":568},[79,59213,54138],{"class":228},[79,59215,53401],{"class":232},[79,59217,53404],{"class":228},[79,59219,53401],{"class":232},[79,59221,53301],{"class":228},[79,59223,59224,59226,59228],{"class":81,"line":574},[79,59225,54138],{"class":228},[79,59227,2159],{"class":232},[79,59229,53301],{"class":228},[79,59231,59232,59234],{"class":81,"line":579},[79,59233,8470],{"class":232},[79,59235,17604],{"class":228},[79,59237,59238,59240,59242,59244],{"class":81,"line":585},[79,59239,56695],{"class":96},[79,59241,53431],{"class":228},[79,59243,759],{"class":96},[79,59245,3400],{"class":228},[79,59247,59248,59250,59252,59254],{"class":81,"line":591},[79,59249,56684],{"class":96},[79,59251,53431],{"class":228},[79,59253,759],{"class":96},[79,59255,3400],{"class":228},[79,59257,59258],{"class":81,"line":596},[79,59259,4272],{"class":228},[79,59261,59262],{"class":81,"line":602},[79,59263,542],{"emptyLinePlaceholder":541},[79,59265,59266,59269],{"class":81,"line":608},[79,59267,59268],{"class":232},"    h2",[79,59270,17604],{"class":228},[79,59272,59273,59276,59278,59280],{"class":81,"line":614},[79,59274,59275],{"class":96},"      text-align",[79,59277,53431],{"class":228},[79,59279,53586],{"class":96},[79,59281,3400],{"class":228},[79,59283,59284],{"class":81,"line":619},[79,59285,4272],{"class":228},[79,59287,59288],{"class":81,"line":625},[79,59289,542],{"emptyLinePlaceholder":541},[79,59291,59292,59294],{"class":81,"line":631},[79,59293,56741],{"class":85},[79,59295,17604],{"class":228},[79,59297,59298,59300,59302,59304,59306],{"class":81,"line":637},[79,59299,56760],{"class":96},[79,59301,53431],{"class":228},[79,59303,3645],{"class":96},[79,59305,53486],{"class":448},[79,59307,3400],{"class":228},[79,59309,59310,59312,59314,59316,59318,59320],{"class":81,"line":643},[79,59311,56695],{"class":96},[79,59313,53431],{"class":228},[79,59315,2896],{"class":96},[79,59317,53486],{"class":448},[79,59319,53550],{"class":96},[79,59321,3400],{"class":228},[79,59323,59324,59326,59328,59330],{"class":81,"line":649},[79,59325,56998],{"class":96},[79,59327,53431],{"class":228},[79,59329,53471],{"class":96},[79,59331,3400],{"class":228},[79,59333,59334,59336,59338,59340,59342],{"class":81,"line":655},[79,59335,56911],{"class":96},[79,59337,53431],{"class":228},[79,59339,3065],{"class":96},[79,59341,53486],{"class":448},[79,59343,3400],{"class":228},[79,59345,59346,59349,59351,59353,59355],{"class":81,"line":660},[79,59347,59348],{"class":96},"      line-height",[79,59350,53431],{"class":228},[79,59352,2644],{"class":96},[79,59354,53486],{"class":448},[79,59356,3400],{"class":228},[79,59358,59359],{"class":81,"line":666},[79,59360,4272],{"class":228},[79,59362,59363],{"class":81,"line":672},[79,59364,542],{"emptyLinePlaceholder":541},[79,59366,59367,59370],{"class":81,"line":678},[79,59368,59369],{"class":85},"    .qs",[79,59371,17604],{"class":228},[79,59373,59374],{"class":81,"line":684},[79,59375,542],{"emptyLinePlaceholder":541},[79,59377,59378,59380,59382,59385,59387],{"class":81,"line":690},[79,59379,56760],{"class":96},[79,59381,53431],{"class":228},[79,59383,59384],{"class":96},"450",[79,59386,53486],{"class":448},[79,59388,3400],{"class":228},[79,59390,59391,59393,59395,59397,59399],{"class":81,"line":695},[79,59392,56774],{"class":96},[79,59394,53431],{"class":228},[79,59396,2644],{"class":96},[79,59398,53486],{"class":448},[79,59400,3400],{"class":228},[79,59402,59403,59406,59408,59411],{"class":81,"line":700},[79,59404,59405],{"class":96},"      color",[79,59407,53431],{"class":228},[79,59409,59410],{"class":96},"red",[79,59412,3400],{"class":228},[79,59414,59415],{"class":81,"line":712},[79,59416,542],{"emptyLinePlaceholder":541},[79,59418,59419],{"class":81,"line":721},[79,59420,4272],{"class":228},[79,59422,59423],{"class":81,"line":726},[79,59424,542],{"emptyLinePlaceholder":541},[79,59426,59427,59430],{"class":81,"line":731},[79,59428,59429],{"class":85},"    .btns",[79,59431,17604],{"class":228},[79,59433,59434,59436,59438,59440],{"class":81,"line":748},[79,59435,59275],{"class":96},[79,59437,53431],{"class":228},[79,59439,53586],{"class":96},[79,59441,3400],{"class":228},[79,59443,59444],{"class":81,"line":765},[79,59445,4272],{"class":228},[79,59447,59448],{"class":81,"line":780},[79,59449,542],{"emptyLinePlaceholder":541},[79,59451,59452,59454,59457],{"class":81,"line":811},[79,59453,59429],{"class":85},[79,59455,59456],{"class":232}," button",[79,59458,17604],{"class":228},[79,59460,59461,59463,59465,59467,59469],{"class":81,"line":816},[79,59462,56760],{"class":96},[79,59464,53431],{"class":228},[79,59466,3057],{"class":96},[79,59468,53486],{"class":448},[79,59470,3400],{"class":228},[79,59472,59473,59475,59477,59479,59481],{"class":81,"line":821},[79,59474,56774],{"class":96},[79,59476,53431],{"class":228},[79,59478,2517],{"class":96},[79,59480,53486],{"class":448},[79,59482,3400],{"class":228},[79,59484,59485,59487,59489,59491,59494,59496],{"class":81,"line":837},[79,59486,56695],{"class":96},[79,59488,53431],{"class":228},[79,59490,759],{"class":96},[79,59492,59493],{"class":96}," 50",[79,59495,53486],{"class":448},[79,59497,3400],{"class":228},[79,59499,59500],{"class":81,"line":853},[79,59501,4272],{"class":228},[79,59503,59504,59506,59508],{"class":81,"line":864},[79,59505,54410],{"class":228},[79,59507,2159],{"class":232},[79,59509,53301],{"class":228},[79,59511,59512,59514,59516],{"class":81,"line":869},[79,59513,53779],{"class":228},[79,59515,53328],{"class":232},[79,59517,53301],{"class":228},[79,59519,59520],{"class":81,"line":885},[79,59521,542],{"emptyLinePlaceholder":541},[79,59523,59524,59526,59528],{"class":81,"line":891},[79,59525,229],{"class":228},[79,59527,53794],{"class":232},[79,59529,53301],{"class":228},[79,59531,59532,59534,59536,59539,59541],{"class":81,"line":896},[79,59533,54138],{"class":228},[79,59535,14],{"class":232},[79,59537,59538],{"class":228},">随机点名\u003C\u002F",[79,59540,14],{"class":232},[79,59542,53301],{"class":228},[79,59544,59545,59547,59549,59551,59553,59555],{"class":81,"line":907},[79,59546,54138],{"class":228},[79,59548,53605],{"class":232},[79,59550,55477],{"class":85},[79,59552,239],{"class":228},[79,59554,55482],{"class":89},[79,59556,53301],{"class":228},[79,59558,59559,59561,59563,59566,59568],{"class":81,"line":912},[79,59560,53335],{"class":228},[79,59562,79],{"class":232},[79,59564,59565],{"class":228},">名字是：\u003C\u002F",[79,59567,79],{"class":232},[79,59569,53301],{"class":228},[79,59571,59572,59574,59576,59578,59580,59583,59586,59588],{"class":81,"line":935},[79,59573,53335],{"class":228},[79,59575,53605],{"class":232},[79,59577,55477],{"class":85},[79,59579,239],{"class":228},[79,59581,59582],{"class":89},"\"qs\"",[79,59584,59585],{"class":228},">这里显示姓名\u003C\u002F",[79,59587,53605],{"class":232},[79,59589,53301],{"class":228},[79,59591,59592,59594,59596],{"class":81,"line":946},[79,59593,54410],{"class":228},[79,59595,53605],{"class":232},[79,59597,53301],{"class":228},[79,59599,59600,59602,59604,59606,59608,59611],{"class":81,"line":960},[79,59601,54138],{"class":228},[79,59603,53605],{"class":232},[79,59605,55477],{"class":85},[79,59607,239],{"class":228},[79,59609,59610],{"class":89},"\"btns\"",[79,59612,53301],{"class":228},[79,59614,59615,59617,59619,59621,59623,59626,59629,59631],{"class":81,"line":975},[79,59616,53335],{"class":228},[79,59618,55877],{"class":232},[79,59620,55477],{"class":85},[79,59622,239],{"class":228},[79,59624,59625],{"class":89},"\"start\"",[79,59627,59628],{"class":228},">开始\u003C\u002F",[79,59630,55877],{"class":232},[79,59632,53301],{"class":228},[79,59634,59635,59637,59639,59641,59643,59646,59649,59651],{"class":81,"line":980},[79,59636,53335],{"class":228},[79,59638,55877],{"class":232},[79,59640,55477],{"class":85},[79,59642,239],{"class":228},[79,59644,59645],{"class":89},"\"end\"",[79,59647,59648],{"class":228},">结束\u003C\u002F",[79,59650,55877],{"class":232},[79,59652,53301],{"class":228},[79,59654,59655,59657,59659],{"class":81,"line":1006},[79,59656,54410],{"class":228},[79,59658,53605],{"class":232},[79,59660,53301],{"class":228},[79,59662,59663],{"class":81,"line":1027},[79,59664,542],{"emptyLinePlaceholder":541},[79,59666,59667,59669,59671],{"class":81,"line":1032},[79,59668,54138],{"class":228},[79,59670,53807],{"class":232},[79,59672,53301],{"class":228},[79,59674,59675],{"class":81,"line":1047},[79,59676,59677],{"class":2313},"    \u002F\u002F 数据数组\n",[79,59679,59680,59682,59685,59687,59689,59692,59694,59697,59699,59702,59704,59707,59709,59712],{"class":81,"line":1053},[79,59681,13256],{"class":448},[79,59683,59684],{"class":96}," arr",[79,59686,556],{"class":448},[79,59688,54220],{"class":228},[79,59690,59691],{"class":89},"'马超'",[79,59693,1020],{"class":228},[79,59695,59696],{"class":89},"'黄忠'",[79,59698,1020],{"class":228},[79,59700,59701],{"class":89},"'赵云'",[79,59703,1020],{"class":228},[79,59705,59706],{"class":89},"'关羽'",[79,59708,1020],{"class":228},[79,59710,59711],{"class":89},"'张飞'",[79,59713,762],{"class":228},[79,59715,59716,59718,59721,59723,59725,59727,59729,59732],{"class":81,"line":1058},[79,59717,13256],{"class":448},[79,59719,59720],{"class":96}," qs",[79,59722,556],{"class":448},[79,59724,56385],{"class":228},[79,59726,56388],{"class":85},[79,59728,455],{"class":228},[79,59730,59731],{"class":89},"'.qs'",[79,59733,850],{"class":228},[79,59735,59736],{"class":81,"line":1069},[79,59737,59738],{"class":2313},"    \u002F\u002F 1.业务1.开始按钮模块\n",[79,59740,59741,59743,59745,59747,59749,59751,59753,59756],{"class":81,"line":1081},[79,59742,13256],{"class":448},[79,59744,6255],{"class":96},[79,59746,556],{"class":448},[79,59748,56385],{"class":228},[79,59750,56388],{"class":85},[79,59752,455],{"class":228},[79,59754,59755],{"class":89},"'.start'",[79,59757,850],{"class":228},[79,59759,59760],{"class":81,"line":1086},[79,59761,59762],{"class":2313},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[79,59764,59765,59767,59770,59772],{"class":81,"line":1108},[79,59766,54213],{"class":448},[79,59768,59769],{"class":228}," timerId ",[79,59771,239],{"class":448},[79,59773,49328],{"class":96},[79,59775,59776],{"class":81,"line":1153},[79,59777,59778],{"class":2313},"    \u002F\u002F 随机号要全局变量\n",[79,59780,59781,59783,59786,59788],{"class":81,"line":1158},[79,59782,54213],{"class":448},[79,59784,59785],{"class":228}," random ",[79,59787,239],{"class":448},[79,59789,49328],{"class":96},[79,59791,59792],{"class":81,"line":1180},[79,59793,59794],{"class":2313},"    \u002F\u002F 1.1 添加点击事件\n",[79,59796,59797,59800,59803,59805,59808,59810,59812],{"class":81,"line":1197},[79,59798,59799],{"class":228},"    start.",[79,59801,59802],{"class":85},"addEventListener",[79,59804,455],{"class":228},[79,59806,59807],{"class":89},"'click'",[79,59809,1020],{"class":228},[79,59811,56438],{"class":448},[79,59813,56441],{"class":228},[79,59815,59816,59819,59821,59823,59825,59827],{"class":81,"line":1202},[79,59817,59818],{"class":228},"      timerId ",[79,59820,239],{"class":448},[79,59822,56433],{"class":85},[79,59824,455],{"class":228},[79,59826,56438],{"class":448},[79,59828,56441],{"class":228},[79,59830,59831],{"class":81,"line":1207},[79,59832,59833],{"class":2313},"        \u002F\u002F 随机数\n",[79,59835,59836,59839,59841,59844,59847,59850,59852,59854,59856,59858],{"class":81,"line":1223},[79,59837,59838],{"class":228},"        random ",[79,59840,239],{"class":448},[79,59842,59843],{"class":85}," parseInt",[79,59845,59846],{"class":228},"(Math.",[79,59848,59849],{"class":85},"random",[79,59851,15084],{"class":228},[79,59853,473],{"class":448},[79,59855,53959],{"class":228},[79,59857,53962],{"class":96},[79,59859,850],{"class":228},[79,59861,59862,59865,59867],{"class":81,"line":18722},[79,59863,59864],{"class":228},"        qs.innerHTML ",[79,59866,239],{"class":448},[79,59868,59869],{"class":228}," arr[random]\n",[79,59871,59872,59875,59877],{"class":81,"line":18728},[79,59873,59874],{"class":228},"      }, ",[79,59876,2517],{"class":96},[79,59878,850],{"class":228},[79,59880,59881],{"class":81,"line":18739},[79,59882,59883],{"class":2313},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[79,59885,59886,59888,59891,59893,59896,59898],{"class":81,"line":18762},[79,59887,56469],{"class":448},[79,59889,59890],{"class":228}," (arr.",[79,59892,53962],{"class":96},[79,59894,59895],{"class":448}," ===",[79,59897,27137],{"class":96},[79,59899,14476],{"class":228},[79,59901,59902],{"class":81,"line":18784},[79,59903,59904],{"class":2313},"        \u002F\u002F start.disabled = true\n",[79,59906,59907],{"class":81,"line":18789},[79,59908,59909],{"class":2313},"        \u002F\u002F end.disabled = true\n",[79,59911,59912],{"class":81,"line":18795},[79,59913,59914],{"class":2313},"        \u002F\u002F 可以合起来写\n",[79,59916,59917,59920,59922,59925,59927],{"class":81,"line":18809},[79,59918,59919],{"class":228},"        start.disabled ",[79,59921,239],{"class":448},[79,59923,59924],{"class":228}," end.disabled ",[79,59926,239],{"class":448},[79,59928,59929],{"class":96}," true\n",[79,59931,59932],{"class":81,"line":18822},[79,59933,54391],{"class":228},[79,59935,59936],{"class":81,"line":18827},[79,59937,35458],{"class":228},[79,59939,59940],{"class":81,"line":18841},[79,59941,59942],{"class":2313},"    \u002F\u002F 1.2 关闭按钮模块\n",[79,59944,59945,59947,59949,59951,59953,59955,59957,59960],{"class":81,"line":18846},[79,59946,13256],{"class":448},[79,59948,6271],{"class":96},[79,59950,556],{"class":448},[79,59952,56385],{"class":228},[79,59954,56388],{"class":85},[79,59956,455],{"class":228},[79,59958,59959],{"class":89},"'.end'",[79,59961,850],{"class":228},[79,59963,59964,59967,59969,59971,59973,59975,59977],{"class":81,"line":18852},[79,59965,59966],{"class":228},"    end.",[79,59968,59802],{"class":85},[79,59970,455],{"class":228},[79,59972,59807],{"class":89},[79,59974,1020],{"class":228},[79,59976,56438],{"class":448},[79,59978,56441],{"class":228},[79,59980,59981,59984],{"class":81,"line":18857},[79,59982,59983],{"class":85},"      clearInterval",[79,59985,59986],{"class":228},"(timerId)\n",[79,59988,59989],{"class":81,"line":18871},[79,59990,59991],{"class":2313},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[79,59993,59994,59997,60000,60003,60005],{"class":81,"line":18876},[79,59995,59996],{"class":228},"      arr.",[79,59998,59999],{"class":85},"splice",[79,60001,60002],{"class":228},"(random, ",[79,60004,775],{"class":96},[79,60006,850],{"class":228},[79,60008,60009],{"class":81,"line":18881},[79,60010,35458],{"class":228},[79,60012,60013],{"class":81,"line":18895},[79,60014,542],{"emptyLinePlaceholder":541},[79,60016,60017,60019,60021],{"class":81,"line":18907},[79,60018,54410],{"class":228},[79,60020,53807],{"class":232},[79,60022,53301],{"class":228},[79,60024,60025,60027,60029],{"class":81,"line":18912},[79,60026,53779],{"class":228},[79,60028,53794],{"class":232},[79,60030,53301],{"class":228},[79,60032,60033],{"class":81,"line":18925},[79,60034,542],{"emptyLinePlaceholder":541},[79,60036,60037,60039,60041],{"class":81,"line":18930},[79,60038,53779],{"class":228},[79,60040,52630],{"class":232},[79,60042,53301],{"class":228},[19,60044,60045],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[339,60047,60049],{"id":60048},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[51,60051,60053],{"className":52628,"code":60052,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const btn = document.querySelector('button')\n    btn.addEventListener('click', function () {\n      const num = Math.random()\n      console.log(num)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,60054,60055,60065,60079,60083,60091,60105,60125,60137,60145,60149,60157,60169,60177,60196,60213,60229,60239,60243,60251,60259,60263],{"__ignoreMap":57},[79,60056,60057,60059,60061,60063],{"class":81,"line":82},[79,60058,53292],{"class":228},[79,60060,53295],{"class":232},[79,60062,53298],{"class":85},[79,60064,53301],{"class":228},[79,60066,60067,60069,60071,60073,60075,60077],{"class":81,"line":167},[79,60068,229],{"class":228},[79,60070,52630],{"class":232},[79,60072,53310],{"class":85},[79,60074,239],{"class":228},[79,60076,53315],{"class":89},[79,60078,53301],{"class":228},[79,60080,60081],{"class":81,"line":178},[79,60082,542],{"emptyLinePlaceholder":541},[79,60084,60085,60087,60089],{"class":81,"line":545},[79,60086,229],{"class":228},[79,60088,53328],{"class":232},[79,60090,53301],{"class":228},[79,60092,60093,60095,60097,60099,60101,60103],{"class":81,"line":550},[79,60094,54138],{"class":228},[79,60096,53338],{"class":232},[79,60098,53341],{"class":85},[79,60100,239],{"class":228},[79,60102,53346],{"class":89},[79,60104,53301],{"class":228},[79,60106,60107,60109,60111,60113,60115,60117,60119,60121,60123],{"class":81,"line":562},[79,60108,54138],{"class":228},[79,60110,53338],{"class":232},[79,60112,236],{"class":85},[79,60114,239],{"class":228},[79,60116,53385],{"class":89},[79,60118,53365],{"class":85},[79,60120,239],{"class":228},[79,60122,53392],{"class":89},[79,60124,53301],{"class":228},[79,60126,60127,60129,60131,60133,60135],{"class":81,"line":568},[79,60128,54138],{"class":228},[79,60130,53401],{"class":232},[79,60132,53404],{"class":228},[79,60134,53401],{"class":232},[79,60136,53301],{"class":228},[79,60138,60139,60141,60143],{"class":81,"line":574},[79,60140,53779],{"class":228},[79,60142,53328],{"class":232},[79,60144,53301],{"class":228},[79,60146,60147],{"class":81,"line":579},[79,60148,542],{"emptyLinePlaceholder":541},[79,60150,60151,60153,60155],{"class":81,"line":585},[79,60152,229],{"class":228},[79,60154,53794],{"class":232},[79,60156,53301],{"class":228},[79,60158,60159,60161,60163,60165,60167],{"class":81,"line":591},[79,60160,54138],{"class":228},[79,60162,55877],{"class":232},[79,60164,55883],{"class":228},[79,60166,55877],{"class":232},[79,60168,53301],{"class":228},[79,60170,60171,60173,60175],{"class":81,"line":596},[79,60172,54138],{"class":228},[79,60174,53807],{"class":232},[79,60176,53301],{"class":228},[79,60178,60179,60181,60183,60185,60187,60189,60191,60194],{"class":81,"line":602},[79,60180,13256],{"class":448},[79,60182,56380],{"class":96},[79,60184,556],{"class":448},[79,60186,56385],{"class":228},[79,60188,56388],{"class":85},[79,60190,455],{"class":228},[79,60192,60193],{"class":89},"'button'",[79,60195,850],{"class":228},[79,60197,60198,60201,60203,60205,60207,60209,60211],{"class":81,"line":608},[79,60199,60200],{"class":228},"    btn.",[79,60202,59802],{"class":85},[79,60204,455],{"class":228},[79,60206,59807],{"class":89},[79,60208,1020],{"class":228},[79,60210,56438],{"class":448},[79,60212,56441],{"class":228},[79,60214,60215,60218,60220,60222,60225,60227],{"class":81,"line":614},[79,60216,60217],{"class":448},"      const",[79,60219,4325],{"class":96},[79,60221,556],{"class":448},[79,60223,60224],{"class":228}," Math.",[79,60226,59849],{"class":85},[79,60228,4061],{"class":228},[79,60230,60231,60234,60237],{"class":81,"line":619},[79,60232,60233],{"class":228},"      console.",[79,60235,60236],{"class":85},"log",[79,60238,2271],{"class":228},[79,60240,60241],{"class":81,"line":625},[79,60242,35458],{"class":228},[79,60244,60245,60247,60249],{"class":81,"line":631},[79,60246,54410],{"class":228},[79,60248,53807],{"class":232},[79,60250,53301],{"class":228},[79,60252,60253,60255,60257],{"class":81,"line":637},[79,60254,53779],{"class":228},[79,60256,53794],{"class":232},[79,60258,53301],{"class":228},[79,60260,60261],{"class":81,"line":643},[79,60262,542],{"emptyLinePlaceholder":541},[79,60264,60265,60267,60269],{"class":81,"line":649},[79,60266,53779],{"class":228},[79,60268,52630],{"class":232},[79,60270,53301],{"class":228},[19,60272,60273],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,60275,60276],{},"常量不可以重新赋值",[19,60278,60279],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[51,60281,60283],{"className":52628,"code":60282,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const num = 10\n    const btn = document.querySelector('button')\n    btn.addEventListener('click', function () {\n      const num = Math.random()\n      console.log(num)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,60284,60285,60295,60309,60313,60321,60335,60355,60367,60375,60379,60387,60399,60407,60418,60436,60452,60466,60474,60478,60486,60494,60498],{"__ignoreMap":57},[79,60286,60287,60289,60291,60293],{"class":81,"line":82},[79,60288,53292],{"class":228},[79,60290,53295],{"class":232},[79,60292,53298],{"class":85},[79,60294,53301],{"class":228},[79,60296,60297,60299,60301,60303,60305,60307],{"class":81,"line":167},[79,60298,229],{"class":228},[79,60300,52630],{"class":232},[79,60302,53310],{"class":85},[79,60304,239],{"class":228},[79,60306,53315],{"class":89},[79,60308,53301],{"class":228},[79,60310,60311],{"class":81,"line":178},[79,60312,542],{"emptyLinePlaceholder":541},[79,60314,60315,60317,60319],{"class":81,"line":545},[79,60316,229],{"class":228},[79,60318,53328],{"class":232},[79,60320,53301],{"class":228},[79,60322,60323,60325,60327,60329,60331,60333],{"class":81,"line":550},[79,60324,54138],{"class":228},[79,60326,53338],{"class":232},[79,60328,53341],{"class":85},[79,60330,239],{"class":228},[79,60332,53346],{"class":89},[79,60334,53301],{"class":228},[79,60336,60337,60339,60341,60343,60345,60347,60349,60351,60353],{"class":81,"line":562},[79,60338,54138],{"class":228},[79,60340,53338],{"class":232},[79,60342,236],{"class":85},[79,60344,239],{"class":228},[79,60346,53385],{"class":89},[79,60348,53365],{"class":85},[79,60350,239],{"class":228},[79,60352,53392],{"class":89},[79,60354,53301],{"class":228},[79,60356,60357,60359,60361,60363,60365],{"class":81,"line":568},[79,60358,54138],{"class":228},[79,60360,53401],{"class":232},[79,60362,53404],{"class":228},[79,60364,53401],{"class":232},[79,60366,53301],{"class":228},[79,60368,60369,60371,60373],{"class":81,"line":574},[79,60370,53779],{"class":228},[79,60372,53328],{"class":232},[79,60374,53301],{"class":228},[79,60376,60377],{"class":81,"line":579},[79,60378,542],{"emptyLinePlaceholder":541},[79,60380,60381,60383,60385],{"class":81,"line":585},[79,60382,229],{"class":228},[79,60384,53794],{"class":232},[79,60386,53301],{"class":228},[79,60388,60389,60391,60393,60395,60397],{"class":81,"line":591},[79,60390,54138],{"class":228},[79,60392,55877],{"class":232},[79,60394,55883],{"class":228},[79,60396,55877],{"class":232},[79,60398,53301],{"class":228},[79,60400,60401,60403,60405],{"class":81,"line":596},[79,60402,54138],{"class":228},[79,60404,53807],{"class":232},[79,60406,53301],{"class":228},[79,60408,60409,60411,60413,60415],{"class":81,"line":602},[79,60410,13256],{"class":448},[79,60412,4325],{"class":96},[79,60414,556],{"class":448},[79,60416,60417],{"class":96}," 10\n",[79,60419,60420,60422,60424,60426,60428,60430,60432,60434],{"class":81,"line":608},[79,60421,13256],{"class":448},[79,60423,56380],{"class":96},[79,60425,556],{"class":448},[79,60427,56385],{"class":228},[79,60429,56388],{"class":85},[79,60431,455],{"class":228},[79,60433,60193],{"class":89},[79,60435,850],{"class":228},[79,60437,60438,60440,60442,60444,60446,60448,60450],{"class":81,"line":614},[79,60439,60200],{"class":228},[79,60441,59802],{"class":85},[79,60443,455],{"class":228},[79,60445,59807],{"class":89},[79,60447,1020],{"class":228},[79,60449,56438],{"class":448},[79,60451,56441],{"class":228},[79,60453,60454,60456,60458,60460,60462,60464],{"class":81,"line":619},[79,60455,60217],{"class":448},[79,60457,4325],{"class":96},[79,60459,556],{"class":448},[79,60461,60224],{"class":228},[79,60463,59849],{"class":85},[79,60465,4061],{"class":228},[79,60467,60468,60470,60472],{"class":81,"line":625},[79,60469,60233],{"class":228},[79,60471,60236],{"class":85},[79,60473,2271],{"class":228},[79,60475,60476],{"class":81,"line":631},[79,60477,35458],{"class":228},[79,60479,60480,60482,60484],{"class":81,"line":637},[79,60481,54410],{"class":228},[79,60483,53807],{"class":232},[79,60485,53301],{"class":228},[79,60487,60488,60490,60492],{"class":81,"line":643},[79,60489,53779],{"class":228},[79,60491,53794],{"class":232},[79,60493,53301],{"class":228},[79,60495,60496],{"class":81,"line":649},[79,60497,542],{"emptyLinePlaceholder":541},[79,60499,60500,60502,60504],{"class":81,"line":655},[79,60501,53779],{"class":228},[79,60503,52630],{"class":232},[79,60505,53301],{"class":228},[19,60507,60508],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[51,60510,60512],{"className":52628,"code":60511,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const num = 10\n    const btn = document.querySelector('button')\n    btn.addEventListener('click', function () {\n      num = Math.random()\n      console.log(num)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,60513,60514,60524,60538,60542,60550,60564,60584,60596,60604,60608,60616,60628,60636,60646,60664,60680,60693,60701,60705,60713,60721,60725],{"__ignoreMap":57},[79,60515,60516,60518,60520,60522],{"class":81,"line":82},[79,60517,53292],{"class":228},[79,60519,53295],{"class":232},[79,60521,53298],{"class":85},[79,60523,53301],{"class":228},[79,60525,60526,60528,60530,60532,60534,60536],{"class":81,"line":167},[79,60527,229],{"class":228},[79,60529,52630],{"class":232},[79,60531,53310],{"class":85},[79,60533,239],{"class":228},[79,60535,53315],{"class":89},[79,60537,53301],{"class":228},[79,60539,60540],{"class":81,"line":178},[79,60541,542],{"emptyLinePlaceholder":541},[79,60543,60544,60546,60548],{"class":81,"line":545},[79,60545,229],{"class":228},[79,60547,53328],{"class":232},[79,60549,53301],{"class":228},[79,60551,60552,60554,60556,60558,60560,60562],{"class":81,"line":550},[79,60553,54138],{"class":228},[79,60555,53338],{"class":232},[79,60557,53341],{"class":85},[79,60559,239],{"class":228},[79,60561,53346],{"class":89},[79,60563,53301],{"class":228},[79,60565,60566,60568,60570,60572,60574,60576,60578,60580,60582],{"class":81,"line":562},[79,60567,54138],{"class":228},[79,60569,53338],{"class":232},[79,60571,236],{"class":85},[79,60573,239],{"class":228},[79,60575,53385],{"class":89},[79,60577,53365],{"class":85},[79,60579,239],{"class":228},[79,60581,53392],{"class":89},[79,60583,53301],{"class":228},[79,60585,60586,60588,60590,60592,60594],{"class":81,"line":568},[79,60587,54138],{"class":228},[79,60589,53401],{"class":232},[79,60591,53404],{"class":228},[79,60593,53401],{"class":232},[79,60595,53301],{"class":228},[79,60597,60598,60600,60602],{"class":81,"line":574},[79,60599,53779],{"class":228},[79,60601,53328],{"class":232},[79,60603,53301],{"class":228},[79,60605,60606],{"class":81,"line":579},[79,60607,542],{"emptyLinePlaceholder":541},[79,60609,60610,60612,60614],{"class":81,"line":585},[79,60611,229],{"class":228},[79,60613,53794],{"class":232},[79,60615,53301],{"class":228},[79,60617,60618,60620,60622,60624,60626],{"class":81,"line":591},[79,60619,54138],{"class":228},[79,60621,55877],{"class":232},[79,60623,55883],{"class":228},[79,60625,55877],{"class":232},[79,60627,53301],{"class":228},[79,60629,60630,60632,60634],{"class":81,"line":596},[79,60631,54138],{"class":228},[79,60633,53807],{"class":232},[79,60635,53301],{"class":228},[79,60637,60638,60640,60642,60644],{"class":81,"line":602},[79,60639,13256],{"class":448},[79,60641,4325],{"class":96},[79,60643,556],{"class":448},[79,60645,60417],{"class":96},[79,60647,60648,60650,60652,60654,60656,60658,60660,60662],{"class":81,"line":608},[79,60649,13256],{"class":448},[79,60651,56380],{"class":96},[79,60653,556],{"class":448},[79,60655,56385],{"class":228},[79,60657,56388],{"class":85},[79,60659,455],{"class":228},[79,60661,60193],{"class":89},[79,60663,850],{"class":228},[79,60665,60666,60668,60670,60672,60674,60676,60678],{"class":81,"line":614},[79,60667,60200],{"class":228},[79,60669,59802],{"class":85},[79,60671,455],{"class":228},[79,60673,59807],{"class":89},[79,60675,1020],{"class":228},[79,60677,56438],{"class":448},[79,60679,56441],{"class":228},[79,60681,60682,60685,60687,60689,60691],{"class":81,"line":619},[79,60683,60684],{"class":228},"      num ",[79,60686,239],{"class":448},[79,60688,60224],{"class":228},[79,60690,59849],{"class":85},[79,60692,4061],{"class":228},[79,60694,60695,60697,60699],{"class":81,"line":625},[79,60696,60233],{"class":228},[79,60698,60236],{"class":85},[79,60700,2271],{"class":228},[79,60702,60703],{"class":81,"line":631},[79,60704,35458],{"class":228},[79,60706,60707,60709,60711],{"class":81,"line":637},[79,60708,54410],{"class":228},[79,60710,53807],{"class":232},[79,60712,53301],{"class":228},[79,60714,60715,60717,60719],{"class":81,"line":643},[79,60716,53779],{"class":228},[79,60718,53794],{"class":232},[79,60720,53301],{"class":228},[79,60722,60723],{"class":81,"line":649},[79,60724,542],{"emptyLinePlaceholder":541},[79,60726,60727,60729,60731],{"class":81,"line":655},[79,60728,53779],{"class":228},[79,60730,52630],{"class":232},[79,60732,53301],{"class":228},[19,60734,60735],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[339,60737,60739],{"id":60738},"_324-事件监听版本","3.2.4 事件监听版本",[19,60741,60742],{},[3569,60743],{"alt":57,"src":60744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,60746,60747],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,60749,60750],{},"这种方式会覆盖前边的事件监听:",[51,60752,60754],{"className":52628,"code":60753,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const btn = document.querySelector('button')\n    btn.onclick = function () {\n      alert(11)\n    }\n    btn.onclick = function () {\n      alert(22)\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,60755,60756,60766,60780,60784,60792,60806,60826,60838,60846,60850,60858,60870,60878,60896,60910,60921,60925,60937,60947,60951,60959,60967,60971],{"__ignoreMap":57},[79,60757,60758,60760,60762,60764],{"class":81,"line":82},[79,60759,53292],{"class":228},[79,60761,53295],{"class":232},[79,60763,53298],{"class":85},[79,60765,53301],{"class":228},[79,60767,60768,60770,60772,60774,60776,60778],{"class":81,"line":167},[79,60769,229],{"class":228},[79,60771,52630],{"class":232},[79,60773,53310],{"class":85},[79,60775,239],{"class":228},[79,60777,53315],{"class":89},[79,60779,53301],{"class":228},[79,60781,60782],{"class":81,"line":178},[79,60783,542],{"emptyLinePlaceholder":541},[79,60785,60786,60788,60790],{"class":81,"line":545},[79,60787,229],{"class":228},[79,60789,53328],{"class":232},[79,60791,53301],{"class":228},[79,60793,60794,60796,60798,60800,60802,60804],{"class":81,"line":550},[79,60795,54138],{"class":228},[79,60797,53338],{"class":232},[79,60799,53341],{"class":85},[79,60801,239],{"class":228},[79,60803,53346],{"class":89},[79,60805,53301],{"class":228},[79,60807,60808,60810,60812,60814,60816,60818,60820,60822,60824],{"class":81,"line":562},[79,60809,54138],{"class":228},[79,60811,53338],{"class":232},[79,60813,236],{"class":85},[79,60815,239],{"class":228},[79,60817,53385],{"class":89},[79,60819,53365],{"class":85},[79,60821,239],{"class":228},[79,60823,53392],{"class":89},[79,60825,53301],{"class":228},[79,60827,60828,60830,60832,60834,60836],{"class":81,"line":568},[79,60829,54138],{"class":228},[79,60831,53401],{"class":232},[79,60833,53404],{"class":228},[79,60835,53401],{"class":232},[79,60837,53301],{"class":228},[79,60839,60840,60842,60844],{"class":81,"line":574},[79,60841,53779],{"class":228},[79,60843,53328],{"class":232},[79,60845,53301],{"class":228},[79,60847,60848],{"class":81,"line":579},[79,60849,542],{"emptyLinePlaceholder":541},[79,60851,60852,60854,60856],{"class":81,"line":585},[79,60853,229],{"class":228},[79,60855,53794],{"class":232},[79,60857,53301],{"class":228},[79,60859,60860,60862,60864,60866,60868],{"class":81,"line":591},[79,60861,54138],{"class":228},[79,60863,55877],{"class":232},[79,60865,55883],{"class":228},[79,60867,55877],{"class":232},[79,60869,53301],{"class":228},[79,60871,60872,60874,60876],{"class":81,"line":596},[79,60873,54138],{"class":228},[79,60875,53807],{"class":232},[79,60877,53301],{"class":228},[79,60879,60880,60882,60884,60886,60888,60890,60892,60894],{"class":81,"line":602},[79,60881,13256],{"class":448},[79,60883,56380],{"class":96},[79,60885,556],{"class":448},[79,60887,56385],{"class":228},[79,60889,56388],{"class":85},[79,60891,455],{"class":228},[79,60893,60193],{"class":89},[79,60895,850],{"class":228},[79,60897,60898,60900,60903,60905,60908],{"class":81,"line":608},[79,60899,60200],{"class":228},[79,60901,60902],{"class":85},"onclick",[79,60904,556],{"class":448},[79,60906,60907],{"class":448}," function",[79,60909,56441],{"class":228},[79,60911,60912,60915,60917,60919],{"class":81,"line":614},[79,60913,60914],{"class":85},"      alert",[79,60916,455],{"class":228},[79,60918,2714],{"class":96},[79,60920,850],{"class":228},[79,60922,60923],{"class":81,"line":619},[79,60924,4272],{"class":228},[79,60926,60927,60929,60931,60933,60935],{"class":81,"line":625},[79,60928,60200],{"class":228},[79,60930,60902],{"class":85},[79,60932,556],{"class":448},[79,60934,60907],{"class":448},[79,60936,56441],{"class":228},[79,60938,60939,60941,60943,60945],{"class":81,"line":631},[79,60940,60914],{"class":85},[79,60942,455],{"class":228},[79,60944,2990],{"class":96},[79,60946,850],{"class":228},[79,60948,60949],{"class":81,"line":637},[79,60950,4272],{"class":228},[79,60952,60953,60955,60957],{"class":81,"line":643},[79,60954,54410],{"class":228},[79,60956,53807],{"class":232},[79,60958,53301],{"class":228},[79,60960,60961,60963,60965],{"class":81,"line":649},[79,60962,53779],{"class":228},[79,60964,53794],{"class":232},[79,60966,53301],{"class":228},[79,60968,60969],{"class":81,"line":655},[79,60970,542],{"emptyLinePlaceholder":541},[79,60972,60973,60975,60977],{"class":81,"line":660},[79,60974,53779],{"class":228},[79,60976,52630],{"class":232},[79,60978,53301],{"class":228},[19,60980,60981],{},"只要点击就输出结果为22,前边11被覆盖了",[51,60983,60985],{"className":52628,"code":60984,"language":52630,"meta":57,"style":57},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[59,60986,60987,60992,60997,61001,61006,61011],{"__ignoreMap":57},[79,60988,60989],{"class":81,"line":82},[79,60990,60991],{"class":228},"  btn.addEventListener('click', function () {\n",[79,60993,60994],{"class":81,"line":167},[79,60995,60996],{"class":228},"      alert(11)\n",[79,60998,60999],{"class":81,"line":178},[79,61000,35458],{"class":228},[79,61002,61003],{"class":81,"line":545},[79,61004,61005],{"class":228},"    btn.addEventListener('click', function () {\n",[79,61007,61008],{"class":81,"line":550},[79,61009,61010],{"class":228},"      alert(22)\n",[79,61012,61013],{"class":81,"line":562},[79,61014,35458],{"class":228},[19,61016,61017],{},"点击第一次输出11,第二次点击为22",[339,61019,61021],{"id":61020},"_325-事件类型","3.2.5 事件类型",[19,61023,61024],{},[3569,61025],{"alt":57,"src":61026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[24023,61028,61030],{"id":61029},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,61032,61033],{},"补充知识:",[19,61035,61036],{},"轮播图自动播放模块,可以使用",[19,61038,61039],{},"let timerId = setInterval(function () {",[19,61041,61042],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,61044,61045],{},"用js方法模拟进行点击事件,click必须加()",[19,61047,61048],{},"next.click()",[19,61050,61051],{},"}, 1000)",[19,61053,61054],{},[3569,61055],{"alt":57,"src":61056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[51,61058,61060],{"className":219,"code":61059,"language":221,"meta":57,"style":57},"\n\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Ctitle>轮播图点击切换\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      box-sizing: border-box;\n    }\n\n    .slider {\n      width: 560px;\n      height: 400px;\n      overflow: hidden;\n    }\n\n    .slider-wrapper {\n      width: 100%;\n      height: 320px;\n    }\n\n    .slider-wrapper img {\n      width: 100%;\n      height: 100%;\n      display: block;\n    }\n\n    .slider-footer {\n      height: 80px;\n      background-color: rgb(100, 67, 68);\n      padding: 12px 12px 0 12px;\n      position: relative;\n    }\n\n    .slider-footer .toggle {\n      position: absolute;\n      right: 0;\n      top: 12px;\n      display: flex;\n    }\n\n    .slider-footer .toggle button {\n      margin-right: 12px;\n      width: 28px;\n      height: 28px;\n      appearance: none;\n      border: none;\n      background: rgba(255, 255, 255, 0.1);\n      color: #fff;\n      border-radius: 4px;\n      cursor: pointer;\n    }\n\n    .slider-footer .toggle button:hover {\n      background: rgba(255, 255, 255, 0.2);\n    }\n\n    .slider-footer p {\n      margin: 0;\n      color: #fff;\n      font-size: 18px;\n      margin-bottom: 10px;\n    }\n\n    .slider-indicator {\n      margin: 0;\n      padding: 0;\n      list-style: none;\n      display: flex;\n      align-items: center;\n    }\n\n    .slider-indicator li {\n      width: 8px;\n      height: 8px;\n      margin: 4px;\n      border-radius: 50%;\n      background: #fff;\n      opacity: 0.4;\n      cursor: pointer;\n    }\n\n    .slider-indicator li.active {\n      width: 12px;\n      height: 12px;\n      opacity: 1;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"slider\">\n    \u003Cdiv class=\"slider-wrapper\">\n      \u003Cimg src=\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\" alt=\"\" \u002F>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"slider-footer\">\n      \u003Cp>对人类来说会不会太超前了？\u003C\u002Fp>\n      \u003Cul class=\"slider-indicator\">\n        \u003Cli class=\"active\">\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n      \u003C\u002Ful>\n      \u003Cdiv class=\"toggle\">\n        \u003Cbutton class=\"prev\">&lt;\u003C\u002Fbutton>\n        \u003Cbutton class=\"next\">&gt;\u003C\u002Fbutton>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 1. 初始数据\n    const data = [\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n    ]\n    \u002F\u002F 获取元素\n    const img = document.querySelector('.slider-wrapper img')\n    const p = document.querySelector('.slider-footer p')\n    const footer = document.querySelector('.slider-footer')\n    \u002F\u002F 1. 右按钮业务\n    \u002F\u002F 1.1 获取右侧按钮 \n    const next = document.querySelector('.next')\n    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n    \u002F\u002F 1.2 注册点击事件\n\n    next.addEventListener('click', function () {\n      \u002F\u002F console.log(11)\n      i++\n      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n      \u002F\u002F if (i >= 8) {\n      \u002F\u002F   i = 0\n      \u002F\u002F }\n      i = i >= data.length ? 0 : i\n      \u002F\u002F 1.3 得到对应的对象\n      \u002F\u002F console.log(data[i])\n      \u002F\u002F 调用函数\n      toggle()\n    })\n\n    \u002F\u002F 2. 左侧按钮业务\n    \u002F\u002F 2.1 获取左侧按钮 \n    const prev = document.querySelector('.prev')\n    \u002F\u002F 1.2 注册点击事件\n    prev.addEventListener('click', function () {\n      i--\n      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n      \u002F\u002F if (i \u003C 0) {\n      \u002F\u002F   i = 7\n      \u002F\u002F }\n      i = i \u003C 0 ? data.length - 1 : i\n      \u002F\u002F 1.3 得到对应的对象\n      \u002F\u002F console.log(data[i])\n      \u002F\u002F 调用函数\n      toggle()\n    })\n\n    \u002F\u002F 声明一个渲染的函数作为复用\n    function toggle() {\n      \u002F\u002F 1.4 渲染对应的数据\n      img.src = data[i].url\n      p.innerHTML = data[i].title\n      footer.style.backgroundColor = data[i].color\n      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n      document.querySelector('.slider-indicator .active').classList.remove('active')\n      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n    }\n\n    \u002F\u002F 3. 自动播放模块\n    let timerId = setInterval(function () {\n      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n      next.click()\n    }, 1000)\n\n    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n    const slider = document.querySelector('.slider')\n    \u002F\u002F 注册事件\n    slider.addEventListener('mouseenter', function () {\n      \u002F\u002F 停止定时器\n      clearInterval(timerId)\n    })\n\n    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n    \u002F\u002F 注册事件\n    slider.addEventListener('mouseleave', function () {\n      \u002F\u002F 停止定时器\n      if (timerId) clearInterval(timerId)\n      \u002F\u002F 开启定时器\n      timerId = setInterval(function () {\n        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n        next.click()\n      }, 1000)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,61061,61062,61066,61076,61090,61094,61102,61117,61137,61157,61170,61178,61183,61188,61192,61196,61201,61206,61211,61216,61220,61224,61229,61234,61239,61243,61247,61252,61256,61261,61266,61270,61274,61279,61284,61289,61294,61299,61303,61307,61312,61317,61322,61327,61332,61336,61340,61345,61350,61355,61360,61365,61370,61375,61380,61385,61390,61394,61398,61403,61408,61412,61416,61421,61426,61430,61435,61440,61444,61448,61453,61457,61462,61467,61471,61476,61480,61484,61489,61494,61499,61504,61509,61514,61519,61523,61527,61531,61536,61541,61546,61551,61555,61563,61571,61575,61583,61598,61612,61633,61641,61655,61668,61683,61702,61714,61726,61738,61750,61762,61774,61786,61794,61809,61833,61857,61865,61873,61881,61889,61894,61899,61904,61909,61914,61919,61924,61929,61934,61939,61943,61948,61953,61958,61963,61968,61973,61978,61983,61988,61992,61997,62002,62007,62012,62017,62022,62027,62032,62037,62042,62047,62052,62056,62060,62065,62070,62075,62079,62084,62089,62094,62099,62104,62108,62113,62117,62121,62125,62129,62133,62137,62142,62147,62152,62157,62162,62167,62172,62177,62182,62186,62190,62195,62200,62205,62210,62215,62219,62224,62229,62234,62239,62244,62249,62253,62257,62262,62266,62271,62275,62280,62285,62290,62295,62300,62305,62309,62317,62325,62329],{"__ignoreMap":57},[79,61063,61064],{"class":81,"line":82},[79,61065,542],{"emptyLinePlaceholder":541},[79,61067,61068,61070,61072,61074],{"class":81,"line":167},[79,61069,53292],{"class":228},[79,61071,53295],{"class":448},[79,61073,53298],{"class":96},[79,61075,53301],{"class":228},[79,61077,61078,61080,61082,61084,61086,61088],{"class":81,"line":178},[79,61079,229],{"class":228},[79,61081,52630],{"class":232},[79,61083,53310],{"class":85},[79,61085,239],{"class":228},[79,61087,53315],{"class":89},[79,61089,53301],{"class":228},[79,61091,61092],{"class":81,"line":545},[79,61093,542],{"emptyLinePlaceholder":541},[79,61095,61096,61098,61100],{"class":81,"line":550},[79,61097,229],{"class":228},[79,61099,53328],{"class":232},[79,61101,53301],{"class":228},[79,61103,61104,61106,61108,61110,61112,61114],{"class":81,"line":562},[79,61105,54138],{"class":228},[79,61107,53338],{"class":232},[79,61109,53341],{"class":85},[79,61111,239],{"class":228},[79,61113,53346],{"class":89},[79,61115,61116],{"class":228}," \u002F>\n",[79,61118,61119,61121,61123,61125,61127,61129,61131,61133,61135],{"class":81,"line":568},[79,61120,54138],{"class":228},[79,61122,53338],{"class":232},[79,61124,53357],{"class":85},[79,61126,239],{"class":228},[79,61128,53362],{"class":89},[79,61130,53365],{"class":85},[79,61132,239],{"class":228},[79,61134,53370],{"class":89},[79,61136,61116],{"class":228},[79,61138,61139,61141,61143,61145,61147,61149,61151,61153,61155],{"class":81,"line":574},[79,61140,54138],{"class":228},[79,61142,53338],{"class":232},[79,61144,236],{"class":85},[79,61146,239],{"class":228},[79,61148,53385],{"class":89},[79,61150,53365],{"class":85},[79,61152,239],{"class":228},[79,61154,53392],{"class":89},[79,61156,61116],{"class":228},[79,61158,61159,61161,61163,61166,61168],{"class":81,"line":579},[79,61160,54138],{"class":228},[79,61162,53401],{"class":232},[79,61164,61165],{"class":228},">轮播图点击切换\u003C\u002F",[79,61167,53401],{"class":232},[79,61169,53301],{"class":228},[79,61171,61172,61174,61176],{"class":81,"line":585},[79,61173,54138],{"class":228},[79,61175,2159],{"class":232},[79,61177,53301],{"class":228},[79,61179,61180],{"class":81,"line":591},[79,61181,61182],{"class":228},"    * {\n",[79,61184,61185],{"class":81,"line":596},[79,61186,61187],{"class":228},"      box-sizing: border-box;\n",[79,61189,61190],{"class":81,"line":602},[79,61191,4272],{"class":228},[79,61193,61194],{"class":81,"line":608},[79,61195,542],{"emptyLinePlaceholder":541},[79,61197,61198],{"class":81,"line":614},[79,61199,61200],{"class":228},"    .slider {\n",[79,61202,61203],{"class":81,"line":619},[79,61204,61205],{"class":228},"      width: 560px;\n",[79,61207,61208],{"class":81,"line":625},[79,61209,61210],{"class":228},"      height: 400px;\n",[79,61212,61213],{"class":81,"line":631},[79,61214,61215],{"class":228},"      overflow: hidden;\n",[79,61217,61218],{"class":81,"line":637},[79,61219,4272],{"class":228},[79,61221,61222],{"class":81,"line":643},[79,61223,542],{"emptyLinePlaceholder":541},[79,61225,61226],{"class":81,"line":649},[79,61227,61228],{"class":228},"    .slider-wrapper {\n",[79,61230,61231],{"class":81,"line":655},[79,61232,61233],{"class":228},"      width: 100%;\n",[79,61235,61236],{"class":81,"line":660},[79,61237,61238],{"class":228},"      height: 320px;\n",[79,61240,61241],{"class":81,"line":666},[79,61242,4272],{"class":228},[79,61244,61245],{"class":81,"line":672},[79,61246,542],{"emptyLinePlaceholder":541},[79,61248,61249],{"class":81,"line":678},[79,61250,61251],{"class":228},"    .slider-wrapper img {\n",[79,61253,61254],{"class":81,"line":684},[79,61255,61233],{"class":228},[79,61257,61258],{"class":81,"line":690},[79,61259,61260],{"class":228},"      height: 100%;\n",[79,61262,61263],{"class":81,"line":695},[79,61264,61265],{"class":228},"      display: block;\n",[79,61267,61268],{"class":81,"line":700},[79,61269,4272],{"class":228},[79,61271,61272],{"class":81,"line":712},[79,61273,542],{"emptyLinePlaceholder":541},[79,61275,61276],{"class":81,"line":721},[79,61277,61278],{"class":228},"    .slider-footer {\n",[79,61280,61281],{"class":81,"line":726},[79,61282,61283],{"class":228},"      height: 80px;\n",[79,61285,61286],{"class":81,"line":731},[79,61287,61288],{"class":228},"      background-color: rgb(100, 67, 68);\n",[79,61290,61291],{"class":81,"line":748},[79,61292,61293],{"class":228},"      padding: 12px 12px 0 12px;\n",[79,61295,61296],{"class":81,"line":765},[79,61297,61298],{"class":228},"      position: relative;\n",[79,61300,61301],{"class":81,"line":780},[79,61302,4272],{"class":228},[79,61304,61305],{"class":81,"line":811},[79,61306,542],{"emptyLinePlaceholder":541},[79,61308,61309],{"class":81,"line":816},[79,61310,61311],{"class":228},"    .slider-footer .toggle {\n",[79,61313,61314],{"class":81,"line":821},[79,61315,61316],{"class":228},"      position: absolute;\n",[79,61318,61319],{"class":81,"line":837},[79,61320,61321],{"class":228},"      right: 0;\n",[79,61323,61324],{"class":81,"line":853},[79,61325,61326],{"class":228},"      top: 12px;\n",[79,61328,61329],{"class":81,"line":864},[79,61330,61331],{"class":228},"      display: flex;\n",[79,61333,61334],{"class":81,"line":869},[79,61335,4272],{"class":228},[79,61337,61338],{"class":81,"line":885},[79,61339,542],{"emptyLinePlaceholder":541},[79,61341,61342],{"class":81,"line":891},[79,61343,61344],{"class":228},"    .slider-footer .toggle button {\n",[79,61346,61347],{"class":81,"line":896},[79,61348,61349],{"class":228},"      margin-right: 12px;\n",[79,61351,61352],{"class":81,"line":907},[79,61353,61354],{"class":228},"      width: 28px;\n",[79,61356,61357],{"class":81,"line":912},[79,61358,61359],{"class":228},"      height: 28px;\n",[79,61361,61362],{"class":81,"line":935},[79,61363,61364],{"class":228},"      appearance: none;\n",[79,61366,61367],{"class":81,"line":946},[79,61368,61369],{"class":228},"      border: none;\n",[79,61371,61372],{"class":81,"line":960},[79,61373,61374],{"class":228},"      background: rgba(255, 255, 255, 0.1);\n",[79,61376,61377],{"class":81,"line":975},[79,61378,61379],{"class":228},"      color: #fff;\n",[79,61381,61382],{"class":81,"line":980},[79,61383,61384],{"class":228},"      border-radius: 4px;\n",[79,61386,61387],{"class":81,"line":1006},[79,61388,61389],{"class":228},"      cursor: pointer;\n",[79,61391,61392],{"class":81,"line":1027},[79,61393,4272],{"class":228},[79,61395,61396],{"class":81,"line":1032},[79,61397,542],{"emptyLinePlaceholder":541},[79,61399,61400],{"class":81,"line":1047},[79,61401,61402],{"class":228},"    .slider-footer .toggle button:hover {\n",[79,61404,61405],{"class":81,"line":1053},[79,61406,61407],{"class":228},"      background: rgba(255, 255, 255, 0.2);\n",[79,61409,61410],{"class":81,"line":1058},[79,61411,4272],{"class":228},[79,61413,61414],{"class":81,"line":1069},[79,61415,542],{"emptyLinePlaceholder":541},[79,61417,61418],{"class":81,"line":1081},[79,61419,61420],{"class":228},"    .slider-footer p {\n",[79,61422,61423],{"class":81,"line":1086},[79,61424,61425],{"class":228},"      margin: 0;\n",[79,61427,61428],{"class":81,"line":1108},[79,61429,61379],{"class":228},[79,61431,61432],{"class":81,"line":1153},[79,61433,61434],{"class":228},"      font-size: 18px;\n",[79,61436,61437],{"class":81,"line":1158},[79,61438,61439],{"class":228},"      margin-bottom: 10px;\n",[79,61441,61442],{"class":81,"line":1180},[79,61443,4272],{"class":228},[79,61445,61446],{"class":81,"line":1197},[79,61447,542],{"emptyLinePlaceholder":541},[79,61449,61450],{"class":81,"line":1202},[79,61451,61452],{"class":228},"    .slider-indicator {\n",[79,61454,61455],{"class":81,"line":1207},[79,61456,61425],{"class":228},[79,61458,61459],{"class":81,"line":1223},[79,61460,61461],{"class":228},"      padding: 0;\n",[79,61463,61464],{"class":81,"line":18722},[79,61465,61466],{"class":228},"      list-style: none;\n",[79,61468,61469],{"class":81,"line":18728},[79,61470,61331],{"class":228},[79,61472,61473],{"class":81,"line":18739},[79,61474,61475],{"class":228},"      align-items: center;\n",[79,61477,61478],{"class":81,"line":18762},[79,61479,4272],{"class":228},[79,61481,61482],{"class":81,"line":18784},[79,61483,542],{"emptyLinePlaceholder":541},[79,61485,61486],{"class":81,"line":18789},[79,61487,61488],{"class":228},"    .slider-indicator li {\n",[79,61490,61491],{"class":81,"line":18795},[79,61492,61493],{"class":228},"      width: 8px;\n",[79,61495,61496],{"class":81,"line":18809},[79,61497,61498],{"class":228},"      height: 8px;\n",[79,61500,61501],{"class":81,"line":18822},[79,61502,61503],{"class":228},"      margin: 4px;\n",[79,61505,61506],{"class":81,"line":18827},[79,61507,61508],{"class":228},"      border-radius: 50%;\n",[79,61510,61511],{"class":81,"line":18841},[79,61512,61513],{"class":228},"      background: #fff;\n",[79,61515,61516],{"class":81,"line":18846},[79,61517,61518],{"class":228},"      opacity: 0.4;\n",[79,61520,61521],{"class":81,"line":18852},[79,61522,61389],{"class":228},[79,61524,61525],{"class":81,"line":18857},[79,61526,4272],{"class":228},[79,61528,61529],{"class":81,"line":18871},[79,61530,542],{"emptyLinePlaceholder":541},[79,61532,61533],{"class":81,"line":18876},[79,61534,61535],{"class":228},"    .slider-indicator li.active {\n",[79,61537,61538],{"class":81,"line":18881},[79,61539,61540],{"class":228},"      width: 12px;\n",[79,61542,61543],{"class":81,"line":18895},[79,61544,61545],{"class":228},"      height: 12px;\n",[79,61547,61548],{"class":81,"line":18907},[79,61549,61550],{"class":228},"      opacity: 1;\n",[79,61552,61553],{"class":81,"line":18912},[79,61554,4272],{"class":228},[79,61556,61557,61559,61561],{"class":81,"line":18925},[79,61558,54410],{"class":228},[79,61560,2159],{"class":232},[79,61562,53301],{"class":228},[79,61564,61565,61567,61569],{"class":81,"line":18930},[79,61566,53779],{"class":228},[79,61568,53328],{"class":232},[79,61570,53301],{"class":228},[79,61572,61573],{"class":81,"line":18935},[79,61574,542],{"emptyLinePlaceholder":541},[79,61576,61577,61579,61581],{"class":81,"line":18940},[79,61578,229],{"class":228},[79,61580,53794],{"class":232},[79,61582,53301],{"class":228},[79,61584,61585,61587,61589,61591,61593,61596],{"class":81,"line":18953},[79,61586,54138],{"class":228},[79,61588,53605],{"class":232},[79,61590,55477],{"class":85},[79,61592,239],{"class":228},[79,61594,61595],{"class":89},"\"slider\"",[79,61597,53301],{"class":228},[79,61599,61600,61602,61604,61606,61608,61610],{"class":81,"line":18958},[79,61601,53335],{"class":228},[79,61603,53605],{"class":232},[79,61605,55477],{"class":85},[79,61607,239],{"class":228},[79,61609,57216],{"class":89},[79,61611,53301],{"class":228},[79,61613,61614,61616,61618,61620,61622,61625,61627,61629,61631],{"class":81,"line":34631},[79,61615,57223],{"class":228},[79,61617,3569],{"class":232},[79,61619,57228],{"class":85},[79,61621,239],{"class":228},[79,61623,61624],{"class":89},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[79,61626,57236],{"class":85},[79,61628,239],{"class":228},[79,61630,9717],{"class":89},[79,61632,61116],{"class":228},[79,61634,61635,61637,61639],{"class":81,"line":34637},[79,61636,53770],{"class":228},[79,61638,53605],{"class":232},[79,61640,53301],{"class":228},[79,61642,61643,61645,61647,61649,61651,61653],{"class":81,"line":34643},[79,61644,53335],{"class":228},[79,61646,53605],{"class":232},[79,61648,55477],{"class":85},[79,61650,239],{"class":228},[79,61652,57263],{"class":89},[79,61654,53301],{"class":228},[79,61656,61657,61659,61661,61664,61666],{"class":81,"line":34649},[79,61658,57223],{"class":228},[79,61660,19],{"class":232},[79,61662,61663],{"class":228},">对人类来说会不会太超前了？\u003C\u002F",[79,61665,19],{"class":232},[79,61667,53301],{"class":228},[79,61669,61670,61672,61674,61676,61678,61681],{"class":81,"line":34655},[79,61671,57223],{"class":228},[79,61673,3246],{"class":232},[79,61675,55477],{"class":85},[79,61677,239],{"class":228},[79,61679,61680],{"class":89},"\"slider-indicator\"",[79,61682,53301],{"class":228},[79,61684,61685,61687,61689,61691,61693,61696,61698,61700],{"class":81,"line":34666},[79,61686,57291],{"class":228},[79,61688,29],{"class":232},[79,61690,55477],{"class":85},[79,61692,239],{"class":228},[79,61694,61695],{"class":89},"\"active\"",[79,61697,57303],{"class":228},[79,61699,29],{"class":232},[79,61701,53301],{"class":228},[79,61703,61704,61706,61708,61710,61712],{"class":81,"line":34672},[79,61705,57291],{"class":228},[79,61707,29],{"class":232},[79,61709,57303],{"class":228},[79,61711,29],{"class":232},[79,61713,53301],{"class":228},[79,61715,61716,61718,61720,61722,61724],{"class":81,"line":34692},[79,61717,57291],{"class":228},[79,61719,29],{"class":232},[79,61721,57303],{"class":228},[79,61723,29],{"class":232},[79,61725,53301],{"class":228},[79,61727,61728,61730,61732,61734,61736],{"class":81,"line":34698},[79,61729,57291],{"class":228},[79,61731,29],{"class":232},[79,61733,57303],{"class":228},[79,61735,29],{"class":232},[79,61737,53301],{"class":228},[79,61739,61740,61742,61744,61746,61748],{"class":81,"line":34709},[79,61741,57291],{"class":228},[79,61743,29],{"class":232},[79,61745,57303],{"class":228},[79,61747,29],{"class":232},[79,61749,53301],{"class":228},[79,61751,61752,61754,61756,61758,61760],{"class":81,"line":34715},[79,61753,57291],{"class":228},[79,61755,29],{"class":232},[79,61757,57303],{"class":228},[79,61759,29],{"class":232},[79,61761,53301],{"class":228},[79,61763,61764,61766,61768,61770,61772],{"class":81,"line":34721},[79,61765,57291],{"class":228},[79,61767,29],{"class":232},[79,61769,57303],{"class":228},[79,61771,29],{"class":232},[79,61773,53301],{"class":228},[79,61775,61776,61778,61780,61782,61784],{"class":81,"line":34727},[79,61777,57291],{"class":228},[79,61779,29],{"class":232},[79,61781,57303],{"class":228},[79,61783,29],{"class":232},[79,61785,53301],{"class":228},[79,61787,61788,61790,61792],{"class":81,"line":34733},[79,61789,57396],{"class":228},[79,61791,3246],{"class":232},[79,61793,53301],{"class":228},[79,61795,61796,61798,61800,61802,61804,61807],{"class":81,"line":34739},[79,61797,57223],{"class":228},[79,61799,53605],{"class":232},[79,61801,55477],{"class":85},[79,61803,239],{"class":228},[79,61805,61806],{"class":89},"\"toggle\"",[79,61808,53301],{"class":228},[79,61810,61811,61813,61815,61817,61819,61822,61824,61827,61829,61831],{"class":81,"line":34745},[79,61812,57291],{"class":228},[79,61814,55877],{"class":232},[79,61816,55477],{"class":85},[79,61818,239],{"class":228},[79,61820,61821],{"class":89},"\"prev\"",[79,61823,3199],{"class":228},[79,61825,61826],{"class":96},"&lt;",[79,61828,53779],{"class":228},[79,61830,55877],{"class":232},[79,61832,53301],{"class":228},[79,61834,61835,61837,61839,61841,61843,61846,61848,61851,61853,61855],{"class":81,"line":34751},[79,61836,57291],{"class":228},[79,61838,55877],{"class":232},[79,61840,55477],{"class":85},[79,61842,239],{"class":228},[79,61844,61845],{"class":89},"\"next\"",[79,61847,3199],{"class":228},[79,61849,61850],{"class":96},"&gt;",[79,61852,53779],{"class":228},[79,61854,55877],{"class":232},[79,61856,53301],{"class":228},[79,61858,61859,61861,61863],{"class":81,"line":34771},[79,61860,57396],{"class":228},[79,61862,53605],{"class":232},[79,61864,53301],{"class":228},[79,61866,61867,61869,61871],{"class":81,"line":34777},[79,61868,53770],{"class":228},[79,61870,53605],{"class":232},[79,61872,53301],{"class":228},[79,61874,61875,61877,61879],{"class":81,"line":34793},[79,61876,54410],{"class":228},[79,61878,53605],{"class":232},[79,61880,53301],{"class":228},[79,61882,61883,61885,61887],{"class":81,"line":34799},[79,61884,54138],{"class":228},[79,61886,53807],{"class":232},[79,61888,53301],{"class":228},[79,61890,61891],{"class":81,"line":34813},[79,61892,61893],{"class":228},"    \u002F\u002F 1. 初始数据\n",[79,61895,61896],{"class":81,"line":34819},[79,61897,61898],{"class":228},"    const data = [\n",[79,61900,61901],{"class":81,"line":34834},[79,61902,61903],{"class":228},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[79,61905,61906],{"class":81,"line":34840},[79,61907,61908],{"class":228},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[79,61910,61911],{"class":81,"line":34849},[79,61912,61913],{"class":228},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[79,61915,61916],{"class":81,"line":34855},[79,61917,61918],{"class":228},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[79,61920,61921],{"class":81,"line":34864},[79,61922,61923],{"class":228},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[79,61925,61926],{"class":81,"line":34870},[79,61927,61928],{"class":228},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[79,61930,61931],{"class":81,"line":34876},[79,61932,61933],{"class":228},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[79,61935,61936],{"class":81,"line":34885},[79,61937,61938],{"class":228},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[79,61940,61941],{"class":81,"line":34891},[79,61942,55100],{"class":228},[79,61944,61945],{"class":81,"line":34902},[79,61946,61947],{"class":228},"    \u002F\u002F 获取元素\n",[79,61949,61950],{"class":81,"line":34908},[79,61951,61952],{"class":228},"    const img = document.querySelector('.slider-wrapper img')\n",[79,61954,61955],{"class":81,"line":34927},[79,61956,61957],{"class":228},"    const p = document.querySelector('.slider-footer p')\n",[79,61959,61960],{"class":81,"line":34933},[79,61961,61962],{"class":228},"    const footer = document.querySelector('.slider-footer')\n",[79,61964,61965],{"class":81,"line":34944},[79,61966,61967],{"class":228},"    \u002F\u002F 1. 右按钮业务\n",[79,61969,61970],{"class":81,"line":34950},[79,61971,61972],{"class":228},"    \u002F\u002F 1.1 获取右侧按钮 \n",[79,61974,61975],{"class":81,"line":34970},[79,61976,61977],{"class":228},"    const next = document.querySelector('.next')\n",[79,61979,61980],{"class":81,"line":34986},[79,61981,61982],{"class":228},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[79,61984,61985],{"class":81,"line":34992},[79,61986,61987],{"class":228},"    \u002F\u002F 1.2 注册点击事件\n",[79,61989,61990],{"class":81,"line":35006},[79,61991,542],{"emptyLinePlaceholder":541},[79,61993,61994],{"class":81,"line":35012},[79,61995,61996],{"class":228},"    next.addEventListener('click', function () {\n",[79,61998,61999],{"class":81,"line":35018},[79,62000,62001],{"class":228},"      \u002F\u002F console.log(11)\n",[79,62003,62004],{"class":81,"line":35029},[79,62005,62006],{"class":228},"      i++\n",[79,62008,62009],{"class":81,"line":35035},[79,62010,62011],{"class":228},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[79,62013,62014],{"class":81,"line":35041},[79,62015,62016],{"class":228},"      \u002F\u002F if (i >= 8) {\n",[79,62018,62019],{"class":81,"line":35051},[79,62020,62021],{"class":228},"      \u002F\u002F   i = 0\n",[79,62023,62024],{"class":81,"line":35057},[79,62025,62026],{"class":228},"      \u002F\u002F }\n",[79,62028,62029],{"class":81,"line":35068},[79,62030,62031],{"class":228},"      i = i >= data.length ? 0 : i\n",[79,62033,62034],{"class":81,"line":35074},[79,62035,62036],{"class":228},"      \u002F\u002F 1.3 得到对应的对象\n",[79,62038,62039],{"class":81,"line":35084},[79,62040,62041],{"class":228},"      \u002F\u002F console.log(data[i])\n",[79,62043,62044],{"class":81,"line":35089},[79,62045,62046],{"class":228},"      \u002F\u002F 调用函数\n",[79,62048,62049],{"class":81,"line":35095},[79,62050,62051],{"class":228},"      toggle()\n",[79,62053,62054],{"class":81,"line":35144},[79,62055,35458],{"class":228},[79,62057,62058],{"class":81,"line":35191},[79,62059,542],{"emptyLinePlaceholder":541},[79,62061,62062],{"class":81,"line":35196},[79,62063,62064],{"class":228},"    \u002F\u002F 2. 左侧按钮业务\n",[79,62066,62067],{"class":81,"line":35202},[79,62068,62069],{"class":228},"    \u002F\u002F 2.1 获取左侧按钮 \n",[79,62071,62072],{"class":81,"line":35221},[79,62073,62074],{"class":228},"    const prev = document.querySelector('.prev')\n",[79,62076,62077],{"class":81,"line":35227},[79,62078,61987],{"class":228},[79,62080,62081],{"class":81,"line":35246},[79,62082,62083],{"class":228},"    prev.addEventListener('click', function () {\n",[79,62085,62086],{"class":81,"line":35252},[79,62087,62088],{"class":228},"      i--\n",[79,62090,62091],{"class":81,"line":35258},[79,62092,62093],{"class":228},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[79,62095,62096],{"class":81,"line":35268},[79,62097,62098],{"class":228},"      \u002F\u002F if (i \u003C 0) {\n",[79,62100,62101],{"class":81,"line":35273},[79,62102,62103],{"class":228},"      \u002F\u002F   i = 7\n",[79,62105,62106],{"class":81,"line":35279},[79,62107,62026],{"class":228},[79,62109,62110],{"class":81,"line":35295},[79,62111,62112],{"class":228},"      i = i \u003C 0 ? data.length - 1 : i\n",[79,62114,62115],{"class":81,"line":35340},[79,62116,62036],{"class":228},[79,62118,62119],{"class":81,"line":35346},[79,62120,62041],{"class":228},[79,62122,62123],{"class":81,"line":35352},[79,62124,62046],{"class":228},[79,62126,62127],{"class":81,"line":35358},[79,62128,62051],{"class":228},[79,62130,62131],{"class":81,"line":35369},[79,62132,35458],{"class":228},[79,62134,62135],{"class":81,"line":35375},[79,62136,542],{"emptyLinePlaceholder":541},[79,62138,62139],{"class":81,"line":35381},[79,62140,62141],{"class":228},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[79,62143,62144],{"class":81,"line":35387},[79,62145,62146],{"class":228},"    function toggle() {\n",[79,62148,62149],{"class":81,"line":35405},[79,62150,62151],{"class":228},"      \u002F\u002F 1.4 渲染对应的数据\n",[79,62153,62154],{"class":81,"line":35419},[79,62155,62156],{"class":228},"      img.src = data[i].url\n",[79,62158,62159],{"class":81,"line":35428},[79,62160,62161],{"class":228},"      p.innerHTML = data[i].title\n",[79,62163,62164],{"class":81,"line":35437},[79,62165,62166],{"class":228},"      footer.style.backgroundColor = data[i].color\n",[79,62168,62169],{"class":81,"line":35446},[79,62170,62171],{"class":228},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[79,62173,62174],{"class":81,"line":35455},[79,62175,62176],{"class":228},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[79,62178,62179],{"class":81,"line":35461},[79,62180,62181],{"class":228},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[79,62183,62184],{"class":81,"line":35467},[79,62185,4272],{"class":228},[79,62187,62188],{"class":81,"line":35475},[79,62189,542],{"emptyLinePlaceholder":541},[79,62191,62192],{"class":81,"line":35480},[79,62193,62194],{"class":228},"    \u002F\u002F 3. 自动播放模块\n",[79,62196,62197],{"class":81,"line":35486},[79,62198,62199],{"class":228},"    let timerId = setInterval(function () {\n",[79,62201,62202],{"class":81,"line":35497},[79,62203,62204],{"class":228},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[79,62206,62207],{"class":81,"line":35503},[79,62208,62209],{"class":228},"      next.click()\n",[79,62211,62212],{"class":81,"line":35523},[79,62213,62214],{"class":228},"    }, 1000)\n",[79,62216,62217],{"class":81,"line":35529},[79,62218,542],{"emptyLinePlaceholder":541},[79,62220,62221],{"class":81,"line":35535},[79,62222,62223],{"class":228},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[79,62225,62226],{"class":81,"line":35541},[79,62227,62228],{"class":228},"    const slider = document.querySelector('.slider')\n",[79,62230,62231],{"class":81,"line":35558},[79,62232,62233],{"class":228},"    \u002F\u002F 注册事件\n",[79,62235,62236],{"class":81,"line":35564},[79,62237,62238],{"class":228},"    slider.addEventListener('mouseenter', function () {\n",[79,62240,62241],{"class":81,"line":35570},[79,62242,62243],{"class":228},"      \u002F\u002F 停止定时器\n",[79,62245,62246],{"class":81,"line":35576},[79,62247,62248],{"class":228},"      clearInterval(timerId)\n",[79,62250,62251],{"class":81,"line":35582},[79,62252,35458],{"class":228},[79,62254,62255],{"class":81,"line":35588},[79,62256,542],{"emptyLinePlaceholder":541},[79,62258,62259],{"class":81,"line":35615},[79,62260,62261],{"class":228},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[79,62263,62264],{"class":81,"line":35639},[79,62265,62233],{"class":228},[79,62267,62268],{"class":81,"line":35645},[79,62269,62270],{"class":228},"    slider.addEventListener('mouseleave', function () {\n",[79,62272,62273],{"class":81,"line":35651},[79,62274,62243],{"class":228},[79,62276,62277],{"class":81,"line":35657},[79,62278,62279],{"class":228},"      if (timerId) clearInterval(timerId)\n",[79,62281,62282],{"class":81,"line":35668},[79,62283,62284],{"class":228},"      \u002F\u002F 开启定时器\n",[79,62286,62287],{"class":81,"line":35679},[79,62288,62289],{"class":228},"      timerId = setInterval(function () {\n",[79,62291,62292],{"class":81,"line":35685},[79,62293,62294],{"class":228},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[79,62296,62297],{"class":81,"line":35702},[79,62298,62299],{"class":228},"        next.click()\n",[79,62301,62302],{"class":81,"line":35725},[79,62303,62304],{"class":228},"      }, 1000)\n",[79,62306,62307],{"class":81,"line":35748},[79,62308,35458],{"class":228},[79,62310,62311,62313,62315],{"class":81,"line":35754},[79,62312,54410],{"class":228},[79,62314,53807],{"class":232},[79,62316,53301],{"class":228},[79,62318,62319,62321,62323],{"class":81,"line":35759},[79,62320,53779],{"class":228},[79,62322,53794],{"class":232},[79,62324,53301],{"class":228},[79,62326,62327],{"class":81,"line":35768},[79,62328,542],{"emptyLinePlaceholder":541},[79,62330,62331,62333,62335],{"class":81,"line":35778},[79,62332,53779],{"class":228},[79,62334,52630],{"class":232},[79,62336,53301],{"class":228},[24023,62338,62340],{"id":62339},"_3252-焦点事件","3.2.5.2 焦点事件",[19,62342,62343],{},"小米搜索框案例：",[51,62345,62347],{"className":52628,"code":62346,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n    \u003Cmeta charset=\"UTF-8\">\n    \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    \u003Ctitle>Document\u003C\u002Ftitle>\n    \u003Cstyle>\n        * {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n        }\n\n        ul {\n\n            list-style: none;\n        }\n\n        .mi {\n            position: relative;\n            width: 223px;\n            margin: 100px auto;\n        }\n\n        .mi input {\n            width: 223px;\n            height: 48px;\n            padding: 0 10px;\n            font-size: 14px;\n            line-height: 48px;\n            border: 1px solid #e0e0e0;\n            outline: none;\n        }\n\n        .mi .search {\n            border: 1px solid #ff6700;\n        }\n\n        .result-list {\n            display: none;\n            position: absolute;\n            left: 0;\n            top: 48px;\n            width: 223px;\n            border: 1px solid #ff6700;\n            border-top: 0;\n            background: #fff;\n        }\n\n        .result-list a {\n            display: block;\n            padding: 6px 15px;\n            font-size: 12px;\n            color: #424242;\n            text-decoration: none;\n        }\n\n        .result-list a:hover {\n            background-color: #eee;\n        }\n    \u003C\u002Fstyle>\n\n\u003C\u002Fhead>\n\n\u003Cbody>\n    \u003Cdiv class=\"mi\">\n        \u003Cinput type=\"search\" placeholder=\"小米笔记本\">\n        \u003Cul class=\"result-list\">\n            \u003Cli>\u003Ca href=\"#\">全部商品\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">小米11\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">小米10S\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">小米笔记本\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">小米手机\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">黑鲨4\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">空调\u003C\u002Fa>\u003C\u002Fli>\n        \u003C\u002Ful>\n    \u003C\u002Fdiv>\n    \u003Cscript>\n        \u002F\u002F 1. 获取元素\n        const input = document.querySelector('[type=search]')\n        const ul = document.querySelector('.result-list')\n        \u002F\u002F console.log(input)\n        \u002F\u002F 2. 监听事件 获得焦点\n        input.addEventListener('focus', function () {\n            \u002F\u002F ul显示\n            ul.style.display = 'block'\n            \u002F\u002F 添加一个带有颜色边框的类名\n            input.classList.add('search')\n        })\n        \u002F\u002F 3. 监听事件 失去焦点\n        input.addEventListener('blur', function () {\n            ul.style.display = 'none'\n            input.classList.remove('search')\n        })\n    \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,62348,62349,62359,62373,62377,62385,62399,62419,62439,62451,62459,62465,62475,62485,62497,62501,62505,62512,62516,62527,62531,62535,62542,62553,62566,62580,62584,62588,62597,62609,62621,62635,62648,62661,62679,62690,62694,62698,62707,62724,62728,62732,62739,62749,62759,62770,62783,62795,62811,62822,62834,62838,62842,62850,62861,62878,62890,62902,62913,62917,62921,62932,62943,62947,62955,62959,62967,62971,62979,62994,63017,63032,63063,63090,63117,63144,63171,63198,63225,63234,63242,63250,63255,63275,63295,63300,63305,63323,63328,63338,63343,63357,63362,63367,63384,63393,63405,63409,63417,63425,63429],{"__ignoreMap":57},[79,62350,62351,62353,62355,62357],{"class":81,"line":82},[79,62352,53292],{"class":228},[79,62354,53295],{"class":232},[79,62356,53298],{"class":85},[79,62358,53301],{"class":228},[79,62360,62361,62363,62365,62367,62369,62371],{"class":81,"line":167},[79,62362,229],{"class":228},[79,62364,52630],{"class":232},[79,62366,53310],{"class":85},[79,62368,239],{"class":228},[79,62370,53315],{"class":89},[79,62372,53301],{"class":228},[79,62374,62375],{"class":81,"line":178},[79,62376,542],{"emptyLinePlaceholder":541},[79,62378,62379,62381,62383],{"class":81,"line":545},[79,62380,229],{"class":228},[79,62382,53328],{"class":232},[79,62384,53301],{"class":228},[79,62386,62387,62389,62391,62393,62395,62397],{"class":81,"line":550},[79,62388,53335],{"class":228},[79,62390,53338],{"class":232},[79,62392,53341],{"class":85},[79,62394,239],{"class":228},[79,62396,53346],{"class":89},[79,62398,53301],{"class":228},[79,62400,62401,62403,62405,62407,62409,62411,62413,62415,62417],{"class":81,"line":562},[79,62402,53335],{"class":228},[79,62404,53338],{"class":232},[79,62406,53357],{"class":85},[79,62408,239],{"class":228},[79,62410,53362],{"class":89},[79,62412,53365],{"class":85},[79,62414,239],{"class":228},[79,62416,53370],{"class":89},[79,62418,53301],{"class":228},[79,62420,62421,62423,62425,62427,62429,62431,62433,62435,62437],{"class":81,"line":568},[79,62422,53335],{"class":228},[79,62424,53338],{"class":232},[79,62426,236],{"class":85},[79,62428,239],{"class":228},[79,62430,53385],{"class":89},[79,62432,53365],{"class":85},[79,62434,239],{"class":228},[79,62436,53392],{"class":89},[79,62438,53301],{"class":228},[79,62440,62441,62443,62445,62447,62449],{"class":81,"line":574},[79,62442,53335],{"class":228},[79,62444,53401],{"class":232},[79,62446,53404],{"class":228},[79,62448,53401],{"class":232},[79,62450,53301],{"class":228},[79,62452,62453,62455,62457],{"class":81,"line":579},[79,62454,53335],{"class":228},[79,62456,2159],{"class":232},[79,62458,53301],{"class":228},[79,62460,62461,62463],{"class":81,"line":585},[79,62462,53421],{"class":232},[79,62464,17604],{"class":228},[79,62466,62467,62469,62471,62473],{"class":81,"line":591},[79,62468,53428],{"class":96},[79,62470,53431],{"class":228},[79,62472,759],{"class":96},[79,62474,3400],{"class":228},[79,62476,62477,62479,62481,62483],{"class":81,"line":596},[79,62478,53440],{"class":96},[79,62480,53431],{"class":228},[79,62482,759],{"class":96},[79,62484,3400],{"class":228},[79,62486,62487,62490,62492,62495],{"class":81,"line":602},[79,62488,62489],{"class":96},"            box-sizing",[79,62491,53431],{"class":228},[79,62493,62494],{"class":96},"border-box",[79,62496,3400],{"class":228},[79,62498,62499],{"class":81,"line":608},[79,62500,4612],{"class":228},[79,62502,62503],{"class":81,"line":614},[79,62504,542],{"emptyLinePlaceholder":541},[79,62506,62507,62510],{"class":81,"line":619},[79,62508,62509],{"class":232},"        ul",[79,62511,17604],{"class":228},[79,62513,62514],{"class":81,"line":625},[79,62515,542],{"emptyLinePlaceholder":541},[79,62517,62518,62521,62523,62525],{"class":81,"line":631},[79,62519,62520],{"class":96},"            list-style",[79,62522,53431],{"class":228},[79,62524,56726],{"class":96},[79,62526,3400],{"class":228},[79,62528,62529],{"class":81,"line":637},[79,62530,4612],{"class":228},[79,62532,62533],{"class":81,"line":643},[79,62534,542],{"emptyLinePlaceholder":541},[79,62536,62537,62540],{"class":81,"line":649},[79,62538,62539],{"class":85},"        .mi",[79,62541,17604],{"class":228},[79,62543,62544,62547,62549,62551],{"class":81,"line":655},[79,62545,62546],{"class":96},"            position",[79,62548,53431],{"class":228},[79,62550,56753],{"class":96},[79,62552,3400],{"class":228},[79,62554,62555,62557,62559,62562,62564],{"class":81,"line":660},[79,62556,53478],{"class":96},[79,62558,53431],{"class":228},[79,62560,62561],{"class":96},"223",[79,62563,53486],{"class":448},[79,62565,3400],{"class":228},[79,62567,62568,62570,62572,62574,62576,62578],{"class":81,"line":666},[79,62569,53428],{"class":96},[79,62571,53431],{"class":228},[79,62573,2555],{"class":96},[79,62575,53486],{"class":448},[79,62577,53550],{"class":96},[79,62579,3400],{"class":228},[79,62581,62582],{"class":81,"line":672},[79,62583,4612],{"class":228},[79,62585,62586],{"class":81,"line":678},[79,62587,542],{"emptyLinePlaceholder":541},[79,62589,62590,62592,62595],{"class":81,"line":684},[79,62591,62539],{"class":85},[79,62593,62594],{"class":232}," input",[79,62596,17604],{"class":228},[79,62598,62599,62601,62603,62605,62607],{"class":81,"line":690},[79,62600,53478],{"class":96},[79,62602,53431],{"class":228},[79,62604,62561],{"class":96},[79,62606,53486],{"class":448},[79,62608,3400],{"class":228},[79,62610,62611,62613,62615,62617,62619],{"class":81,"line":695},[79,62612,53493],{"class":96},[79,62614,53431],{"class":228},[79,62616,2847],{"class":96},[79,62618,53486],{"class":448},[79,62620,3400],{"class":228},[79,62622,62623,62625,62627,62629,62631,62633],{"class":81,"line":700},[79,62624,53440],{"class":96},[79,62626,53431],{"class":228},[79,62628,759],{"class":96},[79,62630,4123],{"class":96},[79,62632,53486],{"class":448},[79,62634,3400],{"class":228},[79,62636,62637,62640,62642,62644,62646],{"class":81,"line":712},[79,62638,62639],{"class":96},"            font-size",[79,62641,53431],{"class":228},[79,62643,2789],{"class":96},[79,62645,53486],{"class":448},[79,62647,3400],{"class":228},[79,62649,62650,62653,62655,62657,62659],{"class":81,"line":721},[79,62651,62652],{"class":96},"            line-height",[79,62654,53431],{"class":228},[79,62656,2847],{"class":96},[79,62658,53486],{"class":448},[79,62660,3400],{"class":228},[79,62662,62663,62666,62668,62670,62672,62674,62677],{"class":81,"line":726},[79,62664,62665],{"class":96},"            border",[79,62667,53431],{"class":228},[79,62669,775],{"class":96},[79,62671,53486],{"class":448},[79,62673,53515],{"class":96},[79,62675,62676],{"class":96}," #e0e0e0",[79,62678,3400],{"class":228},[79,62680,62681,62684,62686,62688],{"class":81,"line":731},[79,62682,62683],{"class":96},"            outline",[79,62685,53431],{"class":228},[79,62687,56726],{"class":96},[79,62689,3400],{"class":228},[79,62691,62692],{"class":81,"line":748},[79,62693,4612],{"class":228},[79,62695,62696],{"class":81,"line":765},[79,62697,542],{"emptyLinePlaceholder":541},[79,62699,62700,62702,62705],{"class":81,"line":780},[79,62701,62539],{"class":85},[79,62703,62704],{"class":85}," .search",[79,62706,17604],{"class":228},[79,62708,62709,62711,62713,62715,62717,62719,62722],{"class":81,"line":811},[79,62710,62665],{"class":96},[79,62712,53431],{"class":228},[79,62714,775],{"class":96},[79,62716,53486],{"class":448},[79,62718,53515],{"class":96},[79,62720,62721],{"class":96}," #ff6700",[79,62723,3400],{"class":228},[79,62725,62726],{"class":81,"line":816},[79,62727,4612],{"class":228},[79,62729,62730],{"class":81,"line":821},[79,62731,542],{"emptyLinePlaceholder":541},[79,62733,62734,62737],{"class":81,"line":837},[79,62735,62736],{"class":85},"        .result-list",[79,62738,17604],{"class":228},[79,62740,62741,62743,62745,62747],{"class":81,"line":853},[79,62742,53466],{"class":96},[79,62744,53431],{"class":228},[79,62746,56726],{"class":96},[79,62748,3400],{"class":228},[79,62750,62751,62753,62755,62757],{"class":81,"line":864},[79,62752,62546],{"class":96},[79,62754,53431],{"class":228},[79,62756,56820],{"class":96},[79,62758,3400],{"class":228},[79,62760,62761,62764,62766,62768],{"class":81,"line":869},[79,62762,62763],{"class":96},"            left",[79,62765,53431],{"class":228},[79,62767,759],{"class":96},[79,62769,3400],{"class":228},[79,62771,62772,62775,62777,62779,62781],{"class":81,"line":885},[79,62773,62774],{"class":96},"            top",[79,62776,53431],{"class":228},[79,62778,2847],{"class":96},[79,62780,53486],{"class":448},[79,62782,3400],{"class":228},[79,62784,62785,62787,62789,62791,62793],{"class":81,"line":891},[79,62786,53478],{"class":96},[79,62788,53431],{"class":228},[79,62790,62561],{"class":96},[79,62792,53486],{"class":448},[79,62794,3400],{"class":228},[79,62796,62797,62799,62801,62803,62805,62807,62809],{"class":81,"line":896},[79,62798,62665],{"class":96},[79,62800,53431],{"class":228},[79,62802,775],{"class":96},[79,62804,53486],{"class":448},[79,62806,53515],{"class":96},[79,62808,62721],{"class":96},[79,62810,3400],{"class":228},[79,62812,62813,62816,62818,62820],{"class":81,"line":907},[79,62814,62815],{"class":96},"            border-top",[79,62817,53431],{"class":228},[79,62819,759],{"class":96},[79,62821,3400],{"class":228},[79,62823,62824,62827,62829,62832],{"class":81,"line":912},[79,62825,62826],{"class":96},"            background",[79,62828,53431],{"class":228},[79,62830,62831],{"class":96},"#fff",[79,62833,3400],{"class":228},[79,62835,62836],{"class":81,"line":935},[79,62837,4612],{"class":228},[79,62839,62840],{"class":81,"line":946},[79,62841,542],{"emptyLinePlaceholder":541},[79,62843,62844,62846,62848],{"class":81,"line":960},[79,62845,62736],{"class":85},[79,62847,3505],{"class":232},[79,62849,17604],{"class":228},[79,62851,62852,62854,62856,62859],{"class":81,"line":975},[79,62853,53466],{"class":96},[79,62855,53431],{"class":228},[79,62857,62858],{"class":96},"block",[79,62860,3400],{"class":228},[79,62862,62863,62865,62867,62869,62871,62874,62876],{"class":81,"line":980},[79,62864,53440],{"class":96},[79,62866,53431],{"class":228},[79,62868,2587],{"class":96},[79,62870,53486],{"class":448},[79,62872,62873],{"class":96}," 15",[79,62875,53486],{"class":448},[79,62877,3400],{"class":228},[79,62879,62880,62882,62884,62886,62888],{"class":81,"line":1006},[79,62881,62639],{"class":96},[79,62883,53431],{"class":228},[79,62885,2739],{"class":96},[79,62887,53486],{"class":448},[79,62889,3400],{"class":228},[79,62891,62892,62895,62897,62900],{"class":81,"line":1027},[79,62893,62894],{"class":96},"            color",[79,62896,53431],{"class":228},[79,62898,62899],{"class":96},"#424242",[79,62901,3400],{"class":228},[79,62903,62904,62907,62909,62911],{"class":81,"line":1032},[79,62905,62906],{"class":96},"            text-decoration",[79,62908,53431],{"class":228},[79,62910,56726],{"class":96},[79,62912,3400],{"class":228},[79,62914,62915],{"class":81,"line":1047},[79,62916,4612],{"class":228},[79,62918,62919],{"class":81,"line":1053},[79,62920,542],{"emptyLinePlaceholder":541},[79,62922,62923,62925,62927,62930],{"class":81,"line":1058},[79,62924,62736],{"class":85},[79,62926,3505],{"class":232},[79,62928,62929],{"class":85},":hover",[79,62931,17604],{"class":228},[79,62933,62934,62936,62938,62941],{"class":81,"line":1069},[79,62935,53634],{"class":96},[79,62937,53431],{"class":228},[79,62939,62940],{"class":96},"#eee",[79,62942,3400],{"class":228},[79,62944,62945],{"class":81,"line":1081},[79,62946,4612],{"class":228},[79,62948,62949,62951,62953],{"class":81,"line":1086},[79,62950,53770],{"class":228},[79,62952,2159],{"class":232},[79,62954,53301],{"class":228},[79,62956,62957],{"class":81,"line":1108},[79,62958,542],{"emptyLinePlaceholder":541},[79,62960,62961,62963,62965],{"class":81,"line":1153},[79,62962,53779],{"class":228},[79,62964,53328],{"class":232},[79,62966,53301],{"class":228},[79,62968,62969],{"class":81,"line":1158},[79,62970,542],{"emptyLinePlaceholder":541},[79,62972,62973,62975,62977],{"class":81,"line":1180},[79,62974,229],{"class":228},[79,62976,53794],{"class":232},[79,62978,53301],{"class":228},[79,62980,62981,62983,62985,62987,62989,62992],{"class":81,"line":1197},[79,62982,53335],{"class":228},[79,62984,53605],{"class":232},[79,62986,55477],{"class":85},[79,62988,239],{"class":228},[79,62990,62991],{"class":89},"\"mi\"",[79,62993,53301],{"class":228},[79,62995,62996,62998,63000,63002,63004,63007,63010,63012,63015],{"class":81,"line":1202},[79,62997,57291],{"class":228},[79,62999,55812],{"class":232},[79,63001,245],{"class":85},[79,63003,239],{"class":228},[79,63005,63006],{"class":89},"\"search\"",[79,63008,63009],{"class":85}," placeholder",[79,63011,239],{"class":228},[79,63013,63014],{"class":89},"\"小米笔记本\"",[79,63016,53301],{"class":228},[79,63018,63019,63021,63023,63025,63027,63030],{"class":81,"line":1207},[79,63020,57291],{"class":228},[79,63022,3246],{"class":232},[79,63024,55477],{"class":85},[79,63026,239],{"class":228},[79,63028,63029],{"class":89},"\"result-list\"",[79,63031,53301],{"class":228},[79,63033,63034,63037,63039,63042,63044,63047,63049,63052,63055,63057,63059,63061],{"class":81,"line":1223},[79,63035,63036],{"class":228},"            \u003C",[79,63038,29],{"class":232},[79,63040,63041],{"class":228},">\u003C",[79,63043,2482],{"class":232},[79,63045,63046],{"class":85}," href",[79,63048,239],{"class":228},[79,63050,63051],{"class":89},"\"#\"",[79,63053,63054],{"class":228},">全部商品\u003C\u002F",[79,63056,2482],{"class":232},[79,63058,57303],{"class":228},[79,63060,29],{"class":232},[79,63062,53301],{"class":228},[79,63064,63065,63067,63069,63071,63073,63075,63077,63079,63082,63084,63086,63088],{"class":81,"line":18722},[79,63066,63036],{"class":228},[79,63068,29],{"class":232},[79,63070,63041],{"class":228},[79,63072,2482],{"class":232},[79,63074,63046],{"class":85},[79,63076,239],{"class":228},[79,63078,63051],{"class":89},[79,63080,63081],{"class":228},">小米11\u003C\u002F",[79,63083,2482],{"class":232},[79,63085,57303],{"class":228},[79,63087,29],{"class":232},[79,63089,53301],{"class":228},[79,63091,63092,63094,63096,63098,63100,63102,63104,63106,63109,63111,63113,63115],{"class":81,"line":18728},[79,63093,63036],{"class":228},[79,63095,29],{"class":232},[79,63097,63041],{"class":228},[79,63099,2482],{"class":232},[79,63101,63046],{"class":85},[79,63103,239],{"class":228},[79,63105,63051],{"class":89},[79,63107,63108],{"class":228},">小米10S\u003C\u002F",[79,63110,2482],{"class":232},[79,63112,57303],{"class":228},[79,63114,29],{"class":232},[79,63116,53301],{"class":228},[79,63118,63119,63121,63123,63125,63127,63129,63131,63133,63136,63138,63140,63142],{"class":81,"line":18739},[79,63120,63036],{"class":228},[79,63122,29],{"class":232},[79,63124,63041],{"class":228},[79,63126,2482],{"class":232},[79,63128,63046],{"class":85},[79,63130,239],{"class":228},[79,63132,63051],{"class":89},[79,63134,63135],{"class":228},">小米笔记本\u003C\u002F",[79,63137,2482],{"class":232},[79,63139,57303],{"class":228},[79,63141,29],{"class":232},[79,63143,53301],{"class":228},[79,63145,63146,63148,63150,63152,63154,63156,63158,63160,63163,63165,63167,63169],{"class":81,"line":18762},[79,63147,63036],{"class":228},[79,63149,29],{"class":232},[79,63151,63041],{"class":228},[79,63153,2482],{"class":232},[79,63155,63046],{"class":85},[79,63157,239],{"class":228},[79,63159,63051],{"class":89},[79,63161,63162],{"class":228},">小米手机\u003C\u002F",[79,63164,2482],{"class":232},[79,63166,57303],{"class":228},[79,63168,29],{"class":232},[79,63170,53301],{"class":228},[79,63172,63173,63175,63177,63179,63181,63183,63185,63187,63190,63192,63194,63196],{"class":81,"line":18784},[79,63174,63036],{"class":228},[79,63176,29],{"class":232},[79,63178,63041],{"class":228},[79,63180,2482],{"class":232},[79,63182,63046],{"class":85},[79,63184,239],{"class":228},[79,63186,63051],{"class":89},[79,63188,63189],{"class":228},">黑鲨4\u003C\u002F",[79,63191,2482],{"class":232},[79,63193,57303],{"class":228},[79,63195,29],{"class":232},[79,63197,53301],{"class":228},[79,63199,63200,63202,63204,63206,63208,63210,63212,63214,63217,63219,63221,63223],{"class":81,"line":18789},[79,63201,63036],{"class":228},[79,63203,29],{"class":232},[79,63205,63041],{"class":228},[79,63207,2482],{"class":232},[79,63209,63046],{"class":85},[79,63211,239],{"class":228},[79,63213,63051],{"class":89},[79,63215,63216],{"class":228},">空调\u003C\u002F",[79,63218,2482],{"class":232},[79,63220,57303],{"class":228},[79,63222,29],{"class":232},[79,63224,53301],{"class":228},[79,63226,63227,63230,63232],{"class":81,"line":18795},[79,63228,63229],{"class":228},"        \u003C\u002F",[79,63231,3246],{"class":232},[79,63233,53301],{"class":228},[79,63235,63236,63238,63240],{"class":81,"line":18809},[79,63237,53770],{"class":228},[79,63239,53605],{"class":232},[79,63241,53301],{"class":228},[79,63243,63244,63246,63248],{"class":81,"line":18822},[79,63245,53335],{"class":228},[79,63247,53807],{"class":232},[79,63249,53301],{"class":228},[79,63251,63252],{"class":81,"line":18827},[79,63253,63254],{"class":2313},"        \u002F\u002F 1. 获取元素\n",[79,63256,63257,63260,63262,63264,63266,63268,63270,63273],{"class":81,"line":18841},[79,63258,63259],{"class":448},"        const",[79,63261,62594],{"class":96},[79,63263,556],{"class":448},[79,63265,56385],{"class":228},[79,63267,56388],{"class":85},[79,63269,455],{"class":228},[79,63271,63272],{"class":89},"'[type=search]'",[79,63274,850],{"class":228},[79,63276,63277,63279,63282,63284,63286,63288,63290,63293],{"class":81,"line":18846},[79,63278,63259],{"class":448},[79,63280,63281],{"class":96}," ul",[79,63283,556],{"class":448},[79,63285,56385],{"class":228},[79,63287,56388],{"class":85},[79,63289,455],{"class":228},[79,63291,63292],{"class":89},"'.result-list'",[79,63294,850],{"class":228},[79,63296,63297],{"class":81,"line":18852},[79,63298,63299],{"class":2313},"        \u002F\u002F console.log(input)\n",[79,63301,63302],{"class":81,"line":18857},[79,63303,63304],{"class":2313},"        \u002F\u002F 2. 监听事件 获得焦点\n",[79,63306,63307,63310,63312,63314,63317,63319,63321],{"class":81,"line":18871},[79,63308,63309],{"class":228},"        input.",[79,63311,59802],{"class":85},[79,63313,455],{"class":228},[79,63315,63316],{"class":89},"'focus'",[79,63318,1020],{"class":228},[79,63320,56438],{"class":448},[79,63322,56441],{"class":228},[79,63324,63325],{"class":81,"line":18876},[79,63326,63327],{"class":2313},"            \u002F\u002F ul显示\n",[79,63329,63330,63333,63335],{"class":81,"line":18881},[79,63331,63332],{"class":228},"            ul.style.display ",[79,63334,239],{"class":448},[79,63336,63337],{"class":89}," 'block'\n",[79,63339,63340],{"class":81,"line":18895},[79,63341,63342],{"class":2313},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[79,63344,63345,63348,63350,63352,63355],{"class":81,"line":18907},[79,63346,63347],{"class":228},"            input.classList.",[79,63349,7402],{"class":85},[79,63351,455],{"class":228},[79,63353,63354],{"class":89},"'search'",[79,63356,850],{"class":228},[79,63358,63359],{"class":81,"line":18912},[79,63360,63361],{"class":228},"        })\n",[79,63363,63364],{"class":81,"line":18925},[79,63365,63366],{"class":2313},"        \u002F\u002F 3. 监听事件 失去焦点\n",[79,63368,63369,63371,63373,63375,63378,63380,63382],{"class":81,"line":18930},[79,63370,63309],{"class":228},[79,63372,59802],{"class":85},[79,63374,455],{"class":228},[79,63376,63377],{"class":89},"'blur'",[79,63379,1020],{"class":228},[79,63381,56438],{"class":448},[79,63383,56441],{"class":228},[79,63385,63386,63388,63390],{"class":81,"line":18935},[79,63387,63332],{"class":228},[79,63389,239],{"class":448},[79,63391,63392],{"class":89}," 'none'\n",[79,63394,63395,63397,63399,63401,63403],{"class":81,"line":18940},[79,63396,63347],{"class":228},[79,63398,58995],{"class":85},[79,63400,455],{"class":228},[79,63402,63354],{"class":89},[79,63404,850],{"class":228},[79,63406,63407],{"class":81,"line":18953},[79,63408,63361],{"class":228},[79,63410,63411,63413,63415],{"class":81,"line":18958},[79,63412,53770],{"class":228},[79,63414,53807],{"class":232},[79,63416,53301],{"class":228},[79,63418,63419,63421,63423],{"class":81,"line":34631},[79,63420,53779],{"class":228},[79,63422,53794],{"class":232},[79,63424,53301],{"class":228},[79,63426,63427],{"class":81,"line":34637},[79,63428,542],{"emptyLinePlaceholder":541},[79,63430,63431,63433,63435],{"class":81,"line":34643},[79,63432,53779],{"class":228},[79,63434,52630],{"class":232},[79,63436,53301],{"class":228},[24023,63438,63440],{"id":63439},"_3253-键盘事件","3.2.5.3 键盘事件",[19,63442,63443],{},"评论字数统计案例",[19,63445,63446],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,63448,63449],{},"牢记focus伪类选择器",[53338,63451],{"charSet":63452},"UTF-8",[53338,63454],{"name":63455,"content":63456},"viewport","width=device-width, initial-scale=1.0",[53401,63458,63459],{},"Document",[2159,63461,63462],{},"\n\ninput {\n\nwidth: 200px;\n\ntransition: all .3;\n\n}\n\n\u002F\\* 获得了光标 \\*\u002F\n\ninput:focus {\n\nwidth: 300px;\n\n}\n\n",[55812,63464],{"type":56},[3246,63466,63467,63470],{},[29,63468,63469],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[29,63471,63472],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[51,63474,63476],{"className":52628,"code":63475,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>评论回车发布\u003C\u002Ftitle>\n  \u003Cstyle>\n    .wrapper {\n      min-width: 400px;\n      max-width: 800px;\n      display: flex;\n      justify-content: flex-end;\n    }\n\n    .avatar {\n      width: 48px;\n      height: 48px;\n      border-radius: 50%;\n      overflow: hidden;\n      background: url(...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg) no-repeat center \u002F cover;\n      margin-right: 20px;\n    }\n\n    .wrapper textarea {\n      outline: none;\n      border-color: transparent;\n      resize: none;\n      background: #f5f5f5;\n      border-radius: 4px;\n      flex: 1;\n      padding: 10px;\n      transition: all 0.5s;\n      height: 30px;\n    }\n\n    .wrapper textarea:focus {\n      border-color: #e4e4e4;\n      background: #fff;\n      height: 50px;\n    }\n\n    .wrapper button {\n      background: #00aeec;\n      color: #fff;\n      border: none;\n      border-radius: 4px;\n      margin-left: 10px;\n      width: 70px;\n      cursor: pointer;\n    }\n\n    .wrapper .total {\n      margin-right: 80px;\n      color: #999;\n      margin-top: 5px;\n      opacity: 0;\n      transition: all 0.5s;\n    }\n\n    .list {\n      min-width: 400px;\n      max-width: 800px;\n      display: flex;\n    }\n\n    .list .item {\n      width: 100%;\n      display: flex;\n    }\n\n    .list .item .info {\n      flex: 1;\n      border-bottom: 1px dashed #e4e4e4;\n      padding-bottom: 10px;\n    }\n\n    .list .item p {\n      margin: 0;\n    }\n\n    .list .item .name {\n      color: #FB7299;\n      font-size: 14px;\n      font-weight: bold;\n    }\n\n    .list .item .text {\n      color: #333;\n      padding: 10px 0;\n    }\n\n    .list .item .time {\n      color: #999;\n      font-size: 12px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"wrapper\">\n    \u003Ci class=\"avatar\">\u003C\u002Fi>\n    \u003Ctextarea id=\"tx\" placeholder=\"发一条友善的评论\" rows=\"2\" maxlength=\"200\">\u003C\u002Ftextarea>\n    \u003Cbutton>发布\u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"wrapper\">\n    \u003Cspan class=\"total\">0\u002F200字\u003C\u002Fspan>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"list\">\n    \u003Cdiv class=\"item\" style=\"display: none;\">\n      \u003Ci class=\"avatar\">\u003C\u002Fi>\n      \u003Cdiv class=\"info\">\n        \u003Cp class=\"name\">清风徐来\u003C\u002Fp>\n        \u003Cp class=\"text\">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002Fp>\n        \u003Cp class=\"time\">2022-10-10 20:29:21\u003C\u002Fp>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const tx = document.querySelector('#tx')\n    const total = document.querySelector('.total')\n    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n    tx.addEventListener('focus', function () {\n      total.style.opacity = 1\n    })\n    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n    tx.addEventListener('blur', function () {\n      total.style.opacity = 0\n    })\n    \u002F\u002F 3. 检测用户输入\n    tx.addEventListener('input', function () {\n      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n      total.innerHTML = `${tx.value.length}\u002F200字`\n    })\n\n    \u002F\u002F const str = 'andy'\n    \u002F\u002F console.log(str.length)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,63477,63478,63488,63502,63506,63514,63528,63548,63568,63581,63589,63596,63609,63623,63633,63643,63647,63651,63658,63670,63682,63694,63706,63735,63748,63752,63756,63765,63776,63788,63799,63810,63822,63833,63845,63860,63872,63876,63880,63891,63902,63912,63924,63928,63932,63940,63951,63961,63972,63984,63997,64009,64021,64025,64029,64038,64050,64061,64074,64085,64099,64103,64107,64114,64126,64138,64148,64152,64156,64165,64177,64187,64191,64195,64206,64216,64235,64248,64252,64256,64266,64276,64280,64284,64295,64306,64318,64330,64334,64338,64349,64360,64374,64378,64382,64393,64403,64415,64419,64427,64435,64439,64447,64462,64481,64521,64534,64542,64556,64576,64584,64599,64622,64640,64655,64675,64695,64715,64723,64731,64739,64747,64767,64787,64792,64809,64818,64822,64827,64843,64851,64855,64860,64877,64882,64907,64911,64915,64920,64925,64933,64941,64945],{"__ignoreMap":57},[79,63479,63480,63482,63484,63486],{"class":81,"line":82},[79,63481,53292],{"class":228},[79,63483,53295],{"class":232},[79,63485,53298],{"class":85},[79,63487,53301],{"class":228},[79,63489,63490,63492,63494,63496,63498,63500],{"class":81,"line":167},[79,63491,229],{"class":228},[79,63493,52630],{"class":232},[79,63495,53310],{"class":85},[79,63497,239],{"class":228},[79,63499,53315],{"class":89},[79,63501,53301],{"class":228},[79,63503,63504],{"class":81,"line":178},[79,63505,542],{"emptyLinePlaceholder":541},[79,63507,63508,63510,63512],{"class":81,"line":545},[79,63509,229],{"class":228},[79,63511,53328],{"class":232},[79,63513,53301],{"class":228},[79,63515,63516,63518,63520,63522,63524,63526],{"class":81,"line":550},[79,63517,54138],{"class":228},[79,63519,53338],{"class":232},[79,63521,53341],{"class":85},[79,63523,239],{"class":228},[79,63525,53346],{"class":89},[79,63527,53301],{"class":228},[79,63529,63530,63532,63534,63536,63538,63540,63542,63544,63546],{"class":81,"line":562},[79,63531,54138],{"class":228},[79,63533,53338],{"class":232},[79,63535,53357],{"class":85},[79,63537,239],{"class":228},[79,63539,53362],{"class":89},[79,63541,53365],{"class":85},[79,63543,239],{"class":228},[79,63545,53370],{"class":89},[79,63547,53301],{"class":228},[79,63549,63550,63552,63554,63556,63558,63560,63562,63564,63566],{"class":81,"line":568},[79,63551,54138],{"class":228},[79,63553,53338],{"class":232},[79,63555,236],{"class":85},[79,63557,239],{"class":228},[79,63559,53385],{"class":89},[79,63561,53365],{"class":85},[79,63563,239],{"class":228},[79,63565,53392],{"class":89},[79,63567,53301],{"class":228},[79,63569,63570,63572,63574,63577,63579],{"class":81,"line":574},[79,63571,54138],{"class":228},[79,63573,53401],{"class":232},[79,63575,63576],{"class":228},">评论回车发布\u003C\u002F",[79,63578,53401],{"class":232},[79,63580,53301],{"class":228},[79,63582,63583,63585,63587],{"class":81,"line":579},[79,63584,54138],{"class":228},[79,63586,2159],{"class":232},[79,63588,53301],{"class":228},[79,63590,63591,63594],{"class":81,"line":585},[79,63592,63593],{"class":85},"    .wrapper",[79,63595,17604],{"class":228},[79,63597,63598,63601,63603,63605,63607],{"class":81,"line":591},[79,63599,63600],{"class":96},"      min-width",[79,63602,53431],{"class":228},[79,63604,6060],{"class":96},[79,63606,53486],{"class":448},[79,63608,3400],{"class":228},[79,63610,63611,63614,63616,63619,63621],{"class":81,"line":596},[79,63612,63613],{"class":96},"      max-width",[79,63615,53431],{"class":228},[79,63617,63618],{"class":96},"800",[79,63620,53486],{"class":448},[79,63622,3400],{"class":228},[79,63624,63625,63627,63629,63631],{"class":81,"line":602},[79,63626,56998],{"class":96},[79,63628,53431],{"class":228},[79,63630,53471],{"class":96},[79,63632,3400],{"class":228},[79,63634,63635,63637,63639,63641],{"class":81,"line":608},[79,63636,57009],{"class":96},[79,63638,53431],{"class":228},[79,63640,53574],{"class":96},[79,63642,3400],{"class":228},[79,63644,63645],{"class":81,"line":614},[79,63646,4272],{"class":228},[79,63648,63649],{"class":81,"line":619},[79,63650,542],{"emptyLinePlaceholder":541},[79,63652,63653,63656],{"class":81,"line":625},[79,63654,63655],{"class":85},"    .avatar",[79,63657,17604],{"class":228},[79,63659,63660,63662,63664,63666,63668],{"class":81,"line":631},[79,63661,56760],{"class":96},[79,63663,53431],{"class":228},[79,63665,2847],{"class":96},[79,63667,53486],{"class":448},[79,63669,3400],{"class":228},[79,63671,63672,63674,63676,63678,63680],{"class":81,"line":637},[79,63673,56774],{"class":96},[79,63675,53431],{"class":228},[79,63677,2847],{"class":96},[79,63679,53486],{"class":448},[79,63681,3400],{"class":228},[79,63683,63684,63686,63688,63690,63692],{"class":81,"line":643},[79,63685,57123],{"class":96},[79,63687,53431],{"class":228},[79,63689,2896],{"class":96},[79,63691,1094],{"class":448},[79,63693,3400],{"class":228},[79,63695,63696,63699,63701,63704],{"class":81,"line":649},[79,63697,63698],{"class":96},"      overflow",[79,63700,53431],{"class":228},[79,63702,63703],{"class":96},"hidden",[79,63705,3400],{"class":228},[79,63707,63708,63711,63713,63716,63718,63721,63723,63726,63728,63730,63733],{"class":81,"line":655},[79,63709,63710],{"class":96},"      background",[79,63712,53431],{"class":228},[79,63714,63715],{"class":96},"url",[79,63717,455],{"class":228},[79,63719,63720],{"class":7284},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[79,63722,15747],{"class":228},[79,63724,63725],{"class":96},"no-repeat",[79,63727,19169],{"class":96},[79,63729,26998],{"class":228},[79,63731,63732],{"class":96},"cover",[79,63734,3400],{"class":228},[79,63736,63737,63740,63742,63744,63746],{"class":81,"line":660},[79,63738,63739],{"class":96},"      margin-right",[79,63741,53431],{"class":228},[79,63743,2940],{"class":96},[79,63745,53486],{"class":448},[79,63747,3400],{"class":228},[79,63749,63750],{"class":81,"line":666},[79,63751,4272],{"class":228},[79,63753,63754],{"class":81,"line":672},[79,63755,542],{"emptyLinePlaceholder":541},[79,63757,63758,63760,63763],{"class":81,"line":678},[79,63759,63593],{"class":85},[79,63761,63762],{"class":232}," textarea",[79,63764,17604],{"class":228},[79,63766,63767,63770,63772,63774],{"class":81,"line":684},[79,63768,63769],{"class":96},"      outline",[79,63771,53431],{"class":228},[79,63773,56726],{"class":96},[79,63775,3400],{"class":228},[79,63777,63778,63781,63783,63786],{"class":81,"line":690},[79,63779,63780],{"class":96},"      border-color",[79,63782,53431],{"class":228},[79,63784,63785],{"class":96},"transparent",[79,63787,3400],{"class":228},[79,63789,63790,63793,63795,63797],{"class":81,"line":695},[79,63791,63792],{"class":96},"      resize",[79,63794,53431],{"class":228},[79,63796,56726],{"class":96},[79,63798,3400],{"class":228},[79,63800,63801,63803,63805,63808],{"class":81,"line":700},[79,63802,63710],{"class":96},[79,63804,53431],{"class":228},[79,63806,63807],{"class":96},"#f5f5f5",[79,63809,3400],{"class":228},[79,63811,63812,63814,63816,63818,63820],{"class":81,"line":712},[79,63813,57123],{"class":96},[79,63815,53431],{"class":228},[79,63817,2537],{"class":96},[79,63819,53486],{"class":448},[79,63821,3400],{"class":228},[79,63823,63824,63827,63829,63831],{"class":81,"line":721},[79,63825,63826],{"class":96},"      flex",[79,63828,53431],{"class":228},[79,63830,775],{"class":96},[79,63832,3400],{"class":228},[79,63834,63835,63837,63839,63841,63843],{"class":81,"line":726},[79,63836,56684],{"class":96},[79,63838,53431],{"class":228},[79,63840,2689],{"class":96},[79,63842,53486],{"class":448},[79,63844,3400],{"class":228},[79,63846,63847,63850,63852,63854,63856,63858],{"class":81,"line":731},[79,63848,63849],{"class":96},"      transition",[79,63851,53431],{"class":228},[79,63853,30137],{"class":96},[79,63855,998],{"class":96},[79,63857,2935],{"class":448},[79,63859,3400],{"class":228},[79,63861,63862,63864,63866,63868,63870],{"class":81,"line":748},[79,63863,56774],{"class":96},[79,63865,53431],{"class":228},[79,63867,3190],{"class":96},[79,63869,53486],{"class":448},[79,63871,3400],{"class":228},[79,63873,63874],{"class":81,"line":765},[79,63875,4272],{"class":228},[79,63877,63878],{"class":81,"line":780},[79,63879,542],{"emptyLinePlaceholder":541},[79,63881,63882,63884,63886,63889],{"class":81,"line":811},[79,63883,63593],{"class":85},[79,63885,63762],{"class":232},[79,63887,63888],{"class":85},":focus",[79,63890,17604],{"class":228},[79,63892,63893,63895,63897,63900],{"class":81,"line":816},[79,63894,63780],{"class":96},[79,63896,53431],{"class":228},[79,63898,63899],{"class":96},"#e4e4e4",[79,63901,3400],{"class":228},[79,63903,63904,63906,63908,63910],{"class":81,"line":821},[79,63905,63710],{"class":96},[79,63907,53431],{"class":228},[79,63909,62831],{"class":96},[79,63911,3400],{"class":228},[79,63913,63914,63916,63918,63920,63922],{"class":81,"line":837},[79,63915,56774],{"class":96},[79,63917,53431],{"class":228},[79,63919,2896],{"class":96},[79,63921,53486],{"class":448},[79,63923,3400],{"class":228},[79,63925,63926],{"class":81,"line":853},[79,63927,4272],{"class":228},[79,63929,63930],{"class":81,"line":864},[79,63931,542],{"emptyLinePlaceholder":541},[79,63933,63934,63936,63938],{"class":81,"line":869},[79,63935,63593],{"class":85},[79,63937,59456],{"class":232},[79,63939,17604],{"class":228},[79,63941,63942,63944,63946,63949],{"class":81,"line":885},[79,63943,63710],{"class":96},[79,63945,53431],{"class":228},[79,63947,63948],{"class":96},"#00aeec",[79,63950,3400],{"class":228},[79,63952,63953,63955,63957,63959],{"class":81,"line":891},[79,63954,59405],{"class":96},[79,63956,53431],{"class":228},[79,63958,62831],{"class":96},[79,63960,3400],{"class":228},[79,63962,63963,63966,63968,63970],{"class":81,"line":896},[79,63964,63965],{"class":96},"      border",[79,63967,53431],{"class":228},[79,63969,56726],{"class":96},[79,63971,3400],{"class":228},[79,63973,63974,63976,63978,63980,63982],{"class":81,"line":907},[79,63975,57123],{"class":96},[79,63977,53431],{"class":228},[79,63979,2537],{"class":96},[79,63981,53486],{"class":448},[79,63983,3400],{"class":228},[79,63985,63986,63989,63991,63993,63995],{"class":81,"line":912},[79,63987,63988],{"class":96},"      margin-left",[79,63990,53431],{"class":228},[79,63992,2689],{"class":96},[79,63994,53486],{"class":448},[79,63996,3400],{"class":228},[79,63998,63999,64001,64003,64005,64007],{"class":81,"line":935},[79,64000,56760],{"class":96},[79,64002,53431],{"class":228},[79,64004,2599],{"class":96},[79,64006,53486],{"class":448},[79,64008,3400],{"class":228},[79,64010,64011,64014,64016,64019],{"class":81,"line":946},[79,64012,64013],{"class":96},"      cursor",[79,64015,53431],{"class":228},[79,64017,64018],{"class":96},"pointer",[79,64020,3400],{"class":228},[79,64022,64023],{"class":81,"line":960},[79,64024,4272],{"class":228},[79,64026,64027],{"class":81,"line":975},[79,64028,542],{"emptyLinePlaceholder":541},[79,64030,64031,64033,64036],{"class":81,"line":980},[79,64032,63593],{"class":85},[79,64034,64035],{"class":85}," .total",[79,64037,17604],{"class":228},[79,64039,64040,64042,64044,64046,64048],{"class":81,"line":1006},[79,64041,63739],{"class":96},[79,64043,53431],{"class":228},[79,64045,2852],{"class":96},[79,64047,53486],{"class":448},[79,64049,3400],{"class":228},[79,64051,64052,64054,64056,64059],{"class":81,"line":1027},[79,64053,59405],{"class":96},[79,64055,53431],{"class":228},[79,64057,64058],{"class":96},"#999",[79,64060,3400],{"class":228},[79,64062,64063,64066,64068,64070,64072],{"class":81,"line":1032},[79,64064,64065],{"class":96},"      margin-top",[79,64067,53431],{"class":228},[79,64069,2563],{"class":96},[79,64071,53486],{"class":448},[79,64073,3400],{"class":228},[79,64075,64076,64079,64081,64083],{"class":81,"line":1047},[79,64077,64078],{"class":96},"      opacity",[79,64080,53431],{"class":228},[79,64082,759],{"class":96},[79,64084,3400],{"class":228},[79,64086,64087,64089,64091,64093,64095,64097],{"class":81,"line":1053},[79,64088,63849],{"class":96},[79,64090,53431],{"class":228},[79,64092,30137],{"class":96},[79,64094,998],{"class":96},[79,64096,2935],{"class":448},[79,64098,3400],{"class":228},[79,64100,64101],{"class":81,"line":1058},[79,64102,4272],{"class":228},[79,64104,64105],{"class":81,"line":1069},[79,64106,542],{"emptyLinePlaceholder":541},[79,64108,64109,64112],{"class":81,"line":1081},[79,64110,64111],{"class":85},"    .list",[79,64113,17604],{"class":228},[79,64115,64116,64118,64120,64122,64124],{"class":81,"line":1086},[79,64117,63600],{"class":96},[79,64119,53431],{"class":228},[79,64121,6060],{"class":96},[79,64123,53486],{"class":448},[79,64125,3400],{"class":228},[79,64127,64128,64130,64132,64134,64136],{"class":81,"line":1108},[79,64129,63613],{"class":96},[79,64131,53431],{"class":228},[79,64133,63618],{"class":96},[79,64135,53486],{"class":448},[79,64137,3400],{"class":228},[79,64139,64140,64142,64144,64146],{"class":81,"line":1153},[79,64141,56998],{"class":96},[79,64143,53431],{"class":228},[79,64145,53471],{"class":96},[79,64147,3400],{"class":228},[79,64149,64150],{"class":81,"line":1158},[79,64151,4272],{"class":228},[79,64153,64154],{"class":81,"line":1180},[79,64155,542],{"emptyLinePlaceholder":541},[79,64157,64158,64160,64163],{"class":81,"line":1197},[79,64159,64111],{"class":85},[79,64161,64162],{"class":85}," .item",[79,64164,17604],{"class":228},[79,64166,64167,64169,64171,64173,64175],{"class":81,"line":1202},[79,64168,56760],{"class":96},[79,64170,53431],{"class":228},[79,64172,2555],{"class":96},[79,64174,1094],{"class":448},[79,64176,3400],{"class":228},[79,64178,64179,64181,64183,64185],{"class":81,"line":1207},[79,64180,56998],{"class":96},[79,64182,53431],{"class":228},[79,64184,53471],{"class":96},[79,64186,3400],{"class":228},[79,64188,64189],{"class":81,"line":1223},[79,64190,4272],{"class":228},[79,64192,64193],{"class":81,"line":18722},[79,64194,542],{"emptyLinePlaceholder":541},[79,64196,64197,64199,64201,64204],{"class":81,"line":18728},[79,64198,64111],{"class":85},[79,64200,64162],{"class":85},[79,64202,64203],{"class":85}," .info",[79,64205,17604],{"class":228},[79,64207,64208,64210,64212,64214],{"class":81,"line":18739},[79,64209,63826],{"class":96},[79,64211,53431],{"class":228},[79,64213,775],{"class":96},[79,64215,3400],{"class":228},[79,64217,64218,64221,64223,64225,64227,64230,64233],{"class":81,"line":18762},[79,64219,64220],{"class":96},"      border-bottom",[79,64222,53431],{"class":228},[79,64224,775],{"class":96},[79,64226,53486],{"class":448},[79,64228,64229],{"class":96}," dashed",[79,64231,64232],{"class":96}," #e4e4e4",[79,64234,3400],{"class":228},[79,64236,64237,64240,64242,64244,64246],{"class":81,"line":18784},[79,64238,64239],{"class":96},"      padding-bottom",[79,64241,53431],{"class":228},[79,64243,2689],{"class":96},[79,64245,53486],{"class":448},[79,64247,3400],{"class":228},[79,64249,64250],{"class":81,"line":18789},[79,64251,4272],{"class":228},[79,64253,64254],{"class":81,"line":18795},[79,64255,542],{"emptyLinePlaceholder":541},[79,64257,64258,64260,64262,64264],{"class":81,"line":18809},[79,64259,64111],{"class":85},[79,64261,64162],{"class":85},[79,64263,8890],{"class":232},[79,64265,17604],{"class":228},[79,64267,64268,64270,64272,64274],{"class":81,"line":18822},[79,64269,56695],{"class":96},[79,64271,53431],{"class":228},[79,64273,759],{"class":96},[79,64275,3400],{"class":228},[79,64277,64278],{"class":81,"line":18827},[79,64279,4272],{"class":228},[79,64281,64282],{"class":81,"line":18841},[79,64283,542],{"emptyLinePlaceholder":541},[79,64285,64286,64288,64290,64293],{"class":81,"line":18846},[79,64287,64111],{"class":85},[79,64289,64162],{"class":85},[79,64291,64292],{"class":85}," .name",[79,64294,17604],{"class":228},[79,64296,64297,64299,64301,64304],{"class":81,"line":18852},[79,64298,59405],{"class":96},[79,64300,53431],{"class":228},[79,64302,64303],{"class":96},"#FB7299",[79,64305,3400],{"class":228},[79,64307,64308,64310,64312,64314,64316],{"class":81,"line":18857},[79,64309,56911],{"class":96},[79,64311,53431],{"class":228},[79,64313,2789],{"class":96},[79,64315,53486],{"class":448},[79,64317,3400],{"class":228},[79,64319,64320,64323,64325,64328],{"class":81,"line":18871},[79,64321,64322],{"class":96},"      font-weight",[79,64324,53431],{"class":228},[79,64326,64327],{"class":96},"bold",[79,64329,3400],{"class":228},[79,64331,64332],{"class":81,"line":18876},[79,64333,4272],{"class":228},[79,64335,64336],{"class":81,"line":18881},[79,64337,542],{"emptyLinePlaceholder":541},[79,64339,64340,64342,64344,64347],{"class":81,"line":18895},[79,64341,64111],{"class":85},[79,64343,64162],{"class":85},[79,64345,64346],{"class":85}," .text",[79,64348,17604],{"class":228},[79,64350,64351,64353,64355,64358],{"class":81,"line":18907},[79,64352,59405],{"class":96},[79,64354,53431],{"class":228},[79,64356,64357],{"class":96},"#333",[79,64359,3400],{"class":228},[79,64361,64362,64364,64366,64368,64370,64372],{"class":81,"line":18912},[79,64363,56684],{"class":96},[79,64365,53431],{"class":228},[79,64367,2689],{"class":96},[79,64369,53486],{"class":448},[79,64371,1103],{"class":96},[79,64373,3400],{"class":228},[79,64375,64376],{"class":81,"line":18925},[79,64377,4272],{"class":228},[79,64379,64380],{"class":81,"line":18930},[79,64381,542],{"emptyLinePlaceholder":541},[79,64383,64384,64386,64388,64391],{"class":81,"line":18935},[79,64385,64111],{"class":85},[79,64387,64162],{"class":85},[79,64389,64390],{"class":85}," .time",[79,64392,17604],{"class":228},[79,64394,64395,64397,64399,64401],{"class":81,"line":18940},[79,64396,59405],{"class":96},[79,64398,53431],{"class":228},[79,64400,64058],{"class":96},[79,64402,3400],{"class":228},[79,64404,64405,64407,64409,64411,64413],{"class":81,"line":18953},[79,64406,56911],{"class":96},[79,64408,53431],{"class":228},[79,64410,2739],{"class":96},[79,64412,53486],{"class":448},[79,64414,3400],{"class":228},[79,64416,64417],{"class":81,"line":18958},[79,64418,4272],{"class":228},[79,64420,64421,64423,64425],{"class":81,"line":34631},[79,64422,54410],{"class":228},[79,64424,2159],{"class":232},[79,64426,53301],{"class":228},[79,64428,64429,64431,64433],{"class":81,"line":34637},[79,64430,53779],{"class":228},[79,64432,53328],{"class":232},[79,64434,53301],{"class":228},[79,64436,64437],{"class":81,"line":34643},[79,64438,542],{"emptyLinePlaceholder":541},[79,64440,64441,64443,64445],{"class":81,"line":34649},[79,64442,229],{"class":228},[79,64444,53794],{"class":232},[79,64446,53301],{"class":228},[79,64448,64449,64451,64453,64455,64457,64460],{"class":81,"line":34655},[79,64450,54138],{"class":228},[79,64452,53605],{"class":232},[79,64454,55477],{"class":85},[79,64456,239],{"class":228},[79,64458,64459],{"class":89},"\"wrapper\"",[79,64461,53301],{"class":228},[79,64463,64464,64466,64468,64470,64472,64475,64477,64479],{"class":81,"line":34666},[79,64465,53335],{"class":228},[79,64467,2684],{"class":232},[79,64469,55477],{"class":85},[79,64471,239],{"class":228},[79,64473,64474],{"class":89},"\"avatar\"",[79,64476,57303],{"class":228},[79,64478,2684],{"class":232},[79,64480,53301],{"class":228},[79,64482,64483,64485,64487,64489,64491,64494,64496,64498,64501,64503,64505,64507,64510,64512,64515,64517,64519],{"class":81,"line":34672},[79,64484,53335],{"class":228},[79,64486,56278],{"class":232},[79,64488,16991],{"class":85},[79,64490,239],{"class":228},[79,64492,64493],{"class":89},"\"tx\"",[79,64495,63009],{"class":85},[79,64497,239],{"class":228},[79,64499,64500],{"class":89},"\"发一条友善的评论\"",[79,64502,56301],{"class":85},[79,64504,239],{"class":228},[79,64506,5775],{"class":89},[79,64508,64509],{"class":85}," maxlength",[79,64511,239],{"class":228},[79,64513,64514],{"class":89},"\"200\"",[79,64516,57303],{"class":228},[79,64518,56278],{"class":232},[79,64520,53301],{"class":228},[79,64522,64523,64525,64527,64530,64532],{"class":81,"line":34692},[79,64524,53335],{"class":228},[79,64526,55877],{"class":232},[79,64528,64529],{"class":228},">发布\u003C\u002F",[79,64531,55877],{"class":232},[79,64533,53301],{"class":228},[79,64535,64536,64538,64540],{"class":81,"line":34698},[79,64537,54410],{"class":228},[79,64539,53605],{"class":232},[79,64541,53301],{"class":228},[79,64543,64544,64546,64548,64550,64552,64554],{"class":81,"line":34709},[79,64545,54138],{"class":228},[79,64547,53605],{"class":232},[79,64549,55477],{"class":85},[79,64551,239],{"class":228},[79,64553,64459],{"class":89},[79,64555,53301],{"class":228},[79,64557,64558,64560,64562,64564,64566,64569,64572,64574],{"class":81,"line":34715},[79,64559,53335],{"class":228},[79,64561,79],{"class":232},[79,64563,55477],{"class":85},[79,64565,239],{"class":228},[79,64567,64568],{"class":89},"\"total\"",[79,64570,64571],{"class":228},">0\u002F200字\u003C\u002F",[79,64573,79],{"class":232},[79,64575,53301],{"class":228},[79,64577,64578,64580,64582],{"class":81,"line":34721},[79,64579,54410],{"class":228},[79,64581,53605],{"class":232},[79,64583,53301],{"class":228},[79,64585,64586,64588,64590,64592,64594,64597],{"class":81,"line":34727},[79,64587,54138],{"class":228},[79,64589,53605],{"class":232},[79,64591,55477],{"class":85},[79,64593,239],{"class":228},[79,64595,64596],{"class":89},"\"list\"",[79,64598,53301],{"class":228},[79,64600,64601,64603,64605,64607,64609,64612,64615,64617,64620],{"class":81,"line":34733},[79,64602,53335],{"class":228},[79,64604,53605],{"class":232},[79,64606,55477],{"class":85},[79,64608,239],{"class":228},[79,64610,64611],{"class":89},"\"item\"",[79,64613,64614],{"class":85}," style",[79,64616,239],{"class":228},[79,64618,64619],{"class":89},"\"display: none;\"",[79,64621,53301],{"class":228},[79,64623,64624,64626,64628,64630,64632,64634,64636,64638],{"class":81,"line":34739},[79,64625,57223],{"class":228},[79,64627,2684],{"class":232},[79,64629,55477],{"class":85},[79,64631,239],{"class":228},[79,64633,64474],{"class":89},[79,64635,57303],{"class":228},[79,64637,2684],{"class":232},[79,64639,53301],{"class":228},[79,64641,64642,64644,64646,64648,64650,64653],{"class":81,"line":34745},[79,64643,57223],{"class":228},[79,64645,53605],{"class":232},[79,64647,55477],{"class":85},[79,64649,239],{"class":228},[79,64651,64652],{"class":89},"\"info\"",[79,64654,53301],{"class":228},[79,64656,64657,64659,64661,64663,64665,64668,64671,64673],{"class":81,"line":34751},[79,64658,57291],{"class":228},[79,64660,19],{"class":232},[79,64662,55477],{"class":85},[79,64664,239],{"class":228},[79,64666,64667],{"class":89},"\"name\"",[79,64669,64670],{"class":228},">清风徐来\u003C\u002F",[79,64672,19],{"class":232},[79,64674,53301],{"class":228},[79,64676,64677,64679,64681,64683,64685,64688,64691,64693],{"class":81,"line":34771},[79,64678,57291],{"class":228},[79,64680,19],{"class":232},[79,64682,55477],{"class":85},[79,64684,239],{"class":228},[79,64686,64687],{"class":89},"\"text\"",[79,64689,64690],{"class":228},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[79,64692,19],{"class":232},[79,64694,53301],{"class":228},[79,64696,64697,64699,64701,64703,64705,64708,64711,64713],{"class":81,"line":34777},[79,64698,57291],{"class":228},[79,64700,19],{"class":232},[79,64702,55477],{"class":85},[79,64704,239],{"class":228},[79,64706,64707],{"class":89},"\"time\"",[79,64709,64710],{"class":228},">2022-10-10 20:29:21\u003C\u002F",[79,64712,19],{"class":232},[79,64714,53301],{"class":228},[79,64716,64717,64719,64721],{"class":81,"line":34793},[79,64718,57396],{"class":228},[79,64720,53605],{"class":232},[79,64722,53301],{"class":228},[79,64724,64725,64727,64729],{"class":81,"line":34799},[79,64726,53770],{"class":228},[79,64728,53605],{"class":232},[79,64730,53301],{"class":228},[79,64732,64733,64735,64737],{"class":81,"line":34813},[79,64734,54410],{"class":228},[79,64736,53605],{"class":232},[79,64738,53301],{"class":228},[79,64740,64741,64743,64745],{"class":81,"line":34819},[79,64742,54138],{"class":228},[79,64744,53807],{"class":232},[79,64746,53301],{"class":228},[79,64748,64749,64751,64754,64756,64758,64760,64762,64765],{"class":81,"line":34834},[79,64750,13256],{"class":448},[79,64752,64753],{"class":96}," tx",[79,64755,556],{"class":448},[79,64757,56385],{"class":228},[79,64759,56388],{"class":85},[79,64761,455],{"class":228},[79,64763,64764],{"class":89},"'#tx'",[79,64766,850],{"class":228},[79,64768,64769,64771,64774,64776,64778,64780,64782,64785],{"class":81,"line":34840},[79,64770,13256],{"class":448},[79,64772,64773],{"class":96}," total",[79,64775,556],{"class":448},[79,64777,56385],{"class":228},[79,64779,56388],{"class":85},[79,64781,455],{"class":228},[79,64783,64784],{"class":89},"'.total'",[79,64786,850],{"class":228},[79,64788,64789],{"class":81,"line":34849},[79,64790,64791],{"class":2313},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[79,64793,64794,64797,64799,64801,64803,64805,64807],{"class":81,"line":34855},[79,64795,64796],{"class":228},"    tx.",[79,64798,59802],{"class":85},[79,64800,455],{"class":228},[79,64802,63316],{"class":89},[79,64804,1020],{"class":228},[79,64806,56438],{"class":448},[79,64808,56441],{"class":228},[79,64810,64811,64814,64816],{"class":81,"line":34864},[79,64812,64813],{"class":228},"      total.style.opacity ",[79,64815,239],{"class":448},[79,64817,57688],{"class":96},[79,64819,64820],{"class":81,"line":34870},[79,64821,35458],{"class":228},[79,64823,64824],{"class":81,"line":34876},[79,64825,64826],{"class":2313},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[79,64828,64829,64831,64833,64835,64837,64839,64841],{"class":81,"line":34885},[79,64830,64796],{"class":228},[79,64832,59802],{"class":85},[79,64834,455],{"class":228},[79,64836,63377],{"class":89},[79,64838,1020],{"class":228},[79,64840,56438],{"class":448},[79,64842,56441],{"class":228},[79,64844,64845,64847,64849],{"class":81,"line":34891},[79,64846,64813],{"class":228},[79,64848,239],{"class":448},[79,64850,49328],{"class":96},[79,64852,64853],{"class":81,"line":34902},[79,64854,35458],{"class":228},[79,64856,64857],{"class":81,"line":34908},[79,64858,64859],{"class":2313},"    \u002F\u002F 3. 检测用户输入\n",[79,64861,64862,64864,64866,64868,64871,64873,64875],{"class":81,"line":34927},[79,64863,64796],{"class":228},[79,64865,59802],{"class":85},[79,64867,455],{"class":228},[79,64869,64870],{"class":89},"'input'",[79,64872,1020],{"class":228},[79,64874,56438],{"class":448},[79,64876,56441],{"class":228},[79,64878,64879],{"class":81,"line":34933},[79,64880,64881],{"class":2313},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[79,64883,64884,64887,64889,64892,64895,64897,64900,64902,64904],{"class":81,"line":34944},[79,64885,64886],{"class":228},"      total.innerHTML ",[79,64888,239],{"class":448},[79,64890,64891],{"class":89}," `${",[79,64893,64894],{"class":228},"tx",[79,64896,2798],{"class":89},[79,64898,64899],{"class":228},"value",[79,64901,2798],{"class":89},[79,64903,53962],{"class":96},[79,64905,64906],{"class":89},"}\u002F200字`\n",[79,64908,64909],{"class":81,"line":34950},[79,64910,35458],{"class":228},[79,64912,64913],{"class":81,"line":34970},[79,64914,542],{"emptyLinePlaceholder":541},[79,64916,64917],{"class":81,"line":34986},[79,64918,64919],{"class":2313},"    \u002F\u002F const str = 'andy'\n",[79,64921,64922],{"class":81,"line":34992},[79,64923,64924],{"class":2313},"    \u002F\u002F console.log(str.length)\n",[79,64926,64927,64929,64931],{"class":81,"line":35006},[79,64928,54410],{"class":228},[79,64930,53807],{"class":232},[79,64932,53301],{"class":228},[79,64934,64935,64937,64939],{"class":81,"line":35012},[79,64936,53779],{"class":228},[79,64938,53794],{"class":232},[79,64940,53301],{"class":228},[79,64942,64943],{"class":81,"line":35018},[79,64944,542],{"emptyLinePlaceholder":541},[79,64946,64947,64949,64951],{"class":81,"line":35029},[79,64948,53779],{"class":228},[79,64950,52630],{"class":232},[79,64952,53301],{"class":228},[24023,64954,64956],{"id":64955},"_3254-change事件","3.2.5.4 change事件",[19,64958,64959],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,64961,64962],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,64964,64965],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[51,64967,64969],{"className":52628,"code":64968,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cinput type=\"text\">\n  \u003Cscript>\n    const input = document.querySelector('input')\n    input.addEventListener('change', function () {\n      console.log(111)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,64970,64971,64981,64995,64999,65007,65021,65041,65053,65061,65065,65073,65087,65095,65113,65131,65143,65147,65155,65163,65167],{"__ignoreMap":57},[79,64972,64973,64975,64977,64979],{"class":81,"line":82},[79,64974,53292],{"class":228},[79,64976,53295],{"class":232},[79,64978,53298],{"class":85},[79,64980,53301],{"class":228},[79,64982,64983,64985,64987,64989,64991,64993],{"class":81,"line":167},[79,64984,229],{"class":228},[79,64986,52630],{"class":232},[79,64988,53310],{"class":85},[79,64990,239],{"class":228},[79,64992,53315],{"class":89},[79,64994,53301],{"class":228},[79,64996,64997],{"class":81,"line":178},[79,64998,542],{"emptyLinePlaceholder":541},[79,65000,65001,65003,65005],{"class":81,"line":545},[79,65002,229],{"class":228},[79,65004,53328],{"class":232},[79,65006,53301],{"class":228},[79,65008,65009,65011,65013,65015,65017,65019],{"class":81,"line":550},[79,65010,54138],{"class":228},[79,65012,53338],{"class":232},[79,65014,53341],{"class":85},[79,65016,239],{"class":228},[79,65018,53346],{"class":89},[79,65020,53301],{"class":228},[79,65022,65023,65025,65027,65029,65031,65033,65035,65037,65039],{"class":81,"line":562},[79,65024,54138],{"class":228},[79,65026,53338],{"class":232},[79,65028,236],{"class":85},[79,65030,239],{"class":228},[79,65032,53385],{"class":89},[79,65034,53365],{"class":85},[79,65036,239],{"class":228},[79,65038,53392],{"class":89},[79,65040,53301],{"class":228},[79,65042,65043,65045,65047,65049,65051],{"class":81,"line":568},[79,65044,54138],{"class":228},[79,65046,53401],{"class":232},[79,65048,53404],{"class":228},[79,65050,53401],{"class":232},[79,65052,53301],{"class":228},[79,65054,65055,65057,65059],{"class":81,"line":574},[79,65056,53779],{"class":228},[79,65058,53328],{"class":232},[79,65060,53301],{"class":228},[79,65062,65063],{"class":81,"line":579},[79,65064,542],{"emptyLinePlaceholder":541},[79,65066,65067,65069,65071],{"class":81,"line":585},[79,65068,229],{"class":228},[79,65070,53794],{"class":232},[79,65072,53301],{"class":228},[79,65074,65075,65077,65079,65081,65083,65085],{"class":81,"line":591},[79,65076,54138],{"class":228},[79,65078,55812],{"class":232},[79,65080,245],{"class":85},[79,65082,239],{"class":228},[79,65084,64687],{"class":89},[79,65086,53301],{"class":228},[79,65088,65089,65091,65093],{"class":81,"line":596},[79,65090,54138],{"class":228},[79,65092,53807],{"class":232},[79,65094,53301],{"class":228},[79,65096,65097,65099,65101,65103,65105,65107,65109,65111],{"class":81,"line":602},[79,65098,13256],{"class":448},[79,65100,62594],{"class":96},[79,65102,556],{"class":448},[79,65104,56385],{"class":228},[79,65106,56388],{"class":85},[79,65108,455],{"class":228},[79,65110,64870],{"class":89},[79,65112,850],{"class":228},[79,65114,65115,65118,65120,65122,65125,65127,65129],{"class":81,"line":608},[79,65116,65117],{"class":228},"    input.",[79,65119,59802],{"class":85},[79,65121,455],{"class":228},[79,65123,65124],{"class":89},"'change'",[79,65126,1020],{"class":228},[79,65128,56438],{"class":448},[79,65130,56441],{"class":228},[79,65132,65133,65135,65137,65139,65141],{"class":81,"line":614},[79,65134,60233],{"class":228},[79,65136,60236],{"class":85},[79,65138,455],{"class":228},[79,65140,2833],{"class":96},[79,65142,850],{"class":228},[79,65144,65145],{"class":81,"line":619},[79,65146,35458],{"class":228},[79,65148,65149,65151,65153],{"class":81,"line":625},[79,65150,54410],{"class":228},[79,65152,53807],{"class":232},[79,65154,53301],{"class":228},[79,65156,65157,65159,65161],{"class":81,"line":631},[79,65158,53779],{"class":228},[79,65160,53794],{"class":232},[79,65162,53301],{"class":228},[79,65164,65165],{"class":81,"line":637},[79,65166,542],{"emptyLinePlaceholder":541},[79,65168,65169,65171,65173],{"class":81,"line":643},[79,65170,53779],{"class":228},[79,65172,52630],{"class":232},[79,65174,53301],{"class":228},[19,65176,65177],{},"总结：内容发生改变才回去触发",[339,65179,65181],{"id":65180},"_326-事件对象","3.2.6 事件对象",[24023,65183,65185],{"id":65184},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,65187,65188],{},[3569,65189],{"alt":57,"src":65190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,65192,65193],{},[3569,65194],{"alt":57,"src":65195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,65197,65198],{},"点击一次，就输出了事件对象，它是个对象",[19,65200,65201],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,65203,65204],{},[3569,65205],{"alt":57,"src":65206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[24023,65208,65210],{"id":65209},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,65212,65213],{},[3569,65214],{"alt":57,"src":65215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,65217,65218],{},"实现按特殊字符才是实现打印输出效果：",[51,65220,65222],{"className":219,"code":65221,"language":221,"meta":57,"style":57},"\u003Cbody>\n  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n  \u003Cinput type=\"text\">\n  \u003Cscript>\n    \u002F\u002F const btn = document.querySelector('button')\n    \u002F\u002F btn.addEventListener('click', function (e) {\n    \u002F\u002F   console.log(e);\n    \u002F\u002F })\n    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n    const input = document.querySelector('input')\n    input.addEventListener('keyup', function (e) {\n      if (e.key === 'Enter') {\n        console.log('我按下了回车键')\n      }\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[59,65223,65224,65232,65237,65251,65259,65264,65269,65274,65279,65284,65289,65294,65299,65304,65308,65312,65320],{"__ignoreMap":57},[79,65225,65226,65228,65230],{"class":81,"line":82},[79,65227,229],{"class":228},[79,65229,53794],{"class":232},[79,65231,53301],{"class":228},[79,65233,65234],{"class":81,"line":167},[79,65235,65236],{"class":2313},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[79,65238,65239,65241,65243,65245,65247,65249],{"class":81,"line":178},[79,65240,54138],{"class":228},[79,65242,55812],{"class":232},[79,65244,245],{"class":85},[79,65246,239],{"class":228},[79,65248,64687],{"class":89},[79,65250,53301],{"class":228},[79,65252,65253,65255,65257],{"class":81,"line":545},[79,65254,54138],{"class":228},[79,65256,53807],{"class":232},[79,65258,53301],{"class":228},[79,65260,65261],{"class":81,"line":550},[79,65262,65263],{"class":228},"    \u002F\u002F const btn = document.querySelector('button')\n",[79,65265,65266],{"class":81,"line":562},[79,65267,65268],{"class":228},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[79,65270,65271],{"class":81,"line":568},[79,65272,65273],{"class":228},"    \u002F\u002F   console.log(e);\n",[79,65275,65276],{"class":81,"line":574},[79,65277,65278],{"class":228},"    \u002F\u002F })\n",[79,65280,65281],{"class":81,"line":579},[79,65282,65283],{"class":228},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[79,65285,65286],{"class":81,"line":585},[79,65287,65288],{"class":228},"    const input = document.querySelector('input')\n",[79,65290,65291],{"class":81,"line":591},[79,65292,65293],{"class":228},"    input.addEventListener('keyup', function (e) {\n",[79,65295,65296],{"class":81,"line":596},[79,65297,65298],{"class":228},"      if (e.key === 'Enter') {\n",[79,65300,65301],{"class":81,"line":602},[79,65302,65303],{"class":228},"        console.log('我按下了回车键')\n",[79,65305,65306],{"class":81,"line":608},[79,65307,54391],{"class":228},[79,65309,65310],{"class":81,"line":614},[79,65311,35458],{"class":228},[79,65313,65314,65316,65318],{"class":81,"line":619},[79,65315,54410],{"class":228},[79,65317,53807],{"class":232},[79,65319,53301],{"class":228},[79,65321,65322,65324,65326],{"class":81,"line":625},[79,65323,53779],{"class":228},[79,65325,53794],{"class":232},[79,65327,53301],{"class":228},[24023,65329,65331],{"id":65330},"_3263-trim方法","3.2.6.3 trim方法",[19,65333,65334],{},[3569,65335],{"alt":57,"src":65336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,65338,65339],{},[3569,65340],{"alt":57,"src":65341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,65343,65344],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,65346,65347],{},"str.trim()",[339,65349,65351],{"id":65350},"_327-环境对象","3.2.7 环境对象",[19,65353,65354],{},[3569,65355],{"alt":57,"src":65356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,65358,65359],{},[3569,65360],{"alt":57,"src":65361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,65363,65364],{},[3569,65365],{"alt":57,"src":65366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,65368,65369],{},"实际函数调用是window.fn()",[19,65371,65372],{},"普通函数里面this指向的是window",[3246,65374,65375,65378,65381],{},[29,65376,65377],{},"在普通函数下，this指向的是window",[29,65379,65380],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[29,65382,65383],{},"箭头函数没有this",[19,65385,65386],{},"粗略记法就是：谁调用，this就指向谁",[19,65388,65389],{},[3569,65390],{"alt":57,"src":65391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,65393,65394],{},[3569,65395],{"alt":57,"src":65396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,65398,65399],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,65401,65402],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[51,65404,65406],{"className":219,"code":65405,"language":221,"meta":57,"style":57},"\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const button = document.querySelector('button')\n    button.addEventListener('click', function () {\n      \u002F\u002F console.log(this);\n      this.style.color = 'pink'\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[59,65407,65408,65416,65428,65436,65441,65446,65451,65456,65460,65468],{"__ignoreMap":57},[79,65409,65410,65412,65414],{"class":81,"line":82},[79,65411,229],{"class":228},[79,65413,53794],{"class":232},[79,65415,53301],{"class":228},[79,65417,65418,65420,65422,65424,65426],{"class":81,"line":167},[79,65419,54138],{"class":228},[79,65421,55877],{"class":232},[79,65423,55883],{"class":228},[79,65425,55877],{"class":232},[79,65427,53301],{"class":228},[79,65429,65430,65432,65434],{"class":81,"line":178},[79,65431,54138],{"class":228},[79,65433,53807],{"class":232},[79,65435,53301],{"class":228},[79,65437,65438],{"class":81,"line":545},[79,65439,65440],{"class":228},"    const button = document.querySelector('button')\n",[79,65442,65443],{"class":81,"line":550},[79,65444,65445],{"class":228},"    button.addEventListener('click', function () {\n",[79,65447,65448],{"class":81,"line":562},[79,65449,65450],{"class":228},"      \u002F\u002F console.log(this);\n",[79,65452,65453],{"class":81,"line":568},[79,65454,65455],{"class":228},"      this.style.color = 'pink'\n",[79,65457,65458],{"class":81,"line":574},[79,65459,35458],{"class":228},[79,65461,65462,65464,65466],{"class":81,"line":579},[79,65463,54410],{"class":228},[79,65465,53807],{"class":232},[79,65467,53301],{"class":228},[79,65469,65470,65472,65474],{"class":81,"line":585},[79,65471,53779],{"class":228},[79,65473,53794],{"class":232},[79,65475,53301],{"class":228},[339,65477,65479],{"id":65478},"_328-回调函数","3.2.8 回调函数",[19,65481,65482],{},[3569,65483],{"alt":57,"src":65484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,65486,65487],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,65489,13367],{},[3246,65491,65492,65495,65498],{},[29,65493,65494],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[29,65496,65497],{},"回调函数本质还是函数，只不过把它当成参数使用",[29,65499,65500],{},"使用匿名函数做为回调函数比较常见",[339,65502,65504],{"id":65503},"_329-tab栏切换","3.2.9 tab栏切换",[19,65506,65507],{},[3569,65508],{"alt":57,"src":65509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[51,65511,65513],{"className":52628,"code":65512,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Ctitle>tab栏切换\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      margin: 0;\n      padding: 0;\n    }\n\n    .tab {\n      width: 590px;\n      height: 340px;\n      margin: 20px;\n      border: 1px solid #e4e4e4;\n    }\n\n    .tab-nav {\n      width: 100%;\n      height: 60px;\n      line-height: 60px;\n      display: flex;\n      justify-content: space-between;\n    }\n\n    .tab-nav h3 {\n      font-size: 24px;\n      font-weight: normal;\n      margin-left: 20px;\n    }\n\n    .tab-nav ul {\n      list-style: none;\n      display: flex;\n      justify-content: flex-end;\n    }\n\n    .tab-nav ul li {\n      margin: 0 20px;\n      font-size: 14px;\n    }\n\n    .tab-nav ul li a {\n      text-decoration: none;\n      border-bottom: 2px solid transparent;\n      color: #333;\n    }\n\n    .tab-nav ul li a.active {\n      border-color: #e1251b;\n      color: #e1251b;\n    }\n\n    .tab-content {\n      padding: 0 16px;\n    }\n\n    .tab-content .item {\n      display: none;\n    }\n\n    .tab-content .item.active {\n      display: block;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"tab\">\n    \u003Cdiv class=\"tab-nav\">\n      \u003Ch3>每日特价\u003C\u002Fh3>\n      \u003Cul>\n        \u003Cli>\u003Ca class=\"active\" href=\"javascript:;\">精选\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\">美食\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\">百货\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\">个护\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\">预告\u003C\u002Fa>\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"tab-content\">\n      \u003Cdiv class=\"item active\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n    \u002F\u002F 1.1 获取 a 元素 \n    const as = document.querySelectorAll('.tab-nav a')\n    \u002F\u002F console.log(as) \n    for (let i = 0; i \u003C as.length; i++) {\n      \u002F\u002F console.log(as[i])\n      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n      as[i].addEventListener('mouseenter', function () {\n        \u002F\u002F console.log('鼠标经过')\n        \u002F\u002F 排他思想  \n        \u002F\u002F 干掉别人 移除类active\n        document.querySelector('.tab-nav .active').classList.remove('active')\n        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n        this.classList.add('active')\n\n        \u002F\u002F 下面5个大盒子 一一对应  .item \n        \u002F\u002F 干掉别人\n        document.querySelector('.tab-content .active').classList.remove('active')\n        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n        document.querySelector(`.tab-content .item:nth-child(${i + 1})`).classList.add('active')\n\n      })\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,65514,65515,65525,65539,65543,65551,65565,65585,65605,65618,65626,65632,65642,65652,65656,65660,65667,65680,65693,65705,65721,65725,65729,65736,65748,65760,65772,65782,65792,65796,65800,65809,65821,65832,65844,65848,65852,65860,65870,65880,65890,65894,65898,65908,65922,65934,65938,65942,65954,65965,65982,65992,65996,66000,66015,66026,66036,66040,66044,66051,66066,66070,66074,66082,66092,66096,66100,66109,66119,66123,66131,66139,66143,66151,66166,66181,66194,66202,66236,66263,66290,66317,66344,66352,66360,66375,66412,66447,66482,66517,66552,66560,66568,66576,66581,66586,66606,66611,66640,66645,66650,66668,66673,66678,66683,66705,66710,66726,66730,66735,66740,66761,66766,66795,66799,66804,66808,66816,66824,66828],{"__ignoreMap":57},[79,65516,65517,65519,65521,65523],{"class":81,"line":82},[79,65518,53292],{"class":228},[79,65520,53295],{"class":232},[79,65522,53298],{"class":85},[79,65524,53301],{"class":228},[79,65526,65527,65529,65531,65533,65535,65537],{"class":81,"line":167},[79,65528,229],{"class":228},[79,65530,52630],{"class":232},[79,65532,53310],{"class":85},[79,65534,239],{"class":228},[79,65536,53315],{"class":89},[79,65538,53301],{"class":228},[79,65540,65541],{"class":81,"line":178},[79,65542,542],{"emptyLinePlaceholder":541},[79,65544,65545,65547,65549],{"class":81,"line":545},[79,65546,229],{"class":228},[79,65548,53328],{"class":232},[79,65550,53301],{"class":228},[79,65552,65553,65555,65557,65559,65561,65563],{"class":81,"line":550},[79,65554,54138],{"class":228},[79,65556,53338],{"class":232},[79,65558,53341],{"class":85},[79,65560,239],{"class":228},[79,65562,53346],{"class":89},[79,65564,61116],{"class":228},[79,65566,65567,65569,65571,65573,65575,65577,65579,65581,65583],{"class":81,"line":562},[79,65568,54138],{"class":228},[79,65570,53338],{"class":232},[79,65572,53357],{"class":85},[79,65574,239],{"class":228},[79,65576,53362],{"class":89},[79,65578,53365],{"class":85},[79,65580,239],{"class":228},[79,65582,53370],{"class":89},[79,65584,61116],{"class":228},[79,65586,65587,65589,65591,65593,65595,65597,65599,65601,65603],{"class":81,"line":568},[79,65588,54138],{"class":228},[79,65590,53338],{"class":232},[79,65592,236],{"class":85},[79,65594,239],{"class":228},[79,65596,53385],{"class":89},[79,65598,53365],{"class":85},[79,65600,239],{"class":228},[79,65602,53392],{"class":89},[79,65604,61116],{"class":228},[79,65606,65607,65609,65611,65614,65616],{"class":81,"line":574},[79,65608,54138],{"class":228},[79,65610,53401],{"class":232},[79,65612,65613],{"class":228},">tab栏切换\u003C\u002F",[79,65615,53401],{"class":232},[79,65617,53301],{"class":228},[79,65619,65620,65622,65624],{"class":81,"line":579},[79,65621,54138],{"class":228},[79,65623,2159],{"class":232},[79,65625,53301],{"class":228},[79,65627,65628,65630],{"class":81,"line":585},[79,65629,8470],{"class":232},[79,65631,17604],{"class":228},[79,65633,65634,65636,65638,65640],{"class":81,"line":591},[79,65635,56695],{"class":96},[79,65637,53431],{"class":228},[79,65639,759],{"class":96},[79,65641,3400],{"class":228},[79,65643,65644,65646,65648,65650],{"class":81,"line":596},[79,65645,56684],{"class":96},[79,65647,53431],{"class":228},[79,65649,759],{"class":96},[79,65651,3400],{"class":228},[79,65653,65654],{"class":81,"line":602},[79,65655,4272],{"class":228},[79,65657,65658],{"class":81,"line":608},[79,65659,542],{"emptyLinePlaceholder":541},[79,65661,65662,65665],{"class":81,"line":614},[79,65663,65664],{"class":85},"    .tab",[79,65666,17604],{"class":228},[79,65668,65669,65671,65673,65676,65678],{"class":81,"line":619},[79,65670,56760],{"class":96},[79,65672,53431],{"class":228},[79,65674,65675],{"class":96},"590",[79,65677,53486],{"class":448},[79,65679,3400],{"class":228},[79,65681,65682,65684,65686,65689,65691],{"class":81,"line":625},[79,65683,56774],{"class":96},[79,65685,53431],{"class":228},[79,65687,65688],{"class":96},"340",[79,65690,53486],{"class":448},[79,65692,3400],{"class":228},[79,65694,65695,65697,65699,65701,65703],{"class":81,"line":631},[79,65696,56695],{"class":96},[79,65698,53431],{"class":228},[79,65700,2940],{"class":96},[79,65702,53486],{"class":448},[79,65704,3400],{"class":228},[79,65706,65707,65709,65711,65713,65715,65717,65719],{"class":81,"line":637},[79,65708,63965],{"class":96},[79,65710,53431],{"class":228},[79,65712,775],{"class":96},[79,65714,53486],{"class":448},[79,65716,53515],{"class":96},[79,65718,64232],{"class":96},[79,65720,3400],{"class":228},[79,65722,65723],{"class":81,"line":643},[79,65724,4272],{"class":228},[79,65726,65727],{"class":81,"line":649},[79,65728,542],{"emptyLinePlaceholder":541},[79,65730,65731,65734],{"class":81,"line":655},[79,65732,65733],{"class":85},"    .tab-nav",[79,65735,17604],{"class":228},[79,65737,65738,65740,65742,65744,65746],{"class":81,"line":660},[79,65739,56760],{"class":96},[79,65741,53431],{"class":228},[79,65743,2555],{"class":96},[79,65745,1094],{"class":448},[79,65747,3400],{"class":228},[79,65749,65750,65752,65754,65756,65758],{"class":81,"line":666},[79,65751,56774],{"class":96},[79,65753,53431],{"class":228},[79,65755,3147],{"class":96},[79,65757,53486],{"class":448},[79,65759,3400],{"class":228},[79,65761,65762,65764,65766,65768,65770],{"class":81,"line":672},[79,65763,59348],{"class":96},[79,65765,53431],{"class":228},[79,65767,3147],{"class":96},[79,65769,53486],{"class":448},[79,65771,3400],{"class":228},[79,65773,65774,65776,65778,65780],{"class":81,"line":678},[79,65775,56998],{"class":96},[79,65777,53431],{"class":228},[79,65779,53471],{"class":96},[79,65781,3400],{"class":228},[79,65783,65784,65786,65788,65790],{"class":81,"line":684},[79,65785,57009],{"class":96},[79,65787,53431],{"class":228},[79,65789,53662],{"class":96},[79,65791,3400],{"class":228},[79,65793,65794],{"class":81,"line":690},[79,65795,4272],{"class":228},[79,65797,65798],{"class":81,"line":695},[79,65799,542],{"emptyLinePlaceholder":541},[79,65801,65802,65804,65807],{"class":81,"line":700},[79,65803,65733],{"class":85},[79,65805,65806],{"class":232}," h3",[79,65808,17604],{"class":228},[79,65810,65811,65813,65815,65817,65819],{"class":81,"line":712},[79,65812,56911],{"class":96},[79,65814,53431],{"class":228},[79,65816,3040],{"class":96},[79,65818,53486],{"class":448},[79,65820,3400],{"class":228},[79,65822,65823,65825,65827,65830],{"class":81,"line":721},[79,65824,64322],{"class":96},[79,65826,53431],{"class":228},[79,65828,65829],{"class":96},"normal",[79,65831,3400],{"class":228},[79,65833,65834,65836,65838,65840,65842],{"class":81,"line":726},[79,65835,63988],{"class":96},[79,65837,53431],{"class":228},[79,65839,2940],{"class":96},[79,65841,53486],{"class":448},[79,65843,3400],{"class":228},[79,65845,65846],{"class":81,"line":731},[79,65847,4272],{"class":228},[79,65849,65850],{"class":81,"line":748},[79,65851,542],{"emptyLinePlaceholder":541},[79,65853,65854,65856,65858],{"class":81,"line":765},[79,65855,65733],{"class":85},[79,65857,63281],{"class":232},[79,65859,17604],{"class":228},[79,65861,65862,65864,65866,65868],{"class":81,"line":780},[79,65863,56721],{"class":96},[79,65865,53431],{"class":228},[79,65867,56726],{"class":96},[79,65869,3400],{"class":228},[79,65871,65872,65874,65876,65878],{"class":81,"line":811},[79,65873,56998],{"class":96},[79,65875,53431],{"class":228},[79,65877,53471],{"class":96},[79,65879,3400],{"class":228},[79,65881,65882,65884,65886,65888],{"class":81,"line":816},[79,65883,57009],{"class":96},[79,65885,53431],{"class":228},[79,65887,53574],{"class":96},[79,65889,3400],{"class":228},[79,65891,65892],{"class":81,"line":821},[79,65893,4272],{"class":228},[79,65895,65896],{"class":81,"line":837},[79,65897,542],{"emptyLinePlaceholder":541},[79,65899,65900,65902,65904,65906],{"class":81,"line":853},[79,65901,65733],{"class":85},[79,65903,63281],{"class":232},[79,65905,57064],{"class":232},[79,65907,17604],{"class":228},[79,65909,65910,65912,65914,65916,65918,65920],{"class":81,"line":864},[79,65911,56695],{"class":96},[79,65913,53431],{"class":228},[79,65915,759],{"class":96},[79,65917,11005],{"class":96},[79,65919,53486],{"class":448},[79,65921,3400],{"class":228},[79,65923,65924,65926,65928,65930,65932],{"class":81,"line":869},[79,65925,56911],{"class":96},[79,65927,53431],{"class":228},[79,65929,2789],{"class":96},[79,65931,53486],{"class":448},[79,65933,3400],{"class":228},[79,65935,65936],{"class":81,"line":885},[79,65937,4272],{"class":228},[79,65939,65940],{"class":81,"line":891},[79,65941,542],{"emptyLinePlaceholder":541},[79,65943,65944,65946,65948,65950,65952],{"class":81,"line":896},[79,65945,65733],{"class":85},[79,65947,63281],{"class":232},[79,65949,57064],{"class":232},[79,65951,3505],{"class":232},[79,65953,17604],{"class":228},[79,65955,65956,65959,65961,65963],{"class":81,"line":907},[79,65957,65958],{"class":96},"      text-decoration",[79,65960,53431],{"class":228},[79,65962,56726],{"class":96},[79,65964,3400],{"class":228},[79,65966,65967,65969,65971,65973,65975,65977,65980],{"class":81,"line":912},[79,65968,64220],{"class":96},[79,65970,53431],{"class":228},[79,65972,2331],{"class":96},[79,65974,53486],{"class":448},[79,65976,53515],{"class":96},[79,65978,65979],{"class":96}," transparent",[79,65981,3400],{"class":228},[79,65983,65984,65986,65988,65990],{"class":81,"line":935},[79,65985,59405],{"class":96},[79,65987,53431],{"class":228},[79,65989,64357],{"class":96},[79,65991,3400],{"class":228},[79,65993,65994],{"class":81,"line":946},[79,65995,4272],{"class":228},[79,65997,65998],{"class":81,"line":960},[79,65999,542],{"emptyLinePlaceholder":541},[79,66001,66002,66004,66006,66008,66010,66013],{"class":81,"line":975},[79,66003,65733],{"class":85},[79,66005,63281],{"class":232},[79,66007,57064],{"class":232},[79,66009,3505],{"class":232},[79,66011,66012],{"class":85},".active",[79,66014,17604],{"class":228},[79,66016,66017,66019,66021,66024],{"class":81,"line":980},[79,66018,63780],{"class":96},[79,66020,53431],{"class":228},[79,66022,66023],{"class":96},"#e1251b",[79,66025,3400],{"class":228},[79,66027,66028,66030,66032,66034],{"class":81,"line":1006},[79,66029,59405],{"class":96},[79,66031,53431],{"class":228},[79,66033,66023],{"class":96},[79,66035,3400],{"class":228},[79,66037,66038],{"class":81,"line":1027},[79,66039,4272],{"class":228},[79,66041,66042],{"class":81,"line":1032},[79,66043,542],{"emptyLinePlaceholder":541},[79,66045,66046,66049],{"class":81,"line":1047},[79,66047,66048],{"class":85},"    .tab-content",[79,66050,17604],{"class":228},[79,66052,66053,66055,66057,66059,66062,66064],{"class":81,"line":1053},[79,66054,56684],{"class":96},[79,66056,53431],{"class":228},[79,66058,759],{"class":96},[79,66060,66061],{"class":96}," 16",[79,66063,53486],{"class":448},[79,66065,3400],{"class":228},[79,66067,66068],{"class":81,"line":1058},[79,66069,4272],{"class":228},[79,66071,66072],{"class":81,"line":1069},[79,66073,542],{"emptyLinePlaceholder":541},[79,66075,66076,66078,66080],{"class":81,"line":1081},[79,66077,66048],{"class":85},[79,66079,64162],{"class":85},[79,66081,17604],{"class":228},[79,66083,66084,66086,66088,66090],{"class":81,"line":1086},[79,66085,56998],{"class":96},[79,66087,53431],{"class":228},[79,66089,56726],{"class":96},[79,66091,3400],{"class":228},[79,66093,66094],{"class":81,"line":1108},[79,66095,4272],{"class":228},[79,66097,66098],{"class":81,"line":1153},[79,66099,542],{"emptyLinePlaceholder":541},[79,66101,66102,66104,66107],{"class":81,"line":1158},[79,66103,66048],{"class":85},[79,66105,66106],{"class":85}," .item.active",[79,66108,17604],{"class":228},[79,66110,66111,66113,66115,66117],{"class":81,"line":1180},[79,66112,56998],{"class":96},[79,66114,53431],{"class":228},[79,66116,62858],{"class":96},[79,66118,3400],{"class":228},[79,66120,66121],{"class":81,"line":1197},[79,66122,4272],{"class":228},[79,66124,66125,66127,66129],{"class":81,"line":1202},[79,66126,54410],{"class":228},[79,66128,2159],{"class":232},[79,66130,53301],{"class":228},[79,66132,66133,66135,66137],{"class":81,"line":1207},[79,66134,53779],{"class":228},[79,66136,53328],{"class":232},[79,66138,53301],{"class":228},[79,66140,66141],{"class":81,"line":1223},[79,66142,542],{"emptyLinePlaceholder":541},[79,66144,66145,66147,66149],{"class":81,"line":18722},[79,66146,229],{"class":228},[79,66148,53794],{"class":232},[79,66150,53301],{"class":228},[79,66152,66153,66155,66157,66159,66161,66164],{"class":81,"line":18728},[79,66154,54138],{"class":228},[79,66156,53605],{"class":232},[79,66158,55477],{"class":85},[79,66160,239],{"class":228},[79,66162,66163],{"class":89},"\"tab\"",[79,66165,53301],{"class":228},[79,66167,66168,66170,66172,66174,66176,66179],{"class":81,"line":18739},[79,66169,53335],{"class":228},[79,66171,53605],{"class":232},[79,66173,55477],{"class":85},[79,66175,239],{"class":228},[79,66177,66178],{"class":89},"\"tab-nav\"",[79,66180,53301],{"class":228},[79,66182,66183,66185,66187,66190,66192],{"class":81,"line":18762},[79,66184,57223],{"class":228},[79,66186,339],{"class":232},[79,66188,66189],{"class":228},">每日特价\u003C\u002F",[79,66191,339],{"class":232},[79,66193,53301],{"class":228},[79,66195,66196,66198,66200],{"class":81,"line":18784},[79,66197,57223],{"class":228},[79,66199,3246],{"class":232},[79,66201,53301],{"class":228},[79,66203,66204,66206,66208,66210,66212,66214,66216,66218,66220,66222,66225,66228,66230,66232,66234],{"class":81,"line":18789},[79,66205,57291],{"class":228},[79,66207,29],{"class":232},[79,66209,63041],{"class":228},[79,66211,2482],{"class":232},[79,66213,55477],{"class":85},[79,66215,239],{"class":228},[79,66217,61695],{"class":89},[79,66219,63046],{"class":85},[79,66221,239],{"class":228},[79,66223,66224],{"class":89},"\"javascript:;\"",[79,66226,66227],{"class":228},">精选\u003C\u002F",[79,66229,2482],{"class":232},[79,66231,57303],{"class":228},[79,66233,29],{"class":232},[79,66235,53301],{"class":228},[79,66237,66238,66240,66242,66244,66246,66248,66250,66252,66255,66257,66259,66261],{"class":81,"line":18795},[79,66239,57291],{"class":228},[79,66241,29],{"class":232},[79,66243,63041],{"class":228},[79,66245,2482],{"class":232},[79,66247,63046],{"class":85},[79,66249,239],{"class":228},[79,66251,66224],{"class":89},[79,66253,66254],{"class":228},">美食\u003C\u002F",[79,66256,2482],{"class":232},[79,66258,57303],{"class":228},[79,66260,29],{"class":232},[79,66262,53301],{"class":228},[79,66264,66265,66267,66269,66271,66273,66275,66277,66279,66282,66284,66286,66288],{"class":81,"line":18809},[79,66266,57291],{"class":228},[79,66268,29],{"class":232},[79,66270,63041],{"class":228},[79,66272,2482],{"class":232},[79,66274,63046],{"class":85},[79,66276,239],{"class":228},[79,66278,66224],{"class":89},[79,66280,66281],{"class":228},">百货\u003C\u002F",[79,66283,2482],{"class":232},[79,66285,57303],{"class":228},[79,66287,29],{"class":232},[79,66289,53301],{"class":228},[79,66291,66292,66294,66296,66298,66300,66302,66304,66306,66309,66311,66313,66315],{"class":81,"line":18822},[79,66293,57291],{"class":228},[79,66295,29],{"class":232},[79,66297,63041],{"class":228},[79,66299,2482],{"class":232},[79,66301,63046],{"class":85},[79,66303,239],{"class":228},[79,66305,66224],{"class":89},[79,66307,66308],{"class":228},">个护\u003C\u002F",[79,66310,2482],{"class":232},[79,66312,57303],{"class":228},[79,66314,29],{"class":232},[79,66316,53301],{"class":228},[79,66318,66319,66321,66323,66325,66327,66329,66331,66333,66336,66338,66340,66342],{"class":81,"line":18827},[79,66320,57291],{"class":228},[79,66322,29],{"class":232},[79,66324,63041],{"class":228},[79,66326,2482],{"class":232},[79,66328,63046],{"class":85},[79,66330,239],{"class":228},[79,66332,66224],{"class":89},[79,66334,66335],{"class":228},">预告\u003C\u002F",[79,66337,2482],{"class":232},[79,66339,57303],{"class":228},[79,66341,29],{"class":232},[79,66343,53301],{"class":228},[79,66345,66346,66348,66350],{"class":81,"line":18841},[79,66347,57396],{"class":228},[79,66349,3246],{"class":232},[79,66351,53301],{"class":228},[79,66353,66354,66356,66358],{"class":81,"line":18846},[79,66355,53770],{"class":228},[79,66357,53605],{"class":232},[79,66359,53301],{"class":228},[79,66361,66362,66364,66366,66368,66370,66373],{"class":81,"line":18852},[79,66363,53335],{"class":228},[79,66365,53605],{"class":232},[79,66367,55477],{"class":85},[79,66369,239],{"class":228},[79,66371,66372],{"class":89},"\"tab-content\"",[79,66374,53301],{"class":228},[79,66376,66377,66379,66381,66383,66385,66388,66390,66392,66394,66396,66399,66401,66403,66405,66408,66410],{"class":81,"line":18857},[79,66378,57223],{"class":228},[79,66380,53605],{"class":232},[79,66382,55477],{"class":85},[79,66384,239],{"class":228},[79,66386,66387],{"class":89},"\"item active\"",[79,66389,63041],{"class":228},[79,66391,3569],{"class":232},[79,66393,57228],{"class":85},[79,66395,239],{"class":228},[79,66397,66398],{"class":89},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[79,66400,57236],{"class":85},[79,66402,239],{"class":228},[79,66404,9717],{"class":89},[79,66406,66407],{"class":228}," \u002F>\u003C\u002F",[79,66409,53605],{"class":232},[79,66411,53301],{"class":228},[79,66413,66414,66416,66418,66420,66422,66424,66426,66428,66430,66432,66435,66437,66439,66441,66443,66445],{"class":81,"line":18871},[79,66415,57223],{"class":228},[79,66417,53605],{"class":232},[79,66419,55477],{"class":85},[79,66421,239],{"class":228},[79,66423,64611],{"class":89},[79,66425,63041],{"class":228},[79,66427,3569],{"class":232},[79,66429,57228],{"class":85},[79,66431,239],{"class":228},[79,66433,66434],{"class":89},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[79,66436,57236],{"class":85},[79,66438,239],{"class":228},[79,66440,9717],{"class":89},[79,66442,66407],{"class":228},[79,66444,53605],{"class":232},[79,66446,53301],{"class":228},[79,66448,66449,66451,66453,66455,66457,66459,66461,66463,66465,66467,66470,66472,66474,66476,66478,66480],{"class":81,"line":18876},[79,66450,57223],{"class":228},[79,66452,53605],{"class":232},[79,66454,55477],{"class":85},[79,66456,239],{"class":228},[79,66458,64611],{"class":89},[79,66460,63041],{"class":228},[79,66462,3569],{"class":232},[79,66464,57228],{"class":85},[79,66466,239],{"class":228},[79,66468,66469],{"class":89},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[79,66471,57236],{"class":85},[79,66473,239],{"class":228},[79,66475,9717],{"class":89},[79,66477,66407],{"class":228},[79,66479,53605],{"class":232},[79,66481,53301],{"class":228},[79,66483,66484,66486,66488,66490,66492,66494,66496,66498,66500,66502,66505,66507,66509,66511,66513,66515],{"class":81,"line":18881},[79,66485,57223],{"class":228},[79,66487,53605],{"class":232},[79,66489,55477],{"class":85},[79,66491,239],{"class":228},[79,66493,64611],{"class":89},[79,66495,63041],{"class":228},[79,66497,3569],{"class":232},[79,66499,57228],{"class":85},[79,66501,239],{"class":228},[79,66503,66504],{"class":89},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[79,66506,57236],{"class":85},[79,66508,239],{"class":228},[79,66510,9717],{"class":89},[79,66512,66407],{"class":228},[79,66514,53605],{"class":232},[79,66516,53301],{"class":228},[79,66518,66519,66521,66523,66525,66527,66529,66531,66533,66535,66537,66540,66542,66544,66546,66548,66550],{"class":81,"line":18895},[79,66520,57223],{"class":228},[79,66522,53605],{"class":232},[79,66524,55477],{"class":85},[79,66526,239],{"class":228},[79,66528,64611],{"class":89},[79,66530,63041],{"class":228},[79,66532,3569],{"class":232},[79,66534,57228],{"class":85},[79,66536,239],{"class":228},[79,66538,66539],{"class":89},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[79,66541,57236],{"class":85},[79,66543,239],{"class":228},[79,66545,9717],{"class":89},[79,66547,66407],{"class":228},[79,66549,53605],{"class":232},[79,66551,53301],{"class":228},[79,66553,66554,66556,66558],{"class":81,"line":18907},[79,66555,53770],{"class":228},[79,66557,53605],{"class":232},[79,66559,53301],{"class":228},[79,66561,66562,66564,66566],{"class":81,"line":18912},[79,66563,54410],{"class":228},[79,66565,53605],{"class":232},[79,66567,53301],{"class":228},[79,66569,66570,66572,66574],{"class":81,"line":18925},[79,66571,54138],{"class":228},[79,66573,53807],{"class":232},[79,66575,53301],{"class":228},[79,66577,66578],{"class":81,"line":18930},[79,66579,66580],{"class":2313},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[79,66582,66583],{"class":81,"line":18935},[79,66584,66585],{"class":2313},"    \u002F\u002F 1.1 获取 a 元素 \n",[79,66587,66588,66590,66593,66595,66597,66599,66601,66604],{"class":81,"line":18940},[79,66589,13256],{"class":448},[79,66591,66592],{"class":96}," as",[79,66594,556],{"class":448},[79,66596,56385],{"class":228},[79,66598,57670],{"class":85},[79,66600,455],{"class":228},[79,66602,66603],{"class":89},"'.tab-nav a'",[79,66605,850],{"class":228},[79,66607,66608],{"class":81,"line":18953},[79,66609,66610],{"class":2313},"    \u002F\u002F console.log(as) \n",[79,66612,66613,66615,66617,66619,66621,66623,66625,66627,66629,66632,66634,66636,66638],{"class":81,"line":18958},[79,66614,915],{"class":448},[79,66616,3757],{"class":228},[79,66618,53841],{"class":448},[79,66620,11493],{"class":228},[79,66622,239],{"class":448},[79,66624,1103],{"class":96},[79,66626,11500],{"class":228},[79,66628,229],{"class":448},[79,66630,66631],{"class":228}," as.",[79,66633,53962],{"class":96},[79,66635,5288],{"class":228},[79,66637,4377],{"class":448},[79,66639,14476],{"class":228},[79,66641,66642],{"class":81,"line":34631},[79,66643,66644],{"class":2313},"      \u002F\u002F console.log(as[i])\n",[79,66646,66647],{"class":81,"line":34637},[79,66648,66649],{"class":2313},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[79,66651,66652,66655,66657,66659,66662,66664,66666],{"class":81,"line":34643},[79,66653,66654],{"class":228},"      as[i].",[79,66656,59802],{"class":85},[79,66658,455],{"class":228},[79,66660,66661],{"class":89},"'mouseenter'",[79,66663,1020],{"class":228},[79,66665,56438],{"class":448},[79,66667,56441],{"class":228},[79,66669,66670],{"class":81,"line":34649},[79,66671,66672],{"class":2313},"        \u002F\u002F console.log('鼠标经过')\n",[79,66674,66675],{"class":81,"line":34655},[79,66676,66677],{"class":2313},"        \u002F\u002F 排他思想  \n",[79,66679,66680],{"class":81,"line":34666},[79,66681,66682],{"class":2313},"        \u002F\u002F 干掉别人 移除类active\n",[79,66684,66685,66687,66689,66691,66694,66696,66698,66700,66703],{"class":81,"line":34672},[79,66686,53919],{"class":228},[79,66688,56388],{"class":85},[79,66690,455],{"class":228},[79,66692,66693],{"class":89},"'.tab-nav .active'",[79,66695,58992],{"class":228},[79,66697,58995],{"class":85},[79,66699,455],{"class":228},[79,66701,66702],{"class":89},"'active'",[79,66704,850],{"class":228},[79,66706,66707],{"class":81,"line":34692},[79,66708,66709],{"class":2313},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[79,66711,66712,66715,66718,66720,66722,66724],{"class":81,"line":34698},[79,66713,66714],{"class":96},"        this",[79,66716,66717],{"class":228},".classList.",[79,66719,7402],{"class":85},[79,66721,455],{"class":228},[79,66723,66702],{"class":89},[79,66725,850],{"class":228},[79,66727,66728],{"class":81,"line":34709},[79,66729,542],{"emptyLinePlaceholder":541},[79,66731,66732],{"class":81,"line":34715},[79,66733,66734],{"class":2313},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[79,66736,66737],{"class":81,"line":34721},[79,66738,66739],{"class":2313},"        \u002F\u002F 干掉别人\n",[79,66741,66742,66744,66746,66748,66751,66753,66755,66757,66759],{"class":81,"line":34727},[79,66743,53919],{"class":228},[79,66745,56388],{"class":85},[79,66747,455],{"class":228},[79,66749,66750],{"class":89},"'.tab-content .active'",[79,66752,58992],{"class":228},[79,66754,58995],{"class":85},[79,66756,455],{"class":228},[79,66758,66702],{"class":89},[79,66760,850],{"class":228},[79,66762,66763],{"class":81,"line":34733},[79,66764,66765],{"class":2313},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[79,66767,66768,66770,66772,66774,66777,66779,66781,66783,66785,66787,66789,66791,66793],{"class":81,"line":34739},[79,66769,53919],{"class":228},[79,66771,56388],{"class":85},[79,66773,455],{"class":228},[79,66775,66776],{"class":89},"`.tab-content .item:nth-child(${",[79,66778,2684],{"class":228},[79,66780,47561],{"class":448},[79,66782,27137],{"class":96},[79,66784,59021],{"class":89},[79,66786,58992],{"class":228},[79,66788,7402],{"class":85},[79,66790,455],{"class":228},[79,66792,66702],{"class":89},[79,66794,850],{"class":228},[79,66796,66797],{"class":81,"line":34745},[79,66798,542],{"emptyLinePlaceholder":541},[79,66800,66801],{"class":81,"line":34751},[79,66802,66803],{"class":228},"      })\n",[79,66805,66806],{"class":81,"line":34771},[79,66807,4272],{"class":228},[79,66809,66810,66812,66814],{"class":81,"line":34777},[79,66811,54410],{"class":228},[79,66813,53807],{"class":232},[79,66815,53301],{"class":228},[79,66817,66818,66820,66822],{"class":81,"line":34793},[79,66819,53779],{"class":228},[79,66821,53794],{"class":232},[79,66823,53301],{"class":228},[79,66825,66826],{"class":81,"line":34799},[79,66827,542],{"emptyLinePlaceholder":541},[79,66829,66830,66832,66834],{"class":81,"line":34813},[79,66831,53779],{"class":228},[79,66833,52630],{"class":232},[79,66835,53301],{"class":228},[19,66837,66838],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,66840,66841],{},"在监听事件中，this指向的就是他的调用者",[19,66843,66844],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,66846,55711],{},[19,66848,66849],{},"(function () {",[19,66851,66852],{},"const list = document.querySelector('.xtx-elevator-list')",[19,66854,66855],{},"list.addEventListener('click', function (e) {",[19,66857,66858],{},"if (e.target.tagName === 'A') {",[19,66860,66861],{},"\u002F\u002F 排他思想",[19,66863,66864],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,66866,66867],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,66869,66870],{},"\u002F\u002F console.log(old);",[19,66872,66873],{},"\u002F\u002F 判断",[19,66875,66876],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,66878,66879],{},"if (old) old.classList.remove('active')",[19,66881,66882],{},"e.target.classList.add('active')",[19,66884,3185],{},[19,66886,54457],{},[19,66888,66889],{},"})();",[339,66891,66893],{"id":66892},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[51,66895,66897],{"className":52628,"code":66896,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\n\u003Chtml>\n\n\u003Chead lang=\"en\">\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Ctitle>\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      margin: 0;\n      padding: 0;\n    }\n\n    table {\n      border-collapse: collapse;\n      border-spacing: 0;\n      border: 1px solid #c0c0c0;\n      width: 500px;\n      margin: 100px auto;\n      text-align: center;\n    }\n\n    th {\n      background-color: #09c;\n      font: bold 16px \"微软雅黑\";\n      color: #fff;\n      height: 24px;\n    }\n\n    td {\n      border: 1px solid #d0d0d0;\n      color: #404060;\n      padding: 10px;\n    }\n\n    .allCheck {\n      width: 80px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ctable>\n    \u003Ctr>\n      \u003Cth class=\"allCheck\">\n        \u003Cinput type=\"checkbox\" name=\"\" id=\"checkAll\"> \u003Cspan class=\"all\">全选\u003C\u002Fspan>\n      \u003C\u002Fth>\n      \u003Cth>商品\u003C\u002Fth>\n      \u003Cth>商家\u003C\u002Fth>\n      \u003Cth>价格\u003C\u002Fth>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>\n        \u003Cinput type=\"checkbox\" name=\"check\" class=\"ck\">\n      \u003C\u002Ftd>\n      \u003Ctd>小米手机\u003C\u002Ftd>\n      \u003Ctd>小米\u003C\u002Ftd>\n      \u003Ctd>￥1999\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>\n        \u003Cinput type=\"checkbox\" name=\"check\" class=\"ck\">\n      \u003C\u002Ftd>\n      \u003Ctd>小米净水器\u003C\u002Ftd>\n      \u003Ctd>小米\u003C\u002Ftd>\n      \u003Ctd>￥4999\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>\n        \u003Cinput type=\"checkbox\" name=\"check\" class=\"ck\">\n      \u003C\u002Ftd>\n      \u003Ctd>小米电视\u003C\u002Ftd>\n      \u003Ctd>小米\u003C\u002Ftd>\n      \u003Ctd>￥5999\u003C\u002Ftd>\n    \u003C\u002Ftr>\n  \u003C\u002Ftable>\n  \u003Cscript>\n    \u002F\u002F 1. 获取大复选框\n    const checkAll = document.querySelector('#checkAll')\n    \u002F\u002F 2. 获取所有的小复选框\n    const cks = document.querySelectorAll('.ck')\n    \u002F\u002F 3. 点击大复选框  注册事件\n    checkAll.addEventListener('click', function () {\n      \u002F\u002F 得到当前大复选框的选中状态\n      \u002F\u002F console.log(checkAll.checked)  \u002F\u002F 得到 是 true 或者是 false\n      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n      for (let i = 0; i \u003C cks.length; i++) {\n        cks[i].checked = this.checked\n      }\n    })\n    \u002F\u002F 5. 小复选框控制大复选框\n\n    for (let i = 0; i \u003C cks.length; i++) {\n      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n      cks[i].addEventListener('click', function () {\n        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n        checkAll.checked = document.querySelectorAll('.ck:checked').length === cks.length\n      })\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,66898,66899,66909,66913,66921,66925,66939,66953,66965,66973,66979,66989,66999,67003,67007,67014,67026,67037,67054,67067,67081,67091,67095,67099,67106,67117,67135,67145,67157,67161,67165,67172,67189,67200,67212,67216,67220,67227,67239,67243,67251,67259,67263,67271,67279,67287,67302,67346,67354,67367,67380,67393,67401,67409,67417,67445,67453,67465,67478,67491,67499,67507,67515,67541,67549,67562,67574,67587,67595,67603,67611,67637,67645,67658,67670,67683,67691,67699,67707,67712,67732,67737,67757,67762,67779,67784,67792,67797,67826,67839,67843,67847,67852,67856,67884,67889,67906,67911,67916,67921,67926,67952,67956,67960,67968,67976,67980],{"__ignoreMap":57},[79,66900,66901,66903,66905,66907],{"class":81,"line":82},[79,66902,53292],{"class":228},[79,66904,53295],{"class":232},[79,66906,53298],{"class":85},[79,66908,53301],{"class":228},[79,66910,66911],{"class":81,"line":167},[79,66912,542],{"emptyLinePlaceholder":541},[79,66914,66915,66917,66919],{"class":81,"line":178},[79,66916,229],{"class":228},[79,66918,52630],{"class":232},[79,66920,53301],{"class":228},[79,66922,66923],{"class":81,"line":545},[79,66924,542],{"emptyLinePlaceholder":541},[79,66926,66927,66929,66931,66933,66935,66937],{"class":81,"line":550},[79,66928,229],{"class":228},[79,66930,53328],{"class":232},[79,66932,53310],{"class":85},[79,66934,239],{"class":228},[79,66936,53315],{"class":89},[79,66938,53301],{"class":228},[79,66940,66941,66943,66945,66947,66949,66951],{"class":81,"line":562},[79,66942,54138],{"class":228},[79,66944,53338],{"class":232},[79,66946,53341],{"class":85},[79,66948,239],{"class":228},[79,66950,53346],{"class":89},[79,66952,53301],{"class":228},[79,66954,66955,66957,66959,66961,66963],{"class":81,"line":568},[79,66956,54138],{"class":228},[79,66958,53401],{"class":232},[79,66960,57303],{"class":228},[79,66962,53401],{"class":232},[79,66964,53301],{"class":228},[79,66966,66967,66969,66971],{"class":81,"line":574},[79,66968,54138],{"class":228},[79,66970,2159],{"class":232},[79,66972,53301],{"class":228},[79,66974,66975,66977],{"class":81,"line":579},[79,66976,8470],{"class":232},[79,66978,17604],{"class":228},[79,66980,66981,66983,66985,66987],{"class":81,"line":585},[79,66982,56695],{"class":96},[79,66984,53431],{"class":228},[79,66986,759],{"class":96},[79,66988,3400],{"class":228},[79,66990,66991,66993,66995,66997],{"class":81,"line":591},[79,66992,56684],{"class":96},[79,66994,53431],{"class":228},[79,66996,759],{"class":96},[79,66998,3400],{"class":228},[79,67000,67001],{"class":81,"line":596},[79,67002,4272],{"class":228},[79,67004,67005],{"class":81,"line":602},[79,67006,542],{"emptyLinePlaceholder":541},[79,67008,67009,67012],{"class":81,"line":608},[79,67010,67011],{"class":232},"    table",[79,67013,17604],{"class":228},[79,67015,67016,67019,67021,67024],{"class":81,"line":614},[79,67017,67018],{"class":96},"      border-collapse",[79,67020,53431],{"class":228},[79,67022,67023],{"class":96},"collapse",[79,67025,3400],{"class":228},[79,67027,67028,67031,67033,67035],{"class":81,"line":619},[79,67029,67030],{"class":96},"      border-spacing",[79,67032,53431],{"class":228},[79,67034,759],{"class":96},[79,67036,3400],{"class":228},[79,67038,67039,67041,67043,67045,67047,67049,67052],{"class":81,"line":625},[79,67040,63965],{"class":96},[79,67042,53431],{"class":228},[79,67044,775],{"class":96},[79,67046,53486],{"class":448},[79,67048,53515],{"class":96},[79,67050,67051],{"class":96}," #c0c0c0",[79,67053,3400],{"class":228},[79,67055,67056,67058,67060,67063,67065],{"class":81,"line":631},[79,67057,56760],{"class":96},[79,67059,53431],{"class":228},[79,67061,67062],{"class":96},"500",[79,67064,53486],{"class":448},[79,67066,3400],{"class":228},[79,67068,67069,67071,67073,67075,67077,67079],{"class":81,"line":637},[79,67070,56695],{"class":96},[79,67072,53431],{"class":228},[79,67074,2555],{"class":96},[79,67076,53486],{"class":448},[79,67078,53550],{"class":96},[79,67080,3400],{"class":228},[79,67082,67083,67085,67087,67089],{"class":81,"line":643},[79,67084,59275],{"class":96},[79,67086,53431],{"class":228},[79,67088,53586],{"class":96},[79,67090,3400],{"class":228},[79,67092,67093],{"class":81,"line":649},[79,67094,4272],{"class":228},[79,67096,67097],{"class":81,"line":655},[79,67098,542],{"emptyLinePlaceholder":541},[79,67100,67101,67104],{"class":81,"line":660},[79,67102,67103],{"class":232},"    th",[79,67105,17604],{"class":228},[79,67107,67108,67110,67112,67115],{"class":81,"line":666},[79,67109,56873],{"class":96},[79,67111,53431],{"class":228},[79,67113,67114],{"class":96},"#09c",[79,67116,3400],{"class":228},[79,67118,67119,67122,67124,67126,67128,67130,67133],{"class":81,"line":672},[79,67120,67121],{"class":96},"      font",[79,67123,53431],{"class":228},[79,67125,64327],{"class":96},[79,67127,66061],{"class":96},[79,67129,53486],{"class":448},[79,67131,67132],{"class":89}," \"微软雅黑\"",[79,67134,3400],{"class":228},[79,67136,67137,67139,67141,67143],{"class":81,"line":678},[79,67138,59405],{"class":96},[79,67140,53431],{"class":228},[79,67142,62831],{"class":96},[79,67144,3400],{"class":228},[79,67146,67147,67149,67151,67153,67155],{"class":81,"line":684},[79,67148,56774],{"class":96},[79,67150,53431],{"class":228},[79,67152,3040],{"class":96},[79,67154,53486],{"class":448},[79,67156,3400],{"class":228},[79,67158,67159],{"class":81,"line":690},[79,67160,4272],{"class":228},[79,67162,67163],{"class":81,"line":695},[79,67164,542],{"emptyLinePlaceholder":541},[79,67166,67167,67170],{"class":81,"line":700},[79,67168,67169],{"class":232},"    td",[79,67171,17604],{"class":228},[79,67173,67174,67176,67178,67180,67182,67184,67187],{"class":81,"line":712},[79,67175,63965],{"class":96},[79,67177,53431],{"class":228},[79,67179,775],{"class":96},[79,67181,53486],{"class":448},[79,67183,53515],{"class":96},[79,67185,67186],{"class":96}," #d0d0d0",[79,67188,3400],{"class":228},[79,67190,67191,67193,67195,67198],{"class":81,"line":721},[79,67192,59405],{"class":96},[79,67194,53431],{"class":228},[79,67196,67197],{"class":96},"#404060",[79,67199,3400],{"class":228},[79,67201,67202,67204,67206,67208,67210],{"class":81,"line":726},[79,67203,56684],{"class":96},[79,67205,53431],{"class":228},[79,67207,2689],{"class":96},[79,67209,53486],{"class":448},[79,67211,3400],{"class":228},[79,67213,67214],{"class":81,"line":731},[79,67215,4272],{"class":228},[79,67217,67218],{"class":81,"line":748},[79,67219,542],{"emptyLinePlaceholder":541},[79,67221,67222,67225],{"class":81,"line":765},[79,67223,67224],{"class":85},"    .allCheck",[79,67226,17604],{"class":228},[79,67228,67229,67231,67233,67235,67237],{"class":81,"line":780},[79,67230,56760],{"class":96},[79,67232,53431],{"class":228},[79,67234,2852],{"class":96},[79,67236,53486],{"class":448},[79,67238,3400],{"class":228},[79,67240,67241],{"class":81,"line":811},[79,67242,4272],{"class":228},[79,67244,67245,67247,67249],{"class":81,"line":816},[79,67246,54410],{"class":228},[79,67248,2159],{"class":232},[79,67250,53301],{"class":228},[79,67252,67253,67255,67257],{"class":81,"line":821},[79,67254,53779],{"class":228},[79,67256,53328],{"class":232},[79,67258,53301],{"class":228},[79,67260,67261],{"class":81,"line":837},[79,67262,542],{"emptyLinePlaceholder":541},[79,67264,67265,67267,67269],{"class":81,"line":853},[79,67266,229],{"class":228},[79,67268,53794],{"class":232},[79,67270,53301],{"class":228},[79,67272,67273,67275,67277],{"class":81,"line":864},[79,67274,54138],{"class":228},[79,67276,347],{"class":232},[79,67278,53301],{"class":228},[79,67280,67281,67283,67285],{"class":81,"line":869},[79,67282,53335],{"class":228},[79,67284,353],{"class":232},[79,67286,53301],{"class":228},[79,67288,67289,67291,67293,67295,67297,67300],{"class":81,"line":885},[79,67290,57223],{"class":228},[79,67292,356],{"class":232},[79,67294,55477],{"class":85},[79,67296,239],{"class":228},[79,67298,67299],{"class":89},"\"allCheck\"",[79,67301,53301],{"class":228},[79,67303,67304,67306,67308,67310,67312,67314,67316,67318,67320,67322,67324,67327,67330,67332,67334,67336,67339,67342,67344],{"class":81,"line":891},[79,67305,57291],{"class":228},[79,67307,55812],{"class":232},[79,67309,245],{"class":85},[79,67311,239],{"class":228},[79,67313,55819],{"class":89},[79,67315,236],{"class":85},[79,67317,239],{"class":228},[79,67319,9717],{"class":89},[79,67321,16991],{"class":85},[79,67323,239],{"class":228},[79,67325,67326],{"class":89},"\"checkAll\"",[79,67328,67329],{"class":228},"> \u003C",[79,67331,79],{"class":232},[79,67333,55477],{"class":85},[79,67335,239],{"class":228},[79,67337,67338],{"class":89},"\"all\"",[79,67340,67341],{"class":228},">全选\u003C\u002F",[79,67343,79],{"class":232},[79,67345,53301],{"class":228},[79,67347,67348,67350,67352],{"class":81,"line":896},[79,67349,57396],{"class":228},[79,67351,356],{"class":232},[79,67353,53301],{"class":228},[79,67355,67356,67358,67360,67363,67365],{"class":81,"line":907},[79,67357,57223],{"class":228},[79,67359,356],{"class":232},[79,67361,67362],{"class":228},">商品\u003C\u002F",[79,67364,356],{"class":232},[79,67366,53301],{"class":228},[79,67368,67369,67371,67373,67376,67378],{"class":81,"line":912},[79,67370,57223],{"class":228},[79,67372,356],{"class":232},[79,67374,67375],{"class":228},">商家\u003C\u002F",[79,67377,356],{"class":232},[79,67379,53301],{"class":228},[79,67381,67382,67384,67386,67389,67391],{"class":81,"line":935},[79,67383,57223],{"class":228},[79,67385,356],{"class":232},[79,67387,67388],{"class":228},">价格\u003C\u002F",[79,67390,356],{"class":232},[79,67392,53301],{"class":228},[79,67394,67395,67397,67399],{"class":81,"line":946},[79,67396,53770],{"class":228},[79,67398,353],{"class":232},[79,67400,53301],{"class":228},[79,67402,67403,67405,67407],{"class":81,"line":960},[79,67404,53335],{"class":228},[79,67406,353],{"class":232},[79,67408,53301],{"class":228},[79,67410,67411,67413,67415],{"class":81,"line":975},[79,67412,57223],{"class":228},[79,67414,372],{"class":232},[79,67416,53301],{"class":228},[79,67418,67419,67421,67423,67425,67427,67429,67431,67433,67436,67438,67440,67443],{"class":81,"line":980},[79,67420,57291],{"class":228},[79,67422,55812],{"class":232},[79,67424,245],{"class":85},[79,67426,239],{"class":228},[79,67428,55819],{"class":89},[79,67430,236],{"class":85},[79,67432,239],{"class":228},[79,67434,67435],{"class":89},"\"check\"",[79,67437,55477],{"class":85},[79,67439,239],{"class":228},[79,67441,67442],{"class":89},"\"ck\"",[79,67444,53301],{"class":228},[79,67446,67447,67449,67451],{"class":81,"line":1006},[79,67448,57396],{"class":228},[79,67450,372],{"class":232},[79,67452,53301],{"class":228},[79,67454,67455,67457,67459,67461,67463],{"class":81,"line":1027},[79,67456,57223],{"class":228},[79,67458,372],{"class":232},[79,67460,63162],{"class":228},[79,67462,372],{"class":232},[79,67464,53301],{"class":228},[79,67466,67467,67469,67471,67474,67476],{"class":81,"line":1032},[79,67468,57223],{"class":228},[79,67470,372],{"class":232},[79,67472,67473],{"class":228},">小米\u003C\u002F",[79,67475,372],{"class":232},[79,67477,53301],{"class":228},[79,67479,67480,67482,67484,67487,67489],{"class":81,"line":1047},[79,67481,57223],{"class":228},[79,67483,372],{"class":232},[79,67485,67486],{"class":228},">￥1999\u003C\u002F",[79,67488,372],{"class":232},[79,67490,53301],{"class":228},[79,67492,67493,67495,67497],{"class":81,"line":1053},[79,67494,53770],{"class":228},[79,67496,353],{"class":232},[79,67498,53301],{"class":228},[79,67500,67501,67503,67505],{"class":81,"line":1058},[79,67502,53335],{"class":228},[79,67504,353],{"class":232},[79,67506,53301],{"class":228},[79,67508,67509,67511,67513],{"class":81,"line":1069},[79,67510,57223],{"class":228},[79,67512,372],{"class":232},[79,67514,53301],{"class":228},[79,67516,67517,67519,67521,67523,67525,67527,67529,67531,67533,67535,67537,67539],{"class":81,"line":1081},[79,67518,57291],{"class":228},[79,67520,55812],{"class":232},[79,67522,245],{"class":85},[79,67524,239],{"class":228},[79,67526,55819],{"class":89},[79,67528,236],{"class":85},[79,67530,239],{"class":228},[79,67532,67435],{"class":89},[79,67534,55477],{"class":85},[79,67536,239],{"class":228},[79,67538,67442],{"class":89},[79,67540,53301],{"class":228},[79,67542,67543,67545,67547],{"class":81,"line":1086},[79,67544,57396],{"class":228},[79,67546,372],{"class":232},[79,67548,53301],{"class":228},[79,67550,67551,67553,67555,67558,67560],{"class":81,"line":1108},[79,67552,57223],{"class":228},[79,67554,372],{"class":232},[79,67556,67557],{"class":228},">小米净水器\u003C\u002F",[79,67559,372],{"class":232},[79,67561,53301],{"class":228},[79,67563,67564,67566,67568,67570,67572],{"class":81,"line":1153},[79,67565,57223],{"class":228},[79,67567,372],{"class":232},[79,67569,67473],{"class":228},[79,67571,372],{"class":232},[79,67573,53301],{"class":228},[79,67575,67576,67578,67580,67583,67585],{"class":81,"line":1158},[79,67577,57223],{"class":228},[79,67579,372],{"class":232},[79,67581,67582],{"class":228},">￥4999\u003C\u002F",[79,67584,372],{"class":232},[79,67586,53301],{"class":228},[79,67588,67589,67591,67593],{"class":81,"line":1180},[79,67590,53770],{"class":228},[79,67592,353],{"class":232},[79,67594,53301],{"class":228},[79,67596,67597,67599,67601],{"class":81,"line":1197},[79,67598,53335],{"class":228},[79,67600,353],{"class":232},[79,67602,53301],{"class":228},[79,67604,67605,67607,67609],{"class":81,"line":1202},[79,67606,57223],{"class":228},[79,67608,372],{"class":232},[79,67610,53301],{"class":228},[79,67612,67613,67615,67617,67619,67621,67623,67625,67627,67629,67631,67633,67635],{"class":81,"line":1207},[79,67614,57291],{"class":228},[79,67616,55812],{"class":232},[79,67618,245],{"class":85},[79,67620,239],{"class":228},[79,67622,55819],{"class":89},[79,67624,236],{"class":85},[79,67626,239],{"class":228},[79,67628,67435],{"class":89},[79,67630,55477],{"class":85},[79,67632,239],{"class":228},[79,67634,67442],{"class":89},[79,67636,53301],{"class":228},[79,67638,67639,67641,67643],{"class":81,"line":1223},[79,67640,57396],{"class":228},[79,67642,372],{"class":232},[79,67644,53301],{"class":228},[79,67646,67647,67649,67651,67654,67656],{"class":81,"line":18722},[79,67648,57223],{"class":228},[79,67650,372],{"class":232},[79,67652,67653],{"class":228},">小米电视\u003C\u002F",[79,67655,372],{"class":232},[79,67657,53301],{"class":228},[79,67659,67660,67662,67664,67666,67668],{"class":81,"line":18728},[79,67661,57223],{"class":228},[79,67663,372],{"class":232},[79,67665,67473],{"class":228},[79,67667,372],{"class":232},[79,67669,53301],{"class":228},[79,67671,67672,67674,67676,67679,67681],{"class":81,"line":18739},[79,67673,57223],{"class":228},[79,67675,372],{"class":232},[79,67677,67678],{"class":228},">￥5999\u003C\u002F",[79,67680,372],{"class":232},[79,67682,53301],{"class":228},[79,67684,67685,67687,67689],{"class":81,"line":18762},[79,67686,53770],{"class":228},[79,67688,353],{"class":232},[79,67690,53301],{"class":228},[79,67692,67693,67695,67697],{"class":81,"line":18784},[79,67694,54410],{"class":228},[79,67696,347],{"class":232},[79,67698,53301],{"class":228},[79,67700,67701,67703,67705],{"class":81,"line":18789},[79,67702,54138],{"class":228},[79,67704,53807],{"class":232},[79,67706,53301],{"class":228},[79,67708,67709],{"class":81,"line":18795},[79,67710,67711],{"class":2313},"    \u002F\u002F 1. 获取大复选框\n",[79,67713,67714,67716,67719,67721,67723,67725,67727,67730],{"class":81,"line":18809},[79,67715,13256],{"class":448},[79,67717,67718],{"class":96}," checkAll",[79,67720,556],{"class":448},[79,67722,56385],{"class":228},[79,67724,56388],{"class":85},[79,67726,455],{"class":228},[79,67728,67729],{"class":89},"'#checkAll'",[79,67731,850],{"class":228},[79,67733,67734],{"class":81,"line":18822},[79,67735,67736],{"class":2313},"    \u002F\u002F 2. 获取所有的小复选框\n",[79,67738,67739,67741,67744,67746,67748,67750,67752,67755],{"class":81,"line":18827},[79,67740,13256],{"class":448},[79,67742,67743],{"class":96}," cks",[79,67745,556],{"class":448},[79,67747,56385],{"class":228},[79,67749,57670],{"class":85},[79,67751,455],{"class":228},[79,67753,67754],{"class":89},"'.ck'",[79,67756,850],{"class":228},[79,67758,67759],{"class":81,"line":18841},[79,67760,67761],{"class":2313},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[79,67763,67764,67767,67769,67771,67773,67775,67777],{"class":81,"line":18846},[79,67765,67766],{"class":228},"    checkAll.",[79,67768,59802],{"class":85},[79,67770,455],{"class":228},[79,67772,59807],{"class":89},[79,67774,1020],{"class":228},[79,67776,56438],{"class":448},[79,67778,56441],{"class":228},[79,67780,67781],{"class":81,"line":18852},[79,67782,67783],{"class":2313},"      \u002F\u002F 得到当前大复选框的选中状态\n",[79,67785,67786,67789],{"class":81,"line":18857},[79,67787,67788],{"class":2313},"      \u002F\u002F console.log(checkAll.checked)",[79,67790,67791],{"class":2313},"  \u002F\u002F 得到 是 true 或者是 false\n",[79,67793,67794],{"class":81,"line":18871},[79,67795,67796],{"class":2313},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[79,67798,67799,67801,67803,67805,67807,67809,67811,67813,67815,67818,67820,67822,67824],{"class":81,"line":18876},[79,67800,54277],{"class":448},[79,67802,3757],{"class":228},[79,67804,53841],{"class":448},[79,67806,11493],{"class":228},[79,67808,239],{"class":448},[79,67810,1103],{"class":96},[79,67812,11500],{"class":228},[79,67814,229],{"class":448},[79,67816,67817],{"class":228}," cks.",[79,67819,53962],{"class":96},[79,67821,5288],{"class":228},[79,67823,4377],{"class":448},[79,67825,14476],{"class":228},[79,67827,67828,67831,67833,67836],{"class":81,"line":18881},[79,67829,67830],{"class":228},"        cks[i].checked ",[79,67832,239],{"class":448},[79,67834,67835],{"class":96}," this",[79,67837,67838],{"class":228},".checked\n",[79,67840,67841],{"class":81,"line":18895},[79,67842,54391],{"class":228},[79,67844,67845],{"class":81,"line":18907},[79,67846,35458],{"class":228},[79,67848,67849],{"class":81,"line":18912},[79,67850,67851],{"class":2313},"    \u002F\u002F 5. 小复选框控制大复选框\n",[79,67853,67854],{"class":81,"line":18925},[79,67855,542],{"emptyLinePlaceholder":541},[79,67857,67858,67860,67862,67864,67866,67868,67870,67872,67874,67876,67878,67880,67882],{"class":81,"line":18930},[79,67859,915],{"class":448},[79,67861,3757],{"class":228},[79,67863,53841],{"class":448},[79,67865,11493],{"class":228},[79,67867,239],{"class":448},[79,67869,1103],{"class":96},[79,67871,11500],{"class":228},[79,67873,229],{"class":448},[79,67875,67817],{"class":228},[79,67877,53962],{"class":96},[79,67879,5288],{"class":228},[79,67881,4377],{"class":448},[79,67883,14476],{"class":228},[79,67885,67886],{"class":81,"line":18935},[79,67887,67888],{"class":2313},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[79,67890,67891,67894,67896,67898,67900,67902,67904],{"class":81,"line":18940},[79,67892,67893],{"class":228},"      cks[i].",[79,67895,59802],{"class":85},[79,67897,455],{"class":228},[79,67899,59807],{"class":89},[79,67901,1020],{"class":228},[79,67903,56438],{"class":448},[79,67905,56441],{"class":228},[79,67907,67908],{"class":81,"line":18953},[79,67909,67910],{"class":2313},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[79,67912,67913],{"class":81,"line":18958},[79,67914,67915],{"class":2313},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[79,67917,67918],{"class":81,"line":34631},[79,67919,67920],{"class":2313},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[79,67922,67923],{"class":81,"line":34637},[79,67924,67925],{"class":2313},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[79,67927,67928,67931,67933,67935,67937,67939,67942,67944,67946,67948,67950],{"class":81,"line":34643},[79,67929,67930],{"class":228},"        checkAll.checked ",[79,67932,239],{"class":448},[79,67934,56385],{"class":228},[79,67936,57670],{"class":85},[79,67938,455],{"class":228},[79,67940,67941],{"class":89},"'.ck:checked'",[79,67943,32833],{"class":228},[79,67945,53962],{"class":96},[79,67947,59895],{"class":448},[79,67949,67817],{"class":228},[79,67951,57820],{"class":96},[79,67953,67954],{"class":81,"line":34649},[79,67955,66803],{"class":228},[79,67957,67958],{"class":81,"line":34655},[79,67959,4272],{"class":228},[79,67961,67962,67964,67966],{"class":81,"line":34666},[79,67963,54410],{"class":228},[79,67965,53807],{"class":232},[79,67967,53301],{"class":228},[79,67969,67970,67972,67974],{"class":81,"line":34672},[79,67971,53779],{"class":228},[79,67973,53794],{"class":232},[79,67975,53301],{"class":228},[79,67977,67978],{"class":81,"line":34692},[79,67979,542],{"emptyLinePlaceholder":541},[79,67981,67982,67984,67986],{"class":81,"line":34698},[79,67983,53779],{"class":228},[79,67985,52630],{"class":232},[79,67987,53301],{"class":228},[19,67989,67990],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,67992,67993],{},"用好之间比较得到的布尔值！！！",[19,67995,67996,67997,68000,68001,3757,68004,2824,68006,68009],{},"在 JS 里访问的时候，",[59,67998,67999],{},"checkbox.checked"," 是一个 ",[2398,68002,68003],{},"布尔值",[59,68005,3469],{},[59,68007,68008],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,68011,68012,68013,68016,68017],{},"HTML 的 ",[59,68014,68015],{},"checked=\"checked\""," 只是 ",[2398,68018,68019,68020,68023],{},"初始值；JS 的 ",[59,68021,68022],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,68025,68026],{},"：checked是一个伪类选择器",[19,68028,68029],{},[3569,68030],{"alt":57,"src":68031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,68033,68034,68037],{},[68035,68036],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,68039,68040],{},[3569,68041],{"alt":57,"src":68042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,68044,68046],{"id":68045},"_33-dom事件进阶","3.3 DOM事件进阶",[339,68048,68050],{"id":68049},"_331-事件流","3.3.1 事件流",[19,68052,68053],{},[3569,68054],{"alt":57,"src":68055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[24023,68057,68059],{"id":68058},"_3311-事件捕获","3.3.1.1 事件捕获",[19,68061,68062],{},[3569,68063],{"alt":57,"src":68064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[51,68066,68068],{"className":52628,"code":68067,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .father {\n      width: 500px;\n      height: 500px;\n      background-color: pink;\n    }\n\n    .son {\n      width: 200px;\n      height: 200px;\n      background-color: skyblue;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"father\">\n    \u003Cdiv class=\"son\">\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const fa = document.querySelector('.father')\n    const son = document.querySelector('.son')\n    document.addEventListener('click', function () {\n      alert('woshiu1')\n    }, true)\n    fa.addEventListener('click', function () {\n      alert('1')\n    }, true)\n    son.addEventListener('click', function () {\n      alert('2')\n    }, true)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,68069,68070,68080,68094,68098,68106,68120,68140,68152,68160,68167,68179,68191,68201,68205,68209,68216,68228,68240,68250,68254,68262,68270,68274,68282,68297,68316,68324,68332,68352,68372,68388,68399,68407,68424,68435,68443,68460,68471,68479,68487,68495,68499],{"__ignoreMap":57},[79,68071,68072,68074,68076,68078],{"class":81,"line":82},[79,68073,53292],{"class":228},[79,68075,53295],{"class":232},[79,68077,53298],{"class":85},[79,68079,53301],{"class":228},[79,68081,68082,68084,68086,68088,68090,68092],{"class":81,"line":167},[79,68083,229],{"class":228},[79,68085,52630],{"class":232},[79,68087,53310],{"class":85},[79,68089,239],{"class":228},[79,68091,53315],{"class":89},[79,68093,53301],{"class":228},[79,68095,68096],{"class":81,"line":178},[79,68097,542],{"emptyLinePlaceholder":541},[79,68099,68100,68102,68104],{"class":81,"line":545},[79,68101,229],{"class":228},[79,68103,53328],{"class":232},[79,68105,53301],{"class":228},[79,68107,68108,68110,68112,68114,68116,68118],{"class":81,"line":550},[79,68109,54138],{"class":228},[79,68111,53338],{"class":232},[79,68113,53341],{"class":85},[79,68115,239],{"class":228},[79,68117,53346],{"class":89},[79,68119,53301],{"class":228},[79,68121,68122,68124,68126,68128,68130,68132,68134,68136,68138],{"class":81,"line":562},[79,68123,54138],{"class":228},[79,68125,53338],{"class":232},[79,68127,236],{"class":85},[79,68129,239],{"class":228},[79,68131,53385],{"class":89},[79,68133,53365],{"class":85},[79,68135,239],{"class":228},[79,68137,53392],{"class":89},[79,68139,53301],{"class":228},[79,68141,68142,68144,68146,68148,68150],{"class":81,"line":568},[79,68143,54138],{"class":228},[79,68145,53401],{"class":232},[79,68147,53404],{"class":228},[79,68149,53401],{"class":232},[79,68151,53301],{"class":228},[79,68153,68154,68156,68158],{"class":81,"line":574},[79,68155,54138],{"class":228},[79,68157,2159],{"class":232},[79,68159,53301],{"class":228},[79,68161,68162,68165],{"class":81,"line":579},[79,68163,68164],{"class":85},"    .father",[79,68166,17604],{"class":228},[79,68168,68169,68171,68173,68175,68177],{"class":81,"line":585},[79,68170,56760],{"class":96},[79,68172,53431],{"class":228},[79,68174,67062],{"class":96},[79,68176,53486],{"class":448},[79,68178,3400],{"class":228},[79,68180,68181,68183,68185,68187,68189],{"class":81,"line":591},[79,68182,56774],{"class":96},[79,68184,53431],{"class":228},[79,68186,67062],{"class":96},[79,68188,53486],{"class":448},[79,68190,3400],{"class":228},[79,68192,68193,68195,68197,68199],{"class":81,"line":596},[79,68194,56873],{"class":96},[79,68196,53431],{"class":228},[79,68198,53639],{"class":96},[79,68200,3400],{"class":228},[79,68202,68203],{"class":81,"line":602},[79,68204,4272],{"class":228},[79,68206,68207],{"class":81,"line":608},[79,68208,542],{"emptyLinePlaceholder":541},[79,68210,68211,68214],{"class":81,"line":614},[79,68212,68213],{"class":85},"    .son",[79,68215,17604],{"class":228},[79,68217,68218,68220,68222,68224,68226],{"class":81,"line":619},[79,68219,56760],{"class":96},[79,68221,53431],{"class":228},[79,68223,3817],{"class":96},[79,68225,53486],{"class":448},[79,68227,3400],{"class":228},[79,68229,68230,68232,68234,68236,68238],{"class":81,"line":625},[79,68231,56774],{"class":96},[79,68233,53431],{"class":228},[79,68235,3817],{"class":96},[79,68237,53486],{"class":448},[79,68239,3400],{"class":228},[79,68241,68242,68244,68246,68248],{"class":81,"line":631},[79,68243,56873],{"class":96},[79,68245,53431],{"class":228},[79,68247,56878],{"class":96},[79,68249,3400],{"class":228},[79,68251,68252],{"class":81,"line":637},[79,68253,4272],{"class":228},[79,68255,68256,68258,68260],{"class":81,"line":643},[79,68257,54410],{"class":228},[79,68259,2159],{"class":232},[79,68261,53301],{"class":228},[79,68263,68264,68266,68268],{"class":81,"line":649},[79,68265,53779],{"class":228},[79,68267,53328],{"class":232},[79,68269,53301],{"class":228},[79,68271,68272],{"class":81,"line":655},[79,68273,542],{"emptyLinePlaceholder":541},[79,68275,68276,68278,68280],{"class":81,"line":660},[79,68277,229],{"class":228},[79,68279,53794],{"class":232},[79,68281,53301],{"class":228},[79,68283,68284,68286,68288,68290,68292,68295],{"class":81,"line":666},[79,68285,54138],{"class":228},[79,68287,53605],{"class":232},[79,68289,55477],{"class":85},[79,68291,239],{"class":228},[79,68293,68294],{"class":89},"\"father\"",[79,68296,53301],{"class":228},[79,68298,68299,68301,68303,68305,68307,68310,68312,68314],{"class":81,"line":672},[79,68300,53335],{"class":228},[79,68302,53605],{"class":232},[79,68304,55477],{"class":85},[79,68306,239],{"class":228},[79,68308,68309],{"class":89},"\"son\"",[79,68311,57303],{"class":228},[79,68313,53605],{"class":232},[79,68315,53301],{"class":228},[79,68317,68318,68320,68322],{"class":81,"line":678},[79,68319,54410],{"class":228},[79,68321,53605],{"class":232},[79,68323,53301],{"class":228},[79,68325,68326,68328,68330],{"class":81,"line":684},[79,68327,54138],{"class":228},[79,68329,53807],{"class":232},[79,68331,53301],{"class":228},[79,68333,68334,68336,68339,68341,68343,68345,68347,68350],{"class":81,"line":690},[79,68335,13256],{"class":448},[79,68337,68338],{"class":96}," fa",[79,68340,556],{"class":448},[79,68342,56385],{"class":228},[79,68344,56388],{"class":85},[79,68346,455],{"class":228},[79,68348,68349],{"class":89},"'.father'",[79,68351,850],{"class":228},[79,68353,68354,68356,68359,68361,68363,68365,68367,68370],{"class":81,"line":695},[79,68355,13256],{"class":448},[79,68357,68358],{"class":96}," son",[79,68360,556],{"class":448},[79,68362,56385],{"class":228},[79,68364,56388],{"class":85},[79,68366,455],{"class":228},[79,68368,68369],{"class":89},"'.son'",[79,68371,850],{"class":228},[79,68373,68374,68376,68378,68380,68382,68384,68386],{"class":81,"line":700},[79,68375,54400],{"class":228},[79,68377,59802],{"class":85},[79,68379,455],{"class":228},[79,68381,59807],{"class":89},[79,68383,1020],{"class":228},[79,68385,56438],{"class":448},[79,68387,56441],{"class":228},[79,68389,68390,68392,68394,68397],{"class":81,"line":712},[79,68391,60914],{"class":85},[79,68393,455],{"class":228},[79,68395,68396],{"class":89},"'woshiu1'",[79,68398,850],{"class":228},[79,68400,68401,68403,68405],{"class":81,"line":721},[79,68402,56524],{"class":228},[79,68404,3469],{"class":96},[79,68406,850],{"class":228},[79,68408,68409,68412,68414,68416,68418,68420,68422],{"class":81,"line":726},[79,68410,68411],{"class":228},"    fa.",[79,68413,59802],{"class":85},[79,68415,455],{"class":228},[79,68417,59807],{"class":89},[79,68419,1020],{"class":228},[79,68421,56438],{"class":448},[79,68423,56441],{"class":228},[79,68425,68426,68428,68430,68433],{"class":81,"line":731},[79,68427,60914],{"class":85},[79,68429,455],{"class":228},[79,68431,68432],{"class":89},"'1'",[79,68434,850],{"class":228},[79,68436,68437,68439,68441],{"class":81,"line":748},[79,68438,56524],{"class":228},[79,68440,3469],{"class":96},[79,68442,850],{"class":228},[79,68444,68445,68448,68450,68452,68454,68456,68458],{"class":81,"line":765},[79,68446,68447],{"class":228},"    son.",[79,68449,59802],{"class":85},[79,68451,455],{"class":228},[79,68453,59807],{"class":89},[79,68455,1020],{"class":228},[79,68457,56438],{"class":448},[79,68459,56441],{"class":228},[79,68461,68462,68464,68466,68469],{"class":81,"line":780},[79,68463,60914],{"class":85},[79,68465,455],{"class":228},[79,68467,68468],{"class":89},"'2'",[79,68470,850],{"class":228},[79,68472,68473,68475,68477],{"class":81,"line":811},[79,68474,56524],{"class":228},[79,68476,3469],{"class":96},[79,68478,850],{"class":228},[79,68480,68481,68483,68485],{"class":81,"line":816},[79,68482,54410],{"class":228},[79,68484,53807],{"class":232},[79,68486,53301],{"class":228},[79,68488,68489,68491,68493],{"class":81,"line":821},[79,68490,53779],{"class":228},[79,68492,53794],{"class":232},[79,68494,53301],{"class":228},[79,68496,68497],{"class":81,"line":837},[79,68498,542],{"emptyLinePlaceholder":541},[79,68500,68501,68503,68505],{"class":81,"line":853},[79,68502,53779],{"class":228},[79,68504,52630],{"class":232},[79,68506,53301],{"class":228},[19,68508,68509],{},[3569,68510],{"alt":57,"src":68511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,68513,68514],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[24023,68516,68518],{"id":68517},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,68520,68521],{},[3569,68522],{"alt":57,"src":68523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,68525,68526],{},"反着来",[19,68528,68529],{},"注意是同名事件，比如都是‘click’",[24023,68531,68533],{"id":68532},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,68535,68536],{},[3569,68537],{"alt":57,"src":68538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[24023,68540,68542],{"id":68541},"_3314-解绑事件","3.3.1.4 解绑事件",[19,68544,68545],{},[3569,68546],{"alt":57,"src":68547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,68549,68550],{},[3569,68551],{"alt":57,"src":68552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[24023,68554,68556],{"id":68555},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[26,68558,68559],{},[29,68560,68561],{},"事件类型的区别",[19,68563,68564],{},[3569,68565],{"alt":57,"src":68566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,68568,68569],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[26,68571,68572],{"start":167},[29,68573,68574],{},"注册事件的区别",[19,68576,68577],{},[3569,68578],{"alt":57,"src":68579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[24023,68581,68583],{"id":68582},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,68585,68586],{},[3569,68587],{"alt":57,"src":68588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,68590,68591],{},[3569,68592],{"alt":57,"src":68593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[51,68595,68597],{"className":219,"code":68596,"language":221,"meta":57,"style":57},"\u003Cbody>\n  \u003Cform action=\"http:\u002F\u002Fwww.itcast.cn\">\n    \u003Cinput type=\"submit\" value=\"免费注册\">\n    \u003Cscript>\n      const form = document.querySelector('form')\n      form.addEventListener('submit', function (e) {\n        e.preventDefault()\n      })\n    \u003C\u002Fscript>\n  \u003C\u002Fform>\n\u003C\u002Fbody>\n",[59,68598,68599,68607,68624,68647,68655,68660,68665,68670,68674,68682,68690],{"__ignoreMap":57},[79,68600,68601,68603,68605],{"class":81,"line":82},[79,68602,229],{"class":228},[79,68604,53794],{"class":232},[79,68606,53301],{"class":228},[79,68608,68609,68611,68614,68617,68619,68622],{"class":81,"line":167},[79,68610,54138],{"class":228},[79,68612,68613],{"class":232},"form",[79,68615,68616],{"class":85}," action",[79,68618,239],{"class":228},[79,68620,68621],{"class":89},"\"http:\u002F\u002Fwww.itcast.cn\"",[79,68623,53301],{"class":228},[79,68625,68626,68628,68630,68632,68634,68637,68640,68642,68645],{"class":81,"line":178},[79,68627,53335],{"class":228},[79,68629,55812],{"class":232},[79,68631,245],{"class":85},[79,68633,239],{"class":228},[79,68635,68636],{"class":89},"\"submit\"",[79,68638,68639],{"class":85}," value",[79,68641,239],{"class":228},[79,68643,68644],{"class":89},"\"免费注册\"",[79,68646,53301],{"class":228},[79,68648,68649,68651,68653],{"class":81,"line":545},[79,68650,53335],{"class":228},[79,68652,53807],{"class":232},[79,68654,53301],{"class":228},[79,68656,68657],{"class":81,"line":550},[79,68658,68659],{"class":228},"      const form = document.querySelector('form')\n",[79,68661,68662],{"class":81,"line":562},[79,68663,68664],{"class":228},"      form.addEventListener('submit', function (e) {\n",[79,68666,68667],{"class":81,"line":568},[79,68668,68669],{"class":228},"        e.preventDefault()\n",[79,68671,68672],{"class":81,"line":574},[79,68673,66803],{"class":228},[79,68675,68676,68678,68680],{"class":81,"line":579},[79,68677,53770],{"class":228},[79,68679,53807],{"class":232},[79,68681,53301],{"class":228},[79,68683,68684,68686,68688],{"class":81,"line":585},[79,68685,54410],{"class":228},[79,68687,68613],{"class":232},[79,68689,53301],{"class":228},[79,68691,68692,68694,68696],{"class":81,"line":591},[79,68693,53779],{"class":228},[79,68695,53794],{"class":232},[79,68697,53301],{"class":228},[19,68699,68700],{},"点击不在跳转！！！",[339,68702,68704],{"id":68703},"_332-事件委托","3.3.2 事件委托",[19,68706,68707],{},[3569,68708],{"alt":57,"src":68709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[51,68711,68713],{"className":52628,"code":68712,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cul>\n    \u003Cli>1\u003C\u002Fli>\n    \u003Cli>2\u003C\u002Fli>\n    \u003Cli>3\u003C\u002Fli>\n    \u003Cli>4\u003C\u002Fli>\n    \u003Cli>5\u003C\u002Fli>\n    \u003Cp>我不需要变色\u003C\u002Fp>\n  \u003C\u002Ful>\n  \u003Cscript>\n    \u002F\u002F 点击每个li，当前文字变为红色\n    const ul = document.querySelector('ul')\n    ul.addEventListener('click', function (e) {\n      \u002F\u002F alert(1)\n      \u002F\u002F e.target就是我们点击的对象\n      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n      \u002F\u002F e.target.style.color = 'red'\n      console.log(e)\n\n      console.dir(e.target)\n\n      \u002F\u002F 我们需求，我们只有点击li才会变色\n      \u002F\u002F 通过tagName来进行判断\n      if (e.target.tagName === 'LI') {\n        e.target.style.color = 'red'\n      }\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,68714,68715,68725,68739,68743,68751,68765,68785,68797,68805,68809,68817,68825,68837,68849,68861,68873,68885,68898,68906,68914,68919,68938,68959,68964,68969,68974,68979,68988,68992,69002,69006,69011,69016,69030,69040,69044,69048,69056,69064,69068],{"__ignoreMap":57},[79,68716,68717,68719,68721,68723],{"class":81,"line":82},[79,68718,53292],{"class":228},[79,68720,53295],{"class":232},[79,68722,53298],{"class":85},[79,68724,53301],{"class":228},[79,68726,68727,68729,68731,68733,68735,68737],{"class":81,"line":167},[79,68728,229],{"class":228},[79,68730,52630],{"class":232},[79,68732,53310],{"class":85},[79,68734,239],{"class":228},[79,68736,53315],{"class":89},[79,68738,53301],{"class":228},[79,68740,68741],{"class":81,"line":178},[79,68742,542],{"emptyLinePlaceholder":541},[79,68744,68745,68747,68749],{"class":81,"line":545},[79,68746,229],{"class":228},[79,68748,53328],{"class":232},[79,68750,53301],{"class":228},[79,68752,68753,68755,68757,68759,68761,68763],{"class":81,"line":550},[79,68754,54138],{"class":228},[79,68756,53338],{"class":232},[79,68758,53341],{"class":85},[79,68760,239],{"class":228},[79,68762,53346],{"class":89},[79,68764,53301],{"class":228},[79,68766,68767,68769,68771,68773,68775,68777,68779,68781,68783],{"class":81,"line":562},[79,68768,54138],{"class":228},[79,68770,53338],{"class":232},[79,68772,236],{"class":85},[79,68774,239],{"class":228},[79,68776,53385],{"class":89},[79,68778,53365],{"class":85},[79,68780,239],{"class":228},[79,68782,53392],{"class":89},[79,68784,53301],{"class":228},[79,68786,68787,68789,68791,68793,68795],{"class":81,"line":568},[79,68788,54138],{"class":228},[79,68790,53401],{"class":232},[79,68792,53404],{"class":228},[79,68794,53401],{"class":232},[79,68796,53301],{"class":228},[79,68798,68799,68801,68803],{"class":81,"line":574},[79,68800,53779],{"class":228},[79,68802,53328],{"class":232},[79,68804,53301],{"class":228},[79,68806,68807],{"class":81,"line":579},[79,68808,542],{"emptyLinePlaceholder":541},[79,68810,68811,68813,68815],{"class":81,"line":585},[79,68812,229],{"class":228},[79,68814,53794],{"class":232},[79,68816,53301],{"class":228},[79,68818,68819,68821,68823],{"class":81,"line":591},[79,68820,54138],{"class":228},[79,68822,3246],{"class":232},[79,68824,53301],{"class":228},[79,68826,68827,68829,68831,68833,68835],{"class":81,"line":596},[79,68828,53335],{"class":228},[79,68830,29],{"class":232},[79,68832,55956],{"class":228},[79,68834,29],{"class":232},[79,68836,53301],{"class":228},[79,68838,68839,68841,68843,68845,68847],{"class":81,"line":602},[79,68840,53335],{"class":228},[79,68842,29],{"class":232},[79,68844,55975],{"class":228},[79,68846,29],{"class":232},[79,68848,53301],{"class":228},[79,68850,68851,68853,68855,68857,68859],{"class":81,"line":608},[79,68852,53335],{"class":228},[79,68854,29],{"class":232},[79,68856,55994],{"class":228},[79,68858,29],{"class":232},[79,68860,53301],{"class":228},[79,68862,68863,68865,68867,68869,68871],{"class":81,"line":614},[79,68864,53335],{"class":228},[79,68866,29],{"class":232},[79,68868,56013],{"class":228},[79,68870,29],{"class":232},[79,68872,53301],{"class":228},[79,68874,68875,68877,68879,68881,68883],{"class":81,"line":619},[79,68876,53335],{"class":228},[79,68878,29],{"class":232},[79,68880,56032],{"class":228},[79,68882,29],{"class":232},[79,68884,53301],{"class":228},[79,68886,68887,68889,68891,68894,68896],{"class":81,"line":625},[79,68888,53335],{"class":228},[79,68890,19],{"class":232},[79,68892,68893],{"class":228},">我不需要变色\u003C\u002F",[79,68895,19],{"class":232},[79,68897,53301],{"class":228},[79,68899,68900,68902,68904],{"class":81,"line":631},[79,68901,54410],{"class":228},[79,68903,3246],{"class":232},[79,68905,53301],{"class":228},[79,68907,68908,68910,68912],{"class":81,"line":637},[79,68909,54138],{"class":228},[79,68911,53807],{"class":232},[79,68913,53301],{"class":228},[79,68915,68916],{"class":81,"line":643},[79,68917,68918],{"class":2313},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[79,68920,68921,68923,68925,68927,68929,68931,68933,68936],{"class":81,"line":649},[79,68922,13256],{"class":448},[79,68924,63281],{"class":96},[79,68926,556],{"class":448},[79,68928,56385],{"class":228},[79,68930,56388],{"class":85},[79,68932,455],{"class":228},[79,68934,68935],{"class":89},"'ul'",[79,68937,850],{"class":228},[79,68939,68940,68943,68945,68947,68949,68951,68953,68955,68957],{"class":81,"line":655},[79,68941,68942],{"class":228},"    ul.",[79,68944,59802],{"class":85},[79,68946,455],{"class":228},[79,68948,59807],{"class":89},[79,68950,1020],{"class":228},[79,68952,56438],{"class":448},[79,68954,3757],{"class":228},[79,68956,2328],{"class":7284},[79,68958,14476],{"class":228},[79,68960,68961],{"class":81,"line":660},[79,68962,68963],{"class":2313},"      \u002F\u002F alert(1)\n",[79,68965,68966],{"class":81,"line":666},[79,68967,68968],{"class":2313},"      \u002F\u002F e.target就是我们点击的对象\n",[79,68970,68971],{"class":81,"line":672},[79,68972,68973],{"class":2313},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[79,68975,68976],{"class":81,"line":678},[79,68977,68978],{"class":2313},"      \u002F\u002F e.target.style.color = 'red'\n",[79,68980,68981,68983,68985],{"class":81,"line":684},[79,68982,60233],{"class":228},[79,68984,60236],{"class":85},[79,68986,68987],{"class":228},"(e)\n",[79,68989,68990],{"class":81,"line":690},[79,68991,542],{"emptyLinePlaceholder":541},[79,68993,68994,68996,68999],{"class":81,"line":695},[79,68995,60233],{"class":228},[79,68997,68998],{"class":85},"dir",[79,69000,69001],{"class":228},"(e.target)\n",[79,69003,69004],{"class":81,"line":700},[79,69005,542],{"emptyLinePlaceholder":541},[79,69007,69008],{"class":81,"line":712},[79,69009,69010],{"class":2313},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[79,69012,69013],{"class":81,"line":721},[79,69014,69015],{"class":2313},"      \u002F\u002F 通过tagName来进行判断\n",[79,69017,69018,69020,69023,69025,69028],{"class":81,"line":726},[79,69019,56469],{"class":448},[79,69021,69022],{"class":228}," (e.target.tagName ",[79,69024,56475],{"class":448},[79,69026,69027],{"class":89}," 'LI'",[79,69029,14476],{"class":228},[79,69031,69032,69035,69037],{"class":81,"line":731},[79,69033,69034],{"class":228},"        e.target.style.color ",[79,69036,239],{"class":448},[79,69038,69039],{"class":89}," 'red'\n",[79,69041,69042],{"class":81,"line":748},[79,69043,54391],{"class":228},[79,69045,69046],{"class":81,"line":765},[79,69047,35458],{"class":228},[79,69049,69050,69052,69054],{"class":81,"line":780},[79,69051,54410],{"class":228},[79,69053,53807],{"class":232},[79,69055,53301],{"class":228},[79,69057,69058,69060,69062],{"class":81,"line":811},[79,69059,53779],{"class":228},[79,69061,53794],{"class":232},[79,69063,53301],{"class":228},[79,69065,69066],{"class":81,"line":816},[79,69067,542],{"emptyLinePlaceholder":541},[79,69069,69070,69072,69074],{"class":81,"line":821},[79,69071,53779],{"class":228},[79,69073,52630],{"class":232},[79,69075,53301],{"class":228},[19,69077,69078],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,69080,69081],{},"if(e.target.ragName==='P') {}",[19,69083,69084],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,69086,69087],{},"通过事件委托的方式实现tab栏切换改造：",[19,69089,69090],{},"一定要记住自定义属性！！！！！！",[19,69092,69093],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,69095,69096],{},"id是自定义的属性名",[19,69098,69099],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[51,69101,69103],{"className":52628,"code":69102,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Ctitle>tab栏切换\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      margin: 0;\n      padding: 0;\n    }\n\n    .tab {\n      width: 590px;\n      height: 340px;\n      margin: 20px;\n      border: 1px solid #e4e4e4;\n    }\n\n    .tab-nav {\n      width: 100%;\n      height: 60px;\n      line-height: 60px;\n      display: flex;\n      justify-content: space-between;\n    }\n\n    .tab-nav h3 {\n      font-size: 24px;\n      font-weight: normal;\n      margin-left: 20px;\n    }\n\n    .tab-nav ul {\n      list-style: none;\n      display: flex;\n      justify-content: flex-end;\n    }\n\n    .tab-nav ul li {\n      margin: 0 20px;\n      font-size: 14px;\n    }\n\n    .tab-nav ul li a {\n      text-decoration: none;\n      border-bottom: 2px solid transparent;\n      color: #333;\n    }\n\n    .tab-nav ul li a.active {\n      border-color: #e1251b;\n      color: #e1251b;\n    }\n\n    .tab-content {\n      padding: 0 16px;\n    }\n\n    .tab-content .item {\n      display: none;\n    }\n\n    .tab-content .active {\n      display: block;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"tab\">\n    \u003Cdiv class=\"tab-nav\">\n      \u003Ch3>每日特价\u003C\u002Fh3>\n      \u003Cul>\n        \u003Cli>\u003Ca class=\"active\" href=\"javascript:;\" data-id=\"0\">精选\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\" data-id=\"1\">美食\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\" data-id=\"2\">百货\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\" data-id=\"3\">个护\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\" data-id=\"4\">预告\u003C\u002Fa>\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"tab-content\">\n      \u003Cdiv class=\"item active\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 采取事件委托的形式，tab栏切换\n    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n    const ul = document.querySelector('.tab-nav ul')\n    \u002F\u002F 2.添加事件\n    ul.addEventListener('click', function (e) {\n      console.dir(e.target)\n      \u002F\u002Fe.targer是我们点击的对象\n      if (e.target.tagName === 'A') {\n        document.querySelector('.active').classList.remove('active')\n        e.target.classList.add('active')\n\n        \u002F\u002F 下面大盒子模块\n        \u002F\u002F console.log(e.target.dataset.id)\n        const i = +e.target.dataset.id\n        document.querySelector('.tab-content .active').classList.remove('active')\n        document.querySelector(`.tab-content .item:nth-child(${i + 1})`).classList.add('active')\n\n      }\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,69104,69105,69115,69129,69133,69141,69155,69175,69195,69207,69215,69221,69231,69241,69245,69249,69255,69267,69279,69291,69307,69311,69315,69321,69333,69345,69357,69367,69377,69381,69385,69393,69405,69415,69427,69431,69435,69443,69453,69463,69473,69477,69481,69491,69505,69517,69521,69525,69537,69547,69563,69573,69577,69581,69595,69605,69615,69619,69623,69629,69643,69647,69651,69659,69669,69673,69677,69686,69696,69700,69708,69716,69720,69728,69742,69756,69768,69776,69815,69847,69879,69911,69943,69951,69959,69973,70007,70041,70075,70109,70143,70151,70159,70167,70172,70177,70196,70201,70221,70229,70234,70247,70268,70281,70285,70290,70295,70308,70328,70356,70360,70364,70368,70376,70384,70388],{"__ignoreMap":57},[79,69106,69107,69109,69111,69113],{"class":81,"line":82},[79,69108,53292],{"class":228},[79,69110,53295],{"class":232},[79,69112,53298],{"class":85},[79,69114,53301],{"class":228},[79,69116,69117,69119,69121,69123,69125,69127],{"class":81,"line":167},[79,69118,229],{"class":228},[79,69120,52630],{"class":232},[79,69122,53310],{"class":85},[79,69124,239],{"class":228},[79,69126,53315],{"class":89},[79,69128,53301],{"class":228},[79,69130,69131],{"class":81,"line":178},[79,69132,542],{"emptyLinePlaceholder":541},[79,69134,69135,69137,69139],{"class":81,"line":545},[79,69136,229],{"class":228},[79,69138,53328],{"class":232},[79,69140,53301],{"class":228},[79,69142,69143,69145,69147,69149,69151,69153],{"class":81,"line":550},[79,69144,54138],{"class":228},[79,69146,53338],{"class":232},[79,69148,53341],{"class":85},[79,69150,239],{"class":228},[79,69152,53346],{"class":89},[79,69154,61116],{"class":228},[79,69156,69157,69159,69161,69163,69165,69167,69169,69171,69173],{"class":81,"line":562},[79,69158,54138],{"class":228},[79,69160,53338],{"class":232},[79,69162,53357],{"class":85},[79,69164,239],{"class":228},[79,69166,53362],{"class":89},[79,69168,53365],{"class":85},[79,69170,239],{"class":228},[79,69172,53370],{"class":89},[79,69174,61116],{"class":228},[79,69176,69177,69179,69181,69183,69185,69187,69189,69191,69193],{"class":81,"line":568},[79,69178,54138],{"class":228},[79,69180,53338],{"class":232},[79,69182,236],{"class":85},[79,69184,239],{"class":228},[79,69186,53385],{"class":89},[79,69188,53365],{"class":85},[79,69190,239],{"class":228},[79,69192,53392],{"class":89},[79,69194,61116],{"class":228},[79,69196,69197,69199,69201,69203,69205],{"class":81,"line":574},[79,69198,54138],{"class":228},[79,69200,53401],{"class":232},[79,69202,65613],{"class":228},[79,69204,53401],{"class":232},[79,69206,53301],{"class":228},[79,69208,69209,69211,69213],{"class":81,"line":579},[79,69210,54138],{"class":228},[79,69212,2159],{"class":232},[79,69214,53301],{"class":228},[79,69216,69217,69219],{"class":81,"line":585},[79,69218,8470],{"class":232},[79,69220,17604],{"class":228},[79,69222,69223,69225,69227,69229],{"class":81,"line":591},[79,69224,56695],{"class":96},[79,69226,53431],{"class":228},[79,69228,759],{"class":96},[79,69230,3400],{"class":228},[79,69232,69233,69235,69237,69239],{"class":81,"line":596},[79,69234,56684],{"class":96},[79,69236,53431],{"class":228},[79,69238,759],{"class":96},[79,69240,3400],{"class":228},[79,69242,69243],{"class":81,"line":602},[79,69244,4272],{"class":228},[79,69246,69247],{"class":81,"line":608},[79,69248,542],{"emptyLinePlaceholder":541},[79,69250,69251,69253],{"class":81,"line":614},[79,69252,65664],{"class":85},[79,69254,17604],{"class":228},[79,69256,69257,69259,69261,69263,69265],{"class":81,"line":619},[79,69258,56760],{"class":96},[79,69260,53431],{"class":228},[79,69262,65675],{"class":96},[79,69264,53486],{"class":448},[79,69266,3400],{"class":228},[79,69268,69269,69271,69273,69275,69277],{"class":81,"line":625},[79,69270,56774],{"class":96},[79,69272,53431],{"class":228},[79,69274,65688],{"class":96},[79,69276,53486],{"class":448},[79,69278,3400],{"class":228},[79,69280,69281,69283,69285,69287,69289],{"class":81,"line":631},[79,69282,56695],{"class":96},[79,69284,53431],{"class":228},[79,69286,2940],{"class":96},[79,69288,53486],{"class":448},[79,69290,3400],{"class":228},[79,69292,69293,69295,69297,69299,69301,69303,69305],{"class":81,"line":637},[79,69294,63965],{"class":96},[79,69296,53431],{"class":228},[79,69298,775],{"class":96},[79,69300,53486],{"class":448},[79,69302,53515],{"class":96},[79,69304,64232],{"class":96},[79,69306,3400],{"class":228},[79,69308,69309],{"class":81,"line":643},[79,69310,4272],{"class":228},[79,69312,69313],{"class":81,"line":649},[79,69314,542],{"emptyLinePlaceholder":541},[79,69316,69317,69319],{"class":81,"line":655},[79,69318,65733],{"class":85},[79,69320,17604],{"class":228},[79,69322,69323,69325,69327,69329,69331],{"class":81,"line":660},[79,69324,56760],{"class":96},[79,69326,53431],{"class":228},[79,69328,2555],{"class":96},[79,69330,1094],{"class":448},[79,69332,3400],{"class":228},[79,69334,69335,69337,69339,69341,69343],{"class":81,"line":666},[79,69336,56774],{"class":96},[79,69338,53431],{"class":228},[79,69340,3147],{"class":96},[79,69342,53486],{"class":448},[79,69344,3400],{"class":228},[79,69346,69347,69349,69351,69353,69355],{"class":81,"line":672},[79,69348,59348],{"class":96},[79,69350,53431],{"class":228},[79,69352,3147],{"class":96},[79,69354,53486],{"class":448},[79,69356,3400],{"class":228},[79,69358,69359,69361,69363,69365],{"class":81,"line":678},[79,69360,56998],{"class":96},[79,69362,53431],{"class":228},[79,69364,53471],{"class":96},[79,69366,3400],{"class":228},[79,69368,69369,69371,69373,69375],{"class":81,"line":684},[79,69370,57009],{"class":96},[79,69372,53431],{"class":228},[79,69374,53662],{"class":96},[79,69376,3400],{"class":228},[79,69378,69379],{"class":81,"line":690},[79,69380,4272],{"class":228},[79,69382,69383],{"class":81,"line":695},[79,69384,542],{"emptyLinePlaceholder":541},[79,69386,69387,69389,69391],{"class":81,"line":700},[79,69388,65733],{"class":85},[79,69390,65806],{"class":232},[79,69392,17604],{"class":228},[79,69394,69395,69397,69399,69401,69403],{"class":81,"line":712},[79,69396,56911],{"class":96},[79,69398,53431],{"class":228},[79,69400,3040],{"class":96},[79,69402,53486],{"class":448},[79,69404,3400],{"class":228},[79,69406,69407,69409,69411,69413],{"class":81,"line":721},[79,69408,64322],{"class":96},[79,69410,53431],{"class":228},[79,69412,65829],{"class":96},[79,69414,3400],{"class":228},[79,69416,69417,69419,69421,69423,69425],{"class":81,"line":726},[79,69418,63988],{"class":96},[79,69420,53431],{"class":228},[79,69422,2940],{"class":96},[79,69424,53486],{"class":448},[79,69426,3400],{"class":228},[79,69428,69429],{"class":81,"line":731},[79,69430,4272],{"class":228},[79,69432,69433],{"class":81,"line":748},[79,69434,542],{"emptyLinePlaceholder":541},[79,69436,69437,69439,69441],{"class":81,"line":765},[79,69438,65733],{"class":85},[79,69440,63281],{"class":232},[79,69442,17604],{"class":228},[79,69444,69445,69447,69449,69451],{"class":81,"line":780},[79,69446,56721],{"class":96},[79,69448,53431],{"class":228},[79,69450,56726],{"class":96},[79,69452,3400],{"class":228},[79,69454,69455,69457,69459,69461],{"class":81,"line":811},[79,69456,56998],{"class":96},[79,69458,53431],{"class":228},[79,69460,53471],{"class":96},[79,69462,3400],{"class":228},[79,69464,69465,69467,69469,69471],{"class":81,"line":816},[79,69466,57009],{"class":96},[79,69468,53431],{"class":228},[79,69470,53574],{"class":96},[79,69472,3400],{"class":228},[79,69474,69475],{"class":81,"line":821},[79,69476,4272],{"class":228},[79,69478,69479],{"class":81,"line":837},[79,69480,542],{"emptyLinePlaceholder":541},[79,69482,69483,69485,69487,69489],{"class":81,"line":853},[79,69484,65733],{"class":85},[79,69486,63281],{"class":232},[79,69488,57064],{"class":232},[79,69490,17604],{"class":228},[79,69492,69493,69495,69497,69499,69501,69503],{"class":81,"line":864},[79,69494,56695],{"class":96},[79,69496,53431],{"class":228},[79,69498,759],{"class":96},[79,69500,11005],{"class":96},[79,69502,53486],{"class":448},[79,69504,3400],{"class":228},[79,69506,69507,69509,69511,69513,69515],{"class":81,"line":869},[79,69508,56911],{"class":96},[79,69510,53431],{"class":228},[79,69512,2789],{"class":96},[79,69514,53486],{"class":448},[79,69516,3400],{"class":228},[79,69518,69519],{"class":81,"line":885},[79,69520,4272],{"class":228},[79,69522,69523],{"class":81,"line":891},[79,69524,542],{"emptyLinePlaceholder":541},[79,69526,69527,69529,69531,69533,69535],{"class":81,"line":896},[79,69528,65733],{"class":85},[79,69530,63281],{"class":232},[79,69532,57064],{"class":232},[79,69534,3505],{"class":232},[79,69536,17604],{"class":228},[79,69538,69539,69541,69543,69545],{"class":81,"line":907},[79,69540,65958],{"class":96},[79,69542,53431],{"class":228},[79,69544,56726],{"class":96},[79,69546,3400],{"class":228},[79,69548,69549,69551,69553,69555,69557,69559,69561],{"class":81,"line":912},[79,69550,64220],{"class":96},[79,69552,53431],{"class":228},[79,69554,2331],{"class":96},[79,69556,53486],{"class":448},[79,69558,53515],{"class":96},[79,69560,65979],{"class":96},[79,69562,3400],{"class":228},[79,69564,69565,69567,69569,69571],{"class":81,"line":935},[79,69566,59405],{"class":96},[79,69568,53431],{"class":228},[79,69570,64357],{"class":96},[79,69572,3400],{"class":228},[79,69574,69575],{"class":81,"line":946},[79,69576,4272],{"class":228},[79,69578,69579],{"class":81,"line":960},[79,69580,542],{"emptyLinePlaceholder":541},[79,69582,69583,69585,69587,69589,69591,69593],{"class":81,"line":975},[79,69584,65733],{"class":85},[79,69586,63281],{"class":232},[79,69588,57064],{"class":232},[79,69590,3505],{"class":232},[79,69592,66012],{"class":85},[79,69594,17604],{"class":228},[79,69596,69597,69599,69601,69603],{"class":81,"line":980},[79,69598,63780],{"class":96},[79,69600,53431],{"class":228},[79,69602,66023],{"class":96},[79,69604,3400],{"class":228},[79,69606,69607,69609,69611,69613],{"class":81,"line":1006},[79,69608,59405],{"class":96},[79,69610,53431],{"class":228},[79,69612,66023],{"class":96},[79,69614,3400],{"class":228},[79,69616,69617],{"class":81,"line":1027},[79,69618,4272],{"class":228},[79,69620,69621],{"class":81,"line":1032},[79,69622,542],{"emptyLinePlaceholder":541},[79,69624,69625,69627],{"class":81,"line":1047},[79,69626,66048],{"class":85},[79,69628,17604],{"class":228},[79,69630,69631,69633,69635,69637,69639,69641],{"class":81,"line":1053},[79,69632,56684],{"class":96},[79,69634,53431],{"class":228},[79,69636,759],{"class":96},[79,69638,66061],{"class":96},[79,69640,53486],{"class":448},[79,69642,3400],{"class":228},[79,69644,69645],{"class":81,"line":1058},[79,69646,4272],{"class":228},[79,69648,69649],{"class":81,"line":1069},[79,69650,542],{"emptyLinePlaceholder":541},[79,69652,69653,69655,69657],{"class":81,"line":1081},[79,69654,66048],{"class":85},[79,69656,64162],{"class":85},[79,69658,17604],{"class":228},[79,69660,69661,69663,69665,69667],{"class":81,"line":1086},[79,69662,56998],{"class":96},[79,69664,53431],{"class":228},[79,69666,56726],{"class":96},[79,69668,3400],{"class":228},[79,69670,69671],{"class":81,"line":1108},[79,69672,4272],{"class":228},[79,69674,69675],{"class":81,"line":1153},[79,69676,542],{"emptyLinePlaceholder":541},[79,69678,69679,69681,69684],{"class":81,"line":1158},[79,69680,66048],{"class":85},[79,69682,69683],{"class":85}," .active",[79,69685,17604],{"class":228},[79,69687,69688,69690,69692,69694],{"class":81,"line":1180},[79,69689,56998],{"class":96},[79,69691,53431],{"class":228},[79,69693,62858],{"class":96},[79,69695,3400],{"class":228},[79,69697,69698],{"class":81,"line":1197},[79,69699,4272],{"class":228},[79,69701,69702,69704,69706],{"class":81,"line":1202},[79,69703,54410],{"class":228},[79,69705,2159],{"class":232},[79,69707,53301],{"class":228},[79,69709,69710,69712,69714],{"class":81,"line":1207},[79,69711,53779],{"class":228},[79,69713,53328],{"class":232},[79,69715,53301],{"class":228},[79,69717,69718],{"class":81,"line":1223},[79,69719,542],{"emptyLinePlaceholder":541},[79,69721,69722,69724,69726],{"class":81,"line":18722},[79,69723,229],{"class":228},[79,69725,53794],{"class":232},[79,69727,53301],{"class":228},[79,69729,69730,69732,69734,69736,69738,69740],{"class":81,"line":18728},[79,69731,54138],{"class":228},[79,69733,53605],{"class":232},[79,69735,55477],{"class":85},[79,69737,239],{"class":228},[79,69739,66163],{"class":89},[79,69741,53301],{"class":228},[79,69743,69744,69746,69748,69750,69752,69754],{"class":81,"line":18739},[79,69745,53335],{"class":228},[79,69747,53605],{"class":232},[79,69749,55477],{"class":85},[79,69751,239],{"class":228},[79,69753,66178],{"class":89},[79,69755,53301],{"class":228},[79,69757,69758,69760,69762,69764,69766],{"class":81,"line":18762},[79,69759,57223],{"class":228},[79,69761,339],{"class":232},[79,69763,66189],{"class":228},[79,69765,339],{"class":232},[79,69767,53301],{"class":228},[79,69769,69770,69772,69774],{"class":81,"line":18784},[79,69771,57223],{"class":228},[79,69773,3246],{"class":232},[79,69775,53301],{"class":228},[79,69777,69778,69780,69782,69784,69786,69788,69790,69792,69794,69796,69798,69800,69802,69805,69807,69809,69811,69813],{"class":81,"line":18789},[79,69779,57291],{"class":228},[79,69781,29],{"class":232},[79,69783,63041],{"class":228},[79,69785,2482],{"class":232},[79,69787,55477],{"class":85},[79,69789,239],{"class":228},[79,69791,61695],{"class":89},[79,69793,63046],{"class":85},[79,69795,239],{"class":228},[79,69797,66224],{"class":89},[79,69799,55941],{"class":85},[79,69801,239],{"class":228},[79,69803,69804],{"class":89},"\"0\"",[79,69806,66227],{"class":228},[79,69808,2482],{"class":232},[79,69810,57303],{"class":228},[79,69812,29],{"class":232},[79,69814,53301],{"class":228},[79,69816,69817,69819,69821,69823,69825,69827,69829,69831,69833,69835,69837,69839,69841,69843,69845],{"class":81,"line":18795},[79,69818,57291],{"class":228},[79,69820,29],{"class":232},[79,69822,63041],{"class":228},[79,69824,2482],{"class":232},[79,69826,63046],{"class":85},[79,69828,239],{"class":228},[79,69830,66224],{"class":89},[79,69832,55941],{"class":85},[79,69834,239],{"class":228},[79,69836,5752],{"class":89},[79,69838,66254],{"class":228},[79,69840,2482],{"class":232},[79,69842,57303],{"class":228},[79,69844,29],{"class":232},[79,69846,53301],{"class":228},[79,69848,69849,69851,69853,69855,69857,69859,69861,69863,69865,69867,69869,69871,69873,69875,69877],{"class":81,"line":18809},[79,69850,57291],{"class":228},[79,69852,29],{"class":232},[79,69854,63041],{"class":228},[79,69856,2482],{"class":232},[79,69858,63046],{"class":85},[79,69860,239],{"class":228},[79,69862,66224],{"class":89},[79,69864,55941],{"class":85},[79,69866,239],{"class":228},[79,69868,5775],{"class":89},[79,69870,66281],{"class":228},[79,69872,2482],{"class":232},[79,69874,57303],{"class":228},[79,69876,29],{"class":232},[79,69878,53301],{"class":228},[79,69880,69881,69883,69885,69887,69889,69891,69893,69895,69897,69899,69901,69903,69905,69907,69909],{"class":81,"line":18822},[79,69882,57291],{"class":228},[79,69884,29],{"class":232},[79,69886,63041],{"class":228},[79,69888,2482],{"class":232},[79,69890,63046],{"class":85},[79,69892,239],{"class":228},[79,69894,66224],{"class":89},[79,69896,55941],{"class":85},[79,69898,239],{"class":228},[79,69900,5788],{"class":89},[79,69902,66308],{"class":228},[79,69904,2482],{"class":232},[79,69906,57303],{"class":228},[79,69908,29],{"class":232},[79,69910,53301],{"class":228},[79,69912,69913,69915,69917,69919,69921,69923,69925,69927,69929,69931,69933,69935,69937,69939,69941],{"class":81,"line":18827},[79,69914,57291],{"class":228},[79,69916,29],{"class":232},[79,69918,63041],{"class":228},[79,69920,2482],{"class":232},[79,69922,63046],{"class":85},[79,69924,239],{"class":228},[79,69926,66224],{"class":89},[79,69928,55941],{"class":85},[79,69930,239],{"class":228},[79,69932,5801],{"class":89},[79,69934,66335],{"class":228},[79,69936,2482],{"class":232},[79,69938,57303],{"class":228},[79,69940,29],{"class":232},[79,69942,53301],{"class":228},[79,69944,69945,69947,69949],{"class":81,"line":18841},[79,69946,57396],{"class":228},[79,69948,3246],{"class":232},[79,69950,53301],{"class":228},[79,69952,69953,69955,69957],{"class":81,"line":18846},[79,69954,53770],{"class":228},[79,69956,53605],{"class":232},[79,69958,53301],{"class":228},[79,69960,69961,69963,69965,69967,69969,69971],{"class":81,"line":18852},[79,69962,53335],{"class":228},[79,69964,53605],{"class":232},[79,69966,55477],{"class":85},[79,69968,239],{"class":228},[79,69970,66372],{"class":89},[79,69972,53301],{"class":228},[79,69974,69975,69977,69979,69981,69983,69985,69987,69989,69991,69993,69995,69997,69999,70001,70003,70005],{"class":81,"line":18857},[79,69976,57223],{"class":228},[79,69978,53605],{"class":232},[79,69980,55477],{"class":85},[79,69982,239],{"class":228},[79,69984,66387],{"class":89},[79,69986,63041],{"class":228},[79,69988,3569],{"class":232},[79,69990,57228],{"class":85},[79,69992,239],{"class":228},[79,69994,66398],{"class":89},[79,69996,57236],{"class":85},[79,69998,239],{"class":228},[79,70000,9717],{"class":89},[79,70002,66407],{"class":228},[79,70004,53605],{"class":232},[79,70006,53301],{"class":228},[79,70008,70009,70011,70013,70015,70017,70019,70021,70023,70025,70027,70029,70031,70033,70035,70037,70039],{"class":81,"line":18871},[79,70010,57223],{"class":228},[79,70012,53605],{"class":232},[79,70014,55477],{"class":85},[79,70016,239],{"class":228},[79,70018,64611],{"class":89},[79,70020,63041],{"class":228},[79,70022,3569],{"class":232},[79,70024,57228],{"class":85},[79,70026,239],{"class":228},[79,70028,66434],{"class":89},[79,70030,57236],{"class":85},[79,70032,239],{"class":228},[79,70034,9717],{"class":89},[79,70036,66407],{"class":228},[79,70038,53605],{"class":232},[79,70040,53301],{"class":228},[79,70042,70043,70045,70047,70049,70051,70053,70055,70057,70059,70061,70063,70065,70067,70069,70071,70073],{"class":81,"line":18876},[79,70044,57223],{"class":228},[79,70046,53605],{"class":232},[79,70048,55477],{"class":85},[79,70050,239],{"class":228},[79,70052,64611],{"class":89},[79,70054,63041],{"class":228},[79,70056,3569],{"class":232},[79,70058,57228],{"class":85},[79,70060,239],{"class":228},[79,70062,66469],{"class":89},[79,70064,57236],{"class":85},[79,70066,239],{"class":228},[79,70068,9717],{"class":89},[79,70070,66407],{"class":228},[79,70072,53605],{"class":232},[79,70074,53301],{"class":228},[79,70076,70077,70079,70081,70083,70085,70087,70089,70091,70093,70095,70097,70099,70101,70103,70105,70107],{"class":81,"line":18881},[79,70078,57223],{"class":228},[79,70080,53605],{"class":232},[79,70082,55477],{"class":85},[79,70084,239],{"class":228},[79,70086,64611],{"class":89},[79,70088,63041],{"class":228},[79,70090,3569],{"class":232},[79,70092,57228],{"class":85},[79,70094,239],{"class":228},[79,70096,66504],{"class":89},[79,70098,57236],{"class":85},[79,70100,239],{"class":228},[79,70102,9717],{"class":89},[79,70104,66407],{"class":228},[79,70106,53605],{"class":232},[79,70108,53301],{"class":228},[79,70110,70111,70113,70115,70117,70119,70121,70123,70125,70127,70129,70131,70133,70135,70137,70139,70141],{"class":81,"line":18895},[79,70112,57223],{"class":228},[79,70114,53605],{"class":232},[79,70116,55477],{"class":85},[79,70118,239],{"class":228},[79,70120,64611],{"class":89},[79,70122,63041],{"class":228},[79,70124,3569],{"class":232},[79,70126,57228],{"class":85},[79,70128,239],{"class":228},[79,70130,66539],{"class":89},[79,70132,57236],{"class":85},[79,70134,239],{"class":228},[79,70136,9717],{"class":89},[79,70138,66407],{"class":228},[79,70140,53605],{"class":232},[79,70142,53301],{"class":228},[79,70144,70145,70147,70149],{"class":81,"line":18907},[79,70146,53770],{"class":228},[79,70148,53605],{"class":232},[79,70150,53301],{"class":228},[79,70152,70153,70155,70157],{"class":81,"line":18912},[79,70154,54410],{"class":228},[79,70156,53605],{"class":232},[79,70158,53301],{"class":228},[79,70160,70161,70163,70165],{"class":81,"line":18925},[79,70162,54138],{"class":228},[79,70164,53807],{"class":232},[79,70166,53301],{"class":228},[79,70168,70169],{"class":81,"line":18930},[79,70170,70171],{"class":2313},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[79,70173,70174],{"class":81,"line":18935},[79,70175,70176],{"class":2313},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[79,70178,70179,70181,70183,70185,70187,70189,70191,70194],{"class":81,"line":18940},[79,70180,13256],{"class":448},[79,70182,63281],{"class":96},[79,70184,556],{"class":448},[79,70186,56385],{"class":228},[79,70188,56388],{"class":85},[79,70190,455],{"class":228},[79,70192,70193],{"class":89},"'.tab-nav ul'",[79,70195,850],{"class":228},[79,70197,70198],{"class":81,"line":18953},[79,70199,70200],{"class":2313},"    \u002F\u002F 2.添加事件\n",[79,70202,70203,70205,70207,70209,70211,70213,70215,70217,70219],{"class":81,"line":18958},[79,70204,68942],{"class":228},[79,70206,59802],{"class":85},[79,70208,455],{"class":228},[79,70210,59807],{"class":89},[79,70212,1020],{"class":228},[79,70214,56438],{"class":448},[79,70216,3757],{"class":228},[79,70218,2328],{"class":7284},[79,70220,14476],{"class":228},[79,70222,70223,70225,70227],{"class":81,"line":34631},[79,70224,60233],{"class":228},[79,70226,68998],{"class":85},[79,70228,69001],{"class":228},[79,70230,70231],{"class":81,"line":34637},[79,70232,70233],{"class":2313},"      \u002F\u002Fe.targer是我们点击的对象\n",[79,70235,70236,70238,70240,70242,70245],{"class":81,"line":34643},[79,70237,56469],{"class":448},[79,70239,69022],{"class":228},[79,70241,56475],{"class":448},[79,70243,70244],{"class":89}," 'A'",[79,70246,14476],{"class":228},[79,70248,70249,70251,70253,70255,70258,70260,70262,70264,70266],{"class":81,"line":34649},[79,70250,53919],{"class":228},[79,70252,56388],{"class":85},[79,70254,455],{"class":228},[79,70256,70257],{"class":89},"'.active'",[79,70259,58992],{"class":228},[79,70261,58995],{"class":85},[79,70263,455],{"class":228},[79,70265,66702],{"class":89},[79,70267,850],{"class":228},[79,70269,70270,70273,70275,70277,70279],{"class":81,"line":34655},[79,70271,70272],{"class":228},"        e.target.classList.",[79,70274,7402],{"class":85},[79,70276,455],{"class":228},[79,70278,66702],{"class":89},[79,70280,850],{"class":228},[79,70282,70283],{"class":81,"line":34666},[79,70284,542],{"emptyLinePlaceholder":541},[79,70286,70287],{"class":81,"line":34672},[79,70288,70289],{"class":2313},"        \u002F\u002F 下面大盒子模块\n",[79,70291,70292],{"class":81,"line":34692},[79,70293,70294],{"class":2313},"        \u002F\u002F console.log(e.target.dataset.id)\n",[79,70296,70297,70299,70301,70303,70305],{"class":81,"line":34698},[79,70298,63259],{"class":448},[79,70300,5107],{"class":96},[79,70302,556],{"class":448},[79,70304,47561],{"class":448},[79,70306,70307],{"class":228},"e.target.dataset.id\n",[79,70309,70310,70312,70314,70316,70318,70320,70322,70324,70326],{"class":81,"line":34709},[79,70311,53919],{"class":228},[79,70313,56388],{"class":85},[79,70315,455],{"class":228},[79,70317,66750],{"class":89},[79,70319,58992],{"class":228},[79,70321,58995],{"class":85},[79,70323,455],{"class":228},[79,70325,66702],{"class":89},[79,70327,850],{"class":228},[79,70329,70330,70332,70334,70336,70338,70340,70342,70344,70346,70348,70350,70352,70354],{"class":81,"line":34715},[79,70331,53919],{"class":228},[79,70333,56388],{"class":85},[79,70335,455],{"class":228},[79,70337,66776],{"class":89},[79,70339,2684],{"class":228},[79,70341,47561],{"class":448},[79,70343,27137],{"class":96},[79,70345,59021],{"class":89},[79,70347,58992],{"class":228},[79,70349,7402],{"class":85},[79,70351,455],{"class":228},[79,70353,66702],{"class":89},[79,70355,850],{"class":228},[79,70357,70358],{"class":81,"line":34721},[79,70359,542],{"emptyLinePlaceholder":541},[79,70361,70362],{"class":81,"line":34727},[79,70363,54391],{"class":228},[79,70365,70366],{"class":81,"line":34733},[79,70367,35458],{"class":228},[79,70369,70370,70372,70374],{"class":81,"line":34739},[79,70371,54410],{"class":228},[79,70373,53807],{"class":232},[79,70375,53301],{"class":228},[79,70377,70378,70380,70382],{"class":81,"line":34745},[79,70379,53779],{"class":228},[79,70381,53794],{"class":232},[79,70383,53301],{"class":228},[79,70385,70386],{"class":81,"line":34751},[79,70387,542],{"emptyLinePlaceholder":541},[79,70389,70390,70392,70394],{"class":81,"line":34771},[79,70391,53779],{"class":228},[79,70393,52630],{"class":232},[79,70395,53301],{"class":228},[339,70397,70399],{"id":70398},"_333-页面加载事件","3.3.3 页面加载事件",[26,70401,70402],{},[29,70403,70404],{},"load",[19,70406,70407],{},[3569,70408],{"alt":57,"src":70409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,70411,70412],{},"window代表整个窗口，比document还要大",[19,70414,70415],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,70417,70418],{},"img.addEventListener('load', function () {",[19,70420,70421],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,70423,54457],{},[26,70425,70426],{"start":167},[29,70427,70428],{},"DOMContentLoaded",[19,70430,70431],{},[3569,70432],{"alt":57,"src":70433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,70435,70436],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[339,70438,70440],{"id":70439},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,70442,70443],{},[3569,70444],{"alt":57,"src":70445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,70447,70448],{},[3569,70449],{"alt":57,"src":70450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,70452,70453],{},[3569,70454],{"alt":57,"src":70455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,70457,70458],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,70460,70461],{},"获得的是数字型数据，不带单位",[19,70463,70464],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,70466,70467],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,70469,70470],{},"它是通过document.documentElement来获取",[19,70472,70473],{},[3569,70474],{"alt":57,"src":70475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,70477,70478],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[339,70480,70482],{"id":70481},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,70484,70485],{},[3569,70486],{"alt":57,"src":70487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,70489,70490],{},[3569,70491],{"alt":57,"src":70492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[339,70494,70496],{"id":70495},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,70498,70499],{},[3569,70500],{"alt":57,"src":70501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,70503,70504],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,70506,70507],{},[3569,70508],{"alt":57,"src":70509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,70511,70512],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,70514,70515],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,70517,70518],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,70520,70521],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,70523,70524],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,70526,70527],{},[3569,70528],{"alt":57,"src":70529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,70531,70532],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,70534,70535],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,70537,70538],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,70540,70541],{},"e.pageX-box.getBoundingClientRect()",[339,70543,70545],{"id":70544},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,70547,70548],{},[3569,70549],{"alt":57,"src":70550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,70552,70553],{},"这个是相对于视口来说的，它是个方法，不是属性值",[339,70555,70557],{"id":70556},"_338-总结","3.3.8 总结",[19,70559,70560],{},[3569,70561],{"alt":57,"src":70562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,70564,70565],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,70567,70568],{},"修改盒子的宽高只能通过width和height来实现",[339,70570,70572],{"id":70571},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[51,70574,70576],{"className":52628,"code":70575,"language":52630,"meta":57,"style":57},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[59,70577,70578,70583,70588,70593,70598],{"__ignoreMap":57},[79,70579,70580],{"class":81,"line":82},[79,70581,70582],{"class":228},"\u002F* 页面滑动 *\u002F\n",[79,70584,70585],{"class":81,"line":167},[79,70586,70587],{"class":228},"html {\n",[79,70589,70590],{"class":81,"line":178},[79,70591,70592],{"class":228},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[79,70594,70595],{"class":81,"line":545},[79,70596,70597],{"class":228},"  scroll-behavior: smooth;\n",[79,70599,70600],{"class":81,"line":550},[79,70601,3671],{"class":228},[19,70603,70604],{},"默认是auto",[339,70606,70608],{"id":70607},"_3310-日期对象","3.3.10 日期对象",[24023,70610,70612],{"id":70611},"_33101-实例化","3.3.10.1 实例化",[19,70614,70615],{},[3569,70616],{"alt":57,"src":70617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[24023,70619,70621],{"id":70620},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,70623,70624],{},[3569,70625],{"alt":57,"src":70626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,70628,70629],{},"月份+1",[19,70631,70632],{},"老外认为第一天为0，星期天",[19,70634,70635],{},"方法使用的时候必须要跟括号",[19,70637,70638],{},"快速获得日期",[19,70640,70641],{},"\u002F\u002F 得到年月日",[19,70643,70644],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,70646,70647],{},"\u002F\u002F 得到当地日期",[19,70649,70650],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,70652,70653],{},"\u002F\u002F 得到当地时间",[19,70655,70656],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,70658,70659],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,70661,70662],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[53807,70664,70665],{},"\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,70667,70668],{},"学会去封装函数！",[24023,70670,70672],{"id":70671},"_33103-时间戳","3.3.10.3 时间戳",[19,70674,70675],{},[3569,70676],{"alt":57,"src":70677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,70679,70680],{},[3569,70681],{"alt":57,"src":70682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,70684,70685],{},"三种方法记住一个就可以",[339,70687,70689],{"id":70688},"_3311-节点操作","3.3.11 节点操作",[24023,70691,70693],{"id":70692},"_33111-dom节点","3.3.11.1 DOM节点",[19,70695,70696],{},[3569,70697],{"alt":57,"src":70698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,70700,70701],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[24023,70703,70705],{"id":70704},"_33112-查找节点","3.3.11.2 查找节点",[19,70707,70708],{},"前边的document.querySelector()是获取的元素",[19,70710,70711],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,70713,70714],{},[3569,70715],{"alt":57,"src":70716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[26,70718,70719],{},[29,70720,70721],{},"父节点",[19,70723,70724],{},[3569,70725],{"alt":57,"src":70726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[26,70728,70729],{"start":167},[29,70730,70731],{},"子节点",[19,70733,70734],{},[3569,70735],{"alt":57,"src":70736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,70738,70739],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,70741,70742],{},"children获得的是伪数组，是亲儿子",[26,70744,70745],{"start":178},[29,70746,70747],{},"兄弟节点",[19,70749,70750],{},[3569,70751],{"alt":57,"src":70752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[24023,70754,70756],{"id":70755},"_33113-增加节点","3.3.11.3 增加节点",[19,70758,70759],{},[3569,70760],{"alt":57,"src":70761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,70763,70764],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,70766,70767],{},[3569,70768],{"alt":57,"src":70769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,70771,70772],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,70774,70775],{},"下面是写法的部分展示，就按照下边的格式来写",[19,70777,70778],{},"例：",[53807,70780,70781],{},"\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,70783,70784],{},[3569,70785],{"alt":57,"src":70786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,70788,70789],{},"false只克隆标签，里边的内容不会克隆过来",[51,70791,70793],{"className":52628,"code":70792,"language":52630,"meta":57,"style":57},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[59,70794,70795],{"__ignoreMap":57},[79,70796,70797],{"class":81,"line":82},[79,70798,70792],{"class":228},[24023,70800,70802],{"id":70801},"_33114-删除节点","3.3.11.4 删除节点",[19,70804,70805],{},[3569,70806],{"alt":57,"src":70807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,70809,70810],{},"父亲删儿子",[19,70812,70813],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[339,70815,70817],{"id":70816},"_3312-m端事件","3.3.12 M端事件",[19,70819,70820],{},"M端就是移动端",[19,70822,70823],{},[3569,70824],{"alt":57,"src":70825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[339,70827,70829],{"id":70828},"_3313-插件","3.3.13 插件",[19,70831,70832],{},"要熟悉官网！！！",[19,70834,70835],{},[2482,70836,70837],{"href":70837,"rel":70838},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[25885],[19,70840,70841],{},[2482,70842,70843],{"href":70843,"rel":70844},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[25885],[339,70846,70848],{"id":70847},"_3314-学生信息表","3.3.14 学生信息表",[26,70850,70851,70854,70857,70860,70863,70866,70869,70872],{},[29,70852,70853],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[29,70855,70856],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[29,70858,70859],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[29,70861,70862],{},"用好表单元素自带的属性，value,name等",[29,70864,70865],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[29,70867,70868],{},"不要忘记事件对象",[29,70870,70871],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[29,70873,70874],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,70876,70877],{},"结构：",[51,70879,70881],{"className":52628,"code":70880,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\" \u002F>\n  \u003Ctitle>学生信息管理\u003C\u002Ftitle>\n  \u003Clink rel=\"stylesheet\" href=\"css\u002Findex.css\" \u002F>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ch1>新增学员\u003C\u002Fh1>\n  \u003Cform class=\"info\" autocomplete=\"off\">\n    姓名：\u003Cinput type=\"text\" class=\"uname\" name=\"uname\" \u002F>\n    年龄：\u003Cinput type=\"text\" class=\"age\" name=\"age\" \u002F>\n    性别:\n    \u003Cselect name=\"gender\" class=\"gender\">\n      \u003Coption value=\"男\">男\u003C\u002Foption>\n      \u003Coption value=\"女\">女\u003C\u002Foption>\n    \u003C\u002Fselect>\n    薪资：\u003Cinput type=\"text\" class=\"salary\" name=\"salary\" \u002F>\n    就业城市：\u003Cselect name=\"city\" class=\"city\">\n      \u003Coption value=\"北京\">北京\u003C\u002Foption>\n      \u003Coption value=\"上海\">上海\u003C\u002Foption>\n      \u003Coption value=\"广州\">广州\u003C\u002Foption>\n      \u003Coption value=\"深圳\">深圳\u003C\u002Foption>\n      \u003Coption value=\"曹县\">曹县\u003C\u002Foption>\n    \u003C\u002Fselect>\n    \u003Cbutton class=\"add\">录入\u003C\u002Fbutton>\n  \u003C\u002Fform>\n\n  \u003Ch1>就业榜\u003C\u002Fh1>\n  \u003Ctable>\n    \u003Cthead>\n      \u003Ctr>\n        \u003Cth>序号\u003C\u002Fth>\n        \u003Cth>姓名\u003C\u002Fth>\n        \u003Cth>年龄\u003C\u002Fth>\n        \u003Cth>性别\u003C\u002Fth>\n        \u003Cth>薪资\u003C\u002Fth>\n        \u003Cth>就业城市\u003C\u002Fth>\n        \u003Cth>操作\u003C\u002Fth>\n      \u003C\u002Ftr>\n    \u003C\u002Fthead>\n    \u003Ctbody>\n      \u003C!-- \n        \u003Ctr>\n          \u003Ctd>1001\u003C\u002Ftd>\n          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n          \u003Ctd>19\u003C\u002Ftd>\n          \u003Ctd>男\u003C\u002Ftd>\n          \u003Ctd>15000\u003C\u002Ftd>\n          \u003Ctd>上海\u003C\u002Ftd>\n          \u003Ctd>\n            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n          \u003C\u002Ftd>\n        \u003C\u002Ftr> \n        -->\n    \u003C\u002Ftbody>\n  \u003C\u002Ftable>\n  \u003Cscript>\n    \u002F\u002F 获取元素\n    const uname = document.querySelector('.uname')\n    const age = document.querySelector('.age')\n    const gender = document.querySelector('.gender')\n    const salary = document.querySelector('.salary')\n    const city = document.querySelector('.city')\n    const tbody = document.querySelector('tbody')\n\n    \u002F\u002F 获取所有带有name属性的元素\n    const items = document.querySelectorAll('[name]')\n    \u002F\u002F 声明一个空的数组\n    const arr = []\n    \u002F\u002F 1.录入模块\n    \u002F\u002F 1.1这是一个表单提交事件\n    const info = document.querySelector('.info')\n    info.addEventListener('submit', function (e) {\n      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n      e.preventDefault()\n      \u002F\u002F console.log(11)\n\n      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n      \u002F\u002F 先遍历循环\n      for (let i = 0; i \u003C items.length; i++) {\n        if (items[i].value === '') {\n          return alert('输入内容不能为空')\n        }\n      }\n\n      \u002F\u002F 创建新的对象\n      const obj = {\n        stuID: arr.length + 1,\n        uname: uname.value,\n        age: age.value,\n        gender: gender.value,\n        salary: salary.value,\n        city: city.value\n      }\n      \u002F\u002F console.log(obj);\n      \u002F\u002F 追加到数组里面\n      arr.push(obj)\n      \u002F\u002F console.log(arr);\n      \u002F\u002F 清空表单  reset重置表单\n      this.reset()\n      \u002F\u002F 调用渲染函数\n      render()\n    })\n    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n    function render() {\n      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n      tbody.innerHTML = ''\n      \u002F\u002F 遍历数组\n      for (let i = 0; i \u003C arr.length; i++) {\n        const tr = document.createElement('tr')\n        tr.innerHTML = `\n        \u003Ctd>${arr[i].stuID}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].uname}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].age}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].gender}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].salary}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].city}\u003C\u002Ftd>\n          \u003Ctd>\n            \u003Ca href=\"javascript:\" data-id=${i}>删除\u003C\u002Fa>\n          \u003C\u002Ftd> \n          `\n        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n        tbody.appendChild(tr)\n      }\n    }\n\n    \u002F\u002F 3.删除委托\n    \u002F\u002F 3.1 事件委托 tbody\n    tbody.addEventListener('click', function (e) {\n      if (e.target.tagName === 'A') {\n        \u002F\u002F 得到当前元素的自定义属性 data-id\n        \u002F\u002F console.log(e.target.dataset.id);\n        \u002F\u002F 删除arr 数组里面对应的数据\n        arr.splice(e.target.dataset.id, 1)\n        \u002F\u002F 重新渲染一次\n        render()\n      }\n    })\n  \u003C\u002Fscript>\n\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,70882,70883,70893,70907,70911,70919,70933,70953,70974,70987,71011,71019,71023,71031,71044,71065,71093,71121,71126,71148,71168,71187,71195,71223,71245,71265,71285,71305,71325,71345,71353,71373,71381,71385,71398,71406,71414,71422,71435,71448,71461,71474,71487,71500,71513,71521,71529,71537,71542,71547,71552,71557,71562,71567,71572,71577,71582,71587,71592,71597,71602,71610,71618,71626,71630,71650,71669,71689,71709,71729,71749,71753,71758,71778,71783,71793,71798,71803,71823,71845,71850,71860,71864,71868,71873,71878,71907,71921,71936,71940,71944,71948,71953,71964,71977,71982,71987,71992,71997,72002,72006,72011,72016,72025,72030,72035,72047,72052,72059,72063,72068,72078,72083,72093,72098,72126,72147,72157,72177,72195,72212,72229,72246,72263,72267,72277,72282,72287,72292,72303,72307,72311,72315,72320,72325,72346,72358,72363,72368,72373,72387,72392,72399,72403,72407,72415,72419,72427,72431],{"__ignoreMap":57},[79,70884,70885,70887,70889,70891],{"class":81,"line":82},[79,70886,53292],{"class":228},[79,70888,53295],{"class":232},[79,70890,53298],{"class":85},[79,70892,53301],{"class":228},[79,70894,70895,70897,70899,70901,70903,70905],{"class":81,"line":167},[79,70896,229],{"class":228},[79,70898,52630],{"class":232},[79,70900,53310],{"class":85},[79,70902,239],{"class":228},[79,70904,53315],{"class":89},[79,70906,53301],{"class":228},[79,70908,70909],{"class":81,"line":178},[79,70910,542],{"emptyLinePlaceholder":541},[79,70912,70913,70915,70917],{"class":81,"line":545},[79,70914,229],{"class":228},[79,70916,53328],{"class":232},[79,70918,53301],{"class":228},[79,70920,70921,70923,70925,70927,70929,70931],{"class":81,"line":550},[79,70922,54138],{"class":228},[79,70924,53338],{"class":232},[79,70926,53341],{"class":85},[79,70928,239],{"class":228},[79,70930,53346],{"class":89},[79,70932,61116],{"class":228},[79,70934,70935,70937,70939,70941,70943,70945,70947,70949,70951],{"class":81,"line":562},[79,70936,54138],{"class":228},[79,70938,53338],{"class":232},[79,70940,236],{"class":85},[79,70942,239],{"class":228},[79,70944,53385],{"class":89},[79,70946,53365],{"class":85},[79,70948,239],{"class":228},[79,70950,53392],{"class":89},[79,70952,61116],{"class":228},[79,70954,70955,70957,70959,70961,70963,70965,70967,70969,70972],{"class":81,"line":568},[79,70956,54138],{"class":228},[79,70958,53338],{"class":232},[79,70960,53357],{"class":85},[79,70962,239],{"class":228},[79,70964,53362],{"class":89},[79,70966,53365],{"class":85},[79,70968,239],{"class":228},[79,70970,70971],{"class":89},"\"ie=edge\"",[79,70973,61116],{"class":228},[79,70975,70976,70978,70980,70983,70985],{"class":81,"line":574},[79,70977,54138],{"class":228},[79,70979,53401],{"class":232},[79,70981,70982],{"class":228},">学生信息管理\u003C\u002F",[79,70984,53401],{"class":232},[79,70986,53301],{"class":228},[79,70988,70989,70991,70994,70997,70999,71002,71004,71006,71009],{"class":81,"line":579},[79,70990,54138],{"class":228},[79,70992,70993],{"class":232},"link",[79,70995,70996],{"class":85}," rel",[79,70998,239],{"class":228},[79,71000,71001],{"class":89},"\"stylesheet\"",[79,71003,63046],{"class":85},[79,71005,239],{"class":228},[79,71007,71008],{"class":89},"\"css\u002Findex.css\"",[79,71010,61116],{"class":228},[79,71012,71013,71015,71017],{"class":81,"line":585},[79,71014,53779],{"class":228},[79,71016,53328],{"class":232},[79,71018,53301],{"class":228},[79,71020,71021],{"class":81,"line":591},[79,71022,542],{"emptyLinePlaceholder":541},[79,71024,71025,71027,71029],{"class":81,"line":596},[79,71026,229],{"class":228},[79,71028,53794],{"class":232},[79,71030,53301],{"class":228},[79,71032,71033,71035,71037,71040,71042],{"class":81,"line":602},[79,71034,54138],{"class":228},[79,71036,10],{"class":232},[79,71038,71039],{"class":228},">新增学员\u003C\u002F",[79,71041,10],{"class":232},[79,71043,53301],{"class":228},[79,71045,71046,71048,71050,71052,71054,71056,71059,71061,71063],{"class":81,"line":608},[79,71047,54138],{"class":228},[79,71049,68613],{"class":232},[79,71051,55477],{"class":85},[79,71053,239],{"class":228},[79,71055,64652],{"class":89},[79,71057,71058],{"class":85}," autocomplete",[79,71060,239],{"class":228},[79,71062,33777],{"class":89},[79,71064,53301],{"class":228},[79,71066,71067,71070,71072,71074,71076,71078,71080,71082,71085,71087,71089,71091],{"class":81,"line":614},[79,71068,71069],{"class":228},"    姓名：\u003C",[79,71071,55812],{"class":232},[79,71073,245],{"class":85},[79,71075,239],{"class":228},[79,71077,64687],{"class":89},[79,71079,55477],{"class":85},[79,71081,239],{"class":228},[79,71083,71084],{"class":89},"\"uname\"",[79,71086,236],{"class":85},[79,71088,239],{"class":228},[79,71090,71084],{"class":89},[79,71092,61116],{"class":228},[79,71094,71095,71098,71100,71102,71104,71106,71108,71110,71113,71115,71117,71119],{"class":81,"line":619},[79,71096,71097],{"class":228},"    年龄：\u003C",[79,71099,55812],{"class":232},[79,71101,245],{"class":85},[79,71103,239],{"class":228},[79,71105,64687],{"class":89},[79,71107,55477],{"class":85},[79,71109,239],{"class":228},[79,71111,71112],{"class":89},"\"age\"",[79,71114,236],{"class":85},[79,71116,239],{"class":228},[79,71118,71112],{"class":89},[79,71120,61116],{"class":228},[79,71122,71123],{"class":81,"line":625},[79,71124,71125],{"class":228},"    性别:\n",[79,71127,71128,71130,71133,71135,71137,71140,71142,71144,71146],{"class":81,"line":631},[79,71129,53335],{"class":228},[79,71131,71132],{"class":232},"select",[79,71134,236],{"class":85},[79,71136,239],{"class":228},[79,71138,71139],{"class":89},"\"gender\"",[79,71141,55477],{"class":85},[79,71143,239],{"class":228},[79,71145,71139],{"class":89},[79,71147,53301],{"class":228},[79,71149,71150,71152,71155,71157,71159,71161,71164,71166],{"class":81,"line":637},[79,71151,57223],{"class":228},[79,71153,71154],{"class":232},"option",[79,71156,68639],{"class":85},[79,71158,239],{"class":228},[79,71160,11996],{"class":89},[79,71162,71163],{"class":228},">男\u003C\u002F",[79,71165,71154],{"class":232},[79,71167,53301],{"class":228},[79,71169,71170,71172,71174,71176,71178,71180,71183,71185],{"class":81,"line":643},[79,71171,57223],{"class":228},[79,71173,71154],{"class":232},[79,71175,68639],{"class":85},[79,71177,239],{"class":228},[79,71179,12065],{"class":89},[79,71181,71182],{"class":228},">女\u003C\u002F",[79,71184,71154],{"class":232},[79,71186,53301],{"class":228},[79,71188,71189,71191,71193],{"class":81,"line":649},[79,71190,53770],{"class":228},[79,71192,71132],{"class":232},[79,71194,53301],{"class":228},[79,71196,71197,71200,71202,71204,71206,71208,71210,71212,71215,71217,71219,71221],{"class":81,"line":655},[79,71198,71199],{"class":228},"    薪资：\u003C",[79,71201,55812],{"class":232},[79,71203,245],{"class":85},[79,71205,239],{"class":228},[79,71207,64687],{"class":89},[79,71209,55477],{"class":85},[79,71211,239],{"class":228},[79,71213,71214],{"class":89},"\"salary\"",[79,71216,236],{"class":85},[79,71218,239],{"class":228},[79,71220,71214],{"class":89},[79,71222,61116],{"class":228},[79,71224,71225,71228,71230,71232,71234,71237,71239,71241,71243],{"class":81,"line":660},[79,71226,71227],{"class":228},"    就业城市：\u003C",[79,71229,71132],{"class":232},[79,71231,236],{"class":85},[79,71233,239],{"class":228},[79,71235,71236],{"class":89},"\"city\"",[79,71238,55477],{"class":85},[79,71240,239],{"class":228},[79,71242,71236],{"class":89},[79,71244,53301],{"class":228},[79,71246,71247,71249,71251,71253,71255,71258,71261,71263],{"class":81,"line":666},[79,71248,57223],{"class":228},[79,71250,71154],{"class":232},[79,71252,68639],{"class":85},[79,71254,239],{"class":228},[79,71256,71257],{"class":89},"\"北京\"",[79,71259,71260],{"class":228},">北京\u003C\u002F",[79,71262,71154],{"class":232},[79,71264,53301],{"class":228},[79,71266,71267,71269,71271,71273,71275,71278,71281,71283],{"class":81,"line":672},[79,71268,57223],{"class":228},[79,71270,71154],{"class":232},[79,71272,68639],{"class":85},[79,71274,239],{"class":228},[79,71276,71277],{"class":89},"\"上海\"",[79,71279,71280],{"class":228},">上海\u003C\u002F",[79,71282,71154],{"class":232},[79,71284,53301],{"class":228},[79,71286,71287,71289,71291,71293,71295,71298,71301,71303],{"class":81,"line":678},[79,71288,57223],{"class":228},[79,71290,71154],{"class":232},[79,71292,68639],{"class":85},[79,71294,239],{"class":228},[79,71296,71297],{"class":89},"\"广州\"",[79,71299,71300],{"class":228},">广州\u003C\u002F",[79,71302,71154],{"class":232},[79,71304,53301],{"class":228},[79,71306,71307,71309,71311,71313,71315,71318,71321,71323],{"class":81,"line":684},[79,71308,57223],{"class":228},[79,71310,71154],{"class":232},[79,71312,68639],{"class":85},[79,71314,239],{"class":228},[79,71316,71317],{"class":89},"\"深圳\"",[79,71319,71320],{"class":228},">深圳\u003C\u002F",[79,71322,71154],{"class":232},[79,71324,53301],{"class":228},[79,71326,71327,71329,71331,71333,71335,71338,71341,71343],{"class":81,"line":690},[79,71328,57223],{"class":228},[79,71330,71154],{"class":232},[79,71332,68639],{"class":85},[79,71334,239],{"class":228},[79,71336,71337],{"class":89},"\"曹县\"",[79,71339,71340],{"class":228},">曹县\u003C\u002F",[79,71342,71154],{"class":232},[79,71344,53301],{"class":228},[79,71346,71347,71349,71351],{"class":81,"line":695},[79,71348,53770],{"class":228},[79,71350,71132],{"class":232},[79,71352,53301],{"class":228},[79,71354,71355,71357,71359,71361,71363,71366,71369,71371],{"class":81,"line":700},[79,71356,53335],{"class":228},[79,71358,55877],{"class":232},[79,71360,55477],{"class":85},[79,71362,239],{"class":228},[79,71364,71365],{"class":89},"\"add\"",[79,71367,71368],{"class":228},">录入\u003C\u002F",[79,71370,55877],{"class":232},[79,71372,53301],{"class":228},[79,71374,71375,71377,71379],{"class":81,"line":712},[79,71376,54410],{"class":228},[79,71378,68613],{"class":232},[79,71380,53301],{"class":228},[79,71382,71383],{"class":81,"line":721},[79,71384,542],{"emptyLinePlaceholder":541},[79,71386,71387,71389,71391,71394,71396],{"class":81,"line":726},[79,71388,54138],{"class":228},[79,71390,10],{"class":232},[79,71392,71393],{"class":228},">就业榜\u003C\u002F",[79,71395,10],{"class":232},[79,71397,53301],{"class":228},[79,71399,71400,71402,71404],{"class":81,"line":731},[79,71401,54138],{"class":228},[79,71403,347],{"class":232},[79,71405,53301],{"class":228},[79,71407,71408,71410,71412],{"class":81,"line":748},[79,71409,53335],{"class":228},[79,71411,350],{"class":232},[79,71413,53301],{"class":228},[79,71415,71416,71418,71420],{"class":81,"line":765},[79,71417,57223],{"class":228},[79,71419,353],{"class":232},[79,71421,53301],{"class":228},[79,71423,71424,71426,71428,71431,71433],{"class":81,"line":780},[79,71425,57291],{"class":228},[79,71427,356],{"class":232},[79,71429,71430],{"class":228},">序号\u003C\u002F",[79,71432,356],{"class":232},[79,71434,53301],{"class":228},[79,71436,71437,71439,71441,71444,71446],{"class":81,"line":811},[79,71438,57291],{"class":228},[79,71440,356],{"class":232},[79,71442,71443],{"class":228},">姓名\u003C\u002F",[79,71445,356],{"class":232},[79,71447,53301],{"class":228},[79,71449,71450,71452,71454,71457,71459],{"class":81,"line":816},[79,71451,57291],{"class":228},[79,71453,356],{"class":232},[79,71455,71456],{"class":228},">年龄\u003C\u002F",[79,71458,356],{"class":232},[79,71460,53301],{"class":228},[79,71462,71463,71465,71467,71470,71472],{"class":81,"line":821},[79,71464,57291],{"class":228},[79,71466,356],{"class":232},[79,71468,71469],{"class":228},">性别\u003C\u002F",[79,71471,356],{"class":232},[79,71473,53301],{"class":228},[79,71475,71476,71478,71480,71483,71485],{"class":81,"line":837},[79,71477,57291],{"class":228},[79,71479,356],{"class":232},[79,71481,71482],{"class":228},">薪资\u003C\u002F",[79,71484,356],{"class":232},[79,71486,53301],{"class":228},[79,71488,71489,71491,71493,71496,71498],{"class":81,"line":853},[79,71490,57291],{"class":228},[79,71492,356],{"class":232},[79,71494,71495],{"class":228},">就业城市\u003C\u002F",[79,71497,356],{"class":232},[79,71499,53301],{"class":228},[79,71501,71502,71504,71506,71509,71511],{"class":81,"line":864},[79,71503,57291],{"class":228},[79,71505,356],{"class":232},[79,71507,71508],{"class":228},">操作\u003C\u002F",[79,71510,356],{"class":232},[79,71512,53301],{"class":228},[79,71514,71515,71517,71519],{"class":81,"line":869},[79,71516,57396],{"class":228},[79,71518,353],{"class":232},[79,71520,53301],{"class":228},[79,71522,71523,71525,71527],{"class":81,"line":885},[79,71524,53770],{"class":228},[79,71526,350],{"class":232},[79,71528,53301],{"class":228},[79,71530,71531,71533,71535],{"class":81,"line":891},[79,71532,53335],{"class":228},[79,71534,367],{"class":232},[79,71536,53301],{"class":228},[79,71538,71539],{"class":81,"line":896},[79,71540,71541],{"class":2313},"      \u003C!-- \n",[79,71543,71544],{"class":81,"line":907},[79,71545,71546],{"class":2313},"        \u003Ctr>\n",[79,71548,71549],{"class":81,"line":912},[79,71550,71551],{"class":2313},"          \u003Ctd>1001\u003C\u002Ftd>\n",[79,71553,71554],{"class":81,"line":935},[79,71555,71556],{"class":2313},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[79,71558,71559],{"class":81,"line":946},[79,71560,71561],{"class":2313},"          \u003Ctd>19\u003C\u002Ftd>\n",[79,71563,71564],{"class":81,"line":960},[79,71565,71566],{"class":2313},"          \u003Ctd>男\u003C\u002Ftd>\n",[79,71568,71569],{"class":81,"line":975},[79,71570,71571],{"class":2313},"          \u003Ctd>15000\u003C\u002Ftd>\n",[79,71573,71574],{"class":81,"line":980},[79,71575,71576],{"class":2313},"          \u003Ctd>上海\u003C\u002Ftd>\n",[79,71578,71579],{"class":81,"line":1006},[79,71580,71581],{"class":2313},"          \u003Ctd>\n",[79,71583,71584],{"class":81,"line":1027},[79,71585,71586],{"class":2313},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[79,71588,71589],{"class":81,"line":1032},[79,71590,71591],{"class":2313},"          \u003C\u002Ftd>\n",[79,71593,71594],{"class":81,"line":1047},[79,71595,71596],{"class":2313},"        \u003C\u002Ftr> \n",[79,71598,71599],{"class":81,"line":1053},[79,71600,71601],{"class":2313},"        -->\n",[79,71603,71604,71606,71608],{"class":81,"line":1058},[79,71605,53770],{"class":228},[79,71607,367],{"class":232},[79,71609,53301],{"class":228},[79,71611,71612,71614,71616],{"class":81,"line":1069},[79,71613,54410],{"class":228},[79,71615,347],{"class":232},[79,71617,53301],{"class":228},[79,71619,71620,71622,71624],{"class":81,"line":1081},[79,71621,54138],{"class":228},[79,71623,53807],{"class":232},[79,71625,53301],{"class":228},[79,71627,71628],{"class":81,"line":1086},[79,71629,61947],{"class":2313},[79,71631,71632,71634,71637,71639,71641,71643,71645,71648],{"class":81,"line":1108},[79,71633,13256],{"class":448},[79,71635,71636],{"class":96}," uname",[79,71638,556],{"class":448},[79,71640,56385],{"class":228},[79,71642,56388],{"class":85},[79,71644,455],{"class":228},[79,71646,71647],{"class":89},"'.uname'",[79,71649,850],{"class":228},[79,71651,71652,71654,71656,71658,71660,71662,71664,71667],{"class":81,"line":1153},[79,71653,13256],{"class":448},[79,71655,17721],{"class":96},[79,71657,556],{"class":448},[79,71659,56385],{"class":228},[79,71661,56388],{"class":85},[79,71663,455],{"class":228},[79,71665,71666],{"class":89},"'.age'",[79,71668,850],{"class":228},[79,71670,71671,71673,71676,71678,71680,71682,71684,71687],{"class":81,"line":1158},[79,71672,13256],{"class":448},[79,71674,71675],{"class":96}," gender",[79,71677,556],{"class":448},[79,71679,56385],{"class":228},[79,71681,56388],{"class":85},[79,71683,455],{"class":228},[79,71685,71686],{"class":89},"'.gender'",[79,71688,850],{"class":228},[79,71690,71691,71693,71696,71698,71700,71702,71704,71707],{"class":81,"line":1180},[79,71692,13256],{"class":448},[79,71694,71695],{"class":96}," salary",[79,71697,556],{"class":448},[79,71699,56385],{"class":228},[79,71701,56388],{"class":85},[79,71703,455],{"class":228},[79,71705,71706],{"class":89},"'.salary'",[79,71708,850],{"class":228},[79,71710,71711,71713,71716,71718,71720,71722,71724,71727],{"class":81,"line":1197},[79,71712,13256],{"class":448},[79,71714,71715],{"class":96}," city",[79,71717,556],{"class":448},[79,71719,56385],{"class":228},[79,71721,56388],{"class":85},[79,71723,455],{"class":228},[79,71725,71726],{"class":89},"'.city'",[79,71728,850],{"class":228},[79,71730,71731,71733,71736,71738,71740,71742,71744,71747],{"class":81,"line":1202},[79,71732,13256],{"class":448},[79,71734,71735],{"class":96}," tbody",[79,71737,556],{"class":448},[79,71739,56385],{"class":228},[79,71741,56388],{"class":85},[79,71743,455],{"class":228},[79,71745,71746],{"class":89},"'tbody'",[79,71748,850],{"class":228},[79,71750,71751],{"class":81,"line":1207},[79,71752,542],{"emptyLinePlaceholder":541},[79,71754,71755],{"class":81,"line":1223},[79,71756,71757],{"class":2313},"    \u002F\u002F 获取所有带有name属性的元素\n",[79,71759,71760,71762,71765,71767,71769,71771,71773,71776],{"class":81,"line":18722},[79,71761,13256],{"class":448},[79,71763,71764],{"class":96}," items",[79,71766,556],{"class":448},[79,71768,56385],{"class":228},[79,71770,57670],{"class":85},[79,71772,455],{"class":228},[79,71774,71775],{"class":89},"'[name]'",[79,71777,850],{"class":228},[79,71779,71780],{"class":81,"line":18728},[79,71781,71782],{"class":2313},"    \u002F\u002F 声明一个空的数组\n",[79,71784,71785,71787,71789,71791],{"class":81,"line":18739},[79,71786,13256],{"class":448},[79,71788,59684],{"class":96},[79,71790,556],{"class":448},[79,71792,53832],{"class":228},[79,71794,71795],{"class":81,"line":18762},[79,71796,71797],{"class":2313},"    \u002F\u002F 1.录入模块\n",[79,71799,71800],{"class":81,"line":18784},[79,71801,71802],{"class":2313},"    \u002F\u002F 1.1这是一个表单提交事件\n",[79,71804,71805,71807,71810,71812,71814,71816,71818,71821],{"class":81,"line":18789},[79,71806,13256],{"class":448},[79,71808,71809],{"class":96}," info",[79,71811,556],{"class":448},[79,71813,56385],{"class":228},[79,71815,56388],{"class":85},[79,71817,455],{"class":228},[79,71819,71820],{"class":89},"'.info'",[79,71822,850],{"class":228},[79,71824,71825,71828,71830,71832,71835,71837,71839,71841,71843],{"class":81,"line":18795},[79,71826,71827],{"class":228},"    info.",[79,71829,59802],{"class":85},[79,71831,455],{"class":228},[79,71833,71834],{"class":89},"'submit'",[79,71836,1020],{"class":228},[79,71838,56438],{"class":448},[79,71840,3757],{"class":228},[79,71842,2328],{"class":7284},[79,71844,14476],{"class":228},[79,71846,71847],{"class":81,"line":18809},[79,71848,71849],{"class":2313},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[79,71851,71852,71855,71858],{"class":81,"line":18822},[79,71853,71854],{"class":228},"      e.",[79,71856,71857],{"class":85},"preventDefault",[79,71859,4061],{"class":228},[79,71861,71862],{"class":81,"line":18827},[79,71863,62001],{"class":2313},[79,71865,71866],{"class":81,"line":18841},[79,71867,542],{"emptyLinePlaceholder":541},[79,71869,71870],{"class":81,"line":18846},[79,71871,71872],{"class":2313},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[79,71874,71875],{"class":81,"line":18852},[79,71876,71877],{"class":2313},"      \u002F\u002F 先遍历循环\n",[79,71879,71880,71882,71884,71886,71888,71890,71892,71894,71896,71899,71901,71903,71905],{"class":81,"line":18857},[79,71881,54277],{"class":448},[79,71883,3757],{"class":228},[79,71885,53841],{"class":448},[79,71887,11493],{"class":228},[79,71889,239],{"class":448},[79,71891,1103],{"class":96},[79,71893,11500],{"class":228},[79,71895,229],{"class":448},[79,71897,71898],{"class":228}," items.",[79,71900,53962],{"class":96},[79,71902,5288],{"class":228},[79,71904,4377],{"class":448},[79,71906,14476],{"class":228},[79,71908,71909,71911,71914,71916,71919],{"class":81,"line":18871},[79,71910,1089],{"class":448},[79,71912,71913],{"class":228}," (items[i].value ",[79,71915,56475],{"class":448},[79,71917,71918],{"class":89}," ''",[79,71920,14476],{"class":228},[79,71922,71923,71926,71929,71931,71934],{"class":81,"line":18876},[79,71924,71925],{"class":448},"          return",[79,71927,71928],{"class":85}," alert",[79,71930,455],{"class":228},[79,71932,71933],{"class":89},"'输入内容不能为空'",[79,71935,850],{"class":228},[79,71937,71938],{"class":81,"line":18881},[79,71939,4612],{"class":228},[79,71941,71942],{"class":81,"line":18895},[79,71943,54391],{"class":228},[79,71945,71946],{"class":81,"line":18907},[79,71947,542],{"emptyLinePlaceholder":541},[79,71949,71950],{"class":81,"line":18912},[79,71951,71952],{"class":2313},"      \u002F\u002F 创建新的对象\n",[79,71954,71955,71957,71960,71962],{"class":81,"line":18925},[79,71956,60217],{"class":448},[79,71958,71959],{"class":96}," obj",[79,71961,556],{"class":448},[79,71963,17604],{"class":228},[79,71965,71966,71969,71971,71973,71975],{"class":81,"line":18930},[79,71967,71968],{"class":228},"        stuID: arr.",[79,71970,53962],{"class":96},[79,71972,47561],{"class":448},[79,71974,27137],{"class":96},[79,71976,33468],{"class":228},[79,71978,71979],{"class":81,"line":18935},[79,71980,71981],{"class":228},"        uname: uname.value,\n",[79,71983,71984],{"class":81,"line":18940},[79,71985,71986],{"class":228},"        age: age.value,\n",[79,71988,71989],{"class":81,"line":18953},[79,71990,71991],{"class":228},"        gender: gender.value,\n",[79,71993,71994],{"class":81,"line":18958},[79,71995,71996],{"class":228},"        salary: salary.value,\n",[79,71998,71999],{"class":81,"line":34631},[79,72000,72001],{"class":228},"        city: city.value\n",[79,72003,72004],{"class":81,"line":34637},[79,72005,54391],{"class":228},[79,72007,72008],{"class":81,"line":34643},[79,72009,72010],{"class":2313},"      \u002F\u002F console.log(obj);\n",[79,72012,72013],{"class":81,"line":34649},[79,72014,72015],{"class":2313},"      \u002F\u002F 追加到数组里面\n",[79,72017,72018,72020,72022],{"class":81,"line":34655},[79,72019,59996],{"class":228},[79,72021,53878],{"class":85},[79,72023,72024],{"class":228},"(obj)\n",[79,72026,72027],{"class":81,"line":34666},[79,72028,72029],{"class":2313},"      \u002F\u002F console.log(arr);\n",[79,72031,72032],{"class":81,"line":34672},[79,72033,72034],{"class":2313},"      \u002F\u002F 清空表单  reset重置表单\n",[79,72036,72037,72040,72042,72045],{"class":81,"line":34692},[79,72038,72039],{"class":96},"      this",[79,72041,2798],{"class":228},[79,72043,72044],{"class":85},"reset",[79,72046,4061],{"class":228},[79,72048,72049],{"class":81,"line":34698},[79,72050,72051],{"class":2313},"      \u002F\u002F 调用渲染函数\n",[79,72053,72054,72057],{"class":81,"line":34709},[79,72055,72056],{"class":85},"      render",[79,72058,4061],{"class":228},[79,72060,72061],{"class":81,"line":34715},[79,72062,35458],{"class":228},[79,72064,72065],{"class":81,"line":34721},[79,72066,72067],{"class":2313},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[79,72069,72070,72073,72076],{"class":81,"line":34727},[79,72071,72072],{"class":448},"    function",[79,72074,72075],{"class":85}," render",[79,72077,12888],{"class":228},[79,72079,72080],{"class":81,"line":34733},[79,72081,72082],{"class":2313},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[79,72084,72085,72088,72090],{"class":81,"line":34739},[79,72086,72087],{"class":228},"      tbody.innerHTML ",[79,72089,239],{"class":448},[79,72091,72092],{"class":89}," ''\n",[79,72094,72095],{"class":81,"line":34745},[79,72096,72097],{"class":2313},"      \u002F\u002F 遍历数组\n",[79,72099,72100,72102,72104,72106,72108,72110,72112,72114,72116,72118,72120,72122,72124],{"class":81,"line":34751},[79,72101,54277],{"class":448},[79,72103,3757],{"class":228},[79,72105,53841],{"class":448},[79,72107,11493],{"class":228},[79,72109,239],{"class":448},[79,72111,1103],{"class":96},[79,72113,11500],{"class":228},[79,72115,229],{"class":448},[79,72117,53959],{"class":228},[79,72119,53962],{"class":96},[79,72121,5288],{"class":228},[79,72123,4377],{"class":448},[79,72125,14476],{"class":228},[79,72127,72128,72130,72133,72135,72137,72140,72142,72145],{"class":81,"line":34771},[79,72129,63259],{"class":448},[79,72131,72132],{"class":96}," tr",[79,72134,556],{"class":448},[79,72136,56385],{"class":228},[79,72138,72139],{"class":85},"createElement",[79,72141,455],{"class":228},[79,72143,72144],{"class":89},"'tr'",[79,72146,850],{"class":228},[79,72148,72149,72152,72154],{"class":81,"line":34777},[79,72150,72151],{"class":228},"        tr.innerHTML ",[79,72153,239],{"class":448},[79,72155,72156],{"class":89}," `\n",[79,72158,72159,72162,72164,72166,72168,72171,72174],{"class":81,"line":34793},[79,72160,72161],{"class":89},"        \u003Ctd>${",[79,72163,5953],{"class":228},[79,72165,3130],{"class":89},[79,72167,2684],{"class":228},[79,72169,72170],{"class":89},"].",[79,72172,72173],{"class":228},"stuID",[79,72175,72176],{"class":89},"}\u003C\u002Ftd>\n",[79,72178,72179,72182,72184,72186,72188,72190,72193],{"class":81,"line":34799},[79,72180,72181],{"class":89},"          \u003Ctd>${",[79,72183,5953],{"class":228},[79,72185,3130],{"class":89},[79,72187,2684],{"class":228},[79,72189,72170],{"class":89},[79,72191,72192],{"class":228},"uname",[79,72194,72176],{"class":89},[79,72196,72197,72199,72201,72203,72205,72207,72210],{"class":81,"line":34813},[79,72198,72181],{"class":89},[79,72200,5953],{"class":228},[79,72202,3130],{"class":89},[79,72204,2684],{"class":228},[79,72206,72170],{"class":89},[79,72208,72209],{"class":228},"age",[79,72211,72176],{"class":89},[79,72213,72214,72216,72218,72220,72222,72224,72227],{"class":81,"line":34819},[79,72215,72181],{"class":89},[79,72217,5953],{"class":228},[79,72219,3130],{"class":89},[79,72221,2684],{"class":228},[79,72223,72170],{"class":89},[79,72225,72226],{"class":228},"gender",[79,72228,72176],{"class":89},[79,72230,72231,72233,72235,72237,72239,72241,72244],{"class":81,"line":34834},[79,72232,72181],{"class":89},[79,72234,5953],{"class":228},[79,72236,3130],{"class":89},[79,72238,2684],{"class":228},[79,72240,72170],{"class":89},[79,72242,72243],{"class":228},"salary",[79,72245,72176],{"class":89},[79,72247,72248,72250,72252,72254,72256,72258,72261],{"class":81,"line":34840},[79,72249,72181],{"class":89},[79,72251,5953],{"class":228},[79,72253,3130],{"class":89},[79,72255,2684],{"class":228},[79,72257,72170],{"class":89},[79,72259,72260],{"class":228},"city",[79,72262,72176],{"class":89},[79,72264,72265],{"class":81,"line":34849},[79,72266,71581],{"class":89},[79,72268,72269,72272,72274],{"class":81,"line":34855},[79,72270,72271],{"class":89},"            \u003Ca href=\"javascript:\" data-id=${",[79,72273,2684],{"class":228},[79,72275,72276],{"class":89},"}>删除\u003C\u002Fa>\n",[79,72278,72279],{"class":81,"line":34864},[79,72280,72281],{"class":89},"          \u003C\u002Ftd> \n",[79,72283,72284],{"class":81,"line":34870},[79,72285,72286],{"class":89},"          `\n",[79,72288,72289],{"class":81,"line":34876},[79,72290,72291],{"class":2313},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[79,72293,72294,72297,72300],{"class":81,"line":34885},[79,72295,72296],{"class":228},"        tbody.",[79,72298,72299],{"class":85},"appendChild",[79,72301,72302],{"class":228},"(tr)\n",[79,72304,72305],{"class":81,"line":34891},[79,72306,54391],{"class":228},[79,72308,72309],{"class":81,"line":34902},[79,72310,4272],{"class":228},[79,72312,72313],{"class":81,"line":34908},[79,72314,542],{"emptyLinePlaceholder":541},[79,72316,72317],{"class":81,"line":34927},[79,72318,72319],{"class":2313},"    \u002F\u002F 3.删除委托\n",[79,72321,72322],{"class":81,"line":34933},[79,72323,72324],{"class":2313},"    \u002F\u002F 3.1 事件委托 tbody\n",[79,72326,72327,72330,72332,72334,72336,72338,72340,72342,72344],{"class":81,"line":34944},[79,72328,72329],{"class":228},"    tbody.",[79,72331,59802],{"class":85},[79,72333,455],{"class":228},[79,72335,59807],{"class":89},[79,72337,1020],{"class":228},[79,72339,56438],{"class":448},[79,72341,3757],{"class":228},[79,72343,2328],{"class":7284},[79,72345,14476],{"class":228},[79,72347,72348,72350,72352,72354,72356],{"class":81,"line":34950},[79,72349,56469],{"class":448},[79,72351,69022],{"class":228},[79,72353,56475],{"class":448},[79,72355,70244],{"class":89},[79,72357,14476],{"class":228},[79,72359,72360],{"class":81,"line":34970},[79,72361,72362],{"class":2313},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[79,72364,72365],{"class":81,"line":34986},[79,72366,72367],{"class":2313},"        \u002F\u002F console.log(e.target.dataset.id);\n",[79,72369,72370],{"class":81,"line":34992},[79,72371,72372],{"class":2313},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[79,72374,72375,72378,72380,72383,72385],{"class":81,"line":35006},[79,72376,72377],{"class":228},"        arr.",[79,72379,59999],{"class":85},[79,72381,72382],{"class":228},"(e.target.dataset.id, ",[79,72384,775],{"class":96},[79,72386,850],{"class":228},[79,72388,72389],{"class":81,"line":35012},[79,72390,72391],{"class":2313},"        \u002F\u002F 重新渲染一次\n",[79,72393,72394,72397],{"class":81,"line":35018},[79,72395,72396],{"class":85},"        render",[79,72398,4061],{"class":228},[79,72400,72401],{"class":81,"line":35029},[79,72402,54391],{"class":228},[79,72404,72405],{"class":81,"line":35035},[79,72406,35458],{"class":228},[79,72408,72409,72411,72413],{"class":81,"line":35041},[79,72410,54410],{"class":228},[79,72412,53807],{"class":232},[79,72414,53301],{"class":228},[79,72416,72417],{"class":81,"line":35051},[79,72418,542],{"emptyLinePlaceholder":541},[79,72420,72421,72423,72425],{"class":81,"line":35057},[79,72422,53779],{"class":228},[79,72424,53794],{"class":232},[79,72426,53301],{"class":228},[79,72428,72429],{"class":81,"line":35068},[79,72430,542],{"emptyLinePlaceholder":541},[79,72432,72433,72435,72437],{"class":81,"line":35074},[79,72434,53779],{"class":228},[79,72436,52630],{"class":232},[79,72438,53301],{"class":228},[19,72440,72441],{},"样式：",[51,72443,72447],{"className":72444,"code":72445,"language":72446,"meta":57,"style":57},"language-yaml shiki shiki-themes github-light github-dark","* {\n  margin: 0;\n  padding: 0;\n}\n\na {\n  text-decoration: none;\n  color:#721c24;\n}\nh1 {\n  text-align: center;\n  color:#333;\n  margin: 20px 0;\n \n}\ntable {\n  margin:0 auto;\n  width: 800px;\n  border-collapse: collapse;\n  color:#004085;\n}\nth {\n  padding: 10px;\n  background: #cfe5ff;\n  \n  font-size: 20px;\n  font-weight: 400;\n}\ntd,th {\n  border:1px solid #b8daff;\n}\ntd {\n  padding:10px;\n  color:#666;\n  text-align: center;\n  font-size: 16px;\n}\ntbody tr {\n  background: #fff;\n}\ntbody tr:hover {\n  background: #e1ecf8;\n}\n.info {\n  width: 900px;\n  margin: 50px auto;\n  text-align: center;\n}\n.info  input, .info select {\n  width: 80px;\n  height: 27px;\n  outline: none;\n  border-radius: 5px;\n  border:1px solid #b8daff;\n  padding-left: 5px;\n  box-sizing: border-box;\n  margin-right: 15px;\n}\n.info button {\n  width: 60px;\n  height: 27px;\n  background-color: #004085;\n  outline: none;\n  border: 0;\n  color: #fff;\n  cursor: pointer;\n  border-radius: 5px;\n}\n.info .age {\n  width: 50px;\n}\n","yaml",[59,72448,72449,72454,72464,72473,72477,72481,72486,72496,72501,72505,72510,72520,72525,72534,72538,72542,72547,72552,72562,72572,72577,72581,72586,72595,72605,72610,72620,72630,72634,72639,72647,72651,72656,72661,72666,72674,72683,72687,72692,72701,72705,72710,72719,72723,72728,72737,72746,72754,72758,72763,72772,72782,72791,72801,72807,72816,72826,72836,72840,72845,72854,72862,72872,72880,72889,72898,72908,72916,72920,72925,72934],{"__ignoreMap":57},[79,72450,72451],{"class":81,"line":82},[79,72452,72453],{"class":228},"* {\n",[79,72455,72456,72459,72461],{"class":81,"line":167},[79,72457,72458],{"class":232},"  margin",[79,72460,53431],{"class":228},[79,72462,72463],{"class":89},"0;\n",[79,72465,72466,72469,72471],{"class":81,"line":178},[79,72467,72468],{"class":89},"  padding",[79,72470,53431],{"class":228},[79,72472,72463],{"class":89},[79,72474,72475],{"class":81,"line":545},[79,72476,3671],{"class":228},[79,72478,72479],{"class":81,"line":550},[79,72480,542],{"emptyLinePlaceholder":541},[79,72482,72483],{"class":81,"line":562},[79,72484,72485],{"class":89},"a {\n",[79,72487,72488,72491,72493],{"class":81,"line":568},[79,72489,72490],{"class":232},"  text-decoration",[79,72492,53431],{"class":228},[79,72494,72495],{"class":89},"none;\n",[79,72497,72498],{"class":81,"line":574},[79,72499,72500],{"class":89},"  color:#721c24;\n",[79,72502,72503],{"class":81,"line":579},[79,72504,3671],{"class":228},[79,72506,72507],{"class":81,"line":585},[79,72508,72509],{"class":89},"h1 {\n",[79,72511,72512,72515,72517],{"class":81,"line":591},[79,72513,72514],{"class":232},"  text-align",[79,72516,53431],{"class":228},[79,72518,72519],{"class":89},"center;\n",[79,72521,72522],{"class":81,"line":596},[79,72523,72524],{"class":89},"  color:#333;\n",[79,72526,72527,72529,72531],{"class":81,"line":602},[79,72528,72458],{"class":232},[79,72530,53431],{"class":228},[79,72532,72533],{"class":89},"20px 0;\n",[79,72535,72536],{"class":81,"line":608},[79,72537,4750],{"class":228},[79,72539,72540],{"class":81,"line":614},[79,72541,3671],{"class":228},[79,72543,72544],{"class":81,"line":619},[79,72545,72546],{"class":89},"table {\n",[79,72548,72549],{"class":81,"line":625},[79,72550,72551],{"class":89},"  margin:0 auto;\n",[79,72553,72554,72557,72559],{"class":81,"line":631},[79,72555,72556],{"class":232},"  width",[79,72558,53431],{"class":228},[79,72560,72561],{"class":89},"800px;\n",[79,72563,72564,72567,72569],{"class":81,"line":637},[79,72565,72566],{"class":232},"  border-collapse",[79,72568,53431],{"class":228},[79,72570,72571],{"class":89},"collapse;\n",[79,72573,72574],{"class":81,"line":643},[79,72575,72576],{"class":89},"  color:#004085;\n",[79,72578,72579],{"class":81,"line":649},[79,72580,3671],{"class":228},[79,72582,72583],{"class":81,"line":655},[79,72584,72585],{"class":89},"th {\n",[79,72587,72588,72590,72592],{"class":81,"line":660},[79,72589,72468],{"class":232},[79,72591,53431],{"class":228},[79,72593,72594],{"class":89},"10px;\n",[79,72596,72597,72600,72602],{"class":81,"line":666},[79,72598,72599],{"class":232},"  background",[79,72601,53431],{"class":228},[79,72603,72604],{"class":2313},"#cfe5ff;\n",[79,72606,72607],{"class":81,"line":672},[79,72608,72609],{"class":228},"  \n",[79,72611,72612,72615,72617],{"class":81,"line":678},[79,72613,72614],{"class":232},"  font-size",[79,72616,53431],{"class":228},[79,72618,72619],{"class":89},"20px;\n",[79,72621,72622,72625,72627],{"class":81,"line":684},[79,72623,72624],{"class":232},"  font-weight",[79,72626,53431],{"class":228},[79,72628,72629],{"class":89},"400;\n",[79,72631,72632],{"class":81,"line":690},[79,72633,3671],{"class":228},[79,72635,72636],{"class":81,"line":695},[79,72637,72638],{"class":89},"td,th {\n",[79,72640,72641,72644],{"class":81,"line":700},[79,72642,72643],{"class":89},"  border:1px solid",[79,72645,72646],{"class":2313}," #b8daff;\n",[79,72648,72649],{"class":81,"line":712},[79,72650,3671],{"class":228},[79,72652,72653],{"class":81,"line":721},[79,72654,72655],{"class":89},"td {\n",[79,72657,72658],{"class":81,"line":726},[79,72659,72660],{"class":89},"  padding:10px;\n",[79,72662,72663],{"class":81,"line":731},[79,72664,72665],{"class":89},"  color:#666;\n",[79,72667,72668,72670,72672],{"class":81,"line":748},[79,72669,72514],{"class":232},[79,72671,53431],{"class":228},[79,72673,72519],{"class":89},[79,72675,72676,72678,72680],{"class":81,"line":765},[79,72677,72614],{"class":232},[79,72679,53431],{"class":228},[79,72681,72682],{"class":89},"16px;\n",[79,72684,72685],{"class":81,"line":780},[79,72686,3671],{"class":228},[79,72688,72689],{"class":81,"line":811},[79,72690,72691],{"class":89},"tbody tr {\n",[79,72693,72694,72696,72698],{"class":81,"line":816},[79,72695,72599],{"class":232},[79,72697,53431],{"class":228},[79,72699,72700],{"class":2313},"#fff;\n",[79,72702,72703],{"class":81,"line":821},[79,72704,3671],{"class":228},[79,72706,72707],{"class":81,"line":837},[79,72708,72709],{"class":89},"tbody tr:hover {\n",[79,72711,72712,72714,72716],{"class":81,"line":853},[79,72713,72599],{"class":232},[79,72715,53431],{"class":228},[79,72717,72718],{"class":2313},"#e1ecf8;\n",[79,72720,72721],{"class":81,"line":864},[79,72722,3671],{"class":228},[79,72724,72725],{"class":81,"line":869},[79,72726,72727],{"class":89},".info {\n",[79,72729,72730,72732,72734],{"class":81,"line":885},[79,72731,72556],{"class":232},[79,72733,53431],{"class":228},[79,72735,72736],{"class":89},"900px;\n",[79,72738,72739,72741,72743],{"class":81,"line":891},[79,72740,72458],{"class":232},[79,72742,53431],{"class":228},[79,72744,72745],{"class":89},"50px auto;\n",[79,72747,72748,72750,72752],{"class":81,"line":896},[79,72749,72514],{"class":232},[79,72751,53431],{"class":228},[79,72753,72519],{"class":89},[79,72755,72756],{"class":81,"line":907},[79,72757,3671],{"class":228},[79,72759,72760],{"class":81,"line":912},[79,72761,72762],{"class":89},".info  input, .info select {\n",[79,72764,72765,72767,72769],{"class":81,"line":935},[79,72766,72556],{"class":232},[79,72768,53431],{"class":228},[79,72770,72771],{"class":89},"80px;\n",[79,72773,72774,72777,72779],{"class":81,"line":946},[79,72775,72776],{"class":232},"  height",[79,72778,53431],{"class":228},[79,72780,72781],{"class":89},"27px;\n",[79,72783,72784,72787,72789],{"class":81,"line":960},[79,72785,72786],{"class":232},"  outline",[79,72788,53431],{"class":228},[79,72790,72495],{"class":89},[79,72792,72793,72796,72798],{"class":81,"line":975},[79,72794,72795],{"class":232},"  border-radius",[79,72797,53431],{"class":228},[79,72799,72800],{"class":89},"5px;\n",[79,72802,72803,72805],{"class":81,"line":980},[79,72804,72643],{"class":89},[79,72806,72646],{"class":2313},[79,72808,72809,72812,72814],{"class":81,"line":1006},[79,72810,72811],{"class":232},"  padding-left",[79,72813,53431],{"class":228},[79,72815,72800],{"class":89},[79,72817,72818,72821,72823],{"class":81,"line":1027},[79,72819,72820],{"class":232},"  box-sizing",[79,72822,53431],{"class":228},[79,72824,72825],{"class":89},"border-box;\n",[79,72827,72828,72831,72833],{"class":81,"line":1032},[79,72829,72830],{"class":232},"  margin-right",[79,72832,53431],{"class":228},[79,72834,72835],{"class":89},"15px;\n",[79,72837,72838],{"class":81,"line":1047},[79,72839,3671],{"class":228},[79,72841,72842],{"class":81,"line":1053},[79,72843,72844],{"class":89},".info button {\n",[79,72846,72847,72849,72851],{"class":81,"line":1058},[79,72848,72556],{"class":232},[79,72850,53431],{"class":228},[79,72852,72853],{"class":89},"60px;\n",[79,72855,72856,72858,72860],{"class":81,"line":1069},[79,72857,72776],{"class":232},[79,72859,53431],{"class":228},[79,72861,72781],{"class":89},[79,72863,72864,72867,72869],{"class":81,"line":1081},[79,72865,72866],{"class":232},"  background-color",[79,72868,53431],{"class":228},[79,72870,72871],{"class":2313},"#004085;\n",[79,72873,72874,72876,72878],{"class":81,"line":1086},[79,72875,72786],{"class":232},[79,72877,53431],{"class":228},[79,72879,72495],{"class":89},[79,72881,72882,72885,72887],{"class":81,"line":1108},[79,72883,72884],{"class":232},"  border",[79,72886,53431],{"class":228},[79,72888,72463],{"class":89},[79,72890,72891,72894,72896],{"class":81,"line":1153},[79,72892,72893],{"class":232},"  color",[79,72895,53431],{"class":228},[79,72897,72700],{"class":2313},[79,72899,72900,72903,72905],{"class":81,"line":1158},[79,72901,72902],{"class":232},"  cursor",[79,72904,53431],{"class":228},[79,72906,72907],{"class":89},"pointer;\n",[79,72909,72910,72912,72914],{"class":81,"line":1180},[79,72911,72795],{"class":232},[79,72913,53431],{"class":228},[79,72915,72800],{"class":89},[79,72917,72918],{"class":81,"line":1197},[79,72919,3671],{"class":228},[79,72921,72922],{"class":81,"line":1202},[79,72923,72924],{"class":89},".info .age {\n",[79,72926,72927,72929,72931],{"class":81,"line":1207},[79,72928,72556],{"class":232},[79,72930,53431],{"class":228},[79,72932,72933],{"class":89},"50px;\n",[79,72935,72936],{"class":81,"line":1223},[79,72937,3671],{"class":228},[19,72939,72940],{},"思路：",[19,72942,72943],{},[3569,72944],{"alt":57,"src":72945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,72947,72948],{},[3569,72949],{"alt":57,"src":72950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,72952,72953],{},[3569,72954],{"alt":57,"src":72955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[339,72957,72959],{"id":72958},"_3315-重绘回流","3.3.15 重绘回流",[19,72961,72962],{},[3569,72963],{"alt":57,"src":72964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,72966,72967],{},[3569,72968],{"alt":57,"src":72969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,72971,72972],{},[3569,72973],{"alt":57,"src":72974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,72976,72978],{"id":72977},"_34-bom","3.4 BOM",[19,72980,72981],{},[3569,72982],{"alt":57,"src":72983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,72985,72986],{},"平时写的document省略了window而已，实际上是window.document",[19,72988,72989],{},"函数也是这样，调用的时候实际为window.fn()",[19,72991,72992],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,72994,72995],{},"window大部分情况下可以省略",[339,72997,72999],{"id":72998},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,73001,73002],{},"只执行一次",[19,73004,73005],{},[3569,73006],{"alt":57,"src":73007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,73009,73010],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,73012,73013],{},[3569,73014],{"alt":57,"src":73015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[339,73017,73019],{"id":73018},"_342-js执行机制","3.4.2 JS执行机制",[19,73021,73022],{},[3569,73023],{"alt":57,"src":73024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,73026,73027],{},"两个的结果都是1111 3333 2222",[19,73029,73030],{},[3569,73031],{"alt":57,"src":73032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,73034,73035],{},[3569,73036],{"alt":57,"src":73037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,73039,73040],{},[3569,73041],{"alt":57,"src":73042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,73044,73045],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,73047,73048],{},"工作流程：",[19,73050,73051],{},[3569,73052],{"alt":57,"src":73053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,73055,73056],{},[3569,73057],{"alt":57,"src":73058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,73060,73061],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,73063,73064],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[339,73066,73068],{"id":73067},"_343-location对象","3.4.3 location对象",[19,73070,73071],{},"location对象属于window这个全局对象下的，可以 省略window",[19,73073,73074],{},[3569,73075],{"alt":57,"src":73076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,73078,73079],{},"href可以跳转页面",[26,73081,73082],{},[29,73083,73084],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,73086,73087],{},"search得到提交信息之后网站后边的地址",[19,73089,73090],{},[3569,73091],{"alt":57,"src":73092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,73094,73095],{},[3569,73096],{"alt":57,"src":73097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[26,73099,73100],{"start":167},[29,73101,73102],{},"hash:这个获取单页面应用#后边的地址",[19,73104,73105],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,73107,73108],{},[3569,73109],{"alt":57,"src":73110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[51,73112,73114],{"className":219,"code":73113,"language":221,"meta":57,"style":57},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[59,73115,73116,73136,73156],{"__ignoreMap":57},[79,73117,73118,73120,73122,73124,73126,73129,73132,73134],{"class":81,"line":82},[79,73119,54138],{"class":228},[79,73121,2482],{"class":232},[79,73123,63046],{"class":85},[79,73125,239],{"class":228},[79,73127,73128],{"class":89},"\"#\u002Fmy\"",[79,73130,73131],{"class":228},">我的\u003C\u002F",[79,73133,2482],{"class":232},[79,73135,53301],{"class":228},[79,73137,73138,73140,73142,73144,73146,73149,73152,73154],{"class":81,"line":167},[79,73139,54138],{"class":228},[79,73141,2482],{"class":232},[79,73143,63046],{"class":85},[79,73145,239],{"class":228},[79,73147,73148],{"class":89},"\"#\u002Ffriend\"",[79,73150,73151],{"class":228},">关注\u003C\u002F",[79,73153,2482],{"class":232},[79,73155,53301],{"class":228},[79,73157,73158,73160,73162,73164,73166,73169,73172,73174],{"class":81,"line":178},[79,73159,54138],{"class":228},[79,73161,2482],{"class":232},[79,73163,63046],{"class":85},[79,73165,239],{"class":228},[79,73167,73168],{"class":89},"\"#\u002Fdownload\"",[79,73170,73171],{"class":228},">下载\u003C\u002F",[79,73173,2482],{"class":232},[79,73175,53301],{"class":228},[19,73177,73178],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[26,73180,73181],{"start":178},[29,73182,73183,73184,73186,73187,73189],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[55707,73185],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[55707,73188],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[339,73191,73193],{"id":73192},"_345-navigator对象","3.4.5 navigator对象",[19,73195,73196],{},[3569,73197],{"alt":57,"src":73198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[51,73200,73204],{"className":73201,"code":73202,"language":73203,"meta":57,"style":57},"language-javascript shiki shiki-themes github-light github-dark","\u002F\u002F 检测 userAgent（浏览器信息） \n!(function () { \nconst userAgent = navigator.userAgent \n\u002F\u002F 验证是否为Android或iPhone \nconst android = userAgent.match(\u002F(Android);?[\\s\\\u002F]+([\\d.]+)?\u002F) \nconst iphone = userAgent.match(\u002F(iPhone\\sOS)\\s([\\d_]+)\u002F) \n\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \nif (android || iphone) { \nlocation.href = 'http:\u002F\u002Fm.itcast.cn' \n} \n})()\n","javascript",[59,73205,73206,73211,73222,73234,73239,73290,73331,73336,73349,73361,73366],{"__ignoreMap":57},[79,73207,73208],{"class":81,"line":82},[79,73209,73210],{"class":2313},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[79,73212,73213,73215,73217,73219],{"class":81,"line":167},[79,73214,2470],{"class":448},[79,73216,455],{"class":228},[79,73218,56438],{"class":448},[79,73220,73221],{"class":228}," () { \n",[79,73223,73224,73226,73229,73231],{"class":81,"line":178},[79,73225,8857],{"class":448},[79,73227,73228],{"class":96}," userAgent",[79,73230,556],{"class":448},[79,73232,73233],{"class":228}," navigator.userAgent \n",[79,73235,73236],{"class":81,"line":545},[79,73237,73238],{"class":2313},"\u002F\u002F 验证是否为Android或iPhone \n",[79,73240,73241,73243,73246,73248,73251,73254,73256,73258,73261,73263,73266,73270,73272,73274,73276,73279,73281,73283,73285,73287],{"class":81,"line":550},[79,73242,8857],{"class":448},[79,73244,73245],{"class":96}," android",[79,73247,556],{"class":448},[79,73249,73250],{"class":228}," userAgent.",[79,73252,73253],{"class":85},"match",[79,73255,455],{"class":228},[79,73257,2824],{"class":89},[79,73259,73260],{"class":49972},"(Android);",[79,73262,3225],{"class":448},[79,73264,73265],{"class":96},"[\\s",[79,73267,73269],{"class":73268},"snhLl","\\\u002F",[79,73271,3179],{"class":96},[79,73273,995],{"class":448},[79,73275,455],{"class":49972},[79,73277,73278],{"class":96},"[\\d.]",[79,73280,995],{"class":448},[79,73282,2672],{"class":49972},[79,73284,3225],{"class":448},[79,73286,2824],{"class":89},[79,73288,73289],{"class":228},") \n",[79,73291,73292,73294,73297,73299,73301,73303,73305,73307,73310,73313,73316,73318,73320,73323,73325,73327,73329],{"class":81,"line":562},[79,73293,8857],{"class":448},[79,73295,73296],{"class":96}," iphone",[79,73298,556],{"class":448},[79,73300,73250],{"class":228},[79,73302,73253],{"class":85},[79,73304,455],{"class":228},[79,73306,2824],{"class":89},[79,73308,73309],{"class":49972},"(iPhone",[79,73311,73312],{"class":96},"\\s",[79,73314,73315],{"class":49972},"OS)",[79,73317,73312],{"class":96},[79,73319,455],{"class":49972},[79,73321,73322],{"class":96},"[\\d_]",[79,73324,995],{"class":448},[79,73326,2672],{"class":49972},[79,73328,2824],{"class":89},[79,73330,73289],{"class":228},[79,73332,73333],{"class":81,"line":568},[79,73334,73335],{"class":2313},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[79,73337,73338,73340,73343,73346],{"class":81,"line":574},[79,73339,1210],{"class":448},[79,73341,73342],{"class":228}," (android ",[79,73344,73345],{"class":448},"||",[79,73347,73348],{"class":228}," iphone) { \n",[79,73350,73351,73354,73356,73359],{"class":81,"line":579},[79,73352,73353],{"class":228},"location.href ",[79,73355,239],{"class":448},[79,73357,73358],{"class":89}," 'http:\u002F\u002Fm.itcast.cn'",[79,73360,4750],{"class":228},[79,73362,73363],{"class":81,"line":585},[79,73364,73365],{"class":228},"} \n",[79,73367,73368],{"class":81,"line":591},[79,73369,73370],{"class":228},"})()\n",[339,73372,73374],{"id":73373},"_346-histroy对象","3.4.6 histroy对象",[19,73376,73377],{},[3569,73378],{"alt":57,"src":73379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,73381,73382],{},"浏览器地址的前进与后退!!!",[19,73384,73385],{},"history.back() 等效于 history.go(-1)",[19,73387,73388],{},"history.forward() 等效于 history.go(1)",[14,73390,73392],{"id":73391},"_35-本地存储","3.5 本地存储",[26,73394,73395,73398,73401],{},[29,73396,73397],{},"数据存储在用户浏览器中",[29,73399,73400],{},"设置、读取方便、甚至页面刷新不丢失数据",[29,73402,73403],{},"容量较大，sessionStorage和localStorage约 5M 左右",[339,73405,73407],{"id":73406},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,73409,73410],{},"只能存储字符串",[19,73412,73413],{},[3569,73414],{"alt":57,"src":73415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,73417,73418],{},[3569,73419],{"alt":57,"src":73420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,73422,73423],{},"键值对要加引号,不然就会当变量来看了",[19,73425,73426],{},"localStorage.setItem('uname', 'pink')",[19,73428,73429],{},"刷新之后信息不再丢失",[19,73431,73432],{},"操作key,value会跟着变",[19,73434,73435],{},"删除只删除键就可以,即名字",[19,73437,73426],{},[19,73439,73440],{},"改:",[19,73442,73443],{},"localStorage.setItem('uname','red')",[19,73445,73446],{},"有这个键就是改,没有这个键就是改",[19,73448,73449],{},[3569,73450],{"alt":57,"src":73451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,73453,73454],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,73456,73457],{},[3569,73458],{"alt":57,"src":73459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,73461,73462],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[339,73464,73466],{"id":73465},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,73468,73469],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,73471,73472],{},"特性:",[26,73474,73475,73478,73481,73484],{},[29,73476,73477],{},"生命周期为关闭浏览器窗口",[29,73479,73480],{},"在同一个窗口(页面)下数据可以共享",[29,73482,73483],{},"以键值对的形式存储使用",[29,73485,73486],{},"用法跟localStorage 基本相同",[339,73488,73490],{"id":73489},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,73492,73493],{},"本地只能存储字符串,无法直接存储复杂数据类型",[51,73495,73497],{"className":219,"code":73496,"language":221,"meta":57,"style":57},"\u003Cscript>\n    const obj = {\n      uname: 'pink老师',\n      age: 18,\n      gender: '女'\n    }\n    \u002F\u002F 存储复杂数据类型\n    localStorage.setItem('obj', obj)\n  \u003C\u002Fscript>\n",[59,73498,73499,73507,73512,73517,73522,73527,73531,73536,73541],{"__ignoreMap":57},[79,73500,73501,73503,73505],{"class":81,"line":82},[79,73502,229],{"class":228},[79,73504,53807],{"class":232},[79,73506,53301],{"class":228},[79,73508,73509],{"class":81,"line":167},[79,73510,73511],{"class":228},"    const obj = {\n",[79,73513,73514],{"class":81,"line":178},[79,73515,73516],{"class":228},"      uname: 'pink老师',\n",[79,73518,73519],{"class":81,"line":545},[79,73520,73521],{"class":228},"      age: 18,\n",[79,73523,73524],{"class":81,"line":550},[79,73525,73526],{"class":228},"      gender: '女'\n",[79,73528,73529],{"class":81,"line":562},[79,73530,4272],{"class":228},[79,73532,73533],{"class":81,"line":568},[79,73534,73535],{"class":228},"    \u002F\u002F 存储复杂数据类型\n",[79,73537,73538],{"class":81,"line":574},[79,73539,73540],{"class":228},"    localStorage.setItem('obj', obj)\n",[79,73542,73543,73545,73547],{"class":81,"line":579},[79,73544,54410],{"class":228},[79,73546,53807],{"class":232},[79,73548,53301],{"class":228},[19,73550,73551],{},[3569,73552],{"alt":57,"src":73553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,73555,73556],{},"如果获取一下数据:",[19,73558,73559],{},"log(localStorage.getItem('obj'))",[19,73561,73562],{},[3569,73563],{"alt":57,"src":73564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,73566,73567],{},"发现直接存对象是使用不了的!!!",[24023,73569,73571],{"id":73570},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,73573,73574],{},[3569,73575],{"alt":57,"src":73576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[51,73578,73580],{"className":52628,"code":73579,"language":52630,"meta":57,"style":57},"\u003Cscript>\n    const obj = {\n      uname: 'pink老师',\n      age: 18,\n      gender: '女'\n    }\n    \u002F\u002F 存储复杂数据类型\n  localStorage.setItem('obj', JSON.stringify(obj))\n  console.log(localStorage.getItem('obj'))\n  \u003C\u002Fscript>\n  \n  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n  类型是字符串的\n  JSON对象 属性和值有引号,而且引号统一是双引号\n",[59,73581,73582,73590,73600,73610,73619,73627,73631,73635,73661,73680,73688,73692,73697,73702],{"__ignoreMap":57},[79,73583,73584,73586,73588],{"class":81,"line":82},[79,73585,229],{"class":228},[79,73587,53807],{"class":232},[79,73589,53301],{"class":228},[79,73591,73592,73594,73596,73598],{"class":81,"line":167},[79,73593,13256],{"class":448},[79,73595,71959],{"class":96},[79,73597,556],{"class":448},[79,73599,17604],{"class":228},[79,73601,73602,73605,73608],{"class":81,"line":178},[79,73603,73604],{"class":228},"      uname: ",[79,73606,73607],{"class":89},"'pink老师'",[79,73609,33468],{"class":228},[79,73611,73612,73615,73617],{"class":81,"line":545},[79,73613,73614],{"class":228},"      age: ",[79,73616,2890],{"class":96},[79,73618,33468],{"class":228},[79,73620,73621,73624],{"class":81,"line":550},[79,73622,73623],{"class":228},"      gender: ",[79,73625,73626],{"class":89},"'女'\n",[79,73628,73629],{"class":81,"line":562},[79,73630,4272],{"class":228},[79,73632,73633],{"class":81,"line":568},[79,73634,73535],{"class":2313},[79,73636,73637,73640,73643,73645,73648,73650,73653,73655,73658],{"class":81,"line":574},[79,73638,73639],{"class":228},"  localStorage.",[79,73641,73642],{"class":85},"setItem",[79,73644,455],{"class":228},[79,73646,73647],{"class":89},"'obj'",[79,73649,1020],{"class":228},[79,73651,73652],{"class":96},"JSON",[79,73654,2798],{"class":228},[79,73656,73657],{"class":85},"stringify",[79,73659,73660],{"class":228},"(obj))\n",[79,73662,73663,73666,73668,73671,73674,73676,73678],{"class":81,"line":579},[79,73664,73665],{"class":228},"  console.",[79,73667,60236],{"class":85},[79,73669,73670],{"class":228},"(localStorage.",[79,73672,73673],{"class":85},"getItem",[79,73675,455],{"class":228},[79,73677,73647],{"class":89},[79,73679,1150],{"class":228},[79,73681,73682,73684,73686],{"class":81,"line":585},[79,73683,54410],{"class":228},[79,73685,53807],{"class":232},[79,73687,53301],{"class":228},[79,73689,73690],{"class":81,"line":591},[79,73691,72609],{"class":228},[79,73693,73694],{"class":81,"line":596},[79,73695,73696],{"class":228},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[79,73698,73699],{"class":81,"line":602},[79,73700,73701],{"class":228},"  类型是字符串的\n",[79,73703,73704],{"class":81,"line":608},[79,73705,73706],{"class":228},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[24023,73708,73710],{"id":73709},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,73712,73713],{},[3569,73714],{"alt":57,"src":73715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,73717,73718],{},[3569,73719],{"alt":57,"src":73720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[51,73722,73724],{"className":219,"code":73723,"language":221,"meta":57,"style":57},"  \u003Cscript>\n    const obj = {\n      uname: 'pink老师',\n      age: 18,\n      gender: '女'\n    }\n    \u002F\u002F 1.存储复杂数据类型\n    \u002F\u002F localStorage.setItem('obj', obj)\n    \u002F\u002F console.log(localStorage.getItem('obj'))\n    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n    localStorage.setItem('obj', JSON.stringify(obj))\n    \u002F\u002F 取\n    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n    console.log(JSON.parse(localStorage.getItem('obj')))\n  \u003C\u002Fscript>\n",[59,73725,73726,73734,73738,73742,73746,73750,73754,73759,73764,73769,73774,73779,73784,73789,73794],{"__ignoreMap":57},[79,73727,73728,73730,73732],{"class":81,"line":82},[79,73729,54138],{"class":228},[79,73731,53807],{"class":232},[79,73733,53301],{"class":228},[79,73735,73736],{"class":81,"line":167},[79,73737,73511],{"class":228},[79,73739,73740],{"class":81,"line":178},[79,73741,73516],{"class":228},[79,73743,73744],{"class":81,"line":545},[79,73745,73521],{"class":228},[79,73747,73748],{"class":81,"line":550},[79,73749,73526],{"class":228},[79,73751,73752],{"class":81,"line":562},[79,73753,4272],{"class":228},[79,73755,73756],{"class":81,"line":568},[79,73757,73758],{"class":228},"    \u002F\u002F 1.存储复杂数据类型\n",[79,73760,73761],{"class":81,"line":574},[79,73762,73763],{"class":228},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[79,73765,73766],{"class":81,"line":579},[79,73767,73768],{"class":228},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[79,73770,73771],{"class":81,"line":585},[79,73772,73773],{"class":228},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[79,73775,73776],{"class":81,"line":591},[79,73777,73778],{"class":228},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[79,73780,73781],{"class":81,"line":596},[79,73782,73783],{"class":228},"    \u002F\u002F 取\n",[79,73785,73786],{"class":81,"line":602},[79,73787,73788],{"class":228},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[79,73790,73791],{"class":81,"line":608},[79,73792,73793],{"class":228},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[79,73795,73796,73798,73800],{"class":81,"line":614},[79,73797,54410],{"class":228},[79,73799,53807],{"class":232},[79,73801,53301],{"class":228},[19,73803,73804],{},[3569,73805],{"alt":57,"src":73806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[339,73808,73810],{"id":73809},"_356-数组map方法","3.5.6 数组map方法",[19,73812,73813],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,73815,73816],{},[3569,73817],{"alt":57,"src":73818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,73820,73821],{},[3569,73822],{"alt":57,"src":73823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,73825,73826,73829],{},[2398,73827,73828],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,73831,73832],{},"map有返回值，但是forEach没有返回值",[19,73834,73835],{},"map是个方法。用的时候要加 ()",[19,73837,73838],{},"map返回的是一个数组",[339,73840,73842],{"id":73841},"_357-数组中join方法","3.5.7 数组中join方法",[19,73844,73845],{},[3569,73846],{"alt":57,"src":73847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,73849,73850],{},"类似于python中拼接字符串一样！",[26,73852,73853,73856,73859],{},[29,73854,73855],{},"小括号为空则逗号分开",[29,73857,73858],{},"小括号为空字符串 ''，则元素之间没有分隔符",[29,73860,73861],{},"小括号用啥符号就用进行分割",[339,73863,73865],{"id":73864},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[26,73867,73868,73871,73874,73877,73880],{},[29,73869,73870],{},"记住本地时间获取快速方式：new Date().toDateString()",[29,73872,73873],{},"尽量减少DOM操作，用好map+join的渲染方式",[29,73875,73876],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[29,73878,73879],{},"return可以实现函数的结束",[29,73881,73882],{},"禁止跳转是 preventDefault() 不要忘记",[51,73884,73886],{"className":52628,"code":73885,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n    }\n\n    h2 {\n      text-align: center;\n      margin-top: 20px;\n    }\n\n    .info {\n      width: 700px;\n      margin: 10px auto;\n      text-align: center;\n    }\n\n    .uname,\n    .age,\n    .salary {\n      width: 100px;\n      height: 20px;\n      outline: none;\n      margin-right: 15px;\n    }\n\n    .gender,\n    .city {\n      width: 100px;\n      height: 25px;\n      outline: none;\n      margin-right: 15px;\n      border: 1px solid rgb(200, 197, 197);\n    }\n\n    button {\n      height: 25px;\n      width: 75px;\n      background-color: rgb(126, 187, 36);\n      color: #fff;\n      border: 0;\n    }\n\n    button span {\n      display: inline-block;\n      width: 10px;\n      height: 10px;\n      line-height: 11px;\n      border: 1px solid #fff;\n      border-radius: 5px;\n      margin-right: 1px;\n    }\n\n    .total {\n      width: 800px;\n      height: 40px;\n      line-height: 40px;\n      text-align: right;\n      margin: 40px auto 10px;\n      padding-right: 10px;\n      font-size: 13px;\n      background-color: rgb(237, 235, 235);\n      box-sizing: border-box;\n    }\n\n    .total span {\n      color: red;\n    }\n\n    table {\n      width: 800px;\n      margin: auto;\n      border-collapse: collapse;\n    }\n\n    th {\n      background-color: rgb(237, 235, 235);\n    }\n\n    th,\n    td {\n      height: 35px;\n      text-align: left;\n      font-size: 14px;\n      border: 1px solid rgb(228, 225, 225);\n      padding-left: 5px;\n      transition: all linear 0.5s;\n    }\n\n    tbody tr:hover {\n      background-color: rgb(237, 235, 235);\n      cursor: pointer;\n    }\n\n    tbody tr td a {\n      display: block;\n      width: 60px;\n      height: 25px;\n      line-height: 25px;\n      margin-top: 2px;\n      color: #fff;\n      text-align: center;\n      text-decoration: none;\n      background-color: orange;\n      border-radius: 12.5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ch2>学生就业统计表\u003C\u002Fh2>\n  \u003Cform class=\"info\" autocomplete=\"off\">\n    \u003Cinput type=\"text\" name=\"uname\" placeholder=\"姓名\" class=\"uname\">\n    \u003Cinput type=\"text\" name=\"age\" placeholder=\"年龄\" class=\"age\">\n    \u003Cinput type=\"text\" name=\"salary\" placeholder=\"薪资\" class=\"salary\">\n    \u003Cselect name=\"gender\" id=\"\" class=\"gender\">\n      \u003Coption value=\"男\">男\u003C\u002Foption>\n      \u003Coption value=\"女\">女\u003C\u002Foption>\n    \u003C\u002Fselect>\n    \u003Cselect name=\"city\" id=\"\" class=\"city\">\n      \u003Coption value=\"北京\">北京\u003C\u002Foption>\n      \u003Coption value=\"上海\">上海\u003C\u002Foption>\n      \u003Coption value=\"广州\">广州\u003C\u002Foption>\n      \u003Coption value=\"深圳\">深圳\u003C\u002Foption>\n      \u003Coption value=\"曹县\">曹县\u003C\u002Foption>\n    \u003C\u002Fselect>\n    \u003Cbutton>\n      \u003Cspan>+\u003C\u002Fspan>添加\u003C\u002Fbutton>\n  \u003C\u002Fform>\n  \u003Cdiv class=\"total\">共有数据 \u003Cspan>0\u003C\u002Fspan> 条\u003C\u002Fdiv>\n  \u003Ctable>\n    \u003Cthead>\n      \u003Ctr>\n        \u003Cth>ID\u003C\u002Fth>\n        \u003Cth>姓名\u003C\u002Fth>\n        \u003Cth>年龄\u003C\u002Fth>\n        \u003Cth>性别\u003C\u002Fth>\n        \u003Cth>薪资\u003C\u002Fth>\n        \u003Cth>就业城市\u003C\u002Fth>\n        \u003Cth>录入时间\u003C\u002Fth>\n        \u003Cth>操作\u003C\u002Fth>\n      \u003C\u002Ftr>\n    \u003C\u002Fthead>\n    \u003Ctbody>\n      \u003C!-- \u003Ctr>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>\n          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n        \u003C\u002Ftd>\n      \u003C\u002Ftr> -->\n    \u003C\u002Ftbody>\n  \u003C\u002Ftable>\n  \u003Cscript>\n    \u002F\u002F const initData = [{\n    \u002F\u002F   unameId: 1,\n    \u002F\u002F   uname: '华晨宇',\n    \u002F\u002F   age: 22,\n    \u002F\u002F   salary: 12000,\n    \u002F\u002F   gender: '男',\n    \u002F\u002F   city: '北京',\n    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n    \u002F\u002F }]\n    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n    \u002F\u002F 1.渲染业务\n    \u002F\u002F 1.1 先读取本地存储的数据\n    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n\n    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n    const arr = []\n    console.log(arr)\n\n    \u002F\u002F 时间函数\n    function getTime() {\n      const date = new Date()\n      const h = date.getHours() \u003C 10 ? '0' + date.getHours() : date.getHours()\n      const m = date.getMinutes() \u003C 10 ? '0' + date.getMinutes() : date.getMinutes()\n      const s = date.getSeconds() \u003C 10 ? '0' + date.getSeconds() : date.getSeconds()\n      const str = `${date.getFullYear()}\u002F${date.getMonth() + 1}\u002F${date.getDate()} ${h}:${m}:${s}`\n      return str\n    }\n    \u002F\u002F 渲染函数\n    const tbody = document.querySelector('tbody')\n    function render() {\n      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n      const trArr = arr.map(function (ele, index) {\n        return `\n      \u003Ctr>\n        \u003Ctd>${ele.unameId}\u003C\u002Ftd>\n        \u003Ctd>${ele.uname}\u003C\u002Ftd>\n        \u003Ctd>${ele.age}\u003C\u002Ftd>\n        \u003Ctd>${ele.gender}\u003C\u002Ftd>\n        \u003Ctd>${ele.salary}\u003C\u002Ftd>\n        \u003Ctd>${ele.city}\u003C\u002Ftd>\n        \u003Ctd>${ele.time}\u003C\u002Ftd>\n        \u003Ctd>\n          \u003Ca href=\"#\" data-id=\"${index}\">删除\u003C\u002Fa>\n        \u003C\u002Ftd>\n      \u003C\u002Ftr>\n  `\n      })\n      console.log(trArr)\n\n      \u002F\u002F (2) 把数组转换为字符串join\n      \u002F\u002F (3) 把生成的字符串追加给tobody\n      tbody.innerHTML = trArr.join('')\n      \u002F\u002F 显示共有几条\n      document.querySelector('.total span').innerHTML = arr.length\n    }\n    \u002F\u002F render()\n\n    \u002F\u002F 获取DOM对象\n    const info = document.querySelector('.info')\n    const uname = document.querySelector('.uname')\n    const age = document.querySelector('.age')\n    const salary = document.querySelector('.salary')\n    const gender = document.querySelector('.gender')\n    const city = document.querySelector('.city')\n\n    \u002F\u002F form表单注册提交事件，阻止默认行为\n    info.addEventListener('submit', function (e) {\n      \u002F\u002F 禁止浏览器跳转\n      e.preventDefault()\n      \u002F\u002F 非空判断\n      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n      if (!uname.value || !age.value || !salary.value) {\n        return alert('输入内容不能为空')\n      }\n      arr.push({\n        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n        \u002F\u002F 对象的序号应为数组长度+1\n        \u002F\u002F unameId: arr.length + 1,\n\n        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n        \u002F\u002F 0当假看\n        unameId: arr.length ? arr[arr.length - 1].unameId + 1 : 1,\n        uname: uname.value,\n        age: age.value,\n        salary: salary.value,\n        gender: gender.value,\n        city: city.value,\n        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n        \u002F\u002F time: new Date().toDateString()\n        time: getTime()\n      })\n      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n      render()\n      this.reset() \u002F\u002F重置表单\n      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n      localStorage.setItem('data', JSON.stringify(arr))\n    })\n\n    \u002F\u002F 3.删除业务\n    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n    tbody.addEventListener('click', function (e) {\n      \u002F\u002F 判断是否点击的是删除按钮\n      if (e.target.tagName === 'A') {\n        \u002F\u002F alert(1)\n        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n        \u002F\u002F console.log(e.target)\n        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n\n        \u002F\u002F 确认框，确然是否真的要删除\n        \u002F\u002F confirm()为确认框\n        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n        if (confirm('您确定要删除这条数据吗？')) {\n          arr.splice(e.target.dataset.id, 1)\n          \u002F\u002F 3.4 重新渲染页面\n          render()\n          \u002F\u002F 3.5 把最新arr数组存到本地存储\n          localStorage.setItem('data', JSON.stringify(arr))\n        }\n      }\n\n    })\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,73887,73888,73898,73912,73916,73924,73938,73958,73970,73978,73984,73994,74004,74008,74012,74018,74028,74040,74044,74048,74055,74067,74081,74091,74095,74099,74106,74113,74120,74132,74144,74154,74166,74170,74174,74181,74188,74200,74212,74222,74234,74264,74268,74272,74279,74291,74303,74327,74337,74347,74351,74355,74363,74374,74386,74398,74410,74427,74439,74451,74455,74459,74466,74478,74490,74502,74513,74531,74544,74556,74580,74591,74595,74599,74607,74617,74621,74625,74631,74643,74654,74664,74668,74672,74678,74700,74704,74708,74714,74720,74732,74742,74754,74784,74797,74814,74818,74822,74833,74855,74865,74869,74873,74886,74896,74908,74920,74932,74944,74954,74964,74974,74985,74998,75002,75010,75018,75022,75030,75043,75063,75096,75129,75162,75188,75206,75224,75232,75258,75276,75294,75312,75330,75348,75356,75364,75382,75390,75419,75427,75435,75443,75456,75468,75480,75492,75504,75516,75529,75541,75549,75557,75565,75570,75575,75579,75583,75587,75591,75595,75599,75604,75609,75614,75619,75627,75635,75643,75648,75653,75658,75663,75668,75673,75678,75683,75688,75693,75698,75703,75708,75713,75717,75722,75727,75737,75746,75750,75755,75764,75780,75822,75862,75901,75966,75974,75978,75983,76001,76009,76014,76019,76049,76055,76060,76073,76085,76097,76109,76121,76133,76145,76149,76159,76163,76168,76173,76177,76186,76190,76195,76200,76219,76224,76244,76248,76253,76257,76262,76280,76298,76316,76335,76354,76373,76378,76384,76405,76411,76420,76426,76432,76438,76465,76478,76483,76493,76499,76505,76511,76517,76522,76528,76534,76540,76546,76579,76584,76589,76594,76599,76605,76611,76617,76628,76633,76639,76646,76660,76666,76690,76695,76700,76706,76712,76733,76739,76752,76758,76764,76770,76776,76781,76787,76793,76799,76817,76831,76837,76845,76851,76873,76878,76883,76888,76893,76898,76907,76916,76921],{"__ignoreMap":57},[79,73889,73890,73892,73894,73896],{"class":81,"line":82},[79,73891,53292],{"class":228},[79,73893,53295],{"class":232},[79,73895,53298],{"class":85},[79,73897,53301],{"class":228},[79,73899,73900,73902,73904,73906,73908,73910],{"class":81,"line":167},[79,73901,229],{"class":228},[79,73903,52630],{"class":232},[79,73905,53310],{"class":85},[79,73907,239],{"class":228},[79,73909,53315],{"class":89},[79,73911,53301],{"class":228},[79,73913,73914],{"class":81,"line":178},[79,73915,542],{"emptyLinePlaceholder":541},[79,73917,73918,73920,73922],{"class":81,"line":545},[79,73919,229],{"class":228},[79,73921,53328],{"class":232},[79,73923,53301],{"class":228},[79,73925,73926,73928,73930,73932,73934,73936],{"class":81,"line":550},[79,73927,54138],{"class":228},[79,73929,53338],{"class":232},[79,73931,53341],{"class":85},[79,73933,239],{"class":228},[79,73935,53346],{"class":89},[79,73937,53301],{"class":228},[79,73939,73940,73942,73944,73946,73948,73950,73952,73954,73956],{"class":81,"line":562},[79,73941,54138],{"class":228},[79,73943,53338],{"class":232},[79,73945,236],{"class":85},[79,73947,239],{"class":228},[79,73949,53385],{"class":89},[79,73951,53365],{"class":85},[79,73953,239],{"class":228},[79,73955,53392],{"class":89},[79,73957,53301],{"class":228},[79,73959,73960,73962,73964,73966,73968],{"class":81,"line":568},[79,73961,54138],{"class":228},[79,73963,53401],{"class":232},[79,73965,53404],{"class":228},[79,73967,53401],{"class":232},[79,73969,53301],{"class":228},[79,73971,73972,73974,73976],{"class":81,"line":574},[79,73973,54138],{"class":228},[79,73975,2159],{"class":232},[79,73977,53301],{"class":228},[79,73979,73980,73982],{"class":81,"line":579},[79,73981,8470],{"class":232},[79,73983,17604],{"class":228},[79,73985,73986,73988,73990,73992],{"class":81,"line":585},[79,73987,56684],{"class":96},[79,73989,53431],{"class":228},[79,73991,759],{"class":96},[79,73993,3400],{"class":228},[79,73995,73996,73998,74000,74002],{"class":81,"line":591},[79,73997,56695],{"class":96},[79,73999,53431],{"class":228},[79,74001,759],{"class":96},[79,74003,3400],{"class":228},[79,74005,74006],{"class":81,"line":596},[79,74007,4272],{"class":228},[79,74009,74010],{"class":81,"line":602},[79,74011,542],{"emptyLinePlaceholder":541},[79,74013,74014,74016],{"class":81,"line":608},[79,74015,59268],{"class":232},[79,74017,17604],{"class":228},[79,74019,74020,74022,74024,74026],{"class":81,"line":614},[79,74021,59275],{"class":96},[79,74023,53431],{"class":228},[79,74025,53586],{"class":96},[79,74027,3400],{"class":228},[79,74029,74030,74032,74034,74036,74038],{"class":81,"line":619},[79,74031,64065],{"class":96},[79,74033,53431],{"class":228},[79,74035,2940],{"class":96},[79,74037,53486],{"class":448},[79,74039,3400],{"class":228},[79,74041,74042],{"class":81,"line":625},[79,74043,4272],{"class":228},[79,74045,74046],{"class":81,"line":631},[79,74047,542],{"emptyLinePlaceholder":541},[79,74049,74050,74053],{"class":81,"line":637},[79,74051,74052],{"class":85},"    .info",[79,74054,17604],{"class":228},[79,74056,74057,74059,74061,74063,74065],{"class":81,"line":643},[79,74058,56760],{"class":96},[79,74060,53431],{"class":228},[79,74062,53483],{"class":96},[79,74064,53486],{"class":448},[79,74066,3400],{"class":228},[79,74068,74069,74071,74073,74075,74077,74079],{"class":81,"line":649},[79,74070,56695],{"class":96},[79,74072,53431],{"class":228},[79,74074,2689],{"class":96},[79,74076,53486],{"class":448},[79,74078,53550],{"class":96},[79,74080,3400],{"class":228},[79,74082,74083,74085,74087,74089],{"class":81,"line":655},[79,74084,59275],{"class":96},[79,74086,53431],{"class":228},[79,74088,53586],{"class":96},[79,74090,3400],{"class":228},[79,74092,74093],{"class":81,"line":660},[79,74094,4272],{"class":228},[79,74096,74097],{"class":81,"line":666},[79,74098,542],{"emptyLinePlaceholder":541},[79,74100,74101,74104],{"class":81,"line":672},[79,74102,74103],{"class":85},"    .uname",[79,74105,33468],{"class":228},[79,74107,74108,74111],{"class":81,"line":678},[79,74109,74110],{"class":85},"    .age",[79,74112,33468],{"class":228},[79,74114,74115,74118],{"class":81,"line":684},[79,74116,74117],{"class":85},"    .salary",[79,74119,17604],{"class":228},[79,74121,74122,74124,74126,74128,74130],{"class":81,"line":690},[79,74123,56760],{"class":96},[79,74125,53431],{"class":228},[79,74127,2555],{"class":96},[79,74129,53486],{"class":448},[79,74131,3400],{"class":228},[79,74133,74134,74136,74138,74140,74142],{"class":81,"line":695},[79,74135,56774],{"class":96},[79,74137,53431],{"class":228},[79,74139,2940],{"class":96},[79,74141,53486],{"class":448},[79,74143,3400],{"class":228},[79,74145,74146,74148,74150,74152],{"class":81,"line":700},[79,74147,63769],{"class":96},[79,74149,53431],{"class":228},[79,74151,56726],{"class":96},[79,74153,3400],{"class":228},[79,74155,74156,74158,74160,74162,74164],{"class":81,"line":712},[79,74157,63739],{"class":96},[79,74159,53431],{"class":228},[79,74161,2815],{"class":96},[79,74163,53486],{"class":448},[79,74165,3400],{"class":228},[79,74167,74168],{"class":81,"line":721},[79,74169,4272],{"class":228},[79,74171,74172],{"class":81,"line":726},[79,74173,542],{"emptyLinePlaceholder":541},[79,74175,74176,74179],{"class":81,"line":731},[79,74177,74178],{"class":85},"    .gender",[79,74180,33468],{"class":228},[79,74182,74183,74186],{"class":81,"line":748},[79,74184,74185],{"class":85},"    .city",[79,74187,17604],{"class":228},[79,74189,74190,74192,74194,74196,74198],{"class":81,"line":765},[79,74191,56760],{"class":96},[79,74193,53431],{"class":228},[79,74195,2555],{"class":96},[79,74197,53486],{"class":448},[79,74199,3400],{"class":228},[79,74201,74202,74204,74206,74208,74210],{"class":81,"line":780},[79,74203,56774],{"class":96},[79,74205,53431],{"class":228},[79,74207,3065],{"class":96},[79,74209,53486],{"class":448},[79,74211,3400],{"class":228},[79,74213,74214,74216,74218,74220],{"class":81,"line":811},[79,74215,63769],{"class":96},[79,74217,53431],{"class":228},[79,74219,56726],{"class":96},[79,74221,3400],{"class":228},[79,74223,74224,74226,74228,74230,74232],{"class":81,"line":816},[79,74225,63739],{"class":96},[79,74227,53431],{"class":228},[79,74229,2815],{"class":96},[79,74231,53486],{"class":448},[79,74233,3400],{"class":228},[79,74235,74236,74238,74240,74242,74244,74246,74249,74251,74253,74255,74258,74260,74262],{"class":81,"line":821},[79,74237,63965],{"class":96},[79,74239,53431],{"class":228},[79,74241,775],{"class":96},[79,74243,53486],{"class":448},[79,74245,53515],{"class":96},[79,74247,74248],{"class":96}," rgb",[79,74250,455],{"class":228},[79,74252,3817],{"class":96},[79,74254,1020],{"class":228},[79,74256,74257],{"class":96},"197",[79,74259,1020],{"class":228},[79,74261,74257],{"class":96},[79,74263,4795],{"class":228},[79,74265,74266],{"class":81,"line":837},[79,74267,4272],{"class":228},[79,74269,74270],{"class":81,"line":853},[79,74271,542],{"emptyLinePlaceholder":541},[79,74273,74274,74277],{"class":81,"line":864},[79,74275,74276],{"class":232},"    button",[79,74278,17604],{"class":228},[79,74280,74281,74283,74285,74287,74289],{"class":81,"line":869},[79,74282,56774],{"class":96},[79,74284,53431],{"class":228},[79,74286,3065],{"class":96},[79,74288,53486],{"class":448},[79,74290,3400],{"class":228},[79,74292,74293,74295,74297,74299,74301],{"class":81,"line":885},[79,74294,56760],{"class":96},[79,74296,53431],{"class":228},[79,74298,2725],{"class":96},[79,74300,53486],{"class":448},[79,74302,3400],{"class":228},[79,74304,74305,74307,74309,74312,74314,74316,74318,74321,74323,74325],{"class":81,"line":891},[79,74306,56873],{"class":96},[79,74308,53431],{"class":228},[79,74310,74311],{"class":96},"rgb",[79,74313,455],{"class":228},[79,74315,3208],{"class":96},[79,74317,1020],{"class":228},[79,74319,74320],{"class":96},"187",[79,74322,1020],{"class":228},[79,74324,2543],{"class":96},[79,74326,4795],{"class":228},[79,74328,74329,74331,74333,74335],{"class":81,"line":896},[79,74330,59405],{"class":96},[79,74332,53431],{"class":228},[79,74334,62831],{"class":96},[79,74336,3400],{"class":228},[79,74338,74339,74341,74343,74345],{"class":81,"line":907},[79,74340,63965],{"class":96},[79,74342,53431],{"class":228},[79,74344,759],{"class":96},[79,74346,3400],{"class":228},[79,74348,74349],{"class":81,"line":912},[79,74350,4272],{"class":228},[79,74352,74353],{"class":81,"line":935},[79,74354,542],{"emptyLinePlaceholder":541},[79,74356,74357,74359,74361],{"class":81,"line":946},[79,74358,74276],{"class":232},[79,74360,53682],{"class":232},[79,74362,17604],{"class":228},[79,74364,74365,74367,74369,74372],{"class":81,"line":960},[79,74366,56998],{"class":96},[79,74368,53431],{"class":228},[79,74370,74371],{"class":96},"inline-block",[79,74373,3400],{"class":228},[79,74375,74376,74378,74380,74382,74384],{"class":81,"line":975},[79,74377,56760],{"class":96},[79,74379,53431],{"class":228},[79,74381,2689],{"class":96},[79,74383,53486],{"class":448},[79,74385,3400],{"class":228},[79,74387,74388,74390,74392,74394,74396],{"class":81,"line":980},[79,74389,56774],{"class":96},[79,74391,53431],{"class":228},[79,74393,2689],{"class":96},[79,74395,53486],{"class":448},[79,74397,3400],{"class":228},[79,74399,74400,74402,74404,74406,74408],{"class":81,"line":1006},[79,74401,59348],{"class":96},[79,74403,53431],{"class":228},[79,74405,2714],{"class":96},[79,74407,53486],{"class":448},[79,74409,3400],{"class":228},[79,74411,74412,74414,74416,74418,74420,74422,74425],{"class":81,"line":1027},[79,74413,63965],{"class":96},[79,74415,53431],{"class":228},[79,74417,775],{"class":96},[79,74419,53486],{"class":448},[79,74421,53515],{"class":96},[79,74423,74424],{"class":96}," #fff",[79,74426,3400],{"class":228},[79,74428,74429,74431,74433,74435,74437],{"class":81,"line":1032},[79,74430,57123],{"class":96},[79,74432,53431],{"class":228},[79,74434,2563],{"class":96},[79,74436,53486],{"class":448},[79,74438,3400],{"class":228},[79,74440,74441,74443,74445,74447,74449],{"class":81,"line":1047},[79,74442,63739],{"class":96},[79,74444,53431],{"class":228},[79,74446,775],{"class":96},[79,74448,53486],{"class":448},[79,74450,3400],{"class":228},[79,74452,74453],{"class":81,"line":1053},[79,74454,4272],{"class":228},[79,74456,74457],{"class":81,"line":1058},[79,74458,542],{"emptyLinePlaceholder":541},[79,74460,74461,74464],{"class":81,"line":1069},[79,74462,74463],{"class":85},"    .total",[79,74465,17604],{"class":228},[79,74467,74468,74470,74472,74474,74476],{"class":81,"line":1081},[79,74469,56760],{"class":96},[79,74471,53431],{"class":228},[79,74473,63618],{"class":96},[79,74475,53486],{"class":448},[79,74477,3400],{"class":228},[79,74479,74480,74482,74484,74486,74488],{"class":81,"line":1086},[79,74481,56774],{"class":96},[79,74483,53431],{"class":228},[79,74485,2644],{"class":96},[79,74487,53486],{"class":448},[79,74489,3400],{"class":228},[79,74491,74492,74494,74496,74498,74500],{"class":81,"line":1108},[79,74493,59348],{"class":96},[79,74495,53431],{"class":228},[79,74497,2644],{"class":96},[79,74499,53486],{"class":448},[79,74501,3400],{"class":228},[79,74503,74504,74506,74508,74511],{"class":81,"line":1153},[79,74505,59275],{"class":96},[79,74507,53431],{"class":228},[79,74509,74510],{"class":96},"right",[79,74512,3400],{"class":228},[79,74514,74515,74517,74519,74521,74523,74525,74527,74529],{"class":81,"line":1158},[79,74516,56695],{"class":96},[79,74518,53431],{"class":228},[79,74520,2644],{"class":96},[79,74522,53486],{"class":448},[79,74524,53550],{"class":96},[79,74526,4123],{"class":96},[79,74528,53486],{"class":448},[79,74530,3400],{"class":228},[79,74532,74533,74536,74538,74540,74542],{"class":81,"line":1180},[79,74534,74535],{"class":96},"      padding-right",[79,74537,53431],{"class":228},[79,74539,2689],{"class":96},[79,74541,53486],{"class":448},[79,74543,3400],{"class":228},[79,74545,74546,74548,74550,74552,74554],{"class":81,"line":1197},[79,74547,56911],{"class":96},[79,74549,53431],{"class":228},[79,74551,2764],{"class":96},[79,74553,53486],{"class":448},[79,74555,3400],{"class":228},[79,74557,74558,74560,74562,74564,74566,74569,74571,74574,74576,74578],{"class":81,"line":1202},[79,74559,56873],{"class":96},[79,74561,53431],{"class":228},[79,74563,74311],{"class":96},[79,74565,455],{"class":228},[79,74567,74568],{"class":96},"237",[79,74570,1020],{"class":228},[79,74572,74573],{"class":96},"235",[79,74575,1020],{"class":228},[79,74577,74573],{"class":96},[79,74579,4795],{"class":228},[79,74581,74582,74585,74587,74589],{"class":81,"line":1207},[79,74583,74584],{"class":96},"      box-sizing",[79,74586,53431],{"class":228},[79,74588,62494],{"class":96},[79,74590,3400],{"class":228},[79,74592,74593],{"class":81,"line":1223},[79,74594,4272],{"class":228},[79,74596,74597],{"class":81,"line":18722},[79,74598,542],{"emptyLinePlaceholder":541},[79,74600,74601,74603,74605],{"class":81,"line":18728},[79,74602,74463],{"class":85},[79,74604,53682],{"class":232},[79,74606,17604],{"class":228},[79,74608,74609,74611,74613,74615],{"class":81,"line":18739},[79,74610,59405],{"class":96},[79,74612,53431],{"class":228},[79,74614,59410],{"class":96},[79,74616,3400],{"class":228},[79,74618,74619],{"class":81,"line":18762},[79,74620,4272],{"class":228},[79,74622,74623],{"class":81,"line":18784},[79,74624,542],{"emptyLinePlaceholder":541},[79,74626,74627,74629],{"class":81,"line":18789},[79,74628,67011],{"class":232},[79,74630,17604],{"class":228},[79,74632,74633,74635,74637,74639,74641],{"class":81,"line":18795},[79,74634,56760],{"class":96},[79,74636,53431],{"class":228},[79,74638,63618],{"class":96},[79,74640,53486],{"class":448},[79,74642,3400],{"class":228},[79,74644,74645,74647,74649,74652],{"class":81,"line":18809},[79,74646,56695],{"class":96},[79,74648,53431],{"class":228},[79,74650,74651],{"class":96},"auto",[79,74653,3400],{"class":228},[79,74655,74656,74658,74660,74662],{"class":81,"line":18822},[79,74657,67018],{"class":96},[79,74659,53431],{"class":228},[79,74661,67023],{"class":96},[79,74663,3400],{"class":228},[79,74665,74666],{"class":81,"line":18827},[79,74667,4272],{"class":228},[79,74669,74670],{"class":81,"line":18841},[79,74671,542],{"emptyLinePlaceholder":541},[79,74673,74674,74676],{"class":81,"line":18846},[79,74675,67103],{"class":232},[79,74677,17604],{"class":228},[79,74679,74680,74682,74684,74686,74688,74690,74692,74694,74696,74698],{"class":81,"line":18852},[79,74681,56873],{"class":96},[79,74683,53431],{"class":228},[79,74685,74311],{"class":96},[79,74687,455],{"class":228},[79,74689,74568],{"class":96},[79,74691,1020],{"class":228},[79,74693,74573],{"class":96},[79,74695,1020],{"class":228},[79,74697,74573],{"class":96},[79,74699,4795],{"class":228},[79,74701,74702],{"class":81,"line":18857},[79,74703,4272],{"class":228},[79,74705,74706],{"class":81,"line":18871},[79,74707,542],{"emptyLinePlaceholder":541},[79,74709,74710,74712],{"class":81,"line":18876},[79,74711,67103],{"class":232},[79,74713,33468],{"class":228},[79,74715,74716,74718],{"class":81,"line":18881},[79,74717,67169],{"class":232},[79,74719,17604],{"class":228},[79,74721,74722,74724,74726,74728,74730],{"class":81,"line":18895},[79,74723,56774],{"class":96},[79,74725,53431],{"class":228},[79,74727,2517],{"class":96},[79,74729,53486],{"class":448},[79,74731,3400],{"class":228},[79,74733,74734,74736,74738,74740],{"class":81,"line":18907},[79,74735,59275],{"class":96},[79,74737,53431],{"class":228},[79,74739,358],{"class":96},[79,74741,3400],{"class":228},[79,74743,74744,74746,74748,74750,74752],{"class":81,"line":18912},[79,74745,56911],{"class":96},[79,74747,53431],{"class":228},[79,74749,2789],{"class":96},[79,74751,53486],{"class":448},[79,74753,3400],{"class":228},[79,74755,74756,74758,74760,74762,74764,74766,74768,74770,74773,74775,74778,74780,74782],{"class":81,"line":18925},[79,74757,63965],{"class":96},[79,74759,53431],{"class":228},[79,74761,775],{"class":96},[79,74763,53486],{"class":448},[79,74765,53515],{"class":96},[79,74767,74248],{"class":96},[79,74769,455],{"class":228},[79,74771,74772],{"class":96},"228",[79,74774,1020],{"class":228},[79,74776,74777],{"class":96},"225",[79,74779,1020],{"class":228},[79,74781,74777],{"class":96},[79,74783,4795],{"class":228},[79,74785,74786,74789,74791,74793,74795],{"class":81,"line":18930},[79,74787,74788],{"class":96},"      padding-left",[79,74790,53431],{"class":228},[79,74792,2563],{"class":96},[79,74794,53486],{"class":448},[79,74796,3400],{"class":228},[79,74798,74799,74801,74803,74805,74808,74810,74812],{"class":81,"line":18935},[79,74800,63849],{"class":96},[79,74802,53431],{"class":228},[79,74804,30137],{"class":96},[79,74806,74807],{"class":96}," linear",[79,74809,998],{"class":96},[79,74811,2935],{"class":448},[79,74813,3400],{"class":228},[79,74815,74816],{"class":81,"line":18940},[79,74817,4272],{"class":228},[79,74819,74820],{"class":81,"line":18953},[79,74821,542],{"emptyLinePlaceholder":541},[79,74823,74824,74827,74829,74831],{"class":81,"line":18958},[79,74825,74826],{"class":232},"    tbody",[79,74828,72132],{"class":232},[79,74830,62929],{"class":85},[79,74832,17604],{"class":228},[79,74834,74835,74837,74839,74841,74843,74845,74847,74849,74851,74853],{"class":81,"line":34631},[79,74836,56873],{"class":96},[79,74838,53431],{"class":228},[79,74840,74311],{"class":96},[79,74842,455],{"class":228},[79,74844,74568],{"class":96},[79,74846,1020],{"class":228},[79,74848,74573],{"class":96},[79,74850,1020],{"class":228},[79,74852,74573],{"class":96},[79,74854,4795],{"class":228},[79,74856,74857,74859,74861,74863],{"class":81,"line":34637},[79,74858,64013],{"class":96},[79,74860,53431],{"class":228},[79,74862,64018],{"class":96},[79,74864,3400],{"class":228},[79,74866,74867],{"class":81,"line":34643},[79,74868,4272],{"class":228},[79,74870,74871],{"class":81,"line":34649},[79,74872,542],{"emptyLinePlaceholder":541},[79,74874,74875,74877,74879,74882,74884],{"class":81,"line":34655},[79,74876,74826],{"class":232},[79,74878,72132],{"class":232},[79,74880,74881],{"class":232}," td",[79,74883,3505],{"class":232},[79,74885,17604],{"class":228},[79,74887,74888,74890,74892,74894],{"class":81,"line":34666},[79,74889,56998],{"class":96},[79,74891,53431],{"class":228},[79,74893,62858],{"class":96},[79,74895,3400],{"class":228},[79,74897,74898,74900,74902,74904,74906],{"class":81,"line":34672},[79,74899,56760],{"class":96},[79,74901,53431],{"class":228},[79,74903,3147],{"class":96},[79,74905,53486],{"class":448},[79,74907,3400],{"class":228},[79,74909,74910,74912,74914,74916,74918],{"class":81,"line":34692},[79,74911,56774],{"class":96},[79,74913,53431],{"class":228},[79,74915,3065],{"class":96},[79,74917,53486],{"class":448},[79,74919,3400],{"class":228},[79,74921,74922,74924,74926,74928,74930],{"class":81,"line":34698},[79,74923,59348],{"class":96},[79,74925,53431],{"class":228},[79,74927,3065],{"class":96},[79,74929,53486],{"class":448},[79,74931,3400],{"class":228},[79,74933,74934,74936,74938,74940,74942],{"class":81,"line":34709},[79,74935,64065],{"class":96},[79,74937,53431],{"class":228},[79,74939,2331],{"class":96},[79,74941,53486],{"class":448},[79,74943,3400],{"class":228},[79,74945,74946,74948,74950,74952],{"class":81,"line":34715},[79,74947,59405],{"class":96},[79,74949,53431],{"class":228},[79,74951,62831],{"class":96},[79,74953,3400],{"class":228},[79,74955,74956,74958,74960,74962],{"class":81,"line":34721},[79,74957,59275],{"class":96},[79,74959,53431],{"class":228},[79,74961,53586],{"class":96},[79,74963,3400],{"class":228},[79,74965,74966,74968,74970,74972],{"class":81,"line":34727},[79,74967,65958],{"class":96},[79,74969,53431],{"class":228},[79,74971,56726],{"class":96},[79,74973,3400],{"class":228},[79,74975,74976,74978,74980,74983],{"class":81,"line":34733},[79,74977,56873],{"class":96},[79,74979,53431],{"class":228},[79,74981,74982],{"class":96},"orange",[79,74984,3400],{"class":228},[79,74986,74987,74989,74991,74994,74996],{"class":81,"line":34739},[79,74988,57123],{"class":96},[79,74990,53431],{"class":228},[79,74992,74993],{"class":96},"12.5",[79,74995,53486],{"class":448},[79,74997,3400],{"class":228},[79,74999,75000],{"class":81,"line":34745},[79,75001,4272],{"class":228},[79,75003,75004,75006,75008],{"class":81,"line":34751},[79,75005,54410],{"class":228},[79,75007,2159],{"class":232},[79,75009,53301],{"class":228},[79,75011,75012,75014,75016],{"class":81,"line":34771},[79,75013,53779],{"class":228},[79,75015,53328],{"class":232},[79,75017,53301],{"class":228},[79,75019,75020],{"class":81,"line":34777},[79,75021,542],{"emptyLinePlaceholder":541},[79,75023,75024,75026,75028],{"class":81,"line":34793},[79,75025,229],{"class":228},[79,75027,53794],{"class":232},[79,75029,53301],{"class":228},[79,75031,75032,75034,75036,75039,75041],{"class":81,"line":34799},[79,75033,54138],{"class":228},[79,75035,14],{"class":232},[79,75037,75038],{"class":228},">学生就业统计表\u003C\u002F",[79,75040,14],{"class":232},[79,75042,53301],{"class":228},[79,75044,75045,75047,75049,75051,75053,75055,75057,75059,75061],{"class":81,"line":34813},[79,75046,54138],{"class":228},[79,75048,68613],{"class":232},[79,75050,55477],{"class":85},[79,75052,239],{"class":228},[79,75054,64652],{"class":89},[79,75056,71058],{"class":85},[79,75058,239],{"class":228},[79,75060,33777],{"class":89},[79,75062,53301],{"class":228},[79,75064,75065,75067,75069,75071,75073,75075,75077,75079,75081,75083,75085,75088,75090,75092,75094],{"class":81,"line":34819},[79,75066,53335],{"class":228},[79,75068,55812],{"class":232},[79,75070,245],{"class":85},[79,75072,239],{"class":228},[79,75074,64687],{"class":89},[79,75076,236],{"class":85},[79,75078,239],{"class":228},[79,75080,71084],{"class":89},[79,75082,63009],{"class":85},[79,75084,239],{"class":228},[79,75086,75087],{"class":89},"\"姓名\"",[79,75089,55477],{"class":85},[79,75091,239],{"class":228},[79,75093,71084],{"class":89},[79,75095,53301],{"class":228},[79,75097,75098,75100,75102,75104,75106,75108,75110,75112,75114,75116,75118,75121,75123,75125,75127],{"class":81,"line":34834},[79,75099,53335],{"class":228},[79,75101,55812],{"class":232},[79,75103,245],{"class":85},[79,75105,239],{"class":228},[79,75107,64687],{"class":89},[79,75109,236],{"class":85},[79,75111,239],{"class":228},[79,75113,71112],{"class":89},[79,75115,63009],{"class":85},[79,75117,239],{"class":228},[79,75119,75120],{"class":89},"\"年龄\"",[79,75122,55477],{"class":85},[79,75124,239],{"class":228},[79,75126,71112],{"class":89},[79,75128,53301],{"class":228},[79,75130,75131,75133,75135,75137,75139,75141,75143,75145,75147,75149,75151,75154,75156,75158,75160],{"class":81,"line":34840},[79,75132,53335],{"class":228},[79,75134,55812],{"class":232},[79,75136,245],{"class":85},[79,75138,239],{"class":228},[79,75140,64687],{"class":89},[79,75142,236],{"class":85},[79,75144,239],{"class":228},[79,75146,71214],{"class":89},[79,75148,63009],{"class":85},[79,75150,239],{"class":228},[79,75152,75153],{"class":89},"\"薪资\"",[79,75155,55477],{"class":85},[79,75157,239],{"class":228},[79,75159,71214],{"class":89},[79,75161,53301],{"class":228},[79,75163,75164,75166,75168,75170,75172,75174,75176,75178,75180,75182,75184,75186],{"class":81,"line":34849},[79,75165,53335],{"class":228},[79,75167,71132],{"class":232},[79,75169,236],{"class":85},[79,75171,239],{"class":228},[79,75173,71139],{"class":89},[79,75175,16991],{"class":85},[79,75177,239],{"class":228},[79,75179,9717],{"class":89},[79,75181,55477],{"class":85},[79,75183,239],{"class":228},[79,75185,71139],{"class":89},[79,75187,53301],{"class":228},[79,75189,75190,75192,75194,75196,75198,75200,75202,75204],{"class":81,"line":34855},[79,75191,57223],{"class":228},[79,75193,71154],{"class":232},[79,75195,68639],{"class":85},[79,75197,239],{"class":228},[79,75199,11996],{"class":89},[79,75201,71163],{"class":228},[79,75203,71154],{"class":232},[79,75205,53301],{"class":228},[79,75207,75208,75210,75212,75214,75216,75218,75220,75222],{"class":81,"line":34864},[79,75209,57223],{"class":228},[79,75211,71154],{"class":232},[79,75213,68639],{"class":85},[79,75215,239],{"class":228},[79,75217,12065],{"class":89},[79,75219,71182],{"class":228},[79,75221,71154],{"class":232},[79,75223,53301],{"class":228},[79,75225,75226,75228,75230],{"class":81,"line":34870},[79,75227,53770],{"class":228},[79,75229,71132],{"class":232},[79,75231,53301],{"class":228},[79,75233,75234,75236,75238,75240,75242,75244,75246,75248,75250,75252,75254,75256],{"class":81,"line":34876},[79,75235,53335],{"class":228},[79,75237,71132],{"class":232},[79,75239,236],{"class":85},[79,75241,239],{"class":228},[79,75243,71236],{"class":89},[79,75245,16991],{"class":85},[79,75247,239],{"class":228},[79,75249,9717],{"class":89},[79,75251,55477],{"class":85},[79,75253,239],{"class":228},[79,75255,71236],{"class":89},[79,75257,53301],{"class":228},[79,75259,75260,75262,75264,75266,75268,75270,75272,75274],{"class":81,"line":34885},[79,75261,57223],{"class":228},[79,75263,71154],{"class":232},[79,75265,68639],{"class":85},[79,75267,239],{"class":228},[79,75269,71257],{"class":89},[79,75271,71260],{"class":228},[79,75273,71154],{"class":232},[79,75275,53301],{"class":228},[79,75277,75278,75280,75282,75284,75286,75288,75290,75292],{"class":81,"line":34891},[79,75279,57223],{"class":228},[79,75281,71154],{"class":232},[79,75283,68639],{"class":85},[79,75285,239],{"class":228},[79,75287,71277],{"class":89},[79,75289,71280],{"class":228},[79,75291,71154],{"class":232},[79,75293,53301],{"class":228},[79,75295,75296,75298,75300,75302,75304,75306,75308,75310],{"class":81,"line":34902},[79,75297,57223],{"class":228},[79,75299,71154],{"class":232},[79,75301,68639],{"class":85},[79,75303,239],{"class":228},[79,75305,71297],{"class":89},[79,75307,71300],{"class":228},[79,75309,71154],{"class":232},[79,75311,53301],{"class":228},[79,75313,75314,75316,75318,75320,75322,75324,75326,75328],{"class":81,"line":34908},[79,75315,57223],{"class":228},[79,75317,71154],{"class":232},[79,75319,68639],{"class":85},[79,75321,239],{"class":228},[79,75323,71317],{"class":89},[79,75325,71320],{"class":228},[79,75327,71154],{"class":232},[79,75329,53301],{"class":228},[79,75331,75332,75334,75336,75338,75340,75342,75344,75346],{"class":81,"line":34927},[79,75333,57223],{"class":228},[79,75335,71154],{"class":232},[79,75337,68639],{"class":85},[79,75339,239],{"class":228},[79,75341,71337],{"class":89},[79,75343,71340],{"class":228},[79,75345,71154],{"class":232},[79,75347,53301],{"class":228},[79,75349,75350,75352,75354],{"class":81,"line":34933},[79,75351,53770],{"class":228},[79,75353,71132],{"class":232},[79,75355,53301],{"class":228},[79,75357,75358,75360,75362],{"class":81,"line":34944},[79,75359,53335],{"class":228},[79,75361,55877],{"class":232},[79,75363,53301],{"class":228},[79,75365,75366,75368,75370,75373,75375,75378,75380],{"class":81,"line":34950},[79,75367,57223],{"class":228},[79,75369,79],{"class":232},[79,75371,75372],{"class":228},">+\u003C\u002F",[79,75374,79],{"class":232},[79,75376,75377],{"class":228},">添加\u003C\u002F",[79,75379,55877],{"class":232},[79,75381,53301],{"class":228},[79,75383,75384,75386,75388],{"class":81,"line":34970},[79,75385,54410],{"class":228},[79,75387,68613],{"class":232},[79,75389,53301],{"class":228},[79,75391,75392,75394,75396,75398,75400,75402,75405,75407,75410,75412,75415,75417],{"class":81,"line":34986},[79,75393,54138],{"class":228},[79,75395,53605],{"class":232},[79,75397,55477],{"class":85},[79,75399,239],{"class":228},[79,75401,64568],{"class":89},[79,75403,75404],{"class":228},">共有数据 \u003C",[79,75406,79],{"class":232},[79,75408,75409],{"class":228},">0\u003C\u002F",[79,75411,79],{"class":232},[79,75413,75414],{"class":228},"> 条\u003C\u002F",[79,75416,53605],{"class":232},[79,75418,53301],{"class":228},[79,75420,75421,75423,75425],{"class":81,"line":34992},[79,75422,54138],{"class":228},[79,75424,347],{"class":232},[79,75426,53301],{"class":228},[79,75428,75429,75431,75433],{"class":81,"line":35006},[79,75430,53335],{"class":228},[79,75432,350],{"class":232},[79,75434,53301],{"class":228},[79,75436,75437,75439,75441],{"class":81,"line":35012},[79,75438,57223],{"class":228},[79,75440,353],{"class":232},[79,75442,53301],{"class":228},[79,75444,75445,75447,75449,75452,75454],{"class":81,"line":35018},[79,75446,57291],{"class":228},[79,75448,356],{"class":232},[79,75450,75451],{"class":228},">ID\u003C\u002F",[79,75453,356],{"class":232},[79,75455,53301],{"class":228},[79,75457,75458,75460,75462,75464,75466],{"class":81,"line":35029},[79,75459,57291],{"class":228},[79,75461,356],{"class":232},[79,75463,71443],{"class":228},[79,75465,356],{"class":232},[79,75467,53301],{"class":228},[79,75469,75470,75472,75474,75476,75478],{"class":81,"line":35035},[79,75471,57291],{"class":228},[79,75473,356],{"class":232},[79,75475,71456],{"class":228},[79,75477,356],{"class":232},[79,75479,53301],{"class":228},[79,75481,75482,75484,75486,75488,75490],{"class":81,"line":35041},[79,75483,57291],{"class":228},[79,75485,356],{"class":232},[79,75487,71469],{"class":228},[79,75489,356],{"class":232},[79,75491,53301],{"class":228},[79,75493,75494,75496,75498,75500,75502],{"class":81,"line":35051},[79,75495,57291],{"class":228},[79,75497,356],{"class":232},[79,75499,71482],{"class":228},[79,75501,356],{"class":232},[79,75503,53301],{"class":228},[79,75505,75506,75508,75510,75512,75514],{"class":81,"line":35057},[79,75507,57291],{"class":228},[79,75509,356],{"class":232},[79,75511,71495],{"class":228},[79,75513,356],{"class":232},[79,75515,53301],{"class":228},[79,75517,75518,75520,75522,75525,75527],{"class":81,"line":35068},[79,75519,57291],{"class":228},[79,75521,356],{"class":232},[79,75523,75524],{"class":228},">录入时间\u003C\u002F",[79,75526,356],{"class":232},[79,75528,53301],{"class":228},[79,75530,75531,75533,75535,75537,75539],{"class":81,"line":35074},[79,75532,57291],{"class":228},[79,75534,356],{"class":232},[79,75536,71508],{"class":228},[79,75538,356],{"class":232},[79,75540,53301],{"class":228},[79,75542,75543,75545,75547],{"class":81,"line":35084},[79,75544,57396],{"class":228},[79,75546,353],{"class":232},[79,75548,53301],{"class":228},[79,75550,75551,75553,75555],{"class":81,"line":35089},[79,75552,53770],{"class":228},[79,75554,350],{"class":232},[79,75556,53301],{"class":228},[79,75558,75559,75561,75563],{"class":81,"line":35095},[79,75560,53335],{"class":228},[79,75562,367],{"class":232},[79,75564,53301],{"class":228},[79,75566,75567],{"class":81,"line":35144},[79,75568,75569],{"class":2313},"      \u003C!-- \u003Ctr>\n",[79,75571,75572],{"class":81,"line":35191},[79,75573,75574],{"class":2313},"        \u003Ctd>1\u003C\u002Ftd>\n",[79,75576,75577],{"class":81,"line":35196},[79,75578,75574],{"class":2313},[79,75580,75581],{"class":81,"line":35202},[79,75582,75574],{"class":2313},[79,75584,75585],{"class":81,"line":35221},[79,75586,75574],{"class":2313},[79,75588,75589],{"class":81,"line":35227},[79,75590,75574],{"class":2313},[79,75592,75593],{"class":81,"line":35246},[79,75594,75574],{"class":2313},[79,75596,75597],{"class":81,"line":35252},[79,75598,75574],{"class":2313},[79,75600,75601],{"class":81,"line":35258},[79,75602,75603],{"class":2313},"        \u003Ctd>\n",[79,75605,75606],{"class":81,"line":35268},[79,75607,75608],{"class":2313},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[79,75610,75611],{"class":81,"line":35273},[79,75612,75613],{"class":2313},"        \u003C\u002Ftd>\n",[79,75615,75616],{"class":81,"line":35279},[79,75617,75618],{"class":2313},"      \u003C\u002Ftr> -->\n",[79,75620,75621,75623,75625],{"class":81,"line":35295},[79,75622,53770],{"class":228},[79,75624,367],{"class":232},[79,75626,53301],{"class":228},[79,75628,75629,75631,75633],{"class":81,"line":35340},[79,75630,54410],{"class":228},[79,75632,347],{"class":232},[79,75634,53301],{"class":228},[79,75636,75637,75639,75641],{"class":81,"line":35346},[79,75638,54138],{"class":228},[79,75640,53807],{"class":232},[79,75642,53301],{"class":228},[79,75644,75645],{"class":81,"line":35352},[79,75646,75647],{"class":2313},"    \u002F\u002F const initData = [{\n",[79,75649,75650],{"class":81,"line":35358},[79,75651,75652],{"class":2313},"    \u002F\u002F   unameId: 1,\n",[79,75654,75655],{"class":81,"line":35369},[79,75656,75657],{"class":2313},"    \u002F\u002F   uname: '华晨宇',\n",[79,75659,75660],{"class":81,"line":35375},[79,75661,75662],{"class":2313},"    \u002F\u002F   age: 22,\n",[79,75664,75665],{"class":81,"line":35381},[79,75666,75667],{"class":2313},"    \u002F\u002F   salary: 12000,\n",[79,75669,75670],{"class":81,"line":35387},[79,75671,75672],{"class":2313},"    \u002F\u002F   gender: '男',\n",[79,75674,75675],{"class":81,"line":35405},[79,75676,75677],{"class":2313},"    \u002F\u002F   city: '北京',\n",[79,75679,75680],{"class":81,"line":35419},[79,75681,75682],{"class":2313},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[79,75684,75685],{"class":81,"line":35428},[79,75686,75687],{"class":2313},"    \u002F\u002F }]\n",[79,75689,75690],{"class":81,"line":35437},[79,75691,75692],{"class":2313},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[79,75694,75695],{"class":81,"line":35446},[79,75696,75697],{"class":2313},"    \u002F\u002F 1.渲染业务\n",[79,75699,75700],{"class":81,"line":35455},[79,75701,75702],{"class":2313},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[79,75704,75705],{"class":81,"line":35461},[79,75706,75707],{"class":2313},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[79,75709,75710],{"class":81,"line":35467},[79,75711,75712],{"class":2313},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[79,75714,75715],{"class":81,"line":35475},[79,75716,542],{"emptyLinePlaceholder":541},[79,75718,75719],{"class":81,"line":35480},[79,75720,75721],{"class":2313},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[79,75723,75724],{"class":81,"line":35486},[79,75725,75726],{"class":2313},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[79,75728,75729,75731,75733,75735],{"class":81,"line":35497},[79,75730,13256],{"class":448},[79,75732,59684],{"class":96},[79,75734,556],{"class":448},[79,75736,53832],{"class":228},[79,75738,75739,75742,75744],{"class":81,"line":35503},[79,75740,75741],{"class":228},"    console.",[79,75743,60236],{"class":85},[79,75745,54405],{"class":228},[79,75747,75748],{"class":81,"line":35523},[79,75749,542],{"emptyLinePlaceholder":541},[79,75751,75752],{"class":81,"line":35529},[79,75753,75754],{"class":2313},"    \u002F\u002F 时间函数\n",[79,75756,75757,75759,75762],{"class":81,"line":35535},[79,75758,72072],{"class":448},[79,75760,75761],{"class":85}," getTime",[79,75763,12888],{"class":228},[79,75765,75766,75768,75771,75773,75775,75778],{"class":81,"line":35541},[79,75767,60217],{"class":448},[79,75769,75770],{"class":96}," date",[79,75772,556],{"class":448},[79,75774,13613],{"class":448},[79,75776,75777],{"class":85}," Date",[79,75779,4061],{"class":228},[79,75781,75782,75784,75786,75788,75791,75794,75796,75798,75800,75803,75806,75808,75810,75812,75814,75816,75818,75820],{"class":81,"line":35558},[79,75783,60217],{"class":448},[79,75785,18123],{"class":96},[79,75787,556],{"class":448},[79,75789,75790],{"class":228}," date.",[79,75792,75793],{"class":85},"getHours",[79,75795,15084],{"class":228},[79,75797,229],{"class":448},[79,75799,4123],{"class":96},[79,75801,75802],{"class":448}," ?",[79,75804,75805],{"class":89}," '0'",[79,75807,47561],{"class":448},[79,75809,75790],{"class":228},[79,75811,75793],{"class":85},[79,75813,15084],{"class":228},[79,75815,3099],{"class":448},[79,75817,75790],{"class":228},[79,75819,75793],{"class":85},[79,75821,4061],{"class":228},[79,75823,75824,75826,75829,75831,75833,75836,75838,75840,75842,75844,75846,75848,75850,75852,75854,75856,75858,75860],{"class":81,"line":35564},[79,75825,60217],{"class":448},[79,75827,75828],{"class":96}," m",[79,75830,556],{"class":448},[79,75832,75790],{"class":228},[79,75834,75835],{"class":85},"getMinutes",[79,75837,15084],{"class":228},[79,75839,229],{"class":448},[79,75841,4123],{"class":96},[79,75843,75802],{"class":448},[79,75845,75805],{"class":89},[79,75847,47561],{"class":448},[79,75849,75790],{"class":228},[79,75851,75835],{"class":85},[79,75853,15084],{"class":228},[79,75855,3099],{"class":448},[79,75857,75790],{"class":228},[79,75859,75835],{"class":85},[79,75861,4061],{"class":228},[79,75863,75864,75866,75868,75870,75872,75875,75877,75879,75881,75883,75885,75887,75889,75891,75893,75895,75897,75899],{"class":81,"line":35570},[79,75865,60217],{"class":448},[79,75867,10483],{"class":96},[79,75869,556],{"class":448},[79,75871,75790],{"class":228},[79,75873,75874],{"class":85},"getSeconds",[79,75876,15084],{"class":228},[79,75878,229],{"class":448},[79,75880,4123],{"class":96},[79,75882,75802],{"class":448},[79,75884,75805],{"class":89},[79,75886,47561],{"class":448},[79,75888,75790],{"class":228},[79,75890,75874],{"class":85},[79,75892,15084],{"class":228},[79,75894,3099],{"class":448},[79,75896,75790],{"class":228},[79,75898,75874],{"class":85},[79,75900,4061],{"class":228},[79,75902,75903,75905,75908,75910,75912,75915,75917,75920,75922,75925,75927,75929,75932,75934,75936,75938,75940,75942,75944,75947,75949,75952,75954,75957,75959,75961,75963],{"class":81,"line":35576},[79,75904,60217],{"class":448},[79,75906,75907],{"class":96}," str",[79,75909,556],{"class":448},[79,75911,64891],{"class":89},[79,75913,75914],{"class":228},"date",[79,75916,2798],{"class":89},[79,75918,75919],{"class":85},"getFullYear",[79,75921,4511],{"class":89},[79,75923,75924],{"class":89},"}\u002F${",[79,75926,75914],{"class":228},[79,75928,2798],{"class":89},[79,75930,75931],{"class":85},"getMonth",[79,75933,15084],{"class":89},[79,75935,995],{"class":448},[79,75937,27137],{"class":96},[79,75939,75924],{"class":89},[79,75941,75914],{"class":228},[79,75943,2798],{"class":89},[79,75945,75946],{"class":85},"getDate",[79,75948,4511],{"class":89},[79,75950,75951],{"class":89},"} ${",[79,75953,2658],{"class":228},[79,75955,75956],{"class":89},"}:${",[79,75958,2784],{"class":228},[79,75960,75956],{"class":89},[79,75962,2935],{"class":228},[79,75964,75965],{"class":89},"}`\n",[79,75967,75968,75971],{"class":81,"line":35582},[79,75969,75970],{"class":448},"      return",[79,75972,75973],{"class":228}," str\n",[79,75975,75976],{"class":81,"line":35588},[79,75977,4272],{"class":228},[79,75979,75980],{"class":81,"line":35615},[79,75981,75982],{"class":2313},"    \u002F\u002F 渲染函数\n",[79,75984,75985,75987,75989,75991,75993,75995,75997,75999],{"class":81,"line":35639},[79,75986,13256],{"class":448},[79,75988,71735],{"class":96},[79,75990,556],{"class":448},[79,75992,56385],{"class":228},[79,75994,56388],{"class":85},[79,75996,455],{"class":228},[79,75998,71746],{"class":89},[79,76000,850],{"class":228},[79,76002,76003,76005,76007],{"class":81,"line":35645},[79,76004,72072],{"class":448},[79,76006,72075],{"class":85},[79,76008,12888],{"class":228},[79,76010,76011],{"class":81,"line":35651},[79,76012,76013],{"class":2313},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[79,76015,76016],{"class":81,"line":35657},[79,76017,76018],{"class":2313},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[79,76020,76021,76023,76026,76028,76030,76033,76035,76037,76039,76042,76044,76047],{"class":81,"line":35668},[79,76022,60217],{"class":448},[79,76024,76025],{"class":96}," trArr",[79,76027,556],{"class":448},[79,76029,53959],{"class":228},[79,76031,76032],{"class":85},"map",[79,76034,455],{"class":228},[79,76036,56438],{"class":448},[79,76038,3757],{"class":228},[79,76040,76041],{"class":7284},"ele",[79,76043,1020],{"class":228},[79,76045,76046],{"class":7284},"index",[79,76048,14476],{"class":228},[79,76050,76051,76053],{"class":81,"line":35679},[79,76052,16785],{"class":448},[79,76054,72156],{"class":89},[79,76056,76057],{"class":81,"line":35685},[79,76058,76059],{"class":89},"      \u003Ctr>\n",[79,76061,76062,76064,76066,76068,76071],{"class":81,"line":35702},[79,76063,72161],{"class":89},[79,76065,76041],{"class":228},[79,76067,2798],{"class":89},[79,76069,76070],{"class":228},"unameId",[79,76072,72176],{"class":89},[79,76074,76075,76077,76079,76081,76083],{"class":81,"line":35725},[79,76076,72161],{"class":89},[79,76078,76041],{"class":228},[79,76080,2798],{"class":89},[79,76082,72192],{"class":228},[79,76084,72176],{"class":89},[79,76086,76087,76089,76091,76093,76095],{"class":81,"line":35748},[79,76088,72161],{"class":89},[79,76090,76041],{"class":228},[79,76092,2798],{"class":89},[79,76094,72209],{"class":228},[79,76096,72176],{"class":89},[79,76098,76099,76101,76103,76105,76107],{"class":81,"line":35754},[79,76100,72161],{"class":89},[79,76102,76041],{"class":228},[79,76104,2798],{"class":89},[79,76106,72226],{"class":228},[79,76108,72176],{"class":89},[79,76110,76111,76113,76115,76117,76119],{"class":81,"line":35759},[79,76112,72161],{"class":89},[79,76114,76041],{"class":228},[79,76116,2798],{"class":89},[79,76118,72243],{"class":228},[79,76120,72176],{"class":89},[79,76122,76123,76125,76127,76129,76131],{"class":81,"line":35768},[79,76124,72161],{"class":89},[79,76126,76041],{"class":228},[79,76128,2798],{"class":89},[79,76130,72260],{"class":228},[79,76132,72176],{"class":89},[79,76134,76135,76137,76139,76141,76143],{"class":81,"line":35778},[79,76136,72161],{"class":89},[79,76138,76041],{"class":228},[79,76140,2798],{"class":89},[79,76142,4472],{"class":228},[79,76144,72176],{"class":89},[79,76146,76147],{"class":81,"line":35784},[79,76148,75603],{"class":89},[79,76150,76151,76154,76156],{"class":81,"line":35789},[79,76152,76153],{"class":89},"          \u003Ca href=\"#\" data-id=\"${",[79,76155,76046],{"class":228},[79,76157,76158],{"class":89},"}\">删除\u003C\u002Fa>\n",[79,76160,76161],{"class":81,"line":35795},[79,76162,75613],{"class":89},[79,76164,76165],{"class":81,"line":35808},[79,76166,76167],{"class":89},"      \u003C\u002Ftr>\n",[79,76169,76170],{"class":81,"line":35814},[79,76171,76172],{"class":89},"  `\n",[79,76174,76175],{"class":81,"line":35825},[79,76176,66803],{"class":228},[79,76178,76179,76181,76183],{"class":81,"line":35836},[79,76180,60233],{"class":228},[79,76182,60236],{"class":85},[79,76184,76185],{"class":228},"(trArr)\n",[79,76187,76188],{"class":81,"line":35855},[79,76189,542],{"emptyLinePlaceholder":541},[79,76191,76192],{"class":81,"line":51513},[79,76193,76194],{"class":2313},"      \u002F\u002F (2) 把数组转换为字符串join\n",[79,76196,76197],{"class":81,"line":51518},[79,76198,76199],{"class":2313},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[79,76201,76202,76204,76206,76209,76212,76214,76217],{"class":81,"line":51527},[79,76203,72087],{"class":228},[79,76205,239],{"class":448},[79,76207,76208],{"class":228}," trArr.",[79,76210,76211],{"class":85},"join",[79,76213,455],{"class":228},[79,76215,76216],{"class":89},"''",[79,76218,850],{"class":228},[79,76220,76221],{"class":81,"line":51536},[79,76222,76223],{"class":2313},"      \u002F\u002F 显示共有几条\n",[79,76225,76226,76228,76230,76232,76235,76238,76240,76242],{"class":81,"line":51541},[79,76227,57760],{"class":228},[79,76229,56388],{"class":85},[79,76231,455],{"class":228},[79,76233,76234],{"class":89},"'.total span'",[79,76236,76237],{"class":228},").innerHTML ",[79,76239,239],{"class":448},[79,76241,53959],{"class":228},[79,76243,57820],{"class":96},[79,76245,76246],{"class":81,"line":51546},[79,76247,4272],{"class":228},[79,76249,76250],{"class":81,"line":51551},[79,76251,76252],{"class":2313},"    \u002F\u002F render()\n",[79,76254,76255],{"class":81,"line":51564},[79,76256,542],{"emptyLinePlaceholder":541},[79,76258,76259],{"class":81,"line":51569},[79,76260,76261],{"class":2313},"    \u002F\u002F 获取DOM对象\n",[79,76263,76264,76266,76268,76270,76272,76274,76276,76278],{"class":81,"line":51578},[79,76265,13256],{"class":448},[79,76267,71809],{"class":96},[79,76269,556],{"class":448},[79,76271,56385],{"class":228},[79,76273,56388],{"class":85},[79,76275,455],{"class":228},[79,76277,71820],{"class":89},[79,76279,850],{"class":228},[79,76281,76282,76284,76286,76288,76290,76292,76294,76296],{"class":81,"line":51587},[79,76283,13256],{"class":448},[79,76285,71636],{"class":96},[79,76287,556],{"class":448},[79,76289,56385],{"class":228},[79,76291,56388],{"class":85},[79,76293,455],{"class":228},[79,76295,71647],{"class":89},[79,76297,850],{"class":228},[79,76299,76300,76302,76304,76306,76308,76310,76312,76314],{"class":81,"line":51604},[79,76301,13256],{"class":448},[79,76303,17721],{"class":96},[79,76305,556],{"class":448},[79,76307,56385],{"class":228},[79,76309,56388],{"class":85},[79,76311,455],{"class":228},[79,76313,71666],{"class":89},[79,76315,850],{"class":228},[79,76317,76319,76321,76323,76325,76327,76329,76331,76333],{"class":81,"line":76318},231,[79,76320,13256],{"class":448},[79,76322,71695],{"class":96},[79,76324,556],{"class":448},[79,76326,56385],{"class":228},[79,76328,56388],{"class":85},[79,76330,455],{"class":228},[79,76332,71706],{"class":89},[79,76334,850],{"class":228},[79,76336,76338,76340,76342,76344,76346,76348,76350,76352],{"class":81,"line":76337},232,[79,76339,13256],{"class":448},[79,76341,71675],{"class":96},[79,76343,556],{"class":448},[79,76345,56385],{"class":228},[79,76347,56388],{"class":85},[79,76349,455],{"class":228},[79,76351,71686],{"class":89},[79,76353,850],{"class":228},[79,76355,76357,76359,76361,76363,76365,76367,76369,76371],{"class":81,"line":76356},233,[79,76358,13256],{"class":448},[79,76360,71715],{"class":96},[79,76362,556],{"class":448},[79,76364,56385],{"class":228},[79,76366,56388],{"class":85},[79,76368,455],{"class":228},[79,76370,71726],{"class":89},[79,76372,850],{"class":228},[79,76374,76376],{"class":81,"line":76375},234,[79,76377,542],{"emptyLinePlaceholder":541},[79,76379,76381],{"class":81,"line":76380},235,[79,76382,76383],{"class":2313},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[79,76385,76387,76389,76391,76393,76395,76397,76399,76401,76403],{"class":81,"line":76386},236,[79,76388,71827],{"class":228},[79,76390,59802],{"class":85},[79,76392,455],{"class":228},[79,76394,71834],{"class":89},[79,76396,1020],{"class":228},[79,76398,56438],{"class":448},[79,76400,3757],{"class":228},[79,76402,2328],{"class":7284},[79,76404,14476],{"class":228},[79,76406,76408],{"class":81,"line":76407},237,[79,76409,76410],{"class":2313},"      \u002F\u002F 禁止浏览器跳转\n",[79,76412,76414,76416,76418],{"class":81,"line":76413},238,[79,76415,71854],{"class":228},[79,76417,71857],{"class":85},[79,76419,4061],{"class":228},[79,76421,76423],{"class":81,"line":76422},239,[79,76424,76425],{"class":2313},"      \u002F\u002F 非空判断\n",[79,76427,76429],{"class":81,"line":76428},240,[79,76430,76431],{"class":2313},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[79,76433,76435],{"class":81,"line":76434},241,[79,76436,76437],{"class":2313},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[79,76439,76441,76443,76445,76447,76450,76452,76455,76458,76460,76462],{"class":81,"line":76440},242,[79,76442,56469],{"class":448},[79,76444,3757],{"class":228},[79,76446,2470],{"class":448},[79,76448,76449],{"class":228},"uname.value ",[79,76451,73345],{"class":448},[79,76453,76454],{"class":448}," !",[79,76456,76457],{"class":228},"age.value ",[79,76459,73345],{"class":448},[79,76461,76454],{"class":448},[79,76463,76464],{"class":228},"salary.value) {\n",[79,76466,76468,76470,76472,76474,76476],{"class":81,"line":76467},243,[79,76469,16785],{"class":448},[79,76471,71928],{"class":85},[79,76473,455],{"class":228},[79,76475,71933],{"class":89},[79,76477,850],{"class":228},[79,76479,76481],{"class":81,"line":76480},244,[79,76482,54391],{"class":228},[79,76484,76486,76488,76490],{"class":81,"line":76485},245,[79,76487,59996],{"class":228},[79,76489,53878],{"class":85},[79,76491,76492],{"class":228},"({\n",[79,76494,76496],{"class":81,"line":76495},246,[79,76497,76498],{"class":2313},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[79,76500,76502],{"class":81,"line":76501},247,[79,76503,76504],{"class":2313},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[79,76506,76508],{"class":81,"line":76507},248,[79,76509,76510],{"class":2313},"        \u002F\u002F 对象的序号应为数组长度+1\n",[79,76512,76514],{"class":81,"line":76513},249,[79,76515,76516],{"class":2313},"        \u002F\u002F unameId: arr.length + 1,\n",[79,76518,76520],{"class":81,"line":76519},250,[79,76521,542],{"emptyLinePlaceholder":541},[79,76523,76525],{"class":81,"line":76524},251,[79,76526,76527],{"class":2313},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[79,76529,76531],{"class":81,"line":76530},252,[79,76532,76533],{"class":2313},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[79,76535,76537],{"class":81,"line":76536},253,[79,76538,76539],{"class":2313},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[79,76541,76543],{"class":81,"line":76542},254,[79,76544,76545],{"class":2313},"        \u002F\u002F 0当假看\n",[79,76547,76549,76552,76554,76556,76559,76561,76563,76565,76568,76570,76572,76575,76577],{"class":81,"line":76548},255,[79,76550,76551],{"class":228},"        unameId: arr.",[79,76553,53962],{"class":96},[79,76555,75802],{"class":448},[79,76557,76558],{"class":228}," arr[arr.",[79,76560,53962],{"class":96},[79,76562,461],{"class":448},[79,76564,27137],{"class":96},[79,76566,76567],{"class":228},"].unameId ",[79,76569,995],{"class":448},[79,76571,27137],{"class":96},[79,76573,76574],{"class":448}," :",[79,76576,27137],{"class":96},[79,76578,33468],{"class":228},[79,76580,76582],{"class":81,"line":76581},256,[79,76583,71981],{"class":228},[79,76585,76587],{"class":81,"line":76586},257,[79,76588,71986],{"class":228},[79,76590,76592],{"class":81,"line":76591},258,[79,76593,71996],{"class":228},[79,76595,76597],{"class":81,"line":76596},259,[79,76598,71991],{"class":228},[79,76600,76602],{"class":81,"line":76601},260,[79,76603,76604],{"class":228},"        city: city.value,\n",[79,76606,76608],{"class":81,"line":76607},261,[79,76609,76610],{"class":2313},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[79,76612,76614],{"class":81,"line":76613},262,[79,76615,76616],{"class":2313},"        \u002F\u002F time: new Date().toDateString()\n",[79,76618,76620,76623,76626],{"class":81,"line":76619},263,[79,76621,76622],{"class":228},"        time: ",[79,76624,76625],{"class":85},"getTime",[79,76627,4061],{"class":228},[79,76629,76631],{"class":81,"line":76630},264,[79,76632,66803],{"class":228},[79,76634,76636],{"class":81,"line":76635},265,[79,76637,76638],{"class":2313},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[79,76640,76642,76644],{"class":81,"line":76641},266,[79,76643,72056],{"class":85},[79,76645,4061],{"class":228},[79,76647,76649,76651,76653,76655,76657],{"class":81,"line":76648},267,[79,76650,72039],{"class":96},[79,76652,2798],{"class":228},[79,76654,72044],{"class":85},[79,76656,15084],{"class":228},[79,76658,76659],{"class":2313},"\u002F\u002F重置表单\n",[79,76661,76663],{"class":81,"line":76662},268,[79,76664,76665],{"class":2313},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[79,76667,76669,76672,76674,76676,76679,76681,76683,76685,76687],{"class":81,"line":76668},269,[79,76670,76671],{"class":228},"      localStorage.",[79,76673,73642],{"class":85},[79,76675,455],{"class":228},[79,76677,76678],{"class":89},"'data'",[79,76680,1020],{"class":228},[79,76682,73652],{"class":96},[79,76684,2798],{"class":228},[79,76686,73657],{"class":85},[79,76688,76689],{"class":228},"(arr))\n",[79,76691,76693],{"class":81,"line":76692},270,[79,76694,35458],{"class":228},[79,76696,76698],{"class":81,"line":76697},271,[79,76699,542],{"emptyLinePlaceholder":541},[79,76701,76703],{"class":81,"line":76702},272,[79,76704,76705],{"class":2313},"    \u002F\u002F 3.删除业务\n",[79,76707,76709],{"class":81,"line":76708},273,[79,76710,76711],{"class":2313},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[79,76713,76715,76717,76719,76721,76723,76725,76727,76729,76731],{"class":81,"line":76714},274,[79,76716,72329],{"class":228},[79,76718,59802],{"class":85},[79,76720,455],{"class":228},[79,76722,59807],{"class":89},[79,76724,1020],{"class":228},[79,76726,56438],{"class":448},[79,76728,3757],{"class":228},[79,76730,2328],{"class":7284},[79,76732,14476],{"class":228},[79,76734,76736],{"class":81,"line":76735},275,[79,76737,76738],{"class":2313},"      \u002F\u002F 判断是否点击的是删除按钮\n",[79,76740,76742,76744,76746,76748,76750],{"class":81,"line":76741},276,[79,76743,56469],{"class":448},[79,76745,69022],{"class":228},[79,76747,56475],{"class":448},[79,76749,70244],{"class":89},[79,76751,14476],{"class":228},[79,76753,76755],{"class":81,"line":76754},277,[79,76756,76757],{"class":2313},"        \u002F\u002F alert(1)\n",[79,76759,76761],{"class":81,"line":76760},278,[79,76762,76763],{"class":2313},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[79,76765,76767],{"class":81,"line":76766},279,[79,76768,76769],{"class":2313},"        \u002F\u002F console.log(e.target)\n",[79,76771,76773],{"class":81,"line":76772},280,[79,76774,76775],{"class":2313},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[79,76777,76779],{"class":81,"line":76778},281,[79,76780,542],{"emptyLinePlaceholder":541},[79,76782,76784],{"class":81,"line":76783},282,[79,76785,76786],{"class":2313},"        \u002F\u002F 确认框，确然是否真的要删除\n",[79,76788,76790],{"class":81,"line":76789},283,[79,76791,76792],{"class":2313},"        \u002F\u002F confirm()为确认框\n",[79,76794,76796],{"class":81,"line":76795},284,[79,76797,76798],{"class":2313},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[79,76800,76802,76804,76806,76809,76811,76814],{"class":81,"line":76801},285,[79,76803,1089],{"class":448},[79,76805,3757],{"class":228},[79,76807,76808],{"class":85},"confirm",[79,76810,455],{"class":228},[79,76812,76813],{"class":89},"'您确定要删除这条数据吗？'",[79,76815,76816],{"class":228},")) {\n",[79,76818,76820,76823,76825,76827,76829],{"class":81,"line":76819},286,[79,76821,76822],{"class":228},"          arr.",[79,76824,59999],{"class":85},[79,76826,72382],{"class":228},[79,76828,775],{"class":96},[79,76830,850],{"class":228},[79,76832,76834],{"class":81,"line":76833},287,[79,76835,76836],{"class":2313},"          \u002F\u002F 3.4 重新渲染页面\n",[79,76838,76840,76843],{"class":81,"line":76839},288,[79,76841,76842],{"class":85},"          render",[79,76844,4061],{"class":228},[79,76846,76848],{"class":81,"line":76847},289,[79,76849,76850],{"class":2313},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[79,76852,76854,76857,76859,76861,76863,76865,76867,76869,76871],{"class":81,"line":76853},290,[79,76855,76856],{"class":228},"          localStorage.",[79,76858,73642],{"class":85},[79,76860,455],{"class":228},[79,76862,76678],{"class":89},[79,76864,1020],{"class":228},[79,76866,73652],{"class":96},[79,76868,2798],{"class":228},[79,76870,73657],{"class":85},[79,76872,76689],{"class":228},[79,76874,76876],{"class":81,"line":76875},291,[79,76877,4612],{"class":228},[79,76879,76881],{"class":81,"line":76880},292,[79,76882,54391],{"class":228},[79,76884,76886],{"class":81,"line":76885},293,[79,76887,542],{"emptyLinePlaceholder":541},[79,76889,76891],{"class":81,"line":76890},294,[79,76892,35458],{"class":228},[79,76894,76896],{"class":81,"line":76895},295,[79,76897,542],{"emptyLinePlaceholder":541},[79,76899,76901,76903,76905],{"class":81,"line":76900},296,[79,76902,54410],{"class":228},[79,76904,53807],{"class":232},[79,76906,53301],{"class":228},[79,76908,76910,76912,76914],{"class":81,"line":76909},297,[79,76911,53779],{"class":228},[79,76913,53794],{"class":232},[79,76915,53301],{"class":228},[79,76917,76919],{"class":81,"line":76918},298,[79,76920,542],{"emptyLinePlaceholder":541},[79,76922,76924,76926,76928],{"class":81,"line":76923},299,[79,76925,53779],{"class":228},[79,76927,52630],{"class":232},[79,76929,53301],{"class":228},[14,76931,76933],{"id":76932},"_36-正则表达式","3.6 正则表达式",[19,76935,76936],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,76938,76939],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,76941,76942],{},"正则表达式的作用：",[3246,76944,76945,76952,76958],{},[29,76946,76947,76948,76951],{},"表单验证（ ",[2398,76949,76950],{},"匹配"," ）",[29,76953,76954,76955,76951],{},"过滤敏感词（ ",[2398,76956,76957],{},"替换",[29,76959,76960,76961,76951],{},"字符串中提取我们想要的部分（ ",[2398,76962,76963],{},"提取",[339,76965,76967],{"id":76966},"_361-语法","3.6.1 语法",[19,76969,76970],{},"正则表达式使用步骤：",[26,76972,76973,76976],{},[29,76974,76975],{},"定义规则",[29,76977,76978],{},"查找是否匹配",[19,76980,76981],{},"正则表达式里边不需要写引号",[19,76983,76984],{},[3569,76985],{"alt":57,"src":76986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,76988,76989],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,76991,76992],{},"reg.test(str)",[19,76994,76995],{},[3569,76996],{"alt":57,"src":76997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,76999,77000],{},[3569,77001],{"alt":57,"src":77002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[339,77004,77006],{"id":77005},"_362-元字符","3.6.2 元字符",[26,77008,77009,77012,77015,77018,77025],{},[29,77010,77011],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[29,77013,77014],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[29,77016,77017],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[29,77019,77020,77021],{},"正则验证工具：",[2482,77022,77023],{"href":77023,"rel":77024},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[25885],[29,77026,77027],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[24023,77029,77031],{"id":77030},"_3621-边界符","3.6.2.1 边界符",[19,77033,77034],{},[3569,77035],{"alt":57,"src":77036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,77038,77039],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,77041,77042],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,77044,77045],{},"只匹配一次",[19,77047,77048],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[24023,77050,77052],{"id":77051},"_3622-量词","3.6.2.2 量词",[19,77054,77055],{},[3569,77056],{"alt":57,"src":77057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,77059,77060],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[24023,77062,77064],{"id":77063},"_3623-元字符","3.6.2.3 元字符",[19,77066,77067],{},[3569,77068],{"alt":57,"src":77069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,77071,77072],{},"匹配的是a或b或c []只选一个",[19,77074,77075],{},[3569,77076],{"alt":57,"src":77077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,77079,77080],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,77082,77083],{},[3569,77084],{"alt":57,"src":77085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,77087,77088],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,77090,77091],{},[3569,77092],{"alt":57,"src":77093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[51,77095,77097],{"className":52628,"code":77096,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F 元字符中\n    console.log(\u002F哈\u002F.test('哈'))  \u002F\u002Ftrue\n    console.log(\u002F哈\u002F.test('哈哈'))  \u002F\u002Ftrue\n    console.log(\u002F哈\u002F.test('二哈'))   \u002F\u002Ftrue\n\n    \u002F\u002F 1.边界符\n    console.log(\u002F^哈\u002F.test('哈'))  \u002F\u002Ftrue\n    console.log(\u002F^哈$\u002F.test('哈哈'))  \u002F\u002Ffalse\n    \u002F\u002F 2.量词\n    \u002F\u002F 量词 * 类似于 >= 0\n    console.log(\u002F^哈*$\u002F.test('哈哈'))  \u002F\u002Ftrue\n    console.log(\u002F^哈*$\u002F.test('二哈好傻'))  \u002F\u002Ffalse 必须以哈开头或结尾\n    console.log(\u002F^哈*$\u002F.test('哈好哈'))   \u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n\n    \u002F\u002F +类似于>=1\n    console.log(\u002F^哈+$\u002F.test('哈哈'))  \u002F\u002Ftrue\n    console.log(\u002F^哈+$\u002F.test('二哈好傻'))  \u002F\u002Ffalse 必须以哈开头或结尾\n    console.log(\u002F^哈+$\u002F.test('哈好哈'))   \u002F\u002Ffalse\n\n    \u002F\u002F ?类似于0次或一次\n    console.log(\u002F^哈？$\u002F.test(''))   \u002F\u002Ftrue\n    console.log(\u002F^哈?$\u002F.test('哈哈'))  \u002F\u002Ffalse\n    console.log(\u002F^哈?$\u002F.test('二哈好傻'))  \u002F\u002Ffalse 必须以哈开头或结尾\n    console.log(\u002F^哈?$\u002F.test('哈好哈'))  \u002F\u002Ffalse\n\n    \u002F\u002F {n}写几，就必须出现几次\n    console.log(\u002F^哈{4}$\u002F.test('哈哈哈哈')) \u002F\u002Ftrue\n\n    \u002F\u002F {n,}大于等于n次\n    console.log(\u002F^哈{4,}$\u002F.test('哈哈哈哈')) \u002F\u002Ftrue\n    console.log(\u002F^哈{4,}$\u002F.test('哈哈哈哈哈')) \u002F\u002Ftrue\n\n    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n    console.log(\u002F^哈{4,6}$\u002F.test('哈哈哈哈')) \u002F\u002Ftrue\n    console.log(\u002F^哈{4,6}$\u002F.test('哈哈哈哈哈')) \u002F\u002Ftrue\n    console.log(\u002F^哈{4,6}$\u002F.test('哈哈哈哈哈哈哈')) \u002F\u002Ffalse\n\n    \u002F\u002F 3.字符类 [abc] 只选一个字符\n    console.log(\u002F^[abc]$\u002F.test('a'))  \u002F\u002Ftrue\n    console.log(\u002F^[abc]$\u002F.test('b'))  \u002F\u002Ftrue\n    console.log(\u002F^[abc]$\u002F.test('c'))  \u002F\u002Ftrue\n    console.log(\u002F[abc]\u002F.test('ab'))  \u002F\u002Ftrue\n    console.log(\u002F^[abc]$\u002F.test('ab'))  \u002F\u002Ffalse     不加精确匹配，就是true\n    console.log(\u002F^[abc]{2}$\u002F.test('ab'))  \u002F\u002Ftrue   可以选两个\n    console.log(\u002F^[a-z]$\u002F.test('p'))   \u002F\u002Ftrue   依然只能选一个\n    console.log(\u002F^[A-Z]$\u002F.test('p'))   \u002F\u002Ffalse\n    console.log(\u002F^[A-Z]$\u002F.test('P'))   \u002F\u002Ftrue\n    console.log(\u002F^[0-9]$\u002F.test('0'))   \u002F\u002Ftrue\n    console.log(\u002F^[a-zA-Z0-9]$\u002F.test('p'))  \u002F\u002Ftrue\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,77098,77099,77109,77123,77127,77135,77149,77169,77181,77189,77193,77201,77209,77214,77245,77272,77300,77304,77309,77337,77368,77373,77378,77409,77441,77473,77477,77482,77513,77543,77573,77577,77582,77613,77644,77674,77704,77708,77713,77746,77750,77755,77786,77817,77821,77826,77857,77887,77918,77922,77927,77959,77990,78021,78048,78079,78111,78144,78175,78206,78238,78269,78277,78285,78289],{"__ignoreMap":57},[79,77100,77101,77103,77105,77107],{"class":81,"line":82},[79,77102,53292],{"class":228},[79,77104,53295],{"class":232},[79,77106,53298],{"class":85},[79,77108,53301],{"class":228},[79,77110,77111,77113,77115,77117,77119,77121],{"class":81,"line":167},[79,77112,229],{"class":228},[79,77114,52630],{"class":232},[79,77116,53310],{"class":85},[79,77118,239],{"class":228},[79,77120,53315],{"class":89},[79,77122,53301],{"class":228},[79,77124,77125],{"class":81,"line":178},[79,77126,542],{"emptyLinePlaceholder":541},[79,77128,77129,77131,77133],{"class":81,"line":545},[79,77130,229],{"class":228},[79,77132,53328],{"class":232},[79,77134,53301],{"class":228},[79,77136,77137,77139,77141,77143,77145,77147],{"class":81,"line":550},[79,77138,54138],{"class":228},[79,77140,53338],{"class":232},[79,77142,53341],{"class":85},[79,77144,239],{"class":228},[79,77146,53346],{"class":89},[79,77148,53301],{"class":228},[79,77150,77151,77153,77155,77157,77159,77161,77163,77165,77167],{"class":81,"line":562},[79,77152,54138],{"class":228},[79,77154,53338],{"class":232},[79,77156,236],{"class":85},[79,77158,239],{"class":228},[79,77160,53385],{"class":89},[79,77162,53365],{"class":85},[79,77164,239],{"class":228},[79,77166,53392],{"class":89},[79,77168,53301],{"class":228},[79,77170,77171,77173,77175,77177,77179],{"class":81,"line":568},[79,77172,54138],{"class":228},[79,77174,53401],{"class":232},[79,77176,53404],{"class":228},[79,77178,53401],{"class":232},[79,77180,53301],{"class":228},[79,77182,77183,77185,77187],{"class":81,"line":574},[79,77184,53779],{"class":228},[79,77186,53328],{"class":232},[79,77188,53301],{"class":228},[79,77190,77191],{"class":81,"line":579},[79,77192,542],{"emptyLinePlaceholder":541},[79,77194,77195,77197,77199],{"class":81,"line":585},[79,77196,229],{"class":228},[79,77198,53794],{"class":232},[79,77200,53301],{"class":228},[79,77202,77203,77205,77207],{"class":81,"line":591},[79,77204,54138],{"class":228},[79,77206,53807],{"class":232},[79,77208,53301],{"class":228},[79,77210,77211],{"class":81,"line":596},[79,77212,77213],{"class":2313},"    \u002F\u002F 元字符中\n",[79,77215,77216,77218,77220,77222,77224,77227,77229,77231,77234,77236,77239,77242],{"class":81,"line":602},[79,77217,75741],{"class":228},[79,77219,60236],{"class":85},[79,77221,455],{"class":228},[79,77223,2824],{"class":89},[79,77225,77226],{"class":49972},"哈",[79,77228,2824],{"class":89},[79,77230,2798],{"class":228},[79,77232,77233],{"class":85},"test",[79,77235,455],{"class":228},[79,77237,77238],{"class":89},"'哈'",[79,77240,77241],{"class":228},"))  ",[79,77243,77244],{"class":2313},"\u002F\u002Ftrue\n",[79,77246,77247,77249,77251,77253,77255,77257,77259,77261,77263,77265,77268,77270],{"class":81,"line":608},[79,77248,75741],{"class":228},[79,77250,60236],{"class":85},[79,77252,455],{"class":228},[79,77254,2824],{"class":89},[79,77256,77226],{"class":49972},[79,77258,2824],{"class":89},[79,77260,2798],{"class":228},[79,77262,77233],{"class":85},[79,77264,455],{"class":228},[79,77266,77267],{"class":89},"'哈哈'",[79,77269,77241],{"class":228},[79,77271,77244],{"class":2313},[79,77273,77274,77276,77278,77280,77282,77284,77286,77288,77290,77292,77295,77298],{"class":81,"line":614},[79,77275,75741],{"class":228},[79,77277,60236],{"class":85},[79,77279,455],{"class":228},[79,77281,2824],{"class":89},[79,77283,77226],{"class":49972},[79,77285,2824],{"class":89},[79,77287,2798],{"class":228},[79,77289,77233],{"class":85},[79,77291,455],{"class":228},[79,77293,77294],{"class":89},"'二哈'",[79,77296,77297],{"class":228},"))   ",[79,77299,77244],{"class":2313},[79,77301,77302],{"class":81,"line":619},[79,77303,542],{"emptyLinePlaceholder":541},[79,77305,77306],{"class":81,"line":625},[79,77307,77308],{"class":2313},"    \u002F\u002F 1.边界符\n",[79,77310,77311,77313,77315,77317,77319,77321,77323,77325,77327,77329,77331,77333,77335],{"class":81,"line":631},[79,77312,75741],{"class":228},[79,77314,60236],{"class":85},[79,77316,455],{"class":228},[79,77318,2824],{"class":89},[79,77320,3205],{"class":448},[79,77322,77226],{"class":49972},[79,77324,2824],{"class":89},[79,77326,2798],{"class":228},[79,77328,77233],{"class":85},[79,77330,455],{"class":228},[79,77332,77238],{"class":89},[79,77334,77241],{"class":228},[79,77336,77244],{"class":2313},[79,77338,77339,77341,77343,77345,77347,77349,77351,77353,77355,77357,77359,77361,77363,77365],{"class":81,"line":637},[79,77340,75741],{"class":228},[79,77342,60236],{"class":85},[79,77344,455],{"class":228},[79,77346,2824],{"class":89},[79,77348,3205],{"class":448},[79,77350,77226],{"class":49972},[79,77352,2546],{"class":448},[79,77354,2824],{"class":89},[79,77356,2798],{"class":228},[79,77358,77233],{"class":85},[79,77360,455],{"class":228},[79,77362,77267],{"class":89},[79,77364,77241],{"class":228},[79,77366,77367],{"class":2313},"\u002F\u002Ffalse\n",[79,77369,77370],{"class":81,"line":643},[79,77371,77372],{"class":2313},"    \u002F\u002F 2.量词\n",[79,77374,77375],{"class":81,"line":649},[79,77376,77377],{"class":2313},"    \u002F\u002F 量词 * 类似于 >= 0\n",[79,77379,77380,77382,77384,77386,77388,77390,77392,77395,77397,77399,77401,77403,77405,77407],{"class":81,"line":655},[79,77381,75741],{"class":228},[79,77383,60236],{"class":85},[79,77385,455],{"class":228},[79,77387,2824],{"class":89},[79,77389,3205],{"class":448},[79,77391,77226],{"class":49972},[79,77393,77394],{"class":448},"*$",[79,77396,2824],{"class":89},[79,77398,2798],{"class":228},[79,77400,77233],{"class":85},[79,77402,455],{"class":228},[79,77404,77267],{"class":89},[79,77406,77241],{"class":228},[79,77408,77244],{"class":2313},[79,77410,77411,77413,77415,77417,77419,77421,77423,77425,77427,77429,77431,77433,77436,77438],{"class":81,"line":660},[79,77412,75741],{"class":228},[79,77414,60236],{"class":85},[79,77416,455],{"class":228},[79,77418,2824],{"class":89},[79,77420,3205],{"class":448},[79,77422,77226],{"class":49972},[79,77424,77394],{"class":448},[79,77426,2824],{"class":89},[79,77428,2798],{"class":228},[79,77430,77233],{"class":85},[79,77432,455],{"class":228},[79,77434,77435],{"class":89},"'二哈好傻'",[79,77437,77241],{"class":228},[79,77439,77440],{"class":2313},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[79,77442,77443,77445,77447,77449,77451,77453,77455,77457,77459,77461,77463,77465,77468,77470],{"class":81,"line":666},[79,77444,75741],{"class":228},[79,77446,60236],{"class":85},[79,77448,455],{"class":228},[79,77450,2824],{"class":89},[79,77452,3205],{"class":448},[79,77454,77226],{"class":49972},[79,77456,77394],{"class":448},[79,77458,2824],{"class":89},[79,77460,2798],{"class":228},[79,77462,77233],{"class":85},[79,77464,455],{"class":228},[79,77466,77467],{"class":89},"'哈好哈'",[79,77469,77297],{"class":228},[79,77471,77472],{"class":2313},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[79,77474,77475],{"class":81,"line":672},[79,77476,542],{"emptyLinePlaceholder":541},[79,77478,77479],{"class":81,"line":678},[79,77480,77481],{"class":2313},"    \u002F\u002F +类似于>=1\n",[79,77483,77484,77486,77488,77490,77492,77494,77496,77499,77501,77503,77505,77507,77509,77511],{"class":81,"line":684},[79,77485,75741],{"class":228},[79,77487,60236],{"class":85},[79,77489,455],{"class":228},[79,77491,2824],{"class":89},[79,77493,3205],{"class":448},[79,77495,77226],{"class":49972},[79,77497,77498],{"class":448},"+$",[79,77500,2824],{"class":89},[79,77502,2798],{"class":228},[79,77504,77233],{"class":85},[79,77506,455],{"class":228},[79,77508,77267],{"class":89},[79,77510,77241],{"class":228},[79,77512,77244],{"class":2313},[79,77514,77515,77517,77519,77521,77523,77525,77527,77529,77531,77533,77535,77537,77539,77541],{"class":81,"line":690},[79,77516,75741],{"class":228},[79,77518,60236],{"class":85},[79,77520,455],{"class":228},[79,77522,2824],{"class":89},[79,77524,3205],{"class":448},[79,77526,77226],{"class":49972},[79,77528,77498],{"class":448},[79,77530,2824],{"class":89},[79,77532,2798],{"class":228},[79,77534,77233],{"class":85},[79,77536,455],{"class":228},[79,77538,77435],{"class":89},[79,77540,77241],{"class":228},[79,77542,77440],{"class":2313},[79,77544,77545,77547,77549,77551,77553,77555,77557,77559,77561,77563,77565,77567,77569,77571],{"class":81,"line":695},[79,77546,75741],{"class":228},[79,77548,60236],{"class":85},[79,77550,455],{"class":228},[79,77552,2824],{"class":89},[79,77554,3205],{"class":448},[79,77556,77226],{"class":49972},[79,77558,77498],{"class":448},[79,77560,2824],{"class":89},[79,77562,2798],{"class":228},[79,77564,77233],{"class":85},[79,77566,455],{"class":228},[79,77568,77467],{"class":89},[79,77570,77297],{"class":228},[79,77572,77367],{"class":2313},[79,77574,77575],{"class":81,"line":700},[79,77576,542],{"emptyLinePlaceholder":541},[79,77578,77579],{"class":81,"line":712},[79,77580,77581],{"class":2313},"    \u002F\u002F ?类似于0次或一次\n",[79,77583,77584,77586,77588,77590,77592,77594,77597,77599,77601,77603,77605,77607,77609,77611],{"class":81,"line":721},[79,77585,75741],{"class":228},[79,77587,60236],{"class":85},[79,77589,455],{"class":228},[79,77591,2824],{"class":89},[79,77593,3205],{"class":448},[79,77595,77596],{"class":49972},"哈？",[79,77598,2546],{"class":448},[79,77600,2824],{"class":89},[79,77602,2798],{"class":228},[79,77604,77233],{"class":85},[79,77606,455],{"class":228},[79,77608,76216],{"class":89},[79,77610,77297],{"class":228},[79,77612,77244],{"class":2313},[79,77614,77615,77617,77619,77621,77623,77625,77627,77630,77632,77634,77636,77638,77640,77642],{"class":81,"line":726},[79,77616,75741],{"class":228},[79,77618,60236],{"class":85},[79,77620,455],{"class":228},[79,77622,2824],{"class":89},[79,77624,3205],{"class":448},[79,77626,77226],{"class":49972},[79,77628,77629],{"class":448},"?$",[79,77631,2824],{"class":89},[79,77633,2798],{"class":228},[79,77635,77233],{"class":85},[79,77637,455],{"class":228},[79,77639,77267],{"class":89},[79,77641,77241],{"class":228},[79,77643,77367],{"class":2313},[79,77645,77646,77648,77650,77652,77654,77656,77658,77660,77662,77664,77666,77668,77670,77672],{"class":81,"line":731},[79,77647,75741],{"class":228},[79,77649,60236],{"class":85},[79,77651,455],{"class":228},[79,77653,2824],{"class":89},[79,77655,3205],{"class":448},[79,77657,77226],{"class":49972},[79,77659,77629],{"class":448},[79,77661,2824],{"class":89},[79,77663,2798],{"class":228},[79,77665,77233],{"class":85},[79,77667,455],{"class":228},[79,77669,77435],{"class":89},[79,77671,77241],{"class":228},[79,77673,77440],{"class":2313},[79,77675,77676,77678,77680,77682,77684,77686,77688,77690,77692,77694,77696,77698,77700,77702],{"class":81,"line":748},[79,77677,75741],{"class":228},[79,77679,60236],{"class":85},[79,77681,455],{"class":228},[79,77683,2824],{"class":89},[79,77685,3205],{"class":448},[79,77687,77226],{"class":49972},[79,77689,77629],{"class":448},[79,77691,2824],{"class":89},[79,77693,2798],{"class":228},[79,77695,77233],{"class":85},[79,77697,455],{"class":228},[79,77699,77467],{"class":89},[79,77701,77241],{"class":228},[79,77703,77367],{"class":2313},[79,77705,77706],{"class":81,"line":765},[79,77707,542],{"emptyLinePlaceholder":541},[79,77709,77710],{"class":81,"line":780},[79,77711,77712],{"class":2313},"    \u002F\u002F {n}写几，就必须出现几次\n",[79,77714,77715,77717,77719,77721,77723,77725,77727,77730,77732,77734,77736,77738,77741,77744],{"class":81,"line":811},[79,77716,75741],{"class":228},[79,77718,60236],{"class":85},[79,77720,455],{"class":228},[79,77722,2824],{"class":89},[79,77724,3205],{"class":448},[79,77726,77226],{"class":49972},[79,77728,77729],{"class":448},"{4}$",[79,77731,2824],{"class":89},[79,77733,2798],{"class":228},[79,77735,77233],{"class":85},[79,77737,455],{"class":228},[79,77739,77740],{"class":89},"'哈哈哈哈'",[79,77742,77743],{"class":228},")) ",[79,77745,77244],{"class":2313},[79,77747,77748],{"class":81,"line":816},[79,77749,542],{"emptyLinePlaceholder":541},[79,77751,77752],{"class":81,"line":821},[79,77753,77754],{"class":2313},"    \u002F\u002F {n,}大于等于n次\n",[79,77756,77757,77759,77761,77763,77765,77767,77769,77772,77774,77776,77778,77780,77782,77784],{"class":81,"line":837},[79,77758,75741],{"class":228},[79,77760,60236],{"class":85},[79,77762,455],{"class":228},[79,77764,2824],{"class":89},[79,77766,3205],{"class":448},[79,77768,77226],{"class":49972},[79,77770,77771],{"class":448},"{4,}$",[79,77773,2824],{"class":89},[79,77775,2798],{"class":228},[79,77777,77233],{"class":85},[79,77779,455],{"class":228},[79,77781,77740],{"class":89},[79,77783,77743],{"class":228},[79,77785,77244],{"class":2313},[79,77787,77788,77790,77792,77794,77796,77798,77800,77802,77804,77806,77808,77810,77813,77815],{"class":81,"line":853},[79,77789,75741],{"class":228},[79,77791,60236],{"class":85},[79,77793,455],{"class":228},[79,77795,2824],{"class":89},[79,77797,3205],{"class":448},[79,77799,77226],{"class":49972},[79,77801,77771],{"class":448},[79,77803,2824],{"class":89},[79,77805,2798],{"class":228},[79,77807,77233],{"class":85},[79,77809,455],{"class":228},[79,77811,77812],{"class":89},"'哈哈哈哈哈'",[79,77814,77743],{"class":228},[79,77816,77244],{"class":2313},[79,77818,77819],{"class":81,"line":864},[79,77820,542],{"emptyLinePlaceholder":541},[79,77822,77823],{"class":81,"line":869},[79,77824,77825],{"class":2313},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[79,77827,77828,77830,77832,77834,77836,77838,77840,77843,77845,77847,77849,77851,77853,77855],{"class":81,"line":885},[79,77829,75741],{"class":228},[79,77831,60236],{"class":85},[79,77833,455],{"class":228},[79,77835,2824],{"class":89},[79,77837,3205],{"class":448},[79,77839,77226],{"class":49972},[79,77841,77842],{"class":448},"{4,6}$",[79,77844,2824],{"class":89},[79,77846,2798],{"class":228},[79,77848,77233],{"class":85},[79,77850,455],{"class":228},[79,77852,77740],{"class":89},[79,77854,77743],{"class":228},[79,77856,77244],{"class":2313},[79,77858,77859,77861,77863,77865,77867,77869,77871,77873,77875,77877,77879,77881,77883,77885],{"class":81,"line":891},[79,77860,75741],{"class":228},[79,77862,60236],{"class":85},[79,77864,455],{"class":228},[79,77866,2824],{"class":89},[79,77868,3205],{"class":448},[79,77870,77226],{"class":49972},[79,77872,77842],{"class":448},[79,77874,2824],{"class":89},[79,77876,2798],{"class":228},[79,77878,77233],{"class":85},[79,77880,455],{"class":228},[79,77882,77812],{"class":89},[79,77884,77743],{"class":228},[79,77886,77244],{"class":2313},[79,77888,77889,77891,77893,77895,77897,77899,77901,77903,77905,77907,77909,77911,77914,77916],{"class":81,"line":896},[79,77890,75741],{"class":228},[79,77892,60236],{"class":85},[79,77894,455],{"class":228},[79,77896,2824],{"class":89},[79,77898,3205],{"class":448},[79,77900,77226],{"class":49972},[79,77902,77842],{"class":448},[79,77904,2824],{"class":89},[79,77906,2798],{"class":228},[79,77908,77233],{"class":85},[79,77910,455],{"class":228},[79,77912,77913],{"class":89},"'哈哈哈哈哈哈哈'",[79,77915,77743],{"class":228},[79,77917,77367],{"class":2313},[79,77919,77920],{"class":81,"line":907},[79,77921,542],{"emptyLinePlaceholder":541},[79,77923,77924],{"class":81,"line":912},[79,77925,77926],{"class":2313},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[79,77928,77929,77931,77933,77935,77937,77939,77942,77944,77946,77948,77950,77952,77955,77957],{"class":81,"line":935},[79,77930,75741],{"class":228},[79,77932,60236],{"class":85},[79,77934,455],{"class":228},[79,77936,2824],{"class":89},[79,77938,3205],{"class":448},[79,77940,77941],{"class":96},"[abc]",[79,77943,2546],{"class":448},[79,77945,2824],{"class":89},[79,77947,2798],{"class":228},[79,77949,77233],{"class":85},[79,77951,455],{"class":228},[79,77953,77954],{"class":89},"'a'",[79,77956,77241],{"class":228},[79,77958,77244],{"class":2313},[79,77960,77961,77963,77965,77967,77969,77971,77973,77975,77977,77979,77981,77983,77986,77988],{"class":81,"line":946},[79,77962,75741],{"class":228},[79,77964,60236],{"class":85},[79,77966,455],{"class":228},[79,77968,2824],{"class":89},[79,77970,3205],{"class":448},[79,77972,77941],{"class":96},[79,77974,2546],{"class":448},[79,77976,2824],{"class":89},[79,77978,2798],{"class":228},[79,77980,77233],{"class":85},[79,77982,455],{"class":228},[79,77984,77985],{"class":89},"'b'",[79,77987,77241],{"class":228},[79,77989,77244],{"class":2313},[79,77991,77992,77994,77996,77998,78000,78002,78004,78006,78008,78010,78012,78014,78017,78019],{"class":81,"line":960},[79,77993,75741],{"class":228},[79,77995,60236],{"class":85},[79,77997,455],{"class":228},[79,77999,2824],{"class":89},[79,78001,3205],{"class":448},[79,78003,77941],{"class":96},[79,78005,2546],{"class":448},[79,78007,2824],{"class":89},[79,78009,2798],{"class":228},[79,78011,77233],{"class":85},[79,78013,455],{"class":228},[79,78015,78016],{"class":89},"'c'",[79,78018,77241],{"class":228},[79,78020,77244],{"class":2313},[79,78022,78023,78025,78027,78029,78031,78033,78035,78037,78039,78041,78044,78046],{"class":81,"line":975},[79,78024,75741],{"class":228},[79,78026,60236],{"class":85},[79,78028,455],{"class":228},[79,78030,2824],{"class":89},[79,78032,77941],{"class":96},[79,78034,2824],{"class":89},[79,78036,2798],{"class":228},[79,78038,77233],{"class":85},[79,78040,455],{"class":228},[79,78042,78043],{"class":89},"'ab'",[79,78045,77241],{"class":228},[79,78047,77244],{"class":2313},[79,78049,78050,78052,78054,78056,78058,78060,78062,78064,78066,78068,78070,78072,78074,78076],{"class":81,"line":980},[79,78051,75741],{"class":228},[79,78053,60236],{"class":85},[79,78055,455],{"class":228},[79,78057,2824],{"class":89},[79,78059,3205],{"class":448},[79,78061,77941],{"class":96},[79,78063,2546],{"class":448},[79,78065,2824],{"class":89},[79,78067,2798],{"class":228},[79,78069,77233],{"class":85},[79,78071,455],{"class":228},[79,78073,78043],{"class":89},[79,78075,77241],{"class":228},[79,78077,78078],{"class":2313},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[79,78080,78081,78083,78085,78087,78089,78091,78093,78096,78098,78100,78102,78104,78106,78108],{"class":81,"line":1006},[79,78082,75741],{"class":228},[79,78084,60236],{"class":85},[79,78086,455],{"class":228},[79,78088,2824],{"class":89},[79,78090,3205],{"class":448},[79,78092,77941],{"class":96},[79,78094,78095],{"class":448},"{2}$",[79,78097,2824],{"class":89},[79,78099,2798],{"class":228},[79,78101,77233],{"class":85},[79,78103,455],{"class":228},[79,78105,78043],{"class":89},[79,78107,77241],{"class":228},[79,78109,78110],{"class":2313},"\u002F\u002Ftrue   可以选两个\n",[79,78112,78113,78115,78117,78119,78121,78123,78126,78128,78130,78132,78134,78136,78139,78141],{"class":81,"line":1027},[79,78114,75741],{"class":228},[79,78116,60236],{"class":85},[79,78118,455],{"class":228},[79,78120,2824],{"class":89},[79,78122,3205],{"class":448},[79,78124,78125],{"class":96},"[a-z]",[79,78127,2546],{"class":448},[79,78129,2824],{"class":89},[79,78131,2798],{"class":228},[79,78133,77233],{"class":85},[79,78135,455],{"class":228},[79,78137,78138],{"class":89},"'p'",[79,78140,77297],{"class":228},[79,78142,78143],{"class":2313},"\u002F\u002Ftrue   依然只能选一个\n",[79,78145,78146,78148,78150,78152,78154,78156,78159,78161,78163,78165,78167,78169,78171,78173],{"class":81,"line":1032},[79,78147,75741],{"class":228},[79,78149,60236],{"class":85},[79,78151,455],{"class":228},[79,78153,2824],{"class":89},[79,78155,3205],{"class":448},[79,78157,78158],{"class":96},"[A-Z]",[79,78160,2546],{"class":448},[79,78162,2824],{"class":89},[79,78164,2798],{"class":228},[79,78166,77233],{"class":85},[79,78168,455],{"class":228},[79,78170,78138],{"class":89},[79,78172,77297],{"class":228},[79,78174,77367],{"class":2313},[79,78176,78177,78179,78181,78183,78185,78187,78189,78191,78193,78195,78197,78199,78202,78204],{"class":81,"line":1047},[79,78178,75741],{"class":228},[79,78180,60236],{"class":85},[79,78182,455],{"class":228},[79,78184,2824],{"class":89},[79,78186,3205],{"class":448},[79,78188,78158],{"class":96},[79,78190,2546],{"class":448},[79,78192,2824],{"class":89},[79,78194,2798],{"class":228},[79,78196,77233],{"class":85},[79,78198,455],{"class":228},[79,78200,78201],{"class":89},"'P'",[79,78203,77297],{"class":228},[79,78205,77244],{"class":2313},[79,78207,78208,78210,78212,78214,78216,78218,78221,78223,78225,78227,78229,78231,78234,78236],{"class":81,"line":1053},[79,78209,75741],{"class":228},[79,78211,60236],{"class":85},[79,78213,455],{"class":228},[79,78215,2824],{"class":89},[79,78217,3205],{"class":448},[79,78219,78220],{"class":96},"[0-9]",[79,78222,2546],{"class":448},[79,78224,2824],{"class":89},[79,78226,2798],{"class":228},[79,78228,77233],{"class":85},[79,78230,455],{"class":228},[79,78232,78233],{"class":89},"'0'",[79,78235,77297],{"class":228},[79,78237,77244],{"class":2313},[79,78239,78240,78242,78244,78246,78248,78250,78253,78255,78257,78259,78261,78263,78265,78267],{"class":81,"line":1058},[79,78241,75741],{"class":228},[79,78243,60236],{"class":85},[79,78245,455],{"class":228},[79,78247,2824],{"class":89},[79,78249,3205],{"class":448},[79,78251,78252],{"class":96},"[a-zA-Z0-9]",[79,78254,2546],{"class":448},[79,78256,2824],{"class":89},[79,78258,2798],{"class":228},[79,78260,77233],{"class":85},[79,78262,455],{"class":228},[79,78264,78138],{"class":89},[79,78266,77241],{"class":228},[79,78268,77244],{"class":2313},[79,78270,78271,78273,78275],{"class":81,"line":1069},[79,78272,54410],{"class":228},[79,78274,53807],{"class":232},[79,78276,53301],{"class":228},[79,78278,78279,78281,78283],{"class":81,"line":1081},[79,78280,53779],{"class":228},[79,78282,53794],{"class":232},[79,78284,53301],{"class":228},[79,78286,78287],{"class":81,"line":1086},[79,78288,542],{"emptyLinePlaceholder":541},[79,78290,78291,78293,78295],{"class":81,"line":1108},[79,78292,53779],{"class":228},[79,78294,52630],{"class":232},[79,78296,53301],{"class":228},[24023,78298,78300],{"id":78299},"_3624-修饰符","3.6.2.4 修饰符",[19,78302,78303],{},[3569,78304],{"alt":57,"src":78305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,78307,78308],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,78310,78311],{},[3569,78312],{"alt":57,"src":78313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[51,78315,78317],{"className":52628,"code":78316,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\u003Cbody>\n  \u003Cscript>\n    console.log(\u002F^java$\u002F.test('java')) \u002F\u002Ftrue\n    console.log(\u002F^java$\u002F.test('Java')) \u002F\u002Ffalse\n    \u002F\u002F 不区分大小写、\n    console.log(\u002F^java$\u002Fi.test('Java')) \u002F\u002Ftrue\n    const str = 'java是一门编程语言，学完java工资很高'\n    const result = str.replace(\u002Fjava\u002Fig, '前端')\n    console.log(result)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n",[59,78318,78319,78329,78343,78351,78365,78385,78397,78405,78413,78421,78453,78484,78489,78521,78532,78565,78574,78582,78590],{"__ignoreMap":57},[79,78320,78321,78323,78325,78327],{"class":81,"line":82},[79,78322,53292],{"class":228},[79,78324,53295],{"class":232},[79,78326,53298],{"class":85},[79,78328,53301],{"class":228},[79,78330,78331,78333,78335,78337,78339,78341],{"class":81,"line":167},[79,78332,229],{"class":228},[79,78334,52630],{"class":232},[79,78336,53310],{"class":85},[79,78338,239],{"class":228},[79,78340,53315],{"class":89},[79,78342,53301],{"class":228},[79,78344,78345,78347,78349],{"class":81,"line":178},[79,78346,229],{"class":228},[79,78348,53328],{"class":232},[79,78350,53301],{"class":228},[79,78352,78353,78355,78357,78359,78361,78363],{"class":81,"line":545},[79,78354,54138],{"class":228},[79,78356,53338],{"class":232},[79,78358,53341],{"class":85},[79,78360,239],{"class":228},[79,78362,53346],{"class":89},[79,78364,53301],{"class":228},[79,78366,78367,78369,78371,78373,78375,78377,78379,78381,78383],{"class":81,"line":550},[79,78368,54138],{"class":228},[79,78370,53338],{"class":232},[79,78372,236],{"class":85},[79,78374,239],{"class":228},[79,78376,53385],{"class":89},[79,78378,53365],{"class":85},[79,78380,239],{"class":228},[79,78382,53392],{"class":89},[79,78384,53301],{"class":228},[79,78386,78387,78389,78391,78393,78395],{"class":81,"line":562},[79,78388,54138],{"class":228},[79,78390,53401],{"class":232},[79,78392,53404],{"class":228},[79,78394,53401],{"class":232},[79,78396,53301],{"class":228},[79,78398,78399,78401,78403],{"class":81,"line":568},[79,78400,53779],{"class":228},[79,78402,53328],{"class":232},[79,78404,53301],{"class":228},[79,78406,78407,78409,78411],{"class":81,"line":574},[79,78408,229],{"class":228},[79,78410,53794],{"class":232},[79,78412,53301],{"class":228},[79,78414,78415,78417,78419],{"class":81,"line":579},[79,78416,54138],{"class":228},[79,78418,53807],{"class":232},[79,78420,53301],{"class":228},[79,78422,78423,78425,78427,78429,78431,78433,78436,78438,78440,78442,78444,78446,78449,78451],{"class":81,"line":585},[79,78424,75741],{"class":228},[79,78426,60236],{"class":85},[79,78428,455],{"class":228},[79,78430,2824],{"class":89},[79,78432,3205],{"class":448},[79,78434,78435],{"class":49972},"java",[79,78437,2546],{"class":448},[79,78439,2824],{"class":89},[79,78441,2798],{"class":228},[79,78443,77233],{"class":85},[79,78445,455],{"class":228},[79,78447,78448],{"class":89},"'java'",[79,78450,77743],{"class":228},[79,78452,77244],{"class":2313},[79,78454,78455,78457,78459,78461,78463,78465,78467,78469,78471,78473,78475,78477,78480,78482],{"class":81,"line":591},[79,78456,75741],{"class":228},[79,78458,60236],{"class":85},[79,78460,455],{"class":228},[79,78462,2824],{"class":89},[79,78464,3205],{"class":448},[79,78466,78435],{"class":49972},[79,78468,2546],{"class":448},[79,78470,2824],{"class":89},[79,78472,2798],{"class":228},[79,78474,77233],{"class":85},[79,78476,455],{"class":228},[79,78478,78479],{"class":89},"'Java'",[79,78481,77743],{"class":228},[79,78483,77367],{"class":2313},[79,78485,78486],{"class":81,"line":596},[79,78487,78488],{"class":2313},"    \u002F\u002F 不区分大小写、\n",[79,78490,78491,78493,78495,78497,78499,78501,78503,78505,78507,78509,78511,78513,78515,78517,78519],{"class":81,"line":602},[79,78492,75741],{"class":228},[79,78494,60236],{"class":85},[79,78496,455],{"class":228},[79,78498,2824],{"class":89},[79,78500,3205],{"class":448},[79,78502,78435],{"class":49972},[79,78504,2546],{"class":448},[79,78506,2824],{"class":89},[79,78508,2684],{"class":448},[79,78510,2798],{"class":228},[79,78512,77233],{"class":85},[79,78514,455],{"class":228},[79,78516,78479],{"class":89},[79,78518,77743],{"class":228},[79,78520,77244],{"class":2313},[79,78522,78523,78525,78527,78529],{"class":81,"line":608},[79,78524,13256],{"class":448},[79,78526,75907],{"class":96},[79,78528,556],{"class":448},[79,78530,78531],{"class":89}," 'java是一门编程语言，学完java工资很高'\n",[79,78533,78534,78536,78539,78541,78544,78547,78549,78551,78553,78555,78558,78560,78563],{"class":81,"line":614},[79,78535,13256],{"class":448},[79,78537,78538],{"class":96}," result",[79,78540,556],{"class":448},[79,78542,78543],{"class":228}," str.",[79,78545,78546],{"class":85},"replace",[79,78548,455],{"class":228},[79,78550,2824],{"class":89},[79,78552,78435],{"class":49972},[79,78554,2824],{"class":89},[79,78556,78557],{"class":448},"ig",[79,78559,1020],{"class":228},[79,78561,78562],{"class":89},"'前端'",[79,78564,850],{"class":228},[79,78566,78567,78569,78571],{"class":81,"line":619},[79,78568,75741],{"class":228},[79,78570,60236],{"class":85},[79,78572,78573],{"class":228},"(result)\n",[79,78575,78576,78578,78580],{"class":81,"line":625},[79,78577,54410],{"class":228},[79,78579,53807],{"class":232},[79,78581,53301],{"class":228},[79,78583,78584,78586,78588],{"class":81,"line":631},[79,78585,53779],{"class":228},[79,78587,53794],{"class":232},[79,78589,53301],{"class":228},[79,78591,78592,78594,78596],{"class":81,"line":637},[79,78593,53779],{"class":228},[79,78595,52630],{"class":232},[79,78597,53301],{"class":228},[2159,78599,78600],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}html pre.shiki code .snhLl, html code.shiki .snhLl{--shiki-default:#22863A;--shiki-default-font-weight:bold;--shiki-dark:#85E89D;--shiki-dark-font-weight:bold}",{"title":57,"searchDepth":167,"depth":167,"links":78602},[78603,78613,78625,78642,78649,78657],{"id":55351,"depth":167,"text":55352,"children":78604},[78605,78606,78607,78608,78609,78610,78611,78612],{"id":55355,"depth":178,"text":55356},{"id":55388,"depth":178,"text":55389},{"id":55427,"depth":178,"text":55428},{"id":55585,"depth":178,"text":55586},{"id":55633,"depth":178,"text":55634},{"id":55770,"depth":178,"text":55771},{"id":56091,"depth":178,"text":56092},{"id":59078,"depth":178,"text":59079},{"id":59106,"depth":167,"text":59107,"children":78614},[78615,78616,78617,78618,78619,78620,78621,78622,78623,78624],{"id":59110,"depth":178,"text":59111},{"id":59133,"depth":178,"text":59134},{"id":60048,"depth":178,"text":60049},{"id":60738,"depth":178,"text":60739},{"id":61020,"depth":178,"text":61021},{"id":65180,"depth":178,"text":65181},{"id":65350,"depth":178,"text":65351},{"id":65478,"depth":178,"text":65479},{"id":65503,"depth":178,"text":65504},{"id":66892,"depth":178,"text":66893},{"id":68045,"depth":167,"text":68046,"children":78626},[78627,78628,78629,78630,78631,78632,78633,78634,78635,78636,78637,78638,78639,78640,78641],{"id":68049,"depth":178,"text":68050},{"id":68703,"depth":178,"text":68704},{"id":70398,"depth":178,"text":70399},{"id":70439,"depth":178,"text":70440},{"id":70481,"depth":178,"text":70482},{"id":70495,"depth":178,"text":70496},{"id":70544,"depth":178,"text":70545},{"id":70556,"depth":178,"text":70557},{"id":70571,"depth":178,"text":70572},{"id":70607,"depth":178,"text":70608},{"id":70688,"depth":178,"text":70689},{"id":70816,"depth":178,"text":70817},{"id":70828,"depth":178,"text":70829},{"id":70847,"depth":178,"text":70848},{"id":72958,"depth":178,"text":72959},{"id":72977,"depth":167,"text":72978,"children":78643},[78644,78645,78646,78647,78648],{"id":72998,"depth":178,"text":72999},{"id":73018,"depth":178,"text":73019},{"id":73067,"depth":178,"text":73068},{"id":73192,"depth":178,"text":73193},{"id":73373,"depth":178,"text":73374},{"id":73391,"depth":167,"text":73392,"children":78650},[78651,78652,78653,78654,78655,78656],{"id":73406,"depth":178,"text":73407},{"id":73465,"depth":178,"text":73466},{"id":73489,"depth":178,"text":73490},{"id":73809,"depth":178,"text":73810},{"id":73841,"depth":178,"text":73842},{"id":73864,"depth":178,"text":73865},{"id":76932,"depth":167,"text":76933,"children":78658},[78659,78660],{"id":76966,"depth":178,"text":76967},{"id":77005,"depth":178,"text":77006},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":55323,"description":25402},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":78667,"title":78668,"body":78669,"description":25402,"extension":2186,"meta":94805,"navigation":541,"path":94806,"seo":94807,"stem":94808,"__hash__":94809},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":78670,"toc":94741},[78671,78674,78677,78681,78685,78690,78695,78706,78710,78715,78718,78722,78725,78730,78734,78738,78741,78746,78749,78753,78756,78764,78767,78771,78776,78781,78784,78788,78793,78798,78801,78805,78810,78813,78818,78821,78826,78829,78834,78839,78842,78845,78849,78854,78859,78862,78866,78870,78873,78876,78879,78883,78887,78892,78897,78900,78904,78909,78914,78917,78920,78923,78926,78929,78932,78935,78938,78941,78946,78950,78955,78960,78963,78966,78969,78972,78975,78978,78981,78984,78988,78992,78995,78998,79001,79006,79008,79011,79014,79017,79020,79023,79026,79029,79032,79035,79038,79041,79044,79047,79052,79057,79062,79065,79069,79072,79077,79081,79083,79094,79099,79200,79203,79206,79209,79212,79215,79218,79221,79224,79226,79229,79232,79235,79238,79241,79243,79246,79249,79252,79255,79258,79261,79263,79266,79268,79270,79273,79277,79281,79284,79287,79290,79293,79296,79299,79302,79305,79308,79313,79433,79436,79439,79444,79447,79450,79453,79456,79461,79464,79467,79470,79473,79478,79481,79581,79646,79720,79724,79727,79730,79734,79737,79751,79780,79783,79786,79789,79792,79795,79798,79801,79803,79806,79809,79812,79815,79819,79824,79828,79833,79908,79911,80094,80097,80100,80103,80106,80109,80111,80114,80117,80120,80123,80126,80129,80131,80135,80138,80143,80146,80149,80152,80155,80157,80162,80165,80168,80171,80174,80176,80181,80184,80187,80189,80191,80194,80198,80201,80204,80209,80212,80215,80218,80268,80273,80277,80282,80285,80354,80357,80366,80370,80375,80378,80381,80389,80392,80409,82211,82215,82219,82224,82227,82231,82237,82243,82395,82400,82405,82408,82411,82414,82417,82420,82423,82426,82429,82432,82435,82438,82441,82446,82450,82453,82464,82468,82473,82476,82479,82482,82485,82488,82490,82493,82496,82499,82502,82504,82521,82524,82528,82531,82536,82541,82544,82547,82551,82554,82557,82566,82569,82573,82576,82581,82586,82653,82657,82660,82663,82668,82673,82759,82764,82768,82771,82774,82789,82792,82797,82801,82806,82915,82918,82929,83079,83083,83088,83197,83201,83206,83211,83216,83219,83226,83246,83282,83446,83451,83454,83459,83466,83469,83472,83475,83534,83590,83646,83650,83655,83970,83973,83977,83980,83985,84094,84099,84103,84108,84112,84183,84187,84189,84192,84195,84233,84509,84513,84529,84595,84629,84633,84636,84641,84670,84677,84686,84691,84706,84711,84720,84723,84860,84864,84926,84930,84935,85180,85184,85189,85192,85195,85198,85201,85205,85210,86791,86795,86799,86805,86808,86813,86817,86820,86825,86828,86839,86843,86848,86852,86857,86862,86865,86870,86874,86878,86881,86886,86891,86894,86897,86900,87022,87027,87129,87132,87135,87139,87144,87316,87321,87325,87328,87333,87399,87404,87407,87538,87541,87546,87549,87552,87643,87648,87651,87654,87657,87660,87665,87670,87673,87678,87683,87688,87692,87695,87698,87703,87708,87713,87718,87772,87775,87778,87783,87786,87789,87794,87799,87804,87808,87813,87827,87832,87835,87840,87844,87849,87854,87859,87864,87869,87874,87879,87884,87887,87891,87896,87899,87902,87905,87910,87915,87918,87921,87925,87928,87931,87936,87941,87946,87951,87954,87959,87964,88025,88030,88033,88038,89279,89284,89288,89292,89297,89300,89305,89310,89313,89318,89320,89325,89329,89332,89335,89346,89350,89355,89360,89415,89420,89425,89430,89641,89646,89650,89655,89658,89660,89663,89666,90113,90118,90125,90131,90134,90137,90401,90406,90410,90675,90680,90684,90689,90694,90699,90704,91035,91038,91043,91048,91051,91055,91059,91064,91069,91074,91079,91084,91089,91093,91096,91101,91106,91109,91183,91188,91193,91198,91200,91203,91573,91578,91583,91588,91591,91594,91696,91701,91706,91809,91813,91818,91822,91826,91831,91836,91839,91844,91847,91850,92243,92248,92251,92254,92257,92260,92780,92784,92789,92794,92799,92802,92807,92810,92813,93195,93200,93202,93204,93207,93210,93722,93726,93787,93790,93793,93796,93800,93803,93808,93813,94738],[10,78672,78668],{"id":78673},"_4js进阶",[19,78675,78676],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,78678,78680],{"id":78679},"_41-作用域","4.1 作用域",[339,78682,78684],{"id":78683},"_411-局部作用域","4.1.1 局部作用域",[19,78686,78687],{},[3569,78688],{"alt":57,"src":78689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,78691,78692],{},[3569,78693],{"alt":57,"src":78694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[3246,78696,78697,78700,78703],{},[29,78698,78699],{},"函数作用域在函数内部",[29,78701,78702],{},"块级作用域在{}",[29,78704,78705],{},"对象的那个{}不是作用域，不是块作用域",[339,78707,78709],{"id":78708},"_412-全局作用域","4.1.2 全局作用域",[19,78711,78712],{},[3569,78713],{"alt":57,"src":78714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,78716,78717],{},"window.a=10不要这样写",[339,78719,78721],{"id":78720},"_413-作用域链","4.1.3 作用域链",[19,78723,78724],{},"变量查找机制",[19,78726,78727],{},[3569,78728],{"alt":57,"src":78729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,78731,78733],{"id":78732},"_42-垃圾回收机制","4.2 垃圾回收机制",[339,78735,78737],{"id":78736},"_421-大体介绍","4.2.1 大体介绍",[19,78739,78740],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,78742,78743],{},[3569,78744],{"alt":57,"src":78745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,78747,78748],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[339,78750,78752],{"id":78751},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,78754,78755],{},"堆栈空间分配区别：",[26,78757,78758,78761],{},[29,78759,78760],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[29,78762,78763],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,78765,78766],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[24023,78768,78770],{"id":78769},"_4221-引用计数","4.2.2.1 引用计数",[19,78772,78773],{},[3569,78774],{"alt":57,"src":78775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,78777,78778],{},[3569,78779],{"alt":57,"src":78780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,78782,78783],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[24023,78785,78787],{"id":78786},"_4222-标记清除法","4.2.2.2 标记清除法",[19,78789,78790],{},[3569,78791],{"alt":57,"src":78792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,78794,78795],{},[3569,78796],{"alt":57,"src":78797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,78799,78800],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,78802,78804],{"id":78803},"_43-闭包","4.3 闭包",[19,78806,78807],{},[3569,78808],{"alt":57,"src":78809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,78811,78812],{},"闭包：内层函数+外层函数的变量",[19,78814,78815],{},[3569,78816],{"alt":57,"src":78817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,78819,78820],{},"closure就是闭包",[19,78822,78823],{},[3569,78824],{"alt":57,"src":78825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,78827,78828],{},"内层函数必须包含外层函数的变量才是闭包",[19,78830,78831],{},[3569,78832],{"alt":57,"src":78833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,78835,78836],{},[3569,78837],{"alt":57,"src":78838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,78840,78841],{},"闭包可能会引起内存泄漏",[19,78843,78844],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,78846,78848],{"id":78847},"_44-变量提升","4.4 变量提升",[19,78850,78851],{},[3569,78852],{"alt":57,"src":78853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,78855,78856],{},[3569,78857],{"alt":57,"src":78858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,78860,78861],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,78863,78865],{"id":78864},"_45-函数进阶","4.5 函数进阶",[339,78867,78869],{"id":78868},"_451-函数提升","4.5.1 函数提升",[19,78871,78872],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,78874,78875],{},"只提升函数声明，不提升函数调用",[53807,78877,78878],{},"\n\nfn()\n\nfunction fn() {\n\nconsole.log('函数提升')\n\n}\n\n上方程序在执行前将函数的声明进行了提前，但是不提前调用，然后我们去调用，是没有问题的\n\nfun()\n\nvar fun = function () {\n\nconsole.log('我将报错')\n\n}\n\n这个一个用var声明的变量，赋值等于一个匿名函数，var声明的变量会提前，但赋值不提前，所有在前边调用，此时会报错\n\n",[339,78880,78882],{"id":78881},"_452-函数参数","4.5.2 函数参数",[24023,78884,78886],{"id":78885},"_4521-动态参数","4.5.2.1 动态参数",[19,78888,78889],{},[3569,78890],{"alt":57,"src":78891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,78893,78894],{},[3569,78895],{"alt":57,"src":78896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,78898,78899],{},"箭头函数里边没有arguments",[24023,78901,78903],{"id":78902},"_4522-剩余参数","4.5.2.2 剩余参数",[19,78905,78906],{},[3569,78907],{"alt":57,"src":78908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,78910,78911],{},[3569,78912],{"alt":57,"src":78913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,78915,78916],{},"剩余参数使用的时候不需要写...",[19,78918,78919],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,78921,78922],{},"  function getSum(a,b,...arr) {",[19,78924,78925],{},"  console.log(11)",[19,78927,78928],{},"  }",[19,78930,78931],{},"  getSum(1,2,3,4)",[19,78933,78934],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,78936,78937],{},"  getSum(1,2)",[19,78939,78940],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,78942,78943],{},[3569,78944],{"alt":57,"src":78945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[24023,78947,78949],{"id":78948},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,78951,78952],{},[3569,78953],{"alt":57,"src":78954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,78956,78957],{},[3569,78958],{"alt":57,"src":78959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,78961,78962],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,78964,78965],{},"展开运算符可以用于数组之间的合并：",[19,78967,78968],{},"const arr1 = [1, 2, 3]",[19,78970,78971],{},"const arr2 = [3, 4, 5]",[19,78973,78974],{},"const arr = [...arr1, ...arr2]",[19,78976,78977],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,78979,78980],{},"剩余参数：函数参数使用，得到真数组",[19,78982,78983],{},"展开运算符：数组中使用，数组展开",[339,78985,78987],{"id":78986},"_453-箭头函数","4.5.3 箭头函数",[24023,78989,78991],{"id":78990},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,78993,78994],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,78996,78997],{},"它不是万能的！！！",[19,78999,79000],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,79002,79003],{},[3569,79004],{"alt":57,"src":79005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,79007,2287],{},[19,79009,79010],{},"① 只有一个形参的时候，可以省略小括号：",[19,79012,79013],{},"const fn=x=>{console.log(x)}",[19,79015,79016],{},"② 只有一行代码时可以省略大括号：",[19,79018,79019],{},"const fn=x=>console.log(11)",[19,79021,79022],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,79024,79025],{},"const fn=x=>x+x",[19,79027,79028],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,79030,79031],{},"⑤ 阻止表单默认提交：",[19,79033,79034],{},"const form = document.querySelector('form')",[19,79036,79037],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,79039,79040],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,79042,79043],{},"const fn=uname=>({uname:uname})",[19,79045,79046],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,79048,79049],{},[3569,79050],{"alt":57,"src":79051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,79053,79054],{},[3569,79055],{"alt":57,"src":79056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,79058,79059],{},[3569,79060],{"alt":57,"src":79061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,79063,79064],{},"一定不要忘记用()，有()就理解为自带return",[24023,79066,79068],{"id":79067},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,79070,79071],{},"箭头函数是没有动态参数的arguments",[19,79073,79074],{},[3569,79075],{"alt":57,"src":79076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[24023,79078,79080],{"id":79079},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,79082,13367],{},[26,79084,79085,79088,79091],{},[29,79086,79087],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[29,79089,79090],{},"事件回调函数使用箭头函数时，this 为全局的 window",[29,79092,79093],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,79095,79096],{},[3569,79097],{"alt":57,"src":79098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[51,79100,79102],{"className":219,"code":79101,"language":221,"meta":57,"style":57},"  \u003Cscript>\n    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n    console.log(this) \u002F\u002F指向window\n    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n    function fn() {\n      console.log(this)  \u002F\u002F指向window\n    }\n    window.fn()\u002F\u002F实际写法，调用时可以省略window\n\n    const obj = {\n      name: 'andy',\n      sayHai: function () {\n        console.log(this)\n      }\n    }\n    obj.sayHai() \u002F\u002Fthis指向obj\n    \u002F\u002F 2.箭头函数的this\n    const fn = () => console.log(this)\n  \u003C\u002Fscript>\n",[59,79103,79104,79112,79117,79122,79127,79132,79137,79141,79146,79150,79154,79159,79164,79169,79173,79177,79182,79187,79192],{"__ignoreMap":57},[79,79105,79106,79108,79110],{"class":81,"line":82},[79,79107,54138],{"class":228},[79,79109,53807],{"class":232},[79,79111,53301],{"class":228},[79,79113,79114],{"class":81,"line":167},[79,79115,79116],{"class":228},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[79,79118,79119],{"class":81,"line":178},[79,79120,79121],{"class":228},"    console.log(this) \u002F\u002F指向window\n",[79,79123,79124],{"class":81,"line":545},[79,79125,79126],{"class":228},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[79,79128,79129],{"class":81,"line":550},[79,79130,79131],{"class":228},"    function fn() {\n",[79,79133,79134],{"class":81,"line":562},[79,79135,79136],{"class":228},"      console.log(this)  \u002F\u002F指向window\n",[79,79138,79139],{"class":81,"line":568},[79,79140,4272],{"class":228},[79,79142,79143],{"class":81,"line":574},[79,79144,79145],{"class":228},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[79,79147,79148],{"class":81,"line":579},[79,79149,542],{"emptyLinePlaceholder":541},[79,79151,79152],{"class":81,"line":585},[79,79153,73511],{"class":228},[79,79155,79156],{"class":81,"line":591},[79,79157,79158],{"class":228},"      name: 'andy',\n",[79,79160,79161],{"class":81,"line":596},[79,79162,79163],{"class":228},"      sayHai: function () {\n",[79,79165,79166],{"class":81,"line":602},[79,79167,79168],{"class":228},"        console.log(this)\n",[79,79170,79171],{"class":81,"line":608},[79,79172,54391],{"class":228},[79,79174,79175],{"class":81,"line":614},[79,79176,4272],{"class":228},[79,79178,79179],{"class":81,"line":619},[79,79180,79181],{"class":228},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[79,79183,79184],{"class":81,"line":625},[79,79185,79186],{"class":228},"    \u002F\u002F 2.箭头函数的this\n",[79,79188,79189],{"class":81,"line":631},[79,79190,79191],{"class":228},"    const fn = () => console.log(this)\n",[79,79193,79194,79196,79198],{"class":81,"line":637},[79,79195,54410],{"class":228},[79,79197,53807],{"class":232},[79,79199,53301],{"class":228},[19,79201,79202],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,79204,79205],{},"const fn = () => console.log(this)",[19,79207,79208],{},"fn() \u002F\u002F指向window",[19,79210,79211],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,79213,79214],{},"①",[19,79216,79217],{},"const obj = {",[19,79219,79220],{},"uname: 'pink老师',",[19,79222,79223],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,79225,3185],{},[19,79227,79228],{},"调用对象里边的函数",[19,79230,79231],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,79233,79234],{},"obj.sayHai()",[19,79236,79237],{},"②",[19,79239,79240],{},"const obj1 = {",[19,79242,79220],{},[19,79244,79245],{},"sayHai: function () {",[19,79247,79248],{},"let i = 10",[19,79250,79251],{},"const count = () => {",[19,79253,79254],{},"console.log(this)",[19,79256,79257],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,79259,79260],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,79262,3185],{},[19,79264,79265],{},"count()",[19,79267,3185],{},[19,79269,3185],{},[19,79271,79272],{},"obj1.sayHai()",[14,79274,79276],{"id":79275},"_46-解构赋值","4.6 解构赋值",[339,79278,79280],{"id":79279},"_461-数组解构","4.6.1 数组解构",[19,79282,79283],{},"以前要是使用数组中的值的话：",[19,79285,79286],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,79288,79289],{},"const arr=[100,60,80]",[19,79291,79292],{},"const max=arr[0]",[19,79294,79295],{},"const min=arr[1]",[19,79297,79298],{},"const avg=arr[2]",[19,79300,79301],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,79303,79304],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,79306,79307],{},"这个写法就类似于上边的那种用很多const的方法",[19,79309,79310],{},[3569,79311],{"alt":57,"src":79312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[51,79314,79316],{"className":52628,"code":79315,"language":52630,"meta":57,"style":57},"①变量之间交换值:\nlet a=1\nlet b=2;\n必须加这行代码，不然就会报错\n[b,a]=[a,b]\n\n\n可以写成下面的方式：\nlet a=1\nlet b=2\n;[b,a]=[a,b]\n\n②排序\nconst arr1 = [2, 6, 4, 3, 5, 1]\nfor (let i = 0; i \u003C arr1.length; i++) {\n   for (let j = 0; j \u003C arr1.length - 1; j++) {\n      if (arr1[j] > arr1[j + 1]) {\n         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n       }\n   }\n}\nconsole.log(arr1)\n",[59,79317,79318,79323,79328,79333,79338,79343,79347,79351,79356,79360,79365,79370,79374,79379,79384,79395,79405,79410,79415,79420,79424,79428],{"__ignoreMap":57},[79,79319,79320],{"class":81,"line":82},[79,79321,79322],{"class":228},"①变量之间交换值:\n",[79,79324,79325],{"class":81,"line":167},[79,79326,79327],{"class":228},"let a=1\n",[79,79329,79330],{"class":81,"line":178},[79,79331,79332],{"class":228},"let b=2;\n",[79,79334,79335],{"class":81,"line":545},[79,79336,79337],{"class":228},"必须加这行代码，不然就会报错\n",[79,79339,79340],{"class":81,"line":550},[79,79341,79342],{"class":228},"[b,a]=[a,b]\n",[79,79344,79345],{"class":81,"line":562},[79,79346,542],{"emptyLinePlaceholder":541},[79,79348,79349],{"class":81,"line":568},[79,79350,542],{"emptyLinePlaceholder":541},[79,79352,79353],{"class":81,"line":574},[79,79354,79355],{"class":228},"可以写成下面的方式：\n",[79,79357,79358],{"class":81,"line":579},[79,79359,79327],{"class":228},[79,79361,79362],{"class":81,"line":585},[79,79363,79364],{"class":228},"let b=2\n",[79,79366,79367],{"class":81,"line":591},[79,79368,79369],{"class":228},";[b,a]=[a,b]\n",[79,79371,79372],{"class":81,"line":596},[79,79373,542],{"emptyLinePlaceholder":541},[79,79375,79376],{"class":81,"line":602},[79,79377,79378],{"class":228},"②排序\n",[79,79380,79381],{"class":81,"line":608},[79,79382,79383],{"class":228},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[79,79385,79386,79389,79392],{"class":81,"line":614},[79,79387,79388],{"class":228},"for (let i = 0; i ",[79,79390,229],{"class":79391},"s7hpK",[79,79393,79394],{"class":228}," arr1.length; i++) {\n",[79,79396,79397,79400,79402],{"class":81,"line":619},[79,79398,79399],{"class":228},"   for (let j = 0; j ",[79,79401,229],{"class":79391},[79,79403,79404],{"class":228}," arr1.length - 1; j++) {\n",[79,79406,79407],{"class":81,"line":625},[79,79408,79409],{"class":228},"      if (arr1[j] > arr1[j + 1]) {\n",[79,79411,79412],{"class":81,"line":631},[79,79413,79414],{"class":228},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[79,79416,79417],{"class":81,"line":637},[79,79418,79419],{"class":228},"       }\n",[79,79421,79422],{"class":81,"line":643},[79,79423,6380],{"class":228},[79,79425,79426],{"class":81,"line":649},[79,79427,3671],{"class":228},[79,79429,79430],{"class":81,"line":655},[79,79431,79432],{"class":228},"console.log(arr1)\n",[19,79434,79435],{},"数组解构的细节：",[19,79437,79438],{},"①变量多，单元值少",[19,79440,79441],{},[3569,79442],{"alt":57,"src":79443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,79445,79446],{},"防止出现undefined的方法：",[19,79448,79449],{},"const [a=0,b=0] =[1]",[19,79451,79452],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,79454,79455],{},"②变量少，单元值多",[19,79457,79458],{},[3569,79459],{"alt":57,"src":79460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,79462,79463],{},"此时可以使用剩余参数来接收多余的值",[19,79465,79466],{},"const [a,b,...c]=[1,2,3,4]",[19,79468,79469],{},"console.log(c) 输出[3,4]",[19,79471,79472],{},"③可以按需导入，忽略某些返回值",[19,79474,79475],{},[3569,79476],{"alt":57,"src":79477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,79479,79480],{},"④支持多维数组的结构",[51,79482,79486],{"className":79483,"code":79484,"language":79485,"meta":57,"style":57},"language-cpp shiki shiki-themes github-light github-dark","const arr = [1, 2, [3, 4]]\nconsole.log(arr[0])  \u002F\u002F1\nconsole.log(arr[1])  \u002F\u002F2\nconsole.log(arr[2])  \u002F\u002F[3,4]\nconsole.log(arr[2][0])  \u002F\u002F3\n","cpp",[59,79487,79488,79516,79532,79547,79562],{"__ignoreMap":57},[79,79489,79490,79492,79494,79496,79498,79500,79502,79504,79507,79509,79511,79513],{"class":81,"line":82},[79,79491,8857],{"class":448},[79,79493,53827],{"class":228},[79,79495,239],{"class":448},[79,79497,54220],{"class":228},[79,79499,775],{"class":96},[79,79501,1020],{"class":228},[79,79503,2331],{"class":96},[79,79505,79506],{"class":228},", [",[79,79508,970],{"class":96},[79,79510,1020],{"class":228},[79,79512,2537],{"class":96},[79,79514,79515],{"class":228},"]]\n",[79,79517,79518,79521,79523,79525,79527,79529],{"class":81,"line":167},[79,79519,79520],{"class":228},"console.",[79,79522,60236],{"class":85},[79,79524,5924],{"class":228},[79,79526,759],{"class":96},[79,79528,6287],{"class":228},[79,79530,79531],{"class":2313},"  \u002F\u002F1\n",[79,79533,79534,79536,79538,79540,79542,79544],{"class":81,"line":178},[79,79535,79520],{"class":228},[79,79537,60236],{"class":85},[79,79539,5924],{"class":228},[79,79541,775],{"class":96},[79,79543,6287],{"class":228},[79,79545,79546],{"class":2313},"  \u002F\u002F2\n",[79,79548,79549,79551,79553,79555,79557,79559],{"class":81,"line":545},[79,79550,79520],{"class":228},[79,79552,60236],{"class":85},[79,79554,5924],{"class":228},[79,79556,2331],{"class":96},[79,79558,6287],{"class":228},[79,79560,79561],{"class":2313},"  \u002F\u002F[3,4]\n",[79,79563,79564,79566,79568,79570,79572,79574,79576,79578],{"class":81,"line":550},[79,79565,79520],{"class":228},[79,79567,60236],{"class":85},[79,79569,5924],{"class":228},[79,79571,2331],{"class":96},[79,79573,6971],{"class":228},[79,79575,759],{"class":96},[79,79577,6287],{"class":228},[79,79579,79580],{"class":2313},"  \u002F\u002F3\n",[51,79582,79584],{"className":79483,"code":79583,"language":79485,"meta":57,"style":57},"const [a, b, c] = [1, 2, [3, 4]]\nconsole.log(a)  \u002F\u002F1\nconsole.log(b)  \u002F\u002F2\nconsole.log(c)  \u002F\u002F[3,4]\n",[59,79585,79586,79613,79624,79635],{"__ignoreMap":57},[79,79587,79588,79590,79593,79595,79597,79599,79601,79603,79605,79607,79609,79611],{"class":81,"line":82},[79,79589,8857],{"class":448},[79,79591,79592],{"class":228}," [a, b, c] ",[79,79594,239],{"class":448},[79,79596,54220],{"class":228},[79,79598,775],{"class":96},[79,79600,1020],{"class":228},[79,79602,2331],{"class":96},[79,79604,79506],{"class":228},[79,79606,970],{"class":96},[79,79608,1020],{"class":228},[79,79610,2537],{"class":96},[79,79612,79515],{"class":228},[79,79614,79615,79617,79619,79622],{"class":81,"line":167},[79,79616,79520],{"class":228},[79,79618,60236],{"class":85},[79,79620,79621],{"class":228},"(a)",[79,79623,79531],{"class":2313},[79,79625,79626,79628,79630,79633],{"class":81,"line":178},[79,79627,79520],{"class":228},[79,79629,60236],{"class":85},[79,79631,79632],{"class":228},"(b)",[79,79634,79546],{"class":2313},[79,79636,79637,79639,79641,79644],{"class":81,"line":545},[79,79638,79520],{"class":228},[79,79640,60236],{"class":85},[79,79642,79643],{"class":228},"(c)",[79,79645,79561],{"class":2313},[51,79647,79649],{"className":79483,"code":79648,"language":79485,"meta":57,"style":57},"const [a, b, [c, d]] = [1, 2, [3, 4]]\nconsole.log(a)  \u002F\u002F1\nconsole.log(b)  \u002F\u002F2\nconsole.log(c)  \u002F\u002F3\nconsole.log(d)  \u002F\u002F4\n",[59,79650,79651,79678,79688,79698,79708],{"__ignoreMap":57},[79,79652,79653,79655,79658,79660,79662,79664,79666,79668,79670,79672,79674,79676],{"class":81,"line":82},[79,79654,8857],{"class":448},[79,79656,79657],{"class":228}," [a, b, [c, d]] ",[79,79659,239],{"class":448},[79,79661,54220],{"class":228},[79,79663,775],{"class":96},[79,79665,1020],{"class":228},[79,79667,2331],{"class":96},[79,79669,79506],{"class":228},[79,79671,970],{"class":96},[79,79673,1020],{"class":228},[79,79675,2537],{"class":96},[79,79677,79515],{"class":228},[79,79679,79680,79682,79684,79686],{"class":81,"line":167},[79,79681,79520],{"class":228},[79,79683,60236],{"class":85},[79,79685,79621],{"class":228},[79,79687,79531],{"class":2313},[79,79689,79690,79692,79694,79696],{"class":81,"line":178},[79,79691,79520],{"class":228},[79,79693,60236],{"class":85},[79,79695,79632],{"class":228},[79,79697,79546],{"class":2313},[79,79699,79700,79702,79704,79706],{"class":81,"line":545},[79,79701,79520],{"class":228},[79,79703,60236],{"class":85},[79,79705,79643],{"class":228},[79,79707,79580],{"class":2313},[79,79709,79710,79712,79714,79717],{"class":81,"line":550},[79,79711,79520],{"class":228},[79,79713,60236],{"class":85},[79,79715,79716],{"class":228},"(d)",[79,79718,79719],{"class":2313},"  \u002F\u002F4\n",[339,79721,79723],{"id":79722},"_462-对象解构","4.6.2 对象解构",[19,79725,79726],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,79728,79729],{},"用的非常非常多！！！！！！",[24023,79731,79733],{"id":79732},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,79735,79736],{},"基本语法：",[26,79738,79739,79742,79745,79748],{},[29,79740,79741],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[29,79743,79744],{},"对象属性的值将被赋值给与属性名相同的变量",[29,79746,79747],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[29,79749,79750],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[51,79752,79754],{"className":52628,"code":79753,"language":52630,"meta":57,"style":57},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[59,79755,79756,79761,79766,79771,79775],{"__ignoreMap":57},[79,79757,79758],{"class":81,"line":82},[79,79759,79760],{"class":228},"const obj = {\n",[79,79762,79763],{"class":81,"line":167},[79,79764,79765],{"class":228},"   uname: 'pink老师',\n",[79,79767,79768],{"class":81,"line":178},[79,79769,79770],{"class":228},"   age: 18,\n",[79,79772,79773],{"class":81,"line":545},[79,79774,3671],{"class":228},[79,79776,79777],{"class":81,"line":550},[79,79778,79779],{"class":228},"const { uname, age } = obj\n",[19,79781,79782],{},"上方代码这样写等价于：",[19,79784,79785],{},"const uname等价于obj.uname",[19,79787,79788],{},"变量名可以重新改名：",[19,79790,79791],{},"const uname='red老师'",[19,79793,79794],{},"const user={",[19,79796,79797],{},"  uname:'pink老师',",[19,79799,79800],{},"  age:18",[19,79802,3185],{},[19,79804,79805],{},"const {uname,age}=user",[19,79807,79808],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,79810,79811],{},"const {旧变量名：新变量名}=对象",[19,79813,79814],{},"const {uname:username,age}=user",[24023,79816,79818],{"id":79817},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,79820,79821],{},[3569,79822],{"alt":57,"src":79823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[24023,79825,79827],{"id":79826},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,79829,79830],{},[3569,79831],{"alt":57,"src":79832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[51,79834,79836],{"className":219,"code":79835,"language":221,"meta":57,"style":57},"  \u003Cscript>\n    const pig = {\n      name: '佩奇',\n      family: {\n        mother: '猪妈妈',\n        father: '猪爸爸',\n        sister: '乔治'\n      },\n      age: 6\n    }\n    \u002F\u002F 多级对象解构\n    const { name, family: { mother, father, sister }, age } = pig\n  \u003C\u002Fscript>\n",[59,79837,79838,79846,79851,79856,79861,79866,79871,79876,79881,79886,79890,79895,79900],{"__ignoreMap":57},[79,79839,79840,79842,79844],{"class":81,"line":82},[79,79841,54138],{"class":228},[79,79843,53807],{"class":232},[79,79845,53301],{"class":228},[79,79847,79848],{"class":81,"line":167},[79,79849,79850],{"class":228},"    const pig = {\n",[79,79852,79853],{"class":81,"line":178},[79,79854,79855],{"class":228},"      name: '佩奇',\n",[79,79857,79858],{"class":81,"line":545},[79,79859,79860],{"class":228},"      family: {\n",[79,79862,79863],{"class":81,"line":550},[79,79864,79865],{"class":228},"        mother: '猪妈妈',\n",[79,79867,79868],{"class":81,"line":562},[79,79869,79870],{"class":228},"        father: '猪爸爸',\n",[79,79872,79873],{"class":81,"line":568},[79,79874,79875],{"class":228},"        sister: '乔治'\n",[79,79877,79878],{"class":81,"line":574},[79,79879,79880],{"class":228},"      },\n",[79,79882,79883],{"class":81,"line":579},[79,79884,79885],{"class":228},"      age: 6\n",[79,79887,79888],{"class":81,"line":585},[79,79889,4272],{"class":228},[79,79891,79892],{"class":81,"line":591},[79,79893,79894],{"class":228},"    \u002F\u002F 多级对象解构\n",[79,79896,79897],{"class":81,"line":596},[79,79898,79899],{"class":228},"    const { name, family: { mother, father, sister }, age } = pig\n",[79,79901,79902,79904,79906],{"class":81,"line":602},[79,79903,54410],{"class":228},[79,79905,53807],{"class":232},[79,79907,53301],{"class":228},[19,79909,79910],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[51,79912,79915],{"className":79913,"code":79914,"language":78435,"meta":57,"style":57},"language-java shiki shiki-themes github-light github-dark","    \u002F\u002F 这是后台传递过来的数据\n    const msg = {\n      \"code\": 200,\n      \"msg\": \"获取新闻列表成功\",\n      \"data\": [\n        {\n          \"id\": 1,\n          \"title\": \"5G商用自己，三大运用商收入下降\",\n          \"count\": 58\n        },\n        {\n          \"id\": 2,\n          \"title\": \"国际媒体头条速览\",\n          \"count\": 56\n        },\n        {\n          \"id\": 3,\n          \"title\": \"乌克兰和俄罗斯持续冲突\",\n          \"count\": 1669\n        },\n      ]\n    }\n",[59,79916,79917,79922,79933,79945,79957,79966,79970,79981,79993,80003,80008,80012,80022,80033,80042,80046,80050,80061,80072,80081,80085,80090],{"__ignoreMap":57},[79,79918,79919],{"class":81,"line":82},[79,79920,79921],{"class":2313},"    \u002F\u002F 这是后台传递过来的数据\n",[79,79923,79924,79926,79929,79931],{"class":81,"line":167},[79,79925,13256],{"class":448},[79,79927,79928],{"class":228}," msg ",[79,79930,239],{"class":448},[79,79932,17604],{"class":228},[79,79934,79935,79938,79940,79943],{"class":81,"line":178},[79,79936,79937],{"class":89},"      \"code\"",[79,79939,3099],{"class":448},[79,79941,79942],{"class":96}," 200",[79,79944,33468],{"class":228},[79,79946,79947,79950,79952,79955],{"class":81,"line":545},[79,79948,79949],{"class":89},"      \"msg\"",[79,79951,3099],{"class":448},[79,79953,79954],{"class":89}," \"获取新闻列表成功\"",[79,79956,33468],{"class":228},[79,79958,79959,79962,79964],{"class":81,"line":550},[79,79960,79961],{"class":89},"      \"data\"",[79,79963,3099],{"class":448},[79,79965,57436],{"class":228},[79,79967,79968],{"class":81,"line":562},[79,79969,4593],{"class":228},[79,79971,79972,79975,79977,79979],{"class":81,"line":568},[79,79973,79974],{"class":89},"          \"id\"",[79,79976,3099],{"class":448},[79,79978,27137],{"class":96},[79,79980,33468],{"class":228},[79,79982,79983,79986,79988,79991],{"class":81,"line":574},[79,79984,79985],{"class":89},"          \"title\"",[79,79987,3099],{"class":448},[79,79989,79990],{"class":89}," \"5G商用自己，三大运用商收入下降\"",[79,79992,33468],{"class":228},[79,79994,79995,79998,80000],{"class":81,"line":579},[79,79996,79997],{"class":89},"          \"count\"",[79,79999,3099],{"class":448},[79,80001,80002],{"class":96}," 58\n",[79,80004,80005],{"class":81,"line":585},[79,80006,80007],{"class":228},"        },\n",[79,80009,80010],{"class":81,"line":591},[79,80011,4593],{"class":228},[79,80013,80014,80016,80018,80020],{"class":81,"line":596},[79,80015,79974],{"class":89},[79,80017,3099],{"class":448},[79,80019,16788],{"class":96},[79,80021,33468],{"class":228},[79,80023,80024,80026,80028,80031],{"class":81,"line":602},[79,80025,79985],{"class":89},[79,80027,3099],{"class":448},[79,80029,80030],{"class":89}," \"国际媒体头条速览\"",[79,80032,33468],{"class":228},[79,80034,80035,80037,80039],{"class":81,"line":608},[79,80036,79997],{"class":89},[79,80038,3099],{"class":448},[79,80040,80041],{"class":96}," 56\n",[79,80043,80044],{"class":81,"line":614},[79,80045,80007],{"class":228},[79,80047,80048],{"class":81,"line":619},[79,80049,4593],{"class":228},[79,80051,80052,80054,80056,80059],{"class":81,"line":625},[79,80053,79974],{"class":89},[79,80055,3099],{"class":448},[79,80057,80058],{"class":96}," 3",[79,80060,33468],{"class":228},[79,80062,80063,80065,80067,80070],{"class":81,"line":631},[79,80064,79985],{"class":89},[79,80066,3099],{"class":448},[79,80068,80069],{"class":89}," \"乌克兰和俄罗斯持续冲突\"",[79,80071,33468],{"class":228},[79,80073,80074,80076,80078],{"class":81,"line":637},[79,80075,79997],{"class":89},[79,80077,3099],{"class":448},[79,80079,80080],{"class":96}," 1669\n",[79,80082,80083],{"class":81,"line":643},[79,80084,80007],{"class":228},[79,80086,80087],{"class":81,"line":649},[79,80088,80089],{"class":228},"      ]\n",[79,80091,80092],{"class":81,"line":655},[79,80093,4272],{"class":228},[19,80095,80096],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,80098,80099],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,80101,80102],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[19,80104,80105],{},"function({data}) {",[19,80107,80108],{},"console.log(data)",[19,80110,3185],{},[19,80112,80113],{},"render(msg)",[19,80115,80116],{},"实参传递给形参的时候解构了",[19,80118,80119],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,80121,80122],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,80124,80125],{},"function render({data:mydata}) {",[19,80127,80128],{},"  console.log(data)",[19,80130,3185],{},[339,80132,80134],{"id":80133},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,80136,80137],{},"有两种情况：一个是数组结构，一个是立即执行函数",[26,80139,80140],{},[29,80141,80142],{},"如果对一个数组进行遍历，有两种方式：",[19,80144,80145],{},"①法1",[19,80147,80148],{},"const arr=[1,2,3]",[19,80150,80151],{},"arr.map(function(item,index) {",[19,80153,80154],{},"  console.log(item)",[19,80156,54457],{},[19,80158,80159],{},[3569,80160],{"alt":57,"src":80161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,80163,80164],{},"②法2",[19,80166,80167],{},"const str='pink'",[19,80169,80170],{},"[1,2,3].map(function(item,index) {",[19,80172,80173],{},"console.log(item)",[19,80175,54457],{},[19,80177,80178],{},[3569,80179],{"alt":57,"src":80180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,80182,80183],{},"此时会报错",[19,80185,80186],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,80188,80173],{},[19,80190,54457],{},[19,80192,80193],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,80195,80197],{"id":80196},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,80199,80200],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,80202,80203],{},"可以理解为加强版的for循环",[19,80205,80206],{},[3569,80207],{"alt":57,"src":80208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,80210,80211],{},"里边不写return，不返回数组，只遍历不返回",[19,80213,80214],{},"map是返回数组",[19,80216,80217],{},"forEach主要用于遍历数组对象",[51,80219,80221],{"className":219,"code":80220,"language":221,"meta":57,"style":57},"  \u003Cscript>\n    const arr = ['red', 'green', 'pink']\n    const result = arr.forEach(function (item, index) {\n      console.log(item)\n      console.log(index)\n    })\n    console.log(result)\n  \u003C\u002Fscript>\n",[59,80222,80223,80231,80236,80241,80246,80251,80255,80260],{"__ignoreMap":57},[79,80224,80225,80227,80229],{"class":81,"line":82},[79,80226,54138],{"class":228},[79,80228,53807],{"class":232},[79,80230,53301],{"class":228},[79,80232,80233],{"class":81,"line":167},[79,80234,80235],{"class":228},"    const arr = ['red', 'green', 'pink']\n",[79,80237,80238],{"class":81,"line":178},[79,80239,80240],{"class":228},"    const result = arr.forEach(function (item, index) {\n",[79,80242,80243],{"class":81,"line":545},[79,80244,80245],{"class":228},"      console.log(item)\n",[79,80247,80248],{"class":81,"line":550},[79,80249,80250],{"class":228},"      console.log(index)\n",[79,80252,80253],{"class":81,"line":562},[79,80254,35458],{"class":228},[79,80256,80257],{"class":81,"line":568},[79,80258,80259],{"class":228},"    console.log(result)\n",[79,80261,80262,80264,80266],{"class":81,"line":574},[79,80263,54410],{"class":228},[79,80265,53807],{"class":232},[79,80267,53301],{"class":228},[19,80269,80270],{},[3569,80271],{"alt":57,"src":80272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,80274,80276],{"id":80275},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,80278,80279],{},[3569,80280],{"alt":57,"src":80281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,80283,80284],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[51,80286,80288],{"className":219,"code":80287,"language":221,"meta":57,"style":57},"\u003Cbody>\n  \u003Cscript>\n    const arr = [10, 20, 30]\n    const newArr = arr.filter(function (item, index) {\n      console.log(item)\n      console.log(index)\n      return item >= 20\n    })\n    console.log(newArr)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[59,80289,80290,80298,80306,80311,80316,80320,80324,80329,80333,80338,80346],{"__ignoreMap":57},[79,80291,80292,80294,80296],{"class":81,"line":82},[79,80293,229],{"class":228},[79,80295,53794],{"class":232},[79,80297,53301],{"class":228},[79,80299,80300,80302,80304],{"class":81,"line":167},[79,80301,54138],{"class":228},[79,80303,53807],{"class":232},[79,80305,53301],{"class":228},[79,80307,80308],{"class":81,"line":178},[79,80309,80310],{"class":228},"    const arr = [10, 20, 30]\n",[79,80312,80313],{"class":81,"line":545},[79,80314,80315],{"class":228},"    const newArr = arr.filter(function (item, index) {\n",[79,80317,80318],{"class":81,"line":550},[79,80319,80245],{"class":228},[79,80321,80322],{"class":81,"line":562},[79,80323,80250],{"class":228},[79,80325,80326],{"class":81,"line":568},[79,80327,80328],{"class":228},"      return item >= 20\n",[79,80330,80331],{"class":81,"line":574},[79,80332,35458],{"class":228},[79,80334,80335],{"class":81,"line":579},[79,80336,80337],{"class":228},"    console.log(newArr)\n",[79,80339,80340,80342,80344],{"class":81,"line":585},[79,80341,54410],{"class":228},[79,80343,53807],{"class":232},[79,80345,53301],{"class":228},[79,80347,80348,80350,80352],{"class":81,"line":591},[79,80349,53779],{"class":228},[79,80351,53794],{"class":232},[79,80353,53301],{"class":228},[19,80355,80356],{},"这个也可以写成箭头函数：",[51,80358,80360],{"className":52628,"code":80359,"language":52630,"meta":57,"style":57},"const newArr = arr.filter(item => item >= 20)\n",[59,80361,80362],{"__ignoreMap":57},[79,80363,80364],{"class":81,"line":82},[79,80365,80359],{"class":228},[14,80367,80369],{"id":80368},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,80371,80372],{},[3569,80373],{"alt":57,"src":80374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,80376,80377],{},"步骤：",[19,80379,80380],{},"①：渲染页面模块",[3246,80382,80383,80386],{},[29,80384,80385],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[29,80387,80388],{},"用forEach+字符串的形式",[19,80390,80391],{},"②：点击不同需求，显示不同页面内容",[3246,80393,80394,80397,80400,80403,80406],{},[29,80395,80396],{},"点击采取事件委托方式 .filter",[29,80398,80399],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[29,80401,80402],{},"筛选条件是根据点击的 data-index 来判断",[29,80404,80405],{},"可以使用对象解构，把事件对象解构",[29,80407,80408],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[51,80410,80412],{"className":52628,"code":80411,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n      box-sizing: border-box;\n    }\n\n    .list {\n      width: 990px;\n      margin: 0 auto;\n      display: flex;\n      flex-wrap: wrap;\n    }\n\n    .item {\n      width: 240px;\n      margin-left: 10px;\n      padding: 20px 30px;\n      transition: all ease .5s;\n      margin-bottom: 20px;\n    }\n\n    .item:nth-child(4n) {\n      margin-left: 0;\n    }\n\n    .item:hover {\n      box-shadow: 0px 0px 5px rgba(0, 0, 0, .2);\n      transform: translate3d(0, -4px, 0);\n      cursor: pointer;\n    }\n\n    .item img {\n      width: 100%;\n    }\n\n    .item .name {\n      font-size: 18px;\n      margin-bottom: 10px;\n      color: #666;\n    }\n\n    .item .price {\n      font-size: 22px;\n      color: firebrick;\n    }\n\n    .item .price::before {\n      content: '￥';\n      font-size: 14px;\n    }\n\n    .filter {\n      display: flex;\n      width: 990px;\n      margin: 0 auto;\n      padding: 50px 30px\n    }\n\n    .filter a {\n      padding: 10px 20px;\n      background: #f5f5f5;\n      color: #666;\n      text-decoration: none;\n      margin-right: 20px;\n    }\n\n    .filter a:focus {\n      background-color: #05943c;\n      color: #fff;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"filter\">\n    \u003Ca href=\"#\" data-index=\"1\">0-100元\u003C\u002Fa>\n    \u003Ca href=\"#\" data-index=\"2\">100-300元\u003C\u002Fa>\n    \u003Ca href=\"#\" data-index=\"3\">300元以上\u003C\u002Fa>\n    \u003Ca href=\"#\">全部区间\u003C\u002Fa>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"list\">\n    \u003C!-- \u003Cdiv class=\"item\">\n      \u003Cimg src=\"\" alt=\"\">\n      \u003Cp class=\"name\">\u003C\u002Fp>\n      \u003Cp class=\"price\">\u003C\u002Fp>\n    \u003C\u002Fdiv> -->\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 2. 初始化数据\n    const goodsList = [\n      {\n        id: '4001172',\n        name: '称心如意手摇咖啡磨豆机咖啡豆研磨机',\n        price: '289.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg',\n      },\n      {\n        id: '4001594',\n        name: '日式黑陶功夫茶组双侧把茶具礼盒装',\n        price: '288.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg',\n      },\n      {\n        id: '4001009',\n        name: '竹制干泡茶盘正方形沥水茶台品茶盘',\n        price: '109.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png',\n      },\n      {\n        id: '4001874',\n        name: '古法温酒汝瓷酒具套装白酒杯莲花温酒器',\n        price: '488.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png',\n      },\n      {\n        id: '4001649',\n        name: '大师监制龙泉青瓷茶叶罐',\n        price: '139.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png',\n      },\n      {\n        id: '3997185',\n        name: '与众不同的口感汝瓷白酒杯套组1壶4杯',\n        price: '108.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg',\n      },\n      {\n        id: '3997403',\n        name: '手工吹制更厚实白酒杯壶套装6壶6杯',\n        price: '100.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg',\n      },\n      {\n        id: '3998274',\n        name: '德国百年工艺高端水晶玻璃红酒杯2支装',\n        price: '139.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg',\n      },\n    ]\n\n    \u002F\u002F 1.渲染函数\n    function render(arr) {\n      \u002F\u002F 声明空字符串\n      let str = ''\n      \u002F\u002F 遍历数组\n      arr.forEach(item => {\n        const { name, price, picture } = item\n        str += `\n          \u003Cdiv class=\"item\">\n            \u003Cimg src=\"${picture}\" alt=\"\">\n            \u003Cp class=\"name\">${name}\u003C\u002Fp>\n            \u003Cp class=\"price\">${price}\u003C\u002Fp>\n          \u003C\u002Fdiv>\n        `\n      })\n      \u002F\u002F 追加给List\n      document.querySelector('.list').innerHTML = str\n    }\n    \u002F\u002F 页面一打开就需要渲染\n    render(goodsList)\n    \u002F\u002F 2.过滤筛选\n    document.querySelector('.filter').addEventListener('click', e => {\n      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n      const { tagName, dataset } = e.target\n      \u002F\u002F 判断\n      if (e.target.tagName === 'A') {\n        \u002F\u002F console.log(11)\n        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n        let arr = goodsList\n        if (dataset.index === '1') {\n          arr = goodsList.filter(item => item.price >= 0 && item.price \u003C= 100)\n        } else if (dataset.index === '2') {\n          arr = goodsList.filter(item => item.price >= 100 && item.price \u003C= 300)\n        } else if (dataset.index === '3') {\n          arr = goodsList.filter(item => item.price >= 300)\n        }\n        \u002F\u002F 渲染函数\n        render(arr)\n      }\n\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,80413,80414,80424,80438,80442,80450,80464,80484,80496,80504,80510,80520,80530,80540,80544,80548,80554,80567,80579,80589,80601,80605,80609,80616,80629,80641,80658,80676,80689,80693,80697,80709,80719,80723,80727,80734,80775,80802,80812,80816,80820,80828,80840,80844,80848,80856,80868,80880,80891,80895,80899,80908,80920,80931,80935,80939,80948,80960,80972,80976,80980,80987,80997,81009,81021,81036,81040,81044,81052,81068,81078,81088,81098,81110,81114,81118,81128,81139,81149,81153,81161,81169,81173,81181,81196,81222,81247,81272,81291,81299,81313,81318,81323,81328,81333,81338,81346,81354,81359,81370,81375,81385,81395,81405,81415,81419,81423,81432,81441,81450,81459,81463,81467,81476,81485,81494,81503,81507,81511,81520,81529,81538,81547,81551,81555,81564,81573,81582,81591,81595,81599,81608,81617,81626,81635,81639,81643,81652,81661,81670,81679,81683,81687,81696,81705,81713,81722,81726,81730,81734,81739,81751,81756,81768,81772,81789,81817,81826,81831,81841,81851,81860,81865,81870,81874,81879,81896,81900,81905,81913,81918,81945,81950,81970,81975,81987,81992,81997,82002,82013,82027,82064,82082,82115,82132,82156,82160,82165,82171,82175,82179,82183,82191,82199,82203],{"__ignoreMap":57},[79,80415,80416,80418,80420,80422],{"class":81,"line":82},[79,80417,53292],{"class":228},[79,80419,53295],{"class":232},[79,80421,53298],{"class":85},[79,80423,53301],{"class":228},[79,80425,80426,80428,80430,80432,80434,80436],{"class":81,"line":167},[79,80427,229],{"class":228},[79,80429,52630],{"class":232},[79,80431,53310],{"class":85},[79,80433,239],{"class":228},[79,80435,53315],{"class":89},[79,80437,53301],{"class":228},[79,80439,80440],{"class":81,"line":178},[79,80441,542],{"emptyLinePlaceholder":541},[79,80443,80444,80446,80448],{"class":81,"line":545},[79,80445,229],{"class":228},[79,80447,53328],{"class":232},[79,80449,53301],{"class":228},[79,80451,80452,80454,80456,80458,80460,80462],{"class":81,"line":550},[79,80453,54138],{"class":228},[79,80455,53338],{"class":232},[79,80457,53341],{"class":85},[79,80459,239],{"class":228},[79,80461,53346],{"class":89},[79,80463,53301],{"class":228},[79,80465,80466,80468,80470,80472,80474,80476,80478,80480,80482],{"class":81,"line":562},[79,80467,54138],{"class":228},[79,80469,53338],{"class":232},[79,80471,236],{"class":85},[79,80473,239],{"class":228},[79,80475,53385],{"class":89},[79,80477,53365],{"class":85},[79,80479,239],{"class":228},[79,80481,53392],{"class":89},[79,80483,53301],{"class":228},[79,80485,80486,80488,80490,80492,80494],{"class":81,"line":568},[79,80487,54138],{"class":228},[79,80489,53401],{"class":232},[79,80491,53404],{"class":228},[79,80493,53401],{"class":232},[79,80495,53301],{"class":228},[79,80497,80498,80500,80502],{"class":81,"line":574},[79,80499,54138],{"class":228},[79,80501,2159],{"class":232},[79,80503,53301],{"class":228},[79,80505,80506,80508],{"class":81,"line":579},[79,80507,8470],{"class":232},[79,80509,17604],{"class":228},[79,80511,80512,80514,80516,80518],{"class":81,"line":585},[79,80513,56684],{"class":96},[79,80515,53431],{"class":228},[79,80517,759],{"class":96},[79,80519,3400],{"class":228},[79,80521,80522,80524,80526,80528],{"class":81,"line":591},[79,80523,56695],{"class":96},[79,80525,53431],{"class":228},[79,80527,759],{"class":96},[79,80529,3400],{"class":228},[79,80531,80532,80534,80536,80538],{"class":81,"line":596},[79,80533,74584],{"class":96},[79,80535,53431],{"class":228},[79,80537,62494],{"class":96},[79,80539,3400],{"class":228},[79,80541,80542],{"class":81,"line":602},[79,80543,4272],{"class":228},[79,80545,80546],{"class":81,"line":608},[79,80547,542],{"emptyLinePlaceholder":541},[79,80549,80550,80552],{"class":81,"line":614},[79,80551,64111],{"class":85},[79,80553,17604],{"class":228},[79,80555,80556,80558,80560,80563,80565],{"class":81,"line":619},[79,80557,56760],{"class":96},[79,80559,53431],{"class":228},[79,80561,80562],{"class":96},"990",[79,80564,53486],{"class":448},[79,80566,3400],{"class":228},[79,80568,80569,80571,80573,80575,80577],{"class":81,"line":625},[79,80570,56695],{"class":96},[79,80572,53431],{"class":228},[79,80574,759],{"class":96},[79,80576,53550],{"class":96},[79,80578,3400],{"class":228},[79,80580,80581,80583,80585,80587],{"class":81,"line":631},[79,80582,56998],{"class":96},[79,80584,53431],{"class":228},[79,80586,53471],{"class":96},[79,80588,3400],{"class":228},[79,80590,80591,80594,80596,80599],{"class":81,"line":637},[79,80592,80593],{"class":96},"      flex-wrap",[79,80595,53431],{"class":228},[79,80597,80598],{"class":96},"wrap",[79,80600,3400],{"class":228},[79,80602,80603],{"class":81,"line":643},[79,80604,4272],{"class":228},[79,80606,80607],{"class":81,"line":649},[79,80608,542],{"emptyLinePlaceholder":541},[79,80610,80611,80614],{"class":81,"line":655},[79,80612,80613],{"class":85},"    .item",[79,80615,17604],{"class":228},[79,80617,80618,80620,80622,80625,80627],{"class":81,"line":660},[79,80619,56760],{"class":96},[79,80621,53431],{"class":228},[79,80623,80624],{"class":96},"240",[79,80626,53486],{"class":448},[79,80628,3400],{"class":228},[79,80630,80631,80633,80635,80637,80639],{"class":81,"line":666},[79,80632,63988],{"class":96},[79,80634,53431],{"class":228},[79,80636,2689],{"class":96},[79,80638,53486],{"class":448},[79,80640,3400],{"class":228},[79,80642,80643,80645,80647,80649,80651,80654,80656],{"class":81,"line":672},[79,80644,56684],{"class":96},[79,80646,53431],{"class":228},[79,80648,2940],{"class":96},[79,80650,53486],{"class":448},[79,80652,80653],{"class":96}," 30",[79,80655,53486],{"class":448},[79,80657,3400],{"class":228},[79,80659,80660,80662,80664,80666,80669,80672,80674],{"class":81,"line":678},[79,80661,63849],{"class":96},[79,80663,53431],{"class":228},[79,80665,30137],{"class":96},[79,80667,80668],{"class":96}," ease",[79,80670,80671],{"class":96}," .5",[79,80673,2935],{"class":448},[79,80675,3400],{"class":228},[79,80677,80678,80681,80683,80685,80687],{"class":81,"line":684},[79,80679,80680],{"class":96},"      margin-bottom",[79,80682,53431],{"class":228},[79,80684,2940],{"class":96},[79,80686,53486],{"class":448},[79,80688,3400],{"class":228},[79,80690,80691],{"class":81,"line":690},[79,80692,4272],{"class":228},[79,80694,80695],{"class":81,"line":695},[79,80696,542],{"emptyLinePlaceholder":541},[79,80698,80699,80702,80704,80707],{"class":81,"line":700},[79,80700,80701],{"class":85},"    .item:nth-child",[79,80703,455],{"class":228},[79,80705,80706],{"class":96},"4n",[79,80708,14476],{"class":228},[79,80710,80711,80713,80715,80717],{"class":81,"line":712},[79,80712,63988],{"class":96},[79,80714,53431],{"class":228},[79,80716,759],{"class":96},[79,80718,3400],{"class":228},[79,80720,80721],{"class":81,"line":721},[79,80722,4272],{"class":228},[79,80724,80725],{"class":81,"line":726},[79,80726,542],{"emptyLinePlaceholder":541},[79,80728,80729,80732],{"class":81,"line":731},[79,80730,80731],{"class":85},"    .item:hover",[79,80733,17604],{"class":228},[79,80735,80736,80739,80741,80743,80745,80747,80749,80751,80753,80756,80758,80760,80762,80764,80766,80768,80770,80773],{"class":81,"line":748},[79,80737,80738],{"class":96},"      box-shadow",[79,80740,53431],{"class":228},[79,80742,759],{"class":96},[79,80744,53486],{"class":448},[79,80746,1103],{"class":96},[79,80748,53486],{"class":448},[79,80750,4233],{"class":96},[79,80752,53486],{"class":448},[79,80754,80755],{"class":96}," rgba",[79,80757,455],{"class":228},[79,80759,759],{"class":96},[79,80761,1020],{"class":228},[79,80763,759],{"class":96},[79,80765,1020],{"class":228},[79,80767,759],{"class":96},[79,80769,1020],{"class":228},[79,80771,80772],{"class":96},".2",[79,80774,4795],{"class":228},[79,80776,80777,80780,80782,80785,80787,80789,80791,80794,80796,80798,80800],{"class":81,"line":765},[79,80778,80779],{"class":96},"      transform",[79,80781,53431],{"class":228},[79,80783,80784],{"class":96},"translate3d",[79,80786,455],{"class":228},[79,80788,759],{"class":96},[79,80790,1020],{"class":228},[79,80792,80793],{"class":96},"-4",[79,80795,53486],{"class":448},[79,80797,1020],{"class":228},[79,80799,759],{"class":96},[79,80801,4795],{"class":228},[79,80803,80804,80806,80808,80810],{"class":81,"line":780},[79,80805,64013],{"class":96},[79,80807,53431],{"class":228},[79,80809,64018],{"class":96},[79,80811,3400],{"class":228},[79,80813,80814],{"class":81,"line":811},[79,80815,4272],{"class":228},[79,80817,80818],{"class":81,"line":816},[79,80819,542],{"emptyLinePlaceholder":541},[79,80821,80822,80824,80826],{"class":81,"line":821},[79,80823,80613],{"class":85},[79,80825,57604],{"class":232},[79,80827,17604],{"class":228},[79,80829,80830,80832,80834,80836,80838],{"class":81,"line":837},[79,80831,56760],{"class":96},[79,80833,53431],{"class":228},[79,80835,2555],{"class":96},[79,80837,1094],{"class":448},[79,80839,3400],{"class":228},[79,80841,80842],{"class":81,"line":853},[79,80843,4272],{"class":228},[79,80845,80846],{"class":81,"line":864},[79,80847,542],{"emptyLinePlaceholder":541},[79,80849,80850,80852,80854],{"class":81,"line":869},[79,80851,80613],{"class":85},[79,80853,64292],{"class":85},[79,80855,17604],{"class":228},[79,80857,80858,80860,80862,80864,80866],{"class":81,"line":885},[79,80859,56911],{"class":96},[79,80861,53431],{"class":228},[79,80863,2890],{"class":96},[79,80865,53486],{"class":448},[79,80867,3400],{"class":228},[79,80869,80870,80872,80874,80876,80878],{"class":81,"line":891},[79,80871,80680],{"class":96},[79,80873,53431],{"class":228},[79,80875,2689],{"class":96},[79,80877,53486],{"class":448},[79,80879,3400],{"class":228},[79,80881,80882,80884,80886,80889],{"class":81,"line":896},[79,80883,59405],{"class":96},[79,80885,53431],{"class":228},[79,80887,80888],{"class":96},"#666",[79,80890,3400],{"class":228},[79,80892,80893],{"class":81,"line":907},[79,80894,4272],{"class":228},[79,80896,80897],{"class":81,"line":912},[79,80898,542],{"emptyLinePlaceholder":541},[79,80900,80901,80903,80906],{"class":81,"line":935},[79,80902,80613],{"class":85},[79,80904,80905],{"class":85}," .price",[79,80907,17604],{"class":228},[79,80909,80910,80912,80914,80916,80918],{"class":81,"line":946},[79,80911,56911],{"class":96},[79,80913,53431],{"class":228},[79,80915,2990],{"class":96},[79,80917,53486],{"class":448},[79,80919,3400],{"class":228},[79,80921,80922,80924,80926,80929],{"class":81,"line":960},[79,80923,59405],{"class":96},[79,80925,53431],{"class":228},[79,80927,80928],{"class":96},"firebrick",[79,80930,3400],{"class":228},[79,80932,80933],{"class":81,"line":975},[79,80934,4272],{"class":228},[79,80936,80937],{"class":81,"line":980},[79,80938,542],{"emptyLinePlaceholder":541},[79,80940,80941,80943,80946],{"class":81,"line":1006},[79,80942,80613],{"class":85},[79,80944,80945],{"class":85}," .price::before",[79,80947,17604],{"class":228},[79,80949,80950,80953,80955,80958],{"class":81,"line":1027},[79,80951,80952],{"class":96},"      content",[79,80954,53431],{"class":228},[79,80956,80957],{"class":89},"'￥'",[79,80959,3400],{"class":228},[79,80961,80962,80964,80966,80968,80970],{"class":81,"line":1032},[79,80963,56911],{"class":96},[79,80965,53431],{"class":228},[79,80967,2789],{"class":96},[79,80969,53486],{"class":448},[79,80971,3400],{"class":228},[79,80973,80974],{"class":81,"line":1047},[79,80975,4272],{"class":228},[79,80977,80978],{"class":81,"line":1053},[79,80979,542],{"emptyLinePlaceholder":541},[79,80981,80982,80985],{"class":81,"line":1058},[79,80983,80984],{"class":85},"    .filter",[79,80986,17604],{"class":228},[79,80988,80989,80991,80993,80995],{"class":81,"line":1069},[79,80990,56998],{"class":96},[79,80992,53431],{"class":228},[79,80994,53471],{"class":96},[79,80996,3400],{"class":228},[79,80998,80999,81001,81003,81005,81007],{"class":81,"line":1081},[79,81000,56760],{"class":96},[79,81002,53431],{"class":228},[79,81004,80562],{"class":96},[79,81006,53486],{"class":448},[79,81008,3400],{"class":228},[79,81010,81011,81013,81015,81017,81019],{"class":81,"line":1086},[79,81012,56695],{"class":96},[79,81014,53431],{"class":228},[79,81016,759],{"class":96},[79,81018,53550],{"class":96},[79,81020,3400],{"class":228},[79,81022,81023,81025,81027,81029,81031,81033],{"class":81,"line":1108},[79,81024,56684],{"class":96},[79,81026,53431],{"class":228},[79,81028,2896],{"class":96},[79,81030,53486],{"class":448},[79,81032,80653],{"class":96},[79,81034,81035],{"class":448},"px\n",[79,81037,81038],{"class":81,"line":1153},[79,81039,4272],{"class":228},[79,81041,81042],{"class":81,"line":1158},[79,81043,542],{"emptyLinePlaceholder":541},[79,81045,81046,81048,81050],{"class":81,"line":1180},[79,81047,80984],{"class":85},[79,81049,3505],{"class":232},[79,81051,17604],{"class":228},[79,81053,81054,81056,81058,81060,81062,81064,81066],{"class":81,"line":1197},[79,81055,56684],{"class":96},[79,81057,53431],{"class":228},[79,81059,2689],{"class":96},[79,81061,53486],{"class":448},[79,81063,11005],{"class":96},[79,81065,53486],{"class":448},[79,81067,3400],{"class":228},[79,81069,81070,81072,81074,81076],{"class":81,"line":1202},[79,81071,63710],{"class":96},[79,81073,53431],{"class":228},[79,81075,63807],{"class":96},[79,81077,3400],{"class":228},[79,81079,81080,81082,81084,81086],{"class":81,"line":1207},[79,81081,59405],{"class":96},[79,81083,53431],{"class":228},[79,81085,80888],{"class":96},[79,81087,3400],{"class":228},[79,81089,81090,81092,81094,81096],{"class":81,"line":1223},[79,81091,65958],{"class":96},[79,81093,53431],{"class":228},[79,81095,56726],{"class":96},[79,81097,3400],{"class":228},[79,81099,81100,81102,81104,81106,81108],{"class":81,"line":18722},[79,81101,63739],{"class":96},[79,81103,53431],{"class":228},[79,81105,2940],{"class":96},[79,81107,53486],{"class":448},[79,81109,3400],{"class":228},[79,81111,81112],{"class":81,"line":18728},[79,81113,4272],{"class":228},[79,81115,81116],{"class":81,"line":18739},[79,81117,542],{"emptyLinePlaceholder":541},[79,81119,81120,81122,81124,81126],{"class":81,"line":18762},[79,81121,80984],{"class":85},[79,81123,3505],{"class":232},[79,81125,63888],{"class":85},[79,81127,17604],{"class":228},[79,81129,81130,81132,81134,81137],{"class":81,"line":18784},[79,81131,56873],{"class":96},[79,81133,53431],{"class":228},[79,81135,81136],{"class":96},"#05943c",[79,81138,3400],{"class":228},[79,81140,81141,81143,81145,81147],{"class":81,"line":18789},[79,81142,59405],{"class":96},[79,81144,53431],{"class":228},[79,81146,62831],{"class":96},[79,81148,3400],{"class":228},[79,81150,81151],{"class":81,"line":18795},[79,81152,4272],{"class":228},[79,81154,81155,81157,81159],{"class":81,"line":18809},[79,81156,54410],{"class":228},[79,81158,2159],{"class":232},[79,81160,53301],{"class":228},[79,81162,81163,81165,81167],{"class":81,"line":18822},[79,81164,53779],{"class":228},[79,81166,53328],{"class":232},[79,81168,53301],{"class":228},[79,81170,81171],{"class":81,"line":18827},[79,81172,542],{"emptyLinePlaceholder":541},[79,81174,81175,81177,81179],{"class":81,"line":18841},[79,81176,229],{"class":228},[79,81178,53794],{"class":232},[79,81180,53301],{"class":228},[79,81182,81183,81185,81187,81189,81191,81194],{"class":81,"line":18846},[79,81184,54138],{"class":228},[79,81186,53605],{"class":232},[79,81188,55477],{"class":85},[79,81190,239],{"class":228},[79,81192,81193],{"class":89},"\"filter\"",[79,81195,53301],{"class":228},[79,81197,81198,81200,81202,81204,81206,81208,81211,81213,81215,81218,81220],{"class":81,"line":18852},[79,81199,53335],{"class":228},[79,81201,2482],{"class":232},[79,81203,63046],{"class":85},[79,81205,239],{"class":228},[79,81207,63051],{"class":89},[79,81209,81210],{"class":85}," data-index",[79,81212,239],{"class":228},[79,81214,5752],{"class":89},[79,81216,81217],{"class":228},">0-100元\u003C\u002F",[79,81219,2482],{"class":232},[79,81221,53301],{"class":228},[79,81223,81224,81226,81228,81230,81232,81234,81236,81238,81240,81243,81245],{"class":81,"line":18857},[79,81225,53335],{"class":228},[79,81227,2482],{"class":232},[79,81229,63046],{"class":85},[79,81231,239],{"class":228},[79,81233,63051],{"class":89},[79,81235,81210],{"class":85},[79,81237,239],{"class":228},[79,81239,5775],{"class":89},[79,81241,81242],{"class":228},">100-300元\u003C\u002F",[79,81244,2482],{"class":232},[79,81246,53301],{"class":228},[79,81248,81249,81251,81253,81255,81257,81259,81261,81263,81265,81268,81270],{"class":81,"line":18871},[79,81250,53335],{"class":228},[79,81252,2482],{"class":232},[79,81254,63046],{"class":85},[79,81256,239],{"class":228},[79,81258,63051],{"class":89},[79,81260,81210],{"class":85},[79,81262,239],{"class":228},[79,81264,5788],{"class":89},[79,81266,81267],{"class":228},">300元以上\u003C\u002F",[79,81269,2482],{"class":232},[79,81271,53301],{"class":228},[79,81273,81274,81276,81278,81280,81282,81284,81287,81289],{"class":81,"line":18876},[79,81275,53335],{"class":228},[79,81277,2482],{"class":232},[79,81279,63046],{"class":85},[79,81281,239],{"class":228},[79,81283,63051],{"class":89},[79,81285,81286],{"class":228},">全部区间\u003C\u002F",[79,81288,2482],{"class":232},[79,81290,53301],{"class":228},[79,81292,81293,81295,81297],{"class":81,"line":18881},[79,81294,54410],{"class":228},[79,81296,53605],{"class":232},[79,81298,53301],{"class":228},[79,81300,81301,81303,81305,81307,81309,81311],{"class":81,"line":18895},[79,81302,54138],{"class":228},[79,81304,53605],{"class":232},[79,81306,55477],{"class":85},[79,81308,239],{"class":228},[79,81310,64596],{"class":89},[79,81312,53301],{"class":228},[79,81314,81315],{"class":81,"line":18907},[79,81316,81317],{"class":2313},"    \u003C!-- \u003Cdiv class=\"item\">\n",[79,81319,81320],{"class":81,"line":18912},[79,81321,81322],{"class":2313},"      \u003Cimg src=\"\" alt=\"\">\n",[79,81324,81325],{"class":81,"line":18925},[79,81326,81327],{"class":2313},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[79,81329,81330],{"class":81,"line":18930},[79,81331,81332],{"class":2313},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[79,81334,81335],{"class":81,"line":18935},[79,81336,81337],{"class":2313},"    \u003C\u002Fdiv> -->\n",[79,81339,81340,81342,81344],{"class":81,"line":18940},[79,81341,54410],{"class":228},[79,81343,53605],{"class":232},[79,81345,53301],{"class":228},[79,81347,81348,81350,81352],{"class":81,"line":18953},[79,81349,54138],{"class":228},[79,81351,53807],{"class":232},[79,81353,53301],{"class":228},[79,81355,81356],{"class":81,"line":18958},[79,81357,81358],{"class":2313},"    \u002F\u002F 2. 初始化数据\n",[79,81360,81361,81363,81366,81368],{"class":81,"line":34631},[79,81362,13256],{"class":448},[79,81364,81365],{"class":96}," goodsList",[79,81367,556],{"class":448},[79,81369,57436],{"class":228},[79,81371,81372],{"class":81,"line":34637},[79,81373,81374],{"class":228},"      {\n",[79,81376,81377,81380,81383],{"class":81,"line":34643},[79,81378,81379],{"class":228},"        id: ",[79,81381,81382],{"class":89},"'4001172'",[79,81384,33468],{"class":228},[79,81386,81387,81390,81393],{"class":81,"line":34649},[79,81388,81389],{"class":228},"        name: ",[79,81391,81392],{"class":89},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[79,81394,33468],{"class":228},[79,81396,81397,81400,81403],{"class":81,"line":34655},[79,81398,81399],{"class":228},"        price: ",[79,81401,81402],{"class":89},"'289.00'",[79,81404,33468],{"class":228},[79,81406,81407,81410,81413],{"class":81,"line":34666},[79,81408,81409],{"class":228},"        picture: ",[79,81411,81412],{"class":89},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[79,81414,33468],{"class":228},[79,81416,81417],{"class":81,"line":34672},[79,81418,79880],{"class":228},[79,81420,81421],{"class":81,"line":34692},[79,81422,81374],{"class":228},[79,81424,81425,81427,81430],{"class":81,"line":34698},[79,81426,81379],{"class":228},[79,81428,81429],{"class":89},"'4001594'",[79,81431,33468],{"class":228},[79,81433,81434,81436,81439],{"class":81,"line":34709},[79,81435,81389],{"class":228},[79,81437,81438],{"class":89},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[79,81440,33468],{"class":228},[79,81442,81443,81445,81448],{"class":81,"line":34715},[79,81444,81399],{"class":228},[79,81446,81447],{"class":89},"'288.00'",[79,81449,33468],{"class":228},[79,81451,81452,81454,81457],{"class":81,"line":34721},[79,81453,81409],{"class":228},[79,81455,81456],{"class":89},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[79,81458,33468],{"class":228},[79,81460,81461],{"class":81,"line":34727},[79,81462,79880],{"class":228},[79,81464,81465],{"class":81,"line":34733},[79,81466,81374],{"class":228},[79,81468,81469,81471,81474],{"class":81,"line":34739},[79,81470,81379],{"class":228},[79,81472,81473],{"class":89},"'4001009'",[79,81475,33468],{"class":228},[79,81477,81478,81480,81483],{"class":81,"line":34745},[79,81479,81389],{"class":228},[79,81481,81482],{"class":89},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[79,81484,33468],{"class":228},[79,81486,81487,81489,81492],{"class":81,"line":34751},[79,81488,81399],{"class":228},[79,81490,81491],{"class":89},"'109.00'",[79,81493,33468],{"class":228},[79,81495,81496,81498,81501],{"class":81,"line":34771},[79,81497,81409],{"class":228},[79,81499,81500],{"class":89},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[79,81502,33468],{"class":228},[79,81504,81505],{"class":81,"line":34777},[79,81506,79880],{"class":228},[79,81508,81509],{"class":81,"line":34793},[79,81510,81374],{"class":228},[79,81512,81513,81515,81518],{"class":81,"line":34799},[79,81514,81379],{"class":228},[79,81516,81517],{"class":89},"'4001874'",[79,81519,33468],{"class":228},[79,81521,81522,81524,81527],{"class":81,"line":34813},[79,81523,81389],{"class":228},[79,81525,81526],{"class":89},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[79,81528,33468],{"class":228},[79,81530,81531,81533,81536],{"class":81,"line":34819},[79,81532,81399],{"class":228},[79,81534,81535],{"class":89},"'488.00'",[79,81537,33468],{"class":228},[79,81539,81540,81542,81545],{"class":81,"line":34834},[79,81541,81409],{"class":228},[79,81543,81544],{"class":89},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[79,81546,33468],{"class":228},[79,81548,81549],{"class":81,"line":34840},[79,81550,79880],{"class":228},[79,81552,81553],{"class":81,"line":34849},[79,81554,81374],{"class":228},[79,81556,81557,81559,81562],{"class":81,"line":34855},[79,81558,81379],{"class":228},[79,81560,81561],{"class":89},"'4001649'",[79,81563,33468],{"class":228},[79,81565,81566,81568,81571],{"class":81,"line":34864},[79,81567,81389],{"class":228},[79,81569,81570],{"class":89},"'大师监制龙泉青瓷茶叶罐'",[79,81572,33468],{"class":228},[79,81574,81575,81577,81580],{"class":81,"line":34870},[79,81576,81399],{"class":228},[79,81578,81579],{"class":89},"'139.00'",[79,81581,33468],{"class":228},[79,81583,81584,81586,81589],{"class":81,"line":34876},[79,81585,81409],{"class":228},[79,81587,81588],{"class":89},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[79,81590,33468],{"class":228},[79,81592,81593],{"class":81,"line":34885},[79,81594,79880],{"class":228},[79,81596,81597],{"class":81,"line":34891},[79,81598,81374],{"class":228},[79,81600,81601,81603,81606],{"class":81,"line":34902},[79,81602,81379],{"class":228},[79,81604,81605],{"class":89},"'3997185'",[79,81607,33468],{"class":228},[79,81609,81610,81612,81615],{"class":81,"line":34908},[79,81611,81389],{"class":228},[79,81613,81614],{"class":89},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[79,81616,33468],{"class":228},[79,81618,81619,81621,81624],{"class":81,"line":34927},[79,81620,81399],{"class":228},[79,81622,81623],{"class":89},"'108.00'",[79,81625,33468],{"class":228},[79,81627,81628,81630,81633],{"class":81,"line":34933},[79,81629,81409],{"class":228},[79,81631,81632],{"class":89},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[79,81634,33468],{"class":228},[79,81636,81637],{"class":81,"line":34944},[79,81638,79880],{"class":228},[79,81640,81641],{"class":81,"line":34950},[79,81642,81374],{"class":228},[79,81644,81645,81647,81650],{"class":81,"line":34970},[79,81646,81379],{"class":228},[79,81648,81649],{"class":89},"'3997403'",[79,81651,33468],{"class":228},[79,81653,81654,81656,81659],{"class":81,"line":34986},[79,81655,81389],{"class":228},[79,81657,81658],{"class":89},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[79,81660,33468],{"class":228},[79,81662,81663,81665,81668],{"class":81,"line":34992},[79,81664,81399],{"class":228},[79,81666,81667],{"class":89},"'100.00'",[79,81669,33468],{"class":228},[79,81671,81672,81674,81677],{"class":81,"line":35006},[79,81673,81409],{"class":228},[79,81675,81676],{"class":89},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[79,81678,33468],{"class":228},[79,81680,81681],{"class":81,"line":35012},[79,81682,79880],{"class":228},[79,81684,81685],{"class":81,"line":35018},[79,81686,81374],{"class":228},[79,81688,81689,81691,81694],{"class":81,"line":35029},[79,81690,81379],{"class":228},[79,81692,81693],{"class":89},"'3998274'",[79,81695,33468],{"class":228},[79,81697,81698,81700,81703],{"class":81,"line":35035},[79,81699,81389],{"class":228},[79,81701,81702],{"class":89},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[79,81704,33468],{"class":228},[79,81706,81707,81709,81711],{"class":81,"line":35041},[79,81708,81399],{"class":228},[79,81710,81579],{"class":89},[79,81712,33468],{"class":228},[79,81714,81715,81717,81720],{"class":81,"line":35051},[79,81716,81409],{"class":228},[79,81718,81719],{"class":89},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[79,81721,33468],{"class":228},[79,81723,81724],{"class":81,"line":35057},[79,81725,79880],{"class":228},[79,81727,81728],{"class":81,"line":35068},[79,81729,55100],{"class":228},[79,81731,81732],{"class":81,"line":35074},[79,81733,542],{"emptyLinePlaceholder":541},[79,81735,81736],{"class":81,"line":35084},[79,81737,81738],{"class":2313},"    \u002F\u002F 1.渲染函数\n",[79,81740,81741,81743,81745,81747,81749],{"class":81,"line":35089},[79,81742,72072],{"class":448},[79,81744,72075],{"class":85},[79,81746,455],{"class":228},[79,81748,5953],{"class":7284},[79,81750,14476],{"class":228},[79,81752,81753],{"class":81,"line":35095},[79,81754,81755],{"class":2313},"      \u002F\u002F 声明空字符串\n",[79,81757,81758,81761,81764,81766],{"class":81,"line":35144},[79,81759,81760],{"class":448},"      let",[79,81762,81763],{"class":228}," str ",[79,81765,239],{"class":448},[79,81767,72092],{"class":89},[79,81769,81770],{"class":81,"line":35191},[79,81771,72097],{"class":2313},[79,81773,81774,81776,81779,81781,81784,81787],{"class":81,"line":35196},[79,81775,59996],{"class":228},[79,81777,81778],{"class":85},"forEach",[79,81780,455],{"class":228},[79,81782,81783],{"class":7284},"item",[79,81785,81786],{"class":448}," =>",[79,81788,17604],{"class":228},[79,81790,81791,81793,81796,81799,81801,81804,81806,81809,81812,81814],{"class":81,"line":35202},[79,81792,63259],{"class":448},[79,81794,81795],{"class":228}," { ",[79,81797,81798],{"class":96},"name",[79,81800,1020],{"class":228},[79,81802,81803],{"class":96},"price",[79,81805,1020],{"class":228},[79,81807,81808],{"class":96},"picture",[79,81810,81811],{"class":228}," } ",[79,81813,239],{"class":448},[79,81815,81816],{"class":228}," item\n",[79,81818,81819,81822,81824],{"class":81,"line":35221},[79,81820,81821],{"class":228},"        str ",[79,81823,1075],{"class":448},[79,81825,72156],{"class":89},[79,81827,81828],{"class":81,"line":35227},[79,81829,81830],{"class":89},"          \u003Cdiv class=\"item\">\n",[79,81832,81833,81836,81838],{"class":81,"line":35246},[79,81834,81835],{"class":89},"            \u003Cimg src=\"${",[79,81837,81808],{"class":228},[79,81839,81840],{"class":89},"}\" alt=\"\">\n",[79,81842,81843,81846,81848],{"class":81,"line":35252},[79,81844,81845],{"class":89},"            \u003Cp class=\"name\">${",[79,81847,81798],{"class":228},[79,81849,81850],{"class":89},"}\u003C\u002Fp>\n",[79,81852,81853,81856,81858],{"class":81,"line":35258},[79,81854,81855],{"class":89},"            \u003Cp class=\"price\">${",[79,81857,81803],{"class":228},[79,81859,81850],{"class":89},[79,81861,81862],{"class":81,"line":35268},[79,81863,81864],{"class":89},"          \u003C\u002Fdiv>\n",[79,81866,81867],{"class":81,"line":35273},[79,81868,81869],{"class":89},"        `\n",[79,81871,81872],{"class":81,"line":35279},[79,81873,66803],{"class":228},[79,81875,81876],{"class":81,"line":35295},[79,81877,81878],{"class":2313},"      \u002F\u002F 追加给List\n",[79,81880,81881,81883,81885,81887,81890,81892,81894],{"class":81,"line":35340},[79,81882,57760],{"class":228},[79,81884,56388],{"class":85},[79,81886,455],{"class":228},[79,81888,81889],{"class":89},"'.list'",[79,81891,76237],{"class":228},[79,81893,239],{"class":448},[79,81895,75973],{"class":228},[79,81897,81898],{"class":81,"line":35346},[79,81899,4272],{"class":228},[79,81901,81902],{"class":81,"line":35352},[79,81903,81904],{"class":2313},"    \u002F\u002F 页面一打开就需要渲染\n",[79,81906,81907,81910],{"class":81,"line":35358},[79,81908,81909],{"class":85},"    render",[79,81911,81912],{"class":228},"(goodsList)\n",[79,81914,81915],{"class":81,"line":35369},[79,81916,81917],{"class":2313},"    \u002F\u002F 2.过滤筛选\n",[79,81919,81920,81922,81924,81926,81929,81931,81933,81935,81937,81939,81941,81943],{"class":81,"line":35375},[79,81921,54400],{"class":228},[79,81923,56388],{"class":85},[79,81925,455],{"class":228},[79,81927,81928],{"class":89},"'.filter'",[79,81930,32833],{"class":228},[79,81932,59802],{"class":85},[79,81934,455],{"class":228},[79,81936,59807],{"class":89},[79,81938,1020],{"class":228},[79,81940,2328],{"class":7284},[79,81942,81786],{"class":448},[79,81944,17604],{"class":228},[79,81946,81947],{"class":81,"line":35381},[79,81948,81949],{"class":2313},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[79,81951,81952,81954,81956,81959,81961,81963,81965,81967],{"class":81,"line":35387},[79,81953,60217],{"class":448},[79,81955,81795],{"class":228},[79,81957,81958],{"class":96},"tagName",[79,81960,1020],{"class":228},[79,81962,33539],{"class":96},[79,81964,81811],{"class":228},[79,81966,239],{"class":448},[79,81968,81969],{"class":228}," e.target\n",[79,81971,81972],{"class":81,"line":35405},[79,81973,81974],{"class":2313},"      \u002F\u002F 判断\n",[79,81976,81977,81979,81981,81983,81985],{"class":81,"line":35419},[79,81978,56469],{"class":448},[79,81980,69022],{"class":228},[79,81982,56475],{"class":448},[79,81984,70244],{"class":89},[79,81986,14476],{"class":228},[79,81988,81989],{"class":81,"line":35428},[79,81990,81991],{"class":2313},"        \u002F\u002F console.log(11)\n",[79,81993,81994],{"class":81,"line":35437},[79,81995,81996],{"class":2313},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[79,81998,81999],{"class":81,"line":35446},[79,82000,82001],{"class":2313},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[79,82003,82004,82006,82008,82010],{"class":81,"line":35455},[79,82005,53824],{"class":448},[79,82007,53827],{"class":228},[79,82009,239],{"class":448},[79,82011,82012],{"class":228}," goodsList\n",[79,82014,82015,82017,82020,82022,82025],{"class":81,"line":35461},[79,82016,1089],{"class":448},[79,82018,82019],{"class":228}," (dataset.index ",[79,82021,56475],{"class":448},[79,82023,82024],{"class":89}," '1'",[79,82026,14476],{"class":228},[79,82028,82029,82032,82034,82037,82040,82042,82044,82046,82049,82051,82053,82056,82058,82060,82062],{"class":81,"line":35467},[79,82030,82031],{"class":228},"          arr ",[79,82033,239],{"class":448},[79,82035,82036],{"class":228}," goodsList.",[79,82038,82039],{"class":85},"filter",[79,82041,455],{"class":228},[79,82043,81783],{"class":7284},[79,82045,81786],{"class":448},[79,82047,82048],{"class":228}," item.price ",[79,82050,3805],{"class":448},[79,82052,1103],{"class":96},[79,82054,82055],{"class":448}," &&",[79,82057,82048],{"class":228},[79,82059,3694],{"class":448},[79,82061,1097],{"class":96},[79,82063,850],{"class":228},[79,82065,82066,82069,82071,82073,82075,82077,82080],{"class":81,"line":35475},[79,82067,82068],{"class":228},"        } ",[79,82070,3796],{"class":448},[79,82072,3799],{"class":448},[79,82074,82019],{"class":228},[79,82076,56475],{"class":448},[79,82078,82079],{"class":89}," '2'",[79,82081,14476],{"class":228},[79,82083,82084,82086,82088,82090,82092,82094,82096,82098,82100,82102,82104,82106,82108,82110,82113],{"class":81,"line":35480},[79,82085,82031],{"class":228},[79,82087,239],{"class":448},[79,82089,82036],{"class":228},[79,82091,82039],{"class":85},[79,82093,455],{"class":228},[79,82095,81783],{"class":7284},[79,82097,81786],{"class":448},[79,82099,82048],{"class":228},[79,82101,3805],{"class":448},[79,82103,1097],{"class":96},[79,82105,82055],{"class":448},[79,82107,82048],{"class":228},[79,82109,3694],{"class":448},[79,82111,82112],{"class":96}," 300",[79,82114,850],{"class":228},[79,82116,82117,82119,82121,82123,82125,82127,82130],{"class":81,"line":35486},[79,82118,82068],{"class":228},[79,82120,3796],{"class":448},[79,82122,3799],{"class":448},[79,82124,82019],{"class":228},[79,82126,56475],{"class":448},[79,82128,82129],{"class":89}," '3'",[79,82131,14476],{"class":228},[79,82133,82134,82136,82138,82140,82142,82144,82146,82148,82150,82152,82154],{"class":81,"line":35497},[79,82135,82031],{"class":228},[79,82137,239],{"class":448},[79,82139,82036],{"class":228},[79,82141,82039],{"class":85},[79,82143,455],{"class":228},[79,82145,81783],{"class":7284},[79,82147,81786],{"class":448},[79,82149,82048],{"class":228},[79,82151,3805],{"class":448},[79,82153,82112],{"class":96},[79,82155,850],{"class":228},[79,82157,82158],{"class":81,"line":35503},[79,82159,4612],{"class":228},[79,82161,82162],{"class":81,"line":35523},[79,82163,82164],{"class":2313},"        \u002F\u002F 渲染函数\n",[79,82166,82167,82169],{"class":81,"line":35529},[79,82168,72396],{"class":85},[79,82170,54405],{"class":228},[79,82172,82173],{"class":81,"line":35535},[79,82174,54391],{"class":228},[79,82176,82177],{"class":81,"line":35541},[79,82178,542],{"emptyLinePlaceholder":541},[79,82180,82181],{"class":81,"line":35558},[79,82182,35458],{"class":228},[79,82184,82185,82187,82189],{"class":81,"line":35564},[79,82186,54410],{"class":228},[79,82188,53807],{"class":232},[79,82190,53301],{"class":228},[79,82192,82193,82195,82197],{"class":81,"line":35570},[79,82194,53779],{"class":228},[79,82196,53794],{"class":232},[79,82198,53301],{"class":228},[79,82200,82201],{"class":81,"line":35576},[79,82202,542],{"emptyLinePlaceholder":541},[79,82204,82205,82207,82209],{"class":81,"line":35582},[79,82206,53779],{"class":228},[79,82208,52630],{"class":232},[79,82210,53301],{"class":228},[14,82212,82214],{"id":82213},"_410-深入了解对象","4.10 深入了解对象",[339,82216,82218],{"id":82217},"_4101-创建对象","4.10.1 创建对象",[19,82220,82221],{},[3569,82222],{"alt":57,"src":82223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,82225,82226],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[339,82228,82230],{"id":82229},"_4102-构造函数","4.10.2 构造函数",[19,82232,82233,82236],{},[2398,82234,82235],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,82238,82239,82242],{},[2398,82240,82241],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[51,82244,82246],{"className":52628,"code":82245,"language":52630,"meta":57,"style":57},"\u003Cscript>\n\u002F\u002F例：\nfunction Pig(name,age,gender) {\n    this.name=name\n    this.age=age\n    this.gender=gender    \n}\n\u002F\u002F创建佩奇对象\nconst Peppa=new Pig('佩奇',6,'女')\n\u002F\u002F创建乔治对象\nconst George=new Pig('乔治',3,'男')\n\u003C\u002Fscript>\n",[59,82247,82248,82256,82261,82282,82295,82307,82319,82323,82328,82355,82360,82387],{"__ignoreMap":57},[79,82249,82250,82252,82254],{"class":81,"line":82},[79,82251,229],{"class":228},[79,82253,53807],{"class":232},[79,82255,53301],{"class":228},[79,82257,82258],{"class":81,"line":167},[79,82259,82260],{"class":2313},"\u002F\u002F例：\n",[79,82262,82263,82265,82268,82270,82272,82274,82276,82278,82280],{"class":81,"line":178},[79,82264,56438],{"class":448},[79,82266,82267],{"class":85}," Pig",[79,82269,455],{"class":228},[79,82271,81798],{"class":7284},[79,82273,2621],{"class":228},[79,82275,72209],{"class":7284},[79,82277,2621],{"class":228},[79,82279,72226],{"class":7284},[79,82281,14476],{"class":228},[79,82283,82284,82287,82290,82292],{"class":81,"line":545},[79,82285,82286],{"class":96},"    this",[79,82288,82289],{"class":228},".name",[79,82291,239],{"class":448},[79,82293,82294],{"class":228},"name\n",[79,82296,82297,82299,82302,82304],{"class":81,"line":550},[79,82298,82286],{"class":96},[79,82300,82301],{"class":228},".age",[79,82303,239],{"class":448},[79,82305,82306],{"class":228},"age\n",[79,82308,82309,82311,82314,82316],{"class":81,"line":562},[79,82310,82286],{"class":96},[79,82312,82313],{"class":228},".gender",[79,82315,239],{"class":448},[79,82317,82318],{"class":228},"gender    \n",[79,82320,82321],{"class":81,"line":568},[79,82322,3671],{"class":228},[79,82324,82325],{"class":81,"line":574},[79,82326,82327],{"class":2313},"\u002F\u002F创建佩奇对象\n",[79,82329,82330,82332,82335,82337,82339,82341,82344,82346,82348,82350,82353],{"class":81,"line":579},[79,82331,8857],{"class":448},[79,82333,82334],{"class":96}," Peppa",[79,82336,13752],{"class":448},[79,82338,82267],{"class":85},[79,82340,455],{"class":228},[79,82342,82343],{"class":89},"'佩奇'",[79,82345,2621],{"class":228},[79,82347,2587],{"class":96},[79,82349,2621],{"class":228},[79,82351,82352],{"class":89},"'女'",[79,82354,850],{"class":228},[79,82356,82357],{"class":81,"line":585},[79,82358,82359],{"class":2313},"\u002F\u002F创建乔治对象\n",[79,82361,82362,82364,82367,82369,82371,82373,82376,82378,82380,82382,82385],{"class":81,"line":591},[79,82363,8857],{"class":448},[79,82365,82366],{"class":96}," George",[79,82368,13752],{"class":448},[79,82370,82267],{"class":85},[79,82372,455],{"class":228},[79,82374,82375],{"class":89},"'乔治'",[79,82377,2621],{"class":228},[79,82379,970],{"class":96},[79,82381,2621],{"class":228},[79,82383,82384],{"class":89},"'男'",[79,82386,850],{"class":228},[79,82388,82389,82391,82393],{"class":81,"line":596},[79,82390,53779],{"class":228},[79,82392,53807],{"class":232},[79,82394,53301],{"class":228},[19,82396,82397],{},[3569,82398],{"alt":57,"src":82399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,82401,82402],{},[3569,82403],{"alt":57,"src":82404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,82406,82407],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,82409,82410],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,82412,82413],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,82415,82416],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,82418,82419],{},"这里用等号是因为：对象.属性=值",[19,82421,82422],{},"①利用对象字面量创建对象",[19,82424,82425],{},"const o={",[19,82427,82428],{},"name:'pink'",[19,82430,82431],{},"} ②利用new Object创建对象",[19,82433,82434],{},"const o=new Object({name:'pink'})",[19,82436,82437],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,82439,82440],{},"构造函数创建对象的执行过程：",[19,82442,82443],{},[3569,82444],{"alt":57,"src":82445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[339,82447,82449],{"id":82448},"_4103-实例成员","4.10.3 实例成员",[19,82451,82452],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[26,82454,82455,82458,82461],{},[29,82456,82457],{},"实例对象的属性和方法即为实例成员",[29,82459,82460],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[29,82462,82463],{},"构造函数创建的实例对象彼此独立互不影响",[339,82465,82467],{"id":82466},"_4104-静态成员","4.10.4 静态成员",[19,82469,82470],{},[3569,82471],{"alt":57,"src":82472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,82474,82475],{},"静态成员有Date.now() Math.PI Math.random()",[19,82477,82478],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,82480,82481],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,82483,82484],{},"function Pig(name) n {",[19,82486,82487],{},"this.name=name",[19,82489,3185],{},[19,82491,82492],{},"Pig.eyes=2",[19,82494,82495],{},"Pig.sayHai=function () { console.log(this) }",[19,82497,82498],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,82500,82501],{},"console.log(Pig.eyes) \u002F\u002F2",[19,82503,13367],{},[26,82505,82506,82509,82512,82515,82518],{},[29,82507,82508],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[29,82510,82511],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[29,82513,82514],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[29,82516,82517],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[29,82519,82520],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,82522,82523],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[339,82525,82527],{"id":82526},"_4105-内置构造函数","4.10.5 内置构造函数",[19,82529,82530],{},"内置构造函数包含：",[19,82532,82533],{},[3569,82534],{"alt":57,"src":82535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,82537,82538],{},[3569,82539],{"alt":57,"src":82540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,82542,82543],{},"这些基本数据类型，js对他们进行了包装",[53807,82545,82546],{},"\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",[24023,82548,82550],{"id":82549},"_41051-object","4.10.5.1 Object",[19,82552,82553],{},"Object 是内置的构造函数，用于创建普通对象",[19,82555,82556],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[51,82558,82560],{"className":52628,"code":82559,"language":52630,"meta":57,"style":57},"const user=new Object({name:'小明',age:15})\n",[59,82561,82562],{"__ignoreMap":57},[79,82563,82564],{"class":81,"line":82},[79,82565,82559],{"class":228},[19,82567,82568],{},"三个常用的静态方法：",[24935,82570,82572],{"id":82571},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,82574,82575],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,82577,82578],{},[3569,82579],{"alt":57,"src":82580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,82582,82583],{},[3569,82584],{"alt":57,"src":82585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[51,82587,82589],{"className":219,"code":82588,"language":221,"meta":57,"style":57},"\u003Cbody>\n  \u003Cscript>\n    const o = { name: 'pink', age: 6 }\n    \u002F\u002F 获得所有属性名\n    const arr = Object.keys(o)\n    console.log(arr)\n    \u002F\u002F 获得所有属性值\n    console.log(Object.values(o))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[59,82590,82591,82599,82607,82612,82617,82622,82627,82632,82637,82645],{"__ignoreMap":57},[79,82592,82593,82595,82597],{"class":81,"line":82},[79,82594,229],{"class":228},[79,82596,53794],{"class":232},[79,82598,53301],{"class":228},[79,82600,82601,82603,82605],{"class":81,"line":167},[79,82602,54138],{"class":228},[79,82604,53807],{"class":232},[79,82606,53301],{"class":228},[79,82608,82609],{"class":81,"line":178},[79,82610,82611],{"class":228},"    const o = { name: 'pink', age: 6 }\n",[79,82613,82614],{"class":81,"line":545},[79,82615,82616],{"class":228},"    \u002F\u002F 获得所有属性名\n",[79,82618,82619],{"class":81,"line":550},[79,82620,82621],{"class":228},"    const arr = Object.keys(o)\n",[79,82623,82624],{"class":81,"line":562},[79,82625,82626],{"class":228},"    console.log(arr)\n",[79,82628,82629],{"class":81,"line":568},[79,82630,82631],{"class":228},"    \u002F\u002F 获得所有属性值\n",[79,82633,82634],{"class":81,"line":574},[79,82635,82636],{"class":228},"    console.log(Object.values(o))\n",[79,82638,82639,82641,82643],{"class":81,"line":579},[79,82640,54410],{"class":228},[79,82642,53807],{"class":232},[79,82644,53301],{"class":228},[79,82646,82647,82649,82651],{"class":81,"line":585},[79,82648,53779],{"class":228},[79,82650,53794],{"class":232},[79,82652,53301],{"class":228},[24935,82654,82656],{"id":82655},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,82658,82659],{},"Object.assign(oo,o)",[19,82661,82662],{},"后的东西添加给前 是追加",[19,82664,82665],{},[3569,82666],{"alt":57,"src":82667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,82669,82670],{},[3569,82671],{"alt":57,"src":82672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[51,82674,82676],{"className":219,"code":82675,"language":221,"meta":57,"style":57},"\u003Cbody>\n  \u003Cscript>\n    const o = { name: 'pink', age: 6 }\n    \u002F\u002F 获得所有属性名\n    const arr = Object.keys(o)\n    console.log(arr)\n    \u002F\u002F 获得所有属性值\n    console.log(Object.values(o))\n    const oo = {}\n    Object.assign(oo, o)\n    console.log(oo)\n    Object.assign(o, { gender: '女' })\n    console.log(o)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[59,82677,82678,82686,82694,82698,82702,82706,82710,82714,82718,82723,82728,82733,82738,82743,82751],{"__ignoreMap":57},[79,82679,82680,82682,82684],{"class":81,"line":82},[79,82681,229],{"class":228},[79,82683,53794],{"class":232},[79,82685,53301],{"class":228},[79,82687,82688,82690,82692],{"class":81,"line":167},[79,82689,54138],{"class":228},[79,82691,53807],{"class":232},[79,82693,53301],{"class":228},[79,82695,82696],{"class":81,"line":178},[79,82697,82611],{"class":228},[79,82699,82700],{"class":81,"line":545},[79,82701,82616],{"class":228},[79,82703,82704],{"class":81,"line":550},[79,82705,82621],{"class":228},[79,82707,82708],{"class":81,"line":562},[79,82709,82626],{"class":228},[79,82711,82712],{"class":81,"line":568},[79,82713,82631],{"class":228},[79,82715,82716],{"class":81,"line":574},[79,82717,82636],{"class":228},[79,82719,82720],{"class":81,"line":579},[79,82721,82722],{"class":228},"    const oo = {}\n",[79,82724,82725],{"class":81,"line":585},[79,82726,82727],{"class":228},"    Object.assign(oo, o)\n",[79,82729,82730],{"class":81,"line":591},[79,82731,82732],{"class":228},"    console.log(oo)\n",[79,82734,82735],{"class":81,"line":596},[79,82736,82737],{"class":228},"    Object.assign(o, { gender: '女' })\n",[79,82739,82740],{"class":81,"line":602},[79,82741,82742],{"class":228},"    console.log(o)\n",[79,82744,82745,82747,82749],{"class":81,"line":608},[79,82746,54410],{"class":228},[79,82748,53807],{"class":232},[79,82750,53301],{"class":228},[79,82752,82753,82755,82757],{"class":81,"line":614},[79,82754,53779],{"class":228},[79,82756,53794],{"class":232},[79,82758,53301],{"class":228},[19,82760,82761],{},[3569,82762],{"alt":57,"src":82763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[24023,82765,82767],{"id":82766},"_41052-array","4.10.5.2 Array",[19,82769,82770],{},"Array 是内置的构造函数，用于创建数组",[19,82772,82773],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[51,82775,82777],{"className":52628,"code":82776,"language":52630,"meta":57,"style":57},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[59,82778,82779,82784],{"__ignoreMap":57},[79,82780,82781],{"class":81,"line":82},[79,82782,82783],{"class":228},"const arr=new Array(3,5)\n",[79,82785,82786],{"class":81,"line":167},[79,82787,82788],{"class":228},"console.log(arr)  \u002F\u002F[3,5]\n",[19,82790,82791],{},"Array的实例方法，这个方法是实例成员",[19,82793,82794],{},[3569,82795],{"alt":57,"src":82796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[24935,82798,82800],{"id":82799},"_410521-reduce","4.10.5.2.1 reduce",[19,82802,82803],{},[3569,82804],{"alt":57,"src":82805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[51,82807,82809],{"className":219,"code":82808,"language":221,"meta":57,"style":57},"\u003Cbody>\n  \u003Cscript>\n    const arr = [1, 5, 8]\n    \u002F\u002F 1.没有初始值\n    const total = arr.reduce(function (prev, current) {\n      return prev + current\n    })\n    console.log(total)   \u002F\u002F14\n    \u002F\u002F 2.有初始值\n    const total1 = arr.reduce(function (prev, current) {\n      return prev + current\n    }, 10)\n    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n\n    \u002F\u002F 3.箭头函数写法\n    const total2 = arr.reduce((prev, current) => prev + current, 10)\n    console.log(total2)   \u002F\u002F24\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[59,82810,82811,82819,82827,82832,82837,82842,82847,82851,82856,82861,82866,82870,82875,82880,82884,82889,82894,82899,82907],{"__ignoreMap":57},[79,82812,82813,82815,82817],{"class":81,"line":82},[79,82814,229],{"class":228},[79,82816,53794],{"class":232},[79,82818,53301],{"class":228},[79,82820,82821,82823,82825],{"class":81,"line":167},[79,82822,54138],{"class":228},[79,82824,53807],{"class":232},[79,82826,53301],{"class":228},[79,82828,82829],{"class":81,"line":178},[79,82830,82831],{"class":228},"    const arr = [1, 5, 8]\n",[79,82833,82834],{"class":81,"line":545},[79,82835,82836],{"class":228},"    \u002F\u002F 1.没有初始值\n",[79,82838,82839],{"class":81,"line":550},[79,82840,82841],{"class":228},"    const total = arr.reduce(function (prev, current) {\n",[79,82843,82844],{"class":81,"line":562},[79,82845,82846],{"class":228},"      return prev + current\n",[79,82848,82849],{"class":81,"line":568},[79,82850,35458],{"class":228},[79,82852,82853],{"class":81,"line":574},[79,82854,82855],{"class":228},"    console.log(total)   \u002F\u002F14\n",[79,82857,82858],{"class":81,"line":579},[79,82859,82860],{"class":228},"    \u002F\u002F 2.有初始值\n",[79,82862,82863],{"class":81,"line":585},[79,82864,82865],{"class":228},"    const total1 = arr.reduce(function (prev, current) {\n",[79,82867,82868],{"class":81,"line":591},[79,82869,82846],{"class":228},[79,82871,82872],{"class":81,"line":596},[79,82873,82874],{"class":228},"    }, 10)\n",[79,82876,82877],{"class":81,"line":602},[79,82878,82879],{"class":228},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[79,82881,82882],{"class":81,"line":608},[79,82883,542],{"emptyLinePlaceholder":541},[79,82885,82886],{"class":81,"line":614},[79,82887,82888],{"class":228},"    \u002F\u002F 3.箭头函数写法\n",[79,82890,82891],{"class":81,"line":619},[79,82892,82893],{"class":228},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[79,82895,82896],{"class":81,"line":625},[79,82897,82898],{"class":228},"    console.log(total2)   \u002F\u002F24\n",[79,82900,82901,82903,82905],{"class":81,"line":631},[79,82902,54410],{"class":228},[79,82904,53807],{"class":232},[79,82906,53301],{"class":228},[79,82908,82909,82911,82913],{"class":81,"line":637},[79,82910,53779],{"class":228},[79,82912,53794],{"class":232},[79,82914,53301],{"class":228},[19,82916,82917],{},"执行过程：",[26,82919,82920,82923,82926],{},[29,82921,82922],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[29,82924,82925],{},"每一次循环，把返回值给作为下一次循环的上一次值",[29,82927,82928],{},"如果有起始值，则起始值作为上一次值",[51,82930,82932],{"className":219,"code":82931,"language":221,"meta":57,"style":57},"\u003Cbody>\n  \u003Cscript>\n    const arr = [1, 5, 8]\n    \u002F\u002F 1.没有初始值\n    const total = arr.reduce(function (prev, current) {\n      return prev + current\n    })\n    console.log(total)   \u002F\u002F14\n    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n    \u002F\u002F     1              5                    6\n    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n    \u002F\u002F     6              8                    14\n    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n    \u002F\u002F 2.有初始值\n    const total1 = arr.reduce(function (prev, current) {\n      return prev + current\n    }, 10)\n    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n    \u002F\u002F     10             1                     11\n    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n    \u002F\u002F     11             5                    16\n    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n    \u002F\u002F     16             8                    24\n    \u002F\u002F 有初始值时循环次数就是数组的长度\n    \u002F\u002F 3.箭头函数写法\n    const total2 = arr.reduce((prev, current) => prev + current, 10)\n    console.log(total2)   \u002F\u002F24\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[59,82933,82934,82942,82950,82954,82958,82962,82966,82970,82974,82979,82984,82989,82994,82999,83003,83007,83011,83015,83019,83023,83028,83032,83037,83041,83046,83051,83055,83059,83063,83071],{"__ignoreMap":57},[79,82935,82936,82938,82940],{"class":81,"line":82},[79,82937,229],{"class":228},[79,82939,53794],{"class":232},[79,82941,53301],{"class":228},[79,82943,82944,82946,82948],{"class":81,"line":167},[79,82945,54138],{"class":228},[79,82947,53807],{"class":232},[79,82949,53301],{"class":228},[79,82951,82952],{"class":81,"line":178},[79,82953,82831],{"class":228},[79,82955,82956],{"class":81,"line":545},[79,82957,82836],{"class":228},[79,82959,82960],{"class":81,"line":550},[79,82961,82841],{"class":228},[79,82963,82964],{"class":81,"line":562},[79,82965,82846],{"class":228},[79,82967,82968],{"class":81,"line":568},[79,82969,35458],{"class":228},[79,82971,82972],{"class":81,"line":574},[79,82973,82855],{"class":228},[79,82975,82976],{"class":81,"line":579},[79,82977,82978],{"class":228},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[79,82980,82981],{"class":81,"line":585},[79,82982,82983],{"class":228},"    \u002F\u002F     1              5                    6\n",[79,82985,82986],{"class":81,"line":591},[79,82987,82988],{"class":228},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[79,82990,82991],{"class":81,"line":596},[79,82992,82993],{"class":228},"    \u002F\u002F     6              8                    14\n",[79,82995,82996],{"class":81,"line":602},[79,82997,82998],{"class":228},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[79,83000,83001],{"class":81,"line":608},[79,83002,82860],{"class":228},[79,83004,83005],{"class":81,"line":614},[79,83006,82865],{"class":228},[79,83008,83009],{"class":81,"line":619},[79,83010,82846],{"class":228},[79,83012,83013],{"class":81,"line":625},[79,83014,82874],{"class":228},[79,83016,83017],{"class":81,"line":631},[79,83018,82879],{"class":228},[79,83020,83021],{"class":81,"line":637},[79,83022,82978],{"class":228},[79,83024,83025],{"class":81,"line":643},[79,83026,83027],{"class":228},"    \u002F\u002F     10             1                     11\n",[79,83029,83030],{"class":81,"line":649},[79,83031,82988],{"class":228},[79,83033,83034],{"class":81,"line":655},[79,83035,83036],{"class":228},"    \u002F\u002F     11             5                    16\n",[79,83038,83039],{"class":81,"line":660},[79,83040,82988],{"class":228},[79,83042,83043],{"class":81,"line":666},[79,83044,83045],{"class":228},"    \u002F\u002F     16             8                    24\n",[79,83047,83048],{"class":81,"line":672},[79,83049,83050],{"class":228},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[79,83052,83053],{"class":81,"line":678},[79,83054,82888],{"class":228},[79,83056,83057],{"class":81,"line":684},[79,83058,82893],{"class":228},[79,83060,83061],{"class":81,"line":690},[79,83062,82898],{"class":228},[79,83064,83065,83067,83069],{"class":81,"line":695},[79,83066,54410],{"class":228},[79,83068,53807],{"class":232},[79,83070,53301],{"class":228},[79,83072,83073,83075,83077],{"class":81,"line":700},[79,83074,53779],{"class":228},[79,83076,53794],{"class":232},[79,83078,53301],{"class":228},[24935,83080,83082],{"id":83081},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,83084,83085],{},[3569,83086],{"alt":57,"src":83087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[51,83089,83091],{"className":219,"code":83090,"language":221,"meta":57,"style":57},"\u003Cbody>\n  \u003Cscript>\n    const arr = [\n      { name: '张三', salary: 10000 },\n      { name: '李四', salary: 10000 },\n      { name: '王五', salary: 10000 }\n    ]\n    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n    \u002F\u002F prev是累计值\n    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n    console.log(total)\n    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n    \u002F\u002F    0       10000*1.3=13000       13000\n    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n    \u002F\u002F  13000     10000*1.3=13000       26000\n    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n    \u002F\u002F  26000     10000*1.3=13000       39000\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[59,83092,83093,83101,83109,83114,83119,83124,83129,83133,83138,83143,83148,83153,83158,83163,83167,83172,83176,83181,83189],{"__ignoreMap":57},[79,83094,83095,83097,83099],{"class":81,"line":82},[79,83096,229],{"class":228},[79,83098,53794],{"class":232},[79,83100,53301],{"class":228},[79,83102,83103,83105,83107],{"class":81,"line":167},[79,83104,54138],{"class":228},[79,83106,53807],{"class":232},[79,83108,53301],{"class":228},[79,83110,83111],{"class":81,"line":178},[79,83112,83113],{"class":228},"    const arr = [\n",[79,83115,83116],{"class":81,"line":545},[79,83117,83118],{"class":228},"      { name: '张三', salary: 10000 },\n",[79,83120,83121],{"class":81,"line":550},[79,83122,83123],{"class":228},"      { name: '李四', salary: 10000 },\n",[79,83125,83126],{"class":81,"line":562},[79,83127,83128],{"class":228},"      { name: '王五', salary: 10000 }\n",[79,83130,83131],{"class":81,"line":568},[79,83132,55100],{"class":228},[79,83134,83135],{"class":81,"line":574},[79,83136,83137],{"class":228},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[79,83139,83140],{"class":81,"line":579},[79,83141,83142],{"class":228},"    \u002F\u002F prev是累计值\n",[79,83144,83145],{"class":81,"line":585},[79,83146,83147],{"class":228},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[79,83149,83150],{"class":81,"line":591},[79,83151,83152],{"class":228},"    console.log(total)\n",[79,83154,83155],{"class":81,"line":596},[79,83156,83157],{"class":228},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[79,83159,83160],{"class":81,"line":602},[79,83161,83162],{"class":228},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[79,83164,83165],{"class":81,"line":608},[79,83166,83157],{"class":228},[79,83168,83169],{"class":81,"line":614},[79,83170,83171],{"class":228},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[79,83173,83174],{"class":81,"line":619},[79,83175,83157],{"class":228},[79,83177,83178],{"class":81,"line":625},[79,83179,83180],{"class":228},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[79,83182,83183,83185,83187],{"class":81,"line":631},[79,83184,54410],{"class":228},[79,83186,53807],{"class":232},[79,83188,53301],{"class":228},[79,83190,83191,83193,83195],{"class":81,"line":637},[79,83192,53779],{"class":228},[79,83194,53794],{"class":232},[79,83196,53301],{"class":228},[24935,83198,83200],{"id":83199},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,83202,83203],{},[3569,83204],{"alt":57,"src":83205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,83207,83208],{},[3569,83209],{"alt":57,"src":83210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[26,83212,83213],{},[29,83214,83215],{},"find()",[19,83217,83218],{},"循环查找，找到第一个就ok",[19,83220,83221],{},[2482,83222,83225],{"href":83223,"rel":83224},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[25885],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[51,83227,83229],{"className":52628,"code":83228,"language":52630,"meta":57,"style":57},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[59,83230,83231,83236,83241],{"__ignoreMap":57},[79,83232,83233],{"class":81,"line":82},[79,83234,83235],{"class":228},"const array1 = [5, 12, 8, 130, 44]\n",[79,83237,83238],{"class":81,"line":167},[79,83239,83240],{"class":228},"const found = array1.find((element) => element > 10)\n",[79,83242,83243],{"class":81,"line":178},[79,83244,83245],{"class":228},"console.log(found)  \u002F\u002F12\n",[19,83247,83248,83250,83251,83256,83257,83260,83261,83263,83264,83269,83270,83272,83273,83275,83276,83278,83279],{},[59,83249,83215],{}," 方法是一个",[2482,83252,83255],{"href":83253,"rel":83254},"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",[25885],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[59,83258,83259],{},"callbackFn"," 函数，直到 ",[59,83262,83259],{}," 返回一个",[2482,83265,83268],{"href":83266,"rel":83267},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[25885],"真值","。然后 ",[59,83271,83215],{}," 返回该元素并停止迭代数组。如果 ",[59,83274,83259],{}," 从未返回真值，则 ",[59,83277,83215],{}," 返回 ",[59,83280,83281],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[51,83283,83285],{"className":219,"code":83284,"language":221,"meta":57,"style":57},"\u003Cbody>\n  \u003Cscript>\n    const arr = ['red', 'blue', 'green']\n    const found = arr.find(item => item === 'pink')\n    console.log(found)   \u002F\u002F没有，输出undefined\n\n    \u002F\u002F 使用场景，用于查找数据\n    const arr1 = [\n      {\n        name: '小米',\n        price: 1999\n      },\n      {\n        name: '华为',\n        price: 3999\n      }\n    ]\n    \u002F\u002F 这小米这个对象，并且返回这个对象\n    \u002F\u002F const found1 = arr1.find(item => {\n    \u002F\u002F   if (item.name === '小米') {\n    \u002F\u002F     return item\n    \u002F\u002F   }\n    \u002F\u002F })\n    \u002F\u002F 另一种写法\n    const found1 = arr1.find(item => {\n      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n      return item.name = '小米'\n    })\n    console.log(found1)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n",[59,83286,83287,83295,83303,83308,83313,83318,83322,83327,83332,83336,83341,83346,83350,83354,83359,83364,83368,83372,83377,83382,83387,83392,83397,83401,83406,83411,83416,83421,83425,83430,83438],{"__ignoreMap":57},[79,83288,83289,83291,83293],{"class":81,"line":82},[79,83290,229],{"class":228},[79,83292,53794],{"class":232},[79,83294,53301],{"class":228},[79,83296,83297,83299,83301],{"class":81,"line":167},[79,83298,54138],{"class":228},[79,83300,53807],{"class":232},[79,83302,53301],{"class":228},[79,83304,83305],{"class":81,"line":178},[79,83306,83307],{"class":228},"    const arr = ['red', 'blue', 'green']\n",[79,83309,83310],{"class":81,"line":545},[79,83311,83312],{"class":228},"    const found = arr.find(item => item === 'pink')\n",[79,83314,83315],{"class":81,"line":550},[79,83316,83317],{"class":228},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[79,83319,83320],{"class":81,"line":562},[79,83321,542],{"emptyLinePlaceholder":541},[79,83323,83324],{"class":81,"line":568},[79,83325,83326],{"class":228},"    \u002F\u002F 使用场景，用于查找数据\n",[79,83328,83329],{"class":81,"line":574},[79,83330,83331],{"class":228},"    const arr1 = [\n",[79,83333,83334],{"class":81,"line":579},[79,83335,81374],{"class":228},[79,83337,83338],{"class":81,"line":585},[79,83339,83340],{"class":228},"        name: '小米',\n",[79,83342,83343],{"class":81,"line":591},[79,83344,83345],{"class":228},"        price: 1999\n",[79,83347,83348],{"class":81,"line":596},[79,83349,79880],{"class":228},[79,83351,83352],{"class":81,"line":602},[79,83353,81374],{"class":228},[79,83355,83356],{"class":81,"line":608},[79,83357,83358],{"class":228},"        name: '华为',\n",[79,83360,83361],{"class":81,"line":614},[79,83362,83363],{"class":228},"        price: 3999\n",[79,83365,83366],{"class":81,"line":619},[79,83367,54391],{"class":228},[79,83369,83370],{"class":81,"line":625},[79,83371,55100],{"class":228},[79,83373,83374],{"class":81,"line":631},[79,83375,83376],{"class":228},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[79,83378,83379],{"class":81,"line":637},[79,83380,83381],{"class":228},"    \u002F\u002F const found1 = arr1.find(item => {\n",[79,83383,83384],{"class":81,"line":643},[79,83385,83386],{"class":228},"    \u002F\u002F   if (item.name === '小米') {\n",[79,83388,83389],{"class":81,"line":649},[79,83390,83391],{"class":228},"    \u002F\u002F     return item\n",[79,83393,83394],{"class":81,"line":655},[79,83395,83396],{"class":228},"    \u002F\u002F   }\n",[79,83398,83399],{"class":81,"line":660},[79,83400,65278],{"class":228},[79,83402,83403],{"class":81,"line":666},[79,83404,83405],{"class":228},"    \u002F\u002F 另一种写法\n",[79,83407,83408],{"class":81,"line":672},[79,83409,83410],{"class":228},"    const found1 = arr1.find(item => {\n",[79,83412,83413],{"class":81,"line":678},[79,83414,83415],{"class":228},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[79,83417,83418],{"class":81,"line":684},[79,83419,83420],{"class":228},"      return item.name = '小米'\n",[79,83422,83423],{"class":81,"line":690},[79,83424,35458],{"class":228},[79,83426,83427],{"class":81,"line":695},[79,83428,83429],{"class":228},"    console.log(found1)\n",[79,83431,83432,83434,83436],{"class":81,"line":700},[79,83433,54410],{"class":228},[79,83435,53807],{"class":232},[79,83437,53301],{"class":228},[79,83439,83440,83442,83444],{"class":81,"line":712},[79,83441,53779],{"class":228},[79,83443,53794],{"class":232},[79,83445,53301],{"class":228},[19,83447,83448],{},[3569,83449],{"alt":57,"src":83450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,83452,83453],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[26,83455,83456],{"start":167},[29,83457,83458],{},"every()返回的是布尔值",[19,83460,83461],{},[2482,83462,83465],{"href":83463,"rel":83464},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[25885],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,83467,83468],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,83470,83471],{},"some是只有有一个就没问题",[19,83473,83474],{},"every是必须全是才行",[51,83476,83480],{"className":83477,"code":83478,"language":83479,"meta":57,"style":57},"language-sql shiki shiki-themes github-light github-dark","function isBigEnough(element, index, array) {\n  return element >= 10;\n}\n[12, 5, 8, 130, 44].every(isBigEnough); \u002F\u002F false\n[12, 54, 18, 130, 44].every(isBigEnough); \u002F\u002F true\n","sql",[59,83481,83482,83498,83512,83516,83525],{"__ignoreMap":57},[79,83483,83484,83486,83489,83491,83493,83496],{"class":81,"line":82},[79,83485,56438],{"class":448},[79,83487,83488],{"class":228}," isBigEnough(element, ",[79,83490,76046],{"class":448},[79,83492,1020],{"class":228},[79,83494,83495],{"class":448},"array",[79,83497,14476],{"class":228},[79,83499,83500,83503,83506,83508,83510],{"class":81,"line":167},[79,83501,83502],{"class":448},"  return",[79,83504,83505],{"class":228}," element ",[79,83507,3805],{"class":448},[79,83509,4123],{"class":96},[79,83511,3400],{"class":228},[79,83513,83514],{"class":81,"line":178},[79,83515,3671],{"class":228},[79,83517,83518,83521,83523],{"class":81,"line":545},[79,83519,83520],{"class":228},"[12, 5, 8, 130, 44].every(isBigEnough); ",[79,83522,35326],{"class":448},[79,83524,56505],{"class":228},[79,83526,83527,83530,83532],{"class":81,"line":550},[79,83528,83529],{"class":228},"[12, 54, 18, 130, 44].every(isBigEnough); ",[79,83531,35326],{"class":448},[79,83533,59929],{"class":228},[51,83535,83537],{"className":219,"code":83536,"language":221,"meta":57,"style":57},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n    const arr = [10, 20, 30]\n    const flag = arr.every(item => item >= 10)\n    console.log(flag)    \u002F\u002Ftrue\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[59,83538,83539,83547,83555,83560,83564,83569,83574,83582],{"__ignoreMap":57},[79,83540,83541,83543,83545],{"class":81,"line":82},[79,83542,229],{"class":228},[79,83544,53794],{"class":232},[79,83546,53301],{"class":228},[79,83548,83549,83551,83553],{"class":81,"line":167},[79,83550,54138],{"class":228},[79,83552,53807],{"class":232},[79,83554,53301],{"class":228},[79,83556,83557],{"class":81,"line":178},[79,83558,83559],{"class":228},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[79,83561,83562],{"class":81,"line":545},[79,83563,80310],{"class":228},[79,83565,83566],{"class":81,"line":550},[79,83567,83568],{"class":228},"    const flag = arr.every(item => item >= 10)\n",[79,83570,83571],{"class":81,"line":562},[79,83572,83573],{"class":228},"    console.log(flag)    \u002F\u002Ftrue\n",[79,83575,83576,83578,83580],{"class":81,"line":568},[79,83577,54410],{"class":228},[79,83579,53807],{"class":232},[79,83581,53301],{"class":228},[79,83583,83584,83586,83588],{"class":81,"line":574},[79,83585,53779],{"class":228},[79,83587,53794],{"class":232},[79,83589,53301],{"class":228},[51,83591,83593],{"className":219,"code":83592,"language":221,"meta":57,"style":57},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n    const arr = [10, 0, 5]\n    const flag = arr.some(item => item >= 10)\n    console.log(flag)   \u002F\u002Ftrue\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[59,83594,83595,83603,83611,83615,83620,83625,83630,83638],{"__ignoreMap":57},[79,83596,83597,83599,83601],{"class":81,"line":82},[79,83598,229],{"class":228},[79,83600,53794],{"class":232},[79,83602,53301],{"class":228},[79,83604,83605,83607,83609],{"class":81,"line":167},[79,83606,54138],{"class":228},[79,83608,53807],{"class":232},[79,83610,53301],{"class":228},[79,83612,83613],{"class":81,"line":178},[79,83614,83559],{"class":228},[79,83616,83617],{"class":81,"line":545},[79,83618,83619],{"class":228},"    const arr = [10, 0, 5]\n",[79,83621,83622],{"class":81,"line":550},[79,83623,83624],{"class":228},"    const flag = arr.some(item => item >= 10)\n",[79,83626,83627],{"class":81,"line":562},[79,83628,83629],{"class":228},"    console.log(flag)   \u002F\u002Ftrue\n",[79,83631,83632,83634,83636],{"class":81,"line":568},[79,83633,54410],{"class":228},[79,83635,53807],{"class":232},[79,83637,53301],{"class":228},[79,83639,83640,83642,83644],{"class":81,"line":574},[79,83641,53779],{"class":228},[79,83643,53794],{"class":232},[79,83645,53301],{"class":228},[24935,83647,83649],{"id":83648},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,83651,83652],{},[3569,83653],{"alt":57,"src":83654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[51,83656,83658],{"className":52628,"code":83657,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    div {\n      width: 200px;\n      height: 40px;\n      line-height: 40px;\n      font: 12px;\n      text-align: center;\n      background-color: pink;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv>\u003C\u002Fdiv>\n  \u003Cscript>\n    const spec = { size: '40cm*40cm', color: '黑色' }\n    \u002F\u002F const arr = Object.values(spec)\n    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n    document.querySelector('div').innerHTML = Object.values(spec).join('\u002F')\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,83659,83660,83670,83684,83688,83696,83710,83730,83742,83750,83757,83769,83781,83793,83805,83815,83825,83829,83837,83845,83849,83857,83869,83877,83899,83904,83909,83942,83950,83958,83962],{"__ignoreMap":57},[79,83661,83662,83664,83666,83668],{"class":81,"line":82},[79,83663,53292],{"class":228},[79,83665,53295],{"class":232},[79,83667,53298],{"class":85},[79,83669,53301],{"class":228},[79,83671,83672,83674,83676,83678,83680,83682],{"class":81,"line":167},[79,83673,229],{"class":228},[79,83675,52630],{"class":232},[79,83677,53310],{"class":85},[79,83679,239],{"class":228},[79,83681,53315],{"class":89},[79,83683,53301],{"class":228},[79,83685,83686],{"class":81,"line":178},[79,83687,542],{"emptyLinePlaceholder":541},[79,83689,83690,83692,83694],{"class":81,"line":545},[79,83691,229],{"class":228},[79,83693,53328],{"class":232},[79,83695,53301],{"class":228},[79,83697,83698,83700,83702,83704,83706,83708],{"class":81,"line":550},[79,83699,54138],{"class":228},[79,83701,53338],{"class":232},[79,83703,53341],{"class":85},[79,83705,239],{"class":228},[79,83707,53346],{"class":89},[79,83709,53301],{"class":228},[79,83711,83712,83714,83716,83718,83720,83722,83724,83726,83728],{"class":81,"line":562},[79,83713,54138],{"class":228},[79,83715,53338],{"class":232},[79,83717,236],{"class":85},[79,83719,239],{"class":228},[79,83721,53385],{"class":89},[79,83723,53365],{"class":85},[79,83725,239],{"class":228},[79,83727,53392],{"class":89},[79,83729,53301],{"class":228},[79,83731,83732,83734,83736,83738,83740],{"class":81,"line":568},[79,83733,54138],{"class":228},[79,83735,53401],{"class":232},[79,83737,53404],{"class":228},[79,83739,53401],{"class":232},[79,83741,53301],{"class":228},[79,83743,83744,83746,83748],{"class":81,"line":574},[79,83745,54138],{"class":228},[79,83747,2159],{"class":232},[79,83749,53301],{"class":228},[79,83751,83752,83755],{"class":81,"line":579},[79,83753,83754],{"class":232},"    div",[79,83756,17604],{"class":228},[79,83758,83759,83761,83763,83765,83767],{"class":81,"line":585},[79,83760,56760],{"class":96},[79,83762,53431],{"class":228},[79,83764,3817],{"class":96},[79,83766,53486],{"class":448},[79,83768,3400],{"class":228},[79,83770,83771,83773,83775,83777,83779],{"class":81,"line":591},[79,83772,56774],{"class":96},[79,83774,53431],{"class":228},[79,83776,2644],{"class":96},[79,83778,53486],{"class":448},[79,83780,3400],{"class":228},[79,83782,83783,83785,83787,83789,83791],{"class":81,"line":596},[79,83784,59348],{"class":96},[79,83786,53431],{"class":228},[79,83788,2644],{"class":96},[79,83790,53486],{"class":448},[79,83792,3400],{"class":228},[79,83794,83795,83797,83799,83801,83803],{"class":81,"line":602},[79,83796,67121],{"class":96},[79,83798,53431],{"class":228},[79,83800,2739],{"class":96},[79,83802,53486],{"class":448},[79,83804,3400],{"class":228},[79,83806,83807,83809,83811,83813],{"class":81,"line":608},[79,83808,59275],{"class":96},[79,83810,53431],{"class":228},[79,83812,53586],{"class":96},[79,83814,3400],{"class":228},[79,83816,83817,83819,83821,83823],{"class":81,"line":614},[79,83818,56873],{"class":96},[79,83820,53431],{"class":228},[79,83822,53639],{"class":96},[79,83824,3400],{"class":228},[79,83826,83827],{"class":81,"line":619},[79,83828,4272],{"class":228},[79,83830,83831,83833,83835],{"class":81,"line":625},[79,83832,54410],{"class":228},[79,83834,2159],{"class":232},[79,83836,53301],{"class":228},[79,83838,83839,83841,83843],{"class":81,"line":631},[79,83840,53779],{"class":228},[79,83842,53328],{"class":232},[79,83844,53301],{"class":228},[79,83846,83847],{"class":81,"line":637},[79,83848,542],{"emptyLinePlaceholder":541},[79,83850,83851,83853,83855],{"class":81,"line":643},[79,83852,229],{"class":228},[79,83854,53794],{"class":232},[79,83856,53301],{"class":228},[79,83858,83859,83861,83863,83865,83867],{"class":81,"line":649},[79,83860,54138],{"class":228},[79,83862,53605],{"class":232},[79,83864,57303],{"class":228},[79,83866,53605],{"class":232},[79,83868,53301],{"class":228},[79,83870,83871,83873,83875],{"class":81,"line":655},[79,83872,54138],{"class":228},[79,83874,53807],{"class":232},[79,83876,53301],{"class":228},[79,83878,83879,83881,83884,83886,83889,83892,83894,83897],{"class":81,"line":660},[79,83880,13256],{"class":448},[79,83882,83883],{"class":96}," spec",[79,83885,556],{"class":448},[79,83887,83888],{"class":228}," { size: ",[79,83890,83891],{"class":89},"'40cm*40cm'",[79,83893,57453],{"class":228},[79,83895,83896],{"class":89},"'黑色'",[79,83898,57593],{"class":228},[79,83900,83901],{"class":81,"line":666},[79,83902,83903],{"class":2313},"    \u002F\u002F const arr = Object.values(spec)\n",[79,83905,83906],{"class":81,"line":672},[79,83907,83908],{"class":2313},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[79,83910,83911,83913,83915,83917,83920,83922,83924,83927,83930,83933,83935,83937,83940],{"class":81,"line":678},[79,83912,54400],{"class":228},[79,83914,56388],{"class":85},[79,83916,455],{"class":228},[79,83918,83919],{"class":89},"'div'",[79,83921,76237],{"class":228},[79,83923,239],{"class":448},[79,83925,83926],{"class":228}," Object.",[79,83928,83929],{"class":85},"values",[79,83931,83932],{"class":228},"(spec).",[79,83934,76211],{"class":85},[79,83936,455],{"class":228},[79,83938,83939],{"class":89},"'\u002F'",[79,83941,850],{"class":228},[79,83943,83944,83946,83948],{"class":81,"line":684},[79,83945,54410],{"class":228},[79,83947,53807],{"class":232},[79,83949,53301],{"class":228},[79,83951,83952,83954,83956],{"class":81,"line":690},[79,83953,53779],{"class":228},[79,83955,53794],{"class":232},[79,83957,53301],{"class":228},[79,83959,83960],{"class":81,"line":695},[79,83961,542],{"emptyLinePlaceholder":541},[79,83963,83964,83966,83968],{"class":81,"line":700},[79,83965,53779],{"class":228},[79,83967,52630],{"class":232},[79,83969,53301],{"class":228},[19,83971,83972],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[24935,83974,83976],{"id":83975},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,83978,83979],{},"静态方法，将伪数组转换为真数组",[19,83981,83982],{},[3569,83983],{"alt":57,"src":83984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[51,83986,83988],{"className":219,"code":83987,"language":221,"meta":57,"style":57},"\u003Cbody>\n  \u003Cul>\n    \u003Cli>\u003C\u002Fli>\n    \u003Cli>\u003C\u002Fli>\n    \u003Cli>\u003C\u002Fli>\n  \u003C\u002Ful>\n  \u003Cscript>\n    const lis = document.querySelectorAll('li')\n    const liss = Array.from(lis)\n    liss.pop()\n    console.log(liss)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[59,83989,83990,83998,84006,84018,84030,84042,84050,84058,84063,84068,84073,84078,84086],{"__ignoreMap":57},[79,83991,83992,83994,83996],{"class":81,"line":82},[79,83993,229],{"class":228},[79,83995,53794],{"class":232},[79,83997,53301],{"class":228},[79,83999,84000,84002,84004],{"class":81,"line":167},[79,84001,54138],{"class":228},[79,84003,3246],{"class":232},[79,84005,53301],{"class":228},[79,84007,84008,84010,84012,84014,84016],{"class":81,"line":178},[79,84009,53335],{"class":228},[79,84011,29],{"class":232},[79,84013,57303],{"class":228},[79,84015,29],{"class":232},[79,84017,53301],{"class":228},[79,84019,84020,84022,84024,84026,84028],{"class":81,"line":545},[79,84021,53335],{"class":228},[79,84023,29],{"class":232},[79,84025,57303],{"class":228},[79,84027,29],{"class":232},[79,84029,53301],{"class":228},[79,84031,84032,84034,84036,84038,84040],{"class":81,"line":550},[79,84033,53335],{"class":228},[79,84035,29],{"class":232},[79,84037,57303],{"class":228},[79,84039,29],{"class":232},[79,84041,53301],{"class":228},[79,84043,84044,84046,84048],{"class":81,"line":562},[79,84045,54410],{"class":228},[79,84047,3246],{"class":232},[79,84049,53301],{"class":228},[79,84051,84052,84054,84056],{"class":81,"line":568},[79,84053,54138],{"class":228},[79,84055,53807],{"class":232},[79,84057,53301],{"class":228},[79,84059,84060],{"class":81,"line":574},[79,84061,84062],{"class":228},"    const lis = document.querySelectorAll('li')\n",[79,84064,84065],{"class":81,"line":579},[79,84066,84067],{"class":228},"    const liss = Array.from(lis)\n",[79,84069,84070],{"class":81,"line":585},[79,84071,84072],{"class":228},"    liss.pop()\n",[79,84074,84075],{"class":81,"line":591},[79,84076,84077],{"class":228},"    console.log(liss)\n",[79,84079,84080,84082,84084],{"class":81,"line":596},[79,84081,54410],{"class":228},[79,84083,53807],{"class":232},[79,84085,53301],{"class":228},[79,84087,84088,84090,84092],{"class":81,"line":602},[79,84089,53779],{"class":228},[79,84091,53794],{"class":232},[79,84093,53301],{"class":228},[19,84095,84096],{},[3569,84097],{"alt":57,"src":84098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[24023,84100,84102],{"id":84101},"_41053-string","4.10.5.3 String",[19,84104,84105],{},[3569,84106],{"alt":57,"src":84107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[24935,84109,84111],{"id":84110},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[51,84113,84115],{"className":219,"code":84114,"language":221,"meta":57,"style":57},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F 把字符串转化为数组\n    const str = 'pink,red'\n    const arr = str.split(',')\n    console.log(arr)\n    const str1 = '2025-8-25'\n    const arr1 = str1.split('-')\n    console.log(arr1)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[59,84116,84117,84125,84133,84138,84143,84148,84152,84157,84162,84167,84175],{"__ignoreMap":57},[79,84118,84119,84121,84123],{"class":81,"line":82},[79,84120,229],{"class":228},[79,84122,53794],{"class":232},[79,84124,53301],{"class":228},[79,84126,84127,84129,84131],{"class":81,"line":167},[79,84128,54138],{"class":228},[79,84130,53807],{"class":232},[79,84132,53301],{"class":228},[79,84134,84135],{"class":81,"line":178},[79,84136,84137],{"class":228},"    \u002F\u002F 把字符串转化为数组\n",[79,84139,84140],{"class":81,"line":545},[79,84141,84142],{"class":228},"    const str = 'pink,red'\n",[79,84144,84145],{"class":81,"line":550},[79,84146,84147],{"class":228},"    const arr = str.split(',')\n",[79,84149,84150],{"class":81,"line":562},[79,84151,82626],{"class":228},[79,84153,84154],{"class":81,"line":568},[79,84155,84156],{"class":228},"    const str1 = '2025-8-25'\n",[79,84158,84159],{"class":81,"line":574},[79,84160,84161],{"class":228},"    const arr1 = str1.split('-')\n",[79,84163,84164],{"class":81,"line":579},[79,84165,84166],{"class":228},"    console.log(arr1)\n",[79,84168,84169,84171,84173],{"class":81,"line":585},[79,84170,54410],{"class":228},[79,84172,53807],{"class":232},[79,84174,53301],{"class":228},[79,84176,84177,84179,84181],{"class":81,"line":591},[79,84178,53779],{"class":228},[79,84180,53794],{"class":232},[79,84182,53301],{"class":228},[24935,84184,84186],{"id":84185},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,84188,7251],{},[19,84190,84191],{},"substring(indexStart)",[19,84193,84194],{},"substring(indexStart, indexEnd)",[3246,84196,84197,84208,84220,84230],{},[29,84198,84199,84200,84203,84204,84207],{},"如果省略了 ",[59,84201,84202],{},"indexEnd","，则 ",[59,84205,84206],{},"substring()"," 提取字符直到字符串的末尾",[29,84209,84210,84211,84214,84215,84203,84217,84219],{},"如果 ",[59,84212,84213],{},"indexStart"," 等于 ",[59,84216,84202],{},[59,84218,84206],{}," 返回一个空字符串",[29,84221,84210,84222,84224,84225,84203,84227,84229],{},[59,84223,84213],{}," 大于 ",[59,84226,84202],{},[59,84228,84206],{}," 的效果就像交换了这两个参数一样",[29,84231,84232],{},"结束的索引号不包含想要截取的部分",[51,84234,84236],{"className":83477,"code":84235,"language":83479,"meta":57,"style":57},"const anyString = \"Mozilla\";\n\nconsole.log(anyString.substring(0, 1))  \u002F\u002F 'M'\nconsole.log(anyString.substring(1, 0))  \u002F\u002F 'M'\n\nconsole.log(anyString.substring(0, 6))  \u002F\u002F 'Mozill'\n\nconsole.log(anyString.substring(4))  \u002F\u002F 'lla'\nconsole.log(anyString.substring(4, 7))   \u002F\u002F 'lla'\nconsole.log(anyString.substring(7, 4))  \u002F\u002F 'lla'\n\nconsole.log(anyString.substring(0, 7))  \u002F\u002F 'Mozilla'\nconsole.log(anyString.substring(0, 10))  \u002F\u002F 'Mozilla'\n",[59,84237,84238,84250,84254,84288,84318,84322,84353,84357,84384,84414,84444,84448,84479],{"__ignoreMap":57},[79,84239,84240,84243,84245,84248],{"class":81,"line":82},[79,84241,84242],{"class":228},"const anyString ",[79,84244,239],{"class":448},[79,84246,84247],{"class":89}," \"Mozilla\"",[79,84249,3400],{"class":228},[79,84251,84252],{"class":81,"line":167},[79,84253,542],{"emptyLinePlaceholder":541},[79,84255,84256,84259,84261,84263,84265,84268,84270,84273,84275,84277,84279,84281,84283,84285],{"class":81,"line":178},[79,84257,84258],{"class":96},"console",[79,84260,2798],{"class":228},[79,84262,60236],{"class":96},[79,84264,455],{"class":228},[79,84266,84267],{"class":96},"anyString",[79,84269,2798],{"class":228},[79,84271,84272],{"class":96},"substring",[79,84274,455],{"class":228},[79,84276,759],{"class":96},[79,84278,1020],{"class":228},[79,84280,775],{"class":96},[79,84282,77241],{"class":228},[79,84284,35326],{"class":448},[79,84286,84287],{"class":89}," 'M'\n",[79,84289,84290,84292,84294,84296,84298,84300,84302,84304,84306,84308,84310,84312,84314,84316],{"class":81,"line":545},[79,84291,84258],{"class":96},[79,84293,2798],{"class":228},[79,84295,60236],{"class":96},[79,84297,455],{"class":228},[79,84299,84267],{"class":96},[79,84301,2798],{"class":228},[79,84303,84272],{"class":96},[79,84305,455],{"class":228},[79,84307,775],{"class":96},[79,84309,1020],{"class":228},[79,84311,759],{"class":96},[79,84313,77241],{"class":228},[79,84315,35326],{"class":448},[79,84317,84287],{"class":89},[79,84319,84320],{"class":81,"line":550},[79,84321,542],{"emptyLinePlaceholder":541},[79,84323,84324,84326,84328,84330,84332,84334,84336,84338,84340,84342,84344,84346,84348,84350],{"class":81,"line":562},[79,84325,84258],{"class":96},[79,84327,2798],{"class":228},[79,84329,60236],{"class":96},[79,84331,455],{"class":228},[79,84333,84267],{"class":96},[79,84335,2798],{"class":228},[79,84337,84272],{"class":96},[79,84339,455],{"class":228},[79,84341,759],{"class":96},[79,84343,1020],{"class":228},[79,84345,2587],{"class":96},[79,84347,77241],{"class":228},[79,84349,35326],{"class":448},[79,84351,84352],{"class":89}," 'Mozill'\n",[79,84354,84355],{"class":81,"line":568},[79,84356,542],{"emptyLinePlaceholder":541},[79,84358,84359,84361,84363,84365,84367,84369,84371,84373,84375,84377,84379,84381],{"class":81,"line":574},[79,84360,84258],{"class":96},[79,84362,2798],{"class":228},[79,84364,60236],{"class":96},[79,84366,455],{"class":228},[79,84368,84267],{"class":96},[79,84370,2798],{"class":228},[79,84372,84272],{"class":96},[79,84374,455],{"class":228},[79,84376,2537],{"class":96},[79,84378,77241],{"class":228},[79,84380,35326],{"class":448},[79,84382,84383],{"class":89}," 'lla'\n",[79,84385,84386,84388,84390,84392,84394,84396,84398,84400,84402,84404,84406,84408,84410,84412],{"class":81,"line":579},[79,84387,84258],{"class":96},[79,84389,2798],{"class":228},[79,84391,60236],{"class":96},[79,84393,455],{"class":228},[79,84395,84267],{"class":96},[79,84397,2798],{"class":228},[79,84399,84272],{"class":96},[79,84401,455],{"class":228},[79,84403,2537],{"class":96},[79,84405,1020],{"class":228},[79,84407,2612],{"class":96},[79,84409,77297],{"class":228},[79,84411,35326],{"class":448},[79,84413,84383],{"class":89},[79,84415,84416,84418,84420,84422,84424,84426,84428,84430,84432,84434,84436,84438,84440,84442],{"class":81,"line":585},[79,84417,84258],{"class":96},[79,84419,2798],{"class":228},[79,84421,60236],{"class":96},[79,84423,455],{"class":228},[79,84425,84267],{"class":96},[79,84427,2798],{"class":228},[79,84429,84272],{"class":96},[79,84431,455],{"class":228},[79,84433,2612],{"class":96},[79,84435,1020],{"class":228},[79,84437,2537],{"class":96},[79,84439,77241],{"class":228},[79,84441,35326],{"class":448},[79,84443,84383],{"class":89},[79,84445,84446],{"class":81,"line":591},[79,84447,542],{"emptyLinePlaceholder":541},[79,84449,84450,84452,84454,84456,84458,84460,84462,84464,84466,84468,84470,84472,84474,84476],{"class":81,"line":596},[79,84451,84258],{"class":96},[79,84453,2798],{"class":228},[79,84455,60236],{"class":96},[79,84457,455],{"class":228},[79,84459,84267],{"class":96},[79,84461,2798],{"class":228},[79,84463,84272],{"class":96},[79,84465,455],{"class":228},[79,84467,759],{"class":96},[79,84469,1020],{"class":228},[79,84471,2612],{"class":96},[79,84473,77241],{"class":228},[79,84475,35326],{"class":448},[79,84477,84478],{"class":89}," 'Mozilla'\n",[79,84480,84481,84483,84485,84487,84489,84491,84493,84495,84497,84499,84501,84503,84505,84507],{"class":81,"line":602},[79,84482,84258],{"class":96},[79,84484,2798],{"class":228},[79,84486,60236],{"class":96},[79,84488,455],{"class":228},[79,84490,84267],{"class":96},[79,84492,2798],{"class":228},[79,84494,84272],{"class":96},[79,84496,455],{"class":228},[79,84498,759],{"class":96},[79,84500,1020],{"class":228},[79,84502,2689],{"class":96},[79,84504,77241],{"class":228},[79,84506,35326],{"class":448},[79,84508,84478],{"class":89},[24935,84510,84512],{"id":84511},"_410533-startswith","4.10.5.3.3 startsWith",[19,84514,84515,84518,84519,84524,84525,1978,84527],{},[59,84516,84517],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[2398,84520,84521],{},[59,84522,84523],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[59,84526,3469],{},[59,84528,68008],{},[51,84530,84532],{"className":79483,"code":84531,"language":79485,"meta":57,"style":57},"const str1 = \"Saturday night plans\"\nconsole.log(str1.startsWith(\"Sat\"))\n\u002F\u002F Expected output: true\nconsole.log(str1.startsWith(\"Sat\", 3))\n\u002F\u002F Expected output: false\n",[59,84533,84534,84546,84565,84570,84590],{"__ignoreMap":57},[79,84535,84536,84538,84541,84543],{"class":81,"line":82},[79,84537,8857],{"class":448},[79,84539,84540],{"class":228}," str1 ",[79,84542,239],{"class":448},[79,84544,84545],{"class":89}," \"Saturday night plans\"\n",[79,84547,84548,84550,84552,84555,84558,84560,84563],{"class":81,"line":167},[79,84549,79520],{"class":228},[79,84551,60236],{"class":85},[79,84553,84554],{"class":228},"(str1.",[79,84556,84557],{"class":85},"startsWith",[79,84559,455],{"class":228},[79,84561,84562],{"class":89},"\"Sat\"",[79,84564,1150],{"class":228},[79,84566,84567],{"class":81,"line":178},[79,84568,84569],{"class":2313},"\u002F\u002F Expected output: true\n",[79,84571,84572,84574,84576,84578,84580,84582,84584,84586,84588],{"class":81,"line":545},[79,84573,79520],{"class":228},[79,84575,60236],{"class":85},[79,84577,84554],{"class":228},[79,84579,84557],{"class":85},[79,84581,455],{"class":228},[79,84583,84562],{"class":89},[79,84585,1020],{"class":228},[79,84587,970],{"class":96},[79,84589,1150],{"class":228},[79,84591,84592],{"class":81,"line":550},[79,84593,84594],{"class":2313},"\u002F\u002F Expected output: false\n",[51,84596,84598],{"className":52628,"code":84597,"language":52630,"meta":57,"style":57},"startsWith(searchString)\nstartsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n\nconst str3 = 'pink老师上课中'\nconsole.log(str3.startsWith('pink'))   \u002F\u002Ftrue\nconsole.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[59,84599,84600,84605,84610,84614,84619,84624],{"__ignoreMap":57},[79,84601,84602],{"class":81,"line":82},[79,84603,84604],{"class":228},"startsWith(searchString)\n",[79,84606,84607],{"class":81,"line":167},[79,84608,84609],{"class":228},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[79,84611,84612],{"class":81,"line":178},[79,84613,542],{"emptyLinePlaceholder":541},[79,84615,84616],{"class":81,"line":545},[79,84617,84618],{"class":228},"const str3 = 'pink老师上课中'\n",[79,84620,84621],{"class":81,"line":550},[79,84622,84623],{"class":228},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[79,84625,84626],{"class":81,"line":562},[79,84627,84628],{"class":228},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[24935,84630,84632],{"id":84631},"_410534-includes","4.10.5.3.4 includes",[19,84634,84635],{},"includes(searchString) includes(searchString, position)",[26,84637,84638],{},[29,84639,84640],{},"searchString:",[19,84642,84643,84644,84646,84647,84652,84653,84658,84659,23525,84662,84665,84666,84669],{},"一个要在 ",[59,84645,3409],{}," 中查找的字符串。",[2482,84648,84651],{"href":84649,"rel":84650},"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",[25885],"不能是正则表达式","。所有非正则表达式的值都会被",[2482,84654,84657],{"href":84655,"rel":84656},"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",[25885],"强制转换为字符串","，因此如果该参数被省略或传入 ",[59,84660,84661],{},"undefined",[59,84663,84664],{},"includes()"," 方法会在字符串中搜索 ",[59,84667,84668],{},"\"undefined\"","，这通常不是你想要的",[26,84671,84672],{"start":167},[29,84673,84674,3099],{},[59,84675,84676],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,84678,84679,84680,84683,84684],{},"在字符串中开始搜索 ",[59,84681,84682],{},"searchString"," 的位置。默认值为 ",[59,84685,759],{},[26,84687,84688],{"start":178},[29,84689,84690],{},"返回值：",[19,84692,84693,84694,84696,84697,84701,84702],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[59,84695,84682],{}," 为空字符串的情况），则返回 ",[2398,84698,84699],{},[59,84700,3469],{}," ，否则返回 ",[2398,84703,84704],{},[59,84705,68008],{},[26,84707,84708],{"start":545},[29,84709,84710],{},"异常：",[19,84712,84210,84713,15828,84715,84719],{},[59,84714,84682],{},[2482,84716,84718],{"href":84649,"rel":84717},[25885],"是一个正则表达式","，则会抛出",[19,84721,84722],{},"只要是有就是true，不需要非得以谁开头结尾",[51,84724,84726],{"className":79483,"code":84725,"language":79485,"meta":57,"style":57},"const str = \"To be, or not to be, that is the question.\"\nconsole.log(str.includes(\"To be\"))  \u002F\u002F true\nconsole.log(str.includes(\"question\"))  \u002F\u002F true\nconsole.log(str.includes(\"nonexistent\"))  \u002F\u002F false\nconsole.log(str.includes(\"To be\", 1))  \u002F\u002F false\nconsole.log(str.includes(\"TO BE\"))  \u002F\u002F false\nconsole.log(str.includes(\"\"))  \u002F\u002F true\n",[59,84727,84728,84739,84762,84781,84801,84823,84842],{"__ignoreMap":57},[79,84729,84730,84732,84734,84736],{"class":81,"line":82},[79,84731,8857],{"class":448},[79,84733,81763],{"class":228},[79,84735,239],{"class":448},[79,84737,84738],{"class":89}," \"To be, or not to be, that is the question.\"\n",[79,84740,84741,84743,84745,84748,84751,84753,84756,84759],{"class":81,"line":167},[79,84742,79520],{"class":228},[79,84744,60236],{"class":85},[79,84746,84747],{"class":228},"(str.",[79,84749,84750],{"class":85},"includes",[79,84752,455],{"class":228},[79,84754,84755],{"class":89},"\"To be\"",[79,84757,84758],{"class":228},"))",[79,84760,84761],{"class":2313},"  \u002F\u002F true\n",[79,84763,84764,84766,84768,84770,84772,84774,84777,84779],{"class":81,"line":178},[79,84765,79520],{"class":228},[79,84767,60236],{"class":85},[79,84769,84747],{"class":228},[79,84771,84750],{"class":85},[79,84773,455],{"class":228},[79,84775,84776],{"class":89},"\"question\"",[79,84778,84758],{"class":228},[79,84780,84761],{"class":2313},[79,84782,84783,84785,84787,84789,84791,84793,84796,84798],{"class":81,"line":545},[79,84784,79520],{"class":228},[79,84786,60236],{"class":85},[79,84788,84747],{"class":228},[79,84790,84750],{"class":85},[79,84792,455],{"class":228},[79,84794,84795],{"class":89},"\"nonexistent\"",[79,84797,84758],{"class":228},[79,84799,84800],{"class":2313},"  \u002F\u002F false\n",[79,84802,84803,84805,84807,84809,84811,84813,84815,84817,84819,84821],{"class":81,"line":550},[79,84804,79520],{"class":228},[79,84806,60236],{"class":85},[79,84808,84747],{"class":228},[79,84810,84750],{"class":85},[79,84812,455],{"class":228},[79,84814,84755],{"class":89},[79,84816,1020],{"class":228},[79,84818,775],{"class":96},[79,84820,84758],{"class":228},[79,84822,84800],{"class":2313},[79,84824,84825,84827,84829,84831,84833,84835,84838,84840],{"class":81,"line":562},[79,84826,79520],{"class":228},[79,84828,60236],{"class":85},[79,84830,84747],{"class":228},[79,84832,84750],{"class":85},[79,84834,455],{"class":228},[79,84836,84837],{"class":89},"\"TO BE\"",[79,84839,84758],{"class":228},[79,84841,84800],{"class":2313},[79,84843,84844,84846,84848,84850,84852,84854,84856,84858],{"class":81,"line":568},[79,84845,79520],{"class":228},[79,84847,60236],{"class":85},[79,84849,84747],{"class":228},[79,84851,84750],{"class":85},[79,84853,455],{"class":228},[79,84855,9717],{"class":89},[79,84857,84758],{"class":228},[79,84859,84761],{"class":2313},[24935,84861,84863],{"id":84862},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[51,84865,84867],{"className":219,"code":84866,"language":221,"meta":57,"style":57},"\u003Cbody>\n  \u003Cscript>\n    const num = 10\n    \u002F\u002F 强制转换\n    console.log(String(num))\n    \u002F\u002F toString()方法转换\n    console.log(num.toString())\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[59,84868,84869,84877,84885,84890,84895,84900,84905,84910,84918],{"__ignoreMap":57},[79,84870,84871,84873,84875],{"class":81,"line":82},[79,84872,229],{"class":228},[79,84874,53794],{"class":232},[79,84876,53301],{"class":228},[79,84878,84879,84881,84883],{"class":81,"line":167},[79,84880,54138],{"class":228},[79,84882,53807],{"class":232},[79,84884,53301],{"class":228},[79,84886,84887],{"class":81,"line":178},[79,84888,84889],{"class":228},"    const num = 10\n",[79,84891,84892],{"class":81,"line":545},[79,84893,84894],{"class":228},"    \u002F\u002F 强制转换\n",[79,84896,84897],{"class":81,"line":550},[79,84898,84899],{"class":228},"    console.log(String(num))\n",[79,84901,84902],{"class":81,"line":562},[79,84903,84904],{"class":228},"    \u002F\u002F toString()方法转换\n",[79,84906,84907],{"class":81,"line":568},[79,84908,84909],{"class":228},"    console.log(num.toString())\n",[79,84911,84912,84914,84916],{"class":81,"line":574},[79,84913,54410],{"class":228},[79,84915,53807],{"class":232},[79,84917,53301],{"class":228},[79,84919,84920,84922,84924],{"class":81,"line":579},[79,84921,53779],{"class":228},[79,84923,53794],{"class":232},[79,84925,53301],{"class":228},[24935,84927,84929],{"id":84928},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,84931,84932],{},[3569,84933],{"alt":57,"src":84934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[51,84936,84938],{"className":52628,"code":84937,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv>\u003C\u002Fdiv>\n  \u003Cscript>\n    const gift = '50g的茶叶，清洗球'\n    \u002F\u002F 1.把字符串拆分为数组\n    \u002F\u002F console.log(gift.split(','))\n    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n    const str = gift.split('，').map(item => `\u003Cspan>【赠品】${item}\u003C\u002Fspan>\u003Cbr>`).join('')\n    document.querySelector('div').innerHTML = str\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,84939,84940,84950,84964,84968,84976,84990,85010,85022,85030,85034,85042,85054,85062,85074,85079,85084,85089,85136,85152,85160,85168,85172],{"__ignoreMap":57},[79,84941,84942,84944,84946,84948],{"class":81,"line":82},[79,84943,53292],{"class":228},[79,84945,53295],{"class":232},[79,84947,53298],{"class":85},[79,84949,53301],{"class":228},[79,84951,84952,84954,84956,84958,84960,84962],{"class":81,"line":167},[79,84953,229],{"class":228},[79,84955,52630],{"class":232},[79,84957,53310],{"class":85},[79,84959,239],{"class":228},[79,84961,53315],{"class":89},[79,84963,53301],{"class":228},[79,84965,84966],{"class":81,"line":178},[79,84967,542],{"emptyLinePlaceholder":541},[79,84969,84970,84972,84974],{"class":81,"line":545},[79,84971,229],{"class":228},[79,84973,53328],{"class":232},[79,84975,53301],{"class":228},[79,84977,84978,84980,84982,84984,84986,84988],{"class":81,"line":550},[79,84979,54138],{"class":228},[79,84981,53338],{"class":232},[79,84983,53341],{"class":85},[79,84985,239],{"class":228},[79,84987,53346],{"class":89},[79,84989,53301],{"class":228},[79,84991,84992,84994,84996,84998,85000,85002,85004,85006,85008],{"class":81,"line":562},[79,84993,54138],{"class":228},[79,84995,53338],{"class":232},[79,84997,236],{"class":85},[79,84999,239],{"class":228},[79,85001,53385],{"class":89},[79,85003,53365],{"class":85},[79,85005,239],{"class":228},[79,85007,53392],{"class":89},[79,85009,53301],{"class":228},[79,85011,85012,85014,85016,85018,85020],{"class":81,"line":568},[79,85013,54138],{"class":228},[79,85015,53401],{"class":232},[79,85017,53404],{"class":228},[79,85019,53401],{"class":232},[79,85021,53301],{"class":228},[79,85023,85024,85026,85028],{"class":81,"line":574},[79,85025,53779],{"class":228},[79,85027,53328],{"class":232},[79,85029,53301],{"class":228},[79,85031,85032],{"class":81,"line":579},[79,85033,542],{"emptyLinePlaceholder":541},[79,85035,85036,85038,85040],{"class":81,"line":585},[79,85037,229],{"class":228},[79,85039,53794],{"class":232},[79,85041,53301],{"class":228},[79,85043,85044,85046,85048,85050,85052],{"class":81,"line":591},[79,85045,54138],{"class":228},[79,85047,53605],{"class":232},[79,85049,57303],{"class":228},[79,85051,53605],{"class":232},[79,85053,53301],{"class":228},[79,85055,85056,85058,85060],{"class":81,"line":596},[79,85057,54138],{"class":228},[79,85059,53807],{"class":232},[79,85061,53301],{"class":228},[79,85063,85064,85066,85069,85071],{"class":81,"line":602},[79,85065,13256],{"class":448},[79,85067,85068],{"class":96}," gift",[79,85070,556],{"class":448},[79,85072,85073],{"class":89}," '50g的茶叶，清洗球'\n",[79,85075,85076],{"class":81,"line":608},[79,85077,85078],{"class":2313},"    \u002F\u002F 1.把字符串拆分为数组\n",[79,85080,85081],{"class":81,"line":614},[79,85082,85083],{"class":2313},"    \u002F\u002F console.log(gift.split(','))\n",[79,85085,85086],{"class":81,"line":619},[79,85087,85088],{"class":2313},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[79,85090,85091,85093,85095,85097,85100,85103,85105,85108,85110,85112,85114,85116,85118,85121,85123,85126,85128,85130,85132,85134],{"class":81,"line":625},[79,85092,13256],{"class":448},[79,85094,75907],{"class":96},[79,85096,556],{"class":448},[79,85098,85099],{"class":228}," gift.",[79,85101,85102],{"class":85},"split",[79,85104,455],{"class":228},[79,85106,85107],{"class":89},"'，'",[79,85109,32833],{"class":228},[79,85111,76032],{"class":85},[79,85113,455],{"class":228},[79,85115,81783],{"class":7284},[79,85117,81786],{"class":448},[79,85119,85120],{"class":89}," `\u003Cspan>【赠品】${",[79,85122,81783],{"class":228},[79,85124,85125],{"class":89},"}\u003C\u002Fspan>\u003Cbr>`",[79,85127,32833],{"class":228},[79,85129,76211],{"class":85},[79,85131,455],{"class":228},[79,85133,76216],{"class":89},[79,85135,850],{"class":228},[79,85137,85138,85140,85142,85144,85146,85148,85150],{"class":81,"line":631},[79,85139,54400],{"class":228},[79,85141,56388],{"class":85},[79,85143,455],{"class":228},[79,85145,83919],{"class":89},[79,85147,76237],{"class":228},[79,85149,239],{"class":448},[79,85151,75973],{"class":228},[79,85153,85154,85156,85158],{"class":81,"line":637},[79,85155,54410],{"class":228},[79,85157,53807],{"class":232},[79,85159,53301],{"class":228},[79,85161,85162,85164,85166],{"class":81,"line":643},[79,85163,53779],{"class":228},[79,85165,53794],{"class":232},[79,85167,53301],{"class":228},[79,85169,85170],{"class":81,"line":649},[79,85171,542],{"emptyLinePlaceholder":541},[79,85173,85174,85176,85178],{"class":81,"line":655},[79,85175,53779],{"class":228},[79,85177,52630],{"class":232},[79,85179,53301],{"class":228},[24023,85181,85183],{"id":85182},"_41054-number","4.10.5.4 Number",[19,85185,85186],{},[3569,85187],{"alt":57,"src":85188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,85190,85191],{},"整数也可以进行toFixed来保留小数",[19,85193,85194],{},"比如：",[19,85196,85197],{},"const price=10",[19,85199,85200],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[24023,85202,85204],{"id":85203},"_41055-购物车展示","4.10.5.5 购物车展示",[19,85206,85207],{},[3569,85208],{"alt":57,"src":85209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[51,85211,85213],{"className":52628,"code":85212,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n      box-sizing: border-box;\n    }\n\n    .list {\n      width: 990px;\n      margin: 100px auto;\n    }\n\n    .item {\n      padding: 15px;\n      transition: all ease .5s;\n      display: flex;\n      border: 1px solid #e4e4e4;\n    }\n\n    .item:hover {\n      cursor: pointer;\n      background-color: #f5f5f5;\n    }\n\n    .item img {\n      width: 80px;\n      height: 80px;\n      margin-right: 5px;\n    }\n\n    .item .name {\n      width: 200px;\n    }\n\n    .item .name .tag {\n      display: block;\n      padding: 2px;\n      font-size: 12px;\n      color: #999;\n    }\n\n    .item .price,\n    .item .sub-total {\n      font-size: 18px;\n      color: firebrick;\n      flex: 1;\n    }\n\n    .item .price::before,\n    .item .sub-total::before,\n    .amount::before {\n      content: '￥';\n      font-size: 12px;\n    }\n\n    .item .spec {\n      flex: 2;\n      color: #888;\n      font-size: 14px;\n      margin-left: 20px;\n    }\n\n    .item .count {\n      flex: 1;\n      color: #aaa;\n    }\n\n    .total {\n      width: 990px;\n      margin: 0 auto;\n      display: flex;\n      justify-content: flex-end;\n      border-top: 1px solid #4e4e4e;\n      padding: 20px;\n    }\n\n    .total .amount {\n      font-size: 18px;\n      color: firebrick;\n      font-weight: 700;\n      margin-right: 50px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"list\">\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"total\">\n    \u003Cdiv>合计：\u003Cspan class=\"amount\">\u003C\u002Fspan>\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const goodsList = [\n      {\n        id: '4001172',\n        name: '称心如意手摇咖啡磨豆机咖啡豆研磨机',\n        price: 289.9,\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg',\n        count: 2,\n        spec: { color: '白色' }\n      },\n      {\n        id: '4001009',\n        name: '竹制干泡茶盘正方形沥水茶台品茶盘',\n        price: 109.8,\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png',\n        count: 3,\n        spec: { size: '40cm*40cm', color: '黑色' }\n      },\n      {\n        id: '4001874',\n        name: '古法温酒汝瓷酒具套装白酒杯莲花温酒器',\n        price: 488,\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png',\n        count: 1,\n        spec: { color: '青色', sum: '一大四小' }\n      },\n      {\n        id: '4001649',\n        name: '大师监制龙泉青瓷茶叶罐',\n        price: 139,\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png',\n        count: 1,\n        spec: { size: '小号', color: '紫色' },\n        gift: '50g茶叶,清洗球'\n      }\n    ]\n    \u002F\u002F  1.根据数据渲染页面\n    document.querySelector('.list').innerHTML = goodsList.map(item => {\n      \u002F\u002F 对象解构\n      const { picture, name, count, price, spec, gift } = item\n      \u002F\u002F 规格文字模块处理\n      const text = Object.values(spec).join('\u002F')\n      \u002F\u002F 处理赠品模块\n      const str = gift ? gift.split(',').map(item => `\u003Cspan class=\"tag\">【赠品】${item}\u003C\u002Fspan>`).join('') : ''\n      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n      const subtotal = ((price * 100 * count) \u002F 100).toFixed(2)\n\n      return `\n        \u003Cdiv class=\"item\">\n          \u003Cimg src=\"${picture}\" alt=\"\">\n          \u003Cp class=\"name\">${name}${str}\u003C\u002Fp>\n          \u003Cp class=\"spec\">${text}\u003C\u002Fp>\n          \u003Cp class=\"price\">${price.toFixed(2)}\u003C\u002Fp>\n          \u003Cp class=\"count\">x${count}\u003C\u002Fp>\n          \u003Cp class=\"sub-total\">${subtotal}\u003C\u002Fp>\n        \u003C\u002Fdiv> \n             `\n    }).join('')\n    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n    const total = goodsList.reduce((prev, item) => prev + (item.price * 100 * item.count) \u002F 100, 0)\n    document.querySelector('.amount').innerHTML = total.toFixed(2)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,85214,85215,85225,85239,85243,85251,85265,85285,85297,85305,85311,85321,85331,85341,85345,85349,85355,85367,85381,85385,85389,85395,85407,85423,85433,85449,85453,85457,85463,85473,85483,85487,85491,85499,85511,85523,85535,85539,85543,85551,85563,85567,85571,85582,85592,85604,85616,85626,85630,85634,85642,85651,85663,85673,85683,85687,85691,85699,85708,85715,85725,85737,85741,85745,85754,85764,85775,85787,85799,85803,85807,85816,85826,85837,85841,85845,85851,85863,85875,85885,85895,85913,85925,85929,85933,85942,85954,85964,85974,85986,85990,85998,86006,86010,86018,86032,86040,86054,86082,86090,86098,86108,86112,86120,86128,86137,86145,86154,86164,86168,86172,86180,86188,86197,86205,86213,86226,86230,86234,86242,86250,86259,86267,86275,86290,86294,86298,86306,86314,86323,86331,86339,86353,86361,86365,86369,86374,86400,86405,86442,86447,86470,86475,86529,86534,86570,86574,86580,86585,86594,86608,86617,86636,86645,86655,86660,86665,86678,86683,86737,86763,86771,86779,86783],{"__ignoreMap":57},[79,85216,85217,85219,85221,85223],{"class":81,"line":82},[79,85218,53292],{"class":228},[79,85220,53295],{"class":232},[79,85222,53298],{"class":85},[79,85224,53301],{"class":228},[79,85226,85227,85229,85231,85233,85235,85237],{"class":81,"line":167},[79,85228,229],{"class":228},[79,85230,52630],{"class":232},[79,85232,53310],{"class":85},[79,85234,239],{"class":228},[79,85236,53315],{"class":89},[79,85238,53301],{"class":228},[79,85240,85241],{"class":81,"line":178},[79,85242,542],{"emptyLinePlaceholder":541},[79,85244,85245,85247,85249],{"class":81,"line":545},[79,85246,229],{"class":228},[79,85248,53328],{"class":232},[79,85250,53301],{"class":228},[79,85252,85253,85255,85257,85259,85261,85263],{"class":81,"line":550},[79,85254,54138],{"class":228},[79,85256,53338],{"class":232},[79,85258,53341],{"class":85},[79,85260,239],{"class":228},[79,85262,53346],{"class":89},[79,85264,53301],{"class":228},[79,85266,85267,85269,85271,85273,85275,85277,85279,85281,85283],{"class":81,"line":562},[79,85268,54138],{"class":228},[79,85270,53338],{"class":232},[79,85272,236],{"class":85},[79,85274,239],{"class":228},[79,85276,53385],{"class":89},[79,85278,53365],{"class":85},[79,85280,239],{"class":228},[79,85282,53392],{"class":89},[79,85284,53301],{"class":228},[79,85286,85287,85289,85291,85293,85295],{"class":81,"line":568},[79,85288,54138],{"class":228},[79,85290,53401],{"class":232},[79,85292,53404],{"class":228},[79,85294,53401],{"class":232},[79,85296,53301],{"class":228},[79,85298,85299,85301,85303],{"class":81,"line":574},[79,85300,54138],{"class":228},[79,85302,2159],{"class":232},[79,85304,53301],{"class":228},[79,85306,85307,85309],{"class":81,"line":579},[79,85308,8470],{"class":232},[79,85310,17604],{"class":228},[79,85312,85313,85315,85317,85319],{"class":81,"line":585},[79,85314,56684],{"class":96},[79,85316,53431],{"class":228},[79,85318,759],{"class":96},[79,85320,3400],{"class":228},[79,85322,85323,85325,85327,85329],{"class":81,"line":591},[79,85324,56695],{"class":96},[79,85326,53431],{"class":228},[79,85328,759],{"class":96},[79,85330,3400],{"class":228},[79,85332,85333,85335,85337,85339],{"class":81,"line":596},[79,85334,74584],{"class":96},[79,85336,53431],{"class":228},[79,85338,62494],{"class":96},[79,85340,3400],{"class":228},[79,85342,85343],{"class":81,"line":602},[79,85344,4272],{"class":228},[79,85346,85347],{"class":81,"line":608},[79,85348,542],{"emptyLinePlaceholder":541},[79,85350,85351,85353],{"class":81,"line":614},[79,85352,64111],{"class":85},[79,85354,17604],{"class":228},[79,85356,85357,85359,85361,85363,85365],{"class":81,"line":619},[79,85358,56760],{"class":96},[79,85360,53431],{"class":228},[79,85362,80562],{"class":96},[79,85364,53486],{"class":448},[79,85366,3400],{"class":228},[79,85368,85369,85371,85373,85375,85377,85379],{"class":81,"line":625},[79,85370,56695],{"class":96},[79,85372,53431],{"class":228},[79,85374,2555],{"class":96},[79,85376,53486],{"class":448},[79,85378,53550],{"class":96},[79,85380,3400],{"class":228},[79,85382,85383],{"class":81,"line":631},[79,85384,4272],{"class":228},[79,85386,85387],{"class":81,"line":637},[79,85388,542],{"emptyLinePlaceholder":541},[79,85390,85391,85393],{"class":81,"line":643},[79,85392,80613],{"class":85},[79,85394,17604],{"class":228},[79,85396,85397,85399,85401,85403,85405],{"class":81,"line":649},[79,85398,56684],{"class":96},[79,85400,53431],{"class":228},[79,85402,2815],{"class":96},[79,85404,53486],{"class":448},[79,85406,3400],{"class":228},[79,85408,85409,85411,85413,85415,85417,85419,85421],{"class":81,"line":655},[79,85410,63849],{"class":96},[79,85412,53431],{"class":228},[79,85414,30137],{"class":96},[79,85416,80668],{"class":96},[79,85418,80671],{"class":96},[79,85420,2935],{"class":448},[79,85422,3400],{"class":228},[79,85424,85425,85427,85429,85431],{"class":81,"line":660},[79,85426,56998],{"class":96},[79,85428,53431],{"class":228},[79,85430,53471],{"class":96},[79,85432,3400],{"class":228},[79,85434,85435,85437,85439,85441,85443,85445,85447],{"class":81,"line":666},[79,85436,63965],{"class":96},[79,85438,53431],{"class":228},[79,85440,775],{"class":96},[79,85442,53486],{"class":448},[79,85444,53515],{"class":96},[79,85446,64232],{"class":96},[79,85448,3400],{"class":228},[79,85450,85451],{"class":81,"line":672},[79,85452,4272],{"class":228},[79,85454,85455],{"class":81,"line":678},[79,85456,542],{"emptyLinePlaceholder":541},[79,85458,85459,85461],{"class":81,"line":684},[79,85460,80731],{"class":85},[79,85462,17604],{"class":228},[79,85464,85465,85467,85469,85471],{"class":81,"line":690},[79,85466,64013],{"class":96},[79,85468,53431],{"class":228},[79,85470,64018],{"class":96},[79,85472,3400],{"class":228},[79,85474,85475,85477,85479,85481],{"class":81,"line":695},[79,85476,56873],{"class":96},[79,85478,53431],{"class":228},[79,85480,63807],{"class":96},[79,85482,3400],{"class":228},[79,85484,85485],{"class":81,"line":700},[79,85486,4272],{"class":228},[79,85488,85489],{"class":81,"line":712},[79,85490,542],{"emptyLinePlaceholder":541},[79,85492,85493,85495,85497],{"class":81,"line":721},[79,85494,80613],{"class":85},[79,85496,57604],{"class":232},[79,85498,17604],{"class":228},[79,85500,85501,85503,85505,85507,85509],{"class":81,"line":726},[79,85502,56760],{"class":96},[79,85504,53431],{"class":228},[79,85506,2852],{"class":96},[79,85508,53486],{"class":448},[79,85510,3400],{"class":228},[79,85512,85513,85515,85517,85519,85521],{"class":81,"line":731},[79,85514,56774],{"class":96},[79,85516,53431],{"class":228},[79,85518,2852],{"class":96},[79,85520,53486],{"class":448},[79,85522,3400],{"class":228},[79,85524,85525,85527,85529,85531,85533],{"class":81,"line":748},[79,85526,63739],{"class":96},[79,85528,53431],{"class":228},[79,85530,2563],{"class":96},[79,85532,53486],{"class":448},[79,85534,3400],{"class":228},[79,85536,85537],{"class":81,"line":765},[79,85538,4272],{"class":228},[79,85540,85541],{"class":81,"line":780},[79,85542,542],{"emptyLinePlaceholder":541},[79,85544,85545,85547,85549],{"class":81,"line":811},[79,85546,80613],{"class":85},[79,85548,64292],{"class":85},[79,85550,17604],{"class":228},[79,85552,85553,85555,85557,85559,85561],{"class":81,"line":816},[79,85554,56760],{"class":96},[79,85556,53431],{"class":228},[79,85558,3817],{"class":96},[79,85560,53486],{"class":448},[79,85562,3400],{"class":228},[79,85564,85565],{"class":81,"line":821},[79,85566,4272],{"class":228},[79,85568,85569],{"class":81,"line":837},[79,85570,542],{"emptyLinePlaceholder":541},[79,85572,85573,85575,85577,85580],{"class":81,"line":853},[79,85574,80613],{"class":85},[79,85576,64292],{"class":85},[79,85578,85579],{"class":85}," .tag",[79,85581,17604],{"class":228},[79,85583,85584,85586,85588,85590],{"class":81,"line":864},[79,85585,56998],{"class":96},[79,85587,53431],{"class":228},[79,85589,62858],{"class":96},[79,85591,3400],{"class":228},[79,85593,85594,85596,85598,85600,85602],{"class":81,"line":869},[79,85595,56684],{"class":96},[79,85597,53431],{"class":228},[79,85599,2331],{"class":96},[79,85601,53486],{"class":448},[79,85603,3400],{"class":228},[79,85605,85606,85608,85610,85612,85614],{"class":81,"line":885},[79,85607,56911],{"class":96},[79,85609,53431],{"class":228},[79,85611,2739],{"class":96},[79,85613,53486],{"class":448},[79,85615,3400],{"class":228},[79,85617,85618,85620,85622,85624],{"class":81,"line":891},[79,85619,59405],{"class":96},[79,85621,53431],{"class":228},[79,85623,64058],{"class":96},[79,85625,3400],{"class":228},[79,85627,85628],{"class":81,"line":896},[79,85629,4272],{"class":228},[79,85631,85632],{"class":81,"line":907},[79,85633,542],{"emptyLinePlaceholder":541},[79,85635,85636,85638,85640],{"class":81,"line":912},[79,85637,80613],{"class":85},[79,85639,80905],{"class":85},[79,85641,33468],{"class":228},[79,85643,85644,85646,85649],{"class":81,"line":935},[79,85645,80613],{"class":85},[79,85647,85648],{"class":85}," .sub-total",[79,85650,17604],{"class":228},[79,85652,85653,85655,85657,85659,85661],{"class":81,"line":946},[79,85654,56911],{"class":96},[79,85656,53431],{"class":228},[79,85658,2890],{"class":96},[79,85660,53486],{"class":448},[79,85662,3400],{"class":228},[79,85664,85665,85667,85669,85671],{"class":81,"line":960},[79,85666,59405],{"class":96},[79,85668,53431],{"class":228},[79,85670,80928],{"class":96},[79,85672,3400],{"class":228},[79,85674,85675,85677,85679,85681],{"class":81,"line":975},[79,85676,63826],{"class":96},[79,85678,53431],{"class":228},[79,85680,775],{"class":96},[79,85682,3400],{"class":228},[79,85684,85685],{"class":81,"line":980},[79,85686,4272],{"class":228},[79,85688,85689],{"class":81,"line":1006},[79,85690,542],{"emptyLinePlaceholder":541},[79,85692,85693,85695,85697],{"class":81,"line":1027},[79,85694,80613],{"class":85},[79,85696,80945],{"class":85},[79,85698,33468],{"class":228},[79,85700,85701,85703,85706],{"class":81,"line":1032},[79,85702,80613],{"class":85},[79,85704,85705],{"class":85}," .sub-total::before",[79,85707,33468],{"class":228},[79,85709,85710,85713],{"class":81,"line":1047},[79,85711,85712],{"class":85},"    .amount::before",[79,85714,17604],{"class":228},[79,85716,85717,85719,85721,85723],{"class":81,"line":1053},[79,85718,80952],{"class":96},[79,85720,53431],{"class":228},[79,85722,80957],{"class":89},[79,85724,3400],{"class":228},[79,85726,85727,85729,85731,85733,85735],{"class":81,"line":1058},[79,85728,56911],{"class":96},[79,85730,53431],{"class":228},[79,85732,2739],{"class":96},[79,85734,53486],{"class":448},[79,85736,3400],{"class":228},[79,85738,85739],{"class":81,"line":1069},[79,85740,4272],{"class":228},[79,85742,85743],{"class":81,"line":1081},[79,85744,542],{"emptyLinePlaceholder":541},[79,85746,85747,85749,85752],{"class":81,"line":1086},[79,85748,80613],{"class":85},[79,85750,85751],{"class":85}," .spec",[79,85753,17604],{"class":228},[79,85755,85756,85758,85760,85762],{"class":81,"line":1108},[79,85757,63826],{"class":96},[79,85759,53431],{"class":228},[79,85761,2331],{"class":96},[79,85763,3400],{"class":228},[79,85765,85766,85768,85770,85773],{"class":81,"line":1153},[79,85767,59405],{"class":96},[79,85769,53431],{"class":228},[79,85771,85772],{"class":96},"#888",[79,85774,3400],{"class":228},[79,85776,85777,85779,85781,85783,85785],{"class":81,"line":1158},[79,85778,56911],{"class":96},[79,85780,53431],{"class":228},[79,85782,2789],{"class":96},[79,85784,53486],{"class":448},[79,85786,3400],{"class":228},[79,85788,85789,85791,85793,85795,85797],{"class":81,"line":1180},[79,85790,63988],{"class":96},[79,85792,53431],{"class":228},[79,85794,2940],{"class":96},[79,85796,53486],{"class":448},[79,85798,3400],{"class":228},[79,85800,85801],{"class":81,"line":1197},[79,85802,4272],{"class":228},[79,85804,85805],{"class":81,"line":1202},[79,85806,542],{"emptyLinePlaceholder":541},[79,85808,85809,85811,85814],{"class":81,"line":1207},[79,85810,80613],{"class":85},[79,85812,85813],{"class":85}," .count",[79,85815,17604],{"class":228},[79,85817,85818,85820,85822,85824],{"class":81,"line":1223},[79,85819,63826],{"class":96},[79,85821,53431],{"class":228},[79,85823,775],{"class":96},[79,85825,3400],{"class":228},[79,85827,85828,85830,85832,85835],{"class":81,"line":18722},[79,85829,59405],{"class":96},[79,85831,53431],{"class":228},[79,85833,85834],{"class":96},"#aaa",[79,85836,3400],{"class":228},[79,85838,85839],{"class":81,"line":18728},[79,85840,4272],{"class":228},[79,85842,85843],{"class":81,"line":18739},[79,85844,542],{"emptyLinePlaceholder":541},[79,85846,85847,85849],{"class":81,"line":18762},[79,85848,74463],{"class":85},[79,85850,17604],{"class":228},[79,85852,85853,85855,85857,85859,85861],{"class":81,"line":18784},[79,85854,56760],{"class":96},[79,85856,53431],{"class":228},[79,85858,80562],{"class":96},[79,85860,53486],{"class":448},[79,85862,3400],{"class":228},[79,85864,85865,85867,85869,85871,85873],{"class":81,"line":18789},[79,85866,56695],{"class":96},[79,85868,53431],{"class":228},[79,85870,759],{"class":96},[79,85872,53550],{"class":96},[79,85874,3400],{"class":228},[79,85876,85877,85879,85881,85883],{"class":81,"line":18795},[79,85878,56998],{"class":96},[79,85880,53431],{"class":228},[79,85882,53471],{"class":96},[79,85884,3400],{"class":228},[79,85886,85887,85889,85891,85893],{"class":81,"line":18809},[79,85888,57009],{"class":96},[79,85890,53431],{"class":228},[79,85892,53574],{"class":96},[79,85894,3400],{"class":228},[79,85896,85897,85900,85902,85904,85906,85908,85911],{"class":81,"line":18822},[79,85898,85899],{"class":96},"      border-top",[79,85901,53431],{"class":228},[79,85903,775],{"class":96},[79,85905,53486],{"class":448},[79,85907,53515],{"class":96},[79,85909,85910],{"class":96}," #4e4e4e",[79,85912,3400],{"class":228},[79,85914,85915,85917,85919,85921,85923],{"class":81,"line":18827},[79,85916,56684],{"class":96},[79,85918,53431],{"class":228},[79,85920,2940],{"class":96},[79,85922,53486],{"class":448},[79,85924,3400],{"class":228},[79,85926,85927],{"class":81,"line":18841},[79,85928,4272],{"class":228},[79,85930,85931],{"class":81,"line":18846},[79,85932,542],{"emptyLinePlaceholder":541},[79,85934,85935,85937,85940],{"class":81,"line":18852},[79,85936,74463],{"class":85},[79,85938,85939],{"class":85}," .amount",[79,85941,17604],{"class":228},[79,85943,85944,85946,85948,85950,85952],{"class":81,"line":18857},[79,85945,56911],{"class":96},[79,85947,53431],{"class":228},[79,85949,2890],{"class":96},[79,85951,53486],{"class":448},[79,85953,3400],{"class":228},[79,85955,85956,85958,85960,85962],{"class":81,"line":18871},[79,85957,59405],{"class":96},[79,85959,53431],{"class":228},[79,85961,80928],{"class":96},[79,85963,3400],{"class":228},[79,85965,85966,85968,85970,85972],{"class":81,"line":18876},[79,85967,64322],{"class":96},[79,85969,53431],{"class":228},[79,85971,53483],{"class":96},[79,85973,3400],{"class":228},[79,85975,85976,85978,85980,85982,85984],{"class":81,"line":18881},[79,85977,63739],{"class":96},[79,85979,53431],{"class":228},[79,85981,2896],{"class":96},[79,85983,53486],{"class":448},[79,85985,3400],{"class":228},[79,85987,85988],{"class":81,"line":18895},[79,85989,4272],{"class":228},[79,85991,85992,85994,85996],{"class":81,"line":18907},[79,85993,54410],{"class":228},[79,85995,2159],{"class":232},[79,85997,53301],{"class":228},[79,85999,86000,86002,86004],{"class":81,"line":18912},[79,86001,53779],{"class":228},[79,86003,53328],{"class":232},[79,86005,53301],{"class":228},[79,86007,86008],{"class":81,"line":18925},[79,86009,542],{"emptyLinePlaceholder":541},[79,86011,86012,86014,86016],{"class":81,"line":18930},[79,86013,229],{"class":228},[79,86015,53794],{"class":232},[79,86017,53301],{"class":228},[79,86019,86020,86022,86024,86026,86028,86030],{"class":81,"line":18935},[79,86021,54138],{"class":228},[79,86023,53605],{"class":232},[79,86025,55477],{"class":85},[79,86027,239],{"class":228},[79,86029,64596],{"class":89},[79,86031,53301],{"class":228},[79,86033,86034,86036,86038],{"class":81,"line":18940},[79,86035,54410],{"class":228},[79,86037,53605],{"class":232},[79,86039,53301],{"class":228},[79,86041,86042,86044,86046,86048,86050,86052],{"class":81,"line":18953},[79,86043,54138],{"class":228},[79,86045,53605],{"class":232},[79,86047,55477],{"class":85},[79,86049,239],{"class":228},[79,86051,64568],{"class":89},[79,86053,53301],{"class":228},[79,86055,86056,86058,86060,86063,86065,86067,86069,86072,86074,86076,86078,86080],{"class":81,"line":18958},[79,86057,53335],{"class":228},[79,86059,53605],{"class":232},[79,86061,86062],{"class":228},">合计：\u003C",[79,86064,79],{"class":232},[79,86066,55477],{"class":85},[79,86068,239],{"class":228},[79,86070,86071],{"class":89},"\"amount\"",[79,86073,57303],{"class":228},[79,86075,79],{"class":232},[79,86077,57303],{"class":228},[79,86079,53605],{"class":232},[79,86081,53301],{"class":228},[79,86083,86084,86086,86088],{"class":81,"line":34631},[79,86085,54410],{"class":228},[79,86087,53605],{"class":232},[79,86089,53301],{"class":228},[79,86091,86092,86094,86096],{"class":81,"line":34637},[79,86093,54138],{"class":228},[79,86095,53807],{"class":232},[79,86097,53301],{"class":228},[79,86099,86100,86102,86104,86106],{"class":81,"line":34643},[79,86101,13256],{"class":448},[79,86103,81365],{"class":96},[79,86105,556],{"class":448},[79,86107,57436],{"class":228},[79,86109,86110],{"class":81,"line":34649},[79,86111,81374],{"class":228},[79,86113,86114,86116,86118],{"class":81,"line":34655},[79,86115,81379],{"class":228},[79,86117,81382],{"class":89},[79,86119,33468],{"class":228},[79,86121,86122,86124,86126],{"class":81,"line":34666},[79,86123,81389],{"class":228},[79,86125,81392],{"class":89},[79,86127,33468],{"class":228},[79,86129,86130,86132,86135],{"class":81,"line":34672},[79,86131,81399],{"class":228},[79,86133,86134],{"class":96},"289.9",[79,86136,33468],{"class":228},[79,86138,86139,86141,86143],{"class":81,"line":34692},[79,86140,81409],{"class":228},[79,86142,81412],{"class":89},[79,86144,33468],{"class":228},[79,86146,86147,86150,86152],{"class":81,"line":34698},[79,86148,86149],{"class":228},"        count: ",[79,86151,2331],{"class":96},[79,86153,33468],{"class":228},[79,86155,86156,86159,86162],{"class":81,"line":34709},[79,86157,86158],{"class":228},"        spec: { color: ",[79,86160,86161],{"class":89},"'白色'",[79,86163,57593],{"class":228},[79,86165,86166],{"class":81,"line":34715},[79,86167,79880],{"class":228},[79,86169,86170],{"class":81,"line":34721},[79,86171,81374],{"class":228},[79,86173,86174,86176,86178],{"class":81,"line":34727},[79,86175,81379],{"class":228},[79,86177,81473],{"class":89},[79,86179,33468],{"class":228},[79,86181,86182,86184,86186],{"class":81,"line":34733},[79,86183,81389],{"class":228},[79,86185,81482],{"class":89},[79,86187,33468],{"class":228},[79,86189,86190,86192,86195],{"class":81,"line":34739},[79,86191,81399],{"class":228},[79,86193,86194],{"class":96},"109.8",[79,86196,33468],{"class":228},[79,86198,86199,86201,86203],{"class":81,"line":34745},[79,86200,81409],{"class":228},[79,86202,81500],{"class":89},[79,86204,33468],{"class":228},[79,86206,86207,86209,86211],{"class":81,"line":34751},[79,86208,86149],{"class":228},[79,86210,970],{"class":96},[79,86212,33468],{"class":228},[79,86214,86215,86218,86220,86222,86224],{"class":81,"line":34771},[79,86216,86217],{"class":228},"        spec: { size: ",[79,86219,83891],{"class":89},[79,86221,57453],{"class":228},[79,86223,83896],{"class":89},[79,86225,57593],{"class":228},[79,86227,86228],{"class":81,"line":34777},[79,86229,79880],{"class":228},[79,86231,86232],{"class":81,"line":34793},[79,86233,81374],{"class":228},[79,86235,86236,86238,86240],{"class":81,"line":34799},[79,86237,81379],{"class":228},[79,86239,81517],{"class":89},[79,86241,33468],{"class":228},[79,86243,86244,86246,86248],{"class":81,"line":34813},[79,86245,81389],{"class":228},[79,86247,81526],{"class":89},[79,86249,33468],{"class":228},[79,86251,86252,86254,86257],{"class":81,"line":34819},[79,86253,81399],{"class":228},[79,86255,86256],{"class":96},"488",[79,86258,33468],{"class":228},[79,86260,86261,86263,86265],{"class":81,"line":34834},[79,86262,81409],{"class":228},[79,86264,81544],{"class":89},[79,86266,33468],{"class":228},[79,86268,86269,86271,86273],{"class":81,"line":34840},[79,86270,86149],{"class":228},[79,86272,775],{"class":96},[79,86274,33468],{"class":228},[79,86276,86277,86279,86282,86285,86288],{"class":81,"line":34849},[79,86278,86158],{"class":228},[79,86280,86281],{"class":89},"'青色'",[79,86283,86284],{"class":228},", sum: ",[79,86286,86287],{"class":89},"'一大四小'",[79,86289,57593],{"class":228},[79,86291,86292],{"class":81,"line":34855},[79,86293,79880],{"class":228},[79,86295,86296],{"class":81,"line":34864},[79,86297,81374],{"class":228},[79,86299,86300,86302,86304],{"class":81,"line":34870},[79,86301,81379],{"class":228},[79,86303,81561],{"class":89},[79,86305,33468],{"class":228},[79,86307,86308,86310,86312],{"class":81,"line":34876},[79,86309,81389],{"class":228},[79,86311,81570],{"class":89},[79,86313,33468],{"class":228},[79,86315,86316,86318,86321],{"class":81,"line":34885},[79,86317,81399],{"class":228},[79,86319,86320],{"class":96},"139",[79,86322,33468],{"class":228},[79,86324,86325,86327,86329],{"class":81,"line":34891},[79,86326,81409],{"class":228},[79,86328,81588],{"class":89},[79,86330,33468],{"class":228},[79,86332,86333,86335,86337],{"class":81,"line":34902},[79,86334,86149],{"class":228},[79,86336,775],{"class":96},[79,86338,33468],{"class":228},[79,86340,86341,86343,86346,86348,86351],{"class":81,"line":34908},[79,86342,86217],{"class":228},[79,86344,86345],{"class":89},"'小号'",[79,86347,57453],{"class":228},[79,86349,86350],{"class":89},"'紫色'",[79,86352,57459],{"class":228},[79,86354,86355,86358],{"class":81,"line":34927},[79,86356,86357],{"class":228},"        gift: ",[79,86359,86360],{"class":89},"'50g茶叶,清洗球'\n",[79,86362,86363],{"class":81,"line":34933},[79,86364,54391],{"class":228},[79,86366,86367],{"class":81,"line":34944},[79,86368,55100],{"class":228},[79,86370,86371],{"class":81,"line":34950},[79,86372,86373],{"class":2313},"    \u002F\u002F  1.根据数据渲染页面\n",[79,86375,86376,86378,86380,86382,86384,86386,86388,86390,86392,86394,86396,86398],{"class":81,"line":34970},[79,86377,54400],{"class":228},[79,86379,56388],{"class":85},[79,86381,455],{"class":228},[79,86383,81889],{"class":89},[79,86385,76237],{"class":228},[79,86387,239],{"class":448},[79,86389,82036],{"class":228},[79,86391,76032],{"class":85},[79,86393,455],{"class":228},[79,86395,81783],{"class":7284},[79,86397,81786],{"class":448},[79,86399,17604],{"class":228},[79,86401,86402],{"class":81,"line":34986},[79,86403,86404],{"class":2313},"      \u002F\u002F 对象解构\n",[79,86406,86407,86409,86411,86413,86415,86417,86419,86422,86424,86426,86428,86431,86433,86436,86438,86440],{"class":81,"line":34992},[79,86408,60217],{"class":448},[79,86410,81795],{"class":228},[79,86412,81808],{"class":96},[79,86414,1020],{"class":228},[79,86416,81798],{"class":96},[79,86418,1020],{"class":228},[79,86420,86421],{"class":96},"count",[79,86423,1020],{"class":228},[79,86425,81803],{"class":96},[79,86427,1020],{"class":228},[79,86429,86430],{"class":96},"spec",[79,86432,1020],{"class":228},[79,86434,86435],{"class":96},"gift",[79,86437,81811],{"class":228},[79,86439,239],{"class":448},[79,86441,81816],{"class":228},[79,86443,86444],{"class":81,"line":35006},[79,86445,86446],{"class":2313},"      \u002F\u002F 规格文字模块处理\n",[79,86448,86449,86451,86454,86456,86458,86460,86462,86464,86466,86468],{"class":81,"line":35012},[79,86450,60217],{"class":448},[79,86452,86453],{"class":96}," text",[79,86455,556],{"class":448},[79,86457,83926],{"class":228},[79,86459,83929],{"class":85},[79,86461,83932],{"class":228},[79,86463,76211],{"class":85},[79,86465,455],{"class":228},[79,86467,83939],{"class":89},[79,86469,850],{"class":228},[79,86471,86472],{"class":81,"line":35018},[79,86473,86474],{"class":2313},"      \u002F\u002F 处理赠品模块\n",[79,86476,86477,86479,86481,86483,86486,86488,86490,86492,86494,86497,86499,86501,86503,86505,86507,86510,86512,86515,86517,86519,86521,86523,86525,86527],{"class":81,"line":35029},[79,86478,60217],{"class":448},[79,86480,75907],{"class":96},[79,86482,556],{"class":448},[79,86484,86485],{"class":228}," gift ",[79,86487,3225],{"class":448},[79,86489,85099],{"class":228},[79,86491,85102],{"class":85},[79,86493,455],{"class":228},[79,86495,86496],{"class":89},"','",[79,86498,32833],{"class":228},[79,86500,76032],{"class":85},[79,86502,455],{"class":228},[79,86504,81783],{"class":7284},[79,86506,81786],{"class":448},[79,86508,86509],{"class":89}," `\u003Cspan class=\"tag\">【赠品】${",[79,86511,81783],{"class":228},[79,86513,86514],{"class":89},"}\u003C\u002Fspan>`",[79,86516,32833],{"class":228},[79,86518,76211],{"class":85},[79,86520,455],{"class":228},[79,86522,76216],{"class":89},[79,86524,15747],{"class":228},[79,86526,3099],{"class":448},[79,86528,72092],{"class":89},[79,86530,86531],{"class":81,"line":35035},[79,86532,86533],{"class":2313},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[79,86535,86536,86538,86541,86543,86546,86548,86550,86552,86555,86557,86559,86561,86564,86566,86568],{"class":81,"line":35041},[79,86537,60217],{"class":448},[79,86539,86540],{"class":96}," subtotal",[79,86542,556],{"class":448},[79,86544,86545],{"class":228}," ((price ",[79,86547,473],{"class":448},[79,86549,1097],{"class":96},[79,86551,467],{"class":448},[79,86553,86554],{"class":228}," count) ",[79,86556,2824],{"class":448},[79,86558,1097],{"class":96},[79,86560,32833],{"class":228},[79,86562,86563],{"class":85},"toFixed",[79,86565,455],{"class":228},[79,86567,2331],{"class":96},[79,86569,850],{"class":228},[79,86571,86572],{"class":81,"line":35051},[79,86573,542],{"emptyLinePlaceholder":541},[79,86575,86576,86578],{"class":81,"line":35057},[79,86577,75970],{"class":448},[79,86579,72156],{"class":89},[79,86581,86582],{"class":81,"line":35068},[79,86583,86584],{"class":89},"        \u003Cdiv class=\"item\">\n",[79,86586,86587,86590,86592],{"class":81,"line":35074},[79,86588,86589],{"class":89},"          \u003Cimg src=\"${",[79,86591,81808],{"class":228},[79,86593,81840],{"class":89},[79,86595,86596,86599,86601,86604,86606],{"class":81,"line":35084},[79,86597,86598],{"class":89},"          \u003Cp class=\"name\">${",[79,86600,81798],{"class":228},[79,86602,86603],{"class":89},"}${",[79,86605,3409],{"class":228},[79,86607,81850],{"class":89},[79,86609,86610,86613,86615],{"class":81,"line":35089},[79,86611,86612],{"class":89},"          \u003Cp class=\"spec\">${",[79,86614,56],{"class":228},[79,86616,81850],{"class":89},[79,86618,86619,86622,86624,86626,86628,86630,86632,86634],{"class":81,"line":35095},[79,86620,86621],{"class":89},"          \u003Cp class=\"price\">${",[79,86623,81803],{"class":228},[79,86625,2798],{"class":89},[79,86627,86563],{"class":85},[79,86629,455],{"class":89},[79,86631,2331],{"class":96},[79,86633,2672],{"class":89},[79,86635,81850],{"class":89},[79,86637,86638,86641,86643],{"class":81,"line":35144},[79,86639,86640],{"class":89},"          \u003Cp class=\"count\">x${",[79,86642,86421],{"class":228},[79,86644,81850],{"class":89},[79,86646,86647,86650,86653],{"class":81,"line":35191},[79,86648,86649],{"class":89},"          \u003Cp class=\"sub-total\">${",[79,86651,86652],{"class":228},"subtotal",[79,86654,81850],{"class":89},[79,86656,86657],{"class":81,"line":35196},[79,86658,86659],{"class":89},"        \u003C\u002Fdiv> \n",[79,86661,86662],{"class":81,"line":35202},[79,86663,86664],{"class":89},"             `\n",[79,86666,86667,86670,86672,86674,86676],{"class":81,"line":35221},[79,86668,86669],{"class":228},"    }).",[79,86671,76211],{"class":85},[79,86673,455],{"class":228},[79,86675,76216],{"class":89},[79,86677,850],{"class":228},[79,86679,86680],{"class":81,"line":35227},[79,86681,86682],{"class":2313},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[79,86684,86685,86687,86689,86691,86693,86696,86698,86701,86703,86705,86707,86710,86713,86715,86718,86720,86722,86724,86727,86729,86731,86733,86735],{"class":81,"line":35246},[79,86686,13256],{"class":448},[79,86688,64773],{"class":96},[79,86690,556],{"class":448},[79,86692,82036],{"class":228},[79,86694,86695],{"class":85},"reduce",[79,86697,4461],{"class":228},[79,86699,86700],{"class":7284},"prev",[79,86702,1020],{"class":228},[79,86704,81783],{"class":7284},[79,86706,15747],{"class":228},[79,86708,86709],{"class":448},"=>",[79,86711,86712],{"class":228}," prev ",[79,86714,995],{"class":448},[79,86716,86717],{"class":228}," (item.price ",[79,86719,473],{"class":448},[79,86721,1097],{"class":96},[79,86723,467],{"class":448},[79,86725,86726],{"class":228}," item.count) ",[79,86728,2824],{"class":448},[79,86730,1097],{"class":96},[79,86732,1020],{"class":228},[79,86734,759],{"class":96},[79,86736,850],{"class":228},[79,86738,86739,86741,86743,86745,86748,86750,86752,86755,86757,86759,86761],{"class":81,"line":35252},[79,86740,54400],{"class":228},[79,86742,56388],{"class":85},[79,86744,455],{"class":228},[79,86746,86747],{"class":89},"'.amount'",[79,86749,76237],{"class":228},[79,86751,239],{"class":448},[79,86753,86754],{"class":228}," total.",[79,86756,86563],{"class":85},[79,86758,455],{"class":228},[79,86760,2331],{"class":96},[79,86762,850],{"class":228},[79,86764,86765,86767,86769],{"class":81,"line":35258},[79,86766,54410],{"class":228},[79,86768,53807],{"class":232},[79,86770,53301],{"class":228},[79,86772,86773,86775,86777],{"class":81,"line":35268},[79,86774,53779],{"class":228},[79,86776,53794],{"class":232},[79,86778,53301],{"class":228},[79,86780,86781],{"class":81,"line":35273},[79,86782,542],{"emptyLinePlaceholder":541},[79,86784,86785,86787,86789],{"class":81,"line":35279},[79,86786,53779],{"class":228},[79,86788,52630],{"class":232},[79,86790,53301],{"class":228},[14,86792,86794],{"id":86793},"_411-编程思想","4.11 编程思想",[339,86796,86798],{"id":86797},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,86800,86801,86804],{},[2398,86802,86803],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,86806,86807],{},"调用就可以了",[19,86809,86810],{},[3569,86811],{"alt":57,"src":86812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[339,86814,86816],{"id":86815},"_4112-面向对象","4.11.2 面向对象",[19,86818,86819],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,86821,86822],{},[3569,86823],{"alt":57,"src":86824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,86826,86827],{},"面向对象的特性：",[3246,86829,86830,86833,86836],{},[29,86831,86832],{},"封装性",[29,86834,86835],{},"继承性",[29,86837,86838],{},"多态性",[339,86840,86842],{"id":86841},"_4113-两者比较","4.11.3 两者比较",[19,86844,86845],{},[3569,86846],{"alt":57,"src":86847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,86849,86851],{"id":86850},"_412-构造函数回顾","4.12 构造函数回顾",[19,86853,86854],{},[3569,86855],{"alt":57,"src":86856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,86858,86859],{},[3569,86860],{"alt":57,"src":86861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,86863,86864],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,86866,86867],{},[3569,86868],{"alt":57,"src":86869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,86871,86873],{"id":86872},"_413-原型","4.13 原型",[339,86875,86877],{"id":86876},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,86879,86880],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,86882,86883],{},[3569,86884],{"alt":57,"src":86885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,86887,86888],{},[3569,86889],{"alt":57,"src":86890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,86892,86893],{},"原型是构造函数的属性，它也是一个对象",[19,86895,86896],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,86898,86899],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[51,86901,86903],{"className":219,"code":86902,"language":221,"meta":57,"style":57},"\u003Cbody>\n  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n  \u003Cscript>\n    function Star(uname, age) {\n      this.uname = uname,\n        this.age = age\n      \u002F\u002F this.sing = function () {\n      \u002F\u002F   console.log('唱歌')\n\n      \u002F\u002F }\n    }\n    Star.prototype.sing = function () {\n      console.log('唱歌')\n    }\n    \u002F\u002F console.dir(Star.prototype)\n    const pink = new Star('pink', 18)\n    const red = new Star('red', 20)\n    pink.sing()\n    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[59,86904,86905,86913,86918,86926,86931,86936,86941,86946,86951,86955,86959,86963,86968,86973,86977,86982,86987,86992,86997,87002,87006,87014],{"__ignoreMap":57},[79,86906,86907,86909,86911],{"class":81,"line":82},[79,86908,229],{"class":228},[79,86910,53794],{"class":232},[79,86912,53301],{"class":228},[79,86914,86915],{"class":81,"line":167},[79,86916,86917],{"class":2313},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[79,86919,86920,86922,86924],{"class":81,"line":178},[79,86921,54138],{"class":228},[79,86923,53807],{"class":232},[79,86925,53301],{"class":228},[79,86927,86928],{"class":81,"line":545},[79,86929,86930],{"class":228},"    function Star(uname, age) {\n",[79,86932,86933],{"class":81,"line":550},[79,86934,86935],{"class":228},"      this.uname = uname,\n",[79,86937,86938],{"class":81,"line":562},[79,86939,86940],{"class":228},"        this.age = age\n",[79,86942,86943],{"class":81,"line":568},[79,86944,86945],{"class":228},"      \u002F\u002F this.sing = function () {\n",[79,86947,86948],{"class":81,"line":574},[79,86949,86950],{"class":228},"      \u002F\u002F   console.log('唱歌')\n",[79,86952,86953],{"class":81,"line":579},[79,86954,542],{"emptyLinePlaceholder":541},[79,86956,86957],{"class":81,"line":585},[79,86958,62026],{"class":228},[79,86960,86961],{"class":81,"line":591},[79,86962,4272],{"class":228},[79,86964,86965],{"class":81,"line":596},[79,86966,86967],{"class":228},"    Star.prototype.sing = function () {\n",[79,86969,86970],{"class":81,"line":602},[79,86971,86972],{"class":228},"      console.log('唱歌')\n",[79,86974,86975],{"class":81,"line":608},[79,86976,4272],{"class":228},[79,86978,86979],{"class":81,"line":614},[79,86980,86981],{"class":228},"    \u002F\u002F console.dir(Star.prototype)\n",[79,86983,86984],{"class":81,"line":619},[79,86985,86986],{"class":228},"    const pink = new Star('pink', 18)\n",[79,86988,86989],{"class":81,"line":625},[79,86990,86991],{"class":228},"    const red = new Star('red', 20)\n",[79,86993,86994],{"class":81,"line":631},[79,86995,86996],{"class":228},"    pink.sing()\n",[79,86998,86999],{"class":81,"line":637},[79,87000,87001],{"class":228},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[79,87003,87004],{"class":81,"line":643},[79,87005,542],{"emptyLinePlaceholder":541},[79,87007,87008,87010,87012],{"class":81,"line":649},[79,87009,54410],{"class":228},[79,87011,53807],{"class":232},[79,87013,53301],{"class":228},[79,87015,87016,87018,87020],{"class":81,"line":655},[79,87017,53779],{"class":228},[79,87019,53794],{"class":232},[79,87021,53301],{"class":228},[19,87023,87024],{},[3569,87025],{"alt":57,"src":87026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[51,87028,87030],{"className":219,"code":87029,"language":221,"meta":57,"style":57},"\u003Cbody>\n  \u003Cscript>\n    let that\n    function Star(uname) {\n      this.uname = uname\n      that = this\n    }\n    \u002F\u002F 实例对象是 ldh\n    const ldh = new Star('刘德华')\n    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n\n    Star.sing = function () {\n      console.log('唱歌')\n    }\n    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[59,87031,87032,87040,87048,87053,87058,87063,87068,87072,87077,87082,87087,87091,87096,87100,87104,87109,87113,87121],{"__ignoreMap":57},[79,87033,87034,87036,87038],{"class":81,"line":82},[79,87035,229],{"class":228},[79,87037,53794],{"class":232},[79,87039,53301],{"class":228},[79,87041,87042,87044,87046],{"class":81,"line":167},[79,87043,54138],{"class":228},[79,87045,53807],{"class":232},[79,87047,53301],{"class":228},[79,87049,87050],{"class":81,"line":178},[79,87051,87052],{"class":228},"    let that\n",[79,87054,87055],{"class":81,"line":545},[79,87056,87057],{"class":228},"    function Star(uname) {\n",[79,87059,87060],{"class":81,"line":550},[79,87061,87062],{"class":228},"      this.uname = uname\n",[79,87064,87065],{"class":81,"line":562},[79,87066,87067],{"class":228},"      that = this\n",[79,87069,87070],{"class":81,"line":568},[79,87071,4272],{"class":228},[79,87073,87074],{"class":81,"line":574},[79,87075,87076],{"class":228},"    \u002F\u002F 实例对象是 ldh\n",[79,87078,87079],{"class":81,"line":579},[79,87080,87081],{"class":228},"    const ldh = new Star('刘德华')\n",[79,87083,87084],{"class":81,"line":585},[79,87085,87086],{"class":228},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[79,87088,87089],{"class":81,"line":591},[79,87090,542],{"emptyLinePlaceholder":541},[79,87092,87093],{"class":81,"line":596},[79,87094,87095],{"class":228},"    Star.sing = function () {\n",[79,87097,87098],{"class":81,"line":602},[79,87099,86972],{"class":228},[79,87101,87102],{"class":81,"line":608},[79,87103,4272],{"class":228},[79,87105,87106],{"class":81,"line":614},[79,87107,87108],{"class":228},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[79,87110,87111],{"class":81,"line":619},[79,87112,542],{"emptyLinePlaceholder":541},[79,87114,87115,87117,87119],{"class":81,"line":625},[79,87116,54410],{"class":228},[79,87118,53807],{"class":232},[79,87120,53301],{"class":228},[79,87122,87123,87125,87127],{"class":81,"line":631},[79,87124,53779],{"class":228},[79,87126,53794],{"class":232},[79,87128,53301],{"class":228},[19,87130,87131],{},"构造函数的this指向的是实例对象；",[19,87133,87134],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[339,87136,87138],{"id":87137},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,87140,87141],{},[3569,87142],{"alt":57,"src":87143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[51,87145,87147],{"className":219,"code":87146,"language":221,"meta":57,"style":57},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F 注意数组不可以直接用min和max求最值\n    const arr = [1, 2, 3]\n    \u002F\u002F 自己定义数组的扩展方法\n    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n    \u002F\u002F 2.自定义的方法写到prototype身上\n    \u002F\u002F ①.最大值\n    Array.prototype.max = function () {\n      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n      return Math.max(...this)\n      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n    }\n    console.log(arr.max())\n    \u002F\u002F ②最小值\n    Array.prototype.min = function () {\n      return Math.min(...this)\n    }\n    console.log(arr.min())\n    \u002F\u002F③求和\n    Array.prototype.sum = function () {\n      return this.reduce((prev, current) => prev + current, 0)\n    }\n    console.log(arr.sum())\n    \u002F\u002F ③排序\n    Array.prototype.rever = function () {\n      return this.reverse()\n    }\n    console.log(arr.rever())\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[59,87148,87149,87157,87165,87170,87175,87180,87185,87190,87195,87200,87205,87210,87215,87219,87224,87229,87234,87239,87243,87248,87253,87258,87263,87267,87272,87277,87282,87287,87291,87296,87300,87308],{"__ignoreMap":57},[79,87150,87151,87153,87155],{"class":81,"line":82},[79,87152,229],{"class":228},[79,87154,53794],{"class":232},[79,87156,53301],{"class":228},[79,87158,87159,87161,87163],{"class":81,"line":167},[79,87160,54138],{"class":228},[79,87162,53807],{"class":232},[79,87164,53301],{"class":228},[79,87166,87167],{"class":81,"line":178},[79,87168,87169],{"class":228},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[79,87171,87172],{"class":81,"line":545},[79,87173,87174],{"class":228},"    const arr = [1, 2, 3]\n",[79,87176,87177],{"class":81,"line":550},[79,87178,87179],{"class":228},"    \u002F\u002F 自己定义数组的扩展方法\n",[79,87181,87182],{"class":81,"line":562},[79,87183,87184],{"class":228},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[79,87186,87187],{"class":81,"line":568},[79,87188,87189],{"class":228},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[79,87191,87192],{"class":81,"line":574},[79,87193,87194],{"class":228},"    \u002F\u002F ①.最大值\n",[79,87196,87197],{"class":81,"line":579},[79,87198,87199],{"class":228},"    Array.prototype.max = function () {\n",[79,87201,87202],{"class":81,"line":585},[79,87203,87204],{"class":228},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[79,87206,87207],{"class":81,"line":591},[79,87208,87209],{"class":228},"      return Math.max(...this)\n",[79,87211,87212],{"class":81,"line":596},[79,87213,87214],{"class":228},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[79,87216,87217],{"class":81,"line":602},[79,87218,4272],{"class":228},[79,87220,87221],{"class":81,"line":608},[79,87222,87223],{"class":228},"    console.log(arr.max())\n",[79,87225,87226],{"class":81,"line":614},[79,87227,87228],{"class":228},"    \u002F\u002F ②最小值\n",[79,87230,87231],{"class":81,"line":619},[79,87232,87233],{"class":228},"    Array.prototype.min = function () {\n",[79,87235,87236],{"class":81,"line":625},[79,87237,87238],{"class":228},"      return Math.min(...this)\n",[79,87240,87241],{"class":81,"line":631},[79,87242,4272],{"class":228},[79,87244,87245],{"class":81,"line":637},[79,87246,87247],{"class":228},"    console.log(arr.min())\n",[79,87249,87250],{"class":81,"line":643},[79,87251,87252],{"class":228},"    \u002F\u002F③求和\n",[79,87254,87255],{"class":81,"line":649},[79,87256,87257],{"class":228},"    Array.prototype.sum = function () {\n",[79,87259,87260],{"class":81,"line":655},[79,87261,87262],{"class":228},"      return this.reduce((prev, current) => prev + current, 0)\n",[79,87264,87265],{"class":81,"line":660},[79,87266,4272],{"class":228},[79,87268,87269],{"class":81,"line":666},[79,87270,87271],{"class":228},"    console.log(arr.sum())\n",[79,87273,87274],{"class":81,"line":672},[79,87275,87276],{"class":228},"    \u002F\u002F ③排序\n",[79,87278,87279],{"class":81,"line":678},[79,87280,87281],{"class":228},"    Array.prototype.rever = function () {\n",[79,87283,87284],{"class":81,"line":684},[79,87285,87286],{"class":228},"      return this.reverse()\n",[79,87288,87289],{"class":81,"line":690},[79,87290,4272],{"class":228},[79,87292,87293],{"class":81,"line":695},[79,87294,87295],{"class":228},"    console.log(arr.rever())\n",[79,87297,87298],{"class":81,"line":700},[79,87299,542],{"emptyLinePlaceholder":541},[79,87301,87302,87304,87306],{"class":81,"line":712},[79,87303,54410],{"class":228},[79,87305,53807],{"class":232},[79,87307,53301],{"class":228},[79,87309,87310,87312,87314],{"class":81,"line":721},[79,87311,53779],{"class":228},[79,87313,53794],{"class":232},[79,87315,53301],{"class":228},[19,87317,87318],{},[3569,87319],{"alt":57,"src":87320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[339,87322,87324],{"id":87323},"_4133-constructor-属性","4.13.3 constructor 属性",[19,87326,87327],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,87329,87330],{},[3569,87331],{"alt":57,"src":87332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[51,87334,87336],{"className":219,"code":87335,"language":221,"meta":57,"style":57},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002Fconstructor   单词是构造函数的意思\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(Star.prototype)\n    console.log(Star.prototype.constructor === Star)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[59,87337,87338,87346,87354,87359,87364,87368,87373,87378,87383,87391],{"__ignoreMap":57},[79,87339,87340,87342,87344],{"class":81,"line":82},[79,87341,229],{"class":228},[79,87343,53794],{"class":232},[79,87345,53301],{"class":228},[79,87347,87348,87350,87352],{"class":81,"line":167},[79,87349,54138],{"class":228},[79,87351,53807],{"class":232},[79,87353,53301],{"class":228},[79,87355,87356],{"class":81,"line":178},[79,87357,87358],{"class":228},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[79,87360,87361],{"class":81,"line":545},[79,87362,87363],{"class":228},"    function Star() {\n",[79,87365,87366],{"class":81,"line":550},[79,87367,4272],{"class":228},[79,87369,87370],{"class":81,"line":562},[79,87371,87372],{"class":228},"    const ldh = new Star()\n",[79,87374,87375],{"class":81,"line":568},[79,87376,87377],{"class":228},"    console.log(Star.prototype)\n",[79,87379,87380],{"class":81,"line":574},[79,87381,87382],{"class":228},"    console.log(Star.prototype.constructor === Star)\n",[79,87384,87385,87387,87389],{"class":81,"line":579},[79,87386,54410],{"class":228},[79,87388,53807],{"class":232},[79,87390,53301],{"class":228},[79,87392,87393,87395,87397],{"class":81,"line":585},[79,87394,53779],{"class":228},[79,87396,53794],{"class":232},[79,87398,53301],{"class":228},[19,87400,87401],{},[3569,87402],{"alt":57,"src":87403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,87405,87406],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[51,87408,87410],{"className":219,"code":87409,"language":221,"meta":57,"style":57},"  \u003Cscript>\n    \u002F\u002Fconstructor   单词是构造函数的意思\n    function Star() {\n    }\n    \u002F\u002F const ldh = new Star()\n    \u002F\u002F console.log(Star.prototype)\n    \u002F\u002F console.log(Star.prototype.constructor === Star)\n\n    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n    \u002F\u002F Star.prototype.sing = function () {\n    \u002F\u002F   console.log('唱歌')\n    \u002F\u002F }\n    \u002F\u002F Star.prototype.dance = function () {\n    \u002F\u002F   console.log('跳舞')\n    \u002F\u002F }\n    console.log(Star.prototype)\n    Star.prototype = {\n      sing: function () {\n        console.log('唱歌')\n      },\n      dance: function () {\n        console.log('跳舞')\n      }\n    }\n    console.log(Star.prototype)\n  \u003C\u002Fscript>\n",[59,87411,87412,87420,87424,87428,87432,87437,87442,87447,87451,87456,87461,87466,87471,87476,87481,87485,87489,87494,87499,87504,87508,87513,87518,87522,87526,87530],{"__ignoreMap":57},[79,87413,87414,87416,87418],{"class":81,"line":82},[79,87415,54138],{"class":228},[79,87417,53807],{"class":232},[79,87419,53301],{"class":228},[79,87421,87422],{"class":81,"line":167},[79,87423,87358],{"class":228},[79,87425,87426],{"class":81,"line":178},[79,87427,87363],{"class":228},[79,87429,87430],{"class":81,"line":545},[79,87431,4272],{"class":228},[79,87433,87434],{"class":81,"line":550},[79,87435,87436],{"class":228},"    \u002F\u002F const ldh = new Star()\n",[79,87438,87439],{"class":81,"line":562},[79,87440,87441],{"class":228},"    \u002F\u002F console.log(Star.prototype)\n",[79,87443,87444],{"class":81,"line":568},[79,87445,87446],{"class":228},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[79,87448,87449],{"class":81,"line":574},[79,87450,542],{"emptyLinePlaceholder":541},[79,87452,87453],{"class":81,"line":579},[79,87454,87455],{"class":228},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[79,87457,87458],{"class":81,"line":585},[79,87459,87460],{"class":228},"    \u002F\u002F Star.prototype.sing = function () {\n",[79,87462,87463],{"class":81,"line":591},[79,87464,87465],{"class":228},"    \u002F\u002F   console.log('唱歌')\n",[79,87467,87468],{"class":81,"line":596},[79,87469,87470],{"class":228},"    \u002F\u002F }\n",[79,87472,87473],{"class":81,"line":602},[79,87474,87475],{"class":228},"    \u002F\u002F Star.prototype.dance = function () {\n",[79,87477,87478],{"class":81,"line":608},[79,87479,87480],{"class":228},"    \u002F\u002F   console.log('跳舞')\n",[79,87482,87483],{"class":81,"line":614},[79,87484,87470],{"class":228},[79,87486,87487],{"class":81,"line":619},[79,87488,87377],{"class":228},[79,87490,87491],{"class":81,"line":625},[79,87492,87493],{"class":228},"    Star.prototype = {\n",[79,87495,87496],{"class":81,"line":631},[79,87497,87498],{"class":228},"      sing: function () {\n",[79,87500,87501],{"class":81,"line":637},[79,87502,87503],{"class":228},"        console.log('唱歌')\n",[79,87505,87506],{"class":81,"line":643},[79,87507,79880],{"class":228},[79,87509,87510],{"class":81,"line":649},[79,87511,87512],{"class":228},"      dance: function () {\n",[79,87514,87515],{"class":81,"line":655},[79,87516,87517],{"class":228},"        console.log('跳舞')\n",[79,87519,87520],{"class":81,"line":660},[79,87521,54391],{"class":228},[79,87523,87524],{"class":81,"line":666},[79,87525,4272],{"class":228},[79,87527,87528],{"class":81,"line":672},[79,87529,87377],{"class":228},[79,87531,87532,87534,87536],{"class":81,"line":678},[79,87533,54410],{"class":228},[79,87535,53807],{"class":232},[79,87537,53301],{"class":228},[19,87539,87540],{},"进行输出结果后会发现：",[19,87542,87543],{},[3569,87544],{"alt":57,"src":87545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,87547,87548],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,87550,87551],{},"所以，要重新指回创造这个原型对象的构造函数",[51,87553,87555],{"className":73201,"code":87554,"language":73203,"meta":57,"style":57},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[59,87556,87557,87571,87576,87581,87592,87605,87610,87621,87635,87639],{"__ignoreMap":57},[79,87558,87559,87562,87564,87567,87569],{"class":81,"line":82},[79,87560,87561],{"class":96},"Star",[79,87563,2798],{"class":228},[79,87565,87566],{"class":96},"prototype",[79,87568,556],{"class":448},[79,87570,17604],{"class":228},[79,87572,87573],{"class":81,"line":167},[79,87574,87575],{"class":2313},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[79,87577,87578],{"class":81,"line":178},[79,87579,87580],{"class":228},"  constructor: Star,\n",[79,87582,87583,87586,87588,87590],{"class":81,"line":545},[79,87584,87585],{"class":85},"  sing",[79,87587,53431],{"class":228},[79,87589,56438],{"class":448},[79,87591,56441],{"class":228},[79,87593,87594,87596,87598,87600,87603],{"class":81,"line":550},[79,87595,75741],{"class":228},[79,87597,60236],{"class":85},[79,87599,455],{"class":228},[79,87601,87602],{"class":89},"'唱歌'",[79,87604,850],{"class":228},[79,87606,87607],{"class":81,"line":562},[79,87608,87609],{"class":228},"   },\n",[79,87611,87612,87615,87617,87619],{"class":81,"line":568},[79,87613,87614],{"class":85},"   dance",[79,87616,53431],{"class":228},[79,87618,56438],{"class":448},[79,87620,56441],{"class":228},[79,87622,87623,87626,87628,87630,87633],{"class":81,"line":574},[79,87624,87625],{"class":228},"     console.",[79,87627,60236],{"class":85},[79,87629,455],{"class":228},[79,87631,87632],{"class":89},"'跳舞'",[79,87634,850],{"class":228},[79,87636,87637],{"class":81,"line":579},[79,87638,6380],{"class":228},[79,87640,87641],{"class":81,"line":585},[79,87642,3671],{"class":228},[19,87644,87645],{},[3569,87646],{"alt":57,"src":87647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,87649,87650],{},"总结1：",[19,87652,87653],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,87655,87656],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,87658,87659],{},"constructor指的是他的来源",[19,87661,87662],{},[3569,87663],{"alt":57,"src":87664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,87666,87667],{},[3569,87668],{"alt":57,"src":87669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,87671,87672],{},"总结2：",[19,87674,87675],{},[3569,87676],{"alt":57,"src":87677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,87679,87680],{},[3569,87681],{"alt":57,"src":87682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,87684,87685],{},[3569,87686],{"alt":57,"src":87687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[339,87689,87691],{"id":87690},"_4134-对象原型","4.13.4 对象原型",[19,87693,87694],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,87696,87697],{},"对象原型就是__proto__这个属性",[19,87699,87700],{},[3569,87701],{"alt":57,"src":87702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,87704,87705],{},[3569,87706],{"alt":57,"src":87707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,87709,87710],{},[3569,87711],{"alt":57,"src":87712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,87714,87715],{},[3569,87716],{"alt":57,"src":87717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[51,87719,87721],{"className":219,"code":87720,"language":221,"meta":57,"style":57},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[59,87722,87723,87731,87739,87743,87747,87751,87756,87764],{"__ignoreMap":57},[79,87724,87725,87727,87729],{"class":81,"line":82},[79,87726,229],{"class":228},[79,87728,53794],{"class":232},[79,87730,53301],{"class":228},[79,87732,87733,87735,87737],{"class":81,"line":167},[79,87734,54138],{"class":228},[79,87736,53807],{"class":232},[79,87738,53301],{"class":228},[79,87740,87741],{"class":81,"line":178},[79,87742,87363],{"class":228},[79,87744,87745],{"class":81,"line":545},[79,87746,4272],{"class":228},[79,87748,87749],{"class":81,"line":550},[79,87750,87372],{"class":228},[79,87752,87753],{"class":81,"line":562},[79,87754,87755],{"class":228},"    console.log(ldh)\n",[79,87757,87758,87760,87762],{"class":81,"line":568},[79,87759,54410],{"class":228},[79,87761,53807],{"class":232},[79,87763,53301],{"class":228},[79,87765,87766,87768,87770],{"class":81,"line":574},[79,87767,53779],{"class":228},[79,87769,53794],{"class":232},[79,87771,53301],{"class":228},[19,87773,87774],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,87776,87777],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,87779,87780],{},[3569,87781],{"alt":57,"src":87782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,87784,87785],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,87787,87788],{},"对象原型指向原型对象",[19,87790,87791],{},[3569,87792],{"alt":57,"src":87793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,87795,87796],{},[3569,87797],{"alt":57,"src":87798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,87800,87801],{},[3569,87802],{"alt":57,"src":87803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[339,87805,87807],{"id":87806},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,87809,87810],{},[3569,87811],{"alt":57,"src":87812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[26,87814,87815,87818,87821,87824],{},[29,87816,87817],{},"构造函数通过new的形式实例化得到实例对象",[29,87819,87820],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[29,87822,87823],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[29,87825,87826],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,87828,87829],{},[3569,87830],{"alt":57,"src":87831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,87833,87834],{},"题目梳理：",[19,87836,87837],{},[3569,87838],{"alt":57,"src":87839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[339,87841,87843],{"id":87842},"_4136-原型继承","4.13.6 原型继承",[19,87845,87846],{},[3569,87847],{"alt":57,"src":87848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,87850,87851],{},[3569,87852],{"alt":57,"src":87853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,87855,87856],{},[3569,87857],{"alt":57,"src":87858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,87860,87861],{},[3569,87862],{"alt":57,"src":87863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,87865,87866],{},[3569,87867],{"alt":57,"src":87868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,87870,87871],{},[3569,87872],{"alt":57,"src":87873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,87875,87876],{},[3569,87877],{"alt":57,"src":87878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,87880,87881],{},[3569,87882],{"alt":57,"src":87883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,87885,87886],{},"回顾：构造函数每次new得到对象都是不同的",[339,87888,87890],{"id":87889},"_4137-原型链","4.13.7 原型链",[19,87892,87893],{},[3569,87894],{"alt":57,"src":87895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,87897,87898],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,87900,87901],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,87903,87904],{},"大哥是Object",[19,87906,87907],{},[3569,87908],{"alt":57,"src":87909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,87911,87912],{},[3569,87913],{"alt":57,"src":87914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,87916,87917],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,87919,87920],{},"万物皆对象",[339,87922,87924],{"id":87923},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,87926,87927],{},"模态框",[19,87929,87930],{},"以后遇见这个效果直接使用这个就行",[19,87932,87933],{},[3569,87934],{"alt":57,"src":87935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,87937,87938],{},[3569,87939],{"alt":57,"src":87940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,87942,87943],{},[3569,87944],{"alt":57,"src":87945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,87947,87948],{},[3569,87949],{"alt":57,"src":87950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,87952,87953],{},"补充知识点：",[26,87955,87956],{},[29,87957,87958],{},"append()",[19,87960,87961],{},[3569,87962],{"alt":57,"src":87963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[51,87965,87967],{"className":52628,"code":87966,"language":52630,"meta":57,"style":57},"append(param1)\nappend(param1, param2)\nappend(param1, param2, \u002F* …, *\u002F paramN)\n\n\n\nlet div = document.createElement(\"div\");\nlet p = document.createElement(\"p\");\ndiv.append(p);\n\nconsole.log(div.childNodes); \u002F\u002F NodeList [ \u003Cp> ]\n",[59,87968,87969,87974,87979,87984,87988,87992,87996,88001,88006,88011,88015],{"__ignoreMap":57},[79,87970,87971],{"class":81,"line":82},[79,87972,87973],{"class":228},"append(param1)\n",[79,87975,87976],{"class":81,"line":167},[79,87977,87978],{"class":228},"append(param1, param2)\n",[79,87980,87981],{"class":81,"line":178},[79,87982,87983],{"class":228},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[79,87985,87986],{"class":81,"line":545},[79,87987,542],{"emptyLinePlaceholder":541},[79,87989,87990],{"class":81,"line":550},[79,87991,542],{"emptyLinePlaceholder":541},[79,87993,87994],{"class":81,"line":562},[79,87995,542],{"emptyLinePlaceholder":541},[79,87997,87998],{"class":81,"line":568},[79,87999,88000],{"class":228},"let div = document.createElement(\"div\");\n",[79,88002,88003],{"class":81,"line":574},[79,88004,88005],{"class":228},"let p = document.createElement(\"p\");\n",[79,88007,88008],{"class":81,"line":579},[79,88009,88010],{"class":228},"div.append(p);\n",[79,88012,88013],{"class":81,"line":585},[79,88014,542],{"emptyLinePlaceholder":541},[79,88016,88017,88020,88022],{"class":81,"line":591},[79,88018,88019],{"class":228},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[79,88021,19],{"class":232},[79,88023,88024],{"class":228},"> ]\n",[26,88026,88027],{"start":167},[29,88028,88029],{},"remove()",[19,88031,88032],{},"自己删自己",[19,88034,88035],{},[3569,88036],{"alt":57,"src":88037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[51,88039,88041],{"className":52628,"code":88040,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .modal {\n      width: 300px;\n      min-height: 100px;\n      box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);\n      border-radius: 4px;\n      position: fixed;\n      z-index: 999;\n      left: 50%;\n      top: 50%;\n      transform: translate3d(-50%, -50%, 0);\n      background-color: #fff;\n    }\n\n    .modal .header {\n      line-height: 40px;\n      padding: 0 10px;\n      position: relative;\n      font-size: 20px;\n    }\n\n    .modal .header i {\n      font-style: normal;\n      color: #999;\n      position: absolute;\n      right: 15px;\n      top: -2px;\n      cursor: pointer;\n    }\n\n    .modal .body {\n      text-align: center;\n      padding: 10px;\n    }\n\n    .modal .footer {\n      display: flex;\n      justify-content: flex-end;\n      padding: 10px;\n    }\n\n    .modal .footer a {\n      padding: 3px 8px;\n      background: #ccc;\n      text-decoration: none;\n      color: #fff;\n      border-radius: 2px;\n      margin-right: 10px;\n      font-size: 14px;\n    }\n\n    .modal .footer a.submit {\n      background-color: #369;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton id=\"delete\">删除\u003C\u002Fbutton>\n  \u003Cbutton id=\"login\">登录\u003C\u002Fbutton>\n  \u003Cscript>\n    \u002F\u002F 1.Model 构造函数的封装  模态框\n    function Modal(title = '', message = '') {\n      \u002F\u002F 创建Model 模态框盒子\n      \u002F\u002F 1.1 创建div标签\n      this.modalBox = document.createElement('div')\n      \u002F\u002F 1.2 给div 添加类名为model\n      this.modalBox.className = 'modal'\n      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n      this.modalBox.innerHTML = `\n        \u003Cdiv class=\"header\">${title}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n        \u003Cdiv class=\"body\">${message}\u003C\u002Fdiv>\n      `\n      \u002F\u002F console.log(this.modalBox)\n    }\n    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n    \u002F\u002F 2.给构造函数原型对象挂载open方法\n    Modal.prototype.open = function () {\n      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n      const box = document.querySelector('.modal')\n      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n      box && box.remove()\n      \u002F\u002F 主要这个方法不要用箭头函数\n      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n      \u002F\u002F append可以增加对象\n      document.body.append(this.modalBox)\n\n      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n      this.modalBox.querySelector('i').addEventListener('click', () => {\n        \u002F\u002F 这个地方需要用到箭头函数\n        \u002F\u002F 这个this是指向的是上上级 是实例对象\n        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n        this.close()\n      })\n    }\n\n    \u002F\u002F 测试一下 点击 删除按钮\n    document.querySelector('#delete').addEventListener('click', () => {\n      \u002F\u002F 先调用Model构造函数\n      const del = new Modal('温馨的提示', '您没有删除权限操作')\n      \u002F\u002F 实例对象调用open方法\n      del.open()\n    })\n    \u002F\u002F 测试一下 点击 登录按钮\n    document.querySelector('#login').addEventListener('click', () => {\n      \u002F\u002F 先调用Model构造函数\n      const log = new Modal('友情提示', '您还没有登录呢')\n      \u002F\u002F 实例对象调用open方法\n      log.open()\n    })\n    \u002F\u002F 3.给构造函数原型对象挂载close方法\n    Modal.prototype.close = function () {\n      this.modalBox.remove()\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,88042,88043,88053,88067,88071,88079,88093,88113,88125,88133,88140,88152,88165,88200,88212,88223,88235,88247,88259,88286,88296,88300,88304,88313,88325,88339,88349,88361,88365,88369,88379,88390,88400,88410,88423,88436,88446,88450,88454,88463,88473,88485,88489,88493,88502,88512,88522,88534,88538,88542,88552,88568,88579,88589,88599,88611,88623,88635,88639,88643,88656,88667,88671,88679,88687,88691,88699,88719,88739,88747,88752,88778,88783,88788,88807,88812,88824,88829,88840,88850,88860,88865,88870,88874,88879,88884,88889,88909,88914,88934,88939,88953,88958,88963,88968,88984,88988,88993,89022,89027,89032,89037,89048,89052,89056,89060,89065,89090,89095,89120,89125,89134,89138,89143,89168,89172,89197,89201,89210,89214,89219,89237,89247,89251,89259,89267,89271],{"__ignoreMap":57},[79,88044,88045,88047,88049,88051],{"class":81,"line":82},[79,88046,53292],{"class":228},[79,88048,53295],{"class":232},[79,88050,53298],{"class":85},[79,88052,53301],{"class":228},[79,88054,88055,88057,88059,88061,88063,88065],{"class":81,"line":167},[79,88056,229],{"class":228},[79,88058,52630],{"class":232},[79,88060,53310],{"class":85},[79,88062,239],{"class":228},[79,88064,53315],{"class":89},[79,88066,53301],{"class":228},[79,88068,88069],{"class":81,"line":178},[79,88070,542],{"emptyLinePlaceholder":541},[79,88072,88073,88075,88077],{"class":81,"line":545},[79,88074,229],{"class":228},[79,88076,53328],{"class":232},[79,88078,53301],{"class":228},[79,88080,88081,88083,88085,88087,88089,88091],{"class":81,"line":550},[79,88082,54138],{"class":228},[79,88084,53338],{"class":232},[79,88086,53341],{"class":85},[79,88088,239],{"class":228},[79,88090,53346],{"class":89},[79,88092,53301],{"class":228},[79,88094,88095,88097,88099,88101,88103,88105,88107,88109,88111],{"class":81,"line":562},[79,88096,54138],{"class":228},[79,88098,53338],{"class":232},[79,88100,236],{"class":85},[79,88102,239],{"class":228},[79,88104,53385],{"class":89},[79,88106,53365],{"class":85},[79,88108,239],{"class":228},[79,88110,53392],{"class":89},[79,88112,53301],{"class":228},[79,88114,88115,88117,88119,88121,88123],{"class":81,"line":568},[79,88116,54138],{"class":228},[79,88118,53401],{"class":232},[79,88120,53404],{"class":228},[79,88122,53401],{"class":232},[79,88124,53301],{"class":228},[79,88126,88127,88129,88131],{"class":81,"line":574},[79,88128,54138],{"class":228},[79,88130,2159],{"class":232},[79,88132,53301],{"class":228},[79,88134,88135,88138],{"class":81,"line":579},[79,88136,88137],{"class":85},"    .modal",[79,88139,17604],{"class":228},[79,88141,88142,88144,88146,88148,88150],{"class":81,"line":585},[79,88143,56760],{"class":96},[79,88145,53431],{"class":228},[79,88147,6046],{"class":96},[79,88149,53486],{"class":448},[79,88151,3400],{"class":228},[79,88153,88154,88157,88159,88161,88163],{"class":81,"line":591},[79,88155,88156],{"class":96},"      min-height",[79,88158,53431],{"class":228},[79,88160,2555],{"class":96},[79,88162,53486],{"class":448},[79,88164,3400],{"class":228},[79,88166,88167,88169,88171,88173,88175,88177,88179,88181,88183,88185,88187,88189,88191,88193,88195,88198],{"class":81,"line":596},[79,88168,80738],{"class":96},[79,88170,53431],{"class":228},[79,88172,759],{"class":96},[79,88174,1103],{"class":96},[79,88176,4123],{"class":96},[79,88178,53486],{"class":448},[79,88180,80755],{"class":96},[79,88182,455],{"class":228},[79,88184,759],{"class":96},[79,88186,1020],{"class":228},[79,88188,759],{"class":96},[79,88190,1020],{"class":228},[79,88192,759],{"class":96},[79,88194,1020],{"class":228},[79,88196,88197],{"class":96},"0.1",[79,88199,4795],{"class":228},[79,88201,88202,88204,88206,88208,88210],{"class":81,"line":602},[79,88203,57123],{"class":96},[79,88205,53431],{"class":228},[79,88207,2537],{"class":96},[79,88209,53486],{"class":448},[79,88211,3400],{"class":228},[79,88213,88214,88216,88218,88221],{"class":81,"line":608},[79,88215,56748],{"class":96},[79,88217,53431],{"class":228},[79,88219,88220],{"class":96},"fixed",[79,88222,3400],{"class":228},[79,88224,88225,88228,88230,88233],{"class":81,"line":614},[79,88226,88227],{"class":96},"      z-index",[79,88229,53431],{"class":228},[79,88231,88232],{"class":96},"999",[79,88234,3400],{"class":228},[79,88236,88237,88239,88241,88243,88245],{"class":81,"line":619},[79,88238,56827],{"class":96},[79,88240,53431],{"class":228},[79,88242,2896],{"class":96},[79,88244,1094],{"class":448},[79,88246,3400],{"class":228},[79,88248,88249,88251,88253,88255,88257],{"class":81,"line":625},[79,88250,56936],{"class":96},[79,88252,53431],{"class":228},[79,88254,2896],{"class":96},[79,88256,1094],{"class":448},[79,88258,3400],{"class":228},[79,88260,88261,88263,88265,88267,88269,88272,88274,88276,88278,88280,88282,88284],{"class":81,"line":631},[79,88262,80779],{"class":96},[79,88264,53431],{"class":228},[79,88266,80784],{"class":96},[79,88268,455],{"class":228},[79,88270,88271],{"class":96},"-50",[79,88273,1094],{"class":448},[79,88275,1020],{"class":228},[79,88277,88271],{"class":96},[79,88279,1094],{"class":448},[79,88281,1020],{"class":228},[79,88283,759],{"class":96},[79,88285,4795],{"class":228},[79,88287,88288,88290,88292,88294],{"class":81,"line":637},[79,88289,56873],{"class":96},[79,88291,53431],{"class":228},[79,88293,62831],{"class":96},[79,88295,3400],{"class":228},[79,88297,88298],{"class":81,"line":643},[79,88299,4272],{"class":228},[79,88301,88302],{"class":81,"line":649},[79,88303,542],{"emptyLinePlaceholder":541},[79,88305,88306,88308,88311],{"class":81,"line":655},[79,88307,88137],{"class":85},[79,88309,88310],{"class":85}," .header",[79,88312,17604],{"class":228},[79,88314,88315,88317,88319,88321,88323],{"class":81,"line":660},[79,88316,59348],{"class":96},[79,88318,53431],{"class":228},[79,88320,2644],{"class":96},[79,88322,53486],{"class":448},[79,88324,3400],{"class":228},[79,88326,88327,88329,88331,88333,88335,88337],{"class":81,"line":666},[79,88328,56684],{"class":96},[79,88330,53431],{"class":228},[79,88332,759],{"class":96},[79,88334,4123],{"class":96},[79,88336,53486],{"class":448},[79,88338,3400],{"class":228},[79,88340,88341,88343,88345,88347],{"class":81,"line":672},[79,88342,56748],{"class":96},[79,88344,53431],{"class":228},[79,88346,56753],{"class":96},[79,88348,3400],{"class":228},[79,88350,88351,88353,88355,88357,88359],{"class":81,"line":678},[79,88352,56911],{"class":96},[79,88354,53431],{"class":228},[79,88356,2940],{"class":96},[79,88358,53486],{"class":448},[79,88360,3400],{"class":228},[79,88362,88363],{"class":81,"line":684},[79,88364,4272],{"class":228},[79,88366,88367],{"class":81,"line":690},[79,88368,542],{"emptyLinePlaceholder":541},[79,88370,88371,88373,88375,88377],{"class":81,"line":695},[79,88372,88137],{"class":85},[79,88374,88310],{"class":85},[79,88376,5107],{"class":232},[79,88378,17604],{"class":228},[79,88380,88381,88384,88386,88388],{"class":81,"line":700},[79,88382,88383],{"class":96},"      font-style",[79,88385,53431],{"class":228},[79,88387,65829],{"class":96},[79,88389,3400],{"class":228},[79,88391,88392,88394,88396,88398],{"class":81,"line":712},[79,88393,59405],{"class":96},[79,88395,53431],{"class":228},[79,88397,64058],{"class":96},[79,88399,3400],{"class":228},[79,88401,88402,88404,88406,88408],{"class":81,"line":721},[79,88403,56748],{"class":96},[79,88405,53431],{"class":228},[79,88407,56820],{"class":96},[79,88409,3400],{"class":228},[79,88411,88412,88415,88417,88419,88421],{"class":81,"line":726},[79,88413,88414],{"class":96},"      right",[79,88416,53431],{"class":228},[79,88418,2815],{"class":96},[79,88420,53486],{"class":448},[79,88422,3400],{"class":228},[79,88424,88425,88427,88429,88432,88434],{"class":81,"line":731},[79,88426,56936],{"class":96},[79,88428,53431],{"class":228},[79,88430,88431],{"class":96},"-2",[79,88433,53486],{"class":448},[79,88435,3400],{"class":228},[79,88437,88438,88440,88442,88444],{"class":81,"line":748},[79,88439,64013],{"class":96},[79,88441,53431],{"class":228},[79,88443,64018],{"class":96},[79,88445,3400],{"class":228},[79,88447,88448],{"class":81,"line":765},[79,88449,4272],{"class":228},[79,88451,88452],{"class":81,"line":780},[79,88453,542],{"emptyLinePlaceholder":541},[79,88455,88456,88458,88461],{"class":81,"line":811},[79,88457,88137],{"class":85},[79,88459,88460],{"class":85}," .body",[79,88462,17604],{"class":228},[79,88464,88465,88467,88469,88471],{"class":81,"line":816},[79,88466,59275],{"class":96},[79,88468,53431],{"class":228},[79,88470,53586],{"class":96},[79,88472,3400],{"class":228},[79,88474,88475,88477,88479,88481,88483],{"class":81,"line":821},[79,88476,56684],{"class":96},[79,88478,53431],{"class":228},[79,88480,2689],{"class":96},[79,88482,53486],{"class":448},[79,88484,3400],{"class":228},[79,88486,88487],{"class":81,"line":837},[79,88488,4272],{"class":228},[79,88490,88491],{"class":81,"line":853},[79,88492,542],{"emptyLinePlaceholder":541},[79,88494,88495,88497,88500],{"class":81,"line":864},[79,88496,88137],{"class":85},[79,88498,88499],{"class":85}," .footer",[79,88501,17604],{"class":228},[79,88503,88504,88506,88508,88510],{"class":81,"line":869},[79,88505,56998],{"class":96},[79,88507,53431],{"class":228},[79,88509,53471],{"class":96},[79,88511,3400],{"class":228},[79,88513,88514,88516,88518,88520],{"class":81,"line":885},[79,88515,57009],{"class":96},[79,88517,53431],{"class":228},[79,88519,53574],{"class":96},[79,88521,3400],{"class":228},[79,88523,88524,88526,88528,88530,88532],{"class":81,"line":891},[79,88525,56684],{"class":96},[79,88527,53431],{"class":228},[79,88529,2689],{"class":96},[79,88531,53486],{"class":448},[79,88533,3400],{"class":228},[79,88535,88536],{"class":81,"line":896},[79,88537,4272],{"class":228},[79,88539,88540],{"class":81,"line":907},[79,88541,542],{"emptyLinePlaceholder":541},[79,88543,88544,88546,88548,88550],{"class":81,"line":912},[79,88545,88137],{"class":85},[79,88547,88499],{"class":85},[79,88549,3505],{"class":232},[79,88551,17604],{"class":228},[79,88553,88554,88556,88558,88560,88562,88564,88566],{"class":81,"line":935},[79,88555,56684],{"class":96},[79,88557,53431],{"class":228},[79,88559,970],{"class":96},[79,88561,53486],{"class":448},[79,88563,4168],{"class":96},[79,88565,53486],{"class":448},[79,88567,3400],{"class":228},[79,88569,88570,88572,88574,88577],{"class":81,"line":946},[79,88571,63710],{"class":96},[79,88573,53431],{"class":228},[79,88575,88576],{"class":96},"#ccc",[79,88578,3400],{"class":228},[79,88580,88581,88583,88585,88587],{"class":81,"line":960},[79,88582,65958],{"class":96},[79,88584,53431],{"class":228},[79,88586,56726],{"class":96},[79,88588,3400],{"class":228},[79,88590,88591,88593,88595,88597],{"class":81,"line":975},[79,88592,59405],{"class":96},[79,88594,53431],{"class":228},[79,88596,62831],{"class":96},[79,88598,3400],{"class":228},[79,88600,88601,88603,88605,88607,88609],{"class":81,"line":980},[79,88602,57123],{"class":96},[79,88604,53431],{"class":228},[79,88606,2331],{"class":96},[79,88608,53486],{"class":448},[79,88610,3400],{"class":228},[79,88612,88613,88615,88617,88619,88621],{"class":81,"line":1006},[79,88614,63739],{"class":96},[79,88616,53431],{"class":228},[79,88618,2689],{"class":96},[79,88620,53486],{"class":448},[79,88622,3400],{"class":228},[79,88624,88625,88627,88629,88631,88633],{"class":81,"line":1027},[79,88626,56911],{"class":96},[79,88628,53431],{"class":228},[79,88630,2789],{"class":96},[79,88632,53486],{"class":448},[79,88634,3400],{"class":228},[79,88636,88637],{"class":81,"line":1032},[79,88638,4272],{"class":228},[79,88640,88641],{"class":81,"line":1047},[79,88642,542],{"emptyLinePlaceholder":541},[79,88644,88645,88647,88649,88651,88654],{"class":81,"line":1053},[79,88646,88137],{"class":85},[79,88648,88499],{"class":85},[79,88650,3505],{"class":232},[79,88652,88653],{"class":85},".submit",[79,88655,17604],{"class":228},[79,88657,88658,88660,88662,88665],{"class":81,"line":1058},[79,88659,56873],{"class":96},[79,88661,53431],{"class":228},[79,88663,88664],{"class":96},"#369",[79,88666,3400],{"class":228},[79,88668,88669],{"class":81,"line":1069},[79,88670,4272],{"class":228},[79,88672,88673,88675,88677],{"class":81,"line":1081},[79,88674,54410],{"class":228},[79,88676,2159],{"class":232},[79,88678,53301],{"class":228},[79,88680,88681,88683,88685],{"class":81,"line":1086},[79,88682,53779],{"class":228},[79,88684,53328],{"class":232},[79,88686,53301],{"class":228},[79,88688,88689],{"class":81,"line":1108},[79,88690,542],{"emptyLinePlaceholder":541},[79,88692,88693,88695,88697],{"class":81,"line":1153},[79,88694,229],{"class":228},[79,88696,53794],{"class":232},[79,88698,53301],{"class":228},[79,88700,88701,88703,88705,88707,88709,88712,88715,88717],{"class":81,"line":1158},[79,88702,54138],{"class":228},[79,88704,55877],{"class":232},[79,88706,16991],{"class":85},[79,88708,239],{"class":228},[79,88710,88711],{"class":89},"\"delete\"",[79,88713,88714],{"class":228},">删除\u003C\u002F",[79,88716,55877],{"class":232},[79,88718,53301],{"class":228},[79,88720,88721,88723,88725,88727,88729,88732,88735,88737],{"class":81,"line":1180},[79,88722,54138],{"class":228},[79,88724,55877],{"class":232},[79,88726,16991],{"class":85},[79,88728,239],{"class":228},[79,88730,88731],{"class":89},"\"login\"",[79,88733,88734],{"class":228},">登录\u003C\u002F",[79,88736,55877],{"class":232},[79,88738,53301],{"class":228},[79,88740,88741,88743,88745],{"class":81,"line":1197},[79,88742,54138],{"class":228},[79,88744,53807],{"class":232},[79,88746,53301],{"class":228},[79,88748,88749],{"class":81,"line":1202},[79,88750,88751],{"class":2313},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[79,88753,88754,88756,88759,88761,88763,88765,88767,88769,88772,88774,88776],{"class":81,"line":1207},[79,88755,72072],{"class":448},[79,88757,88758],{"class":85}," Modal",[79,88760,455],{"class":228},[79,88762,53401],{"class":7284},[79,88764,556],{"class":448},[79,88766,71918],{"class":89},[79,88768,1020],{"class":228},[79,88770,88771],{"class":7284},"message",[79,88773,556],{"class":448},[79,88775,71918],{"class":89},[79,88777,14476],{"class":228},[79,88779,88780],{"class":81,"line":1223},[79,88781,88782],{"class":2313},"      \u002F\u002F 创建Model 模态框盒子\n",[79,88784,88785],{"class":81,"line":18722},[79,88786,88787],{"class":2313},"      \u002F\u002F 1.1 创建div标签\n",[79,88789,88790,88792,88795,88797,88799,88801,88803,88805],{"class":81,"line":18728},[79,88791,72039],{"class":96},[79,88793,88794],{"class":228},".modalBox ",[79,88796,239],{"class":448},[79,88798,56385],{"class":228},[79,88800,72139],{"class":85},[79,88802,455],{"class":228},[79,88804,83919],{"class":89},[79,88806,850],{"class":228},[79,88808,88809],{"class":81,"line":18739},[79,88810,88811],{"class":2313},"      \u002F\u002F 1.2 给div 添加类名为model\n",[79,88813,88814,88816,88819,88821],{"class":81,"line":18762},[79,88815,72039],{"class":96},[79,88817,88818],{"class":228},".modalBox.className ",[79,88820,239],{"class":448},[79,88822,88823],{"class":89}," 'modal'\n",[79,88825,88826],{"class":81,"line":18784},[79,88827,88828],{"class":2313},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[79,88830,88831,88833,88836,88838],{"class":81,"line":18789},[79,88832,72039],{"class":96},[79,88834,88835],{"class":228},".modalBox.innerHTML ",[79,88837,239],{"class":448},[79,88839,72156],{"class":89},[79,88841,88842,88845,88847],{"class":81,"line":18795},[79,88843,88844],{"class":89},"        \u003Cdiv class=\"header\">${",[79,88846,53401],{"class":228},[79,88848,88849],{"class":89},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[79,88851,88852,88855,88857],{"class":81,"line":18809},[79,88853,88854],{"class":89},"        \u003Cdiv class=\"body\">${",[79,88856,88771],{"class":228},[79,88858,88859],{"class":89},"}\u003C\u002Fdiv>\n",[79,88861,88862],{"class":81,"line":18822},[79,88863,88864],{"class":89},"      `\n",[79,88866,88867],{"class":81,"line":18827},[79,88868,88869],{"class":2313},"      \u002F\u002F console.log(this.modalBox)\n",[79,88871,88872],{"class":81,"line":18841},[79,88873,4272],{"class":228},[79,88875,88876],{"class":81,"line":18846},[79,88877,88878],{"class":2313},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[79,88880,88881],{"class":81,"line":18852},[79,88882,88883],{"class":2313},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[79,88885,88886],{"class":81,"line":18857},[79,88887,88888],{"class":2313},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[79,88890,88891,88894,88896,88898,88900,88903,88905,88907],{"class":81,"line":18871},[79,88892,88893],{"class":96},"    Modal",[79,88895,2798],{"class":228},[79,88897,87566],{"class":96},[79,88899,2798],{"class":228},[79,88901,88902],{"class":85},"open",[79,88904,556],{"class":448},[79,88906,60907],{"class":448},[79,88908,56441],{"class":228},[79,88910,88911],{"class":81,"line":18876},[79,88912,88913],{"class":2313},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[79,88915,88916,88918,88921,88923,88925,88927,88929,88932],{"class":81,"line":18881},[79,88917,60217],{"class":448},[79,88919,88920],{"class":96}," box",[79,88922,556],{"class":448},[79,88924,56385],{"class":228},[79,88926,56388],{"class":85},[79,88928,455],{"class":228},[79,88930,88931],{"class":89},"'.modal'",[79,88933,850],{"class":228},[79,88935,88936],{"class":81,"line":18895},[79,88937,88938],{"class":2313},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[79,88940,88941,88944,88946,88949,88951],{"class":81,"line":18907},[79,88942,88943],{"class":228},"      box ",[79,88945,3810],{"class":448},[79,88947,88948],{"class":228}," box.",[79,88950,58995],{"class":85},[79,88952,4061],{"class":228},[79,88954,88955],{"class":81,"line":18912},[79,88956,88957],{"class":2313},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[79,88959,88960],{"class":81,"line":18925},[79,88961,88962],{"class":2313},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[79,88964,88965],{"class":81,"line":18930},[79,88966,88967],{"class":2313},"      \u002F\u002F append可以增加对象\n",[79,88969,88970,88973,88976,88978,88981],{"class":81,"line":18935},[79,88971,88972],{"class":228},"      document.body.",[79,88974,88975],{"class":85},"append",[79,88977,455],{"class":228},[79,88979,88980],{"class":96},"this",[79,88982,88983],{"class":228},".modalBox)\n",[79,88985,88986],{"class":81,"line":18940},[79,88987,542],{"emptyLinePlaceholder":541},[79,88989,88990],{"class":81,"line":18953},[79,88991,88992],{"class":2313},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[79,88994,88995,88997,89000,89002,89004,89007,89009,89011,89013,89015,89018,89020],{"class":81,"line":18958},[79,88996,72039],{"class":96},[79,88998,88999],{"class":228},".modalBox.",[79,89001,56388],{"class":85},[79,89003,455],{"class":228},[79,89005,89006],{"class":89},"'i'",[79,89008,32833],{"class":228},[79,89010,59802],{"class":85},[79,89012,455],{"class":228},[79,89014,59807],{"class":89},[79,89016,89017],{"class":228},", () ",[79,89019,86709],{"class":448},[79,89021,17604],{"class":228},[79,89023,89024],{"class":81,"line":34631},[79,89025,89026],{"class":2313},"        \u002F\u002F 这个地方需要用到箭头函数\n",[79,89028,89029],{"class":81,"line":34637},[79,89030,89031],{"class":2313},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[79,89033,89034],{"class":81,"line":34643},[79,89035,89036],{"class":2313},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[79,89038,89039,89041,89043,89046],{"class":81,"line":34649},[79,89040,66714],{"class":96},[79,89042,2798],{"class":228},[79,89044,89045],{"class":85},"close",[79,89047,4061],{"class":228},[79,89049,89050],{"class":81,"line":34655},[79,89051,66803],{"class":228},[79,89053,89054],{"class":81,"line":34666},[79,89055,4272],{"class":228},[79,89057,89058],{"class":81,"line":34672},[79,89059,542],{"emptyLinePlaceholder":541},[79,89061,89062],{"class":81,"line":34692},[79,89063,89064],{"class":2313},"    \u002F\u002F 测试一下 点击 删除按钮\n",[79,89066,89067,89069,89071,89073,89076,89078,89080,89082,89084,89086,89088],{"class":81,"line":34698},[79,89068,54400],{"class":228},[79,89070,56388],{"class":85},[79,89072,455],{"class":228},[79,89074,89075],{"class":89},"'#delete'",[79,89077,32833],{"class":228},[79,89079,59802],{"class":85},[79,89081,455],{"class":228},[79,89083,59807],{"class":89},[79,89085,89017],{"class":228},[79,89087,86709],{"class":448},[79,89089,17604],{"class":228},[79,89091,89092],{"class":81,"line":34709},[79,89093,89094],{"class":2313},"      \u002F\u002F 先调用Model构造函数\n",[79,89096,89097,89099,89102,89104,89106,89108,89110,89113,89115,89118],{"class":81,"line":34715},[79,89098,60217],{"class":448},[79,89100,89101],{"class":96}," del",[79,89103,556],{"class":448},[79,89105,13613],{"class":448},[79,89107,88758],{"class":85},[79,89109,455],{"class":228},[79,89111,89112],{"class":89},"'温馨的提示'",[79,89114,1020],{"class":228},[79,89116,89117],{"class":89},"'您没有删除权限操作'",[79,89119,850],{"class":228},[79,89121,89122],{"class":81,"line":34721},[79,89123,89124],{"class":2313},"      \u002F\u002F 实例对象调用open方法\n",[79,89126,89127,89130,89132],{"class":81,"line":34727},[79,89128,89129],{"class":228},"      del.",[79,89131,88902],{"class":85},[79,89133,4061],{"class":228},[79,89135,89136],{"class":81,"line":34733},[79,89137,35458],{"class":228},[79,89139,89140],{"class":81,"line":34739},[79,89141,89142],{"class":2313},"    \u002F\u002F 测试一下 点击 登录按钮\n",[79,89144,89145,89147,89149,89151,89154,89156,89158,89160,89162,89164,89166],{"class":81,"line":34745},[79,89146,54400],{"class":228},[79,89148,56388],{"class":85},[79,89150,455],{"class":228},[79,89152,89153],{"class":89},"'#login'",[79,89155,32833],{"class":228},[79,89157,59802],{"class":85},[79,89159,455],{"class":228},[79,89161,59807],{"class":89},[79,89163,89017],{"class":228},[79,89165,86709],{"class":448},[79,89167,17604],{"class":228},[79,89169,89170],{"class":81,"line":34751},[79,89171,89094],{"class":2313},[79,89173,89174,89176,89179,89181,89183,89185,89187,89190,89192,89195],{"class":81,"line":34771},[79,89175,60217],{"class":448},[79,89177,89178],{"class":96}," log",[79,89180,556],{"class":448},[79,89182,13613],{"class":448},[79,89184,88758],{"class":85},[79,89186,455],{"class":228},[79,89188,89189],{"class":89},"'友情提示'",[79,89191,1020],{"class":228},[79,89193,89194],{"class":89},"'您还没有登录呢'",[79,89196,850],{"class":228},[79,89198,89199],{"class":81,"line":34777},[79,89200,89124],{"class":2313},[79,89202,89203,89206,89208],{"class":81,"line":34793},[79,89204,89205],{"class":228},"      log.",[79,89207,88902],{"class":85},[79,89209,4061],{"class":228},[79,89211,89212],{"class":81,"line":34799},[79,89213,35458],{"class":228},[79,89215,89216],{"class":81,"line":34813},[79,89217,89218],{"class":2313},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[79,89220,89221,89223,89225,89227,89229,89231,89233,89235],{"class":81,"line":34819},[79,89222,88893],{"class":96},[79,89224,2798],{"class":228},[79,89226,87566],{"class":96},[79,89228,2798],{"class":228},[79,89230,89045],{"class":85},[79,89232,556],{"class":448},[79,89234,60907],{"class":448},[79,89236,56441],{"class":228},[79,89238,89239,89241,89243,89245],{"class":81,"line":34834},[79,89240,72039],{"class":96},[79,89242,88999],{"class":228},[79,89244,58995],{"class":85},[79,89246,4061],{"class":228},[79,89248,89249],{"class":81,"line":34840},[79,89250,4272],{"class":228},[79,89252,89253,89255,89257],{"class":81,"line":34849},[79,89254,54410],{"class":228},[79,89256,53807],{"class":232},[79,89258,53301],{"class":228},[79,89260,89261,89263,89265],{"class":81,"line":34855},[79,89262,53779],{"class":228},[79,89264,53794],{"class":232},[79,89266,53301],{"class":228},[79,89268,89269],{"class":81,"line":34864},[79,89270,542],{"emptyLinePlaceholder":541},[79,89272,89273,89275,89277],{"class":81,"line":34870},[79,89274,53779],{"class":228},[79,89276,52630],{"class":232},[79,89278,53301],{"class":228},[19,89280,89281],{},[3569,89282],{"alt":57,"src":89283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,89285,89287],{"id":89286},"_414-深浅拷贝","4.14 深浅拷贝",[339,89289,89291],{"id":89290},"_4141-浅拷贝","4.14.1 浅拷贝",[19,89293,89294],{},[3569,89295],{"alt":57,"src":89296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,89298,89299],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,89301,89302],{},[3569,89303],{"alt":57,"src":89304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,89306,89307],{},[3569,89308],{"alt":57,"src":89309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,89311,89312],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,89314,89315],{},[3569,89316],{"alt":57,"src":89317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,89319,13367],{},[19,89321,89322],{},[3569,89323],{"alt":57,"src":89324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[339,89326,89328],{"id":89327},"_4142-深拷贝","4.14.2 深拷贝",[19,89330,89331],{},"深拷贝：拷贝的是对象，不是地址",[19,89333,89334],{},"常用的三种方法：",[26,89336,89337,89340,89343],{},[29,89338,89339],{},"通过递归实现深拷贝",[29,89341,89342],{},"lodash\u002FcloneDeep",[29,89344,89345],{},"通过JSON.stringify()实现",[24023,89347,89349],{"id":89348},"_41421-递归函数","4.14.2.1 递归函数",[19,89351,89352],{},[3569,89353],{"alt":57,"src":89354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[26,89356,89357],{},[29,89358,89359],{},"死递归占溢出：",[51,89361,89363],{"className":219,"code":89362,"language":221,"meta":57,"style":57},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[59,89364,89365,89373,89381,89385,89390,89394,89399,89407],{"__ignoreMap":57},[79,89366,89367,89369,89371],{"class":81,"line":82},[79,89368,229],{"class":228},[79,89370,53794],{"class":232},[79,89372,53301],{"class":228},[79,89374,89375,89377,89379],{"class":81,"line":167},[79,89376,54138],{"class":228},[79,89378,53807],{"class":232},[79,89380,53301],{"class":228},[79,89382,89383],{"class":81,"line":178},[79,89384,79131],{"class":228},[79,89386,89387],{"class":81,"line":545},[79,89388,89389],{"class":228},"      fn()\n",[79,89391,89392],{"class":81,"line":550},[79,89393,4272],{"class":228},[79,89395,89396],{"class":81,"line":562},[79,89397,89398],{"class":228},"    fn()\n",[79,89400,89401,89403,89405],{"class":81,"line":568},[79,89402,54410],{"class":228},[79,89404,53807],{"class":232},[79,89406,53301],{"class":228},[79,89408,89409,89411,89413],{"class":81,"line":574},[79,89410,53779],{"class":228},[79,89412,53794],{"class":232},[79,89414,53301],{"class":228},[26,89416,89417],{"start":167},[29,89418,89419],{},"递归函数要加判断条件：",[19,89421,89422],{},[3569,89423],{"alt":57,"src":89424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[26,89426,89427],{"start":178},[29,89428,89429],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[51,89431,89433],{"className":52628,"code":89432,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv>\u003C\u002Fdiv>\n  \u003Cscript>\n    function getTime() {\n      document.querySelector('div').innerHTML = new Date().toLocaleString()\n      setTimeout(getTime, 1000)\n    }\n    getTime()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,89434,89435,89445,89459,89463,89471,89485,89505,89517,89525,89529,89537,89549,89557,89565,89590,89602,89606,89613,89621,89629,89633],{"__ignoreMap":57},[79,89436,89437,89439,89441,89443],{"class":81,"line":82},[79,89438,53292],{"class":228},[79,89440,53295],{"class":232},[79,89442,53298],{"class":85},[79,89444,53301],{"class":228},[79,89446,89447,89449,89451,89453,89455,89457],{"class":81,"line":167},[79,89448,229],{"class":228},[79,89450,52630],{"class":232},[79,89452,53310],{"class":85},[79,89454,239],{"class":228},[79,89456,53315],{"class":89},[79,89458,53301],{"class":228},[79,89460,89461],{"class":81,"line":178},[79,89462,542],{"emptyLinePlaceholder":541},[79,89464,89465,89467,89469],{"class":81,"line":545},[79,89466,229],{"class":228},[79,89468,53328],{"class":232},[79,89470,53301],{"class":228},[79,89472,89473,89475,89477,89479,89481,89483],{"class":81,"line":550},[79,89474,54138],{"class":228},[79,89476,53338],{"class":232},[79,89478,53341],{"class":85},[79,89480,239],{"class":228},[79,89482,53346],{"class":89},[79,89484,53301],{"class":228},[79,89486,89487,89489,89491,89493,89495,89497,89499,89501,89503],{"class":81,"line":562},[79,89488,54138],{"class":228},[79,89490,53338],{"class":232},[79,89492,236],{"class":85},[79,89494,239],{"class":228},[79,89496,53385],{"class":89},[79,89498,53365],{"class":85},[79,89500,239],{"class":228},[79,89502,53392],{"class":89},[79,89504,53301],{"class":228},[79,89506,89507,89509,89511,89513,89515],{"class":81,"line":568},[79,89508,54138],{"class":228},[79,89510,53401],{"class":232},[79,89512,53404],{"class":228},[79,89514,53401],{"class":232},[79,89516,53301],{"class":228},[79,89518,89519,89521,89523],{"class":81,"line":574},[79,89520,53779],{"class":228},[79,89522,53328],{"class":232},[79,89524,53301],{"class":228},[79,89526,89527],{"class":81,"line":579},[79,89528,542],{"emptyLinePlaceholder":541},[79,89530,89531,89533,89535],{"class":81,"line":585},[79,89532,229],{"class":228},[79,89534,53794],{"class":232},[79,89536,53301],{"class":228},[79,89538,89539,89541,89543,89545,89547],{"class":81,"line":591},[79,89540,54138],{"class":228},[79,89542,53605],{"class":232},[79,89544,57303],{"class":228},[79,89546,53605],{"class":232},[79,89548,53301],{"class":228},[79,89550,89551,89553,89555],{"class":81,"line":596},[79,89552,54138],{"class":228},[79,89554,53807],{"class":232},[79,89556,53301],{"class":228},[79,89558,89559,89561,89563],{"class":81,"line":602},[79,89560,72072],{"class":448},[79,89562,75761],{"class":85},[79,89564,12888],{"class":228},[79,89566,89567,89569,89571,89573,89575,89577,89579,89581,89583,89585,89588],{"class":81,"line":608},[79,89568,57760],{"class":228},[79,89570,56388],{"class":85},[79,89572,455],{"class":228},[79,89574,83919],{"class":89},[79,89576,76237],{"class":228},[79,89578,239],{"class":448},[79,89580,13613],{"class":448},[79,89582,75777],{"class":85},[79,89584,19286],{"class":228},[79,89586,89587],{"class":85},"toLocaleString",[79,89589,4061],{"class":228},[79,89591,89592,89595,89598,89600],{"class":81,"line":614},[79,89593,89594],{"class":85},"      setTimeout",[79,89596,89597],{"class":228},"(getTime, ",[79,89599,929],{"class":96},[79,89601,850],{"class":228},[79,89603,89604],{"class":81,"line":619},[79,89605,4272],{"class":228},[79,89607,89608,89611],{"class":81,"line":625},[79,89609,89610],{"class":85},"    getTime",[79,89612,4061],{"class":228},[79,89614,89615,89617,89619],{"class":81,"line":631},[79,89616,54410],{"class":228},[79,89618,53807],{"class":232},[79,89620,53301],{"class":228},[79,89622,89623,89625,89627],{"class":81,"line":637},[79,89624,53779],{"class":228},[79,89626,53794],{"class":232},[79,89628,53301],{"class":228},[79,89630,89631],{"class":81,"line":643},[79,89632,542],{"emptyLinePlaceholder":541},[79,89634,89635,89637,89639],{"class":81,"line":649},[79,89636,53779],{"class":228},[79,89638,52630],{"class":232},[79,89640,53301],{"class":228},[19,89642,89643],{},[3569,89644],{"alt":57,"src":89645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[26,89647,89648],{"start":545},[29,89649,89339],{},[19,89651,89652],{},[3569,89653],{"alt":57,"src":89654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,89656,89657],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,89659,41184],{},[19,89661,89662],{},"这个是简易版的递归函数深拷贝",[19,89664,89665],{},"一定要注意先数组再对象，因为万物皆可对象",[51,89667,89669],{"className":52628,"code":89668,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      uname: 'pink',\n      age: 18,\n      hobby: ['乒乓球', '足球'],\n      family: {\n        baby: '小pink'\n      }\n    }\n    const o = {}\n    \u002F\u002F 拷贝函数\n    function deepCopy(newObj, oldObj) {\n      for (let k in oldObj) {\n        \u002F\u002F 处理数组的问题\n        \u002F\u002F 判断是否属于数组\n        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n        if (oldObj[k] instanceof Array) {\n          \u002F\u002F newObj[k]  接收的内容放到[]\n          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n          newObj[k] = []\n          deepCopy(newObj[k], oldObj[k])\n        } else if (oldObj[k] instanceof Object) {\n          newObj[k] = {}\n          deepCopy(newObj[k], oldObj[k])\n        } else {\n          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n          \u002F\u002F newObj[k]与newObj写法是等价的\n          newObj[k] = oldObj[k]\n        }\n      }\n    }\n    deepCopy(o, obj) \u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n    console.log(o)\n    o.age = 20\n    o.hobby[0] = '篮球'\n    o.family = '老pink'\n    console.log(obj)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,89670,89671,89681,89695,89699,89707,89721,89741,89753,89761,89765,89773,89781,89791,89800,89808,89824,89828,89836,89840,89844,89856,89861,89880,89896,89901,89906,89911,89926,89931,89936,89945,89953,89970,89978,89984,89992,89997,90002,90011,90015,90019,90023,90034,90043,90053,90067,90077,90085,90093,90101,90105],{"__ignoreMap":57},[79,89672,89673,89675,89677,89679],{"class":81,"line":82},[79,89674,53292],{"class":228},[79,89676,53295],{"class":232},[79,89678,53298],{"class":85},[79,89680,53301],{"class":228},[79,89682,89683,89685,89687,89689,89691,89693],{"class":81,"line":167},[79,89684,229],{"class":228},[79,89686,52630],{"class":232},[79,89688,53310],{"class":85},[79,89690,239],{"class":228},[79,89692,53315],{"class":89},[79,89694,53301],{"class":228},[79,89696,89697],{"class":81,"line":178},[79,89698,542],{"emptyLinePlaceholder":541},[79,89700,89701,89703,89705],{"class":81,"line":545},[79,89702,229],{"class":228},[79,89704,53328],{"class":232},[79,89706,53301],{"class":228},[79,89708,89709,89711,89713,89715,89717,89719],{"class":81,"line":550},[79,89710,54138],{"class":228},[79,89712,53338],{"class":232},[79,89714,53341],{"class":85},[79,89716,239],{"class":228},[79,89718,53346],{"class":89},[79,89720,53301],{"class":228},[79,89722,89723,89725,89727,89729,89731,89733,89735,89737,89739],{"class":81,"line":562},[79,89724,54138],{"class":228},[79,89726,53338],{"class":232},[79,89728,236],{"class":85},[79,89730,239],{"class":228},[79,89732,53385],{"class":89},[79,89734,53365],{"class":85},[79,89736,239],{"class":228},[79,89738,53392],{"class":89},[79,89740,53301],{"class":228},[79,89742,89743,89745,89747,89749,89751],{"class":81,"line":568},[79,89744,54138],{"class":228},[79,89746,53401],{"class":232},[79,89748,53404],{"class":228},[79,89750,53401],{"class":232},[79,89752,53301],{"class":228},[79,89754,89755,89757,89759],{"class":81,"line":574},[79,89756,53779],{"class":228},[79,89758,53328],{"class":232},[79,89760,53301],{"class":228},[79,89762,89763],{"class":81,"line":579},[79,89764,542],{"emptyLinePlaceholder":541},[79,89766,89767,89769,89771],{"class":81,"line":585},[79,89768,229],{"class":228},[79,89770,53794],{"class":232},[79,89772,53301],{"class":228},[79,89774,89775,89777,89779],{"class":81,"line":591},[79,89776,54138],{"class":228},[79,89778,53807],{"class":232},[79,89780,53301],{"class":228},[79,89782,89783,89785,89787,89789],{"class":81,"line":596},[79,89784,13256],{"class":448},[79,89786,71959],{"class":96},[79,89788,556],{"class":448},[79,89790,17604],{"class":228},[79,89792,89793,89795,89798],{"class":81,"line":602},[79,89794,73604],{"class":228},[79,89796,89797],{"class":89},"'pink'",[79,89799,33468],{"class":228},[79,89801,89802,89804,89806],{"class":81,"line":608},[79,89803,73614],{"class":228},[79,89805,2890],{"class":96},[79,89807,33468],{"class":228},[79,89809,89810,89813,89816,89818,89821],{"class":81,"line":614},[79,89811,89812],{"class":228},"      hobby: [",[79,89814,89815],{"class":89},"'乒乓球'",[79,89817,1020],{"class":228},[79,89819,89820],{"class":89},"'足球'",[79,89822,89823],{"class":228},"],\n",[79,89825,89826],{"class":81,"line":619},[79,89827,79860],{"class":228},[79,89829,89830,89833],{"class":81,"line":625},[79,89831,89832],{"class":228},"        baby: ",[79,89834,89835],{"class":89},"'小pink'\n",[79,89837,89838],{"class":81,"line":631},[79,89839,54391],{"class":228},[79,89841,89842],{"class":81,"line":637},[79,89843,4272],{"class":228},[79,89845,89846,89848,89851,89853],{"class":81,"line":643},[79,89847,13256],{"class":448},[79,89849,89850],{"class":96}," o",[79,89852,556],{"class":448},[79,89854,89855],{"class":228}," {}\n",[79,89857,89858],{"class":81,"line":649},[79,89859,89860],{"class":2313},"    \u002F\u002F 拷贝函数\n",[79,89862,89863,89865,89868,89870,89873,89875,89878],{"class":81,"line":655},[79,89864,72072],{"class":448},[79,89866,89867],{"class":85}," deepCopy",[79,89869,455],{"class":228},[79,89871,89872],{"class":7284},"newObj",[79,89874,1020],{"class":228},[79,89876,89877],{"class":7284},"oldObj",[79,89879,14476],{"class":228},[79,89881,89882,89884,89886,89888,89891,89893],{"class":81,"line":660},[79,89883,54277],{"class":448},[79,89885,3757],{"class":228},[79,89887,53841],{"class":448},[79,89889,89890],{"class":228}," k ",[79,89892,921],{"class":448},[79,89894,89895],{"class":228}," oldObj) {\n",[79,89897,89898],{"class":81,"line":666},[79,89899,89900],{"class":2313},"        \u002F\u002F 处理数组的问题\n",[79,89902,89903],{"class":81,"line":672},[79,89904,89905],{"class":2313},"        \u002F\u002F 判断是否属于数组\n",[79,89907,89908],{"class":81,"line":678},[79,89909,89910],{"class":2313},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[79,89912,89913,89915,89918,89921,89924],{"class":81,"line":684},[79,89914,1089],{"class":448},[79,89916,89917],{"class":228}," (oldObj[k] ",[79,89919,89920],{"class":448},"instanceof",[79,89922,89923],{"class":85}," Array",[79,89925,14476],{"class":228},[79,89927,89928],{"class":81,"line":690},[79,89929,89930],{"class":2313},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[79,89932,89933],{"class":81,"line":695},[79,89934,89935],{"class":2313},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[79,89937,89938,89941,89943],{"class":81,"line":700},[79,89939,89940],{"class":228},"          newObj[k] ",[79,89942,239],{"class":448},[79,89944,53832],{"class":228},[79,89946,89947,89950],{"class":81,"line":712},[79,89948,89949],{"class":85},"          deepCopy",[79,89951,89952],{"class":228},"(newObj[k], oldObj[k])\n",[79,89954,89955,89957,89959,89961,89963,89965,89968],{"class":81,"line":721},[79,89956,82068],{"class":228},[79,89958,3796],{"class":448},[79,89960,3799],{"class":448},[79,89962,89917],{"class":228},[79,89964,89920],{"class":448},[79,89966,89967],{"class":85}," Object",[79,89969,14476],{"class":228},[79,89971,89972,89974,89976],{"class":81,"line":726},[79,89973,89940],{"class":228},[79,89975,239],{"class":448},[79,89977,89855],{"class":228},[79,89979,89980,89982],{"class":81,"line":731},[79,89981,89949],{"class":85},[79,89983,89952],{"class":228},[79,89985,89986,89988,89990],{"class":81,"line":748},[79,89987,82068],{"class":228},[79,89989,3796],{"class":448},[79,89991,17604],{"class":228},[79,89993,89994],{"class":81,"line":765},[79,89995,89996],{"class":2313},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[79,89998,89999],{"class":81,"line":780},[79,90000,90001],{"class":2313},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[79,90003,90004,90006,90008],{"class":81,"line":811},[79,90005,89940],{"class":228},[79,90007,239],{"class":448},[79,90009,90010],{"class":228}," oldObj[k]\n",[79,90012,90013],{"class":81,"line":816},[79,90014,4612],{"class":228},[79,90016,90017],{"class":81,"line":821},[79,90018,54391],{"class":228},[79,90020,90021],{"class":81,"line":837},[79,90022,4272],{"class":228},[79,90024,90025,90028,90031],{"class":81,"line":853},[79,90026,90027],{"class":85},"    deepCopy",[79,90029,90030],{"class":228},"(o, obj) ",[79,90032,90033],{"class":2313},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[79,90035,90036,90038,90040],{"class":81,"line":864},[79,90037,75741],{"class":228},[79,90039,60236],{"class":85},[79,90041,90042],{"class":228},"(o)\n",[79,90044,90045,90048,90050],{"class":81,"line":869},[79,90046,90047],{"class":228},"    o.age ",[79,90049,239],{"class":448},[79,90051,90052],{"class":96}," 20\n",[79,90054,90055,90058,90060,90062,90064],{"class":81,"line":885},[79,90056,90057],{"class":228},"    o.hobby[",[79,90059,759],{"class":96},[79,90061,877],{"class":228},[79,90063,239],{"class":448},[79,90065,90066],{"class":89}," '篮球'\n",[79,90068,90069,90072,90074],{"class":81,"line":891},[79,90070,90071],{"class":228},"    o.family ",[79,90073,239],{"class":448},[79,90075,90076],{"class":89}," '老pink'\n",[79,90078,90079,90081,90083],{"class":81,"line":896},[79,90080,75741],{"class":228},[79,90082,60236],{"class":85},[79,90084,72024],{"class":228},[79,90086,90087,90089,90091],{"class":81,"line":907},[79,90088,54410],{"class":228},[79,90090,53807],{"class":232},[79,90092,53301],{"class":228},[79,90094,90095,90097,90099],{"class":81,"line":912},[79,90096,53779],{"class":228},[79,90098,53794],{"class":232},[79,90100,53301],{"class":228},[79,90102,90103],{"class":81,"line":935},[79,90104,542],{"emptyLinePlaceholder":541},[79,90106,90107,90109,90111],{"class":81,"line":946},[79,90108,53779],{"class":228},[79,90110,52630],{"class":232},[79,90112,53301],{"class":228},[19,90114,90115],{},[3569,90116],{"alt":57,"src":90117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[24023,90119,90121,90122],{"id":90120},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[2398,90123,90124],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,90126,90127],{},[2482,90128,90129],{"href":90129,"rel":90130},"https:\u002F\u002Fwww.lodashjs.com\u002F",[25885],[19,90132,90133],{},"lodash里边的方法都要加上一个下划线_",[19,90135,90136],{},"_.cloneDeep()",[51,90138,90140],{"className":52628,"code":90139,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003C!-- 先引用这个库 -->\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const obj = {\n      uname: 'pink',\n      age: 18,\n      hobby: ['乒乓球', '足球'],\n      family: {\n        baby: '小pink'\n      }\n    }\n    const o = _.cloneDeep(obj)\n    console.log(o)\n    o.family.baby = '老pink'\n    console.log(obj)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,90141,90142,90152,90166,90170,90178,90192,90212,90224,90232,90236,90244,90249,90268,90276,90286,90294,90302,90314,90318,90324,90328,90332,90348,90356,90365,90373,90381,90389,90393],{"__ignoreMap":57},[79,90143,90144,90146,90148,90150],{"class":81,"line":82},[79,90145,53292],{"class":228},[79,90147,53295],{"class":232},[79,90149,53298],{"class":85},[79,90151,53301],{"class":228},[79,90153,90154,90156,90158,90160,90162,90164],{"class":81,"line":167},[79,90155,229],{"class":228},[79,90157,52630],{"class":232},[79,90159,53310],{"class":85},[79,90161,239],{"class":228},[79,90163,53315],{"class":89},[79,90165,53301],{"class":228},[79,90167,90168],{"class":81,"line":178},[79,90169,542],{"emptyLinePlaceholder":541},[79,90171,90172,90174,90176],{"class":81,"line":545},[79,90173,229],{"class":228},[79,90175,53328],{"class":232},[79,90177,53301],{"class":228},[79,90179,90180,90182,90184,90186,90188,90190],{"class":81,"line":550},[79,90181,54138],{"class":228},[79,90183,53338],{"class":232},[79,90185,53341],{"class":85},[79,90187,239],{"class":228},[79,90189,53346],{"class":89},[79,90191,53301],{"class":228},[79,90193,90194,90196,90198,90200,90202,90204,90206,90208,90210],{"class":81,"line":562},[79,90195,54138],{"class":228},[79,90197,53338],{"class":232},[79,90199,236],{"class":85},[79,90201,239],{"class":228},[79,90203,53385],{"class":89},[79,90205,53365],{"class":85},[79,90207,239],{"class":228},[79,90209,53392],{"class":89},[79,90211,53301],{"class":228},[79,90213,90214,90216,90218,90220,90222],{"class":81,"line":568},[79,90215,54138],{"class":228},[79,90217,53401],{"class":232},[79,90219,53404],{"class":228},[79,90221,53401],{"class":232},[79,90223,53301],{"class":228},[79,90225,90226,90228,90230],{"class":81,"line":574},[79,90227,53779],{"class":228},[79,90229,53328],{"class":232},[79,90231,53301],{"class":228},[79,90233,90234],{"class":81,"line":579},[79,90235,542],{"emptyLinePlaceholder":541},[79,90237,90238,90240,90242],{"class":81,"line":585},[79,90239,229],{"class":228},[79,90241,53794],{"class":232},[79,90243,53301],{"class":228},[79,90245,90246],{"class":81,"line":591},[79,90247,90248],{"class":2313},"  \u003C!-- 先引用这个库 -->\n",[79,90250,90251,90253,90255,90257,90259,90262,90264,90266],{"class":81,"line":596},[79,90252,54138],{"class":228},[79,90254,53807],{"class":232},[79,90256,57228],{"class":85},[79,90258,239],{"class":228},[79,90260,90261],{"class":89},"\"lodash.min.js\"",[79,90263,57303],{"class":228},[79,90265,53807],{"class":232},[79,90267,53301],{"class":228},[79,90269,90270,90272,90274],{"class":81,"line":602},[79,90271,54138],{"class":228},[79,90273,53807],{"class":232},[79,90275,53301],{"class":228},[79,90277,90278,90280,90282,90284],{"class":81,"line":608},[79,90279,13256],{"class":448},[79,90281,71959],{"class":96},[79,90283,556],{"class":448},[79,90285,17604],{"class":228},[79,90287,90288,90290,90292],{"class":81,"line":614},[79,90289,73604],{"class":228},[79,90291,89797],{"class":89},[79,90293,33468],{"class":228},[79,90295,90296,90298,90300],{"class":81,"line":619},[79,90297,73614],{"class":228},[79,90299,2890],{"class":96},[79,90301,33468],{"class":228},[79,90303,90304,90306,90308,90310,90312],{"class":81,"line":625},[79,90305,89812],{"class":228},[79,90307,89815],{"class":89},[79,90309,1020],{"class":228},[79,90311,89820],{"class":89},[79,90313,89823],{"class":228},[79,90315,90316],{"class":81,"line":631},[79,90317,79860],{"class":228},[79,90319,90320,90322],{"class":81,"line":637},[79,90321,89832],{"class":228},[79,90323,89835],{"class":89},[79,90325,90326],{"class":81,"line":643},[79,90327,54391],{"class":228},[79,90329,90330],{"class":81,"line":649},[79,90331,4272],{"class":228},[79,90333,90334,90336,90338,90340,90343,90346],{"class":81,"line":655},[79,90335,13256],{"class":448},[79,90337,89850],{"class":96},[79,90339,556],{"class":448},[79,90341,90342],{"class":228}," _.",[79,90344,90345],{"class":85},"cloneDeep",[79,90347,72024],{"class":228},[79,90349,90350,90352,90354],{"class":81,"line":660},[79,90351,75741],{"class":228},[79,90353,60236],{"class":85},[79,90355,90042],{"class":228},[79,90357,90358,90361,90363],{"class":81,"line":666},[79,90359,90360],{"class":228},"    o.family.baby ",[79,90362,239],{"class":448},[79,90364,90076],{"class":89},[79,90366,90367,90369,90371],{"class":81,"line":672},[79,90368,75741],{"class":228},[79,90370,60236],{"class":85},[79,90372,72024],{"class":228},[79,90374,90375,90377,90379],{"class":81,"line":678},[79,90376,54410],{"class":228},[79,90378,53807],{"class":232},[79,90380,53301],{"class":228},[79,90382,90383,90385,90387],{"class":81,"line":684},[79,90384,53779],{"class":228},[79,90386,53794],{"class":232},[79,90388,53301],{"class":228},[79,90390,90391],{"class":81,"line":690},[79,90392,542],{"emptyLinePlaceholder":541},[79,90394,90395,90397,90399],{"class":81,"line":695},[79,90396,53779],{"class":228},[79,90398,52630],{"class":232},[79,90400,53301],{"class":228},[19,90402,90403],{},[3569,90404],{"alt":57,"src":90405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[24023,90407,90409],{"id":90408},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[51,90411,90413],{"className":52628,"code":90412,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      uname: 'pink',\n      age: 18,\n      hobby: ['乒乓球', '足球'],\n      family: {\n        baby: '小pink'\n      }\n    }\n    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n    const o = JSON.parse(JSON.stringify(obj))\n    console.log(o)\n    o.family.baby = '123'\n    console.log(obj)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,90414,90415,90425,90439,90443,90451,90465,90485,90497,90505,90509,90517,90525,90535,90543,90551,90563,90567,90573,90577,90581,90586,90591,90596,90622,90630,90639,90647,90655,90663,90667],{"__ignoreMap":57},[79,90416,90417,90419,90421,90423],{"class":81,"line":82},[79,90418,53292],{"class":228},[79,90420,53295],{"class":232},[79,90422,53298],{"class":85},[79,90424,53301],{"class":228},[79,90426,90427,90429,90431,90433,90435,90437],{"class":81,"line":167},[79,90428,229],{"class":228},[79,90430,52630],{"class":232},[79,90432,53310],{"class":85},[79,90434,239],{"class":228},[79,90436,53315],{"class":89},[79,90438,53301],{"class":228},[79,90440,90441],{"class":81,"line":178},[79,90442,542],{"emptyLinePlaceholder":541},[79,90444,90445,90447,90449],{"class":81,"line":545},[79,90446,229],{"class":228},[79,90448,53328],{"class":232},[79,90450,53301],{"class":228},[79,90452,90453,90455,90457,90459,90461,90463],{"class":81,"line":550},[79,90454,54138],{"class":228},[79,90456,53338],{"class":232},[79,90458,53341],{"class":85},[79,90460,239],{"class":228},[79,90462,53346],{"class":89},[79,90464,53301],{"class":228},[79,90466,90467,90469,90471,90473,90475,90477,90479,90481,90483],{"class":81,"line":562},[79,90468,54138],{"class":228},[79,90470,53338],{"class":232},[79,90472,236],{"class":85},[79,90474,239],{"class":228},[79,90476,53385],{"class":89},[79,90478,53365],{"class":85},[79,90480,239],{"class":228},[79,90482,53392],{"class":89},[79,90484,53301],{"class":228},[79,90486,90487,90489,90491,90493,90495],{"class":81,"line":568},[79,90488,54138],{"class":228},[79,90490,53401],{"class":232},[79,90492,53404],{"class":228},[79,90494,53401],{"class":232},[79,90496,53301],{"class":228},[79,90498,90499,90501,90503],{"class":81,"line":574},[79,90500,53779],{"class":228},[79,90502,53328],{"class":232},[79,90504,53301],{"class":228},[79,90506,90507],{"class":81,"line":579},[79,90508,542],{"emptyLinePlaceholder":541},[79,90510,90511,90513,90515],{"class":81,"line":585},[79,90512,229],{"class":228},[79,90514,53794],{"class":232},[79,90516,53301],{"class":228},[79,90518,90519,90521,90523],{"class":81,"line":591},[79,90520,54138],{"class":228},[79,90522,53807],{"class":232},[79,90524,53301],{"class":228},[79,90526,90527,90529,90531,90533],{"class":81,"line":596},[79,90528,13256],{"class":448},[79,90530,71959],{"class":96},[79,90532,556],{"class":448},[79,90534,17604],{"class":228},[79,90536,90537,90539,90541],{"class":81,"line":602},[79,90538,73604],{"class":228},[79,90540,89797],{"class":89},[79,90542,33468],{"class":228},[79,90544,90545,90547,90549],{"class":81,"line":608},[79,90546,73614],{"class":228},[79,90548,2890],{"class":96},[79,90550,33468],{"class":228},[79,90552,90553,90555,90557,90559,90561],{"class":81,"line":614},[79,90554,89812],{"class":228},[79,90556,89815],{"class":89},[79,90558,1020],{"class":228},[79,90560,89820],{"class":89},[79,90562,89823],{"class":228},[79,90564,90565],{"class":81,"line":619},[79,90566,79860],{"class":228},[79,90568,90569,90571],{"class":81,"line":625},[79,90570,89832],{"class":228},[79,90572,89835],{"class":89},[79,90574,90575],{"class":81,"line":631},[79,90576,54391],{"class":228},[79,90578,90579],{"class":81,"line":637},[79,90580,4272],{"class":228},[79,90582,90583],{"class":81,"line":643},[79,90584,90585],{"class":2313},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[79,90587,90588],{"class":81,"line":649},[79,90589,90590],{"class":2313},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[79,90592,90593],{"class":81,"line":655},[79,90594,90595],{"class":2313},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[79,90597,90598,90600,90602,90604,90607,90609,90612,90614,90616,90618,90620],{"class":81,"line":660},[79,90599,13256],{"class":448},[79,90601,89850],{"class":96},[79,90603,556],{"class":448},[79,90605,90606],{"class":96}," JSON",[79,90608,2798],{"class":228},[79,90610,90611],{"class":85},"parse",[79,90613,455],{"class":228},[79,90615,73652],{"class":96},[79,90617,2798],{"class":228},[79,90619,73657],{"class":85},[79,90621,73660],{"class":228},[79,90623,90624,90626,90628],{"class":81,"line":666},[79,90625,75741],{"class":228},[79,90627,60236],{"class":85},[79,90629,90042],{"class":228},[79,90631,90632,90634,90636],{"class":81,"line":672},[79,90633,90360],{"class":228},[79,90635,239],{"class":448},[79,90637,90638],{"class":89}," '123'\n",[79,90640,90641,90643,90645],{"class":81,"line":678},[79,90642,75741],{"class":228},[79,90644,60236],{"class":85},[79,90646,72024],{"class":228},[79,90648,90649,90651,90653],{"class":81,"line":684},[79,90650,54410],{"class":228},[79,90652,53807],{"class":232},[79,90654,53301],{"class":228},[79,90656,90657,90659,90661],{"class":81,"line":690},[79,90658,53779],{"class":228},[79,90660,53794],{"class":232},[79,90662,53301],{"class":228},[79,90664,90665],{"class":81,"line":695},[79,90666,542],{"emptyLinePlaceholder":541},[79,90668,90669,90671,90673],{"class":81,"line":700},[79,90670,53779],{"class":228},[79,90672,52630],{"class":232},[79,90674,53301],{"class":228},[19,90676,90677],{},[3569,90678],{"alt":57,"src":90679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,90681,90683],{"id":90682},"_415-异常处理","4.15 异常处理",[26,90685,90686],{},[29,90687,90688],{},"throw抛异常",[19,90690,90691],{},[3569,90692],{"alt":57,"src":90693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[26,90695,90696],{"start":167},[29,90697,90698],{},"try\u002Fcatch 捕获错误信息",[19,90700,90701],{},[3569,90702],{"alt":57,"src":90703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[51,90705,90707],{"className":52628,"code":90706,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cp>123\u003C\u002Fp>\n  \u003Cscript>\n    function fn() {\n      try {\n        \u002F\u002F 可能发生错误的代码  要写到try中\n        const p = document.querySelector('.p')\n        p.style.color = 'red'\n      } catch (err) {\n        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n        console.log(err.message)\n        \u002F\u002F 想要中断程序，需要加return\n        \u002F\u002F return\n        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n        throw new Error('你看看，选择器错误了吧')\n      }\n      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n      finally {\n        alert('弹出对话框')\n      }\n      console.log(11)\n\n    }\n    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,90708,90709,90719,90733,90737,90745,90759,90779,90791,90799,90803,90811,90823,90831,90840,90847,90852,90871,90880,90891,90896,90906,90911,90916,90921,90938,90942,90947,90954,90966,90970,90982,90986,90990,90995,91000,91007,91015,91023,91027],{"__ignoreMap":57},[79,90710,90711,90713,90715,90717],{"class":81,"line":82},[79,90712,53292],{"class":228},[79,90714,53295],{"class":232},[79,90716,53298],{"class":85},[79,90718,53301],{"class":228},[79,90720,90721,90723,90725,90727,90729,90731],{"class":81,"line":167},[79,90722,229],{"class":228},[79,90724,52630],{"class":232},[79,90726,53310],{"class":85},[79,90728,239],{"class":228},[79,90730,53315],{"class":89},[79,90732,53301],{"class":228},[79,90734,90735],{"class":81,"line":178},[79,90736,542],{"emptyLinePlaceholder":541},[79,90738,90739,90741,90743],{"class":81,"line":545},[79,90740,229],{"class":228},[79,90742,53328],{"class":232},[79,90744,53301],{"class":228},[79,90746,90747,90749,90751,90753,90755,90757],{"class":81,"line":550},[79,90748,54138],{"class":228},[79,90750,53338],{"class":232},[79,90752,53341],{"class":85},[79,90754,239],{"class":228},[79,90756,53346],{"class":89},[79,90758,53301],{"class":228},[79,90760,90761,90763,90765,90767,90769,90771,90773,90775,90777],{"class":81,"line":562},[79,90762,54138],{"class":228},[79,90764,53338],{"class":232},[79,90766,236],{"class":85},[79,90768,239],{"class":228},[79,90770,53385],{"class":89},[79,90772,53365],{"class":85},[79,90774,239],{"class":228},[79,90776,53392],{"class":89},[79,90778,53301],{"class":228},[79,90780,90781,90783,90785,90787,90789],{"class":81,"line":568},[79,90782,54138],{"class":228},[79,90784,53401],{"class":232},[79,90786,53404],{"class":228},[79,90788,53401],{"class":232},[79,90790,53301],{"class":228},[79,90792,90793,90795,90797],{"class":81,"line":574},[79,90794,53779],{"class":228},[79,90796,53328],{"class":232},[79,90798,53301],{"class":228},[79,90800,90801],{"class":81,"line":579},[79,90802,542],{"emptyLinePlaceholder":541},[79,90804,90805,90807,90809],{"class":81,"line":585},[79,90806,229],{"class":228},[79,90808,53794],{"class":232},[79,90810,53301],{"class":228},[79,90812,90813,90815,90817,90819,90821],{"class":81,"line":591},[79,90814,54138],{"class":228},[79,90816,19],{"class":232},[79,90818,55485],{"class":228},[79,90820,19],{"class":232},[79,90822,53301],{"class":228},[79,90824,90825,90827,90829],{"class":81,"line":596},[79,90826,54138],{"class":228},[79,90828,53807],{"class":232},[79,90830,53301],{"class":228},[79,90832,90833,90835,90838],{"class":81,"line":602},[79,90834,72072],{"class":448},[79,90836,90837],{"class":85}," fn",[79,90839,12888],{"class":228},[79,90841,90842,90845],{"class":81,"line":608},[79,90843,90844],{"class":448},"      try",[79,90846,17604],{"class":228},[79,90848,90849],{"class":81,"line":614},[79,90850,90851],{"class":2313},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[79,90853,90854,90856,90858,90860,90862,90864,90866,90869],{"class":81,"line":619},[79,90855,63259],{"class":448},[79,90857,8890],{"class":96},[79,90859,556],{"class":448},[79,90861,56385],{"class":228},[79,90863,56388],{"class":85},[79,90865,455],{"class":228},[79,90867,90868],{"class":89},"'.p'",[79,90870,850],{"class":228},[79,90872,90873,90876,90878],{"class":81,"line":625},[79,90874,90875],{"class":228},"        p.style.color ",[79,90877,239],{"class":448},[79,90879,69039],{"class":89},[79,90881,90882,90885,90888],{"class":81,"line":631},[79,90883,90884],{"class":228},"      } ",[79,90886,90887],{"class":448},"catch",[79,90889,90890],{"class":228}," (err) {\n",[79,90892,90893],{"class":81,"line":637},[79,90894,90895],{"class":2313},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[79,90897,90898,90901,90903],{"class":81,"line":643},[79,90899,90900],{"class":228},"        console.",[79,90902,60236],{"class":85},[79,90904,90905],{"class":228},"(err.message)\n",[79,90907,90908],{"class":81,"line":649},[79,90909,90910],{"class":2313},"        \u002F\u002F 想要中断程序，需要加return\n",[79,90912,90913],{"class":81,"line":655},[79,90914,90915],{"class":2313},"        \u002F\u002F return\n",[79,90917,90918],{"class":81,"line":660},[79,90919,90920],{"class":2313},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[79,90922,90923,90926,90928,90931,90933,90936],{"class":81,"line":666},[79,90924,90925],{"class":448},"        throw",[79,90927,13613],{"class":448},[79,90929,90930],{"class":85}," Error",[79,90932,455],{"class":228},[79,90934,90935],{"class":89},"'你看看，选择器错误了吧'",[79,90937,850],{"class":228},[79,90939,90940],{"class":81,"line":672},[79,90941,54391],{"class":228},[79,90943,90944],{"class":81,"line":678},[79,90945,90946],{"class":2313},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[79,90948,90949,90952],{"class":81,"line":684},[79,90950,90951],{"class":448},"      finally",[79,90953,17604],{"class":228},[79,90955,90956,90959,90961,90964],{"class":81,"line":690},[79,90957,90958],{"class":85},"        alert",[79,90960,455],{"class":228},[79,90962,90963],{"class":89},"'弹出对话框'",[79,90965,850],{"class":228},[79,90967,90968],{"class":81,"line":695},[79,90969,54391],{"class":228},[79,90971,90972,90974,90976,90978,90980],{"class":81,"line":700},[79,90973,60233],{"class":228},[79,90975,60236],{"class":85},[79,90977,455],{"class":228},[79,90979,2714],{"class":96},[79,90981,850],{"class":228},[79,90983,90984],{"class":81,"line":712},[79,90985,542],{"emptyLinePlaceholder":541},[79,90987,90988],{"class":81,"line":721},[79,90989,4272],{"class":228},[79,90991,90992],{"class":81,"line":726},[79,90993,90994],{"class":2313},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[79,90996,90997],{"class":81,"line":731},[79,90998,90999],{"class":2313},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[79,91001,91002,91005],{"class":81,"line":748},[79,91003,91004],{"class":85},"    fn",[79,91006,4061],{"class":228},[79,91008,91009,91011,91013],{"class":81,"line":765},[79,91010,54410],{"class":228},[79,91012,53807],{"class":232},[79,91014,53301],{"class":228},[79,91016,91017,91019,91021],{"class":81,"line":780},[79,91018,53779],{"class":228},[79,91020,53794],{"class":232},[79,91022,53301],{"class":228},[79,91024,91025],{"class":81,"line":811},[79,91026,542],{"emptyLinePlaceholder":541},[79,91028,91029,91031,91033],{"class":81,"line":816},[79,91030,53779],{"class":228},[79,91032,52630],{"class":232},[79,91034,53301],{"class":228},[19,91036,91037],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[26,91039,91040],{"start":178},[29,91041,91042],{},"debugger",[19,91044,91045],{},[3569,91046],{"alt":57,"src":91047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,91049,91050],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,91052,91054],{"id":91053},"_416-处理this","4.16 处理this",[339,91056,91058],{"id":91057},"_4161-this的指向","4.16.1 this的指向",[26,91060,91061],{},[29,91062,91063],{},"普通函数的this",[19,91065,91066],{},[3569,91067],{"alt":57,"src":91068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[26,91070,91071],{"start":167},[29,91072,91073],{},"箭头函数的this",[19,91075,91076],{},[3569,91077],{"alt":57,"src":91078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,91080,91081],{},[3569,91082],{"alt":57,"src":91083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,91085,91086],{},[3569,91087],{"alt":57,"src":91088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[339,91090,91092],{"id":91091},"_4162-this的改变","4.16.2 this的改变",[19,91094,91095],{},"call() apply() bind()",[26,91097,91098],{},[29,91099,91100],{},"call()",[19,91102,91103],{},[3569,91104],{"alt":57,"src":91105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,91107,91108],{},"两个作用：①调用函数；②改变this指向",[51,91110,91112],{"className":219,"code":91111,"language":221,"meta":57,"style":57},"\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      uname: 'pink'\n    }\n    function fn(x, y) {\n      console.log(this)  \u002F\u002Fwindow\n      console.log(x + y)\n    }\n    fn.call(obj, 1, 2)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[59,91113,91114,91122,91130,91134,91139,91143,91148,91153,91158,91162,91167,91175],{"__ignoreMap":57},[79,91115,91116,91118,91120],{"class":81,"line":82},[79,91117,229],{"class":228},[79,91119,53794],{"class":232},[79,91121,53301],{"class":228},[79,91123,91124,91126,91128],{"class":81,"line":167},[79,91125,54138],{"class":228},[79,91127,53807],{"class":232},[79,91129,53301],{"class":228},[79,91131,91132],{"class":81,"line":178},[79,91133,73511],{"class":228},[79,91135,91136],{"class":81,"line":545},[79,91137,91138],{"class":228},"      uname: 'pink'\n",[79,91140,91141],{"class":81,"line":550},[79,91142,4272],{"class":228},[79,91144,91145],{"class":81,"line":562},[79,91146,91147],{"class":228},"    function fn(x, y) {\n",[79,91149,91150],{"class":81,"line":568},[79,91151,91152],{"class":228},"      console.log(this)  \u002F\u002Fwindow\n",[79,91154,91155],{"class":81,"line":574},[79,91156,91157],{"class":228},"      console.log(x + y)\n",[79,91159,91160],{"class":81,"line":579},[79,91161,4272],{"class":228},[79,91163,91164],{"class":81,"line":585},[79,91165,91166],{"class":228},"    fn.call(obj, 1, 2)\n",[79,91168,91169,91171,91173],{"class":81,"line":591},[79,91170,54410],{"class":228},[79,91172,53807],{"class":232},[79,91174,53301],{"class":228},[79,91176,91177,91179,91181],{"class":81,"line":596},[79,91178,53779],{"class":228},[79,91180,53794],{"class":232},[79,91182,53301],{"class":228},[19,91184,91185],{},[3569,91186],{"alt":57,"src":91187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[26,91189,91190],{"start":167},[29,91191,91192],{},"apply()",[19,91194,91195],{},[3569,91196],{"alt":57,"src":91197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,91199,91108],{},[19,91201,91202],{},"call传递的是普通参数，而apply必须传递的是数组",[51,91204,91206],{"className":52628,"code":91205,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      age: 18\n    }\n    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n    function fn(x, y) {\n      console.log(this)\n      console.log(x + y)\n    }\n    \u002F\u002F fn.apply(this指向谁, 数组参数)\n    fn.apply(obj, [1, 2])\n    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n\n    \u002F\u002F 使用场景：求数组最大值\n    \u002F\u002F const max = Math.max(1, 2, 3)\n    \u002F\u002F console.log(max)   \u002F\u002F3\n    \u002F\u002F 指向空或者Math都是可以的\n    const arr = [100, 44, 77]\n    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n    const max = Math.max.apply(Math, arr)\n    const min = Math.min.apply(Math, arr)\n    console.log(max, min)     \u002F\u002F100,4\n\n    \u002F\u002F 求最大值的另一种方式:展开运算符\n    console.log(Max.max(...arr))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,91207,91208,91218,91232,91236,91244,91258,91278,91290,91298,91302,91310,91318,91328,91335,91339,91344,91360,91372,91386,91390,91395,91414,91419,91423,91428,91433,91441,91446,91468,91473,91489,91505,91517,91521,91526,91545,91553,91561,91565],{"__ignoreMap":57},[79,91209,91210,91212,91214,91216],{"class":81,"line":82},[79,91211,53292],{"class":228},[79,91213,53295],{"class":232},[79,91215,53298],{"class":85},[79,91217,53301],{"class":228},[79,91219,91220,91222,91224,91226,91228,91230],{"class":81,"line":167},[79,91221,229],{"class":228},[79,91223,52630],{"class":232},[79,91225,53310],{"class":85},[79,91227,239],{"class":228},[79,91229,53315],{"class":89},[79,91231,53301],{"class":228},[79,91233,91234],{"class":81,"line":178},[79,91235,542],{"emptyLinePlaceholder":541},[79,91237,91238,91240,91242],{"class":81,"line":545},[79,91239,229],{"class":228},[79,91241,53328],{"class":232},[79,91243,53301],{"class":228},[79,91245,91246,91248,91250,91252,91254,91256],{"class":81,"line":550},[79,91247,54138],{"class":228},[79,91249,53338],{"class":232},[79,91251,53341],{"class":85},[79,91253,239],{"class":228},[79,91255,53346],{"class":89},[79,91257,53301],{"class":228},[79,91259,91260,91262,91264,91266,91268,91270,91272,91274,91276],{"class":81,"line":562},[79,91261,54138],{"class":228},[79,91263,53338],{"class":232},[79,91265,236],{"class":85},[79,91267,239],{"class":228},[79,91269,53385],{"class":89},[79,91271,53365],{"class":85},[79,91273,239],{"class":228},[79,91275,53392],{"class":89},[79,91277,53301],{"class":228},[79,91279,91280,91282,91284,91286,91288],{"class":81,"line":568},[79,91281,54138],{"class":228},[79,91283,53401],{"class":232},[79,91285,53404],{"class":228},[79,91287,53401],{"class":232},[79,91289,53301],{"class":228},[79,91291,91292,91294,91296],{"class":81,"line":574},[79,91293,53779],{"class":228},[79,91295,53328],{"class":232},[79,91297,53301],{"class":228},[79,91299,91300],{"class":81,"line":579},[79,91301,542],{"emptyLinePlaceholder":541},[79,91303,91304,91306,91308],{"class":81,"line":585},[79,91305,229],{"class":228},[79,91307,53794],{"class":232},[79,91309,53301],{"class":228},[79,91311,91312,91314,91316],{"class":81,"line":591},[79,91313,54138],{"class":228},[79,91315,53807],{"class":232},[79,91317,53301],{"class":228},[79,91319,91320,91322,91324,91326],{"class":81,"line":596},[79,91321,13256],{"class":448},[79,91323,71959],{"class":96},[79,91325,556],{"class":448},[79,91327,17604],{"class":228},[79,91329,91330,91332],{"class":81,"line":602},[79,91331,73614],{"class":228},[79,91333,91334],{"class":96},"18\n",[79,91336,91337],{"class":81,"line":608},[79,91338,4272],{"class":228},[79,91340,91341],{"class":81,"line":614},[79,91342,91343],{"class":2313},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[79,91345,91346,91348,91350,91352,91354,91356,91358],{"class":81,"line":619},[79,91347,72072],{"class":448},[79,91349,90837],{"class":85},[79,91351,455],{"class":228},[79,91353,3060],{"class":7284},[79,91355,1020],{"class":228},[79,91357,3085],{"class":7284},[79,91359,14476],{"class":228},[79,91361,91362,91364,91366,91368,91370],{"class":81,"line":625},[79,91363,60233],{"class":228},[79,91365,60236],{"class":85},[79,91367,455],{"class":228},[79,91369,88980],{"class":96},[79,91371,850],{"class":228},[79,91373,91374,91376,91378,91381,91383],{"class":81,"line":631},[79,91375,60233],{"class":228},[79,91377,60236],{"class":85},[79,91379,91380],{"class":228},"(x ",[79,91382,995],{"class":448},[79,91384,91385],{"class":228}," y)\n",[79,91387,91388],{"class":81,"line":637},[79,91389,4272],{"class":228},[79,91391,91392],{"class":81,"line":643},[79,91393,91394],{"class":2313},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[79,91396,91397,91400,91403,91406,91408,91410,91412],{"class":81,"line":649},[79,91398,91399],{"class":228},"    fn.",[79,91401,91402],{"class":85},"apply",[79,91404,91405],{"class":228},"(obj, [",[79,91407,775],{"class":96},[79,91409,1020],{"class":228},[79,91411,2331],{"class":96},[79,91413,6727],{"class":228},[79,91415,91416],{"class":81,"line":655},[79,91417,91418],{"class":2313},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[79,91420,91421],{"class":81,"line":660},[79,91422,542],{"emptyLinePlaceholder":541},[79,91424,91425],{"class":81,"line":666},[79,91426,91427],{"class":2313},"    \u002F\u002F 使用场景：求数组最大值\n",[79,91429,91430],{"class":81,"line":672},[79,91431,91432],{"class":2313},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[79,91434,91435,91438],{"class":81,"line":678},[79,91436,91437],{"class":2313},"    \u002F\u002F console.log(max)",[79,91439,91440],{"class":2313},"   \u002F\u002F3\n",[79,91442,91443],{"class":81,"line":684},[79,91444,91445],{"class":2313},"    \u002F\u002F 指向空或者Math都是可以的\n",[79,91447,91448,91450,91452,91454,91456,91458,91460,91462,91464,91466],{"class":81,"line":690},[79,91449,13256],{"class":448},[79,91451,59684],{"class":96},[79,91453,556],{"class":448},[79,91455,54220],{"class":228},[79,91457,2555],{"class":96},[79,91459,1020],{"class":228},[79,91461,2745],{"class":96},[79,91463,1020],{"class":228},[79,91465,2775],{"class":96},[79,91467,762],{"class":228},[79,91469,91470],{"class":81,"line":695},[79,91471,91472],{"class":2313},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[79,91474,91475,91477,91479,91481,91484,91486],{"class":81,"line":700},[79,91476,13256],{"class":448},[79,91478,8018],{"class":96},[79,91480,556],{"class":448},[79,91482,91483],{"class":228}," Math.max.",[79,91485,91402],{"class":85},[79,91487,91488],{"class":228},"(Math, arr)\n",[79,91490,91491,91493,91496,91498,91501,91503],{"class":81,"line":712},[79,91492,13256],{"class":448},[79,91494,91495],{"class":96}," min",[79,91497,556],{"class":448},[79,91499,91500],{"class":228}," Math.min.",[79,91502,91402],{"class":85},[79,91504,91488],{"class":228},[79,91506,91507,91509,91511,91514],{"class":81,"line":721},[79,91508,75741],{"class":228},[79,91510,60236],{"class":85},[79,91512,91513],{"class":228},"(max, min)     ",[79,91515,91516],{"class":2313},"\u002F\u002F100,4\n",[79,91518,91519],{"class":81,"line":726},[79,91520,542],{"emptyLinePlaceholder":541},[79,91522,91523],{"class":81,"line":731},[79,91524,91525],{"class":2313},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[79,91527,91528,91530,91532,91535,91537,91539,91542],{"class":81,"line":748},[79,91529,75741],{"class":228},[79,91531,60236],{"class":85},[79,91533,91534],{"class":228},"(Max.",[79,91536,8082],{"class":85},[79,91538,455],{"class":228},[79,91540,91541],{"class":448},"...",[79,91543,91544],{"class":228},"arr))\n",[79,91546,91547,91549,91551],{"class":81,"line":765},[79,91548,54410],{"class":228},[79,91550,53807],{"class":232},[79,91552,53301],{"class":228},[79,91554,91555,91557,91559],{"class":81,"line":780},[79,91556,53779],{"class":228},[79,91558,53794],{"class":232},[79,91560,53301],{"class":228},[79,91562,91563],{"class":81,"line":811},[79,91564,542],{"emptyLinePlaceholder":541},[79,91566,91567,91569,91571],{"class":81,"line":816},[79,91568,53779],{"class":228},[79,91570,52630],{"class":232},[79,91572,53301],{"class":228},[19,91574,91575],{},[3569,91576],{"alt":57,"src":91577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[26,91579,91580],{"start":178},[29,91581,91582],{},"bind()",[19,91584,91585],{},[3569,91586],{"alt":57,"src":91587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,91589,91590],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,91592,91593],{},"bind的语法跟call很相似",[51,91595,91597],{"className":219,"code":91596,"language":221,"meta":57,"style":57},"\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      age: 18\n    }\n    function fn() {\n      console.log(this)\n    }\n    \u002F\u002F 1.bind 不会调用函数\n    \u002F\u002F 2.bind能改变this的指向\n    fn.bind()\n    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n    const fun = fn.bind(obj)\n    \u002F\u002F console.log(fun)\n    \u002F\u002F 调用,查看this的指向\n    fun()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[59,91598,91599,91607,91615,91619,91624,91628,91632,91637,91641,91646,91651,91656,91661,91666,91671,91676,91680,91688],{"__ignoreMap":57},[79,91600,91601,91603,91605],{"class":81,"line":82},[79,91602,229],{"class":228},[79,91604,53794],{"class":232},[79,91606,53301],{"class":228},[79,91608,91609,91611,91613],{"class":81,"line":167},[79,91610,54138],{"class":228},[79,91612,53807],{"class":232},[79,91614,53301],{"class":228},[79,91616,91617],{"class":81,"line":178},[79,91618,73511],{"class":228},[79,91620,91621],{"class":81,"line":545},[79,91622,91623],{"class":228},"      age: 18\n",[79,91625,91626],{"class":81,"line":550},[79,91627,4272],{"class":228},[79,91629,91630],{"class":81,"line":562},[79,91631,79131],{"class":228},[79,91633,91634],{"class":81,"line":568},[79,91635,91636],{"class":228},"      console.log(this)\n",[79,91638,91639],{"class":81,"line":574},[79,91640,4272],{"class":228},[79,91642,91643],{"class":81,"line":579},[79,91644,91645],{"class":228},"    \u002F\u002F 1.bind 不会调用函数\n",[79,91647,91648],{"class":81,"line":585},[79,91649,91650],{"class":228},"    \u002F\u002F 2.bind能改变this的指向\n",[79,91652,91653],{"class":81,"line":591},[79,91654,91655],{"class":228},"    fn.bind()\n",[79,91657,91658],{"class":81,"line":596},[79,91659,91660],{"class":228},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[79,91662,91663],{"class":81,"line":602},[79,91664,91665],{"class":228},"    const fun = fn.bind(obj)\n",[79,91667,91668],{"class":81,"line":608},[79,91669,91670],{"class":228},"    \u002F\u002F console.log(fun)\n",[79,91672,91673],{"class":81,"line":614},[79,91674,91675],{"class":228},"    \u002F\u002F 调用,查看this的指向\n",[79,91677,91678],{"class":81,"line":619},[79,91679,54644],{"class":228},[79,91681,91682,91684,91686],{"class":81,"line":625},[79,91683,54410],{"class":228},[79,91685,53807],{"class":232},[79,91687,53301],{"class":228},[79,91689,91690,91692,91694],{"class":81,"line":631},[79,91691,53779],{"class":228},[79,91693,53794],{"class":232},[79,91695,53301],{"class":228},[19,91697,91698],{},[3569,91699],{"alt":57,"src":91700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[26,91702,91703],{"start":545},[29,91704,91705],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[51,91707,91709],{"className":219,"code":91708,"language":221,"meta":57,"style":57},"\u003Cbody>\n  \u003Cbutton>禁用\u003C\u002Fbutton>\n  \u003Cscript>\n    const btn = document.querySelector('button')\n    btn.addEventListener('click', function () {\n      this.disabled = true\n      \u002F\u002F 定时器是window进行调用的\n      setTimeout(function () {\n        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n        this.disabled = false\n      }.bind(this), 2000)\n      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[59,91710,91711,91719,91732,91740,91745,91749,91754,91759,91764,91769,91774,91779,91784,91789,91793,91801],{"__ignoreMap":57},[79,91712,91713,91715,91717],{"class":81,"line":82},[79,91714,229],{"class":228},[79,91716,53794],{"class":232},[79,91718,53301],{"class":228},[79,91720,91721,91723,91725,91728,91730],{"class":81,"line":167},[79,91722,54138],{"class":228},[79,91724,55877],{"class":232},[79,91726,91727],{"class":228},">禁用\u003C\u002F",[79,91729,55877],{"class":232},[79,91731,53301],{"class":228},[79,91733,91734,91736,91738],{"class":81,"line":178},[79,91735,54138],{"class":228},[79,91737,53807],{"class":232},[79,91739,53301],{"class":228},[79,91741,91742],{"class":81,"line":545},[79,91743,91744],{"class":228},"    const btn = document.querySelector('button')\n",[79,91746,91747],{"class":81,"line":550},[79,91748,61005],{"class":228},[79,91750,91751],{"class":81,"line":562},[79,91752,91753],{"class":228},"      this.disabled = true\n",[79,91755,91756],{"class":81,"line":568},[79,91757,91758],{"class":228},"      \u002F\u002F 定时器是window进行调用的\n",[79,91760,91761],{"class":81,"line":574},[79,91762,91763],{"class":228},"      setTimeout(function () {\n",[79,91765,91766],{"class":81,"line":579},[79,91767,91768],{"class":228},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[79,91770,91771],{"class":81,"line":585},[79,91772,91773],{"class":228},"        this.disabled = false\n",[79,91775,91776],{"class":81,"line":591},[79,91777,91778],{"class":228},"      }.bind(this), 2000)\n",[79,91780,91781],{"class":81,"line":596},[79,91782,91783],{"class":228},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[79,91785,91786],{"class":81,"line":602},[79,91787,91788],{"class":228},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[79,91790,91791],{"class":81,"line":608},[79,91792,35458],{"class":228},[79,91794,91795,91797,91799],{"class":81,"line":614},[79,91796,54410],{"class":228},[79,91798,53807],{"class":232},[79,91800,53301],{"class":228},[79,91802,91803,91805,91807],{"class":81,"line":619},[79,91804,53779],{"class":228},[79,91806,53794],{"class":232},[79,91808,53301],{"class":228},[26,91810,91811],{"start":550},[29,91812,23978],{},[19,91814,91815],{},[3569,91816],{"alt":57,"src":91817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,91819,91821],{"id":91820},"_417-性能优化","4.17 性能优化",[339,91823,91825],{"id":91824},"_4171-防抖","4.17.1 防抖",[19,91827,91828],{},[3569,91829],{"alt":57,"src":91830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,91832,91833],{},[2398,91834,91835],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,91837,91838],{},"防抖实现方式：",[3246,91840,91841],{},[29,91842,91843],{},"lodash 提供了防抖处理",[19,91845,91846],{},"_.debounce(func,[wait=0],[options={}])",[19,91848,91849],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[51,91851,91853],{"className":52628,"code":91852,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .box {\n      box-sizing: border-box;\n      width: 200px;\n      height: 200px;\n      background-color: gray;\n      font-size: 25px;\n      color: #fff;\n      text-align: center;\n      padding-top: 5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\u003C\u002Fdiv>\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const box = document.querySelector('.box')\n    let i = 0\n    function mouseMove() {\n      box.innerHTML = i++\n      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n    }\n    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n    box.addEventListener('mousemove', _.debounce(mouseMove, 500))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,91854,91855,91865,91879,91883,91891,91905,91925,91937,91945,91951,91961,91973,91985,91996,92008,92018,92028,92041,92045,92053,92061,92065,92073,92091,92109,92117,92136,92146,92155,92166,92171,92175,92180,92185,92190,92215,92223,92231,92235],{"__ignoreMap":57},[79,91856,91857,91859,91861,91863],{"class":81,"line":82},[79,91858,53292],{"class":228},[79,91860,53295],{"class":232},[79,91862,53298],{"class":85},[79,91864,53301],{"class":228},[79,91866,91867,91869,91871,91873,91875,91877],{"class":81,"line":167},[79,91868,229],{"class":228},[79,91870,52630],{"class":232},[79,91872,53310],{"class":85},[79,91874,239],{"class":228},[79,91876,53315],{"class":89},[79,91878,53301],{"class":228},[79,91880,91881],{"class":81,"line":178},[79,91882,542],{"emptyLinePlaceholder":541},[79,91884,91885,91887,91889],{"class":81,"line":545},[79,91886,229],{"class":228},[79,91888,53328],{"class":232},[79,91890,53301],{"class":228},[79,91892,91893,91895,91897,91899,91901,91903],{"class":81,"line":550},[79,91894,54138],{"class":228},[79,91896,53338],{"class":232},[79,91898,53341],{"class":85},[79,91900,239],{"class":228},[79,91902,53346],{"class":89},[79,91904,53301],{"class":228},[79,91906,91907,91909,91911,91913,91915,91917,91919,91921,91923],{"class":81,"line":562},[79,91908,54138],{"class":228},[79,91910,53338],{"class":232},[79,91912,236],{"class":85},[79,91914,239],{"class":228},[79,91916,53385],{"class":89},[79,91918,53365],{"class":85},[79,91920,239],{"class":228},[79,91922,53392],{"class":89},[79,91924,53301],{"class":228},[79,91926,91927,91929,91931,91933,91935],{"class":81,"line":568},[79,91928,54138],{"class":228},[79,91930,53401],{"class":232},[79,91932,53404],{"class":228},[79,91934,53401],{"class":232},[79,91936,53301],{"class":228},[79,91938,91939,91941,91943],{"class":81,"line":574},[79,91940,54138],{"class":228},[79,91942,2159],{"class":232},[79,91944,53301],{"class":228},[79,91946,91947,91949],{"class":81,"line":579},[79,91948,56741],{"class":85},[79,91950,17604],{"class":228},[79,91952,91953,91955,91957,91959],{"class":81,"line":585},[79,91954,74584],{"class":96},[79,91956,53431],{"class":228},[79,91958,62494],{"class":96},[79,91960,3400],{"class":228},[79,91962,91963,91965,91967,91969,91971],{"class":81,"line":591},[79,91964,56760],{"class":96},[79,91966,53431],{"class":228},[79,91968,3817],{"class":96},[79,91970,53486],{"class":448},[79,91972,3400],{"class":228},[79,91974,91975,91977,91979,91981,91983],{"class":81,"line":596},[79,91976,56774],{"class":96},[79,91978,53431],{"class":228},[79,91980,3817],{"class":96},[79,91982,53486],{"class":448},[79,91984,3400],{"class":228},[79,91986,91987,91989,91991,91994],{"class":81,"line":602},[79,91988,56873],{"class":96},[79,91990,53431],{"class":228},[79,91992,91993],{"class":96},"gray",[79,91995,3400],{"class":228},[79,91997,91998,92000,92002,92004,92006],{"class":81,"line":608},[79,91999,56911],{"class":96},[79,92001,53431],{"class":228},[79,92003,3065],{"class":96},[79,92005,53486],{"class":448},[79,92007,3400],{"class":228},[79,92009,92010,92012,92014,92016],{"class":81,"line":614},[79,92011,59405],{"class":96},[79,92013,53431],{"class":228},[79,92015,62831],{"class":96},[79,92017,3400],{"class":228},[79,92019,92020,92022,92024,92026],{"class":81,"line":619},[79,92021,59275],{"class":96},[79,92023,53431],{"class":228},[79,92025,53586],{"class":96},[79,92027,3400],{"class":228},[79,92029,92030,92033,92035,92037,92039],{"class":81,"line":625},[79,92031,92032],{"class":96},"      padding-top",[79,92034,53431],{"class":228},[79,92036,2563],{"class":96},[79,92038,53486],{"class":448},[79,92040,3400],{"class":228},[79,92042,92043],{"class":81,"line":631},[79,92044,4272],{"class":228},[79,92046,92047,92049,92051],{"class":81,"line":637},[79,92048,54410],{"class":228},[79,92050,2159],{"class":232},[79,92052,53301],{"class":228},[79,92054,92055,92057,92059],{"class":81,"line":643},[79,92056,53779],{"class":228},[79,92058,53328],{"class":232},[79,92060,53301],{"class":228},[79,92062,92063],{"class":81,"line":649},[79,92064,542],{"emptyLinePlaceholder":541},[79,92066,92067,92069,92071],{"class":81,"line":655},[79,92068,229],{"class":228},[79,92070,53794],{"class":232},[79,92072,53301],{"class":228},[79,92074,92075,92077,92079,92081,92083,92085,92087,92089],{"class":81,"line":660},[79,92076,54138],{"class":228},[79,92078,53605],{"class":232},[79,92080,55477],{"class":85},[79,92082,239],{"class":228},[79,92084,55482],{"class":89},[79,92086,57303],{"class":228},[79,92088,53605],{"class":232},[79,92090,53301],{"class":228},[79,92092,92093,92095,92097,92099,92101,92103,92105,92107],{"class":81,"line":666},[79,92094,54138],{"class":228},[79,92096,53807],{"class":232},[79,92098,57228],{"class":85},[79,92100,239],{"class":228},[79,92102,90261],{"class":89},[79,92104,57303],{"class":228},[79,92106,53807],{"class":232},[79,92108,53301],{"class":228},[79,92110,92111,92113,92115],{"class":81,"line":672},[79,92112,54138],{"class":228},[79,92114,53807],{"class":232},[79,92116,53301],{"class":228},[79,92118,92119,92121,92123,92125,92127,92129,92131,92134],{"class":81,"line":678},[79,92120,13256],{"class":448},[79,92122,88920],{"class":96},[79,92124,556],{"class":448},[79,92126,56385],{"class":228},[79,92128,56388],{"class":85},[79,92130,455],{"class":228},[79,92132,92133],{"class":89},"'.box'",[79,92135,850],{"class":228},[79,92137,92138,92140,92142,92144],{"class":81,"line":684},[79,92139,54213],{"class":448},[79,92141,11493],{"class":228},[79,92143,239],{"class":448},[79,92145,49328],{"class":96},[79,92147,92148,92150,92153],{"class":81,"line":690},[79,92149,72072],{"class":448},[79,92151,92152],{"class":85}," mouseMove",[79,92154,12888],{"class":228},[79,92156,92157,92160,92162,92164],{"class":81,"line":695},[79,92158,92159],{"class":228},"      box.innerHTML ",[79,92161,239],{"class":448},[79,92163,5107],{"class":228},[79,92165,4778],{"class":448},[79,92167,92168],{"class":81,"line":700},[79,92169,92170],{"class":2313},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[79,92172,92173],{"class":81,"line":712},[79,92174,4272],{"class":228},[79,92176,92177],{"class":81,"line":721},[79,92178,92179],{"class":2313},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[79,92181,92182],{"class":81,"line":726},[79,92183,92184],{"class":2313},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[79,92186,92187],{"class":81,"line":731},[79,92188,92189],{"class":2313},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[79,92191,92192,92195,92197,92199,92202,92205,92208,92211,92213],{"class":81,"line":748},[79,92193,92194],{"class":228},"    box.",[79,92196,59802],{"class":85},[79,92198,455],{"class":228},[79,92200,92201],{"class":89},"'mousemove'",[79,92203,92204],{"class":228},", _.",[79,92206,92207],{"class":85},"debounce",[79,92209,92210],{"class":228},"(mouseMove, ",[79,92212,67062],{"class":96},[79,92214,1150],{"class":228},[79,92216,92217,92219,92221],{"class":81,"line":765},[79,92218,54410],{"class":228},[79,92220,53807],{"class":232},[79,92222,53301],{"class":228},[79,92224,92225,92227,92229],{"class":81,"line":780},[79,92226,53779],{"class":228},[79,92228,53794],{"class":232},[79,92230,53301],{"class":228},[79,92232,92233],{"class":81,"line":811},[79,92234,542],{"emptyLinePlaceholder":541},[79,92236,92237,92239,92241],{"class":81,"line":816},[79,92238,53779],{"class":228},[79,92240,52630],{"class":232},[79,92242,53301],{"class":228},[3246,92244,92245],{},[29,92246,92247],{},"手写一个防抖函数来处理",[19,92249,92250],{},"防抖的核心就是利用定时器来实现的：",[19,92252,92253],{},"①声明一个定时器变量",[19,92255,92256],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,92258,92259],{},"③如果没有定时器则开启定时器，记得存到变量里面",[51,92261,92263],{"className":52628,"code":92262,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .box {\n      box-sizing: border-box;\n      width: 200px;\n      height: 200px;\n      background-color: gray;\n      font-size: 25px;\n      color: #fff;\n      text-align: center;\n      padding-top: 5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\u003C\u002Fdiv>\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const box = document.querySelector('.box')\n    let i = 0\n    function mouseMove() {\n      box.innerHTML = i++\n      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n    }\n    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n    \u002F\u002F 手写防抖函数\n    \u002F\u002F 核心是利用延时器setTimeout来实现的\n    \u002F\u002F 1.声明定时器变量\n    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n    \u002F\u002F 4.定时器里面写函数调用\n    function debounce(fn, t) {\n      let timer\n      \u002F\u002F return 返回一个匿名函数\n      return function () {\n        \u002F\u002F 这里边写第二三四步\n        if (timer) clearTimeout(timer)\n        timer = setTimeout(function () {\n          fn() \u002F\u002F加小括号调用fn }, t)\n        }, t)\n      }\n    }\n    box.addEventListener('mousemove', debounce(mouseMove, 500))\n\n    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,92264,92265,92275,92289,92293,92301,92315,92335,92347,92355,92361,92371,92383,92395,92405,92417,92427,92437,92449,92453,92461,92469,92473,92481,92499,92517,92525,92543,92553,92561,92571,92575,92579,92583,92588,92593,92598,92603,92608,92613,92631,92638,92643,92651,92656,92669,92685,92695,92700,92704,92708,92728,92732,92737,92742,92747,92752,92760,92768,92772],{"__ignoreMap":57},[79,92266,92267,92269,92271,92273],{"class":81,"line":82},[79,92268,53292],{"class":228},[79,92270,53295],{"class":232},[79,92272,53298],{"class":85},[79,92274,53301],{"class":228},[79,92276,92277,92279,92281,92283,92285,92287],{"class":81,"line":167},[79,92278,229],{"class":228},[79,92280,52630],{"class":232},[79,92282,53310],{"class":85},[79,92284,239],{"class":228},[79,92286,53315],{"class":89},[79,92288,53301],{"class":228},[79,92290,92291],{"class":81,"line":178},[79,92292,542],{"emptyLinePlaceholder":541},[79,92294,92295,92297,92299],{"class":81,"line":545},[79,92296,229],{"class":228},[79,92298,53328],{"class":232},[79,92300,53301],{"class":228},[79,92302,92303,92305,92307,92309,92311,92313],{"class":81,"line":550},[79,92304,54138],{"class":228},[79,92306,53338],{"class":232},[79,92308,53341],{"class":85},[79,92310,239],{"class":228},[79,92312,53346],{"class":89},[79,92314,53301],{"class":228},[79,92316,92317,92319,92321,92323,92325,92327,92329,92331,92333],{"class":81,"line":562},[79,92318,54138],{"class":228},[79,92320,53338],{"class":232},[79,92322,236],{"class":85},[79,92324,239],{"class":228},[79,92326,53385],{"class":89},[79,92328,53365],{"class":85},[79,92330,239],{"class":228},[79,92332,53392],{"class":89},[79,92334,53301],{"class":228},[79,92336,92337,92339,92341,92343,92345],{"class":81,"line":568},[79,92338,54138],{"class":228},[79,92340,53401],{"class":232},[79,92342,53404],{"class":228},[79,92344,53401],{"class":232},[79,92346,53301],{"class":228},[79,92348,92349,92351,92353],{"class":81,"line":574},[79,92350,54138],{"class":228},[79,92352,2159],{"class":232},[79,92354,53301],{"class":228},[79,92356,92357,92359],{"class":81,"line":579},[79,92358,56741],{"class":85},[79,92360,17604],{"class":228},[79,92362,92363,92365,92367,92369],{"class":81,"line":585},[79,92364,74584],{"class":96},[79,92366,53431],{"class":228},[79,92368,62494],{"class":96},[79,92370,3400],{"class":228},[79,92372,92373,92375,92377,92379,92381],{"class":81,"line":591},[79,92374,56760],{"class":96},[79,92376,53431],{"class":228},[79,92378,3817],{"class":96},[79,92380,53486],{"class":448},[79,92382,3400],{"class":228},[79,92384,92385,92387,92389,92391,92393],{"class":81,"line":596},[79,92386,56774],{"class":96},[79,92388,53431],{"class":228},[79,92390,3817],{"class":96},[79,92392,53486],{"class":448},[79,92394,3400],{"class":228},[79,92396,92397,92399,92401,92403],{"class":81,"line":602},[79,92398,56873],{"class":96},[79,92400,53431],{"class":228},[79,92402,91993],{"class":96},[79,92404,3400],{"class":228},[79,92406,92407,92409,92411,92413,92415],{"class":81,"line":608},[79,92408,56911],{"class":96},[79,92410,53431],{"class":228},[79,92412,3065],{"class":96},[79,92414,53486],{"class":448},[79,92416,3400],{"class":228},[79,92418,92419,92421,92423,92425],{"class":81,"line":614},[79,92420,59405],{"class":96},[79,92422,53431],{"class":228},[79,92424,62831],{"class":96},[79,92426,3400],{"class":228},[79,92428,92429,92431,92433,92435],{"class":81,"line":619},[79,92430,59275],{"class":96},[79,92432,53431],{"class":228},[79,92434,53586],{"class":96},[79,92436,3400],{"class":228},[79,92438,92439,92441,92443,92445,92447],{"class":81,"line":625},[79,92440,92032],{"class":96},[79,92442,53431],{"class":228},[79,92444,2563],{"class":96},[79,92446,53486],{"class":448},[79,92448,3400],{"class":228},[79,92450,92451],{"class":81,"line":631},[79,92452,4272],{"class":228},[79,92454,92455,92457,92459],{"class":81,"line":637},[79,92456,54410],{"class":228},[79,92458,2159],{"class":232},[79,92460,53301],{"class":228},[79,92462,92463,92465,92467],{"class":81,"line":643},[79,92464,53779],{"class":228},[79,92466,53328],{"class":232},[79,92468,53301],{"class":228},[79,92470,92471],{"class":81,"line":649},[79,92472,542],{"emptyLinePlaceholder":541},[79,92474,92475,92477,92479],{"class":81,"line":655},[79,92476,229],{"class":228},[79,92478,53794],{"class":232},[79,92480,53301],{"class":228},[79,92482,92483,92485,92487,92489,92491,92493,92495,92497],{"class":81,"line":660},[79,92484,54138],{"class":228},[79,92486,53605],{"class":232},[79,92488,55477],{"class":85},[79,92490,239],{"class":228},[79,92492,55482],{"class":89},[79,92494,57303],{"class":228},[79,92496,53605],{"class":232},[79,92498,53301],{"class":228},[79,92500,92501,92503,92505,92507,92509,92511,92513,92515],{"class":81,"line":666},[79,92502,54138],{"class":228},[79,92504,53807],{"class":232},[79,92506,57228],{"class":85},[79,92508,239],{"class":228},[79,92510,90261],{"class":89},[79,92512,57303],{"class":228},[79,92514,53807],{"class":232},[79,92516,53301],{"class":228},[79,92518,92519,92521,92523],{"class":81,"line":672},[79,92520,54138],{"class":228},[79,92522,53807],{"class":232},[79,92524,53301],{"class":228},[79,92526,92527,92529,92531,92533,92535,92537,92539,92541],{"class":81,"line":678},[79,92528,13256],{"class":448},[79,92530,88920],{"class":96},[79,92532,556],{"class":448},[79,92534,56385],{"class":228},[79,92536,56388],{"class":85},[79,92538,455],{"class":228},[79,92540,92133],{"class":89},[79,92542,850],{"class":228},[79,92544,92545,92547,92549,92551],{"class":81,"line":684},[79,92546,54213],{"class":448},[79,92548,11493],{"class":228},[79,92550,239],{"class":448},[79,92552,49328],{"class":96},[79,92554,92555,92557,92559],{"class":81,"line":690},[79,92556,72072],{"class":448},[79,92558,92152],{"class":85},[79,92560,12888],{"class":228},[79,92562,92563,92565,92567,92569],{"class":81,"line":695},[79,92564,92159],{"class":228},[79,92566,239],{"class":448},[79,92568,5107],{"class":228},[79,92570,4778],{"class":448},[79,92572,92573],{"class":81,"line":700},[79,92574,92170],{"class":2313},[79,92576,92577],{"class":81,"line":712},[79,92578,4272],{"class":228},[79,92580,92581],{"class":81,"line":721},[79,92582,92179],{"class":2313},[79,92584,92585],{"class":81,"line":726},[79,92586,92587],{"class":2313},"    \u002F\u002F 手写防抖函数\n",[79,92589,92590],{"class":81,"line":731},[79,92591,92592],{"class":2313},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[79,92594,92595],{"class":81,"line":748},[79,92596,92597],{"class":2313},"    \u002F\u002F 1.声明定时器变量\n",[79,92599,92600],{"class":81,"line":765},[79,92601,92602],{"class":2313},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[79,92604,92605],{"class":81,"line":780},[79,92606,92607],{"class":2313},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[79,92609,92610],{"class":81,"line":811},[79,92611,92612],{"class":2313},"    \u002F\u002F 4.定时器里面写函数调用\n",[79,92614,92615,92617,92620,92622,92625,92627,92629],{"class":81,"line":816},[79,92616,72072],{"class":448},[79,92618,92619],{"class":85}," debounce",[79,92621,455],{"class":228},[79,92623,92624],{"class":7284},"fn",[79,92626,1020],{"class":228},[79,92628,2960],{"class":7284},[79,92630,14476],{"class":228},[79,92632,92633,92635],{"class":81,"line":821},[79,92634,81760],{"class":448},[79,92636,92637],{"class":228}," timer\n",[79,92639,92640],{"class":81,"line":837},[79,92641,92642],{"class":2313},"      \u002F\u002F return 返回一个匿名函数\n",[79,92644,92645,92647,92649],{"class":81,"line":853},[79,92646,75970],{"class":448},[79,92648,60907],{"class":448},[79,92650,56441],{"class":228},[79,92652,92653],{"class":81,"line":864},[79,92654,92655],{"class":2313},"        \u002F\u002F 这里边写第二三四步\n",[79,92657,92658,92660,92663,92666],{"class":81,"line":869},[79,92659,1089],{"class":448},[79,92661,92662],{"class":228}," (timer) ",[79,92664,92665],{"class":85},"clearTimeout",[79,92667,92668],{"class":228},"(timer)\n",[79,92670,92671,92674,92676,92679,92681,92683],{"class":81,"line":885},[79,92672,92673],{"class":228},"        timer ",[79,92675,239],{"class":448},[79,92677,92678],{"class":85}," setTimeout",[79,92680,455],{"class":228},[79,92682,56438],{"class":448},[79,92684,56441],{"class":228},[79,92686,92687,92690,92692],{"class":81,"line":891},[79,92688,92689],{"class":85},"          fn",[79,92691,15084],{"class":228},[79,92693,92694],{"class":2313},"\u002F\u002F加小括号调用fn }, t)\n",[79,92696,92697],{"class":81,"line":896},[79,92698,92699],{"class":228},"        }, t)\n",[79,92701,92702],{"class":81,"line":907},[79,92703,54391],{"class":228},[79,92705,92706],{"class":81,"line":912},[79,92707,4272],{"class":228},[79,92709,92710,92712,92714,92716,92718,92720,92722,92724,92726],{"class":81,"line":935},[79,92711,92194],{"class":228},[79,92713,59802],{"class":85},[79,92715,455],{"class":228},[79,92717,92201],{"class":89},[79,92719,1020],{"class":228},[79,92721,92207],{"class":85},[79,92723,92210],{"class":228},[79,92725,67062],{"class":96},[79,92727,1150],{"class":228},[79,92729,92730],{"class":81,"line":946},[79,92731,542],{"emptyLinePlaceholder":541},[79,92733,92734],{"class":81,"line":960},[79,92735,92736],{"class":2313},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[79,92738,92739],{"class":81,"line":975},[79,92740,92741],{"class":2313},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[79,92743,92744],{"class":81,"line":980},[79,92745,92746],{"class":2313},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[79,92748,92749],{"class":81,"line":1006},[79,92750,92751],{"class":2313},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[79,92753,92754,92756,92758],{"class":81,"line":1027},[79,92755,54410],{"class":228},[79,92757,53807],{"class":232},[79,92759,53301],{"class":228},[79,92761,92762,92764,92766],{"class":81,"line":1032},[79,92763,53779],{"class":228},[79,92765,53794],{"class":232},[79,92767,53301],{"class":228},[79,92769,92770],{"class":81,"line":1047},[79,92771,542],{"emptyLinePlaceholder":541},[79,92773,92774,92776,92778],{"class":81,"line":1053},[79,92775,53779],{"class":228},[79,92777,52630],{"class":232},[79,92779,53301],{"class":228},[339,92781,92783],{"id":92782},"_4172-节流","4.17.2 节流",[19,92785,92786],{},[3569,92787],{"alt":57,"src":92788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,92790,92791],{},[3569,92792],{"alt":57,"src":92793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,92795,92796],{},[2398,92797,92798],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,92800,92801],{},"实现方式：",[3246,92803,92804],{},[29,92805,92806],{},"lodash 提供的节流函数来处理",[19,92808,92809],{},"_.throttle(func,[wait=0],[options=])",[19,92811,92812],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[51,92814,92816],{"className":52628,"code":92815,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .box {\n      box-sizing: border-box;\n      width: 200px;\n      height: 200px;\n      background-color: gray;\n      font-size: 25px;\n      color: #fff;\n      text-align: center;\n      padding-top: 5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\u003C\u002Fdiv>\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const box = document.querySelector('.box')\n    let i = 0\n    function mouseMove() {\n      box.innerHTML = i++\n      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n    }\n    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n    \u002F\u002F 语法:_.throttle(fun,时间)\n    box.addEventListener('mousemove', _.throttle(mouseMove, 500))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,92817,92818,92828,92842,92846,92854,92868,92888,92900,92908,92914,92924,92936,92948,92958,92970,92980,92990,93002,93006,93014,93022,93026,93034,93052,93070,93078,93096,93106,93114,93124,93128,93132,93136,93141,93146,93167,93175,93183,93187],{"__ignoreMap":57},[79,92819,92820,92822,92824,92826],{"class":81,"line":82},[79,92821,53292],{"class":228},[79,92823,53295],{"class":232},[79,92825,53298],{"class":85},[79,92827,53301],{"class":228},[79,92829,92830,92832,92834,92836,92838,92840],{"class":81,"line":167},[79,92831,229],{"class":228},[79,92833,52630],{"class":232},[79,92835,53310],{"class":85},[79,92837,239],{"class":228},[79,92839,53315],{"class":89},[79,92841,53301],{"class":228},[79,92843,92844],{"class":81,"line":178},[79,92845,542],{"emptyLinePlaceholder":541},[79,92847,92848,92850,92852],{"class":81,"line":545},[79,92849,229],{"class":228},[79,92851,53328],{"class":232},[79,92853,53301],{"class":228},[79,92855,92856,92858,92860,92862,92864,92866],{"class":81,"line":550},[79,92857,54138],{"class":228},[79,92859,53338],{"class":232},[79,92861,53341],{"class":85},[79,92863,239],{"class":228},[79,92865,53346],{"class":89},[79,92867,53301],{"class":228},[79,92869,92870,92872,92874,92876,92878,92880,92882,92884,92886],{"class":81,"line":562},[79,92871,54138],{"class":228},[79,92873,53338],{"class":232},[79,92875,236],{"class":85},[79,92877,239],{"class":228},[79,92879,53385],{"class":89},[79,92881,53365],{"class":85},[79,92883,239],{"class":228},[79,92885,53392],{"class":89},[79,92887,53301],{"class":228},[79,92889,92890,92892,92894,92896,92898],{"class":81,"line":568},[79,92891,54138],{"class":228},[79,92893,53401],{"class":232},[79,92895,53404],{"class":228},[79,92897,53401],{"class":232},[79,92899,53301],{"class":228},[79,92901,92902,92904,92906],{"class":81,"line":574},[79,92903,54138],{"class":228},[79,92905,2159],{"class":232},[79,92907,53301],{"class":228},[79,92909,92910,92912],{"class":81,"line":579},[79,92911,56741],{"class":85},[79,92913,17604],{"class":228},[79,92915,92916,92918,92920,92922],{"class":81,"line":585},[79,92917,74584],{"class":96},[79,92919,53431],{"class":228},[79,92921,62494],{"class":96},[79,92923,3400],{"class":228},[79,92925,92926,92928,92930,92932,92934],{"class":81,"line":591},[79,92927,56760],{"class":96},[79,92929,53431],{"class":228},[79,92931,3817],{"class":96},[79,92933,53486],{"class":448},[79,92935,3400],{"class":228},[79,92937,92938,92940,92942,92944,92946],{"class":81,"line":596},[79,92939,56774],{"class":96},[79,92941,53431],{"class":228},[79,92943,3817],{"class":96},[79,92945,53486],{"class":448},[79,92947,3400],{"class":228},[79,92949,92950,92952,92954,92956],{"class":81,"line":602},[79,92951,56873],{"class":96},[79,92953,53431],{"class":228},[79,92955,91993],{"class":96},[79,92957,3400],{"class":228},[79,92959,92960,92962,92964,92966,92968],{"class":81,"line":608},[79,92961,56911],{"class":96},[79,92963,53431],{"class":228},[79,92965,3065],{"class":96},[79,92967,53486],{"class":448},[79,92969,3400],{"class":228},[79,92971,92972,92974,92976,92978],{"class":81,"line":614},[79,92973,59405],{"class":96},[79,92975,53431],{"class":228},[79,92977,62831],{"class":96},[79,92979,3400],{"class":228},[79,92981,92982,92984,92986,92988],{"class":81,"line":619},[79,92983,59275],{"class":96},[79,92985,53431],{"class":228},[79,92987,53586],{"class":96},[79,92989,3400],{"class":228},[79,92991,92992,92994,92996,92998,93000],{"class":81,"line":625},[79,92993,92032],{"class":96},[79,92995,53431],{"class":228},[79,92997,2563],{"class":96},[79,92999,53486],{"class":448},[79,93001,3400],{"class":228},[79,93003,93004],{"class":81,"line":631},[79,93005,4272],{"class":228},[79,93007,93008,93010,93012],{"class":81,"line":637},[79,93009,54410],{"class":228},[79,93011,2159],{"class":232},[79,93013,53301],{"class":228},[79,93015,93016,93018,93020],{"class":81,"line":643},[79,93017,53779],{"class":228},[79,93019,53328],{"class":232},[79,93021,53301],{"class":228},[79,93023,93024],{"class":81,"line":649},[79,93025,542],{"emptyLinePlaceholder":541},[79,93027,93028,93030,93032],{"class":81,"line":655},[79,93029,229],{"class":228},[79,93031,53794],{"class":232},[79,93033,53301],{"class":228},[79,93035,93036,93038,93040,93042,93044,93046,93048,93050],{"class":81,"line":660},[79,93037,54138],{"class":228},[79,93039,53605],{"class":232},[79,93041,55477],{"class":85},[79,93043,239],{"class":228},[79,93045,55482],{"class":89},[79,93047,57303],{"class":228},[79,93049,53605],{"class":232},[79,93051,53301],{"class":228},[79,93053,93054,93056,93058,93060,93062,93064,93066,93068],{"class":81,"line":666},[79,93055,54138],{"class":228},[79,93057,53807],{"class":232},[79,93059,57228],{"class":85},[79,93061,239],{"class":228},[79,93063,90261],{"class":89},[79,93065,57303],{"class":228},[79,93067,53807],{"class":232},[79,93069,53301],{"class":228},[79,93071,93072,93074,93076],{"class":81,"line":672},[79,93073,54138],{"class":228},[79,93075,53807],{"class":232},[79,93077,53301],{"class":228},[79,93079,93080,93082,93084,93086,93088,93090,93092,93094],{"class":81,"line":678},[79,93081,13256],{"class":448},[79,93083,88920],{"class":96},[79,93085,556],{"class":448},[79,93087,56385],{"class":228},[79,93089,56388],{"class":85},[79,93091,455],{"class":228},[79,93093,92133],{"class":89},[79,93095,850],{"class":228},[79,93097,93098,93100,93102,93104],{"class":81,"line":684},[79,93099,54213],{"class":448},[79,93101,11493],{"class":228},[79,93103,239],{"class":448},[79,93105,49328],{"class":96},[79,93107,93108,93110,93112],{"class":81,"line":690},[79,93109,72072],{"class":448},[79,93111,92152],{"class":85},[79,93113,12888],{"class":228},[79,93115,93116,93118,93120,93122],{"class":81,"line":695},[79,93117,92159],{"class":228},[79,93119,239],{"class":448},[79,93121,5107],{"class":228},[79,93123,4778],{"class":448},[79,93125,93126],{"class":81,"line":700},[79,93127,92170],{"class":2313},[79,93129,93130],{"class":81,"line":712},[79,93131,4272],{"class":228},[79,93133,93134],{"class":81,"line":721},[79,93135,92179],{"class":2313},[79,93137,93138],{"class":81,"line":726},[79,93139,93140],{"class":2313},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[79,93142,93143],{"class":81,"line":731},[79,93144,93145],{"class":2313},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[79,93147,93148,93150,93152,93154,93156,93158,93161,93163,93165],{"class":81,"line":748},[79,93149,92194],{"class":228},[79,93151,59802],{"class":85},[79,93153,455],{"class":228},[79,93155,92201],{"class":89},[79,93157,92204],{"class":228},[79,93159,93160],{"class":85},"throttle",[79,93162,92210],{"class":228},[79,93164,67062],{"class":96},[79,93166,1150],{"class":228},[79,93168,93169,93171,93173],{"class":81,"line":765},[79,93170,54410],{"class":228},[79,93172,53807],{"class":232},[79,93174,53301],{"class":228},[79,93176,93177,93179,93181],{"class":81,"line":780},[79,93178,53779],{"class":228},[79,93180,53794],{"class":232},[79,93182,53301],{"class":228},[79,93184,93185],{"class":81,"line":811},[79,93186,542],{"emptyLinePlaceholder":541},[79,93188,93189,93191,93193],{"class":81,"line":816},[79,93190,53779],{"class":228},[79,93192,52630],{"class":232},[79,93194,53301],{"class":228},[3246,93196,93197],{},[29,93198,93199],{},"手写一个节流函数来处理",[19,93201,72940],{},[19,93203,92253],{},[19,93205,93206],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,93208,93209],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[51,93211,93213],{"className":52628,"code":93212,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .box {\n      box-sizing: border-box;\n      width: 200px;\n      height: 200px;\n      background-color: gray;\n      font-size: 25px;\n      color: #fff;\n      text-align: center;\n      padding-top: 5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\u003C\u002Fdiv>\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const box = document.querySelector('.box')\n    let i = 0\n    function mouseMove() {\n      box.innerHTML = i++\n      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n    }\n    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n    \u002F\u002F 手写节流函数  每隔500ms+1\n    \u002F\u002F 1.声明一个定时器变量\n    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n    \u002F\u002F 3.1定时器里面调用执行函数\n    \u002F\u002F 3.2定时器里面要把定时器清空\n    function throttle(fn, t) {\n      let timer\n      return function () {\n        if (!timer) {\n          timer = setTimeout(function () {\n            fn()\n            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n            timer = null\n            \u002F\u002F 不能用clearTimeout(timer)\n            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n          }, t)\n        }\n      }\n    }\n    box.addEventListener('mousemove', throttle(mouseMove, 500))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,93214,93215,93225,93239,93243,93251,93265,93285,93297,93305,93311,93321,93333,93345,93355,93367,93377,93387,93399,93403,93411,93419,93423,93431,93449,93467,93475,93493,93503,93511,93521,93525,93529,93533,93538,93543,93548,93553,93558,93563,93580,93586,93594,93605,93620,93627,93632,93637,93647,93652,93657,93662,93666,93670,93674,93694,93702,93710,93714],{"__ignoreMap":57},[79,93216,93217,93219,93221,93223],{"class":81,"line":82},[79,93218,53292],{"class":228},[79,93220,53295],{"class":232},[79,93222,53298],{"class":85},[79,93224,53301],{"class":228},[79,93226,93227,93229,93231,93233,93235,93237],{"class":81,"line":167},[79,93228,229],{"class":228},[79,93230,52630],{"class":232},[79,93232,53310],{"class":85},[79,93234,239],{"class":228},[79,93236,53315],{"class":89},[79,93238,53301],{"class":228},[79,93240,93241],{"class":81,"line":178},[79,93242,542],{"emptyLinePlaceholder":541},[79,93244,93245,93247,93249],{"class":81,"line":545},[79,93246,229],{"class":228},[79,93248,53328],{"class":232},[79,93250,53301],{"class":228},[79,93252,93253,93255,93257,93259,93261,93263],{"class":81,"line":550},[79,93254,54138],{"class":228},[79,93256,53338],{"class":232},[79,93258,53341],{"class":85},[79,93260,239],{"class":228},[79,93262,53346],{"class":89},[79,93264,53301],{"class":228},[79,93266,93267,93269,93271,93273,93275,93277,93279,93281,93283],{"class":81,"line":562},[79,93268,54138],{"class":228},[79,93270,53338],{"class":232},[79,93272,236],{"class":85},[79,93274,239],{"class":228},[79,93276,53385],{"class":89},[79,93278,53365],{"class":85},[79,93280,239],{"class":228},[79,93282,53392],{"class":89},[79,93284,53301],{"class":228},[79,93286,93287,93289,93291,93293,93295],{"class":81,"line":568},[79,93288,54138],{"class":228},[79,93290,53401],{"class":232},[79,93292,53404],{"class":228},[79,93294,53401],{"class":232},[79,93296,53301],{"class":228},[79,93298,93299,93301,93303],{"class":81,"line":574},[79,93300,54138],{"class":228},[79,93302,2159],{"class":232},[79,93304,53301],{"class":228},[79,93306,93307,93309],{"class":81,"line":579},[79,93308,56741],{"class":85},[79,93310,17604],{"class":228},[79,93312,93313,93315,93317,93319],{"class":81,"line":585},[79,93314,74584],{"class":96},[79,93316,53431],{"class":228},[79,93318,62494],{"class":96},[79,93320,3400],{"class":228},[79,93322,93323,93325,93327,93329,93331],{"class":81,"line":591},[79,93324,56760],{"class":96},[79,93326,53431],{"class":228},[79,93328,3817],{"class":96},[79,93330,53486],{"class":448},[79,93332,3400],{"class":228},[79,93334,93335,93337,93339,93341,93343],{"class":81,"line":596},[79,93336,56774],{"class":96},[79,93338,53431],{"class":228},[79,93340,3817],{"class":96},[79,93342,53486],{"class":448},[79,93344,3400],{"class":228},[79,93346,93347,93349,93351,93353],{"class":81,"line":602},[79,93348,56873],{"class":96},[79,93350,53431],{"class":228},[79,93352,91993],{"class":96},[79,93354,3400],{"class":228},[79,93356,93357,93359,93361,93363,93365],{"class":81,"line":608},[79,93358,56911],{"class":96},[79,93360,53431],{"class":228},[79,93362,3065],{"class":96},[79,93364,53486],{"class":448},[79,93366,3400],{"class":228},[79,93368,93369,93371,93373,93375],{"class":81,"line":614},[79,93370,59405],{"class":96},[79,93372,53431],{"class":228},[79,93374,62831],{"class":96},[79,93376,3400],{"class":228},[79,93378,93379,93381,93383,93385],{"class":81,"line":619},[79,93380,59275],{"class":96},[79,93382,53431],{"class":228},[79,93384,53586],{"class":96},[79,93386,3400],{"class":228},[79,93388,93389,93391,93393,93395,93397],{"class":81,"line":625},[79,93390,92032],{"class":96},[79,93392,53431],{"class":228},[79,93394,2563],{"class":96},[79,93396,53486],{"class":448},[79,93398,3400],{"class":228},[79,93400,93401],{"class":81,"line":631},[79,93402,4272],{"class":228},[79,93404,93405,93407,93409],{"class":81,"line":637},[79,93406,54410],{"class":228},[79,93408,2159],{"class":232},[79,93410,53301],{"class":228},[79,93412,93413,93415,93417],{"class":81,"line":643},[79,93414,53779],{"class":228},[79,93416,53328],{"class":232},[79,93418,53301],{"class":228},[79,93420,93421],{"class":81,"line":649},[79,93422,542],{"emptyLinePlaceholder":541},[79,93424,93425,93427,93429],{"class":81,"line":655},[79,93426,229],{"class":228},[79,93428,53794],{"class":232},[79,93430,53301],{"class":228},[79,93432,93433,93435,93437,93439,93441,93443,93445,93447],{"class":81,"line":660},[79,93434,54138],{"class":228},[79,93436,53605],{"class":232},[79,93438,55477],{"class":85},[79,93440,239],{"class":228},[79,93442,55482],{"class":89},[79,93444,57303],{"class":228},[79,93446,53605],{"class":232},[79,93448,53301],{"class":228},[79,93450,93451,93453,93455,93457,93459,93461,93463,93465],{"class":81,"line":666},[79,93452,54138],{"class":228},[79,93454,53807],{"class":232},[79,93456,57228],{"class":85},[79,93458,239],{"class":228},[79,93460,90261],{"class":89},[79,93462,57303],{"class":228},[79,93464,53807],{"class":232},[79,93466,53301],{"class":228},[79,93468,93469,93471,93473],{"class":81,"line":672},[79,93470,54138],{"class":228},[79,93472,53807],{"class":232},[79,93474,53301],{"class":228},[79,93476,93477,93479,93481,93483,93485,93487,93489,93491],{"class":81,"line":678},[79,93478,13256],{"class":448},[79,93480,88920],{"class":96},[79,93482,556],{"class":448},[79,93484,56385],{"class":228},[79,93486,56388],{"class":85},[79,93488,455],{"class":228},[79,93490,92133],{"class":89},[79,93492,850],{"class":228},[79,93494,93495,93497,93499,93501],{"class":81,"line":684},[79,93496,54213],{"class":448},[79,93498,11493],{"class":228},[79,93500,239],{"class":448},[79,93502,49328],{"class":96},[79,93504,93505,93507,93509],{"class":81,"line":690},[79,93506,72072],{"class":448},[79,93508,92152],{"class":85},[79,93510,12888],{"class":228},[79,93512,93513,93515,93517,93519],{"class":81,"line":695},[79,93514,92159],{"class":228},[79,93516,239],{"class":448},[79,93518,5107],{"class":228},[79,93520,4778],{"class":448},[79,93522,93523],{"class":81,"line":700},[79,93524,92170],{"class":2313},[79,93526,93527],{"class":81,"line":712},[79,93528,4272],{"class":228},[79,93530,93531],{"class":81,"line":721},[79,93532,92179],{"class":2313},[79,93534,93535],{"class":81,"line":726},[79,93536,93537],{"class":2313},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[79,93539,93540],{"class":81,"line":731},[79,93541,93542],{"class":2313},"    \u002F\u002F 1.声明一个定时器变量\n",[79,93544,93545],{"class":81,"line":748},[79,93546,93547],{"class":2313},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[79,93549,93550],{"class":81,"line":765},[79,93551,93552],{"class":2313},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[79,93554,93555],{"class":81,"line":780},[79,93556,93557],{"class":2313},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[79,93559,93560],{"class":81,"line":811},[79,93561,93562],{"class":2313},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[79,93564,93565,93567,93570,93572,93574,93576,93578],{"class":81,"line":816},[79,93566,72072],{"class":448},[79,93568,93569],{"class":85}," throttle",[79,93571,455],{"class":228},[79,93573,92624],{"class":7284},[79,93575,1020],{"class":228},[79,93577,2960],{"class":7284},[79,93579,14476],{"class":228},[79,93581,93582,93584],{"class":81,"line":821},[79,93583,81760],{"class":448},[79,93585,92637],{"class":228},[79,93587,93588,93590,93592],{"class":81,"line":837},[79,93589,75970],{"class":448},[79,93591,60907],{"class":448},[79,93593,56441],{"class":228},[79,93595,93596,93598,93600,93602],{"class":81,"line":853},[79,93597,1089],{"class":448},[79,93599,3757],{"class":228},[79,93601,2470],{"class":448},[79,93603,93604],{"class":228},"timer) {\n",[79,93606,93607,93610,93612,93614,93616,93618],{"class":81,"line":864},[79,93608,93609],{"class":228},"          timer ",[79,93611,239],{"class":448},[79,93613,92678],{"class":85},[79,93615,455],{"class":228},[79,93617,56438],{"class":448},[79,93619,56441],{"class":228},[79,93621,93622,93625],{"class":81,"line":869},[79,93623,93624],{"class":85},"            fn",[79,93626,4061],{"class":228},[79,93628,93629],{"class":81,"line":885},[79,93630,93631],{"class":2313},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[79,93633,93634],{"class":81,"line":891},[79,93635,93636],{"class":2313},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[79,93638,93639,93642,93644],{"class":81,"line":896},[79,93640,93641],{"class":228},"            timer ",[79,93643,239],{"class":448},[79,93645,93646],{"class":96}," null\n",[79,93648,93649],{"class":81,"line":907},[79,93650,93651],{"class":2313},"            \u002F\u002F 不能用clearTimeout(timer)\n",[79,93653,93654],{"class":81,"line":912},[79,93655,93656],{"class":2313},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[79,93658,93659],{"class":81,"line":935},[79,93660,93661],{"class":228},"          }, t)\n",[79,93663,93664],{"class":81,"line":946},[79,93665,4612],{"class":228},[79,93667,93668],{"class":81,"line":960},[79,93669,54391],{"class":228},[79,93671,93672],{"class":81,"line":975},[79,93673,4272],{"class":228},[79,93675,93676,93678,93680,93682,93684,93686,93688,93690,93692],{"class":81,"line":980},[79,93677,92194],{"class":228},[79,93679,59802],{"class":85},[79,93681,455],{"class":228},[79,93683,92201],{"class":89},[79,93685,1020],{"class":228},[79,93687,93160],{"class":85},[79,93689,92210],{"class":228},[79,93691,67062],{"class":96},[79,93693,1150],{"class":228},[79,93695,93696,93698,93700],{"class":81,"line":1006},[79,93697,54410],{"class":228},[79,93699,53807],{"class":232},[79,93701,53301],{"class":228},[79,93703,93704,93706,93708],{"class":81,"line":1027},[79,93705,53779],{"class":228},[79,93707,53794],{"class":232},[79,93709,53301],{"class":228},[79,93711,93712],{"class":81,"line":1032},[79,93713,542],{"emptyLinePlaceholder":541},[79,93715,93716,93718,93720],{"class":81,"line":1047},[79,93717,53779],{"class":228},[79,93719,52630],{"class":232},[79,93721,53301],{"class":228},[339,93723,93725],{"id":93724},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[51,93727,93729],{"className":219,"code":93728,"language":221,"meta":57,"style":57},"\u003Cbody>\n  \u003Cscript>\n    let timer = null\n    timer = setTimeout(() => {\n      clearTimeout(timer)\n      console.log(timer)\n    }, 1000)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[59,93730,93731,93739,93747,93752,93757,93762,93767,93771,93779],{"__ignoreMap":57},[79,93732,93733,93735,93737],{"class":81,"line":82},[79,93734,229],{"class":228},[79,93736,53794],{"class":232},[79,93738,53301],{"class":228},[79,93740,93741,93743,93745],{"class":81,"line":167},[79,93742,54138],{"class":228},[79,93744,53807],{"class":232},[79,93746,53301],{"class":228},[79,93748,93749],{"class":81,"line":178},[79,93750,93751],{"class":228},"    let timer = null\n",[79,93753,93754],{"class":81,"line":545},[79,93755,93756],{"class":228},"    timer = setTimeout(() => {\n",[79,93758,93759],{"class":81,"line":550},[79,93760,93761],{"class":228},"      clearTimeout(timer)\n",[79,93763,93764],{"class":81,"line":562},[79,93765,93766],{"class":228},"      console.log(timer)\n",[79,93768,93769],{"class":81,"line":568},[79,93770,62214],{"class":228},[79,93772,93773,93775,93777],{"class":81,"line":574},[79,93774,54410],{"class":228},[79,93776,53807],{"class":232},[79,93778,53301],{"class":228},[79,93780,93781,93783,93785],{"class":81,"line":579},[79,93782,53779],{"class":228},[79,93784,53794],{"class":232},[79,93786,53301],{"class":228},[19,93788,93789],{},"输出为1",[19,93791,93792],{},"在开启的定时器里边写清除定时器",[19,93794,93795],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[339,93797,93799],{"id":93798},"_4174-节流综合案例","4.17.4 节流综合案例",[19,93801,93802],{},"页面打开，可以记录上一次的视频播放位置",[19,93804,93805],{},[3569,93806],{"alt":57,"src":93807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,93809,93810],{},[3569,93811],{"alt":57,"src":93812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[51,93814,93816],{"className":52628,"code":93815,"language":52630,"meta":57,"style":57},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Cmeta name=\"referrer\" content=\"never\" \u002F>\n  \u003Ctitle>综合案例\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n      box-sizing: border-box;\n    }\n\n    .container {\n      width: 1200px;\n      margin: 0 auto;\n    }\n\n    .video video {\n      width: 100%;\n      padding: 20px 0;\n    }\n\n    .elevator {\n      position: fixed;\n      top: 280px;\n      right: 20px;\n      z-index: 999;\n      background: #fff;\n      border: 1px solid #e4e4e4;\n      width: 60px;\n    }\n\n    .elevator a {\n      display: block;\n      padding: 10px;\n      text-decoration: none;\n      text-align: center;\n      color: #999;\n    }\n\n    .elevator a.active {\n      color: #1286ff;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"container\">\n    \u003Cdiv class=\"header\">\n      \u003Ca href=\"http:\u002F\u002Fpip.itcast.cn\">\n        \u003Cimg src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\" alt=\"\" \u002F>\n      \u003C\u002Fa>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"video\">\n      \u003Cvideo src=\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\" controls>\u003C\u002Fvideo>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"elevator\">\n      \u003Ca href=\"javascript:;\" data-ref=\"video\">视频介绍\u003C\u002Fa>\n      \u003Ca href=\"javascript:;\" data-ref=\"intro\">课程简介\u003C\u002Fa>\n      \u003Ca href=\"javascript:;\" data-ref=\"outline\">评论列表\u003C\u002Fa>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript src=\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    \u002F\u002F 1.获取元素 要对视频进行操作\n    const video = document.querySelector('video')\n    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n    video.ontimeupdate = _.throttle(() => {\n      \u002F\u002F 要进行本地存储,存当前播放的时间\n      \u002F\u002F 控制台输出当前的时间\n      \u002F\u002F console.log(video.currentTime)  \u002F\u002F获得当前的视频时间\n      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n      localStorage.setItem('currentTime', video.currentTime)\n    }, 1000)\n    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n    video.onloadeddata = () => {\n      \u002F\u002F console.log(11)\n      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n      video.currentTime = localStorage.getItem('currentTime') || 0\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[59,93817,93818,93828,93842,93846,93854,93868,93888,93908,93930,93943,93951,93957,93967,93977,93987,93991,93995,94002,94015,94027,94031,94035,94045,94057,94071,94075,94079,94086,94096,94109,94121,94131,94141,94157,94169,94173,94177,94185,94195,94207,94217,94227,94237,94241,94245,94255,94266,94270,94278,94286,94290,94298,94313,94328,94343,94364,94372,94380,94395,94417,94425,94440,94466,94492,94518,94526,94534,94553,94561,94566,94585,94590,94608,94613,94618,94626,94631,94645,94653,94658,94675,94679,94684,94706,94710,94718,94726,94730],{"__ignoreMap":57},[79,93819,93820,93822,93824,93826],{"class":81,"line":82},[79,93821,53292],{"class":228},[79,93823,53295],{"class":232},[79,93825,53298],{"class":85},[79,93827,53301],{"class":228},[79,93829,93830,93832,93834,93836,93838,93840],{"class":81,"line":167},[79,93831,229],{"class":228},[79,93833,52630],{"class":232},[79,93835,53310],{"class":85},[79,93837,239],{"class":228},[79,93839,53315],{"class":89},[79,93841,53301],{"class":228},[79,93843,93844],{"class":81,"line":178},[79,93845,542],{"emptyLinePlaceholder":541},[79,93847,93848,93850,93852],{"class":81,"line":545},[79,93849,229],{"class":228},[79,93851,53328],{"class":232},[79,93853,53301],{"class":228},[79,93855,93856,93858,93860,93862,93864,93866],{"class":81,"line":550},[79,93857,54138],{"class":228},[79,93859,53338],{"class":232},[79,93861,53341],{"class":85},[79,93863,239],{"class":228},[79,93865,53346],{"class":89},[79,93867,61116],{"class":228},[79,93869,93870,93872,93874,93876,93878,93880,93882,93884,93886],{"class":81,"line":562},[79,93871,54138],{"class":228},[79,93873,53338],{"class":232},[79,93875,53357],{"class":85},[79,93877,239],{"class":228},[79,93879,53362],{"class":89},[79,93881,53365],{"class":85},[79,93883,239],{"class":228},[79,93885,53370],{"class":89},[79,93887,61116],{"class":228},[79,93889,93890,93892,93894,93896,93898,93900,93902,93904,93906],{"class":81,"line":568},[79,93891,54138],{"class":228},[79,93893,53338],{"class":232},[79,93895,236],{"class":85},[79,93897,239],{"class":228},[79,93899,53385],{"class":89},[79,93901,53365],{"class":85},[79,93903,239],{"class":228},[79,93905,53392],{"class":89},[79,93907,61116],{"class":228},[79,93909,93910,93912,93914,93916,93918,93921,93923,93925,93928],{"class":81,"line":574},[79,93911,54138],{"class":228},[79,93913,53338],{"class":232},[79,93915,236],{"class":85},[79,93917,239],{"class":228},[79,93919,93920],{"class":89},"\"referrer\"",[79,93922,53365],{"class":85},[79,93924,239],{"class":228},[79,93926,93927],{"class":89},"\"never\"",[79,93929,61116],{"class":228},[79,93931,93932,93934,93936,93939,93941],{"class":81,"line":579},[79,93933,54138],{"class":228},[79,93935,53401],{"class":232},[79,93937,93938],{"class":228},">综合案例\u003C\u002F",[79,93940,53401],{"class":232},[79,93942,53301],{"class":228},[79,93944,93945,93947,93949],{"class":81,"line":585},[79,93946,54138],{"class":228},[79,93948,2159],{"class":232},[79,93950,53301],{"class":228},[79,93952,93953,93955],{"class":81,"line":591},[79,93954,8470],{"class":232},[79,93956,17604],{"class":228},[79,93958,93959,93961,93963,93965],{"class":81,"line":596},[79,93960,56684],{"class":96},[79,93962,53431],{"class":228},[79,93964,759],{"class":96},[79,93966,3400],{"class":228},[79,93968,93969,93971,93973,93975],{"class":81,"line":602},[79,93970,56695],{"class":96},[79,93972,53431],{"class":228},[79,93974,759],{"class":96},[79,93976,3400],{"class":228},[79,93978,93979,93981,93983,93985],{"class":81,"line":608},[79,93980,74584],{"class":96},[79,93982,53431],{"class":228},[79,93984,62494],{"class":96},[79,93986,3400],{"class":228},[79,93988,93989],{"class":81,"line":614},[79,93990,4272],{"class":228},[79,93992,93993],{"class":81,"line":619},[79,93994,542],{"emptyLinePlaceholder":541},[79,93996,93997,94000],{"class":81,"line":625},[79,93998,93999],{"class":85},"    .container",[79,94001,17604],{"class":228},[79,94003,94004,94006,94008,94011,94013],{"class":81,"line":631},[79,94005,56760],{"class":96},[79,94007,53431],{"class":228},[79,94009,94010],{"class":96},"1200",[79,94012,53486],{"class":448},[79,94014,3400],{"class":228},[79,94016,94017,94019,94021,94023,94025],{"class":81,"line":637},[79,94018,56695],{"class":96},[79,94020,53431],{"class":228},[79,94022,759],{"class":96},[79,94024,53550],{"class":96},[79,94026,3400],{"class":228},[79,94028,94029],{"class":81,"line":643},[79,94030,4272],{"class":228},[79,94032,94033],{"class":81,"line":649},[79,94034,542],{"emptyLinePlaceholder":541},[79,94036,94037,94040,94043],{"class":81,"line":655},[79,94038,94039],{"class":85},"    .video",[79,94041,94042],{"class":232}," video",[79,94044,17604],{"class":228},[79,94046,94047,94049,94051,94053,94055],{"class":81,"line":660},[79,94048,56760],{"class":96},[79,94050,53431],{"class":228},[79,94052,2555],{"class":96},[79,94054,1094],{"class":448},[79,94056,3400],{"class":228},[79,94058,94059,94061,94063,94065,94067,94069],{"class":81,"line":666},[79,94060,56684],{"class":96},[79,94062,53431],{"class":228},[79,94064,2940],{"class":96},[79,94066,53486],{"class":448},[79,94068,1103],{"class":96},[79,94070,3400],{"class":228},[79,94072,94073],{"class":81,"line":672},[79,94074,4272],{"class":228},[79,94076,94077],{"class":81,"line":678},[79,94078,542],{"emptyLinePlaceholder":541},[79,94080,94081,94084],{"class":81,"line":684},[79,94082,94083],{"class":85},"    .elevator",[79,94085,17604],{"class":228},[79,94087,94088,94090,94092,94094],{"class":81,"line":690},[79,94089,56748],{"class":96},[79,94091,53431],{"class":228},[79,94093,88220],{"class":96},[79,94095,3400],{"class":228},[79,94097,94098,94100,94102,94105,94107],{"class":81,"line":695},[79,94099,56936],{"class":96},[79,94101,53431],{"class":228},[79,94103,94104],{"class":96},"280",[79,94106,53486],{"class":448},[79,94108,3400],{"class":228},[79,94110,94111,94113,94115,94117,94119],{"class":81,"line":700},[79,94112,88414],{"class":96},[79,94114,53431],{"class":228},[79,94116,2940],{"class":96},[79,94118,53486],{"class":448},[79,94120,3400],{"class":228},[79,94122,94123,94125,94127,94129],{"class":81,"line":712},[79,94124,88227],{"class":96},[79,94126,53431],{"class":228},[79,94128,88232],{"class":96},[79,94130,3400],{"class":228},[79,94132,94133,94135,94137,94139],{"class":81,"line":721},[79,94134,63710],{"class":96},[79,94136,53431],{"class":228},[79,94138,62831],{"class":96},[79,94140,3400],{"class":228},[79,94142,94143,94145,94147,94149,94151,94153,94155],{"class":81,"line":726},[79,94144,63965],{"class":96},[79,94146,53431],{"class":228},[79,94148,775],{"class":96},[79,94150,53486],{"class":448},[79,94152,53515],{"class":96},[79,94154,64232],{"class":96},[79,94156,3400],{"class":228},[79,94158,94159,94161,94163,94165,94167],{"class":81,"line":731},[79,94160,56760],{"class":96},[79,94162,53431],{"class":228},[79,94164,3147],{"class":96},[79,94166,53486],{"class":448},[79,94168,3400],{"class":228},[79,94170,94171],{"class":81,"line":748},[79,94172,4272],{"class":228},[79,94174,94175],{"class":81,"line":765},[79,94176,542],{"emptyLinePlaceholder":541},[79,94178,94179,94181,94183],{"class":81,"line":780},[79,94180,94083],{"class":85},[79,94182,3505],{"class":232},[79,94184,17604],{"class":228},[79,94186,94187,94189,94191,94193],{"class":81,"line":811},[79,94188,56998],{"class":96},[79,94190,53431],{"class":228},[79,94192,62858],{"class":96},[79,94194,3400],{"class":228},[79,94196,94197,94199,94201,94203,94205],{"class":81,"line":816},[79,94198,56684],{"class":96},[79,94200,53431],{"class":228},[79,94202,2689],{"class":96},[79,94204,53486],{"class":448},[79,94206,3400],{"class":228},[79,94208,94209,94211,94213,94215],{"class":81,"line":821},[79,94210,65958],{"class":96},[79,94212,53431],{"class":228},[79,94214,56726],{"class":96},[79,94216,3400],{"class":228},[79,94218,94219,94221,94223,94225],{"class":81,"line":837},[79,94220,59275],{"class":96},[79,94222,53431],{"class":228},[79,94224,53586],{"class":96},[79,94226,3400],{"class":228},[79,94228,94229,94231,94233,94235],{"class":81,"line":853},[79,94230,59405],{"class":96},[79,94232,53431],{"class":228},[79,94234,64058],{"class":96},[79,94236,3400],{"class":228},[79,94238,94239],{"class":81,"line":864},[79,94240,4272],{"class":228},[79,94242,94243],{"class":81,"line":869},[79,94244,542],{"emptyLinePlaceholder":541},[79,94246,94247,94249,94251,94253],{"class":81,"line":885},[79,94248,94083],{"class":85},[79,94250,3505],{"class":232},[79,94252,66012],{"class":85},[79,94254,17604],{"class":228},[79,94256,94257,94259,94261,94264],{"class":81,"line":891},[79,94258,59405],{"class":96},[79,94260,53431],{"class":228},[79,94262,94263],{"class":96},"#1286ff",[79,94265,3400],{"class":228},[79,94267,94268],{"class":81,"line":896},[79,94269,4272],{"class":228},[79,94271,94272,94274,94276],{"class":81,"line":907},[79,94273,54410],{"class":228},[79,94275,2159],{"class":232},[79,94277,53301],{"class":228},[79,94279,94280,94282,94284],{"class":81,"line":912},[79,94281,53779],{"class":228},[79,94283,53328],{"class":232},[79,94285,53301],{"class":228},[79,94287,94288],{"class":81,"line":935},[79,94289,542],{"emptyLinePlaceholder":541},[79,94291,94292,94294,94296],{"class":81,"line":946},[79,94293,229],{"class":228},[79,94295,53794],{"class":232},[79,94297,53301],{"class":228},[79,94299,94300,94302,94304,94306,94308,94311],{"class":81,"line":960},[79,94301,54138],{"class":228},[79,94303,53605],{"class":232},[79,94305,55477],{"class":85},[79,94307,239],{"class":228},[79,94309,94310],{"class":89},"\"container\"",[79,94312,53301],{"class":228},[79,94314,94315,94317,94319,94321,94323,94326],{"class":81,"line":975},[79,94316,53335],{"class":228},[79,94318,53605],{"class":232},[79,94320,55477],{"class":85},[79,94322,239],{"class":228},[79,94324,94325],{"class":89},"\"header\"",[79,94327,53301],{"class":228},[79,94329,94330,94332,94334,94336,94338,94341],{"class":81,"line":980},[79,94331,57223],{"class":228},[79,94333,2482],{"class":232},[79,94335,63046],{"class":85},[79,94337,239],{"class":228},[79,94339,94340],{"class":89},"\"http:\u002F\u002Fpip.itcast.cn\"",[79,94342,53301],{"class":228},[79,94344,94345,94347,94349,94351,94353,94356,94358,94360,94362],{"class":81,"line":1006},[79,94346,57291],{"class":228},[79,94348,3569],{"class":232},[79,94350,57228],{"class":85},[79,94352,239],{"class":228},[79,94354,94355],{"class":89},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[79,94357,57236],{"class":85},[79,94359,239],{"class":228},[79,94361,9717],{"class":89},[79,94363,61116],{"class":228},[79,94365,94366,94368,94370],{"class":81,"line":1027},[79,94367,57396],{"class":228},[79,94369,2482],{"class":232},[79,94371,53301],{"class":228},[79,94373,94374,94376,94378],{"class":81,"line":1032},[79,94375,53770],{"class":228},[79,94377,53605],{"class":232},[79,94379,53301],{"class":228},[79,94381,94382,94384,94386,94388,94390,94393],{"class":81,"line":1047},[79,94383,53335],{"class":228},[79,94385,53605],{"class":232},[79,94387,55477],{"class":85},[79,94389,239],{"class":228},[79,94391,94392],{"class":89},"\"video\"",[79,94394,53301],{"class":228},[79,94396,94397,94399,94401,94403,94405,94408,94411,94413,94415],{"class":81,"line":1053},[79,94398,57223],{"class":228},[79,94400,30199],{"class":232},[79,94402,57228],{"class":85},[79,94404,239],{"class":228},[79,94406,94407],{"class":89},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[79,94409,94410],{"class":85}," controls",[79,94412,57303],{"class":228},[79,94414,30199],{"class":232},[79,94416,53301],{"class":228},[79,94418,94419,94421,94423],{"class":81,"line":1058},[79,94420,53770],{"class":228},[79,94422,53605],{"class":232},[79,94424,53301],{"class":228},[79,94426,94427,94429,94431,94433,94435,94438],{"class":81,"line":1069},[79,94428,53335],{"class":228},[79,94430,53605],{"class":232},[79,94432,55477],{"class":85},[79,94434,239],{"class":228},[79,94436,94437],{"class":89},"\"elevator\"",[79,94439,53301],{"class":228},[79,94441,94442,94444,94446,94448,94450,94452,94455,94457,94459,94462,94464],{"class":81,"line":1081},[79,94443,57223],{"class":228},[79,94445,2482],{"class":232},[79,94447,63046],{"class":85},[79,94449,239],{"class":228},[79,94451,66224],{"class":89},[79,94453,94454],{"class":85}," data-ref",[79,94456,239],{"class":228},[79,94458,94392],{"class":89},[79,94460,94461],{"class":228},">视频介绍\u003C\u002F",[79,94463,2482],{"class":232},[79,94465,53301],{"class":228},[79,94467,94468,94470,94472,94474,94476,94478,94480,94482,94485,94488,94490],{"class":81,"line":1086},[79,94469,57223],{"class":228},[79,94471,2482],{"class":232},[79,94473,63046],{"class":85},[79,94475,239],{"class":228},[79,94477,66224],{"class":89},[79,94479,94454],{"class":85},[79,94481,239],{"class":228},[79,94483,94484],{"class":89},"\"intro\"",[79,94486,94487],{"class":228},">课程简介\u003C\u002F",[79,94489,2482],{"class":232},[79,94491,53301],{"class":228},[79,94493,94494,94496,94498,94500,94502,94504,94506,94508,94511,94514,94516],{"class":81,"line":1108},[79,94495,57223],{"class":228},[79,94497,2482],{"class":232},[79,94499,63046],{"class":85},[79,94501,239],{"class":228},[79,94503,66224],{"class":89},[79,94505,94454],{"class":85},[79,94507,239],{"class":228},[79,94509,94510],{"class":89},"\"outline\"",[79,94512,94513],{"class":228},">评论列表\u003C\u002F",[79,94515,2482],{"class":232},[79,94517,53301],{"class":228},[79,94519,94520,94522,94524],{"class":81,"line":1153},[79,94521,53770],{"class":228},[79,94523,53605],{"class":232},[79,94525,53301],{"class":228},[79,94527,94528,94530,94532],{"class":81,"line":1158},[79,94529,54410],{"class":228},[79,94531,53605],{"class":232},[79,94533,53301],{"class":228},[79,94535,94536,94538,94540,94542,94544,94547,94549,94551],{"class":81,"line":1180},[79,94537,54138],{"class":228},[79,94539,53807],{"class":232},[79,94541,57228],{"class":85},[79,94543,239],{"class":228},[79,94545,94546],{"class":89},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[79,94548,57303],{"class":228},[79,94550,53807],{"class":232},[79,94552,53301],{"class":228},[79,94554,94555,94557,94559],{"class":81,"line":1197},[79,94556,54138],{"class":228},[79,94558,53807],{"class":232},[79,94560,53301],{"class":228},[79,94562,94563],{"class":81,"line":1202},[79,94564,94565],{"class":2313},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[79,94567,94568,94570,94572,94574,94576,94578,94580,94583],{"class":81,"line":1207},[79,94569,13256],{"class":448},[79,94571,94042],{"class":96},[79,94573,556],{"class":448},[79,94575,56385],{"class":228},[79,94577,56388],{"class":85},[79,94579,455],{"class":228},[79,94581,94582],{"class":89},"'video'",[79,94584,850],{"class":228},[79,94586,94587],{"class":81,"line":1223},[79,94588,94589],{"class":2313},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[79,94591,94592,94595,94597,94599,94601,94604,94606],{"class":81,"line":18722},[79,94593,94594],{"class":228},"    video.ontimeupdate ",[79,94596,239],{"class":448},[79,94598,90342],{"class":228},[79,94600,93160],{"class":85},[79,94602,94603],{"class":228},"(() ",[79,94605,86709],{"class":448},[79,94607,17604],{"class":228},[79,94609,94610],{"class":81,"line":18728},[79,94611,94612],{"class":2313},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[79,94614,94615],{"class":81,"line":18739},[79,94616,94617],{"class":2313},"      \u002F\u002F 控制台输出当前的时间\n",[79,94619,94620,94623],{"class":81,"line":18762},[79,94621,94622],{"class":2313},"      \u002F\u002F console.log(video.currentTime)",[79,94624,94625],{"class":2313},"  \u002F\u002F获得当前的视频时间\n",[79,94627,94628],{"class":81,"line":18784},[79,94629,94630],{"class":2313},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[79,94632,94633,94635,94637,94639,94642],{"class":81,"line":18789},[79,94634,76671],{"class":228},[79,94636,73642],{"class":85},[79,94638,455],{"class":228},[79,94640,94641],{"class":89},"'currentTime'",[79,94643,94644],{"class":228},", video.currentTime)\n",[79,94646,94647,94649,94651],{"class":81,"line":18795},[79,94648,56524],{"class":228},[79,94650,929],{"class":96},[79,94652,850],{"class":228},[79,94654,94655],{"class":81,"line":18809},[79,94656,94657],{"class":2313},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[79,94659,94660,94663,94666,94668,94671,94673],{"class":81,"line":18822},[79,94661,94662],{"class":228},"    video.",[79,94664,94665],{"class":85},"onloadeddata",[79,94667,556],{"class":448},[79,94669,94670],{"class":228}," () ",[79,94672,86709],{"class":448},[79,94674,17604],{"class":228},[79,94676,94677],{"class":81,"line":18827},[79,94678,62001],{"class":2313},[79,94680,94681],{"class":81,"line":18841},[79,94682,94683],{"class":2313},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[79,94685,94686,94689,94691,94694,94696,94698,94700,94702,94704],{"class":81,"line":18846},[79,94687,94688],{"class":228},"      video.currentTime ",[79,94690,239],{"class":448},[79,94692,94693],{"class":228}," localStorage.",[79,94695,73673],{"class":85},[79,94697,455],{"class":228},[79,94699,94641],{"class":89},[79,94701,15747],{"class":228},[79,94703,73345],{"class":448},[79,94705,49328],{"class":96},[79,94707,94708],{"class":81,"line":18852},[79,94709,4272],{"class":228},[79,94711,94712,94714,94716],{"class":81,"line":18857},[79,94713,54410],{"class":228},[79,94715,53807],{"class":232},[79,94717,53301],{"class":228},[79,94719,94720,94722,94724],{"class":81,"line":18871},[79,94721,53779],{"class":228},[79,94723,53794],{"class":232},[79,94725,53301],{"class":228},[79,94727,94728],{"class":81,"line":18876},[79,94729,542],{"emptyLinePlaceholder":541},[79,94731,94732,94734,94736],{"class":81,"line":18881},[79,94733,53779],{"class":228},[79,94735,52630],{"class":232},[79,94737,53301],{"class":228},[2159,94739,94740],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":57,"searchDepth":167,"depth":167,"links":94742},[94743,94748,94752,94753,94754,94759,94764,94765,94766,94767,94774,94779,94780,94790,94794,94795,94799],{"id":78679,"depth":167,"text":78680,"children":94744},[94745,94746,94747],{"id":78683,"depth":178,"text":78684},{"id":78708,"depth":178,"text":78709},{"id":78720,"depth":178,"text":78721},{"id":78732,"depth":167,"text":78733,"children":94749},[94750,94751],{"id":78736,"depth":178,"text":78737},{"id":78751,"depth":178,"text":78752},{"id":78803,"depth":167,"text":78804},{"id":78847,"depth":167,"text":78848},{"id":78864,"depth":167,"text":78865,"children":94755},[94756,94757,94758],{"id":78868,"depth":178,"text":78869},{"id":78881,"depth":178,"text":78882},{"id":78986,"depth":178,"text":78987},{"id":79275,"depth":167,"text":79276,"children":94760},[94761,94762,94763],{"id":79279,"depth":178,"text":79280},{"id":79722,"depth":178,"text":79723},{"id":80133,"depth":178,"text":80134},{"id":80196,"depth":167,"text":80197},{"id":80275,"depth":167,"text":80276},{"id":80368,"depth":167,"text":80369},{"id":82213,"depth":167,"text":82214,"children":94768},[94769,94770,94771,94772,94773],{"id":82217,"depth":178,"text":82218},{"id":82229,"depth":178,"text":82230},{"id":82448,"depth":178,"text":82449},{"id":82466,"depth":178,"text":82467},{"id":82526,"depth":178,"text":82527},{"id":86793,"depth":167,"text":86794,"children":94775},[94776,94777,94778],{"id":86797,"depth":178,"text":86798},{"id":86815,"depth":178,"text":86816},{"id":86841,"depth":178,"text":86842},{"id":86850,"depth":167,"text":86851},{"id":86872,"depth":167,"text":86873,"children":94781},[94782,94783,94784,94785,94786,94787,94788,94789],{"id":86876,"depth":178,"text":86877},{"id":87137,"depth":178,"text":87138},{"id":87323,"depth":178,"text":87324},{"id":87690,"depth":178,"text":87691},{"id":87806,"depth":178,"text":87807},{"id":87842,"depth":178,"text":87843},{"id":87889,"depth":178,"text":87890},{"id":87923,"depth":178,"text":87924},{"id":89286,"depth":167,"text":89287,"children":94791},[94792,94793],{"id":89290,"depth":178,"text":89291},{"id":89327,"depth":178,"text":89328},{"id":90682,"depth":167,"text":90683},{"id":91053,"depth":167,"text":91054,"children":94796},[94797,94798],{"id":91057,"depth":178,"text":91058},{"id":91091,"depth":178,"text":91092},{"id":91820,"depth":167,"text":91821,"children":94800},[94801,94802,94803,94804],{"id":91824,"depth":178,"text":91825},{"id":92782,"depth":178,"text":92783},{"id":93724,"depth":178,"text":93725},{"id":93798,"depth":178,"text":93799},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":78668,"description":25402},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":94811,"title":94812,"body":94813,"description":94824,"extension":2186,"meta":94825,"navigation":541,"path":94827,"seo":94828,"stem":94829,"__hash__":94830},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":94814,"toc":94822},[94815],[19,94816,94817,94818],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[2482,94819,94820],{"href":94820,"rel":94821},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[25885],{"title":57,"searchDepth":167,"depth":167,"links":94823},[],"三件套第三套学习",{"category":94826},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":94812,"description":94824},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":94832,"title":94833,"body":94834,"description":25402,"extension":2186,"meta":94939,"navigation":541,"path":94940,"seo":94941,"stem":94942,"__hash__":94943},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":94835,"toc":94934},[94836,94843,94846,94849,94852,94856,94865,94868,94871,94875,94884,94887,94891,94894,94914,94917,94931],[19,94837,94838],{},[2482,94839,94842],{"href":94840,"rel":94841},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[25885],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,94844,94833],{"id":94845},"_1安装",[19,94847,94848],{},"numpy是科学计算基础库,底层是C语言",[19,94850,94851],{},"三种方式：",[14,94853,94855],{"id":94854},"_11-通过pip安装","1.1 通过pip安装",[51,94857,94859],{"className":439,"code":94858,"language":441,"meta":57,"style":57},"pip install numpy\n",[59,94860,94861],{"__ignoreMap":57},[79,94862,94863],{"class":81,"line":82},[79,94864,94858],{"class":228},[19,94866,94867],{},"首选方式，自动处理依赖项",[19,94869,94870],{},"在提示系统命令符中使用cmd",[14,94872,94874],{"id":94873},"_12-通过anaconda安装","1.2 通过Anaconda安装",[51,94876,94878],{"className":439,"code":94877,"language":441,"meta":57,"style":57},"conda install numpy\n",[59,94879,94880],{"__ignoreMap":57},[79,94881,94882],{"class":81,"line":82},[79,94883,94877],{"class":228},[19,94885,94886],{},"自动解决环境依赖",[14,94888,94890],{"id":94889},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,94892,94893],{},"对于Debian\u002FUbuntu",[51,94895,94897],{"className":439,"code":94896,"language":441,"meta":57,"style":57},"sudo apt-get install python3-numpy\n",[59,94898,94899],{"__ignoreMap":57},[79,94900,94901,94904,94906,94909,94911],{"class":81,"line":82},[79,94902,94903],{"class":228},"sudo apt",[79,94905,478],{"class":448},[79,94907,94908],{"class":228},"get install python3",[79,94910,478],{"class":448},[79,94912,94913],{"class":228},"numpy\n",[19,94915,94916],{},"对于Fedora:",[51,94918,94920],{"className":439,"code":94919,"language":441,"meta":57,"style":57},"sudo dnf install python3-numpy\n",[59,94921,94922],{"__ignoreMap":57},[79,94923,94924,94927,94929],{"class":81,"line":82},[79,94925,94926],{"class":228},"sudo dnf install python3",[79,94928,478],{"class":448},[79,94930,94913],{"class":228},[2159,94932,94933],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":57,"searchDepth":167,"depth":167,"links":94935},[94936,94937,94938],{"id":94854,"depth":167,"text":94855},{"id":94873,"depth":167,"text":94874},{"id":94889,"depth":167,"text":94890},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":94833,"description":25402},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":94945,"title":94946,"body":94947,"description":25402,"extension":2186,"meta":95060,"navigation":541,"path":95061,"seo":95062,"stem":95063,"__hash__":95064},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":94948,"toc":95058},[94949,94952,94955,94958,94961,94964,94967,94970,94973,94976,95052,95055],[10,94950,94946],{"id":94951},"_10算数函数",[19,94953,94954],{},"加减乘除运算跟python基础语法没区别",[19,94956,94957],{},"除了python那种方法外还可以使用函数",[19,94959,94960],{},"加：np.add(a,b)",[19,94962,94963],{},"减：np.subtract(a,b)",[19,94965,94966],{},"乘：np.multiply(a,b)",[19,94968,94969],{},"除：np.divide(a,b) == a\u002Fb",[19,94971,94972],{},"取余：np.mod(a,b) == a%b",[19,94974,94975],{},"必须会的用法：",[51,94977,94979],{"className":439,"code":94978,"language":441,"meta":57,"style":57},"a=np.arange(9).reshape(3,3)\nb=np.array([10,10,10])\nresult=np.empty_like(a)\nnp.add(a,b,out=result)\nresult\n",[59,94980,94981,95003,95024,95034,95047],{"__ignoreMap":57},[79,94982,94983,94985,94987,94990,94992,94995,94997,94999,95001],{"class":81,"line":82},[79,94984,2482],{"class":228},[79,94986,239],{"class":448},[79,94988,94989],{"class":228},"np.arange(",[79,94991,2663],{"class":96},[79,94993,94994],{"class":228},").reshape(",[79,94996,970],{"class":96},[79,94998,2621],{"class":228},[79,95000,970],{"class":96},[79,95002,850],{"class":228},[79,95004,95005,95007,95009,95012,95014,95016,95018,95020,95022],{"class":81,"line":167},[79,95006,2507],{"class":228},[79,95008,239],{"class":448},[79,95010,95011],{"class":228},"np.array([",[79,95013,2689],{"class":96},[79,95015,2621],{"class":228},[79,95017,2689],{"class":96},[79,95019,2621],{"class":228},[79,95021,2689],{"class":96},[79,95023,6727],{"class":228},[79,95025,95026,95029,95031],{"class":81,"line":178},[79,95027,95028],{"class":228},"result",[79,95030,239],{"class":448},[79,95032,95033],{"class":228},"np.empty_like(a)\n",[79,95035,95036,95039,95042,95044],{"class":81,"line":545},[79,95037,95038],{"class":228},"np.add(a,b,",[79,95040,95041],{"class":7284},"out",[79,95043,239],{"class":448},[79,95045,95046],{"class":228},"result)\n",[79,95048,95049],{"class":81,"line":550},[79,95050,95051],{"class":228},"result\n",[19,95053,95054],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[2159,95056,95057],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":57,"searchDepth":167,"depth":167,"links":95059},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":94946,"description":25402},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":95066,"title":95067,"body":95068,"description":25402,"extension":2186,"meta":95830,"navigation":541,"path":95831,"seo":95832,"stem":95833,"__hash__":95834},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":95069,"toc":95817},[95070,95073,95076,95079,95083,95122,95126,95170,95230,95234,95237,95276,95279,95324,95328,95364,95368,95437,95441,95505,95509,95512,95515,95518,95521,95557,95561,95601,95605,95677,95680,95684,95747,95751,95814],[10,95071,95067],{"id":95072},"_11统计函数",[19,95074,95075],{},"sum max min mean",[19,95077,95078],{},"这些有axis参数，可以指定方向",[14,95080,95082],{"id":95081},"_111-sum求和函数","11.1 sum()求和函数",[51,95084,95086],{"className":439,"code":95085,"language":441,"meta":57,"style":57},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[59,95087,95088,95093,95114],{"__ignoreMap":57},[79,95089,95090],{"class":81,"line":82},[79,95091,95092],{"class":2313},"#创建一维数组\n",[79,95094,95095,95097,95099,95102,95104,95106,95108,95110,95112],{"class":81,"line":167},[79,95096,2482],{"class":228},[79,95098,239],{"class":448},[79,95100,95101],{"class":228},"np.random.randint(",[79,95103,775],{"class":96},[79,95105,2621],{"class":228},[79,95107,2555],{"class":96},[79,95109,2621],{"class":228},[79,95111,2940],{"class":96},[79,95113,850],{"class":228},[79,95115,95116,95119],{"class":81,"line":178},[79,95117,95118],{"class":228},"np.sum(a)",[79,95120,95121],{"class":2313},"#求和\n",[14,95123,95125],{"id":95124},"_112-max求最大值函数","11.2 max()求最大值函数",[51,95127,95129],{"className":439,"code":95128,"language":441,"meta":57,"style":57},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[59,95130,95131,95135,95155,95160,95165],{"__ignoreMap":57},[79,95132,95133],{"class":81,"line":82},[79,95134,95092],{"class":2313},[79,95136,95137,95139,95141,95143,95145,95147,95149,95151,95153],{"class":81,"line":167},[79,95138,2482],{"class":228},[79,95140,239],{"class":448},[79,95142,95101],{"class":228},[79,95144,775],{"class":96},[79,95146,2621],{"class":228},[79,95148,2555],{"class":96},[79,95150,2621],{"class":228},[79,95152,2940],{"class":96},[79,95154,850],{"class":228},[79,95156,95157],{"class":81,"line":178},[79,95158,95159],{"class":228},"np.max(a)\n",[79,95161,95162],{"class":81,"line":545},[79,95163,95164],{"class":2313},"#最大索引(求最大元素的索引)arg\n",[79,95166,95167],{"class":81,"line":550},[79,95168,95169],{"class":228},"np.argmax(a)\n",[51,95171,95173],{"className":439,"code":95172,"language":441,"meta":57,"style":57},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[59,95174,95175,95196,95216,95220],{"__ignoreMap":57},[79,95176,95177,95179,95181,95184,95186,95188,95190,95192,95194],{"class":81,"line":82},[79,95178,12954],{"class":228},[79,95180,239],{"class":448},[79,95182,95183],{"class":228}," np.array([",[79,95185,775],{"class":96},[79,95187,1020],{"class":228},[79,95189,2563],{"class":96},[79,95191,1020],{"class":228},[79,95193,970],{"class":96},[79,95195,6727],{"class":228},[79,95197,95198,95200,95202,95204,95206,95208,95210,95212,95214],{"class":81,"line":167},[79,95199,12980],{"class":228},[79,95201,239],{"class":448},[79,95203,95183],{"class":228},[79,95205,970],{"class":96},[79,95207,1020],{"class":228},[79,95209,2331],{"class":96},[79,95211,1020],{"class":228},[79,95213,2537],{"class":96},[79,95215,6727],{"class":228},[79,95217,95218],{"class":81,"line":178},[79,95219,542],{"emptyLinePlaceholder":541},[79,95221,95222,95224,95227],{"class":81,"line":545},[79,95223,1889],{"class":96},[79,95225,95226],{"class":228},"(np.maximum(a, b))   ",[79,95228,95229],{"class":2313},"# [3 5 4]，每个位置上取较大值\n",[14,95231,95233],{"id":95232},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,95235,95236],{},"①一维数组：",[51,95238,95240],{"className":439,"code":95239,"language":441,"meta":57,"style":57},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[59,95241,95242,95246,95266,95271],{"__ignoreMap":57},[79,95243,95244],{"class":81,"line":82},[79,95245,95092],{"class":2313},[79,95247,95248,95250,95252,95254,95256,95258,95260,95262,95264],{"class":81,"line":167},[79,95249,2482],{"class":228},[79,95251,239],{"class":448},[79,95253,95101],{"class":228},[79,95255,775],{"class":96},[79,95257,2621],{"class":228},[79,95259,2555],{"class":96},[79,95261,2621],{"class":228},[79,95263,2940],{"class":96},[79,95265,850],{"class":228},[79,95267,95268],{"class":81,"line":178},[79,95269,95270],{"class":2313},"#求平均值\n",[79,95272,95273],{"class":81,"line":545},[79,95274,95275],{"class":228},"np.mean(a)\n",[19,95277,95278],{},"②二维数组",[51,95280,95282],{"className":439,"code":95281,"language":441,"meta":57,"style":57},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[59,95283,95284,95289,95314,95319],{"__ignoreMap":57},[79,95285,95286],{"class":81,"line":82},[79,95287,95288],{"class":2313},"#二维数组\n",[79,95290,95291,95294,95296,95298,95300,95302,95304,95306,95308,95310,95312],{"class":81,"line":167},[79,95292,95293],{"class":228},"aa",[79,95295,239],{"class":448},[79,95297,94989],{"class":228},[79,95299,775],{"class":96},[79,95301,2621],{"class":228},[79,95303,2764],{"class":96},[79,95305,94994],{"class":228},[79,95307,970],{"class":96},[79,95309,2621],{"class":228},[79,95311,2537],{"class":96},[79,95313,850],{"class":228},[79,95315,95316],{"class":81,"line":178},[79,95317,95318],{"class":2313},"#对数组中的所有数求平均\n",[79,95320,95321],{"class":81,"line":545},[79,95322,95323],{"class":228},"np.mean(aa)\n",[14,95325,95327],{"id":95326},"_114-median求中位数函数","11.4 median()求中位数函数",[51,95329,95331],{"className":439,"code":95330,"language":441,"meta":57,"style":57},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[59,95332,95333,95338,95354,95359],{"__ignoreMap":57},[79,95334,95335],{"class":81,"line":82},[79,95336,95337],{"class":2313},"#求中位数\n",[79,95339,95340,95342,95344,95346,95348,95350,95352],{"class":81,"line":167},[79,95341,2507],{"class":228},[79,95343,239],{"class":448},[79,95345,94989],{"class":228},[79,95347,775],{"class":96},[79,95349,2621],{"class":228},[79,95351,2689],{"class":96},[79,95353,850],{"class":228},[79,95355,95356],{"class":81,"line":178},[79,95357,95358],{"class":228},"np.median(b)\n",[79,95360,95361],{"class":81,"line":545},[79,95362,95363],{"class":2313},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,95365,95367],{"id":95366},"_115-power求幂运算函数","11.5 power()求幂运算函数",[51,95369,95371],{"className":439,"code":95370,"language":441,"meta":57,"style":57},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[59,95372,95373,95389,95394,95399,95408,95413,95422],{"__ignoreMap":57},[79,95374,95375,95377,95379,95381,95383,95385,95387],{"class":81,"line":82},[79,95376,2507],{"class":228},[79,95378,239],{"class":448},[79,95380,94989],{"class":228},[79,95382,775],{"class":96},[79,95384,2621],{"class":228},[79,95386,2689],{"class":96},[79,95388,850],{"class":228},[79,95390,95391],{"class":81,"line":167},[79,95392,95393],{"class":2313},"#幂运算\n",[79,95395,95396],{"class":81,"line":178},[79,95397,95398],{"class":2313},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[79,95400,95401,95404,95406],{"class":81,"line":545},[79,95402,95403],{"class":228},"np.power(b,",[79,95405,2331],{"class":96},[79,95407,850],{"class":228},[79,95409,95410],{"class":81,"line":550},[79,95411,95412],{"class":2313},"#或者以下代码，将数据存储起来\n",[79,95414,95415,95417,95419],{"class":81,"line":562},[79,95416,3085],{"class":228},[79,95418,239],{"class":448},[79,95420,95421],{"class":228},"np.empty_like(b)\n",[79,95423,95424,95426,95428,95430,95432,95434],{"class":81,"line":568},[79,95425,95403],{"class":228},[79,95427,2331],{"class":96},[79,95429,2621],{"class":228},[79,95431,95041],{"class":7284},[79,95433,239],{"class":448},[79,95435,95436],{"class":228},"y)\n",[14,95438,95440],{"id":95439},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[51,95442,95444],{"className":439,"code":95443,"language":441,"meta":57,"style":57},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[59,95445,95446,95462,95467,95472,95476,95494],{"__ignoreMap":57},[79,95447,95448,95450,95452,95454,95456,95458,95460],{"class":81,"line":82},[79,95449,2507],{"class":228},[79,95451,239],{"class":448},[79,95453,94989],{"class":228},[79,95455,775],{"class":96},[79,95457,2621],{"class":228},[79,95459,2689],{"class":96},[79,95461,850],{"class":228},[79,95463,95464],{"class":81,"line":167},[79,95465,95466],{"class":2313},"#开方\n",[79,95468,95469],{"class":81,"line":178},[79,95470,95471],{"class":228},"np.sqrt(b)\n",[79,95473,95474],{"class":81,"line":545},[79,95475,95412],{"class":2313},[79,95477,95478,95480,95482,95485,95488,95490,95492],{"class":81,"line":550},[79,95479,3085],{"class":228},[79,95481,239],{"class":448},[79,95483,95484],{"class":228},"np.empty_like(b,",[79,95486,95487],{"class":7284},"dtype",[79,95489,239],{"class":448},[79,95491,742],{"class":96},[79,95493,850],{"class":228},[79,95495,95496,95499,95501,95503],{"class":81,"line":562},[79,95497,95498],{"class":228},"np.sqrt(b,",[79,95500,95041],{"class":7284},[79,95502,239],{"class":448},[79,95504,95436],{"class":228},[14,95506,95508],{"id":95507},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,95510,95511],{},"对数组中的元素累计求和，可指定轴",[19,95513,95514],{},"#累计求和的意思是：",[19,95516,95517],{},"a = np.array([1, 2, 3, 4])",[19,95519,95520],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[51,95522,95524],{"className":439,"code":95523,"language":441,"meta":57,"style":57},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[59,95525,95526,95542,95547,95552],{"__ignoreMap":57},[79,95527,95528,95530,95532,95534,95536,95538,95540],{"class":81,"line":82},[79,95529,2507],{"class":228},[79,95531,239],{"class":448},[79,95533,94989],{"class":228},[79,95535,775],{"class":96},[79,95537,2621],{"class":228},[79,95539,2689],{"class":96},[79,95541,850],{"class":228},[79,95543,95544],{"class":81,"line":167},[79,95545,95546],{"class":228},"np.cumsum(b)\n",[79,95548,95549],{"class":81,"line":178},[79,95550,95551],{"class":2313},"#结果：\n",[79,95553,95554],{"class":81,"line":545},[79,95555,95556],{"class":2313},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,95558,95560],{"id":95559},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[51,95562,95564],{"className":439,"code":95563,"language":441,"meta":57,"style":57},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[59,95565,95566,95582,95587,95592,95596],{"__ignoreMap":57},[79,95567,95568,95570,95572,95574,95576,95578,95580],{"class":81,"line":82},[79,95569,2507],{"class":228},[79,95571,239],{"class":448},[79,95573,94989],{"class":228},[79,95575,775],{"class":96},[79,95577,2621],{"class":228},[79,95579,2689],{"class":96},[79,95581,850],{"class":228},[79,95583,95584],{"class":81,"line":167},[79,95585,95586],{"class":2313},"#对数组中的元素累计求积，可指定轴\n",[79,95588,95589],{"class":81,"line":178},[79,95590,95591],{"class":228},"np.cumprod(b)\n",[79,95593,95594],{"class":81,"line":545},[79,95595,95551],{"class":2313},[79,95597,95598],{"class":81,"line":550},[79,95599,95600],{"class":2313},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,95602,95604],{"id":95603},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[51,95606,95608],{"className":439,"code":95607,"language":441,"meta":57,"style":57},"#删除数组中的重复数据，并对数据进行排序\na=np.array([1,2,3,12,3,10,32,0,23,4])\nnp.unique(a)\n#结果：\n#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[59,95609,95610,95615,95663,95668,95672],{"__ignoreMap":57},[79,95611,95612],{"class":81,"line":82},[79,95613,95614],{"class":2313},"#删除数组中的重复数据，并对数据进行排序\n",[79,95616,95617,95619,95621,95623,95625,95627,95629,95631,95633,95635,95637,95639,95641,95643,95645,95647,95649,95651,95653,95655,95657,95659,95661],{"class":81,"line":167},[79,95618,2482],{"class":228},[79,95620,239],{"class":448},[79,95622,95011],{"class":228},[79,95624,775],{"class":96},[79,95626,2621],{"class":228},[79,95628,2331],{"class":96},[79,95630,2621],{"class":228},[79,95632,970],{"class":96},[79,95634,2621],{"class":228},[79,95636,2739],{"class":96},[79,95638,2621],{"class":228},[79,95640,970],{"class":96},[79,95642,2621],{"class":228},[79,95644,2689],{"class":96},[79,95646,2621],{"class":228},[79,95648,2443],{"class":96},[79,95650,2621],{"class":228},[79,95652,759],{"class":96},[79,95654,2621],{"class":228},[79,95656,3015],{"class":96},[79,95658,2621],{"class":228},[79,95660,2537],{"class":96},[79,95662,6727],{"class":228},[79,95664,95665],{"class":81,"line":178},[79,95666,95667],{"class":228},"np.unique(a)\n",[79,95669,95670],{"class":81,"line":545},[79,95671,95551],{"class":2313},[79,95673,95674],{"class":81,"line":550},[79,95675,95676],{"class":2313},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,95678,95679],{},"升序形式排序",[14,95681,95683],{"id":95682},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[51,95685,95687],{"className":439,"code":95686,"language":441,"meta":57,"style":57},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[59,95688,95689,95737,95742],{"__ignoreMap":57},[79,95690,95691,95693,95695,95697,95699,95701,95703,95705,95707,95709,95711,95713,95715,95717,95719,95721,95723,95725,95727,95729,95731,95733,95735],{"class":81,"line":82},[79,95692,2482],{"class":228},[79,95694,239],{"class":448},[79,95696,95011],{"class":228},[79,95698,775],{"class":96},[79,95700,2621],{"class":228},[79,95702,2331],{"class":96},[79,95704,2621],{"class":228},[79,95706,970],{"class":96},[79,95708,2621],{"class":228},[79,95710,2739],{"class":96},[79,95712,2621],{"class":228},[79,95714,970],{"class":96},[79,95716,2621],{"class":228},[79,95718,2689],{"class":96},[79,95720,2621],{"class":228},[79,95722,2443],{"class":96},[79,95724,2621],{"class":228},[79,95726,759],{"class":96},[79,95728,2621],{"class":228},[79,95730,3015],{"class":96},[79,95732,2621],{"class":228},[79,95734,2537],{"class":96},[79,95736,6727],{"class":228},[79,95738,95739],{"class":81,"line":167},[79,95740,95741],{"class":2313},"#返回数组中非零元素的索引\n",[79,95743,95744],{"class":81,"line":178},[79,95745,95746],{"class":228},"np.nonzero(a)\n",[14,95748,95750],{"id":95749},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[51,95752,95754],{"className":439,"code":95753,"language":441,"meta":57,"style":57},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[59,95755,95756,95804,95809],{"__ignoreMap":57},[79,95757,95758,95760,95762,95764,95766,95768,95770,95772,95774,95776,95778,95780,95782,95784,95786,95788,95790,95792,95794,95796,95798,95800,95802],{"class":81,"line":82},[79,95759,2482],{"class":228},[79,95761,239],{"class":448},[79,95763,95011],{"class":228},[79,95765,775],{"class":96},[79,95767,2621],{"class":228},[79,95769,2331],{"class":96},[79,95771,2621],{"class":228},[79,95773,970],{"class":96},[79,95775,2621],{"class":228},[79,95777,2739],{"class":96},[79,95779,2621],{"class":228},[79,95781,970],{"class":96},[79,95783,2621],{"class":228},[79,95785,2689],{"class":96},[79,95787,2621],{"class":228},[79,95789,2443],{"class":96},[79,95791,2621],{"class":228},[79,95793,759],{"class":96},[79,95795,2621],{"class":228},[79,95797,3015],{"class":96},[79,95799,2621],{"class":228},[79,95801,2537],{"class":96},[79,95803,6727],{"class":228},[79,95805,95806],{"class":81,"line":167},[79,95807,95808],{"class":2313},"#计算一组数中最大值与最小值的差，可指定轴\n",[79,95810,95811],{"class":81,"line":178},[79,95812,95813],{"class":228},"np.ptp(a)\n",[2159,95815,95816],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":57,"searchDepth":167,"depth":167,"links":95818},[95819,95820,95821,95822,95823,95824,95825,95826,95827,95828,95829],{"id":95081,"depth":167,"text":95082},{"id":95124,"depth":167,"text":95125},{"id":95232,"depth":167,"text":95233},{"id":95326,"depth":167,"text":95327},{"id":95366,"depth":167,"text":95367},{"id":95439,"depth":167,"text":95440},{"id":95507,"depth":167,"text":95508},{"id":95559,"depth":167,"text":95560},{"id":95603,"depth":167,"text":95604},{"id":95682,"depth":167,"text":95683},{"id":95749,"depth":167,"text":95750},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":95067,"description":25402},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":95836,"title":95837,"body":95838,"description":25402,"extension":2186,"meta":96493,"navigation":541,"path":96494,"seo":96495,"stem":96496,"__hash__":96497},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":95839,"toc":96481},[95840,95843,95847,95850,96066,96070,96073,96282,96286,96352,96357,96361,96364,96367,96405,96409,96412,96417,96421,96424,96427,96432,96436,96439,96443,96446,96449,96454,96458,96461,96464,96469,96473,96478],[10,95841,95837],{"id":95842},"_12其他常用函数",[14,95844,95846],{"id":95845},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,95848,95849],{},"将数组的数据按照行列复制扩展",[51,95851,95853],{"className":439,"code":95852,"language":441,"meta":57,"style":57},"a=np.arange(1,5)\nnp.tile(a,2)\n#结果：\n#array([1, 2, 3, 4, 1, 2, 3, 4])\n#行复制两次，列复制三次\nnp.tile(a,(2,3))\n#结果：\n'''\narray([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n'''\n#创建二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.tile(aa,2)#一个数的时候就是行\n#结果：\n'''\narray([[ 1,  2,  3,  1,  2,  3],\n       [ 4,  5,  6,  4,  5,  6],\n       [ 7,  8,  9,  7,  8,  9],\n       [10, 11, 12, 10, 11, 12]])\n'''\nnp.tile(aa,(2,3))\n#结果：\n'''\narray([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n'''\n\n",[59,95854,95855,95871,95880,95884,95889,95894,95907,95911,95916,95921,95926,95930,95935,95959,95971,95975,95979,95984,95989,95994,95999,96003,96016,96020,96024,96029,96034,96039,96044,96049,96053,96057,96062],{"__ignoreMap":57},[79,95856,95857,95859,95861,95863,95865,95867,95869],{"class":81,"line":82},[79,95858,2482],{"class":228},[79,95860,239],{"class":448},[79,95862,94989],{"class":228},[79,95864,775],{"class":96},[79,95866,2621],{"class":228},[79,95868,2563],{"class":96},[79,95870,850],{"class":228},[79,95872,95873,95876,95878],{"class":81,"line":167},[79,95874,95875],{"class":228},"np.tile(a,",[79,95877,2331],{"class":96},[79,95879,850],{"class":228},[79,95881,95882],{"class":81,"line":178},[79,95883,95551],{"class":2313},[79,95885,95886],{"class":81,"line":545},[79,95887,95888],{"class":2313},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[79,95890,95891],{"class":81,"line":550},[79,95892,95893],{"class":2313},"#行复制两次，列复制三次\n",[79,95895,95896,95899,95901,95903,95905],{"class":81,"line":562},[79,95897,95898],{"class":228},"np.tile(a,(",[79,95900,2331],{"class":96},[79,95902,2621],{"class":228},[79,95904,970],{"class":96},[79,95906,1150],{"class":228},[79,95908,95909],{"class":81,"line":568},[79,95910,95551],{"class":2313},[79,95912,95913],{"class":81,"line":574},[79,95914,95915],{"class":89},"'''\n",[79,95917,95918],{"class":81,"line":579},[79,95919,95920],{"class":89},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[79,95922,95923],{"class":81,"line":585},[79,95924,95925],{"class":89},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[79,95927,95928],{"class":81,"line":591},[79,95929,95915],{"class":89},[79,95931,95932],{"class":81,"line":596},[79,95933,95934],{"class":2313},"#创建二维数组\n",[79,95936,95937,95939,95941,95943,95945,95947,95949,95951,95953,95955,95957],{"class":81,"line":602},[79,95938,95293],{"class":228},[79,95940,239],{"class":448},[79,95942,94989],{"class":228},[79,95944,775],{"class":96},[79,95946,2621],{"class":228},[79,95948,2764],{"class":96},[79,95950,94994],{"class":228},[79,95952,2537],{"class":96},[79,95954,2621],{"class":228},[79,95956,970],{"class":96},[79,95958,850],{"class":228},[79,95960,95961,95964,95966,95968],{"class":81,"line":608},[79,95962,95963],{"class":228},"np.tile(aa,",[79,95965,2331],{"class":96},[79,95967,2672],{"class":228},[79,95969,95970],{"class":2313},"#一个数的时候就是行\n",[79,95972,95973],{"class":81,"line":614},[79,95974,95551],{"class":2313},[79,95976,95977],{"class":81,"line":619},[79,95978,95915],{"class":89},[79,95980,95981],{"class":81,"line":625},[79,95982,95983],{"class":89},"array([[ 1,  2,  3,  1,  2,  3],\n",[79,95985,95986],{"class":81,"line":631},[79,95987,95988],{"class":89},"       [ 4,  5,  6,  4,  5,  6],\n",[79,95990,95991],{"class":81,"line":637},[79,95992,95993],{"class":89},"       [ 7,  8,  9,  7,  8,  9],\n",[79,95995,95996],{"class":81,"line":643},[79,95997,95998],{"class":89},"       [10, 11, 12, 10, 11, 12]])\n",[79,96000,96001],{"class":81,"line":649},[79,96002,95915],{"class":89},[79,96004,96005,96008,96010,96012,96014],{"class":81,"line":655},[79,96006,96007],{"class":228},"np.tile(aa,(",[79,96009,2331],{"class":96},[79,96011,2621],{"class":228},[79,96013,970],{"class":96},[79,96015,1150],{"class":228},[79,96017,96018],{"class":81,"line":660},[79,96019,95551],{"class":2313},[79,96021,96022],{"class":81,"line":666},[79,96023,95915],{"class":89},[79,96025,96026],{"class":81,"line":672},[79,96027,96028],{"class":89},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[79,96030,96031],{"class":81,"line":678},[79,96032,96033],{"class":89},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[79,96035,96036],{"class":81,"line":684},[79,96037,96038],{"class":89},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[79,96040,96041],{"class":81,"line":690},[79,96042,96043],{"class":89},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[79,96045,96046],{"class":81,"line":695},[79,96047,96048],{"class":89},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[79,96050,96051],{"class":81,"line":700},[79,96052,96033],{"class":89},[79,96054,96055],{"class":81,"line":712},[79,96056,96038],{"class":89},[79,96058,96059],{"class":81,"line":721},[79,96060,96061],{"class":89},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[79,96063,96064],{"class":81,"line":726},[79,96065,95915],{"class":89},[14,96067,96069],{"id":96068},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,96071,96072],{},"repeat()将数组中的每个元素重复若干次",[51,96074,96076],{"className":439,"code":96075,"language":441,"meta":57,"style":57},"a=np.arange(1,5)\nnp.repeat(a,3)\n#结果：\n#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\naa=np.arange(1,13).reshape(4,3)\n#这个重复之后二维变成一维\nnp.repeat(aa,2)\n'''\narray([ 1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8,  9, 9, 10, 10, 11, 11, 12, 12])\n'''\n#指定axis\nnp.repeat(aa,2,axis=0)\n#结果：\n'''\narray([[ 1,  2,  3],\n       [ 1,  2,  3],\n       [ 4,  5,  6],\n       [ 4,  5,  6],\n       [ 7,  8,  9],\n       [ 7,  8,  9],\n       [10, 11, 12],\n       [10, 11, 12]])\n'''\nnp.repeat(aa,2,axis=1)\n#结果：\n'''\narray([[ 1,  1,  2,  2,  3,  3],\n       [ 4,  4,  5,  5,  6,  6],\n       [ 7,  7,  8,  8,  9,  9],\n       [10, 10, 11, 11, 12, 12]])\n'''\n",[59,96077,96078,96094,96103,96107,96112,96136,96141,96150,96154,96159,96163,96168,96184,96188,96192,96197,96202,96207,96211,96216,96220,96225,96230,96234,96250,96254,96258,96263,96268,96273,96278],{"__ignoreMap":57},[79,96079,96080,96082,96084,96086,96088,96090,96092],{"class":81,"line":82},[79,96081,2482],{"class":228},[79,96083,239],{"class":448},[79,96085,94989],{"class":228},[79,96087,775],{"class":96},[79,96089,2621],{"class":228},[79,96091,2563],{"class":96},[79,96093,850],{"class":228},[79,96095,96096,96099,96101],{"class":81,"line":167},[79,96097,96098],{"class":228},"np.repeat(a,",[79,96100,970],{"class":96},[79,96102,850],{"class":228},[79,96104,96105],{"class":81,"line":178},[79,96106,95551],{"class":2313},[79,96108,96109],{"class":81,"line":545},[79,96110,96111],{"class":2313},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[79,96113,96114,96116,96118,96120,96122,96124,96126,96128,96130,96132,96134],{"class":81,"line":550},[79,96115,95293],{"class":228},[79,96117,239],{"class":448},[79,96119,94989],{"class":228},[79,96121,775],{"class":96},[79,96123,2621],{"class":228},[79,96125,2764],{"class":96},[79,96127,94994],{"class":228},[79,96129,2537],{"class":96},[79,96131,2621],{"class":228},[79,96133,970],{"class":96},[79,96135,850],{"class":228},[79,96137,96138],{"class":81,"line":562},[79,96139,96140],{"class":2313},"#这个重复之后二维变成一维\n",[79,96142,96143,96146,96148],{"class":81,"line":568},[79,96144,96145],{"class":228},"np.repeat(aa,",[79,96147,2331],{"class":96},[79,96149,850],{"class":228},[79,96151,96152],{"class":81,"line":574},[79,96153,95915],{"class":89},[79,96155,96156],{"class":81,"line":579},[79,96157,96158],{"class":89},"array([ 1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8,  9, 9, 10, 10, 11, 11, 12, 12])\n",[79,96160,96161],{"class":81,"line":585},[79,96162,95915],{"class":89},[79,96164,96165],{"class":81,"line":591},[79,96166,96167],{"class":2313},"#指定axis\n",[79,96169,96170,96172,96174,96176,96178,96180,96182],{"class":81,"line":596},[79,96171,96145],{"class":228},[79,96173,2331],{"class":96},[79,96175,2621],{"class":228},[79,96177,49509],{"class":7284},[79,96179,239],{"class":448},[79,96181,759],{"class":96},[79,96183,850],{"class":228},[79,96185,96186],{"class":81,"line":602},[79,96187,95551],{"class":2313},[79,96189,96190],{"class":81,"line":608},[79,96191,95915],{"class":89},[79,96193,96194],{"class":81,"line":614},[79,96195,96196],{"class":89},"array([[ 1,  2,  3],\n",[79,96198,96199],{"class":81,"line":619},[79,96200,96201],{"class":89},"       [ 1,  2,  3],\n",[79,96203,96204],{"class":81,"line":625},[79,96205,96206],{"class":89},"       [ 4,  5,  6],\n",[79,96208,96209],{"class":81,"line":631},[79,96210,96206],{"class":89},[79,96212,96213],{"class":81,"line":637},[79,96214,96215],{"class":89},"       [ 7,  8,  9],\n",[79,96217,96218],{"class":81,"line":643},[79,96219,96215],{"class":89},[79,96221,96222],{"class":81,"line":649},[79,96223,96224],{"class":89},"       [10, 11, 12],\n",[79,96226,96227],{"class":81,"line":655},[79,96228,96229],{"class":89},"       [10, 11, 12]])\n",[79,96231,96232],{"class":81,"line":660},[79,96233,95915],{"class":89},[79,96235,96236,96238,96240,96242,96244,96246,96248],{"class":81,"line":666},[79,96237,96145],{"class":228},[79,96239,2331],{"class":96},[79,96241,2621],{"class":228},[79,96243,49509],{"class":7284},[79,96245,239],{"class":448},[79,96247,775],{"class":96},[79,96249,850],{"class":228},[79,96251,96252],{"class":81,"line":672},[79,96253,95551],{"class":2313},[79,96255,96256],{"class":81,"line":678},[79,96257,95915],{"class":89},[79,96259,96260],{"class":81,"line":684},[79,96261,96262],{"class":89},"array([[ 1,  1,  2,  2,  3,  3],\n",[79,96264,96265],{"class":81,"line":690},[79,96266,96267],{"class":89},"       [ 4,  4,  5,  5,  6,  6],\n",[79,96269,96270],{"class":81,"line":695},[79,96271,96272],{"class":89},"       [ 7,  7,  8,  8,  9,  9],\n",[79,96274,96275],{"class":81,"line":700},[79,96276,96277],{"class":89},"       [10, 10, 11, 11, 12, 12]])\n",[79,96279,96280],{"class":81,"line":712},[79,96281,95915],{"class":89},[14,96283,96285],{"id":96284},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[51,96287,96289],{"className":439,"code":96288,"language":441,"meta":57,"style":57},"a=np.arange(1,5)\n#array([，2，3，4])\nnp.roll(a,2)#传正数向后调多少位，传负数向前调多少位\n#结果：\n#array([3, 4, 1, 2])\nnp.roll(a,-1)\n#结果：\n#array([2, 3, 4, 1])\n",[59,96290,96291,96307,96312,96324,96328,96333,96343,96347],{"__ignoreMap":57},[79,96292,96293,96295,96297,96299,96301,96303,96305],{"class":81,"line":82},[79,96294,2482],{"class":228},[79,96296,239],{"class":448},[79,96298,94989],{"class":228},[79,96300,775],{"class":96},[79,96302,2621],{"class":228},[79,96304,2563],{"class":96},[79,96306,850],{"class":228},[79,96308,96309],{"class":81,"line":167},[79,96310,96311],{"class":2313},"#array([，2，3，4])\n",[79,96313,96314,96317,96319,96321],{"class":81,"line":178},[79,96315,96316],{"class":228},"np.roll(a,",[79,96318,2331],{"class":96},[79,96320,2672],{"class":228},[79,96322,96323],{"class":2313},"#传正数向后调多少位，传负数向前调多少位\n",[79,96325,96326],{"class":81,"line":545},[79,96327,95551],{"class":2313},[79,96329,96330],{"class":81,"line":550},[79,96331,96332],{"class":2313},"#array([3, 4, 1, 2])\n",[79,96334,96335,96337,96339,96341],{"class":81,"line":562},[79,96336,96316],{"class":228},[79,96338,478],{"class":448},[79,96340,775],{"class":96},[79,96342,850],{"class":228},[79,96344,96345],{"class":81,"line":568},[79,96346,95551],{"class":2313},[79,96348,96349],{"class":81,"line":574},[79,96350,96351],{"class":2313},"#array([2, 3, 4, 1])\n",[19,96353,96354],{},[3569,96355],{"alt":57,"src":96356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,96358,96360],{"id":96359},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,96362,96363],{},"resize()重新调整数组的大小",[19,96365,96366],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[51,96368,96370],{"className":439,"code":96369,"language":441,"meta":57,"style":57},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[59,96371,96372,96377,96390],{"__ignoreMap":57},[79,96373,96374],{"class":81,"line":82},[79,96375,96376],{"class":2313},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[79,96378,96379,96382,96384,96386,96388],{"class":81,"line":167},[79,96380,96381],{"class":228},"np.resize(aa,(",[79,96383,2331],{"class":96},[79,96385,2621],{"class":228},[79,96387,2587],{"class":96},[79,96389,1150],{"class":228},[79,96391,96392,96394,96396,96398,96400,96402],{"class":81,"line":178},[79,96393,96381],{"class":228},[79,96395,2331],{"class":96},[79,96397,2621],{"class":228},[79,96399,2663],{"class":96},[79,96401,84758],{"class":228},[79,96403,96404],{"class":2313},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,96406,96408],{"id":96407},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,96410,96411],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,96413,96414],{},[3569,96415],{"alt":57,"src":96416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,96418,96420],{"id":96419},"_126-保存加载文件","12.6 保存加载文件",[19,96422,96423],{},"savetxt():将数据保存到txt文件中",[19,96425,96426],{},"loadtxt():从文件加载数据",[19,96428,96429],{},[3569,96430],{"alt":57,"src":96431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,96433,96435],{"id":96434},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,96437,96438],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,96440,96442],{"id":96441},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,96444,96445],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,96447,96448],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,96450,96451],{},[3569,96452],{"alt":57,"src":96453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,96455,96457],{"id":96456},"_129-where语句","12.9 where语句",[19,96459,96460],{},"np.where(条件,x,y)",[19,96462,96463],{},"如果条件为True,对应值为x,否则对应值为y",[19,96465,96466],{},[3569,96467],{"alt":57,"src":96468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,96470,96472],{"id":96471},"_1210-dot矩阵","12.10 dot()矩阵",[19,96474,96475],{},[3569,96476],{"alt":57,"src":96477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[2159,96479,96480],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":57,"searchDepth":167,"depth":167,"links":96482},[96483,96484,96485,96486,96487,96488,96489,96490,96491,96492],{"id":95845,"depth":167,"text":95846},{"id":96068,"depth":167,"text":96069},{"id":96284,"depth":167,"text":96285},{"id":96359,"depth":167,"text":96360},{"id":96407,"depth":167,"text":96408},{"id":96419,"depth":167,"text":96420},{"id":96434,"depth":167,"text":96435},{"id":96441,"depth":167,"text":96442},{"id":96456,"depth":167,"text":96457},{"id":96471,"depth":167,"text":96472},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":95837,"description":25402},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":96499,"title":96500,"body":96501,"description":25402,"extension":2186,"meta":96854,"navigation":541,"path":96855,"seo":96856,"stem":96857,"__hash__":96858},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":96502,"toc":96852},[96503,96506,96509,96512,96515,96518,96583,96585,96849],[10,96504,96500],{"id":96505},"_13数组排序",[19,96507,96508],{},"排序主要用到的方法是np.sort和np.argsort",[19,96510,96511],{},"其中np.sort()对数组直接排序",[19,96513,96514],{},"而np.argsort()是返回排序后的原始索引",[19,96516,96517],{},"①一维数组",[51,96519,96521],{"className":439,"code":96520,"language":441,"meta":57,"style":57},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[59,96522,96523,96527,96567,96575],{"__ignoreMap":57},[79,96524,96525],{"class":81,"line":82},[79,96526,95092],{"class":2313},[79,96528,96529,96531,96533,96535,96537,96539,96541,96543,96545,96547,96549,96551,96553,96555,96557,96559,96561,96563,96565],{"class":81,"line":167},[79,96530,2482],{"class":228},[79,96532,239],{"class":448},[79,96534,95011],{"class":228},[79,96536,970],{"class":96},[79,96538,2621],{"class":228},[79,96540,2739],{"class":96},[79,96542,2621],{"class":228},[79,96544,2638],{"class":96},[79,96546,2621],{"class":228},[79,96548,3015],{"class":96},[79,96550,2621],{"class":228},[79,96552,2523],{"class":96},[79,96554,2621],{"class":228},[79,96556,3133],{"class":96},[79,96558,2621],{"class":228},[79,96560,2587],{"class":96},[79,96562,2621],{"class":228},[79,96564,2689],{"class":96},[79,96566,6727],{"class":228},[79,96568,96569,96572],{"class":81,"line":178},[79,96570,96571],{"class":228},"np.sort(a)",[79,96573,96574],{"class":2313},"#升序排序\n",[79,96576,96577,96580],{"class":81,"line":545},[79,96578,96579],{"class":228},"np.argsort(a)",[79,96581,96582],{"class":2313},"#按照元素大小来索引排序\n",[19,96584,95278],{},[51,96586,96588],{"className":439,"code":96587,"language":441,"meta":57,"style":57},"np.random.seed(0)#保证每次值一样\naa=np.random.randint(100,size=(4,6))\n#原数组：\n'''\narray([[44, 47, 64, 67, 67,  9],\n       [83, 21, 36, 87, 70, 88],\n       [88, 12, 58, 65, 39, 87],\n       [46, 88, 81, 37, 25, 77]], dtype=int32)\n'''\nnp.sort(aa)#每行进行了排序\n'''\narray([[ 9, 44, 47, 64, 67, 67],\n       [21, 36, 70, 83, 87, 88],\n       [12, 39, 58, 65, 87, 88],\n       [25, 37, 46, 77, 81, 88]], dtype=int32)\n'''\n#axis=0时\nnp.sort(aa,axis=0)\n'''\narray([[44, 12, 36, 37, 25,  9],\n       [46, 21, 58, 65, 39, 77],\n       [83, 47, 64, 67, 67, 87],\n       [88, 88, 81, 87, 70, 88]], dtype=int32)\n'''\n#axis=1时,为默认值\nnp.sort(aa,axis=1)\n'''\narray([[ 9, 44, 47, 64, 67, 67],\n       [21, 36, 70, 83, 87, 88],\n       [12, 39, 58, 65, 87, 88],\n       [25, 37, 46, 77, 81, 88]], dtype=int32)\n'''\n#按最后一列排序\nb=aa[:,-1]\n#获取最后一列排好序的索引\nindex=np.argsort(b)\naa[index]\n'''\narray([[44, 47, 64, 67, 67,  9],\n       [46, 88, 81, 37, 25, 77],\n       [88, 12, 58, 65, 39, 87],\n       [83, 21, 36, 87, 70, 88]], dtype=int32)\n'''\n",[59,96589,96590,96602,96628,96633,96637,96642,96647,96652,96657,96661,96669,96673,96678,96683,96688,96693,96697,96702,96715,96719,96724,96729,96734,96739,96743,96748,96760,96764,96768,96772,96776,96780,96784,96789,96804,96809,96818,96823,96827,96831,96836,96840,96845],{"__ignoreMap":57},[79,96591,96592,96595,96597,96599],{"class":81,"line":82},[79,96593,96594],{"class":228},"np.random.seed(",[79,96596,759],{"class":96},[79,96598,2672],{"class":228},[79,96600,96601],{"class":2313},"#保证每次值一样\n",[79,96603,96604,96606,96608,96610,96612,96614,96616,96618,96620,96622,96624,96626],{"class":81,"line":167},[79,96605,95293],{"class":228},[79,96607,239],{"class":448},[79,96609,95101],{"class":228},[79,96611,2555],{"class":96},[79,96613,2621],{"class":228},[79,96615,33498],{"class":7284},[79,96617,239],{"class":448},[79,96619,455],{"class":228},[79,96621,2537],{"class":96},[79,96623,2621],{"class":228},[79,96625,2587],{"class":96},[79,96627,1150],{"class":228},[79,96629,96630],{"class":81,"line":178},[79,96631,96632],{"class":2313},"#原数组：\n",[79,96634,96635],{"class":81,"line":545},[79,96636,95915],{"class":89},[79,96638,96639],{"class":81,"line":550},[79,96640,96641],{"class":89},"array([[44, 47, 64, 67, 67,  9],\n",[79,96643,96644],{"class":81,"line":562},[79,96645,96646],{"class":89},"       [83, 21, 36, 87, 70, 88],\n",[79,96648,96649],{"class":81,"line":568},[79,96650,96651],{"class":89},"       [88, 12, 58, 65, 39, 87],\n",[79,96653,96654],{"class":81,"line":574},[79,96655,96656],{"class":89},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[79,96658,96659],{"class":81,"line":579},[79,96660,95915],{"class":89},[79,96662,96663,96666],{"class":81,"line":585},[79,96664,96665],{"class":228},"np.sort(aa)",[79,96667,96668],{"class":2313},"#每行进行了排序\n",[79,96670,96671],{"class":81,"line":591},[79,96672,95915],{"class":89},[79,96674,96675],{"class":81,"line":596},[79,96676,96677],{"class":89},"array([[ 9, 44, 47, 64, 67, 67],\n",[79,96679,96680],{"class":81,"line":602},[79,96681,96682],{"class":89},"       [21, 36, 70, 83, 87, 88],\n",[79,96684,96685],{"class":81,"line":608},[79,96686,96687],{"class":89},"       [12, 39, 58, 65, 87, 88],\n",[79,96689,96690],{"class":81,"line":614},[79,96691,96692],{"class":89},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[79,96694,96695],{"class":81,"line":619},[79,96696,95915],{"class":89},[79,96698,96699],{"class":81,"line":625},[79,96700,96701],{"class":2313},"#axis=0时\n",[79,96703,96704,96707,96709,96711,96713],{"class":81,"line":631},[79,96705,96706],{"class":228},"np.sort(aa,",[79,96708,49509],{"class":7284},[79,96710,239],{"class":448},[79,96712,759],{"class":96},[79,96714,850],{"class":228},[79,96716,96717],{"class":81,"line":637},[79,96718,95915],{"class":89},[79,96720,96721],{"class":81,"line":643},[79,96722,96723],{"class":89},"array([[44, 12, 36, 37, 25,  9],\n",[79,96725,96726],{"class":81,"line":649},[79,96727,96728],{"class":89},"       [46, 21, 58, 65, 39, 77],\n",[79,96730,96731],{"class":81,"line":655},[79,96732,96733],{"class":89},"       [83, 47, 64, 67, 67, 87],\n",[79,96735,96736],{"class":81,"line":660},[79,96737,96738],{"class":89},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[79,96740,96741],{"class":81,"line":666},[79,96742,95915],{"class":89},[79,96744,96745],{"class":81,"line":672},[79,96746,96747],{"class":2313},"#axis=1时,为默认值\n",[79,96749,96750,96752,96754,96756,96758],{"class":81,"line":678},[79,96751,96706],{"class":228},[79,96753,49509],{"class":7284},[79,96755,239],{"class":448},[79,96757,775],{"class":96},[79,96759,850],{"class":228},[79,96761,96762],{"class":81,"line":684},[79,96763,95915],{"class":89},[79,96765,96766],{"class":81,"line":690},[79,96767,96677],{"class":89},[79,96769,96770],{"class":81,"line":695},[79,96771,96682],{"class":89},[79,96773,96774],{"class":81,"line":700},[79,96775,96687],{"class":89},[79,96777,96778],{"class":81,"line":712},[79,96779,96692],{"class":89},[79,96781,96782],{"class":81,"line":721},[79,96783,95915],{"class":89},[79,96785,96786],{"class":81,"line":726},[79,96787,96788],{"class":2313},"#按最后一列排序\n",[79,96790,96791,96793,96795,96798,96800,96802],{"class":81,"line":731},[79,96792,2507],{"class":228},[79,96794,239],{"class":448},[79,96796,96797],{"class":228},"aa[:,",[79,96799,478],{"class":448},[79,96801,775],{"class":96},[79,96803,762],{"class":228},[79,96805,96806],{"class":81,"line":748},[79,96807,96808],{"class":2313},"#获取最后一列排好序的索引\n",[79,96810,96811,96813,96815],{"class":81,"line":765},[79,96812,76046],{"class":228},[79,96814,239],{"class":448},[79,96816,96817],{"class":228},"np.argsort(b)\n",[79,96819,96820],{"class":81,"line":780},[79,96821,96822],{"class":228},"aa[index]\n",[79,96824,96825],{"class":81,"line":811},[79,96826,95915],{"class":89},[79,96828,96829],{"class":81,"line":816},[79,96830,96641],{"class":89},[79,96832,96833],{"class":81,"line":821},[79,96834,96835],{"class":89},"       [46, 88, 81, 37, 25, 77],\n",[79,96837,96838],{"class":81,"line":837},[79,96839,96651],{"class":89},[79,96841,96842],{"class":81,"line":853},[79,96843,96844],{"class":89},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[79,96846,96847],{"class":81,"line":864},[79,96848,95915],{"class":89},[2159,96850,96851],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":57,"searchDepth":167,"depth":167,"links":96853},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":96500,"description":25402},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":96860,"title":96861,"body":96862,"description":25402,"extension":2186,"meta":96892,"navigation":541,"path":96893,"seo":96894,"stem":96895,"__hash__":96896},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":96863,"toc":96890},[96864,96867,96870,96873,96876,96879,96882,96885],[10,96865,96861],{"id":96866},"_14广播机制",[19,96868,96869],{},"广播的规则：",[19,96871,96872],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,96874,96875],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,96877,96878],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,96880,96881],{},"3.如果没有维度形状为1，则会引发异常",[19,96883,96884],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,96886,96887],{},[3569,96888],{"alt":57,"src":96889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":57,"searchDepth":167,"depth":167,"links":96891},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":96861,"description":25402},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":96898,"title":96899,"body":96900,"description":25402,"extension":2186,"meta":96998,"navigation":541,"path":96999,"seo":97000,"stem":97001,"__hash__":97002},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":96901,"toc":96996},[96902,96905,96908,96993],[10,96903,96899],{"id":96904},"_15比较掩码",[19,96906,96907],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[51,96909,96911],{"className":439,"code":96910,"language":441,"meta":57,"style":57},"a=np.array([[1,2,3],[11,12,13],[21,22,23]])\na\u003C20#结果是一个由True,False组成的数组\na[a\u003C20]#小于20的元素会存到这个数组中\n#结果：\n#array([ 1,  2,  3, 11, 12, 13])\n",[59,96912,96913,96959,96970,96984,96988],{"__ignoreMap":57},[79,96914,96915,96917,96919,96922,96924,96926,96928,96930,96932,96934,96936,96938,96940,96942,96944,96946,96948,96950,96952,96954,96956],{"class":81,"line":82},[79,96916,2482],{"class":228},[79,96918,239],{"class":448},[79,96920,96921],{"class":228},"np.array([[",[79,96923,775],{"class":96},[79,96925,2621],{"class":228},[79,96927,2331],{"class":96},[79,96929,2621],{"class":228},[79,96931,970],{"class":96},[79,96933,50025],{"class":228},[79,96935,2714],{"class":96},[79,96937,2621],{"class":228},[79,96939,2739],{"class":96},[79,96941,2621],{"class":228},[79,96943,2764],{"class":96},[79,96945,50025],{"class":228},[79,96947,2965],{"class":96},[79,96949,2621],{"class":228},[79,96951,2990],{"class":96},[79,96953,2621],{"class":228},[79,96955,3015],{"class":96},[79,96957,96958],{"class":228},"]])\n",[79,96960,96961,96963,96965,96967],{"class":81,"line":167},[79,96962,2482],{"class":228},[79,96964,229],{"class":448},[79,96966,2940],{"class":96},[79,96968,96969],{"class":2313},"#结果是一个由True,False组成的数组\n",[79,96971,96972,96975,96977,96979,96981],{"class":81,"line":178},[79,96973,96974],{"class":228},"a[a",[79,96976,229],{"class":448},[79,96978,2940],{"class":96},[79,96980,3179],{"class":228},[79,96982,96983],{"class":2313},"#小于20的元素会存到这个数组中\n",[79,96985,96986],{"class":81,"line":545},[79,96987,95551],{"class":2313},[79,96989,96990],{"class":81,"line":550},[79,96991,96992],{"class":2313},"#array([ 1,  2,  3, 11, 12, 13])\n",[2159,96994,96995],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":57,"searchDepth":167,"depth":167,"links":96997},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":96899,"description":25402},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":97004,"title":97005,"body":97006,"description":25402,"extension":2186,"meta":97098,"navigation":541,"path":97099,"seo":97100,"stem":97101,"__hash__":97102},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":97007,"toc":97096},[97008,97011,97014,97017,97020,97023,97088,97093],[10,97009,97005],{"id":97010},"_16魔法命令time",[19,97012,97013],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,97015,97016],{},"%:行模式",[19,97018,97019],{},"%%:单元格模式",[19,97021,97022],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[51,97024,97026],{"className":439,"code":97025,"language":441,"meta":57,"style":57},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[59,97027,97028,97033,97040,97045,97054,97067,97071,97079],{"__ignoreMap":57},[79,97029,97030],{"class":81,"line":82},[79,97031,97032],{"class":2313},"#程序执行时间\n",[79,97034,97035,97037],{"class":81,"line":167},[79,97036,520],{"class":448},[79,97038,97039],{"class":228}," time \n",[79,97041,97042],{"class":81,"line":178},[79,97043,97044],{"class":2313},"#获取时间\n",[79,97046,97047,97050,97052],{"class":81,"line":545},[79,97048,97049],{"class":228},"start",[79,97051,239],{"class":448},[79,97053,34417],{"class":228},[79,97055,97056,97059,97062,97064],{"class":81,"line":550},[79,97057,97058],{"class":228},"time.sleep(",[79,97060,97061],{"class":96},"0.4",[79,97063,2672],{"class":228},[79,97065,97066],{"class":2313},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[79,97068,97069],{"class":81,"line":562},[79,97070,97044],{"class":2313},[79,97072,97073,97075,97077],{"class":81,"line":568},[79,97074,47796],{"class":228},[79,97076,239],{"class":448},[79,97078,34417],{"class":228},[79,97080,97081,97083,97085],{"class":81,"line":574},[79,97082,47796],{"class":228},[79,97084,478],{"class":448},[79,97086,97087],{"class":228},"start\n",[19,97089,97090],{},[3569,97091],{"alt":57,"src":97092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[2159,97094,97095],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":57,"searchDepth":167,"depth":167,"links":97097},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":97005,"description":25402},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":97104,"title":97105,"body":97106,"description":25402,"extension":2186,"meta":97141,"navigation":541,"path":97142,"seo":97143,"stem":97144,"__hash__":97145},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":97107,"toc":97139},[97108,97111,97114,97117,97120,97123,97126,97129,97134],[10,97109,97105],{"id":97110},"_17魔法命令timeit",[19,97112,97113],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,97115,97116],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,97118,97119],{},"单元格模式：",[19,97121,97122],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,97124,97125],{},"初始化语句执行次数由轮数来决定",[19,97127,97128],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,97130,97131],{},[3569,97132],{"alt":57,"src":97133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,97135,97136],{},[3569,97137],{"alt":57,"src":97138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":57,"searchDepth":167,"depth":167,"links":97140},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":97105,"description":25402},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":97147,"title":97148,"body":97149,"description":25402,"extension":2186,"meta":97167,"navigation":541,"path":97168,"seo":97169,"stem":97170,"__hash__":97171},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":97150,"toc":97165},[97151,97154,97157,97160],[10,97152,97148],{"id":97153},"_18魔法命令writefile和run",[19,97155,97156],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,97158,97159],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,97161,97162],{},[3569,97163],{"alt":57,"src":97164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":57,"searchDepth":167,"depth":167,"links":97166},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":97148,"description":25402},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":97173,"title":97174,"body":97175,"description":25402,"extension":2186,"meta":97228,"navigation":541,"path":97229,"seo":97230,"stem":97231,"__hash__":97232},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":97176,"toc":97226},[97177,97180,97183,97185,97188,97191,97196,97199,97202,97205,97208,97211,97214,97217,97220,97223],[10,97178,97174],{"id":97179},"_19魔法命令memit",[19,97181,97182],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,97184,26619],{},[19,97186,97187],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,97189,97190],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,97192,97193],{},[3569,97194],{"alt":57,"src":97195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,97197,97198],{},"补充：",[19,97200,97201],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,97203,97204],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,97206,97207],{},"解决方法：",[19,97209,97210],{},"1.cmd",[19,97212,97213],{},"2.依次输入以下代码：",[19,97215,97216],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,97218,97219],{},"pip install --upgrade ipython",[19,97221,97222],{},"#升级 memory_profiler 和 setuptools",[19,97224,97225],{},"pip install --upgrade memory_profiler setuptools",{"title":57,"searchDepth":167,"depth":167,"links":97227},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":97174,"description":25402},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":97234,"title":97235,"body":97236,"description":25402,"extension":2186,"meta":98880,"navigation":541,"path":98881,"seo":98882,"stem":98883,"__hash__":98884},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":97237,"toc":98850},[97238,97241,97245,97249,97310,97313,97318,97322,97327,97332,97337,97342,97345,97350,97354,97358,97391,97394,97397,97400,97452,97455,97491,97494,97536,97540,97561,97563,97600,97602,97607,97609,97614,97618,97621,97649,97653,97657,97708,97712,97804,97808,97812,97815,97820,97824,97849,97854,97858,97861,97864,97867,97870,97873,97876,97879,97891,97895,97899,97902,97934,97937,97960,97963,97989,97992,98018,98021,98055,98058,98120,98124,98127,98131,98134,98160,98163,98166,98171,98174,98243,98245,98250,98311,98314,98325,98331,98336,98340,98343,98356,98360,98375,98377,98400,98402,98428,98431,98434,98437,98485,98487,98492,98496,98500,98527,98531,98558,98561,98566,98571,98661,98665,98723,98728,98731,98734,98776,98780,98836,98841,98844,98847],[10,97239,97235],{"id":97240},"_2创建数组",[14,97242,97244],{"id":97243},"_21-array函数创建数组","2.1 array()函数创建数组",[339,97246,97248],{"id":97247},"_221-函数语句","2.2.1 函数语句",[51,97250,97252],{"className":439,"code":97251,"language":441,"meta":57,"style":57},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[59,97253,97254],{"__ignoreMap":57},[79,97255,97256,97259,97262,97264,97266,97268,97270,97272,97275,97277,97280,97282,97285,97287,97289,97291,97294,97296,97299,97301,97304,97306,97308],{"class":81,"line":82},[79,97257,97258],{"class":228},"numpy.array(",[79,97260,97261],{"class":96},"object",[79,97263,1020],{"class":228},[79,97265,95487],{"class":7284},[79,97267,556],{"class":448},[79,97269,40928],{"class":96},[79,97271,1020],{"class":228},[79,97273,97274],{"class":7284},"copy",[79,97276,556],{"class":448},[79,97278,97279],{"class":96}," True",[79,97281,1020],{"class":228},[79,97283,97284],{"class":7284},"order",[79,97286,556],{"class":448},[79,97288,40928],{"class":96},[79,97290,1020],{"class":228},[79,97292,97293],{"class":7284},"subok",[79,97295,556],{"class":448},[79,97297,97298],{"class":96}," False",[79,97300,1020],{"class":228},[79,97302,97303],{"class":7284},"ndmin",[79,97305,556],{"class":448},[79,97307,1103],{"class":96},[79,97309,850],{"class":228},[19,97311,97312],{},"参数：",[19,97314,97315],{},[3569,97316],{"alt":57,"src":97317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[339,97319,97321],{"id":97320},"_222-实例","2.2.2 实例",[19,97323,97324],{},[3569,97325],{"alt":57,"src":97326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,97328,97329],{},[3569,97330],{"alt":57,"src":97331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,97333,97334],{},[3569,97335],{"alt":57,"src":97336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,97338,97339],{},[3569,97340],{"alt":57,"src":97341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,97343,97344],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,97346,97347],{},[3569,97348],{"alt":57,"src":97349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,97351,97353],{"id":97352},"_22-随机数创建数组","2.2 随机数创建数组",[339,97355,97357],{"id":97356},"_221-random语句","2.2.1 random语句",[51,97359,97361],{"className":439,"code":97360,"language":441,"meta":57,"style":57},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[59,97362,97363,97368,97373,97381,97386],{"__ignoreMap":57},[79,97364,97365],{"class":81,"line":82},[79,97366,97367],{"class":2313},"#random.random()\n",[79,97369,97370],{"class":81,"line":167},[79,97371,97372],{"class":2313},"#确定随机种子,就是每次运行结果是相同的\n",[79,97374,97375,97377,97379],{"class":81,"line":178},[79,97376,96594],{"class":228},[79,97378,759],{"class":96},[79,97380,850],{"class":228},[79,97382,97383],{"class":81,"line":545},[79,97384,97385],{"class":228},"np.random.random()\n",[79,97387,97388],{"class":81,"line":550},[79,97389,97390],{"class":2313},"#生成一个随机的数目\n",[19,97392,97393],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,97395,97396],{},"可以指定数组形状 size",[19,97398,97399],{},"①生成一维数组",[51,97401,97403],{"className":439,"code":97402,"language":441,"meta":57,"style":57},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[59,97404,97405,97410,97423,97428,97444],{"__ignoreMap":57},[79,97406,97407],{"class":81,"line":82},[79,97408,97409],{"class":2313},"#random.random(size())\n",[79,97411,97412,97415,97417,97419,97421],{"class":81,"line":167},[79,97413,97414],{"class":228},"np.random.random(",[79,97416,33498],{"class":7284},[79,97418,239],{"class":448},[79,97420,2563],{"class":96},[79,97422,850],{"class":228},[79,97424,97425],{"class":81,"line":178},[79,97426,97427],{"class":2313},"#生成一位的五个元素\n",[79,97429,97430,97432,97434,97436,97438,97440,97442],{"class":81,"line":545},[79,97431,2482],{"class":228},[79,97433,239],{"class":448},[79,97435,97414],{"class":228},[79,97437,33498],{"class":7284},[79,97439,239],{"class":448},[79,97441,2537],{"class":96},[79,97443,850],{"class":228},[79,97445,97446,97449],{"class":81,"line":550},[79,97447,97448],{"class":228},"a.shape ",[79,97450,97451],{"class":2313},"#输出数组形状\n",[19,97453,97454],{},"②生成二维数组",[51,97456,97458],{"className":439,"code":97457,"language":441,"meta":57,"style":57},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[59,97459,97460,97464,97486],{"__ignoreMap":57},[79,97461,97462],{"class":81,"line":82},[79,97463,95288],{"class":2313},[79,97465,97466,97468,97470,97472,97474,97476,97478,97480,97482,97484],{"class":81,"line":167},[79,97467,95293],{"class":228},[79,97469,239],{"class":448},[79,97471,97414],{"class":228},[79,97473,33498],{"class":7284},[79,97475,239],{"class":448},[79,97477,455],{"class":228},[79,97479,2537],{"class":96},[79,97481,2621],{"class":228},[79,97483,2563],{"class":96},[79,97485,1150],{"class":228},[79,97487,97488],{"class":81,"line":178},[79,97489,97490],{"class":2313},"#生成四行五列的数组\n",[19,97492,97493],{},"③生成三维数组",[51,97495,97497],{"className":439,"code":97496,"language":441,"meta":57,"style":57},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[59,97498,97499,97504,97531],{"__ignoreMap":57},[79,97500,97501],{"class":81,"line":82},[79,97502,97503],{"class":2313},"#三维数组\n",[79,97505,97506,97509,97511,97513,97515,97517,97519,97521,97523,97525,97527,97529],{"class":81,"line":167},[79,97507,97508],{"class":228},"aaa",[79,97510,239],{"class":448},[79,97512,97414],{"class":228},[79,97514,33498],{"class":7284},[79,97516,239],{"class":448},[79,97518,455],{"class":228},[79,97520,2331],{"class":96},[79,97522,2621],{"class":228},[79,97524,970],{"class":96},[79,97526,2621],{"class":228},[79,97528,2537],{"class":96},[79,97530,1150],{"class":228},[79,97532,97533],{"class":81,"line":178},[79,97534,97535],{"class":228},"aaa.shape\n",[339,97537,97539],{"id":97538},"_222-randint语句","2.2.2 randint语句",[51,97541,97543],{"className":439,"code":97542,"language":441,"meta":57,"style":57},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[59,97544,97545,97550],{"__ignoreMap":57},[79,97546,97547],{"class":81,"line":82},[79,97548,97549],{"class":2313},"#生成随机的整数 random.randint(low,high,size)\n",[79,97551,97552,97554,97556,97558],{"class":81,"line":167},[79,97553,95101],{"class":228},[79,97555,2563],{"class":96},[79,97557,15747],{"class":228},[79,97559,97560],{"class":2313},"#0~5中的随机一个数\n",[19,97562,97399],{},[51,97564,97566],{"className":439,"code":97565,"language":441,"meta":57,"style":57},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[59,97567,97568,97573,97595],{"__ignoreMap":57},[79,97569,97570],{"class":81,"line":82},[79,97571,97572],{"class":2313},"#一维\n",[79,97574,97575,97577,97579,97581,97583,97585,97587,97589,97591,97593],{"class":81,"line":167},[79,97576,95101],{"class":228},[79,97578,775],{"class":96},[79,97580,2621],{"class":228},[79,97582,2714],{"class":96},[79,97584,2621],{"class":228},[79,97586,33498],{"class":7284},[79,97588,239],{"class":448},[79,97590,455],{"class":228},[79,97592,2689],{"class":96},[79,97594,1150],{"class":228},[79,97596,97597],{"class":81,"line":178},[79,97598,97599],{"class":2313},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,97601,97454],{},[19,97603,97604],{},[3569,97605],{"alt":57,"src":97606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,97608,97493],{},[19,97610,97611],{},[3569,97612],{"alt":57,"src":97613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[339,97615,97617],{"id":97616},"_222-rand语句","2.2.2 rand语句",[19,97619,97620],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[51,97622,97624],{"className":439,"code":97623,"language":441,"meta":57,"style":57},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[59,97625,97626,97639,97644],{"__ignoreMap":57},[79,97627,97628,97631,97633,97635,97637],{"class":81,"line":82},[79,97629,97630],{"class":228},"np.random.rand(",[79,97632,2555],{"class":96},[79,97634,2621],{"class":228},[79,97636,2689],{"class":96},[79,97638,850],{"class":228},[79,97640,97641],{"class":81,"line":167},[79,97642,97643],{"class":2313},"#第一个参数100：行数，表示有100个样本\n",[79,97645,97646],{"class":81,"line":178},[79,97647,97648],{"class":2313},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,97650,97652],{"id":97651},"_23-arange创建数组","2.3 arange()创建数组",[339,97654,97656],{"id":97655},"_231-函数语句","2.3.1 函数语句",[51,97658,97660],{"className":439,"code":97659,"language":441,"meta":57,"style":57},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[59,97661,97662,97675,97680,97684,97689,97694,97699,97704],{"__ignoreMap":57},[79,97663,97664,97667,97669,97671,97673],{"class":81,"line":82},[79,97665,97666],{"class":228},"numpy.arange([start,] stop[, step], ",[79,97668,95487],{"class":7284},[79,97670,239],{"class":448},[79,97672,832],{"class":96},[79,97674,850],{"class":228},[79,97676,97677],{"class":81,"line":167},[79,97678,97679],{"class":2313},"#参数\n",[79,97681,97682],{"class":81,"line":178},[79,97683,687],{"class":89},[79,97685,97686],{"class":81,"line":545},[79,97687,97688],{"class":89},"start:起始值，可选，默认从 0 开始。\n",[79,97690,97691],{"class":81,"line":550},[79,97692,97693],{"class":89},"stop:结束值（不包含该值）。\n",[79,97695,97696],{"class":81,"line":562},[79,97697,97698],{"class":89},"step:步长，可选，默认是 1。可以为浮点数。\n",[79,97700,97701],{"class":81,"line":568},[79,97702,97703],{"class":89},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[79,97705,97706],{"class":81,"line":574},[79,97707,687],{"class":89},[339,97709,97711],{"id":97710},"_232-实例","2.3.2 实例",[51,97713,97715],{"className":439,"code":97714,"language":441,"meta":57,"style":57},"#创建一维数组\nnp.arange(1,21,1,dtype=int)\n#输出结果：\n#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n#创建二维数组\nnp.array([np.arange(1,4),np.arange(4,7)])\n#结果：\n\"\"\"\narray([[1, 2, 3],\n       [4, 5, 6]])\n\"\"\"\n",[59,97716,97717,97721,97745,97750,97755,97759,97782,97786,97790,97795,97800],{"__ignoreMap":57},[79,97718,97719],{"class":81,"line":82},[79,97720,95092],{"class":2313},[79,97722,97723,97725,97727,97729,97731,97733,97735,97737,97739,97741,97743],{"class":81,"line":167},[79,97724,94989],{"class":228},[79,97726,775],{"class":96},[79,97728,2621],{"class":228},[79,97730,2965],{"class":96},[79,97732,2621],{"class":228},[79,97734,775],{"class":96},[79,97736,2621],{"class":228},[79,97738,95487],{"class":7284},[79,97740,239],{"class":448},[79,97742,2262],{"class":96},[79,97744,850],{"class":228},[79,97746,97747],{"class":81,"line":178},[79,97748,97749],{"class":2313},"#输出结果：\n",[79,97751,97752],{"class":81,"line":545},[79,97753,97754],{"class":2313},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[79,97756,97757],{"class":81,"line":550},[79,97758,95934],{"class":2313},[79,97760,97761,97764,97766,97768,97770,97773,97775,97777,97779],{"class":81,"line":562},[79,97762,97763],{"class":228},"np.array([np.arange(",[79,97765,775],{"class":96},[79,97767,2621],{"class":228},[79,97769,2537],{"class":96},[79,97771,97772],{"class":228},"),np.arange(",[79,97774,2537],{"class":96},[79,97776,2621],{"class":228},[79,97778,2612],{"class":96},[79,97780,97781],{"class":228},")])\n",[79,97783,97784],{"class":81,"line":568},[79,97785,95551],{"class":2313},[79,97787,97788],{"class":81,"line":574},[79,97789,687],{"class":89},[79,97791,97792],{"class":81,"line":579},[79,97793,97794],{"class":89},"array([[1, 2, 3],\n",[79,97796,97797],{"class":81,"line":585},[79,97798,97799],{"class":89},"       [4, 5, 6]])\n",[79,97801,97802],{"class":81,"line":591},[79,97803,687],{"class":89},[14,97805,97807],{"id":97806},"_24-生态分布","2.4 生态分布",[339,97809,97811],{"id":97810},"_241-标准正态分布","2.4.1 标准正态分布",[19,97813,97814],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,97816,97817],{},[3569,97818],{"alt":57,"src":97819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[339,97821,97823],{"id":97822},"_242-常规正态分布","2.4.2 常规正态分布",[51,97825,97827],{"className":439,"code":97826,"language":441,"meta":57,"style":57},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[59,97828,97829,97834,97839,97844],{"__ignoreMap":57},[79,97830,97831],{"class":81,"line":82},[79,97832,97833],{"class":228},"random.normal(loc,scale,size)也可以生成正态分布\n",[79,97835,97836],{"class":81,"line":167},[79,97837,97838],{"class":2313},"#loc:期望\n",[79,97840,97841],{"class":81,"line":178},[79,97842,97843],{"class":2313},"#scale:方差\n",[79,97845,97846],{"class":81,"line":545},[79,97847,97848],{"class":2313},"#size:用于确定是几维的数列\n",[19,97850,97851],{},[3569,97852],{"alt":57,"src":97853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,97855,97857],{"id":97856},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,97859,97860],{},"ndim:秩，维度个数",[19,97862,97863],{},"size:数组元素的个数",[19,97865,97866],{},"shape:数组的形状",[19,97868,97869],{},"dtype:数组元素的类型",[19,97871,97872],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,97874,97875],{},"他们都是属性，通过数组.属性的形式来确定",[19,97877,97878],{},"如果需要输出多个可以通过以下方式：",[51,97880,97882],{"className":439,"code":97881,"language":441,"meta":57,"style":57},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[59,97883,97884],{"__ignoreMap":57},[79,97885,97886,97888],{"class":81,"line":82},[79,97887,1889],{"class":96},[79,97889,97890],{"class":228},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,97892,97894],{"id":97893},"_26-其他方式创建数组","2.6 其他方式创建数组",[339,97896,97898],{"id":97897},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,97900,97901],{},"①创建一维数组",[51,97903,97905],{"className":439,"code":97904,"language":441,"meta":57,"style":57},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[59,97906,97907,97916,97920,97925,97930],{"__ignoreMap":57},[79,97908,97909,97912,97914],{"class":81,"line":82},[79,97910,97911],{"class":228},"np.zeros(",[79,97913,2689],{"class":96},[79,97915,850],{"class":228},[79,97917,97918],{"class":81,"line":167},[79,97919,687],{"class":89},[79,97921,97922],{"class":81,"line":178},[79,97923,97924],{"class":89},"输出结果：\n",[79,97926,97927],{"class":81,"line":545},[79,97928,97929],{"class":89},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[79,97931,97932],{"class":81,"line":550},[79,97933,687],{"class":89},[19,97935,97936],{},"上方代码等价于：",[51,97938,97940],{"className":439,"code":97939,"language":441,"meta":57,"style":57},"np.zeros(shape=(10))#创建10个元素的0数组\n",[59,97941,97942],{"__ignoreMap":57},[79,97943,97944,97946,97949,97951,97953,97955,97957],{"class":81,"line":82},[79,97945,97911],{"class":228},[79,97947,97948],{"class":7284},"shape",[79,97950,239],{"class":448},[79,97952,455],{"class":228},[79,97954,2689],{"class":96},[79,97956,84758],{"class":228},[79,97958,97959],{"class":2313},"#创建10个元素的0数组\n",[19,97961,97962],{},"也可以指定类型",[51,97964,97966],{"className":439,"code":97965,"language":441,"meta":57,"style":57},"#指定类型\nnp.zeros(5,dtype=int)\n",[59,97967,97968,97973],{"__ignoreMap":57},[79,97969,97970],{"class":81,"line":82},[79,97971,97972],{"class":2313},"#指定类型\n",[79,97974,97975,97977,97979,97981,97983,97985,97987],{"class":81,"line":167},[79,97976,97911],{"class":228},[79,97978,2563],{"class":96},[79,97980,2621],{"class":228},[79,97982,95487],{"class":7284},[79,97984,239],{"class":448},[79,97986,2262],{"class":96},[79,97988,850],{"class":228},[19,97990,97991],{},"②创建二维数组",[51,97993,97995],{"className":439,"code":97994,"language":441,"meta":57,"style":57},"np.zeros((3,4),dtype=int)\n",[59,97996,97997],{"__ignoreMap":57},[79,97998,97999,98002,98004,98006,98008,98010,98012,98014,98016],{"class":81,"line":82},[79,98000,98001],{"class":228},"np.zeros((",[79,98003,970],{"class":96},[79,98005,2621],{"class":228},[79,98007,2537],{"class":96},[79,98009,44251],{"class":228},[79,98011,95487],{"class":7284},[79,98013,239],{"class":448},[79,98015,2262],{"class":96},[79,98017,850],{"class":228},[19,98019,98020],{},"③创建三维数组",[51,98022,98024],{"className":439,"code":98023,"language":441,"meta":57,"style":57},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[59,98025,98026,98031],{"__ignoreMap":57},[79,98027,98028],{"class":81,"line":82},[79,98029,98030],{"class":2313},"#创建三维数组\n",[79,98032,98033,98035,98037,98039,98041,98043,98045,98047,98049,98051,98053],{"class":81,"line":167},[79,98034,98001],{"class":228},[79,98036,970],{"class":96},[79,98038,2621],{"class":228},[79,98040,2537],{"class":96},[79,98042,2621],{"class":228},[79,98044,2563],{"class":96},[79,98046,44251],{"class":228},[79,98048,95487],{"class":7284},[79,98050,239],{"class":448},[79,98052,2262],{"class":96},[79,98054,850],{"class":228},[19,98056,98057],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[51,98059,98061],{"className":439,"code":98060,"language":441,"meta":57,"style":57},"#使用zeros_like将创建的一维数组变成全0的数组\na=np.arange(4)#这个得到的结果：一维数组0，1，2，3\nnp.zeros_like(a)\n#使用zeros_like将创建的二维数组变成全0的数组\naa=np.random.random(size=(4,5))\nnp.zeros_like(aa)\n",[59,98062,98063,98068,98083,98088,98093,98115],{"__ignoreMap":57},[79,98064,98065],{"class":81,"line":82},[79,98066,98067],{"class":2313},"#使用zeros_like将创建的一维数组变成全0的数组\n",[79,98069,98070,98072,98074,98076,98078,98080],{"class":81,"line":167},[79,98071,2482],{"class":228},[79,98073,239],{"class":448},[79,98075,94989],{"class":228},[79,98077,2537],{"class":96},[79,98079,2672],{"class":228},[79,98081,98082],{"class":2313},"#这个得到的结果：一维数组0，1，2，3\n",[79,98084,98085],{"class":81,"line":178},[79,98086,98087],{"class":228},"np.zeros_like(a)\n",[79,98089,98090],{"class":81,"line":545},[79,98091,98092],{"class":2313},"#使用zeros_like将创建的二维数组变成全0的数组\n",[79,98094,98095,98097,98099,98101,98103,98105,98107,98109,98111,98113],{"class":81,"line":550},[79,98096,95293],{"class":228},[79,98098,239],{"class":448},[79,98100,97414],{"class":228},[79,98102,33498],{"class":7284},[79,98104,239],{"class":448},[79,98106,455],{"class":228},[79,98108,2537],{"class":96},[79,98110,2621],{"class":228},[79,98112,2563],{"class":96},[79,98114,1150],{"class":228},[79,98116,98117],{"class":81,"line":562},[79,98118,98119],{"class":228},"np.zeros_like(aa)\n",[339,98121,98123],{"id":98122},"_262-ones创建数组","2.6.2 ones()创建数组",[19,98125,98126],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[339,98128,98130],{"id":98129},"_263-empty创建数组","2.6.3 empty()创建数组",[19,98132,98133],{},"①empty()用法",[51,98135,98137],{"className":439,"code":98136,"language":441,"meta":57,"style":57},"numpy.empty(shape,dtype=float,order='c')\n",[59,98138,98139],{"__ignoreMap":57},[79,98140,98141,98144,98146,98148,98150,98152,98154,98156,98158],{"class":81,"line":82},[79,98142,98143],{"class":228},"numpy.empty(shape,",[79,98145,95487],{"class":7284},[79,98147,239],{"class":448},[79,98149,742],{"class":96},[79,98151,2621],{"class":228},[79,98153,97284],{"class":7284},[79,98155,239],{"class":448},[79,98157,78016],{"class":89},[79,98159,850],{"class":228},[19,98161,98162],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,98164,98165],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,98167,98168],{},[3569,98169],{"alt":57,"src":98170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,98172,98173],{},"②empty()用法",[51,98175,98177],{"className":439,"code":98176,"language":441,"meta":57,"style":57},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[59,98178,98179,98200,98212,98233,98238],{"__ignoreMap":57},[79,98180,98181,98183,98185,98188,98190,98192,98194,98196,98198],{"class":81,"line":82},[79,98182,3085],{"class":228},[79,98184,239],{"class":448},[79,98186,98187],{"class":228},"np.empty(",[79,98189,2689],{"class":96},[79,98191,2621],{"class":228},[79,98193,95487],{"class":7284},[79,98195,239],{"class":448},[79,98197,2262],{"class":96},[79,98199,850],{"class":228},[79,98201,98202,98204,98206,98208,98210],{"class":81,"line":167},[79,98203,3060],{"class":228},[79,98205,239],{"class":448},[79,98207,94989],{"class":228},[79,98209,2563],{"class":96},[79,98211,850],{"class":228},[79,98213,98214,98217,98219,98222,98224,98226,98229,98231],{"class":81,"line":178},[79,98215,98216],{"class":228},"np.add(",[79,98218,2331],{"class":96},[79,98220,98221],{"class":228},",x,",[79,98223,95041],{"class":7284},[79,98225,239],{"class":448},[79,98227,98228],{"class":228},"y[:",[79,98230,2563],{"class":96},[79,98232,6727],{"class":228},[79,98234,98235],{"class":81,"line":545},[79,98236,98237],{"class":2313},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[79,98239,98240],{"class":81,"line":550},[79,98241,98242],{"class":228},"y\n",[19,98244,13549],{},[19,98246,98247],{},[3569,98248],{"alt":57,"src":98249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[51,98251,98253],{"className":439,"code":98252,"language":441,"meta":57,"style":57},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[59,98254,98255,98271,98291,98306],{"__ignoreMap":57},[79,98256,98257,98259,98261,98263,98265,98267,98269],{"class":81,"line":82},[79,98258,3060],{"class":228},[79,98260,239],{"class":448},[79,98262,94989],{"class":228},[79,98264,775],{"class":96},[79,98266,2621],{"class":228},[79,98268,2587],{"class":96},[79,98270,850],{"class":228},[79,98272,98273,98275,98277,98279,98281,98283,98285,98287,98289],{"class":81,"line":167},[79,98274,3085],{"class":228},[79,98276,239],{"class":448},[79,98278,98187],{"class":228},[79,98280,2563],{"class":96},[79,98282,2621],{"class":228},[79,98284,95487],{"class":7284},[79,98286,239],{"class":448},[79,98288,2262],{"class":96},[79,98290,850],{"class":228},[79,98292,98293,98296,98298,98300,98302,98304],{"class":81,"line":178},[79,98294,98295],{"class":228},"np.add(x,",[79,98297,2331],{"class":96},[79,98299,2621],{"class":228},[79,98301,95041],{"class":7284},[79,98303,239],{"class":448},[79,98305,95436],{"class":228},[79,98307,98308],{"class":81,"line":545},[79,98309,98310],{"class":2313},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,98312,98313],{},"③empty_like()",[19,98315,98316],{},[2398,98317,98318,98319,98324],{},"创建一个",[2398,98320,98321],{},[2398,98322,98323],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,98326,98327,98330],{},[59,98328,98329],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,98332,98333],{},[3569,98334],{"alt":57,"src":98335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[339,98337,98339],{"id":98338},"_264-用法","2.6.4 ？？用法",[19,98341,98342],{},"当想查看一个函数的参数时，可以通过？？来实现",[51,98344,98346],{"className":439,"code":98345,"language":441,"meta":57,"style":57},"np.full??\n",[59,98347,98348],{"__ignoreMap":57},[79,98349,98350,98353],{"class":81,"line":82},[79,98351,98352],{"class":228},"np.full",[79,98354,98355],{"class":79391},"??\n",[339,98357,98359],{"id":98358},"_265-full创建数组","2.6.5 full()创建数组",[51,98361,98363],{"className":439,"code":98362,"language":441,"meta":57,"style":57},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[59,98364,98365,98370],{"__ignoreMap":57},[79,98366,98367],{"class":81,"line":82},[79,98368,98369],{"class":228},"full(shape,fill_value)\n",[79,98371,98372],{"class":81,"line":167},[79,98373,98374],{"class":228},"创建全为某个指定值的数组\n",[19,98376,96517],{},[51,98378,98380],{"className":439,"code":98379,"language":441,"meta":57,"style":57},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[59,98381,98382,98387],{"__ignoreMap":57},[79,98383,98384],{"class":81,"line":82},[79,98385,98386],{"class":2313},"#创建一个一维数组,以20进行填充\n",[79,98388,98389,98392,98394,98396,98398],{"class":81,"line":167},[79,98390,98391],{"class":228},"np.full(",[79,98393,2689],{"class":96},[79,98395,2621],{"class":228},[79,98397,2940],{"class":96},[79,98399,850],{"class":228},[19,98401,95278],{},[51,98403,98405],{"className":439,"code":98404,"language":441,"meta":57,"style":57},"#创建二维数组\nnp.full((3,5),11)\n",[59,98406,98407,98411],{"__ignoreMap":57},[79,98408,98409],{"class":81,"line":82},[79,98410,95934],{"class":2313},[79,98412,98413,98416,98418,98420,98422,98424,98426],{"class":81,"line":167},[79,98414,98415],{"class":228},"np.full((",[79,98417,970],{"class":96},[79,98419,2621],{"class":228},[79,98421,2563],{"class":96},[79,98423,44251],{"class":228},[79,98425,2714],{"class":96},[79,98427,850],{"class":228},[19,98429,98430],{},"③full_like用法",[19,98432,98433],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,98435,98436],{},"这里是指定填充而已",[51,98438,98440],{"className":439,"code":98439,"language":441,"meta":57,"style":57},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[59,98441,98442,98447,98471,98476],{"__ignoreMap":57},[79,98443,98444],{"class":81,"line":82},[79,98445,98446],{"class":2313},"#创建一个指定形状数组\n",[79,98448,98449,98451,98453,98455,98457,98459,98461,98463,98465,98467,98469],{"class":81,"line":167},[79,98450,2482],{"class":228},[79,98452,239],{"class":448},[79,98454,94989],{"class":228},[79,98456,775],{"class":96},[79,98458,2621],{"class":228},[79,98460,2569],{"class":96},[79,98462,94994],{"class":228},[79,98464,2537],{"class":96},[79,98466,2621],{"class":228},[79,98468,2663],{"class":96},[79,98470,850],{"class":228},[79,98472,98473],{"class":81,"line":178},[79,98474,98475],{"class":2313},"#进行指定填充\n",[79,98477,98478,98481,98483],{"class":81,"line":545},[79,98479,98480],{"class":228},"np.full_like(a,",[79,98482,2689],{"class":96},[79,98484,850],{"class":228},[19,98486,13549],{},[19,98488,98489],{},[3569,98490],{"alt":57,"src":98491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[339,98493,98495],{"id":98494},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[24023,98497,98499],{"id":98498},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[51,98501,98503],{"className":439,"code":98502,"language":441,"meta":57,"style":57},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[59,98504,98505,98522],{"__ignoreMap":57},[79,98506,98507,98510,98512,98514,98516,98518,98520],{"class":81,"line":82},[79,98508,98509],{"class":228},"np.eye(",[79,98511,2537],{"class":96},[79,98513,2621],{"class":228},[79,98515,95487],{"class":7284},[79,98517,239],{"class":448},[79,98519,2262],{"class":96},[79,98521,850],{"class":228},[79,98523,98524],{"class":81,"line":167},[79,98525,98526],{"class":2313},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[24023,98528,98530],{"id":98529},"_2662-法2identity","2.6.6.2 法2：identity()",[51,98532,98534],{"className":439,"code":98533,"language":441,"meta":57,"style":57},"#identity()\nnp.identity(5,dtype=int)\n",[59,98535,98536,98541],{"__ignoreMap":57},[79,98537,98538],{"class":81,"line":82},[79,98539,98540],{"class":2313},"#identity()\n",[79,98542,98543,98546,98548,98550,98552,98554,98556],{"class":81,"line":167},[79,98544,98545],{"class":228},"np.identity(",[79,98547,2563],{"class":96},[79,98549,2621],{"class":228},[79,98551,95487],{"class":7284},[79,98553,239],{"class":448},[79,98555,2262],{"class":96},[79,98557,850],{"class":228},[19,98559,98560],{},"两个函数是有区别的",[19,98562,98563],{},[3569,98564],{"alt":57,"src":98565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,98567,98568],{},[3569,98569],{"alt":57,"src":98570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[51,98572,98574],{"className":439,"code":98573,"language":441,"meta":57,"style":57},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\nnp.eye(3, 4)\n# 输出:\n# [[1. 0. 0. 0.]\n#  [0. 1. 0. 0.]\n#  [0. 0. 1. 0.]]\n\n# 对角线向上偏移1\nnp.eye(3, 4, k=1)\n# 输出:\n# [[0. 1. 0. 0.]\n#  [0. 0. 1. 0.]\n#  [0. 0. 0. 1.]]\n\n",[59,98575,98576,98581,98593,98598,98603,98608,98613,98617,98622,98642,98646,98651,98656],{"__ignoreMap":57},[79,98577,98578],{"class":81,"line":82},[79,98579,98580],{"class":2313},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[79,98582,98583,98585,98587,98589,98591],{"class":81,"line":167},[79,98584,98509],{"class":228},[79,98586,970],{"class":96},[79,98588,1020],{"class":228},[79,98590,2537],{"class":96},[79,98592,850],{"class":228},[79,98594,98595],{"class":81,"line":178},[79,98596,98597],{"class":2313},"# 输出:\n",[79,98599,98600],{"class":81,"line":545},[79,98601,98602],{"class":2313},"# [[1. 0. 0. 0.]\n",[79,98604,98605],{"class":81,"line":550},[79,98606,98607],{"class":2313},"#  [0. 1. 0. 0.]\n",[79,98609,98610],{"class":81,"line":562},[79,98611,98612],{"class":2313},"#  [0. 0. 1. 0.]]\n",[79,98614,98615],{"class":81,"line":568},[79,98616,542],{"emptyLinePlaceholder":541},[79,98618,98619],{"class":81,"line":574},[79,98620,98621],{"class":2313},"# 对角线向上偏移1\n",[79,98623,98624,98626,98628,98630,98632,98634,98636,98638,98640],{"class":81,"line":579},[79,98625,98509],{"class":228},[79,98627,970],{"class":96},[79,98629,1020],{"class":228},[79,98631,2537],{"class":96},[79,98633,1020],{"class":228},[79,98635,2734],{"class":7284},[79,98637,239],{"class":448},[79,98639,775],{"class":96},[79,98641,850],{"class":228},[79,98643,98644],{"class":81,"line":585},[79,98645,98597],{"class":2313},[79,98647,98648],{"class":81,"line":591},[79,98649,98650],{"class":2313},"# [[0. 1. 0. 0.]\n",[79,98652,98653],{"class":81,"line":596},[79,98654,98655],{"class":2313},"#  [0. 0. 1. 0.]\n",[79,98657,98658],{"class":81,"line":602},[79,98659,98660],{"class":2313},"#  [0. 0. 0. 1.]]\n",[339,98662,98664],{"id":98663},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[51,98666,98668],{"className":439,"code":98667,"language":441,"meta":57,"style":57},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n\"\"\"\nnp.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n参数介绍：\nstart：序列的起始值\nstop:序列的终止值，如果endpoint为True，该值包含数列中\nnum：要生长的等步长的样本数量，默认为50\nendpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\nretstep：如果为True时，生长的数组中会显示间距，反之不显示\ndtype：ndarry的数据类型\n\"\"\"\n",[59,98669,98670,98675,98679,98684,98689,98694,98699,98704,98709,98714,98719],{"__ignoreMap":57},[79,98671,98672],{"class":81,"line":82},[79,98673,98674],{"class":2313},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[79,98676,98677],{"class":81,"line":167},[79,98678,687],{"class":89},[79,98680,98681],{"class":81,"line":178},[79,98682,98683],{"class":89},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[79,98685,98686],{"class":81,"line":545},[79,98687,98688],{"class":89},"参数介绍：\n",[79,98690,98691],{"class":81,"line":550},[79,98692,98693],{"class":89},"start：序列的起始值\n",[79,98695,98696],{"class":81,"line":562},[79,98697,98698],{"class":89},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[79,98700,98701],{"class":81,"line":568},[79,98702,98703],{"class":89},"num：要生长的等步长的样本数量，默认为50\n",[79,98705,98706],{"class":81,"line":574},[79,98707,98708],{"class":89},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[79,98710,98711],{"class":81,"line":579},[79,98712,98713],{"class":89},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[79,98715,98716],{"class":81,"line":585},[79,98717,98718],{"class":89},"dtype：ndarry的数据类型\n",[79,98720,98721],{"class":81,"line":591},[79,98722,687],{"class":89},[19,98724,98725],{},[3569,98726],{"alt":57,"src":98727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,98729,98730],{},"这里num=是可以省略的",[19,98732,98733],{},"也就是下方两行代码结果是一模一样的",[51,98735,98737],{"className":439,"code":98736,"language":441,"meta":57,"style":57},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[59,98738,98739,98756],{"__ignoreMap":57},[79,98740,98741,98744,98746,98748,98750,98752,98754],{"class":81,"line":82},[79,98742,98743],{"class":228},"np.linspace(",[79,98745,775],{"class":96},[79,98747,2621],{"class":228},[79,98749,2563],{"class":96},[79,98751,2621],{"class":228},[79,98753,2563],{"class":96},[79,98755,850],{"class":228},[79,98757,98758,98760,98762,98764,98766,98768,98770,98772,98774],{"class":81,"line":167},[79,98759,98743],{"class":228},[79,98761,775],{"class":96},[79,98763,2621],{"class":228},[79,98765,2563],{"class":96},[79,98767,2621],{"class":228},[79,98769,3764],{"class":7284},[79,98771,239],{"class":448},[79,98773,2563],{"class":96},[79,98775,850],{"class":228},[339,98777,98779],{"id":98778},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[51,98781,98783],{"className":439,"code":98782,"language":441,"meta":57,"style":57},"#logspace函数用于创建一个等比数列，格式如下：\n\"\"\"\nnp.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n参数为：\nstart:序列的起始位置为：base**start\nstop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\nnum：要生长的等步长的样本数量，默认为50\nendpoint：是否包含 stop 这个值，默认是 True\nbase：对数的底数，默认是 10（常见对数）\ndtype：ndarry的数据类型\n\"\"\"\n",[59,98784,98785,98790,98794,98799,98804,98809,98814,98818,98823,98828,98832],{"__ignoreMap":57},[79,98786,98787],{"class":81,"line":82},[79,98788,98789],{"class":2313},"#logspace函数用于创建一个等比数列，格式如下：\n",[79,98791,98792],{"class":81,"line":167},[79,98793,687],{"class":89},[79,98795,98796],{"class":81,"line":178},[79,98797,98798],{"class":89},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[79,98800,98801],{"class":81,"line":545},[79,98802,98803],{"class":89},"参数为：\n",[79,98805,98806],{"class":81,"line":550},[79,98807,98808],{"class":89},"start:序列的起始位置为：base**start\n",[79,98810,98811],{"class":81,"line":562},[79,98812,98813],{"class":89},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[79,98815,98816],{"class":81,"line":568},[79,98817,98703],{"class":89},[79,98819,98820],{"class":81,"line":574},[79,98821,98822],{"class":89},"endpoint：是否包含 stop 这个值，默认是 True\n",[79,98824,98825],{"class":81,"line":579},[79,98826,98827],{"class":89},"base：对数的底数，默认是 10（常见对数）\n",[79,98829,98830],{"class":81,"line":585},[79,98831,98718],{"class":89},[79,98833,98834],{"class":81,"line":591},[79,98835,687],{"class":89},[19,98837,98838],{},[3569,98839],{"alt":57,"src":98840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,98842,98843],{},"logspace()函数中的num参数也是可以不写num=的",[19,98845,98846],{},"endpoint是不可以省略的",[2159,98848,98849],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}",{"title":57,"searchDepth":167,"depth":167,"links":98851},[98852,98856,98861,98865,98869,98870],{"id":97243,"depth":167,"text":97244,"children":98853},[98854,98855],{"id":97247,"depth":178,"text":97248},{"id":97320,"depth":178,"text":97321},{"id":97352,"depth":167,"text":97353,"children":98857},[98858,98859,98860],{"id":97356,"depth":178,"text":97357},{"id":97538,"depth":178,"text":97539},{"id":97616,"depth":178,"text":97617},{"id":97651,"depth":167,"text":97652,"children":98862},[98863,98864],{"id":97655,"depth":178,"text":97656},{"id":97710,"depth":178,"text":97711},{"id":97806,"depth":167,"text":97807,"children":98866},[98867,98868],{"id":97810,"depth":178,"text":97811},{"id":97822,"depth":178,"text":97823},{"id":97856,"depth":167,"text":97857},{"id":97893,"depth":167,"text":97894,"children":98871},[98872,98873,98874,98875,98876,98877,98878,98879],{"id":97897,"depth":178,"text":97898},{"id":98122,"depth":178,"text":98123},{"id":98129,"depth":178,"text":98130},{"id":98338,"depth":178,"text":98339},{"id":98358,"depth":178,"text":98359},{"id":98494,"depth":178,"text":98495},{"id":98663,"depth":178,"text":98664},{"id":98778,"depth":178,"text":98779},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":97235,"description":25402},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":98886,"title":98887,"body":98888,"description":25402,"extension":2186,"meta":98981,"navigation":541,"path":98982,"seo":98983,"stem":98984,"__hash__":98985},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":98889,"toc":98979},[98890,98893,98896,98899,98902,98905,98908,98911,98914,98917,98920,98923,98925,98928,98931,98936,98939,98942,98976],[10,98891,98887],{"id":98892},"_20魔法命令mprun",[19,98894,98895],{},"逐行分析数据内存的使用情况",[19,98897,98898],{},"语法格式：",[19,98900,98901],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,98903,98904],{},"分析结果列如下：",[19,98906,98907],{},"Line行号",[19,98909,98910],{},"Mem usage内存使用大小",[19,98912,98913],{},"increment内存增量",[19,98915,98916],{},"Line content代码内容",[19,98918,98919],{},"补充说明：",[19,98921,98922],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,98924,97190],{},[19,98926,98927],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,98929,98930],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,98932,98933],{},[3569,98934],{"alt":57,"src":98935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,98937,98938],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,98940,98941],{},"这时候需要重新加载模块",[51,98943,98945],{"className":439,"code":98944,"language":441,"meta":57,"style":57},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[59,98946,98947,98952,98959,98964],{"__ignoreMap":57},[79,98948,98949],{"class":81,"line":82},[79,98950,98951],{"class":2313},"#重新加载模块\n",[79,98953,98954,98956],{"class":81,"line":167},[79,98955,520],{"class":448},[79,98957,98958],{"class":228}," importlib\n",[79,98960,98961],{"class":81,"line":178},[79,98962,98963],{"class":228},"importlib.reload(mprun_test)\n",[79,98965,98966,98968,98971,98973],{"class":81,"line":545},[79,98967,1094],{"class":448},[79,98969,98970],{"class":228},"mprun ",[79,98972,478],{"class":448},[79,98974,98975],{"class":228},"f mprun_test.fun_test mprun_test.fun_test()\n",[2159,98977,98978],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":57,"searchDepth":167,"depth":167,"links":98980},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":98887,"description":25402},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":98987,"title":98988,"body":98989,"description":25402,"extension":2186,"meta":99006,"navigation":541,"path":99007,"seo":99008,"stem":99009,"__hash__":99010},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":98990,"toc":99004},[98991,98994,98999],[10,98992,98988],{"id":98993},"_3一维数组的索引和切片",[19,98995,98996],{},[3569,98997],{"alt":57,"src":98998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,99000,99001],{},[3569,99002],{"alt":57,"src":99003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":57,"searchDepth":167,"depth":167,"links":99005},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":98988,"description":25402},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":99012,"title":99013,"body":99014,"description":25402,"extension":2186,"meta":99497,"navigation":541,"path":99498,"seo":99499,"stem":99500,"__hash__":99501},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":99015,"toc":99495},[99016,99019,99022,99027,99060,99063,99101,99104,99138,99141,99246,99249,99286,99289,99390,99393,99444,99447,99489,99492],[10,99017,99013],{"id":99018},"_4二维数组的索引与切片",[19,99020,99021],{},"①获取指定单个元素",[19,99023,99024],{},[3569,99025],{"alt":57,"src":99026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[51,99028,99030],{"className":439,"code":99029,"language":441,"meta":57,"style":57},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[59,99031,99032,99037,99042,99047],{"__ignoreMap":57},[79,99033,99034],{"class":81,"line":82},[79,99035,99036],{"class":2313},"#获取元素9\n",[79,99038,99039],{"class":81,"line":167},[79,99040,99041],{"class":2313},"#先获取所在行，再获取所在列\n",[79,99043,99044],{"class":81,"line":178},[79,99045,99046],{"class":2313},"#数组[行索引号，列索引号]\n",[79,99048,99049,99052,99054,99056,99058],{"class":81,"line":545},[79,99050,99051],{"class":228},"a[",[79,99053,775],{"class":96},[79,99055,2621],{"class":228},[79,99057,2331],{"class":96},[79,99059,762],{"class":228},[19,99061,99062],{},"②获取整行元素",[51,99064,99066],{"className":439,"code":99065,"language":441,"meta":57,"style":57},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[59,99067,99068,99073,99078,99086,99091],{"__ignoreMap":57},[79,99069,99070],{"class":81,"line":82},[79,99071,99072],{"class":2313},"#获取整行 数组[行索引号]\n",[79,99074,99075],{"class":81,"line":167},[79,99076,99077],{"class":2313},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[79,99079,99080,99082,99084],{"class":81,"line":178},[79,99081,99051],{"class":228},[79,99083,2331],{"class":96},[79,99085,762],{"class":228},[79,99087,99088],{"class":81,"line":545},[79,99089,99090],{"class":2313},"#也可以负索引获取一行\n",[79,99092,99093,99095,99097,99099],{"class":81,"line":550},[79,99094,99051],{"class":228},[79,99096,478],{"class":448},[79,99098,775],{"class":96},[79,99100,762],{"class":228},[19,99102,99103],{},"③获取整列元素",[51,99105,99107],{"className":439,"code":99106,"language":441,"meta":57,"style":57},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[59,99108,99109,99114,99123,99128],{"__ignoreMap":57},[79,99110,99111],{"class":81,"line":82},[79,99112,99113],{"class":2313},"#获取整列 数组名[:,列索引]\n",[79,99115,99116,99119,99121],{"class":81,"line":167},[79,99117,99118],{"class":228},"a[:,",[79,99120,2331],{"class":96},[79,99122,762],{"class":228},[79,99124,99125],{"class":81,"line":178},[79,99126,99127],{"class":2313},"#也可以负索引获取一列\n",[79,99129,99130,99132,99134,99136],{"class":81,"line":545},[79,99131,99118],{"class":228},[79,99133,478],{"class":448},[79,99135,775],{"class":96},[79,99137,762],{"class":228},[19,99139,99140],{},"④部分行部分列的元素",[51,99142,99144],{"className":439,"code":99143,"language":441,"meta":57,"style":57},"#部分行部分列 数组名[行切片，列切片]\na[:2,:]\n#结果：\n'''\narray([[ 1,  2,  3,  4,  5,  6],\n       [ 7,  8,  9, 10, 11, 12]])\n'''\na[:,1:4]\n#结果：\n'''\narray([[ 2,  3,  4],\n       [ 8,  9, 10],\n       [14, 15, 16],\n       [20, 21, 22]])\n'''\n#对列行同时进行切片，使用了step参数\na[::2,::2]\n",[59,99145,99146,99151,99161,99165,99169,99174,99179,99183,99195,99199,99203,99208,99213,99218,99223,99227,99232],{"__ignoreMap":57},[79,99147,99148],{"class":81,"line":82},[79,99149,99150],{"class":2313},"#部分行部分列 数组名[行切片，列切片]\n",[79,99152,99153,99156,99158],{"class":81,"line":167},[79,99154,99155],{"class":228},"a[:",[79,99157,2331],{"class":96},[79,99159,99160],{"class":228},",:]\n",[79,99162,99163],{"class":81,"line":178},[79,99164,95551],{"class":2313},[79,99166,99167],{"class":81,"line":545},[79,99168,95915],{"class":89},[79,99170,99171],{"class":81,"line":550},[79,99172,99173],{"class":89},"array([[ 1,  2,  3,  4,  5,  6],\n",[79,99175,99176],{"class":81,"line":562},[79,99177,99178],{"class":89},"       [ 7,  8,  9, 10, 11, 12]])\n",[79,99180,99181],{"class":81,"line":568},[79,99182,95915],{"class":89},[79,99184,99185,99187,99189,99191,99193],{"class":81,"line":574},[79,99186,99118],{"class":228},[79,99188,775],{"class":96},[79,99190,3099],{"class":228},[79,99192,2537],{"class":96},[79,99194,762],{"class":228},[79,99196,99197],{"class":81,"line":579},[79,99198,95551],{"class":2313},[79,99200,99201],{"class":81,"line":585},[79,99202,95915],{"class":89},[79,99204,99205],{"class":81,"line":591},[79,99206,99207],{"class":89},"array([[ 2,  3,  4],\n",[79,99209,99210],{"class":81,"line":596},[79,99211,99212],{"class":89},"       [ 8,  9, 10],\n",[79,99214,99215],{"class":81,"line":602},[79,99216,99217],{"class":89},"       [14, 15, 16],\n",[79,99219,99220],{"class":81,"line":608},[79,99221,99222],{"class":89},"       [20, 21, 22]])\n",[79,99224,99225],{"class":81,"line":614},[79,99226,95915],{"class":89},[79,99228,99229],{"class":81,"line":619},[79,99230,99231],{"class":2313},"#对列行同时进行切片，使用了step参数\n",[79,99233,99234,99237,99239,99242,99244],{"class":81,"line":625},[79,99235,99236],{"class":228},"a[::",[79,99238,2331],{"class":96},[79,99240,99241],{"class":228},",::",[79,99243,2331],{"class":96},[79,99245,762],{"class":228},[19,99247,99248],{},"⑤同时获取两个元素",[51,99250,99252],{"className":439,"code":99251,"language":441,"meta":57,"style":57},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[59,99253,99254,99259,99264],{"__ignoreMap":57},[79,99255,99256],{"class":81,"line":82},[79,99257,99258],{"class":2313},"#同时获取第三行第二列，第四行第一列\n",[79,99260,99261],{"class":81,"line":167},[79,99262,99263],{"class":2313},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[79,99265,99266,99269,99271,99273,99275,99277,99279,99281,99283],{"class":81,"line":178},[79,99267,99268],{"class":228},"a[(",[79,99270,2331],{"class":96},[79,99272,2621],{"class":228},[79,99274,970],{"class":96},[79,99276,44242],{"class":228},[79,99278,775],{"class":96},[79,99280,2621],{"class":228},[79,99282,759],{"class":96},[79,99284,99285],{"class":228},")]\n",[19,99287,99288],{},"⑥切片，对行进行反向获取",[51,99290,99292],{"className":439,"code":99291,"language":441,"meta":57,"style":57},"#切片 对所有行进行反向获取\na[::-1]\n#结果：\n'''\narray([[19, 20, 21, 22, 23, 24],\n       [13, 14, 15, 16, 17, 18],\n       [ 7,  8,  9, 10, 11, 12],\n       [ 1,  2,  3,  4,  5,  6]])\n'''\n#对行列都进行反向切片获取\na[::-1,::-1]\n'''\narray([[24, 23, 22, 21, 20, 19],\n       [18, 17, 16, 15, 14, 13],\n       [12, 11, 10,  9,  8,  7],\n       [ 6,  5,  4,  3,  2,  1]])\n'''\n",[59,99293,99294,99299,99309,99313,99317,99322,99327,99332,99337,99341,99346,99362,99366,99371,99376,99381,99386],{"__ignoreMap":57},[79,99295,99296],{"class":81,"line":82},[79,99297,99298],{"class":2313},"#切片 对所有行进行反向获取\n",[79,99300,99301,99303,99305,99307],{"class":81,"line":167},[79,99302,99236],{"class":228},[79,99304,478],{"class":448},[79,99306,775],{"class":96},[79,99308,762],{"class":228},[79,99310,99311],{"class":81,"line":178},[79,99312,95551],{"class":2313},[79,99314,99315],{"class":81,"line":545},[79,99316,95915],{"class":89},[79,99318,99319],{"class":81,"line":550},[79,99320,99321],{"class":89},"array([[19, 20, 21, 22, 23, 24],\n",[79,99323,99324],{"class":81,"line":562},[79,99325,99326],{"class":89},"       [13, 14, 15, 16, 17, 18],\n",[79,99328,99329],{"class":81,"line":568},[79,99330,99331],{"class":89},"       [ 7,  8,  9, 10, 11, 12],\n",[79,99333,99334],{"class":81,"line":574},[79,99335,99336],{"class":89},"       [ 1,  2,  3,  4,  5,  6]])\n",[79,99338,99339],{"class":81,"line":579},[79,99340,95915],{"class":89},[79,99342,99343],{"class":81,"line":585},[79,99344,99345],{"class":2313},"#对行列都进行反向切片获取\n",[79,99347,99348,99350,99352,99354,99356,99358,99360],{"class":81,"line":591},[79,99349,99236],{"class":228},[79,99351,478],{"class":448},[79,99353,775],{"class":96},[79,99355,99241],{"class":228},[79,99357,478],{"class":448},[79,99359,775],{"class":96},[79,99361,762],{"class":228},[79,99363,99364],{"class":81,"line":596},[79,99365,95915],{"class":89},[79,99367,99368],{"class":81,"line":602},[79,99369,99370],{"class":89},"array([[24, 23, 22, 21, 20, 19],\n",[79,99372,99373],{"class":81,"line":608},[79,99374,99375],{"class":89},"       [18, 17, 16, 15, 14, 13],\n",[79,99377,99378],{"class":81,"line":614},[79,99379,99380],{"class":89},"       [12, 11, 10,  9,  8,  7],\n",[79,99382,99383],{"class":81,"line":619},[79,99384,99385],{"class":89},"       [ 6,  5,  4,  3,  2,  1]])\n",[79,99387,99388],{"class":81,"line":625},[79,99389,95915],{"class":89},[19,99391,99392],{},"⑦修改元素",[51,99394,99396],{"className":439,"code":99395,"language":441,"meta":57,"style":57},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[59,99397,99398,99403,99421,99426],{"__ignoreMap":57},[79,99399,99400],{"class":81,"line":82},[79,99401,99402],{"class":2313},"#获取前两行和前两列\n",[79,99404,99405,99408,99410,99412,99414,99417,99419],{"class":81,"line":167},[79,99406,99407],{"class":228},"sub_a",[79,99409,239],{"class":448},[79,99411,99155],{"class":228},[79,99413,2331],{"class":96},[79,99415,99416],{"class":228},",:",[79,99418,2331],{"class":96},[79,99420,762],{"class":228},[79,99422,99423],{"class":81,"line":178},[79,99424,99425],{"class":2313},"#修改sub_a第一个元素的值\n",[79,99427,99428,99431,99433,99435,99437,99439,99441],{"class":81,"line":545},[79,99429,99430],{"class":228},"sub_a[",[79,99432,759],{"class":96},[79,99434,2621],{"class":228},[79,99436,759],{"class":96},[79,99438,3179],{"class":228},[79,99440,239],{"class":448},[79,99442,99443],{"class":96},"100\n",[19,99445,99446],{},"⑧数组复制copy()",[51,99448,99450],{"className":439,"code":99449,"language":441,"meta":57,"style":57},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[59,99451,99452,99457,99467,99472],{"__ignoreMap":57},[79,99453,99454],{"class":81,"line":82},[79,99455,99456],{"class":2313},"#数组复制\n",[79,99458,99459,99462,99464],{"class":81,"line":167},[79,99460,99461],{"class":228},"copy_a",[79,99463,239],{"class":448},[79,99465,99466],{"class":228},"np.copy(sub_a)\n",[79,99468,99469],{"class":81,"line":178},[79,99470,99471],{"class":2313},"#修改copy_a后不影响原数组\n",[79,99473,99474,99477,99479,99481,99483,99485,99487],{"class":81,"line":545},[79,99475,99476],{"class":228},"copy_a[",[79,99478,759],{"class":96},[79,99480,2621],{"class":228},[79,99482,759],{"class":96},[79,99484,3179],{"class":228},[79,99486,239],{"class":448},[79,99488,99443],{"class":96},[19,99490,99491],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[2159,99493,99494],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":57,"searchDepth":167,"depth":167,"links":99496},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":99013,"description":25402},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":99503,"title":99504,"body":99505,"description":25402,"extension":2186,"meta":99997,"navigation":541,"path":99998,"seo":99999,"stem":100000,"__hash__":100001},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":99506,"toc":99989},[99507,99510,99514,99517,99520,99573,99576,99601,99604,99623,99643,99646,99662,99666,99712,99716,99758,99762,99765,99768,99771,99774,99777,99839,99899,99903,99906,99963,99967,99972,99981,99986],[10,99508,99504],{"id":99509},"_5改变数组的维度",[14,99511,99513],{"id":99512},"_51-使用reshape","5.1 使用reshape()",[19,99515,99516],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,99518,99519],{},"①一维数组转换为二维数组",[51,99521,99523],{"className":439,"code":99522,"language":441,"meta":57,"style":57},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[59,99524,99525,99541,99546,99551,99556],{"__ignoreMap":57},[79,99526,99527,99529,99531,99533,99535,99537,99539],{"class":81,"line":82},[79,99528,2482],{"class":228},[79,99530,239],{"class":448},[79,99532,94989],{"class":228},[79,99534,775],{"class":96},[79,99536,2621],{"class":228},[79,99538,2764],{"class":96},[79,99540,850],{"class":228},[79,99542,99543],{"class":81,"line":167},[79,99544,99545],{"class":2313},"#将一维数组进行转换\n",[79,99547,99548],{"class":81,"line":178},[79,99549,99550],{"class":2313},"#注意点：元素个数不可以变\n",[79,99552,99553],{"class":81,"line":545},[79,99554,99555],{"class":2313},"#转换维度要保持一致，不一致就异常！！！\n",[79,99557,99558,99560,99562,99565,99567,99569,99571],{"class":81,"line":550},[79,99559,95293],{"class":228},[79,99561,239],{"class":448},[79,99563,99564],{"class":228},"a.reshape(",[79,99566,2331],{"class":96},[79,99568,2621],{"class":228},[79,99570,2587],{"class":96},[79,99572,850],{"class":228},[19,99574,99575],{},"②一维数组转换为三维数组",[51,99577,99579],{"className":439,"code":99578,"language":441,"meta":57,"style":57},"aaa=a.reshape(2,3,2)\n",[59,99580,99581],{"__ignoreMap":57},[79,99582,99583,99585,99587,99589,99591,99593,99595,99597,99599],{"class":81,"line":82},[79,99584,97508],{"class":228},[79,99586,239],{"class":448},[79,99588,99564],{"class":228},[79,99590,2331],{"class":96},[79,99592,2621],{"class":228},[79,99594,970],{"class":96},[79,99596,2621],{"class":228},[79,99598,2331],{"class":96},[79,99600,850],{"class":228},[19,99602,99603],{},"③二维数组转化为一维数组",[51,99605,99607],{"className":439,"code":99606,"language":441,"meta":57,"style":57},"#知道元素个数：\naa.reshape(12)\n",[59,99608,99609,99614],{"__ignoreMap":57},[79,99610,99611],{"class":81,"line":82},[79,99612,99613],{"class":2313},"#知道元素个数：\n",[79,99615,99616,99619,99621],{"class":81,"line":167},[79,99617,99618],{"class":228},"aa.reshape(",[79,99620,2739],{"class":96},[79,99622,850],{"class":228},[51,99624,99626],{"className":439,"code":99625,"language":441,"meta":57,"style":57},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[59,99627,99628,99633],{"__ignoreMap":57},[79,99629,99630],{"class":81,"line":82},[79,99631,99632],{"class":2313},"#不知道元素个数，参数传递-1\n",[79,99634,99635,99637,99639,99641],{"class":81,"line":167},[79,99636,99618],{"class":228},[79,99638,478],{"class":448},[79,99640,775],{"class":96},[79,99642,850],{"class":228},[19,99644,99645],{},"④三维数组转换为一维数组",[51,99647,99649],{"className":439,"code":99648,"language":441,"meta":57,"style":57},"aaa.reshape(-1)\n",[59,99650,99651],{"__ignoreMap":57},[79,99652,99653,99656,99658,99660],{"class":81,"line":82},[79,99654,99655],{"class":228},"aaa.reshape(",[79,99657,478],{"class":448},[79,99659,775],{"class":96},[79,99661,850],{"class":228},[14,99663,99665],{"id":99664},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[51,99667,99669],{"className":439,"code":99668,"language":441,"meta":57,"style":57},"aa=np.arange(1,13).reshape(2,6)#转换为2行6列的数组\naa.revel()\n#结果：\n#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[59,99670,99671,99698,99703,99707],{"__ignoreMap":57},[79,99672,99673,99675,99677,99679,99681,99683,99685,99687,99689,99691,99693,99695],{"class":81,"line":82},[79,99674,95293],{"class":228},[79,99676,239],{"class":448},[79,99678,94989],{"class":228},[79,99680,775],{"class":96},[79,99682,2621],{"class":228},[79,99684,2764],{"class":96},[79,99686,94994],{"class":228},[79,99688,2331],{"class":96},[79,99690,2621],{"class":228},[79,99692,2587],{"class":96},[79,99694,2672],{"class":228},[79,99696,99697],{"class":2313},"#转换为2行6列的数组\n",[79,99699,99700],{"class":81,"line":167},[79,99701,99702],{"class":228},"aa.revel()\n",[79,99704,99705],{"class":81,"line":178},[79,99706,95551],{"class":2313},[79,99708,99709],{"class":81,"line":545},[79,99710,99711],{"class":2313},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,99713,99715],{"id":99714},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[51,99717,99719],{"className":439,"code":99718,"language":441,"meta":57,"style":57},"aa=np.arange(1,13).reshape(2,6)\naa.flatten()\n#结果：\n#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[59,99720,99721,99745,99750,99754],{"__ignoreMap":57},[79,99722,99723,99725,99727,99729,99731,99733,99735,99737,99739,99741,99743],{"class":81,"line":82},[79,99724,95293],{"class":228},[79,99726,239],{"class":448},[79,99728,94989],{"class":228},[79,99730,775],{"class":96},[79,99732,2621],{"class":228},[79,99734,2764],{"class":96},[79,99736,94994],{"class":228},[79,99738,2331],{"class":96},[79,99740,2621],{"class":228},[79,99742,2587],{"class":96},[79,99744,850],{"class":228},[79,99746,99747],{"class":81,"line":167},[79,99748,99749],{"class":228},"aa.flatten()\n",[79,99751,99752],{"class":81,"line":178},[79,99753,95551],{"class":2313},[79,99755,99756],{"class":81,"line":545},[79,99757,99711],{"class":2313},[14,99759,99761],{"id":99760},"_54-使用resize","5.4 使用resize()",[19,99763,99764],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,99766,99767],{},"通过resize方法可以改变数组的维度",[19,99769,99770],{},"#resize修改数组维度",[19,99772,99773],{},"#以元组的形式指定形状",[19,99775,99776],{},"#改变的是原数组",[51,99778,99780],{"className":439,"code":99779,"language":441,"meta":57,"style":57},"a=np.arange(1,13)\na.shape=(2,6)#改变了原数组\na=resize((12))\n#结果：\n#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[59,99781,99782,99798,99818,99831,99835],{"__ignoreMap":57},[79,99783,99784,99786,99788,99790,99792,99794,99796],{"class":81,"line":82},[79,99785,2482],{"class":228},[79,99787,239],{"class":448},[79,99789,94989],{"class":228},[79,99791,775],{"class":96},[79,99793,2621],{"class":228},[79,99795,2764],{"class":96},[79,99797,850],{"class":228},[79,99799,99800,99803,99805,99807,99809,99811,99813,99815],{"class":81,"line":167},[79,99801,99802],{"class":228},"a.shape",[79,99804,239],{"class":448},[79,99806,455],{"class":228},[79,99808,2331],{"class":96},[79,99810,2621],{"class":228},[79,99812,2587],{"class":96},[79,99814,2672],{"class":228},[79,99816,99817],{"class":2313},"#改变了原数组\n",[79,99819,99820,99822,99824,99827,99829],{"class":81,"line":178},[79,99821,2482],{"class":228},[79,99823,239],{"class":448},[79,99825,99826],{"class":228},"resize((",[79,99828,2739],{"class":96},[79,99830,1150],{"class":228},[79,99832,99833],{"class":81,"line":545},[79,99834,95551],{"class":2313},[79,99836,99837],{"class":81,"line":550},[79,99838,99711],{"class":2313},[51,99840,99842],{"className":439,"code":99841,"language":441,"meta":57,"style":57},"a.resize((6,2))\n#结果：\n'''\narray([[ 1,  2],\n       [ 3,  4],\n       [ 5,  6],\n       [ 7,  8],\n       [ 9, 10],\n       [11, 12]])\n'''\n",[59,99843,99844,99857,99861,99865,99870,99875,99880,99885,99890,99895],{"__ignoreMap":57},[79,99845,99846,99849,99851,99853,99855],{"class":81,"line":82},[79,99847,99848],{"class":228},"a.resize((",[79,99850,2587],{"class":96},[79,99852,2621],{"class":228},[79,99854,2331],{"class":96},[79,99856,1150],{"class":228},[79,99858,99859],{"class":81,"line":167},[79,99860,95551],{"class":2313},[79,99862,99863],{"class":81,"line":178},[79,99864,95915],{"class":89},[79,99866,99867],{"class":81,"line":545},[79,99868,99869],{"class":89},"array([[ 1,  2],\n",[79,99871,99872],{"class":81,"line":550},[79,99873,99874],{"class":89},"       [ 3,  4],\n",[79,99876,99877],{"class":81,"line":562},[79,99878,99879],{"class":89},"       [ 5,  6],\n",[79,99881,99882],{"class":81,"line":568},[79,99883,99884],{"class":89},"       [ 7,  8],\n",[79,99886,99887],{"class":81,"line":574},[79,99888,99889],{"class":89},"       [ 9, 10],\n",[79,99891,99892],{"class":81,"line":579},[79,99893,99894],{"class":89},"       [11, 12]])\n",[79,99896,99897],{"class":81,"line":585},[79,99898,95915],{"class":89},[14,99900,99902],{"id":99901},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,99904,99905],{},"改变了原数组",[51,99907,99909],{"className":439,"code":99908,"language":441,"meta":57,"style":57},"a=np.arange(1,13)\na.shape=(2,6)\n#结果：\n'''\narray([[ 1,  2,  3,  4,  5,  6],\n       [ 7,  8,  9, 10, 11, 12]])\n'''\n",[59,99910,99911,99927,99943,99947,99951,99955,99959],{"__ignoreMap":57},[79,99912,99913,99915,99917,99919,99921,99923,99925],{"class":81,"line":82},[79,99914,2482],{"class":228},[79,99916,239],{"class":448},[79,99918,94989],{"class":228},[79,99920,775],{"class":96},[79,99922,2621],{"class":228},[79,99924,2764],{"class":96},[79,99926,850],{"class":228},[79,99928,99929,99931,99933,99935,99937,99939,99941],{"class":81,"line":167},[79,99930,99802],{"class":228},[79,99932,239],{"class":448},[79,99934,455],{"class":228},[79,99936,2331],{"class":96},[79,99938,2621],{"class":228},[79,99940,2587],{"class":96},[79,99942,850],{"class":228},[79,99944,99945],{"class":81,"line":178},[79,99946,95551],{"class":2313},[79,99948,99949],{"class":81,"line":545},[79,99950,95915],{"class":89},[79,99952,99953],{"class":81,"line":550},[79,99954,99173],{"class":89},[79,99956,99957],{"class":81,"line":562},[79,99958,99178],{"class":89},[79,99960,99961],{"class":81,"line":568},[79,99962,95915],{"class":89},[14,99964,99966],{"id":99965},"_56-重要比较","5.6 重要比较：",[19,99968,99969],{},[3569,99970],{"alt":57,"src":99971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,99973,99974,99975,99977,99978,99980],{},"口诀：NumPy 函数要么用 ",[59,99976,97948],{},"，要么用 ",[59,99979,33498],{},"，创建结构用 shape，造数据用 size",[19,99982,99983],{},[3569,99984],{"alt":57,"src":99985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[2159,99987,99988],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":57,"searchDepth":167,"depth":167,"links":99990},[99991,99992,99993,99994,99995,99996],{"id":99512,"depth":167,"text":99513},{"id":99664,"depth":167,"text":99665},{"id":99714,"depth":167,"text":99715},{"id":99760,"depth":167,"text":99761},{"id":99901,"depth":167,"text":99902},{"id":99965,"depth":167,"text":99966},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":99504,"description":25402},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":100003,"title":100004,"body":100005,"description":25402,"extension":2186,"meta":101077,"navigation":541,"path":101078,"seo":101079,"stem":101080,"__hash__":101081},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":100006,"toc":101071},[100007,100010,100014,100017,100020,100023,100088,100091,100131,100134,100216,100219,100224,100246,100248,100253,100258,100261,100264,100419,100422,100624,100628,100631,100634,100702,100704,100709,100712,100715,100795,100799,100802,100804,100877,100879,100884,100886,100966,100970,100973,100976,100979,100982,100985,100988,101068],[10,100008,100004],{"id":100009},"_6数组的拼接",[14,100011,100013],{"id":100012},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,100015,100016],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,100018,100019],{},"函数内部传两个数列构成的数列或者元组",[19,100021,100022],{},"①一维数组的拼接",[51,100024,100026],{"className":439,"code":100025,"language":441,"meta":57,"style":57},"a=np.array([1,2,3])\nb=np.array([4,5,6])\n#调用concatenate进行数组拼接\nnp.concatenate((a,b))\n#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n#np.concatenate([a,b])\n",[59,100027,100028,100048,100068,100073,100078,100083],{"__ignoreMap":57},[79,100029,100030,100032,100034,100036,100038,100040,100042,100044,100046],{"class":81,"line":82},[79,100031,2482],{"class":228},[79,100033,239],{"class":448},[79,100035,95011],{"class":228},[79,100037,775],{"class":96},[79,100039,2621],{"class":228},[79,100041,2331],{"class":96},[79,100043,2621],{"class":228},[79,100045,970],{"class":96},[79,100047,6727],{"class":228},[79,100049,100050,100052,100054,100056,100058,100060,100062,100064,100066],{"class":81,"line":167},[79,100051,2507],{"class":228},[79,100053,239],{"class":448},[79,100055,95011],{"class":228},[79,100057,2537],{"class":96},[79,100059,2621],{"class":228},[79,100061,2563],{"class":96},[79,100063,2621],{"class":228},[79,100065,2587],{"class":96},[79,100067,6727],{"class":228},[79,100069,100070],{"class":81,"line":178},[79,100071,100072],{"class":2313},"#调用concatenate进行数组拼接\n",[79,100074,100075],{"class":81,"line":545},[79,100076,100077],{"class":228},"np.concatenate((a,b))\n",[79,100079,100080],{"class":81,"line":550},[79,100081,100082],{"class":2313},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[79,100084,100085],{"class":81,"line":562},[79,100086,100087],{"class":2313},"#np.concatenate([a,b])\n",[19,100089,100090],{},"②一维多个数组拼接",[51,100092,100094],{"className":439,"code":100093,"language":441,"meta":57,"style":57},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[59,100095,100096,100101,100121,100126],{"__ignoreMap":57},[79,100097,100098],{"class":81,"line":82},[79,100099,100100],{"class":2313},"#也可以多个数组进行拼接\n",[79,100102,100103,100105,100107,100109,100111,100113,100115,100117,100119],{"class":81,"line":167},[79,100104,2532],{"class":228},[79,100106,239],{"class":448},[79,100108,95011],{"class":228},[79,100110,2689],{"class":96},[79,100112,2621],{"class":228},[79,100114,2714],{"class":96},[79,100116,2621],{"class":228},[79,100118,2764],{"class":96},[79,100120,6727],{"class":228},[79,100122,100123],{"class":81,"line":178},[79,100124,100125],{"class":228},"c\n",[79,100127,100128],{"class":81,"line":545},[79,100129,100130],{"class":228},"np.concatenate((a,b,c))\n",[19,100132,100133],{},"③二维数组拼接",[51,100135,100137],{"className":439,"code":100136,"language":441,"meta":57,"style":57},"#二维数组使用concatenate进行拼接\naa=np.arange(1,13).reshape(3,4)\nbb=np.arange(101,113).reshape(3,4)\n#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\nnp.concatenate((aa,bb),axis=0)\n",[59,100138,100139,100144,100168,100193,100198,100203],{"__ignoreMap":57},[79,100140,100141],{"class":81,"line":82},[79,100142,100143],{"class":2313},"#二维数组使用concatenate进行拼接\n",[79,100145,100146,100148,100150,100152,100154,100156,100158,100160,100162,100164,100166],{"class":81,"line":167},[79,100147,95293],{"class":228},[79,100149,239],{"class":448},[79,100151,94989],{"class":228},[79,100153,775],{"class":96},[79,100155,2621],{"class":228},[79,100157,2764],{"class":96},[79,100159,94994],{"class":228},[79,100161,970],{"class":96},[79,100163,2621],{"class":228},[79,100165,2537],{"class":96},[79,100167,850],{"class":228},[79,100169,100170,100173,100175,100177,100179,100181,100183,100185,100187,100189,100191],{"class":81,"line":178},[79,100171,100172],{"class":228},"bb",[79,100174,239],{"class":448},[79,100176,94989],{"class":228},[79,100178,2580],{"class":96},[79,100180,2621],{"class":228},[79,100182,2882],{"class":96},[79,100184,94994],{"class":228},[79,100186,970],{"class":96},[79,100188,2621],{"class":228},[79,100190,2537],{"class":96},[79,100192,850],{"class":228},[79,100194,100195],{"class":81,"line":545},[79,100196,100197],{"class":2313},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[79,100199,100200],{"class":81,"line":550},[79,100201,100202],{"class":2313},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[79,100204,100205,100208,100210,100212,100214],{"class":81,"line":562},[79,100206,100207],{"class":228},"np.concatenate((aa,bb),",[79,100209,49509],{"class":7284},[79,100211,239],{"class":448},[79,100213,759],{"class":96},[79,100215,850],{"class":228},[19,100217,100218],{},"结果：",[19,100220,100221],{},[3569,100222],{"alt":57,"src":100223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[51,100225,100227],{"className":439,"code":100226,"language":441,"meta":57,"style":57},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[59,100228,100229,100234],{"__ignoreMap":57},[79,100230,100231],{"class":81,"line":82},[79,100232,100233],{"class":2313},"#指定axis为1进行拼接\n",[79,100235,100236,100238,100240,100242,100244],{"class":81,"line":167},[79,100237,100207],{"class":228},[79,100239,49509],{"class":7284},[79,100241,239],{"class":448},[79,100243,775],{"class":96},[79,100245,850],{"class":228},[19,100247,100218],{},[19,100249,100250],{},[3569,100251],{"alt":57,"src":100252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,100254,100255],{},[2398,100256,100257],{},"二维数组总结：0竖着方向，1横着方向",[19,100259,100260],{},"④三维数组拼接",[19,100262,100263],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[51,100265,100267],{"className":439,"code":100266,"language":441,"meta":57,"style":57},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\n#axis=0\ns=np.concatenate((aaa,bbb),axis=0)\ns.shape\n#输出：(4,3,6)\n#axis=1\nss=np.concatenate((aaa,bbb),axis=1)\nss.shape\n#输出：(2,6,6)\n#axis=2\nnp.concatenate((aaa,bbb),axis=2).shape\n#输出：（2，3，12）\n",[59,100268,100269,100274,100302,100332,100337,100354,100359,100364,100369,100386,100391,100396,100401,100414],{"__ignoreMap":57},[79,100270,100271],{"class":81,"line":82},[79,100272,100273],{"class":2313},"#两个三行六列\n",[79,100275,100276,100278,100280,100282,100284,100286,100288,100290,100292,100294,100296,100298,100300],{"class":81,"line":167},[79,100277,97508],{"class":228},[79,100279,239],{"class":448},[79,100281,94989],{"class":228},[79,100283,775],{"class":96},[79,100285,2621],{"class":228},[79,100287,2569],{"class":96},[79,100289,94994],{"class":228},[79,100291,2331],{"class":96},[79,100293,2621],{"class":228},[79,100295,970],{"class":96},[79,100297,2621],{"class":228},[79,100299,2587],{"class":96},[79,100301,850],{"class":228},[79,100303,100304,100307,100309,100311,100313,100315,100318,100320,100322,100324,100326,100328,100330],{"class":81,"line":178},[79,100305,100306],{"class":228},"bbb",[79,100308,239],{"class":448},[79,100310,94989],{"class":228},[79,100312,2580],{"class":96},[79,100314,2621],{"class":228},[79,100316,100317],{"class":96},"137",[79,100319,94994],{"class":228},[79,100321,2331],{"class":96},[79,100323,2621],{"class":228},[79,100325,970],{"class":96},[79,100327,2621],{"class":228},[79,100329,2587],{"class":96},[79,100331,850],{"class":228},[79,100333,100334],{"class":81,"line":545},[79,100335,100336],{"class":2313},"#axis=0\n",[79,100338,100339,100341,100343,100346,100348,100350,100352],{"class":81,"line":550},[79,100340,2935],{"class":228},[79,100342,239],{"class":448},[79,100344,100345],{"class":228},"np.concatenate((aaa,bbb),",[79,100347,49509],{"class":7284},[79,100349,239],{"class":448},[79,100351,759],{"class":96},[79,100353,850],{"class":228},[79,100355,100356],{"class":81,"line":562},[79,100357,100358],{"class":228},"s.shape\n",[79,100360,100361],{"class":81,"line":568},[79,100362,100363],{"class":2313},"#输出：(4,3,6)\n",[79,100365,100366],{"class":81,"line":574},[79,100367,100368],{"class":2313},"#axis=1\n",[79,100370,100371,100374,100376,100378,100380,100382,100384],{"class":81,"line":579},[79,100372,100373],{"class":228},"ss",[79,100375,239],{"class":448},[79,100377,100345],{"class":228},[79,100379,49509],{"class":7284},[79,100381,239],{"class":448},[79,100383,775],{"class":96},[79,100385,850],{"class":228},[79,100387,100388],{"class":81,"line":585},[79,100389,100390],{"class":228},"ss.shape\n",[79,100392,100393],{"class":81,"line":591},[79,100394,100395],{"class":2313},"#输出：(2,6,6)\n",[79,100397,100398],{"class":81,"line":596},[79,100399,100400],{"class":2313},"#axis=2\n",[79,100402,100403,100405,100407,100409,100411],{"class":81,"line":602},[79,100404,100345],{"class":228},[79,100406,49509],{"class":7284},[79,100408,239],{"class":448},[79,100410,2331],{"class":96},[79,100412,100413],{"class":228},").shape\n",[79,100415,100416],{"class":81,"line":608},[79,100417,100418],{"class":2313},"#输出：（2，3，12）\n",[19,100420,100421],{},"⑤四维数组拼接",[51,100423,100425],{"className":439,"code":100424,"language":441,"meta":57,"style":57},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\naaaa=aaa.reshape(2,3,3,2)\nbbbb=bbb.reshape(2,3,3,2)\n#axis=0\nnp.concatenate((aaaa,bbbb),axis=0).shape\n#结果：（4，3，3，2）\n#axis=1\nnp.concatenate((aaaa,bbbb),axis=1).shape\n#结果：（2，6，3，2）\n#axis=2\nnp.concatenate((aaaa,bbbb),axis=2).shape\n#结果：（2，3，6，2）\n#axis=3\nnp.concatenate((aaaa,bbbb),axis=3).shape\n#结果：（2，3，3，4）\n",[59,100426,100427,100431,100459,100487,100512,100538,100542,100555,100560,100564,100576,100581,100585,100597,100602,100607,100619],{"__ignoreMap":57},[79,100428,100429],{"class":81,"line":82},[79,100430,100273],{"class":2313},[79,100432,100433,100435,100437,100439,100441,100443,100445,100447,100449,100451,100453,100455,100457],{"class":81,"line":167},[79,100434,97508],{"class":228},[79,100436,239],{"class":448},[79,100438,94989],{"class":228},[79,100440,775],{"class":96},[79,100442,2621],{"class":228},[79,100444,2569],{"class":96},[79,100446,94994],{"class":228},[79,100448,2331],{"class":96},[79,100450,2621],{"class":228},[79,100452,970],{"class":96},[79,100454,2621],{"class":228},[79,100456,2587],{"class":96},[79,100458,850],{"class":228},[79,100460,100461,100463,100465,100467,100469,100471,100473,100475,100477,100479,100481,100483,100485],{"class":81,"line":178},[79,100462,100306],{"class":228},[79,100464,239],{"class":448},[79,100466,94989],{"class":228},[79,100468,2580],{"class":96},[79,100470,2621],{"class":228},[79,100472,100317],{"class":96},[79,100474,94994],{"class":228},[79,100476,2331],{"class":96},[79,100478,2621],{"class":228},[79,100480,970],{"class":96},[79,100482,2621],{"class":228},[79,100484,2587],{"class":96},[79,100486,850],{"class":228},[79,100488,100489,100492,100494,100496,100498,100500,100502,100504,100506,100508,100510],{"class":81,"line":545},[79,100490,100491],{"class":228},"aaaa",[79,100493,239],{"class":448},[79,100495,99655],{"class":228},[79,100497,2331],{"class":96},[79,100499,2621],{"class":228},[79,100501,970],{"class":96},[79,100503,2621],{"class":228},[79,100505,970],{"class":96},[79,100507,2621],{"class":228},[79,100509,2331],{"class":96},[79,100511,850],{"class":228},[79,100513,100514,100517,100519,100522,100524,100526,100528,100530,100532,100534,100536],{"class":81,"line":550},[79,100515,100516],{"class":228},"bbbb",[79,100518,239],{"class":448},[79,100520,100521],{"class":228},"bbb.reshape(",[79,100523,2331],{"class":96},[79,100525,2621],{"class":228},[79,100527,970],{"class":96},[79,100529,2621],{"class":228},[79,100531,970],{"class":96},[79,100533,2621],{"class":228},[79,100535,2331],{"class":96},[79,100537,850],{"class":228},[79,100539,100540],{"class":81,"line":562},[79,100541,100336],{"class":2313},[79,100543,100544,100547,100549,100551,100553],{"class":81,"line":568},[79,100545,100546],{"class":228},"np.concatenate((aaaa,bbbb),",[79,100548,49509],{"class":7284},[79,100550,239],{"class":448},[79,100552,759],{"class":96},[79,100554,100413],{"class":228},[79,100556,100557],{"class":81,"line":574},[79,100558,100559],{"class":2313},"#结果：（4，3，3，2）\n",[79,100561,100562],{"class":81,"line":579},[79,100563,100368],{"class":2313},[79,100565,100566,100568,100570,100572,100574],{"class":81,"line":585},[79,100567,100546],{"class":228},[79,100569,49509],{"class":7284},[79,100571,239],{"class":448},[79,100573,775],{"class":96},[79,100575,100413],{"class":228},[79,100577,100578],{"class":81,"line":591},[79,100579,100580],{"class":2313},"#结果：（2，6，3，2）\n",[79,100582,100583],{"class":81,"line":596},[79,100584,100400],{"class":2313},[79,100586,100587,100589,100591,100593,100595],{"class":81,"line":602},[79,100588,100546],{"class":228},[79,100590,49509],{"class":7284},[79,100592,239],{"class":448},[79,100594,2331],{"class":96},[79,100596,100413],{"class":228},[79,100598,100599],{"class":81,"line":608},[79,100600,100601],{"class":2313},"#结果：（2，3，6，2）\n",[79,100603,100604],{"class":81,"line":614},[79,100605,100606],{"class":2313},"#axis=3\n",[79,100608,100609,100611,100613,100615,100617],{"class":81,"line":619},[79,100610,100546],{"class":228},[79,100612,49509],{"class":7284},[79,100614,239],{"class":448},[79,100616,970],{"class":96},[79,100618,100413],{"class":228},[79,100620,100621],{"class":81,"line":625},[79,100622,100623],{"class":2313},"#结果：（2，3，3，4）\n",[14,100625,100627],{"id":100626},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,100629,100630],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,100632,100633],{},"①二维数组",[51,100635,100637],{"className":439,"code":100636,"language":441,"meta":57,"style":57},"aa=np.arange(1,13).reshape(3,4)\nbb=np.arange(101,113).reshape(3,4)\nnp.hstack((aa,bb))\n#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n#np.hstack([aa,bb])\n",[59,100638,100639,100663,100687,100692,100697],{"__ignoreMap":57},[79,100640,100641,100643,100645,100647,100649,100651,100653,100655,100657,100659,100661],{"class":81,"line":82},[79,100642,95293],{"class":228},[79,100644,239],{"class":448},[79,100646,94989],{"class":228},[79,100648,775],{"class":96},[79,100650,2621],{"class":228},[79,100652,2764],{"class":96},[79,100654,94994],{"class":228},[79,100656,970],{"class":96},[79,100658,2621],{"class":228},[79,100660,2537],{"class":96},[79,100662,850],{"class":228},[79,100664,100665,100667,100669,100671,100673,100675,100677,100679,100681,100683,100685],{"class":81,"line":167},[79,100666,100172],{"class":228},[79,100668,239],{"class":448},[79,100670,94989],{"class":228},[79,100672,2580],{"class":96},[79,100674,2621],{"class":228},[79,100676,2882],{"class":96},[79,100678,94994],{"class":228},[79,100680,970],{"class":96},[79,100682,2621],{"class":228},[79,100684,2537],{"class":96},[79,100686,850],{"class":228},[79,100688,100689],{"class":81,"line":178},[79,100690,100691],{"class":228},"np.hstack((aa,bb))\n",[79,100693,100694],{"class":81,"line":545},[79,100695,100696],{"class":2313},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[79,100698,100699],{"class":81,"line":550},[79,100700,100701],{"class":2313},"#np.hstack([aa,bb])\n",[19,100703,100218],{},[19,100705,100706],{},[3569,100707],{"alt":57,"src":100708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,100710,100711],{},"等效于concatenate()函数中axis=1时的情况",[19,100713,100714],{},"②三维数组",[51,100716,100718],{"className":439,"code":100717,"language":441,"meta":57,"style":57},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\n#使用hstack\nnp.hstack((aaa,bbb)).shape\n#输出：（2，6，6）\n",[59,100719,100720,100724,100752,100780,100785,100790],{"__ignoreMap":57},[79,100721,100722],{"class":81,"line":82},[79,100723,100273],{"class":2313},[79,100725,100726,100728,100730,100732,100734,100736,100738,100740,100742,100744,100746,100748,100750],{"class":81,"line":167},[79,100727,97508],{"class":228},[79,100729,239],{"class":448},[79,100731,94989],{"class":228},[79,100733,775],{"class":96},[79,100735,2621],{"class":228},[79,100737,2569],{"class":96},[79,100739,94994],{"class":228},[79,100741,2331],{"class":96},[79,100743,2621],{"class":228},[79,100745,970],{"class":96},[79,100747,2621],{"class":228},[79,100749,2587],{"class":96},[79,100751,850],{"class":228},[79,100753,100754,100756,100758,100760,100762,100764,100766,100768,100770,100772,100774,100776,100778],{"class":81,"line":178},[79,100755,100306],{"class":228},[79,100757,239],{"class":448},[79,100759,94989],{"class":228},[79,100761,2580],{"class":96},[79,100763,2621],{"class":228},[79,100765,100317],{"class":96},[79,100767,94994],{"class":228},[79,100769,2331],{"class":96},[79,100771,2621],{"class":228},[79,100773,970],{"class":96},[79,100775,2621],{"class":228},[79,100777,2587],{"class":96},[79,100779,850],{"class":228},[79,100781,100782],{"class":81,"line":545},[79,100783,100784],{"class":2313},"#使用hstack\n",[79,100786,100787],{"class":81,"line":550},[79,100788,100789],{"class":228},"np.hstack((aaa,bbb)).shape\n",[79,100791,100792],{"class":81,"line":562},[79,100793,100794],{"class":2313},"#输出：（2，6，6）\n",[14,100796,100798],{"id":100797},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,100800,100801],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,100803,100633],{},[51,100805,100807],{"className":439,"code":100806,"language":441,"meta":57,"style":57},"aa=np.arange(1,13).reshape(3,4)\nbb=np.arange(101,113).reshape(3,4)\n#vstack 垂直方向进行堆叠\nnp.vstack((aa,bb))\n#与hstack传的参数类似，等价于：\nnp.vstack([aa,bb])\n",[59,100808,100809,100833,100857,100862,100867,100872],{"__ignoreMap":57},[79,100810,100811,100813,100815,100817,100819,100821,100823,100825,100827,100829,100831],{"class":81,"line":82},[79,100812,95293],{"class":228},[79,100814,239],{"class":448},[79,100816,94989],{"class":228},[79,100818,775],{"class":96},[79,100820,2621],{"class":228},[79,100822,2764],{"class":96},[79,100824,94994],{"class":228},[79,100826,970],{"class":96},[79,100828,2621],{"class":228},[79,100830,2537],{"class":96},[79,100832,850],{"class":228},[79,100834,100835,100837,100839,100841,100843,100845,100847,100849,100851,100853,100855],{"class":81,"line":167},[79,100836,100172],{"class":228},[79,100838,239],{"class":448},[79,100840,94989],{"class":228},[79,100842,2580],{"class":96},[79,100844,2621],{"class":228},[79,100846,2882],{"class":96},[79,100848,94994],{"class":228},[79,100850,970],{"class":96},[79,100852,2621],{"class":228},[79,100854,2537],{"class":96},[79,100856,850],{"class":228},[79,100858,100859],{"class":81,"line":178},[79,100860,100861],{"class":2313},"#vstack 垂直方向进行堆叠\n",[79,100863,100864],{"class":81,"line":545},[79,100865,100866],{"class":228},"np.vstack((aa,bb))\n",[79,100868,100869],{"class":81,"line":550},[79,100870,100871],{"class":2313},"#与hstack传的参数类似，等价于：\n",[79,100873,100874],{"class":81,"line":562},[79,100875,100876],{"class":228},"np.vstack([aa,bb])\n",[19,100878,100218],{},[19,100880,100881],{},[3569,100882],{"alt":57,"src":100883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,100885,100714],{},[51,100887,100889],{"className":439,"code":100888,"language":441,"meta":57,"style":57},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\n#使用vstack\nnp.vstack((aaa,bbb)).shape\n#输出：（4，3，6）\n",[59,100890,100891,100895,100923,100951,100956,100961],{"__ignoreMap":57},[79,100892,100893],{"class":81,"line":82},[79,100894,100273],{"class":2313},[79,100896,100897,100899,100901,100903,100905,100907,100909,100911,100913,100915,100917,100919,100921],{"class":81,"line":167},[79,100898,97508],{"class":228},[79,100900,239],{"class":448},[79,100902,94989],{"class":228},[79,100904,775],{"class":96},[79,100906,2621],{"class":228},[79,100908,2569],{"class":96},[79,100910,94994],{"class":228},[79,100912,2331],{"class":96},[79,100914,2621],{"class":228},[79,100916,970],{"class":96},[79,100918,2621],{"class":228},[79,100920,2587],{"class":96},[79,100922,850],{"class":228},[79,100924,100925,100927,100929,100931,100933,100935,100937,100939,100941,100943,100945,100947,100949],{"class":81,"line":178},[79,100926,100306],{"class":228},[79,100928,239],{"class":448},[79,100930,94989],{"class":228},[79,100932,2580],{"class":96},[79,100934,2621],{"class":228},[79,100936,100317],{"class":96},[79,100938,94994],{"class":228},[79,100940,2331],{"class":96},[79,100942,2621],{"class":228},[79,100944,970],{"class":96},[79,100946,2621],{"class":228},[79,100948,2587],{"class":96},[79,100950,850],{"class":228},[79,100952,100953],{"class":81,"line":545},[79,100954,100955],{"class":2313},"#使用vstack\n",[79,100957,100958],{"class":81,"line":550},[79,100959,100960],{"class":228},"np.vstack((aaa,bbb)).shape\n",[79,100962,100963],{"class":81,"line":562},[79,100964,100965],{"class":2313},"#输出：（4，3，6）\n",[14,100967,100969],{"id":100968},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,100971,100972],{},"该方法是三维数组特有的方法",[19,100974,100975],{},"也就是说",[19,100977,100978],{},"一维数组拼接方法用：concatenate()",[19,100980,100981],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,100983,100984],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,100986,100987],{},"四维数组及多维数组只能用concatenate进行拼接",[51,100989,100991],{"className":439,"code":100990,"language":441,"meta":57,"style":57},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\n#使用dstack\nnp.dstack((aaa,bbb)).shape\n#结果：（2，3，12）\n",[59,100992,100993,100997,101025,101053,101058,101063],{"__ignoreMap":57},[79,100994,100995],{"class":81,"line":82},[79,100996,100273],{"class":2313},[79,100998,100999,101001,101003,101005,101007,101009,101011,101013,101015,101017,101019,101021,101023],{"class":81,"line":167},[79,101000,97508],{"class":228},[79,101002,239],{"class":448},[79,101004,94989],{"class":228},[79,101006,775],{"class":96},[79,101008,2621],{"class":228},[79,101010,2569],{"class":96},[79,101012,94994],{"class":228},[79,101014,2331],{"class":96},[79,101016,2621],{"class":228},[79,101018,970],{"class":96},[79,101020,2621],{"class":228},[79,101022,2587],{"class":96},[79,101024,850],{"class":228},[79,101026,101027,101029,101031,101033,101035,101037,101039,101041,101043,101045,101047,101049,101051],{"class":81,"line":178},[79,101028,100306],{"class":228},[79,101030,239],{"class":448},[79,101032,94989],{"class":228},[79,101034,2580],{"class":96},[79,101036,2621],{"class":228},[79,101038,100317],{"class":96},[79,101040,94994],{"class":228},[79,101042,2331],{"class":96},[79,101044,2621],{"class":228},[79,101046,970],{"class":96},[79,101048,2621],{"class":228},[79,101050,2587],{"class":96},[79,101052,850],{"class":228},[79,101054,101055],{"class":81,"line":545},[79,101056,101057],{"class":2313},"#使用dstack\n",[79,101059,101060],{"class":81,"line":550},[79,101061,101062],{"class":228},"np.dstack((aaa,bbb)).shape\n",[79,101064,101065],{"class":81,"line":562},[79,101066,101067],{"class":2313},"#结果：（2，3，12）\n",[2159,101069,101070],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":57,"searchDepth":167,"depth":167,"links":101072},[101073,101074,101075,101076],{"id":100012,"depth":167,"text":100013},{"id":100626,"depth":167,"text":100627},{"id":100797,"depth":167,"text":100798},{"id":100968,"depth":167,"text":100969},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":100004,"description":25402},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":101083,"title":101084,"body":101085,"description":25402,"extension":2186,"meta":101360,"navigation":541,"path":101361,"seo":101362,"stem":101363,"__hash__":101364},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":101086,"toc":101358},[101087,101090,101093,101187,101190,101193,101196,101199,101202,101205,101208,101211,101355],[10,101088,101084],{"id":101089},"_7数组转置",[19,101091,101092],{},"使用transpose()函数",[51,101094,101096],{"className":439,"code":101095,"language":441,"meta":57,"style":57},"import numpy as np\na= np.arange(1,13).reshape(4,3)\n#二维数组转置\n#调用transpose()函数\na.transpose()\n#对于二维数组也可以采用.T来实现\na.T#与上述代码一样\n#结果：\n'''\narray([[ 1,  4,  7, 10],\n       [ 2,  5,  8, 11],\n       [ 3,  6,  9, 12]])\n'''\n",[59,101097,101098,101108,101132,101137,101142,101147,101152,101160,101164,101168,101173,101178,101183],{"__ignoreMap":57},[79,101099,101100,101102,101104,101106],{"class":81,"line":82},[79,101101,520],{"class":448},[79,101103,530],{"class":228},[79,101105,533],{"class":448},[79,101107,536],{"class":228},[79,101109,101110,101112,101114,101116,101118,101120,101122,101124,101126,101128,101130],{"class":81,"line":167},[79,101111,2482],{"class":228},[79,101113,239],{"class":448},[79,101115,33718],{"class":228},[79,101117,775],{"class":96},[79,101119,2621],{"class":228},[79,101121,2764],{"class":96},[79,101123,94994],{"class":228},[79,101125,2537],{"class":96},[79,101127,2621],{"class":228},[79,101129,970],{"class":96},[79,101131,850],{"class":228},[79,101133,101134],{"class":81,"line":178},[79,101135,101136],{"class":2313},"#二维数组转置\n",[79,101138,101139],{"class":81,"line":545},[79,101140,101141],{"class":2313},"#调用transpose()函数\n",[79,101143,101144],{"class":81,"line":550},[79,101145,101146],{"class":228},"a.transpose()\n",[79,101148,101149],{"class":81,"line":562},[79,101150,101151],{"class":2313},"#对于二维数组也可以采用.T来实现\n",[79,101153,101154,101157],{"class":81,"line":568},[79,101155,101156],{"class":228},"a.T",[79,101158,101159],{"class":2313},"#与上述代码一样\n",[79,101161,101162],{"class":81,"line":574},[79,101163,95551],{"class":2313},[79,101165,101166],{"class":81,"line":579},[79,101167,95915],{"class":89},[79,101169,101170],{"class":81,"line":585},[79,101171,101172],{"class":89},"array([[ 1,  4,  7, 10],\n",[79,101174,101175],{"class":81,"line":591},[79,101176,101177],{"class":89},"       [ 2,  5,  8, 11],\n",[79,101179,101180],{"class":81,"line":596},[79,101181,101182],{"class":89},"       [ 3,  6,  9, 12]])\n",[79,101184,101185],{"class":81,"line":602},[79,101186,95915],{"class":89},[19,101188,101189],{},"也可以使用np.transpose()的形式",[19,101191,101192],{},"#多维数组进行转置 np.transpose()",[19,101194,101195],{},"#对二维数组也可以使用np.transpose()进行转置",[19,101197,101198],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,101200,101201],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,101203,101204],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,101206,101207],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,101209,101210],{},"四维及以上的数组也是一样的道理",[51,101212,101214],{"className":439,"code":101213,"language":441,"meta":57,"style":57},"x=np.arange(1,37).reshape(3,6,2)\nx.shape\n#结果：（3,6,2）\n#使用np.transpose()进行转置 变为(2,6,3)\nnp.transpose(x,(2,1,0)).shape\n#结果：(2,6,3)\naaaa=np.arange(1,37).reshape(3,2,1,6)\naaaa.shape\n#结果：（3，2，1，6）\n#使用np.transpose()进行转置 变为(2,1,3,6)\nnp.transpose(aaaa,(1,2,0,3)).shape\n#结果：(2,1,3,6)\n",[59,101215,101216,101244,101249,101254,101259,101277,101282,101314,101319,101324,101329,101350],{"__ignoreMap":57},[79,101217,101218,101220,101222,101224,101226,101228,101230,101232,101234,101236,101238,101240,101242],{"class":81,"line":82},[79,101219,3060],{"class":228},[79,101221,239],{"class":448},[79,101223,94989],{"class":228},[79,101225,775],{"class":96},[79,101227,2621],{"class":228},[79,101229,2569],{"class":96},[79,101231,94994],{"class":228},[79,101233,970],{"class":96},[79,101235,2621],{"class":228},[79,101237,2587],{"class":96},[79,101239,2621],{"class":228},[79,101241,2331],{"class":96},[79,101243,850],{"class":228},[79,101245,101246],{"class":81,"line":167},[79,101247,101248],{"class":228},"x.shape\n",[79,101250,101251],{"class":81,"line":178},[79,101252,101253],{"class":2313},"#结果：（3,6,2）\n",[79,101255,101256],{"class":81,"line":545},[79,101257,101258],{"class":2313},"#使用np.transpose()进行转置 变为(2,6,3)\n",[79,101260,101261,101264,101266,101268,101270,101272,101274],{"class":81,"line":550},[79,101262,101263],{"class":228},"np.transpose(x,(",[79,101265,2331],{"class":96},[79,101267,2621],{"class":228},[79,101269,775],{"class":96},[79,101271,2621],{"class":228},[79,101273,759],{"class":96},[79,101275,101276],{"class":228},")).shape\n",[79,101278,101279],{"class":81,"line":562},[79,101280,101281],{"class":2313},"#结果：(2,6,3)\n",[79,101283,101284,101286,101288,101290,101292,101294,101296,101298,101300,101302,101304,101306,101308,101310,101312],{"class":81,"line":568},[79,101285,100491],{"class":228},[79,101287,239],{"class":448},[79,101289,94989],{"class":228},[79,101291,775],{"class":96},[79,101293,2621],{"class":228},[79,101295,2569],{"class":96},[79,101297,94994],{"class":228},[79,101299,970],{"class":96},[79,101301,2621],{"class":228},[79,101303,2331],{"class":96},[79,101305,2621],{"class":228},[79,101307,775],{"class":96},[79,101309,2621],{"class":228},[79,101311,2587],{"class":96},[79,101313,850],{"class":228},[79,101315,101316],{"class":81,"line":574},[79,101317,101318],{"class":228},"aaaa.shape\n",[79,101320,101321],{"class":81,"line":579},[79,101322,101323],{"class":2313},"#结果：（3，2，1，6）\n",[79,101325,101326],{"class":81,"line":585},[79,101327,101328],{"class":2313},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[79,101330,101331,101334,101336,101338,101340,101342,101344,101346,101348],{"class":81,"line":591},[79,101332,101333],{"class":228},"np.transpose(aaaa,(",[79,101335,775],{"class":96},[79,101337,2621],{"class":228},[79,101339,2331],{"class":96},[79,101341,2621],{"class":228},[79,101343,759],{"class":96},[79,101345,2621],{"class":228},[79,101347,970],{"class":96},[79,101349,101276],{"class":228},[79,101351,101352],{"class":81,"line":596},[79,101353,101354],{"class":2313},"#结果：(2,1,3,6)\n",[2159,101356,101357],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":57,"searchDepth":167,"depth":167,"links":101359},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":101084,"description":25402},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":101366,"title":101367,"body":101368,"description":25402,"extension":2186,"meta":102102,"navigation":541,"path":102103,"seo":102104,"stem":102105,"__hash__":102106},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":101369,"toc":102100},[101370,101373,101376,101379,101382,101385,101388,101391,101394,101503,101506,101509,102097],[10,101371,101367],{"id":101372},"_8数组分割",[19,101374,101375],{},"split分割",[19,101377,101378],{},"numpy.split(ary,indics_or_sections,axis)",[19,101380,101381],{},"解释：",[19,101383,101384],{},"ary:被分割的数组",[19,101386,101387],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,101389,101390],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,101392,101393],{},"①一维数组的分割",[51,101395,101397],{"className":439,"code":101396,"language":441,"meta":57,"style":57},"a=np.arange(1,9)\n#如果传入整数，必须能够平分，否则会报错\nnp.split(a,2)\n#结果：\n#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\nnp.split(a,4)\n#结果：\n#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n#传入数组\nnp.split(a,[3,5])\n#结果：\n#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\nnp.split(a,[5,7])\n#结果：\n#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[59,101398,101399,101415,101420,101429,101433,101438,101446,101450,101455,101460,101473,101477,101482,101494,101498],{"__ignoreMap":57},[79,101400,101401,101403,101405,101407,101409,101411,101413],{"class":81,"line":82},[79,101402,2482],{"class":228},[79,101404,239],{"class":448},[79,101406,94989],{"class":228},[79,101408,775],{"class":96},[79,101410,2621],{"class":228},[79,101412,2663],{"class":96},[79,101414,850],{"class":228},[79,101416,101417],{"class":81,"line":167},[79,101418,101419],{"class":2313},"#如果传入整数，必须能够平分，否则会报错\n",[79,101421,101422,101425,101427],{"class":81,"line":178},[79,101423,101424],{"class":228},"np.split(a,",[79,101426,2331],{"class":96},[79,101428,850],{"class":228},[79,101430,101431],{"class":81,"line":545},[79,101432,95551],{"class":2313},[79,101434,101435],{"class":81,"line":550},[79,101436,101437],{"class":2313},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[79,101439,101440,101442,101444],{"class":81,"line":562},[79,101441,101424],{"class":228},[79,101443,2537],{"class":96},[79,101445,850],{"class":228},[79,101447,101448],{"class":81,"line":568},[79,101449,95551],{"class":2313},[79,101451,101452],{"class":81,"line":574},[79,101453,101454],{"class":2313},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[79,101456,101457],{"class":81,"line":579},[79,101458,101459],{"class":2313},"#传入数组\n",[79,101461,101462,101465,101467,101469,101471],{"class":81,"line":585},[79,101463,101464],{"class":228},"np.split(a,[",[79,101466,970],{"class":96},[79,101468,2621],{"class":228},[79,101470,2563],{"class":96},[79,101472,6727],{"class":228},[79,101474,101475],{"class":81,"line":591},[79,101476,95551],{"class":2313},[79,101478,101479],{"class":81,"line":596},[79,101480,101481],{"class":2313},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[79,101483,101484,101486,101488,101490,101492],{"class":81,"line":602},[79,101485,101464],{"class":228},[79,101487,2563],{"class":96},[79,101489,2621],{"class":228},[79,101491,2612],{"class":96},[79,101493,6727],{"class":228},[79,101495,101496],{"class":81,"line":608},[79,101497,95551],{"class":2313},[79,101499,101500],{"class":81,"line":614},[79,101501,101502],{"class":2313},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,101504,101505],{},"②二维数组的分割",[19,101507,101508],{},"使用split()",[51,101510,101512],{"className":439,"code":101511,"language":441,"meta":57,"style":57},"#二维数组分割\naa=np.arange(1,37).reshape(6,6)\n#默认axis=0  传入整数平均分,按行来的\nnp.split(aa,3)\n#输出结果：\n'''\n[array([[ 1,  2,  3,  4,  5,  6],\n        [ 7,  8,  9, 10, 11, 12]]),\n array([[13, 14, 15, 16, 17, 18],\n        [19, 20, 21, 22, 23, 24]]),\n array([[25, 26, 27, 28, 29, 30],\n        [31, 32, 33, 34, 35, 36]])]\n '''\n#传入数组\nnp.split(aa,[2,5])\n#输出结果：\n'''\n[array([[ 1,  2,  3,  4,  5,  6],\n        [ 7,  8,  9, 10, 11, 12]]),\n array([[13, 14, 15, 16, 17, 18],\n        [19, 20, 21, 22, 23, 24],\n        [25, 26, 27, 28, 29, 30]]),\n array([[31, 32, 33, 34, 35, 36]])]\n'''\n#axis=1 按照列来分\nnp.split(aa,3,axis=1)\n#输出结果：\n'''\n[array([[ 1,  2],\n        [ 7,  8],\n        [13, 14],\n        [19, 20],\n        [25, 26],\n        [31, 32]]),\n array([[ 3,  4],\n        [ 9, 10],\n        [15, 16],\n        [21, 22],\n        [27, 28],\n        [33, 34]]),\n array([[ 5,  6],\n        [11, 12],\n        [17, 18],\n        [23, 24],\n        [29, 30],\n        [35, 36]])]\n '''\n#传入数组\nnp.split(aa,[1,2],axis=1)\n#结果：\n'''\n[array([[ 1],\n        [ 7],\n        [13],\n        [19],\n        [25],\n        [31]]),\n array([[ 2],\n        [ 8],\n        [14],\n        [20],\n        [26],\n        [32]]),\n array([[ 3,  4,  5,  6],\n        [ 9, 10, 11, 12],\n        [15, 16, 17, 18],\n        [21, 22, 23, 24],\n        [27, 28, 29, 30],\n        [33, 34, 35, 36]])]\n'''\n#在处理二维数组时也可以直接用vsplit()和hsplit()函数\nnp.vsplit(aa,3)\n#结果：\n'''\n[array([[ 1,  2,  3,  4,  5,  6],\n        [ 7,  8,  9, 10, 11, 12]]),\n array([[13, 14, 15, 16, 17, 18],\n        [19, 20, 21, 22, 23, 24]]),\n array([[25, 26, 27, 28, 29, 30],\n        [31, 32, 33, 34, 35, 36]])]\n'''\nnp.hsplit(aa,3)\n#结果：\n'''\n[array([[ 1,  2],\n        [ 7,  8],\n        [13, 14],\n        [19, 20],\n        [25, 26],\n        [31, 32]]),\n array([[ 3,  4],\n        [ 9, 10],\n        [15, 16],\n        [21, 22],\n        [27, 28],\n        [33, 34]]),\n array([[ 5,  6],\n        [11, 12],\n        [17, 18],\n        [23, 24],\n        [29, 30],\n        [35, 36]])]\n'''\nnp.vsplit(aa,[2,5])\n#结果：\n'''\n[array([[ 1,  2,  3,  4,  5,  6],\n        [ 7,  8,  9, 10, 11, 12]]),\n array([[13, 14, 15, 16, 17, 18],\n        [19, 20, 21, 22, 23, 24],\n        [25, 26, 27, 28, 29, 30]]),\n array([[31, 32, 33, 34, 35, 36]])]\n '''\n",[59,101513,101514,101519,101543,101548,101557,101561,101565,101570,101575,101580,101585,101590,101595,101600,101604,101617,101621,101625,101629,101633,101637,101642,101647,101652,101656,101661,101677,101681,101685,101690,101695,101700,101705,101710,101715,101720,101725,101730,101735,101740,101745,101750,101755,101760,101765,101770,101775,101779,101783,101803,101807,101811,101816,101821,101826,101831,101836,101841,101846,101851,101856,101861,101866,101871,101876,101881,101886,101891,101896,101901,101905,101910,101919,101923,101927,101931,101935,101939,101943,101947,101951,101955,101964,101968,101972,101976,101980,101984,101988,101992,101996,102000,102004,102008,102012,102016,102020,102024,102028,102032,102036,102040,102044,102048,102061,102065,102069,102073,102077,102081,102085,102089,102093],{"__ignoreMap":57},[79,101515,101516],{"class":81,"line":82},[79,101517,101518],{"class":2313},"#二维数组分割\n",[79,101520,101521,101523,101525,101527,101529,101531,101533,101535,101537,101539,101541],{"class":81,"line":167},[79,101522,95293],{"class":228},[79,101524,239],{"class":448},[79,101526,94989],{"class":228},[79,101528,775],{"class":96},[79,101530,2621],{"class":228},[79,101532,2569],{"class":96},[79,101534,94994],{"class":228},[79,101536,2587],{"class":96},[79,101538,2621],{"class":228},[79,101540,2587],{"class":96},[79,101542,850],{"class":228},[79,101544,101545],{"class":81,"line":178},[79,101546,101547],{"class":2313},"#默认axis=0  传入整数平均分,按行来的\n",[79,101549,101550,101553,101555],{"class":81,"line":545},[79,101551,101552],{"class":228},"np.split(aa,",[79,101554,970],{"class":96},[79,101556,850],{"class":228},[79,101558,101559],{"class":81,"line":550},[79,101560,97749],{"class":2313},[79,101562,101563],{"class":81,"line":562},[79,101564,95915],{"class":89},[79,101566,101567],{"class":81,"line":568},[79,101568,101569],{"class":89},"[array([[ 1,  2,  3,  4,  5,  6],\n",[79,101571,101572],{"class":81,"line":574},[79,101573,101574],{"class":89},"        [ 7,  8,  9, 10, 11, 12]]),\n",[79,101576,101577],{"class":81,"line":579},[79,101578,101579],{"class":89}," array([[13, 14, 15, 16, 17, 18],\n",[79,101581,101582],{"class":81,"line":585},[79,101583,101584],{"class":89},"        [19, 20, 21, 22, 23, 24]]),\n",[79,101586,101587],{"class":81,"line":591},[79,101588,101589],{"class":89}," array([[25, 26, 27, 28, 29, 30],\n",[79,101591,101592],{"class":81,"line":596},[79,101593,101594],{"class":89},"        [31, 32, 33, 34, 35, 36]])]\n",[79,101596,101597],{"class":81,"line":602},[79,101598,101599],{"class":89}," '''\n",[79,101601,101602],{"class":81,"line":608},[79,101603,101459],{"class":2313},[79,101605,101606,101609,101611,101613,101615],{"class":81,"line":614},[79,101607,101608],{"class":228},"np.split(aa,[",[79,101610,2331],{"class":96},[79,101612,2621],{"class":228},[79,101614,2563],{"class":96},[79,101616,6727],{"class":228},[79,101618,101619],{"class":81,"line":619},[79,101620,97749],{"class":2313},[79,101622,101623],{"class":81,"line":625},[79,101624,95915],{"class":89},[79,101626,101627],{"class":81,"line":631},[79,101628,101569],{"class":89},[79,101630,101631],{"class":81,"line":637},[79,101632,101574],{"class":89},[79,101634,101635],{"class":81,"line":643},[79,101636,101579],{"class":89},[79,101638,101639],{"class":81,"line":649},[79,101640,101641],{"class":89},"        [19, 20, 21, 22, 23, 24],\n",[79,101643,101644],{"class":81,"line":655},[79,101645,101646],{"class":89},"        [25, 26, 27, 28, 29, 30]]),\n",[79,101648,101649],{"class":81,"line":660},[79,101650,101651],{"class":89}," array([[31, 32, 33, 34, 35, 36]])]\n",[79,101653,101654],{"class":81,"line":666},[79,101655,95915],{"class":89},[79,101657,101658],{"class":81,"line":672},[79,101659,101660],{"class":2313},"#axis=1 按照列来分\n",[79,101662,101663,101665,101667,101669,101671,101673,101675],{"class":81,"line":678},[79,101664,101552],{"class":228},[79,101666,970],{"class":96},[79,101668,2621],{"class":228},[79,101670,49509],{"class":7284},[79,101672,239],{"class":448},[79,101674,775],{"class":96},[79,101676,850],{"class":228},[79,101678,101679],{"class":81,"line":684},[79,101680,97749],{"class":2313},[79,101682,101683],{"class":81,"line":690},[79,101684,95915],{"class":89},[79,101686,101687],{"class":81,"line":695},[79,101688,101689],{"class":89},"[array([[ 1,  2],\n",[79,101691,101692],{"class":81,"line":700},[79,101693,101694],{"class":89},"        [ 7,  8],\n",[79,101696,101697],{"class":81,"line":712},[79,101698,101699],{"class":89},"        [13, 14],\n",[79,101701,101702],{"class":81,"line":721},[79,101703,101704],{"class":89},"        [19, 20],\n",[79,101706,101707],{"class":81,"line":726},[79,101708,101709],{"class":89},"        [25, 26],\n",[79,101711,101712],{"class":81,"line":731},[79,101713,101714],{"class":89},"        [31, 32]]),\n",[79,101716,101717],{"class":81,"line":748},[79,101718,101719],{"class":89}," array([[ 3,  4],\n",[79,101721,101722],{"class":81,"line":765},[79,101723,101724],{"class":89},"        [ 9, 10],\n",[79,101726,101727],{"class":81,"line":780},[79,101728,101729],{"class":89},"        [15, 16],\n",[79,101731,101732],{"class":81,"line":811},[79,101733,101734],{"class":89},"        [21, 22],\n",[79,101736,101737],{"class":81,"line":816},[79,101738,101739],{"class":89},"        [27, 28],\n",[79,101741,101742],{"class":81,"line":821},[79,101743,101744],{"class":89},"        [33, 34]]),\n",[79,101746,101747],{"class":81,"line":837},[79,101748,101749],{"class":89}," array([[ 5,  6],\n",[79,101751,101752],{"class":81,"line":853},[79,101753,101754],{"class":89},"        [11, 12],\n",[79,101756,101757],{"class":81,"line":864},[79,101758,101759],{"class":89},"        [17, 18],\n",[79,101761,101762],{"class":81,"line":869},[79,101763,101764],{"class":89},"        [23, 24],\n",[79,101766,101767],{"class":81,"line":885},[79,101768,101769],{"class":89},"        [29, 30],\n",[79,101771,101772],{"class":81,"line":891},[79,101773,101774],{"class":89},"        [35, 36]])]\n",[79,101776,101777],{"class":81,"line":896},[79,101778,101599],{"class":89},[79,101780,101781],{"class":81,"line":907},[79,101782,101459],{"class":2313},[79,101784,101785,101787,101789,101791,101793,101795,101797,101799,101801],{"class":81,"line":912},[79,101786,101608],{"class":228},[79,101788,775],{"class":96},[79,101790,2621],{"class":228},[79,101792,2331],{"class":96},[79,101794,43604],{"class":228},[79,101796,49509],{"class":7284},[79,101798,239],{"class":448},[79,101800,775],{"class":96},[79,101802,850],{"class":228},[79,101804,101805],{"class":81,"line":935},[79,101806,95551],{"class":2313},[79,101808,101809],{"class":81,"line":946},[79,101810,95915],{"class":89},[79,101812,101813],{"class":81,"line":960},[79,101814,101815],{"class":89},"[array([[ 1],\n",[79,101817,101818],{"class":81,"line":975},[79,101819,101820],{"class":89},"        [ 7],\n",[79,101822,101823],{"class":81,"line":980},[79,101824,101825],{"class":89},"        [13],\n",[79,101827,101828],{"class":81,"line":1006},[79,101829,101830],{"class":89},"        [19],\n",[79,101832,101833],{"class":81,"line":1027},[79,101834,101835],{"class":89},"        [25],\n",[79,101837,101838],{"class":81,"line":1032},[79,101839,101840],{"class":89},"        [31]]),\n",[79,101842,101843],{"class":81,"line":1047},[79,101844,101845],{"class":89}," array([[ 2],\n",[79,101847,101848],{"class":81,"line":1053},[79,101849,101850],{"class":89},"        [ 8],\n",[79,101852,101853],{"class":81,"line":1058},[79,101854,101855],{"class":89},"        [14],\n",[79,101857,101858],{"class":81,"line":1069},[79,101859,101860],{"class":89},"        [20],\n",[79,101862,101863],{"class":81,"line":1081},[79,101864,101865],{"class":89},"        [26],\n",[79,101867,101868],{"class":81,"line":1086},[79,101869,101870],{"class":89},"        [32]]),\n",[79,101872,101873],{"class":81,"line":1108},[79,101874,101875],{"class":89}," array([[ 3,  4,  5,  6],\n",[79,101877,101878],{"class":81,"line":1153},[79,101879,101880],{"class":89},"        [ 9, 10, 11, 12],\n",[79,101882,101883],{"class":81,"line":1158},[79,101884,101885],{"class":89},"        [15, 16, 17, 18],\n",[79,101887,101888],{"class":81,"line":1180},[79,101889,101890],{"class":89},"        [21, 22, 23, 24],\n",[79,101892,101893],{"class":81,"line":1197},[79,101894,101895],{"class":89},"        [27, 28, 29, 30],\n",[79,101897,101898],{"class":81,"line":1202},[79,101899,101900],{"class":89},"        [33, 34, 35, 36]])]\n",[79,101902,101903],{"class":81,"line":1207},[79,101904,95915],{"class":89},[79,101906,101907],{"class":81,"line":1223},[79,101908,101909],{"class":2313},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[79,101911,101912,101915,101917],{"class":81,"line":18722},[79,101913,101914],{"class":228},"np.vsplit(aa,",[79,101916,970],{"class":96},[79,101918,850],{"class":228},[79,101920,101921],{"class":81,"line":18728},[79,101922,95551],{"class":2313},[79,101924,101925],{"class":81,"line":18739},[79,101926,95915],{"class":89},[79,101928,101929],{"class":81,"line":18762},[79,101930,101569],{"class":89},[79,101932,101933],{"class":81,"line":18784},[79,101934,101574],{"class":89},[79,101936,101937],{"class":81,"line":18789},[79,101938,101579],{"class":89},[79,101940,101941],{"class":81,"line":18795},[79,101942,101584],{"class":89},[79,101944,101945],{"class":81,"line":18809},[79,101946,101589],{"class":89},[79,101948,101949],{"class":81,"line":18822},[79,101950,101594],{"class":89},[79,101952,101953],{"class":81,"line":18827},[79,101954,95915],{"class":89},[79,101956,101957,101960,101962],{"class":81,"line":18841},[79,101958,101959],{"class":228},"np.hsplit(aa,",[79,101961,970],{"class":96},[79,101963,850],{"class":228},[79,101965,101966],{"class":81,"line":18846},[79,101967,95551],{"class":2313},[79,101969,101970],{"class":81,"line":18852},[79,101971,95915],{"class":89},[79,101973,101974],{"class":81,"line":18857},[79,101975,101689],{"class":89},[79,101977,101978],{"class":81,"line":18871},[79,101979,101694],{"class":89},[79,101981,101982],{"class":81,"line":18876},[79,101983,101699],{"class":89},[79,101985,101986],{"class":81,"line":18881},[79,101987,101704],{"class":89},[79,101989,101990],{"class":81,"line":18895},[79,101991,101709],{"class":89},[79,101993,101994],{"class":81,"line":18907},[79,101995,101714],{"class":89},[79,101997,101998],{"class":81,"line":18912},[79,101999,101719],{"class":89},[79,102001,102002],{"class":81,"line":18925},[79,102003,101724],{"class":89},[79,102005,102006],{"class":81,"line":18930},[79,102007,101729],{"class":89},[79,102009,102010],{"class":81,"line":18935},[79,102011,101734],{"class":89},[79,102013,102014],{"class":81,"line":18940},[79,102015,101739],{"class":89},[79,102017,102018],{"class":81,"line":18953},[79,102019,101744],{"class":89},[79,102021,102022],{"class":81,"line":18958},[79,102023,101749],{"class":89},[79,102025,102026],{"class":81,"line":34631},[79,102027,101754],{"class":89},[79,102029,102030],{"class":81,"line":34637},[79,102031,101759],{"class":89},[79,102033,102034],{"class":81,"line":34643},[79,102035,101764],{"class":89},[79,102037,102038],{"class":81,"line":34649},[79,102039,101769],{"class":89},[79,102041,102042],{"class":81,"line":34655},[79,102043,101774],{"class":89},[79,102045,102046],{"class":81,"line":34666},[79,102047,95915],{"class":89},[79,102049,102050,102053,102055,102057,102059],{"class":81,"line":34672},[79,102051,102052],{"class":228},"np.vsplit(aa,[",[79,102054,2331],{"class":96},[79,102056,2621],{"class":228},[79,102058,2563],{"class":96},[79,102060,6727],{"class":228},[79,102062,102063],{"class":81,"line":34692},[79,102064,95551],{"class":2313},[79,102066,102067],{"class":81,"line":34698},[79,102068,95915],{"class":89},[79,102070,102071],{"class":81,"line":34709},[79,102072,101569],{"class":89},[79,102074,102075],{"class":81,"line":34715},[79,102076,101574],{"class":89},[79,102078,102079],{"class":81,"line":34721},[79,102080,101579],{"class":89},[79,102082,102083],{"class":81,"line":34727},[79,102084,101641],{"class":89},[79,102086,102087],{"class":81,"line":34733},[79,102088,101646],{"class":89},[79,102090,102091],{"class":81,"line":34739},[79,102092,101651],{"class":89},[79,102094,102095],{"class":81,"line":34745},[79,102096,101599],{"class":89},[2159,102098,102099],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":57,"searchDepth":167,"depth":167,"links":102101},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":101367,"description":25402},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":102108,"title":102109,"body":102110,"description":25402,"extension":2186,"meta":102604,"navigation":541,"path":102605,"seo":102606,"stem":102607,"__hash__":102608},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":102111,"toc":102595},[102112,102115,102118,102143,102147,102206,102258,102262,102264,102300,102354,102356,102394,102465,102469,102474,102478,102481,102514,102517,102521,102524,102527,102530,102533,102538,102542,102545,102548,102551,102554,102559,102563,102568,102571,102592],[10,102113,102109],{"id":102114},"_9数学函数",[19,102116,102117],{},"补充回顾：python的列表推导式",[51,102119,102121],{"className":439,"code":102120,"language":441,"meta":57,"style":57},"[1\u002Fi for i in a]\n",[59,102122,102123],{"__ignoreMap":57},[79,102124,102125,102127,102129,102131,102134,102136,102138,102140],{"class":81,"line":82},[79,102126,3130],{"class":228},[79,102128,775],{"class":96},[79,102130,2824],{"class":448},[79,102132,102133],{"class":228},"i ",[79,102135,1638],{"class":448},[79,102137,11493],{"class":228},[79,102139,921],{"class":448},[79,102141,102142],{"class":228}," a]\n",[14,102144,102146],{"id":102145},"_91-求倒数","9.1 求倒数",[51,102148,102150],{"className":439,"code":102149,"language":441,"meta":57,"style":57},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[59,102151,102152,102157,102185,102197],{"__ignoreMap":57},[79,102153,102154],{"class":81,"line":82},[79,102155,102156],{"class":2313},"#数组求倒数\n",[79,102158,102159,102161,102163,102165,102167,102169,102171,102173,102175,102177,102179,102181,102183],{"class":81,"line":167},[79,102160,2482],{"class":228},[79,102162,239],{"class":448},[79,102164,3130],{"class":228},[79,102166,775],{"class":96},[79,102168,2621],{"class":228},[79,102170,2331],{"class":96},[79,102172,2621],{"class":228},[79,102174,970],{"class":96},[79,102176,2621],{"class":228},[79,102178,2537],{"class":96},[79,102180,2621],{"class":228},[79,102182,2563],{"class":96},[79,102184,762],{"class":228},[79,102186,102187,102189,102191,102194],{"class":81,"line":178},[79,102188,2507],{"class":228},[79,102190,239],{"class":448},[79,102192,102193],{"class":228},"np.array(a)",[79,102195,102196],{"class":2313},"#将列表转换为数组\n",[79,102198,102199,102201,102203],{"class":81,"line":545},[79,102200,775],{"class":96},[79,102202,2824],{"class":448},[79,102204,102205],{"class":228},"b\n",[51,102207,102209],{"className":439,"code":102208,"language":441,"meta":57,"style":57},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[59,102210,102211,102239,102248,102253],{"__ignoreMap":57},[79,102212,102213,102215,102217,102219,102221,102223,102225,102227,102229,102231,102233,102235,102237],{"class":81,"line":82},[79,102214,2482],{"class":228},[79,102216,239],{"class":448},[79,102218,3130],{"class":228},[79,102220,775],{"class":96},[79,102222,2621],{"class":228},[79,102224,2331],{"class":96},[79,102226,2621],{"class":228},[79,102228,970],{"class":96},[79,102230,2621],{"class":228},[79,102232,2537],{"class":96},[79,102234,2621],{"class":228},[79,102236,2563],{"class":96},[79,102238,762],{"class":228},[79,102240,102241,102243,102245],{"class":81,"line":167},[79,102242,2507],{"class":228},[79,102244,239],{"class":448},[79,102246,102247],{"class":228},"np.array(a)\n",[79,102249,102250],{"class":81,"line":178},[79,102251,102252],{"class":2313},"#调用numpy中的函数reciprocal()\n",[79,102254,102255],{"class":81,"line":545},[79,102256,102257],{"class":228},"np.reciprocal(b)\n",[14,102259,102261],{"id":102260},"_92-求平方","9.2 求平方",[19,102263,96517],{},[51,102265,102267],{"className":439,"code":102266,"language":441,"meta":57,"style":57},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[59,102268,102269,102274,102279,102295],{"__ignoreMap":57},[79,102270,102271],{"class":81,"line":82},[79,102272,102273],{"class":2313},"#square()，求平方\n",[79,102275,102276],{"class":81,"line":167},[79,102277,102278],{"class":2313},"#一维数组\n",[79,102280,102281,102283,102285,102287,102289,102291,102293],{"class":81,"line":178},[79,102282,2482],{"class":228},[79,102284,239],{"class":448},[79,102286,94989],{"class":228},[79,102288,775],{"class":96},[79,102290,2621],{"class":228},[79,102292,2689],{"class":96},[79,102294,850],{"class":228},[79,102296,102297],{"class":81,"line":545},[79,102298,102299],{"class":228},"np.square(a)\n",[51,102301,102303],{"className":439,"code":102302,"language":441,"meta":57,"style":57},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[59,102304,102305,102310,102315,102336],{"__ignoreMap":57},[79,102306,102307],{"class":81,"line":82},[79,102308,102309],{"class":2313},"#或者通过循环遍历的形式来计算\n",[79,102311,102312],{"class":81,"line":167},[79,102313,102314],{"class":2313},"#这是一个列表\n",[79,102316,102317,102320,102322,102324,102326,102328,102330,102333],{"class":81,"line":178},[79,102318,102319],{"class":228},"[i",[79,102321,473],{"class":448},[79,102323,102133],{"class":228},[79,102325,1638],{"class":448},[79,102327,11493],{"class":228},[79,102329,921],{"class":448},[79,102331,102332],{"class":228}," a]",[79,102334,102335],{"class":2313},"#这个求完之后在数列当中\n",[79,102337,102338,102341,102343,102345,102347,102349,102351],{"class":81,"line":545},[79,102339,102340],{"class":228},"np.array([i",[79,102342,473],{"class":448},[79,102344,102133],{"class":228},[79,102346,1638],{"class":448},[79,102348,11493],{"class":228},[79,102350,921],{"class":448},[79,102352,102353],{"class":228}," a])\n",[19,102355,95278],{},[51,102357,102359],{"className":439,"code":102358,"language":441,"meta":57,"style":57},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[59,102360,102361,102365,102389],{"__ignoreMap":57},[79,102362,102363],{"class":81,"line":82},[79,102364,95288],{"class":2313},[79,102366,102367,102369,102371,102373,102375,102377,102379,102381,102383,102385,102387],{"class":81,"line":167},[79,102368,95293],{"class":228},[79,102370,239],{"class":448},[79,102372,94989],{"class":228},[79,102374,775],{"class":96},[79,102376,2621],{"class":228},[79,102378,2764],{"class":96},[79,102380,94994],{"class":228},[79,102382,2537],{"class":96},[79,102384,2621],{"class":228},[79,102386,970],{"class":96},[79,102388,850],{"class":228},[79,102390,102391],{"class":81,"line":178},[79,102392,102393],{"class":228},"np.square(aa)\n",[51,102395,102397],{"className":439,"code":102396,"language":441,"meta":57,"style":57},"#传统的方式\nbb=np.empty_like(aa)\nfor i in range(4):\n    for j in range(3):\n        bb[i,j]=aa[i,j]*aa[i,j]\nbb\n",[59,102398,102399,102404,102413,102429,102445,102460],{"__ignoreMap":57},[79,102400,102401],{"class":81,"line":82},[79,102402,102403],{"class":2313},"#传统的方式\n",[79,102405,102406,102408,102410],{"class":81,"line":167},[79,102407,100172],{"class":228},[79,102409,239],{"class":448},[79,102411,102412],{"class":228},"np.empty_like(aa)\n",[79,102414,102415,102417,102419,102421,102423,102425,102427],{"class":81,"line":178},[79,102416,1638],{"class":448},[79,102418,11493],{"class":228},[79,102420,921],{"class":448},[79,102422,924],{"class":96},[79,102424,455],{"class":228},[79,102426,2537],{"class":96},[79,102428,932],{"class":228},[79,102430,102431,102433,102435,102437,102439,102441,102443],{"class":81,"line":545},[79,102432,915],{"class":448},[79,102434,11554],{"class":228},[79,102436,921],{"class":448},[79,102438,924],{"class":96},[79,102440,455],{"class":228},[79,102442,970],{"class":96},[79,102444,932],{"class":228},[79,102446,102447,102450,102452,102455,102457],{"class":81,"line":550},[79,102448,102449],{"class":228},"        bb[i,j]",[79,102451,239],{"class":448},[79,102453,102454],{"class":228},"aa[i,j]",[79,102456,473],{"class":448},[79,102458,102459],{"class":228},"aa[i,j]\n",[79,102461,102462],{"class":81,"line":562},[79,102463,102464],{"class":228},"bb\n",[14,102466,102468],{"id":102467},"_93-求各元素的符号","9.3 求各元素的符号",[19,102470,102471],{},[3569,102472],{"alt":57,"src":102473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,102475,102477],{"id":102476},"_94-modf函数","9.4 modf函数",[19,102479,102480],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[51,102482,102484],{"className":439,"code":102483,"language":441,"meta":57,"style":57},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[59,102485,102486,102509],{"__ignoreMap":57},[79,102487,102488,102490,102492,102494,102496,102498,102500,102502,102504,102507],{"class":81,"line":82},[79,102489,2482],{"class":228},[79,102491,239],{"class":448},[79,102493,94989],{"class":228},[79,102495,478],{"class":448},[79,102497,2689],{"class":96},[79,102499,2621],{"class":228},[79,102501,2689],{"class":96},[79,102503,2621],{"class":228},[79,102505,102506],{"class":96},"0.3",[79,102508,850],{"class":228},[79,102510,102511],{"class":81,"line":167},[79,102512,102513],{"class":228},"np.modf(a)\n",[19,102515,102516],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,102518,102520],{"id":102519},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,102522,102523],{},"np.cell()",[19,102525,102526],{},"np.floor()",[19,102528,102529],{},"np.rint()",[19,102531,102532],{},"对各元素分别向上取整、向下取整、四舍五入",[19,102534,102535],{},[3569,102536],{"alt":57,"src":102537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,102539,102541],{"id":102540},"_96-around函数","9.6 around()函数",[19,102543,102544],{},"around()函数也可以实现对数的小数位数进行操作",[19,102546,102547],{},"其中的参数：",[19,102549,102550],{},"1.要传的数组",[19,102552,102553],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,102555,102556],{},[3569,102557],{"alt":57,"src":102558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,102560,102562],{"id":102561},"_97-三角函数","9.7 三角函数",[19,102564,102565],{},[3569,102566],{"alt":57,"src":102567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,102569,102570],{},"引入图像模块非常重要",[51,102572,102574],{"className":439,"code":102573,"language":441,"meta":57,"style":57},"from matplotlib import pyplot as plt\n",[59,102575,102576],{"__ignoreMap":57},[79,102577,102578,102580,102583,102585,102588,102590],{"class":81,"line":82},[79,102579,32745],{"class":448},[79,102581,102582],{"class":228}," matplotlib ",[79,102584,520],{"class":448},[79,102586,102587],{"class":228}," pyplot ",[79,102589,533],{"class":448},[79,102591,33439],{"class":228},[2159,102593,102594],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":57,"searchDepth":167,"depth":167,"links":102596},[102597,102598,102599,102600,102601,102602,102603],{"id":102145,"depth":167,"text":102146},{"id":102260,"depth":167,"text":102261},{"id":102467,"depth":167,"text":102468},{"id":102476,"depth":167,"text":102477},{"id":102519,"depth":167,"text":102520},{"id":102540,"depth":167,"text":102541},{"id":102561,"depth":167,"text":102562},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":102109,"description":25402},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":102610,"title":102611,"body":102612,"description":25402,"extension":2186,"meta":102616,"navigation":541,"path":102617,"seo":102618,"stem":102619,"__hash__":102620},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":102613,"toc":102614},[],{"title":57,"searchDepth":167,"depth":167,"links":102615},[],{"category":52415},"\u002Fwiki\u002F2025-08-14-numpy",{"title":102611,"description":25402},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":102622,"title":102623,"body":102624,"description":57,"extension":2186,"meta":104579,"navigation":541,"path":104580,"seo":104581,"stem":104582,"__hash__":104583},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":102625,"toc":104555},[102626,102629,102631,102634,102637,102643,102646,102669,102672,102706,102709,102750,102752,102754,102845,102848,102892,102895,102909,102912,102926,102929,102932,102973,102975,103011,103013,103016,103022,103027,103046,103050,103053,103118,103121,103139,103143,103146,103175,103185,103191,103195,103198,103204,103215,103217,103220,103249,103252,103515,103517,103520,103531,103534,103537,103559,103566,103569,103587,103590,103593,103607,103615,103618,103644,103650,103652,103655,103665,103677,103697,103706,103726,103736,103760,103773,103787,103792,103833,103850,103875,103887,103907,103913,103958,103977,103994,104007,104023,104030,104042,104051,104086,104107,104132,104145,104169,104184,104209,104212,104233,104242,104245,104256,104258,104261,104267,104279,104286,104288,104291,104303,104306,104320,104323,104333,104341,104344,104384,104387,104389,104395,104398,104412,104416,104419,104451,104455,104458,104481,104489,104492,104498,104504,104507,104510,104538,104540,104543,104549,104552],[10,102627,102623],{"id":102628},"_1环境安装与第一个-mujoco-程序",[14,102630,17],{"id":16},[19,102632,102633],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,102635,102636],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[51,102638,102641],{"className":102639,"code":102640,"language":56,"meta":57},[54],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[59,102642,102640],{"__ignoreMap":57},[19,102644,102645],{},"需要掌握:",[26,102647,102648,102651,102654,102659,102664],{},[29,102649,102650],{},"Fedora 44 下 MuJoCo 的系统依赖",[29,102652,102653],{},"Python 虚拟环境创建",[29,102655,102656],{},[59,102657,102658],{},"mujoco.MjModel",[29,102660,102661],{},[59,102662,102663],{},"mujoco.MjData",[29,102665,102666],{},[59,102667,102668],{},"mujoco.mj_step(model, data)",[19,102670,102671],{},"MuJoCo 中最重要的两个对象:",[347,102673,102674,102684],{},[350,102675,102676],{},[353,102677,102678,102681],{},[356,102679,102680],{"align":358},"对象",[356,102682,102683],{"align":358},"含义",[367,102685,102686,102696],{},[353,102687,102688,102693],{},[372,102689,102690],{"align":358},[59,102691,102692],{},"MjModel",[372,102694,102695],{"align":358},"模型结构，来自 XML，基本不随时间变化",[353,102697,102698,102703],{},[372,102699,102700],{"align":358},[59,102701,102702],{},"MjData",[372,102704,102705],{"align":358},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,102707,102708],{},"可以先用一个类比理解：",[347,102710,102711,102721],{},[350,102712,102713],{},[353,102714,102715,102718],{},[356,102716,102717],{"align":358},"类比",[356,102719,102720],{"align":358},"MuJoCo 对象",[367,102722,102723,102732,102741],{},[353,102724,102725,102728],{},[372,102726,102727],{"align":358},"游戏地图和角色配置",[372,102729,102730],{"align":358},[59,102731,102692],{},[353,102733,102734,102737],{},[372,102735,102736],{"align":358},"游戏运行到当前帧的状态",[372,102738,102739],{"align":358},[59,102740,102702],{},[353,102742,102743,102746],{},[372,102744,102745],{"align":358},"前进一帧",[372,102747,102748],{"align":358},[59,102749,102668],{},[14,102751,67],{"id":66},[19,102753,70],{},[51,102755,102757],{"className":73,"code":102756,"language":75,"meta":57,"style":57},"sudo dnf install -y \\\n  python3 python3-pip python3-virtualenv \\\n  mesa-libGL mesa-libGLU mesa-dri-drivers \\\n  libglvnd-glx libglvnd-opengl \\\n  glfw glfw-devel \\\n  libX11 libXcursor libXi libXinerama libXrandr \\\n  gcc gcc-c++ make\n",[59,102758,102759,102771,102783,102795,102805,102815,102834],{"__ignoreMap":57},[79,102760,102761,102763,102765,102767,102769],{"class":81,"line":82},[79,102762,86],{"class":85},[79,102764,90],{"class":89},[79,102766,93],{"class":89},[79,102768,97],{"class":96},[79,102770,26698],{"class":96},[79,102772,102773,102776,102778,102781],{"class":81,"line":167},[79,102774,102775],{"class":89},"  python3",[79,102777,103],{"class":89},[79,102779,102780],{"class":89}," python3-virtualenv",[79,102782,26698],{"class":96},[79,102784,102785,102788,102791,102793],{"class":81,"line":178},[79,102786,102787],{"class":89},"  mesa-libGL",[79,102789,102790],{"class":89}," mesa-libGLU",[79,102792,109],{"class":89},[79,102794,26698],{"class":96},[79,102796,102797,102800,102803],{"class":81,"line":545},[79,102798,102799],{"class":89},"  libglvnd-glx",[79,102801,102802],{"class":89}," libglvnd-opengl",[79,102804,26698],{"class":96},[79,102806,102807,102810,102813],{"class":81,"line":550},[79,102808,102809],{"class":89},"  glfw",[79,102811,102812],{"class":89}," glfw-devel",[79,102814,26698],{"class":96},[79,102816,102817,102820,102823,102826,102829,102832],{"class":81,"line":562},[79,102818,102819],{"class":89},"  libX11",[79,102821,102822],{"class":89}," libXcursor",[79,102824,102825],{"class":89}," libXi",[79,102827,102828],{"class":89}," libXinerama",[79,102830,102831],{"class":89}," libXrandr",[79,102833,26698],{"class":96},[79,102835,102836,102839,102842],{"class":81,"line":568},[79,102837,102838],{"class":89},"  gcc",[79,102840,102841],{"class":89}," gcc-c++",[79,102843,102844],{"class":89}," make\n",[19,102846,102847],{},"创建 Python 环境:",[51,102849,102851],{"className":73,"code":102850,"language":75,"meta":57,"style":57},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[59,102852,102853,102867,102875],{"__ignoreMap":57},[79,102854,102855,102858,102861,102864],{"class":81,"line":82},[79,102856,102857],{"class":85},"python3",[79,102859,102860],{"class":96}," -m",[79,102862,102863],{"class":89}," venv",[79,102865,102866],{"class":89}," .venv\n",[79,102868,102869,102872],{"class":81,"line":167},[79,102870,102871],{"class":96},"source",[79,102873,102874],{"class":89}," .venv\u002Fbin\u002Factivate\n",[79,102876,102877,102879,102881,102884,102886,102889],{"class":81,"line":178},[79,102878,441],{"class":85},[79,102880,102860],{"class":96},[79,102882,102883],{"class":89}," pip",[79,102885,93],{"class":89},[79,102887,102888],{"class":96}," --upgrade",[79,102890,102891],{"class":89}," pip\n",[19,102893,102894],{},"pip 安装:",[51,102896,102897],{"className":73,"code":118,"language":75,"meta":57,"style":57},[59,102898,102899],{"__ignoreMap":57},[79,102900,102901,102903,102905,102907],{"class":81,"line":82},[79,102902,125],{"class":85},[79,102904,93],{"class":89},[79,102906,130],{"class":89},[79,102908,133],{"class":89},[19,102910,102911],{},"安装完成后，先做最小检查：",[51,102913,102915],{"className":73,"code":102914,"language":75,"meta":57,"style":57},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[59,102916,102917],{"__ignoreMap":57},[79,102918,102919,102921,102923],{"class":81,"line":82},[79,102920,441],{"class":85},[79,102922,32371],{"class":96},[79,102924,102925],{"class":89}," \"import mujoco; print(mujoco.__version__)\"\n",[19,102927,102928],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,102930,102931],{},"conda 安装:",[51,102933,102935],{"className":73,"code":102934,"language":75,"meta":57,"style":57},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[59,102936,102937,102954,102963],{"__ignoreMap":57},[79,102938,102939,102941,102943,102945,102948,102950,102952],{"class":81,"line":82},[79,102940,146],{"class":85},[79,102942,149],{"class":89},[79,102944,152],{"class":96},[79,102946,102947],{"class":89}," mujoco-study",[79,102949,158],{"class":89},[79,102951,161],{"class":96},[79,102953,164],{"class":96},[79,102955,102956,102958,102960],{"class":81,"line":167},[79,102957,146],{"class":85},[79,102959,172],{"class":89},[79,102961,102962],{"class":89}," mujoco-study\n",[79,102964,102965,102967,102969,102971],{"class":81,"line":178},[79,102966,125],{"class":85},[79,102968,93],{"class":89},[79,102970,130],{"class":89},[79,102972,133],{"class":89},[19,102974,189],{},[26,102976,102977,102983,102992,103001],{},[29,102978,102979,102980,497],{},"不要安装 ",[59,102981,102982],{},"mujoco-py",[29,102984,102985,102986,1748,102988,102991],{},"如果旧项目里同时安装了 ",[59,102987,102982],{},[59,102989,102990],{},"mujoco","，建议新建干净虚拟环境。",[29,102993,102994,102997,102998,497],{},[59,102995,102996],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[59,102999,103000],{},"~\u002F.mujoco\u002Fmujoco210",[29,103002,103003,103004,1978,103007,103010],{},"离屏渲染可能涉及 OpenGL 后端，",[59,103005,103006],{},"MUJOCO_GL=egl",[59,103008,103009],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,103012,204],{"id":203},[19,103014,103015],{},"MuJoCo 的基本执行流程:",[51,103017,103020],{"className":103018,"code":103019,"language":56,"meta":57},[54],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[59,103021,103019],{"__ignoreMap":57},[19,103023,103024,103026],{},[59,103025,102692],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,103028,103029,103031,103032,2139,103035,2139,103038,2139,103041,2139,103043,497],{},[59,103030,102702],{}," 存放仿真运行时状态，例如 ",[59,103033,103034],{},"data.time",[59,103036,103037],{},"data.qpos",[59,103039,103040],{},"data.qvel",[59,103042,2148],{},[59,103044,103045],{},"data.xpos",[339,103047,103049],{"id":103048},"xml-是什么","XML 是什么",[19,103051,103052],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[51,103054,103056],{"className":219,"code":103055,"language":221,"meta":57,"style":57},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n  \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\"\u002F>\n\u003C\u002Fbody>\n",[59,103057,103058,103080,103110],{"__ignoreMap":57},[79,103059,103060,103062,103064,103066,103068,103070,103073,103075,103078],{"class":81,"line":82},[79,103061,229],{"class":228},[79,103063,53794],{"class":232},[79,103065,236],{"class":85},[79,103067,239],{"class":228},[79,103069,55482],{"class":89},[79,103071,103072],{"class":85}," pos",[79,103074,239],{"class":228},[79,103076,103077],{"class":89},"\"0 0 1\"",[79,103079,53301],{"class":228},[79,103081,103082,103084,103087,103089,103091,103094,103096,103098,103100,103103,103105,103108],{"class":81,"line":167},[79,103083,54138],{"class":228},[79,103085,103086],{"class":232},"geom",[79,103088,236],{"class":85},[79,103090,239],{"class":228},[79,103092,103093],{"class":89},"\"box_geom\"",[79,103095,245],{"class":85},[79,103097,239],{"class":228},[79,103099,55482],{"class":89},[79,103101,103102],{"class":85}," size",[79,103104,239],{"class":228},[79,103106,103107],{"class":89},"\"0.1 0.1 0.1\"",[79,103109,261],{"class":228},[79,103111,103112,103114,103116],{"class":81,"line":178},[79,103113,53779],{"class":228},[79,103115,53794],{"class":232},[79,103117,53301],{"class":228},[19,103119,103120],{},"这段意思是：",[26,103122,103123,103129,103136],{},[29,103124,103125,103126,103128],{},"创建一个叫 ",[59,103127,55705],{}," 的刚体。",[29,103130,103131,103132,103135],{},"它初始放在 ",[59,103133,103134],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[29,103137,103138],{},"它里面有一个盒子形状的几何体。",[339,103140,103142],{"id":103141},"timestep-是什么","timestep 是什么",[19,103144,103145],{},"XML 里的：",[51,103147,103149],{"className":219,"code":103148,"language":221,"meta":57,"style":57},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[59,103150,103151],{"__ignoreMap":57},[79,103152,103153,103155,103157,103160,103162,103165,103168,103170,103173],{"class":81,"line":82},[79,103154,229],{"class":228},[79,103156,71154],{"class":232},[79,103158,103159],{"class":85}," timestep",[79,103161,239],{"class":228},[79,103163,103164],{"class":89},"\"0.01\"",[79,103166,103167],{"class":85}," gravity",[79,103169,239],{"class":228},[79,103171,103172],{"class":89},"\"0 0 -9.81\"",[79,103174,261],{"class":228},[19,103176,103177,103178,103181,103182,103184],{},"表示每调用一次 ",[59,103179,103180],{},"mj_step","，仿真时间前进 ",[59,103183,40981],{}," 秒。循环 100 次，大约就是 1 秒：",[51,103186,103189],{"className":103187,"code":103188,"language":56,"meta":57},[54],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[59,103190,103188],{"__ignoreMap":57},[339,103192,103194],{"id":103193},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,103196,103197],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[51,103199,103202],{"className":103200,"code":103201,"language":56,"meta":57},[54],"x y z qw qx qy qz\n",[59,103203,103201],{"__ignoreMap":57},[19,103205,103206,103207,103210,103211,103214],{},"表示一个自由刚体的位置和姿态。其中 ",[59,103208,103209],{},"x y z"," 是位置，",[59,103212,103213],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,103216,510],{"id":509},[19,103218,103219],{},"新建文件:",[51,103221,103223],{"className":73,"code":103222,"language":75,"meta":57,"style":57},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[59,103224,103225,103235,103242],{"__ignoreMap":57},[79,103226,103227,103230,103232],{"class":81,"line":82},[79,103228,103229],{"class":85},"mkdir",[79,103231,31230],{"class":96},[79,103233,103234],{"class":89}," mujoco_tutorial\n",[79,103236,103237,103240],{"class":81,"line":167},[79,103238,103239],{"class":96},"cd",[79,103241,103234],{"class":89},[79,103243,103244,103246],{"class":81,"line":178},[79,103245,1239],{"class":85},[79,103247,103248],{"class":89}," ch1_first_sim.py\n",[19,103250,103251],{},"写入:",[51,103253,103255],{"className":439,"code":103254,"language":441,"meta":57,"style":57},"import mujoco\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"first_sim\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n\n    \u003Cbody name=\"box\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"box_free\"\u002F>\n      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    print(\"nq:\", model.nq)\n    print(\"nv:\", model.nv)\n    print(\"nu:\", model.nu)\n    print(\"initial time:\", data.time)\n    print(\"initial qpos:\", data.qpos.copy())\n\n    for _ in range(100):\n        mujoco.mj_step(model, data)\n\n    print(\"final time:\", data.time)\n    print(\"final qpos:\", data.qpos.copy())\n\n\nif __name__ == \"__main__\":\n    main()\n",[59,103256,103257,103263,103267,103271,103279,103284,103288,103292,103296,103301,103305,103310,103315,103320,103324,103328,103332,103336,103340,103344,103356,103368,103376,103380,103392,103404,103416,103428,103440,103444,103461,103465,103469,103480,103491,103495,103499,103511],{"__ignoreMap":57},[79,103258,103259,103261],{"class":81,"line":82},[79,103260,520],{"class":448},[79,103262,523],{"class":228},[79,103264,103265],{"class":81,"line":167},[79,103266,542],{"emptyLinePlaceholder":541},[79,103268,103269],{"class":81,"line":178},[79,103270,542],{"emptyLinePlaceholder":541},[79,103272,103273,103275,103277],{"class":81,"line":545},[79,103274,553],{"class":96},[79,103276,556],{"class":448},[79,103278,559],{"class":89},[79,103280,103281],{"class":81,"line":550},[79,103282,103283],{"class":89},"\u003Cmujoco model=\"first_sim\">\n",[79,103285,103286],{"class":81,"line":562},[79,103287,571],{"class":89},[79,103289,103290],{"class":81,"line":568},[79,103291,542],{"emptyLinePlaceholder":541},[79,103293,103294],{"class":81,"line":574},[79,103295,582],{"class":89},[79,103297,103298],{"class":81,"line":579},[79,103299,103300],{"class":89},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[79,103302,103303],{"class":81,"line":585},[79,103304,542],{"emptyLinePlaceholder":541},[79,103306,103307],{"class":81,"line":591},[79,103308,103309],{"class":89},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[79,103311,103312],{"class":81,"line":596},[79,103313,103314],{"class":89},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[79,103316,103317],{"class":81,"line":602},[79,103318,103319],{"class":89},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[79,103321,103322],{"class":81,"line":608},[79,103323,646],{"class":89},[79,103325,103326],{"class":81,"line":614},[79,103327,652],{"class":89},[79,103329,103330],{"class":81,"line":619},[79,103331,681],{"class":89},[79,103333,103334],{"class":81,"line":625},[79,103335,687],{"class":89},[79,103337,103338],{"class":81,"line":631},[79,103339,542],{"emptyLinePlaceholder":541},[79,103341,103342],{"class":81,"line":637},[79,103343,542],{"emptyLinePlaceholder":541},[79,103345,103346,103348,103350,103352,103354],{"class":81,"line":643},[79,103347,703],{"class":448},[79,103349,826],{"class":85},[79,103351,829],{"class":228},[79,103353,832],{"class":96},[79,103355,745],{"class":228},[79,103357,103358,103360,103362,103364,103366],{"class":81,"line":649},[79,103359,840],{"class":228},[79,103361,239],{"class":448},[79,103363,845],{"class":228},[79,103365,553],{"class":96},[79,103367,850],{"class":228},[79,103369,103370,103372,103374],{"class":81,"line":655},[79,103371,856],{"class":228},[79,103373,239],{"class":448},[79,103375,861],{"class":228},[79,103377,103378],{"class":81,"line":660},[79,103379,542],{"emptyLinePlaceholder":541},[79,103381,103382,103384,103386,103389],{"class":81,"line":666},[79,103383,1161],{"class":96},[79,103385,455],{"class":228},[79,103387,103388],{"class":89},"\"nq:\"",[79,103390,103391],{"class":228},", model.nq)\n",[79,103393,103394,103396,103398,103401],{"class":81,"line":672},[79,103395,1161],{"class":96},[79,103397,455],{"class":228},[79,103399,103400],{"class":89},"\"nv:\"",[79,103402,103403],{"class":228},", model.nv)\n",[79,103405,103406,103408,103410,103413],{"class":81,"line":678},[79,103407,1161],{"class":96},[79,103409,455],{"class":228},[79,103411,103412],{"class":89},"\"nu:\"",[79,103414,103415],{"class":228},", model.nu)\n",[79,103417,103418,103420,103422,103425],{"class":81,"line":684},[79,103419,1161],{"class":96},[79,103421,455],{"class":228},[79,103423,103424],{"class":89},"\"initial time:\"",[79,103426,103427],{"class":228},", data.time)\n",[79,103429,103430,103432,103434,103437],{"class":81,"line":690},[79,103431,1161],{"class":96},[79,103433,455],{"class":228},[79,103435,103436],{"class":89},"\"initial qpos:\"",[79,103438,103439],{"class":228},", data.qpos.copy())\n",[79,103441,103442],{"class":81,"line":695},[79,103443,542],{"emptyLinePlaceholder":541},[79,103445,103446,103448,103451,103453,103455,103457,103459],{"class":81,"line":700},[79,103447,915],{"class":448},[79,103449,103450],{"class":228}," _ ",[79,103452,921],{"class":448},[79,103454,924],{"class":96},[79,103456,455],{"class":228},[79,103458,2555],{"class":96},[79,103460,932],{"class":228},[79,103462,103463],{"class":81,"line":712},[79,103464,1050],{"class":228},[79,103466,103467],{"class":81,"line":721},[79,103468,542],{"emptyLinePlaceholder":541},[79,103470,103471,103473,103475,103478],{"class":81,"line":726},[79,103472,1161],{"class":96},[79,103474,455],{"class":228},[79,103476,103477],{"class":89},"\"final time:\"",[79,103479,103427],{"class":228},[79,103481,103482,103484,103486,103489],{"class":81,"line":731},[79,103483,1161],{"class":96},[79,103485,455],{"class":228},[79,103487,103488],{"class":89},"\"final qpos:\"",[79,103490,103439],{"class":228},[79,103492,103493],{"class":81,"line":748},[79,103494,542],{"emptyLinePlaceholder":541},[79,103496,103497],{"class":81,"line":765},[79,103498,542],{"emptyLinePlaceholder":541},[79,103500,103501,103503,103505,103507,103509],{"class":81,"line":780},[79,103502,1210],{"class":448},[79,103504,1213],{"class":96},[79,103506,1100],{"class":448},[79,103508,1218],{"class":89},[79,103510,745],{"class":228},[79,103512,103513],{"class":81,"line":811},[79,103514,1226],{"class":228},[339,103516,1259],{"id":1259},[19,103518,103519],{},"导入库：",[51,103521,103523],{"className":439,"code":103522,"language":441,"meta":57,"style":57},"import mujoco\n",[59,103524,103525],{"__ignoreMap":57},[79,103526,103527,103529],{"class":81,"line":82},[79,103528,520],{"class":448},[79,103530,523],{"class":228},[19,103532,103533],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,103535,103536],{},"定义 XML：",[51,103538,103540],{"className":439,"code":103539,"language":441,"meta":57,"style":57},"XML = \"\"\"\n...\n\"\"\"\n",[59,103541,103542,103550,103555],{"__ignoreMap":57},[79,103543,103544,103546,103548],{"class":81,"line":82},[79,103545,553],{"class":96},[79,103547,556],{"class":448},[79,103549,559],{"class":89},[79,103551,103552],{"class":81,"line":167},[79,103553,103554],{"class":89},"...\n",[79,103556,103557],{"class":81,"line":178},[79,103558,687],{"class":89},[19,103560,103561,103562,103565],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[59,103563,103564],{},"freejoint"," 的方块。",[19,103567,103568],{},"编译模型：",[51,103570,103572],{"className":439,"code":103571,"language":441,"meta":57,"style":57},"model = mujoco.MjModel.from_xml_string(XML)\n",[59,103573,103574],{"__ignoreMap":57},[79,103575,103576,103579,103581,103583,103585],{"class":81,"line":82},[79,103577,103578],{"class":228},"model ",[79,103580,239],{"class":448},[79,103582,845],{"class":228},[79,103584,553],{"class":96},[79,103586,850],{"class":228},[19,103588,103589],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,103591,103592],{},"创建数据：",[51,103594,103596],{"className":439,"code":103595,"language":441,"meta":57,"style":57},"data = mujoco.MjData(model)\n",[59,103597,103598],{"__ignoreMap":57},[79,103599,103600,103603,103605],{"class":81,"line":82},[79,103601,103602],{"class":228},"data ",[79,103604,239],{"class":448},[79,103606,861],{"class":228},[19,103608,103609,103611,103612,103614],{},[59,103610,35398],{}," 会保存仿真当前状态。刚创建时，时间是 ",[59,103613,759],{},"，方块还在初始位置。",[19,103616,103617],{},"推进仿真：",[51,103619,103621],{"className":439,"code":103620,"language":441,"meta":57,"style":57},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[59,103622,103623,103639],{"__ignoreMap":57},[79,103624,103625,103627,103629,103631,103633,103635,103637],{"class":81,"line":82},[79,103626,1638],{"class":448},[79,103628,103450],{"class":228},[79,103630,921],{"class":448},[79,103632,924],{"class":96},[79,103634,455],{"class":228},[79,103636,2555],{"class":96},[79,103638,932],{"class":228},[79,103640,103641],{"class":81,"line":167},[79,103642,103643],{"class":228},"    mujoco.mj_step(model, data)\n",[19,103645,103646,103647,103649],{},"每次 ",[59,103648,103180],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[339,103651,1407],{"id":1407},[19,103653,103654],{},"下面把完整代码按新手视角拆开讲。",[51,103656,103657],{"className":439,"code":103522,"language":441,"meta":57,"style":57},[59,103658,103659],{"__ignoreMap":57},[79,103660,103661,103663],{"class":81,"line":82},[79,103662,520],{"class":448},[79,103664,523],{"class":228},[19,103666,103667,103669,103670,2139,103672,2139,103674,497],{},[59,103668,520],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[59,103671,102658],{},[59,103673,102663],{},[59,103675,103676],{},"mujoco.mj_step",[51,103678,103679],{"className":439,"code":103539,"language":441,"meta":57,"style":57},[59,103680,103681,103689,103693],{"__ignoreMap":57},[79,103682,103683,103685,103687],{"class":81,"line":82},[79,103684,553],{"class":96},[79,103686,556],{"class":448},[79,103688,559],{"class":89},[79,103690,103691],{"class":81,"line":167},[79,103692,103554],{"class":89},[79,103694,103695],{"class":81,"line":178},[79,103696,687],{"class":89},[19,103698,103699,103701,103702,103705],{},[59,103700,553],{}," 是一个变量名。右边的三引号 ",[59,103703,103704],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[51,103707,103708],{"className":219,"code":103283,"language":221,"meta":57,"style":57},[59,103709,103710],{"__ignoreMap":57},[79,103711,103712,103714,103716,103719,103721,103724],{"class":81,"line":82},[79,103713,229],{"class":228},[79,103715,102990],{"class":232},[79,103717,103718],{"class":85}," model",[79,103720,239],{"class":228},[79,103722,103723],{"class":89},"\"first_sim\"",[79,103725,53301],{"class":228},[19,103727,103728,103729,103732,103733,497],{},"这是 XML 的根标签。",[59,103730,103731],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[59,103734,103735],{},"first_sim",[51,103737,103738],{"className":219,"code":103148,"language":221,"meta":57,"style":57},[59,103739,103740],{"__ignoreMap":57},[79,103741,103742,103744,103746,103748,103750,103752,103754,103756,103758],{"class":81,"line":82},[79,103743,229],{"class":228},[79,103745,71154],{"class":232},[79,103747,103159],{"class":85},[79,103749,239],{"class":228},[79,103751,103164],{"class":89},[79,103753,103167],{"class":85},[79,103755,239],{"class":228},[79,103757,103172],{"class":89},[79,103759,261],{"class":228},[19,103761,103762,103764,103765,103768,103769,103772],{},[59,103763,71154],{}," 用来设置仿真参数。",[59,103766,103767],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[59,103770,103771],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[51,103774,103776],{"className":219,"code":103775,"language":221,"meta":57,"style":57},"\u003Cworldbody>\n",[59,103777,103778],{"__ignoreMap":57},[79,103779,103780,103782,103785],{"class":81,"line":82},[79,103781,229],{"class":228},[79,103783,103784],{"class":232},"worldbody",[79,103786,53301],{"class":228},[19,103788,103789,103791],{},[59,103790,103784],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[51,103793,103795],{"className":219,"code":103794,"language":221,"meta":57,"style":57},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[59,103796,103797],{"__ignoreMap":57},[79,103798,103799,103801,103803,103805,103807,103810,103812,103814,103817,103819,103821,103824,103826,103828,103831],{"class":81,"line":82},[79,103800,229],{"class":228},[79,103802,103086],{"class":232},[79,103804,236],{"class":85},[79,103806,239],{"class":228},[79,103808,103809],{"class":89},"\"floor\"",[79,103811,245],{"class":85},[79,103813,239],{"class":228},[79,103815,103816],{"class":89},"\"plane\"",[79,103818,103102],{"class":85},[79,103820,239],{"class":228},[79,103822,103823],{"class":89},"\"2 2 0.1\"",[79,103825,80755],{"class":85},[79,103827,239],{"class":228},[79,103829,103830],{"class":89},"\"0.8 0.8 0.8 1\"",[79,103832,261],{"class":228},[19,103834,103835,103836,103838,103839,103842,103843,103846,103847,103849],{},"这行创建地面。",[59,103837,103086],{}," 是几何体。",[59,103840,103841],{},"name=\"floor\""," 是名字。",[59,103844,103845],{},"type=\"plane\""," 表示平面。",[59,103848,57099],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[51,103851,103853],{"className":219,"code":103852,"language":221,"meta":57,"style":57},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[59,103854,103855],{"__ignoreMap":57},[79,103856,103857,103859,103861,103863,103865,103867,103869,103871,103873],{"class":81,"line":82},[79,103858,229],{"class":228},[79,103860,53794],{"class":232},[79,103862,236],{"class":85},[79,103864,239],{"class":228},[79,103866,55482],{"class":89},[79,103868,103072],{"class":85},[79,103870,239],{"class":228},[79,103872,103077],{"class":89},[79,103874,53301],{"class":228},[19,103876,103877,103878,497,103880,103883,103884,103886],{},"这行创建一个刚体，名字叫 ",[59,103879,55705],{},[59,103881,103882],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[59,103885,103134],{},"，也就是离地面 1 米高。",[51,103888,103890],{"className":219,"code":103889,"language":221,"meta":57,"style":57},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[59,103891,103892],{"__ignoreMap":57},[79,103893,103894,103896,103898,103900,103902,103905],{"class":81,"line":82},[79,103895,229],{"class":228},[79,103897,103564],{"class":232},[79,103899,236],{"class":85},[79,103901,239],{"class":228},[79,103903,103904],{"class":89},"\"box_free\"",[79,103906,261],{"class":228},[19,103908,103909,103910,103912],{},"这行很重要。",[59,103911,103564],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[51,103914,103916],{"className":219,"code":103915,"language":221,"meta":57,"style":57},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[59,103917,103918],{"__ignoreMap":57},[79,103919,103920,103922,103924,103926,103928,103930,103932,103934,103936,103938,103940,103942,103945,103947,103949,103951,103953,103956],{"class":81,"line":82},[79,103921,229],{"class":228},[79,103923,103086],{"class":232},[79,103925,236],{"class":85},[79,103927,239],{"class":228},[79,103929,103093],{"class":89},[79,103931,245],{"class":85},[79,103933,239],{"class":228},[79,103935,55482],{"class":89},[79,103937,103102],{"class":85},[79,103939,239],{"class":228},[79,103941,103107],{"class":89},[79,103943,103944],{"class":85}," mass",[79,103946,239],{"class":228},[79,103948,5752],{"class":89},[79,103950,80755],{"class":85},[79,103952,239],{"class":228},[79,103954,103955],{"class":89},"\"1 0 0 1\"",[79,103957,261],{"class":228},[19,103959,103960,103961,103964,103965,103968,103969,103972,103973,103976],{},"这行给 box body 添加一个盒子形状。",[59,103962,103963],{},"type=\"box\""," 表示形状是盒子。",[59,103966,103967],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[59,103970,103971],{},"mass=\"1\""," 表示质量是 1。",[59,103974,103975],{},"rgba=\"1 0 0 1\""," 表示红色。",[51,103978,103980],{"className":439,"code":103979,"language":441,"meta":57,"style":57},"def main() -> None:\n",[59,103981,103982],{"__ignoreMap":57},[79,103983,103984,103986,103988,103990,103992],{"class":81,"line":82},[79,103985,703],{"class":448},[79,103987,826],{"class":85},[79,103989,829],{"class":228},[79,103991,832],{"class":96},[79,103993,745],{"class":228},[19,103995,103996,103998,103999,104002,104003,104006],{},[59,103997,703],{}," 用来定义函数。这里定义了一个叫 ",[59,104000,104001],{},"main"," 的函数。",[59,104004,104005],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[51,104008,104009],{"className":439,"code":103571,"language":441,"meta":57,"style":57},[59,104010,104011],{"__ignoreMap":57},[79,104012,104013,104015,104017,104019,104021],{"class":81,"line":82},[79,104014,103578],{"class":228},[79,104016,239],{"class":448},[79,104018,845],{"class":228},[79,104020,553],{"class":96},[79,104022,850],{"class":228},[19,104024,104025,104026,104029],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[59,104027,104028],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[51,104031,104032],{"className":439,"code":103595,"language":441,"meta":57,"style":57},[59,104033,104034],{"__ignoreMap":57},[79,104035,104036,104038,104040],{"class":81,"line":82},[79,104037,103602],{"class":228},[79,104039,239],{"class":448},[79,104041,861],{"class":228},[19,104043,104044,104045,104047,104048,104050],{},"这行创建仿真数据。",[59,104046,35398],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[59,104049,35398],{}," 都会变化。",[51,104052,104054],{"className":439,"code":104053,"language":441,"meta":57,"style":57},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[59,104055,104056,104066,104076],{"__ignoreMap":57},[79,104057,104058,104060,104062,104064],{"class":81,"line":82},[79,104059,1889],{"class":96},[79,104061,455],{"class":228},[79,104063,103388],{"class":89},[79,104065,103391],{"class":228},[79,104067,104068,104070,104072,104074],{"class":81,"line":167},[79,104069,1889],{"class":96},[79,104071,455],{"class":228},[79,104073,103400],{"class":89},[79,104075,103403],{"class":228},[79,104077,104078,104080,104082,104084],{"class":81,"line":178},[79,104079,1889],{"class":96},[79,104081,455],{"class":228},[79,104083,103412],{"class":89},[79,104085,103415],{"class":228},[19,104087,104088,104090,104091,104094,104095,104098,104099,104102,104103,104106],{},[59,104089,1889],{}," 用来输出信息。",[59,104092,104093],{},"model.nq"," 是位置变量数量，",[59,104096,104097],{},"model.nv"," 是速度变量数量，",[59,104100,104101],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[59,104104,104105],{},"nu"," 是 0。",[51,104108,104110],{"className":439,"code":104109,"language":441,"meta":57,"style":57},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[59,104111,104112,104122],{"__ignoreMap":57},[79,104113,104114,104116,104118,104120],{"class":81,"line":82},[79,104115,1889],{"class":96},[79,104117,455],{"class":228},[79,104119,103424],{"class":89},[79,104121,103427],{"class":228},[79,104123,104124,104126,104128,104130],{"class":81,"line":167},[79,104125,1889],{"class":96},[79,104127,455],{"class":228},[79,104129,103436],{"class":89},[79,104131,103439],{"class":228},[19,104133,104134,104135,104137,104138,104140,104141,104144],{},"这里打印初始时间和初始位置。",[59,104136,103034],{}," 一开始是 0。",[59,104139,103037],{}," 是位置数组。",[59,104142,104143],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[51,104146,104147],{"className":439,"code":103620,"language":441,"meta":57,"style":57},[59,104148,104149,104165],{"__ignoreMap":57},[79,104150,104151,104153,104155,104157,104159,104161,104163],{"class":81,"line":82},[79,104152,1638],{"class":448},[79,104154,103450],{"class":228},[79,104156,921],{"class":448},[79,104158,924],{"class":96},[79,104160,455],{"class":228},[79,104162,2555],{"class":96},[79,104164,932],{"class":228},[79,104166,104167],{"class":81,"line":167},[79,104168,103643],{"class":228},[19,104170,104171,104173,104174,104177,104178,104180,104181,104183],{},[59,104172,1638],{}," 是循环。",[59,104175,104176],{},"range(100)"," 表示循环 100 次。",[59,104179,3231],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[59,104182,103180],{},"，仿真就前进一步。",[51,104185,104187],{"className":439,"code":104186,"language":441,"meta":57,"style":57},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[59,104188,104189,104199],{"__ignoreMap":57},[79,104190,104191,104193,104195,104197],{"class":81,"line":82},[79,104192,1889],{"class":96},[79,104194,455],{"class":228},[79,104196,103477],{"class":89},[79,104198,103427],{"class":228},[79,104200,104201,104203,104205,104207],{"class":81,"line":167},[79,104202,1889],{"class":96},[79,104204,455],{"class":228},[79,104206,103488],{"class":89},[79,104208,103439],{"class":228},[19,104210,104211],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[51,104213,104215],{"className":439,"code":104214,"language":441,"meta":57,"style":57},"if __name__ == \"__main__\":\n    main()\n",[59,104216,104217,104229],{"__ignoreMap":57},[79,104218,104219,104221,104223,104225,104227],{"class":81,"line":82},[79,104220,1210],{"class":448},[79,104222,1213],{"class":96},[79,104224,1100],{"class":448},[79,104226,1218],{"class":89},[79,104228,745],{"class":228},[79,104230,104231],{"class":81,"line":167},[79,104232,1226],{"class":228},[19,104234,104235,104236,104239,104240,497],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[59,104237,104238],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[59,104241,104238],{},[19,104243,104244],{},"运行:",[51,104246,104248],{"className":73,"code":104247,"language":75,"meta":57,"style":57},"python ch1_first_sim.py\n",[59,104249,104250],{"__ignoreMap":57},[79,104251,104252,104254],{"class":81,"line":82},[79,104253,441],{"class":85},[79,104255,103248],{"class":89},[14,104257,1934],{"id":1933},[19,104259,104260],{},"你应该看到类似输出:",[51,104262,104265],{"className":104263,"code":104264,"language":56,"meta":57},[54],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[59,104266,104264],{"__ignoreMap":57},[19,104268,104269,104271,104272,104275,104276,497],{},[59,104270,103564],{}," 有 7 个位置变量: ",[59,104273,104274],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[59,104277,104278],{},"vx vy vz wx wy wz",[19,104280,104281,104282,104285],{},"你还会看到 ",[59,104283,104284],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,104287,1987],{"id":1986},[19,104289,104290],{},"确认版本:",[51,104292,104293],{"className":73,"code":102914,"language":75,"meta":57,"style":57},[59,104294,104295],{"__ignoreMap":57},[79,104296,104297,104299,104301],{"class":81,"line":82},[79,104298,441],{"class":85},[79,104300,32371],{"class":96},[79,104302,102925],{"class":89},[19,104304,104305],{},"确认导入的是官方 bindings:",[51,104307,104309],{"className":73,"code":104308,"language":75,"meta":57,"style":57},"python -c \"import mujoco; print(mujoco)\"\n",[59,104310,104311],{"__ignoreMap":57},[79,104312,104313,104315,104317],{"class":81,"line":82},[79,104314,441],{"class":85},[79,104316,32371],{"class":96},[79,104318,104319],{"class":89}," \"import mujoco; print(mujoco)\"\n",[19,104321,104322],{},"运行程序:",[51,104324,104325],{"className":73,"code":104247,"language":75,"meta":57,"style":57},[59,104326,104327],{"__ignoreMap":57},[79,104328,104329,104331],{"class":81,"line":82},[79,104330,441],{"class":85},[79,104332,103248],{"class":89},[19,104334,2037,104335,104338,104339,497],{},[59,104336,104337],{},"final time"," 是否约等于 ",[59,104340,458],{},[19,104342,104343],{},"再做几个小实验：",[26,104345,104346,104356,104364,104377],{},[29,104347,104348,104349,104351,104352,104355],{},"把 ",[59,104350,103882],{}," 改成 ",[59,104353,104354],{},"pos=\"0 0 2\"","，观察初始高度变化。",[29,104357,104348,104358,104351,104360,104363],{},[59,104359,103771],{},[59,104361,104362],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[29,104365,104348,104366,104351,104368,104371,104372,104374,104375,497],{},[59,104367,103767],{},[59,104369,104370],{},"timestep=\"0.005\"","，观察 100 步后的 ",[59,104373,104337],{}," 是否变成约 ",[59,104376,1751],{},[29,104378,104379,104380,104383],{},"删除 ",[59,104381,104382],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,104385,104386],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,104388,2031],{"id":2030},[339,104390,104392],{"id":104391},"modulenotfounderror-no-module-named-mujoco",[59,104393,104394],{},"ModuleNotFoundError: No module named 'mujoco'",[19,104396,104397],{},"解决:",[51,104399,104401],{"className":73,"code":104400,"language":75,"meta":57,"style":57},"pip install \"mujoco>=2.3\"\n",[59,104402,104403],{"__ignoreMap":57},[79,104404,104405,104407,104409],{"class":81,"line":82},[79,104406,125],{"class":85},[79,104408,93],{"class":89},[79,104410,104411],{"class":89}," \"mujoco>=2.3\"\n",[339,104413,104415],{"id":104414},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,104417,104418],{},"先安装系统依赖:",[51,104420,104422],{"className":73,"code":104421,"language":75,"meta":57,"style":57},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[59,104423,104424],{"__ignoreMap":57},[79,104425,104426,104428,104430,104432,104434,104436,104438,104441,104443,104446,104448],{"class":81,"line":82},[79,104427,86],{"class":85},[79,104429,90],{"class":89},[79,104431,93],{"class":89},[79,104433,97],{"class":96},[79,104435,106],{"class":89},[79,104437,109],{"class":89},[79,104439,104440],{"class":89}," glfw",[79,104442,102812],{"class":89},[79,104444,104445],{"class":89}," libX11",[79,104447,102825],{"class":89},[79,104449,104450],{"class":89}," libXrandr\n",[339,104452,104454],{"id":104453},"xml-解析失败","XML 解析失败",[19,104456,104457],{},"检查:",[26,104459,104460,104463,104466,104472],{},[29,104461,104462],{},"标签是否闭合",[29,104464,104465],{},"属性是否带引号",[29,104467,104468,104469],{},"根节点是否是 ",[59,104470,104471],{},"\u003Cmujoco>",[29,104473,104474,104476,104477,104480],{},[59,104475,53794],{}," 是否放在 ",[59,104478,104479],{},"\u003Cworldbody>"," 内部",[339,104482,104484,104486,104487],{"id":104483},"final-time-不是严格等于-10",[59,104485,104337],{}," 不是严格等于 ",[59,104488,458],{},[19,104490,104491],{},"这通常不是错误。浮点数计算可能得到：",[51,104493,104496],{"className":104494,"code":104495,"language":56,"meta":57},[54],"1.0000000000000007\n",[59,104497,104495],{"__ignoreMap":57},[19,104499,104500,104501,104503],{},"只要接近 ",[59,104502,458],{}," 就正常。",[339,104505,104506],{"id":104506},"方块没有掉下来",[19,104508,104509],{},"检查：",[26,104511,104512,104518,104524,104529],{},[29,104513,104514,104515],{},"方块 body 里是否有 ",[59,104516,104517],{},"\u003Cfreejoint\u002F>",[29,104519,104520,104521],{},"重力是否是 ",[59,104522,104523],{},"0 0 -9.81",[29,104525,104526,104527],{},"是否真的调用了 ",[59,104528,102668],{},[29,104530,104531,104532,104534,104535],{},"你看的是否是 ",[59,104533,104284],{},"，不是 ",[59,104536,104537],{},"initial qpos",[14,104539,2125],{"id":2124},[19,104541,104542],{},"本章你已经完成了 MuJoCo 的最小闭环：",[51,104544,104547],{"className":104545,"code":104546,"language":56,"meta":57},[54],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[59,104548,104546],{"__ignoreMap":57},[19,104550,104551],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[2159,104553,104554],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":57,"searchDepth":167,"depth":167,"links":104556},[104557,104558,104559,104564,104568,104569,104570,104578],{"id":16,"depth":167,"text":17},{"id":66,"depth":167,"text":67},{"id":203,"depth":167,"text":204,"children":104560},[104561,104562,104563],{"id":103048,"depth":178,"text":103049},{"id":103141,"depth":178,"text":103142},{"id":103193,"depth":178,"text":103194},{"id":509,"depth":167,"text":510,"children":104565},[104566,104567],{"id":1259,"depth":178,"text":1259},{"id":1407,"depth":178,"text":1407},{"id":1933,"depth":167,"text":1934},{"id":1986,"depth":167,"text":1987},{"id":2030,"depth":167,"text":2031,"children":104571},[104572,104573,104574,104575,104577],{"id":104391,"depth":178,"text":104394},{"id":104414,"depth":178,"text":104415},{"id":104453,"depth":178,"text":104454},{"id":104483,"depth":178,"text":104576},"final time 不是严格等于 1.0",{"id":104506,"depth":178,"text":104506},{"id":2124,"depth":167,"text":2125},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":102623,"description":57},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":104585,"title":104586,"body":104587,"description":57,"extension":2186,"meta":106234,"navigation":541,"path":106235,"seo":106236,"stem":106237,"__hash__":106238},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":104588,"toc":106210},[104589,104592,104594,104597,104600,104617,104711,104714,104720,104722,104724,104748,104750,104764,104766,104807,104809,104822,104824,104827,104875,104886,104889,104892,104898,104911,104978,104981,105000,105003,105006,105012,105014,105023,105026,105030,105039,105120,105129,105133,105139,105153,105163,105165,105495,105497,105509,105511,105522,105524,105527,105545,105548,105551,105569,105580,105583,105598,105608,105610,105631,105648,105668,105674,105714,105730,105746,105752,105755,105779,105795,105800,105830,105846,105871,105874,105889,105898,105913,105922,105937,105944,105946,105955,105968,105975,105978,106017,106024,106026,106078,106080,106086,106089,106096,106103,106106,106108,106126,106129,106132,106166,106178,106180,106183,106205,106208],[10,104590,104586],{"id":104591},"_2xml-与-mjcf-物理建模基础",[14,104593,17],{"id":16},[19,104595,104596],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,104598,104599],{},"本章结束后，你应该能看懂一个简单模型里：",[26,104601,104602,104605,104608,104611,104614],{},[29,104603,104604],{},"地面在哪里。",[29,104606,104607],{},"物体初始位置在哪里。",[29,104609,104610],{},"几何体是什么形状。",[29,104612,104613],{},"哪些 body 可以自由运动。",[29,104615,104616],{},"如何用名字在 Python 里找到 XML 中的对象。",[347,104618,104619,104629],{},[350,104620,104621],{},[353,104622,104623,104626],{},[356,104624,104625],{"align":358},"标签",[356,104627,104628],{"align":358},"作用",[367,104630,104631,104640,104650,104659,104669,104679,104691,104701],{},[353,104632,104633,104637],{},[372,104634,104635],{"align":358},[59,104636,104471],{},[372,104638,104639],{"align":358},"根节点",[353,104641,104642,104647],{},[372,104643,104644],{"align":358},[59,104645,104646],{},"\u003Coption>",[372,104648,104649],{"align":358},"仿真参数",[353,104651,104652,104656],{},[372,104653,104654],{"align":358},[59,104655,104479],{},[372,104657,104658],{"align":358},"世界中的物体",[353,104660,104661,104666],{},[372,104662,104663],{"align":358},[59,104664,104665],{},"\u003Cbody>",[372,104667,104668],{"align":358},"刚体",[353,104670,104671,104676],{},[372,104672,104673],{"align":358},[59,104674,104675],{},"\u003Cgeom>",[372,104677,104678],{"align":358},"几何体、碰撞体、可视体",[353,104680,104681,104689],{},[372,104682,104683,26998,104686],{"align":358},[59,104684,104685],{},"\u003Cjoint>",[59,104687,104688],{},"\u003Cfreejoint>",[372,104690,359],{"align":358},[353,104692,104693,104698],{},[372,104694,104695],{"align":358},[59,104696,104697],{},"\u003Csite>",[372,104699,104700],{"align":358},"标记点",[353,104702,104703,104708],{},[372,104704,104705],{"align":358},[59,104706,104707],{},"\u003Cactuator>",[372,104709,104710],{"align":358},"控制器",[19,104712,104713],{},"初学时可以先记住：",[51,104715,104718],{"className":104716,"code":104717,"language":56,"meta":57},[54],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[59,104719,104717],{"__ignoreMap":57},[14,104721,67],{"id":66},[19,104723,70],{},[51,104725,104727],{"className":73,"code":104726,"language":75,"meta":57,"style":57},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[59,104728,104729],{"__ignoreMap":57},[79,104730,104731,104733,104735,104737,104739,104741,104743,104745],{"class":81,"line":82},[79,104732,86],{"class":85},[79,104734,90],{"class":89},[79,104736,93],{"class":89},[79,104738,97],{"class":96},[79,104740,106],{"class":89},[79,104742,109],{"class":89},[79,104744,104440],{"class":89},[79,104746,104747],{"class":89}," glfw-devel\n",[19,104749,115],{},[51,104751,104752],{"className":73,"code":118,"language":75,"meta":57,"style":57},[59,104753,104754],{"__ignoreMap":57},[79,104755,104756,104758,104760,104762],{"class":81,"line":82},[79,104757,125],{"class":85},[79,104759,93],{"class":89},[79,104761,130],{"class":89},[79,104763,133],{"class":89},[19,104765,136],{},[51,104767,104769],{"className":73,"code":104768,"language":75,"meta":57,"style":57},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[59,104770,104771,104788,104797],{"__ignoreMap":57},[79,104772,104773,104775,104777,104779,104782,104784,104786],{"class":81,"line":82},[79,104774,146],{"class":85},[79,104776,149],{"class":89},[79,104778,152],{"class":96},[79,104780,104781],{"class":89}," mujoco-xml",[79,104783,158],{"class":89},[79,104785,161],{"class":96},[79,104787,164],{"class":96},[79,104789,104790,104792,104794],{"class":81,"line":167},[79,104791,146],{"class":85},[79,104793,172],{"class":89},[79,104795,104796],{"class":89}," mujoco-xml\n",[79,104798,104799,104801,104803,104805],{"class":81,"line":178},[79,104800,125],{"class":85},[79,104802,93],{"class":89},[79,104804,130],{"class":89},[79,104806,133],{"class":89},[19,104808,189],{},[26,104810,104811,104814,104819],{},[29,104812,104813],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[29,104815,104816,104817,497],{},"本章使用基础标签，适用于 ",[59,104818,102996],{},[29,104820,104821],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,104823,204],{"id":203},[19,104825,104826],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[51,104828,104830],{"className":219,"code":104829,"language":221,"meta":57,"style":57},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[59,104831,104832,104846,104854,104859,104867],{"__ignoreMap":57},[79,104833,104834,104836,104838,104840,104842,104844],{"class":81,"line":82},[79,104835,229],{"class":228},[79,104837,102990],{"class":232},[79,104839,103718],{"class":85},[79,104841,239],{"class":228},[79,104843,64667],{"class":89},[79,104845,53301],{"class":228},[79,104847,104848,104850,104852],{"class":81,"line":167},[79,104849,54138],{"class":228},[79,104851,103784],{"class":232},[79,104853,53301],{"class":228},[79,104855,104856],{"class":81,"line":178},[79,104857,104858],{"class":228},"    ...\n",[79,104860,104861,104863,104865],{"class":81,"line":545},[79,104862,54410],{"class":228},[79,104864,103784],{"class":232},[79,104866,53301],{"class":228},[79,104868,104869,104871,104873],{"class":81,"line":550},[79,104870,53779],{"class":228},[79,104872,102990],{"class":232},[79,104874,53301],{"class":228},[19,104876,104877,104879,104880,104882,104883,104885],{},[59,104878,53794],{}," 表示刚体。",[59,104881,103086],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[59,104884,233],{}," 表示刚体相对父刚体如何运动。",[339,104887,104888],{"id":104888},"层级结构非常重要",[19,104890,104891],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[51,104893,104896],{"className":104894,"code":104895,"language":56,"meta":57},[54],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[59,104897,104895],{"__ignoreMap":57},[19,104899,104900,1748,104903,104906,104907,104910],{},[59,104901,104902],{},"red_box_geom",[59,104904,104905],{},"box_center"," 都属于 ",[59,104908,104909],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[51,104912,104914],{"className":219,"code":104913,"language":221,"meta":57,"style":57},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n  \u003Cfreejoint name=\"box_free\"\u002F>\n  \u003Cgeom type=\"box\" size=\"0.1 0.1 0.1\"\u002F>\n\u003C\u002Fbody>\n",[59,104915,104916,104936,104950,104970],{"__ignoreMap":57},[79,104917,104918,104920,104922,104924,104926,104928,104930,104932,104934],{"class":81,"line":82},[79,104919,229],{"class":228},[79,104921,53794],{"class":232},[79,104923,236],{"class":85},[79,104925,239],{"class":228},[79,104927,55482],{"class":89},[79,104929,103072],{"class":85},[79,104931,239],{"class":228},[79,104933,103077],{"class":89},[79,104935,53301],{"class":228},[79,104937,104938,104940,104942,104944,104946,104948],{"class":81,"line":167},[79,104939,54138],{"class":228},[79,104941,103564],{"class":232},[79,104943,236],{"class":85},[79,104945,239],{"class":228},[79,104947,103904],{"class":89},[79,104949,261],{"class":228},[79,104951,104952,104954,104956,104958,104960,104962,104964,104966,104968],{"class":81,"line":178},[79,104953,54138],{"class":228},[79,104955,103086],{"class":232},[79,104957,245],{"class":85},[79,104959,239],{"class":228},[79,104961,55482],{"class":89},[79,104963,103102],{"class":85},[79,104965,239],{"class":228},[79,104967,103107],{"class":89},[79,104969,261],{"class":228},[79,104971,104972,104974,104976],{"class":81,"line":545},[79,104973,53779],{"class":228},[79,104975,53794],{"class":232},[79,104977,53301],{"class":228},[19,104979,104980],{},"含义:",[26,104982,104983,104989,104994,104997],{},[29,104984,104985,104986,104988],{},"创建名为 ",[59,104987,55705],{}," 的刚体",[29,104990,104991,104992],{},"初始位置在世界坐标 ",[59,104993,103134],{},[29,104995,104996],{},"它有一个自由关节",[29,104998,104999],{},"它有一个盒子几何体",[339,105001,105002],{"id":105002},"坐标怎么理解",[19,105004,105005],{},"MuJoCo 默认使用三维坐标：",[51,105007,105010],{"className":105008,"code":105009,"language":56,"meta":57},[54],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[59,105011,105009],{"__ignoreMap":57},[19,105013,16666],{},[51,105015,105017],{"className":219,"code":105016,"language":221,"meta":57,"style":57},"pos=\"0 0 1\"\n",[59,105018,105019],{"__ignoreMap":57},[79,105020,105021],{"class":81,"line":82},[79,105022,105016],{"class":228},[19,105024,105025],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[339,105027,105029],{"id":105028},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,105031,105032,105033,84518,105036,105038],{},"不同 ",[59,105034,105035],{},"type",[59,105037,33498],{}," 含义不同：",[347,105040,105041,105056],{},[350,105042,105043],{},[353,105044,105045,105049,105054],{},[356,105046,105047],{"align":358},[59,105048,105035],{},[356,105050,105051,105053],{"align":358},[59,105052,33498],{}," 示例",[356,105055,102683],{"align":358},[367,105057,105058,105072,105087,105105],{},[353,105059,105060,105064,105069],{},[372,105061,105062],{"align":358},[59,105063,55705],{},[372,105065,105066],{"align":358},[59,105067,105068],{},"size=\"0.1 0.2 0.3\"",[372,105070,105071],{"align":358},"x\u002Fy\u002Fz 半边长，不是完整长度",[353,105073,105074,105079,105084],{},[372,105075,105076],{"align":358},[59,105077,105078],{},"sphere",[372,105080,105081],{"align":358},[59,105082,105083],{},"size=\"0.1\"",[372,105085,105086],{"align":358},"球半径",[353,105088,105089,105094,105099],{},[372,105090,105091],{"align":358},[59,105092,105093],{},"capsule",[372,105095,105096],{"align":358},[59,105097,105098],{},"size=\"0.03\"",[372,105100,105101,105102,105104],{"align":358},"胶囊半径，长度常用 ",[59,105103,2044],{}," 指定",[353,105106,105107,105112,105117],{},[372,105108,105109],{"align":358},[59,105110,105111],{},"plane",[372,105113,105114],{"align":358},[59,105115,105116],{},"size=\"3 3 0.1\"",[372,105118,105119],{"align":358},"可视平面大小，通常当地面",[19,105121,105122,105123,105125,105126,105128],{},"最容易踩坑的是 box：",[59,105124,103967],{}," 表示边长大约是 ",[59,105127,34036],{},"，因为 MuJoCo 用的是半边长。",[339,105130,105132],{"id":105131},"site-是什么","site 是什么",[19,105134,105135,105138],{},[59,105136,105137],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[26,105140,105141,105144,105147,105150],{},[29,105142,105143],{},"标记机械臂末端。",[29,105145,105146],{},"标记目标位置。",[29,105148,105149],{},"放传感器或相机参考点。",[29,105151,105152],{},"在 Python 中读取某个关键点的世界坐标。",[19,105154,105155,105156,1748,105159,105162],{},"在后面的 Reacher 任务中，",[59,105157,105158],{},"tip",[59,105160,105161],{},"target"," 就会用 site 表示。",[14,105164,510],{"id":509},[51,105166,105168],{"className":439,"code":105167,"language":441,"meta":57,"style":57},"import mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"xml_basic\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n\n    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"red_box_free\"\u002F>\n      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n    site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n\n    if box_body_id \u003C 0:\n        raise RuntimeError(\"body red_box not found\")\n    if site_id \u003C 0:\n        raise RuntimeError(\"site box_center not found\")\n\n    for _ in range(200):\n        mujoco.mj_step(model, data)\n\n    print(\"simulation time:\", data.time)\n    print(\"box body position:\", data.xpos[box_body_id].copy())\n    print(\"site position:\", data.site_xpos[site_id].copy())\n    print(\"box qpos:\", np.array(data.qpos))\n\n\nif __name__ == \"__main__\":\n    main()\n",[59,105169,105170,105176,105186,105190,105194,105202,105207,105211,105215,105219,105224,105228,105233,105238,105243,105248,105252,105256,105260,105264,105268,105272,105284,105296,105304,105308,105323,105338,105342,105355,105370,105383,105396,105400,105416,105420,105424,105435,105447,105459,105471,105475,105479,105491],{"__ignoreMap":57},[79,105171,105172,105174],{"class":81,"line":82},[79,105173,520],{"class":448},[79,105175,523],{"class":228},[79,105177,105178,105180,105182,105184],{"class":81,"line":167},[79,105179,520],{"class":448},[79,105181,530],{"class":228},[79,105183,533],{"class":448},[79,105185,536],{"class":228},[79,105187,105188],{"class":81,"line":178},[79,105189,542],{"emptyLinePlaceholder":541},[79,105191,105192],{"class":81,"line":545},[79,105193,542],{"emptyLinePlaceholder":541},[79,105195,105196,105198,105200],{"class":81,"line":550},[79,105197,553],{"class":96},[79,105199,556],{"class":448},[79,105201,559],{"class":89},[79,105203,105204],{"class":81,"line":562},[79,105205,105206],{"class":89},"\u003Cmujoco model=\"xml_basic\">\n",[79,105208,105209],{"class":81,"line":568},[79,105210,571],{"class":89},[79,105212,105213],{"class":81,"line":574},[79,105214,542],{"emptyLinePlaceholder":541},[79,105216,105217],{"class":81,"line":579},[79,105218,582],{"class":89},[79,105220,105221],{"class":81,"line":585},[79,105222,105223],{"class":89},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[79,105225,105226],{"class":81,"line":591},[79,105227,542],{"emptyLinePlaceholder":541},[79,105229,105230],{"class":81,"line":596},[79,105231,105232],{"class":89},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[79,105234,105235],{"class":81,"line":602},[79,105236,105237],{"class":89},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[79,105239,105240],{"class":81,"line":608},[79,105241,105242],{"class":89},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[79,105244,105245],{"class":81,"line":614},[79,105246,105247],{"class":89},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[79,105249,105250],{"class":81,"line":619},[79,105251,646],{"class":89},[79,105253,105254],{"class":81,"line":625},[79,105255,652],{"class":89},[79,105257,105258],{"class":81,"line":631},[79,105259,681],{"class":89},[79,105261,105262],{"class":81,"line":637},[79,105263,687],{"class":89},[79,105265,105266],{"class":81,"line":643},[79,105267,542],{"emptyLinePlaceholder":541},[79,105269,105270],{"class":81,"line":649},[79,105271,542],{"emptyLinePlaceholder":541},[79,105273,105274,105276,105278,105280,105282],{"class":81,"line":655},[79,105275,703],{"class":448},[79,105277,826],{"class":85},[79,105279,829],{"class":228},[79,105281,832],{"class":96},[79,105283,745],{"class":228},[79,105285,105286,105288,105290,105292,105294],{"class":81,"line":660},[79,105287,840],{"class":228},[79,105289,239],{"class":448},[79,105291,845],{"class":228},[79,105293,553],{"class":96},[79,105295,850],{"class":228},[79,105297,105298,105300,105302],{"class":81,"line":666},[79,105299,856],{"class":228},[79,105301,239],{"class":448},[79,105303,861],{"class":228},[79,105305,105306],{"class":81,"line":672},[79,105307,542],{"emptyLinePlaceholder":541},[79,105309,105310,105313,105315,105318,105321],{"class":81,"line":678},[79,105311,105312],{"class":228},"    box_body_id ",[79,105314,239],{"class":448},[79,105316,105317],{"class":228}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[79,105319,105320],{"class":89},"\"red_box\"",[79,105322,850],{"class":228},[79,105324,105325,105328,105330,105333,105336],{"class":81,"line":684},[79,105326,105327],{"class":228},"    site_id ",[79,105329,239],{"class":448},[79,105331,105332],{"class":228}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[79,105334,105335],{"class":89},"\"box_center\"",[79,105337,850],{"class":228},[79,105339,105340],{"class":81,"line":690},[79,105341,542],{"emptyLinePlaceholder":541},[79,105343,105344,105346,105349,105351,105353],{"class":81,"line":695},[79,105345,5176],{"class":448},[79,105347,105348],{"class":228}," box_body_id ",[79,105350,229],{"class":448},[79,105352,1103],{"class":96},[79,105354,745],{"class":228},[79,105356,105357,105360,105363,105365,105368],{"class":81,"line":700},[79,105358,105359],{"class":448},"        raise",[79,105361,105362],{"class":96}," RuntimeError",[79,105364,455],{"class":228},[79,105366,105367],{"class":89},"\"body red_box not found\"",[79,105369,850],{"class":228},[79,105371,105372,105374,105377,105379,105381],{"class":81,"line":712},[79,105373,5176],{"class":448},[79,105375,105376],{"class":228}," site_id ",[79,105378,229],{"class":448},[79,105380,1103],{"class":96},[79,105382,745],{"class":228},[79,105384,105385,105387,105389,105391,105394],{"class":81,"line":721},[79,105386,105359],{"class":448},[79,105388,105362],{"class":96},[79,105390,455],{"class":228},[79,105392,105393],{"class":89},"\"site box_center not found\"",[79,105395,850],{"class":228},[79,105397,105398],{"class":81,"line":726},[79,105399,542],{"emptyLinePlaceholder":541},[79,105401,105402,105404,105406,105408,105410,105412,105414],{"class":81,"line":731},[79,105403,915],{"class":448},[79,105405,103450],{"class":228},[79,105407,921],{"class":448},[79,105409,924],{"class":96},[79,105411,455],{"class":228},[79,105413,3817],{"class":96},[79,105415,932],{"class":228},[79,105417,105418],{"class":81,"line":748},[79,105419,1050],{"class":228},[79,105421,105422],{"class":81,"line":765},[79,105423,542],{"emptyLinePlaceholder":541},[79,105425,105426,105428,105430,105433],{"class":81,"line":780},[79,105427,1161],{"class":96},[79,105429,455],{"class":228},[79,105431,105432],{"class":89},"\"simulation time:\"",[79,105434,103427],{"class":228},[79,105436,105437,105439,105441,105444],{"class":81,"line":811},[79,105438,1161],{"class":96},[79,105440,455],{"class":228},[79,105442,105443],{"class":89},"\"box body position:\"",[79,105445,105446],{"class":228},", data.xpos[box_body_id].copy())\n",[79,105448,105449,105451,105453,105456],{"class":81,"line":816},[79,105450,1161],{"class":96},[79,105452,455],{"class":228},[79,105454,105455],{"class":89},"\"site position:\"",[79,105457,105458],{"class":228},", data.site_xpos[site_id].copy())\n",[79,105460,105461,105463,105465,105468],{"class":81,"line":821},[79,105462,1161],{"class":96},[79,105464,455],{"class":228},[79,105466,105467],{"class":89},"\"box qpos:\"",[79,105469,105470],{"class":228},", np.array(data.qpos))\n",[79,105472,105473],{"class":81,"line":837},[79,105474,542],{"emptyLinePlaceholder":541},[79,105476,105477],{"class":81,"line":853},[79,105478,542],{"emptyLinePlaceholder":541},[79,105480,105481,105483,105485,105487,105489],{"class":81,"line":864},[79,105482,1210],{"class":448},[79,105484,1213],{"class":96},[79,105486,1100],{"class":448},[79,105488,1218],{"class":89},[79,105490,745],{"class":228},[79,105492,105493],{"class":81,"line":869},[79,105494,1226],{"class":228},[19,105496,1229],{},[51,105498,105500],{"className":73,"code":105499,"language":75,"meta":57,"style":57},"touch ch2_xml_basic.py\n",[59,105501,105502],{"__ignoreMap":57},[79,105503,105504,105506],{"class":81,"line":82},[79,105505,1239],{"class":85},[79,105507,105508],{"class":89}," ch2_xml_basic.py\n",[19,105510,104244],{},[51,105512,105514],{"className":73,"code":105513,"language":75,"meta":57,"style":57},"python ch2_xml_basic.py\n",[59,105515,105516],{"__ignoreMap":57},[79,105517,105518,105520],{"class":81,"line":82},[79,105519,441],{"class":85},[79,105521,105508],{"class":89},[339,105523,1259],{"id":1259},[19,105525,105526],{},"用名字查找 body：",[51,105528,105530],{"className":439,"code":105529,"language":441,"meta":57,"style":57},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[59,105531,105532],{"__ignoreMap":57},[79,105533,105534,105537,105539,105541,105543],{"class":81,"line":82},[79,105535,105536],{"class":228},"box_body_id ",[79,105538,239],{"class":448},[79,105540,105317],{"class":228},[79,105542,105320],{"class":89},[79,105544,850],{"class":228},[19,105546,105547],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,105549,105550],{},"用名字查找 site：",[51,105552,105554],{"className":439,"code":105553,"language":441,"meta":57,"style":57},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[59,105555,105556],{"__ignoreMap":57},[79,105557,105558,105561,105563,105565,105567],{"class":81,"line":82},[79,105559,105560],{"class":228},"site_id ",[79,105562,239],{"class":448},[79,105564,105332],{"class":228},[79,105566,105335],{"class":89},[79,105568,850],{"class":228},[19,105570,105571,105572,105575,105576,105579],{},"注意第二个参数是对象类型。查 body 就用 ",[59,105573,105574],{},"mjOBJ_BODY","，查 site 就用 ",[59,105577,105578],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,105581,105582],{},"读取世界坐标：",[51,105584,105586],{"className":439,"code":105585,"language":441,"meta":57,"style":57},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[59,105587,105588,105593],{"__ignoreMap":57},[79,105589,105590],{"class":81,"line":82},[79,105591,105592],{"class":228},"data.xpos[box_body_id]\n",[79,105594,105595],{"class":81,"line":167},[79,105596,105597],{"class":228},"data.site_xpos[site_id]\n",[19,105599,105600,105603,105604,105607],{},[59,105601,105602],{},"xpos"," 是 body 的世界坐标，",[59,105605,105606],{},"site_xpos"," 是 site 的世界坐标。",[339,105609,1407],{"id":1407},[51,105611,105613],{"className":439,"code":105612,"language":441,"meta":57,"style":57},"import mujoco\nimport numpy as np\n",[59,105614,105615,105621],{"__ignoreMap":57},[79,105616,105617,105619],{"class":81,"line":82},[79,105618,520],{"class":448},[79,105620,523],{"class":228},[79,105622,105623,105625,105627,105629],{"class":81,"line":167},[79,105624,520],{"class":448},[79,105626,530],{"class":228},[79,105628,533],{"class":448},[79,105630,536],{"class":228},[19,105632,105633,105634,105637,105638,105641,105642,2139,105645,497],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[59,105635,105636],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[59,105639,105640],{},"as np"," 是习惯写法，后面就可以写 ",[59,105643,105644],{},"np.array(...)",[59,105646,105647],{},"np.round(...)",[51,105649,105650],{"className":439,"code":103539,"language":441,"meta":57,"style":57},[59,105651,105652,105660,105664],{"__ignoreMap":57},[79,105653,105654,105656,105658],{"class":81,"line":82},[79,105655,553],{"class":96},[79,105657,556],{"class":448},[79,105659,559],{"class":89},[79,105661,105662],{"class":81,"line":167},[79,105663,103554],{"class":89},[79,105665,105666],{"class":81,"line":178},[79,105667,687],{"class":89},[19,105669,105670,105671,497],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[59,105672,105673],{},"mujoco.MjModel.from_xml_string(XML)",[51,105675,105677],{"className":219,"code":105676,"language":221,"meta":57,"style":57},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[59,105678,105679],{"__ignoreMap":57},[79,105680,105681,105683,105685,105687,105689,105691,105693,105695,105698,105700,105702,105705,105707,105709,105712],{"class":81,"line":82},[79,105682,229],{"class":228},[79,105684,105137],{"class":232},[79,105686,236],{"class":85},[79,105688,239],{"class":228},[79,105690,105335],{"class":89},[79,105692,103072],{"class":85},[79,105694,239],{"class":228},[79,105696,105697],{"class":89},"\"0 0 0\"",[79,105699,103102],{"class":85},[79,105701,239],{"class":228},[79,105703,105704],{"class":89},"\"0.03\"",[79,105706,80755],{"class":85},[79,105708,239],{"class":228},[79,105710,105711],{"class":89},"\"0 1 0 1\"",[79,105713,261],{"class":228},[19,105715,105716,105718,105719,105722,105723,105725,105726,105729],{},[59,105717,105137],{}," 是标记点。",[59,105720,105721],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[59,105724,105098],{}," 表示显示出来的小球大小。",[59,105727,105728],{},"rgba=\"0 1 0 1\""," 表示绿色。",[51,105731,105732],{"className":439,"code":105529,"language":441,"meta":57,"style":57},[59,105733,105734],{"__ignoreMap":57},[79,105735,105736,105738,105740,105742,105744],{"class":81,"line":82},[79,105737,105536],{"class":228},[79,105739,239],{"class":448},[79,105741,105317],{"class":228},[79,105743,105320],{"class":89},[79,105745,850],{"class":228},[19,105747,105748,105749,105751],{},"这行的作用是：根据名字 ",[59,105750,105320],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,105753,105754],{},"拆开看：",[26,105756,105757,105763,105768,105774],{},[29,105758,105759,105762],{},[59,105760,105761],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[29,105764,105765,105767],{},[59,105766,104028],{}," 是被查询的模型。",[29,105769,105770,105773],{},[59,105771,105772],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[29,105775,105776,105778],{},[59,105777,105320],{}," 是 XML 里写的名字。",[51,105780,105781],{"className":439,"code":105553,"language":441,"meta":57,"style":57},[59,105782,105783],{"__ignoreMap":57},[79,105784,105785,105787,105789,105791,105793],{"class":81,"line":82},[79,105786,105560],{"class":228},[79,105788,239],{"class":448},[79,105790,105332],{"class":228},[79,105792,105335],{"class":89},[79,105794,850],{"class":228},[19,105796,105797,105798,497],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[59,105799,105335],{},[51,105801,105803],{"className":439,"code":105802,"language":441,"meta":57,"style":57},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[59,105804,105805,105817],{"__ignoreMap":57},[79,105806,105807,105809,105811,105813,105815],{"class":81,"line":82},[79,105808,1210],{"class":448},[79,105810,105348],{"class":228},[79,105812,229],{"class":448},[79,105814,1103],{"class":96},[79,105816,745],{"class":228},[79,105818,105819,105822,105824,105826,105828],{"class":81,"line":167},[79,105820,105821],{"class":448},"    raise",[79,105823,105362],{"class":96},[79,105825,455],{"class":228},[79,105827,105367],{"class":89},[79,105829,850],{"class":228},[19,105831,105832,105834,105835,105838,105839,105841,105842,105845],{},[59,105833,1210],{}," 是条件判断。",[59,105836,105837],{},"mj_name2id"," 找不到对象时会返回 ",[59,105840,1977],{},"。所以如果 ID 小于 0，就说明名字写错了。",[59,105843,105844],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[51,105847,105849],{"className":439,"code":105848,"language":441,"meta":57,"style":57},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[59,105850,105851,105867],{"__ignoreMap":57},[79,105852,105853,105855,105857,105859,105861,105863,105865],{"class":81,"line":82},[79,105854,1638],{"class":448},[79,105856,103450],{"class":228},[79,105858,921],{"class":448},[79,105860,924],{"class":96},[79,105862,455],{"class":228},[79,105864,3817],{"class":96},[79,105866,932],{"class":228},[79,105868,105869],{"class":81,"line":167},[79,105870,103643],{"class":228},[19,105872,105873],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[51,105875,105877],{"className":439,"code":105876,"language":441,"meta":57,"style":57},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[59,105878,105879],{"__ignoreMap":57},[79,105880,105881,105883,105885,105887],{"class":81,"line":82},[79,105882,1889],{"class":96},[79,105884,455],{"class":228},[79,105886,105443],{"class":89},[79,105888,105446],{"class":228},[19,105890,105891,105893,105894,105897],{},[59,105892,103045],{}," 保存所有 body 的世界坐标。",[59,105895,105896],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[51,105899,105901],{"className":439,"code":105900,"language":441,"meta":57,"style":57},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[59,105902,105903],{"__ignoreMap":57},[79,105904,105905,105907,105909,105911],{"class":81,"line":82},[79,105906,1889],{"class":96},[79,105908,455],{"class":228},[79,105910,105455],{"class":89},[79,105912,105458],{"class":228},[19,105914,105915,105918,105919,105921],{},[59,105916,105917],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[59,105920,104905],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[51,105923,105925],{"className":439,"code":105924,"language":441,"meta":57,"style":57},"print(\"box qpos:\", np.array(data.qpos))\n",[59,105926,105927],{"__ignoreMap":57},[79,105928,105929,105931,105933,105935],{"class":81,"line":82},[79,105930,1889],{"class":96},[79,105932,455],{"class":228},[79,105934,105467],{"class":89},[79,105936,105470],{"class":228},[19,105938,105939,105940,105943],{},"这里打印广义位置数组。",[59,105941,105942],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,105945,1934],{"id":1933},[19,105947,105948,105949,105952,105953,497],{},"程序会输出 ",[59,105950,105951],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[59,105954,1290],{},[19,105956,105957,105959,105960,105963,105964,105967],{},[59,105958,105896],{}," 是 body 的世界坐标位置。",[59,105961,105962],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[59,105965,105966],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,105969,84210,105970,84518,105972,105974],{},[59,105971,104905],{},[59,105973,105721],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,105976,105977],{},"如果你把 site 改成：",[51,105979,105981],{"className":219,"code":105980,"language":221,"meta":57,"style":57},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[59,105982,105983],{"__ignoreMap":57},[79,105984,105985,105987,105989,105991,105993,105996,105998,106000,106003,106005,106007,106009,106011,106013,106015],{"class":81,"line":82},[79,105986,229],{"class":228},[79,105988,105137],{"class":232},[79,105990,236],{"class":85},[79,105992,239],{"class":228},[79,105994,105995],{"class":89},"\"box_top\"",[79,105997,103072],{"class":85},[79,105999,239],{"class":228},[79,106001,106002],{"class":89},"\"0 0 0.15\"",[79,106004,103102],{"class":85},[79,106006,239],{"class":228},[79,106008,105704],{"class":89},[79,106010,80755],{"class":85},[79,106012,239],{"class":228},[79,106014,105711],{"class":89},[79,106016,261],{"class":228},[19,106018,106019,106020,106023],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[59,106021,106022],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,106025,1987],{"id":1986},[26,106027,106028,106037,106040,106047,106053,106064],{},[29,106029,104348,106030,106032,106033,104351,106035,497],{},[59,106031,104909],{}," 的初始高度从 ",[59,106034,775],{},[59,106036,2331],{},[29,106038,106039],{},"重新运行程序。",[29,106041,106042,106043,106046],{},"观察 ",[59,106044,106045],{},"box qpos"," 和最终位置是否变化。",[29,106048,106049,106050,106052],{},"故意把 ",[59,106051,105137],{}," 名称改错，确认程序能报错。",[29,106054,104348,106055,106057,106058,104351,106060,106063],{},[59,106056,103086],{}," 的颜色 ",[59,106059,103975],{},[59,106061,106062],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[29,106065,104348,106066,84518,106068,104351,106071,106074,106075,106077],{},[59,106067,104905],{},[59,106069,106070],{},"pos",[59,106072,106073],{},"0 0 0.2","，观察 ",[59,106076,106022],{}," 如何变化。",[14,106079,2031],{"id":2030},[339,106081,106083],{"id":106082},"xml-error-schema-violation",[59,106084,106085],{},"XML Error: Schema violation",[19,106087,106088],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[339,106090,106092,83278,106094],{"id":106091},"mj_name2id-返回-1",[59,106093,105837],{},[59,106095,1977],{},[19,106097,106098,106099,106102],{},"说明名字没有找到。检查 XML 中 ",[59,106100,106101],{},"name=\"...\"","，并确认对象类型正确。",[339,106104,106105],{"id":106105},"物体不下落",[19,106107,104457],{},[26,106109,106110,106115,106120],{},[29,106111,106112,106113],{},"body 是否有 ",[59,106114,103564],{},[29,106116,106117,106118],{},"gravity 是否为 ",[59,106119,104523],{},[29,106121,106122,106123,106125],{},"body 是否被固定在 ",[59,106124,103784],{}," 中",[339,106127,106128],{"id":106128},"坐标看起来不符合预期",[19,106130,106131],{},"先区分两种坐标：",[347,106133,106134,106143],{},[350,106135,106136],{},[353,106137,106138,106141],{},[356,106139,106140],{"align":358},"坐标",[356,106142,102683],{"align":358},[367,106144,106145,106155],{},[353,106146,106147,106152],{},[372,106148,106149,106150],{"align":358},"XML 里的 ",[59,106151,106070],{},[372,106153,106154],{"align":358},"相对父 body 的局部坐标",[353,106156,106157,106163],{},[372,106158,106159,26998,106161],{"align":358},[59,106160,103045],{},[59,106162,105917],{},[372,106164,106165],{"align":358},"仿真更新后的世界坐标",[19,106167,106168,106169,106171,106172,1978,106175,106177],{},"如果你修改了 ",[59,106170,103037],{},"，但还没调用 ",[59,106173,106174],{},"mj_forward",[59,106176,103180],{},"，世界坐标可能还没有更新。",[14,106179,2125],{"id":2124},[19,106181,106182],{},"MJCF 建模先掌握四件事：",[26,106184,106185,106190,106195,106200],{},[29,106186,106187,106189],{},[59,106188,53794],{}," 表示刚体层级。",[29,106191,106192,106194],{},[59,106193,103086],{}," 表示形状、碰撞和质量。",[29,106196,106197,106199],{},[59,106198,233],{}," 决定 body 能不能动、怎么动。",[29,106201,106202,106204],{},[59,106203,105137],{}," 用来标记关键点，方便 Python 读取位置。",[19,106206,106207],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[2159,106209,2161],{},{"title":57,"searchDepth":167,"depth":167,"links":106211},[106212,106213,106214,106220,106224,106225,106226,106233],{"id":16,"depth":167,"text":17},{"id":66,"depth":167,"text":67},{"id":203,"depth":167,"text":204,"children":106215},[106216,106217,106218,106219],{"id":104888,"depth":178,"text":104888},{"id":105002,"depth":178,"text":105002},{"id":105028,"depth":178,"text":105029},{"id":105131,"depth":178,"text":105132},{"id":509,"depth":167,"text":510,"children":106221},[106222,106223],{"id":1259,"depth":178,"text":1259},{"id":1407,"depth":178,"text":1407},{"id":1933,"depth":167,"text":1934},{"id":1986,"depth":167,"text":1987},{"id":2030,"depth":167,"text":2031,"children":106227},[106228,106229,106231,106232],{"id":106082,"depth":178,"text":106085},{"id":106091,"depth":178,"text":106230},"mj_name2id 返回 -1",{"id":106105,"depth":178,"text":106105},{"id":106128,"depth":178,"text":106128},{"id":2124,"depth":167,"text":2125},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":104586,"description":57},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":106240,"title":106241,"body":106242,"description":57,"extension":2186,"meta":107722,"navigation":541,"path":107723,"seo":107724,"stem":107725,"__hash__":107726},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":106243,"toc":107694},[106244,106247,106249,106252,106254,106291,106294,106300,106303,106305,106307,106331,106333,106347,106349,106390,106392,106416,106418,106421,106429,106438,106441,106450,106458,106466,106469,106479,106482,106534,106541,106547,106555,106603,106606,106624,106627,106635,106639,106648,106680,106682,107028,107030,107042,107044,107055,107057,107060,107081,107087,107090,107115,107125,107128,107136,107139,107142,107163,107173,107175,107195,107198,107219,107228,107247,107253,107278,107281,107295,107302,107326,107329,107337,107346,107362,107372,107380,107389,107391,107394,107417,107422,107425,107447,107449,107488,107490,107497,107499,107507,107510,107513,107525,107566,107573,107584,107591,107594,107643,107646,107649,107655,107657,107662,107688,107691],[10,106245,106241],{"id":106246},"_3python-控制接口读取状态与推进仿真",[14,106248,17],{"id":16},[19,106250,106251],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,106253,24],{},[26,106255,106256,106261,106266,106270,106275,106285],{},[29,106257,106258],{},[59,106259,106260],{},"MjModel.from_xml_string",[29,106262,106263],{},[59,106264,106265],{},"MjData(model)",[29,106267,106268],{},[59,106269,103180],{},[29,106271,106272],{},[59,106273,106274],{},"mj_resetData",[29,106276,106277,106278,2139,106280,2139,106282],{},"读取 ",[59,106279,1290],{},[59,106281,1294],{},[59,106283,106284],{},"ctrl",[29,106286,106287,106288],{},"使用 ",[59,106289,106290],{},"model.opt.timestep",[19,106292,106293],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[51,106295,106298],{"className":106296,"code":106297,"language":56,"meta":57},[54],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[59,106299,106297],{"__ignoreMap":57},[19,106301,106302],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,106304,67],{"id":66},[19,106306,70],{},[51,106308,106309],{"className":73,"code":74,"language":75,"meta":57,"style":57},[59,106310,106311],{"__ignoreMap":57},[79,106312,106313,106315,106317,106319,106321,106323,106325,106327,106329],{"class":81,"line":82},[79,106314,86],{"class":85},[79,106316,90],{"class":89},[79,106318,93],{"class":89},[79,106320,97],{"class":96},[79,106322,100],{"class":89},[79,106324,103],{"class":89},[79,106326,106],{"class":89},[79,106328,109],{"class":89},[79,106330,112],{"class":89},[19,106332,115],{},[51,106334,106335],{"className":73,"code":118,"language":75,"meta":57,"style":57},[59,106336,106337],{"__ignoreMap":57},[79,106338,106339,106341,106343,106345],{"class":81,"line":82},[79,106340,125],{"class":85},[79,106342,93],{"class":89},[79,106344,130],{"class":89},[79,106346,133],{"class":89},[19,106348,136],{},[51,106350,106352],{"className":73,"code":106351,"language":75,"meta":57,"style":57},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[59,106353,106354,106371,106380],{"__ignoreMap":57},[79,106355,106356,106358,106360,106362,106365,106367,106369],{"class":81,"line":82},[79,106357,146],{"class":85},[79,106359,149],{"class":89},[79,106361,152],{"class":96},[79,106363,106364],{"class":89}," mujoco-python-api",[79,106366,158],{"class":89},[79,106368,161],{"class":96},[79,106370,164],{"class":96},[79,106372,106373,106375,106377],{"class":81,"line":167},[79,106374,146],{"class":85},[79,106376,172],{"class":89},[79,106378,106379],{"class":89}," mujoco-python-api\n",[79,106381,106382,106384,106386,106388],{"class":81,"line":178},[79,106383,125],{"class":85},[79,106385,93],{"class":89},[79,106387,130],{"class":89},[79,106389,133],{"class":89},[19,106391,189],{},[26,106393,106394,106401,106410],{},[29,106395,106396,1748,106398,106400],{},[59,106397,102658],{},[59,106399,102663],{}," 是官方 Python bindings 的类名。",[29,106402,106403,106404,106407,106408,497],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[59,106405,106406],{},"mjModel"," 在 Python 中是 ",[59,106409,102692],{},[29,106411,106412,106413,497],{},"不要使用 ",[59,106414,106415],{},"sim = mujoco_py.MjSim(...)",[14,106417,204],{"id":203},[19,106419,106420],{},"仿真推进核心代码:",[51,106422,106423],{"className":439,"code":1801,"language":441,"meta":57,"style":57},[59,106424,106425],{"__ignoreMap":57},[79,106426,106427],{"class":81,"line":82},[79,106428,1801],{"class":228},[19,106430,106431,106432,2139,106434,2139,106436,497],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[59,106433,103037],{},[59,106435,103040],{},[59,106437,103034],{},[19,106439,106440],{},"重置仿真:",[51,106442,106444],{"className":439,"code":106443,"language":441,"meta":57,"style":57},"mujoco.mj_resetData(model, data)\n",[59,106445,106446],{"__ignoreMap":57},[79,106447,106448],{"class":81,"line":82},[79,106449,106443],{"class":228},[19,106451,106452,106453,1978,106455,106457],{},"如果手动修改了 ",[59,106454,103037],{},[59,106456,103040],{},"，通常应调用:",[51,106459,106460],{"className":439,"code":1321,"language":441,"meta":57,"style":57},[59,106461,106462],{"__ignoreMap":57},[79,106463,106464],{"class":81,"line":82},[79,106465,1321],{"class":228},[19,106467,106468],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[339,106470,106472,2139,106474,2139,106476,106478],{"id":106471},"qposqvelctrl-是什么",[59,106473,1290],{},[59,106475,1294],{},[59,106477,106284],{}," 是什么",[19,106480,106481],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[347,106483,106484,106496],{},[350,106485,106486],{},[353,106487,106488,106491,106493],{},[356,106489,106490],{"align":358},"字段",[356,106492,102683],{"align":358},[356,106494,106495],{"align":358},"谁来修改",[367,106497,106498,106510,106522],{},[353,106499,106500,106504,106507],{},[372,106501,106502],{"align":358},[59,106503,103037],{},[372,106505,106506],{"align":358},"广义位置，例如小车位置、关节角、自由物体位置姿态",[372,106508,106509],{"align":358},"MuJoCo 更新，也可以手动设置初始状态",[353,106511,106512,106516,106519],{},[372,106513,106514],{"align":358},[59,106515,103040],{},[372,106517,106518],{"align":358},"广义速度，例如小车速度、关节角速度",[372,106520,106521],{"align":358},"MuJoCo 更新，也可以手动清零",[353,106523,106524,106528,106531],{},[372,106525,106526],{"align":358},[59,106527,2148],{},[372,106529,106530],{"align":358},"actuator 的控制输入",[372,106532,106533],{"align":358},"主要由你的控制代码写入",[19,106535,11080,106536,1748,106538,106540],{},[59,106537,1290],{},[59,106539,1294],{}," 不一定同维。自由刚体就是典型例子：",[51,106542,106545],{"className":106543,"code":106544,"language":56,"meta":57},[54],"freejoint: qpos 7 维，qvel 6 维\n",[59,106546,106544],{"__ignoreMap":57},[339,106548,106550,1748,106552,106554],{"id":106549},"mj_step-和-mj_forward-的区别",[59,106551,103180],{},[59,106553,106174],{}," 的区别",[347,106556,106557,106570],{},[350,106558,106559],{},[353,106560,106561,106564,106567],{},[356,106562,106563],{"align":358},"函数",[356,106565,106566],{"align":358},"是否推进时间",[356,106568,106569],{"align":358},"什么时候用",[367,106571,106572,106585],{},[353,106573,106574,106579,106582],{},[372,106575,106576],{"align":358},[59,106577,106578],{},"mj_step(model, data)",[372,106580,106581],{"align":358},"是",[372,106583,106584],{"align":358},"正常仿真循环，每调用一次前进一步",[353,106586,106587,106592,106595],{},[372,106588,106589],{"align":358},[59,106590,106591],{},"mj_forward(model, data)",[372,106593,106594],{"align":358},"否",[372,106596,106597,106598,2139,106600,106602],{"align":358},"手动改了 ",[59,106599,1290],{},[59,106601,1294],{}," 后，刷新派生量",[19,106604,106605],{},"例如你写：",[51,106607,106609],{"className":439,"code":106608,"language":441,"meta":57,"style":57},"data.qpos[2] = 2.0\n",[59,106610,106611],{"__ignoreMap":57},[79,106612,106613,106615,106617,106619,106621],{"class":81,"line":82},[79,106614,1308],{"class":228},[79,106616,2331],{"class":96},[79,106618,877],{"class":228},[79,106620,239],{"class":448},[79,106622,106623],{"class":96}," 2.0\n",[19,106625,106626],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[51,106628,106629],{"className":439,"code":1321,"language":441,"meta":57,"style":57},[59,106630,106631],{"__ignoreMap":57},[79,106632,106633],{"class":81,"line":82},[79,106634,1321],{"class":228},[339,106636,106638],{"id":106637},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,106640,106641,106644,106645,106647],{},[59,106642,106643],{},"mujoco.mj_resetData(model, data)"," 会把 ",[59,106646,35398],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[51,106649,106651],{"className":439,"code":106650,"language":441,"meta":57,"style":57},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[59,106652,106653,106657,106667,106676],{"__ignoreMap":57},[79,106654,106655],{"class":81,"line":82},[79,106656,106443],{"class":228},[79,106658,106659,106662,106664],{"class":81,"line":167},[79,106660,106661],{"class":228},"data.qpos[:] ",[79,106663,239],{"class":448},[79,106665,106666],{"class":228}," random_qpos\n",[79,106668,106669,106672,106674],{"class":81,"line":178},[79,106670,106671],{"class":228},"data.qvel[:] ",[79,106673,239],{"class":448},[79,106675,904],{"class":96},[79,106677,106678],{"class":81,"line":545},[79,106679,1321],{"class":228},[14,106681,510],{"id":509},[51,106683,106685],{"className":439,"code":106684,"language":441,"meta":57,"style":57},"import mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"state_api\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n\n    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"ball_free\"\u002F>\n      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n    print(prefix)\n    print(\"  timestep:\", model.opt.timestep)\n    print(\"  time:\", data.time)\n    print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n    print(\"  qvel:\", np.round(data.qvel.copy(), 4))\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    print_state(\"initial\", model, data)\n\n    for _ in range(50):\n        mujoco.mj_step(model, data)\n\n    print_state(\"after 50 steps\", model, data)\n\n    mujoco.mj_resetData(model, data)\n    print_state(\"after reset\", model, data)\n\n    data.qpos[2] = 2.0\n    mujoco.mj_forward(model, data)\n    print_state(\"after manual qpos edit\", model, data)\n\n\nif __name__ == \"__main__\":\n    main()\n",[59,106686,106687,106693,106703,106707,106711,106719,106724,106728,106732,106736,106741,106745,106750,106755,106760,106764,106768,106772,106776,106780,106784,106803,106810,106822,106833,106849,106865,106869,106873,106885,106897,106905,106909,106920,106924,106940,106944,106948,106957,106961,106966,106975,106979,106991,106995,107004,107008,107012,107024],{"__ignoreMap":57},[79,106688,106689,106691],{"class":81,"line":82},[79,106690,520],{"class":448},[79,106692,523],{"class":228},[79,106694,106695,106697,106699,106701],{"class":81,"line":167},[79,106696,520],{"class":448},[79,106698,530],{"class":228},[79,106700,533],{"class":448},[79,106702,536],{"class":228},[79,106704,106705],{"class":81,"line":178},[79,106706,542],{"emptyLinePlaceholder":541},[79,106708,106709],{"class":81,"line":545},[79,106710,542],{"emptyLinePlaceholder":541},[79,106712,106713,106715,106717],{"class":81,"line":550},[79,106714,553],{"class":96},[79,106716,556],{"class":448},[79,106718,559],{"class":89},[79,106720,106721],{"class":81,"line":562},[79,106722,106723],{"class":89},"\u003Cmujoco model=\"state_api\">\n",[79,106725,106726],{"class":81,"line":568},[79,106727,571],{"class":89},[79,106729,106730],{"class":81,"line":574},[79,106731,542],{"emptyLinePlaceholder":541},[79,106733,106734],{"class":81,"line":579},[79,106735,582],{"class":89},[79,106737,106738],{"class":81,"line":585},[79,106739,106740],{"class":89},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[79,106742,106743],{"class":81,"line":591},[79,106744,542],{"emptyLinePlaceholder":541},[79,106746,106747],{"class":81,"line":596},[79,106748,106749],{"class":89},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[79,106751,106752],{"class":81,"line":602},[79,106753,106754],{"class":89},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[79,106756,106757],{"class":81,"line":608},[79,106758,106759],{"class":89},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[79,106761,106762],{"class":81,"line":614},[79,106763,646],{"class":89},[79,106765,106766],{"class":81,"line":619},[79,106767,652],{"class":89},[79,106769,106770],{"class":81,"line":625},[79,106771,681],{"class":89},[79,106773,106774],{"class":81,"line":631},[79,106775,687],{"class":89},[79,106777,106778],{"class":81,"line":637},[79,106779,542],{"emptyLinePlaceholder":541},[79,106781,106782],{"class":81,"line":643},[79,106783,542],{"emptyLinePlaceholder":541},[79,106785,106786,106788,106791,106794,106796,106799,106801],{"class":81,"line":649},[79,106787,703],{"class":448},[79,106789,106790],{"class":85}," print_state",[79,106792,106793],{"class":228},"(prefix: ",[79,106795,3409],{"class":96},[79,106797,106798],{"class":228},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[79,106800,832],{"class":96},[79,106802,745],{"class":228},[79,106804,106805,106807],{"class":81,"line":655},[79,106806,1161],{"class":96},[79,106808,106809],{"class":228},"(prefix)\n",[79,106811,106812,106814,106816,106819],{"class":81,"line":660},[79,106813,1161],{"class":96},[79,106815,455],{"class":228},[79,106817,106818],{"class":89},"\"  timestep:\"",[79,106820,106821],{"class":228},", model.opt.timestep)\n",[79,106823,106824,106826,106828,106831],{"class":81,"line":666},[79,106825,1161],{"class":96},[79,106827,455],{"class":228},[79,106829,106830],{"class":89},"\"  time:\"",[79,106832,103427],{"class":228},[79,106834,106835,106837,106839,106842,106845,106847],{"class":81,"line":672},[79,106836,1161],{"class":96},[79,106838,455],{"class":228},[79,106840,106841],{"class":89},"\"  qpos:\"",[79,106843,106844],{"class":228},", np.round(data.qpos.copy(), ",[79,106846,2537],{"class":96},[79,106848,1150],{"class":228},[79,106850,106851,106853,106855,106858,106861,106863],{"class":81,"line":678},[79,106852,1161],{"class":96},[79,106854,455],{"class":228},[79,106856,106857],{"class":89},"\"  qvel:\"",[79,106859,106860],{"class":228},", np.round(data.qvel.copy(), ",[79,106862,2537],{"class":96},[79,106864,1150],{"class":228},[79,106866,106867],{"class":81,"line":684},[79,106868,542],{"emptyLinePlaceholder":541},[79,106870,106871],{"class":81,"line":690},[79,106872,542],{"emptyLinePlaceholder":541},[79,106874,106875,106877,106879,106881,106883],{"class":81,"line":695},[79,106876,703],{"class":448},[79,106878,826],{"class":85},[79,106880,829],{"class":228},[79,106882,832],{"class":96},[79,106884,745],{"class":228},[79,106886,106887,106889,106891,106893,106895],{"class":81,"line":700},[79,106888,840],{"class":228},[79,106890,239],{"class":448},[79,106892,845],{"class":228},[79,106894,553],{"class":96},[79,106896,850],{"class":228},[79,106898,106899,106901,106903],{"class":81,"line":712},[79,106900,856],{"class":228},[79,106902,239],{"class":448},[79,106904,861],{"class":228},[79,106906,106907],{"class":81,"line":721},[79,106908,542],{"emptyLinePlaceholder":541},[79,106910,106911,106914,106917],{"class":81,"line":726},[79,106912,106913],{"class":228},"    print_state(",[79,106915,106916],{"class":89},"\"initial\"",[79,106918,106919],{"class":228},", model, data)\n",[79,106921,106922],{"class":81,"line":731},[79,106923,542],{"emptyLinePlaceholder":541},[79,106925,106926,106928,106930,106932,106934,106936,106938],{"class":81,"line":748},[79,106927,915],{"class":448},[79,106929,103450],{"class":228},[79,106931,921],{"class":448},[79,106933,924],{"class":96},[79,106935,455],{"class":228},[79,106937,2896],{"class":96},[79,106939,932],{"class":228},[79,106941,106942],{"class":81,"line":765},[79,106943,1050],{"class":228},[79,106945,106946],{"class":81,"line":780},[79,106947,542],{"emptyLinePlaceholder":541},[79,106949,106950,106952,106955],{"class":81,"line":811},[79,106951,106913],{"class":228},[79,106953,106954],{"class":89},"\"after 50 steps\"",[79,106956,106919],{"class":228},[79,106958,106959],{"class":81,"line":816},[79,106960,542],{"emptyLinePlaceholder":541},[79,106962,106963],{"class":81,"line":821},[79,106964,106965],{"class":228},"    mujoco.mj_resetData(model, data)\n",[79,106967,106968,106970,106973],{"class":81,"line":837},[79,106969,106913],{"class":228},[79,106971,106972],{"class":89},"\"after reset\"",[79,106974,106919],{"class":228},[79,106976,106977],{"class":81,"line":853},[79,106978,542],{"emptyLinePlaceholder":541},[79,106980,106981,106983,106985,106987,106989],{"class":81,"line":864},[79,106982,872],{"class":228},[79,106984,2331],{"class":96},[79,106986,877],{"class":228},[79,106988,239],{"class":448},[79,106990,106623],{"class":96},[79,106992,106993],{"class":81,"line":869},[79,106994,888],{"class":228},[79,106996,106997,106999,107002],{"class":81,"line":885},[79,106998,106913],{"class":228},[79,107000,107001],{"class":89},"\"after manual qpos edit\"",[79,107003,106919],{"class":228},[79,107005,107006],{"class":81,"line":891},[79,107007,542],{"emptyLinePlaceholder":541},[79,107009,107010],{"class":81,"line":896},[79,107011,542],{"emptyLinePlaceholder":541},[79,107013,107014,107016,107018,107020,107022],{"class":81,"line":907},[79,107015,1210],{"class":448},[79,107017,1213],{"class":96},[79,107019,1100],{"class":448},[79,107021,1218],{"class":89},[79,107023,745],{"class":228},[79,107025,107026],{"class":81,"line":912},[79,107027,1226],{"class":228},[19,107029,1229],{},[51,107031,107033],{"className":73,"code":107032,"language":75,"meta":57,"style":57},"touch ch3_python_state.py\n",[59,107034,107035],{"__ignoreMap":57},[79,107036,107037,107039],{"class":81,"line":82},[79,107038,1239],{"class":85},[79,107040,107041],{"class":89}," ch3_python_state.py\n",[19,107043,104244],{},[51,107045,107047],{"className":73,"code":107046,"language":75,"meta":57,"style":57},"python ch3_python_state.py\n",[59,107048,107049],{"__ignoreMap":57},[79,107050,107051,107053],{"class":81,"line":82},[79,107052,441],{"class":85},[79,107054,107041],{"class":89},[339,107056,1259],{"id":1259},[19,107058,107059],{},"打印状态的函数：",[51,107061,107063],{"className":439,"code":107062,"language":441,"meta":57,"style":57},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[59,107064,107065],{"__ignoreMap":57},[79,107066,107067,107069,107071,107073,107075,107077,107079],{"class":81,"line":82},[79,107068,703],{"class":448},[79,107070,106790],{"class":85},[79,107072,106793],{"class":228},[79,107074,3409],{"class":96},[79,107076,106798],{"class":228},[79,107078,832],{"class":96},[79,107080,745],{"class":228},[19,107082,107083,107084,107086],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[59,107085,35398],{}," 里发生了什么。",[19,107088,107089],{},"推进 50 步：",[51,107091,107093],{"className":439,"code":107092,"language":441,"meta":57,"style":57},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[59,107094,107095,107111],{"__ignoreMap":57},[79,107096,107097,107099,107101,107103,107105,107107,107109],{"class":81,"line":82},[79,107098,1638],{"class":448},[79,107100,103450],{"class":228},[79,107102,921],{"class":448},[79,107104,924],{"class":96},[79,107106,455],{"class":228},[79,107108,2896],{"class":96},[79,107110,932],{"class":228},[79,107112,107113],{"class":81,"line":167},[79,107114,103643],{"class":228},[19,107116,107117,107118,107121,107122,107124],{},"由于 ",[59,107119,107120],{},"timestep=0.01","，所以 50 步后时间约为 ",[59,107123,1751],{}," 秒。",[19,107126,107127],{},"重置：",[51,107129,107130],{"className":439,"code":106443,"language":441,"meta":57,"style":57},[59,107131,107132],{"__ignoreMap":57},[79,107133,107134],{"class":81,"line":82},[79,107135,106443],{"class":228},[19,107137,107138],{},"这会把时间、位置、速度恢复到初始状态。",[19,107140,107141],{},"手动改高度：",[51,107143,107145],{"className":439,"code":107144,"language":441,"meta":57,"style":57},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[59,107146,107147,107159],{"__ignoreMap":57},[79,107148,107149,107151,107153,107155,107157],{"class":81,"line":82},[79,107150,1308],{"class":228},[79,107152,2331],{"class":96},[79,107154,877],{"class":228},[79,107156,239],{"class":448},[79,107158,106623],{"class":96},[79,107160,107161],{"class":81,"line":167},[79,107162,1321],{"class":228},[19,107164,107165,107166,107169,107170,107172],{},"这个例子里 ",[59,107167,107168],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[59,107171,1747],{}," 表示把小球放到更高的位置。",[339,107174,1407],{"id":1407},[51,107176,107177],{"className":439,"code":107062,"language":441,"meta":57,"style":57},[59,107178,107179],{"__ignoreMap":57},[79,107180,107181,107183,107185,107187,107189,107191,107193],{"class":81,"line":82},[79,107182,703],{"class":448},[79,107184,106790],{"class":85},[79,107186,106793],{"class":228},[79,107188,3409],{"class":96},[79,107190,106798],{"class":228},[79,107192,832],{"class":96},[79,107194,745],{"class":228},[19,107196,107197],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[26,107199,107200,107209,107214],{},[29,107201,107202,107205,107206,107208],{},[59,107203,107204],{},"prefix","：一段文字，比如 ",[59,107207,106916],{},"，用来说明现在打印的是哪个阶段。",[29,107210,107211,107213],{},[59,107212,104028],{},"：MuJoCo 模型。",[29,107215,107216,107218],{},[59,107217,35398],{},"：MuJoCo 当前状态。",[19,107220,107221,2139,107224,107227],{},[59,107222,107223],{},"prefix: str",[59,107225,107226],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[51,107229,107231],{"className":439,"code":107230,"language":441,"meta":57,"style":57},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[59,107232,107233],{"__ignoreMap":57},[79,107234,107235,107237,107239,107241,107243,107245],{"class":81,"line":82},[79,107236,1889],{"class":96},[79,107238,455],{"class":228},[79,107240,106841],{"class":89},[79,107242,106844],{"class":228},[79,107244,2537],{"class":96},[79,107246,1150],{"class":228},[19,107248,107249,107252],{},[59,107250,107251],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[51,107254,107256],{"className":439,"code":107255,"language":441,"meta":57,"style":57},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[59,107257,107258,107270],{"__ignoreMap":57},[79,107259,107260,107262,107264,107266,107268],{"class":81,"line":82},[79,107261,103578],{"class":228},[79,107263,239],{"class":448},[79,107265,845],{"class":228},[79,107267,553],{"class":96},[79,107269,850],{"class":228},[79,107271,107272,107274,107276],{"class":81,"line":167},[79,107273,103602],{"class":228},[79,107275,239],{"class":448},[79,107277,861],{"class":228},[19,107279,107280],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[51,107282,107284],{"className":439,"code":107283,"language":441,"meta":57,"style":57},"print_state(\"initial\", model, data)\n",[59,107285,107286],{"__ignoreMap":57},[79,107287,107288,107291,107293],{"class":81,"line":82},[79,107289,107290],{"class":228},"print_state(",[79,107292,106916],{"class":89},[79,107294,106919],{"class":228},[19,107296,107297,107298,107301],{},"调用刚才定义的 ",[59,107299,107300],{},"print_state"," 函数，打印初始状态。",[51,107303,107304],{"className":439,"code":107092,"language":441,"meta":57,"style":57},[59,107305,107306,107322],{"__ignoreMap":57},[79,107307,107308,107310,107312,107314,107316,107318,107320],{"class":81,"line":82},[79,107309,1638],{"class":448},[79,107311,103450],{"class":228},[79,107313,921],{"class":448},[79,107315,924],{"class":96},[79,107317,455],{"class":228},[79,107319,2896],{"class":96},[79,107321,932],{"class":228},[79,107323,107324],{"class":81,"line":167},[79,107325,103643],{"class":228},[19,107327,107328],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[51,107330,107331],{"className":439,"code":106443,"language":441,"meta":57,"style":57},[59,107332,107333],{"__ignoreMap":57},[79,107334,107335],{"class":81,"line":82},[79,107336,106443],{"class":228},[19,107338,107339,107340,107342,107343,107345],{},"重置 ",[59,107341,35398],{},"。注意它不会重新创建 ",[59,107344,104028],{},"，因为模型结构没有变，只是状态回到初始值。",[51,107347,107348],{"className":439,"code":106608,"language":441,"meta":57,"style":57},[59,107349,107350],{"__ignoreMap":57},[79,107351,107352,107354,107356,107358,107360],{"class":81,"line":82},[79,107353,1308],{"class":228},[79,107355,2331],{"class":96},[79,107357,877],{"class":228},[79,107359,239],{"class":448},[79,107361,106623],{"class":96},[19,107363,107364,107365,2139,107367,2139,107369,107371],{},"这行是“手动改状态”。在 freejoint 中，",[59,107366,1592],{},[59,107368,1596],{},[59,107370,107168],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[51,107373,107374],{"className":439,"code":1321,"language":441,"meta":57,"style":57},[59,107375,107376],{"__ignoreMap":57},[79,107377,107378],{"class":81,"line":82},[79,107379,1321],{"class":228},[19,107381,107382,107383,107385,107386,107388],{},"手动改完 ",[59,107384,1290],{}," 后，调用 ",[59,107387,106174],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,107390,1934],{"id":1933},[19,107392,107393],{},"你会看到:",[26,107395,107396,107401,107406,107409],{},[29,107397,107398,107399],{},"初始时间为 ",[59,107400,759],{},[29,107402,107403,107404],{},"50 步后时间约为 ",[59,107405,1751],{},[29,107407,107408],{},"reset 后状态恢复",[29,107410,1608,107411,107414,107415],{},[59,107412,107413],{},"data.qpos[2]"," 后，小球高度变为 ",[59,107416,1747],{},[19,107418,107419,107421],{},[59,107420,107168],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,107423,107424],{},"输出里可以重点看三件事：",[26,107426,107427,107435,107440],{},[29,107428,107429,107431,107432,107434],{},[59,107430,4472],{}," 是否随着 ",[59,107433,103180],{}," 增加。",[29,107436,107437,107439],{},[59,107438,1290],{}," 的 z 坐标是否因为下落而变化。",[29,107441,107442,107444,107445,497],{},[59,107443,106274],{}," 后时间是否回到 ",[59,107446,759],{},[14,107448,1987],{"id":1986},[26,107450,107451,107457,107463,107469,107472,107481],{},[29,107452,107453,107454,497],{},"修改 timestep 为 ",[59,107455,107456],{},"0.005",[29,107458,107459,107460,497],{},"重新运行，检查 50 步后时间是否约为 ",[59,107461,107462],{},"0.25",[29,107464,107465,107466,497],{},"修改重力为 ",[59,107467,107468],{},"0 0 -1.0",[29,107470,107471],{},"观察小球下降速度是否变慢。",[29,107473,104348,107474,104351,107477,107480],{},[59,107475,107476],{},"data.qpos[2] = 2.0",[59,107478,107479],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[29,107482,107483,107484,107487],{},"注释掉 ",[59,107485,107486],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,107489,2031],{"id":2030},[339,107491,107493,107494,107496],{"id":107492},"修改-dataqpos-后位置没有更新","修改 ",[59,107495,103037],{}," 后位置没有更新",[19,107498,104397],{},[51,107500,107501],{"className":439,"code":1321,"language":441,"meta":57,"style":57},[59,107502,107503],{"__ignoreMap":57},[79,107504,107505],{"class":81,"line":82},[79,107506,1321],{"class":228},[339,107508,107509],{"id":107509},"数组维度看不懂",[19,107511,107512],{},"打印模型维度:",[51,107514,107516],{"className":439,"code":107515,"language":441,"meta":57,"style":57},"print(model.nq, model.nv, model.nu)\n",[59,107517,107518],{"__ignoreMap":57},[79,107519,107520,107522],{"class":81,"line":82},[79,107521,1889],{"class":96},[79,107523,107524],{"class":228},"(model.nq, model.nv, model.nu)\n",[347,107526,107527,107535],{},[350,107528,107529],{},[353,107530,107531,107533],{},[356,107532,106490],{"align":358},[356,107534,102683],{"align":358},[367,107536,107537,107547,107557],{},[353,107538,107539,107544],{},[372,107540,107541],{"align":358},[59,107542,107543],{},"nq",[372,107545,107546],{"align":358},"位置变量数量",[353,107548,107549,107554],{},[372,107550,107551],{"align":358},[59,107552,107553],{},"nv",[372,107555,107556],{"align":358},"速度变量数量",[353,107558,107559,107563],{},[372,107560,107561],{"align":358},[59,107562,104105],{},[372,107564,107565],{"align":358},"控制输入数量",[339,107567,107569,107570,107572],{"id":107568},"误以为-qpos-一定等于关节数","误以为 ",[59,107571,1290],{}," 一定等于关节数",[19,107574,107575,107576,84518,107578,107580,107581,107583],{},"不是。例如 ",[59,107577,103564],{},[59,107579,1290],{}," 是 7 维，但 ",[59,107582,1294],{}," 是 6 维。",[339,107585,107587,107588,107590],{"id":107586},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[59,107589,1290],{}," 的第几位",[19,107592,107593],{},"初学时可以先打印：",[51,107595,107597],{"className":439,"code":107596,"language":441,"meta":57,"style":57},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[59,107598,107599,107609,107619,107631],{"__ignoreMap":57},[79,107600,107601,107603,107605,107607],{"class":81,"line":82},[79,107602,1889],{"class":96},[79,107604,455],{"class":228},[79,107606,103388],{"class":89},[79,107608,103391],{"class":228},[79,107610,107611,107613,107615,107617],{"class":81,"line":167},[79,107612,1889],{"class":96},[79,107614,455],{"class":228},[79,107616,103400],{"class":89},[79,107618,103403],{"class":228},[79,107620,107621,107623,107625,107628],{"class":81,"line":178},[79,107622,1889],{"class":96},[79,107624,455],{"class":228},[79,107626,107627],{"class":89},"\"qpos:\"",[79,107629,107630],{"class":228},", data.qpos)\n",[79,107632,107633,107635,107637,107640],{"class":81,"line":545},[79,107634,1889],{"class":96},[79,107636,455],{"class":228},[79,107638,107639],{"class":89},"\"qvel:\"",[79,107641,107642],{"class":228},", data.qvel)\n",[19,107644,107645],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[339,107647,107648],{"id":107648},"仿真结果每次都一样",[19,107650,107651,107652,107654],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[59,107653,1290],{},"、目标点或控制输入。",[14,107656,2125],{"id":2124},[19,107658,107659,107660,26638],{},"Python 控制 MuJoCo 的核心就是读写 ",[59,107661,35398],{},[26,107663,107664,107672,107677,107682],{},[29,107665,107666,107667,1748,107669,107671],{},"用 ",[59,107668,103037],{},[59,107670,103040],{}," 读取状态。",[29,107673,107666,107674,107676],{},[59,107675,2148],{}," 写入控制。",[29,107678,107666,107679,107681],{},[59,107680,103180],{}," 推进时间。",[29,107683,107684,107685,107687],{},"手动改状态后用 ",[59,107686,106174],{}," 刷新派生量。",[19,107689,107690],{},"理解这一章后，就可以进入关节和 actuator 控制。",[2159,107692,107693],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":57,"searchDepth":167,"depth":167,"links":107695},[107696,107697,107698,107705,107709,107710,107711,107721],{"id":16,"depth":167,"text":17},{"id":66,"depth":167,"text":67},{"id":203,"depth":167,"text":204,"children":107699},[107700,107702,107704],{"id":106471,"depth":178,"text":107701},"qpos、qvel、ctrl 是什么",{"id":106549,"depth":178,"text":107703},"mj_step 和 mj_forward 的区别",{"id":106637,"depth":178,"text":106638},{"id":509,"depth":167,"text":510,"children":107706},[107707,107708],{"id":1259,"depth":178,"text":1259},{"id":1407,"depth":178,"text":1407},{"id":1933,"depth":167,"text":1934},{"id":1986,"depth":167,"text":1987},{"id":2030,"depth":167,"text":2031,"children":107712},[107713,107715,107716,107718,107720],{"id":107492,"depth":178,"text":107714},"修改 data.qpos 后位置没有更新",{"id":107509,"depth":178,"text":107509},{"id":107568,"depth":178,"text":107717},"误以为 qpos 一定等于关节数",{"id":107586,"depth":178,"text":107719},"不知道某个元素在 qpos 的第几位",{"id":107648,"depth":178,"text":107648},{"id":2124,"depth":167,"text":2125},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":106241,"description":57},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":107728,"title":107729,"body":107730,"description":57,"extension":2186,"meta":109399,"navigation":541,"path":109400,"seo":109401,"stem":109402,"__hash__":109403},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":107731,"toc":109375},[107732,107735,107737,107740,107742,107766,107769,107787,107790,107792,107794,107818,107820,107834,107836,107877,107879,107903,107905,107908,107939,107941,107954,107957,108022,108030,108034,108037,108071,108077,108080,108083,108122,108124,108143,108147,108190,108192,108221,108224,108230,108233,108235,108625,108627,108639,108641,108652,108654,108657,108686,108694,108697,108732,108735,108737,108745,108748,108750,108761,108771,108791,108794,108830,108842,108890,108909,108951,108963,108991,108996,109017,109026,109044,109047,109081,109084,109104,109107,109126,109132,109134,109137,109143,109149,109159,109162,109168,109177,109179,109225,109227,109233,109239,109242,109245,109265,109268,109274,109280,109282,109305,109308,109311,109320,109323,109358,109360,109363,109369,109372],[10,107733,107729],{"id":107734},"_4关节actuator-与力控制",[14,107736,17],{"id":16},[19,107738,107739],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,107741,24],{},[26,107743,107744,107749,107754,107758,107763],{},[29,107745,107746,107748],{},[59,107747,392],{}," 关节",[29,107750,107751],{},[59,107752,107753],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[29,107755,107756],{},[59,107757,2148],{},[29,107759,107760],{},[59,107761,107762],{},"ctrlrange",[29,107764,107765],{},"读取关节角和角速度",[19,107767,107768],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[51,107770,107772],{"className":439,"code":107771,"language":441,"meta":57,"style":57},"data.ctrl[0] = ...\n",[59,107773,107774],{"__ignoreMap":57},[79,107775,107776,107778,107780,107782,107784],{"class":81,"line":82},[79,107777,1787],{"class":228},[79,107779,759],{"class":96},[79,107781,877],{"class":228},[79,107783,239],{"class":448},[79,107785,107786],{"class":96}," ...\n",[19,107788,107789],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,107791,67],{"id":66},[19,107793,70],{},[51,107795,107796],{"className":73,"code":74,"language":75,"meta":57,"style":57},[59,107797,107798],{"__ignoreMap":57},[79,107799,107800,107802,107804,107806,107808,107810,107812,107814,107816],{"class":81,"line":82},[79,107801,86],{"class":85},[79,107803,90],{"class":89},[79,107805,93],{"class":89},[79,107807,97],{"class":96},[79,107809,100],{"class":89},[79,107811,103],{"class":89},[79,107813,106],{"class":89},[79,107815,109],{"class":89},[79,107817,112],{"class":89},[19,107819,115],{},[51,107821,107822],{"className":73,"code":118,"language":75,"meta":57,"style":57},[59,107823,107824],{"__ignoreMap":57},[79,107825,107826,107828,107830,107832],{"class":81,"line":82},[79,107827,125],{"class":85},[79,107829,93],{"class":89},[79,107831,130],{"class":89},[79,107833,133],{"class":89},[19,107835,136],{},[51,107837,107839],{"className":73,"code":107838,"language":75,"meta":57,"style":57},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[59,107840,107841,107858,107867],{"__ignoreMap":57},[79,107842,107843,107845,107847,107849,107852,107854,107856],{"class":81,"line":82},[79,107844,146],{"class":85},[79,107846,149],{"class":89},[79,107848,152],{"class":96},[79,107850,107851],{"class":89}," mujoco-control",[79,107853,158],{"class":89},[79,107855,161],{"class":96},[79,107857,164],{"class":96},[79,107859,107860,107862,107864],{"class":81,"line":167},[79,107861,146],{"class":85},[79,107863,172],{"class":89},[79,107865,107866],{"class":89}," mujoco-control\n",[79,107868,107869,107871,107873,107875],{"class":81,"line":178},[79,107870,125],{"class":85},[79,107872,93],{"class":89},[79,107874,130],{"class":89},[79,107876,133],{"class":89},[19,107878,189],{},[26,107880,107881,107887,107894,107900],{},[29,107882,107883,107886],{},[59,107884,107885],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[29,107888,107889,107891,107892,497],{},[59,107890,2148],{}," 长度等于 ",[59,107893,104101],{},[29,107895,84210,107896,107899],{},[59,107897,107898],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[29,107901,107902],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,107904,204],{"id":203},[19,107906,107907],{},"关节决定 body 如何运动:",[51,107909,107911],{"className":219,"code":107910,"language":221,"meta":57,"style":57},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[59,107912,107913],{"__ignoreMap":57},[79,107914,107915,107917,107919,107921,107923,107925,107927,107929,107931,107933,107935,107937],{"class":81,"line":82},[79,107916,229],{"class":228},[79,107918,233],{"class":232},[79,107920,236],{"class":85},[79,107922,239],{"class":228},[79,107924,289],{"class":89},[79,107926,245],{"class":85},[79,107928,239],{"class":228},[79,107930,289],{"class":89},[79,107932,253],{"class":85},[79,107934,239],{"class":228},[79,107936,296],{"class":89},[79,107938,261],{"class":228},[19,107940,104980],{},[26,107942,107943,107948,107951],{},[29,107944,107945,107946],{},"名字是 ",[59,107947,392],{},[29,107949,107950],{},"类型是旋转关节",[29,107952,107953],{},"绕 y 轴旋转",[19,107955,107956],{},"actuator 决定如何施加控制:",[51,107958,107960],{"className":219,"code":107959,"language":221,"meta":57,"style":57},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[59,107961,107962,107971,108014],{"__ignoreMap":57},[79,107963,107964,107966,107969],{"class":81,"line":82},[79,107965,229],{"class":228},[79,107967,107968],{"class":232},"actuator",[79,107970,53301],{"class":228},[79,107972,107973,107975,107977,107979,107981,107984,107986,107988,107990,107992,107994,107996,107999,108001,108004,108007,108009,108012],{"class":81,"line":167},[79,107974,54138],{"class":228},[79,107976,313],{"class":232},[79,107978,236],{"class":85},[79,107980,239],{"class":228},[79,107982,107983],{"class":89},"\"hinge_motor\"",[79,107985,323],{"class":85},[79,107987,239],{"class":228},[79,107989,289],{"class":89},[79,107991,330],{"class":85},[79,107993,239],{"class":228},[79,107995,5752],{"class":89},[79,107997,107998],{"class":85}," ctrlrange",[79,108000,239],{"class":228},[79,108002,108003],{"class":89},"\"-2 2\"",[79,108005,108006],{"class":85}," ctrllimited",[79,108008,239],{"class":228},[79,108010,108011],{"class":89},"\"true\"",[79,108013,261],{"class":228},[79,108015,108016,108018,108020],{"class":81,"line":178},[79,108017,53779],{"class":228},[79,108019,107968],{"class":232},[79,108021,53301],{"class":228},[19,108023,108024,108026,108027,497],{},[59,108025,1813],{}," 会变成电机输入，控制输入限制在 ",[59,108028,108029],{},"[-2, 2]",[339,108031,108033],{"id":108032},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,108035,108036],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[347,108038,108039,108049],{},[350,108040,108041],{},[353,108042,108043,108045,108047],{},[356,108044,27772],{"align":358},[356,108046,104628],{"align":358},[356,108048,102717],{"align":358},[367,108050,108051,108061],{},[353,108052,108053,108055,108058],{},[372,108054,233],{"align":358},[372,108056,108057],{"align":358},"定义能怎么动",[372,108059,108060],{"align":358},"门轴允许门旋转",[353,108062,108063,108065,108068],{},[372,108064,107968],{"align":358},[372,108066,108067],{"align":358},"定义怎么施力或控制",[372,108069,108070],{"align":358},"人推门、马达带动门",[19,108072,108073,108074,108076],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[59,108075,2148],{}," 主动控制它。",[19,108078,108079],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[339,108081,34],{"id":108082},"hinge-joint",[51,108084,108086],{"className":219,"code":108085,"language":221,"meta":57,"style":57},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[59,108087,108088],{"__ignoreMap":57},[79,108089,108090,108092,108094,108096,108098,108100,108102,108104,108106,108108,108110,108112,108115,108117,108120],{"class":81,"line":82},[79,108091,229],{"class":228},[79,108093,233],{"class":232},[79,108095,236],{"class":85},[79,108097,239],{"class":228},[79,108099,289],{"class":89},[79,108101,245],{"class":85},[79,108103,239],{"class":228},[79,108105,289],{"class":89},[79,108107,253],{"class":85},[79,108109,239],{"class":228},[79,108111,296],{"class":89},[79,108113,108114],{"class":85}," damping",[79,108116,239],{"class":228},[79,108118,108119],{"class":89},"\"0.1\"",[79,108121,261],{"class":228},[19,108123,489],{},[26,108125,108126,108132,108137],{},[29,108127,108128,108131],{},[59,108129,108130],{},"type=\"hinge\"","：只能绕一个轴旋转。",[29,108133,108134,108136],{},[59,108135,2040],{},"：绕 y 轴旋转。",[29,108138,108139,108142],{},[59,108140,108141],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[339,108144,108146],{"id":108145},"motor-actuator","motor actuator",[51,108148,108150],{"className":219,"code":108149,"language":221,"meta":57,"style":57},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[59,108151,108152],{"__ignoreMap":57},[79,108153,108154,108156,108158,108160,108162,108164,108166,108168,108170,108172,108174,108176,108178,108180,108182,108184,108186,108188],{"class":81,"line":82},[79,108155,229],{"class":228},[79,108157,313],{"class":232},[79,108159,236],{"class":85},[79,108161,239],{"class":228},[79,108163,107983],{"class":89},[79,108165,323],{"class":85},[79,108167,239],{"class":228},[79,108169,289],{"class":89},[79,108171,330],{"class":85},[79,108173,239],{"class":228},[79,108175,5752],{"class":89},[79,108177,107998],{"class":85},[79,108179,239],{"class":228},[79,108181,108003],{"class":89},[79,108183,108006],{"class":85},[79,108185,239],{"class":228},[79,108187,108011],{"class":89},[79,108189,261],{"class":228},[19,108191,489],{},[26,108193,108194,108203,108209,108215],{},[29,108195,108196,108199,108200,108202],{},[59,108197,108198],{},"joint=\"hinge\"","：这个电机作用在名为 ",[59,108201,392],{}," 的关节上。",[29,108204,108205,108208],{},[59,108206,108207],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[29,108210,108211,108214],{},[59,108212,108213],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[29,108216,108217,108220],{},[59,108218,108219],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,108222,108223],{},"简单理解：",[51,108225,108228],{"className":108226,"code":108227,"language":56,"meta":57},[54],"实际施加效果 ≈ data.ctrl[0] * gear\n",[59,108229,108227],{"__ignoreMap":57},[19,108231,108232],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,108234,510],{"id":509},[51,108236,108238],{"className":439,"code":108237,"language":441,"meta":57,"style":57},"import math\n\nimport mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"one_link_motor\">\n  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n\n      \u003Cbody name=\"link\" pos=\"0 0 0\">\n        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n        \u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\" rgba=\"0.1 0.4 1 1\"\u002F>\n      \u003C\u002Fbody>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\n  \u003Cactuator>\n    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n  \u003C\u002Factuator>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    print(\"nq:\", model.nq)\n    print(\"nv:\", model.nv)\n    print(\"nu:\", model.nu)\n\n    if model.nu != 1:\n        raise RuntimeError(\"expected exactly one actuator\")\n\n    for step in range(2000):\n        t = step * model.opt.timestep\n        data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n        mujoco.mj_step(model, data)\n\n    print(\"time:\", data.time)\n    print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n    print(\"joint qvel:\", np.round(data.qvel.copy(), 4))\n    print(\"last ctrl:\", data.ctrl.copy())\n\n\nif __name__ == \"__main__\":\n    main()\n",[59,108239,108240,108247,108251,108257,108267,108271,108275,108283,108288,108293,108297,108301,108306,108311,108315,108320,108325,108330,108334,108338,108342,108346,108350,108355,108359,108363,108367,108371,108375,108387,108399,108407,108411,108421,108431,108441,108445,108458,108471,108475,108492,108506,108540,108544,108548,108559,108574,108589,108601,108605,108609,108621],{"__ignoreMap":57},[79,108241,108242,108244],{"class":81,"line":82},[79,108243,520],{"class":448},[79,108245,108246],{"class":228}," math\n",[79,108248,108249],{"class":81,"line":167},[79,108250,542],{"emptyLinePlaceholder":541},[79,108252,108253,108255],{"class":81,"line":178},[79,108254,520],{"class":448},[79,108256,523],{"class":228},[79,108258,108259,108261,108263,108265],{"class":81,"line":545},[79,108260,520],{"class":448},[79,108262,530],{"class":228},[79,108264,533],{"class":448},[79,108266,536],{"class":228},[79,108268,108269],{"class":81,"line":550},[79,108270,542],{"emptyLinePlaceholder":541},[79,108272,108273],{"class":81,"line":562},[79,108274,542],{"emptyLinePlaceholder":541},[79,108276,108277,108279,108281],{"class":81,"line":568},[79,108278,553],{"class":96},[79,108280,556],{"class":448},[79,108282,559],{"class":89},[79,108284,108285],{"class":81,"line":574},[79,108286,108287],{"class":89},"\u003Cmujoco model=\"one_link_motor\">\n",[79,108289,108290],{"class":81,"line":579},[79,108291,108292],{"class":89},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[79,108294,108295],{"class":81,"line":585},[79,108296,542],{"emptyLinePlaceholder":541},[79,108298,108299],{"class":81,"line":591},[79,108300,582],{"class":89},[79,108302,108303],{"class":81,"line":596},[79,108304,108305],{"class":89},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[79,108307,108308],{"class":81,"line":602},[79,108309,108310],{"class":89},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[79,108312,108313],{"class":81,"line":608},[79,108314,542],{"emptyLinePlaceholder":541},[79,108316,108317],{"class":81,"line":614},[79,108318,108319],{"class":89},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[79,108321,108322],{"class":81,"line":619},[79,108323,108324],{"class":89},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[79,108326,108327],{"class":81,"line":625},[79,108328,108329],{"class":89},"        \u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\" rgba=\"0.1 0.4 1 1\"\u002F>\n",[79,108331,108332],{"class":81,"line":631},[79,108333,640],{"class":89},[79,108335,108336],{"class":81,"line":637},[79,108337,646],{"class":89},[79,108339,108340],{"class":81,"line":643},[79,108341,652],{"class":89},[79,108343,108344],{"class":81,"line":649},[79,108345,542],{"emptyLinePlaceholder":541},[79,108347,108348],{"class":81,"line":655},[79,108349,663],{"class":89},[79,108351,108352],{"class":81,"line":660},[79,108353,108354],{"class":89},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[79,108356,108357],{"class":81,"line":666},[79,108358,675],{"class":89},[79,108360,108361],{"class":81,"line":672},[79,108362,681],{"class":89},[79,108364,108365],{"class":81,"line":678},[79,108366,687],{"class":89},[79,108368,108369],{"class":81,"line":684},[79,108370,542],{"emptyLinePlaceholder":541},[79,108372,108373],{"class":81,"line":690},[79,108374,542],{"emptyLinePlaceholder":541},[79,108376,108377,108379,108381,108383,108385],{"class":81,"line":695},[79,108378,703],{"class":448},[79,108380,826],{"class":85},[79,108382,829],{"class":228},[79,108384,832],{"class":96},[79,108386,745],{"class":228},[79,108388,108389,108391,108393,108395,108397],{"class":81,"line":700},[79,108390,840],{"class":228},[79,108392,239],{"class":448},[79,108394,845],{"class":228},[79,108396,553],{"class":96},[79,108398,850],{"class":228},[79,108400,108401,108403,108405],{"class":81,"line":712},[79,108402,856],{"class":228},[79,108404,239],{"class":448},[79,108406,861],{"class":228},[79,108408,108409],{"class":81,"line":721},[79,108410,542],{"emptyLinePlaceholder":541},[79,108412,108413,108415,108417,108419],{"class":81,"line":726},[79,108414,1161],{"class":96},[79,108416,455],{"class":228},[79,108418,103388],{"class":89},[79,108420,103391],{"class":228},[79,108422,108423,108425,108427,108429],{"class":81,"line":731},[79,108424,1161],{"class":96},[79,108426,455],{"class":228},[79,108428,103400],{"class":89},[79,108430,103403],{"class":228},[79,108432,108433,108435,108437,108439],{"class":81,"line":748},[79,108434,1161],{"class":96},[79,108436,455],{"class":228},[79,108438,103412],{"class":89},[79,108440,103415],{"class":228},[79,108442,108443],{"class":81,"line":765},[79,108444,542],{"emptyLinePlaceholder":541},[79,108446,108447,108449,108452,108454,108456],{"class":81,"line":780},[79,108448,5176],{"class":448},[79,108450,108451],{"class":228}," model.nu ",[79,108453,22973],{"class":448},[79,108455,27137],{"class":96},[79,108457,745],{"class":228},[79,108459,108460,108462,108464,108466,108469],{"class":81,"line":811},[79,108461,105359],{"class":448},[79,108463,105362],{"class":96},[79,108465,455],{"class":228},[79,108467,108468],{"class":89},"\"expected exactly one actuator\"",[79,108470,850],{"class":228},[79,108472,108473],{"class":81,"line":816},[79,108474,542],{"emptyLinePlaceholder":541},[79,108476,108477,108479,108481,108483,108485,108487,108490],{"class":81,"line":821},[79,108478,915],{"class":448},[79,108480,918],{"class":228},[79,108482,921],{"class":448},[79,108484,924],{"class":96},[79,108486,455],{"class":228},[79,108488,108489],{"class":96},"2000",[79,108491,932],{"class":228},[79,108493,108494,108497,108499,108501,108503],{"class":81,"line":837},[79,108495,108496],{"class":228},"        t ",[79,108498,239],{"class":448},[79,108500,918],{"class":228},[79,108502,473],{"class":448},[79,108504,108505],{"class":228}," model.opt.timestep\n",[79,108507,108508,108510,108512,108514,108516,108519,108521,108524,108526,108528,108531,108533,108535,108537],{"class":81,"line":853},[79,108509,1035],{"class":228},[79,108511,759],{"class":96},[79,108513,877],{"class":228},[79,108515,239],{"class":448},[79,108517,108518],{"class":96}," 1.5",[79,108520,467],{"class":448},[79,108522,108523],{"class":228}," math.sin(",[79,108525,1747],{"class":96},[79,108527,467],{"class":448},[79,108529,108530],{"class":228}," math.pi ",[79,108532,473],{"class":448},[79,108534,998],{"class":96},[79,108536,467],{"class":448},[79,108538,108539],{"class":228}," t)\n",[79,108541,108542],{"class":81,"line":864},[79,108543,1050],{"class":228},[79,108545,108546],{"class":81,"line":869},[79,108547,542],{"emptyLinePlaceholder":541},[79,108549,108550,108552,108554,108557],{"class":81,"line":885},[79,108551,1161],{"class":96},[79,108553,455],{"class":228},[79,108555,108556],{"class":89},"\"time:\"",[79,108558,103427],{"class":228},[79,108560,108561,108563,108565,108568,108570,108572],{"class":81,"line":891},[79,108562,1161],{"class":96},[79,108564,455],{"class":228},[79,108566,108567],{"class":89},"\"joint qpos:\"",[79,108569,106844],{"class":228},[79,108571,2537],{"class":96},[79,108573,1150],{"class":228},[79,108575,108576,108578,108580,108583,108585,108587],{"class":81,"line":896},[79,108577,1161],{"class":96},[79,108579,455],{"class":228},[79,108581,108582],{"class":89},"\"joint qvel:\"",[79,108584,106860],{"class":228},[79,108586,2537],{"class":96},[79,108588,1150],{"class":228},[79,108590,108591,108593,108595,108598],{"class":81,"line":907},[79,108592,1161],{"class":96},[79,108594,455],{"class":228},[79,108596,108597],{"class":89},"\"last ctrl:\"",[79,108599,108600],{"class":228},", data.ctrl.copy())\n",[79,108602,108603],{"class":81,"line":912},[79,108604,542],{"emptyLinePlaceholder":541},[79,108606,108607],{"class":81,"line":935},[79,108608,542],{"emptyLinePlaceholder":541},[79,108610,108611,108613,108615,108617,108619],{"class":81,"line":946},[79,108612,1210],{"class":448},[79,108614,1213],{"class":96},[79,108616,1100],{"class":448},[79,108618,1218],{"class":89},[79,108620,745],{"class":228},[79,108622,108623],{"class":81,"line":960},[79,108624,1226],{"class":228},[19,108626,1229],{},[51,108628,108630],{"className":73,"code":108629,"language":75,"meta":57,"style":57},"touch ch4_joint_motor.py\n",[59,108631,108632],{"__ignoreMap":57},[79,108633,108634,108636],{"class":81,"line":82},[79,108635,1239],{"class":85},[79,108637,108638],{"class":89}," ch4_joint_motor.py\n",[19,108640,104244],{},[51,108642,108644],{"className":73,"code":108643,"language":75,"meta":57,"style":57},"python ch4_joint_motor.py\n",[59,108645,108646],{"__ignoreMap":57},[79,108647,108648,108650],{"class":81,"line":82},[79,108649,441],{"class":85},[79,108651,108638],{"class":89},[339,108653,1259],{"id":1259},[19,108655,108656],{},"检查 actuator 数量：",[51,108658,108660],{"className":439,"code":108659,"language":441,"meta":57,"style":57},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[59,108661,108662,108674],{"__ignoreMap":57},[79,108663,108664,108666,108668,108670,108672],{"class":81,"line":82},[79,108665,1210],{"class":448},[79,108667,108451],{"class":228},[79,108669,22973],{"class":448},[79,108671,27137],{"class":96},[79,108673,745],{"class":228},[79,108675,108676,108678,108680,108682,108684],{"class":81,"line":167},[79,108677,105821],{"class":448},[79,108679,105362],{"class":96},[79,108681,455],{"class":228},[79,108683,108468],{"class":89},[79,108685,850],{"class":228},[19,108687,108688,108690,108691,108693],{},[59,108689,104101],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[59,108692,2148],{}," 长度应该是 1。",[19,108695,108696],{},"产生正弦控制信号：",[51,108698,108700],{"className":439,"code":108699,"language":441,"meta":57,"style":57},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[59,108701,108702],{"__ignoreMap":57},[79,108703,108704,108706,108708,108710,108712,108714,108716,108718,108720,108722,108724,108726,108728,108730],{"class":81,"line":82},[79,108705,1787],{"class":228},[79,108707,759],{"class":96},[79,108709,877],{"class":228},[79,108711,239],{"class":448},[79,108713,108518],{"class":96},[79,108715,467],{"class":448},[79,108717,108523],{"class":228},[79,108719,1747],{"class":96},[79,108721,467],{"class":448},[79,108723,108530],{"class":228},[79,108725,473],{"class":448},[79,108727,998],{"class":96},[79,108729,467],{"class":448},[79,108731,108539],{"class":228},[19,108733,108734],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,108736,103617],{},[51,108738,108739],{"className":439,"code":1801,"language":441,"meta":57,"style":57},[59,108740,108741],{"__ignoreMap":57},[79,108742,108743],{"class":81,"line":82},[79,108744,1801],{"class":228},[19,108746,108747],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[339,108749,1407],{"id":1407},[51,108751,108753],{"className":439,"code":108752,"language":441,"meta":57,"style":57},"import math\n",[59,108754,108755],{"__ignoreMap":57},[79,108756,108757,108759],{"class":81,"line":82},[79,108758,520],{"class":448},[79,108760,108246],{"class":228},[19,108762,108763,108764,1748,108767,108770],{},"导入 Python 标准库里的数学模块。后面要用 ",[59,108765,108766],{},"math.sin",[59,108768,108769],{},"math.pi"," 生成周期变化的控制信号。",[51,108772,108773],{"className":439,"code":105612,"language":441,"meta":57,"style":57},[59,108774,108775,108781],{"__ignoreMap":57},[79,108776,108777,108779],{"class":81,"line":82},[79,108778,520],{"class":448},[79,108780,523],{"class":228},[79,108782,108783,108785,108787,108789],{"class":81,"line":167},[79,108784,520],{"class":448},[79,108786,530],{"class":228},[79,108788,533],{"class":448},[79,108790,536],{"class":228},[19,108792,108793],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[51,108795,108796],{"className":219,"code":108085,"language":221,"meta":57,"style":57},[59,108797,108798],{"__ignoreMap":57},[79,108799,108800,108802,108804,108806,108808,108810,108812,108814,108816,108818,108820,108822,108824,108826,108828],{"class":81,"line":82},[79,108801,229],{"class":228},[79,108803,233],{"class":232},[79,108805,236],{"class":85},[79,108807,239],{"class":228},[79,108809,289],{"class":89},[79,108811,245],{"class":85},[79,108813,239],{"class":228},[79,108815,289],{"class":89},[79,108817,253],{"class":85},[79,108819,239],{"class":228},[79,108821,296],{"class":89},[79,108823,108114],{"class":85},[79,108825,239],{"class":228},[79,108827,108119],{"class":89},[79,108829,261],{"class":228},[19,108831,108832,108833,108835,108836,108838,108839,108841],{},"这行定义关节。",[59,108834,392],{}," 表示旋转关节。",[59,108837,2040],{}," 表示绕 y 轴旋转。",[59,108840,108141],{}," 表示有一点阻尼，运动不会完全无损耗。",[51,108843,108845],{"className":219,"code":108844,"language":221,"meta":57,"style":57},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[59,108846,108847],{"__ignoreMap":57},[79,108848,108849,108851,108853,108855,108857,108860,108862,108864,108867,108870,108872,108875,108877,108879,108881,108883,108885,108888],{"class":81,"line":82},[79,108850,229],{"class":228},[79,108852,103086],{"class":232},[79,108854,236],{"class":85},[79,108856,239],{"class":228},[79,108858,108859],{"class":89},"\"link_geom\"",[79,108861,245],{"class":85},[79,108863,239],{"class":228},[79,108865,108866],{"class":89},"\"capsule\"",[79,108868,108869],{"class":85}," fromto",[79,108871,239],{"class":228},[79,108873,108874],{"class":89},"\"0 0 0 0 0 0.5\"",[79,108876,103102],{"class":85},[79,108878,239],{"class":228},[79,108880,105704],{"class":89},[79,108882,103944],{"class":85},[79,108884,239],{"class":228},[79,108886,108887],{"class":89},"\"0.5\"",[79,108889,261],{"class":228},[19,108891,108892,108893,108895,108896,108898,108899,108902,108903,497,108906,108908],{},"这行定义摆杆的形状。",[59,108894,105093],{}," 是胶囊体，适合表示杆子。",[59,108897,2044],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[59,108900,108901],{},"(0,0,0)"," 延伸到 ",[59,108904,108905],{},"(0,0,0.5)",[59,108907,105098],{}," 是半径。",[51,108910,108911],{"className":219,"code":108149,"language":221,"meta":57,"style":57},[59,108912,108913],{"__ignoreMap":57},[79,108914,108915,108917,108919,108921,108923,108925,108927,108929,108931,108933,108935,108937,108939,108941,108943,108945,108947,108949],{"class":81,"line":82},[79,108916,229],{"class":228},[79,108918,313],{"class":232},[79,108920,236],{"class":85},[79,108922,239],{"class":228},[79,108924,107983],{"class":89},[79,108926,323],{"class":85},[79,108928,239],{"class":228},[79,108930,289],{"class":89},[79,108932,330],{"class":85},[79,108934,239],{"class":228},[79,108936,5752],{"class":89},[79,108938,107998],{"class":85},[79,108940,239],{"class":228},[79,108942,108003],{"class":89},[79,108944,108006],{"class":85},[79,108946,239],{"class":228},[79,108948,108011],{"class":89},[79,108950,261],{"class":228},[19,108952,108953,108954,108956,108957,108959,108960,108962],{},"这行定义电机。它作用在 ",[59,108955,392],{}," 关节上。",[59,108958,2004],{}," 可以理解成放大倍数。",[59,108961,107762],{}," 限制控制输入范围。",[51,108964,108965],{"className":439,"code":108659,"language":441,"meta":57,"style":57},[59,108966,108967,108979],{"__ignoreMap":57},[79,108968,108969,108971,108973,108975,108977],{"class":81,"line":82},[79,108970,1210],{"class":448},[79,108972,108451],{"class":228},[79,108974,22973],{"class":448},[79,108976,27137],{"class":96},[79,108978,745],{"class":228},[79,108980,108981,108983,108985,108987,108989],{"class":81,"line":167},[79,108982,105821],{"class":448},[79,108984,105362],{"class":96},[79,108986,455],{"class":228},[79,108988,108468],{"class":89},[79,108990,850],{"class":228},[19,108992,108993,108995],{},[59,108994,104101],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[51,108997,108999],{"className":439,"code":108998,"language":441,"meta":57,"style":57},"for step in range(2000):\n",[59,109000,109001],{"__ignoreMap":57},[79,109002,109003,109005,109007,109009,109011,109013,109015],{"class":81,"line":82},[79,109004,1638],{"class":448},[79,109006,918],{"class":228},[79,109008,921],{"class":448},[79,109010,924],{"class":96},[79,109012,455],{"class":228},[79,109014,108489],{"class":96},[79,109016,932],{"class":228},[19,109018,109019,109020,109022,109023,109025],{},"循环 2000 步。这里没有用 ",[59,109021,3231],{},"，而是用 ",[59,109024,1656],{},"，因为后面要用当前步数计算时间。",[51,109027,109029],{"className":439,"code":109028,"language":441,"meta":57,"style":57},"t = step * model.opt.timestep\n",[59,109030,109031],{"__ignoreMap":57},[79,109032,109033,109036,109038,109040,109042],{"class":81,"line":82},[79,109034,109035],{"class":228},"t ",[79,109037,239],{"class":448},[79,109039,918],{"class":228},[79,109041,473],{"class":448},[79,109043,108505],{"class":228},[19,109045,109046],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[51,109048,109049],{"className":439,"code":108699,"language":441,"meta":57,"style":57},[59,109050,109051],{"__ignoreMap":57},[79,109052,109053,109055,109057,109059,109061,109063,109065,109067,109069,109071,109073,109075,109077,109079],{"class":81,"line":82},[79,109054,1787],{"class":228},[79,109056,759],{"class":96},[79,109058,877],{"class":228},[79,109060,239],{"class":448},[79,109062,108518],{"class":96},[79,109064,467],{"class":448},[79,109066,108523],{"class":228},[79,109068,1747],{"class":96},[79,109070,467],{"class":448},[79,109072,108530],{"class":228},[79,109074,473],{"class":448},[79,109076,998],{"class":96},[79,109078,467],{"class":448},[79,109080,108539],{"class":228},[19,109082,109083],{},"这行给电机输入一个正弦波。拆开看：",[26,109085,109086,109092,109098],{},[29,109087,109088,109091],{},[59,109089,109090],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[29,109093,109094,109097],{},[59,109095,109096],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[29,109099,109100,109103],{},[59,109101,109102],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,109105,109106],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[51,109108,109110],{"className":439,"code":109109,"language":441,"meta":57,"style":57},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[59,109111,109112],{"__ignoreMap":57},[79,109113,109114,109116,109118,109120,109122,109124],{"class":81,"line":82},[79,109115,1889],{"class":96},[79,109117,455],{"class":228},[79,109119,108567],{"class":89},[79,109121,106844],{"class":228},[79,109123,2537],{"class":96},[79,109125,1150],{"class":228},[19,109127,109128,109129,109131],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[59,109130,103037],{}," 只有一个数。",[14,109133,1934],{"id":1933},[19,109135,109136],{},"输出类似:",[51,109138,109141],{"className":109139,"code":109140,"language":56,"meta":57},[54],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[59,109142,109140],{"__ignoreMap":57},[19,109144,109145,109146,109148],{},"这里 ",[59,109147,1813],{}," 是电机输入。",[19,109150,109151,109154,109155,109158],{},[59,109152,109153],{},"joint qpos"," 是关节角度，单位通常是弧度。",[59,109156,109157],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,109160,109161],{},"角度单位提示：",[51,109163,109166],{"className":109164,"code":109165,"language":56,"meta":57},[54],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[59,109167,109165],{"__ignoreMap":57},[19,109169,109170,109171,109173,109174,109176],{},"如果你看到 ",[59,109172,1290],{}," 是 ",[59,109175,1751],{},"，大约就是 28.6 度。",[14,109178,1987],{"id":1986},[26,109180,109181,109188,109191,109198,109201,109209,109217],{},[29,109182,104348,109183,104351,109185,497],{},[59,109184,108207],{},[59,109186,109187],{},"gear=\"5\"",[29,109189,109190],{},"重新运行，观察关节运动是否更剧烈。",[29,109192,104348,109193,104351,109195,497],{},[59,109194,107762],{},[59,109196,109197],{},"-0.2 0.2",[29,109199,109200],{},"重新运行，观察控制能力是否变弱。",[29,109202,109203,109204,109206,109207,497],{},"去掉 actuator，确认 ",[59,109205,104101],{}," 变成 ",[59,109208,759],{},[29,109210,104348,109211,104351,109213,109216],{},[59,109212,108141],{},[59,109214,109215],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[29,109218,104348,109219,104351,109221,109224],{},[59,109220,2040],{},[59,109222,109223],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,109226,2031],{"id":2030},[339,109228,109230],{"id":109229},"indexerror-index-0-is-out-of-bounds",[59,109231,109232],{},"IndexError: index 0 is out of bounds",[19,109234,109235,109236,109238],{},"原因是 ",[59,109237,107898],{},"，没有 actuator。",[339,109240,109241],{"id":109241},"关节几乎不动",[19,109243,109244],{},"可能原因:",[26,109246,109247,109252,109256,109262],{},[29,109248,109249,109251],{},[59,109250,2004],{}," 太小",[29,109253,109254,109251],{},[59,109255,107762],{},[29,109257,109258,109261],{},[59,109259,109260],{},"damping"," 太大",[29,109263,109264],{},"重力方向导致运动不明显",[339,109266,109267],{"id":109267},"模型编译失败",[19,109269,109270,109271,109273],{},"检查 actuator 引用的 ",[59,109272,108198],{}," 是否存在，joint 名称是否拼写一致。",[339,109275,109277,109279],{"id":109276},"datactrl0-写了但没有效果",[59,109278,1813],{}," 写了但没有效果",[19,109281,104509],{},[26,109283,109284,109289,109292,109297,109302],{},[29,109285,109286,109288],{},[59,109287,104101],{}," 是否大于 0。",[29,109290,109291],{},"motor 是否引用了正确 joint。",[29,109293,109294,109296],{},[59,109295,2004],{}," 是否太小。",[29,109298,109299,109301],{},[59,109300,107762],{}," 是否把输入限制得太小。",[29,109303,109304],{},"body 是否真的有可动 joint。",[339,109306,109307],{"id":109307},"控制输入超过范围会怎样",[19,109309,109310],{},"如果设置了：",[51,109312,109314],{"className":219,"code":109313,"language":221,"meta":57,"style":57},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[59,109315,109316],{"__ignoreMap":57},[79,109317,109318],{"class":81,"line":82},[79,109319,109313],{"class":228},[19,109321,109322],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[51,109324,109326],{"className":439,"code":109325,"language":441,"meta":57,"style":57},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[59,109327,109328,109346],{"__ignoreMap":57},[79,109329,109330,109332,109334,109336,109338,109340,109342,109344],{"class":81,"line":82},[79,109331,1337],{"class":228},[79,109333,239],{"class":448},[79,109335,1013],{"class":228},[79,109337,478],{"class":448},[79,109339,1747],{"class":96},[79,109341,1020],{"class":228},[79,109343,1747],{"class":96},[79,109345,850],{"class":228},[79,109347,109348,109350,109352,109354,109356],{"class":81,"line":167},[79,109349,1787],{"class":228},[79,109351,759],{"class":96},[79,109353,877],{"class":228},[79,109355,239],{"class":448},[79,109357,1044],{"class":228},[14,109359,2125],{"id":2124},[19,109361,109362],{},"这一章建立了控制任务的基本形式：",[51,109364,109367],{"className":109365,"code":109366,"language":56,"meta":57},[54],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[59,109368,109366],{"__ignoreMap":57},[19,109370,109371],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[2159,109373,109374],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":57,"searchDepth":167,"depth":167,"links":109376},[109377,109378,109379,109384,109388,109389,109390,109398],{"id":16,"depth":167,"text":17},{"id":66,"depth":167,"text":67},{"id":203,"depth":167,"text":204,"children":109380},[109381,109382,109383],{"id":108032,"depth":178,"text":108033},{"id":108082,"depth":178,"text":34},{"id":108145,"depth":178,"text":108146},{"id":509,"depth":167,"text":510,"children":109385},[109386,109387],{"id":1259,"depth":178,"text":1259},{"id":1407,"depth":178,"text":1407},{"id":1933,"depth":167,"text":1934},{"id":1986,"depth":167,"text":1987},{"id":2030,"depth":167,"text":2031,"children":109391},[109392,109393,109394,109395,109397],{"id":109229,"depth":178,"text":109232},{"id":109241,"depth":178,"text":109241},{"id":109267,"depth":178,"text":109267},{"id":109276,"depth":178,"text":109396},"data.ctrl[0] 写了但没有效果",{"id":109307,"depth":178,"text":109307},{"id":2124,"depth":167,"text":2125},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":107729,"description":57},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":109405,"title":109406,"body":109407,"description":57,"extension":2186,"meta":111316,"navigation":541,"path":111317,"seo":111318,"stem":111319,"__hash__":111320},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":109408,"toc":111292},[109409,109412,109414,109417,109425,109428,109445,109448,109473,109476,109522,109524,109526,109581,109583,109602,109604,109647,109650,109667,109670,109686,109696,109703,109705,109708,109711,109745,109748,109796,109800,109803,109817,109826,109830,109833,109858,109861,109865,109878,109881,109887,109890,109905,109907,109910,110170,110172,110184,110187,110499,110501,110513,110515,110518,110533,110538,110541,110563,110566,110569,110603,110606,110610,110621,110624,110641,110644,110658,110665,110685,110692,110706,110709,110721,110736,110756,110759,110781,110784,110788,110803,110814,110829,110832,110862,110878,110907,110915,110939,110942,110960,110970,110982,110989,110998,111004,111013,111016,111018,111027,111030,111045,111047,111050,111061,111064,111075,111078,111096,111098,111115,111118,111146,111148,111152,111155,111185,111191,111194,111198,111206,111209,111211,111232,111235,111238,111254,111257,111273,111275,111278,111289],[10,109410,109406],{"id":109411},"_5viewer-可视化与-renderer-离屏渲染",[14,109413,17],{"id":16},[19,109415,109416],{},"本章掌握两类可视化方式:",[26,109418,109419,109422],{},[29,109420,109421],{},"交互式 viewer: 适合人工观察仿真",[29,109423,109424],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,109426,109427],{},"使用官方接口:",[51,109429,109431],{"className":439,"code":109430,"language":441,"meta":57,"style":57},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[59,109432,109433,109440],{"__ignoreMap":57},[79,109434,109435,109437],{"class":81,"line":82},[79,109436,520],{"class":448},[79,109438,109439],{"class":228}," mujoco.viewer\n",[79,109441,109442],{"class":81,"line":167},[79,109443,109444],{"class":228},"mujoco.viewer.launch_passive(model, data)\n",[19,109446,109447],{},"以及:",[51,109449,109451],{"className":439,"code":109450,"language":441,"meta":57,"style":57},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[59,109452,109453,109463],{"__ignoreMap":57},[79,109454,109455,109458,109460],{"class":81,"line":82},[79,109456,109457],{"class":228},"renderer ",[79,109459,239],{"class":448},[79,109461,109462],{"class":228}," mujoco.Renderer(model)\n",[79,109464,109465,109468,109470],{"class":81,"line":167},[79,109466,109467],{"class":228},"image ",[79,109469,239],{"class":448},[79,109471,109472],{"class":228}," renderer.render()\n",[19,109474,109475],{},"新手建议先理解二者区别：",[347,109477,109478,109494],{},[350,109479,109480],{},[353,109481,109482,109485,109488,109491],{},[356,109483,109484],{"align":358},"工具",[356,109486,109487],{"align":358},"用途",[356,109489,109490],{"align":358},"是否打开窗口",[356,109492,109493],{"align":358},"常见场景",[367,109495,109496,109509],{},[353,109497,109498,109501,109504,109506],{},[372,109499,109500],{"align":358},"Viewer",[372,109502,109503],{"align":358},"人眼实时观察仿真",[372,109505,106581],{"align":358},[372,109507,109508],{"align":358},"调试模型、看控制效果",[353,109510,109511,109514,109517,109519],{},[372,109512,109513],{"align":358},"Renderer",[372,109515,109516],{"align":358},"生成图像数组",[372,109518,106594],{"align":358},[372,109520,109521],{"align":358},"保存图片、训练视觉策略、服务器批量采集",[14,109523,67],{"id":66},[19,109525,70],{},[51,109527,109529],{"className":73,"code":109528,"language":75,"meta":57,"style":57},"sudo dnf install -y \\\n  mesa-libGL mesa-libGLU mesa-dri-drivers \\\n  libglvnd-glx libglvnd-opengl \\\n  glfw glfw-devel \\\n  libX11 libXcursor libXi libXinerama libXrandr\n",[59,109530,109531,109543,109553,109561,109569],{"__ignoreMap":57},[79,109532,109533,109535,109537,109539,109541],{"class":81,"line":82},[79,109534,86],{"class":85},[79,109536,90],{"class":89},[79,109538,93],{"class":89},[79,109540,97],{"class":96},[79,109542,26698],{"class":96},[79,109544,109545,109547,109549,109551],{"class":81,"line":167},[79,109546,102787],{"class":89},[79,109548,102790],{"class":89},[79,109550,109],{"class":89},[79,109552,26698],{"class":96},[79,109554,109555,109557,109559],{"class":81,"line":178},[79,109556,102799],{"class":89},[79,109558,102802],{"class":89},[79,109560,26698],{"class":96},[79,109562,109563,109565,109567],{"class":81,"line":545},[79,109564,102809],{"class":89},[79,109566,102812],{"class":89},[79,109568,26698],{"class":96},[79,109570,109571,109573,109575,109577,109579],{"class":81,"line":550},[79,109572,102819],{"class":89},[79,109574,102822],{"class":89},[79,109576,102825],{"class":89},[79,109578,102828],{"class":89},[79,109580,104450],{"class":89},[19,109582,115],{},[51,109584,109586],{"className":73,"code":109585,"language":75,"meta":57,"style":57},"pip install \"mujoco>=2.3\" numpy pillow\n",[59,109587,109588],{"__ignoreMap":57},[79,109589,109590,109592,109594,109596,109599],{"class":81,"line":82},[79,109591,125],{"class":85},[79,109593,93],{"class":89},[79,109595,130],{"class":89},[79,109597,109598],{"class":89}," numpy",[79,109600,109601],{"class":89}," pillow\n",[19,109603,136],{},[51,109605,109607],{"className":73,"code":109606,"language":75,"meta":57,"style":57},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[59,109608,109609,109626,109635],{"__ignoreMap":57},[79,109610,109611,109613,109615,109617,109620,109622,109624],{"class":81,"line":82},[79,109612,146],{"class":85},[79,109614,149],{"class":89},[79,109616,152],{"class":96},[79,109618,109619],{"class":89}," mujoco-render",[79,109621,158],{"class":89},[79,109623,161],{"class":96},[79,109625,164],{"class":96},[79,109627,109628,109630,109632],{"class":81,"line":167},[79,109629,146],{"class":85},[79,109631,172],{"class":89},[79,109633,109634],{"class":89}," mujoco-render\n",[79,109636,109637,109639,109641,109643,109645],{"class":81,"line":178},[79,109638,125],{"class":85},[79,109640,93],{"class":89},[79,109642,130],{"class":89},[79,109644,109598],{"class":89},[79,109646,109601],{"class":89},[19,109648,109649],{},"离屏渲染后端:",[51,109651,109653],{"className":73,"code":109652,"language":75,"meta":57,"style":57},"export MUJOCO_GL=egl\n",[59,109654,109655],{"__ignoreMap":57},[79,109656,109657,109659,109662,109664],{"class":81,"line":82},[79,109658,27062],{"class":448},[79,109660,109661],{"class":228}," MUJOCO_GL",[79,109663,239],{"class":448},[79,109665,109666],{"class":228},"egl\n",[19,109668,109669],{},"或:",[51,109671,109673],{"className":73,"code":109672,"language":75,"meta":57,"style":57},"export MUJOCO_GL=osmesa\n",[59,109674,109675],{"__ignoreMap":57},[79,109676,109677,109679,109681,109683],{"class":81,"line":82},[79,109678,27062],{"class":448},[79,109680,109661],{"class":228},[79,109682,239],{"class":448},[79,109684,109685],{"class":228},"osmesa\n",[19,109687,109688,109689,109692,109693,497],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[59,109690,109691],{},"egl"," 失败，再尝试 ",[59,109694,109695],{},"osmesa",[19,109697,109698,109699,109702],{},"如果你在本机桌面环境运行，通常先不要设置 ",[59,109700,109701],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,109704,204],{"id":203},[19,109706,109707],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,109709,109710],{},"典型 viewer 流程:",[51,109712,109714],{"className":439,"code":109713,"language":441,"meta":57,"style":57},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[59,109715,109716,109729,109736,109740],{"__ignoreMap":57},[79,109717,109718,109721,109724,109726],{"class":81,"line":82},[79,109719,109720],{"class":448},"with",[79,109722,109723],{"class":228}," mujoco.viewer.launch_passive(model, data) ",[79,109725,533],{"class":448},[79,109727,109728],{"class":228}," viewer:\n",[79,109730,109731,109733],{"class":81,"line":167},[79,109732,4336],{"class":448},[79,109734,109735],{"class":228}," viewer.is_running():\n",[79,109737,109738],{"class":81,"line":178},[79,109739,1050],{"class":228},[79,109741,109742],{"class":81,"line":545},[79,109743,109744],{"class":228},"        viewer.sync()\n",[19,109746,109747],{},"典型 renderer 流程:",[51,109749,109751],{"className":439,"code":109750,"language":441,"meta":57,"style":57},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[59,109752,109753,109779,109783,109788],{"__ignoreMap":57},[79,109754,109755,109757,109759,109762,109764,109766,109768,109770,109772,109774,109777],{"class":81,"line":82},[79,109756,109457],{"class":228},[79,109758,239],{"class":448},[79,109760,109761],{"class":228}," mujoco.Renderer(model, ",[79,109763,27001],{"class":7284},[79,109765,239],{"class":448},[79,109767,44337],{"class":96},[79,109769,1020],{"class":228},[79,109771,26997],{"class":7284},[79,109773,239],{"class":448},[79,109775,109776],{"class":96},"640",[79,109778,850],{"class":228},[79,109780,109781],{"class":81,"line":167},[79,109782,1801],{"class":228},[79,109784,109785],{"class":81,"line":178},[79,109786,109787],{"class":228},"renderer.update_scene(data)\n",[79,109789,109790,109792,109794],{"class":81,"line":545},[79,109791,109467],{"class":228},[79,109793,239],{"class":448},[79,109795,109472],{"class":228},[339,109797,109799],{"id":109798},"viewer-的同步逻辑","viewer 的同步逻辑",[19,109801,109802],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[51,109804,109806],{"className":439,"code":109805,"language":441,"meta":57,"style":57},"mujoco.mj_step(model, data)\nviewer.sync()\n",[59,109807,109808,109812],{"__ignoreMap":57},[79,109809,109810],{"class":81,"line":82},[79,109811,1801],{"class":228},[79,109813,109814],{"class":81,"line":167},[79,109815,109816],{"class":228},"viewer.sync()\n",[19,109818,109819,109821,109822,109825],{},[59,109820,103180],{}," 负责算物理，",[59,109823,109824],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[339,109827,109829],{"id":109828},"为什么要-sleep","为什么要 sleep",[19,109831,109832],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[51,109834,109836],{"className":439,"code":109835,"language":441,"meta":57,"style":57},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[59,109837,109838],{"__ignoreMap":57},[79,109839,109840,109843,109845,109848,109850,109853,109855],{"class":81,"line":82},[79,109841,109842],{"class":228},"sleep_time ",[79,109844,239],{"class":448},[79,109846,109847],{"class":228}," model.opt.timestep ",[79,109849,478],{"class":448},[79,109851,109852],{"class":228}," (time.time() ",[79,109854,478],{"class":448},[79,109856,109857],{"class":228}," step_start)\n",[19,109859,109860],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[339,109862,109864],{"id":109863},"renderer-输出是什么","renderer 输出是什么",[51,109866,109868],{"className":439,"code":109867,"language":441,"meta":57,"style":57},"image = renderer.render()\n",[59,109869,109870],{"__ignoreMap":57},[79,109871,109872,109874,109876],{"class":81,"line":82},[79,109873,109467],{"class":228},[79,109875,239],{"class":448},[79,109877,109472],{"class":228},[19,109879,109880],{},"得到的是 NumPy 数组，形状通常是：",[51,109882,109885],{"className":109883,"code":109884,"language":56,"meta":57},[54],"(height, width, 3)\n",[59,109886,109884],{"__ignoreMap":57},[19,109888,109889],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[51,109891,109893],{"className":439,"code":109892,"language":441,"meta":57,"style":57},"Image.fromarray(image).save(\"render_output.png\")\n",[59,109894,109895],{"__ignoreMap":57},[79,109896,109897,109900,109903],{"class":81,"line":82},[79,109898,109899],{"class":228},"Image.fromarray(image).save(",[79,109901,109902],{"class":89},"\"render_output.png\"",[79,109904,850],{"class":228},[14,109906,510],{"id":509},[19,109908,109909],{},"交互式 Viewer:",[51,109911,109913],{"className":439,"code":109912,"language":441,"meta":57,"style":57},"import time\n\nimport mujoco\nimport mujoco.viewer\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"viewer_demo\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n\n    \u003Cbody name=\"box\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"box_free\"\u002F>\n      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    with mujoco.viewer.launch_passive(model, data) as viewer:\n        while viewer.is_running() and data.time \u003C 5.0:\n            step_start = time.time()\n            mujoco.mj_step(model, data)\n            viewer.sync()\n\n            sleep_time = model.opt.timestep - (time.time() - step_start)\n            if sleep_time > 0:\n                time.sleep(sleep_time)\n\n\nif __name__ == \"__main__\":\n    main()\n",[59,109914,109915,109921,109925,109931,109937,109941,109945,109953,109958,109962,109966,109970,109975,109980,109984,109988,109992,109997,110001,110005,110009,110013,110017,110021,110033,110045,110053,110057,110067,110087,110097,110102,110107,110111,110128,110141,110146,110150,110154,110166],{"__ignoreMap":57},[79,109916,109917,109919],{"class":81,"line":82},[79,109918,520],{"class":448},[79,109920,33830],{"class":228},[79,109922,109923],{"class":81,"line":167},[79,109924,542],{"emptyLinePlaceholder":541},[79,109926,109927,109929],{"class":81,"line":178},[79,109928,520],{"class":448},[79,109930,523],{"class":228},[79,109932,109933,109935],{"class":81,"line":545},[79,109934,520],{"class":448},[79,109936,109439],{"class":228},[79,109938,109939],{"class":81,"line":550},[79,109940,542],{"emptyLinePlaceholder":541},[79,109942,109943],{"class":81,"line":562},[79,109944,542],{"emptyLinePlaceholder":541},[79,109946,109947,109949,109951],{"class":81,"line":568},[79,109948,553],{"class":96},[79,109950,556],{"class":448},[79,109952,559],{"class":89},[79,109954,109955],{"class":81,"line":574},[79,109956,109957],{"class":89},"\u003Cmujoco model=\"viewer_demo\">\n",[79,109959,109960],{"class":81,"line":579},[79,109961,571],{"class":89},[79,109963,109964],{"class":81,"line":585},[79,109965,542],{"emptyLinePlaceholder":541},[79,109967,109968],{"class":81,"line":591},[79,109969,582],{"class":89},[79,109971,109972],{"class":81,"line":596},[79,109973,109974],{"class":89},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[79,109976,109977],{"class":81,"line":602},[79,109978,109979],{"class":89},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[79,109981,109982],{"class":81,"line":608},[79,109983,542],{"emptyLinePlaceholder":541},[79,109985,109986],{"class":81,"line":614},[79,109987,103309],{"class":89},[79,109989,109990],{"class":81,"line":619},[79,109991,103314],{"class":89},[79,109993,109994],{"class":81,"line":625},[79,109995,109996],{"class":89},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[79,109998,109999],{"class":81,"line":631},[79,110000,646],{"class":89},[79,110002,110003],{"class":81,"line":637},[79,110004,652],{"class":89},[79,110006,110007],{"class":81,"line":643},[79,110008,681],{"class":89},[79,110010,110011],{"class":81,"line":649},[79,110012,687],{"class":89},[79,110014,110015],{"class":81,"line":655},[79,110016,542],{"emptyLinePlaceholder":541},[79,110018,110019],{"class":81,"line":660},[79,110020,542],{"emptyLinePlaceholder":541},[79,110022,110023,110025,110027,110029,110031],{"class":81,"line":666},[79,110024,703],{"class":448},[79,110026,826],{"class":85},[79,110028,829],{"class":228},[79,110030,832],{"class":96},[79,110032,745],{"class":228},[79,110034,110035,110037,110039,110041,110043],{"class":81,"line":672},[79,110036,840],{"class":228},[79,110038,239],{"class":448},[79,110040,845],{"class":228},[79,110042,553],{"class":96},[79,110044,850],{"class":228},[79,110046,110047,110049,110051],{"class":81,"line":678},[79,110048,856],{"class":228},[79,110050,239],{"class":448},[79,110052,861],{"class":228},[79,110054,110055],{"class":81,"line":684},[79,110056,542],{"emptyLinePlaceholder":541},[79,110058,110059,110061,110063,110065],{"class":81,"line":690},[79,110060,36175],{"class":448},[79,110062,109723],{"class":228},[79,110064,533],{"class":448},[79,110066,109728],{"class":228},[79,110068,110069,110072,110075,110077,110080,110082,110085],{"class":81,"line":695},[79,110070,110071],{"class":448},"        while",[79,110073,110074],{"class":228}," viewer.is_running() ",[79,110076,32471],{"class":448},[79,110078,110079],{"class":228}," data.time ",[79,110081,229],{"class":448},[79,110083,110084],{"class":96}," 5.0",[79,110086,745],{"class":228},[79,110088,110089,110092,110094],{"class":81,"line":700},[79,110090,110091],{"class":228},"            step_start ",[79,110093,239],{"class":448},[79,110095,110096],{"class":228}," time.time()\n",[79,110098,110099],{"class":81,"line":712},[79,110100,110101],{"class":228},"            mujoco.mj_step(model, data)\n",[79,110103,110104],{"class":81,"line":721},[79,110105,110106],{"class":228},"            viewer.sync()\n",[79,110108,110109],{"class":81,"line":726},[79,110110,542],{"emptyLinePlaceholder":541},[79,110112,110113,110116,110118,110120,110122,110124,110126],{"class":81,"line":731},[79,110114,110115],{"class":228},"            sleep_time ",[79,110117,239],{"class":448},[79,110119,109847],{"class":228},[79,110121,478],{"class":448},[79,110123,109852],{"class":228},[79,110125,478],{"class":448},[79,110127,109857],{"class":228},[79,110129,110130,110132,110135,110137,110139],{"class":81,"line":748},[79,110131,6712],{"class":448},[79,110133,110134],{"class":228}," sleep_time ",[79,110136,3199],{"class":448},[79,110138,1103],{"class":96},[79,110140,745],{"class":228},[79,110142,110143],{"class":81,"line":765},[79,110144,110145],{"class":228},"                time.sleep(sleep_time)\n",[79,110147,110148],{"class":81,"line":780},[79,110149,542],{"emptyLinePlaceholder":541},[79,110151,110152],{"class":81,"line":811},[79,110153,542],{"emptyLinePlaceholder":541},[79,110155,110156,110158,110160,110162,110164],{"class":81,"line":816},[79,110157,1210],{"class":448},[79,110159,1213],{"class":96},[79,110161,1100],{"class":448},[79,110163,1218],{"class":89},[79,110165,745],{"class":228},[79,110167,110168],{"class":81,"line":821},[79,110169,1226],{"class":228},[19,110171,1229],{},[51,110173,110175],{"className":73,"code":110174,"language":75,"meta":57,"style":57},"touch ch5_viewer.py\n",[59,110176,110177],{"__ignoreMap":57},[79,110178,110179,110181],{"class":81,"line":82},[79,110180,1239],{"class":85},[79,110182,110183],{"class":89}," ch5_viewer.py\n",[19,110185,110186],{},"离屏 Renderer 保存图片:",[51,110188,110190],{"className":439,"code":110189,"language":441,"meta":57,"style":57},"from pathlib import Path\n\nimport mujoco\nfrom PIL import Image\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"renderer_demo\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n\n    \u003Cbody name=\"box\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"box_free\"\u002F>\n      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n    renderer = mujoco.Renderer(model, height=480, width=640)\n\n    for _ in range(100):\n        mujoco.mj_step(model, data)\n\n    renderer.update_scene(data, camera=\"fixed_camera\")\n    image = renderer.render()\n\n    output_path = Path(\"render_output.png\")\n    Image.fromarray(image).save(output_path)\n    renderer.close()\n\n    print(\"saved:\", output_path.resolve())\n    print(\"image shape:\", image.shape)\n\n\nif __name__ == \"__main__\":\n    main()\n",[59,110191,110192,110204,110208,110214,110224,110228,110232,110240,110245,110249,110253,110257,110261,110266,110270,110274,110278,110282,110286,110290,110294,110298,110302,110306,110310,110322,110334,110342,110367,110371,110387,110391,110395,110410,110419,110423,110437,110442,110447,110451,110463,110475,110479,110483,110495],{"__ignoreMap":57},[79,110193,110194,110196,110199,110201],{"class":81,"line":82},[79,110195,32745],{"class":448},[79,110197,110198],{"class":228}," pathlib ",[79,110200,520],{"class":448},[79,110202,110203],{"class":228}," Path\n",[79,110205,110206],{"class":81,"line":167},[79,110207,542],{"emptyLinePlaceholder":541},[79,110209,110210,110212],{"class":81,"line":178},[79,110211,520],{"class":448},[79,110213,523],{"class":228},[79,110215,110216,110218,110220,110222],{"class":81,"line":545},[79,110217,32745],{"class":448},[79,110219,49258],{"class":96},[79,110221,49261],{"class":448},[79,110223,49264],{"class":228},[79,110225,110226],{"class":81,"line":550},[79,110227,542],{"emptyLinePlaceholder":541},[79,110229,110230],{"class":81,"line":562},[79,110231,542],{"emptyLinePlaceholder":541},[79,110233,110234,110236,110238],{"class":81,"line":568},[79,110235,553],{"class":96},[79,110237,556],{"class":448},[79,110239,559],{"class":89},[79,110241,110242],{"class":81,"line":574},[79,110243,110244],{"class":89},"\u003Cmujoco model=\"renderer_demo\">\n",[79,110246,110247],{"class":81,"line":579},[79,110248,571],{"class":89},[79,110250,110251],{"class":81,"line":585},[79,110252,542],{"emptyLinePlaceholder":541},[79,110254,110255],{"class":81,"line":591},[79,110256,582],{"class":89},[79,110258,110259],{"class":81,"line":596},[79,110260,109974],{"class":89},[79,110262,110263],{"class":81,"line":602},[79,110264,110265],{"class":89},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[79,110267,110268],{"class":81,"line":608},[79,110269,109979],{"class":89},[79,110271,110272],{"class":81,"line":614},[79,110273,542],{"emptyLinePlaceholder":541},[79,110275,110276],{"class":81,"line":619},[79,110277,103309],{"class":89},[79,110279,110280],{"class":81,"line":625},[79,110281,103314],{"class":89},[79,110283,110284],{"class":81,"line":631},[79,110285,109996],{"class":89},[79,110287,110288],{"class":81,"line":637},[79,110289,646],{"class":89},[79,110291,110292],{"class":81,"line":643},[79,110293,652],{"class":89},[79,110295,110296],{"class":81,"line":649},[79,110297,681],{"class":89},[79,110299,110300],{"class":81,"line":655},[79,110301,687],{"class":89},[79,110303,110304],{"class":81,"line":660},[79,110305,542],{"emptyLinePlaceholder":541},[79,110307,110308],{"class":81,"line":666},[79,110309,542],{"emptyLinePlaceholder":541},[79,110311,110312,110314,110316,110318,110320],{"class":81,"line":672},[79,110313,703],{"class":448},[79,110315,826],{"class":85},[79,110317,829],{"class":228},[79,110319,832],{"class":96},[79,110321,745],{"class":228},[79,110323,110324,110326,110328,110330,110332],{"class":81,"line":678},[79,110325,840],{"class":228},[79,110327,239],{"class":448},[79,110329,845],{"class":228},[79,110331,553],{"class":96},[79,110333,850],{"class":228},[79,110335,110336,110338,110340],{"class":81,"line":684},[79,110337,856],{"class":228},[79,110339,239],{"class":448},[79,110341,861],{"class":228},[79,110343,110344,110347,110349,110351,110353,110355,110357,110359,110361,110363,110365],{"class":81,"line":690},[79,110345,110346],{"class":228},"    renderer ",[79,110348,239],{"class":448},[79,110350,109761],{"class":228},[79,110352,27001],{"class":7284},[79,110354,239],{"class":448},[79,110356,44337],{"class":96},[79,110358,1020],{"class":228},[79,110360,26997],{"class":7284},[79,110362,239],{"class":448},[79,110364,109776],{"class":96},[79,110366,850],{"class":228},[79,110368,110369],{"class":81,"line":695},[79,110370,542],{"emptyLinePlaceholder":541},[79,110372,110373,110375,110377,110379,110381,110383,110385],{"class":81,"line":700},[79,110374,915],{"class":448},[79,110376,103450],{"class":228},[79,110378,921],{"class":448},[79,110380,924],{"class":96},[79,110382,455],{"class":228},[79,110384,2555],{"class":96},[79,110386,932],{"class":228},[79,110388,110389],{"class":81,"line":712},[79,110390,1050],{"class":228},[79,110392,110393],{"class":81,"line":721},[79,110394,542],{"emptyLinePlaceholder":541},[79,110396,110397,110400,110403,110405,110408],{"class":81,"line":726},[79,110398,110399],{"class":228},"    renderer.update_scene(data, ",[79,110401,110402],{"class":7284},"camera",[79,110404,239],{"class":448},[79,110406,110407],{"class":89},"\"fixed_camera\"",[79,110409,850],{"class":228},[79,110411,110412,110415,110417],{"class":81,"line":731},[79,110413,110414],{"class":228},"    image ",[79,110416,239],{"class":448},[79,110418,109472],{"class":228},[79,110420,110421],{"class":81,"line":748},[79,110422,542],{"emptyLinePlaceholder":541},[79,110424,110425,110428,110430,110433,110435],{"class":81,"line":765},[79,110426,110427],{"class":228},"    output_path ",[79,110429,239],{"class":448},[79,110431,110432],{"class":228}," Path(",[79,110434,109902],{"class":89},[79,110436,850],{"class":228},[79,110438,110439],{"class":81,"line":780},[79,110440,110441],{"class":228},"    Image.fromarray(image).save(output_path)\n",[79,110443,110444],{"class":81,"line":811},[79,110445,110446],{"class":228},"    renderer.close()\n",[79,110448,110449],{"class":81,"line":816},[79,110450,542],{"emptyLinePlaceholder":541},[79,110452,110453,110455,110457,110460],{"class":81,"line":821},[79,110454,1161],{"class":96},[79,110456,455],{"class":228},[79,110458,110459],{"class":89},"\"saved:\"",[79,110461,110462],{"class":228},", output_path.resolve())\n",[79,110464,110465,110467,110469,110472],{"class":81,"line":837},[79,110466,1161],{"class":96},[79,110468,455],{"class":228},[79,110470,110471],{"class":89},"\"image shape:\"",[79,110473,110474],{"class":228},", image.shape)\n",[79,110476,110477],{"class":81,"line":853},[79,110478,542],{"emptyLinePlaceholder":541},[79,110480,110481],{"class":81,"line":864},[79,110482,542],{"emptyLinePlaceholder":541},[79,110484,110485,110487,110489,110491,110493],{"class":81,"line":869},[79,110486,1210],{"class":448},[79,110488,1213],{"class":96},[79,110490,1100],{"class":448},[79,110492,1218],{"class":89},[79,110494,745],{"class":228},[79,110496,110497],{"class":81,"line":885},[79,110498,1226],{"class":228},[19,110500,1229],{},[51,110502,110504],{"className":73,"code":110503,"language":75,"meta":57,"style":57},"touch ch5_renderer.py\n",[59,110505,110506],{"__ignoreMap":57},[79,110507,110508,110510],{"class":81,"line":82},[79,110509,1239],{"class":85},[79,110511,110512],{"class":89}," ch5_renderer.py\n",[339,110514,1259],{"id":1259},[19,110516,110517],{},"viewer 上下文：",[51,110519,110521],{"className":439,"code":110520,"language":441,"meta":57,"style":57},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[59,110522,110523],{"__ignoreMap":57},[79,110524,110525,110527,110529,110531],{"class":81,"line":82},[79,110526,109720],{"class":448},[79,110528,109723],{"class":228},[79,110530,533],{"class":448},[79,110532,109728],{"class":228},[19,110534,110535,110537],{},[59,110536,109720],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,110539,110540],{},"窗口循环：",[51,110542,110544],{"className":439,"code":110543,"language":441,"meta":57,"style":57},"while viewer.is_running() and data.time \u003C 5.0:\n",[59,110545,110546],{"__ignoreMap":57},[79,110547,110548,110551,110553,110555,110557,110559,110561],{"class":81,"line":82},[79,110549,110550],{"class":448},"while",[79,110552,110074],{"class":228},[79,110554,32471],{"class":448},[79,110556,110079],{"class":228},[79,110558,229],{"class":448},[79,110560,110084],{"class":96},[79,110562,745],{"class":228},[19,110564,110565],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,110567,110568],{},"固定相机：",[51,110570,110572],{"className":219,"code":110571,"language":221,"meta":57,"style":57},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[59,110573,110574],{"__ignoreMap":57},[79,110575,110576,110578,110580,110582,110584,110586,110588,110590,110593,110596,110598,110601],{"class":81,"line":82},[79,110577,229],{"class":228},[79,110579,110402],{"class":232},[79,110581,236],{"class":85},[79,110583,239],{"class":228},[79,110585,110407],{"class":89},[79,110587,103072],{"class":85},[79,110589,239],{"class":228},[79,110591,110592],{"class":89},"\"1.5 -2.0 1.2\"",[79,110594,110595],{"class":85}," xyaxes",[79,110597,239],{"class":228},[79,110599,110600],{"class":89},"\"1 0.75 0 0 0 1\"",[79,110602,261],{"class":228},[19,110604,110605],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[339,110607,110609],{"id":110608},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[51,110611,110613],{"className":439,"code":110612,"language":441,"meta":57,"style":57},"import time\n",[59,110614,110615],{"__ignoreMap":57},[79,110616,110617,110619],{"class":81,"line":82},[79,110618,520],{"class":448},[79,110620,33830],{"class":228},[19,110622,110623],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[51,110625,110627],{"className":439,"code":110626,"language":441,"meta":57,"style":57},"import mujoco\nimport mujoco.viewer\n",[59,110628,110629,110635],{"__ignoreMap":57},[79,110630,110631,110633],{"class":81,"line":82},[79,110632,520],{"class":448},[79,110634,523],{"class":228},[79,110636,110637,110639],{"class":81,"line":167},[79,110638,520],{"class":448},[79,110640,109439],{"class":228},[19,110642,110643],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[51,110645,110646],{"className":439,"code":110520,"language":441,"meta":57,"style":57},[59,110647,110648],{"__ignoreMap":57},[79,110649,110650,110652,110654,110656],{"class":81,"line":82},[79,110651,109720],{"class":448},[79,110653,109723],{"class":228},[79,110655,533],{"class":448},[79,110657,109728],{"class":228},[19,110659,110660,110661,110664],{},"打开一个 viewer 窗口。",[59,110662,110663],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[51,110666,110667],{"className":439,"code":110543,"language":441,"meta":57,"style":57},[59,110668,110669],{"__ignoreMap":57},[79,110670,110671,110673,110675,110677,110679,110681,110683],{"class":81,"line":82},[79,110672,110550],{"class":448},[79,110674,110074],{"class":228},[79,110676,32471],{"class":448},[79,110678,110079],{"class":228},[79,110680,229],{"class":448},[79,110682,110084],{"class":96},[79,110684,745],{"class":228},[19,110686,110687,110688,110691],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[59,110689,110690],{},"viewer.is_running()"," 会变成 false，循环结束。",[51,110693,110695],{"className":439,"code":110694,"language":441,"meta":57,"style":57},"step_start = time.time()\n",[59,110696,110697],{"__ignoreMap":57},[79,110698,110699,110702,110704],{"class":81,"line":82},[79,110700,110701],{"class":228},"step_start ",[79,110703,239],{"class":448},[79,110705,110096],{"class":228},[19,110707,110708],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[51,110710,110711],{"className":439,"code":109805,"language":441,"meta":57,"style":57},[59,110712,110713,110717],{"__ignoreMap":57},[79,110714,110715],{"class":81,"line":82},[79,110716,1801],{"class":228},[79,110718,110719],{"class":81,"line":167},[79,110720,109816],{"class":228},[19,110722,110723,110725,110726,110728,110729,110731,110732,110735],{},[59,110724,103180],{}," 推进物理仿真。",[59,110727,109824],{}," 把最新的 ",[59,110730,35398],{}," 同步到窗口里显示。没有 ",[59,110733,110734],{},"sync()","，窗口可能看不到最新状态。",[51,110737,110738],{"className":439,"code":109835,"language":441,"meta":57,"style":57},[59,110739,110740],{"__ignoreMap":57},[79,110741,110742,110744,110746,110748,110750,110752,110754],{"class":81,"line":82},[79,110743,109842],{"class":228},[79,110745,239],{"class":448},[79,110747,109847],{"class":228},[79,110749,478],{"class":448},[79,110751,109852],{"class":228},[79,110753,478],{"class":448},[79,110755,109857],{"class":228},[19,110757,110758],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[51,110760,110762],{"className":439,"code":110761,"language":441,"meta":57,"style":57},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[59,110763,110764,110776],{"__ignoreMap":57},[79,110765,110766,110768,110770,110772,110774],{"class":81,"line":82},[79,110767,1210],{"class":448},[79,110769,110134],{"class":228},[79,110771,3199],{"class":448},[79,110773,1103],{"class":96},[79,110775,745],{"class":228},[79,110777,110778],{"class":81,"line":167},[79,110779,110780],{"class":228},"    time.sleep(sleep_time)\n",[19,110782,110783],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[339,110785,110787],{"id":110786},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[51,110789,110791],{"className":439,"code":110790,"language":441,"meta":57,"style":57},"from pathlib import Path\n",[59,110792,110793],{"__ignoreMap":57},[79,110794,110795,110797,110799,110801],{"class":81,"line":82},[79,110796,32745],{"class":448},[79,110798,110198],{"class":228},[79,110800,520],{"class":448},[79,110802,110203],{"class":228},[19,110804,110805,110806,110809,110810,110813],{},"导入 ",[59,110807,110808],{},"Path","，用来处理文件路径。相比直接写字符串，",[59,110811,110812],{},"Path(\"render_output.png\")"," 更清晰。",[51,110815,110817],{"className":439,"code":110816,"language":441,"meta":57,"style":57},"from PIL import Image\n",[59,110818,110819],{"__ignoreMap":57},[79,110820,110821,110823,110825,110827],{"class":81,"line":82},[79,110822,32745],{"class":448},[79,110824,49258],{"class":96},[79,110826,49261],{"class":448},[79,110828,49264],{"class":228},[19,110830,110831],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[51,110833,110834],{"className":219,"code":110571,"language":221,"meta":57,"style":57},[59,110835,110836],{"__ignoreMap":57},[79,110837,110838,110840,110842,110844,110846,110848,110850,110852,110854,110856,110858,110860],{"class":81,"line":82},[79,110839,229],{"class":228},[79,110841,110402],{"class":232},[79,110843,236],{"class":85},[79,110845,239],{"class":228},[79,110847,110407],{"class":89},[79,110849,103072],{"class":85},[79,110851,239],{"class":228},[79,110853,110592],{"class":89},[79,110855,110595],{"class":85},[79,110857,239],{"class":228},[79,110859,110600],{"class":89},[79,110861,261],{"class":228},[19,110863,110864,110865,110867,110868,110870,110871,110874,110875,110877],{},"定义一个相机。",[59,110866,81798],{}," 是相机名字。",[59,110869,106070],{}," 是相机在世界里的位置。",[59,110872,110873],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[59,110876,106070],{}," 来调视角。",[51,110879,110881],{"className":439,"code":110880,"language":441,"meta":57,"style":57},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[59,110882,110883],{"__ignoreMap":57},[79,110884,110885,110887,110889,110891,110893,110895,110897,110899,110901,110903,110905],{"class":81,"line":82},[79,110886,109457],{"class":228},[79,110888,239],{"class":448},[79,110890,109761],{"class":228},[79,110892,27001],{"class":7284},[79,110894,239],{"class":448},[79,110896,44337],{"class":96},[79,110898,1020],{"class":228},[79,110900,26997],{"class":7284},[79,110902,239],{"class":448},[79,110904,109776],{"class":96},[79,110906,850],{"class":228},[19,110908,110909,110910,1748,110912,110914],{},"创建离屏渲染器。",[59,110911,27001],{},[59,110913,26997],{}," 决定输出图片大小。",[51,110916,110917],{"className":439,"code":103620,"language":441,"meta":57,"style":57},[59,110918,110919,110935],{"__ignoreMap":57},[79,110920,110921,110923,110925,110927,110929,110931,110933],{"class":81,"line":82},[79,110922,1638],{"class":448},[79,110924,103450],{"class":228},[79,110926,921],{"class":448},[79,110928,924],{"class":96},[79,110930,455],{"class":228},[79,110932,2555],{"class":96},[79,110934,932],{"class":228},[79,110936,110937],{"class":81,"line":167},[79,110938,103643],{"class":228},[19,110940,110941],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[51,110943,110945],{"className":439,"code":110944,"language":441,"meta":57,"style":57},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[59,110946,110947],{"__ignoreMap":57},[79,110948,110949,110952,110954,110956,110958],{"class":81,"line":82},[79,110950,110951],{"class":228},"renderer.update_scene(data, ",[79,110953,110402],{"class":7284},[79,110955,239],{"class":448},[79,110957,110407],{"class":89},[79,110959,850],{"class":228},[19,110961,110962,110963,110965,110966,110969],{},"告诉 renderer：用当前 ",[59,110964,35398],{}," 的状态更新画面，并使用名为 ",[59,110967,110968],{},"fixed_camera"," 的相机视角。",[51,110971,110972],{"className":439,"code":109867,"language":441,"meta":57,"style":57},[59,110973,110974],{"__ignoreMap":57},[79,110975,110976,110978,110980],{"class":81,"line":82},[79,110977,109467],{"class":228},[79,110979,239],{"class":448},[79,110981,109472],{"class":228},[19,110983,110984,110985,110988],{},"真正渲染出图像。",[59,110986,110987],{},"image"," 是一个 NumPy 数组，不是文件。",[51,110990,110992],{"className":439,"code":110991,"language":441,"meta":57,"style":57},"Image.fromarray(image).save(output_path)\n",[59,110993,110994],{"__ignoreMap":57},[79,110995,110996],{"class":81,"line":82},[79,110997,110991],{"class":228},[19,110999,111000,111001,497],{},"把数组转换成图片，并保存到 ",[59,111002,111003],{},"render_output.png",[51,111005,111007],{"className":439,"code":111006,"language":441,"meta":57,"style":57},"renderer.close()\n",[59,111008,111009],{"__ignoreMap":57},[79,111010,111011],{"class":81,"line":82},[79,111012,111006],{"class":228},[19,111014,111015],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,111017,1934],{"id":1933},[19,111019,111020,111021,111023,111024,497],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[59,111022,111003],{},"，并输出图像数组形状，例如 ",[59,111025,111026],{},"(480, 640, 3)",[19,111028,111029],{},"如果图片里看不到方块，先检查：",[26,111031,111032,111035,111038],{},[29,111033,111034],{},"方块是否掉到相机视野外。",[29,111036,111037],{},"camera 位置是否合理。",[29,111039,111040,111041,111044],{},"是否在 ",[59,111042,111043],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,111046,1987],{"id":1986},[19,111048,111049],{},"运行 viewer:",[51,111051,111053],{"className":73,"code":111052,"language":75,"meta":57,"style":57},"python ch5_viewer.py\n",[59,111054,111055],{"__ignoreMap":57},[79,111056,111057,111059],{"class":81,"line":82},[79,111058,441],{"class":85},[79,111060,110183],{"class":89},[19,111062,111063],{},"运行 renderer:",[51,111065,111067],{"className":73,"code":111066,"language":75,"meta":57,"style":57},"python ch5_renderer.py\n",[59,111068,111069],{"__ignoreMap":57},[79,111070,111071,111073],{"class":81,"line":82},[79,111072,441],{"class":85},[79,111074,110512],{"class":89},[19,111076,111077],{},"如果在服务器上运行:",[51,111079,111081],{"className":73,"code":111080,"language":75,"meta":57,"style":57},"MUJOCO_GL=egl python ch5_renderer.py\n",[59,111082,111083],{"__ignoreMap":57},[79,111084,111085,111087,111089,111091,111094],{"class":81,"line":82},[79,111086,109701],{"class":228},[79,111088,239],{"class":448},[79,111090,109691],{"class":89},[79,111092,111093],{"class":85}," python",[79,111095,110512],{"class":89},[19,111097,109669],{},[51,111099,111101],{"className":73,"code":111100,"language":75,"meta":57,"style":57},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[59,111102,111103],{"__ignoreMap":57},[79,111104,111105,111107,111109,111111,111113],{"class":81,"line":82},[79,111106,109701],{"class":228},[79,111108,239],{"class":448},[79,111110,109695],{"class":89},[79,111112,111093],{"class":85},[79,111114,110512],{"class":89},[19,111116,111117],{},"再做几个练习：",[26,111119,111120,111127,111130,111136],{},[29,111121,111122,111123,111126],{},"把 renderer 分辨率改成 ",[59,111124,111125],{},"height=240, width=320","，观察输出 shape。",[29,111128,111129],{},"把方块颜色改成蓝色，重新保存图片。",[29,111131,111132,111133,111135],{},"把相机 ",[59,111134,106070],{}," 改远一点，观察画面中物体是否变小。",[29,111137,111138,111139,104351,111142,111145],{},"把 viewer 示例中的 ",[59,111140,111141],{},"data.time \u003C 5.0",[59,111143,111144],{},"data.time \u003C 20.0","，观察更长时间。",[14,111147,2031],{"id":2030},[339,111149,111151],{"id":111150},"viewer-窗口打不开","viewer 窗口打不开",[19,111153,111154],{},"安装:",[51,111156,111158],{"className":73,"code":111157,"language":75,"meta":57,"style":57},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[59,111159,111160],{"__ignoreMap":57},[79,111161,111162,111164,111166,111168,111170,111172,111174,111176,111178,111180,111182],{"class":81,"line":82},[79,111163,86],{"class":85},[79,111165,90],{"class":89},[79,111167,93],{"class":89},[79,111169,97],{"class":96},[79,111171,104440],{"class":89},[79,111173,102812],{"class":89},[79,111175,104445],{"class":89},[79,111177,102825],{"class":89},[79,111179,102831],{"class":89},[79,111181,102822],{"class":89},[79,111183,111184],{"class":89}," libXinerama\n",[339,111186,111188],{"id":111187},"glfwerror",[59,111189,111190],{},"GLFWError",[19,111192,111193],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[339,111195,111197],{"id":111196},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,111199,111200,111201,1978,111203,111205],{},"尝试 ",[59,111202,103006],{},[59,111204,103009],{},"。可能存在版本差异。",[339,111207,111208],{"id":111208},"保存图片是黑的",[19,111210,104509],{},[26,111212,111213,111216,111219,111229],{},[29,111214,111215],{},"XML 里是否有 light。",[29,111217,111218],{},"相机是否对着模型。",[29,111220,111221,111222,111225,111226,497],{},"是否先 ",[59,111223,111224],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[59,111227,111228],{},"renderer.render()",[29,111230,111231],{},"物体是否已经掉出视野。",[339,111233,111234],{"id":111234},"远程服务器没有显示器",[19,111236,111237],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[51,111239,111240],{"className":73,"code":111080,"language":75,"meta":57,"style":57},[59,111241,111242],{"__ignoreMap":57},[79,111243,111244,111246,111248,111250,111252],{"class":81,"line":82},[79,111245,109701],{"class":228},[79,111247,239],{"class":448},[79,111249,109691],{"class":89},[79,111251,111093],{"class":85},[79,111253,110512],{"class":89},[19,111255,111256],{},"如果 EGL 不可用，再尝试：",[51,111258,111259],{"className":73,"code":111100,"language":75,"meta":57,"style":57},[59,111260,111261],{"__ignoreMap":57},[79,111262,111263,111265,111267,111269,111271],{"class":81,"line":82},[79,111264,109701],{"class":228},[79,111266,239],{"class":448},[79,111268,109695],{"class":89},[79,111270,111093],{"class":85},[79,111272,110512],{"class":89},[14,111274,2125],{"id":2124},[19,111276,111277],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[26,111279,111280,111283,111286],{},[29,111281,111282],{},"先用 viewer 看模型和控制是否正常。",[29,111284,111285],{},"再用 renderer 保存图片或构造视觉观测。",[29,111287,111288],{},"最后把状态、动作、图像、奖励组织成训练数据。",[2159,111290,111291],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":57,"searchDepth":167,"depth":167,"links":111293},[111294,111295,111296,111301,111306,111307,111308,111315],{"id":16,"depth":167,"text":17},{"id":66,"depth":167,"text":67},{"id":203,"depth":167,"text":204,"children":111297},[111298,111299,111300],{"id":109798,"depth":178,"text":109799},{"id":109828,"depth":178,"text":109829},{"id":109863,"depth":178,"text":109864},{"id":509,"depth":167,"text":510,"children":111302},[111303,111304,111305],{"id":1259,"depth":178,"text":1259},{"id":110608,"depth":178,"text":110609},{"id":110786,"depth":178,"text":110787},{"id":1933,"depth":167,"text":1934},{"id":1986,"depth":167,"text":1987},{"id":2030,"depth":167,"text":2031,"children":111309},[111310,111311,111312,111313,111314],{"id":111150,"depth":178,"text":111151},{"id":111187,"depth":178,"text":111190},{"id":111196,"depth":178,"text":111197},{"id":111208,"depth":178,"text":111208},{"id":111234,"depth":178,"text":111234},{"id":2124,"depth":167,"text":2125},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":109406,"description":57},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":4,"title":5,"body":111322,"description":57,"extension":2186,"meta":112984,"navigation":541,"path":2188,"seo":112985,"stem":2190,"__hash__":2191},{"type":7,"value":111323,"toc":112961},[111324,111326,111328,111330,111332,111346,111348,111353,111355,111357,111359,111383,111385,111399,111401,111439,111441,111449,111451,111453,111458,111460,111490,111492,111522,111524,111554,111556,111558,111592,111594,111599,111601,111606,111608,111610,111615,111617,111619,111621,111655,111657,111667,111669,111671,112211,112213,112223,112225,112235,112237,112239,112257,112265,112267,112287,112289,112291,112333,112335,112337,112355,112359,112361,112379,112387,112389,112394,112396,112401,112417,112421,112449,112455,112489,112495,112511,112517,112525,112529,112541,112543,112563,112567,112579,112583,112611,112617,112641,112647,112669,112671,112687,112689,112697,112701,112721,112729,112749,112755,112793,112799,112801,112803,112808,112810,112812,112817,112819,112835,112837,112839,112865,112867,112869,112875,112877,112879,112905,112907,112913,112917,112919,112924,112926,112931,112933,112935,112937,112939,112957,112959],[10,111325,5],{"id":12},[14,111327,17],{"id":16},[19,111329,21],{},[19,111331,24],{},[26,111333,111334,111336,111338,111340,111342,111344],{},[29,111335,31],{},[29,111337,34],{},[29,111339,37],{},[29,111341,40],{},[29,111343,43],{},[29,111345,46],{},[19,111347,49],{},[51,111349,111351],{"className":111350,"code":55,"language":56,"meta":57},[54],[59,111352,55],{"__ignoreMap":57},[19,111354,63],{},[14,111356,67],{"id":66},[19,111358,70],{},[51,111360,111361],{"className":73,"code":74,"language":75,"meta":57,"style":57},[59,111362,111363],{"__ignoreMap":57},[79,111364,111365,111367,111369,111371,111373,111375,111377,111379,111381],{"class":81,"line":82},[79,111366,86],{"class":85},[79,111368,90],{"class":89},[79,111370,93],{"class":89},[79,111372,97],{"class":96},[79,111374,100],{"class":89},[79,111376,103],{"class":89},[79,111378,106],{"class":89},[79,111380,109],{"class":89},[79,111382,112],{"class":89},[19,111384,115],{},[51,111386,111387],{"className":73,"code":118,"language":75,"meta":57,"style":57},[59,111388,111389],{"__ignoreMap":57},[79,111390,111391,111393,111395,111397],{"class":81,"line":82},[79,111392,125],{"class":85},[79,111394,93],{"class":89},[79,111396,130],{"class":89},[79,111398,133],{"class":89},[19,111400,136],{},[51,111402,111403],{"className":73,"code":139,"language":75,"meta":57,"style":57},[59,111404,111405,111421,111429],{"__ignoreMap":57},[79,111406,111407,111409,111411,111413,111415,111417,111419],{"class":81,"line":82},[79,111408,146],{"class":85},[79,111410,149],{"class":89},[79,111412,152],{"class":96},[79,111414,155],{"class":89},[79,111416,158],{"class":89},[79,111418,161],{"class":96},[79,111420,164],{"class":96},[79,111422,111423,111425,111427],{"class":81,"line":167},[79,111424,146],{"class":85},[79,111426,172],{"class":89},[79,111428,175],{"class":89},[79,111430,111431,111433,111435,111437],{"class":81,"line":178},[79,111432,125],{"class":85},[79,111434,93],{"class":89},[79,111436,130],{"class":89},[79,111438,133],{"class":89},[19,111440,189],{},[26,111442,111443,111445,111447],{},[29,111444,194],{},[29,111446,197],{},[29,111448,200],{},[14,111450,204],{"id":203},[19,111452,207],{},[51,111454,111456],{"className":111455,"code":211,"language":56,"meta":57},[54],[59,111457,211],{"__ignoreMap":57},[19,111459,216],{},[51,111461,111462],{"className":219,"code":220,"language":221,"meta":57,"style":57},[59,111463,111464],{"__ignoreMap":57},[79,111465,111466,111468,111470,111472,111474,111476,111478,111480,111482,111484,111486,111488],{"class":81,"line":82},[79,111467,229],{"class":228},[79,111469,233],{"class":232},[79,111471,236],{"class":85},[79,111473,239],{"class":228},[79,111475,242],{"class":89},[79,111477,245],{"class":85},[79,111479,239],{"class":228},[79,111481,250],{"class":89},[79,111483,253],{"class":85},[79,111485,239],{"class":228},[79,111487,258],{"class":89},[79,111489,261],{"class":228},[19,111491,264],{},[51,111493,111494],{"className":219,"code":267,"language":221,"meta":57,"style":57},[59,111495,111496],{"__ignoreMap":57},[79,111497,111498,111500,111502,111504,111506,111508,111510,111512,111514,111516,111518,111520],{"class":81,"line":82},[79,111499,229],{"class":228},[79,111501,233],{"class":232},[79,111503,236],{"class":85},[79,111505,239],{"class":228},[79,111507,282],{"class":89},[79,111509,245],{"class":85},[79,111511,239],{"class":228},[79,111513,289],{"class":89},[79,111515,253],{"class":85},[79,111517,239],{"class":228},[79,111519,296],{"class":89},[79,111521,261],{"class":228},[19,111523,301],{},[51,111525,111526],{"className":219,"code":304,"language":221,"meta":57,"style":57},[59,111527,111528],{"__ignoreMap":57},[79,111529,111530,111532,111534,111536,111538,111540,111542,111544,111546,111548,111550,111552],{"class":81,"line":82},[79,111531,229],{"class":228},[79,111533,313],{"class":232},[79,111535,236],{"class":85},[79,111537,239],{"class":228},[79,111539,320],{"class":89},[79,111541,323],{"class":85},[79,111543,239],{"class":228},[79,111545,242],{"class":89},[79,111547,330],{"class":85},[79,111549,239],{"class":228},[79,111551,335],{"class":89},[79,111553,261],{"class":228},[339,111555,342],{"id":341},[19,111557,345],{},[347,111559,111560,111570],{},[350,111561,111562],{},[353,111563,111564,111566,111568],{},[356,111565,359],{"align":358},[356,111567,362],{"align":358},[356,111569,365],{"align":358},[367,111571,111572,111582],{},[353,111573,111574,111578,111580],{},[372,111575,111576],{"align":358},[59,111577,376],{},[372,111579,379],{"align":358},[372,111581,382],{"align":358},[353,111583,111584,111588,111590],{},[372,111585,111586],{"align":358},[59,111587,389],{},[372,111589,392],{"align":358},[372,111591,395],{"align":358},[19,111593,398],{},[51,111595,111597],{"className":111596,"code":402,"language":56,"meta":57},[54],[59,111598,402],{"__ignoreMap":57},[19,111600,407],{},[51,111602,111604],{"className":111603,"code":411,"language":56,"meta":57},[54],[59,111605,411],{"__ignoreMap":57},[339,111607,417],{"id":416},[19,111609,420],{},[51,111611,111613],{"className":111612,"code":424,"language":56,"meta":57},[54],[59,111614,424],{"__ignoreMap":57},[19,111616,429],{},[339,111618,433],{"id":432},[19,111620,436],{},[51,111622,111623],{"className":439,"code":440,"language":441,"meta":57,"style":57},[59,111624,111625],{"__ignoreMap":57},[79,111626,111627,111629,111631,111633,111635,111637,111639,111641,111643,111645,111647,111649,111651,111653],{"class":81,"line":82},[79,111628,449],{"class":448},[79,111630,452],{"class":96},[79,111632,455],{"class":228},[79,111634,458],{"class":96},[79,111636,461],{"class":448},[79,111638,464],{"class":96},[79,111640,467],{"class":448},[79,111642,470],{"class":228},[79,111644,473],{"class":448},[79,111646,470],{"class":228},[79,111648,478],{"class":448},[79,111650,481],{"class":228},[79,111652,473],{"class":448},[79,111654,486],{"class":228},[19,111656,489],{},[26,111658,111659,111663,111665],{},[29,111660,494,111661,497],{},[59,111662,458],{},[29,111664,500],{},[29,111666,503],{},[19,111668,506],{},[14,111670,510],{"id":509},[51,111672,111673],{"className":439,"code":513,"language":441,"meta":57,"style":57},[59,111674,111675,111681,111691,111695,111699,111707,111711,111715,111719,111723,111727,111731,111735,111739,111743,111747,111751,111755,111759,111763,111767,111771,111775,111779,111783,111787,111791,111795,111799,111803,111811,111817,111821,111825,111837,111849,111861,111891,111895,111899,111911,111923,111931,111935,111947,111951,111955,111963,111967,111983,111991,112003,112015,112019,112039,112057,112061,112073,112077,112081,112089,112097,112101,112117,112151,112155,112173,112187,112191,112195,112207],{"__ignoreMap":57},[79,111676,111677,111679],{"class":81,"line":82},[79,111678,520],{"class":448},[79,111680,523],{"class":228},[79,111682,111683,111685,111687,111689],{"class":81,"line":167},[79,111684,520],{"class":448},[79,111686,530],{"class":228},[79,111688,533],{"class":448},[79,111690,536],{"class":228},[79,111692,111693],{"class":81,"line":178},[79,111694,542],{"emptyLinePlaceholder":541},[79,111696,111697],{"class":81,"line":545},[79,111698,542],{"emptyLinePlaceholder":541},[79,111700,111701,111703,111705],{"class":81,"line":550},[79,111702,553],{"class":96},[79,111704,556],{"class":448},[79,111706,559],{"class":89},[79,111708,111709],{"class":81,"line":562},[79,111710,565],{"class":89},[79,111712,111713],{"class":81,"line":568},[79,111714,571],{"class":89},[79,111716,111717],{"class":81,"line":574},[79,111718,542],{"emptyLinePlaceholder":541},[79,111720,111721],{"class":81,"line":579},[79,111722,582],{"class":89},[79,111724,111725],{"class":81,"line":585},[79,111726,588],{"class":89},[79,111728,111729],{"class":81,"line":591},[79,111730,542],{"emptyLinePlaceholder":541},[79,111732,111733],{"class":81,"line":596},[79,111734,599],{"class":89},[79,111736,111737],{"class":81,"line":602},[79,111738,605],{"class":89},[79,111740,111741],{"class":81,"line":608},[79,111742,611],{"class":89},[79,111744,111745],{"class":81,"line":614},[79,111746,542],{"emptyLinePlaceholder":541},[79,111748,111749],{"class":81,"line":619},[79,111750,622],{"class":89},[79,111752,111753],{"class":81,"line":625},[79,111754,628],{"class":89},[79,111756,111757],{"class":81,"line":631},[79,111758,634],{"class":89},[79,111760,111761],{"class":81,"line":637},[79,111762,640],{"class":89},[79,111764,111765],{"class":81,"line":643},[79,111766,646],{"class":89},[79,111768,111769],{"class":81,"line":649},[79,111770,652],{"class":89},[79,111772,111773],{"class":81,"line":655},[79,111774,542],{"emptyLinePlaceholder":541},[79,111776,111777],{"class":81,"line":660},[79,111778,663],{"class":89},[79,111780,111781],{"class":81,"line":666},[79,111782,669],{"class":89},[79,111784,111785],{"class":81,"line":672},[79,111786,675],{"class":89},[79,111788,111789],{"class":81,"line":678},[79,111790,681],{"class":89},[79,111792,111793],{"class":81,"line":684},[79,111794,687],{"class":89},[79,111796,111797],{"class":81,"line":690},[79,111798,542],{"emptyLinePlaceholder":541},[79,111800,111801],{"class":81,"line":695},[79,111802,542],{"emptyLinePlaceholder":541},[79,111804,111805,111807,111809],{"class":81,"line":700},[79,111806,703],{"class":448},[79,111808,706],{"class":85},[79,111810,709],{"class":228},[79,111812,111813,111815],{"class":81,"line":712},[79,111814,715],{"class":448},[79,111816,718],{"class":228},[79,111818,111819],{"class":81,"line":721},[79,111820,542],{"emptyLinePlaceholder":541},[79,111822,111823],{"class":81,"line":726},[79,111824,542],{"emptyLinePlaceholder":541},[79,111826,111827,111829,111831,111833,111835],{"class":81,"line":731},[79,111828,703],{"class":448},[79,111830,736],{"class":85},[79,111832,739],{"class":228},[79,111834,742],{"class":96},[79,111836,745],{"class":228},[79,111838,111839,111841,111843,111845,111847],{"class":81,"line":748},[79,111840,751],{"class":228},[79,111842,239],{"class":448},[79,111844,756],{"class":228},[79,111846,759],{"class":96},[79,111848,762],{"class":228},[79,111850,111851,111853,111855,111857,111859],{"class":81,"line":765},[79,111852,768],{"class":228},[79,111854,239],{"class":448},[79,111856,756],{"class":228},[79,111858,775],{"class":96},[79,111860,762],{"class":228},[79,111862,111863,111865,111867,111869,111871,111873,111875,111877,111879,111881,111883,111885,111887,111889],{"class":81,"line":780},[79,111864,715],{"class":448},[79,111866,452],{"class":96},[79,111868,455],{"class":228},[79,111870,458],{"class":96},[79,111872,461],{"class":448},[79,111874,464],{"class":96},[79,111876,467],{"class":448},[79,111878,470],{"class":228},[79,111880,473],{"class":448},[79,111882,470],{"class":228},[79,111884,478],{"class":448},[79,111886,481],{"class":228},[79,111888,473],{"class":448},[79,111890,486],{"class":228},[79,111892,111893],{"class":81,"line":811},[79,111894,542],{"emptyLinePlaceholder":541},[79,111896,111897],{"class":81,"line":816},[79,111898,542],{"emptyLinePlaceholder":541},[79,111900,111901,111903,111905,111907,111909],{"class":81,"line":821},[79,111902,703],{"class":448},[79,111904,826],{"class":85},[79,111906,829],{"class":228},[79,111908,832],{"class":96},[79,111910,745],{"class":228},[79,111912,111913,111915,111917,111919,111921],{"class":81,"line":837},[79,111914,840],{"class":228},[79,111916,239],{"class":448},[79,111918,845],{"class":228},[79,111920,553],{"class":96},[79,111922,850],{"class":228},[79,111924,111925,111927,111929],{"class":81,"line":853},[79,111926,856],{"class":228},[79,111928,239],{"class":448},[79,111930,861],{"class":228},[79,111932,111933],{"class":81,"line":864},[79,111934,542],{"emptyLinePlaceholder":541},[79,111936,111937,111939,111941,111943,111945],{"class":81,"line":869},[79,111938,872],{"class":228},[79,111940,775],{"class":96},[79,111942,877],{"class":228},[79,111944,239],{"class":448},[79,111946,882],{"class":96},[79,111948,111949],{"class":81,"line":885},[79,111950,888],{"class":228},[79,111952,111953],{"class":81,"line":891},[79,111954,542],{"emptyLinePlaceholder":541},[79,111956,111957,111959,111961],{"class":81,"line":896},[79,111958,899],{"class":228},[79,111960,239],{"class":448},[79,111962,904],{"class":96},[79,111964,111965],{"class":81,"line":907},[79,111966,542],{"emptyLinePlaceholder":541},[79,111968,111969,111971,111973,111975,111977,111979,111981],{"class":81,"line":912},[79,111970,915],{"class":448},[79,111972,918],{"class":228},[79,111974,921],{"class":448},[79,111976,924],{"class":96},[79,111978,455],{"class":228},[79,111980,929],{"class":96},[79,111982,932],{"class":228},[79,111984,111985,111987,111989],{"class":81,"line":935},[79,111986,938],{"class":228},[79,111988,239],{"class":448},[79,111990,943],{"class":228},[79,111992,111993,111995,111997,111999,112001],{"class":81,"line":946},[79,111994,949],{"class":228},[79,111996,239],{"class":448},[79,111998,756],{"class":228},[79,112000,775],{"class":96},[79,112002,762],{"class":228},[79,112004,112005,112007,112009,112011,112013],{"class":81,"line":960},[79,112006,963],{"class":228},[79,112008,239],{"class":448},[79,112010,756],{"class":228},[79,112012,970],{"class":96},[79,112014,762],{"class":228},[79,112016,112017],{"class":81,"line":975},[79,112018,542],{"emptyLinePlaceholder":541},[79,112020,112021,112023,112025,112027,112029,112031,112033,112035,112037],{"class":81,"line":980},[79,112022,983],{"class":228},[79,112024,239],{"class":448},[79,112026,988],{"class":96},[79,112028,467],{"class":448},[79,112030,481],{"class":228},[79,112032,995],{"class":448},[79,112034,998],{"class":96},[79,112036,467],{"class":448},[79,112038,1003],{"class":228},[79,112040,112041,112043,112045,112047,112049,112051,112053,112055],{"class":81,"line":1006},[79,112042,983],{"class":228},[79,112044,239],{"class":448},[79,112046,1013],{"class":228},[79,112048,478],{"class":448},[79,112050,458],{"class":96},[79,112052,1020],{"class":228},[79,112054,458],{"class":96},[79,112056,850],{"class":228},[79,112058,112059],{"class":81,"line":1027},[79,112060,542],{"emptyLinePlaceholder":541},[79,112062,112063,112065,112067,112069,112071],{"class":81,"line":1032},[79,112064,1035],{"class":228},[79,112066,759],{"class":96},[79,112068,877],{"class":228},[79,112070,239],{"class":448},[79,112072,1044],{"class":228},[79,112074,112075],{"class":81,"line":1047},[79,112076,1050],{"class":228},[79,112078,112079],{"class":81,"line":1053},[79,112080,542],{"emptyLinePlaceholder":541},[79,112082,112083,112085,112087],{"class":81,"line":1058},[79,112084,1061],{"class":228},[79,112086,239],{"class":448},[79,112088,1066],{"class":228},[79,112090,112091,112093,112095],{"class":81,"line":1069},[79,112092,1072],{"class":228},[79,112094,1075],{"class":448},[79,112096,1078],{"class":228},[79,112098,112099],{"class":81,"line":1081},[79,112100,542],{"emptyLinePlaceholder":541},[79,112102,112103,112105,112107,112109,112111,112113,112115],{"class":81,"line":1086},[79,112104,1089],{"class":448},[79,112106,918],{"class":228},[79,112108,1094],{"class":448},[79,112110,1097],{"class":96},[79,112112,1100],{"class":448},[79,112114,1103],{"class":96},[79,112116,745],{"class":228},[79,112118,112119,112121,112123,112125,112127,112129,112131,112133,112135,112137,112139,112141,112143,112145,112147,112149],{"class":81,"line":1108},[79,112120,1111],{"class":96},[79,112122,455],{"class":228},[79,112124,1116],{"class":89},[79,112126,1119],{"class":228},[79,112128,1122],{"class":89},[79,112130,1125],{"class":228},[79,112132,970],{"class":96},[79,112134,1130],{"class":228},[79,112136,1133],{"class":89},[79,112138,1020],{"class":228},[79,112140,1138],{"class":96},[79,112142,455],{"class":228},[79,112144,742],{"class":96},[79,112146,1145],{"class":228},[79,112148,970],{"class":96},[79,112150,1150],{"class":228},[79,112152,112153],{"class":81,"line":1153},[79,112154,542],{"emptyLinePlaceholder":541},[79,112156,112157,112159,112161,112163,112165,112167,112169,112171],{"class":81,"line":1158},[79,112158,1161],{"class":96},[79,112160,455],{"class":228},[79,112162,1166],{"class":89},[79,112164,1020],{"class":228},[79,112166,1138],{"class":96},[79,112168,1173],{"class":228},[79,112170,970],{"class":96},[79,112172,1150],{"class":228},[79,112174,112175,112177,112179,112181,112183,112185],{"class":81,"line":1180},[79,112176,1161],{"class":96},[79,112178,455],{"class":228},[79,112180,1187],{"class":89},[79,112182,1190],{"class":228},[79,112184,970],{"class":96},[79,112186,1150],{"class":228},[79,112188,112189],{"class":81,"line":1197},[79,112190,542],{"emptyLinePlaceholder":541},[79,112192,112193],{"class":81,"line":1202},[79,112194,542],{"emptyLinePlaceholder":541},[79,112196,112197,112199,112201,112203,112205],{"class":81,"line":1207},[79,112198,1210],{"class":448},[79,112200,1213],{"class":96},[79,112202,1100],{"class":448},[79,112204,1218],{"class":89},[79,112206,745],{"class":228},[79,112208,112209],{"class":81,"line":1223},[79,112210,1226],{"class":228},[19,112212,1229],{},[51,112214,112215],{"className":73,"code":1232,"language":75,"meta":57,"style":57},[59,112216,112217],{"__ignoreMap":57},[79,112218,112219,112221],{"class":81,"line":82},[79,112220,1239],{"class":85},[79,112222,1242],{"class":89},[19,112224,1245],{},[51,112226,112227],{"className":73,"code":1248,"language":75,"meta":57,"style":57},[59,112228,112229],{"__ignoreMap":57},[79,112230,112231,112233],{"class":81,"line":82},[79,112232,441],{"class":85},[79,112234,1242],{"class":89},[339,112236,1259],{"id":1259},[19,112238,1262],{},[51,112240,112241],{"className":439,"code":1265,"language":441,"meta":57,"style":57},[59,112242,112243,112251],{"__ignoreMap":57},[79,112244,112245,112247,112249],{"class":81,"line":82},[79,112246,703],{"class":448},[79,112248,706],{"class":85},[79,112250,709],{"class":228},[79,112252,112253,112255],{"class":81,"line":167},[79,112254,715],{"class":448},[79,112256,718],{"class":228},[19,112258,112259,1287,112261,1291,112263,1295],{},[59,112260,1286],{},[59,112262,1290],{},[59,112264,1294],{},[19,112266,1298],{},[51,112268,112269],{"className":439,"code":1301,"language":441,"meta":57,"style":57},[59,112270,112271,112283],{"__ignoreMap":57},[79,112272,112273,112275,112277,112279,112281],{"class":81,"line":82},[79,112274,1308],{"class":228},[79,112276,775],{"class":96},[79,112278,877],{"class":228},[79,112280,239],{"class":448},[79,112282,882],{"class":96},[79,112284,112285],{"class":81,"line":167},[79,112286,1321],{"class":228},[19,112288,1324],{},[19,112290,1327],{},[51,112292,112293],{"className":439,"code":1330,"language":441,"meta":57,"style":57},[59,112294,112295,112315],{"__ignoreMap":57},[79,112296,112297,112299,112301,112303,112305,112307,112309,112311,112313],{"class":81,"line":82},[79,112298,1337],{"class":228},[79,112300,239],{"class":448},[79,112302,988],{"class":96},[79,112304,467],{"class":448},[79,112306,481],{"class":228},[79,112308,995],{"class":448},[79,112310,998],{"class":96},[79,112312,467],{"class":448},[79,112314,1003],{"class":228},[79,112316,112317,112319,112321,112323,112325,112327,112329,112331],{"class":81,"line":167},[79,112318,1337],{"class":228},[79,112320,239],{"class":448},[79,112322,1013],{"class":228},[79,112324,478],{"class":448},[79,112326,458],{"class":96},[79,112328,1020],{"class":228},[79,112330,458],{"class":96},[79,112332,850],{"class":228},[19,112334,1374],{},[19,112336,1377],{},[51,112338,112339],{"className":439,"code":1380,"language":441,"meta":57,"style":57},[59,112340,112341],{"__ignoreMap":57},[79,112342,112343,112345,112347,112349,112351,112353],{"class":81,"line":82},[79,112344,1387],{"class":228},[79,112346,478],{"class":448},[79,112348,458],{"class":96},[79,112350,1020],{"class":228},[79,112352,458],{"class":96},[79,112354,850],{"class":228},[19,112356,1400,112357,1404],{},[59,112358,1403],{},[339,112360,1407],{"id":1407},[51,112362,112363],{"className":439,"code":1265,"language":441,"meta":57,"style":57},[59,112364,112365,112373],{"__ignoreMap":57},[79,112366,112367,112369,112371],{"class":81,"line":82},[79,112368,703],{"class":448},[79,112370,706],{"class":85},[79,112372,709],{"class":228},[79,112374,112375,112377],{"class":81,"line":167},[79,112376,715],{"class":448},[79,112378,718],{"class":228},[19,112380,1428,112381,1432,112383,1436,112385,1440],{},[59,112382,1431],{},[59,112384,1435],{},[59,112386,1439],{},[19,112388,1443],{},[51,112390,112392],{"className":112391,"code":1447,"language":56,"meta":57},[54],[59,112393,1447],{"__ignoreMap":57},[19,112395,1452],{},[51,112397,112399],{"className":112398,"code":1456,"language":56,"meta":57},[54],[59,112400,1456],{"__ignoreMap":57},[51,112402,112403],{"className":439,"code":1461,"language":441,"meta":57,"style":57},[59,112404,112405],{"__ignoreMap":57},[79,112406,112407,112409,112411,112413,112415],{"class":81,"line":82},[79,112408,703],{"class":448},[79,112410,736],{"class":85},[79,112412,739],{"class":228},[79,112414,742],{"class":96},[79,112416,745],{"class":228},[19,112418,1478,112419,1482],{},[59,112420,1481],{},[51,112422,112423],{"className":439,"code":1485,"language":441,"meta":57,"style":57},[59,112424,112425,112437],{"__ignoreMap":57},[79,112426,112427,112429,112431,112433,112435],{"class":81,"line":82},[79,112428,1492],{"class":228},[79,112430,239],{"class":448},[79,112432,756],{"class":228},[79,112434,759],{"class":96},[79,112436,762],{"class":228},[79,112438,112439,112441,112443,112445,112447],{"class":81,"line":167},[79,112440,1505],{"class":228},[79,112442,239],{"class":448},[79,112444,756],{"class":228},[79,112446,775],{"class":96},[79,112448,762],{"class":228},[19,112450,1516,112451,1520,112453,1524],{},[59,112452,1519],{},[59,112454,1523],{},[51,112456,112457],{"className":439,"code":440,"language":441,"meta":57,"style":57},[59,112458,112459],{"__ignoreMap":57},[79,112460,112461,112463,112465,112467,112469,112471,112473,112475,112477,112479,112481,112483,112485,112487],{"class":81,"line":82},[79,112462,449],{"class":448},[79,112464,452],{"class":96},[79,112466,455],{"class":228},[79,112468,458],{"class":96},[79,112470,461],{"class":448},[79,112472,464],{"class":96},[79,112474,467],{"class":448},[79,112476,470],{"class":228},[79,112478,473],{"class":448},[79,112480,470],{"class":228},[79,112482,478],{"class":448},[79,112484,481],{"class":228},[79,112486,473],{"class":448},[79,112488,486],{"class":228},[19,112490,1561,112491,1565,112493,1569],{},[59,112492,1564],{},[59,112494,1568],{},[51,112496,112497],{"className":439,"code":1572,"language":441,"meta":57,"style":57},[59,112498,112499],{"__ignoreMap":57},[79,112500,112501,112503,112505,112507,112509],{"class":81,"line":82},[79,112502,1308],{"class":228},[79,112504,775],{"class":96},[79,112506,877],{"class":228},[79,112508,239],{"class":448},[79,112510,882],{"class":96},[19,112512,1589,112513,1593,112515,1597],{},[59,112514,1592],{},[59,112516,1596],{},[51,112518,112519],{"className":439,"code":1321,"language":441,"meta":57,"style":57},[59,112520,112521],{"__ignoreMap":57},[79,112522,112523],{"class":81,"line":82},[79,112524,1321],{"class":228},[19,112526,1608,112527,1611],{},[59,112528,1290],{},[51,112530,112531],{"className":439,"code":1614,"language":441,"meta":57,"style":57},[59,112532,112533],{"__ignoreMap":57},[79,112534,112535,112537,112539],{"class":81,"line":82},[79,112536,1621],{"class":228},[79,112538,239],{"class":448},[79,112540,904],{"class":96},[19,112542,1628],{},[51,112544,112545],{"className":439,"code":1631,"language":441,"meta":57,"style":57},[59,112546,112547],{"__ignoreMap":57},[79,112548,112549,112551,112553,112555,112557,112559,112561],{"class":81,"line":82},[79,112550,1638],{"class":448},[79,112552,918],{"class":228},[79,112554,921],{"class":448},[79,112556,924],{"class":96},[79,112558,455],{"class":228},[79,112560,929],{"class":96},[79,112562,932],{"class":228},[19,112564,1653,112565,1657],{},[59,112566,1656],{},[51,112568,112569],{"className":439,"code":1660,"language":441,"meta":57,"style":57},[59,112570,112571],{"__ignoreMap":57},[79,112572,112573,112575,112577],{"class":81,"line":82},[79,112574,1667],{"class":228},[79,112576,239],{"class":448},[79,112578,943],{"class":228},[19,112580,1674,112581,497],{},[59,112582,1481],{},[51,112584,112585],{"className":439,"code":1679,"language":441,"meta":57,"style":57},[59,112586,112587,112599],{"__ignoreMap":57},[79,112588,112589,112591,112593,112595,112597],{"class":81,"line":82},[79,112590,1505],{"class":228},[79,112592,239],{"class":448},[79,112594,756],{"class":228},[79,112596,775],{"class":96},[79,112598,762],{"class":228},[79,112600,112601,112603,112605,112607,112609],{"class":81,"line":167},[79,112602,1698],{"class":228},[79,112604,239],{"class":448},[79,112606,756],{"class":228},[79,112608,970],{"class":96},[79,112610,762],{"class":228},[19,112612,1709,112613,1713,112615,497],{},[59,112614,1712],{},[59,112616,1716],{},[51,112618,112619],{"className":439,"code":1719,"language":441,"meta":57,"style":57},[59,112620,112621],{"__ignoreMap":57},[79,112622,112623,112625,112627,112629,112631,112633,112635,112637,112639],{"class":81,"line":82},[79,112624,1337],{"class":228},[79,112626,239],{"class":448},[79,112628,988],{"class":96},[79,112630,467],{"class":448},[79,112632,481],{"class":228},[79,112634,995],{"class":448},[79,112636,998],{"class":96},[79,112638,467],{"class":448},[79,112640,1003],{"class":228},[19,112642,1744,112643,1748,112645,1752],{},[59,112644,1747],{},[59,112646,1751],{},[51,112648,112649],{"className":439,"code":1755,"language":441,"meta":57,"style":57},[59,112650,112651],{"__ignoreMap":57},[79,112652,112653,112655,112657,112659,112661,112663,112665,112667],{"class":81,"line":82},[79,112654,1337],{"class":228},[79,112656,239],{"class":448},[79,112658,1013],{"class":228},[79,112660,478],{"class":448},[79,112662,458],{"class":96},[79,112664,1020],{"class":228},[79,112666,458],{"class":96},[79,112668,850],{"class":228},[19,112670,1778],{},[51,112672,112673],{"className":439,"code":424,"language":441,"meta":57,"style":57},[59,112674,112675],{"__ignoreMap":57},[79,112676,112677,112679,112681,112683,112685],{"class":81,"line":82},[79,112678,1787],{"class":228},[79,112680,759],{"class":96},[79,112682,877],{"class":228},[79,112684,239],{"class":448},[79,112686,1044],{"class":228},[19,112688,1798],{},[51,112690,112691],{"className":439,"code":1801,"language":441,"meta":57,"style":57},[59,112692,112693],{"__ignoreMap":57},[79,112694,112695],{"class":81,"line":82},[79,112696,1801],{"class":228},[19,112698,1810,112699,1814],{},[59,112700,1813],{},[51,112702,112703],{"className":439,"code":1817,"language":441,"meta":57,"style":57},[59,112704,112705,112713],{"__ignoreMap":57},[79,112706,112707,112709,112711],{"class":81,"line":82},[79,112708,1824],{"class":228},[79,112710,239],{"class":448},[79,112712,1066],{"class":228},[79,112714,112715,112717,112719],{"class":81,"line":167},[79,112716,1621],{"class":228},[79,112718,1075],{"class":448},[79,112720,1078],{"class":228},[19,112722,1839,112723,1842,112725,1846,112727,497],{},[59,112724,1075],{},[59,112726,1845],{},[59,112728,1849],{},[51,112730,112731],{"className":439,"code":1852,"language":441,"meta":57,"style":57},[59,112732,112733],{"__ignoreMap":57},[79,112734,112735,112737,112739,112741,112743,112745,112747],{"class":81,"line":82},[79,112736,1210],{"class":448},[79,112738,918],{"class":228},[79,112740,1094],{"class":448},[79,112742,1097],{"class":96},[79,112744,1100],{"class":448},[79,112746,1103],{"class":96},[79,112748,745],{"class":228},[19,112750,112751,1875,112753,1879],{},[59,112752,1094],{},[59,112754,1878],{},[51,112756,112757],{"className":439,"code":1882,"language":441,"meta":57,"style":57},[59,112758,112759],{"__ignoreMap":57},[79,112760,112761,112763,112765,112767,112769,112771,112773,112775,112777,112779,112781,112783,112785,112787,112789,112791],{"class":81,"line":82},[79,112762,1889],{"class":96},[79,112764,455],{"class":228},[79,112766,1116],{"class":89},[79,112768,1119],{"class":228},[79,112770,1122],{"class":89},[79,112772,1125],{"class":228},[79,112774,970],{"class":96},[79,112776,1130],{"class":228},[79,112778,1133],{"class":89},[79,112780,1020],{"class":228},[79,112782,1138],{"class":96},[79,112784,455],{"class":228},[79,112786,742],{"class":96},[79,112788,1145],{"class":228},[79,112790,970],{"class":96},[79,112792,1150],{"class":228},[19,112794,1922,112795,1926,112797,1930],{},[59,112796,1925],{},[59,112798,1929],{},[14,112800,1934],{"id":1933},[19,112802,1937],{},[51,112804,112806],{"className":112805,"code":1941,"language":56,"meta":57},[54],[59,112807,1941],{"__ignoreMap":57},[19,112809,1946],{},[19,112811,1949],{},[51,112813,112815],{"className":112814,"code":1953,"language":56,"meta":57},[54],[59,112816,1953],{"__ignoreMap":57},[19,112818,1958],{},[26,112820,112821,112825,112829],{},[29,112822,112823,1966],{},[59,112824,1965],{},[29,112826,112827,1971],{},[59,112828,376],{},[29,112830,1974,112831,1978,112833,497],{},[59,112832,1977],{},[59,112834,775],{},[19,112836,1983],{},[14,112838,1987],{"id":1986},[26,112840,112841,112845,112847,112851,112857,112861,112863],{},[29,112842,1992,112843,497],{},[59,112844,1995],{},[29,112846,1998],{},[29,112848,2001,112849,2005],{},[59,112850,2004],{},[29,112852,2008,112853,2012,112855,497],{},[59,112854,2011],{},[59,112856,2015],{},[29,112858,2018,112859,2021],{},[59,112860,1568],{},[29,112862,2024],{},[29,112864,2027],{},[14,112866,2031],{"id":2030},[339,112868,2034],{"id":2034},[19,112870,2037,112871,2041,112873,2045],{},[59,112872,2040],{},[59,112874,2044],{},[339,112876,2048],{"id":2048},[19,112878,2051],{},[51,112880,112881],{"className":439,"code":2054,"language":441,"meta":57,"style":57},[59,112882,112883],{"__ignoreMap":57},[79,112884,112885,112887,112889,112891,112893,112895,112897,112899,112901,112903],{"class":81,"line":82},[79,112886,1337],{"class":228},[79,112888,239],{"class":448},[79,112890,461],{"class":448},[79,112892,1747],{"class":96},[79,112894,467],{"class":448},[79,112896,481],{"class":228},[79,112898,478],{"class":448},[79,112900,998],{"class":96},[79,112902,467],{"class":448},[79,112904,1003],{"class":228},[339,112906,2081],{"id":2081},[19,112908,2084,112909,2087,112911,2091],{},[59,112910,2004],{},[59,112912,2090],{},[339,112914,112915,2097],{"id":2094},[59,112916,1712],{},[19,112918,2100],{},[51,112920,112922],{"className":112921,"code":2104,"language":56,"meta":57},[54],[59,112923,2104],{"__ignoreMap":57},[19,112925,398],{},[51,112927,112929],{"className":112928,"code":2112,"language":56,"meta":57},[54],[59,112930,2112],{"__ignoreMap":57},[339,112932,2118],{"id":2117},[19,112934,2121],{},[14,112936,2125],{"id":2124},[19,112938,2128],{},[26,112940,112941,112943,112949,112953,112955],{},[29,112942,2133],{},[29,112944,2136,112945,2139,112947,2142],{},[59,112946,1290],{},[59,112948,1294],{},[29,112950,2145,112951,497],{},[59,112952,2148],{},[29,112954,2151],{},[29,112956,2154],{},[19,112958,2157],{},[2159,112960,2161],{},{"title":57,"searchDepth":167,"depth":167,"links":112962},[112963,112964,112965,112970,112974,112975,112976,112983],{"id":16,"depth":167,"text":17},{"id":66,"depth":167,"text":67},{"id":203,"depth":167,"text":204,"children":112966},[112967,112968,112969],{"id":341,"depth":178,"text":342},{"id":416,"depth":178,"text":417},{"id":432,"depth":178,"text":433},{"id":509,"depth":167,"text":510,"children":112971},[112972,112973],{"id":1259,"depth":178,"text":1259},{"id":1407,"depth":178,"text":1407},{"id":1933,"depth":167,"text":1934},{"id":1986,"depth":167,"text":1987},{"id":2030,"depth":167,"text":2031,"children":112977},[112978,112979,112980,112981,112982],{"id":2034,"depth":178,"text":2034},{"id":2048,"depth":178,"text":2048},{"id":2081,"depth":178,"text":2081},{"id":2094,"depth":178,"text":2183},{"id":2117,"depth":178,"text":2118},{"id":2124,"depth":167,"text":2125},{},{"title":5,"description":57},{"id":112987,"title":112988,"body":112989,"description":57,"extension":2186,"meta":115003,"navigation":541,"path":115004,"seo":115005,"stem":115006,"__hash__":115007},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":112990,"toc":114979},[112991,112994,112996,112999,113001,113018,113021,113024,113030,113033,113035,113037,113061,113063,113077,113079,113120,113122,113140,113142,113145,113151,113154,113182,113186,113192,113217,113220,113251,113258,113261,113264,113270,113273,113279,113282,113288,113292,113295,113320,113323,113325,114085,114087,114099,114101,114112,114114,114117,114134,114137,114139,114150,114153,114155,114201,114204,114217,114220,114302,114305,114307,114323,114333,114346,114349,114388,114398,114409,114419,114432,114435,114464,114467,114477,114480,114486,114503,114514,114516,114522,114539,114550,114571,114574,114586,114589,114610,114613,114621,114629,114646,114649,114718,114725,114733,114736,114749,114756,114758,114761,114767,114770,114773,114779,114785,114787,114827,114829,114835,114844,114847,114849,114869,114872,114875,114881,114885,114887,114914,114917,114920,114947,114953,114956,114959,114961,114964,114967,114973,114976],[10,112992,112988],{"id":112993},"_7控制任务reacher-机械臂到达目标",[14,112995,17],{"id":16},[19,112997,112998],{},"本章搭建一个二维两关节 reacher 任务。",[19,113000,24],{},[26,113002,113003,113006,113009,113012,113015],{},[29,113004,113005],{},"两个 hinge joint",[29,113007,113008],{},"两个 motor actuator",[29,113010,113011],{},"site 作为末端点和目标点",[29,113013,113014],{},"根据末端和目标距离设计 reward",[29,113016,113017],{},"构造机械臂任务的基本形式",[19,113019,113020],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,113022,113023],{},"Reacher 任务可以理解为：",[51,113025,113028],{"className":113026,"code":113027,"language":56,"meta":57},[54],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[59,113029,113027],{"__ignoreMap":57},[19,113031,113032],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,113034,67],{"id":66},[19,113036,70],{},[51,113038,113039],{"className":73,"code":74,"language":75,"meta":57,"style":57},[59,113040,113041],{"__ignoreMap":57},[79,113042,113043,113045,113047,113049,113051,113053,113055,113057,113059],{"class":81,"line":82},[79,113044,86],{"class":85},[79,113046,90],{"class":89},[79,113048,93],{"class":89},[79,113050,97],{"class":96},[79,113052,100],{"class":89},[79,113054,103],{"class":89},[79,113056,106],{"class":89},[79,113058,109],{"class":89},[79,113060,112],{"class":89},[19,113062,115],{},[51,113064,113065],{"className":73,"code":118,"language":75,"meta":57,"style":57},[59,113066,113067],{"__ignoreMap":57},[79,113068,113069,113071,113073,113075],{"class":81,"line":82},[79,113070,125],{"class":85},[79,113072,93],{"class":89},[79,113074,130],{"class":89},[79,113076,133],{"class":89},[19,113078,136],{},[51,113080,113082],{"className":73,"code":113081,"language":75,"meta":57,"style":57},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[59,113083,113084,113101,113110],{"__ignoreMap":57},[79,113085,113086,113088,113090,113092,113095,113097,113099],{"class":81,"line":82},[79,113087,146],{"class":85},[79,113089,149],{"class":89},[79,113091,152],{"class":96},[79,113093,113094],{"class":89}," mujoco-reacher",[79,113096,158],{"class":89},[79,113098,161],{"class":96},[79,113100,164],{"class":96},[79,113102,113103,113105,113107],{"class":81,"line":167},[79,113104,146],{"class":85},[79,113106,172],{"class":89},[79,113108,113109],{"class":89}," mujoco-reacher\n",[79,113111,113112,113114,113116,113118],{"class":81,"line":178},[79,113113,125],{"class":85},[79,113115,93],{"class":89},[79,113117,130],{"class":89},[79,113119,133],{"class":89},[19,113121,189],{},[26,113123,113124,113127,113130],{},[29,113125,113126],{},"本章使用低维状态，不使用图像输入。",[29,113128,113129],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[29,113131,113132,113133,2139,113135,2139,113137,113139],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[59,113134,1290],{},[59,113136,1294],{},[59,113138,105606],{}," 的方法一致。",[14,113141,204],{"id":203},[19,113143,113144],{},"Reacher 任务核心:",[51,113146,113149],{"className":113147,"code":113148,"language":56,"meta":57},[54],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[59,113150,113148],{"__ignoreMap":57},[19,113152,113153],{},"读取 site 世界坐标:",[51,113155,113157],{"className":439,"code":113156,"language":441,"meta":57,"style":57},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[59,113158,113159,113172],{"__ignoreMap":57},[79,113160,113161,113163,113165,113167,113170],{"class":81,"line":82},[79,113162,105560],{"class":228},[79,113164,239],{"class":448},[79,113166,105332],{"class":228},[79,113168,113169],{"class":89},"\"tip\"",[79,113171,850],{"class":228},[79,113173,113174,113177,113179],{"class":81,"line":167},[79,113175,113176],{"class":228},"tip_pos ",[79,113178,239],{"class":448},[79,113180,113181],{"class":228}," data.site_xpos[site_id]\n",[339,113183,113185],{"id":113184},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,113187,113188,113189,113191],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[59,113190,1290],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[51,113193,113195],{"className":439,"code":113194,"language":441,"meta":57,"style":57},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[59,113196,113197,113207],{"__ignoreMap":57},[79,113198,113199,113202,113204],{"class":81,"line":82},[79,113200,113201],{"class":228},"tip ",[79,113203,239],{"class":448},[79,113205,113206],{"class":228}," data.site_xpos[tip_site_id]\n",[79,113208,113209,113212,113214],{"class":81,"line":167},[79,113210,113211],{"class":228},"target ",[79,113213,239],{"class":448},[79,113215,113216],{"class":228}," data.site_xpos[target_site_id]\n",[19,113218,113219],{},"这样 reward 就很容易写：",[51,113221,113223],{"className":439,"code":113222,"language":441,"meta":57,"style":57},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[59,113224,113225,113240],{"__ignoreMap":57},[79,113226,113227,113230,113232,113235,113237],{"class":81,"line":82},[79,113228,113229],{"class":228},"dist ",[79,113231,239],{"class":448},[79,113233,113234],{"class":228}," np.linalg.norm(tip ",[79,113236,478],{"class":448},[79,113238,113239],{"class":228}," target)\n",[79,113241,113242,113244,113246,113248],{"class":81,"line":167},[79,113243,1824],{"class":228},[79,113245,239],{"class":448},[79,113247,461],{"class":448},[79,113249,113250],{"class":228},"dist\n",[19,113252,113253,113254,113257],{},"距离越小，",[59,113255,113256],{},"-dist"," 越接近 0，奖励越高。",[339,113259,113260],{"id":113260},"两关节机械臂的状态",[19,113262,113263],{},"这个模型有两个 hinge joint：",[51,113265,113268],{"className":113266,"code":113267,"language":56,"meta":57},[54],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[59,113269,113267],{"__ignoreMap":57},[19,113271,113272],{},"再加上末端和目标位置：",[51,113274,113277],{"className":113275,"code":113276,"language":56,"meta":57},[54],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[59,113278,113276],{"__ignoreMap":57},[19,113280,113281],{},"总维度：",[51,113283,113286],{"className":113284,"code":113285,"language":56,"meta":57},[54],"2 + 2 + 3 + 3 = 10\n",[59,113287,113285],{"__ignoreMap":57},[339,113289,113291],{"id":113290},"为什么-gravity-是-0","为什么 gravity 是 0",[19,113293,113294],{},"本章把重力设为：",[51,113296,113298],{"className":219,"code":113297,"language":221,"meta":57,"style":57},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[59,113299,113300],{"__ignoreMap":57},[79,113301,113302,113304,113306,113308,113310,113312,113314,113316,113318],{"class":81,"line":82},[79,113303,229],{"class":228},[79,113305,71154],{"class":232},[79,113307,103159],{"class":85},[79,113309,239],{"class":228},[79,113311,103164],{"class":89},[79,113313,103167],{"class":85},[79,113315,239],{"class":228},[79,113317,105697],{"class":89},[79,113319,261],{"class":228},[19,113321,113322],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,113324,510],{"id":509},[51,113326,113328],{"className":439,"code":113327,"language":441,"meta":57,"style":57},"import mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"two_link_reacher\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n\n    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\" rgba=\"0.1 0.3 1 1\"\u002F>\n\n      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\" rgba=\"0.1 0.8 0.3 1\"\u002F>\n        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n      \u003C\u002Fbody>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\n  \u003Cactuator>\n    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n  \u003C\u002Factuator>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n    site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n    if site_id \u003C 0:\n        raise RuntimeError(f\"site not found: {name}\")\n    return data.site_xpos[site_id].copy()\n\n\ndef get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n    tip = site_position(model, data, \"tip\")\n    target = site_position(model, data, \"target\")\n    return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n\n\ndef reward(model: mujoco.MjModel, data: mujoco.MjData) -> float:\n    tip = site_position(model, data, \"tip\")\n    target = site_position(model, data, \"target\")\n    dist = np.linalg.norm(tip - target)\n    control_cost = 0.01 * np.sum(np.square(data.ctrl))\n    return float(-dist - control_cost)\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n    total_reward = 0.0\n\n    for step in range(500):\n        mujoco.mj_forward(model, data)\n        tip = site_position(model, data, \"tip\")\n        target = site_position(model, data, \"target\")\n        error = target - tip\n\n        data.ctrl[0] = np.clip(2.0 * error[2], -1.0, 1.0)\n        data.ctrl[1] = np.clip(2.0 * error[0], -1.0, 1.0)\n\n        mujoco.mj_step(model, data)\n        total_reward += reward(model, data)\n\n        if step % 100 == 0:\n            obs = get_obs(model, data)\n            print(\"step:\", step)\n            print(\"  tip:\", np.round(tip, 3))\n            print(\"  target:\", np.round(target, 3))\n            print(\"  ctrl:\", np.round(data.ctrl.copy(), 3))\n            print(\"  obs_dim:\", obs.shape[0])\n\n    print(\"total_reward:\", round(total_reward, 3))\n    print(\"final tip:\", np.round(site_position(model, data, \"tip\"), 3))\n    print(\"target:\", np.round(site_position(model, data, \"target\"), 3))\n\n\nif __name__ == \"__main__\":\n    main()\n",[59,113329,113330,113336,113346,113350,113354,113362,113367,113372,113376,113380,113385,113390,113394,113399,113404,113409,113413,113418,113423,113428,113433,113437,113441,113445,113449,113453,113458,113463,113467,113471,113475,113479,113483,113498,113507,113519,113542,113549,113553,113557,113567,113581,113595,113602,113606,113610,113624,113636,113648,113661,113676,113693,113697,113701,113713,113725,113733,113741,113745,113761,113766,113779,113792,113807,113811,113846,113878,113882,113886,113895,113899,113915,113925,113936,113952,113968,113984,114000,114004,114022,114042,114061,114065,114069,114081],{"__ignoreMap":57},[79,113331,113332,113334],{"class":81,"line":82},[79,113333,520],{"class":448},[79,113335,523],{"class":228},[79,113337,113338,113340,113342,113344],{"class":81,"line":167},[79,113339,520],{"class":448},[79,113341,530],{"class":228},[79,113343,533],{"class":448},[79,113345,536],{"class":228},[79,113347,113348],{"class":81,"line":178},[79,113349,542],{"emptyLinePlaceholder":541},[79,113351,113352],{"class":81,"line":545},[79,113353,542],{"emptyLinePlaceholder":541},[79,113355,113356,113358,113360],{"class":81,"line":550},[79,113357,553],{"class":96},[79,113359,556],{"class":448},[79,113361,559],{"class":89},[79,113363,113364],{"class":81,"line":562},[79,113365,113366],{"class":89},"\u003Cmujoco model=\"two_link_reacher\">\n",[79,113368,113369],{"class":81,"line":568},[79,113370,113371],{"class":89},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[79,113373,113374],{"class":81,"line":574},[79,113375,542],{"emptyLinePlaceholder":541},[79,113377,113378],{"class":81,"line":579},[79,113379,582],{"class":89},[79,113381,113382],{"class":81,"line":585},[79,113383,113384],{"class":89},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[79,113386,113387],{"class":81,"line":591},[79,113388,113389],{"class":89},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[79,113391,113392],{"class":81,"line":596},[79,113393,542],{"emptyLinePlaceholder":541},[79,113395,113396],{"class":81,"line":602},[79,113397,113398],{"class":89},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[79,113400,113401],{"class":81,"line":608},[79,113402,113403],{"class":89},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[79,113405,113406],{"class":81,"line":614},[79,113407,113408],{"class":89},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[79,113410,113411],{"class":81,"line":619},[79,113412,542],{"emptyLinePlaceholder":541},[79,113414,113415],{"class":81,"line":625},[79,113416,113417],{"class":89},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[79,113419,113420],{"class":81,"line":631},[79,113421,113422],{"class":89},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[79,113424,113425],{"class":81,"line":637},[79,113426,113427],{"class":89},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\" rgba=\"0.1 0.8 0.3 1\"\u002F>\n",[79,113429,113430],{"class":81,"line":643},[79,113431,113432],{"class":89},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[79,113434,113435],{"class":81,"line":649},[79,113436,640],{"class":89},[79,113438,113439],{"class":81,"line":655},[79,113440,646],{"class":89},[79,113442,113443],{"class":81,"line":660},[79,113444,652],{"class":89},[79,113446,113447],{"class":81,"line":666},[79,113448,542],{"emptyLinePlaceholder":541},[79,113450,113451],{"class":81,"line":672},[79,113452,663],{"class":89},[79,113454,113455],{"class":81,"line":678},[79,113456,113457],{"class":89},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[79,113459,113460],{"class":81,"line":684},[79,113461,113462],{"class":89},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[79,113464,113465],{"class":81,"line":690},[79,113466,675],{"class":89},[79,113468,113469],{"class":81,"line":695},[79,113470,681],{"class":89},[79,113472,113473],{"class":81,"line":700},[79,113474,687],{"class":89},[79,113476,113477],{"class":81,"line":712},[79,113478,542],{"emptyLinePlaceholder":541},[79,113480,113481],{"class":81,"line":721},[79,113482,542],{"emptyLinePlaceholder":541},[79,113484,113485,113487,113490,113493,113495],{"class":81,"line":726},[79,113486,703],{"class":448},[79,113488,113489],{"class":85}," site_position",[79,113491,113492],{"class":228},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[79,113494,3409],{"class":96},[79,113496,113497],{"class":228},") -> np.ndarray:\n",[79,113499,113500,113502,113504],{"class":81,"line":731},[79,113501,105327],{"class":228},[79,113503,239],{"class":448},[79,113505,113506],{"class":228}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[79,113508,113509,113511,113513,113515,113517],{"class":81,"line":748},[79,113510,5176],{"class":448},[79,113512,105376],{"class":228},[79,113514,229],{"class":448},[79,113516,1103],{"class":96},[79,113518,745],{"class":228},[79,113520,113521,113523,113525,113527,113529,113532,113534,113536,113538,113540],{"class":81,"line":765},[79,113522,105359],{"class":448},[79,113524,105362],{"class":96},[79,113526,455],{"class":228},[79,113528,2307],{"class":448},[79,113530,113531],{"class":89},"\"site not found: ",[79,113533,3136],{"class":96},[79,113535,81798],{"class":228},[79,113537,3185],{"class":96},[79,113539,2495],{"class":89},[79,113541,850],{"class":228},[79,113543,113544,113546],{"class":81,"line":780},[79,113545,715],{"class":448},[79,113547,113548],{"class":228}," data.site_xpos[site_id].copy()\n",[79,113550,113551],{"class":81,"line":811},[79,113552,542],{"emptyLinePlaceholder":541},[79,113554,113555],{"class":81,"line":816},[79,113556,542],{"emptyLinePlaceholder":541},[79,113558,113559,113561,113564],{"class":81,"line":821},[79,113560,703],{"class":448},[79,113562,113563],{"class":85}," get_obs",[79,113565,113566],{"class":228},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[79,113568,113569,113572,113574,113577,113579],{"class":81,"line":837},[79,113570,113571],{"class":228},"    tip ",[79,113573,239],{"class":448},[79,113575,113576],{"class":228}," site_position(model, data, ",[79,113578,113169],{"class":89},[79,113580,850],{"class":228},[79,113582,113583,113586,113588,113590,113593],{"class":81,"line":853},[79,113584,113585],{"class":228},"    target ",[79,113587,239],{"class":448},[79,113589,113576],{"class":228},[79,113591,113592],{"class":89},"\"target\"",[79,113594,850],{"class":228},[79,113596,113597,113599],{"class":81,"line":864},[79,113598,715],{"class":448},[79,113600,113601],{"class":228}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[79,113603,113604],{"class":81,"line":869},[79,113605,542],{"emptyLinePlaceholder":541},[79,113607,113608],{"class":81,"line":885},[79,113609,542],{"emptyLinePlaceholder":541},[79,113611,113612,113614,113617,113620,113622],{"class":81,"line":891},[79,113613,703],{"class":448},[79,113615,113616],{"class":85}," reward",[79,113618,113619],{"class":228},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[79,113621,742],{"class":96},[79,113623,745],{"class":228},[79,113625,113626,113628,113630,113632,113634],{"class":81,"line":896},[79,113627,113571],{"class":228},[79,113629,239],{"class":448},[79,113631,113576],{"class":228},[79,113633,113169],{"class":89},[79,113635,850],{"class":228},[79,113637,113638,113640,113642,113644,113646],{"class":81,"line":907},[79,113639,113585],{"class":228},[79,113641,239],{"class":448},[79,113643,113576],{"class":228},[79,113645,113592],{"class":89},[79,113647,850],{"class":228},[79,113649,113650,113653,113655,113657,113659],{"class":81,"line":912},[79,113651,113652],{"class":228},"    dist ",[79,113654,239],{"class":448},[79,113656,113234],{"class":228},[79,113658,478],{"class":448},[79,113660,113239],{"class":228},[79,113662,113663,113666,113668,113671,113673],{"class":81,"line":935},[79,113664,113665],{"class":228},"    control_cost ",[79,113667,239],{"class":448},[79,113669,113670],{"class":96}," 0.01",[79,113672,467],{"class":448},[79,113674,113675],{"class":228}," np.sum(np.square(data.ctrl))\n",[79,113677,113678,113680,113682,113684,113686,113688,113690],{"class":81,"line":946},[79,113679,715],{"class":448},[79,113681,452],{"class":96},[79,113683,455],{"class":228},[79,113685,478],{"class":448},[79,113687,113229],{"class":228},[79,113689,478],{"class":448},[79,113691,113692],{"class":228}," control_cost)\n",[79,113694,113695],{"class":81,"line":960},[79,113696,542],{"emptyLinePlaceholder":541},[79,113698,113699],{"class":81,"line":975},[79,113700,542],{"emptyLinePlaceholder":541},[79,113702,113703,113705,113707,113709,113711],{"class":81,"line":980},[79,113704,703],{"class":448},[79,113706,826],{"class":85},[79,113708,829],{"class":228},[79,113710,832],{"class":96},[79,113712,745],{"class":228},[79,113714,113715,113717,113719,113721,113723],{"class":81,"line":1006},[79,113716,840],{"class":228},[79,113718,239],{"class":448},[79,113720,845],{"class":228},[79,113722,553],{"class":96},[79,113724,850],{"class":228},[79,113726,113727,113729,113731],{"class":81,"line":1027},[79,113728,856],{"class":228},[79,113730,239],{"class":448},[79,113732,861],{"class":228},[79,113734,113735,113737,113739],{"class":81,"line":1032},[79,113736,899],{"class":228},[79,113738,239],{"class":448},[79,113740,904],{"class":96},[79,113742,113743],{"class":81,"line":1047},[79,113744,542],{"emptyLinePlaceholder":541},[79,113746,113747,113749,113751,113753,113755,113757,113759],{"class":81,"line":1053},[79,113748,915],{"class":448},[79,113750,918],{"class":228},[79,113752,921],{"class":448},[79,113754,924],{"class":96},[79,113756,455],{"class":228},[79,113758,67062],{"class":96},[79,113760,932],{"class":228},[79,113762,113763],{"class":81,"line":1058},[79,113764,113765],{"class":228},"        mujoco.mj_forward(model, data)\n",[79,113767,113768,113771,113773,113775,113777],{"class":81,"line":1069},[79,113769,113770],{"class":228},"        tip ",[79,113772,239],{"class":448},[79,113774,113576],{"class":228},[79,113776,113169],{"class":89},[79,113778,850],{"class":228},[79,113780,113781,113784,113786,113788,113790],{"class":81,"line":1081},[79,113782,113783],{"class":228},"        target ",[79,113785,239],{"class":448},[79,113787,113576],{"class":228},[79,113789,113592],{"class":89},[79,113791,850],{"class":228},[79,113793,113794,113797,113799,113802,113804],{"class":81,"line":1086},[79,113795,113796],{"class":228},"        error ",[79,113798,239],{"class":448},[79,113800,113801],{"class":228}," target ",[79,113803,478],{"class":448},[79,113805,113806],{"class":228}," tip\n",[79,113808,113809],{"class":81,"line":1108},[79,113810,542],{"emptyLinePlaceholder":541},[79,113812,113813,113815,113817,113819,113821,113824,113826,113828,113831,113833,113836,113838,113840,113842,113844],{"class":81,"line":1153},[79,113814,1035],{"class":228},[79,113816,759],{"class":96},[79,113818,877],{"class":228},[79,113820,239],{"class":448},[79,113822,113823],{"class":228}," np.clip(",[79,113825,1747],{"class":96},[79,113827,467],{"class":448},[79,113829,113830],{"class":228}," error[",[79,113832,2331],{"class":96},[79,113834,113835],{"class":228},"], ",[79,113837,478],{"class":448},[79,113839,458],{"class":96},[79,113841,1020],{"class":228},[79,113843,458],{"class":96},[79,113845,850],{"class":228},[79,113847,113848,113850,113852,113854,113856,113858,113860,113862,113864,113866,113868,113870,113872,113874,113876],{"class":81,"line":1158},[79,113849,1035],{"class":228},[79,113851,775],{"class":96},[79,113853,877],{"class":228},[79,113855,239],{"class":448},[79,113857,113823],{"class":228},[79,113859,1747],{"class":96},[79,113861,467],{"class":448},[79,113863,113830],{"class":228},[79,113865,759],{"class":96},[79,113867,113835],{"class":228},[79,113869,478],{"class":448},[79,113871,458],{"class":96},[79,113873,1020],{"class":228},[79,113875,458],{"class":96},[79,113877,850],{"class":228},[79,113879,113880],{"class":81,"line":1180},[79,113881,542],{"emptyLinePlaceholder":541},[79,113883,113884],{"class":81,"line":1197},[79,113885,1050],{"class":228},[79,113887,113888,113890,113892],{"class":81,"line":1202},[79,113889,1072],{"class":228},[79,113891,1075],{"class":448},[79,113893,113894],{"class":228}," reward(model, data)\n",[79,113896,113897],{"class":81,"line":1207},[79,113898,542],{"emptyLinePlaceholder":541},[79,113900,113901,113903,113905,113907,113909,113911,113913],{"class":81,"line":1223},[79,113902,1089],{"class":448},[79,113904,918],{"class":228},[79,113906,1094],{"class":448},[79,113908,1097],{"class":96},[79,113910,1100],{"class":448},[79,113912,1103],{"class":96},[79,113914,745],{"class":228},[79,113916,113917,113920,113922],{"class":81,"line":18722},[79,113918,113919],{"class":228},"            obs ",[79,113921,239],{"class":448},[79,113923,113924],{"class":228}," get_obs(model, data)\n",[79,113926,113927,113929,113931,113933],{"class":81,"line":18728},[79,113928,1111],{"class":96},[79,113930,455],{"class":228},[79,113932,1116],{"class":89},[79,113934,113935],{"class":228},", step)\n",[79,113937,113938,113940,113942,113945,113948,113950],{"class":81,"line":18739},[79,113939,1111],{"class":96},[79,113941,455],{"class":228},[79,113943,113944],{"class":89},"\"  tip:\"",[79,113946,113947],{"class":228},", np.round(tip, ",[79,113949,970],{"class":96},[79,113951,1150],{"class":228},[79,113953,113954,113956,113958,113961,113964,113966],{"class":81,"line":18762},[79,113955,1111],{"class":96},[79,113957,455],{"class":228},[79,113959,113960],{"class":89},"\"  target:\"",[79,113962,113963],{"class":228},", np.round(target, ",[79,113965,970],{"class":96},[79,113967,1150],{"class":228},[79,113969,113970,113972,113974,113977,113980,113982],{"class":81,"line":18784},[79,113971,1111],{"class":96},[79,113973,455],{"class":228},[79,113975,113976],{"class":89},"\"  ctrl:\"",[79,113978,113979],{"class":228},", np.round(data.ctrl.copy(), ",[79,113981,970],{"class":96},[79,113983,1150],{"class":228},[79,113985,113986,113988,113990,113993,113996,113998],{"class":81,"line":18789},[79,113987,1111],{"class":96},[79,113989,455],{"class":228},[79,113991,113992],{"class":89},"\"  obs_dim:\"",[79,113994,113995],{"class":228},", obs.shape[",[79,113997,759],{"class":96},[79,113999,6727],{"class":228},[79,114001,114002],{"class":81,"line":18795},[79,114003,542],{"emptyLinePlaceholder":541},[79,114005,114006,114008,114010,114012,114014,114016,114018,114020],{"class":81,"line":18809},[79,114007,1161],{"class":96},[79,114009,455],{"class":228},[79,114011,1166],{"class":89},[79,114013,1020],{"class":228},[79,114015,1138],{"class":96},[79,114017,1173],{"class":228},[79,114019,970],{"class":96},[79,114021,1150],{"class":228},[79,114023,114024,114026,114028,114031,114034,114036,114038,114040],{"class":81,"line":18822},[79,114025,1161],{"class":96},[79,114027,455],{"class":228},[79,114029,114030],{"class":89},"\"final tip:\"",[79,114032,114033],{"class":228},", np.round(site_position(model, data, ",[79,114035,113169],{"class":89},[79,114037,1130],{"class":228},[79,114039,970],{"class":96},[79,114041,1150],{"class":228},[79,114043,114044,114046,114048,114051,114053,114055,114057,114059],{"class":81,"line":18827},[79,114045,1161],{"class":96},[79,114047,455],{"class":228},[79,114049,114050],{"class":89},"\"target:\"",[79,114052,114033],{"class":228},[79,114054,113592],{"class":89},[79,114056,1130],{"class":228},[79,114058,970],{"class":96},[79,114060,1150],{"class":228},[79,114062,114063],{"class":81,"line":18841},[79,114064,542],{"emptyLinePlaceholder":541},[79,114066,114067],{"class":81,"line":18846},[79,114068,542],{"emptyLinePlaceholder":541},[79,114070,114071,114073,114075,114077,114079],{"class":81,"line":18852},[79,114072,1210],{"class":448},[79,114074,1213],{"class":96},[79,114076,1100],{"class":448},[79,114078,1218],{"class":89},[79,114080,745],{"class":228},[79,114082,114083],{"class":81,"line":18857},[79,114084,1226],{"class":228},[19,114086,1229],{},[51,114088,114090],{"className":73,"code":114089,"language":75,"meta":57,"style":57},"touch ch7_reacher.py\n",[59,114091,114092],{"__ignoreMap":57},[79,114093,114094,114096],{"class":81,"line":82},[79,114095,1239],{"class":85},[79,114097,114098],{"class":89}," ch7_reacher.py\n",[19,114100,1245],{},[51,114102,114104],{"className":73,"code":114103,"language":75,"meta":57,"style":57},"python ch7_reacher.py\n",[59,114105,114106],{"__ignoreMap":57},[79,114107,114108,114110],{"class":81,"line":82},[79,114109,441],{"class":85},[79,114111,114098],{"class":89},[339,114113,1259],{"id":1259},[19,114115,114116],{},"读取 site 坐标：",[51,114118,114120],{"className":439,"code":114119,"language":441,"meta":57,"style":57},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[59,114121,114122],{"__ignoreMap":57},[79,114123,114124,114126,114128,114130,114132],{"class":81,"line":82},[79,114125,703],{"class":448},[79,114127,113489],{"class":85},[79,114129,113492],{"class":228},[79,114131,3409],{"class":96},[79,114133,113497],{"class":228},[19,114135,114136],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,114138,1262],{},[51,114140,114142],{"className":439,"code":114141,"language":441,"meta":57,"style":57},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[59,114143,114144],{"__ignoreMap":57},[79,114145,114146,114148],{"class":81,"line":82},[79,114147,449],{"class":448},[79,114149,113601],{"class":228},[19,114151,114152],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,114154,436],{},[51,114156,114158],{"className":439,"code":114157,"language":441,"meta":57,"style":57},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[59,114159,114160,114172,114185],{"__ignoreMap":57},[79,114161,114162,114164,114166,114168,114170],{"class":81,"line":82},[79,114163,113229],{"class":228},[79,114165,239],{"class":448},[79,114167,113234],{"class":228},[79,114169,478],{"class":448},[79,114171,113239],{"class":228},[79,114173,114174,114177,114179,114181,114183],{"class":81,"line":167},[79,114175,114176],{"class":228},"control_cost ",[79,114178,239],{"class":448},[79,114180,113670],{"class":96},[79,114182,467],{"class":448},[79,114184,113675],{"class":228},[79,114186,114187,114189,114191,114193,114195,114197,114199],{"class":81,"line":178},[79,114188,449],{"class":448},[79,114190,452],{"class":96},[79,114192,455],{"class":228},[79,114194,478],{"class":448},[79,114196,113229],{"class":228},[79,114198,478],{"class":448},[79,114200,113692],{"class":228},[19,114202,114203],{},"奖励由两部分组成：",[26,114205,114206,114211],{},[29,114207,114208,114210],{},[59,114209,113256],{},"：末端离目标越远，奖励越低。",[29,114212,114213,114216],{},[59,114214,114215],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,114218,114219],{},"简单控制器：",[51,114221,114223],{"className":439,"code":114222,"language":441,"meta":57,"style":57},"error = target - tip\ndata.ctrl[0] = np.clip(2.0 * error[2], -1.0, 1.0)\ndata.ctrl[1] = np.clip(2.0 * error[0], -1.0, 1.0)\n",[59,114224,114225,114238,114270],{"__ignoreMap":57},[79,114226,114227,114230,114232,114234,114236],{"class":81,"line":82},[79,114228,114229],{"class":228},"error ",[79,114231,239],{"class":448},[79,114233,113801],{"class":228},[79,114235,478],{"class":448},[79,114237,113806],{"class":228},[79,114239,114240,114242,114244,114246,114248,114250,114252,114254,114256,114258,114260,114262,114264,114266,114268],{"class":81,"line":167},[79,114241,1787],{"class":228},[79,114243,759],{"class":96},[79,114245,877],{"class":228},[79,114247,239],{"class":448},[79,114249,113823],{"class":228},[79,114251,1747],{"class":96},[79,114253,467],{"class":448},[79,114255,113830],{"class":228},[79,114257,2331],{"class":96},[79,114259,113835],{"class":228},[79,114261,478],{"class":448},[79,114263,458],{"class":96},[79,114265,1020],{"class":228},[79,114267,458],{"class":96},[79,114269,850],{"class":228},[79,114271,114272,114274,114276,114278,114280,114282,114284,114286,114288,114290,114292,114294,114296,114298,114300],{"class":81,"line":178},[79,114273,1787],{"class":228},[79,114275,775],{"class":96},[79,114277,877],{"class":228},[79,114279,239],{"class":448},[79,114281,113823],{"class":228},[79,114283,1747],{"class":96},[79,114285,467],{"class":448},[79,114287,113830],{"class":228},[79,114289,759],{"class":96},[79,114291,113835],{"class":228},[79,114293,478],{"class":448},[79,114295,458],{"class":96},[79,114297,1020],{"class":228},[79,114299,458],{"class":96},[79,114301,850],{"class":228},[19,114303,114304],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[339,114306,1407],{"id":1407},[51,114308,114309],{"className":439,"code":114119,"language":441,"meta":57,"style":57},[59,114310,114311],{"__ignoreMap":57},[79,114312,114313,114315,114317,114319,114321],{"class":81,"line":82},[79,114314,703],{"class":448},[79,114316,113489],{"class":85},[79,114318,113492],{"class":228},[79,114320,3409],{"class":96},[79,114322,113497],{"class":228},[19,114324,114325,114326,114328,114329,1978,114331,497],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[59,114327,81798],{}," 是 site 的名字，比如 ",[59,114330,113169],{},[59,114332,113592],{},[51,114334,114336],{"className":439,"code":114335,"language":441,"meta":57,"style":57},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[59,114337,114338],{"__ignoreMap":57},[79,114339,114340,114342,114344],{"class":81,"line":82},[79,114341,105560],{"class":228},[79,114343,239],{"class":448},[79,114345,113506],{"class":228},[19,114347,114348],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[51,114350,114352],{"className":439,"code":114351,"language":441,"meta":57,"style":57},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[59,114353,114354,114366],{"__ignoreMap":57},[79,114355,114356,114358,114360,114362,114364],{"class":81,"line":82},[79,114357,1210],{"class":448},[79,114359,105376],{"class":228},[79,114361,229],{"class":448},[79,114363,1103],{"class":96},[79,114365,745],{"class":228},[79,114367,114368,114370,114372,114374,114376,114378,114380,114382,114384,114386],{"class":81,"line":167},[79,114369,105821],{"class":448},[79,114371,105362],{"class":96},[79,114373,455],{"class":228},[79,114375,2307],{"class":448},[79,114377,113531],{"class":89},[79,114379,3136],{"class":96},[79,114381,81798],{"class":228},[79,114383,3185],{"class":96},[79,114385,2495],{"class":89},[79,114387,850],{"class":228},[19,114389,114390,114391,114394,114395,114397],{},"如果 site 没找到，就主动报错。",[59,114392,114393],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[59,114396,81798],{}," 的值放进字符串里。",[51,114399,114401],{"className":439,"code":114400,"language":441,"meta":57,"style":57},"return data.site_xpos[site_id].copy()\n",[59,114402,114403],{"__ignoreMap":57},[79,114404,114405,114407],{"class":81,"line":82},[79,114406,449],{"class":448},[79,114408,113548],{"class":228},[19,114410,114411,114412,114414,114415,114418],{},"返回这个 site 的世界坐标。",[59,114413,105606],{}," 里的每一行都是一个 site 的 ",[59,114416,114417],{},"(x, y, z)"," 坐标。",[51,114420,114422],{"className":439,"code":114421,"language":441,"meta":57,"style":57},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[59,114423,114424],{"__ignoreMap":57},[79,114425,114426,114428,114430],{"class":81,"line":82},[79,114427,703],{"class":448},[79,114429,113563],{"class":85},[79,114431,113566],{"class":228},[19,114433,114434],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[51,114436,114438],{"className":439,"code":114437,"language":441,"meta":57,"style":57},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[59,114439,114440,114452],{"__ignoreMap":57},[79,114441,114442,114444,114446,114448,114450],{"class":81,"line":82},[79,114443,113201],{"class":228},[79,114445,239],{"class":448},[79,114447,113576],{"class":228},[79,114449,113169],{"class":89},[79,114451,850],{"class":228},[79,114453,114454,114456,114458,114460,114462],{"class":81,"line":167},[79,114455,113211],{"class":228},[79,114457,239],{"class":448},[79,114459,113576],{"class":228},[79,114461,113592],{"class":89},[79,114463,850],{"class":228},[19,114465,114466],{},"分别读取末端点和目标点的世界坐标。",[51,114468,114469],{"className":439,"code":114141,"language":441,"meta":57,"style":57},[59,114470,114471],{"__ignoreMap":57},[79,114472,114473,114475],{"class":81,"line":82},[79,114474,449],{"class":448},[79,114476,113601],{"class":228},[19,114478,114479],{},"把四部分拼成一个观测数组：",[51,114481,114484],{"className":114482,"code":114483,"language":56,"meta":57},[54],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[59,114485,114483],{"__ignoreMap":57},[51,114487,114489],{"className":439,"code":114488,"language":441,"meta":57,"style":57},"dist = np.linalg.norm(tip - target)\n",[59,114490,114491],{"__ignoreMap":57},[79,114492,114493,114495,114497,114499,114501],{"class":81,"line":82},[79,114494,113229],{"class":228},[79,114496,239],{"class":448},[79,114498,113234],{"class":228},[79,114500,478],{"class":448},[79,114502,113239],{"class":228},[19,114504,114505,114506,114509,114510,114513],{},"计算 tip 到 target 的距离。",[59,114507,114508],{},"tip - target"," 得到一个三维向量，",[59,114511,114512],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,114515,16666],{},[51,114517,114520],{"className":114518,"code":114519,"language":56,"meta":57},[54],"tip    = [0.3, 0.0, 0.4]\ntarget = [0.5, 0.0, 0.4]\ntip - target = [-0.2, 0.0, 0.0]\ndistance = 0.2\n",[59,114521,114519],{"__ignoreMap":57},[51,114523,114525],{"className":439,"code":114524,"language":441,"meta":57,"style":57},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[59,114526,114527],{"__ignoreMap":57},[79,114528,114529,114531,114533,114535,114537],{"class":81,"line":82},[79,114530,114176],{"class":228},[79,114532,239],{"class":448},[79,114534,113670],{"class":96},[79,114536,467],{"class":448},[79,114538,113675],{"class":228},[19,114540,114541,114542,114545,114546,114549],{},"计算动作惩罚。",[59,114543,114544],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[59,114547,114548],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[51,114551,114553],{"className":439,"code":114552,"language":441,"meta":57,"style":57},"return float(-dist - control_cost)\n",[59,114554,114555],{"__ignoreMap":57},[79,114556,114557,114559,114561,114563,114565,114567,114569],{"class":81,"line":82},[79,114558,449],{"class":448},[79,114560,452],{"class":96},[79,114562,455],{"class":228},[79,114564,478],{"class":448},[79,114566,113229],{"class":228},[79,114568,478],{"class":448},[79,114570,113692],{"class":228},[19,114572,114573],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[51,114575,114576],{"className":439,"code":1614,"language":441,"meta":57,"style":57},[59,114577,114578],{"__ignoreMap":57},[79,114579,114580,114582,114584],{"class":81,"line":82},[79,114581,1621],{"class":228},[79,114583,239],{"class":448},[79,114585,904],{"class":96},[19,114587,114588],{},"累计奖励变量，记录整个运行过程的总分。",[51,114590,114592],{"className":439,"code":114591,"language":441,"meta":57,"style":57},"for step in range(500):\n",[59,114593,114594],{"__ignoreMap":57},[79,114595,114596,114598,114600,114602,114604,114606,114608],{"class":81,"line":82},[79,114597,1638],{"class":448},[79,114599,918],{"class":228},[79,114601,921],{"class":448},[79,114603,924],{"class":96},[79,114605,455],{"class":228},[79,114607,67062],{"class":96},[79,114609,932],{"class":228},[19,114611,114612],{},"运行 500 个控制步。",[51,114614,114615],{"className":439,"code":1321,"language":441,"meta":57,"style":57},[59,114616,114617],{"__ignoreMap":57},[79,114618,114619],{"class":81,"line":82},[79,114620,1321],{"class":228},[19,114622,114623,114624,1748,114626,114628],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[59,114625,105158],{},[59,114627,105161],{}," 是当前状态下的坐标。",[51,114630,114632],{"className":439,"code":114631,"language":441,"meta":57,"style":57},"error = target - tip\n",[59,114633,114634],{"__ignoreMap":57},[79,114635,114636,114638,114640,114642,114644],{"class":81,"line":82},[79,114637,114229],{"class":228},[79,114639,239],{"class":448},[79,114641,113801],{"class":228},[79,114643,478],{"class":448},[79,114645,113806],{"class":228},[19,114647,114648],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[51,114650,114652],{"className":439,"code":114651,"language":441,"meta":57,"style":57},"data.ctrl[0] = np.clip(2.0 * error[2], -1.0, 1.0)\ndata.ctrl[1] = np.clip(2.0 * error[0], -1.0, 1.0)\n",[59,114653,114654,114686],{"__ignoreMap":57},[79,114655,114656,114658,114660,114662,114664,114666,114668,114670,114672,114674,114676,114678,114680,114682,114684],{"class":81,"line":82},[79,114657,1787],{"class":228},[79,114659,759],{"class":96},[79,114661,877],{"class":228},[79,114663,239],{"class":448},[79,114665,113823],{"class":228},[79,114667,1747],{"class":96},[79,114669,467],{"class":448},[79,114671,113830],{"class":228},[79,114673,2331],{"class":96},[79,114675,113835],{"class":228},[79,114677,478],{"class":448},[79,114679,458],{"class":96},[79,114681,1020],{"class":228},[79,114683,458],{"class":96},[79,114685,850],{"class":228},[79,114687,114688,114690,114692,114694,114696,114698,114700,114702,114704,114706,114708,114710,114712,114714,114716],{"class":81,"line":167},[79,114689,1787],{"class":228},[79,114691,775],{"class":96},[79,114693,877],{"class":228},[79,114695,239],{"class":448},[79,114697,113823],{"class":228},[79,114699,1747],{"class":96},[79,114701,467],{"class":448},[79,114703,113830],{"class":228},[79,114705,759],{"class":96},[79,114707,113835],{"class":228},[79,114709,478],{"class":448},[79,114711,458],{"class":96},[79,114713,1020],{"class":228},[79,114715,458],{"class":96},[79,114717,850],{"class":228},[19,114719,114720,114721,114724],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[59,114722,114723],{},"error -> ctrl -> step"," 的流程。",[51,114726,114727],{"className":439,"code":1801,"language":441,"meta":57,"style":57},[59,114728,114729],{"__ignoreMap":57},[79,114730,114731],{"class":81,"line":82},[79,114732,1801],{"class":228},[19,114734,114735],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[51,114737,114739],{"className":439,"code":114738,"language":441,"meta":57,"style":57},"obs = get_obs(model, data)\n",[59,114740,114741],{"__ignoreMap":57},[79,114742,114743,114745,114747],{"class":81,"line":82},[79,114744,1667],{"class":228},[79,114746,239],{"class":448},[79,114748,113924],{"class":228},[19,114750,114751,114752,114755],{},"读取最新观测。后面打印 ",[59,114753,114754],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,114757,1934],{"id":1933},[19,114759,114760],{},"观测维度为:",[51,114762,114765],{"className":114763,"code":114764,"language":56,"meta":57},[54],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[59,114766,114764],{"__ignoreMap":57},[19,114768,114769],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,114771,114772],{},"程序每 100 步打印：",[51,114774,114777],{"className":114775,"code":114776,"language":56,"meta":57},[54],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[59,114778,114776],{"__ignoreMap":57},[19,114780,114781,114782,114784],{},"如果控制有效，你应该看到最终 ",[59,114783,105158],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,114786,1987],{"id":1986},[26,114788,114789,114792,114795,114801,114807,114814,114824],{},[29,114790,114791],{},"修改目标点位置。",[29,114793,114794],{},"重新运行，观察最终 tip 是否变化。",[29,114796,114797,114798,114800],{},"把 gravity 改成 ",[59,114799,104523],{},"，观察控制是否变差。",[29,114802,2008,114803,2012,114805,497],{},[59,114804,104101],{},[59,114806,2331],{},[29,114808,104348,114809,104351,114811,114813],{},[59,114810,1403],{},[59,114812,109197],{},"，观察机械臂是否更难移动。",[29,114815,104348,114816,84518,114818,104351,114820,114823],{},[59,114817,105161],{},[59,114819,106070],{},[59,114821,114822],{},"0.2 0 0.6","，观察 reward 和 final tip。",[29,114825,114826],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,114828,2031],{"id":2030},[339,114830,114832],{"id":114831},"site-not-found",[59,114833,114834],{},"site not found",[19,114836,114837,114838,1748,114841,497],{},"检查 XML 中是否有 ",[59,114839,114840],{},"site name=\"tip\"",[59,114842,114843],{},"site name=\"target\"",[339,114845,114846],{"id":114846},"机械臂完全不动",[19,114848,104457],{},[26,114850,114851,114856,114859,114864],{},[29,114852,114853,114855],{},[59,114854,104101],{}," 是否为 2",[29,114857,114858],{},"actuator 是否引用正确 joint",[29,114860,114861,114863],{},[59,114862,2148],{}," 是否被赋值",[29,114865,114866,114867],{},"是否执行了 ",[59,114868,102668],{},[339,114870,114871],{"id":114871},"控制效果不好",[19,114873,114874],{},"正常。本章重点不是控制器最优，而是任务结构:",[51,114876,114879],{"className":114877,"code":114878,"language":56,"meta":57},[54],"obs → action → mj_step → reward → next_obs\n",[59,114880,114878],{"__ignoreMap":57},[339,114882,114884],{"id":114883},"tip-坐标不变化","tip 坐标不变化",[19,114886,104509],{},[26,114888,114889,114894,114902,114911],{},[29,114890,114891,114892,497],{},"是否每步调用了 ",[59,114893,102668],{},[29,114895,114896,114897,1748,114899,497],{},"是否写入了 ",[59,114898,1813],{},[59,114900,114901],{},"data.ctrl[1]",[29,114903,114904,114905,2139,114908,497],{},"actuator 是否正确引用 ",[59,114906,114907],{},"joint1",[59,114909,114910],{},"joint2",[29,114912,114913],{},"控制输入是否太小。",[339,114915,114916],{"id":114916},"目标点不会动",[19,114918,114919],{},"本章的 target 是固定 site：",[51,114921,114923],{"className":219,"code":114922,"language":221,"meta":57,"style":57},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[59,114924,114925],{"__ignoreMap":57},[79,114926,114927,114929,114931,114933,114935,114937,114939,114941,114944],{"class":81,"line":82},[79,114928,229],{"class":228},[79,114930,105137],{"class":232},[79,114932,236],{"class":85},[79,114934,239],{"class":228},[79,114936,113592],{"class":89},[79,114938,103072],{"class":85},[79,114940,239],{"class":228},[79,114942,114943],{"class":89},"\"0.5 0 0.4\"",[79,114945,114946],{"class":228}," ...\u002F>\n",[19,114948,114949,114950,114952],{},"它直接挂在 ",[59,114951,103784],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[339,114954,114955],{"id":114955},"机械臂不像真实机械臂",[19,114957,114958],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,114960,2125],{"id":2124},[19,114962,114963],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,114965,114966],{},"核心公式：",[51,114968,114971],{"className":114969,"code":114970,"language":56,"meta":57},[54],"distance = ||tip - target||\nreward = -distance - action_cost\n",[59,114972,114970],{"__ignoreMap":57},[19,114974,114975],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[2159,114977,114978],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":57,"searchDepth":167,"depth":167,"links":114980},[114981,114982,114983,114988,114992,114993,114994,115002],{"id":16,"depth":167,"text":17},{"id":66,"depth":167,"text":67},{"id":203,"depth":167,"text":204,"children":114984},[114985,114986,114987],{"id":113184,"depth":178,"text":113185},{"id":113260,"depth":178,"text":113260},{"id":113290,"depth":178,"text":113291},{"id":509,"depth":167,"text":510,"children":114989},[114990,114991],{"id":1259,"depth":178,"text":1259},{"id":1407,"depth":178,"text":1407},{"id":1933,"depth":167,"text":1934},{"id":1986,"depth":167,"text":1987},{"id":2030,"depth":167,"text":2031,"children":114995},[114996,114997,114998,114999,115000,115001],{"id":114831,"depth":178,"text":114834},{"id":114846,"depth":178,"text":114846},{"id":114871,"depth":178,"text":114871},{"id":114883,"depth":178,"text":114884},{"id":114916,"depth":178,"text":114916},{"id":114955,"depth":178,"text":114955},{"id":2124,"depth":167,"text":2125},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":112988,"description":57},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":115009,"title":115010,"body":115011,"description":57,"extension":2186,"meta":118473,"navigation":541,"path":118474,"seo":118475,"stem":118476,"__hash__":118477},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":115012,"toc":118444},[115013,115016,115018,115021,115024,115049,115052,115058,115061,115067,115069,115071,115095,115097,115115,115117,115160,115162,115189,115191,115194,115246,115249,115255,115264,115267,115305,115308,115347,115350,115358,115365,115368,115374,115376,115430,115437,115482,115485,115489,115505,115515,115517,116778,116780,116792,116794,116805,116807,116810,116831,116834,116837,116870,116876,116879,116912,116915,116918,116959,116964,116978,116981,116994,116999,117022,117024,117039,117049,117064,117071,117091,117106,117124,117127,117144,117152,117168,117174,117206,117219,117251,117261,117296,117310,117356,117370,117412,117423,117436,117442,117475,117478,117505,117515,117555,117565,117582,117589,117607,117610,117651,117664,117679,117682,117705,117708,117720,117723,117742,117747,117768,117771,117786,117789,117823,117835,117850,117853,117878,117881,117900,117903,117935,117938,117962,117968,117998,118005,118018,118021,118023,118025,118031,118034,118037,118049,118052,118054,118108,118110,118114,118120,118129,118132,118139,118141,118164,118167,118171,118173,118191,118197,118199,118232,118235,118241,118245,118248,118268,118273,118277,118284,118304,118309,118313,118316,118336,118339,118425,118429,118432,118438,118441],[10,115014,115010],{"id":115015},"_8gymnasium-风格强化学习接口基础",[14,115017,17],{"id":16},[19,115019,115020],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,115022,115023],{},"你将实现:",[51,115025,115027],{"className":439,"code":115026,"language":441,"meta":57,"style":57},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[59,115028,115029,115039],{"__ignoreMap":57},[79,115030,115031,115034,115036],{"class":81,"line":82},[79,115032,115033],{"class":228},"obs, info ",[79,115035,239],{"class":448},[79,115037,115038],{"class":228}," env.reset()\n",[79,115040,115041,115044,115046],{"class":81,"line":167},[79,115042,115043],{"class":228},"obs, reward, terminated, truncated, info ",[79,115045,239],{"class":448},[79,115047,115048],{"class":228}," env.step(action)\n",[19,115050,115051],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,115053,115054,115055,115057],{},"前面章节的代码都是“脚本式”的：在 ",[59,115056,104238],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,115059,115060],{},"可以先记住 Gymnasium 环境的核心交互：",[51,115062,115065],{"className":115063,"code":115064,"language":56,"meta":57},[54],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[59,115066,115064],{"__ignoreMap":57},[14,115068,67],{"id":66},[19,115070,70],{},[51,115072,115073],{"className":73,"code":74,"language":75,"meta":57,"style":57},[59,115074,115075],{"__ignoreMap":57},[79,115076,115077,115079,115081,115083,115085,115087,115089,115091,115093],{"class":81,"line":82},[79,115078,86],{"class":85},[79,115080,90],{"class":89},[79,115082,93],{"class":89},[79,115084,97],{"class":96},[79,115086,100],{"class":89},[79,115088,103],{"class":89},[79,115090,106],{"class":89},[79,115092,109],{"class":89},[79,115094,112],{"class":89},[19,115096,115],{},[51,115098,115100],{"className":73,"code":115099,"language":75,"meta":57,"style":57},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[59,115101,115102],{"__ignoreMap":57},[79,115103,115104,115106,115108,115110,115112],{"class":81,"line":82},[79,115105,125],{"class":85},[79,115107,93],{"class":89},[79,115109,130],{"class":89},[79,115111,109598],{"class":89},[79,115113,115114],{"class":89}," gymnasium\n",[19,115116,136],{},[51,115118,115120],{"className":73,"code":115119,"language":75,"meta":57,"style":57},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[59,115121,115122,115139,115148],{"__ignoreMap":57},[79,115123,115124,115126,115128,115130,115133,115135,115137],{"class":81,"line":82},[79,115125,146],{"class":85},[79,115127,149],{"class":89},[79,115129,152],{"class":96},[79,115131,115132],{"class":89}," mujoco-gym-api",[79,115134,158],{"class":89},[79,115136,161],{"class":96},[79,115138,164],{"class":96},[79,115140,115141,115143,115145],{"class":81,"line":167},[79,115142,146],{"class":85},[79,115144,172],{"class":89},[79,115146,115147],{"class":89}," mujoco-gym-api\n",[79,115149,115150,115152,115154,115156,115158],{"class":81,"line":178},[79,115151,125],{"class":85},[79,115153,93],{"class":89},[79,115155,130],{"class":89},[79,115157,109598],{"class":89},[79,115159,115114],{"class":89},[19,115161,189],{},[26,115163,115164,115174,115177,115183],{},[29,115165,115166,115167,115170,115171,497],{},"本章使用 ",[59,115168,115169],{},"gymnasium","，不是旧版 ",[59,115172,115173],{},"gym",[29,115175,115176],{},"Gymnasium API 与旧 Gym API 有差异。",[29,115178,115179,115180,497],{},"旧 Gym 常见返回值是 4 个: ",[59,115181,115182],{},"obs, reward, done, info",[29,115184,115185,115186,497],{},"Gymnasium 返回值是 5 个: ",[59,115187,115188],{},"obs, reward, terminated, truncated, info",[14,115190,204],{"id":203},[19,115192,115193],{},"强化学习环境接口包含:",[347,115195,115196,115205],{},[350,115197,115198],{},[353,115199,115200,115203],{},[356,115201,115202],{"align":358},"方法",[356,115204,104628],{"align":358},[367,115206,115207,115217,115227,115237],{},[353,115208,115209,115214],{},[372,115210,115211],{"align":358},[59,115212,115213],{},"reset()",[372,115215,115216],{"align":358},"重置环境",[353,115218,115219,115224],{},[372,115220,115221],{"align":358},[59,115222,115223],{},"step(action)",[372,115225,115226],{"align":358},"执行动作",[353,115228,115229,115234],{},[372,115230,115231],{"align":358},[59,115232,115233],{},"observation_space",[372,115235,115236],{"align":358},"观测空间",[353,115238,115239,115244],{},[372,115240,115241],{"align":358},[59,115242,115243],{},"action_space",[372,115245,25680],{"align":358},[19,115247,115248],{},"一个最小环境需要完成:",[51,115250,115253],{"className":115251,"code":115252,"language":56,"meta":57},[54],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[59,115254,115252],{"__ignoreMap":57},[339,115256,115258,1748,115261,106554],{"id":115257},"terminated-和-truncated-的区别",[59,115259,115260],{},"terminated",[59,115262,115263],{},"truncated",[19,115265,115266],{},"Gymnasium 把“结束”拆成两个概念：",[347,115268,115269,115279],{},[350,115270,115271],{},[353,115272,115273,115275,115277],{},[356,115274,106490],{"align":358},[356,115276,102683],{"align":358},[356,115278,23212],{"align":358},[367,115280,115281,115293],{},[353,115282,115283,115287,115290],{},[372,115284,115285],{"align":358},[59,115286,115260],{},[372,115288,115289],{"align":358},"任务自然结束",[372,115291,115292],{"align":358},"机械臂到达目标、机器人摔倒",[353,115294,115295,115299,115302],{},[372,115296,115297],{"align":358},[59,115298,115263],{},[372,115300,115301],{"align":358},"因外部限制截断",[372,115303,115304],{"align":358},"达到最大步数、时间限制",[19,115306,115307],{},"本章中：",[51,115309,115311],{"className":439,"code":115310,"language":441,"meta":57,"style":57},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[59,115312,115313,115328],{"__ignoreMap":57},[79,115314,115315,115318,115320,115323,115325],{"class":81,"line":82},[79,115316,115317],{"class":228},"terminated ",[79,115319,239],{"class":448},[79,115321,115322],{"class":228}," dist ",[79,115324,229],{"class":448},[79,115326,115327],{"class":96}," 0.05\n",[79,115329,115330,115333,115335,115337,115340,115342,115344],{"class":81,"line":167},[79,115331,115332],{"class":228},"truncated ",[79,115334,239],{"class":448},[79,115336,40868],{"class":96},[79,115338,115339],{"class":228},".steps ",[79,115341,3805],{"class":448},[79,115343,40868],{"class":96},[79,115345,115346],{"class":228},".max_steps\n",[19,115348,115349],{},"也就是：",[26,115351,115352,115355],{},[29,115353,115354],{},"末端距离目标小于 0.05，任务成功结束。",[29,115356,115357],{},"步数超过上限，episode 被截断。",[339,115359,115361,1748,115363],{"id":115360},"observation_space-和-action_space",[59,115362,115233],{},[59,115364,115243],{},[19,115366,115367],{},"这两个对象告诉算法：",[51,115369,115372],{"className":115370,"code":115371,"language":56,"meta":57},[54],"观测长什么样\n动作允许多大\n",[59,115373,115371],{"__ignoreMap":57},[19,115375,16666],{},[51,115377,115379],{"className":439,"code":115378,"language":441,"meta":57,"style":57},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[59,115380,115381],{"__ignoreMap":57},[79,115382,115383,115385,115388,115390,115393,115396,115399,115401,115403,115406,115408,115410,115412,115414,115416,115418,115420,115423,115425,115427],{"class":81,"line":82},[79,115384,32830],{"class":96},[79,115386,115387],{"class":228},".action_space ",[79,115389,239],{"class":448},[79,115391,115392],{"class":228}," spaces.Box(",[79,115394,115395],{"class":7284},"low",[79,115397,115398],{"class":448},"=-",[79,115400,458],{"class":96},[79,115402,1020],{"class":228},[79,115404,115405],{"class":7284},"high",[79,115407,239],{"class":448},[79,115409,458],{"class":96},[79,115411,1020],{"class":228},[79,115413,97948],{"class":7284},[79,115415,239],{"class":448},[79,115417,455],{"class":228},[79,115419,2331],{"class":96},[79,115421,115422],{"class":228},",), ",[79,115424,95487],{"class":7284},[79,115426,239],{"class":448},[79,115428,115429],{"class":228},"np.float32)\n",[19,115431,115432,115433,115436],{},"表示动作是 2 维数组，每个值都在 ",[59,115434,115435],{},"[-1, 1]"," 范围内。",[51,115438,115440],{"className":439,"code":115439,"language":441,"meta":57,"style":57},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[59,115441,115442],{"__ignoreMap":57},[79,115443,115444,115446,115449,115451,115453,115455,115457,115460,115462,115464,115466,115468,115470,115472,115474,115476,115478,115480],{"class":81,"line":82},[79,115445,32830],{"class":96},[79,115447,115448],{"class":228},".observation_space ",[79,115450,239],{"class":448},[79,115452,115392],{"class":228},[79,115454,115395],{"class":7284},[79,115456,115398],{"class":448},[79,115458,115459],{"class":228},"np.inf, ",[79,115461,115405],{"class":7284},[79,115463,239],{"class":448},[79,115465,115459],{"class":228},[79,115467,97948],{"class":7284},[79,115469,239],{"class":448},[79,115471,455],{"class":228},[79,115473,2689],{"class":96},[79,115475,115422],{"class":228},[79,115477,95487],{"class":7284},[79,115479,239],{"class":448},[79,115481,115429],{"class":228},[19,115483,115484],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[339,115486,115488],{"id":115487},"frame_skip-是什么","frame_skip 是什么",[51,115490,115492],{"className":439,"code":115491,"language":441,"meta":57,"style":57},"self.frame_skip = 5\n",[59,115493,115494],{"__ignoreMap":57},[79,115495,115496,115498,115501,115503],{"class":81,"line":82},[79,115497,32830],{"class":96},[79,115499,115500],{"class":228},".frame_skip ",[79,115502,239],{"class":448},[79,115504,56416],{"class":96},[19,115506,115507,115508,115511,115512,115514],{},"表示外部调用一次 ",[59,115509,115510],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[59,115513,103180],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,115516,510],{"id":509},[51,115518,115520],{"className":439,"code":115519,"language":441,"meta":57,"style":57},"import gymnasium as gym\nimport mujoco\nimport numpy as np\nfrom gymnasium import spaces\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"gym_reacher\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n\n  \u003Cworldbody>\n    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n\n    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n\n      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n      \u003C\u002Fbody>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\n  \u003Cactuator>\n    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n  \u003C\u002Factuator>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\nclass ReacherEnv(gym.Env):\n    metadata = {\"render_modes\": []}\n\n    def __init__(self) -> None:\n        super().__init__()\n        self.model = mujoco.MjModel.from_xml_string(XML)\n        self.data = mujoco.MjData(self.model)\n\n        self.tip_site_id = mujoco.mj_name2id(self.model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\n        self.target_site_id = mujoco.mj_name2id(self.model, mujoco.mjtObj.mjOBJ_SITE, \"target\")\n        if self.tip_site_id \u003C 0 or self.target_site_id \u003C 0:\n            raise RuntimeError(\"required sites not found\")\n\n        self.frame_skip = 5\n        self.max_steps = 200\n        self.steps = 0\n\n        self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n        self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n\n    def _get_obs(self) -> np.ndarray:\n        tip = self.data.site_xpos[self.tip_site_id].copy()\n        target = self.data.site_xpos[self.target_site_id].copy()\n        obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\n        return obs.astype(np.float32)\n\n    def _get_reward(self) -> float:\n        tip = self.data.site_xpos[self.tip_site_id]\n        target = self.data.site_xpos[self.target_site_id]\n        dist = np.linalg.norm(tip - target)\n        control_cost = 0.01 * np.sum(np.square(self.data.ctrl))\n        return float(-dist - control_cost)\n\n    def reset(self, *, seed: int | None = None, options: dict | None = None):\n        super().reset(seed=seed)\n        mujoco.mj_resetData(self.model, self.data)\n\n        self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n        self.data.qvel[:] = 0.0\n        mujoco.mj_forward(self.model, self.data)\n\n        self.steps = 0\n        return self._get_obs(), {}\n\n    def step(self, action):\n        action = np.asarray(action, dtype=np.float32)\n        action = np.clip(action, self.action_space.low, self.action_space.high)\n\n        self.data.ctrl[:] = action\n        for _ in range(self.frame_skip):\n            mujoco.mj_step(self.model, self.data)\n\n        self.steps += 1\n\n        obs = self._get_obs()\n        reward = self._get_reward()\n\n        tip = self.data.site_xpos[self.tip_site_id]\n        target = self.data.site_xpos[self.target_site_id]\n        dist = float(np.linalg.norm(tip - target))\n\n        terminated = dist \u003C 0.05\n        truncated = self.steps >= self.max_steps\n        info = {\"distance\": dist}\n        return obs, reward, terminated, truncated, info\n\n\ndef main() -> None:\n    env = ReacherEnv()\n    obs, info = env.reset(seed=0)\n    print(\"initial obs shape:\", obs.shape)\n    print(\"initial info:\", info)\n\n    total_reward = 0.0\n    for step in range(20):\n        action = env.action_space.sample()\n        obs, reward, terminated, truncated, info = env.step(action)\n        total_reward += reward\n        print(\"step:\", step, \"reward:\", round(reward, 3), \"distance:\", round(info[\"distance\"], 3))\n        if terminated or truncated:\n            break\n\n    print(\"total_reward:\", round(total_reward, 3))\n\n\nif __name__ == \"__main__\":\n    main()\n",[59,115521,115522,115534,115540,115550,115561,115565,115569,115577,115582,115586,115590,115594,115598,115602,115606,115610,115615,115619,115623,115627,115632,115636,115640,115644,115648,115652,115656,115660,115664,115668,115672,115676,115680,115684,115702,115717,115721,115734,115744,115759,115776,115780,115801,115820,115845,115859,115863,115873,115885,115895,115899,115941,115979,115983,115993,116009,116024,116043,116050,116054,116067,116082,116097,116110,116129,116145,116149,116190,116205,116220,116224,116263,116274,116287,116291,116301,116310,116314,116324,116339,116357,116361,116372,116389,116402,116406,116416,116420,116431,116442,116446,116460,116474,116490,116494,116507,116524,116539,116546,116550,116554,116566,116576,116594,116606,116618,116622,116630,116646,116655,116664,116672,116714,116727,116732,116736,116754,116758,116762,116774],{"__ignoreMap":57},[79,115523,115524,115526,115529,115531],{"class":81,"line":82},[79,115525,520],{"class":448},[79,115527,115528],{"class":228}," gymnasium ",[79,115530,533],{"class":448},[79,115532,115533],{"class":228}," gym\n",[79,115535,115536,115538],{"class":81,"line":167},[79,115537,520],{"class":448},[79,115539,523],{"class":228},[79,115541,115542,115544,115546,115548],{"class":81,"line":178},[79,115543,520],{"class":448},[79,115545,530],{"class":228},[79,115547,533],{"class":448},[79,115549,536],{"class":228},[79,115551,115552,115554,115556,115558],{"class":81,"line":545},[79,115553,32745],{"class":448},[79,115555,115528],{"class":228},[79,115557,520],{"class":448},[79,115559,115560],{"class":228}," spaces\n",[79,115562,115563],{"class":81,"line":550},[79,115564,542],{"emptyLinePlaceholder":541},[79,115566,115567],{"class":81,"line":562},[79,115568,542],{"emptyLinePlaceholder":541},[79,115570,115571,115573,115575],{"class":81,"line":568},[79,115572,553],{"class":96},[79,115574,556],{"class":448},[79,115576,559],{"class":89},[79,115578,115579],{"class":81,"line":574},[79,115580,115581],{"class":89},"\u003Cmujoco model=\"gym_reacher\">\n",[79,115583,115584],{"class":81,"line":579},[79,115585,113371],{"class":89},[79,115587,115588],{"class":81,"line":585},[79,115589,542],{"emptyLinePlaceholder":541},[79,115591,115592],{"class":81,"line":591},[79,115593,582],{"class":89},[79,115595,115596],{"class":81,"line":596},[79,115597,113389],{"class":89},[79,115599,115600],{"class":81,"line":602},[79,115601,542],{"emptyLinePlaceholder":541},[79,115603,115604],{"class":81,"line":608},[79,115605,113398],{"class":89},[79,115607,115608],{"class":81,"line":614},[79,115609,113403],{"class":89},[79,115611,115612],{"class":81,"line":619},[79,115613,115614],{"class":89},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[79,115616,115617],{"class":81,"line":625},[79,115618,542],{"emptyLinePlaceholder":541},[79,115620,115621],{"class":81,"line":631},[79,115622,113417],{"class":89},[79,115624,115625],{"class":81,"line":637},[79,115626,113422],{"class":89},[79,115628,115629],{"class":81,"line":643},[79,115630,115631],{"class":89},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[79,115633,115634],{"class":81,"line":649},[79,115635,113432],{"class":89},[79,115637,115638],{"class":81,"line":655},[79,115639,640],{"class":89},[79,115641,115642],{"class":81,"line":660},[79,115643,646],{"class":89},[79,115645,115646],{"class":81,"line":666},[79,115647,652],{"class":89},[79,115649,115650],{"class":81,"line":672},[79,115651,542],{"emptyLinePlaceholder":541},[79,115653,115654],{"class":81,"line":678},[79,115655,663],{"class":89},[79,115657,115658],{"class":81,"line":684},[79,115659,113457],{"class":89},[79,115661,115662],{"class":81,"line":690},[79,115663,113462],{"class":89},[79,115665,115666],{"class":81,"line":695},[79,115667,675],{"class":89},[79,115669,115670],{"class":81,"line":700},[79,115671,681],{"class":89},[79,115673,115674],{"class":81,"line":712},[79,115675,687],{"class":89},[79,115677,115678],{"class":81,"line":721},[79,115679,542],{"emptyLinePlaceholder":541},[79,115681,115682],{"class":81,"line":726},[79,115683,542],{"emptyLinePlaceholder":541},[79,115685,115686,115688,115691,115693,115695,115697,115700],{"class":81,"line":731},[79,115687,16727],{"class":448},[79,115689,115690],{"class":85}," ReacherEnv",[79,115692,455],{"class":228},[79,115694,115173],{"class":85},[79,115696,2798],{"class":228},[79,115698,115699],{"class":85},"Env",[79,115701,932],{"class":228},[79,115703,115704,115707,115709,115711,115714],{"class":81,"line":748},[79,115705,115706],{"class":228},"    metadata ",[79,115708,239],{"class":448},[79,115710,6518],{"class":228},[79,115712,115713],{"class":89},"\"render_modes\"",[79,115715,115716],{"class":228},": []}\n",[79,115718,115719],{"class":81,"line":765},[79,115720,542],{"emptyLinePlaceholder":541},[79,115722,115723,115725,115727,115730,115732],{"class":81,"line":780},[79,115724,32808],{"class":448},[79,115726,32811],{"class":96},[79,115728,115729],{"class":228},"(self) -> ",[79,115731,832],{"class":96},[79,115733,745],{"class":228},[79,115735,115736,115738,115740,115742],{"class":81,"line":811},[79,115737,32824],{"class":96},[79,115739,19286],{"class":228},[79,115741,32836],{"class":96},[79,115743,4061],{"class":228},[79,115745,115746,115748,115751,115753,115755,115757],{"class":81,"line":816},[79,115747,32852],{"class":96},[79,115749,115750],{"class":228},".model ",[79,115752,239],{"class":448},[79,115754,845],{"class":228},[79,115756,553],{"class":96},[79,115758,850],{"class":228},[79,115760,115761,115763,115766,115768,115771,115773],{"class":81,"line":821},[79,115762,32852],{"class":96},[79,115764,115765],{"class":228},".data ",[79,115767,239],{"class":448},[79,115769,115770],{"class":228}," mujoco.MjData(",[79,115772,32830],{"class":96},[79,115774,115775],{"class":228},".model)\n",[79,115777,115778],{"class":81,"line":837},[79,115779,542],{"emptyLinePlaceholder":541},[79,115781,115782,115784,115787,115789,115792,115794,115797,115799],{"class":81,"line":853},[79,115783,32852],{"class":96},[79,115785,115786],{"class":228},".tip_site_id ",[79,115788,239],{"class":448},[79,115790,115791],{"class":228}," mujoco.mj_name2id(",[79,115793,32830],{"class":96},[79,115795,115796],{"class":228},".model, mujoco.mjtObj.mjOBJ_SITE, ",[79,115798,113169],{"class":89},[79,115800,850],{"class":228},[79,115802,115803,115805,115808,115810,115812,115814,115816,115818],{"class":81,"line":864},[79,115804,32852],{"class":96},[79,115806,115807],{"class":228},".target_site_id ",[79,115809,239],{"class":448},[79,115811,115791],{"class":228},[79,115813,32830],{"class":96},[79,115815,115796],{"class":228},[79,115817,113592],{"class":89},[79,115819,850],{"class":228},[79,115821,115822,115824,115826,115828,115830,115832,115835,115837,115839,115841,115843],{"class":81,"line":869},[79,115823,1089],{"class":448},[79,115825,40868],{"class":96},[79,115827,115786],{"class":228},[79,115829,229],{"class":448},[79,115831,1103],{"class":96},[79,115833,115834],{"class":448}," or",[79,115836,40868],{"class":96},[79,115838,115807],{"class":228},[79,115840,229],{"class":448},[79,115842,1103],{"class":96},[79,115844,745],{"class":228},[79,115846,115847,115850,115852,115854,115857],{"class":81,"line":885},[79,115848,115849],{"class":448},"            raise",[79,115851,105362],{"class":96},[79,115853,455],{"class":228},[79,115855,115856],{"class":89},"\"required sites not found\"",[79,115858,850],{"class":228},[79,115860,115861],{"class":81,"line":891},[79,115862,542],{"emptyLinePlaceholder":541},[79,115864,115865,115867,115869,115871],{"class":81,"line":896},[79,115866,32852],{"class":96},[79,115868,115500],{"class":228},[79,115870,239],{"class":448},[79,115872,56416],{"class":96},[79,115874,115875,115877,115880,115882],{"class":81,"line":907},[79,115876,32852],{"class":96},[79,115878,115879],{"class":228},".max_steps ",[79,115881,239],{"class":448},[79,115883,115884],{"class":96}," 200\n",[79,115886,115887,115889,115891,115893],{"class":81,"line":912},[79,115888,32852],{"class":96},[79,115890,115339],{"class":228},[79,115892,239],{"class":448},[79,115894,49328],{"class":96},[79,115896,115897],{"class":81,"line":935},[79,115898,542],{"emptyLinePlaceholder":541},[79,115900,115901,115903,115905,115907,115909,115911,115913,115915,115917,115919,115921,115923,115925,115927,115929,115931,115933,115935,115937,115939],{"class":81,"line":946},[79,115902,32852],{"class":96},[79,115904,115387],{"class":228},[79,115906,239],{"class":448},[79,115908,115392],{"class":228},[79,115910,115395],{"class":7284},[79,115912,115398],{"class":448},[79,115914,458],{"class":96},[79,115916,1020],{"class":228},[79,115918,115405],{"class":7284},[79,115920,239],{"class":448},[79,115922,458],{"class":96},[79,115924,1020],{"class":228},[79,115926,97948],{"class":7284},[79,115928,239],{"class":448},[79,115930,455],{"class":228},[79,115932,2331],{"class":96},[79,115934,115422],{"class":228},[79,115936,95487],{"class":7284},[79,115938,239],{"class":448},[79,115940,115429],{"class":228},[79,115942,115943,115945,115947,115949,115951,115953,115955,115957,115959,115961,115963,115965,115967,115969,115971,115973,115975,115977],{"class":81,"line":960},[79,115944,32852],{"class":96},[79,115946,115448],{"class":228},[79,115948,239],{"class":448},[79,115950,115392],{"class":228},[79,115952,115395],{"class":7284},[79,115954,115398],{"class":448},[79,115956,115459],{"class":228},[79,115958,115405],{"class":7284},[79,115960,239],{"class":448},[79,115962,115459],{"class":228},[79,115964,97948],{"class":7284},[79,115966,239],{"class":448},[79,115968,455],{"class":228},[79,115970,2689],{"class":96},[79,115972,115422],{"class":228},[79,115974,95487],{"class":7284},[79,115976,239],{"class":448},[79,115978,115429],{"class":228},[79,115980,115981],{"class":81,"line":975},[79,115982,542],{"emptyLinePlaceholder":541},[79,115984,115985,115987,115990],{"class":81,"line":980},[79,115986,32808],{"class":448},[79,115988,115989],{"class":85}," _get_obs",[79,115991,115992],{"class":228},"(self) -> np.ndarray:\n",[79,115994,115995,115997,115999,116001,116004,116006],{"class":81,"line":1006},[79,115996,113770],{"class":228},[79,115998,239],{"class":448},[79,116000,40868],{"class":96},[79,116002,116003],{"class":228},".data.site_xpos[",[79,116005,32830],{"class":96},[79,116007,116008],{"class":228},".tip_site_id].copy()\n",[79,116010,116011,116013,116015,116017,116019,116021],{"class":81,"line":1027},[79,116012,113783],{"class":228},[79,116014,239],{"class":448},[79,116016,40868],{"class":96},[79,116018,116003],{"class":228},[79,116020,32830],{"class":96},[79,116022,116023],{"class":228},".target_site_id].copy()\n",[79,116025,116026,116028,116030,116033,116035,116038,116040],{"class":81,"line":1032},[79,116027,938],{"class":228},[79,116029,239],{"class":448},[79,116031,116032],{"class":228}," np.concatenate([",[79,116034,32830],{"class":96},[79,116036,116037],{"class":228},".data.qpos.copy(), ",[79,116039,32830],{"class":96},[79,116041,116042],{"class":228},".data.qvel.copy(), tip, target])\n",[79,116044,116045,116047],{"class":81,"line":1047},[79,116046,16785],{"class":448},[79,116048,116049],{"class":228}," obs.astype(np.float32)\n",[79,116051,116052],{"class":81,"line":1053},[79,116053,542],{"emptyLinePlaceholder":541},[79,116055,116056,116058,116061,116063,116065],{"class":81,"line":1058},[79,116057,32808],{"class":448},[79,116059,116060],{"class":85}," _get_reward",[79,116062,115729],{"class":228},[79,116064,742],{"class":96},[79,116066,745],{"class":228},[79,116068,116069,116071,116073,116075,116077,116079],{"class":81,"line":1069},[79,116070,113770],{"class":228},[79,116072,239],{"class":448},[79,116074,40868],{"class":96},[79,116076,116003],{"class":228},[79,116078,32830],{"class":96},[79,116080,116081],{"class":228},".tip_site_id]\n",[79,116083,116084,116086,116088,116090,116092,116094],{"class":81,"line":1081},[79,116085,113783],{"class":228},[79,116087,239],{"class":448},[79,116089,40868],{"class":96},[79,116091,116003],{"class":228},[79,116093,32830],{"class":96},[79,116095,116096],{"class":228},".target_site_id]\n",[79,116098,116099,116102,116104,116106,116108],{"class":81,"line":1086},[79,116100,116101],{"class":228},"        dist ",[79,116103,239],{"class":448},[79,116105,113234],{"class":228},[79,116107,478],{"class":448},[79,116109,113239],{"class":228},[79,116111,116112,116115,116117,116119,116121,116124,116126],{"class":81,"line":1108},[79,116113,116114],{"class":228},"        control_cost ",[79,116116,239],{"class":448},[79,116118,113670],{"class":96},[79,116120,467],{"class":448},[79,116122,116123],{"class":228}," np.sum(np.square(",[79,116125,32830],{"class":96},[79,116127,116128],{"class":228},".data.ctrl))\n",[79,116130,116131,116133,116135,116137,116139,116141,116143],{"class":81,"line":1153},[79,116132,16785],{"class":448},[79,116134,452],{"class":96},[79,116136,455],{"class":228},[79,116138,478],{"class":448},[79,116140,113229],{"class":228},[79,116142,478],{"class":448},[79,116144,113692],{"class":228},[79,116146,116147],{"class":81,"line":1158},[79,116148,542],{"emptyLinePlaceholder":541},[79,116150,116151,116153,116156,116159,116161,116164,116166,116168,116170,116172,116174,116177,116180,116182,116184,116186,116188],{"class":81,"line":1180},[79,116152,32808],{"class":448},[79,116154,116155],{"class":85}," reset",[79,116157,116158],{"class":228},"(self, ",[79,116160,473],{"class":448},[79,116162,116163],{"class":228},", seed: ",[79,116165,2262],{"class":96},[79,116167,27129],{"class":448},[79,116169,40928],{"class":96},[79,116171,556],{"class":448},[79,116173,40928],{"class":96},[79,116175,116176],{"class":228},", options: ",[79,116178,116179],{"class":96},"dict",[79,116181,27129],{"class":448},[79,116183,40928],{"class":96},[79,116185,556],{"class":448},[79,116187,40928],{"class":96},[79,116189,932],{"class":228},[79,116191,116192,116194,116197,116200,116202],{"class":81,"line":1197},[79,116193,32824],{"class":96},[79,116195,116196],{"class":228},"().reset(",[79,116198,116199],{"class":7284},"seed",[79,116201,239],{"class":448},[79,116203,116204],{"class":228},"seed)\n",[79,116206,116207,116210,116212,116215,116217],{"class":81,"line":1202},[79,116208,116209],{"class":228},"        mujoco.mj_resetData(",[79,116211,32830],{"class":96},[79,116213,116214],{"class":228},".model, ",[79,116216,32830],{"class":96},[79,116218,116219],{"class":228},".data)\n",[79,116221,116222],{"class":81,"line":1207},[79,116223,542],{"emptyLinePlaceholder":541},[79,116225,116226,116228,116231,116233,116235,116238,116240,116242,116244,116246,116248,116250,116252,116254,116256,116258,116260],{"class":81,"line":1223},[79,116227,32852],{"class":96},[79,116229,116230],{"class":228},".data.qpos[:] ",[79,116232,239],{"class":448},[79,116234,40868],{"class":96},[79,116236,116237],{"class":228},".np_random.uniform(",[79,116239,115395],{"class":7284},[79,116241,115398],{"class":448},[79,116243,88197],{"class":96},[79,116245,1020],{"class":228},[79,116247,115405],{"class":7284},[79,116249,239],{"class":448},[79,116251,88197],{"class":96},[79,116253,1020],{"class":228},[79,116255,33498],{"class":7284},[79,116257,239],{"class":448},[79,116259,32830],{"class":96},[79,116261,116262],{"class":228},".model.nq)\n",[79,116264,116265,116267,116270,116272],{"class":81,"line":18722},[79,116266,32852],{"class":96},[79,116268,116269],{"class":228},".data.qvel[:] ",[79,116271,239],{"class":448},[79,116273,904],{"class":96},[79,116275,116276,116279,116281,116283,116285],{"class":81,"line":18728},[79,116277,116278],{"class":228},"        mujoco.mj_forward(",[79,116280,32830],{"class":96},[79,116282,116214],{"class":228},[79,116284,32830],{"class":96},[79,116286,116219],{"class":228},[79,116288,116289],{"class":81,"line":18739},[79,116290,542],{"emptyLinePlaceholder":541},[79,116292,116293,116295,116297,116299],{"class":81,"line":18762},[79,116294,32852],{"class":96},[79,116296,115339],{"class":228},[79,116298,239],{"class":448},[79,116300,49328],{"class":96},[79,116302,116303,116305,116307],{"class":81,"line":18784},[79,116304,16785],{"class":448},[79,116306,40868],{"class":96},[79,116308,116309],{"class":228},"._get_obs(), {}\n",[79,116311,116312],{"class":81,"line":18789},[79,116313,542],{"emptyLinePlaceholder":541},[79,116315,116316,116318,116321],{"class":81,"line":18795},[79,116317,32808],{"class":448},[79,116319,116320],{"class":85}," step",[79,116322,116323],{"class":228},"(self, action):\n",[79,116325,116326,116328,116330,116333,116335,116337],{"class":81,"line":18809},[79,116327,983],{"class":228},[79,116329,239],{"class":448},[79,116331,116332],{"class":228}," np.asarray(action, ",[79,116334,95487],{"class":7284},[79,116336,239],{"class":448},[79,116338,115429],{"class":228},[79,116340,116341,116343,116345,116347,116349,116352,116354],{"class":81,"line":18822},[79,116342,983],{"class":228},[79,116344,239],{"class":448},[79,116346,1013],{"class":228},[79,116348,32830],{"class":96},[79,116350,116351],{"class":228},".action_space.low, ",[79,116353,32830],{"class":96},[79,116355,116356],{"class":228},".action_space.high)\n",[79,116358,116359],{"class":81,"line":18827},[79,116360,542],{"emptyLinePlaceholder":541},[79,116362,116363,116365,116368,116370],{"class":81,"line":18841},[79,116364,32852],{"class":96},[79,116366,116367],{"class":228},".data.ctrl[:] ",[79,116369,239],{"class":448},[79,116371,1044],{"class":228},[79,116373,116374,116376,116378,116380,116382,116384,116386],{"class":81,"line":18846},[79,116375,5477],{"class":448},[79,116377,103450],{"class":228},[79,116379,921],{"class":448},[79,116381,924],{"class":96},[79,116383,455],{"class":228},[79,116385,32830],{"class":96},[79,116387,116388],{"class":228},".frame_skip):\n",[79,116390,116391,116394,116396,116398,116400],{"class":81,"line":18852},[79,116392,116393],{"class":228},"            mujoco.mj_step(",[79,116395,32830],{"class":96},[79,116397,116214],{"class":228},[79,116399,32830],{"class":96},[79,116401,116219],{"class":228},[79,116403,116404],{"class":81,"line":18857},[79,116405,542],{"emptyLinePlaceholder":541},[79,116407,116408,116410,116412,116414],{"class":81,"line":18871},[79,116409,32852],{"class":96},[79,116411,115339],{"class":228},[79,116413,1075],{"class":448},[79,116415,57688],{"class":96},[79,116417,116418],{"class":81,"line":18876},[79,116419,542],{"emptyLinePlaceholder":541},[79,116421,116422,116424,116426,116428],{"class":81,"line":18881},[79,116423,938],{"class":228},[79,116425,239],{"class":448},[79,116427,40868],{"class":96},[79,116429,116430],{"class":228},"._get_obs()\n",[79,116432,116433,116435,116437,116439],{"class":81,"line":18895},[79,116434,1061],{"class":228},[79,116436,239],{"class":448},[79,116438,40868],{"class":96},[79,116440,116441],{"class":228},"._get_reward()\n",[79,116443,116444],{"class":81,"line":18907},[79,116445,542],{"emptyLinePlaceholder":541},[79,116447,116448,116450,116452,116454,116456,116458],{"class":81,"line":18912},[79,116449,113770],{"class":228},[79,116451,239],{"class":448},[79,116453,40868],{"class":96},[79,116455,116003],{"class":228},[79,116457,32830],{"class":96},[79,116459,116081],{"class":228},[79,116461,116462,116464,116466,116468,116470,116472],{"class":81,"line":18925},[79,116463,113783],{"class":228},[79,116465,239],{"class":448},[79,116467,40868],{"class":96},[79,116469,116003],{"class":228},[79,116471,32830],{"class":96},[79,116473,116096],{"class":228},[79,116475,116476,116478,116480,116482,116485,116487],{"class":81,"line":18930},[79,116477,116101],{"class":228},[79,116479,239],{"class":448},[79,116481,452],{"class":96},[79,116483,116484],{"class":228},"(np.linalg.norm(tip ",[79,116486,478],{"class":448},[79,116488,116489],{"class":228}," target))\n",[79,116491,116492],{"class":81,"line":18935},[79,116493,542],{"emptyLinePlaceholder":541},[79,116495,116496,116499,116501,116503,116505],{"class":81,"line":18940},[79,116497,116498],{"class":228},"        terminated ",[79,116500,239],{"class":448},[79,116502,115322],{"class":228},[79,116504,229],{"class":448},[79,116506,115327],{"class":96},[79,116508,116509,116512,116514,116516,116518,116520,116522],{"class":81,"line":18953},[79,116510,116511],{"class":228},"        truncated ",[79,116513,239],{"class":448},[79,116515,40868],{"class":96},[79,116517,115339],{"class":228},[79,116519,3805],{"class":448},[79,116521,40868],{"class":96},[79,116523,115346],{"class":228},[79,116525,116526,116529,116531,116533,116536],{"class":81,"line":18958},[79,116527,116528],{"class":228},"        info ",[79,116530,239],{"class":448},[79,116532,6518],{"class":228},[79,116534,116535],{"class":89},"\"distance\"",[79,116537,116538],{"class":228},": dist}\n",[79,116540,116541,116543],{"class":81,"line":34631},[79,116542,16785],{"class":448},[79,116544,116545],{"class":228}," obs, reward, terminated, truncated, info\n",[79,116547,116548],{"class":81,"line":34637},[79,116549,542],{"emptyLinePlaceholder":541},[79,116551,116552],{"class":81,"line":34643},[79,116553,542],{"emptyLinePlaceholder":541},[79,116555,116556,116558,116560,116562,116564],{"class":81,"line":34649},[79,116557,703],{"class":448},[79,116559,826],{"class":85},[79,116561,829],{"class":228},[79,116563,832],{"class":96},[79,116565,745],{"class":228},[79,116567,116568,116571,116573],{"class":81,"line":34655},[79,116569,116570],{"class":228},"    env ",[79,116572,239],{"class":448},[79,116574,116575],{"class":228}," ReacherEnv()\n",[79,116577,116578,116581,116583,116586,116588,116590,116592],{"class":81,"line":34666},[79,116579,116580],{"class":228},"    obs, info ",[79,116582,239],{"class":448},[79,116584,116585],{"class":228}," env.reset(",[79,116587,116199],{"class":7284},[79,116589,239],{"class":448},[79,116591,759],{"class":96},[79,116593,850],{"class":228},[79,116595,116596,116598,116600,116603],{"class":81,"line":34672},[79,116597,1161],{"class":96},[79,116599,455],{"class":228},[79,116601,116602],{"class":89},"\"initial obs shape:\"",[79,116604,116605],{"class":228},", obs.shape)\n",[79,116607,116608,116610,116612,116615],{"class":81,"line":34692},[79,116609,1161],{"class":96},[79,116611,455],{"class":228},[79,116613,116614],{"class":89},"\"initial info:\"",[79,116616,116617],{"class":228},", info)\n",[79,116619,116620],{"class":81,"line":34698},[79,116621,542],{"emptyLinePlaceholder":541},[79,116623,116624,116626,116628],{"class":81,"line":34709},[79,116625,899],{"class":228},[79,116627,239],{"class":448},[79,116629,904],{"class":96},[79,116631,116632,116634,116636,116638,116640,116642,116644],{"class":81,"line":34715},[79,116633,915],{"class":448},[79,116635,918],{"class":228},[79,116637,921],{"class":448},[79,116639,924],{"class":96},[79,116641,455],{"class":228},[79,116643,2940],{"class":96},[79,116645,932],{"class":228},[79,116647,116648,116650,116652],{"class":81,"line":34721},[79,116649,983],{"class":228},[79,116651,239],{"class":448},[79,116653,116654],{"class":228}," env.action_space.sample()\n",[79,116656,116657,116660,116662],{"class":81,"line":34727},[79,116658,116659],{"class":228},"        obs, reward, terminated, truncated, info ",[79,116661,239],{"class":448},[79,116663,115048],{"class":228},[79,116665,116666,116668,116670],{"class":81,"line":34733},[79,116667,1072],{"class":228},[79,116669,1075],{"class":448},[79,116671,1078],{"class":228},[79,116673,116674,116676,116678,116680,116682,116685,116687,116689,116692,116694,116696,116699,116701,116703,116706,116708,116710,116712],{"class":81,"line":34739},[79,116675,34449],{"class":96},[79,116677,455],{"class":228},[79,116679,1116],{"class":89},[79,116681,1119],{"class":228},[79,116683,116684],{"class":89},"\"reward:\"",[79,116686,1020],{"class":228},[79,116688,1138],{"class":96},[79,116690,116691],{"class":228},"(reward, ",[79,116693,970],{"class":96},[79,116695,1130],{"class":228},[79,116697,116698],{"class":89},"\"distance:\"",[79,116700,1020],{"class":228},[79,116702,1138],{"class":96},[79,116704,116705],{"class":228},"(info[",[79,116707,116535],{"class":89},[79,116709,113835],{"class":228},[79,116711,970],{"class":96},[79,116713,1150],{"class":228},[79,116715,116716,116718,116721,116724],{"class":81,"line":34745},[79,116717,1089],{"class":448},[79,116719,116720],{"class":228}," terminated ",[79,116722,116723],{"class":448},"or",[79,116725,116726],{"class":228}," truncated:\n",[79,116728,116729],{"class":81,"line":34751},[79,116730,116731],{"class":448},"            break\n",[79,116733,116734],{"class":81,"line":34771},[79,116735,542],{"emptyLinePlaceholder":541},[79,116737,116738,116740,116742,116744,116746,116748,116750,116752],{"class":81,"line":34777},[79,116739,1161],{"class":96},[79,116741,455],{"class":228},[79,116743,1166],{"class":89},[79,116745,1020],{"class":228},[79,116747,1138],{"class":96},[79,116749,1173],{"class":228},[79,116751,970],{"class":96},[79,116753,1150],{"class":228},[79,116755,116756],{"class":81,"line":34793},[79,116757,542],{"emptyLinePlaceholder":541},[79,116759,116760],{"class":81,"line":34799},[79,116761,542],{"emptyLinePlaceholder":541},[79,116763,116764,116766,116768,116770,116772],{"class":81,"line":34813},[79,116765,1210],{"class":448},[79,116767,1213],{"class":96},[79,116769,1100],{"class":448},[79,116771,1218],{"class":89},[79,116773,745],{"class":228},[79,116775,116776],{"class":81,"line":34819},[79,116777,1226],{"class":228},[19,116779,1229],{},[51,116781,116783],{"className":73,"code":116782,"language":75,"meta":57,"style":57},"touch ch8_gym_env.py\n",[59,116784,116785],{"__ignoreMap":57},[79,116786,116787,116789],{"class":81,"line":82},[79,116788,1239],{"class":85},[79,116790,116791],{"class":89}," ch8_gym_env.py\n",[19,116793,1245],{},[51,116795,116797],{"className":73,"code":116796,"language":75,"meta":57,"style":57},"python ch8_gym_env.py\n",[59,116798,116799],{"__ignoreMap":57},[79,116800,116801,116803],{"class":81,"line":82},[79,116802,441],{"class":85},[79,116804,116791],{"class":89},[339,116806,1259],{"id":1259},[19,116808,116809],{},"继承 Gymnasium 环境：",[51,116811,116813],{"className":439,"code":116812,"language":441,"meta":57,"style":57},"class ReacherEnv(gym.Env):\n",[59,116814,116815],{"__ignoreMap":57},[79,116816,116817,116819,116821,116823,116825,116827,116829],{"class":81,"line":82},[79,116818,16727],{"class":448},[79,116820,115690],{"class":85},[79,116822,455],{"class":228},[79,116824,115173],{"class":85},[79,116826,2798],{"class":228},[79,116828,115699],{"class":85},[79,116830,932],{"class":228},[19,116832,116833],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,116835,116836],{},"初始化模型：",[51,116838,116840],{"className":439,"code":116839,"language":441,"meta":57,"style":57},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[59,116841,116842,116856],{"__ignoreMap":57},[79,116843,116844,116846,116848,116850,116852,116854],{"class":81,"line":82},[79,116845,32830],{"class":96},[79,116847,115750],{"class":228},[79,116849,239],{"class":448},[79,116851,845],{"class":228},[79,116853,553],{"class":96},[79,116855,850],{"class":228},[79,116857,116858,116860,116862,116864,116866,116868],{"class":81,"line":167},[79,116859,32830],{"class":96},[79,116861,115765],{"class":228},[79,116863,239],{"class":448},[79,116865,115770],{"class":228},[79,116867,32830],{"class":96},[79,116869,115775],{"class":228},[19,116871,116872,116873,116875],{},"这和前面章节一样，只是现在放到了类的 ",[59,116874,32836],{}," 里。",[19,116877,116878],{},"缓存 site ID：",[51,116880,116882],{"className":439,"code":116881,"language":441,"meta":57,"style":57},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[59,116883,116884,116898],{"__ignoreMap":57},[79,116885,116886,116888,116890,116892,116894,116896],{"class":81,"line":82},[79,116887,32830],{"class":96},[79,116889,115786],{"class":228},[79,116891,239],{"class":448},[79,116893,115791],{"class":228},[79,116895,91541],{"class":96},[79,116897,850],{"class":228},[79,116899,116900,116902,116904,116906,116908,116910],{"class":81,"line":167},[79,116901,32830],{"class":96},[79,116903,115807],{"class":228},[79,116905,239],{"class":448},[79,116907,115791],{"class":228},[79,116909,91541],{"class":96},[79,116911,850],{"class":228},[19,116913,116914],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,116916,116917],{},"reset：",[51,116919,116921],{"className":439,"code":116920,"language":441,"meta":57,"style":57},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[59,116922,116923],{"__ignoreMap":57},[79,116924,116925,116927,116929,116931,116933,116935,116937,116939,116941,116943,116945,116947,116949,116951,116953,116955,116957],{"class":81,"line":82},[79,116926,703],{"class":448},[79,116928,116155],{"class":85},[79,116930,116158],{"class":228},[79,116932,473],{"class":448},[79,116934,116163],{"class":228},[79,116936,2262],{"class":96},[79,116938,27129],{"class":448},[79,116940,40928],{"class":96},[79,116942,556],{"class":448},[79,116944,40928],{"class":96},[79,116946,116176],{"class":228},[79,116948,116179],{"class":96},[79,116950,27129],{"class":448},[79,116952,40928],{"class":96},[79,116954,556],{"class":448},[79,116956,40928],{"class":96},[79,116958,932],{"class":228},[19,116960,116961,116963],{},[59,116962,72044],{}," 做四件事：",[26,116965,116966,116969,116972,116975],{},[29,116967,116968],{},"设置随机种子。",[29,116970,116971],{},"重置 MuJoCo data。",[29,116973,116974],{},"随机初始化关节角。",[29,116976,116977],{},"返回初始观测和 info。",[19,116979,116980],{},"step：",[51,116982,116984],{"className":439,"code":116983,"language":441,"meta":57,"style":57},"def step(self, action):\n",[59,116985,116986],{"__ignoreMap":57},[79,116987,116988,116990,116992],{"class":81,"line":82},[79,116989,703],{"class":448},[79,116991,116320],{"class":85},[79,116993,116323],{"class":228},[19,116995,116996,116998],{},[59,116997,1656],{}," 做六件事：",[26,117000,117001,117004,117010,117013,117016,117019],{},[29,117002,117003],{},"检查并裁剪 action。",[29,117005,117006,117007,497],{},"写入 ",[59,117008,117009],{},"self.data.ctrl",[29,117011,117012],{},"连续推进若干个 MuJoCo 物理步。",[29,117014,117015],{},"计算新观测。",[29,117017,117018],{},"计算奖励和结束条件。",[29,117020,117021],{},"返回 Gymnasium 标准五元组。",[339,117023,1407],{"id":1407},[51,117025,117027],{"className":439,"code":117026,"language":441,"meta":57,"style":57},"import gymnasium as gym\n",[59,117028,117029],{"__ignoreMap":57},[79,117030,117031,117033,117035,117037],{"class":81,"line":82},[79,117032,520],{"class":448},[79,117034,115528],{"class":228},[79,117036,533],{"class":448},[79,117038,115533],{"class":228},[19,117040,117041,117042,117044,117045,117048],{},"导入 Gymnasium，并起别名 ",[59,117043,115173],{},"。后面写 ",[59,117046,117047],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[51,117050,117052],{"className":439,"code":117051,"language":441,"meta":57,"style":57},"from gymnasium import spaces\n",[59,117053,117054],{"__ignoreMap":57},[79,117055,117056,117058,117060,117062],{"class":81,"line":82},[79,117057,32745],{"class":448},[79,117059,115528],{"class":228},[79,117061,520],{"class":448},[79,117063,115560],{"class":228},[19,117065,117066,117067,117070],{},"导入空间定义工具。",[59,117068,117069],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[51,117072,117073],{"className":439,"code":116812,"language":441,"meta":57,"style":57},[59,117074,117075],{"__ignoreMap":57},[79,117076,117077,117079,117081,117083,117085,117087,117089],{"class":81,"line":82},[79,117078,16727],{"class":448},[79,117080,115690],{"class":85},[79,117082,455],{"class":228},[79,117084,115173],{"class":85},[79,117086,2798],{"class":228},[79,117088,115699],{"class":85},[79,117090,932],{"class":228},[19,117092,117093,117094,117097,117098,117100,117101,1748,117103,117105],{},"定义一个类，名字叫 ",[59,117095,117096],{},"ReacherEnv","。括号里的 ",[59,117099,117047],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[59,117102,72044],{},[59,117104,1656],{}," 这两个核心方法。",[51,117107,117109],{"className":439,"code":117108,"language":441,"meta":57,"style":57},"metadata = {\"render_modes\": []}\n",[59,117110,117111],{"__ignoreMap":57},[79,117112,117113,117116,117118,117120,117122],{"class":81,"line":82},[79,117114,117115],{"class":228},"metadata ",[79,117117,239],{"class":448},[79,117119,6518],{"class":228},[79,117121,115713],{"class":89},[79,117123,115716],{"class":228},[19,117125,117126],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[51,117128,117130],{"className":439,"code":117129,"language":441,"meta":57,"style":57},"def __init__(self) -> None:\n",[59,117131,117132],{"__ignoreMap":57},[79,117133,117134,117136,117138,117140,117142],{"class":81,"line":82},[79,117135,703],{"class":448},[79,117137,32811],{"class":96},[79,117139,115729],{"class":228},[79,117141,832],{"class":96},[79,117143,745],{"class":228},[19,117145,117146,117148,117149,497],{},[59,117147,32836],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[59,117150,117151],{},"env = ReacherEnv()",[51,117153,117155],{"className":439,"code":117154,"language":441,"meta":57,"style":57},"super().__init__()\n",[59,117156,117157],{"__ignoreMap":57},[79,117158,117159,117162,117164,117166],{"class":81,"line":82},[79,117160,117161],{"class":96},"super",[79,117163,19286],{"class":228},[79,117165,32836],{"class":96},[79,117167,4061],{"class":228},[19,117169,117170,117171,117173],{},"调用父类 ",[59,117172,117047],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[51,117175,117176],{"className":439,"code":116839,"language":441,"meta":57,"style":57},[59,117177,117178,117192],{"__ignoreMap":57},[79,117179,117180,117182,117184,117186,117188,117190],{"class":81,"line":82},[79,117181,32830],{"class":96},[79,117183,115750],{"class":228},[79,117185,239],{"class":448},[79,117187,845],{"class":228},[79,117189,553],{"class":96},[79,117191,850],{"class":228},[79,117193,117194,117196,117198,117200,117202,117204],{"class":81,"line":167},[79,117195,32830],{"class":96},[79,117197,115765],{"class":228},[79,117199,239],{"class":448},[79,117201,115770],{"class":228},[79,117203,32830],{"class":96},[79,117205,115775],{"class":228},[19,117207,117208,117209,117211,117212,1748,117215,117218],{},"把 MuJoCo 模型和状态保存到 ",[59,117210,32830],{}," 上。",[59,117213,117214],{},"self.model",[59,117216,117217],{},"self.data"," 表示这个环境对象自己的模型和状态。",[51,117220,117221],{"className":439,"code":116881,"language":441,"meta":57,"style":57},[59,117222,117223,117237],{"__ignoreMap":57},[79,117224,117225,117227,117229,117231,117233,117235],{"class":81,"line":82},[79,117226,32830],{"class":96},[79,117228,115786],{"class":228},[79,117230,239],{"class":448},[79,117232,115791],{"class":228},[79,117234,91541],{"class":96},[79,117236,850],{"class":228},[79,117238,117239,117241,117243,117245,117247,117249],{"class":81,"line":167},[79,117240,32830],{"class":96},[79,117242,115807],{"class":228},[79,117244,239],{"class":448},[79,117246,115791],{"class":228},[79,117248,91541],{"class":96},[79,117250,850],{"class":228},[19,117252,117253,117254,1748,117257,117260],{},"提前查好 tip 和 target 的 site ID。这样 ",[59,117255,117256],{},"_get_obs",[59,117258,117259],{},"_get_reward"," 里就不用每次按名字查找。",[51,117262,117264],{"className":439,"code":117263,"language":441,"meta":57,"style":57},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[59,117265,117266,117276,117286],{"__ignoreMap":57},[79,117267,117268,117270,117272,117274],{"class":81,"line":82},[79,117269,32830],{"class":96},[79,117271,115500],{"class":228},[79,117273,239],{"class":448},[79,117275,56416],{"class":96},[79,117277,117278,117280,117282,117284],{"class":81,"line":167},[79,117279,32830],{"class":96},[79,117281,115879],{"class":228},[79,117283,239],{"class":448},[79,117285,115884],{"class":96},[79,117287,117288,117290,117292,117294],{"class":81,"line":178},[79,117289,32830],{"class":96},[79,117291,115339],{"class":228},[79,117293,239],{"class":448},[79,117295,49328],{"class":96},[19,117297,117298,117301,117302,117305,117306,117309],{},[59,117299,117300],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[59,117303,117304],{},"max_steps"," 是一个 episode 最多运行多少步。",[59,117307,117308],{},"steps"," 记录当前 episode 已经走了多少步。",[51,117311,117312],{"className":439,"code":115378,"language":441,"meta":57,"style":57},[59,117313,117314],{"__ignoreMap":57},[79,117315,117316,117318,117320,117322,117324,117326,117328,117330,117332,117334,117336,117338,117340,117342,117344,117346,117348,117350,117352,117354],{"class":81,"line":82},[79,117317,32830],{"class":96},[79,117319,115387],{"class":228},[79,117321,239],{"class":448},[79,117323,115392],{"class":228},[79,117325,115395],{"class":7284},[79,117327,115398],{"class":448},[79,117329,458],{"class":96},[79,117331,1020],{"class":228},[79,117333,115405],{"class":7284},[79,117335,239],{"class":448},[79,117337,458],{"class":96},[79,117339,1020],{"class":228},[79,117341,97948],{"class":7284},[79,117343,239],{"class":448},[79,117345,455],{"class":228},[79,117347,2331],{"class":96},[79,117349,115422],{"class":228},[79,117351,95487],{"class":7284},[79,117353,239],{"class":448},[79,117355,115429],{"class":228},[19,117357,117358,117359,117362,117363,1748,117366,117369],{},"定义动作空间。",[59,117360,117361],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[59,117364,117365],{},"low=-1.0",[59,117367,117368],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[51,117371,117372],{"className":439,"code":115439,"language":441,"meta":57,"style":57},[59,117373,117374],{"__ignoreMap":57},[79,117375,117376,117378,117380,117382,117384,117386,117388,117390,117392,117394,117396,117398,117400,117402,117404,117406,117408,117410],{"class":81,"line":82},[79,117377,32830],{"class":96},[79,117379,115448],{"class":228},[79,117381,239],{"class":448},[79,117383,115392],{"class":228},[79,117385,115395],{"class":7284},[79,117387,115398],{"class":448},[79,117389,115459],{"class":228},[79,117391,115405],{"class":7284},[79,117393,239],{"class":448},[79,117395,115459],{"class":228},[79,117397,97948],{"class":7284},[79,117399,239],{"class":448},[79,117401,455],{"class":228},[79,117403,2689],{"class":96},[79,117405,115422],{"class":228},[79,117407,95487],{"class":7284},[79,117409,239],{"class":448},[79,117411,115429],{"class":228},[19,117413,117414,117415,117418,117419,117422],{},"定义观测空间。",[59,117416,117417],{},"shape=(10,)"," 表示观测是 10 个数。",[59,117420,117421],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[51,117424,117426],{"className":439,"code":117425,"language":441,"meta":57,"style":57},"def _get_obs(self) -> np.ndarray:\n",[59,117427,117428],{"__ignoreMap":57},[79,117429,117430,117432,117434],{"class":81,"line":82},[79,117431,703],{"class":448},[79,117433,115989],{"class":85},[79,117435,115992],{"class":228},[19,117437,117438,117439,117441],{},"定义内部函数，用来生成观测。函数名前面的 ",[59,117440,3231],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[51,117443,117445],{"className":439,"code":117444,"language":441,"meta":57,"style":57},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[59,117446,117447,117461],{"__ignoreMap":57},[79,117448,117449,117451,117453,117455,117457,117459],{"class":81,"line":82},[79,117450,113201],{"class":228},[79,117452,239],{"class":448},[79,117454,40868],{"class":96},[79,117456,116003],{"class":228},[79,117458,32830],{"class":96},[79,117460,116008],{"class":228},[79,117462,117463,117465,117467,117469,117471,117473],{"class":81,"line":167},[79,117464,113211],{"class":228},[79,117466,239],{"class":448},[79,117468,40868],{"class":96},[79,117470,116003],{"class":228},[79,117472,32830],{"class":96},[79,117474,116023],{"class":228},[19,117476,117477],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[51,117479,117481],{"className":439,"code":117480,"language":441,"meta":57,"style":57},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[59,117482,117483,117499],{"__ignoreMap":57},[79,117484,117485,117487,117489,117491,117493,117495,117497],{"class":81,"line":82},[79,117486,1667],{"class":228},[79,117488,239],{"class":448},[79,117490,116032],{"class":228},[79,117492,32830],{"class":96},[79,117494,116037],{"class":228},[79,117496,32830],{"class":96},[79,117498,116042],{"class":228},[79,117500,117501,117503],{"class":81,"line":167},[79,117502,449],{"class":448},[79,117504,116049],{"class":228},[19,117506,117507,117508,117511,117512,117514],{},"拼接观测，并转换成 ",[59,117509,117510],{},"float32","。很多强化学习库默认使用 ",[59,117513,117510],{},"，所以这里主动转换。",[51,117516,117517],{"className":439,"code":116920,"language":441,"meta":57,"style":57},[59,117518,117519],{"__ignoreMap":57},[79,117520,117521,117523,117525,117527,117529,117531,117533,117535,117537,117539,117541,117543,117545,117547,117549,117551,117553],{"class":81,"line":82},[79,117522,703],{"class":448},[79,117524,116155],{"class":85},[79,117526,116158],{"class":228},[79,117528,473],{"class":448},[79,117530,116163],{"class":228},[79,117532,2262],{"class":96},[79,117534,27129],{"class":448},[79,117536,40928],{"class":96},[79,117538,556],{"class":448},[79,117540,40928],{"class":96},[79,117542,116176],{"class":228},[79,117544,116179],{"class":96},[79,117546,27129],{"class":448},[79,117548,40928],{"class":96},[79,117550,556],{"class":448},[79,117552,40928],{"class":96},[79,117554,932],{"class":228},[19,117556,117557,117558,117560,117561,117564],{},"定义 reset。",[59,117559,116199],{}," 用来控制随机数，保证实验可以复现。",[59,117562,117563],{},"options"," 用来接收额外配置，本章暂时不用。",[51,117566,117568],{"className":439,"code":117567,"language":441,"meta":57,"style":57},"super().reset(seed=seed)\n",[59,117569,117570],{"__ignoreMap":57},[79,117571,117572,117574,117576,117578,117580],{"class":81,"line":82},[79,117573,117161],{"class":96},[79,117575,116196],{"class":228},[79,117577,116199],{"class":7284},[79,117579,239],{"class":448},[79,117581,116204],{"class":228},[19,117583,117584,117585,117588],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[59,117586,117587],{},"self.np_random"," 生成可复现的随机数。",[51,117590,117592],{"className":439,"code":117591,"language":441,"meta":57,"style":57},"mujoco.mj_resetData(self.model, self.data)\n",[59,117593,117594],{"__ignoreMap":57},[79,117595,117596,117599,117601,117603,117605],{"class":81,"line":82},[79,117597,117598],{"class":228},"mujoco.mj_resetData(",[79,117600,32830],{"class":96},[79,117602,116214],{"class":228},[79,117604,32830],{"class":96},[79,117606,116219],{"class":228},[19,117608,117609],{},"把 MuJoCo 状态重置到默认状态。",[51,117611,117613],{"className":439,"code":117612,"language":441,"meta":57,"style":57},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[59,117614,117615],{"__ignoreMap":57},[79,117616,117617,117619,117621,117623,117625,117627,117629,117631,117633,117635,117637,117639,117641,117643,117645,117647,117649],{"class":81,"line":82},[79,117618,32830],{"class":96},[79,117620,116230],{"class":228},[79,117622,239],{"class":448},[79,117624,40868],{"class":96},[79,117626,116237],{"class":228},[79,117628,115395],{"class":7284},[79,117630,115398],{"class":448},[79,117632,88197],{"class":96},[79,117634,1020],{"class":228},[79,117636,115405],{"class":7284},[79,117638,239],{"class":448},[79,117640,88197],{"class":96},[79,117642,1020],{"class":228},[79,117644,33498],{"class":7284},[79,117646,239],{"class":448},[79,117648,32830],{"class":96},[79,117650,116262],{"class":228},[19,117652,116974,117653,117656,117657,117660,117661,117663],{},[59,117654,117655],{},"[:]"," 表示修改整个数组。",[59,117658,117659],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[59,117662,104093],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[51,117665,117667],{"className":439,"code":117666,"language":441,"meta":57,"style":57},"self.data.qvel[:] = 0.0\n",[59,117668,117669],{"__ignoreMap":57},[79,117670,117671,117673,117675,117677],{"class":81,"line":82},[79,117672,32830],{"class":96},[79,117674,116269],{"class":228},[79,117676,239],{"class":448},[79,117678,904],{"class":96},[19,117680,117681],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[51,117683,117685],{"className":439,"code":117684,"language":441,"meta":57,"style":57},"self.steps = 0\nreturn self._get_obs(), {}\n",[59,117686,117687,117697],{"__ignoreMap":57},[79,117688,117689,117691,117693,117695],{"class":81,"line":82},[79,117690,32830],{"class":96},[79,117692,115339],{"class":228},[79,117694,239],{"class":448},[79,117696,49328],{"class":96},[79,117698,117699,117701,117703],{"class":81,"line":167},[79,117700,449],{"class":448},[79,117702,40868],{"class":96},[79,117704,116309],{"class":228},[19,117706,117707],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[51,117709,117710],{"className":439,"code":116983,"language":441,"meta":57,"style":57},[59,117711,117712],{"__ignoreMap":57},[79,117713,117714,117716,117718],{"class":81,"line":82},[79,117715,703],{"class":448},[79,117717,116320],{"class":85},[79,117719,116323],{"class":228},[19,117721,117722],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[51,117724,117726],{"className":439,"code":117725,"language":441,"meta":57,"style":57},"action = np.asarray(action, dtype=np.float32)\n",[59,117727,117728],{"__ignoreMap":57},[79,117729,117730,117732,117734,117736,117738,117740],{"class":81,"line":82},[79,117731,1337],{"class":228},[79,117733,239],{"class":448},[79,117735,116332],{"class":228},[79,117737,95487],{"class":7284},[79,117739,239],{"class":448},[79,117741,115429],{"class":228},[19,117743,117744,117745,497],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[59,117746,117510],{},[51,117748,117750],{"className":439,"code":117749,"language":441,"meta":57,"style":57},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[59,117751,117752],{"__ignoreMap":57},[79,117753,117754,117756,117758,117760,117762,117764,117766],{"class":81,"line":82},[79,117755,1337],{"class":228},[79,117757,239],{"class":448},[79,117759,1013],{"class":228},[79,117761,32830],{"class":96},[79,117763,116351],{"class":228},[79,117765,32830],{"class":96},[79,117767,116356],{"class":228},[19,117769,117770],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[51,117772,117774],{"className":439,"code":117773,"language":441,"meta":57,"style":57},"self.data.ctrl[:] = action\n",[59,117775,117776],{"__ignoreMap":57},[79,117777,117778,117780,117782,117784],{"class":81,"line":82},[79,117779,32830],{"class":96},[79,117781,116367],{"class":228},[79,117783,239],{"class":448},[79,117785,1044],{"class":228},[19,117787,117788],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[51,117790,117792],{"className":439,"code":117791,"language":441,"meta":57,"style":57},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[59,117793,117794,117810],{"__ignoreMap":57},[79,117795,117796,117798,117800,117802,117804,117806,117808],{"class":81,"line":82},[79,117797,1638],{"class":448},[79,117799,103450],{"class":228},[79,117801,921],{"class":448},[79,117803,924],{"class":96},[79,117805,455],{"class":228},[79,117807,32830],{"class":96},[79,117809,116388],{"class":228},[79,117811,117812,117815,117817,117819,117821],{"class":81,"line":167},[79,117813,117814],{"class":228},"    mujoco.mj_step(",[79,117816,32830],{"class":96},[79,117818,116214],{"class":228},[79,117820,32830],{"class":96},[79,117822,116219],{"class":228},[19,117824,117825,117826,117829,117830,117832,117833,497],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[59,117827,117828],{},"frame_skip=5","，所以外部调用一次 ",[59,117831,115510],{},"，内部实际执行 5 次 ",[59,117834,103180],{},[51,117836,117838],{"className":439,"code":117837,"language":441,"meta":57,"style":57},"self.steps += 1\n",[59,117839,117840],{"__ignoreMap":57},[79,117841,117842,117844,117846,117848],{"class":81,"line":82},[79,117843,32830],{"class":96},[79,117845,115339],{"class":228},[79,117847,1075],{"class":448},[79,117849,57688],{"class":96},[19,117851,117852],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[51,117854,117856],{"className":439,"code":117855,"language":441,"meta":57,"style":57},"obs = self._get_obs()\nreward = self._get_reward()\n",[59,117857,117858,117868],{"__ignoreMap":57},[79,117859,117860,117862,117864,117866],{"class":81,"line":82},[79,117861,1667],{"class":228},[79,117863,239],{"class":448},[79,117865,40868],{"class":96},[79,117867,116430],{"class":228},[79,117869,117870,117872,117874,117876],{"class":81,"line":167},[79,117871,1824],{"class":228},[79,117873,239],{"class":448},[79,117875,40868],{"class":96},[79,117877,116441],{"class":228},[19,117879,117880],{},"计算新的观测和奖励。",[51,117882,117884],{"className":439,"code":117883,"language":441,"meta":57,"style":57},"dist = float(np.linalg.norm(tip - target))\n",[59,117885,117886],{"__ignoreMap":57},[79,117887,117888,117890,117892,117894,117896,117898],{"class":81,"line":82},[79,117889,113229],{"class":228},[79,117891,239],{"class":448},[79,117893,452],{"class":96},[79,117895,116484],{"class":228},[79,117897,478],{"class":448},[79,117899,116489],{"class":228},[19,117901,117902],{},"计算末端到目标的距离，并转换成 Python float。",[51,117904,117905],{"className":439,"code":115310,"language":441,"meta":57,"style":57},[59,117906,117907,117919],{"__ignoreMap":57},[79,117908,117909,117911,117913,117915,117917],{"class":81,"line":82},[79,117910,115317],{"class":228},[79,117912,239],{"class":448},[79,117914,115322],{"class":228},[79,117916,229],{"class":448},[79,117918,115327],{"class":96},[79,117920,117921,117923,117925,117927,117929,117931,117933],{"class":81,"line":167},[79,117922,115332],{"class":228},[79,117924,239],{"class":448},[79,117926,40868],{"class":96},[79,117928,115339],{"class":228},[79,117930,3805],{"class":448},[79,117932,40868],{"class":96},[79,117934,115346],{"class":228},[19,117936,117937],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[51,117939,117941],{"className":439,"code":117940,"language":441,"meta":57,"style":57},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[59,117942,117943,117956],{"__ignoreMap":57},[79,117944,117945,117948,117950,117952,117954],{"class":81,"line":82},[79,117946,117947],{"class":228},"info ",[79,117949,239],{"class":448},[79,117951,6518],{"class":228},[79,117953,116535],{"class":89},[79,117955,116538],{"class":228},[79,117957,117958,117960],{"class":81,"line":167},[79,117959,449],{"class":448},[79,117961,116545],{"class":228},[19,117963,117964,117967],{},[59,117965,117966],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[51,117969,117971],{"className":439,"code":117970,"language":441,"meta":57,"style":57},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[59,117972,117973,117982],{"__ignoreMap":57},[79,117974,117975,117978,117980],{"class":81,"line":82},[79,117976,117977],{"class":228},"env ",[79,117979,239],{"class":448},[79,117981,116575],{"class":228},[79,117983,117984,117986,117988,117990,117992,117994,117996],{"class":81,"line":167},[79,117985,115033],{"class":228},[79,117987,239],{"class":448},[79,117989,116585],{"class":228},[79,117991,116199],{"class":7284},[79,117993,239],{"class":448},[79,117995,759],{"class":96},[79,117997,850],{"class":228},[19,117999,118000,118001,118004],{},"创建环境并重置。",[59,118002,118003],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[51,118006,118008],{"className":439,"code":118007,"language":441,"meta":57,"style":57},"action = env.action_space.sample()\n",[59,118009,118010],{"__ignoreMap":57},[79,118011,118012,118014,118016],{"class":81,"line":82},[79,118013,1337],{"class":228},[79,118015,239],{"class":448},[79,118017,116654],{"class":228},[19,118019,118020],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,118022,1934],{"id":1933},[19,118024,107393],{},[51,118026,118029],{"className":118027,"code":118028,"language":56,"meta":57},[54],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[59,118030,118028],{"__ignoreMap":57},[19,118032,118033],{},"这个环境已经具备强化学习环境的基本结构。",[19,118035,118036],{},"主函数里使用随机动作：",[51,118038,118039],{"className":439,"code":118007,"language":441,"meta":57,"style":57},[59,118040,118041],{"__ignoreMap":57},[79,118042,118043,118045,118047],{"class":81,"line":82},[79,118044,1337],{"class":228},[79,118046,239],{"class":448},[79,118048,116654],{"class":228},[19,118050,118051],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,118053,1987],{"id":1986},[26,118055,118056,118059,118065,118074,118083,118092,118098],{},[29,118057,118058],{},"运行程序。",[29,118060,118061,118062,497],{},"确认 ",[59,118063,118064],{},"obs.shape == (10,)",[29,118066,2008,118067,118070,118071,497],{},[59,118068,118069],{},"env.action_space","，应类似 ",[59,118072,118073],{},"Box(-1.0, 1.0, (2,), float32)",[29,118075,107493,118076,118079,118080,497],{},[59,118077,118078],{},"self.max_steps = 10","，确认环境会更快 ",[59,118081,118082],{},"truncated=True",[29,118084,104348,118085,104351,118088,118091],{},[59,118086,118087],{},"terminated = dist \u003C 0.05",[59,118089,118090],{},"dist \u003C 0.2","，观察是否更容易结束。",[29,118093,104348,118094,118097],{},[59,118095,118096],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[29,118099,118100,118101,118103,118104,118107],{},"在 ",[59,118102,117966],{}," 里加入 ",[59,118105,118106],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,118109,2031],{"id":2030},[339,118111,118113],{"id":118112},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,118115,118116,118117,118119],{},"Gymnasium 的 ",[59,118118,1656],{}," 返回 5 个值:",[51,118121,118123],{"className":439,"code":118122,"language":441,"meta":57,"style":57},"obs, reward, terminated, truncated, info\n",[59,118124,118125],{"__ignoreMap":57},[79,118126,118127],{"class":81,"line":82},[79,118128,118122],{"class":228},[19,118130,118131],{},"不是旧 Gym 的 4 个值。",[339,118133,118135,118138],{"id":118134},"datactrl-action-维度错误",[59,118136,118137],{},"data.ctrl[:] = action"," 维度错误",[19,118140,104457],{},[51,118142,118144],{"className":439,"code":118143,"language":441,"meta":57,"style":57},"print(self.model.nu)\nprint(action.shape)\n",[59,118145,118146,118157],{"__ignoreMap":57},[79,118147,118148,118150,118152,118154],{"class":81,"line":82},[79,118149,1889],{"class":96},[79,118151,455],{"class":228},[79,118153,32830],{"class":96},[79,118155,118156],{"class":228},".model.nu)\n",[79,118158,118159,118161],{"class":81,"line":167},[79,118160,1889],{"class":96},[79,118162,118163],{"class":228},"(action.shape)\n",[19,118165,118166],{},"两者必须匹配。",[339,118168,118170],{"id":118169},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,118172,104397],{},[51,118174,118176],{"className":439,"code":118175,"language":441,"meta":57,"style":57},"mujoco.mj_forward(self.model, self.data)\n",[59,118177,118178],{"__ignoreMap":57},[79,118179,118180,118183,118185,118187,118189],{"class":81,"line":82},[79,118181,118182],{"class":228},"mujoco.mj_forward(",[79,118184,32830],{"class":96},[79,118186,116214],{"class":228},[79,118188,32830],{"class":96},[79,118190,116219],{"class":228},[339,118192,118194,118196],{"id":118193},"observation_space-维度和-obs-不一致",[59,118195,115233],{}," 维度和 obs 不一致",[19,118198,104509],{},[51,118200,118202],{"className":439,"code":118201,"language":441,"meta":57,"style":57},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[59,118203,118204,118214,118221],{"__ignoreMap":57},[79,118205,118206,118208,118210,118212],{"class":81,"line":82},[79,118207,1667],{"class":228},[79,118209,239],{"class":448},[79,118211,40868],{"class":96},[79,118213,116430],{"class":228},[79,118215,118216,118218],{"class":81,"line":167},[79,118217,1889],{"class":96},[79,118219,118220],{"class":228},"(obs.shape)\n",[79,118222,118223,118225,118227,118229],{"class":81,"line":178},[79,118224,1889],{"class":96},[79,118226,455],{"class":228},[79,118228,32830],{"class":96},[79,118230,118231],{"class":228},".observation_space.shape)\n",[19,118233,118234],{},"两者必须一致。本章观测是：",[51,118236,118239],{"className":118237,"code":118238,"language":56,"meta":57},[54],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[59,118240,118238],{"__ignoreMap":57},[339,118242,118244],{"id":118243},"action-超过范围","action 超过范围",[19,118246,118247],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[51,118249,118250],{"className":439,"code":117749,"language":441,"meta":57,"style":57},[59,118251,118252],{"__ignoreMap":57},[79,118253,118254,118256,118258,118260,118262,118264,118266],{"class":81,"line":82},[79,118255,1337],{"class":228},[79,118257,239],{"class":448},[79,118259,1013],{"class":228},[79,118261,32830],{"class":96},[79,118263,116351],{"class":228},[79,118265,32830],{"class":96},[79,118267,116356],{"class":228},[19,118269,118270,118271,497],{},"这能避免无效动作直接写入 ",[59,118272,2148],{},[339,118274,118276],{"id":118275},"忘记返回-info","忘记返回 info",[19,118278,118116,118279,1748,118281,118283],{},[59,118280,72044],{},[59,118282,1656],{}," 都会返回 info：",[51,118285,118286],{"className":439,"code":115026,"language":441,"meta":57,"style":57},[59,118287,118288,118296],{"__ignoreMap":57},[79,118289,118290,118292,118294],{"class":81,"line":82},[79,118291,115033],{"class":228},[79,118293,239],{"class":448},[79,118295,115038],{"class":228},[79,118297,118298,118300,118302],{"class":81,"line":167},[79,118299,115043],{"class":228},[79,118301,239],{"class":448},[79,118303,115048],{"class":228},[19,118305,118306,118307,497],{},"即使暂时没有额外信息，也返回 ",[59,118308,34457],{},[14,118310,118312],{"id":118311},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,118314,118315],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[26,118317,118318,118321,118324,118327,118330,118333],{},[29,118319,118320],{},"更稳定的 reward。",[29,118322,118323],{},"合理的 episode 长度。",[29,118325,118326],{},"可重复的随机目标采样。",[29,118328,118329],{},"render 接口。",[29,118331,118332],{},"环境注册代码。",[29,118334,118335],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,118337,118338],{},"如果只是自己写训练循环，最小形式是：",[51,118340,118342],{"className":439,"code":118341,"language":441,"meta":57,"style":57},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n\nfor _ in range(1000):\n    action = env.action_space.sample()\n    obs, reward, terminated, truncated, info = env.step(action)\n    if terminated or truncated:\n        obs, info = env.reset()\n",[59,118343,118344,118352,118368,118372,118388,118397,118406,118416],{"__ignoreMap":57},[79,118345,118346,118348,118350],{"class":81,"line":82},[79,118347,117977],{"class":228},[79,118349,239],{"class":448},[79,118351,116575],{"class":228},[79,118353,118354,118356,118358,118360,118362,118364,118366],{"class":81,"line":167},[79,118355,115033],{"class":228},[79,118357,239],{"class":448},[79,118359,116585],{"class":228},[79,118361,116199],{"class":7284},[79,118363,239],{"class":448},[79,118365,759],{"class":96},[79,118367,850],{"class":228},[79,118369,118370],{"class":81,"line":178},[79,118371,542],{"emptyLinePlaceholder":541},[79,118373,118374,118376,118378,118380,118382,118384,118386],{"class":81,"line":545},[79,118375,1638],{"class":448},[79,118377,103450],{"class":228},[79,118379,921],{"class":448},[79,118381,924],{"class":96},[79,118383,455],{"class":228},[79,118385,929],{"class":96},[79,118387,932],{"class":228},[79,118389,118390,118393,118395],{"class":81,"line":550},[79,118391,118392],{"class":228},"    action ",[79,118394,239],{"class":448},[79,118396,116654],{"class":228},[79,118398,118399,118402,118404],{"class":81,"line":562},[79,118400,118401],{"class":228},"    obs, reward, terminated, truncated, info ",[79,118403,239],{"class":448},[79,118405,115048],{"class":228},[79,118407,118408,118410,118412,118414],{"class":81,"line":568},[79,118409,5176],{"class":448},[79,118411,116720],{"class":228},[79,118413,116723],{"class":448},[79,118415,116726],{"class":228},[79,118417,118418,118421,118423],{"class":81,"line":574},[79,118419,118420],{"class":228},"        obs, info ",[79,118422,239],{"class":448},[79,118424,115038],{"class":228},[14,118426,118428],{"id":118427},"_9本章小结","9.本章小结",[19,118430,118431],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[51,118433,118436],{"className":118434,"code":118435,"language":56,"meta":57},[54],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[59,118437,118435],{"__ignoreMap":57},[19,118439,118440],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[2159,118442,118443],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":57,"searchDepth":167,"depth":167,"links":118445},[118446,118447,118448,118455,118459,118460,118461,118471,118472],{"id":16,"depth":167,"text":17},{"id":66,"depth":167,"text":67},{"id":203,"depth":167,"text":204,"children":118449},[118450,118452,118454],{"id":115257,"depth":178,"text":118451},"terminated 和 truncated 的区别",{"id":115360,"depth":178,"text":118453},"observation_space 和 action_space",{"id":115487,"depth":178,"text":115488},{"id":509,"depth":167,"text":510,"children":118456},[118457,118458],{"id":1259,"depth":178,"text":1259},{"id":1407,"depth":178,"text":1407},{"id":1933,"depth":167,"text":1934},{"id":1986,"depth":167,"text":1987},{"id":2030,"depth":167,"text":2031,"children":118462},[118463,118464,118466,118467,118469,118470],{"id":118112,"depth":178,"text":118113},{"id":118134,"depth":178,"text":118465},"data.ctrl[:] = action 维度错误",{"id":118169,"depth":178,"text":118170},{"id":118193,"depth":178,"text":118468},"observation_space 维度和 obs 不一致",{"id":118243,"depth":178,"text":118244},{"id":118275,"depth":178,"text":118276},{"id":118311,"depth":167,"text":118312},{"id":118427,"depth":167,"text":118428},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":115010,"description":57},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":118479,"title":118480,"body":118481,"description":118904,"extension":2186,"meta":118905,"navigation":541,"path":118906,"seo":118907,"stem":118908,"__hash__":118909},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":118482,"toc":118894},[118483,118487,118490,118493,118513,118519,118525,118535,118538,118541,118561,118564,118568,118571,118577,118580,118594,118597,118600,118674,118677,118683,118686,118709,118712,118762,118765,118771,118774,118777,118780,118799,118802,118808,118811,118814,118817,118837,118840,118843,118846,118891],[10,118484,118486],{"id":118485},"mujoco-学习","MuJoCo 学习",[19,118488,118489],{},"初版",[19,118491,118492],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[26,118494,118495,118498,118501,118510],{},[29,118496,118497],{},"MuJoCo 模型文件在描述什么。",[29,118499,118500],{},"Python 代码怎样读取和推进仿真。",[29,118502,118503,2139,118505,2139,118507,118509],{},[59,118504,1290],{},[59,118506,1294],{},[59,118508,106284],{}," 这些数组为什么重要。",[29,118511,118512],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,118514,118515,118516,118518],{},"默认环境为 Fedora 44、Python >= 3.10、",[59,118517,102996],{}," 官方 Python bindings。",[19,118520,118521,118522,118524],{},"注意：本文禁止使用 ",[59,118523,102982],{},"。所有示例均使用：",[51,118526,118527],{"className":439,"code":103522,"language":441,"meta":57,"style":57},[59,118528,118529],{"__ignoreMap":57},[79,118530,118531,118533],{"class":81,"line":82},[79,118532,520],{"class":448},[79,118534,523],{"class":228},[14,118536,118537],{"id":118537},"适合谁阅读",[19,118539,118540],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[26,118542,118543,118546,118549,118552],{},[29,118544,118545],{},"没学过 MuJoCo，只会一点 Python。",[29,118547,118548],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[29,118550,118551],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[29,118553,118554,118555,118557,118558,118560],{},"以前接触过 ",[59,118556,102982],{},"，现在想迁移到官方 ",[59,118559,102990],{}," Python bindings。",[19,118562,118563],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,118565,118567],{"id":118566},"mujoco-到底是什么","MuJoCo 到底是什么",[19,118569,118570],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[51,118572,118575],{"className":118573,"code":118574,"language":56,"meta":57},[54],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[59,118576,118574],{"__ignoreMap":57},[19,118578,118579],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[26,118581,118582,118585,118588,118591],{},[29,118583,118584],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[29,118586,118587],{},"快速测试控制算法，不必一开始就上真实机器人。",[29,118589,118590],{},"生成强化学习环境。",[29,118592,118593],{},"采集状态、动作、图像、奖励等训练数据。",[14,118595,118596],{"id":118596},"学习前的心智模型",[19,118598,118599],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[347,118601,118602,118614],{},[350,118603,118604],{},[353,118605,118606,118609,118612],{},[356,118607,118608],{"align":358},"部分",[356,118610,118611],{"align":358},"负责什么",[356,118613,23212],{"align":358},[367,118615,118616,118627,118639,118651,118663],{},[353,118617,118618,118621,118624],{},[372,118619,118620],{"align":358},"MJCF XML",[372,118622,118623],{"align":358},"定义世界和机器人结构",[372,118625,118626],{"align":358},"地面、盒子、关节、电机、摄像头",[353,118628,118629,118633,118636],{},[372,118630,118631],{"align":358},[59,118632,102692],{},[372,118634,118635],{"align":358},"编译后的静态模型",[372,118637,118638],{"align":358},"有几个关节、有几个电机、时间步长是多少",[353,118640,118641,118645,118648],{},[372,118642,118643],{"align":358},[59,118644,102702],{},[372,118646,118647],{"align":358},"运行中的动态状态",[372,118649,118650],{"align":358},"当前时间、位置、速度、电机输入",[353,118652,118653,118657,118660],{},[372,118654,118655],{"align":358},[59,118656,103180],{},[372,118658,118659],{"align":358},"推进一步物理仿真",[372,118661,118662],{"align":358},"根据重力、力、碰撞更新状态",[353,118664,118665,118668,118671],{},[372,118666,118667],{"align":358},"Viewer \u002F Renderer",[372,118669,118670],{"align":358},"把仿真显示出来",[372,118672,118673],{"align":358},"打开窗口或保存图片",[19,118675,118676],{},"一句话总结：",[51,118678,118681],{"className":118679,"code":118680,"language":56,"meta":57},[54],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[59,118682,118680],{"__ignoreMap":57},[19,118684,118685],{},"参考来源：",[3246,118687,118688,118695,118702],{},[29,118689,118690,118691],{},"MuJoCo Python 官方文档：",[2482,118692,118693],{"href":118693,"rel":118694},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[25885],[29,118696,118697,118698],{},"MuJoCo XML Reference：",[2482,118699,118700],{"href":118700,"rel":118701},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[25885],[29,118703,118704,118705],{},"MuJoCo Overview：",[2482,118706,118707],{"href":118707,"rel":118708},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[25885],[14,118710,118711],{"id":118711},"章节目录",[26,118713,118714,118720,118726,118732,118738,118744,118750,118756],{},[29,118715,118716],{},[2482,118717,118719],{"href":118718},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[29,118721,118722],{},[2482,118723,118725],{"href":118724},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[29,118727,118728],{},[2482,118729,118731],{"href":118730},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[29,118733,118734],{},[2482,118735,118737],{"href":118736},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[29,118739,118740],{},[2482,118741,118743],{"href":118742},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[29,118745,118746],{},[2482,118747,118749],{"href":118748},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[29,118751,118752],{},[2482,118753,118755],{"href":118754},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[29,118757,118758],{},[2482,118759,118761],{"href":118760},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,118763,118764],{"id":118764},"推荐学习路线",[51,118766,118769],{"className":118767,"code":118768,"language":56,"meta":57},[54],"环境安装\n→ XML \u002F MJCF 建模\n→ MjModel \u002F MjData\n→ mj_step 控制循环\n→ joint \u002F actuator\n→ viewer \u002F renderer\n→ cartpole \u002F reacher\n→ Gymnasium 环境接口\n→ imitation learning \u002F VLA 数据采集\n",[59,118770,118768],{"__ignoreMap":57},[19,118772,118773],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,118775,118776],{"id":118776},"建议的目录结构",[19,118778,118779],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[51,118781,118783],{"className":73,"code":118782,"language":75,"meta":57,"style":57},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[59,118784,118785,118793],{"__ignoreMap":57},[79,118786,118787,118789,118791],{"class":81,"line":82},[79,118788,103229],{"class":85},[79,118790,31230],{"class":96},[79,118792,103234],{"class":89},[79,118794,118795,118797],{"class":81,"line":167},[79,118796,103239],{"class":96},[79,118798,103234],{"class":89},[19,118800,118801],{},"每一章的代码都单独保存：",[51,118803,118806],{"className":118804,"code":118805,"language":56,"meta":57},[54],"mujoco_tutorial\u002F\n├── ch1_first_sim.py\n├── ch2_xml_basic.py\n├── ch3_python_state.py\n├── ch4_joint_motor.py\n├── ch5_viewer.py\n├── ch5_renderer.py\n├── ch6_cartpole.py\n├── ch7_reacher.py\n└── ch8_gym_env.py\n",[59,118807,118805],{"__ignoreMap":57},[19,118809,118810],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,118812,118813],{"id":118813},"学习方法",[19,118815,118816],{},"每章建议按这个顺序操作：",[26,118818,118819,118822,118825,118828,118831,118834],{},[29,118820,118821],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[29,118823,118824],{},"复制最小可运行代码，保存成指定文件。",[29,118826,118827],{},"运行代码，确认没有报错。",[29,118829,118830],{},"对照“运行结果说明”理解输出。",[29,118832,118833],{},"做“验证步骤”，主动改一两个参数。",[29,118835,118836],{},"遇到报错先看“常见错误与解决方案”。",[19,118838,118839],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,118841,118842],{"id":118842},"全局排错顺序",[19,118844,118845],{},"遇到问题时，按下面顺序查：",[26,118847,118848,118854,118860,118865,118868,118871,118878,118888],{},[29,118849,118850,118851],{},"Python 环境是否激活：",[59,118852,118853],{},"which python",[29,118855,118856,118857],{},"MuJoCo 是否能导入：",[59,118858,118859],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[29,118861,118862,118863],{},"是否误装了 ",[59,118864,102982],{},[29,118866,118867],{},"XML 标签是否闭合、属性是否拼写正确",[29,118869,118870],{},"actuator 引用的 joint 名字是否存在",[29,118872,118873,118875,118876],{},[59,118874,2148],{}," 的长度是否等于 ",[59,118877,104101],{},[29,118879,107493,118880,1978,118882,118884,118885],{},[59,118881,1290],{},[59,118883,1294],{}," 后是否调用了 ",[59,118886,118887],{},"mujoco.mj_forward",[29,118889,118890],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[2159,118892,118893],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":57,"searchDepth":167,"depth":167,"links":118895},[118896,118897,118898,118899,118900,118901,118902,118903],{"id":118537,"depth":167,"text":118537},{"id":118566,"depth":167,"text":118567},{"id":118596,"depth":167,"text":118596},{"id":118711,"depth":167,"text":118711},{"id":118764,"depth":167,"text":118764},{"id":118776,"depth":167,"text":118776},{"id":118813,"depth":167,"text":118813},{"id":118842,"depth":167,"text":118842},"仿真搭建。",{"category":25404},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":118480,"description":118904},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":118911,"title":118912,"body":118913,"description":25402,"extension":2186,"meta":119368,"navigation":541,"path":119369,"seo":119370,"stem":119371,"__hash__":119372},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":118914,"toc":119366},[118915,118918,118921,118927,119363],[10,118916,118912],{"id":118917},"_1-最常用的基本操作更新",[19,118919,118920],{},"装linux系统教程：",[19,118922,118923],{},[2482,118924,118925],{"href":118925,"rel":118926},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[25885],[51,118928,118932],{"className":118929,"code":118930,"language":118931,"meta":57,"style":57},"language-Bash shiki shiki-themes github-light github-dark","#更新相关的知识\n# 更新软件包列表（从服务器获取最新软件信息）\nsudo apt update\n# 升级所有可更新的软件包（不删除旧包）\nsudo apt upgrade\n#更新和升级软件包\nsudo apt update && sudo apt upgrade -y\n#列出可更新的软件包及版本信息\napt list --upgradable\n#彻底升级（处理依赖关系，可能删除旧包）\nsudo apt full-upgrade\n#设置指定版本\nsudo apt install \u003Cpackage_name>=\u003Cversion_number>\n#只安装软件包不升级\nsudo apt install \u003Cpackage_name> --no-upgrade\n#只升级，不存在就不安装\nsudo apt install \u003Cpackage_name> --only-upgrade\n\n#安装指定的软件命令\nsudo apt install \u003Cpackage_name>\n\n#安装多个软件包\nsudo apt install \u003Cpackage_1> \u003Cpackage_2> \u003Cpackage_3>\n\n#更新指定的软件命令\nsudo apt update \u003Cpackage_name>\n\n#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\napt show \u003Cpackage_name>\n\n#删除软件包命令\nsudo apt remove \u003Cpackage_name>\n\n# 清理旧版本和缓存（释放磁盘空间）\nsudo apt autoremove  # 删除不再需要的依赖和库文件\nsudo apt clean       # 清理下载的缓存包\n\n#移除软件包及配置文件\nsudo apt purge \u003Cpackage_name>\n\n#查找软件包命令\nsudo apt search \u003Ckeyword>\n\n#列出所有已安装的包\napt list --installed\n\n#列出所有已安装的包的版本信息\napt list --all-versions\n","Bash",[59,118933,118934,118939,118944,118953,118958,118967,118972,118992,118997,119008,119013,119022,119027,119055,119060,119079,119084,119103,119107,119112,119128,119132,119137,119167,119171,119176,119192,119196,119201,119216,119220,119225,119241,119245,119250,119262,119274,119278,119283,119300,119304,119309,119327,119331,119336,119345,119349,119354],{"__ignoreMap":57},[79,118935,118936],{"class":81,"line":82},[79,118937,118938],{"class":2313},"#更新相关的知识\n",[79,118940,118941],{"class":81,"line":167},[79,118942,118943],{"class":2313},"# 更新软件包列表（从服务器获取最新软件信息）\n",[79,118945,118946,118948,118951],{"class":81,"line":178},[79,118947,86],{"class":85},[79,118949,118950],{"class":89}," apt",[79,118952,28260],{"class":89},[79,118954,118955],{"class":81,"line":545},[79,118956,118957],{"class":2313},"# 升级所有可更新的软件包（不删除旧包）\n",[79,118959,118960,118962,118964],{"class":81,"line":550},[79,118961,86],{"class":85},[79,118963,118950],{"class":89},[79,118965,118966],{"class":89}," upgrade\n",[79,118968,118969],{"class":81,"line":562},[79,118970,118971],{"class":2313},"#更新和升级软件包\n",[79,118973,118974,118976,118978,118981,118983,118985,118987,118990],{"class":81,"line":568},[79,118975,86],{"class":85},[79,118977,118950],{"class":89},[79,118979,118980],{"class":89}," update",[79,118982,28208],{"class":228},[79,118984,86],{"class":85},[79,118986,118950],{"class":89},[79,118988,118989],{"class":89}," upgrade",[79,118991,164],{"class":96},[79,118993,118994],{"class":81,"line":574},[79,118995,118996],{"class":2313},"#列出可更新的软件包及版本信息\n",[79,118998,118999,119002,119005],{"class":81,"line":579},[79,119000,119001],{"class":85},"apt",[79,119003,119004],{"class":89}," list",[79,119006,119007],{"class":96}," --upgradable\n",[79,119009,119010],{"class":81,"line":585},[79,119011,119012],{"class":2313},"#彻底升级（处理依赖关系，可能删除旧包）\n",[79,119014,119015,119017,119019],{"class":81,"line":591},[79,119016,86],{"class":85},[79,119018,118950],{"class":89},[79,119020,119021],{"class":89}," full-upgrade\n",[79,119023,119024],{"class":81,"line":596},[79,119025,119026],{"class":2313},"#设置指定版本\n",[79,119028,119029,119031,119033,119035,119037,119040,119042,119044,119046,119048,119051,119053],{"class":81,"line":602},[79,119030,86],{"class":85},[79,119032,118950],{"class":89},[79,119034,93],{"class":89},[79,119036,30917],{"class":448},[79,119038,119039],{"class":89},"package_nam",[79,119041,2328],{"class":228},[79,119043,3199],{"class":448},[79,119045,239],{"class":89},[79,119047,229],{"class":448},[79,119049,119050],{"class":89},"version_numbe",[79,119052,2910],{"class":228},[79,119054,53301],{"class":448},[79,119056,119057],{"class":81,"line":608},[79,119058,119059],{"class":2313},"#只安装软件包不升级\n",[79,119061,119062,119064,119066,119068,119070,119072,119074,119076],{"class":81,"line":614},[79,119063,86],{"class":85},[79,119065,118950],{"class":89},[79,119067,93],{"class":89},[79,119069,30917],{"class":448},[79,119071,119039],{"class":89},[79,119073,2328],{"class":228},[79,119075,3199],{"class":448},[79,119077,119078],{"class":96}," --no-upgrade\n",[79,119080,119081],{"class":81,"line":619},[79,119082,119083],{"class":2313},"#只升级，不存在就不安装\n",[79,119085,119086,119088,119090,119092,119094,119096,119098,119100],{"class":81,"line":625},[79,119087,86],{"class":85},[79,119089,118950],{"class":89},[79,119091,93],{"class":89},[79,119093,30917],{"class":448},[79,119095,119039],{"class":89},[79,119097,2328],{"class":228},[79,119099,3199],{"class":448},[79,119101,119102],{"class":96}," --only-upgrade\n",[79,119104,119105],{"class":81,"line":631},[79,119106,542],{"emptyLinePlaceholder":541},[79,119108,119109],{"class":81,"line":637},[79,119110,119111],{"class":2313},"#安装指定的软件命令\n",[79,119113,119114,119116,119118,119120,119122,119124,119126],{"class":81,"line":643},[79,119115,86],{"class":85},[79,119117,118950],{"class":89},[79,119119,93],{"class":89},[79,119121,30917],{"class":448},[79,119123,119039],{"class":89},[79,119125,2328],{"class":228},[79,119127,53301],{"class":448},[79,119129,119130],{"class":81,"line":649},[79,119131,542],{"emptyLinePlaceholder":541},[79,119133,119134],{"class":81,"line":655},[79,119135,119136],{"class":2313},"#安装多个软件包\n",[79,119138,119139,119141,119143,119145,119147,119150,119153,119155,119157,119160,119162,119164],{"class":81,"line":660},[79,119140,86],{"class":85},[79,119142,118950],{"class":89},[79,119144,93],{"class":89},[79,119146,30917],{"class":448},[79,119148,119149],{"class":89},"package_",[79,119151,119152],{"class":448},"1>",[79,119154,30917],{"class":448},[79,119156,119149],{"class":89},[79,119158,119159],{"class":448},"2>",[79,119161,30917],{"class":448},[79,119163,119149],{"class":89},[79,119165,119166],{"class":448},"3>\n",[79,119168,119169],{"class":81,"line":666},[79,119170,542],{"emptyLinePlaceholder":541},[79,119172,119173],{"class":81,"line":672},[79,119174,119175],{"class":2313},"#更新指定的软件命令\n",[79,119177,119178,119180,119182,119184,119186,119188,119190],{"class":81,"line":678},[79,119179,86],{"class":85},[79,119181,118950],{"class":89},[79,119183,118980],{"class":89},[79,119185,30917],{"class":448},[79,119187,119039],{"class":89},[79,119189,2328],{"class":228},[79,119191,53301],{"class":448},[79,119193,119194],{"class":81,"line":684},[79,119195,542],{"emptyLinePlaceholder":541},[79,119197,119198],{"class":81,"line":690},[79,119199,119200],{"class":2313},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[79,119202,119203,119205,119208,119210,119212,119214],{"class":81,"line":695},[79,119204,119001],{"class":85},[79,119206,119207],{"class":89}," show",[79,119209,30917],{"class":448},[79,119211,119039],{"class":89},[79,119213,2328],{"class":228},[79,119215,53301],{"class":448},[79,119217,119218],{"class":81,"line":700},[79,119219,542],{"emptyLinePlaceholder":541},[79,119221,119222],{"class":81,"line":712},[79,119223,119224],{"class":2313},"#删除软件包命令\n",[79,119226,119227,119229,119231,119233,119235,119237,119239],{"class":81,"line":721},[79,119228,86],{"class":85},[79,119230,118950],{"class":89},[79,119232,28097],{"class":89},[79,119234,30917],{"class":448},[79,119236,119039],{"class":89},[79,119238,2328],{"class":228},[79,119240,53301],{"class":448},[79,119242,119243],{"class":81,"line":726},[79,119244,542],{"emptyLinePlaceholder":541},[79,119246,119247],{"class":81,"line":731},[79,119248,119249],{"class":2313},"# 清理旧版本和缓存（释放磁盘空间）\n",[79,119251,119252,119254,119256,119259],{"class":81,"line":748},[79,119253,86],{"class":85},[79,119255,118950],{"class":89},[79,119257,119258],{"class":89}," autoremove",[79,119260,119261],{"class":2313},"  # 删除不再需要的依赖和库文件\n",[79,119263,119264,119266,119268,119271],{"class":81,"line":765},[79,119265,86],{"class":85},[79,119267,118950],{"class":89},[79,119269,119270],{"class":89}," clean",[79,119272,119273],{"class":2313},"       # 清理下载的缓存包\n",[79,119275,119276],{"class":81,"line":780},[79,119277,542],{"emptyLinePlaceholder":541},[79,119279,119280],{"class":81,"line":811},[79,119281,119282],{"class":2313},"#移除软件包及配置文件\n",[79,119284,119285,119287,119289,119292,119294,119296,119298],{"class":81,"line":816},[79,119286,86],{"class":85},[79,119288,118950],{"class":89},[79,119290,119291],{"class":89}," purge",[79,119293,30917],{"class":448},[79,119295,119039],{"class":89},[79,119297,2328],{"class":228},[79,119299,53301],{"class":448},[79,119301,119302],{"class":81,"line":821},[79,119303,542],{"emptyLinePlaceholder":541},[79,119305,119306],{"class":81,"line":837},[79,119307,119308],{"class":2313},"#查找软件包命令\n",[79,119310,119311,119313,119315,119318,119320,119323,119325],{"class":81,"line":853},[79,119312,86],{"class":85},[79,119314,118950],{"class":89},[79,119316,119317],{"class":89}," search",[79,119319,30917],{"class":448},[79,119321,119322],{"class":89},"keywor",[79,119324,2558],{"class":228},[79,119326,53301],{"class":448},[79,119328,119329],{"class":81,"line":864},[79,119330,542],{"emptyLinePlaceholder":541},[79,119332,119333],{"class":81,"line":869},[79,119334,119335],{"class":2313},"#列出所有已安装的包\n",[79,119337,119338,119340,119342],{"class":81,"line":885},[79,119339,119001],{"class":85},[79,119341,119004],{"class":89},[79,119343,119344],{"class":96}," --installed\n",[79,119346,119347],{"class":81,"line":891},[79,119348,542],{"emptyLinePlaceholder":541},[79,119350,119351],{"class":81,"line":896},[79,119352,119353],{"class":2313},"#列出所有已安装的包的版本信息\n",[79,119355,119356,119358,119360],{"class":81,"line":907},[79,119357,119001],{"class":85},[79,119359,119004],{"class":89},[79,119361,119362],{"class":96}," --all-versions\n",[2159,119364,119365],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":57,"searchDepth":167,"depth":167,"links":119367},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":118912,"description":25402},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":119374,"title":119375,"body":119376,"description":25402,"extension":2186,"meta":120117,"navigation":541,"path":120118,"seo":120119,"stem":120120,"__hash__":120121},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":119377,"toc":120104},[119378,119381,119385,119388,119394,119398,119402,119408,119413,119418,119423,119428,119433,119436,119439,119442,119445,119449,119452,119457,119460,119465,119468,119473,119480,119483,119486,119489,119492,119495,119506,119510,119514,119519,119524,119528,119533,119537,119542,119546,119550,119555,119558,119603,119608,119612,119616,119621,119627,119632,119642,119647,119657,119662,119667,119694,119698,119701,119706,119709,119734,119738,119743,119746,119751,119756,119776,119781,119784,119799,119803,119856,119859,119864,119868,119871,119886,119889,119892,119897,119901,119905,119908,119912,119916,119919,119924,119929,119933,119940,119948,119951,119958,119963,119968,119971,119976,119983,119988,119995,119999,120001,120006,120010,120013,120016,120021,120024,120029,120032,120037,120042,120047,120051,120056,120060,120101],[10,119379,119375],{"id":119380},"_2-linux装机教程",[14,119382,119384],{"id":119383},"_21-实体机","2.1 实体机",[19,119386,119387],{},"使用清华源：（Ubuntu24.04）",[19,119389,119390],{},[2482,119391,119392],{"href":119392,"rel":119393},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[25885],[14,119395,119397],{"id":119396},"_22-普通虚拟机","2.2 普通虚拟机",[339,119399,119401],{"id":119400},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,119403,119404],{},[2482,119405,119406],{"href":119406,"rel":119407},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[25885],[19,119409,119410],{},[3569,119411],{"alt":57,"src":119412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,119414,119415],{},[3569,119416],{"alt":57,"src":119417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,119419,119420],{},[3569,119421],{"alt":57,"src":119422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,119424,119425],{},[3569,119426],{"alt":57,"src":119427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,119429,119430],{},[3569,119431],{"alt":57,"src":119432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,119434,119435],{},"内存4G（4096MB）；",[19,119437,119438],{},"CPU给4个核；",[19,119440,119441],{},"硬盘动态分配60G；",[19,119443,119444],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[339,119446,119448],{"id":119447},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,119450,119451],{},"按照1.1的步骤下载Ubuntu",[19,119453,119454],{},[3569,119455],{"alt":57,"src":119456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,119458,119459],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,119461,119462],{},[3569,119463],{"alt":57,"src":119464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,119466,119467],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,119469,119470],{},[3569,119471],{"alt":57,"src":119472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,119474,119475,119476,119479],{},"选择“正常安装”(找不到都用Alt+F7)， ",[2398,119477,119478],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,119481,119482],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,119484,119485],{},"将改动写入磁盘吗 继续",[19,119487,119488],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,119490,119491],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,119493,119494],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,119496,119497,119498,119501,119502,119505],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[2398,119499,119500],{},"除了"," 选不发送系统信息与不升级之外， ",[2398,119503,119504],{},"其它"," 都跳过或前进）",[339,119507,119509],{"id":119508},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[24023,119511,119513],{"id":119512},"_2231-全屏","2.2.3.1 全屏",[19,119515,119516],{},[3569,119517],{"alt":57,"src":119518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,119520,119521],{},[3569,119522],{"alt":57,"src":119523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[24023,119525,119527],{"id":119526},"_2232-文件交换","2.2.3.2 文件交换",[19,119529,119530],{},[3569,119531],{"alt":57,"src":119532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[24023,119534,119536],{"id":119535},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,119538,119539],{},[3569,119540],{"alt":57,"src":119541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,119543,119545],{"id":119544},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[339,119547,119549],{"id":119548},"_231-简介与优缺点","2.3.1 简介与优缺点",[26,119551,119552],{},[29,119553,119554],{},"什么情况下推荐？",[19,119556,119557],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[26,119559,119560],{"start":167},[29,119561,119562,119563],{},"优缺点：",[26,119564,119565,119595],{},[29,119566,119567,119568],{},"优点：",[26,119569,119570,119573,119580,119583,119586,119589,119592],{},[29,119571,119572],{},"WSL2是最好的Linux发行版;(bushi)",[29,119574,119575,119576,119579],{},"性能损耗极低。且比在Windows上跑深度性能 ",[2398,119577,119578],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[29,119581,119582],{},"非常方便调用USB设备，可以USB直通;",[29,119584,119585],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[29,119587,119588],{},"非常方便Win与WSL2互相传文件等协同操作;",[29,119590,119591],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[29,119593,119594],{},"非常方便使用Windows的VScode远程开发;",[29,119596,119597,119598],{},"缺点：",[26,119599,119600],{},[29,119601,119602],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,119604,119605],{},[3569,119606],{"alt":57,"src":119607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[339,119609,119611],{"id":119610},"_232-安装教程","2.3.2 安装教程",[24023,119613,119615],{"id":119614},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[26,119617,119618],{},[29,119619,119620],{},"方法一(图形界面)",[19,119622,119623,119624,26638],{},"用Win+R输入",[59,119625,119626],{},"appwiz.cpl",[19,119628,119629],{},[3569,119630],{"alt":57,"src":119631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,119633,119634,119635,119638,119639,28489],{},"点击OK进入 ",[2398,119636,119637],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[2398,119640,119641],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,119643,119644],{},[3569,119645],{"alt":57,"src":119646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,119648,119649,119650,1748,119653,119656],{},"选择 ",[2398,119651,119652],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[2398,119654,119655],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,119658,119659],{},[3569,119660],{"alt":57,"src":119661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[26,119663,119664],{"start":167},[29,119665,119666],{},"方法二(命令行)",[51,119668,119672],{"className":119669,"code":119670,"language":119671,"meta":57,"style":57},"language-PowerShell shiki shiki-themes github-light github-dark","# 开启 Linux 子系统\ndism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n# 开启虚拟机平台\ndism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n","PowerShell",[59,119673,119674,119679,119684,119689],{"__ignoreMap":57},[79,119675,119676],{"class":81,"line":82},[79,119677,119678],{},"# 开启 Linux 子系统\n",[79,119680,119681],{"class":81,"line":167},[79,119682,119683],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[79,119685,119686],{"class":81,"line":178},[79,119687,119688],{},"# 开启虚拟机平台\n",[79,119690,119691],{"class":81,"line":545},[79,119692,119693],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[24023,119695,119697],{"id":119696},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,119699,119700],{},"用管理员权限打开powershell",[19,119702,119703],{},[3569,119704],{"alt":57,"src":119705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,119707,119708],{},"升级WSL并设置默认版本为WSL2",[51,119710,119712],{"className":119669,"code":119711,"language":119671,"meta":57,"style":57},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[59,119713,119714,119719,119724,119729],{"__ignoreMap":57},[79,119715,119716],{"class":81,"line":82},[79,119717,119718],{},"# 更新 wsl\n",[79,119720,119721],{"class":81,"line":167},[79,119722,119723],{},"wsl --update\n",[79,119725,119726],{"class":81,"line":178},[79,119727,119728],{},"# 将 wsl 版本设置为 wsl2\n",[79,119730,119731],{"class":81,"line":545},[79,119732,119733],{},"wsl --set-default-version 2\n",[24023,119735,119737],{"id":119736},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[26,119739,119740],{},[29,119741,119742],{},"方式一(商店下载)",[19,119744,119745],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,119747,119748],{},[3569,119749],{"alt":57,"src":119750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[26,119752,119753],{"start":167},[29,119754,119755],{},"方式二(命令行安装)",[51,119757,119759],{"className":119669,"code":119758,"language":119671,"meta":57,"style":57},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[59,119760,119761,119766,119771],{"__ignoreMap":57},[79,119762,119763],{"class":81,"line":82},[79,119764,119765],{},"# 列出可安装的 Linux 版本\n",[79,119767,119768],{"class":81,"line":167},[79,119769,119770],{},"#（需要科学手段）\n",[79,119772,119773],{"class":81,"line":178},[79,119774,119775],{},"wsl --list --online\n",[19,119777,119778],{},[3569,119779],{"alt":57,"src":119780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,119782,119783],{},"选择对应发行版并安装",[51,119785,119787],{"className":119669,"code":119786,"language":119671,"meta":57,"style":57},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[59,119788,119789,119794],{"__ignoreMap":57},[79,119790,119791],{"class":81,"line":82},[79,119792,119793],{},"# Ubuntu安装完毕后需要重启系统\n",[79,119795,119796],{"class":81,"line":167},[79,119797,119798],{},"wsl --install -d Ubuntu-24.04\n",[24023,119800,119802],{"id":119801},"_2324-查看系统状态","2.3.2.4 查看系统状态",[51,119804,119806],{"className":119669,"code":119805,"language":119671,"meta":57,"style":57},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[59,119807,119808,119813,119818,119823,119828,119832,119836,119841,119846,119851],{"__ignoreMap":57},[79,119809,119810],{"class":81,"line":82},[79,119811,119812],{},"# 查看 wsl\n",[79,119814,119815],{"class":81,"line":167},[79,119816,119817],{},"wsl -l\n",[79,119819,119820],{"class":81,"line":178},[79,119821,119822],{},"# 查看 wsl 运行版本或模式\n",[79,119824,119825],{"class":81,"line":545},[79,119826,119827],{},"wsl -l -v\n",[79,119829,119830],{"class":81,"line":550},[79,119831,542],{"emptyLinePlaceholder":541},[79,119833,119834],{"class":81,"line":562},[79,119835,542],{"emptyLinePlaceholder":541},[79,119837,119838],{"class":81,"line":568},[79,119839,119840],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[79,119842,119843],{"class":81,"line":574},[79,119844,119845],{},"wsl --set-version \u003Cdistro> 2\n",[79,119847,119848],{"class":81,"line":579},[79,119849,119850],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[79,119852,119853],{"class":81,"line":585},[79,119854,119855],{},"wsl --unregister \u003Cdistro>\n",[19,119857,119858],{},"输出Version为2即正常",[19,119860,119861],{},[3569,119862],{"alt":57,"src":119863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[24023,119865,119867],{"id":119866},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,119869,119870],{},"直接在Powershell里输入wsl命令进入子系统",[51,119872,119874],{"className":119669,"code":119873,"language":119671,"meta":57,"style":57},"# 进入子系统\nwsl\n",[59,119875,119876,119881],{"__ignoreMap":57},[79,119877,119878],{"class":81,"line":82},[79,119879,119880],{},"# 进入子系统\n",[79,119882,119883],{"class":81,"line":167},[79,119884,119885],{},"wsl\n",[19,119887,119888],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,119890,119891],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,119893,119894],{},[3569,119895],{"alt":57,"src":119896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[339,119898,119900],{"id":119899},"_233-配置各种环境","2.3.3 配置各种环境",[24023,119902,119904],{"id":119903},"_2331-换源","2.3.3.1 换源",[19,119906,119907],{},"(同实体机LINUX，往下找教程)",[24023,119909,119911],{"id":119910},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[24935,119913,119915],{"id":119914},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,119917,119918],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,119920,119921],{},[3569,119922],{"alt":57,"src":119923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,119925,119926],{},[3569,119927],{"alt":57,"src":119928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[24935,119930,119932],{"id":119931},"_23322-cuda","2.3.3.2.2 CUDA",[19,119934,119935,119936],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[2482,119937,119938],{"href":119938,"rel":119939},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[25885],[19,119941,119942,119945],{},[3569,119943],{"alt":57,"src":119944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[3569,119946],{"alt":57,"src":119947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,119949,119950],{},"在下方的网站，选择合适的版本。",[19,119952,119953,119954],{},"WSL2 专属 CUDA 指南：",[2482,119955,119956],{"href":119956,"rel":119957},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[25885],[19,119959,119960],{},[2398,119961,119962],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,119964,119965],{},[3569,119966],{"alt":57,"src":119967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,119969,119970],{},"挨行敲一遍",[19,119972,119973],{},[3569,119974],{"alt":57,"src":119975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,119977,119978,119979,119982],{},"敲完后，输入",[59,119980,119981],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,119984,119985],{},[3569,119986],{"alt":57,"src":119987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,119989,119990,119991,119994],{},"（请详看下方教程的",[2398,119992,119993],{},"安装CUDA的配置环境来看","如何配置环境）",[24935,119996,119998],{"id":119997},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,120000,119907],{},[19,120002,120003],{},[3569,120004],{"alt":57,"src":120005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[24023,120007,120009],{"id":120008},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,120011,120012],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,120014,120015],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,120017,120018],{},[3569,120019],{"alt":57,"src":120020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,120022,120023],{},"连接WSL2",[19,120025,120026],{},[3569,120027],{"alt":57,"src":120028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,120030,120031],{},"远程开发成功。",[19,120033,120034],{},[3569,120035],{"alt":57,"src":120036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,120038,120039],{},[3569,120040],{"alt":57,"src":120041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,120043,120044],{},[3569,120045],{"alt":57,"src":120046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[24023,120048,120050],{"id":120049},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,120052,120053],{},[3569,120054],{"alt":57,"src":120055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[24023,120057,120059],{"id":120058},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[51,120061,120063],{"className":118929,"code":120062,"language":118931,"meta":57,"style":57},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[59,120064,120065,120073,120081,120092,120096],{"__ignoreMap":57},[79,120066,120067,120069,120071],{"class":81,"line":82},[79,120068,86],{"class":85},[79,120070,118950],{"class":89},[79,120072,28260],{"class":89},[79,120074,120075,120077,120079],{"class":81,"line":167},[79,120076,86],{"class":85},[79,120078,118950],{"class":89},[79,120080,118966],{"class":89},[79,120082,120083,120085,120087,120089],{"class":81,"line":178},[79,120084,86],{"class":85},[79,120086,118950],{"class":89},[79,120088,93],{"class":89},[79,120090,120091],{"class":89}," mesa-utils\n",[79,120093,120094],{"class":81,"line":545},[79,120095,542],{"emptyLinePlaceholder":541},[79,120097,120098],{"class":81,"line":550},[79,120099,120100],{"class":2313},"#然后重启wsl2即可\n",[2159,120102,120103],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":57,"searchDepth":167,"depth":167,"links":120105},[120106,120107,120112],{"id":119383,"depth":167,"text":119384},{"id":119396,"depth":167,"text":119397,"children":120108},[120109,120110,120111],{"id":119400,"depth":178,"text":119401},{"id":119447,"depth":178,"text":119448},{"id":119508,"depth":178,"text":119509},{"id":119544,"depth":167,"text":119545,"children":120113},[120114,120115,120116],{"id":119548,"depth":178,"text":119549},{"id":119610,"depth":178,"text":119611},{"id":119899,"depth":178,"text":119900},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":119375,"description":25402},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":120123,"title":120124,"body":120125,"description":25402,"extension":2186,"meta":123061,"navigation":541,"path":123062,"seo":123063,"stem":123064,"__hash__":123065},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":120126,"toc":123033},[120127,120130,120134,120140,120144,120150,120154,120342,120345,120350,120354,120358,120361,120364,120370,120375,120378,120381,120386,120419,120424,120428,120505,120508,120513,120517,120520,120559,120562,120571,120589,120594,120601,120718,120723,120726,120753,120758,120762,120771,120821,120828,120832,120835,120849,120856,120890,120895,120899,120922,120925,120930,120934,120937,120940,120943,120985,120989,120992,120995,121036,121040,121044,121047,121052,121057,121060,121083,121086,121094,121099,121102,121107,121112,121115,121120,121124,121129,121152,121157,121219,121227,121232,121237,121240,121245,121248,121253,121258,121276,121281,121287,121292,121306,121310,121313,121316,121319,121362,121365,121370,121471,121474,121479,121483,121487,121524,121528,121532,121536,121582,121586,121631,121635,121642,121650,121705,121708,121785,121788,121811,121815,121818,121823,121828,121836,121839,121844,121849,121854,121857,121862,121871,121874,121879,121882,121953,121958,121961,121966,121969,121974,121977,121982,121985,121990,121995,121998,122073,122076,122089,122094,122097,122111,122114,122143,122148,122177,122180,122185,122189,122194,122203,122206,122211,122214,122219,122222,122225,122230,122233,122238,122243,122246,122251,122254,122379,122384,122414,122417,122422,122427,122444,122447,122490,122493,122520,122525,122538,122681,122685,122690,122704,122707,122758,122761,122791,122794,122810,122815,122829,122832,122899,122904,122913,122918,122921,122933,122938,122945,122969,122972,122977,122980,122999,123004,123011,123023,123030],[10,120128,120124],{"id":120129},"_3-安装必备配置",[14,120131,120133],{"id":120132},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[51,120135,120138],{"className":120136,"code":120137,"language":56},[54],"  打开下方网站（注意，该Ubuntu仓库版本是X86、amd64的仓库，ARM的仓库并非该网站（99.9%的人的电脑是X86的，很多工控机是ARM的，但工控机也有X86的，请看[Vinci机器人队单片机教程](https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fdocx\u002FPRAodvrWvoXTrVxP1EDcMKM7nXb)中讲的了解一下，或者自行百度。）\n\n  下方这俩学校二选一。\n\n1.  清华大学开源软件镜像站：https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\n\n2.  中国科学技术大学镜像站：https:\u002F\u002Fmirrors.ustc.edu.cn\n\n  可以测速，选择出速度最快的源。\n\n```Bash\ncurl https:\u002F\u002Fmirrors.cernet.edu.cn\u002Foh-my-mirrorz.py | python3\n```\n\n  在北方（山东）测速如下：\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-036.png)\n\n  在南方（广东）测速如下：\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-037.png)\n\n  在南北都比较快的是`北京外国语大学BFSU`和`南方科技大学SUSTech`，不想测速可以无脑选，也可以测速选择最好的源。\n\n  \n",[59,120139,120137],{"__ignoreMap":57},[339,120141,120143],{"id":120142},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[51,120145,120148],{"className":120146,"code":120147,"language":56},[54],"  输入以下命令\n\n```Bash\nsudo apt update\nsudo apt install vim\nsudo vim \u002Fetc\u002Fapt\u002Fsources.list\n```\n\n  在以下界面，用键盘按ggdG（注意区分大小写）\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-038.png)\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-039.png)\n\n  选择好Ubuntu版本后，\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-040.png)\n\n  粘贴进去\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-041.png)\n\n  按一下ESC，然后英文冒号，输入 `:wq!`然后回车\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-042.png)\n\n  输入以下命令\n\n```Bash\nsudo apt update\n```\n\n  下方出现对应学校源网站则成功\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-043.png)\n\n  至此换源结束\n",[59,120149,120147],{"__ignoreMap":57},[339,120151,120153],{"id":120152},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[51,120155,120159],{"className":120156,"code":120157,"language":120158,"meta":57,"style":57},"language-Shell shiki shiki-themes github-light github-dark","sudo apt update\nsudo apt install vim\nsudo rm -rf \u002Fetc\u002Fapt\u002Fsources.list\nsudo rm -rf \u002Fetc\u002Fapt\u002Fsources.list.d\u002F**\n\nsudo vim \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n```\n\n\n选择好Ubuntu版本后，复制下方的内容。\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png)\n\n粘贴进去\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png)\n\n按一下ESC，然后英文冒号，输入 `:wq!`然后回车\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png)\n\n输入以下命令\n\n```Bash\nsudo apt update\n","Shell",[59,120160,120161,120169,120180,120192,120206,120210,120220,120225,120229,120233,120238,120242,120254,120258,120263,120267,120278,120282,120298,120302,120313,120317,120322,120326,120334],{"__ignoreMap":57},[79,120162,120163,120165,120167],{"class":81,"line":82},[79,120164,86],{"class":85},[79,120166,118950],{"class":89},[79,120168,28260],{"class":89},[79,120170,120171,120173,120175,120177],{"class":81,"line":167},[79,120172,86],{"class":85},[79,120174,118950],{"class":89},[79,120176,93],{"class":89},[79,120178,120179],{"class":89}," vim\n",[79,120181,120182,120184,120187,120189],{"class":81,"line":178},[79,120183,86],{"class":85},[79,120185,120186],{"class":89}," rm",[79,120188,27344],{"class":96},[79,120190,120191],{"class":89}," \u002Fetc\u002Fapt\u002Fsources.list\n",[79,120193,120194,120196,120198,120200,120203],{"class":81,"line":545},[79,120195,86],{"class":85},[79,120197,120186],{"class":89},[79,120199,27344],{"class":96},[79,120201,120202],{"class":89}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[79,120204,120205],{"class":96},"**\n",[79,120207,120208],{"class":81,"line":550},[79,120209,542],{"emptyLinePlaceholder":541},[79,120211,120212,120214,120217],{"class":81,"line":562},[79,120213,86],{"class":85},[79,120215,120216],{"class":89}," vim",[79,120218,120219],{"class":89}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[79,120221,120222],{"class":81,"line":568},[79,120223,120224],{"class":89},"```\n",[79,120226,120227],{"class":81,"line":574},[79,120228,542],{"emptyLinePlaceholder":541},[79,120230,120231],{"class":81,"line":579},[79,120232,542],{"emptyLinePlaceholder":541},[79,120234,120235],{"class":81,"line":585},[79,120236,120237],{"class":85},"选择好Ubuntu版本后，复制下方的内容。\n",[79,120239,120240],{"class":81,"line":591},[79,120241,542],{"emptyLinePlaceholder":541},[79,120243,120244,120246,120249,120252],{"class":81,"line":596},[79,120245,2470],{"class":448},[79,120247,120248],{"class":89},"[](",[79,120250,120251],{"class":85},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[79,120253,850],{"class":89},[79,120255,120256],{"class":81,"line":602},[79,120257,542],{"emptyLinePlaceholder":541},[79,120259,120260],{"class":81,"line":608},[79,120261,120262],{"class":85},"粘贴进去\n",[79,120264,120265],{"class":81,"line":614},[79,120266,542],{"emptyLinePlaceholder":541},[79,120268,120269,120271,120273,120276],{"class":81,"line":619},[79,120270,2470],{"class":448},[79,120272,120248],{"class":89},[79,120274,120275],{"class":85},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[79,120277,850],{"class":89},[79,120279,120280],{"class":81,"line":625},[79,120281,542],{"emptyLinePlaceholder":541},[79,120283,120284,120287,120290,120293,120295],{"class":81,"line":631},[79,120285,120286],{"class":85},"按一下ESC，然后英文冒号，输入",[79,120288,120289],{"class":89}," `",[79,120291,120292],{"class":85},":wq!",[79,120294,3211],{"class":89},[79,120296,120297],{"class":85},"然后回车\n",[79,120299,120300],{"class":81,"line":637},[79,120301,542],{"emptyLinePlaceholder":541},[79,120303,120304,120306,120308,120311],{"class":81,"line":643},[79,120305,2470],{"class":448},[79,120307,120248],{"class":89},[79,120309,120310],{"class":85},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[79,120312,850],{"class":89},[79,120314,120315],{"class":81,"line":649},[79,120316,542],{"emptyLinePlaceholder":541},[79,120318,120319],{"class":81,"line":655},[79,120320,120321],{"class":85},"输入以下命令\n",[79,120323,120324],{"class":81,"line":660},[79,120325,542],{"emptyLinePlaceholder":541},[79,120327,120328,120331],{"class":81,"line":666},[79,120329,120330],{"class":89},"```",[79,120332,120333],{"class":85},"Bash\n",[79,120335,120336,120338,120340],{"class":81,"line":672},[79,120337,86],{"class":85},[79,120339,118950],{"class":89},[79,120341,28260],{"class":89},[19,120343,120344],{},"这里被替换成对应学校则成功",[19,120346,120347],{},[3569,120348],{"alt":57,"src":120349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,120351,120353],{"id":120352},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[339,120355,120357],{"id":120356},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,120359,120360],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,120362,120363],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,120365,120366],{},[2482,120367,120368],{"href":120368,"rel":120369},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[25885],[19,120371,120372],{},[3569,120373],{"alt":57,"src":120374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,120376,120377],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,120379,120380],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,120382,120383],{},[3569,120384],{"alt":57,"src":120385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[51,120387,120389],{"className":118929,"code":120388,"language":118931,"meta":57,"style":57},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[59,120390,120391,120396,120403,120408],{"__ignoreMap":57},[79,120392,120393],{"class":81,"line":82},[79,120394,120395],{"class":2313},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[79,120397,120398,120400],{"class":81,"line":167},[79,120399,103239],{"class":96},[79,120401,120402],{"class":89}," ~\u002FDownloads\n",[79,120404,120405],{"class":81,"line":178},[79,120406,120407],{"class":2313},"#下方chrome安装包名不一定是这个，根据名字来看\n",[79,120409,120410,120412,120414,120416],{"class":81,"line":545},[79,120411,86],{"class":85},[79,120413,118950],{"class":89},[79,120415,93],{"class":89},[79,120417,120418],{"class":89}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,120420,120421],{},[3569,120422],{"alt":57,"src":120423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[339,120425,120427],{"id":120426},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[51,120429,120431],{"className":118929,"code":120430,"language":118931,"meta":57,"style":57},"# 老版\nsudo apt update\nsudo apt install neofetch\nneofetch\n\n# 新版\nsudo add-apt-repository ppa:zhangsongcui3371\u002Ffastfetch\nsudo apt update\nsudo apt install fastfetch\nfastfetch\n",[59,120432,120433,120438,120446,120457,120462,120466,120471,120481,120489,120500],{"__ignoreMap":57},[79,120434,120435],{"class":81,"line":82},[79,120436,120437],{"class":2313},"# 老版\n",[79,120439,120440,120442,120444],{"class":81,"line":167},[79,120441,86],{"class":85},[79,120443,118950],{"class":89},[79,120445,28260],{"class":89},[79,120447,120448,120450,120452,120454],{"class":81,"line":178},[79,120449,86],{"class":85},[79,120451,118950],{"class":89},[79,120453,93],{"class":89},[79,120455,120456],{"class":89}," neofetch\n",[79,120458,120459],{"class":81,"line":545},[79,120460,120461],{"class":85},"neofetch\n",[79,120463,120464],{"class":81,"line":550},[79,120465,542],{"emptyLinePlaceholder":541},[79,120467,120468],{"class":81,"line":562},[79,120469,120470],{"class":2313},"# 新版\n",[79,120472,120473,120475,120478],{"class":81,"line":568},[79,120474,86],{"class":85},[79,120476,120477],{"class":89}," add-apt-repository",[79,120479,120480],{"class":89}," ppa:zhangsongcui3371\u002Ffastfetch\n",[79,120482,120483,120485,120487],{"class":81,"line":574},[79,120484,86],{"class":85},[79,120486,118950],{"class":89},[79,120488,28260],{"class":89},[79,120490,120491,120493,120495,120497],{"class":81,"line":579},[79,120492,86],{"class":85},[79,120494,118950],{"class":89},[79,120496,93],{"class":89},[79,120498,120499],{"class":89}," fastfetch\n",[79,120501,120502],{"class":81,"line":585},[79,120503,120504],{"class":85},"fastfetch\n",[19,120506,120507],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,120509,120510],{},[3569,120511],{"alt":57,"src":120512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[339,120514,120516],{"id":120515},"_323-移除snap应用","3.2.3 移除snap应用",[19,120518,120519],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[51,120521,120523],{"className":118929,"code":120522,"language":118931,"meta":57,"style":57},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[59,120524,120525,120537,120548],{"__ignoreMap":57},[79,120526,120527,120529,120531,120534],{"class":81,"line":82},[79,120528,86],{"class":85},[79,120530,28529],{"class":89},[79,120532,120533],{"class":89}," disable",[79,120535,120536],{"class":89}," snapd.service\n",[79,120538,120539,120541,120543,120545],{"class":81,"line":167},[79,120540,86],{"class":85},[79,120542,28529],{"class":89},[79,120544,120533],{"class":89},[79,120546,120547],{"class":89}," snapd.socket\n",[79,120549,120550,120552,120554,120556],{"class":81,"line":178},[79,120551,86],{"class":85},[79,120553,28529],{"class":89},[79,120555,120533],{"class":89},[79,120557,120558],{"class":89}," snapd.seeded.service\n",[19,120560,120561],{},"然后查看snap应用列表",[19,120563,120564,120565,120570],{},"根据你安装的选择不同（最小安装或普通安装），有",[2482,120566,120569],{"href":120567,"rel":120568},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[25885],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[51,120572,120574],{"className":118929,"code":120573,"language":118931,"meta":57,"style":57},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[59,120575,120576,120581],{"__ignoreMap":57},[79,120577,120578],{"class":81,"line":82},[79,120579,120580],{"class":2313},"# 查询当前系统上snap安装了哪些app\n",[79,120582,120583,120586],{"class":81,"line":167},[79,120584,120585],{"class":85},"snap",[79,120587,120588],{"class":89}," list\n",[19,120590,120591],{},[3569,120592],{"alt":57,"src":120593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,120595,120596,120597,120600],{},"卸载掉图中所有应用，按照 ",[2398,120598,120599],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[51,120602,120604],{"className":118929,"code":120603,"language":118931,"meta":57,"style":57},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\nsudo snap remove snap-store\n#移除firefox浏览器\nsudo snap remove firefox\n#移除gnome-42-2204\nsudo snap remove gnome-42-2204\n#移除gtk-common-themes\nsudo snap remove gtk-common-themes\n#移除其它...\n \n#移除core22,bare以及snapd\nsudo snap remove core22\nsudo snap remove bare\nsudo snap remove snapd\n",[59,120605,120606,120611,120623,120628,120639,120644,120655,120660,120671,120676,120680,120685,120696,120707],{"__ignoreMap":57},[79,120607,120608],{"class":81,"line":82},[79,120609,120610],{"class":2313},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[79,120612,120613,120615,120618,120620],{"class":81,"line":167},[79,120614,86],{"class":85},[79,120616,120617],{"class":89}," snap",[79,120619,28097],{"class":89},[79,120621,120622],{"class":89}," snap-store\n",[79,120624,120625],{"class":81,"line":178},[79,120626,120627],{"class":2313},"#移除firefox浏览器\n",[79,120629,120630,120632,120634,120636],{"class":81,"line":545},[79,120631,86],{"class":85},[79,120633,120617],{"class":89},[79,120635,28097],{"class":89},[79,120637,120638],{"class":89}," firefox\n",[79,120640,120641],{"class":81,"line":550},[79,120642,120643],{"class":2313},"#移除gnome-42-2204\n",[79,120645,120646,120648,120650,120652],{"class":81,"line":562},[79,120647,86],{"class":85},[79,120649,120617],{"class":89},[79,120651,28097],{"class":89},[79,120653,120654],{"class":89}," gnome-42-2204\n",[79,120656,120657],{"class":81,"line":568},[79,120658,120659],{"class":2313},"#移除gtk-common-themes\n",[79,120661,120662,120664,120666,120668],{"class":81,"line":574},[79,120663,86],{"class":85},[79,120665,120617],{"class":89},[79,120667,28097],{"class":89},[79,120669,120670],{"class":89}," gtk-common-themes\n",[79,120672,120673],{"class":81,"line":579},[79,120674,120675],{"class":2313},"#移除其它...\n",[79,120677,120678],{"class":81,"line":585},[79,120679,4750],{"class":228},[79,120681,120682],{"class":81,"line":591},[79,120683,120684],{"class":2313},"#移除core22,bare以及snapd\n",[79,120686,120687,120689,120691,120693],{"class":81,"line":596},[79,120688,86],{"class":85},[79,120690,120617],{"class":89},[79,120692,28097],{"class":89},[79,120694,120695],{"class":89}," core22\n",[79,120697,120698,120700,120702,120704],{"class":81,"line":602},[79,120699,86],{"class":85},[79,120701,120617],{"class":89},[79,120703,28097],{"class":89},[79,120705,120706],{"class":89}," bare\n",[79,120708,120709,120711,120713,120715],{"class":81,"line":608},[79,120710,86],{"class":85},[79,120712,120617],{"class":89},[79,120714,28097],{"class":89},[79,120716,120717],{"class":89}," snapd\n",[19,120719,120720],{},[3569,120721],{"alt":57,"src":120722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,120724,120725],{},"输入以下命令查看是否还有snap包",[51,120727,120729],{"className":118929,"code":120728,"language":118931,"meta":57,"style":57},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[59,120730,120731,120737,120741,120745,120749],{"__ignoreMap":57},[79,120732,120733,120735],{"class":81,"line":82},[79,120734,120585],{"class":85},[79,120736,120588],{"class":89},[79,120738,120739],{"class":81,"line":167},[79,120740,120437],{"class":2313},[79,120742,120743],{"class":81,"line":178},[79,120744,120461],{"class":85},[79,120746,120747],{"class":81,"line":545},[79,120748,120470],{"class":2313},[79,120750,120751],{"class":81,"line":550},[79,120752,120504],{"class":85},[19,120754,120755],{},[3569,120756],{"alt":57,"src":120757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[339,120759,120761],{"id":120760},"_324-移除snap","3.2.4 移除snap",[19,120763,120764,120765,120770],{},"在删除掉",[2482,120766,120769],{"href":120767,"rel":120768},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[25885],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[51,120772,120774],{"className":118929,"code":120773,"language":118931,"meta":57,"style":57}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[59,120775,120776,120781,120794,120799,120810],{"__ignoreMap":57},[79,120777,120778],{"class":81,"line":82},[79,120779,120780],{"class":2313}," #使用apt移除掉snap\n",[79,120782,120783,120785,120787,120789,120792],{"class":81,"line":167},[79,120784,86],{"class":85},[79,120786,118950],{"class":89},[79,120788,119258],{"class":89},[79,120790,120791],{"class":96}," --purge",[79,120793,120717],{"class":89},[79,120795,120796],{"class":81,"line":178},[79,120797,120798],{"class":2313},"#移除snapd的一些目录\n",[79,120800,120801,120803,120805,120807],{"class":81,"line":545},[79,120802,86],{"class":85},[79,120804,120186],{"class":89},[79,120806,27344],{"class":96},[79,120808,120809],{"class":89}," \u002Fvar\u002Fcache\u002Fsnapd\n",[79,120811,120812,120814,120816,120818],{"class":81,"line":550},[79,120813,86],{"class":85},[79,120815,120186],{"class":89},[79,120817,27344],{"class":96},[79,120819,120820],{"class":89}," ~\u002Fsnap\n",[19,120822,120823,120824,120827],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[59,120825,120826],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[339,120829,120831],{"id":120830},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,120833,120834],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[51,120836,120838],{"className":118929,"code":120837,"language":118931,"meta":57,"style":57},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[59,120839,120840],{"__ignoreMap":57},[79,120841,120842,120844,120846],{"class":81,"line":82},[79,120843,86],{"class":85},[79,120845,120216],{"class":89},[79,120847,120848],{"class":89}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,120850,120851,120852,120855],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[59,120853,120854],{},":wq"," 回车",[51,120857,120859],{"className":118929,"code":120858,"language":118931,"meta":57,"style":57},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[59,120860,120861,120868,120882],{"__ignoreMap":57},[79,120862,120863,120866],{"class":81,"line":82},[79,120864,120865],{"class":85},"Package:",[79,120867,120717],{"class":89},[79,120869,120870,120873,120876,120879],{"class":81,"line":167},[79,120871,120872],{"class":85},"Pin:",[79,120874,120875],{"class":89}," release",[79,120877,120878],{"class":89}," a=",[79,120880,120881],{"class":96},"*\n",[79,120883,120884,120887],{"class":81,"line":178},[79,120885,120886],{"class":85},"Pin-Priority:",[79,120888,120889],{"class":96}," -10\n",[19,120891,120892],{},[3569,120893],{"alt":57,"src":120894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[339,120896,120898],{"id":120897},"_326-测试是否成功","3.2.6 测试是否成功",[51,120900,120902],{"className":118929,"code":120901,"language":118931,"meta":57,"style":57},"sudo apt update\nsudo apt install firefox\n",[59,120903,120904,120912],{"__ignoreMap":57},[79,120905,120906,120908,120910],{"class":81,"line":82},[79,120907,86],{"class":85},[79,120909,118950],{"class":89},[79,120911,28260],{"class":89},[79,120913,120914,120916,120918,120920],{"class":81,"line":167},[79,120915,86],{"class":85},[79,120917,118950],{"class":89},[79,120919,93],{"class":89},[79,120921,120638],{"class":89},[19,120923,120924],{},"这里提示snapd无法被安装，就证明成功了",[19,120926,120927],{},[3569,120928],{"alt":57,"src":120929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[339,120931,120933],{"id":120932},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,120935,120936],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,120938,120939],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,120941,120942],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[51,120944,120946],{"className":118929,"code":120945,"language":118931,"meta":57,"style":57},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[59,120947,120948,120953,120962,120967,120975],{"__ignoreMap":57},[79,120949,120950],{"class":81,"line":82},[79,120951,120952],{"class":2313},"# 添加Mozilla提供的源\n",[79,120954,120955,120957,120959],{"class":81,"line":167},[79,120956,86],{"class":85},[79,120958,120477],{"class":89},[79,120960,120961],{"class":89}," ppa:mozillateam\u002Fppa\n",[79,120963,120964],{"class":81,"line":178},[79,120965,120966],{"class":2313},"# 安装Firefox\n",[79,120968,120969,120971,120973],{"class":81,"line":545},[79,120970,86],{"class":85},[79,120972,118950],{"class":89},[79,120974,28260],{"class":89},[79,120976,120977,120979,120981,120983],{"class":81,"line":550},[79,120978,86],{"class":85},[79,120980,118950],{"class":89},[79,120982,93],{"class":89},[79,120984,120638],{"class":89},[339,120986,120988],{"id":120987},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,120990,120991],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,120993,120994],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[51,120996,120998],{"className":118929,"code":120997,"language":118931,"meta":57,"style":57},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[59,120999,121000,121005,121015,121023,121027],{"__ignoreMap":57},[79,121001,121002],{"class":81,"line":82},[79,121003,121004],{"class":2313},"#删掉禁止安装snap的配置文件\n",[79,121006,121007,121009,121011,121013],{"class":81,"line":167},[79,121008,86],{"class":85},[79,121010,120186],{"class":89},[79,121012,27344],{"class":96},[79,121014,120848],{"class":89},[79,121016,121017,121019,121021],{"class":81,"line":178},[79,121018,86],{"class":85},[79,121020,118950],{"class":89},[79,121022,28260],{"class":89},[79,121024,121025],{"class":81,"line":545},[79,121026,542],{"emptyLinePlaceholder":541},[79,121028,121029,121031,121033],{"class":81,"line":550},[79,121030,86],{"class":85},[79,121032,118950],{"class":89},[79,121034,121035],{"class":89}," dist-update\n",[14,121037,121039],{"id":121038},"_33-中文输入法","3.3 中文输入法",[339,121041,121043],{"id":121042},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,121045,121046],{},"官网下载搜狗输入法",[19,121048,121049],{},[3569,121050],{"alt":57,"src":121051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,121053,121054],{},[3569,121055],{"alt":57,"src":121056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,121058,121059],{},"打开终端输入如下",[51,121061,121063],{"className":118929,"code":121062,"language":118931,"meta":57,"style":57},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[59,121064,121065,121072],{"__ignoreMap":57},[79,121066,121067,121069],{"class":81,"line":82},[79,121068,103239],{"class":96},[79,121070,121071],{"class":89}," ~\u002FDownloads\u002F\n",[79,121073,121074,121076,121078,121080],{"class":81,"line":167},[79,121075,86],{"class":85},[79,121077,118950],{"class":89},[79,121079,93],{"class":89},[79,121081,121082],{"class":89}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,121084,121085],{},"打开Fcitx",[19,121087,121088,121091],{},[3569,121089],{"alt":57,"src":121090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[3569,121092],{"alt":57,"src":121093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,121095,121096],{},[3569,121097],{"alt":57,"src":121098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,121100,121101],{},"添加搜狗输入法",[19,121103,121104],{},[3569,121105],{"alt":57,"src":121106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,121108,121109],{},[3569,121110],{"alt":57,"src":121111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,121113,121114],{},"将搜狗输入法设置为唯一输入法",[19,121116,121117],{},[3569,121118],{"alt":57,"src":121119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[339,121121,121123],{"id":121122},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[26,121125,121126],{},[29,121127,121128],{},"卸载旧输入法",[51,121130,121132],{"className":120156,"code":121131,"language":120158,"meta":57,"style":57},"sudo apt purge fcitx* ibus*\n",[59,121133,121134],{"__ignoreMap":57},[79,121135,121136,121138,121140,121142,121145,121147,121150],{"class":81,"line":82},[79,121137,86],{"class":85},[79,121139,118950],{"class":89},[79,121141,119291],{"class":89},[79,121143,121144],{"class":89}," fcitx",[79,121146,473],{"class":96},[79,121148,121149],{"class":89}," ibus",[79,121151,120881],{"class":96},[26,121153,121154],{"start":167},[29,121155,121156],{},"安装Fcitx5",[51,121158,121160],{"className":118929,"code":121159,"language":118931,"meta":57,"style":57},"# Ubuntu22.04及以上、Debian12及以上\nsudo apt install fcitx5 fcitx5-chinese-addons\n\n# Ubuntu20.04\nsudo add-apt-repository ppa:zhsj\u002Ffcitx5\nsudo apt update\nsudo apt install fcitx5 fcitx5-chinese-addons\n",[59,121161,121162,121167,121181,121185,121190,121199,121207],{"__ignoreMap":57},[79,121163,121164],{"class":81,"line":82},[79,121165,121166],{"class":2313},"# Ubuntu22.04及以上、Debian12及以上\n",[79,121168,121169,121171,121173,121175,121178],{"class":81,"line":167},[79,121170,86],{"class":85},[79,121172,118950],{"class":89},[79,121174,93],{"class":89},[79,121176,121177],{"class":89}," fcitx5",[79,121179,121180],{"class":89}," fcitx5-chinese-addons\n",[79,121182,121183],{"class":81,"line":178},[79,121184,542],{"emptyLinePlaceholder":541},[79,121186,121187],{"class":81,"line":545},[79,121188,121189],{"class":2313},"# Ubuntu20.04\n",[79,121191,121192,121194,121196],{"class":81,"line":550},[79,121193,86],{"class":85},[79,121195,120477],{"class":89},[79,121197,121198],{"class":89}," ppa:zhsj\u002Ffcitx5\n",[79,121200,121201,121203,121205],{"class":81,"line":562},[79,121202,86],{"class":85},[79,121204,118950],{"class":89},[79,121206,28260],{"class":89},[79,121208,121209,121211,121213,121215,121217],{"class":81,"line":568},[79,121210,86],{"class":85},[79,121212,118950],{"class":89},[79,121214,93],{"class":89},[79,121216,121177],{"class":89},[79,121218,121180],{"class":89},[26,121220,121221,121224],{"start":178},[29,121222,121223],{},"Reboot System",[29,121225,121226],{},"启动Fcitx5",[19,121228,121229],{},[3569,121230],{"alt":57,"src":121231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[26,121233,121234],{"start":550},[29,121235,121236],{},"修改一些设置",[19,121238,121239],{},"将Pinyin和Keyboard - English US加入到左边。",[19,121241,121242],{},[3569,121243],{"alt":57,"src":121244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,121246,121247],{},"添加快捷键以便于更好切换中英文",[19,121249,121250],{},[3569,121251],{"alt":57,"src":121252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[26,121254,121255],{"start":562},[29,121256,121257],{},"重启",[51,121259,121261],{"className":120156,"code":121260,"language":120158,"meta":57,"style":57},"sudo shutdown -r now\n",[59,121262,121263],{"__ignoreMap":57},[79,121264,121265,121267,121270,121273],{"class":81,"line":82},[79,121266,86],{"class":85},[79,121268,121269],{"class":89}," shutdown",[79,121271,121272],{"class":96}," -r",[79,121274,121275],{"class":89}," now\n",[26,121277,121278],{"start":568},[29,121279,121280],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,121282,121283],{},[2482,121284,121285],{"href":121285,"rel":121286},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[25885],[26,121288,121289],{"start":574},[29,121290,121291],{},"再重启",[51,121293,121294],{"className":120156,"code":121260,"language":120158,"meta":57,"style":57},[59,121295,121296],{"__ignoreMap":57},[79,121297,121298,121300,121302,121304],{"class":81,"line":82},[79,121299,86],{"class":85},[79,121301,121269],{"class":89},[79,121303,121272],{"class":96},[79,121305,121275],{"class":89},[14,121307,121309],{"id":121308},"_34-pip3源替换","3.4 pip3源替换",[19,121311,121312],{},"非Debian系发行版需要做。",[19,121314,121315],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,121317,121318],{},"使用dnf的系统也可能不用做。",[51,121320,121322],{"className":118929,"code":121321,"language":118931,"meta":57,"style":57},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[59,121323,121324,121329,121336,121341,121346],{"__ignoreMap":57},[79,121325,121326],{"class":81,"line":82},[79,121327,121328],{"class":2313},"# 检查是否已安装 pip\n",[79,121330,121331,121334],{"class":81,"line":167},[79,121332,121333],{"class":85},"pip3",[79,121335,28311],{"class":96},[79,121337,121338],{"class":81,"line":178},[79,121339,121340],{"class":2313},"# 如果未安装，先安装 pip3（见下方）\n",[79,121342,121343],{"class":81,"line":545},[79,121344,121345],{"class":2313},"# 配置 pip 使用清华源\n",[79,121347,121348,121350,121353,121356,121359],{"class":81,"line":550},[79,121349,121333],{"class":85},[79,121351,121352],{"class":89}," config",[79,121354,121355],{"class":89}," set",[79,121357,121358],{"class":89}," global.index-url",[79,121360,121361],{"class":89}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,121363,121364],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,121366,121367],{},[3569,121368],{"alt":57,"src":121369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[51,121371,121373],{"className":118929,"code":121372,"language":118931,"meta":57,"style":57},"#安装pip3\nsudo apt update\nsudo apt-get install python3-pip\n\n#更新pip3\npython3 -m pip install -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple --upgrade pip\n\n#设置pip源为清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n\n#测试\npython3 -m pip install --upgrade pip\n",[59,121374,121375,121380,121388,121399,121403,121408,121427,121431,121436,121448,121452,121457],{"__ignoreMap":57},[79,121376,121377],{"class":81,"line":82},[79,121378,121379],{"class":2313},"#安装pip3\n",[79,121381,121382,121384,121386],{"class":81,"line":167},[79,121383,86],{"class":85},[79,121385,118950],{"class":89},[79,121387,28260],{"class":89},[79,121389,121390,121392,121394,121396],{"class":81,"line":178},[79,121391,86],{"class":85},[79,121393,28094],{"class":89},[79,121395,93],{"class":89},[79,121397,121398],{"class":89}," python3-pip\n",[79,121400,121401],{"class":81,"line":545},[79,121402,542],{"emptyLinePlaceholder":541},[79,121404,121405],{"class":81,"line":550},[79,121406,121407],{"class":2313},"#更新pip3\n",[79,121409,121410,121412,121414,121416,121418,121420,121423,121425],{"class":81,"line":562},[79,121411,102857],{"class":85},[79,121413,102860],{"class":96},[79,121415,102883],{"class":89},[79,121417,93],{"class":89},[79,121419,28446],{"class":96},[79,121421,121422],{"class":89}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[79,121424,102888],{"class":96},[79,121426,102891],{"class":89},[79,121428,121429],{"class":81,"line":568},[79,121430,542],{"emptyLinePlaceholder":541},[79,121432,121433],{"class":81,"line":574},[79,121434,121435],{"class":2313},"#设置pip源为清华源\n",[79,121437,121438,121440,121442,121444,121446],{"class":81,"line":579},[79,121439,121333],{"class":85},[79,121441,121352],{"class":89},[79,121443,121355],{"class":89},[79,121445,121358],{"class":89},[79,121447,121361],{"class":89},[79,121449,121450],{"class":81,"line":585},[79,121451,542],{"emptyLinePlaceholder":541},[79,121453,121454],{"class":81,"line":591},[79,121455,121456],{"class":2313},"#测试\n",[79,121458,121459,121461,121463,121465,121467,121469],{"class":81,"line":596},[79,121460,102857],{"class":85},[79,121462,102860],{"class":96},[79,121464,102883],{"class":89},[79,121466,93],{"class":89},[79,121468,102888],{"class":96},[79,121470,102891],{"class":89},[19,121472,121473],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,121475,121476],{},[3569,121477],{"alt":57,"src":121478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,121480,121482],{"id":121481},"_35-显卡驱动安装","3.5 显卡驱动安装",[339,121484,121486],{"id":121485},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[51,121488,121490],{"className":120156,"code":121489,"language":120158,"meta":57,"style":57},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[59,121491,121492,121497,121512,121517],{"__ignoreMap":57},[79,121493,121494],{"class":81,"line":82},[79,121495,121496],{"class":2313},"# 如果是使用apt安装的驱动\n",[79,121498,121499,121501,121503,121505,121507,121510],{"class":81,"line":167},[79,121500,86],{"class":85},[79,121502,28094],{"class":89},[79,121504,28097],{"class":89},[79,121506,120791],{"class":96},[79,121508,121509],{"class":89}," nvidia",[79,121511,120881],{"class":96},[79,121513,121514],{"class":81,"line":178},[79,121515,121516],{"class":2313},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[79,121518,121519,121521],{"class":81,"line":545},[79,121520,86],{"class":85},[79,121522,121523],{"class":89}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[339,121525,121527],{"id":121526},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[24023,121529,121531],{"id":121530},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[24935,121533,121535],{"id":121534},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[51,121537,121539],{"className":120156,"code":121538,"language":120158,"meta":57,"style":57},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[59,121540,121541,121546,121557,121562,121572,121577],{"__ignoreMap":57},[79,121542,121543],{"class":81,"line":82},[79,121544,121545],{"class":2313},"# 安装英伟达驱动\n",[79,121547,121548,121550,121552,121554],{"class":81,"line":167},[79,121549,86],{"class":85},[79,121551,118950],{"class":89},[79,121553,93],{"class":89},[79,121555,121556],{"class":89}," nvidia-driver-版本号\n",[79,121558,121559],{"class":81,"line":178},[79,121560,121561],{"class":2313},"# 重启 \n",[79,121563,121564,121566,121568,121570],{"class":81,"line":545},[79,121565,86],{"class":85},[79,121567,121269],{"class":89},[79,121569,121272],{"class":96},[79,121571,121275],{"class":89},[79,121573,121574],{"class":81,"line":550},[79,121575,121576],{"class":2313},"# 检查驱动是否安装成功\n",[79,121578,121579],{"class":81,"line":562},[79,121580,121581],{"class":85},"nvidia-smi\n",[24935,121583,121585],{"id":121584},"_35212-debian","3.5.2.1.2 Debian",[51,121587,121589],{"className":120156,"code":121588,"language":120158,"meta":57,"style":57},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[59,121590,121591,121595,121609,121613,121623,121627],{"__ignoreMap":57},[79,121592,121593],{"class":81,"line":82},[79,121594,121545],{"class":2313},[79,121596,121597,121599,121601,121603,121606],{"class":81,"line":167},[79,121598,86],{"class":85},[79,121600,118950],{"class":89},[79,121602,93],{"class":89},[79,121604,121605],{"class":89}," nvidia-driver",[79,121607,121608],{"class":89}," nvidia-settings\n",[79,121610,121611],{"class":81,"line":178},[79,121612,121561],{"class":2313},[79,121614,121615,121617,121619,121621],{"class":81,"line":545},[79,121616,86],{"class":85},[79,121618,121269],{"class":89},[79,121620,121272],{"class":96},[79,121622,121275],{"class":89},[79,121624,121625],{"class":81,"line":550},[79,121626,121576],{"class":2313},[79,121628,121629],{"class":81,"line":562},[79,121630,121581],{"class":85},[24023,121632,121634],{"id":121633},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,121636,121637,121638,121641],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[2398,121639,121640],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,121643,121644,121645],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[25579,121646,121647],{},[2398,121648,121649],{},"（也可以不禁用桌面环境，直接进行下一步。）",[51,121651,121653],{"className":120156,"code":121652,"language":120158,"meta":57,"style":57},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[59,121654,121655,121660,121670,121675,121688,121693],{"__ignoreMap":57},[79,121656,121657],{"class":81,"line":82},[79,121658,121659],{"class":2313},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[79,121661,121662,121664,121667],{"class":81,"line":167},[79,121663,86],{"class":85},[79,121665,121666],{"class":89}," telinit",[79,121668,121669],{"class":96}," 3\n",[79,121671,121672],{"class":81,"line":178},[79,121673,121674],{"class":2313},"# ubuntu 使用下方命令\n",[79,121676,121677,121679,121682,121685],{"class":81,"line":545},[79,121678,86],{"class":85},[79,121680,121681],{"class":89}," service",[79,121683,121684],{"class":89}," lightdm",[79,121686,121687],{"class":89}," stop\n",[79,121689,121690],{"class":81,"line":550},[79,121691,121692],{"class":2313},"# Fedora 使用下方命令\n",[79,121694,121695,121697,121699,121702],{"class":81,"line":562},[79,121696,86],{"class":85},[79,121698,28529],{"class":89},[79,121700,121701],{"class":89}," isolate",[79,121703,121704],{"class":89}," multi-user.target\n",[19,121706,121707],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[51,121709,121711],{"className":120156,"code":121710,"language":120158,"meta":57,"style":57},"# 编译环境+准备工作\nsudo apt install build-essential\n# 进入到.run目录中\ncd \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n# 给驱动文件增加可执行权限：\nsudo chmod a+x NVIDIA-Linux-x86_64-550.107.02.run\n# 然后执行安装：\nsudo .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\nsudo .\u002FNVIDIA-Linux-x86_64-550.107.02.run  --no-opengl-files\n",[59,121712,121713,121718,121729,121734,121741,121746,121758,121763,121770,121775],{"__ignoreMap":57},[79,121714,121715],{"class":81,"line":82},[79,121716,121717],{"class":2313},"# 编译环境+准备工作\n",[79,121719,121720,121722,121724,121726],{"class":81,"line":167},[79,121721,86],{"class":85},[79,121723,118950],{"class":89},[79,121725,93],{"class":89},[79,121727,121728],{"class":89}," build-essential\n",[79,121730,121731],{"class":81,"line":178},[79,121732,121733],{"class":2313},"# 进入到.run目录中\n",[79,121735,121736,121738],{"class":81,"line":545},[79,121737,103239],{"class":96},[79,121739,121740],{"class":89}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[79,121742,121743],{"class":81,"line":550},[79,121744,121745],{"class":2313},"# 给驱动文件增加可执行权限：\n",[79,121747,121748,121750,121752,121755],{"class":81,"line":562},[79,121749,86],{"class":85},[79,121751,26599],{"class":89},[79,121753,121754],{"class":89}," a+x",[79,121756,121757],{"class":89}," NVIDIA-Linux-x86_64-550.107.02.run\n",[79,121759,121760],{"class":81,"line":568},[79,121761,121762],{"class":2313},"# 然后执行安装：\n",[79,121764,121765,121767],{"class":81,"line":574},[79,121766,86],{"class":85},[79,121768,121769],{"class":89}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[79,121771,121772],{"class":81,"line":579},[79,121773,121774],{"class":2313},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[79,121776,121777,121779,121782],{"class":81,"line":585},[79,121778,86],{"class":85},[79,121780,121781],{"class":89}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[79,121783,121784],{"class":96},"  --no-opengl-files\n",[19,121786,121787],{},"安装完毕重启即可",[51,121789,121791],{"className":120156,"code":121790,"language":120158,"meta":57,"style":57},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[59,121792,121793,121797,121803,121807],{"__ignoreMap":57},[79,121794,121795],{"class":81,"line":82},[79,121796,121561],{"class":2313},[79,121798,121799,121801],{"class":81,"line":167},[79,121800,86],{"class":85},[79,121802,28663],{"class":89},[79,121804,121805],{"class":81,"line":178},[79,121806,121576],{"class":2313},[79,121808,121809],{"class":81,"line":545},[79,121810,121581],{"class":85},[339,121812,121814],{"id":121813},"_353-安装cuda","3.5.3 安装CUDA",[19,121816,121817],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,121819,121820],{},[3569,121821],{"alt":57,"src":121822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[26,121824,121825],{},[29,121826,121827],{},"先查看显卡驱动所支持的最高CUDA版本",[51,121829,121830],{"className":120156,"code":121581,"language":120158,"meta":57,"style":57},[59,121831,121832],{"__ignoreMap":57},[79,121833,121834],{"class":81,"line":82},[79,121835,121581],{"class":85},[19,121837,121838],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,121840,121841],{},[3569,121842],{"alt":57,"src":121843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[26,121845,121846],{"start":167},[29,121847,121848],{},"下载CUDA并安装CUDA",[19,121850,119935,121851],{},[2482,121852,119938],{"href":119938,"rel":121853},[25885],[19,121855,121856],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,121858,121859],{},[3569,121860],{"alt":57,"src":121861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,121863,121864,121865,121870],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[2482,121866,121869],{"href":121867,"rel":121868},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[25885],"Vinci机器人队单片机教程","）",[19,121872,121873],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,121875,121876],{},[3569,121877],{"alt":57,"src":121878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,121880,121881],{},"将最下方框框里的命令敲入终端",[51,121883,121885],{"className":120156,"code":121884,"language":120158,"meta":57,"style":57},"# 在当前文件夹下创建一个ttt的子文件夹\nmkdir -p .\u002Fttt\n# 进入ttt文件夹\ncd ttt\n# 输入复制的第一条命令（用来下载cuda的runfile文件）\nwget https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n# 给予权限\nsudo chmod a+x .\u002Fcuda_12.4.0_550.54.14_linux.run\n# 运行脚本\nsudo .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[59,121886,121887,121892,121901,121906,121913,121918,121926,121931,121942,121947],{"__ignoreMap":57},[79,121888,121889],{"class":81,"line":82},[79,121890,121891],{"class":2313},"# 在当前文件夹下创建一个ttt的子文件夹\n",[79,121893,121894,121896,121898],{"class":81,"line":167},[79,121895,103229],{"class":85},[79,121897,31230],{"class":96},[79,121899,121900],{"class":89}," .\u002Fttt\n",[79,121902,121903],{"class":81,"line":178},[79,121904,121905],{"class":2313},"# 进入ttt文件夹\n",[79,121907,121908,121910],{"class":81,"line":545},[79,121909,103239],{"class":96},[79,121911,121912],{"class":89}," ttt\n",[79,121914,121915],{"class":81,"line":550},[79,121916,121917],{"class":2313},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[79,121919,121920,121923],{"class":81,"line":562},[79,121921,121922],{"class":85},"wget",[79,121924,121925],{"class":89}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[79,121927,121928],{"class":81,"line":568},[79,121929,121930],{"class":2313},"# 给予权限\n",[79,121932,121933,121935,121937,121939],{"class":81,"line":574},[79,121934,86],{"class":85},[79,121936,26599],{"class":89},[79,121938,121754],{"class":89},[79,121940,121941],{"class":89}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[79,121943,121944],{"class":81,"line":579},[79,121945,121946],{"class":2313},"# 运行脚本\n",[79,121948,121949,121951],{"class":81,"line":585},[79,121950,86],{"class":85},[79,121952,121941],{"class":89},[19,121954,121955],{},[3569,121956],{"alt":57,"src":121957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,121959,121960],{},"正在安装中：",[19,121962,121963],{},[3569,121964],{"alt":57,"src":121965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,121967,121968],{},"输入accept接受即可",[19,121970,121971],{},[3569,121972],{"alt":57,"src":121973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,121975,121976],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,121978,121979],{},[3569,121980],{"alt":57,"src":121981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,121983,121984],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,121986,121987],{},[3569,121988],{"alt":57,"src":121989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[26,121991,121992],{"start":178},[29,121993,121994],{},"配置环境",[19,121996,121997],{},"根据上方确认一下路径，比如我上面红色框起来的为",[51,121999,122001],{"className":120156,"code":122000,"language":120158,"meta":57,"style":57},"Please make sure that \n -   PATH includes \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin \n -   LD_LIBRARY_PATH includes \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64, or, add \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64 to \u002Fetc\u002Fld.so.conf and run ldconfig as root\n",[59,122002,122003,122019,122034],{"__ignoreMap":57},[79,122004,122005,122008,122011,122014,122017],{"class":81,"line":82},[79,122006,122007],{"class":85},"Please",[79,122009,122010],{"class":89}," make",[79,122012,122013],{"class":89}," sure",[79,122015,122016],{"class":89}," that",[79,122018,4750],{"class":228},[79,122020,122021,122023,122026,122029,122032],{"class":81,"line":167},[79,122022,461],{"class":85},[79,122024,122025],{"class":89},"   PATH",[79,122027,122028],{"class":89}," includes",[79,122030,122031],{"class":89}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[79,122033,4750],{"class":228},[79,122035,122036,122038,122041,122043,122046,122049,122051,122054,122057,122060,122063,122065,122068,122070],{"class":81,"line":178},[79,122037,461],{"class":85},[79,122039,122040],{"class":89},"   LD_LIBRARY_PATH",[79,122042,122028],{"class":89},[79,122044,122045],{"class":89}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[79,122047,122048],{"class":89}," or,",[79,122050,7277],{"class":89},[79,122052,122053],{"class":89}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[79,122055,122056],{"class":89}," to",[79,122058,122059],{"class":89}," \u002Fetc\u002Fld.so.conf",[79,122061,122062],{"class":89}," and",[79,122064,29246],{"class":89},[79,122066,122067],{"class":89}," ldconfig",[79,122069,66592],{"class":89},[79,122071,122072],{"class":89}," root\n",[19,122074,122075],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[51,122077,122079],{"className":120156,"code":122078,"language":120158,"meta":57,"style":57},"which nvcc\n",[59,122080,122081],{"__ignoreMap":57},[79,122082,122083,122086],{"class":81,"line":82},[79,122084,122085],{"class":96},"which",[79,122087,122088],{"class":89}," nvcc\n",[19,122090,122091],{},[3569,122092],{"alt":57,"src":122093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,122095,122096],{},"所以我进行以下操作：",[51,122098,122100],{"className":120156,"code":122099,"language":120158,"meta":57,"style":57},"sudo vim ~\u002F.bashrc\n",[59,122101,122102],{"__ignoreMap":57},[79,122103,122104,122106,122108],{"class":81,"line":82},[79,122105,86],{"class":85},[79,122107,120216],{"class":89},[79,122109,122110],{"class":89}," ~\u002F.bashrc\n",[19,122112,122113],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[51,122115,122117],{"className":120156,"code":122116,"language":120158,"meta":57,"style":57},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[59,122118,122119,122131],{"__ignoreMap":57},[79,122120,122121,122123,122126,122128],{"class":81,"line":82},[79,122122,27062],{"class":448},[79,122124,122125],{"class":228}," PATH",[79,122127,239],{"class":448},[79,122129,122130],{"class":228},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[79,122132,122133,122135,122138,122140],{"class":81,"line":167},[79,122134,27062],{"class":448},[79,122136,122137],{"class":228}," LD_LIBRARY_PATH",[79,122139,239],{"class":448},[79,122141,122142],{"class":228},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,122144,122145],{},[3569,122146],{"alt":57,"src":122147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[51,122149,122151],{"className":120156,"code":122150,"language":120158,"meta":57,"style":57},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[59,122152,122153,122158,122164,122169],{"__ignoreMap":57},[79,122154,122155],{"class":81,"line":82},[79,122156,122157],{"class":2313},"# 刷新当前终端的环境变量\n",[79,122159,122160,122162],{"class":81,"line":167},[79,122161,102871],{"class":96},[79,122163,122110],{"class":89},[79,122165,122166],{"class":81,"line":178},[79,122167,122168],{"class":2313},"# 验证CUDA是否安装成功\n",[79,122170,122171,122174],{"class":81,"line":545},[79,122172,122173],{"class":85},"nvcc",[79,122175,122176],{"class":96}," -V\n",[19,122178,122179],{},"出现下图这种则安装成功。",[19,122181,122182],{},[3569,122183],{"alt":57,"src":122184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[339,122186,122188],{"id":122187},"_354-安装cudnn","3.5.4 安装cuDNN",[26,122190,122191],{},[29,122192,122193],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,122195,122196,122197,122202],{},"前往 NVIDIA cuDNN 下载页面：",[2482,122198,122201],{"href":122199,"rel":122200},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[25885],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,122204,122205],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,122207,122208],{},[3569,122209],{"alt":57,"src":122210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,122212,122213],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,122215,122216],{},[3569,122217],{"alt":57,"src":122218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,122220,122221],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,122223,122224],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,122226,122227],{},[2398,122228,122229],{},"我这里选择所有Linux X86_64最通用的办法：",[19,122231,122232],{},"下载好的：",[19,122234,122235],{},[3569,122236],{"alt":57,"src":122237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[26,122239,122240],{"start":167},[29,122241,122242],{},"安装cuDNN",[19,122244,122245],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,122247,122248],{},[3569,122249],{"alt":57,"src":122250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,122252,122253],{},"解压文件，并复制到对应位置完成安装",[51,122255,122257],{"className":120156,"code":122256,"language":120158,"meta":57,"style":57},"# 解压cuDNN文件\ntar -xvf .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n# cd进文件夹\ncd .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n# 复制cuDNN文件到CUDA目录\nsudo cp include\u002Fcudnn*    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude \nsudo cp lib\u002Flibcudnn*    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n# 对比一下有没有缺文件\nls \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn* \nls \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn*\n# 给予权限\nsudo chmod a+r \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn*   \nsudo chmod a+r \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn*\n",[59,122258,122259,122264,122275,122280,122287,122292,122308,122322,122327,122338,122347,122351,122367],{"__ignoreMap":57},[79,122260,122261],{"class":81,"line":82},[79,122262,122263],{"class":2313},"# 解压cuDNN文件\n",[79,122265,122266,122269,122272],{"class":81,"line":167},[79,122267,122268],{"class":85},"tar",[79,122270,122271],{"class":96}," -xvf",[79,122273,122274],{"class":89}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[79,122276,122277],{"class":81,"line":178},[79,122278,122279],{"class":2313},"# cd进文件夹\n",[79,122281,122282,122284],{"class":81,"line":545},[79,122283,103239],{"class":96},[79,122285,122286],{"class":89}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[79,122288,122289],{"class":81,"line":550},[79,122290,122291],{"class":2313},"# 复制cuDNN文件到CUDA目录\n",[79,122293,122294,122296,122298,122301,122303,122306],{"class":81,"line":562},[79,122295,86],{"class":85},[79,122297,29877],{"class":89},[79,122299,122300],{"class":89}," include\u002Fcudnn",[79,122302,473],{"class":96},[79,122304,122305],{"class":89},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[79,122307,4750],{"class":228},[79,122309,122310,122312,122314,122317,122319],{"class":81,"line":568},[79,122311,86],{"class":85},[79,122313,29877],{"class":89},[79,122315,122316],{"class":89}," lib\u002Flibcudnn",[79,122318,473],{"class":96},[79,122320,122321],{"class":89},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[79,122323,122324],{"class":81,"line":574},[79,122325,122326],{"class":2313},"# 对比一下有没有缺文件\n",[79,122328,122329,122331,122334,122336],{"class":81,"line":579},[79,122330,28777],{"class":85},[79,122332,122333],{"class":89}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[79,122335,473],{"class":96},[79,122337,4750],{"class":228},[79,122339,122340,122342,122345],{"class":81,"line":585},[79,122341,28777],{"class":85},[79,122343,122344],{"class":89}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[79,122346,120881],{"class":96},[79,122348,122349],{"class":81,"line":591},[79,122350,121930],{"class":2313},[79,122352,122353,122355,122357,122360,122362,122364],{"class":81,"line":596},[79,122354,86],{"class":85},[79,122356,26599],{"class":89},[79,122358,122359],{"class":89}," a+r",[79,122361,122333],{"class":89},[79,122363,473],{"class":96},[79,122365,122366],{"class":228},"   \n",[79,122368,122369,122371,122373,122375,122377],{"class":81,"line":602},[79,122370,86],{"class":85},[79,122372,26599],{"class":89},[79,122374,122359],{"class":89},[79,122376,122344],{"class":89},[79,122378,120881],{"class":96},[26,122380,122381],{"start":178},[29,122382,122383],{},"检查是否安装成功",[51,122385,122387],{"className":120156,"code":122386,"language":120158,"meta":57,"style":57},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[59,122388,122389,122394],{"__ignoreMap":57},[79,122390,122391],{"class":81,"line":82},[79,122392,122393],{"class":2313},"# 检查cuDNN版本命令\n",[79,122395,122396,122399,122402,122404,122406,122409,122412],{"class":81,"line":167},[79,122397,122398],{"class":85},"cat",[79,122400,122401],{"class":89}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[79,122403,27129],{"class":448},[79,122405,32250],{"class":85},[79,122407,122408],{"class":89}," CUDNN_MAJOR",[79,122410,122411],{"class":96}," -A",[79,122413,49718],{"class":96},[19,122415,122416],{},"出现下图这样的就是安装成功了",[19,122418,122419],{},[3569,122420],{"alt":57,"src":122421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[26,122423,122424],{"start":545},[29,122425,122426],{},"软链接(一般不需要)",[51,122428,122430],{"className":120156,"code":122429,"language":120158,"meta":57,"style":57},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[59,122431,122432,122437],{"__ignoreMap":57},[79,122433,122434],{"class":81,"line":82},[79,122435,122436],{"class":2313},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[79,122438,122439,122441],{"class":81,"line":167},[79,122440,86],{"class":85},[79,122442,122443],{"class":89}," ldconfig\n",[19,122445,122446],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[51,122448,122453],{"className":122449,"code":122450,"language":122451,"meta":122452,"style":57},"language-Plain shiki shiki-themes github-light github-dark","ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n","Plain","Text",[59,122454,122455,122460,122465,122470,122475,122480,122485],{"__ignoreMap":57},[79,122456,122457],{"class":81,"line":82},[79,122458,122459],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[79,122461,122462],{"class":81,"line":167},[79,122463,122464],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[79,122466,122467],{"class":81,"line":178},[79,122468,122469],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[79,122471,122472],{"class":81,"line":545},[79,122473,122474],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[79,122476,122477],{"class":81,"line":550},[79,122478,122479],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[79,122481,122482],{"class":81,"line":562},[79,122483,122484],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[79,122486,122487],{"class":81,"line":568},[79,122488,122489],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,122491,122492],{},"运行下方的命令",[51,122494,122496],{"className":120156,"code":122495,"language":120158,"meta":57,"style":57},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[59,122497,122498,122503,122510,122515],{"__ignoreMap":57},[79,122499,122500],{"class":81,"line":82},[79,122501,122502],{"class":2313},"# cd进入CUDA路径\n",[79,122504,122505,122507],{"class":81,"line":167},[79,122506,103239],{"class":96},[79,122508,122509],{"class":89}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[79,122511,122512],{"class":81,"line":178},[79,122513,122514],{"class":2313}," # 查看本路径下的需要软链接的文件名\n",[79,122516,122517],{"class":81,"line":545},[79,122518,122519],{"class":85}," ls\n",[19,122521,122522],{},[3569,122523],{"alt":57,"src":122524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,122526,122527,122528,20435,122531,20435,122534,122537],{},"如上图，我需要将",[59,122529,122530],{},"libcudnn_xxx_xxxxx.so.8.9.7",[59,122532,122533],{},"libcudnn_xxx_xxxxx.so.8",[59,122535,122536],{},"libcudnn_xxx_xxxxx.so","软链接",[51,122539,122541],{"className":120156,"code":122540,"language":120158,"meta":57,"style":57},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\nsudo ln -sf libcudnn_cnn_train.so.8.9.7 libcudnn_cnn_train.so.8\nsudo ln -sf libcudnn_adv_infer.so.8.9.7 libcudnn_adv_infer.so.8\nsudo ln -sf libcudnn_adv_train.so.8.9.7 libcudnn_adv_train.so.8\nsudo ln -sf libcudnn_cnn_infer.so.8.9.7 libcudnn_cnn_infer.so.8\nsudo ln -sf libcudnn.so.8.9.7 libcudnn.so.8\nsudo ln -sf libcudnn_ops_infer.so.8.9.7 libcudnn_ops_infer.so.8\nsudo ln -sf libcudnn_ops_train.so.8.9.7 libcudnn_ops_train.so.8\n# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\nsudo ldconfig\n# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\nls -l \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_*.so*\n",[59,122542,122543,122548,122564,122578,122592,122606,122620,122634,122648,122653,122659,122664],{"__ignoreMap":57},[79,122544,122545],{"class":81,"line":82},[79,122546,122547],{"class":2313},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[79,122549,122550,122552,122555,122558,122561],{"class":81,"line":167},[79,122551,86],{"class":85},[79,122553,122554],{"class":89}," ln",[79,122556,122557],{"class":96}," -sf",[79,122559,122560],{"class":89}," libcudnn_cnn_train.so.8.9.7",[79,122562,122563],{"class":89}," libcudnn_cnn_train.so.8\n",[79,122565,122566,122568,122570,122572,122575],{"class":81,"line":178},[79,122567,86],{"class":85},[79,122569,122554],{"class":89},[79,122571,122557],{"class":96},[79,122573,122574],{"class":89}," libcudnn_adv_infer.so.8.9.7",[79,122576,122577],{"class":89}," libcudnn_adv_infer.so.8\n",[79,122579,122580,122582,122584,122586,122589],{"class":81,"line":545},[79,122581,86],{"class":85},[79,122583,122554],{"class":89},[79,122585,122557],{"class":96},[79,122587,122588],{"class":89}," libcudnn_adv_train.so.8.9.7",[79,122590,122591],{"class":89}," libcudnn_adv_train.so.8\n",[79,122593,122594,122596,122598,122600,122603],{"class":81,"line":550},[79,122595,86],{"class":85},[79,122597,122554],{"class":89},[79,122599,122557],{"class":96},[79,122601,122602],{"class":89}," libcudnn_cnn_infer.so.8.9.7",[79,122604,122605],{"class":89}," libcudnn_cnn_infer.so.8\n",[79,122607,122608,122610,122612,122614,122617],{"class":81,"line":562},[79,122609,86],{"class":85},[79,122611,122554],{"class":89},[79,122613,122557],{"class":96},[79,122615,122616],{"class":89}," libcudnn.so.8.9.7",[79,122618,122619],{"class":89}," libcudnn.so.8\n",[79,122621,122622,122624,122626,122628,122631],{"class":81,"line":568},[79,122623,86],{"class":85},[79,122625,122554],{"class":89},[79,122627,122557],{"class":96},[79,122629,122630],{"class":89}," libcudnn_ops_infer.so.8.9.7",[79,122632,122633],{"class":89}," libcudnn_ops_infer.so.8\n",[79,122635,122636,122638,122640,122642,122645],{"class":81,"line":574},[79,122637,86],{"class":85},[79,122639,122554],{"class":89},[79,122641,122557],{"class":96},[79,122643,122644],{"class":89}," libcudnn_ops_train.so.8.9.7",[79,122646,122647],{"class":89}," libcudnn_ops_train.so.8\n",[79,122649,122650],{"class":81,"line":579},[79,122651,122652],{"class":2313},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[79,122654,122655,122657],{"class":81,"line":585},[79,122656,86],{"class":85},[79,122658,122443],{"class":89},[79,122660,122661],{"class":81,"line":591},[79,122662,122663],{"class":2313},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[79,122665,122666,122668,122671,122674,122676,122679],{"class":81,"line":596},[79,122667,28777],{"class":85},[79,122669,122670],{"class":96}," -l",[79,122672,122673],{"class":89}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[79,122675,473],{"class":96},[79,122677,122678],{"class":89},".so",[79,122680,120881],{"class":96},[339,122682,122684],{"id":122683},"_355-常见问题","3.5.5 常见问题",[26,122686,122687],{},[29,122688,122689],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[51,122691,122693],{"className":120156,"code":122692,"language":120158,"meta":57,"style":57},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[59,122694,122695],{"__ignoreMap":57},[79,122696,122697,122699,122701],{"class":81,"line":82},[79,122698,86],{"class":85},[79,122700,120216],{"class":89},[79,122702,122703],{"class":89}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,122705,122706],{},"blacklist-nouveau.conf文件内容如下：",[51,122708,122710],{"className":120156,"code":122709,"language":120158,"meta":57,"style":57},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[59,122711,122712,122720,122727,122739,122749],{"__ignoreMap":57},[79,122713,122714,122717],{"class":81,"line":82},[79,122715,122716],{"class":85},"blacklist",[79,122718,122719],{"class":89}," nouveau\n",[79,122721,122722,122724],{"class":81,"line":167},[79,122723,122716],{"class":85},[79,122725,122726],{"class":89}," lbm-nouveau\n",[79,122728,122729,122731,122734,122737],{"class":81,"line":178},[79,122730,117563],{"class":85},[79,122732,122733],{"class":89}," nouveau",[79,122735,122736],{"class":89}," modeset=",[79,122738,5160],{"class":96},[79,122740,122741,122744,122746],{"class":81,"line":545},[79,122742,122743],{"class":96},"alias",[79,122745,122733],{"class":89},[79,122747,122748],{"class":89}," off\n",[79,122750,122751,122753,122756],{"class":81,"line":550},[79,122752,122743],{"class":96},[79,122754,122755],{"class":89}," lbm-nouveau",[79,122757,122748],{"class":89},[19,122759,122760],{},"接着运行下方命令",[51,122762,122764],{"className":120156,"code":122763,"language":120158,"meta":57,"style":57},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[59,122765,122766,122776,122781],{"__ignoreMap":57},[79,122767,122768,122770,122773],{"class":81,"line":82},[79,122769,86],{"class":85},[79,122771,122772],{"class":89}," update-initramfs",[79,122774,122775],{"class":96}," -u\n",[79,122777,122778],{"class":81,"line":167},[79,122779,122780],{"class":85},"或者\n",[79,122782,122783,122785,122788],{"class":81,"line":178},[79,122784,86],{"class":85},[79,122786,122787],{"class":89}," dracut",[79,122789,122790],{"class":96}," --force\n",[19,122792,122793],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[51,122795,122797],{"className":120156,"code":122796,"language":120158,"meta":57,"style":57},"lsmod | grep nouveau\n",[59,122798,122799],{"__ignoreMap":57},[79,122800,122801,122804,122806,122808],{"class":81,"line":82},[79,122802,122803],{"class":85},"lsmod",[79,122805,27129],{"class":448},[79,122807,32250],{"class":85},[79,122809,122719],{"class":89},[26,122811,122812],{"start":167},[29,122813,122814],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[51,122816,122818],{"className":120156,"code":122817,"language":120158,"meta":57,"style":57},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[59,122819,122820],{"__ignoreMap":57},[79,122821,122822,122824,122826],{"class":81,"line":82},[79,122823,86],{"class":85},[79,122825,120216],{"class":89},[79,122827,122828],{"class":89}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,122830,122831],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[51,122833,122835],{"className":120156,"code":122834,"language":120158,"meta":57,"style":57},"Section \"OutputClass\"\n   Identifier \"nvidia\"\n   MatchDriver \"nvidia-drm\"\n   Driver \"nvidia\"\n   Option \"AllowEmptyInitialConfiguration\"\n   Option \"PrimaryGPU\" \"yes\"\n   ModulePath \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\nEndSection\n",[59,122836,122837,122845,122853,122861,122868,122876,122886,122894],{"__ignoreMap":57},[79,122838,122839,122842],{"class":81,"line":82},[79,122840,122841],{"class":85},"Section",[79,122843,122844],{"class":89}," \"OutputClass\"\n",[79,122846,122847,122850],{"class":81,"line":167},[79,122848,122849],{"class":85},"   Identifier",[79,122851,122852],{"class":89}," \"nvidia\"\n",[79,122854,122855,122858],{"class":81,"line":178},[79,122856,122857],{"class":85},"   MatchDriver",[79,122859,122860],{"class":89}," \"nvidia-drm\"\n",[79,122862,122863,122866],{"class":81,"line":545},[79,122864,122865],{"class":85},"   Driver",[79,122867,122852],{"class":89},[79,122869,122870,122873],{"class":81,"line":550},[79,122871,122872],{"class":85},"   Option",[79,122874,122875],{"class":89}," \"AllowEmptyInitialConfiguration\"\n",[79,122877,122878,122880,122883],{"class":81,"line":562},[79,122879,122872],{"class":85},[79,122881,122882],{"class":89}," \"PrimaryGPU\"",[79,122884,122885],{"class":89}," \"yes\"\n",[79,122887,122888,122891],{"class":81,"line":568},[79,122889,122890],{"class":85},"   ModulePath",[79,122892,122893],{"class":89}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[79,122895,122896],{"class":81,"line":574},[79,122897,122898],{"class":85},"EndSection\n",[26,122900,122901],{"start":178},[29,122902,122903],{},"安装N卡驱动提示错误",[51,122905,122907],{"className":122449,"code":122906,"language":122451,"meta":122452,"style":57},"Unable to find the kernel source tree for the currently running kernel.  Please make sure you have installed the kernel source files for your kernel and that they are properly configured; on Red Hat Linux systems, for example, be sure you have the 'kernel-source' or 'kernel-devel' RPM installed.If you know the correct kernel source files are installed, you may specify the kernel source path with the '--kernel-source-path' command line option.\n",[59,122908,122909],{"__ignoreMap":57},[79,122910,122911],{"class":81,"line":82},[79,122912,122906],{},[26,122914,122915],{},[29,122916,122917],{},"检查当前运行的内核版本：",[19,122919,122920],{},"运行以下命令以查看你当前正在使用的内核版本：",[51,122922,122924],{"className":118929,"code":122923,"language":118931,"meta":57,"style":57},"uname -r\n",[59,122925,122926],{"__ignoreMap":57},[79,122927,122928,122930],{"class":81,"line":82},[79,122929,72192],{"class":85},[79,122931,122932],{"class":96}," -r\n",[26,122934,122935],{"start":167},[29,122936,122937],{},"安装内核开发文件：",[19,122939,122940,122941,122944],{},"确保你已经安装了与当前内核版本相匹配的 ",[59,122942,122943],{},"kernel-devel"," 包。运行以下命令来安装：",[51,122946,122948],{"className":118929,"code":122947,"language":118931,"meta":57,"style":57},"sudo dnf install kernel-devel-$(uname -r)\n",[59,122949,122950],{"__ignoreMap":57},[79,122951,122952,122954,122956,122958,122961,122963,122965,122967],{"class":81,"line":82},[79,122953,86],{"class":85},[79,122955,90],{"class":89},[79,122957,93],{"class":89},[79,122959,122960],{"class":89}," kernel-devel-",[79,122962,27119],{"class":228},[79,122964,72192],{"class":85},[79,122966,121272],{"class":96},[79,122968,850],{"class":228},[19,122970,122971],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[26,122973,122974],{"start":178},[29,122975,122976],{},"安装内核源代码（如果需要）：",[19,122978,122979],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[51,122981,122983],{"className":118929,"code":122982,"language":118931,"meta":57,"style":57},"sudo dnf install kernel-headers kernel-source\n",[59,122984,122985],{"__ignoreMap":57},[79,122986,122987,122989,122991,122993,122996],{"class":81,"line":82},[79,122988,86],{"class":85},[79,122990,90],{"class":89},[79,122992,93],{"class":89},[79,122994,122995],{"class":89}," kernel-headers",[79,122997,122998],{"class":89}," kernel-source\n",[26,123000,123001],{"start":545},[29,123002,123003],{},"检查安装：",[19,123005,123006,123007,123010],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[59,123008,123009],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[51,123012,123014],{"className":118929,"code":123013,"language":118931,"meta":57,"style":57},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[59,123015,123016],{"__ignoreMap":57},[79,123017,123018,123020],{"class":81,"line":82},[79,123019,28777],{"class":85},[79,123021,123022],{"class":89}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,123024,123025,123026,123029],{},"如果仍然遇到问题，可以通过 ",[59,123027,123028],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[2159,123031,123032],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":57,"searchDepth":167,"depth":167,"links":123034},[123035,123039,123049,123053,123054],{"id":120132,"depth":167,"text":120133,"children":123036},[123037,123038],{"id":120142,"depth":178,"text":120143},{"id":120152,"depth":178,"text":120153},{"id":120352,"depth":167,"text":120353,"children":123040},[123041,123042,123043,123044,123045,123046,123047,123048],{"id":120356,"depth":178,"text":120357},{"id":120426,"depth":178,"text":120427},{"id":120515,"depth":178,"text":120516},{"id":120760,"depth":178,"text":120761},{"id":120830,"depth":178,"text":120831},{"id":120897,"depth":178,"text":120898},{"id":120932,"depth":178,"text":120933},{"id":120987,"depth":178,"text":120988},{"id":121038,"depth":167,"text":121039,"children":123050},[123051,123052],{"id":121042,"depth":178,"text":121043},{"id":121122,"depth":178,"text":121123},{"id":121308,"depth":167,"text":121309},{"id":121481,"depth":167,"text":121482,"children":123055},[123056,123057,123058,123059,123060],{"id":121485,"depth":178,"text":121486},{"id":121526,"depth":178,"text":121527},{"id":121813,"depth":178,"text":121814},{"id":122187,"depth":178,"text":122188},{"id":122683,"depth":178,"text":122684},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":120124,"description":25402},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":123067,"title":123068,"body":123069,"description":25402,"extension":2186,"meta":123409,"navigation":541,"path":123410,"seo":123411,"stem":123412,"__hash__":123413},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":123070,"toc":123407},[123071,123074,123079,123082,123328,123333,123336,123372,123375,123404],[10,123072,123068],{"id":123073},"_4-命令教程长期积累",[26,123075,123076],{},[29,123077,123078],{},"大多数命令",[19,123080,123081],{},"常用 Linux 命令速查：",[51,123083,123085],{"className":118929,"code":123084,"language":118931,"meta":57,"style":57},"# 文件与目录\nls        # 列出目录内容\ncd        # 切换目录\npwd       # 显示当前路径\nmkdir     # 创建目录\nrm        # 删除文件或目录\ncp        # 复制文件或目录\nmv        # 移动\u002F重命名文件或目录\ntouch     # 创建空文件\ncat       # 查看文件内容\nhead\u002Ftail # 查看文件头部\u002F尾部\n\n# 权限管理\nchmod     # 修改文件权限\nchown     # 修改文件所有者\nsudo      # 以管理员身份执行\n\n# 系统信息\nuname     # 系统信息\ndf        # 磁盘使用情况\nfree      # 内存使用情况\ntop\u002Fhtop  # 进程监控\nps        # 查看进程\n\n# 网络\nping      # 测试网络连通性\ncurl      # 发送 HTTP 请求\nwget      # 下载文件\nssh       # 远程登录\nscp       # 远程文件传输\n\n# 包管理（Debian\u002FUbuntu）\napt update   # 更新软件源\napt install  # 安装软件包\napt remove   # 卸载软件包\n",[59,123086,123087,123092,123099,123106,123114,123121,123128,123136,123144,123151,123158,123166,123170,123175,123182,123190,123197,123201,123206,123213,123221,123229,123237,123245,123249,123254,123262,123269,123276,123284,123292,123296,123301,123310,123319],{"__ignoreMap":57},[79,123088,123089],{"class":81,"line":82},[79,123090,123091],{"class":2313},"# 文件与目录\n",[79,123093,123094,123096],{"class":81,"line":167},[79,123095,28777],{"class":85},[79,123097,123098],{"class":2313},"        # 列出目录内容\n",[79,123100,123101,123103],{"class":81,"line":178},[79,123102,103239],{"class":96},[79,123104,123105],{"class":2313},"        # 切换目录\n",[79,123107,123108,123111],{"class":81,"line":545},[79,123109,123110],{"class":96},"pwd",[79,123112,123113],{"class":2313},"       # 显示当前路径\n",[79,123115,123116,123118],{"class":81,"line":550},[79,123117,103229],{"class":85},[79,123119,123120],{"class":2313},"     # 创建目录\n",[79,123122,123123,123125],{"class":81,"line":562},[79,123124,27341],{"class":85},[79,123126,123127],{"class":2313},"        # 删除文件或目录\n",[79,123129,123130,123133],{"class":81,"line":568},[79,123131,123132],{"class":85},"cp",[79,123134,123135],{"class":2313},"        # 复制文件或目录\n",[79,123137,123138,123141],{"class":81,"line":574},[79,123139,123140],{"class":85},"mv",[79,123142,123143],{"class":2313},"        # 移动\u002F重命名文件或目录\n",[79,123145,123146,123148],{"class":81,"line":579},[79,123147,1239],{"class":85},[79,123149,123150],{"class":2313},"     # 创建空文件\n",[79,123152,123153,123155],{"class":81,"line":585},[79,123154,122398],{"class":85},[79,123156,123157],{"class":2313},"       # 查看文件内容\n",[79,123159,123160,123163],{"class":81,"line":591},[79,123161,123162],{"class":85},"head\u002Ftail",[79,123164,123165],{"class":2313}," # 查看文件头部\u002F尾部\n",[79,123167,123168],{"class":81,"line":596},[79,123169,542],{"emptyLinePlaceholder":541},[79,123171,123172],{"class":81,"line":602},[79,123173,123174],{"class":2313},"# 权限管理\n",[79,123176,123177,123179],{"class":81,"line":608},[79,123178,26631],{"class":85},[79,123180,123181],{"class":2313},"     # 修改文件权限\n",[79,123183,123184,123187],{"class":81,"line":614},[79,123185,123186],{"class":85},"chown",[79,123188,123189],{"class":2313},"     # 修改文件所有者\n",[79,123191,123192,123194],{"class":81,"line":619},[79,123193,86],{"class":85},[79,123195,123196],{"class":2313},"      # 以管理员身份执行\n",[79,123198,123199],{"class":81,"line":625},[79,123200,542],{"emptyLinePlaceholder":541},[79,123202,123203],{"class":81,"line":631},[79,123204,123205],{"class":2313},"# 系统信息\n",[79,123207,123208,123210],{"class":81,"line":637},[79,123209,72192],{"class":85},[79,123211,123212],{"class":2313},"     # 系统信息\n",[79,123214,123215,123218],{"class":81,"line":643},[79,123216,123217],{"class":85},"df",[79,123219,123220],{"class":2313},"        # 磁盘使用情况\n",[79,123222,123223,123226],{"class":81,"line":649},[79,123224,123225],{"class":85},"free",[79,123227,123228],{"class":2313},"      # 内存使用情况\n",[79,123230,123231,123234],{"class":81,"line":655},[79,123232,123233],{"class":85},"top\u002Fhtop",[79,123235,123236],{"class":2313},"  # 进程监控\n",[79,123238,123239,123242],{"class":81,"line":660},[79,123240,123241],{"class":85},"ps",[79,123243,123244],{"class":2313},"        # 查看进程\n",[79,123246,123247],{"class":81,"line":666},[79,123248,542],{"emptyLinePlaceholder":541},[79,123250,123251],{"class":81,"line":672},[79,123252,123253],{"class":2313},"# 网络\n",[79,123255,123256,123259],{"class":81,"line":678},[79,123257,123258],{"class":85},"ping",[79,123260,123261],{"class":2313},"      # 测试网络连通性\n",[79,123263,123264,123266],{"class":81,"line":684},[79,123265,28865],{"class":85},[79,123267,123268],{"class":2313},"      # 发送 HTTP 请求\n",[79,123270,123271,123273],{"class":81,"line":690},[79,123272,121922],{"class":85},[79,123274,123275],{"class":2313},"      # 下载文件\n",[79,123277,123278,123281],{"class":81,"line":695},[79,123279,123280],{"class":85},"ssh",[79,123282,123283],{"class":2313},"       # 远程登录\n",[79,123285,123286,123289],{"class":81,"line":700},[79,123287,123288],{"class":85},"scp",[79,123290,123291],{"class":2313},"       # 远程文件传输\n",[79,123293,123294],{"class":81,"line":712},[79,123295,542],{"emptyLinePlaceholder":541},[79,123297,123298],{"class":81,"line":721},[79,123299,123300],{"class":2313},"# 包管理（Debian\u002FUbuntu）\n",[79,123302,123303,123305,123307],{"class":81,"line":726},[79,123304,119001],{"class":85},[79,123306,118980],{"class":89},[79,123308,123309],{"class":2313},"   # 更新软件源\n",[79,123311,123312,123314,123316],{"class":81,"line":731},[79,123313,119001],{"class":85},[79,123315,93],{"class":89},[79,123317,123318],{"class":2313},"  # 安装软件包\n",[79,123320,123321,123323,123325],{"class":81,"line":748},[79,123322,119001],{"class":85},[79,123324,28097],{"class":89},[79,123326,123327],{"class":2313},"   # 卸载软件包\n",[26,123329,123330],{"start":167},[29,123331,123332],{},"KDE Dolphin 以root打开",[19,123334,123335],{},"kde5",[51,123337,123339],{"className":118929,"code":123338,"language":118931,"meta":57,"style":57},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[59,123340,123341],{"__ignoreMap":57},[79,123342,123343,123346,123349,123352,123354,123356,123359,123362,123364,123367,123369],{"class":81,"line":82},[79,123344,123345],{"class":85},"pkexec",[79,123347,123348],{"class":89}," env",[79,123350,123351],{"class":89}," DISPLAY=",[79,123353,30159],{"class":228},[79,123355,30217],{"class":89},[79,123357,123358],{"class":228},"$XAUTHORITY ",[79,123360,123361],{"class":89},"KDE_SESSION_VERSION=",[79,123363,2563],{"class":96},[79,123365,123366],{"class":89}," KDE_FULL_SESSION=",[79,123368,3469],{"class":96},[79,123370,123371],{"class":89}," dolphin\n",[19,123373,123374],{},"kde6",[51,123376,123378],{"className":118929,"code":123377,"language":118931,"meta":57,"style":57},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[59,123379,123380],{"__ignoreMap":57},[79,123381,123382,123384,123386,123388,123390,123392,123394,123396,123398,123400,123402],{"class":81,"line":82},[79,123383,123345],{"class":85},[79,123385,123348],{"class":89},[79,123387,123351],{"class":89},[79,123389,30159],{"class":228},[79,123391,30217],{"class":89},[79,123393,123358],{"class":228},[79,123395,123361],{"class":89},[79,123397,2587],{"class":96},[79,123399,123366],{"class":89},[79,123401,3469],{"class":96},[79,123403,123371],{"class":89},[2159,123405,123406],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":57,"searchDepth":167,"depth":167,"links":123408},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":123068,"description":25402},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":123415,"title":123416,"body":123417,"description":25402,"extension":2186,"meta":123431,"navigation":541,"path":123432,"seo":123433,"stem":123434,"__hash__":123435},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":123418,"toc":123429},[123419,123422],[10,123420,123416],{"id":123421},"_5-各种环境配置",[19,123423,123424],{},[2482,123425,123428],{"href":123426,"rel":123427},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[25885],"电控组环境搭建大全",{"title":57,"searchDepth":167,"depth":167,"links":123430},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":123416,"description":25402},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":123437,"title":123438,"body":123439,"description":25402,"extension":2186,"meta":123787,"navigation":541,"path":123788,"seo":123789,"stem":123790,"__hash__":123791},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":123440,"toc":123779},[123441,123444,123448,123452,123456,123461,123468,123472,123765,123769,123776],[10,123442,123438],{"id":123443},"_6-拓展功能",[14,123445,123447],{"id":123446},"_61-wine","6.1 Wine",[14,123449,123451],{"id":123450},"_62-android","6.2 Android",[339,123453,123455],{"id":123454},"_621-i卡a卡","6.2.1 I卡、A卡",[26,123457,123458],{},[29,123459,123460],{},"Wayland-Waydroid(体验超级好)",[19,123462,123463,123464],{},"Waydroid 官网与安装指南：",[2482,123465,123466],{"href":123466,"rel":123467},"https:\u002F\u002Fwaydro.id\u002F",[25885],[339,123469,123471],{"id":123470},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[26,123473,123474],{},[29,123475,123476,123477,123479,123480,123484,123486,123489,123494,123691],{},"QEMU-KVM虚拟机 + BlissOS-X86",[55707,123478],{},"BlissOS 官网下载：",[2482,123481,123482],{"href":123482,"rel":123483},"https:\u002F\u002Fblissos.org\u002F",[25885],[55707,123485],{},[3569,123487],{"alt":57,"src":123488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[26,123490,123491],{"start":178},[29,123492,123493],{},"比较推荐的配置",[51,123495,123497],{"className":118929,"code":123496,"language":118931,"meta":57,"style":57},"qemu-system-x86_64 \\\n        -M q35,vmport=off \\\n        -accel kvm \\\n        -cpu qemu64,+sse3,+sse4.2 \\\n        -smp 8,cores=4 \\\n        -m 6G \\\n        -usb \\\n        -device virtio-tablet \\\n        -device virtio-keyboard \\\n        -device usb-tablet \\\n        -bios OVMF-pure-efi64.fd \\\n        -net user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022 \\\n        -net nic,model=virtio \\\n        -audio sdl,model=hda \\\n        -display sdl,gl=on,show-cursor=on \\\n        -device virtio-vga-gl,xres=1920,yres=1080 \\\n        -drive file=disk.qcow2,media=disk,if=virtio,cache=writeback \\\n        -drive file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom \\\n        -monitor stdio \\\n        -serial none\n",[59,123498,123499,123506,123516,123526,123536,123548,123558,123565,123575,123584,123593,123603,123613,123622,123632,123642,123654,123664,123673,123683],{"__ignoreMap":57},[79,123500,123501,123504],{"class":81,"line":82},[79,123502,123503],{"class":85},"qemu-system-x86_64",[79,123505,26698],{"class":96},[79,123507,123508,123511,123514],{"class":81,"line":167},[79,123509,123510],{"class":96},"        -M",[79,123512,123513],{"class":89}," q35,vmport=off",[79,123515,26698],{"class":96},[79,123517,123518,123521,123524],{"class":81,"line":178},[79,123519,123520],{"class":96},"        -accel",[79,123522,123523],{"class":89}," kvm",[79,123525,26698],{"class":96},[79,123527,123528,123531,123534],{"class":81,"line":545},[79,123529,123530],{"class":96},"        -cpu",[79,123532,123533],{"class":89}," qemu64,+sse3,+sse4.2",[79,123535,26698],{"class":96},[79,123537,123538,123541,123544,123546],{"class":81,"line":550},[79,123539,123540],{"class":96},"        -smp",[79,123542,123543],{"class":89}," 8,cores=",[79,123545,2537],{"class":96},[79,123547,26698],{"class":96},[79,123549,123550,123553,123556],{"class":81,"line":562},[79,123551,123552],{"class":96},"        -m",[79,123554,123555],{"class":89}," 6G",[79,123557,26698],{"class":96},[79,123559,123560,123563],{"class":81,"line":568},[79,123561,123562],{"class":96},"        -usb",[79,123564,26698],{"class":96},[79,123566,123567,123570,123573],{"class":81,"line":574},[79,123568,123569],{"class":96},"        -device",[79,123571,123572],{"class":89}," virtio-tablet",[79,123574,26698],{"class":96},[79,123576,123577,123579,123582],{"class":81,"line":579},[79,123578,123569],{"class":96},[79,123580,123581],{"class":89}," virtio-keyboard",[79,123583,26698],{"class":96},[79,123585,123586,123588,123591],{"class":81,"line":585},[79,123587,123569],{"class":96},[79,123589,123590],{"class":89}," usb-tablet",[79,123592,26698],{"class":96},[79,123594,123595,123598,123601],{"class":81,"line":591},[79,123596,123597],{"class":96},"        -bios",[79,123599,123600],{"class":89}," OVMF-pure-efi64.fd",[79,123602,26698],{"class":96},[79,123604,123605,123608,123611],{"class":81,"line":596},[79,123606,123607],{"class":96},"        -net",[79,123609,123610],{"class":89}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[79,123612,26698],{"class":96},[79,123614,123615,123617,123620],{"class":81,"line":602},[79,123616,123607],{"class":96},[79,123618,123619],{"class":89}," nic,model=virtio",[79,123621,26698],{"class":96},[79,123623,123624,123627,123630],{"class":81,"line":608},[79,123625,123626],{"class":96},"        -audio",[79,123628,123629],{"class":89}," sdl,model=hda",[79,123631,26698],{"class":96},[79,123633,123634,123637,123640],{"class":81,"line":614},[79,123635,123636],{"class":96},"        -display",[79,123638,123639],{"class":89}," sdl,gl=on,show-cursor=on",[79,123641,26698],{"class":96},[79,123643,123644,123646,123649,123652],{"class":81,"line":619},[79,123645,123569],{"class":96},[79,123647,123648],{"class":89}," virtio-vga-gl,xres=1920,yres=",[79,123650,123651],{"class":96},"1080",[79,123653,26698],{"class":96},[79,123655,123656,123659,123662],{"class":81,"line":625},[79,123657,123658],{"class":96},"        -drive",[79,123660,123661],{"class":89}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[79,123663,26698],{"class":96},[79,123665,123666,123668,123671],{"class":81,"line":631},[79,123667,123658],{"class":96},[79,123669,123670],{"class":89}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[79,123672,26698],{"class":96},[79,123674,123675,123678,123681],{"class":81,"line":637},[79,123676,123677],{"class":96},"        -monitor",[79,123679,123680],{"class":89}," stdio",[79,123682,26698],{"class":96},[79,123684,123685,123688],{"class":81,"line":643},[79,123686,123687],{"class":96},"        -serial",[79,123689,123690],{"class":89}," none\n",[26,123692,123693],{"start":550},[29,123694,123695,123696],{},"常用操作：",[26,123697,123698,123701,123757],{},[29,123699,123700],{},"全屏：Ctrl+Alt+F",[29,123702,123703,123704,123709],{},"adb调试",[26,123705,123706],{},[29,123707,123708],{},"使Linux与Android用ADB连接。",[51,123710,123712],{"className":118929,"code":123711,"language":118931,"meta":57,"style":57},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[59,123713,123714,123719,123730,123735,123747,123752],{"__ignoreMap":57},[79,123715,123716],{"class":81,"line":82},[79,123717,123718],{"class":2313},"# 连接安卓\n",[79,123720,123721,123724,123727],{"class":81,"line":167},[79,123722,123723],{"class":85},"adb",[79,123725,123726],{"class":89}," connect",[79,123728,123729],{"class":96}," 127.0.0.1\n",[79,123731,123732],{"class":81,"line":178},[79,123733,123734],{"class":2313},"# 打开shell\n",[79,123736,123737,123739,123741,123744],{"class":81,"line":545},[79,123738,123723],{"class":85},[79,123740,28899],{"class":96},[79,123742,123743],{"class":89}," 127.0.0.1:5555",[79,123745,123746],{"class":89}," shell\n",[79,123748,123749],{"class":81,"line":550},[79,123750,123751],{"class":2313},"# 使用root权限\n",[79,123753,123754],{"class":81,"line":562},[79,123755,123756],{"class":85},"su\n",[29,123758,123759,123760],{},"中文输入法",[26,123761,123762],{},[29,123763,123764],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,123766,123768],{"id":123767},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,123770,123771,123772],{},"rEFInd 官网与文档：",[2482,123773,123774],{"href":123774,"rel":123775},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[25885],[2159,123777,123778],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":57,"searchDepth":167,"depth":167,"links":123780},[123781,123782,123786],{"id":123446,"depth":167,"text":123447},{"id":123450,"depth":167,"text":123451,"children":123783},[123784,123785],{"id":123454,"depth":178,"text":123455},{"id":123470,"depth":178,"text":123471},{"id":123767,"depth":167,"text":123768},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":123438,"description":25402},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":123793,"title":123794,"body":123795,"description":25402,"extension":2186,"meta":127094,"navigation":541,"path":127095,"seo":127096,"stem":127097,"__hash__":127098},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":123796,"toc":127068},[123797,123800,123804,123807,123814,124064,124067,124139,124142,124146,124150,124155,124158,124161,124164,124169,124172,124175,124178,124183,124186,124191,124194,124197,124202,124205,124210,124213,124217,124221,124224,124229,124232,124246,124249,124252,124261,124264,124273,124276,124279,124288,124291,124300,124303,124306,124315,124318,124321,124336,124339,124342,124351,124356,124359,124362,124371,124374,124383,124386,124395,124398,124407,124412,124415,124423,124428,124431,124440,124443,124451,124456,124459,124468,124471,124474,124478,124481,124486,124489,124494,124508,124513,124518,124529,124534,124540,124545,124560,124565,124568,124573,124578,124583,124591,124596,124603,124608,124619,124624,124627,124631,124634,124637,124642,124645,124664,124669,124672,124681,124686,124689,124711,124714,124744,124747,124752,124755,124769,124774,124793,124796,124799,124804,124816,124821,124826,124829,124834,124837,124852,124855,124860,124865,124869,124874,124914,124917,124921,124927,124933,124938,124941,124948,124953,124960,124963,124966,124973,124987,124990,125050,125053,125067,125079,125082,125085,125088,125152,125155,125158,125161,125181,125184,125189,125196,125200,125203,125207,125212,125217,125221,125224,125227,125269,125274,125277,125299,125314,125316,125321,125333,125393,125395,125397,125451,125453,125455,125461,125466,125469,125474,125478,125481,125543,125548,125551,125553,125557,125569,125651,125653,125655,125709,125715,125717,125721,125726,125728,125733,125737,125757,125792,125796,125799,125802,125805,125812,125815,125827,125830,125845,125848,125867,125915,125918,125935,125938,125952,125957,125960,125969,125984,125996,126034,126039,126048,126053,126058,126084,126093,126097,126101,126106,126109,126113,126117,126122,126125,126130,126133,126138,126141,126146,126149,126153,126158,126161,126166,126169,126173,126178,126181,126186,126189,126194,126197,126201,126206,126209,126214,126217,126222,126225,126229,126234,126237,126242,126245,126250,126253,126258,126261,126266,126269,126274,126277,126281,126286,126289,126294,126301,126305,126310,126313,126318,126321,126325,126330,126333,126336,126339,126342,126345,126349,126352,126362,126367,126372,126394,126399,126404,126411,126415,126420,126423,126426,126431,126434,126437,126440,126443,126446,126449,126452,126455,126458,126461,126464,126467,126472,126477,126482,126487,126492,126497,126502,126505,126509,126512,126516,126521,126526,126531,126536,126540,126546,126554,126559,126562,126567,126582,126585,126590,126624,126639,126642,126697,126723,126735,126738,126747,126750,126765,126770,126773,126779,126784,126787,126792,126795,126800,126805,126812,126815,126830,126833,126868,126873,126881,126919,126922,126925,126930,126933,126938,126949,126983,126988,126991,127000,127005,127011,127014,127019,127028,127033,127036,127039,127044,127052,127055,127060,127065],[10,123798,123794],{"id":123799},"_7-其他操作",[14,123801,123803],{"id":123802},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,123805,123806],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,123808,123809,123810,123813],{},"进入工控机的硬盘目录，进入",[59,123811,123812],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[51,123815,123819],{"className":123816,"code":123817,"language":123818,"meta":57,"style":57},"language-YAML shiki shiki-themes github-light github-dark","network: \n  version: 2 \n  wifis: \n    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96: \n      renderer: NetworkManager \n      match: \n        name: \"wlan0\" \n      dhcp4: true \n      dhcp6: true \n      access-points: \n        \"EMIS_Vinci_Robocon_5G\": \n          auth: \n            key-management: \"psk\" \n            password: \"vinci666\" \n          networkmanager: \n            uuid: \"6f414fe0-2658-48ff-89ee-c7981b87bc96\" \n            name: \"EMIS_Vinci_Robocon_5G\" \n            passthrough: \n              wifi-security.auth-alg: \"open\" \n              ipv6.addr-gen-mode: \"default\" \n              ipv6.ip6-privacy: \"-1\" \n              proxy._: \"\" \n      networkmanager: \n        uuid: \"6f414fe0-2658-48ff-89ee-c7981b87bc96\" \n        name: \"EMIS_Vinci_Robocon_5G\"\n \n","YAML",[59,123820,123821,123829,123840,123847,123854,123866,123873,123885,123896,123907,123914,123921,123928,123940,123952,123959,123971,123983,123990,124002,124014,124026,124037,124044,124055],{"__ignoreMap":57},[79,123822,123823,123826],{"class":81,"line":82},[79,123824,123825],{"class":232},"network",[79,123827,123828],{"class":228},": \n",[79,123830,123831,123834,123836,123838],{"class":81,"line":167},[79,123832,123833],{"class":232},"  version",[79,123835,53431],{"class":228},[79,123837,2331],{"class":96},[79,123839,4750],{"class":228},[79,123841,123842,123845],{"class":81,"line":178},[79,123843,123844],{"class":232},"  wifis",[79,123846,123828],{"class":228},[79,123848,123849,123852],{"class":81,"line":545},[79,123850,123851],{"class":232},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[79,123853,123828],{"class":228},[79,123855,123856,123859,123861,123864],{"class":81,"line":550},[79,123857,123858],{"class":232},"      renderer",[79,123860,53431],{"class":228},[79,123862,123863],{"class":89},"NetworkManager",[79,123865,4750],{"class":228},[79,123867,123868,123871],{"class":81,"line":562},[79,123869,123870],{"class":232},"      match",[79,123872,123828],{"class":228},[79,123874,123875,123878,123880,123883],{"class":81,"line":568},[79,123876,123877],{"class":232},"        name",[79,123879,53431],{"class":228},[79,123881,123882],{"class":89},"\"wlan0\"",[79,123884,4750],{"class":228},[79,123886,123887,123890,123892,123894],{"class":81,"line":574},[79,123888,123889],{"class":232},"      dhcp4",[79,123891,53431],{"class":228},[79,123893,3469],{"class":96},[79,123895,4750],{"class":228},[79,123897,123898,123901,123903,123905],{"class":81,"line":579},[79,123899,123900],{"class":232},"      dhcp6",[79,123902,53431],{"class":228},[79,123904,3469],{"class":96},[79,123906,4750],{"class":228},[79,123908,123909,123912],{"class":81,"line":585},[79,123910,123911],{"class":232},"      access-points",[79,123913,123828],{"class":228},[79,123915,123916,123919],{"class":81,"line":591},[79,123917,123918],{"class":89},"        \"EMIS_Vinci_Robocon_5G\"",[79,123920,123828],{"class":228},[79,123922,123923,123926],{"class":81,"line":596},[79,123924,123925],{"class":232},"          auth",[79,123927,123828],{"class":228},[79,123929,123930,123933,123935,123938],{"class":81,"line":602},[79,123931,123932],{"class":232},"            key-management",[79,123934,53431],{"class":228},[79,123936,123937],{"class":89},"\"psk\"",[79,123939,4750],{"class":228},[79,123941,123942,123945,123947,123950],{"class":81,"line":608},[79,123943,123944],{"class":232},"            password",[79,123946,53431],{"class":228},[79,123948,123949],{"class":89},"\"vinci666\"",[79,123951,4750],{"class":228},[79,123953,123954,123957],{"class":81,"line":614},[79,123955,123956],{"class":232},"          networkmanager",[79,123958,123828],{"class":228},[79,123960,123961,123964,123966,123969],{"class":81,"line":619},[79,123962,123963],{"class":232},"            uuid",[79,123965,53431],{"class":228},[79,123967,123968],{"class":89},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[79,123970,4750],{"class":228},[79,123972,123973,123976,123978,123981],{"class":81,"line":625},[79,123974,123975],{"class":232},"            name",[79,123977,53431],{"class":228},[79,123979,123980],{"class":89},"\"EMIS_Vinci_Robocon_5G\"",[79,123982,4750],{"class":228},[79,123984,123985,123988],{"class":81,"line":631},[79,123986,123987],{"class":232},"            passthrough",[79,123989,123828],{"class":228},[79,123991,123992,123995,123997,124000],{"class":81,"line":637},[79,123993,123994],{"class":232},"              wifi-security.auth-alg",[79,123996,53431],{"class":228},[79,123998,123999],{"class":89},"\"open\"",[79,124001,4750],{"class":228},[79,124003,124004,124007,124009,124012],{"class":81,"line":643},[79,124005,124006],{"class":232},"              ipv6.addr-gen-mode",[79,124008,53431],{"class":228},[79,124010,124011],{"class":89},"\"default\"",[79,124013,4750],{"class":228},[79,124015,124016,124019,124021,124024],{"class":81,"line":649},[79,124017,124018],{"class":232},"              ipv6.ip6-privacy",[79,124020,53431],{"class":228},[79,124022,124023],{"class":89},"\"-1\"",[79,124025,4750],{"class":228},[79,124027,124028,124031,124033,124035],{"class":81,"line":655},[79,124029,124030],{"class":232},"              proxy._",[79,124032,53431],{"class":228},[79,124034,9717],{"class":89},[79,124036,4750],{"class":228},[79,124038,124039,124042],{"class":81,"line":660},[79,124040,124041],{"class":232},"      networkmanager",[79,124043,123828],{"class":228},[79,124045,124046,124049,124051,124053],{"class":81,"line":666},[79,124047,124048],{"class":232},"        uuid",[79,124050,53431],{"class":228},[79,124052,123968],{"class":89},[79,124054,4750],{"class":228},[79,124056,124057,124059,124061],{"class":81,"line":672},[79,124058,123877],{"class":232},[79,124060,53431],{"class":228},[79,124062,124063],{"class":89},"\"EMIS_Vinci_Robocon_5G\"\n",[19,124065,124066],{},"将其改为新wifi的名和密码：",[51,124068,124070],{"className":123816,"code":124069,"language":123818,"meta":57,"style":57},"network:\n  version: 2\n  wifis:\n    wlan0:\n      dhcp4: true\n      dhcp6: true\n      access-points:\n        \"EMIS_Vinci_Robocon_5G\":\n          password: \"vinci666\"\n\n",[59,124071,124072,124078,124087,124093,124100,124109,124117,124123,124129],{"__ignoreMap":57},[79,124073,124074,124076],{"class":81,"line":82},[79,124075,123825],{"class":232},[79,124077,745],{"class":228},[79,124079,124080,124082,124084],{"class":81,"line":167},[79,124081,123833],{"class":232},[79,124083,53431],{"class":228},[79,124085,124086],{"class":96},"2\n",[79,124088,124089,124091],{"class":81,"line":178},[79,124090,123844],{"class":232},[79,124092,745],{"class":228},[79,124094,124095,124098],{"class":81,"line":545},[79,124096,124097],{"class":232},"    wlan0",[79,124099,745],{"class":228},[79,124101,124102,124104,124106],{"class":81,"line":550},[79,124103,123889],{"class":232},[79,124105,53431],{"class":228},[79,124107,124108],{"class":96},"true\n",[79,124110,124111,124113,124115],{"class":81,"line":562},[79,124112,123900],{"class":232},[79,124114,53431],{"class":228},[79,124116,124108],{"class":96},[79,124118,124119,124121],{"class":81,"line":568},[79,124120,123911],{"class":232},[79,124122,745],{"class":228},[79,124124,124125,124127],{"class":81,"line":574},[79,124126,123918],{"class":89},[79,124128,745],{"class":228},[79,124130,124131,124134,124136],{"class":81,"line":579},[79,124132,124133],{"class":232},"          password",[79,124135,53431],{"class":228},[79,124137,124138],{"class":89},"\"vinci666\"\n",[19,124140,124141],{},"工控机开机即可连上网。",[14,124143,124145],{"id":124144},"_72-ssh远程开发","7.2 SSH远程开发",[339,124147,124149],{"id":124148},"_721-环境准备","7.2.1 环境准备",[19,124151,124152],{},[2398,124153,124154],{},"1.硬件准备",[19,124156,124157],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,124159,124160],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,124162,124163],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,124165,124166],{},[2398,124167,124168],{},"2.设置固定IP",[19,124170,124171],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,124173,124174],{},"1.进入设置界面",[19,124176,124177],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,124179,124180],{},[3569,124181],{"alt":57,"src":124182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,124184,124185],{},"2.配置所连接的网络",[19,124187,124188],{},[3569,124189],{"alt":57,"src":124190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,124192,124193],{},"3.设置固定IP",[19,124195,124196],{},"查看当前IP地址。",[19,124198,124199],{},[3569,124200],{"alt":57,"src":124201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,124203,124204],{},"设置固定IP。",[19,124206,124207],{},[3569,124208],{"alt":57,"src":124209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,124211,124212],{},"至此，IP配置完毕。",[339,124214,124216],{"id":124215},"_722-环境搭建","7.2.2 环境搭建",[19,124218,124219],{},[2398,124220,27772],{},[19,124222,124223],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,124225,124226],{},[2398,124227,124228],{},"实现",[19,124230,124231],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[26,124233,124234,124237,124240,124243],{},[29,124235,124236],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[29,124238,124239],{},"远程主机启动SSH服务；",[29,124241,124242],{},"本地主机登陆远程主机；",[29,124244,124245],{},"实现数据传输。",[19,124247,124248],{},"1.安装SSH客户端与服务端",[19,124250,124251],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[51,124253,124255],{"className":122449,"code":124254,"language":122451,"meta":122452,"style":57}," sudo apt install openssh-server\n",[59,124256,124257],{"__ignoreMap":57},[79,124258,124259],{"class":81,"line":82},[79,124260,124254],{},[19,124262,124263],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[51,124265,124267],{"className":122449,"code":124266,"language":122451,"meta":122452,"style":57},"sudo apt install openssh-client\n",[59,124268,124269],{"__ignoreMap":57},[79,124270,124271],{"class":81,"line":82},[79,124272,124266],{},[19,124274,124275],{},"2.远程主机启动SSH服务",[19,124277,124278],{},"远程主机启动 ssh 服务命令如下：",[51,124280,124282],{"className":122449,"code":124281,"language":122451,"meta":122452,"style":57},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[59,124283,124284],{"__ignoreMap":57},[79,124285,124286],{"class":81,"line":82},[79,124287,124281],{},[19,124289,124290],{},"启动后可使用如下命令查看服务是否正常运行：",[51,124292,124294],{"className":122449,"code":124293,"language":122451,"meta":122452,"style":57},"ps -e | grep ssh\n",[59,124295,124296],{"__ignoreMap":57},[79,124297,124298],{"class":81,"line":82},[79,124299,124293],{},[19,124301,124302],{},"如果启动成功，会包含 sshd 程序。",[19,124304,124305],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[51,124307,124309],{"className":122449,"code":124308,"language":122451,"meta":122452,"style":57},"sudo systemctl enable ssh\n",[59,124310,124311],{"__ignoreMap":57},[79,124312,124313],{"class":81,"line":82},[79,124314,124308],{},[19,124316,124317],{},"3.本地远程登录",[19,124319,124320],{},"登录远程主机可以调用如下命令:",[51,124322,124324],{"className":118929,"code":124323,"language":118931,"meta":57,"style":57},"ssh -X 用户名@ip地址\n",[59,124325,124326],{"__ignoreMap":57},[79,124327,124328,124330,124333],{"class":81,"line":82},[79,124329,123280],{"class":85},[79,124331,124332],{"class":96}," -X",[79,124334,124335],{"class":89}," 用户名@ip地址\n",[19,124337,124338],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,124340,124341],{},"如果退出，可以调用exit命令：",[51,124343,124345],{"className":122449,"code":124344,"language":122451,"meta":122452,"style":57},"exit\n",[59,124346,124347],{"__ignoreMap":57},[79,124348,124349],{"class":81,"line":82},[79,124350,124344],{},[19,124352,124353],{},[2398,124354,124355],{},"4.实现数据传输",[19,124357,124358],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,124360,124361],{},"上传文件指令格式如下：",[51,124363,124365],{"className":122449,"code":124364,"language":122451,"meta":122452,"style":57},"scp 本地文件路径 账号@ip:路径\n",[59,124366,124367],{"__ignoreMap":57},[79,124368,124369],{"class":81,"line":82},[79,124370,124364],{},[19,124372,124373],{},"上传文件夹指令格式如下：",[51,124375,124377],{"className":122449,"code":124376,"language":122451,"meta":122452,"style":57},"scp -r 本地文件夹路径 账号@ip:路径\n",[59,124378,124379],{"__ignoreMap":57},[79,124380,124381],{"class":81,"line":82},[79,124382,124376],{},[19,124384,124385],{},"下载文件指令格式如下：",[51,124387,124389],{"className":122449,"code":124388,"language":122451,"meta":122452,"style":57},"scp 账号@ip:路径 本地文件夹路径\n",[59,124390,124391],{"__ignoreMap":57},[79,124392,124393],{"class":81,"line":82},[79,124394,124388],{},[19,124396,124397],{},"下载文件夹指令格式如下：",[51,124399,124401],{"className":122449,"code":124400,"language":122451,"meta":122452,"style":57},"scp -r 账号@ip:路径 本地文件夹路径\n",[59,124402,124403],{"__ignoreMap":57},[79,124404,124405],{"class":81,"line":82},[79,124406,124400],{},[19,124408,124409],{},[2398,124410,124411],{},"优化",[19,124413,124414],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[26,124416,124417,124420],{},[29,124418,124419],{},"本地生成密钥对；",[29,124421,124422],{},"将公钥上传至远程主机。",[19,124424,124425],{},[2398,124426,124427],{},"1.生成密钥对",[19,124429,124430],{},"本地客户端生成公私钥：（一路回车默认即可）",[51,124432,124434],{"className":122449,"code":124433,"language":122451,"meta":122452,"style":57},"ssh-keygen\n",[59,124435,124436],{"__ignoreMap":57},[79,124437,124438],{"class":81,"line":82},[79,124439,124433],{},[19,124441,124442],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[26,124444,124445,124448],{},[29,124446,124447],{},"id_rsa （私钥）；",[29,124449,124450],{},"id_rsa.pub (公钥)。",[19,124452,124453],{},[2398,124454,124455],{},"2.公钥上传",[19,124457,124458],{},"上传指令如下：",[51,124460,124462],{"className":122449,"code":124461,"language":122451,"meta":122452,"style":57},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[59,124463,124464],{"__ignoreMap":57},[79,124465,124466],{"class":81,"line":82},[79,124467,124461],{},[19,124469,124470],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,124472,124473],{},"以后再远程登录就无需录入密码了。",[339,124475,124477],{"id":124476},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,124479,124480],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,124482,124483],{},[2398,124484,124485],{},"1.准备工作",[19,124487,124488],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,124490,124491],{},[2398,124492,124493],{},"2.为VScode安装远程开发插件",[19,124495,124496,124497,124500,124501,124504,124505,497],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[59,124498,124499],{},"扩展：商店","的搜索栏输入",[59,124502,124503],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[59,124506,124507],{},"安装",[19,124509,124510],{},[3569,124511],{"alt":57,"src":124512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,124514,124515],{},[2398,124516,124517],{},"3.配置远程连接",[19,124519,124520,124521,124524,124525,124528],{},"步骤1：使用快捷键",[59,124522,124523],{},"ctrl + shift + p","打开命令输入窗口，并输入",[59,124526,124527],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,124530,124531],{},[3569,124532],{"alt":57,"src":124533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,124535,124536,124537,497],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[59,124538,124539],{},"Add New SSH Host",[19,124541,124542],{},[3569,124543],{"alt":57,"src":124544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,124546,124547,124548,124551,124552,124555,124556,124559],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[59,124549,124550],{},"ssh +X ubuntu@192.168.43.164","，其中，",[59,124553,124554],{},"ubuntu","需要替换为你的登录用户名，",[59,124557,124558],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,124561,124562],{},[3569,124563],{"alt":57,"src":124564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,124566,124567],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,124569,124570],{},[3569,124571],{"alt":57,"src":124572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,124574,124575],{},[3569,124576],{"alt":57,"src":124577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,124579,124580],{},[2398,124581,124582],{},"4.使用",[19,124584,124585,124586,124524,124588,124590],{},"步骤1：继续使用快捷键",[59,124587,124523],{},[59,124589,124527],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,124592,124593],{},[3569,124594],{"alt":57,"src":124595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,124597,124598,124599,124602],{},"或者，也可以点击侧边栏的",[59,124600,124601],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,124604,124605],{},[3569,124606],{"alt":57,"src":124607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,124609,124610,124611,124614,124615,124618],{},"步骤2：选择菜单栏的",[59,124612,124613],{},"文件","下的",[59,124616,124617],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,124620,124621],{},[3569,124622],{"alt":57,"src":124623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,124625,124626],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,124628,124630],{"id":124629},"_73-远程桌面","7.3 远程桌面",[19,124632,124633],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,124635,124636],{},"我们选择使用VNC来看。",[26,124638,124639],{},[29,124640,124641],{},"安装VNC服务器：",[19,124643,124644],{},"这里以TigerVNC为例进行安装：",[51,124646,124648],{"className":118929,"code":124647,"language":118931,"meta":57,"style":57},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[59,124649,124650],{"__ignoreMap":57},[79,124651,124652,124654,124656,124658,124661],{"class":81,"line":82},[79,124653,86],{"class":85},[79,124655,118950],{"class":89},[79,124657,93],{"class":89},[79,124659,124660],{"class":89}," tigervnc-standalone-server",[79,124662,124663],{"class":89}," tigervnc-common\n",[26,124665,124666],{"start":167},[29,124667,124668],{},"设置VNC密码：",[19,124670,124671],{},"为VNC用户设置密码，运行以下命令：",[51,124673,124675],{"className":118929,"code":124674,"language":118931,"meta":57,"style":57},"vncpasswd\n",[59,124676,124677],{"__ignoreMap":57},[79,124678,124679],{"class":81,"line":82},[79,124680,124674],{"class":85},[26,124682,124683],{"start":178},[29,124684,124685],{},"配置VNC启动脚本:",[19,124687,124688],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[51,124690,124692],{"className":118929,"code":124691,"language":118931,"meta":57,"style":57},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[59,124693,124694,124703],{"__ignoreMap":57},[79,124695,124696,124698,124700],{"class":81,"line":82},[79,124697,103229],{"class":85},[79,124699,31230],{"class":96},[79,124701,124702],{"class":89}," ~\u002F.vnc\n",[79,124704,124705,124708],{"class":81,"line":167},[79,124706,124707],{"class":85},"nano",[79,124709,124710],{"class":89}," ~\u002F.vnc\u002Fxstartup\n",[19,124712,124713],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[51,124715,124717],{"className":118929,"code":124716,"language":118931,"meta":57,"style":57},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[59,124718,124719,124724,124732,124739],{"__ignoreMap":57},[79,124720,124721],{"class":81,"line":82},[79,124722,124723],{"class":2313},"#!\u002Fbin\u002Fsh\n",[79,124725,124726,124729],{"class":81,"line":167},[79,124727,124728],{"class":96},"unset",[79,124730,124731],{"class":89}," SESSION_MANAGER\n",[79,124733,124734,124736],{"class":81,"line":178},[79,124735,124728],{"class":96},[79,124737,124738],{"class":89}," DBUS_SESSION_BUS_ADDRESS\n",[79,124740,124741],{"class":81,"line":545},[79,124742,124743],{"class":85},"gnome-session\n",[19,124745,124746],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[26,124748,124749],{"start":545},[29,124750,124751],{},"给予执行权限：",[19,124753,124754],{},"为xstartup文件设置执行权限：",[51,124756,124758],{"className":118929,"code":124757,"language":118931,"meta":57,"style":57},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[59,124759,124760],{"__ignoreMap":57},[79,124761,124762,124764,124767],{"class":81,"line":82},[79,124763,26631],{"class":85},[79,124765,124766],{"class":89}," +x",[79,124768,124710],{"class":89},[26,124770,124771],{"start":550},[29,124772,124773],{},"启动VNC服务器：",[51,124775,124777],{"className":118929,"code":124776,"language":118931,"meta":57,"style":57},"vncserver -geometry 1920x1080 -localhost=0\n",[59,124778,124779],{"__ignoreMap":57},[79,124780,124781,124784,124787,124790],{"class":81,"line":82},[79,124782,124783],{"class":85},"vncserver",[79,124785,124786],{"class":96}," -geometry",[79,124788,124789],{"class":89}," 1920x1080",[79,124791,124792],{"class":96}," -localhost=0\n",[19,124794,124795],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,124797,124798],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[26,124800,124801],{"start":562},[29,124802,124803],{},"查看已开启的VNC服务器：",[51,124805,124807],{"className":118929,"code":124806,"language":118931,"meta":57,"style":57},"vncserver -list\n",[59,124808,124809],{"__ignoreMap":57},[79,124810,124811,124813],{"class":81,"line":82},[79,124812,124783],{"class":85},[79,124814,124815],{"class":96}," -list\n",[19,124817,124818],{},[3569,124819],{"alt":57,"src":124820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[26,124822,124823],{"start":568},[29,124824,124825],{},"连接到VNC服务器：",[19,124827,124828],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[26,124830,124831],{"start":574},[29,124832,124833],{},"停止VNC服务器：",[19,124835,124836],{},"如果需要停止VNC服务器，可以使用以下命令：",[51,124838,124840],{"className":118929,"code":124839,"language":118931,"meta":57,"style":57},"vncserver -kill :1\n",[59,124841,124842],{"__ignoreMap":57},[79,124843,124844,124846,124849],{"class":81,"line":82},[79,124845,124783],{"class":85},[79,124847,124848],{"class":96}," -kill",[79,124850,124851],{"class":89}," :1\n",[19,124853,124854],{},"将:1替换为你实际使用的显示编号。",[19,124856,124857],{},[3569,124858],{"alt":57,"src":124859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,124861,124862],{},[3569,124863],{"alt":57,"src":124864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,124866,124868],{"id":124867},"_74-usb端口设置","7.4 USB端口设置",[19,124870,124871],{},[2398,124872,124873],{},"首先先配置好权限",[51,124875,124877],{"className":118929,"code":124876,"language":118931,"meta":57,"style":57},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[59,124878,124879,124884,124897,124904,124909],{"__ignoreMap":57},[79,124880,124881],{"class":81,"line":82},[79,124882,124883],{"class":2313},"# 将用户权限提高\n",[79,124885,124886,124888,124890,124892,124895],{"class":81,"line":167},[79,124887,86],{"class":85},[79,124889,28590],{"class":89},[79,124891,28593],{"class":96},[79,124893,124894],{"class":89}," dialout",[79,124896,28598],{"class":228},[79,124898,124899,124901],{"class":81,"line":178},[79,124900,28617],{"class":85},[79,124902,124903],{"class":89}," dialout\n",[79,124905,124906],{"class":81,"line":545},[79,124907,124908],{"class":2313},"# 查看下面命令是否输出dialout（若输出才正常）\n",[79,124910,124911],{"class":81,"line":550},[79,124912,124913],{"class":85},"groups\n",[19,124915,124916],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[339,124918,124920],{"id":124919},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,124922,124923,124926],{},[2398,124924,124925],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,124928,124929,124932],{},[2398,124930,124931],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,124934,124935],{},[2398,124936,124937],{},"流程如下：",[19,124939,124940],{},"（1）.查找设备idVendor和idProduct",[19,124942,124943,124944,124947],{},"接入两个USB设备，在终端调用指令",[59,124945,124946],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,124949,124950],{},[3569,124951],{"alt":57,"src":124952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,124954,124955,124956,124959],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[59,124957,124958],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,124961,124962],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,124964,124965],{},"（2）.编写映射规则",[19,124967,124968,124969,124972],{},"在",[59,124970,124971],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[51,124974,124976],{"className":118929,"code":124975,"language":118931,"meta":57,"style":57},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[59,124977,124978],{"__ignoreMap":57},[79,124979,124980,124982,124984],{"class":81,"line":82},[79,124981,86],{"class":85},[79,124983,120216],{"class":89},[79,124985,124986],{"class":89}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,124988,124989],{},"输入如下内容：",[51,124991,124993],{"className":118929,"code":124992,"language":118931,"meta":57,"style":57},"KERNEL==\"ttyUSB*\", ATTRS{idVendor}==\"10c4\", ATTRS{idProduct}==\"ea60\", MODE:=\"0777\", SYMLINK+=\"mylidar\"\nKERNEL==\"ttyUSB*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"7523\", MODE:=\"0777\", SYMLINK+=\"mycar\"\n",[59,124994,124995,125025],{"__ignoreMap":57},[79,124996,124997,125000,125002,125005,125008,125011,125014,125016,125019,125022],{"class":81,"line":82},[79,124998,124999],{"class":228},"KERNEL",[79,125001,239],{"class":448},[79,125003,125004],{"class":89},"=\"ttyUSB*\",",[79,125006,125007],{"class":85}," ATTRS",[79,125009,125010],{"class":89},"{idVendor}==",[79,125012,125013],{"class":85},"\"10c4\"",[79,125015,2621],{"class":85},[79,125017,125018],{"class":89}," ATTRS{idProduct}==\"ea60\",",[79,125020,125021],{"class":89}," MODE:=\"0777\",",[79,125023,125024],{"class":89}," SYMLINK+=\"mylidar\"\n",[79,125026,125027,125029,125031,125033,125035,125037,125040,125042,125045,125047],{"class":81,"line":167},[79,125028,124999],{"class":228},[79,125030,239],{"class":448},[79,125032,125004],{"class":89},[79,125034,125007],{"class":85},[79,125036,125010],{"class":89},[79,125038,125039],{"class":85},"\"1a86\"",[79,125041,2621],{"class":85},[79,125043,125044],{"class":89}," ATTRS{idProduct}==\"7523\",",[79,125046,125021],{"class":89},[79,125048,125049],{"class":89}," SYMLINK+=\"mycar\"\n",[19,125051,125052],{},"代码解释：",[3246,125054,125055,125058,125061,125064],{},[29,125056,125057],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[29,125059,125060],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[29,125062,125063],{},"SYMLINK是符号连接，即绑定的别名；",[29,125065,125066],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,125068,125069,125070,125073,125076],{},"***小提示：***",[25579,125071,125072],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[59,125074,125075],{},"\u002Fetc\u002Fudev\u002Frule.d",[25579,125077,125078],{},"目录即可。",[19,125080,125081],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,125083,125084],{},"（3）.使规则生效",[19,125086,125087],{},"在终端下输入如下指令：",[51,125089,125091],{"className":118929,"code":125090,"language":118931,"meta":57,"style":57},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[59,125092,125093,125098,125110,125121,125125,125130,125143],{"__ignoreMap":57},[79,125094,125095],{"class":81,"line":82},[79,125096,125097],{"class":2313},"# Ubuntu用下方命令\n",[79,125099,125100,125102,125104,125107],{"class":81,"line":167},[79,125101,86],{"class":85},[79,125103,121681],{"class":89},[79,125105,125106],{"class":89}," udev",[79,125108,125109],{"class":89}," reload\n",[79,125111,125112,125114,125116,125118],{"class":81,"line":178},[79,125113,86],{"class":85},[79,125115,121681],{"class":89},[79,125117,125106],{"class":89},[79,125119,125120],{"class":89}," restart\n",[79,125122,125123],{"class":81,"line":545},[79,125124,542],{"emptyLinePlaceholder":541},[79,125126,125127],{"class":81,"line":550},[79,125128,125129],{"class":2313},"#Fedora用下方命令\n",[79,125131,125132,125134,125137,125140],{"class":81,"line":562},[79,125133,86],{"class":85},[79,125135,125136],{"class":89}," udevadm",[79,125138,125139],{"class":89}," control",[79,125141,125142],{"class":96}," --reload\n",[79,125144,125145,125147,125149],{"class":81,"line":568},[79,125146,86],{"class":85},[79,125148,125136],{"class":89},[79,125150,125151],{"class":89}," trigger\n",[19,125153,125154],{},"再重新插拔设备即可。",[19,125156,125157],{},"（4）.测试",[19,125159,125160],{},"终端下输入如下指令",[51,125162,125164],{"className":118929,"code":125163,"language":118931,"meta":57,"style":57},"ll \u002Fdev | grep ttyUSB\n",[59,125165,125166],{"__ignoreMap":57},[79,125167,125168,125171,125174,125176,125178],{"class":81,"line":82},[79,125169,125170],{"class":85},"ll",[79,125172,125173],{"class":89}," \u002Fdev",[79,125175,27129],{"class":448},[79,125177,32250],{"class":85},[79,125179,125180],{"class":89}," ttyUSB\n",[19,125182,125183],{},"运行结果如下：",[19,125185,125186],{},[3569,125187],{"alt":57,"src":125188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,125190,125191,125192,125195],{},"也可以多次插拔USB设备，会发现设备端口",[59,125193,125194],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,125197,125198],{},[2398,125199,119597],{},[19,125201,125202],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[339,125204,125206],{"id":125205},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,125208,125209,125211],{},[2398,125210,124925],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,125213,125214,125216],{},[2398,125215,124931],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,125218,125219],{},[2398,125220,124937],{},[19,125222,125223],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,125225,125226],{},"调用如下指令查看第一台雷达的USB信息：",[51,125228,125230],{"className":118929,"code":125229,"language":118931,"meta":57,"style":57},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[59,125231,125232,125252],{"__ignoreMap":57},[79,125233,125234,125237,125239,125242,125245,125247,125249],{"class":81,"line":82},[79,125235,125236],{"class":85},"udevadm",[79,125238,71809],{"class":89},[79,125240,125241],{"class":96}," --attribute-walk",[79,125243,125244],{"class":96}," --name=\u002Fdev\u002FttyUSB0",[79,125246,27129],{"class":448},[79,125248,32250],{"class":85},[79,125250,125251],{"class":89}," KERNELS\n",[79,125253,125254,125256,125258,125260,125263,125265,125267],{"class":81,"line":167},[79,125255,125236],{"class":85},[79,125257,71809],{"class":89},[79,125259,125241],{"class":96},[79,125261,125262],{"class":96}," --name=\u002Fdev\u002FttyACM0",[79,125264,27129],{"class":448},[79,125266,32250],{"class":85},[79,125268,125251],{"class":89},[19,125270,125271],{},[3569,125272],{"alt":57,"src":125273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,125275,125276],{},"调用如下指令查看第二台雷达的USB信息：",[51,125278,125280],{"className":118929,"code":125279,"language":118931,"meta":57,"style":57},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[59,125281,125282],{"__ignoreMap":57},[79,125283,125284,125286,125288,125290,125293,125295,125297],{"class":81,"line":82},[79,125285,125236],{"class":85},[79,125287,71809],{"class":89},[79,125289,125241],{"class":96},[79,125291,125292],{"class":96}," --name=\u002Fdev\u002FttyUSB1",[79,125294,27129],{"class":448},[79,125296,32250],{"class":85},[79,125298,125251],{"class":89},[19,125300,125301,125302,125305,125306,125309,125310,125313],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[59,125303,125304],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[59,125307,125308],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[2398,125311,125312],{},"唯一性标识","”。",[19,125315,124965],{},[19,125317,124968,125318,125320],{},[59,125319,124971],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[51,125322,125323],{"className":118929,"code":124975,"language":118931,"meta":57,"style":57},[59,125324,125325],{"__ignoreMap":57},[79,125326,125327,125329,125331],{"class":81,"line":82},[79,125328,86],{"class":85},[79,125330,120216],{"class":89},[79,125332,124986],{"class":89},[51,125334,125336],{"className":118929,"code":125335,"language":118931,"meta":57,"style":57},"KERNEL==\"ttyUSB*\", KERNELS==\"1-1.3:1.0\", MODE:=\"0777\", SYMLINK+=\"rplidar_front\"\nKERNEL==\"ttyUSB*\", KERNELS==\"1-1.4:1.0\", MODE:=\"0777\", SYMLINK+=\"rplidar_back\"\n",[59,125337,125338,125367],{"__ignoreMap":57},[79,125339,125340,125342,125344,125346,125349,125351,125354,125357,125359,125362,125364],{"class":81,"line":82},[79,125341,124999],{"class":228},[79,125343,239],{"class":448},[79,125345,125004],{"class":89},[79,125347,125348],{"class":228}," KERNELS",[79,125350,239],{"class":448},[79,125352,125353],{"class":89},"=\"1-1.3:1.0\",",[79,125355,125356],{"class":85}," MODE:",[79,125358,239],{"class":89},[79,125360,125361],{"class":85},"\"0777\"",[79,125363,2621],{"class":85},[79,125365,125366],{"class":89}," SYMLINK+=\"rplidar_front\"\n",[79,125368,125369,125371,125373,125375,125377,125379,125382,125384,125386,125388,125390],{"class":81,"line":167},[79,125370,124999],{"class":228},[79,125372,239],{"class":448},[79,125374,125004],{"class":89},[79,125376,125348],{"class":228},[79,125378,239],{"class":448},[79,125380,125381],{"class":89},"=\"1-1.4:1.0\",",[79,125383,125356],{"class":85},[79,125385,239],{"class":89},[79,125387,125361],{"class":85},[79,125389,2621],{"class":85},[79,125391,125392],{"class":89}," SYMLINK+=\"rplidar_back\"\n",[19,125394,125084],{},[19,125396,125087],{},[51,125398,125399],{"className":118929,"code":125090,"language":118931,"meta":57,"style":57},[59,125400,125401,125405,125415,125425,125429,125433,125443],{"__ignoreMap":57},[79,125402,125403],{"class":81,"line":82},[79,125404,125097],{"class":2313},[79,125406,125407,125409,125411,125413],{"class":81,"line":167},[79,125408,86],{"class":85},[79,125410,121681],{"class":89},[79,125412,125106],{"class":89},[79,125414,125109],{"class":89},[79,125416,125417,125419,125421,125423],{"class":81,"line":178},[79,125418,86],{"class":85},[79,125420,121681],{"class":89},[79,125422,125106],{"class":89},[79,125424,125120],{"class":89},[79,125426,125427],{"class":81,"line":545},[79,125428,542],{"emptyLinePlaceholder":541},[79,125430,125431],{"class":81,"line":550},[79,125432,125129],{"class":2313},[79,125434,125435,125437,125439,125441],{"class":81,"line":562},[79,125436,86],{"class":85},[79,125438,125136],{"class":89},[79,125440,125139],{"class":89},[79,125442,125142],{"class":96},[79,125444,125445,125447,125449],{"class":81,"line":568},[79,125446,86],{"class":85},[79,125448,125136],{"class":89},[79,125450,125151],{"class":89},[19,125452,125154],{},[19,125454,125157],{},[19,125456,125160,125457,125460],{},[59,125458,125459],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,125462,125463],{},[3569,125464],{"alt":57,"src":125465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,125467,125468],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,125470,125471,125473],{},[2398,125472,119597],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[339,125475,125477],{"id":125476},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,125479,125480],{},"（1）.查看所连接的主机USB接口的信息",[51,125482,125484],{"className":118929,"code":125483,"language":118931,"meta":57,"style":57},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[59,125485,125486,125516],{"__ignoreMap":57},[79,125487,125488,125490,125492,125495,125497,125499,125501,125503,125506,125509,125511,125514],{"class":81,"line":82},[79,125489,125236],{"class":85},[79,125491,71809],{"class":89},[79,125493,125494],{"class":96}," -a",[79,125496,31230],{"class":96},[79,125498,30437],{"class":228},[79,125500,125236],{"class":85},[79,125502,71809],{"class":89},[79,125504,125505],{"class":96}," -q",[79,125507,125508],{"class":89}," path",[79,125510,152],{"class":96},[79,125512,125513],{"class":89}," \u002Fdev\u002FttyACM0",[79,125515,850],{"class":228},[79,125517,125518,125520,125522,125524,125526,125528,125530,125532,125534,125536,125538,125541],{"class":81,"line":167},[79,125519,125236],{"class":85},[79,125521,71809],{"class":89},[79,125523,125494],{"class":96},[79,125525,31230],{"class":96},[79,125527,30437],{"class":228},[79,125529,125236],{"class":85},[79,125531,71809],{"class":89},[79,125533,125505],{"class":96},[79,125535,125508],{"class":89},[79,125537,152],{"class":96},[79,125539,125540],{"class":89}," \u002Fdev\u002FttyUSB0",[79,125542,850],{"class":228},[19,125544,125545],{},[3569,125546],{"alt":57,"src":125547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,125549,125550],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,125552,124965],{},[19,125554,124968,125555,125320],{},[59,125556,124971],{},[51,125558,125559],{"className":118929,"code":124975,"language":118931,"meta":57,"style":57},[59,125560,125561],{"__ignoreMap":57},[79,125562,125563,125565,125567],{"class":81,"line":82},[79,125564,86],{"class":85},[79,125566,120216],{"class":89},[79,125568,124986],{"class":89},[51,125570,125572],{"className":118929,"code":125571,"language":118931,"meta":57,"style":57},"KERNEL==\"ttyACM*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"55d4\", ATTRS{serial}==\"0001\", MODE:=\"0777\", SYMLINK+=\"ttyACM_MCU\"\nKERNEL==\"ttyACM*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"55d4\", ATTRS{serial}==\"0002\", MODE:=\"0777\", SYMLINK+=\"ttyACM_Lidar\"\nKERNEL==\"ttyUSB*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"7523\", MODE:=\"0777\", SYMLINK+=\"ttyUSB_IMU\"\n",[59,125573,125574,125602,125628],{"__ignoreMap":57},[79,125575,125576,125578,125580,125583,125585,125587,125589,125591,125594,125597,125599],{"class":81,"line":82},[79,125577,124999],{"class":228},[79,125579,239],{"class":448},[79,125581,125582],{"class":89},"=\"ttyACM*\",",[79,125584,125007],{"class":85},[79,125586,125010],{"class":89},[79,125588,125039],{"class":85},[79,125590,2621],{"class":85},[79,125592,125593],{"class":89}," ATTRS{idProduct}==\"55d4\",",[79,125595,125596],{"class":89}," ATTRS{serial}==\"0001\",",[79,125598,125021],{"class":89},[79,125600,125601],{"class":89}," SYMLINK+=\"ttyACM_MCU\"\n",[79,125603,125604,125606,125608,125610,125612,125614,125616,125618,125620,125623,125625],{"class":81,"line":167},[79,125605,124999],{"class":228},[79,125607,239],{"class":448},[79,125609,125582],{"class":89},[79,125611,125007],{"class":85},[79,125613,125010],{"class":89},[79,125615,125039],{"class":85},[79,125617,2621],{"class":85},[79,125619,125593],{"class":89},[79,125621,125622],{"class":89}," ATTRS{serial}==\"0002\",",[79,125624,125021],{"class":89},[79,125626,125627],{"class":89}," SYMLINK+=\"ttyACM_Lidar\"\n",[79,125629,125630,125632,125634,125636,125638,125640,125642,125644,125646,125648],{"class":81,"line":178},[79,125631,124999],{"class":228},[79,125633,239],{"class":448},[79,125635,125004],{"class":89},[79,125637,125007],{"class":85},[79,125639,125010],{"class":89},[79,125641,125039],{"class":85},[79,125643,2621],{"class":85},[79,125645,125044],{"class":89},[79,125647,125021],{"class":89},[79,125649,125650],{"class":89}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,125652,125084],{},[19,125654,125087],{},[51,125656,125657],{"className":118929,"code":125090,"language":118931,"meta":57,"style":57},[59,125658,125659,125663,125673,125683,125687,125691,125701],{"__ignoreMap":57},[79,125660,125661],{"class":81,"line":82},[79,125662,125097],{"class":2313},[79,125664,125665,125667,125669,125671],{"class":81,"line":167},[79,125666,86],{"class":85},[79,125668,121681],{"class":89},[79,125670,125106],{"class":89},[79,125672,125109],{"class":89},[79,125674,125675,125677,125679,125681],{"class":81,"line":178},[79,125676,86],{"class":85},[79,125678,121681],{"class":89},[79,125680,125106],{"class":89},[79,125682,125120],{"class":89},[79,125684,125685],{"class":81,"line":545},[79,125686,542],{"emptyLinePlaceholder":541},[79,125688,125689],{"class":81,"line":550},[79,125690,125129],{"class":2313},[79,125692,125693,125695,125697,125699],{"class":81,"line":562},[79,125694,86],{"class":85},[79,125696,125136],{"class":89},[79,125698,125139],{"class":89},[79,125700,125142],{"class":96},[79,125702,125703,125705,125707],{"class":81,"line":568},[79,125704,86],{"class":85},[79,125706,125136],{"class":89},[79,125708,125151],{"class":89},[19,125710,125711,125712],{},"再重新插拔设备即可，或者 ",[2398,125713,125714],{},"直接重启系统。",[19,125716,125157],{},[19,125718,125160,125719,125460],{},[59,125720,125459],{},[19,125722,125723],{},[3569,125724],{"alt":57,"src":125725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,125727,125468],{},[19,125729,125730,125732],{},[2398,125731,119597],{}," 一些设备可能没有串口号等。",[339,125734,125736],{"id":125735},"_744-其他注意事项","7.4.4 其他注意事项",[19,125738,125739,125740,125742,125743,125746,125747,20435,125750,125753,125754,125756],{},"并非所有的USB设备端口号都是",[59,125741,125194],{},"的格式，比如Arduino的端口号可能是",[59,125744,125745],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[59,125748,125749],{},"videon",[59,125751,125752],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[59,125755,125749],{},"端口，绑定时需要关联的也是该接口。",[19,125758,125759,125760,125763,125764,125767,125768,125770,125771,125774,125775,125778,125779,125782,125783,125782,125786,125782,125789,497],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[59,125761,125762],{},"KERNEL==\"ttyUSB*\"","修改为",[59,125765,125766],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[59,125769,125762],{},"修改为类似于",[59,125772,125773],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[59,125776,125777],{},"video[0,2,4,6]","表示可以绑定的端口为",[59,125780,125781],{},"video0","或",[59,125784,125785],{},"video2",[59,125787,125788],{},"video4",[59,125790,125791],{},"video6",[14,125793,125795],{"id":125794},"_75-挂载内网网页","7.5 挂载内网网页",[19,125797,125798],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,125800,125801],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,125803,125804],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,125806,125807,125808],{},"Termux 下载地址（F-Droid）：",[2482,125809,125810],{"href":125810,"rel":125811},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[25885],[19,125813,125814],{},"首先打开app后，先更新软件缓存：",[51,125816,125818],{"className":118929,"code":125817,"language":118931,"meta":57,"style":57},"pkg update\n",[59,125819,125820],{"__ignoreMap":57},[79,125821,125822,125825],{"class":81,"line":82},[79,125823,125824],{"class":85},"pkg",[79,125826,28260],{"class":89},[19,125828,125829],{},"然后换源",[51,125831,125833],{"className":118929,"code":125832,"language":118931,"meta":57,"style":57},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[59,125834,125835],{"__ignoreMap":57},[79,125836,125837,125839,125842],{"class":81,"line":82},[79,125838,124707],{"class":85},[79,125840,125841],{"class":228}," $PREFIX",[79,125843,125844],{"class":89},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,125846,125847],{},"将该文件内容替换为下面：",[51,125849,125851],{"className":118929,"code":125850,"language":118931,"meta":57,"style":57},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[59,125852,125853],{"__ignoreMap":57},[79,125854,125855,125858,125861,125864],{"class":81,"line":82},[79,125856,125857],{"class":85},"deb",[79,125859,125860],{"class":89}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[79,125862,125863],{"class":89}," stable",[79,125865,125866],{"class":89}," main\n",[3246,125868,125869,125896],{},[29,125870,125871,125872,125874,125875],{},"如果你使用的是",[59,125873,124707],{},"编辑器：",[3246,125876,125877,125884,125890],{},[29,125878,125879,125880,125883],{},"按 ",[59,125881,125882],{},"Ctrl+O"," 保存文件。",[29,125885,125879,125886,125889],{},[59,125887,125888],{},"Enter"," 确认文件名。",[29,125891,125879,125892,125895],{},[59,125893,125894],{},"Ctrl+X"," 退出编辑器。",[29,125897,125871,125898,125874,125901],{},[59,125899,125900],{},"vim",[3246,125902,125903,125909],{},[29,125904,125879,125905,125908],{},[59,125906,125907],{},"Esc"," 退出编辑模式。",[29,125910,125911,125912,125914],{},"输入 ",[59,125913,120854],{}," 保存并退出。",[19,125916,125917],{},"接下来重新更新软件源：",[51,125919,125921],{"className":118929,"code":125920,"language":118931,"meta":57,"style":57},"pkg update && pkg upgrade\n",[59,125922,125923],{"__ignoreMap":57},[79,125924,125925,125927,125929,125931,125933],{"class":81,"line":82},[79,125926,125824],{"class":85},[79,125928,118980],{"class":89},[79,125930,28208],{"class":228},[79,125932,125824],{"class":85},[79,125934,118966],{"class":89},[19,125936,125937],{},"安装python：",[51,125939,125941],{"className":118929,"code":125940,"language":118931,"meta":57,"style":57},"pkg install python\n",[59,125942,125943],{"__ignoreMap":57},[79,125944,125945,125947,125949],{"class":81,"line":82},[79,125946,125824],{"class":85},[79,125948,93],{"class":89},[79,125950,125951],{"class":89}," python\n",[19,125953,125954,28489],{},[2398,125955,125956],{},"通过Termux访问设备存储",[19,125958,125959],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[51,125961,125963],{"className":118929,"code":125962,"language":118931,"meta":57,"style":57},"termux-setup-storage\n",[59,125964,125965],{"__ignoreMap":57},[79,125966,125967],{"class":81,"line":82},[79,125968,125962],{"class":85},[26,125970,125971],{},[29,125972,125973,28489,125976],{},[2398,125974,125975],{},"进入HTML文件所在的目录",[26,125977,125978],{},[29,125979,125980,125981,125983],{},"使用",[59,125982,103239],{},"命令进入HTML文件所在的目录：",[51,125985,125987],{"className":118929,"code":125986,"language":118931,"meta":57,"style":57},"cd ~\u002Fyour_html_folder\n",[59,125988,125989],{"__ignoreMap":57},[79,125990,125991,125993],{"class":81,"line":82},[79,125992,103239],{"class":96},[79,125994,125995],{"class":89}," ~\u002Fyour_html_folder\n",[26,125997,125998],{"start":167},[29,125999,126000,28489,126003,126008,126025],{},[2398,126001,126002],{},"启动Python HTTP服务器",[26,126004,126005],{},[29,126006,126007],{},"运行以下命令启动一个简单的HTTP服务器：",[51,126009,126011],{"className":118929,"code":126010,"language":118931,"meta":57,"style":57},"python -m http.server 8000\n",[59,126012,126013],{"__ignoreMap":57},[79,126014,126015,126017,126019,126022],{"class":81,"line":82},[79,126016,441],{"class":85},[79,126018,102860],{"class":96},[79,126020,126021],{"class":89}," http.server",[79,126023,126024],{"class":96}," 8000\n",[26,126026,126027],{"start":178},[29,126028,126029,126030,126033],{},"这会在端口",[59,126031,126032],{},"8000","上启动一个Web服务器。",[3246,126035,126036],{},[29,126037,126038],{},"启动服务器后，Termux会显示日志信息，例如：",[51,126040,126042],{"className":122449,"code":126041,"language":122451,"meta":122452,"style":57},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[59,126043,126044],{"__ignoreMap":57},[79,126045,126046],{"class":81,"line":82},[79,126047,126041],{},[3246,126049,126050],{},[29,126051,126052],{},"这表示服务器已成功启动。",[19,126054,126055],{},[2398,126056,126057],{},"在浏览器中访问HTML文件",[26,126059,126060],{},[29,126061,126062,28489,126065,126070],{},[2398,126063,126064],{},"在同一设备上访问",[26,126066,126067],{},[29,126068,126069],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[51,126071,126074],{"className":126072,"code":126073,"language":73652,"meta":57,"style":57},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[59,126075,126076],{"__ignoreMap":57},[79,126077,126078,126081],{"class":81,"line":82},[79,126079,126080],{"class":228},"http:",[79,126082,126083],{"class":2313},"\u002F\u002Flocalhost:8000\n",[3246,126085,126086],{},[29,126087,126088,126089,126092],{},"如果HTML文件中有",[59,126090,126091],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,126094,126096],{"id":126095},"_76-linux重点知识","7.6 Linux重点知识",[339,126098,126100],{"id":126099},"_761-关于点的说明","7.6.1 关于点的说明",[19,126102,126103],{},[3569,126104],{"alt":57,"src":126105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,126107,126108],{},"一点本目录，两点上目录",[339,126110,126112],{"id":126111},"_762-目录","7.6.2 目录",[24023,126114,126116],{"id":126115},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,126118,126119],{},[2398,126120,126121],{},"\u002Fboot:",[19,126123,126124],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,126126,126127],{},[2398,126128,126129],{},"\u002Fetc:",[19,126131,126132],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,126134,126135],{},[2398,126136,126137],{},"\u002Flib：",[19,126139,126140],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,126142,126143],{},[2398,126144,126145],{},"\u002Fsys:",[19,126147,126148],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[24023,126150,126152],{"id":126151},"_7622-指令集合","7.6.2.2 指令集合",[19,126154,126155],{},[2398,126156,126157],{},"\u002Fbin:",[19,126159,126160],{},"为二进制文件的缩写，存放最经常使用的命令",[19,126162,126163],{},[2398,126164,126165],{},"\u002Fsbin:",[19,126167,126168],{},"只有系统管理员才能使用的程序和指令",[24023,126170,126172],{"id":126171},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,126174,126175],{},[2398,126176,126177],{},"\u002Fdev:",[19,126179,126180],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,126182,126183],{},[2398,126184,126185],{},"\u002Fmedia:",[19,126187,126188],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,126190,126191],{},[2398,126192,126193],{},"\u002Fmnt:",[19,126195,126196],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[24023,126198,126200],{"id":126199},"_7624-临时文件","7.6.2.4 临时文件",[19,126202,126203],{},[2398,126204,126205],{},"\u002Frun:",[19,126207,126208],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,126210,126211],{},[2398,126212,126213],{},"\u002Flost+found:",[19,126215,126216],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,126218,126219],{},[2398,126220,126221],{},"\u002Ftmp:",[19,126223,126224],{},"这个目录是用来存放一些临时文件的",[24023,126226,126228],{"id":126227},"_7625-账户","7.6.2.5 账户",[19,126230,126231],{},[2398,126232,126233],{},"\u002Froot：",[19,126235,126236],{},"系统管理员的用户主目录",[19,126238,126239,28489],{},[2398,126240,126241],{},"\u002Fhome",[19,126243,126244],{},"用户的主目录，以用户的账号命名的",[19,126246,126247,28489],{},[2398,126248,126249],{},"\u002Fusr",[19,126251,126252],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,126254,126255],{},[2398,126256,126257],{},"\u002Fusr\u002Fbin：",[19,126259,126260],{},"系统用户使用的应用程序与指令",[19,126262,126263],{},[2398,126264,126265],{},"\u002Fusr\u002Fsbin：",[19,126267,126268],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,126270,126271],{},[2398,126272,126273],{},"\u002Fusr\u002Fsrc：",[19,126275,126276],{},"内核源代码默认的放置目录",[24023,126278,126280],{"id":126279},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,126282,126283],{},[2398,126284,126285],{},"\u002Fvar：",[19,126287,126288],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,126290,126291],{},[2398,126292,126293],{},"\u002Fproc:",[19,126295,126296,126297,126300],{},"管理 ",[2398,126298,126299],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[24023,126302,126304],{"id":126303},"_7627-扩展用的","7.6.2.7 扩展用的",[19,126306,126307],{},[2398,126308,126309],{},"\u002Fopt:",[19,126311,126312],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,126314,126315],{},[2398,126316,126317],{},"\u002Fsrv:",[19,126319,126320],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[339,126322,126324],{"id":126323},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,126326,126327],{},[3569,126328],{"alt":57,"src":126329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,126331,126332],{},"windows-->linux:",[19,126334,126335],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,126337,126338],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,126340,126341],{},"linux传输文件到windows",[19,126343,126344],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[339,126346,126348],{"id":126347},"_764-易忘知识","7.6.4 易忘知识",[19,126350,126351],{},"操作系统内核查看",[51,126353,126354],{"className":118929,"code":122923,"language":118931,"meta":57,"style":57},[59,126355,126356],{"__ignoreMap":57},[79,126357,126358,126360],{"class":81,"line":82},[79,126359,72192],{"class":85},[79,126361,122932],{"class":96},[19,126363,126364],{},[3569,126365],{"alt":57,"src":126366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,126368,126369],{},[3569,126370],{"alt":57,"src":126371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[51,126373,126375],{"className":118929,"code":126374,"language":118931,"meta":57,"style":57},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[59,126376,126377,126389],{"__ignoreMap":57},[79,126378,126379,126381,126384,126387],{"class":81,"line":82},[79,126380,123140],{"class":85},[79,126382,126383],{"class":89}," mvtest",[79,126385,126386],{"class":89}," mvtest2",[79,126388,4750],{"class":228},[79,126390,126391],{"class":81,"line":167},[79,126392,126393],{"class":85},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,126395,126396],{},[3569,126397],{"alt":57,"src":126398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,126400,126401],{},[3569,126402],{"alt":57,"src":126403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,126405,126406,126407,126410],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[59,126408,126409],{},"du -a"," 可以快速查看磁盘使用细节。",[339,126412,126414],{"id":126413},"_765-vim","7.6.5 Vim",[19,126416,126417],{},[3569,126418],{"alt":57,"src":126419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,126421,126422],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,126424,126425],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,126427,126428],{},[2398,126429,126430],{},"1.命令模式：",[19,126432,126433],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,126435,126436],{},"x 删除当前光标所在处的字符",[19,126438,126439],{},"：切换到底线命令模式，以在最底一行输入命令",[19,126441,126442],{},"a 进行插入模式，在光标下一个位置输入文本",[19,126444,126445],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,126447,126448],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,126450,126451],{},"dd 剪切当前行",[19,126453,126454],{},"yy 复制当前行",[19,126456,126457],{},"p 粘贴剪贴板内容到光标下方",[19,126459,126460],{},"P 粘贴剪贴板内容到光标上方",[19,126462,126463],{},"u 撤销上一次操作",[19,126465,126466],{},"ctrl+r 重做上一次操作",[19,126468,126469,126471],{},[3035,126470],{}," 保存文件",[19,126473,126474,126476],{},[2885,126475],{}," 退出Vim编辑器",[19,126478,126479,126481],{},[2885,126480],{},"! 强制退出Vim编辑器，不保存修改",[19,126483,126484],{},[2398,126485,126486],{},"2.输入模式：",[19,126488,126489],{},[3569,126490],{"alt":57,"src":126491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,126493,126494],{},[2398,126495,126496],{},"3.底线命令模式：",[19,126498,126499],{},[3569,126500],{"alt":57,"src":126501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,126503,126504],{},"按下esc可以退出底线命令模式",[339,126506,126508],{"id":126507},"_766-apt","7.6.6 apt",[19,126510,126511],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[339,126513,126515],{"id":126514},"_767-home与root的区别","7.6.7 home与root的区别",[19,126517,126518],{},[3569,126519],{"alt":57,"src":126520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,126522,126523],{},[3569,126524],{"alt":57,"src":126525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,126527,126528],{},[3569,126529],{"alt":57,"src":126530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,126532,126533],{},[3569,126534],{"alt":57,"src":126535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[339,126537,126539],{"id":126538},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,126541,126542],{},[2482,126543,126544],{"href":126544,"rel":126545},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[25885],[26,126547,126548,126551],{},[29,126549,126550],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[29,126552,126553],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,126555,126556],{},[3569,126557],{"alt":57,"src":126558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,126560,126561],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,126563,126564],{},[3569,126565],{"alt":57,"src":126566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[51,126568,126570],{"className":122449,"code":126569,"language":122451,"meta":122452,"style":57},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[59,126571,126572,126577],{"__ignoreMap":57},[79,126573,126574],{"class":81,"line":82},[79,126575,126576],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[79,126578,126579],{"class":81,"line":167},[79,126580,126581],{},".\u002Fpycharm.sh\n",[19,126583,126584],{},"3️⃣创建.desktop文件",[19,126586,126587],{},[2398,126588,126589],{},"原理：",[3246,126591,126592,126602],{},[29,126593,126594,126595,126601],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[2398,126596,126597,126600],{},[59,126598,126599],{},".desktop"," 文件"," 来识别应用。",[29,126603,126604,126606,126607],{},[59,126605,126599],{}," 文件相当于一个“应用注册表”，告诉系统：",[3246,126608,126609,126612,126615,126618,126621],{},[29,126610,126611],{},"应用名字（Name）",[29,126613,126614],{},"图标（Icon）",[29,126616,126617],{},"执行命令（Exec）",[29,126619,126620],{},"分类（Categories）",[29,126622,126623],{},"是否需要终端（Terminal）",[51,126625,126627],{"className":122449,"code":126626,"language":122451,"meta":122452,"style":57},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[59,126628,126629,126634],{"__ignoreMap":57},[79,126630,126631],{"class":81,"line":82},[79,126632,126633],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[79,126635,126636],{"class":81,"line":167},[79,126637,126638],{},"nano pycharm.desktop\n",[19,126640,126641],{},"nano是一个命令行下的编辑器，也可以使用vim",[51,126643,126645],{"className":122449,"code":126644,"language":122451,"meta":122452,"style":57},"[Desktop Entry]\nVersion=1.0\nType=Application\nName=PyCharm\nIcon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\nExec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\nComment=JetBrains PyCharm IDE\nCategories=Development;IDE;\nTerminal=false\nStartupWMClass=jetbrains-pycharm\n",[59,126646,126647,126652,126657,126662,126667,126672,126677,126682,126687,126692],{"__ignoreMap":57},[79,126648,126649],{"class":81,"line":82},[79,126650,126651],{},"[Desktop Entry]\n",[79,126653,126654],{"class":81,"line":167},[79,126655,126656],{},"Version=1.0\n",[79,126658,126659],{"class":81,"line":178},[79,126660,126661],{},"Type=Application\n",[79,126663,126664],{"class":81,"line":545},[79,126665,126666],{},"Name=PyCharm\n",[79,126668,126669],{"class":81,"line":550},[79,126670,126671],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[79,126673,126674],{"class":81,"line":562},[79,126675,126676],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[79,126678,126679],{"class":81,"line":568},[79,126680,126681],{},"Comment=JetBrains PyCharm IDE\n",[79,126683,126684],{"class":81,"line":574},[79,126685,126686],{},"Categories=Development;IDE;\n",[79,126688,126689],{"class":81,"line":579},[79,126690,126691],{},"Terminal=false\n",[79,126693,126694],{"class":81,"line":585},[79,126695,126696],{},"StartupWMClass=jetbrains-pycharm\n",[3246,126698,126699,126705,126711,126717],{},[29,126700,126701,126704],{},[59,126702,126703],{},"Exec"," → 点击图标时执行的命令",[29,126706,126707,126710],{},[59,126708,126709],{},"Icon"," → 显示在菜单和桌面上的图标",[29,126712,126713,126716],{},[59,126714,126715],{},"Terminal=false"," → 不打开终端",[29,126718,126719,126722],{},[59,126720,126721],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[126724,126725,126726],"blockquote",{},[19,126727,126728,126729,126731,126732],{},"可以理解成 ",[59,126730,126599],{}," 文件是 Linux 的 ",[2398,126733,126734],{},"快捷方式配置文件",[19,126736,126737],{},"4️⃣设置可执行权限",[51,126739,126741],{"className":122449,"code":126740,"language":122451,"meta":122452,"style":57},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[59,126742,126743],{"__ignoreMap":57},[79,126744,126745],{"class":81,"line":82},[79,126746,126740],{},[19,126748,126749],{},"5️⃣桌面图标启动的话如下：",[51,126751,126753],{"className":122449,"code":126752,"language":122451,"meta":122452,"style":57},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[59,126754,126755,126760],{"__ignoreMap":57},[79,126756,126757],{"class":81,"line":82},[79,126758,126759],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[79,126761,126762],{"class":81,"line":167},[79,126763,126764],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[26,126766,126767],{"start":178},[29,126768,126769],{},"下载Appimage文件实现软件的安装",[19,126771,126772],{},"1️⃣先下载appimage",[19,126774,126775],{},[2482,126776,126777],{"href":126777,"rel":126778},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[25885],[19,126780,126781],{},[3569,126782],{"alt":57,"src":126783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,126785,126786],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,126788,126789],{},[3569,126790],{"alt":57,"src":126791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,126793,126794],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,126796,126797],{},[3569,126798],{"alt":57,"src":126799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,126801,126802],{},[3569,126803],{"alt":57,"src":126804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,126806,126807,126808,126811],{},"3️⃣给他们放在",[59,126809,126810],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,126813,126814],{},"4️⃣给软件执行权限",[51,126816,126818],{"className":122449,"code":126817,"language":122451,"meta":122452,"style":57},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[59,126819,126820,126825],{"__ignoreMap":57},[79,126821,126822],{"class":81,"line":82},[79,126823,126824],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[79,126826,126827],{"class":81,"line":167},[79,126828,126829],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,126831,126832],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[51,126834,126836],{"className":118929,"code":126835,"language":118931,"meta":57,"style":57},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[59,126837,126838,126845,126852,126858],{"__ignoreMap":57},[79,126839,126840,126842],{"class":81,"line":82},[79,126841,103239],{"class":96},[79,126843,126844],{"class":89}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[79,126846,126847,126849],{"class":81,"line":167},[79,126848,1239],{"class":85},[79,126850,126851],{"class":89}," .\u002Fqqmusic.desktop\n",[79,126853,126854,126856],{"class":81,"line":178},[79,126855,125900],{"class":85},[79,126857,126851],{"class":89},[79,126859,126860,126862,126864,126866],{"class":81,"line":545},[79,126861,86],{"class":85},[79,126863,26599],{"class":89},[79,126865,124766],{"class":89},[79,126867,126851],{"class":89},[19,126869,126870,126872],{},[59,126871,1239],{},"：一个 Linux 命令，主要功能是：",[3246,126874,126875,126878],{},[29,126876,126877],{},"如果文件不存在，就创建一个新的空文件",[29,126879,126880],{},"如果文件已存在，就更新该文件的最后修改时间",[51,126882,126884],{"className":122449,"code":126883,"language":122451,"meta":122452,"style":57},"[Desktop Entry]\nName=QQ音乐\nExec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\nIcon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\nType=Application\nCategories=Audio;Music;Player;\nComment=QQ Music Client for Linux\n",[59,126885,126886,126890,126895,126900,126905,126909,126914],{"__ignoreMap":57},[79,126887,126888],{"class":81,"line":82},[79,126889,126651],{},[79,126891,126892],{"class":81,"line":167},[79,126893,126894],{},"Name=QQ音乐\n",[79,126896,126897],{"class":81,"line":178},[79,126898,126899],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[79,126901,126902],{"class":81,"line":545},[79,126903,126904],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[79,126906,126907],{"class":81,"line":550},[79,126908,126661],{},[79,126910,126911],{"class":81,"line":562},[79,126912,126913],{},"Categories=Audio;Music;Player;\n",[79,126915,126916],{"class":81,"line":568},[79,126917,126918],{},"Comment=QQ Music Client for Linux\n",[19,126920,126921],{},"将文件复制进去",[19,126923,126924],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,126926,126927],{},[3569,126928],{"alt":57,"src":126929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,126931,126932],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,126934,126935],{},[3569,126936],{"alt":57,"src":126937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,126939,126940,126941,126944,126945,126948],{},"如果你用的不是KDE，那么也可以直接修改",[59,126942,126943],{},"qqmuic.desktop","：在exec的末尾加上",[59,126946,126947],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[51,126950,126952],{"className":122449,"code":126951,"language":122451,"meta":122452,"style":57},"[Desktop Entry]\nName=QQ音乐\nExec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\nIcon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\nType=Application\nCategories=Audio;Music;Player;\nComment=QQ Music Client for Linux\n",[59,126953,126954,126958,126962,126967,126971,126975,126979],{"__ignoreMap":57},[79,126955,126956],{"class":81,"line":82},[79,126957,126651],{},[79,126959,126960],{"class":81,"line":167},[79,126961,126894],{},[79,126963,126964],{"class":81,"line":178},[79,126965,126966],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[79,126968,126969],{"class":81,"line":545},[79,126970,126904],{},[79,126972,126973],{"class":81,"line":550},[79,126974,126661],{},[79,126976,126977],{"class":81,"line":562},[79,126978,126913],{},[79,126980,126981],{"class":81,"line":568},[79,126982,126918],{},[19,126984,126985],{},[3569,126986],{"alt":57,"src":126987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,126989,126990],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[51,126992,126994],{"className":122449,"code":126993,"language":122451,"meta":122452,"style":57},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[59,126995,126996],{"__ignoreMap":57},[79,126997,126998],{"class":81,"line":82},[79,126999,126993],{},[26,127001,127002],{"start":545},[29,127003,127004],{},"去Flathub上安装软件",[19,127006,127007],{},[2482,127008,127009],{"href":127009,"rel":127010},"https:\u002F\u002Fflathub.org\u002F",[25885],[19,127012,127013],{},"1️⃣去上面的官网搜索软件+下载软件",[19,127015,127016],{},[3569,127017],{"alt":57,"src":127018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[51,127020,127022],{"className":122449,"code":127021,"language":122451,"meta":122452,"style":57},"flatpak install flathub com.obsproject.Studio\n",[59,127023,127024],{"__ignoreMap":57},[79,127025,127026],{"class":81,"line":82},[79,127027,127021],{},[19,127029,127030],{},[3569,127031],{"alt":57,"src":127032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,127034,127035],{},"2️⃣运行软件",[19,127037,127038],{},"a.官方方式：",[19,127040,127041],{},[3569,127042],{"alt":57,"src":127043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[51,127045,127046],{"className":122449,"code":127021,"language":122451,"meta":122452,"style":57},[59,127047,127048],{"__ignoreMap":57},[79,127049,127050],{"class":81,"line":82},[79,127051,127021],{},[19,127053,127054],{},"b.当普通软件运行：",[19,127056,127057],{},[3569,127058],{"alt":57,"src":127059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,127061,127062],{},[3569,127063],{"alt":57,"src":127064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[2159,127066,127067],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":57,"searchDepth":167,"depth":167,"links":127069},[127070,127071,127076,127077,127083,127084],{"id":123802,"depth":167,"text":123803},{"id":124144,"depth":167,"text":124145,"children":127072},[127073,127074,127075],{"id":124148,"depth":178,"text":124149},{"id":124215,"depth":178,"text":124216},{"id":124476,"depth":178,"text":124477},{"id":124629,"depth":167,"text":124630},{"id":124867,"depth":167,"text":124868,"children":127078},[127079,127080,127081,127082],{"id":124919,"depth":178,"text":124920},{"id":125205,"depth":178,"text":125206},{"id":125476,"depth":178,"text":125477},{"id":125735,"depth":178,"text":125736},{"id":125794,"depth":167,"text":125795},{"id":126095,"depth":167,"text":126096,"children":127085},[127086,127087,127088,127089,127090,127091,127092,127093],{"id":126099,"depth":178,"text":126100},{"id":126111,"depth":178,"text":126112},{"id":126323,"depth":178,"text":126324},{"id":126347,"depth":178,"text":126348},{"id":126413,"depth":178,"text":126414},{"id":126507,"depth":178,"text":126508},{"id":126514,"depth":178,"text":126515},{"id":126538,"depth":178,"text":126539},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":123794,"description":25402},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":127100,"title":127101,"body":127102,"description":25402,"extension":2186,"meta":127106,"navigation":541,"path":127107,"seo":127108,"stem":127109,"__hash__":127110},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":127103,"toc":127104},[],{"title":57,"searchDepth":167,"depth":167,"links":127105},[],{"category":32277},"\u002Fwiki\u002F2025-01-27-linux",{"title":127101,"description":25402},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":127112,"title":127113,"body":127114,"description":127118,"extension":2186,"meta":127509,"navigation":541,"path":127510,"seo":127511,"stem":127512,"__hash__":127513},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":127115,"toc":127507},[127116,127119,127123,127140,127143,127196,127200,127202,127242,127251,127255,127258,127499,127504],[19,127117,127118],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,127120,127122],{"id":127121},"_1ubuntu环境配置","1.Ubuntu环境配置",[26,127124,127125,127128,127131,127134,127137],{},[29,127126,127127],{},"ubuntu环境换源",[29,127129,127130],{},"安装cuda",[29,127132,127133],{},"安装miniconda",[29,127135,127136],{},"安装pytorch",[29,127138,127139],{},"安装genesis",[19,127141,127142],{},"参考链接：",[51,127144,127146],{"className":73,"code":127145,"language":75,"meta":57,"style":57},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[59,127147,127148],{"__ignoreMap":57},[79,127149,127150,127153,127156,127159,127161,127164,127167,127169,127172,127175,127177,127180,127183,127185,127188,127191,127193],{"class":81,"line":82},[79,127151,127152],{"class":85},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[79,127154,127155],{"class":89},"=blogdetail",[79,127157,127158],{"class":228},"&sharetype",[79,127160,239],{"class":448},[79,127162,127163],{"class":89},"blogdetail",[79,127165,127166],{"class":228},"&sharerId",[79,127168,239],{"class":448},[79,127170,127171],{"class":89},"144728092",[79,127173,127174],{"class":228},"&sharerefer",[79,127176,239],{"class":448},[79,127178,127179],{"class":89},"PC",[79,127181,127182],{"class":228},"&sharesource",[79,127184,239],{"class":448},[79,127186,127187],{"class":89},"qq_69379513",[79,127189,127190],{"class":228},"&sharefrom",[79,127192,239],{"class":448},[79,127194,127195],{"class":89},"from_link\n",[10,127197,127199],{"id":127198},"_2genesis-报错issue","2.Genesis 报错issue",[19,127201,127142],{},[51,127203,127204],{"className":73,"code":127145,"language":75,"meta":57,"style":57},[59,127205,127206],{"__ignoreMap":57},[79,127207,127208,127210,127212,127214,127216,127218,127220,127222,127224,127226,127228,127230,127232,127234,127236,127238,127240],{"class":81,"line":82},[79,127209,127152],{"class":85},[79,127211,127155],{"class":89},[79,127213,127158],{"class":228},[79,127215,239],{"class":448},[79,127217,127163],{"class":89},[79,127219,127166],{"class":228},[79,127221,239],{"class":448},[79,127223,127171],{"class":89},[79,127225,127174],{"class":228},[79,127227,239],{"class":448},[79,127229,127179],{"class":89},[79,127231,127182],{"class":228},[79,127233,239],{"class":448},[79,127235,127187],{"class":89},[79,127237,127190],{"class":228},[79,127239,239],{"class":448},[79,127241,127195],{"class":89},[51,127243,127245],{"className":73,"code":127244,"language":75,"meta":57,"style":57},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[59,127246,127247],{"__ignoreMap":57},[79,127248,127249],{"class":81,"line":82},[79,127250,127244],{"class":85},[10,127252,127254],{"id":127253},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,127256,127257],{},"hello_robot.py",[51,127259,127261],{"className":439,"code":127260,"language":441,"meta":57,"style":57},"import os\nos.environ['PYOPENGL_PLATFORM'] = 'glx'\n\nimport genesis as gs\nfrom pynput import keyboard\n\ngs.init(backend=gs.gpu)\n\nscene = gs.Scene(show_viewer=True)\nplane = scene.add_entity(gs.morphs.Plane())\nfranka = scene.add_entity(\n    gs.morphs.MJCF(file='xml\u002Ffranka_emika_panda\u002Fpanda.xml'),\n)\n\nscene.build()\n\ndef on_press(key):\n    try:\n        if key.char == 'q':\n            return False\n    except AttributeError:\n        pass\n\nlistener = keyboard.Listener(on_press=on_press)\nlistener.start()\n\nwhile listener.running:\n    scene.step()\n",[59,127262,127263,127269,127284,127288,127300,127312,127316,127329,127333,127352,127362,127372,127386,127390,127394,127399,127403,127413,127420,127434,127441,127451,127456,127460,127478,127483,127487,127494],{"__ignoreMap":57},[79,127264,127265,127267],{"class":81,"line":82},[79,127266,520],{"class":448},[79,127268,47300],{"class":228},[79,127270,127271,127274,127277,127279,127281],{"class":81,"line":167},[79,127272,127273],{"class":228},"os.environ[",[79,127275,127276],{"class":89},"'PYOPENGL_PLATFORM'",[79,127278,877],{"class":228},[79,127280,239],{"class":448},[79,127282,127283],{"class":89}," 'glx'\n",[79,127285,127286],{"class":81,"line":178},[79,127287,542],{"emptyLinePlaceholder":541},[79,127289,127290,127292,127295,127297],{"class":81,"line":545},[79,127291,520],{"class":448},[79,127293,127294],{"class":228}," genesis ",[79,127296,533],{"class":448},[79,127298,127299],{"class":228}," gs\n",[79,127301,127302,127304,127307,127309],{"class":81,"line":550},[79,127303,32745],{"class":448},[79,127305,127306],{"class":228}," pynput ",[79,127308,520],{"class":448},[79,127310,127311],{"class":228}," keyboard\n",[79,127313,127314],{"class":81,"line":562},[79,127315,542],{"emptyLinePlaceholder":541},[79,127317,127318,127321,127324,127326],{"class":81,"line":568},[79,127319,127320],{"class":228},"gs.init(",[79,127322,127323],{"class":7284},"backend",[79,127325,239],{"class":448},[79,127327,127328],{"class":228},"gs.gpu)\n",[79,127330,127331],{"class":81,"line":574},[79,127332,542],{"emptyLinePlaceholder":541},[79,127334,127335,127338,127340,127343,127346,127348,127350],{"class":81,"line":579},[79,127336,127337],{"class":228},"scene ",[79,127339,239],{"class":448},[79,127341,127342],{"class":228}," gs.Scene(",[79,127344,127345],{"class":7284},"show_viewer",[79,127347,239],{"class":448},[79,127349,33478],{"class":96},[79,127351,850],{"class":228},[79,127353,127354,127357,127359],{"class":81,"line":585},[79,127355,127356],{"class":228},"plane ",[79,127358,239],{"class":448},[79,127360,127361],{"class":228}," scene.add_entity(gs.morphs.Plane())\n",[79,127363,127364,127367,127369],{"class":81,"line":591},[79,127365,127366],{"class":228},"franka ",[79,127368,239],{"class":448},[79,127370,127371],{"class":228}," scene.add_entity(\n",[79,127373,127374,127377,127379,127381,127384],{"class":81,"line":596},[79,127375,127376],{"class":228},"    gs.morphs.MJCF(",[79,127378,47349],{"class":7284},[79,127380,239],{"class":448},[79,127382,127383],{"class":89},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[79,127385,40042],{"class":228},[79,127387,127388],{"class":81,"line":602},[79,127389,850],{"class":228},[79,127391,127392],{"class":81,"line":608},[79,127393,542],{"emptyLinePlaceholder":541},[79,127395,127396],{"class":81,"line":614},[79,127397,127398],{"class":228},"scene.build()\n",[79,127400,127401],{"class":81,"line":619},[79,127402,542],{"emptyLinePlaceholder":541},[79,127404,127405,127407,127410],{"class":81,"line":625},[79,127406,703],{"class":448},[79,127408,127409],{"class":85}," on_press",[79,127411,127412],{"class":228},"(key):\n",[79,127414,127415,127418],{"class":81,"line":631},[79,127416,127417],{"class":448},"    try",[79,127419,745],{"class":228},[79,127421,127422,127424,127427,127429,127432],{"class":81,"line":637},[79,127423,1089],{"class":448},[79,127425,127426],{"class":228}," key.char ",[79,127428,5025],{"class":448},[79,127430,127431],{"class":89}," 'q'",[79,127433,745],{"class":228},[79,127435,127436,127438],{"class":81,"line":643},[79,127437,17764],{"class":448},[79,127439,127440],{"class":96}," False\n",[79,127442,127443,127446,127449],{"class":81,"line":649},[79,127444,127445],{"class":448},"    except",[79,127447,127448],{"class":96}," AttributeError",[79,127450,745],{"class":228},[79,127452,127453],{"class":81,"line":655},[79,127454,127455],{"class":448},"        pass\n",[79,127457,127458],{"class":81,"line":660},[79,127459,542],{"emptyLinePlaceholder":541},[79,127461,127462,127465,127467,127470,127473,127475],{"class":81,"line":666},[79,127463,127464],{"class":228},"listener ",[79,127466,239],{"class":448},[79,127468,127469],{"class":228}," keyboard.Listener(",[79,127471,127472],{"class":7284},"on_press",[79,127474,239],{"class":448},[79,127476,127477],{"class":228},"on_press)\n",[79,127479,127480],{"class":81,"line":672},[79,127481,127482],{"class":228},"listener.start()\n",[79,127484,127485],{"class":81,"line":678},[79,127486,542],{"emptyLinePlaceholder":541},[79,127488,127489,127491],{"class":81,"line":684},[79,127490,110550],{"class":448},[79,127492,127493],{"class":228}," listener.running:\n",[79,127495,127496],{"class":81,"line":690},[79,127497,127498],{"class":228},"    scene.step()\n",[19,127500,127501],{},[3569,127502],{"alt":57,"src":127503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[2159,127505,127506],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":57,"searchDepth":167,"depth":167,"links":127508},[],{"category":25404},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":127113,"description":127118},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":127515,"title":127516,"body":127517,"description":25402,"extension":2186,"meta":127532,"navigation":541,"path":127533,"seo":127534,"stem":127535,"__hash__":127536},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":127518,"toc":127529},[127519,127522,127526],[10,127520,127516],{"id":127521},"_1-基础知识",[14,127523,127525],{"id":127524},"_11-js的组成","1.1 js的组成",[19,127527,127528],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":57,"searchDepth":167,"depth":167,"links":127530},[127531],{"id":127524,"depth":167,"text":127525},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":127516,"description":25402},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":127538,"title":127539,"body":127540,"description":25402,"extension":2186,"meta":127679,"navigation":541,"path":127680,"seo":127681,"stem":127682,"__hash__":127683},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":127541,"toc":127667},[127542,127545,127549,127552,127556,127566,127570,127573,127576,127579,127583,127590,127596,127600,127606,127617,127621,127624,127628,127631,127635,127638,127642,127645,127649,127652,127655,127658,127661,127664],[10,127543,127539],{"id":127544},"_2-vscode必备内容",[14,127546,127548],{"id":127547},"_21-标签分类","2.1 标签分类",[19,127550,127551],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,127553,127555],{"id":127554},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,127557,127558,127559,127561,127562,127565],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[59,127560,2470],{}," 然后按 ",[59,127563,127564],{},"Tab","，快速自动生成基本结构。",[14,127567,127569],{"id":127568},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,127571,127572],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,127574,127575],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,127577,127578],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,127580,127582],{"id":127581},"_24-视图缩放","2.4 视图缩放",[19,127584,127585,127586,127589],{},"缩放视图 ",[59,127587,127588],{},"ctrl+"," 可实现代码增大。",[19,127591,127592,127595],{},[59,127593,127594],{},"ctrl-"," 可实现代码减小。",[14,127597,127599],{"id":127598},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,127601,127602,127603,497],{},"VSCode 新建文件快捷键为 ",[59,127604,127605],{},"ctrl+N",[19,127607,127608,127609,127612,127613,127616],{},"保存快捷键为 ",[59,127610,127611],{},"ctrl+S","，将文本保存为 ",[59,127614,127615],{},".html"," 文件。",[14,127618,127620],{"id":127619},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,127622,127623],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,127625,127627],{"id":127626},"_27-vscode-icons","2.7 vscode-icons",[19,127629,127630],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,127632,127634],{"id":127633},"_28-easy-less","2.8 Easy LESS",[19,127636,127637],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,127639,127641],{"id":127640},"_29-会了吧插件","2.9 会了吧插件",[19,127643,127644],{},"会了吧插件可以展示代码中英语单词的意思。",[14,127646,127648],{"id":127647},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,127650,127651],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,127653,127654],{},"②选定多个相同的单词:ctrl+D",[19,127656,127657],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,127659,127660],{},"④全局替换某些单词:ctrl+h",[19,127662,127663],{},"⑤快速定位到某一行:ctrl+g",[19,127665,127666],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":57,"searchDepth":167,"depth":167,"links":127668},[127669,127670,127671,127672,127673,127674,127675,127676,127677,127678],{"id":127547,"depth":167,"text":127548},{"id":127554,"depth":167,"text":127555},{"id":127568,"depth":167,"text":127569},{"id":127581,"depth":167,"text":127582},{"id":127598,"depth":167,"text":127599},{"id":127619,"depth":167,"text":127620},{"id":127626,"depth":167,"text":127627},{"id":127633,"depth":167,"text":127634},{"id":127640,"depth":167,"text":127641},{"id":127647,"depth":167,"text":127648},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":127539,"description":25402},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":127685,"title":127686,"body":127687,"description":25402,"extension":2186,"meta":127846,"navigation":541,"path":127847,"seo":127848,"stem":127849,"__hash__":127850},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":127688,"toc":127838},[127689,127692,127696,127706,127712,127718,127722,127731,127735,127740,127743,127746,127750,127753,127763,127772,127781,127790,127800,127807,127812,127817,127830],[10,127690,127686],{"id":127691},"_3-html文本与容器标签",[14,127693,127695],{"id":127694},"_31-标题标签","3.1 标题标签",[19,127697,127698,127701,127702,127705],{},[59,127699,127700],{},"\u003Ch1>","我是一级标签",[59,127703,127704],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,127707,127708,127701,127710],{},[59,127709,127700],{},[59,127711,127704],{},[19,127713,124968,127714,127717],{},[59,127715,127716],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,127719,127721],{"id":127720},"_32-段落标签","3.2 段落标签",[19,127723,127724,127727,127728],{},[59,127725,127726],{},"\u003Cp>","....",[59,127729,127730],{},"\u003C\u002Fp>",[14,127732,127734],{"id":127733},"_33-换行标签","3.3 换行标签",[19,127736,127737],{},[59,127738,127739],{},"\u003Cbr \u002F>",[19,127741,127742],{},"具有强制换行的作用",[19,127744,127745],{},"单标签",[14,127747,127749],{"id":127748},"_34-文本格式化标签","3.4 文本格式化标签",[19,127751,127752],{},"提供粗体、斜体和下划线等效果",[19,127754,127755,127756,1978,127759,127762],{},"加粗：",[59,127757,127758],{},"\u003Cstrong>...\u003C\u002Fstrong>",[59,127760,127761],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,127764,127765,127766,1978,127769,127762],{},"斜体：",[59,127767,127768],{},"\u003Cem>...\u003C\u002Fem>",[59,127770,127771],{},"\u003Ci>...\u003C\u002Fi>",[19,127773,127774,127775,1978,127778,127762],{},"删除线：",[59,127776,127777],{},"\u003Cdel>...\u003C\u002Fdel>",[59,127779,127780],{},"\u003Cs>...\u003C\u002Fs>",[19,127782,127783,127784,1978,127787,127762],{},"下划线：",[59,127785,127786],{},"\u003Cins>...\u003C\u002Fins>",[59,127788,127789],{},"\u003Cu>...\u003C\u002Fu>",[14,127791,127793,127794,20435,127797,104625],{"id":127792},"_35-div和span标签","3.5 ",[59,127795,127796],{},"\u003Cdiv>",[59,127798,127799],{},"\u003Cspan>",[19,127801,127802,1748,127804,127806],{},[59,127803,127796],{},[59,127805,127799],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,127808,127809],{},[59,127810,127811],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,127813,127814],{},[59,127815,127816],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,127818,127819,127820,127822,127823,127825,127826,127829],{},"两者特点：①",[59,127821,127796],{}," 标签用来布局，但一行通常只放一个 ",[59,127824,127796],{},"。可以理解为一个大盒子，独占一行，在 ",[59,127827,127828],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,127831,79237,127832,127834,127835,127837],{},[59,127833,127799],{}," 标签也可用于布局，一行可以放多个 ",[59,127836,127799],{},"，可理解为小盒子。",{"title":57,"searchDepth":167,"depth":167,"links":127839},[127840,127841,127842,127843,127844],{"id":127694,"depth":167,"text":127695},{"id":127720,"depth":167,"text":127721},{"id":127733,"depth":167,"text":127734},{"id":127748,"depth":167,"text":127749},{"id":127792,"depth":167,"text":127845},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":127686,"description":25402},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":127852,"title":127853,"body":127854,"description":25402,"extension":2186,"meta":128051,"navigation":541,"path":128052,"seo":128053,"stem":128054,"__hash__":128055},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":127855,"toc":128043},[127856,127859,127863,127866,127872,127879,127885,127891,127894,127897,127900,127903,127906,127909,127912,127916,127919,127922,127925,127931,127937,127943,127950,127954,127960,127966,127969,127972,127978,127984,127990,127993,127996,128000,128003,128013,128019,128023,128032,128036,128039],[10,127857,127853],{"id":127858},"_4-html图像与链接",[14,127860,127862],{"id":127861},"_41-图像标签","4.1 图像标签",[19,127864,127865],{},"（1）标签",[19,127867,127868,127871],{},[59,127869,127870],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,127873,127874,127875,127878],{},"src是",[59,127876,127877],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,127880,127881,127882],{},"alt:文本，替换文本。图像不能显示的文字 ",[59,127883,127884],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,127886,127887,127888],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[59,127889,127890],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,127892,127893],{},"width:像素，设置图像的宽度",[19,127895,127896],{},"height:像素，设置图像的高度",[19,127898,127899],{},"border：像素，设置图像的边框粗细",[19,127901,127902],{},"（2）图像标签属性的注意点：",[19,127904,127905],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,127907,127908],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,127910,127911],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,127913,127915],{"id":127914},"_42-路径注意要点","4.2 路径注意要点：",[19,127917,127918],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,127920,127921],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,127923,127924],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,127926,127927,127928],{},"①同一级路径：图像文件位于HTML文件同一级，如",[59,127929,127930],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,127932,127933,127934],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[59,127935,127936],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,127938,127939,127940],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[59,127941,127942],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,127944,127945,127946,2495],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[2482,127947,127948],{"href":127948,"rel":127949},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[25885],[14,127951,127953],{"id":127952},"_43-超链接标签","4.3 超链接标签",[19,127955,127956,127959],{},[59,127957,127958],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,127961,127962,127963],{},"①语法格式：",[59,127964,127965],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,127967,127968],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,127970,127971],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,127973,127974,127975],{},"③链接分类：外部链接：",[59,127976,127977],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,127979,127980,127981],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[59,127982,127983],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,127985,127986,127987],{},"空链接：如果当时没有确定链接目标时，",[59,127988,127989],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,127991,127992],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,127994,127995],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,127997,127999],{"id":127998},"_44-锚点链接","4.4 锚点链接",[19,128001,128002],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,128004,128005,128006,128009,128010],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[59,128007,128008],{},"\u003Ca href=\"#two\">","第二级",[59,128011,128012],{},"\u003C\u002Fa>",[19,128014,128015,128016],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[59,128017,128018],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,128020,128022],{"id":128021},"_45-注释标签","4.5 注释标签",[19,128024,128025,128028,128029],{},[59,128026,128027],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[59,128030,128031],{},"ctrl+\u002F",[14,128033,128035],{"id":128034},"_46-特殊字符","4.6 特殊字符",[19,128037,128038],{},"可以实现添加多个空格",[3569,128040],{"style":128041,"src":128042},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":57,"searchDepth":167,"depth":167,"links":128044},[128045,128046,128047,128048,128049,128050],{"id":127861,"depth":167,"text":127862},{"id":127914,"depth":167,"text":127915},{"id":127952,"depth":167,"text":127953},{"id":127998,"depth":167,"text":127999},{"id":128021,"depth":167,"text":128022},{"id":128034,"depth":167,"text":128035},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":127853,"description":25402},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":128057,"title":128058,"body":128059,"description":25402,"extension":2186,"meta":128352,"navigation":541,"path":128353,"seo":128354,"stem":128355,"__hash__":128356},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":128060,"toc":128343},[128061,128064,128068,128071,128074,128077,128080,128083,128086,128089,128092,128095,128115,128121,128125,128128,128131,128134,128137,128140,128143,128147,128150,128153,128156,128159,128172,128177,128180,128183,128198,128201,128204,128207,128210,128213,128217,128220,128227,128230,128233,128236,128239,128242,128248,128251,128254,128260,128263,128266,128269,128275,128278,128281,128295,128302,128305,128308,128315,128324,128327,128330,128333,128337,128340],[10,128062,128058],{"id":128063},"_5-html表格列表与表单",[14,128065,128067],{"id":128066},"_51-表格标签","5.1 表格标签",[19,128069,128070],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,128072,128073],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,128075,128076],{},"②表格基本语法：",[3569,128078],{"style":128041,"src":128079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,128081,128082],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[3569,128084],{"style":128041,"src":128085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,128087,128088],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[3569,128090],{"style":128041,"src":128091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,128093,128094],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,128096,128097,128100,128101,128103,128104,128107,128108,128110,128111,128114],{},[59,128098,128099],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[59,128102,128099],{},"内部必须拥有",[59,128105,128106],{},"\u003Ctr>","标签，一般位于第一行，",[59,128109,128099],{},"比",[59,128112,128113],{},"\u003Cth>","范围广",[19,128116,128117,128120],{},[59,128118,128119],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,128122,128124],{"id":128123},"_52-合并单元格","5.2 合并单元格",[19,128126,128127],{},"（1）合并单元格方式：",[19,128129,128130],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,128132,128133],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,128135,128136],{},"（2）目标单元格：",[19,128138,128139],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,128141,128142],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,128144,128146],{"id":128145},"_53-列表标签","5.3 列表标签",[19,128148,128149],{},"（1）分类：无序列表、有序列表、自定义列表",[19,128151,128152],{},"①无序列表：",[3569,128154],{"style":128041,"src":128155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,128157,128158],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,128160,128161,128164,128165,128168,128169,128171],{},[59,128162,128163],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[59,128166,128167],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[59,128170,128163],{},"中输入其他标签或文字是不对的",[19,128173,128174,128176],{},[59,128175,128167],{},"之间相当于一个容器，可以容纳所有元素",[19,128178,128179],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,128181,128182],{},"在css中去除前边的小圆点采用如下代码:",[51,128184,128188],{"className":128185,"code":128186,"language":128187,"meta":57,"style":57},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[59,128189,128190],{"__ignoreMap":57},[79,128191,128192,128195],{"class":81,"line":82},[79,128193,128194],{"class":232},"list-style",[79,128196,128197],{"class":228},": none;\n",[19,128199,128200],{},"②有序列表：",[3569,128202],{"style":128041,"src":128203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,128205,128206],{},"③自定义列表：",[3569,128208],{"style":128041,"src":128209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[3569,128211],{"style":128041,"src":128212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,128214,128216],{"id":128215},"_54-表单标签","5.4 表单标签",[19,128218,128219],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,128221,128222,128223,128226],{},"（1）表单域：包含单元素的区域，",[59,128224,128225],{},"\u003Cform>","标签可以实现信息的收集和传递。",[3569,128228],{"style":128041,"src":128229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,128231,128232],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,128234,128235],{},"表单元素提交必须有name属性",[19,128237,128238],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,128240,128241],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,128243,79214,128244,128247],{},[59,128245,128246],{},"\u003Cinput>","输入表单元素",[3569,128249],{"style":128041,"src":128250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[3569,128252],{"style":128041,"src":128253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,128255,128256,128257],{},"单选按钮：",[59,128258,128259],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[3569,128261],{"style":128041,"src":128262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,128264,128265],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[3569,128267],{"style":128041,"src":128268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,128270,128271,128274],{},[2398,128272,128273],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,128276,128277],{},"②select下拉表单元素：可以节约页面控件",[3569,128279],{"style":128041,"src":128280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,128282,128283,15828,128285,128288,128289,128291,128292,128294],{},[2398,128284,2287],{},[59,128286,128287],{},"\u003Cselect>","中至少包含一对",[59,128290,104646],{},"；在",[59,128293,104646],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,128296,128297,128298,128301],{},"③",[59,128299,128300],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[3569,128303],{"style":128041,"src":128304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,128306,128307],{},"3行20列",[14,128309,128311,128312,104625],{"id":128310},"_55-lable标签","5.5 ",[59,128313,128314],{},"\u003Clable>",[19,128316,128317,128318,128320,128321,128323],{},"它不是表单标签，但常常与表单标签搭配使用，",[59,128319,128314],{},"标签用于绑定一个表单标签，当点击",[59,128322,128314],{},"标签内的文本",[19,128325,128326],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[3569,128328],{"style":128041,"src":128329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[3569,128331],{"style":128041,"src":128332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,128334,128336],{"id":128335},"_56-实例","5.6 实例",[3569,128338],{"style":128041,"src":128339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[2159,128341,128342],{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":57,"searchDepth":167,"depth":167,"links":128344},[128345,128346,128347,128348,128349,128351],{"id":128066,"depth":167,"text":128067},{"id":128123,"depth":167,"text":128124},{"id":128145,"depth":167,"text":128146},{"id":128215,"depth":167,"text":128216},{"id":128310,"depth":167,"text":128350},"5.5 \u003Clable>标签",{"id":128335,"depth":167,"text":128336},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":128058,"description":25402},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":128358,"title":128359,"body":128360,"description":25402,"extension":2186,"meta":128909,"navigation":541,"path":128910,"seo":128911,"stem":128912,"__hash__":128913},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":128361,"toc":128884},[128362,128365,128369,128372,128375,128379,128382,128385,128388,128391,128394,128397,128400,128404,128407,128411,128414,128417,128420,128424,128427,128430,128433,128439,128442,128445,128448,128451,128454,128457,128460,128493,128497,128500,128503,128506,128510,128513,128516,128519,128522,128525,128529,128532,128535,128538,128542,128545,128549,128552,128556,128559,128564,128568,128571,128575,128578,128581,128584,128587,128614,128617,128621,128624,128627,128632,128635,128638,128642,128645,128650,128653,128656,128659,128663,128666,128669,128672,128676,128679,128682,128685,128689,128693,128696,128736,128739,128743,128750,128753,128757,128760,128806,128810,128813,128816,128819,128847,128851,128854,128881],[10,128363,128359],{"id":128364},"_6-css语法与文本样式",[14,128366,128368],{"id":128367},"_61-css语法规范","6.1 css语法规范",[19,128370,128371],{},"由两部分组成，选择器及一条或多条声明",[3569,128373],{"style":128041,"src":128374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,128376,128377],{},[2398,128378,2287],{},[19,128380,128381],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,128383,128384],{},"②属性与属性值以“键值对”的形式出现",[19,128386,128387],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,128389,128390],{},"④属性和属性值之间用英文“;”分开",[3569,128392],{"style":128041,"src":128393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[3569,128395],{"style":128041,"src":128396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[3569,128398],{"style":128041,"src":128399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,128401,128403],{"id":128402},"_62-css选择器","6.2 css选择器",[19,128405,128406],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[339,128408,128410],{"id":128409},"_621-标签选择器","6.2.1 标签选择器",[19,128412,128413],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,128415,128416],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[3569,128418],{"style":128041,"src":128419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[339,128421,128423],{"id":128422},"_622-类选择器","6.2.2 类选择器",[19,128425,128426],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,128428,128429],{},"②样例",[3569,128431],{"style":128041,"src":128432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,128434,128435,128436,128438],{},"③ ",[2398,128437,128273],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,128440,128441],{},"可以理解为给这个标签起了个名字，来表示；",[19,128443,128444],{},"长名称或词组可以使用横线来为选择器命名；",[19,128446,128447],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,128449,128450],{},"命名要有意义；",[3569,128452],{"style":128041,"src":128453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,128455,128456],{},"类选择器也可以指定特殊的元素p.center{}",[19,128458,128459],{},"p.center和.center都对",[51,128461,128463],{"className":128185,"code":128462,"language":128187,"meta":57,"style":57},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[59,128464,128465,128470,128479,128489],{"__ignoreMap":57},[79,128466,128467],{"class":81,"line":82},[79,128468,128469],{"class":2313},"\u002F* 类选择器指定特殊元素 *\u002F\n",[79,128471,128472,128474,128477],{"class":81,"line":167},[79,128473,19],{"class":232},[79,128475,128476],{"class":85},".center",[79,128478,17604],{"class":228},[79,128480,128481,128483,128485,128487],{"class":81,"line":178},[79,128482,72514],{"class":96},[79,128484,53431],{"class":228},[79,128486,53586],{"class":96},[79,128488,3400],{"class":228},[79,128490,128491],{"class":81,"line":545},[79,128492,3671],{"class":228},[339,128494,128496],{"id":128495},"_623-多类名使用","6.2.3 多类名使用",[19,128498,128499],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[3569,128501],{"style":128041,"src":128502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,128504,128505],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[339,128507,128509],{"id":128508},"_624-id选择器","6.2.4 id选择器",[19,128511,128512],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,128514,128515],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[3569,128517],{"style":128041,"src":128518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,128520,128521],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,128523,128524],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[339,128526,128528],{"id":128527},"_625-通配符选择器","6.2.5 通配符选择器",[19,128530,128531],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,128533,128534],{},"* {",[19,128536,128537],{},"color=\"red\"}",[339,128539,128541],{"id":128540},"_626-总结","6.2.6 总结",[3569,128543],{"style":128041,"src":128544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,128546,128548],{"id":128547},"_63-css字体属性","6.3 css字体属性",[19,128550,128551],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[339,128553,128555],{"id":128554},"_631-字体系列","6.3.1 字体系列",[19,128557,128558],{},"font-family: '宋体';",[19,128560,128561,128563],{},[2398,128562,2287],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[339,128565,128567],{"id":128566},"_632-字体大小","6.3.2 字体大小",[19,128569,128570],{},"font-size: 20px",[19,128572,128573,28489],{},[2398,128574,128273],{},[19,128576,128577],{},"①px（像素）大小是网页的最常用单位",[19,128579,128580],{},"②谷歌浏览器默认为16px",[19,128582,128583],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,128585,128586],{},"④可以给body指定整个页面的大小：会自动引用",[51,128588,128590],{"className":128185,"code":128589,"language":128187,"meta":57,"style":57},"body {\n  font-size: 16px;\n}\n",[59,128591,128592,128598,128610],{"__ignoreMap":57},[79,128593,128594,128596],{"class":81,"line":82},[79,128595,53794],{"class":232},[79,128597,17604],{"class":228},[79,128599,128600,128602,128604,128606,128608],{"class":81,"line":167},[79,128601,72614],{"class":96},[79,128603,53431],{"class":228},[79,128605,2841],{"class":96},[79,128607,53486],{"class":448},[79,128609,3400],{"class":228},[79,128611,128612],{"class":81,"line":178},[79,128613,3671],{"class":228},[19,128615,128616],{},"⑤标题标签比较特殊，需要单独指定大小",[339,128618,128620],{"id":128619},"_633-字体粗细","6.3.3 字体粗细",[19,128622,128623],{},"font-weight: bold;",[19,128625,128626],{},"font-weight: 100；",[19,128628,128629,128631],{},[2398,128630,2287],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,128633,128634],{},"font-weight= 400;",[19,128636,128637],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[339,128639,128641],{"id":128640},"_634-文字样式","6.3.4 文字样式",[19,128643,128644],{},"font-style: normal；",[19,128646,128647,28489],{},[2398,128648,128649],{},"属性值",[19,128651,128652],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,128654,128655],{},"②italic：浏览器会显示斜体的字体样式",[3569,128657],{"style":128041,"src":128658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[339,128660,128662],{"id":128661},"_635-字体符合属性","6.3.5 字体符合属性",[3569,128664],{"style":128041,"src":128665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[3569,128667],{"style":128041,"src":128668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,128670,128671],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,128673,128674,28489],{},[2398,128675,128273],{},[19,128677,128678],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,128680,128681],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,128683,128684],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,128686,128688],{"id":128687},"_64-css-test文本属性","6.4 css test文本属性",[339,128690,128692],{"id":128691},"_641-文本颜色","6.4.1 文本颜色",[19,128694,128695],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[51,128697,128699],{"className":128185,"code":128698,"language":128187,"meta":57,"style":57},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[59,128700,128701,128706,128712,128722,128727,128732],{"__ignoreMap":57},[79,128702,128703],{"class":81,"line":82},[79,128704,128705],{"class":2313},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[79,128707,128708,128710],{"class":81,"line":167},[79,128709,19],{"class":232},[79,128711,17604],{"class":228},[79,128713,128714,128716,128718,128720],{"class":81,"line":178},[79,128715,72893],{"class":96},[79,128717,53431],{"class":228},[79,128719,59410],{"class":96},[79,128721,3400],{"class":228},[79,128723,128724],{"class":81,"line":545},[79,128725,128726],{"class":2313},"  \u002F* color: #ff0000; *\u002F\n",[79,128728,128729],{"class":81,"line":550},[79,128730,128731],{"class":2313},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[79,128733,128734],{"class":81,"line":562},[79,128735,3671],{"class":228},[3569,128737],{"style":128041,"src":128738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[339,128740,128742],{"id":128741},"_642-对齐文本","6.4.2 对齐文本",[19,128744,128745,128746,128749],{},"text-align属于用于设置元素内文本内容的 ",[2398,128747,128748],{},"水平对齐"," 方式",[19,128751,128752],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[339,128754,128756],{"id":128755},"_643-装饰文本","6.4.3 装饰文本",[19,128758,128759],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[51,128761,128763],{"className":128185,"code":128762,"language":128187,"meta":57,"style":57},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[59,128764,128765,128771,128781,128785,128791,128802],{"__ignoreMap":57},[79,128766,128767,128769],{"class":81,"line":82},[79,128768,2482],{"class":232},[79,128770,17604],{"class":228},[79,128772,128773,128775,128777,128779],{"class":81,"line":167},[79,128774,72490],{"class":96},[79,128776,53431],{"class":228},[79,128778,56726],{"class":96},[79,128780,3400],{"class":228},[79,128782,128783],{"class":81,"line":178},[79,128784,3671],{"class":228},[79,128786,128787,128789],{"class":81,"line":545},[79,128788,19],{"class":232},[79,128790,17604],{"class":228},[79,128792,128793,128795,128797,128800],{"class":81,"line":550},[79,128794,72490],{"class":96},[79,128796,53431],{"class":228},[79,128798,128799],{"class":96},"underline",[79,128801,3400],{"class":228},[79,128803,128804],{"class":81,"line":562},[79,128805,3671],{"class":228},[339,128807,128809],{"id":128808},"_644-文本缩进","6.4.4 文本缩进",[19,128811,128812],{},"实现文本的第一行首行缩进自己指定的距离",[19,128814,128815],{},"20px往右边走；-20px往左边走",[19,128817,128818],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[51,128820,128822],{"className":128185,"code":128821,"language":128187,"meta":57,"style":57},"p {\n  text-indent: 2em;\n}\n",[59,128823,128824,128830,128843],{"__ignoreMap":57},[79,128825,128826,128828],{"class":81,"line":82},[79,128827,19],{"class":232},[79,128829,17604],{"class":228},[79,128831,128832,128835,128837,128839,128841],{"class":81,"line":167},[79,128833,128834],{"class":96},"  text-indent",[79,128836,53431],{"class":228},[79,128838,2331],{"class":96},[79,128840,25579],{"class":448},[79,128842,3400],{"class":228},[79,128844,128845],{"class":81,"line":178},[79,128846,3671],{"class":228},[339,128848,128850],{"id":128849},"_645-行间距","6.4.5 行间距",[19,128852,128853],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[51,128855,128857],{"className":128185,"code":128856,"language":128187,"meta":57,"style":57},"p {\n  line-height: 1.6;\n}\n",[59,128858,128859,128865,128877],{"__ignoreMap":57},[79,128860,128861,128863],{"class":81,"line":82},[79,128862,19],{"class":232},[79,128864,17604],{"class":228},[79,128866,128867,128870,128872,128875],{"class":81,"line":167},[79,128868,128869],{"class":96},"  line-height",[79,128871,53431],{"class":228},[79,128873,128874],{"class":96},"1.6",[79,128876,3400],{"class":228},[79,128878,128879],{"class":81,"line":178},[79,128880,3671],{"class":228},[2159,128882,128883],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":57,"searchDepth":167,"depth":167,"links":128885},[128886,128887,128895,128902],{"id":128367,"depth":167,"text":128368},{"id":128402,"depth":167,"text":128403,"children":128888},[128889,128890,128891,128892,128893,128894],{"id":128409,"depth":178,"text":128410},{"id":128422,"depth":178,"text":128423},{"id":128495,"depth":178,"text":128496},{"id":128508,"depth":178,"text":128509},{"id":128527,"depth":178,"text":128528},{"id":128540,"depth":178,"text":128541},{"id":128547,"depth":167,"text":128548,"children":128896},[128897,128898,128899,128900,128901],{"id":128554,"depth":178,"text":128555},{"id":128566,"depth":178,"text":128567},{"id":128619,"depth":178,"text":128620},{"id":128640,"depth":178,"text":128641},{"id":128661,"depth":178,"text":128662},{"id":128687,"depth":167,"text":128688,"children":128903},[128904,128905,128906,128907,128908],{"id":128691,"depth":178,"text":128692},{"id":128741,"depth":178,"text":128742},{"id":128755,"depth":178,"text":128756},{"id":128808,"depth":178,"text":128809},{"id":128849,"depth":178,"text":128850},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":128359,"description":25402},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":128915,"title":128916,"body":128917,"description":25402,"extension":2186,"meta":129566,"navigation":541,"path":129567,"seo":129568,"stem":129569,"__hash__":129570},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":128918,"toc":129547},[128919,128922,128926,128930,128990,128994,129004,129007,129010,129014,129039,129043,129046,129049,129052,129055,129058,129062,129065,129068,129110,129113,129139,129145,129148,129152,129156,129162,129165,129168,129171,129174,129177,129180,129225,129229,129232,129235,129239,129243,129272,129275,129280,129283,129286,129289,129292,129296,129300,129303,129305,129308,129312,129315,129319,129322,129325,129328,129332,129336,129342,129352,129355,129358,129361,129364,129367,129490,129498,129506,129544],[10,128920,128916],{"id":128921},"_7-css引入方式与选择器进阶",[14,128923,128925],{"id":128924},"_71-css引入方式","7.1 css引入方式",[339,128927,128929],{"id":128928},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[51,128931,128935],{"className":128932,"code":128933,"language":128934,"meta":57,"style":57},"language-Html shiki shiki-themes github-light github-dark","\u003Cstyle>\n  h1 {\n    color: blue;\n    font-size: 24px;\n  }\n\u003C\u002Fstyle>\n","Html",[59,128936,128937,128945,128952,128964,128977,128982],{"__ignoreMap":57},[79,128938,128939,128941,128943],{"class":81,"line":82},[79,128940,229],{"class":228},[79,128942,2159],{"class":232},[79,128944,53301],{"class":228},[79,128946,128947,128950],{"class":81,"line":167},[79,128948,128949],{"class":232},"  h1",[79,128951,17604],{"class":228},[79,128953,128954,128957,128959,128962],{"class":81,"line":178},[79,128955,128956],{"class":96},"    color",[79,128958,53431],{"class":228},[79,128960,128961],{"class":96},"blue",[79,128963,3400],{"class":228},[79,128965,128966,128969,128971,128973,128975],{"class":81,"line":545},[79,128967,128968],{"class":96},"    font-size",[79,128970,53431],{"class":228},[79,128972,3040],{"class":96},[79,128974,53486],{"class":448},[79,128976,3400],{"class":228},[79,128978,128979],{"class":81,"line":550},[79,128980,128981],{"class":228},"  }\n",[79,128983,128984,128986,128988],{"class":81,"line":562},[79,128985,53779],{"class":228},[79,128987,2159],{"class":232},[79,128989,53301],{"class":228},[19,128991,128992,28489],{},[2398,128993,128273],{},[19,128995,79214,128996,128999,129000,129003],{},[59,128997,128998],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[59,129001,129002],{},"\u003Chead>","标签中",[19,129005,129006],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,129008,129009],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[339,129011,129013],{"id":129012},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[51,129015,129017],{"className":128932,"code":129016,"language":128934,"meta":57,"style":57},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[59,129018,129019],{"__ignoreMap":57},[79,129020,129021,129023,129025,129027,129029,129032,129035,129037],{"class":81,"line":82},[79,129022,229],{"class":228},[79,129024,19],{"class":232},[79,129026,64614],{"class":85},[79,129028,239],{"class":228},[79,129030,129031],{"class":89},"\"color: red; font-size: 16px;\"",[79,129033,129034],{"class":228},">这是一个段落\u003C\u002F",[79,129036,19],{"class":232},[79,129038,53301],{"class":228},[19,129040,129041,28489],{},[2398,129042,128273],{},[19,129044,129045],{},"①style其实就是标签的属性",[19,129047,129048],{},"②在双引号中间，写法要符合css规范",[19,129050,129051],{},"③可以控制当前的标签设置样式",[19,129053,129054],{},"④书写繁琐，简单时才用",[19,129056,129057],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[339,129059,129061],{"id":129060},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,129063,129064],{},"使用最多，单独建一个css文件，然后html引用",[19,129066,129067],{},"①css文件部分： style.css",[51,129069,129071],{"className":128185,"code":129070,"language":128187,"meta":57,"style":57},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[59,129072,129073,129078,129084,129094,129106],{"__ignoreMap":57},[79,129074,129075],{"class":81,"line":82},[79,129076,129077],{"class":2313},"\u002F* style.css *\u002F\n",[79,129079,129080,129082],{"class":81,"line":167},[79,129081,10],{"class":232},[79,129083,17604],{"class":228},[79,129085,129086,129088,129090,129092],{"class":81,"line":178},[79,129087,72893],{"class":96},[79,129089,53431],{"class":228},[79,129091,128961],{"class":96},[79,129093,3400],{"class":228},[79,129095,129096,129098,129100,129102,129104],{"class":81,"line":545},[79,129097,72614],{"class":96},[79,129099,53431],{"class":228},[79,129101,3040],{"class":96},[79,129103,53486],{"class":448},[79,129105,3400],{"class":228},[79,129107,129108],{"class":81,"line":550},[79,129109,3671],{"class":228},[19,129111,129112],{},"②html部分",[51,129114,129116],{"className":128932,"code":129115,"language":128934,"meta":57,"style":57},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[59,129117,129118],{"__ignoreMap":57},[79,129119,129120,129122,129124,129126,129128,129130,129132,129134,129137],{"class":81,"line":82},[79,129121,229],{"class":228},[79,129123,70993],{"class":232},[79,129125,70996],{"class":85},[79,129127,239],{"class":228},[79,129129,71001],{"class":89},[79,129131,63046],{"class":85},[79,129133,239],{"class":228},[79,129135,129136],{"class":89},"\"style.css\"",[79,129138,53301],{"class":228},[19,129140,129141,129144],{},[59,129142,129143],{},"\u003Chr>","水平线标签（但是不常用！）",[19,129146,129147],{},"ctrl+0回到页面原来大小",[14,129149,129151],{"id":129150},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[339,129153,129155],{"id":129154},"_721-快速生成html","7.2.1 快速生成html",[19,129157,129158,129159],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[59,129160,129161],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,129163,129164],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,129166,129167],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,129169,129170],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,129172,129173],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,129175,129176],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,129178,129179],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[51,129181,129183],{"className":128932,"code":129182,"language":128934,"meta":57,"style":57},"\u003C!-- Emmet 语法示例 -->\n\u003C!-- div*3        → 生成3个div -->\n\u003C!-- ul>li*5      → ul下生成5个li -->\n\u003C!-- div+p        → 兄弟div和p -->\n\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[59,129184,129185,129190,129195,129200,129205,129210,129215,129220],{"__ignoreMap":57},[79,129186,129187],{"class":81,"line":82},[79,129188,129189],{"class":2313},"\u003C!-- Emmet 语法示例 -->\n",[79,129191,129192],{"class":81,"line":167},[79,129193,129194],{"class":2313},"\u003C!-- div*3        → 生成3个div -->\n",[79,129196,129197],{"class":81,"line":178},[79,129198,129199],{"class":2313},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[79,129201,129202],{"class":81,"line":545},[79,129203,129204],{"class":2313},"\u003C!-- div+p        → 兄弟div和p -->\n",[79,129206,129207],{"class":81,"line":550},[79,129208,129209],{"class":2313},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[79,129211,129212],{"class":81,"line":562},[79,129213,129214],{"class":2313},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[79,129216,129217],{"class":81,"line":568},[79,129218,129219],{"class":2313},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[79,129221,129222],{"class":81,"line":574},[79,129223,129224],{"class":2313},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[339,129226,129228],{"id":129227},"_722-快速生成css","7.2.2 快速生成css",[19,129230,129231],{},"简写开头",[19,129233,129234],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,129236,129238],{"id":129237},"_73-css复合选择器","7.3 css复合选择器",[339,129240,129242],{"id":129241},"_731-后代选择器","7.3.1 后代选择器",[51,129244,129246],{"className":128185,"code":129245,"language":128187,"meta":57,"style":57},".parent .child {\n  color: blue;\n}\n",[59,129247,129248,129258,129268],{"__ignoreMap":57},[79,129249,129250,129253,129256],{"class":81,"line":82},[79,129251,129252],{"class":85},".parent",[79,129254,129255],{"class":85}," .child",[79,129257,17604],{"class":228},[79,129259,129260,129262,129264,129266],{"class":81,"line":167},[79,129261,72893],{"class":96},[79,129263,53431],{"class":228},[79,129265,128961],{"class":96},[79,129267,3400],{"class":228},[79,129269,129270],{"class":81,"line":178},[79,129271,3671],{"class":228},[19,129273,129274],{},"元素1 元素2 {样式声明}",[19,129276,129277],{},[2398,129278,129279],{},"注意点:",[19,129281,129282],{},"①元素1和元素2中间用空格隔开",[19,129284,129285],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,129287,129288],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,129290,129291],{},"④元素1和元素2可以是任意基础选择器",[339,129293,129295],{"id":129294},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,129297,129298],{},[2398,129299,129279],{},[19,129301,129302],{},"①元素1和元素2中间用大于号隔开",[19,129304,129285],{},[19,129306,129307],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[339,129309,129311],{"id":129310},"_733-并集选择器","7.3.3 并集选择器",[19,129313,129314],{},"元素1，元素2 {样式声明}",[19,129316,129317],{},[2398,129318,129279],{},[19,129320,129321],{},"①元素1和元素2中间用逗号隔开",[19,129323,129324],{},"②逗号可以理解为和的意思",[19,129326,129327],{},"③并集选择器通常用于集体声明",[339,129329,129331],{"id":129330},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,129333,129334],{},[2398,129335,129279],{},[19,129337,129338,129339,129341],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[70993,129340],{},"－:visited－:hover－:active。",[19,129343,129344,129345,129348,129349,27759],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[129346,129347],"hover",{}," 、 ",[129350,129351],"first-child",{},[19,129353,129354],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,129356,129357],{},"link对没访问的进行设置",[19,129359,129360],{},"vistied对已访问的进行改变",[19,129362,129363],{},"hover鼠标经过就会变",[19,129365,129366],{},"active常按(点)就会变",[51,129368,129370],{"className":128185,"code":129369,"language":128187,"meta":57,"style":57},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\na:link {\n  color: #333;\n  text-decoration: none;\n}\na:visited {\n  color: purple;\n}\na:hover {\n  color: skyblue;\n  text-decoration: underline;\n}\na:active {\n  color: green;\n}\n",[59,129371,129372,129377,129386,129396,129406,129410,129419,129430,129434,129442,129452,129462,129466,129475,129486],{"__ignoreMap":57},[79,129373,129374],{"class":81,"line":82},[79,129375,129376],{"class":2313},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[79,129378,129379,129381,129384],{"class":81,"line":167},[79,129380,2482],{"class":232},[79,129382,129383],{"class":85},":link",[79,129385,17604],{"class":228},[79,129387,129388,129390,129392,129394],{"class":81,"line":178},[79,129389,72893],{"class":96},[79,129391,53431],{"class":228},[79,129393,64357],{"class":96},[79,129395,3400],{"class":228},[79,129397,129398,129400,129402,129404],{"class":81,"line":545},[79,129399,72490],{"class":96},[79,129401,53431],{"class":228},[79,129403,56726],{"class":96},[79,129405,3400],{"class":228},[79,129407,129408],{"class":81,"line":550},[79,129409,3671],{"class":228},[79,129411,129412,129414,129417],{"class":81,"line":562},[79,129413,2482],{"class":232},[79,129415,129416],{"class":85},":visited",[79,129418,17604],{"class":228},[79,129420,129421,129423,129425,129428],{"class":81,"line":568},[79,129422,72893],{"class":96},[79,129424,53431],{"class":228},[79,129426,129427],{"class":96},"purple",[79,129429,3400],{"class":228},[79,129431,129432],{"class":81,"line":574},[79,129433,3671],{"class":228},[79,129435,129436,129438,129440],{"class":81,"line":579},[79,129437,2482],{"class":232},[79,129439,62929],{"class":85},[79,129441,17604],{"class":228},[79,129443,129444,129446,129448,129450],{"class":81,"line":585},[79,129445,72893],{"class":96},[79,129447,53431],{"class":228},[79,129449,56878],{"class":96},[79,129451,3400],{"class":228},[79,129453,129454,129456,129458,129460],{"class":81,"line":591},[79,129455,72490],{"class":96},[79,129457,53431],{"class":228},[79,129459,128799],{"class":96},[79,129461,3400],{"class":228},[79,129463,129464],{"class":81,"line":596},[79,129465,3671],{"class":228},[79,129467,129468,129470,129473],{"class":81,"line":602},[79,129469,2482],{"class":232},[79,129471,129472],{"class":85},":active",[79,129474,17604],{"class":228},[79,129476,129477,129479,129481,129484],{"class":81,"line":608},[79,129478,72893],{"class":96},[79,129480,53431],{"class":228},[79,129482,129483],{"class":96},"green",[79,129485,3400],{"class":228},[79,129487,129488],{"class":81,"line":614},[79,129489,3671],{"class":228},[339,129491,129493,129494,129497],{"id":129492},"_735-伪类选择器","7.3.5 ",[129495,129496],"focus",{},"伪类选择器",[19,129499,129500,129502,129503,129505],{},[129495,129501],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[59,129504,128246],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[51,129507,129509],{"className":128185,"code":129508,"language":128187,"meta":57,"style":57},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[59,129510,129511,129519,129530,129540],{"__ignoreMap":57},[79,129512,129513,129515,129517],{"class":81,"line":82},[79,129514,55812],{"class":232},[79,129516,63888],{"class":85},[79,129518,17604],{"class":228},[79,129520,129521,129524,129526,129528],{"class":81,"line":167},[79,129522,129523],{"class":96},"  border-color",[79,129525,53431],{"class":228},[79,129527,56878],{"class":96},[79,129529,3400],{"class":228},[79,129531,129532,129534,129536,129538],{"class":81,"line":178},[79,129533,72786],{"class":96},[79,129535,53431],{"class":228},[79,129537,56726],{"class":96},[79,129539,3400],{"class":228},[79,129541,129542],{"class":81,"line":545},[79,129543,3671],{"class":228},[2159,129545,129546],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":57,"searchDepth":167,"depth":167,"links":129548},[129549,129554,129558],{"id":128924,"depth":167,"text":128925,"children":129550},[129551,129552,129553],{"id":128928,"depth":178,"text":128929},{"id":129012,"depth":178,"text":129013},{"id":129060,"depth":178,"text":129061},{"id":129150,"depth":167,"text":129151,"children":129555},[129556,129557],{"id":129154,"depth":178,"text":129155},{"id":129227,"depth":178,"text":129228},{"id":129237,"depth":167,"text":129238,"children":129559},[129560,129561,129562,129563,129564],{"id":129241,"depth":178,"text":129242},{"id":129294,"depth":178,"text":129295},{"id":129310,"depth":178,"text":129311},{"id":129330,"depth":178,"text":129331},{"id":129492,"depth":178,"text":129565},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":128916,"description":25402},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":129572,"title":129573,"body":129574,"description":25402,"extension":2186,"meta":131497,"navigation":541,"path":131498,"seo":131499,"stem":131500,"__hash__":131501},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":129575,"toc":131471},[129576,129579,129583,129592,129596,129622,129627,129630,129633,129636,129639,129643,129646,129656,129664,129668,129703,129708,129711,129714,129717,129720,129724,129727,129736,129740,129753,129758,129761,129764,129767,129771,129774,129778,129781,129836,129839,129870,129873,129927,129931,129934,130100,130223,130226,130229,130232,130235,130239,130242,130246,130249,130252,130256,130259,130290,130317,130345,130348,130352,130378,130421,130425,130519,130522,130549,130552,130555,130558,130561,130564,130567,130570,130573,130576,130580,130637,130664,130668,130716,130720,130761,130763,130766,130769,130772,130775,130779,130871,130874,130877,130880,130884,131007,131208,131212,131216,131219,131222,131225,131229,131232,131235,131260,131263,131266,131269,131272,131275,131279,131287,131349,131352,131410,131413,131416,131419,131422,131425,131428,131431,131468],[10,129577,129573],{"id":129578},"_8-css显示模式与背景特性",[14,129580,129582],{"id":129581},"_81-css元素显示模式","8.1 css元素显示模式",[19,129584,129585,129586,129588,129589,129591],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[59,129587,127796],{},"自己占一行，比如一行可以放多个",[59,129590,127799],{},"，HTML 元素一般分为块元素和行内元素两种类型",[339,129593,129595],{"id":129594},"_811-块元素","8.1.1 块元素",[19,129597,129598,129599,129601,129602,2139,129605,2139,129607,2139,129609,2139,129612,2139,129615,129618,129619,129621],{},"常见的块元素有",[59,129600,127700],{},"~",[59,129603,129604],{},"\u003Ch6>",[59,129606,127726],{},[59,129608,127796],{},[59,129610,129611],{},"\u003Cul>",[59,129613,129614],{},"\u003Col>",[59,129616,129617],{},"\u003Cli>","等，其中 ",[59,129620,127796],{}," 标签是最典型的块元素",[19,129623,129624],{},[2398,129625,129626],{},"块级元素的特点：",[19,129628,129629],{},"① 比较霸道，自己独占一行。",[19,129631,129632],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,129634,129635],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,129637,129638],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,129640,129641],{},[2398,129642,2287],{},[19,129644,129645],{},"①文字类的元素内不能使用块级元素",[19,129647,79237,129648,129650,129651,129653,129654],{},[59,129649,127726],{}," 标签主要用于存放文字，因此 ",[59,129652,127726],{}," 里面不能放块级元素，特别是不能放",[59,129655,127796],{},[19,129657,129658,129659,129601,129661,129663],{},"⑥同理， ",[59,129660,127700],{},[59,129662,129604],{},"等都是文字类块级标签，里面也不能放其他块级元素",[339,129665,129667],{"id":129666},"_812-行内元素","8.1.2 行内元素",[19,129669,129670,129671,2139,129673,2139,129676,2139,129679,2139,129682,2139,129685,2139,129688,2139,129691,2139,129694,2139,129697,129699,129700,129702],{},"常见的行内元素有 ",[59,129672,127958],{},[59,129674,129675],{},"\u003Cstrong>",[59,129677,129678],{},"\u003Cb>",[59,129680,129681],{},"\u003Cem>",[59,129683,129684],{},"\u003Ci>",[59,129686,129687],{},"\u003Cdel>",[59,129689,129690],{},"\u003Cs>",[59,129692,129693],{},"\u003Cins>",[59,129695,129696],{},"\u003Cu>",[59,129698,127799],{}," 等，其中 ",[59,129701,127799],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,129704,129705],{},[2398,129706,129707],{},"特点：",[19,129709,129710],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,129712,129713],{},"② 高、宽直接设置是无效的。",[19,129715,129716],{},"③ 默认宽度就是它本身内容的宽度。",[19,129718,129719],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,129721,129722],{},[2398,129723,2287],{},[19,129725,129726],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,129728,129729,129730,129732,129733,129735],{},"②特殊情况链接 ",[59,129731,127958],{}," 里面可以放块级元素，但是给 ",[59,129734,127958],{}," 转换一下块级模式最安全",[339,129737,129739],{"id":129738},"_813-行内块元素","8.1.3 行内块元素",[19,129741,129742,129743,2139,129746,2139,129749,129752],{},"在行内元素中有几个特殊的标签 —— ",[59,129744,129745],{},"\u003Cimg \u002F>",[59,129747,129748],{},"\u003Cinput \u002F>",[59,129750,129751],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,129754,129755],{},[2398,129756,129757],{},"行内块元素的特点：",[19,129759,129760],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,129762,129763],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,129765,129766],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[339,129768,129770],{"id":129769},"_814-总结","8.1.4 总结",[3569,129772],{"style":128041,"src":129773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[339,129775,129777],{"id":129776},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,129779,129780],{},"①转换为块元素：display:block;",[51,129782,129784],{"className":128185,"code":129783,"language":128187,"meta":57,"style":57},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[59,129785,129786,129791,129797,129808,129820,129832],{"__ignoreMap":57},[79,129787,129788],{"class":81,"line":82},[79,129789,129790],{"class":2313},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[79,129792,129793,129795],{"class":81,"line":167},[79,129794,2482],{"class":232},[79,129796,17604],{"class":228},[79,129798,129799,129802,129804,129806],{"class":81,"line":178},[79,129800,129801],{"class":96},"  display",[79,129803,53431],{"class":228},[79,129805,62858],{"class":96},[79,129807,3400],{"class":228},[79,129809,129810,129812,129814,129816,129818],{"class":81,"line":545},[79,129811,72556],{"class":96},[79,129813,53431],{"class":228},[79,129815,2555],{"class":96},[79,129817,53486],{"class":448},[79,129819,3400],{"class":228},[79,129821,129822,129824,129826,129828,129830],{"class":81,"line":550},[79,129823,72776],{"class":96},[79,129825,53431],{"class":228},[79,129827,2644],{"class":96},[79,129829,53486],{"class":448},[79,129831,3400],{"class":228},[79,129833,129834],{"class":81,"line":562},[79,129835,3671],{"class":228},[19,129837,129838],{},"②转换为行内元素：display:inline;",[51,129840,129842],{"className":128185,"code":129841,"language":128187,"meta":57,"style":57},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[59,129843,129844,129849,129855,129866],{"__ignoreMap":57},[79,129845,129846],{"class":81,"line":82},[79,129847,129848],{"class":2313},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[79,129850,129851,129853],{"class":81,"line":167},[79,129852,53605],{"class":232},[79,129854,17604],{"class":228},[79,129856,129857,129859,129861,129864],{"class":81,"line":178},[79,129858,129801],{"class":96},[79,129860,53431],{"class":228},[79,129862,129863],{"class":96},"inline",[79,129865,3400],{"class":228},[79,129867,129868],{"class":81,"line":545},[79,129869,3671],{"class":228},[19,129871,129872],{},"③转换为行内块：display:inline-block;",[51,129874,129876],{"className":128185,"code":129875,"language":128187,"meta":57,"style":57},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[59,129877,129878,129883,129889,129899,129911,129923],{"__ignoreMap":57},[79,129879,129880],{"class":81,"line":82},[79,129881,129882],{"class":2313},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[79,129884,129885,129887],{"class":81,"line":167},[79,129886,79],{"class":232},[79,129888,17604],{"class":228},[79,129890,129891,129893,129895,129897],{"class":81,"line":178},[79,129892,129801],{"class":96},[79,129894,53431],{"class":228},[79,129896,74371],{"class":96},[79,129898,3400],{"class":228},[79,129900,129901,129903,129905,129907,129909],{"class":81,"line":545},[79,129902,72556],{"class":96},[79,129904,53431],{"class":228},[79,129906,2852],{"class":96},[79,129908,53486],{"class":448},[79,129910,3400],{"class":228},[79,129912,129913,129915,129917,129919,129921],{"class":81,"line":550},[79,129914,72776],{"class":96},[79,129916,53431],{"class":228},[79,129918,3190],{"class":96},[79,129920,53486],{"class":448},[79,129922,3400],{"class":228},[79,129924,129925],{"class":81,"line":562},[79,129926,3671],{"class":228},[339,129928,129930],{"id":129929},"_816-小米侧边栏","8.1.6 小米侧边栏",[3569,129932],{"style":128041,"src":129933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[51,129935,129937],{"className":128932,"code":129936,"language":128934,"meta":57,"style":57},"\u003C!-- 小米侧边栏案例 -->\n\u003Cdiv class=\"sidebar\">\n  \u003Ca href=\"#\">手机 电话卡\u003C\u002Fa>\n  \u003Ca href=\"#\">电视 盒子\u003C\u002Fa>\n  \u003Ca href=\"#\">笔记本 平板\u003C\u002Fa>\n  \u003Ca href=\"#\">出行 穿戴\u003C\u002Fa>\n  \u003Ca href=\"#\">智能 路由器\u003C\u002Fa>\n  \u003Ca href=\"#\">健康 儿童\u003C\u002Fa>\n  \u003Ca href=\"#\">耳机 音响\u003C\u002Fa>\n\u003C\u002Fdiv>\n",[59,129938,129939,129944,129959,129978,129997,130016,130035,130054,130073,130092],{"__ignoreMap":57},[79,129940,129941],{"class":81,"line":82},[79,129942,129943],{"class":2313},"\u003C!-- 小米侧边栏案例 -->\n",[79,129945,129946,129948,129950,129952,129954,129957],{"class":81,"line":167},[79,129947,229],{"class":228},[79,129949,53605],{"class":232},[79,129951,55477],{"class":85},[79,129953,239],{"class":228},[79,129955,129956],{"class":89},"\"sidebar\"",[79,129958,53301],{"class":228},[79,129960,129961,129963,129965,129967,129969,129971,129974,129976],{"class":81,"line":178},[79,129962,54138],{"class":228},[79,129964,2482],{"class":232},[79,129966,63046],{"class":85},[79,129968,239],{"class":228},[79,129970,63051],{"class":89},[79,129972,129973],{"class":228},">手机 电话卡\u003C\u002F",[79,129975,2482],{"class":232},[79,129977,53301],{"class":228},[79,129979,129980,129982,129984,129986,129988,129990,129993,129995],{"class":81,"line":545},[79,129981,54138],{"class":228},[79,129983,2482],{"class":232},[79,129985,63046],{"class":85},[79,129987,239],{"class":228},[79,129989,63051],{"class":89},[79,129991,129992],{"class":228},">电视 盒子\u003C\u002F",[79,129994,2482],{"class":232},[79,129996,53301],{"class":228},[79,129998,129999,130001,130003,130005,130007,130009,130012,130014],{"class":81,"line":550},[79,130000,54138],{"class":228},[79,130002,2482],{"class":232},[79,130004,63046],{"class":85},[79,130006,239],{"class":228},[79,130008,63051],{"class":89},[79,130010,130011],{"class":228},">笔记本 平板\u003C\u002F",[79,130013,2482],{"class":232},[79,130015,53301],{"class":228},[79,130017,130018,130020,130022,130024,130026,130028,130031,130033],{"class":81,"line":562},[79,130019,54138],{"class":228},[79,130021,2482],{"class":232},[79,130023,63046],{"class":85},[79,130025,239],{"class":228},[79,130027,63051],{"class":89},[79,130029,130030],{"class":228},">出行 穿戴\u003C\u002F",[79,130032,2482],{"class":232},[79,130034,53301],{"class":228},[79,130036,130037,130039,130041,130043,130045,130047,130050,130052],{"class":81,"line":568},[79,130038,54138],{"class":228},[79,130040,2482],{"class":232},[79,130042,63046],{"class":85},[79,130044,239],{"class":228},[79,130046,63051],{"class":89},[79,130048,130049],{"class":228},">智能 路由器\u003C\u002F",[79,130051,2482],{"class":232},[79,130053,53301],{"class":228},[79,130055,130056,130058,130060,130062,130064,130066,130069,130071],{"class":81,"line":574},[79,130057,54138],{"class":228},[79,130059,2482],{"class":232},[79,130061,63046],{"class":85},[79,130063,239],{"class":228},[79,130065,63051],{"class":89},[79,130067,130068],{"class":228},">健康 儿童\u003C\u002F",[79,130070,2482],{"class":232},[79,130072,53301],{"class":228},[79,130074,130075,130077,130079,130081,130083,130085,130088,130090],{"class":81,"line":579},[79,130076,54138],{"class":228},[79,130078,2482],{"class":232},[79,130080,63046],{"class":85},[79,130082,239],{"class":228},[79,130084,63051],{"class":89},[79,130086,130087],{"class":228},">耳机 音响\u003C\u002F",[79,130089,2482],{"class":232},[79,130091,53301],{"class":228},[79,130093,130094,130096,130098],{"class":81,"line":585},[79,130095,53779],{"class":228},[79,130097,53605],{"class":232},[79,130099,53301],{"class":228},[51,130101,130103],{"className":128185,"code":130102,"language":128187,"meta":57,"style":57},".sidebar a {\n  display: block;\n  width: 234px;\n  height: 42px;\n  line-height: 42px;\n  padding-left: 30px;\n  color: #fff;\n  background-color: #55585a;\n}\n.sidebar a:hover {\n  background-color: #ff6700;\n}\n",[59,130104,130105,130114,130124,130137,130149,130161,130173,130183,130194,130198,130208,130219],{"__ignoreMap":57},[79,130106,130107,130110,130112],{"class":81,"line":82},[79,130108,130109],{"class":85},".sidebar",[79,130111,3505],{"class":232},[79,130113,17604],{"class":228},[79,130115,130116,130118,130120,130122],{"class":81,"line":167},[79,130117,129801],{"class":96},[79,130119,53431],{"class":228},[79,130121,62858],{"class":96},[79,130123,3400],{"class":228},[79,130125,130126,130128,130130,130133,130135],{"class":81,"line":178},[79,130127,72556],{"class":96},[79,130129,53431],{"class":228},[79,130131,130132],{"class":96},"234",[79,130134,53486],{"class":448},[79,130136,3400],{"class":228},[79,130138,130139,130141,130143,130145,130147],{"class":81,"line":545},[79,130140,72776],{"class":96},[79,130142,53431],{"class":228},[79,130144,2695],{"class":96},[79,130146,53486],{"class":448},[79,130148,3400],{"class":228},[79,130150,130151,130153,130155,130157,130159],{"class":81,"line":550},[79,130152,128869],{"class":96},[79,130154,53431],{"class":228},[79,130156,2695],{"class":96},[79,130158,53486],{"class":448},[79,130160,3400],{"class":228},[79,130162,130163,130165,130167,130169,130171],{"class":81,"line":562},[79,130164,72811],{"class":96},[79,130166,53431],{"class":228},[79,130168,3190],{"class":96},[79,130170,53486],{"class":448},[79,130172,3400],{"class":228},[79,130174,130175,130177,130179,130181],{"class":81,"line":568},[79,130176,72893],{"class":96},[79,130178,53431],{"class":228},[79,130180,62831],{"class":96},[79,130182,3400],{"class":228},[79,130184,130185,130187,130189,130192],{"class":81,"line":574},[79,130186,72866],{"class":96},[79,130188,53431],{"class":228},[79,130190,130191],{"class":96},"#55585a",[79,130193,3400],{"class":228},[79,130195,130196],{"class":81,"line":579},[79,130197,3671],{"class":228},[79,130199,130200,130202,130204,130206],{"class":81,"line":585},[79,130201,130109],{"class":85},[79,130203,3505],{"class":232},[79,130205,62929],{"class":85},[79,130207,17604],{"class":228},[79,130209,130210,130212,130214,130217],{"class":81,"line":591},[79,130211,72866],{"class":96},[79,130213,53431],{"class":228},[79,130215,130216],{"class":96},"#ff6700",[79,130218,3400],{"class":228},[79,130220,130221],{"class":81,"line":596},[79,130222,3671],{"class":228},[3569,130224],{"style":128041,"src":130225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,130227,130228],{},"行高=盒子高度：实现文字的垂直居中",[19,130230,130231],{},"原理讲解：",[3569,130233],{"style":128041,"src":130234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,130236,130238],{"id":130237},"_82-css背景","8.2 css背景",[19,130240,130241],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[339,130243,130245],{"id":130244},"_821-背景颜色","8.2.1 背景颜色",[19,130247,130248],{},"background-color:颜色值;",[19,130250,130251],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[339,130253,130255],{"id":130254},"_822-背景图片","8.2.2 背景图片",[19,130257,130258],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[51,130260,130262],{"className":128185,"code":130261,"language":128187,"meta":57,"style":57},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[59,130263,130264,130270,130286],{"__ignoreMap":57},[79,130265,130266,130268],{"class":81,"line":82},[79,130267,53605],{"class":232},[79,130269,17604],{"class":228},[79,130271,130272,130275,130277,130279,130281,130284],{"class":81,"line":167},[79,130273,130274],{"class":96},"  background-image",[79,130276,53431],{"class":228},[79,130278,63715],{"class":96},[79,130280,455],{"class":228},[79,130282,130283],{"class":7284},"images\u002Fbg.png",[79,130285,4795],{"class":228},[79,130287,130288],{"class":81,"line":178},[79,130289,3671],{"class":228},[347,130291,130292,130301],{},[350,130293,130294],{},[353,130295,130296,130299],{},[356,130297,130298],{"align":358},"参数值",[356,130300,104628],{"align":358},[367,130302,130303,130310],{},[353,130304,130305,130307],{},[372,130306,56726],{"align":358},[372,130308,130309],{"align":358},"无背景图（默认的）",[353,130311,130312,130314],{},[372,130313,63715],{"align":358},[372,130315,130316],{"align":358},"使用绝对或相对地址指定背景图像",[51,130318,130319],{"className":128185,"code":130261,"language":128187,"meta":57,"style":57},[59,130320,130321,130327,130341],{"__ignoreMap":57},[79,130322,130323,130325],{"class":81,"line":82},[79,130324,53605],{"class":232},[79,130326,17604],{"class":228},[79,130328,130329,130331,130333,130335,130337,130339],{"class":81,"line":167},[79,130330,130274],{"class":96},[79,130332,53431],{"class":228},[79,130334,63715],{"class":96},[79,130336,455],{"class":228},[79,130338,130283],{"class":7284},[79,130340,4795],{"class":228},[79,130342,130343],{"class":81,"line":178},[79,130344,3671],{"class":228},[19,130346,130347],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[339,130349,130351],{"id":130350},"_823-背景平铺","8.2.3 背景平铺",[51,130353,130355],{"className":128185,"code":130354,"language":128187,"meta":57,"style":57},"div {\n  background-repeat: no-repeat;\n}\n",[59,130356,130357,130363,130374],{"__ignoreMap":57},[79,130358,130359,130361],{"class":81,"line":82},[79,130360,53605],{"class":232},[79,130362,17604],{"class":228},[79,130364,130365,130368,130370,130372],{"class":81,"line":167},[79,130366,130367],{"class":96},"  background-repeat",[79,130369,53431],{"class":228},[79,130371,63725],{"class":96},[79,130373,3400],{"class":228},[79,130375,130376],{"class":81,"line":178},[79,130377,3671],{"class":228},[347,130379,130380,130388],{},[350,130381,130382],{},[353,130383,130384,130386],{},[356,130385,130298],{"align":358},[356,130387,104628],{"align":358},[367,130389,130390,130398,130405,130413],{},[353,130391,130392,130395],{},[372,130393,130394],{"align":358},"repeat",[372,130396,130397],{"align":358},"背景图像在纵向和横向上平铺（默认的）",[353,130399,130400,130402],{},[372,130401,63725],{"align":358},[372,130403,130404],{"align":358},"背景图像不平铺",[353,130406,130407,130410],{},[372,130408,130409],{"align":358},"repeat-x",[372,130411,130412],{"align":358},"背景图像在横向上平铺",[353,130414,130415,130418],{},[372,130416,130417],{"align":358},"repeat-y",[372,130419,130420],{"align":358},"背景图像在纵向平铺",[339,130422,130424],{"id":130423},"_824-背景图片位置","8.2.4 背景图片位置",[51,130426,130428],{"className":128185,"code":130427,"language":128187,"meta":57,"style":57},"\u002F* 方位名词 *\u002F\ndiv {\n  background-position: center top;\n}\n\u002F* 精确单位 *\u002F\ndiv {\n  background-position: 20px 50px;\n}\n\u002F* 混合单位 *\u002F\ndiv {\n  background-position: 20px center;\n}\n",[59,130429,130430,130435,130441,130455,130459,130464,130470,130486,130490,130495,130501,130515],{"__ignoreMap":57},[79,130431,130432],{"class":81,"line":82},[79,130433,130434],{"class":2313},"\u002F* 方位名词 *\u002F\n",[79,130436,130437,130439],{"class":81,"line":167},[79,130438,53605],{"class":232},[79,130440,17604],{"class":228},[79,130442,130443,130446,130448,130450,130453],{"class":81,"line":178},[79,130444,130445],{"class":96},"  background-position",[79,130447,53431],{"class":228},[79,130449,53586],{"class":96},[79,130451,130452],{"class":96}," top",[79,130454,3400],{"class":228},[79,130456,130457],{"class":81,"line":545},[79,130458,3671],{"class":228},[79,130460,130461],{"class":81,"line":550},[79,130462,130463],{"class":2313},"\u002F* 精确单位 *\u002F\n",[79,130465,130466,130468],{"class":81,"line":562},[79,130467,53605],{"class":232},[79,130469,17604],{"class":228},[79,130471,130472,130474,130476,130478,130480,130482,130484],{"class":81,"line":568},[79,130473,130445],{"class":96},[79,130475,53431],{"class":228},[79,130477,2940],{"class":96},[79,130479,53486],{"class":448},[79,130481,59493],{"class":96},[79,130483,53486],{"class":448},[79,130485,3400],{"class":228},[79,130487,130488],{"class":81,"line":574},[79,130489,3671],{"class":228},[79,130491,130492],{"class":81,"line":579},[79,130493,130494],{"class":2313},"\u002F* 混合单位 *\u002F\n",[79,130496,130497,130499],{"class":81,"line":585},[79,130498,53605],{"class":232},[79,130500,17604],{"class":228},[79,130502,130503,130505,130507,130509,130511,130513],{"class":81,"line":591},[79,130504,130445],{"class":96},[79,130506,53431],{"class":228},[79,130508,2940],{"class":96},[79,130510,53486],{"class":448},[79,130512,19169],{"class":96},[79,130514,3400],{"class":228},[79,130516,130517],{"class":81,"line":596},[79,130518,3671],{"class":228},[19,130520,130521],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[347,130523,130524,130532],{},[350,130525,130526],{},[353,130527,130528,130530],{},[356,130529,130298],{"align":358},[356,130531,27888],{"align":358},[367,130533,130534,130541],{},[353,130535,130536,130538],{},[372,130537,53962],{"align":358},[372,130539,130540],{"align":358},"百分数|由浮点数和单位标识符组成的长度值",[353,130542,130543,130546],{},[372,130544,130545],{"align":358},"position",[372,130547,130548],{"align":358},"top|center|bottom|left|center|right 方位名词",[19,130550,130551],{},"其他说明：",[19,130553,130554],{},"①参数是方位名词",[19,130556,130557],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,130559,130560],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,130562,130563],{},"②参数是精确单位",[19,130565,130566],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,130568,130569],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,130571,130572],{},"③参数是混合单位",[19,130574,130575],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[339,130577,130579],{"id":130578},"_825-背景图片固定","8.2.5 背景图片固定",[51,130581,130583],{"className":128185,"code":130582,"language":128187,"meta":57,"style":57},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[59,130584,130585,130590,130596,130608,130612,130617,130623,130633],{"__ignoreMap":57},[79,130586,130587],{"class":81,"line":82},[79,130588,130589],{"class":2313},"\u002F* 背景滚动（默认） *\u002F\n",[79,130591,130592,130594],{"class":81,"line":167},[79,130593,53605],{"class":232},[79,130595,17604],{"class":228},[79,130597,130598,130601,130603,130606],{"class":81,"line":178},[79,130599,130600],{"class":96},"  background-attachment",[79,130602,53431],{"class":228},[79,130604,130605],{"class":96},"scroll",[79,130607,3400],{"class":228},[79,130609,130610],{"class":81,"line":545},[79,130611,3671],{"class":228},[79,130613,130614],{"class":81,"line":550},[79,130615,130616],{"class":2313},"\u002F* 背景固定 *\u002F\n",[79,130618,130619,130621],{"class":81,"line":562},[79,130620,53605],{"class":232},[79,130622,17604],{"class":228},[79,130624,130625,130627,130629,130631],{"class":81,"line":568},[79,130626,130600],{"class":96},[79,130628,53431],{"class":228},[79,130630,88220],{"class":96},[79,130632,3400],{"class":228},[79,130634,130635],{"class":81,"line":574},[79,130636,3671],{"class":228},[347,130638,130639,130648],{},[350,130640,130641],{},[353,130642,130643,130646],{},[356,130644,130645],{"align":358},"参数",[356,130647,104628],{"align":358},[367,130649,130650,130657],{},[353,130651,130652,130654],{},[372,130653,130605],{"align":358},[372,130655,130656],{"align":358},"背景图像是随对象内容滚动",[353,130658,130659,130661],{},[372,130660,88220],{"align":358},[372,130662,130663],{"align":358},"背景图像固定",[339,130665,130667],{"id":130666},"_826-背景样式合写","8.2.6 背景样式合写",[51,130669,130671],{"className":128185,"code":130670,"language":128187,"meta":57,"style":57},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[59,130672,130673,130678,130684,130712],{"__ignoreMap":57},[79,130674,130675],{"class":81,"line":82},[79,130676,130677],{"class":2313},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[79,130679,130680,130682],{"class":81,"line":167},[79,130681,53605],{"class":232},[79,130683,17604],{"class":228},[79,130685,130686,130688,130690,130692,130695,130697,130699,130701,130703,130706,130708,130710],{"class":81,"line":178},[79,130687,72599],{"class":96},[79,130689,53431],{"class":228},[79,130691,62831],{"class":96},[79,130693,130694],{"class":96}," url",[79,130696,455],{"class":228},[79,130698,130283],{"class":7284},[79,130700,15747],{"class":228},[79,130702,63725],{"class":96},[79,130704,130705],{"class":96}," fixed",[79,130707,19169],{"class":96},[79,130709,130452],{"class":96},[79,130711,3400],{"class":228},[79,130713,130714],{"class":81,"line":545},[79,130715,3671],{"class":228},[339,130717,130719],{"id":130718},"_827-背景色半透明","8.2.7 背景色半透明",[51,130721,130723],{"className":128185,"code":130722,"language":128187,"meta":57,"style":57},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[59,130724,130725,130731,130757],{"__ignoreMap":57},[79,130726,130727,130729],{"class":81,"line":82},[79,130728,53605],{"class":232},[79,130730,17604],{"class":228},[79,130732,130733,130735,130737,130739,130741,130743,130745,130747,130749,130751,130753,130755],{"class":81,"line":167},[79,130734,72599],{"class":96},[79,130736,53431],{"class":228},[79,130738,57099],{"class":96},[79,130740,455],{"class":228},[79,130742,759],{"class":96},[79,130744,1020],{"class":228},[79,130746,759],{"class":96},[79,130748,1020],{"class":228},[79,130750,759],{"class":96},[79,130752,1020],{"class":228},[79,130754,102506],{"class":96},[79,130756,4795],{"class":228},[79,130758,130759],{"class":81,"line":178},[79,130760,3671],{"class":228},[19,130762,101381],{},[19,130764,130765],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,130767,130768],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,130770,130771],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,130773,130774],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[339,130776,130778],{"id":130777},"_828-总结","8.2.8 总结",[347,130780,130781,130792],{},[350,130782,130783],{},[353,130784,130785,130788,130790],{},[356,130786,130787],{"align":358},"属性",[356,130789,104628],{"align":358},[356,130791,2401],{"align":358},[367,130793,130794,130805,130816,130827,130838,130849,130860],{},[353,130795,130796,130799,130802],{},[372,130797,130798],{"align":358},"background-color",[372,130800,130801],{"align":358},"背景颜色",[372,130803,130804],{"align":358},"预定义的颜色值\u002F十六进制\u002FRGB代码",[353,130806,130807,130810,130813],{},[372,130808,130809],{"align":358},"background-image",[372,130811,130812],{"align":358},"背景图片",[372,130814,130815],{"align":358},"url(图片路径)",[353,130817,130818,130821,130824],{},[372,130819,130820],{"align":358},"background-repeat",[372,130822,130823],{"align":358},"是否平铺",[372,130825,130826],{"align":358},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[353,130828,130829,130832,130835],{},[372,130830,130831],{"align":358},"background-position",[372,130833,130834],{"align":358},"背景位置",[372,130836,130837],{"align":358},"length\u002Fposition 分别是x和y坐标",[353,130839,130840,130843,130846],{},[372,130841,130842],{"align":358},"background-attachment",[372,130844,130845],{"align":358},"背景附着",[372,130847,130848],{"align":358},"scroll(背景滚动) \u002Ffixed (背景固定)",[353,130850,130851,130854,130857],{},[372,130852,130853],{"align":358},"背景简写",[372,130855,130856],{"align":358},"书写更简单",[372,130858,130859],{"align":358},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[353,130861,130862,130865,130868],{},[372,130863,130864],{"align":358},"背景半透明",[372,130866,130867],{"align":358},"背景颜色半透明",[372,130869,130870],{"align":358},"background: rgba(0,0,0.3); 后面必须是4个值",[19,130872,130873],{},"颜色渐变：",[3569,130875],{"style":128041,"src":130876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[3569,130878],{"style":128041,"src":130879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[339,130881,130883],{"id":130882},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[51,130885,130887],{"className":128932,"code":130886,"language":128934,"meta":57,"style":57},"\u003Cdiv class=\"nav\">\n  \u003Ca href=\"#\">五彩导航1\u003C\u002Fa>\n  \u003Ca href=\"#\">五彩导航2\u003C\u002Fa>\n  \u003Ca href=\"#\">五彩导航3\u003C\u002Fa>\n  \u003Ca href=\"#\">五彩导航4\u003C\u002Fa>\n  \u003Ca href=\"#\">五彩导航5\u003C\u002Fa>\n\u003C\u002Fdiv>\n",[59,130888,130889,130904,130923,130942,130961,130980,130999],{"__ignoreMap":57},[79,130890,130891,130893,130895,130897,130899,130902],{"class":81,"line":82},[79,130892,229],{"class":228},[79,130894,53605],{"class":232},[79,130896,55477],{"class":85},[79,130898,239],{"class":228},[79,130900,130901],{"class":89},"\"nav\"",[79,130903,53301],{"class":228},[79,130905,130906,130908,130910,130912,130914,130916,130919,130921],{"class":81,"line":167},[79,130907,54138],{"class":228},[79,130909,2482],{"class":232},[79,130911,63046],{"class":85},[79,130913,239],{"class":228},[79,130915,63051],{"class":89},[79,130917,130918],{"class":228},">五彩导航1\u003C\u002F",[79,130920,2482],{"class":232},[79,130922,53301],{"class":228},[79,130924,130925,130927,130929,130931,130933,130935,130938,130940],{"class":81,"line":178},[79,130926,54138],{"class":228},[79,130928,2482],{"class":232},[79,130930,63046],{"class":85},[79,130932,239],{"class":228},[79,130934,63051],{"class":89},[79,130936,130937],{"class":228},">五彩导航2\u003C\u002F",[79,130939,2482],{"class":232},[79,130941,53301],{"class":228},[79,130943,130944,130946,130948,130950,130952,130954,130957,130959],{"class":81,"line":545},[79,130945,54138],{"class":228},[79,130947,2482],{"class":232},[79,130949,63046],{"class":85},[79,130951,239],{"class":228},[79,130953,63051],{"class":89},[79,130955,130956],{"class":228},">五彩导航3\u003C\u002F",[79,130958,2482],{"class":232},[79,130960,53301],{"class":228},[79,130962,130963,130965,130967,130969,130971,130973,130976,130978],{"class":81,"line":550},[79,130964,54138],{"class":228},[79,130966,2482],{"class":232},[79,130968,63046],{"class":85},[79,130970,239],{"class":228},[79,130972,63051],{"class":89},[79,130974,130975],{"class":228},">五彩导航4\u003C\u002F",[79,130977,2482],{"class":232},[79,130979,53301],{"class":228},[79,130981,130982,130984,130986,130988,130990,130992,130995,130997],{"class":81,"line":562},[79,130983,54138],{"class":228},[79,130985,2482],{"class":232},[79,130987,63046],{"class":85},[79,130989,239],{"class":228},[79,130991,63051],{"class":89},[79,130993,130994],{"class":228},">五彩导航5\u003C\u002F",[79,130996,2482],{"class":232},[79,130998,53301],{"class":228},[79,131000,131001,131003,131005],{"class":81,"line":568},[79,131002,53779],{"class":228},[79,131004,53605],{"class":232},[79,131006,53301],{"class":228},[51,131008,131010],{"className":128185,"code":131009,"language":128187,"meta":57,"style":57},".nav a {\n  display: inline-block;\n  width: 120px;\n  height: 58px;\n  text-align: center;\n  line-height: 58px;\n  color: #fff;\n}\n.nav a:nth-child(1) { background-color: #ff6700; }\n.nav a:nth-child(2) { background-color: #ff0000; }\n.nav a:nth-child(3) { background-color: #00a4ff; }\n.nav a:nth-child(4) { background-color: #ff00ff; }\n.nav a:nth-child(5) { background-color: #00ff00; }\n",[59,131011,131012,131021,131031,131043,131055,131065,131077,131087,131091,131116,131139,131162,131185],{"__ignoreMap":57},[79,131013,131014,131017,131019],{"class":81,"line":82},[79,131015,131016],{"class":85},".nav",[79,131018,3505],{"class":232},[79,131020,17604],{"class":228},[79,131022,131023,131025,131027,131029],{"class":81,"line":167},[79,131024,129801],{"class":96},[79,131026,53431],{"class":228},[79,131028,74371],{"class":96},[79,131030,3400],{"class":228},[79,131032,131033,131035,131037,131039,131041],{"class":81,"line":178},[79,131034,72556],{"class":96},[79,131036,53431],{"class":228},[79,131038,3057],{"class":96},[79,131040,53486],{"class":448},[79,131042,3400],{"class":228},[79,131044,131045,131047,131049,131051,131053],{"class":81,"line":545},[79,131046,72776],{"class":96},[79,131048,53431],{"class":228},[79,131050,3096],{"class":96},[79,131052,53486],{"class":448},[79,131054,3400],{"class":228},[79,131056,131057,131059,131061,131063],{"class":81,"line":550},[79,131058,72514],{"class":96},[79,131060,53431],{"class":228},[79,131062,53586],{"class":96},[79,131064,3400],{"class":228},[79,131066,131067,131069,131071,131073,131075],{"class":81,"line":562},[79,131068,128869],{"class":96},[79,131070,53431],{"class":228},[79,131072,3096],{"class":96},[79,131074,53486],{"class":448},[79,131076,3400],{"class":228},[79,131078,131079,131081,131083,131085],{"class":81,"line":568},[79,131080,72893],{"class":96},[79,131082,53431],{"class":228},[79,131084,62831],{"class":96},[79,131086,3400],{"class":228},[79,131088,131089],{"class":81,"line":574},[79,131090,3671],{"class":228},[79,131092,131093,131095,131097,131100,131102,131104,131107,131109,131111,131113],{"class":81,"line":579},[79,131094,131016],{"class":85},[79,131096,3505],{"class":232},[79,131098,131099],{"class":85},":nth-child",[79,131101,455],{"class":228},[79,131103,775],{"class":96},[79,131105,131106],{"class":228},") { ",[79,131108,130798],{"class":96},[79,131110,53431],{"class":228},[79,131112,130216],{"class":96},[79,131114,131115],{"class":228},"; }\n",[79,131117,131118,131120,131122,131124,131126,131128,131130,131132,131134,131137],{"class":81,"line":585},[79,131119,131016],{"class":85},[79,131121,3505],{"class":232},[79,131123,131099],{"class":85},[79,131125,455],{"class":228},[79,131127,2331],{"class":96},[79,131129,131106],{"class":228},[79,131131,130798],{"class":96},[79,131133,53431],{"class":228},[79,131135,131136],{"class":96},"#ff0000",[79,131138,131115],{"class":228},[79,131140,131141,131143,131145,131147,131149,131151,131153,131155,131157,131160],{"class":81,"line":591},[79,131142,131016],{"class":85},[79,131144,3505],{"class":232},[79,131146,131099],{"class":85},[79,131148,455],{"class":228},[79,131150,970],{"class":96},[79,131152,131106],{"class":228},[79,131154,130798],{"class":96},[79,131156,53431],{"class":228},[79,131158,131159],{"class":96},"#00a4ff",[79,131161,131115],{"class":228},[79,131163,131164,131166,131168,131170,131172,131174,131176,131178,131180,131183],{"class":81,"line":596},[79,131165,131016],{"class":85},[79,131167,3505],{"class":232},[79,131169,131099],{"class":85},[79,131171,455],{"class":228},[79,131173,2537],{"class":96},[79,131175,131106],{"class":228},[79,131177,130798],{"class":96},[79,131179,53431],{"class":228},[79,131181,131182],{"class":96},"#ff00ff",[79,131184,131115],{"class":228},[79,131186,131187,131189,131191,131193,131195,131197,131199,131201,131203,131206],{"class":81,"line":602},[79,131188,131016],{"class":85},[79,131190,3505],{"class":232},[79,131192,131099],{"class":85},[79,131194,455],{"class":228},[79,131196,2563],{"class":96},[79,131198,131106],{"class":228},[79,131200,130798],{"class":96},[79,131202,53431],{"class":228},[79,131204,131205],{"class":96},"#00ff00",[79,131207,131115],{"class":228},[14,131209,131211],{"id":131210},"_83-css三大特性","8.3 css三大特性",[339,131213,131215],{"id":131214},"_831-层叠性","8.3.1 层叠性",[19,131217,131218],{},"为了解决样式冲突问题",[19,131220,131221],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,131223,131224],{},"   ②样式不冲突，不会层叠",[339,131226,131228],{"id":131227},"_832-继承性","8.3.2 继承性",[19,131230,131231],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,131233,131234],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[51,131236,131238],{"className":128185,"code":131237,"language":128187,"meta":57,"style":57},"p {\n  color: #333;\n}\n",[59,131239,131240,131246,131256],{"__ignoreMap":57},[79,131241,131242,131244],{"class":81,"line":82},[79,131243,19],{"class":232},[79,131245,17604],{"class":228},[79,131247,131248,131250,131252,131254],{"class":81,"line":167},[79,131249,72893],{"class":96},[79,131251,53431],{"class":228},[79,131253,64357],{"class":96},[79,131255,3400],{"class":228},[79,131257,131258],{"class":81,"line":178},[79,131259,3671],{"class":228},[3569,131261],{"style":128041,"src":131262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,131264,131265],{},"解释：①行高可以跟单位也可以不跟单位",[19,131267,131268],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,131270,131271],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,131273,131274],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[339,131276,131278],{"id":131277},"_833-优先级","8.3.3 优先级",[26,131280,131281,131284],{},[29,131282,131283],{},"选择器相同，则执行层叠性",[29,131285,131286],{},"选择器不同，则根据选择器权重执行",[347,131288,131289,131299],{},[350,131290,131291],{},[353,131292,131293,131296],{},[356,131294,131295],{"align":358},"选择器",[356,131297,131298],{"align":358},"选择器权重",[367,131300,131301,131309,131317,131325,131333,131341],{},[353,131302,131303,131306],{},[372,131304,131305],{"align":358},"继承 或者*",[372,131307,131308],{"align":358},"0，0，0，0",[353,131310,131311,131314],{},[372,131312,131313],{"align":358},"标签选择器",[372,131315,131316],{"align":358},"0，0，0，1",[353,131318,131319,131322],{},[372,131320,131321],{"align":358},"类选择器，伪类选择器",[372,131323,131324],{"align":358},"0，0，1，0",[353,131326,131327,131330],{},[372,131328,131329],{"align":358},"ID选择器",[372,131331,131332],{"align":358},"0，1，0，0",[353,131334,131335,131338],{},[372,131336,131337],{"align":358},"行内样式",[372,131339,131340],{"align":358},"1，0，0，0",[353,131342,131343,131346],{},[372,131344,131345],{"align":358},"！important",[372,131347,131348],{"align":358},"无穷大",[19,131350,131351],{},"! important用法：",[51,131353,131355],{"className":128185,"code":131354,"language":128187,"meta":57,"style":57},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[59,131356,131357,131362,131368,131381,131385,131390,131396,131406],{"__ignoreMap":57},[79,131358,131359],{"class":81,"line":82},[79,131360,131361],{"class":2313},"\u002F* !important 拥有最高优先级 *\u002F\n",[79,131363,131364,131366],{"class":81,"line":167},[79,131365,53605],{"class":232},[79,131367,17604],{"class":228},[79,131369,131370,131372,131374,131376,131379],{"class":81,"line":178},[79,131371,72893],{"class":96},[79,131373,53431],{"class":228},[79,131375,53639],{"class":96},[79,131377,131378],{"class":448}," !important",[79,131380,3400],{"class":228},[79,131382,131383],{"class":81,"line":545},[79,131384,3671],{"class":228},[79,131386,131387],{"class":81,"line":550},[79,131388,131389],{"class":2313},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[79,131391,131392,131394],{"class":81,"line":562},[79,131393,53605],{"class":232},[79,131395,17604],{"class":228},[79,131397,131398,131400,131402,131404],{"class":81,"line":568},[79,131399,72893],{"class":96},[79,131401,53431],{"class":228},[79,131403,59410],{"class":96},[79,131405,3400],{"class":228},[79,131407,131408],{"class":81,"line":574},[79,131409,3671],{"class":228},[19,131411,131412],{},"优先级注意点：",[19,131414,131415],{},"①权重是有4组数字组成,但是不会有进位",[19,131417,131418],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,131420,131421],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,131423,131424],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,131426,131427],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,131429,131430],{},"⑥复合选择器",[347,131432,131433,131443],{},[350,131434,131435],{},[353,131436,131437,131440],{},[356,131438,131439],{"align":358},"div ul li",[356,131441,131442],{"align":358},"0,0,0,3",[367,131444,131445,131453,131461],{},[353,131446,131447,131450],{},[372,131448,131449],{"align":358},".nav ul li",[372,131451,131452],{"align":358},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[353,131454,131455,131458],{},[372,131456,131457],{"align":358},"a:hover",[372,131459,131460],{"align":358},"0,0,1,1",[353,131462,131463,131466],{},[372,131464,131465],{"align":358},".nav a",[372,131467,131460],{"align":358},[2159,131469,131470],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":57,"searchDepth":167,"depth":167,"links":131472},[131473,131481,131492],{"id":129581,"depth":167,"text":129582,"children":131474},[131475,131476,131477,131478,131479,131480],{"id":129594,"depth":178,"text":129595},{"id":129666,"depth":178,"text":129667},{"id":129738,"depth":178,"text":129739},{"id":129769,"depth":178,"text":129770},{"id":129776,"depth":178,"text":129777},{"id":129929,"depth":178,"text":129930},{"id":130237,"depth":167,"text":130238,"children":131482},[131483,131484,131485,131486,131487,131488,131489,131490,131491],{"id":130244,"depth":178,"text":130245},{"id":130254,"depth":178,"text":130255},{"id":130350,"depth":178,"text":130351},{"id":130423,"depth":178,"text":130424},{"id":130578,"depth":178,"text":130579},{"id":130666,"depth":178,"text":130667},{"id":130718,"depth":178,"text":130719},{"id":130777,"depth":178,"text":130778},{"id":130882,"depth":178,"text":130883},{"id":131210,"depth":167,"text":131211,"children":131493},[131494,131495,131496],{"id":131214,"depth":178,"text":131215},{"id":131227,"depth":178,"text":131228},{"id":131277,"depth":178,"text":131278},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":129573,"description":25402},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":131503,"title":131504,"body":131505,"description":25402,"extension":2186,"meta":133095,"navigation":541,"path":133096,"seo":133097,"stem":133098,"__hash__":133099},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":131506,"toc":133074},[131507,131510,131514,131517,131520,131523,131526,131529,131532,131535,131539,131547,131584,131620,131623,131637,131642,131676,131679,131772,131777,131780,131810,131813,131818,131826,131830,131837,131883,131927,131932,131935,131938,131941,131944,131947,131950,131952,131955,131959,131964,132008,132013,132016,132019,132056,132061,132064,132067,132070,132073,132105,132108,132111,132114,132146,132149,132152,132155,132159,132162,132194,132197,132201,132221,132224,132232,132235,132239,132244,132247,132279,132284,132287,132325,132329,132334,132337,132340,132371,132374,132391,132396,132448,132508,132513,132567,132605,132609,132613,132616,132620,132628,132631,132633,132644,132649,132697,132731,132734,132737,132740,132743,132787,132790,132793,132796,132799,132802,132805,132849,132852,132855,132858,132861,132864,132867,132873,132876,132920,132923,132926,132929,132932,132935,132979,132982,132984,132987,132991,132995,133033,133037,133040,133043,133047,133055,133059,133062,133065,133068,133071],[10,131508,131504],{"id":131509},"_9-css盒模型浮动与切图",[14,131511,131513],{"id":131512},"_91-盒子模型","9.1 盒子模型",[19,131515,131516],{},"利用盒子来设计网页",[19,131518,131519],{},"盒子包含：边框、外边距、内边距、实际内容",[19,131521,131522],{},"网页布局设置：",[19,131524,131525],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,131527,131528],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,131530,131531],{},"③往盒子里装内容",[3569,131533],{"style":128041,"src":131534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[339,131536,131538],{"id":131537},"_911-边框border","9.1.1 边框（border）",[26,131540,131541,131544],{},[29,131542,131543],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[29,131545,131546],{},"语法",[51,131548,131550],{"className":128185,"code":131549,"language":128187,"meta":57,"style":57},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[59,131551,131552,131557,131563,131580],{"__ignoreMap":57},[79,131553,131554],{"class":81,"line":82},[79,131555,131556],{"class":2313},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[79,131558,131559,131561],{"class":81,"line":167},[79,131560,53605],{"class":232},[79,131562,17604],{"class":228},[79,131564,131565,131567,131569,131571,131573,131575,131578],{"class":81,"line":178},[79,131566,72884],{"class":96},[79,131568,53431],{"class":228},[79,131570,775],{"class":96},[79,131572,53486],{"class":448},[79,131574,53515],{"class":96},[79,131576,131577],{"class":96}," #ccc",[79,131579,3400],{"class":228},[79,131581,131582],{"class":81,"line":545},[79,131583,3671],{"class":228},[347,131585,131586,131594],{},[350,131587,131588],{},[353,131589,131590,131592],{},[356,131591,130787],{"align":358},[356,131593,104628],{"align":358},[367,131595,131596,131604,131612],{},[353,131597,131598,131601],{},[372,131599,131600],{"align":358},"border-width",[372,131602,131603],{"align":358},"定义边框粗细，单位是px",[353,131605,131606,131609],{},[372,131607,131608],{"align":358},"border-style",[372,131610,131611],{"align":358},"边框的样式",[353,131613,131614,131617],{},[372,131615,131616],{"align":358},"border-color",[372,131618,131619],{"align":358},"边框的颜色",[19,131621,131622],{},"边框样式 border-style 可以设置如下值：",[3246,131624,131625,131628,131631,131634],{},[29,131626,131627],{},"none：没有边框即忽略所有边框的宽度（默认值）",[29,131629,131630],{},"solid：边框为单实线(最为常用的)",[29,131632,131633],{},"dashed：边框为虚线",[29,131635,131636],{},"dotted：边框为点线",[26,131638,131639],{"start":178},[29,131640,131641],{},"边框的合写分写",[51,131643,131644],{"className":128185,"code":131549,"language":128187,"meta":57,"style":57},[59,131645,131646,131650,131656,131672],{"__ignoreMap":57},[79,131647,131648],{"class":81,"line":82},[79,131649,131556],{"class":2313},[79,131651,131652,131654],{"class":81,"line":167},[79,131653,53605],{"class":232},[79,131655,17604],{"class":228},[79,131657,131658,131660,131662,131664,131666,131668,131670],{"class":81,"line":178},[79,131659,72884],{"class":96},[79,131661,53431],{"class":228},[79,131663,775],{"class":96},[79,131665,53486],{"class":448},[79,131667,53515],{"class":96},[79,131669,131577],{"class":96},[79,131671,3400],{"class":228},[79,131673,131674],{"class":81,"line":545},[79,131675,3671],{"class":228},[19,131677,131678],{},"边框分开写法：",[51,131680,131682],{"className":128185,"code":131681,"language":128187,"meta":57,"style":57},"\u002F* 边框分开写法 *\u002F\ndiv {\n  border-top: 1px solid #000;\n  border-right: 2px dashed #333;\n  border-bottom: 3px dotted #666;\n  border-left: 1px solid #999;\n}\n",[59,131683,131684,131689,131695,131713,131731,131750,131768],{"__ignoreMap":57},[79,131685,131686],{"class":81,"line":82},[79,131687,131688],{"class":2313},"\u002F* 边框分开写法 *\u002F\n",[79,131690,131691,131693],{"class":81,"line":167},[79,131692,53605],{"class":232},[79,131694,17604],{"class":228},[79,131696,131697,131700,131702,131704,131706,131708,131711],{"class":81,"line":178},[79,131698,131699],{"class":96},"  border-top",[79,131701,53431],{"class":228},[79,131703,775],{"class":96},[79,131705,53486],{"class":448},[79,131707,53515],{"class":96},[79,131709,131710],{"class":96}," #000",[79,131712,3400],{"class":228},[79,131714,131715,131718,131720,131722,131724,131726,131729],{"class":81,"line":545},[79,131716,131717],{"class":96},"  border-right",[79,131719,53431],{"class":228},[79,131721,2331],{"class":96},[79,131723,53486],{"class":448},[79,131725,64229],{"class":96},[79,131727,131728],{"class":96}," #333",[79,131730,3400],{"class":228},[79,131732,131733,131736,131738,131740,131742,131745,131748],{"class":81,"line":550},[79,131734,131735],{"class":96},"  border-bottom",[79,131737,53431],{"class":228},[79,131739,970],{"class":96},[79,131741,53486],{"class":448},[79,131743,131744],{"class":96}," dotted",[79,131746,131747],{"class":96}," #666",[79,131749,3400],{"class":228},[79,131751,131752,131755,131757,131759,131761,131763,131766],{"class":81,"line":562},[79,131753,131754],{"class":96},"  border-left",[79,131756,53431],{"class":228},[79,131758,775],{"class":96},[79,131760,53486],{"class":448},[79,131762,53515],{"class":96},[79,131764,131765],{"class":96}," #999",[79,131767,3400],{"class":228},[79,131769,131770],{"class":81,"line":568},[79,131771,3671],{"class":228},[26,131773,131774],{"start":545},[29,131775,131776],{},"表格的细线边框",[19,131778,131779],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[51,131781,131783],{"className":128185,"code":131782,"language":128187,"meta":57,"style":57},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[59,131784,131785,131790,131796,131806],{"__ignoreMap":57},[79,131786,131787],{"class":81,"line":82},[79,131788,131789],{"class":2313},"\u002F* 表格细线边框合并 *\u002F\n",[79,131791,131792,131794],{"class":81,"line":167},[79,131793,347],{"class":232},[79,131795,17604],{"class":228},[79,131797,131798,131800,131802,131804],{"class":81,"line":178},[79,131799,72566],{"class":96},[79,131801,53431],{"class":228},[79,131803,67023],{"class":96},[79,131805,3400],{"class":228},[79,131807,131808],{"class":81,"line":545},[79,131809,3671],{"class":228},[19,131811,131812],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[26,131814,131815],{"start":550},[29,131816,131817],{},"解决边框额外增加盒子的实际大小的方法：",[3246,131819,131820,131823],{},[29,131821,131822],{},"测量盒子大小的时候,不量边框",[29,131824,131825],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[339,131827,131829],{"id":131828},"_912-内边距","9.1.2 内边距",[26,131831,131832,131835],{},[29,131833,131834],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[29,131836,131546],{},[347,131838,131839,131849],{},[350,131840,131841],{},[353,131842,131843,131846],{},[356,131844,131845],{"align":358},"值的个数",[356,131847,131848],{"align":358},"表达意思",[367,131850,131851,131859,131867,131875],{},[353,131852,131853,131856],{},[372,131854,131855],{"align":358},"padding: 5px;",[372,131857,131858],{"align":358},"1个值，代表上下左右都有5个元素",[353,131860,131861,131864],{},[372,131862,131863],{"align":358},"padding: 5px 10px;",[372,131865,131866],{"align":358},"2个值，代表上下内边距为5像素，左右内边距为10像素",[353,131868,131869,131872],{},[372,131870,131871],{"align":358},"padding: 5px 10px 20px;",[372,131873,131874],{"align":358},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[353,131876,131877,131880],{},[372,131878,131879],{"align":358},"padding: 5px 10px 20px 30px;",[372,131881,131882],{"align":358},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[347,131884,131885,131893],{},[350,131886,131887],{},[353,131888,131889,131891],{},[356,131890,130787],{"align":358},[356,131892,104628],{"align":358},[367,131894,131895,131903,131911,131919],{},[353,131896,131897,131900],{},[372,131898,131899],{"align":358},"padding-left",[372,131901,131902],{"align":358},"左内边距",[353,131904,131905,131908],{},[372,131906,131907],{"align":358},"padding-right",[372,131909,131910],{"align":358},"右内边距",[353,131912,131913,131916],{},[372,131914,131915],{"align":358},"padding-top",[372,131917,131918],{"align":358},"上内边距",[353,131920,131921,131924],{},[372,131922,131923],{"align":358},"padding-bottom",[372,131925,131926],{"align":358},"下内边距",[26,131928,131929],{"start":178},[29,131930,131931],{},"内边距会影响盒子的实际大小",[19,131933,131934],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,131936,131937],{},"①内容和边框有了距离，添加了内边距",[19,131939,131940],{},"②padding影响了盒子实际大小",[19,131942,131943],{},"内边距对盒子大小的影响：",[19,131945,131946],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,131948,131949],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,131951,97207],{},[19,131953,131954],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[339,131956,131958],{"id":131957},"_913-外边距","9.1.3 外边距",[26,131960,131961],{},[29,131962,131963],{},"控制盒子与盒子之间的距离",[347,131965,131966,131974],{},[350,131967,131968],{},[353,131969,131970,131972],{},[356,131971,130787],{"align":358},[356,131973,104628],{"align":358},[367,131975,131976,131984,131992,132000],{},[353,131977,131978,131981],{},[372,131979,131980],{"align":358},"margin-left",[372,131982,131983],{"align":358},"左外边距",[353,131985,131986,131989],{},[372,131987,131988],{"align":358},"margin-right",[372,131990,131991],{"align":358},"右外边距",[353,131993,131994,131997],{},[372,131995,131996],{"align":358},"margin-top",[372,131998,131999],{"align":358},"上外边距",[353,132001,132002,132005],{},[372,132003,132004],{"align":358},"margin-bottom",[372,132006,132007],{"align":358},"下外边距",[26,132009,132010],{"start":167},[29,132011,132012],{},"外边距可以让块级盒子水平居中的两个条件：",[19,132014,132015],{},"①盒子必须指定了宽度（width）",[19,132017,132018],{},"②盒子左右的外边距都设置为 auto",[51,132020,132022],{"className":128185,"code":132021,"language":128187,"meta":57,"style":57},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[59,132023,132024,132029,132036,132052],{"__ignoreMap":57},[79,132025,132026],{"class":81,"line":82},[79,132027,132028],{"class":2313},"\u002F* margin 复合写法（同上） *\u002F\n",[79,132030,132031,132034],{"class":81,"line":167},[79,132032,132033],{"class":85},".box",[79,132035,17604],{"class":228},[79,132037,132038,132040,132042,132044,132046,132049],{"class":81,"line":178},[79,132039,72458],{"class":96},[79,132041,53431],{"class":228},[79,132043,759],{"class":96},[79,132045,53550],{"class":96},[79,132047,132048],{"class":228},";  ",[79,132050,132051],{"class":2313},"\u002F* 块级盒子水平居中 *\u002F\n",[79,132053,132054],{"class":81,"line":545},[79,132055,3671],{"class":228},[26,132057,132058],{"start":178},[29,132059,132060],{},"外边距塌陷问题",[19,132062,132063],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[3569,132065],{"style":128041,"src":132066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,132068,132069],{},"解决方案：",[19,132071,132072],{},"①可以为父亲元素定义上边距",[51,132074,132075],{"className":128185,"code":132021,"language":128187,"meta":57,"style":57},[59,132076,132077,132081,132087,132101],{"__ignoreMap":57},[79,132078,132079],{"class":81,"line":82},[79,132080,132028],{"class":2313},[79,132082,132083,132085],{"class":81,"line":167},[79,132084,132033],{"class":85},[79,132086,17604],{"class":228},[79,132088,132089,132091,132093,132095,132097,132099],{"class":81,"line":178},[79,132090,72458],{"class":96},[79,132092,53431],{"class":228},[79,132094,759],{"class":96},[79,132096,53550],{"class":96},[79,132098,132048],{"class":228},[79,132100,132051],{"class":2313},[79,132102,132103],{"class":81,"line":545},[79,132104,3671],{"class":228},[19,132106,132107],{},"②可以为父亲元素定义上内边距",[19,132109,132110],{},"③可以为父亲元素添加overflow:hidden",[3569,132112],{"style":128041,"src":132113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[51,132115,132116],{"className":128185,"code":132021,"language":128187,"meta":57,"style":57},[59,132117,132118,132122,132128,132142],{"__ignoreMap":57},[79,132119,132120],{"class":81,"line":82},[79,132121,132028],{"class":2313},[79,132123,132124,132126],{"class":81,"line":167},[79,132125,132033],{"class":85},[79,132127,17604],{"class":228},[79,132129,132130,132132,132134,132136,132138,132140],{"class":81,"line":178},[79,132131,72458],{"class":96},[79,132133,53431],{"class":228},[79,132135,759],{"class":96},[79,132137,53550],{"class":96},[79,132139,132048],{"class":228},[79,132141,132051],{"class":2313},[79,132143,132144],{"class":81,"line":545},[79,132145,3671],{"class":228},[3569,132147],{"style":128041,"src":132148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,132150,132151],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,132153,132154],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[339,132156,132158],{"id":132157},"_914-清除内外边距","9.1.4 清除内外边距",[19,132160,132161],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[51,132163,132164],{"className":128185,"code":132021,"language":128187,"meta":57,"style":57},[59,132165,132166,132170,132176,132190],{"__ignoreMap":57},[79,132167,132168],{"class":81,"line":82},[79,132169,132028],{"class":2313},[79,132171,132172,132174],{"class":81,"line":167},[79,132173,132033],{"class":85},[79,132175,17604],{"class":228},[79,132177,132178,132180,132182,132184,132186,132188],{"class":81,"line":178},[79,132179,72458],{"class":96},[79,132181,53431],{"class":228},[79,132183,759],{"class":96},[79,132185,53550],{"class":96},[79,132187,132048],{"class":228},[79,132189,132051],{"class":2313},[79,132191,132192],{"class":81,"line":545},[79,132193,3671],{"class":228},[19,132195,132196],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[339,132198,132200],{"id":132199},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[3246,132202,132203,132206,132209,132212,132215,132218],{},[29,132204,132205],{},"文件→打开 ：可以打开我们要测量的图片",[29,132207,132208],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[29,132210,132211],{},"右击标尺，把里面的单位改为像素",[29,132213,132214],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[29,132216,132217],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[29,132219,132220],{},"用选区拖动 可以测量大小",[3569,132222],{"style":128041,"src":132223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[3246,132225,132226,132229],{},[29,132227,132228],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[29,132230,132231],{},"吸管取色工具",[3569,132233],{"style":128041,"src":132234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[339,132236,132238],{"id":132237},"_916-案例","9.1.6 案例",[26,132240,132241],{},[29,132242,132243],{},"小米商品",[3569,132245],{"style":128041,"src":132246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[51,132248,132249],{"className":128185,"code":132021,"language":128187,"meta":57,"style":57},[59,132250,132251,132255,132261,132275],{"__ignoreMap":57},[79,132252,132253],{"class":81,"line":82},[79,132254,132028],{"class":2313},[79,132256,132257,132259],{"class":81,"line":167},[79,132258,132033],{"class":85},[79,132260,17604],{"class":228},[79,132262,132263,132265,132267,132269,132271,132273],{"class":81,"line":178},[79,132264,72458],{"class":96},[79,132266,53431],{"class":228},[79,132268,759],{"class":96},[79,132270,53550],{"class":96},[79,132272,132048],{"class":228},[79,132274,132051],{"class":2313},[79,132276,132277],{"class":81,"line":545},[79,132278,3671],{"class":228},[26,132280,132281],{"start":167},[29,132282,132283],{},"快报模块",[3569,132285],{"style":128041,"src":132286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[51,132288,132290],{"className":128932,"code":132289,"language":128934,"meta":57,"style":57},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[59,132291,132292,132297,132312,132317],{"__ignoreMap":57},[79,132293,132294],{"class":81,"line":82},[79,132295,132296],{"class":2313},"\u003C!-- HTML 代码示例 -->\n",[79,132298,132299,132301,132303,132305,132307,132310],{"class":81,"line":167},[79,132300,229],{"class":228},[79,132302,53605],{"class":232},[79,132304,55477],{"class":85},[79,132306,239],{"class":228},[79,132308,132309],{"class":89},"\"example\"",[79,132311,53301],{"class":228},[79,132313,132314],{"class":81,"line":178},[79,132315,132316],{"class":228},"  示例内容\n",[79,132318,132319,132321,132323],{"class":81,"line":545},[79,132320,53779],{"class":228},[79,132322,53605],{"class":232},[79,132324,53301],{"class":228},[339,132326,132328],{"id":132327},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[26,132330,132331],{},[29,132332,132333],{},"圆角边框",[19,132335,132336],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[3569,132338],{"style":128041,"src":132339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[51,132341,132343],{"className":128185,"code":132342,"language":128187,"meta":57,"style":57},"div {\n  border: 1px solid #ccc;\n}\n",[59,132344,132345,132351,132367],{"__ignoreMap":57},[79,132346,132347,132349],{"class":81,"line":82},[79,132348,53605],{"class":232},[79,132350,17604],{"class":228},[79,132352,132353,132355,132357,132359,132361,132363,132365],{"class":81,"line":167},[79,132354,72884],{"class":96},[79,132356,53431],{"class":228},[79,132358,775],{"class":96},[79,132360,53486],{"class":448},[79,132362,53515],{"class":96},[79,132364,131577],{"class":96},[79,132366,3400],{"class":228},[79,132368,132369],{"class":81,"line":178},[79,132370,3671],{"class":228},[19,132372,132373],{},"解释:",[3246,132375,132376,132379,132382,132385,132388],{},[29,132377,132378],{},"参数值可以为数值或百分比的形式",[29,132380,132381],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[29,132383,132384],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[29,132386,132387],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[29,132389,132390],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[26,132392,132393],{"start":167},[29,132394,132395],{},"盒子阴影",[51,132397,132399],{"className":128185,"code":132398,"language":128187,"meta":57,"style":57},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[59,132400,132401,132407,132444],{"__ignoreMap":57},[79,132402,132403,132405],{"class":81,"line":82},[79,132404,53605],{"class":232},[79,132406,17604],{"class":228},[79,132408,132409,132412,132414,132416,132418,132420,132422,132424,132426,132428,132430,132432,132434,132436,132438,132440,132442],{"class":81,"line":167},[79,132410,132411],{"class":96},"  box-shadow",[79,132413,53431],{"class":228},[79,132415,759],{"class":96},[79,132417,16788],{"class":96},[79,132419,53486],{"class":448},[79,132421,4123],{"class":96},[79,132423,53486],{"class":448},[79,132425,80755],{"class":96},[79,132427,455],{"class":228},[79,132429,759],{"class":96},[79,132431,1020],{"class":228},[79,132433,759],{"class":96},[79,132435,1020],{"class":228},[79,132437,759],{"class":96},[79,132439,1020],{"class":228},[79,132441,88197],{"class":96},[79,132443,4795],{"class":228},[79,132445,132446],{"class":81,"line":178},[79,132447,3671],{"class":228},[347,132449,132450,132458],{},[350,132451,132452],{},[353,132453,132454,132456],{},[356,132455,2401],{"align":358},[356,132457,29505],{"align":358},[367,132459,132460,132468,132476,132484,132492,132500],{},[353,132461,132462,132465],{},[372,132463,132464],{"align":358},"h-shadow",[372,132466,132467],{"align":358},"必需,水平阴影的位置,允许负值",[353,132469,132470,132473],{},[372,132471,132472],{"align":358},"v-shadow",[372,132474,132475],{"align":358},"必需,垂直阴影的位置,允许负值",[353,132477,132478,132481],{},[372,132479,132480],{"align":358},"blur",[372,132482,132483],{"align":358},"可选,模糊距离,就是影子的虚实",[353,132485,132486,132489],{},[372,132487,132488],{"align":358},"spread",[372,132490,132491],{"align":358},"可选,阴影尺寸",[353,132493,132494,132497],{},[372,132495,132496],{"align":358},"color",[372,132498,132499],{"align":358},"可选,阴影的颜色",[353,132501,132502,132505],{},[372,132503,132504],{"align":358},"inset",[372,132506,132507],{"align":358},"可选,将外部阴影(outset)改为内部阴影",[26,132509,132510],{"start":178},[29,132511,132512],{},"文字阴影",[51,132514,132516],{"className":128185,"code":132515,"language":128187,"meta":57,"style":57},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[59,132517,132518,132524,132563],{"__ignoreMap":57},[79,132519,132520,132522],{"class":81,"line":82},[79,132521,19],{"class":232},[79,132523,17604],{"class":228},[79,132525,132526,132529,132531,132533,132535,132537,132539,132541,132543,132545,132547,132549,132551,132553,132555,132557,132559,132561],{"class":81,"line":167},[79,132527,132528],{"class":96},"  text-shadow",[79,132530,53431],{"class":228},[79,132532,775],{"class":96},[79,132534,53486],{"class":448},[79,132536,27137],{"class":96},[79,132538,53486],{"class":448},[79,132540,16788],{"class":96},[79,132542,53486],{"class":448},[79,132544,80755],{"class":96},[79,132546,455],{"class":228},[79,132548,759],{"class":96},[79,132550,1020],{"class":228},[79,132552,759],{"class":96},[79,132554,1020],{"class":228},[79,132556,759],{"class":96},[79,132558,1020],{"class":228},[79,132560,102506],{"class":96},[79,132562,4795],{"class":228},[79,132564,132565],{"class":81,"line":178},[79,132566,3671],{"class":228},[347,132568,132569,132577],{},[350,132570,132571],{},[353,132572,132573,132575],{},[356,132574,2401],{"align":358},[356,132576,29505],{"align":358},[367,132578,132579,132585,132592,132599],{},[353,132580,132581,132583],{},[372,132582,132464],{"align":358},[372,132584,132467],{"align":358},[353,132586,132587,132589],{},[372,132588,132472],{"align":358},[372,132590,132591],{"align":358},"必需,垂直阴影位置,允许负值",[353,132593,132594,132596],{},[372,132595,132480],{"align":358},[372,132597,132598],{"align":358},"可选,模糊的距离",[353,132600,132601,132603],{},[372,132602,132496],{"align":358},[372,132604,132499],{"align":358},[14,132606,132608],{"id":132607},"_92-浮动","9.2 浮动",[339,132610,132612],{"id":132611},"_921-浮动介绍","9.2.1 浮动介绍",[19,132614,132615],{},"在16.2中详细介绍",[339,132617,132619],{"id":132618},"_922-清除浮动","9.2.2 清除浮动",[26,132621,132622,132625],{},[29,132623,132624],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[29,132626,132627],{},"清除浮动的本质",[19,132629,132630],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,132632,11080],{},[3246,132634,132635,132638,132641],{},[29,132636,132637],{},"如果父盒子本身有高度，则不需要清除浮动",[29,132639,132640],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[29,132642,132643],{},"父级有了高度，就不会影响下面的标准流了",[26,132645,132646],{"start":178},[29,132647,132648],{},"清除浮动样式",[51,132650,132652],{"className":128185,"code":132651,"language":128187,"meta":57,"style":57},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[59,132653,132654,132661,132672,132676,132683,132693],{"__ignoreMap":57},[79,132655,132656,132659],{"class":81,"line":82},[79,132657,132658],{"class":85},".left",[79,132660,17604],{"class":228},[79,132662,132663,132666,132668,132670],{"class":81,"line":167},[79,132664,132665],{"class":96},"  float",[79,132667,53431],{"class":228},[79,132669,358],{"class":96},[79,132671,3400],{"class":228},[79,132673,132674],{"class":81,"line":178},[79,132675,3671],{"class":228},[79,132677,132678,132681],{"class":81,"line":545},[79,132679,132680],{"class":85},".right",[79,132682,17604],{"class":228},[79,132684,132685,132687,132689,132691],{"class":81,"line":550},[79,132686,132665],{"class":96},[79,132688,53431],{"class":228},[79,132690,74510],{"class":96},[79,132692,3400],{"class":228},[79,132694,132695],{"class":81,"line":562},[79,132696,3671],{"class":228},[347,132698,132699,132707],{},[350,132700,132701],{},[353,132702,132703,132705],{},[356,132704,128649],{"align":358},[356,132706,29505],{"align":358},[367,132708,132709,132716,132723],{},[353,132710,132711,132713],{},[372,132712,358],{"align":358},[372,132714,132715],{"align":358},"不允许左侧有浮动元素（清除左侧浮动的影响）",[353,132717,132718,132720],{},[372,132719,74510],{"align":358},[372,132721,132722],{"align":358},"不允许右侧有浮动元素（清除右侧浮动的影响）",[353,132724,132725,132728],{},[372,132726,132727],{"align":358},"both",[372,132729,132730],{"align":358},"同时清除左右侧浮动的影响",[19,132732,132733],{},"法一",[19,132735,132736],{},"额外标签法也称为隔墙法",[19,132738,132739],{},"使用方式：",[19,132741,132742],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[51,132744,132745],{"className":128185,"code":132651,"language":128187,"meta":57,"style":57},[59,132746,132747,132753,132763,132767,132773,132783],{"__ignoreMap":57},[79,132748,132749,132751],{"class":81,"line":82},[79,132750,132658],{"class":85},[79,132752,17604],{"class":228},[79,132754,132755,132757,132759,132761],{"class":81,"line":167},[79,132756,132665],{"class":96},[79,132758,53431],{"class":228},[79,132760,358],{"class":96},[79,132762,3400],{"class":228},[79,132764,132765],{"class":81,"line":178},[79,132766,3671],{"class":228},[79,132768,132769,132771],{"class":81,"line":545},[79,132770,132680],{"class":85},[79,132772,17604],{"class":228},[79,132774,132775,132777,132779,132781],{"class":81,"line":550},[79,132776,132665],{"class":96},[79,132778,53431],{"class":228},[79,132780,74510],{"class":96},[79,132782,3400],{"class":228},[79,132784,132785],{"class":81,"line":562},[79,132786,3671],{"class":228},[19,132788,132789],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,132791,132792],{},"优点： 通俗易懂，书写方便",[19,132794,132795],{},"缺点： 添加许多无意义的标签，结构化较差",[19,132797,132798],{},"注意： 要求这个新的空标签必须是块级元素。",[19,132800,132801],{},"法二",[19,132803,132804],{},"父级添加overflow属性",[51,132806,132807],{"className":128185,"code":132651,"language":128187,"meta":57,"style":57},[59,132808,132809,132815,132825,132829,132835,132845],{"__ignoreMap":57},[79,132810,132811,132813],{"class":81,"line":82},[79,132812,132658],{"class":85},[79,132814,17604],{"class":228},[79,132816,132817,132819,132821,132823],{"class":81,"line":167},[79,132818,132665],{"class":96},[79,132820,53431],{"class":228},[79,132822,358],{"class":96},[79,132824,3400],{"class":228},[79,132826,132827],{"class":81,"line":178},[79,132828,3671],{"class":228},[79,132830,132831,132833],{"class":81,"line":545},[79,132832,132680],{"class":85},[79,132834,17604],{"class":228},[79,132836,132837,132839,132841,132843],{"class":81,"line":550},[79,132838,132665],{"class":96},[79,132840,53431],{"class":228},[79,132842,74510],{"class":96},[79,132844,3400],{"class":228},[79,132846,132847],{"class":81,"line":562},[79,132848,3671],{"class":228},[19,132850,132851],{},"overflow: hidden;",[19,132853,132854],{},"优点：代码简洁",[19,132856,132857],{},"缺点：无法显示溢出的部分",[19,132859,132860],{},"注意：是给父元素添加代码",[19,132862,132863],{},"法三",[19,132865,132866],{},"父级添加after伪元素",[19,132868,132869,132872],{},[132870,132871],"after",{}," 方式是额外标签法的升级版",[19,132874,132875],{},"使用的时候复制就可以",[51,132877,132878],{"className":128185,"code":132651,"language":128187,"meta":57,"style":57},[59,132879,132880,132886,132896,132900,132906,132916],{"__ignoreMap":57},[79,132881,132882,132884],{"class":81,"line":82},[79,132883,132658],{"class":85},[79,132885,17604],{"class":228},[79,132887,132888,132890,132892,132894],{"class":81,"line":167},[79,132889,132665],{"class":96},[79,132891,53431],{"class":228},[79,132893,358],{"class":96},[79,132895,3400],{"class":228},[79,132897,132898],{"class":81,"line":178},[79,132899,3671],{"class":228},[79,132901,132902,132904],{"class":81,"line":545},[79,132903,132680],{"class":85},[79,132905,17604],{"class":228},[79,132907,132908,132910,132912,132914],{"class":81,"line":550},[79,132909,132665],{"class":96},[79,132911,53431],{"class":228},[79,132913,74510],{"class":96},[79,132915,3400],{"class":228},[79,132917,132918],{"class":81,"line":562},[79,132919,3671],{"class":228},[19,132921,132922],{},"优点：没有增加标签，结构更简单",[19,132924,132925],{},"缺点：照顾低版本浏览器",[19,132927,132928],{},"代表网站： 百度、淘宝网、网易等",[19,132930,132931],{},"法四",[19,132933,132934],{},"父级添加双伪元素",[51,132936,132937],{"className":128185,"code":132651,"language":128187,"meta":57,"style":57},[59,132938,132939,132945,132955,132959,132965,132975],{"__ignoreMap":57},[79,132940,132941,132943],{"class":81,"line":82},[79,132942,132658],{"class":85},[79,132944,17604],{"class":228},[79,132946,132947,132949,132951,132953],{"class":81,"line":167},[79,132948,132665],{"class":96},[79,132950,53431],{"class":228},[79,132952,358],{"class":96},[79,132954,3400],{"class":228},[79,132956,132957],{"class":81,"line":178},[79,132958,3671],{"class":228},[79,132960,132961,132963],{"class":81,"line":545},[79,132962,132680],{"class":85},[79,132964,17604],{"class":228},[79,132966,132967,132969,132971,132973],{"class":81,"line":550},[79,132968,132665],{"class":96},[79,132970,53431],{"class":228},[79,132972,74510],{"class":96},[79,132974,3400],{"class":228},[79,132976,132977],{"class":81,"line":562},[79,132978,3671],{"class":228},[19,132980,132981],{},"优点：代码更简洁",[19,132983,132925],{},[19,132985,132986],{},"代表网站：小米、腾讯等",[14,132988,132990],{"id":132989},"_93-ps切图","9.3 PS切图",[339,132992,132994],{"id":132993},"_931-常见图片格式","9.3.1 常见图片格式",[347,132996,132997,133007],{},[350,132998,132999],{},[353,133000,133001,133004],{},[356,133002,133003],{"align":358},"jpg图像格式",[356,133005,133006],{"align":358},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[367,133008,133009,133017,133025],{},[353,133010,133011,133014],{},[372,133012,133013],{"align":358},"gif图像格式",[372,133015,133016],{"align":358},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[353,133018,133019,133022],{},[372,133020,133021],{"align":358},"png图像格式",[372,133023,133024],{"align":358},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[353,133026,133027,133030],{},[372,133028,133029],{"align":358},"PSD图像格式",[372,133031,133032],{"align":358},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[339,133034,133036],{"id":133035},"_932-图层切图","9.3.2 图层切图",[19,133038,133039],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,133041,133042],{},"按住shift选中两个图层->图层菜单->合并图层",[339,133044,133046],{"id":133045},"_933-切片切图","9.3.3 切片切图",[3246,133048,133049,133052],{},[29,133050,133051],{},"利用切片工具手动划出",[29,133053,133054],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[339,133056,133058],{"id":133057},"_934-切图步骤","9.3.4 切图步骤",[19,133060,133061],{},"用切片工具选中：",[3569,133063],{"style":128041,"src":133064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,133066,133067],{},"文件 -> 导出",[3569,133069],{"style":128041,"src":133070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[2159,133072,133073],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":57,"searchDepth":167,"depth":167,"links":133075},[133076,133085,133089],{"id":131512,"depth":167,"text":131513,"children":133077},[133078,133079,133080,133081,133082,133083,133084],{"id":131537,"depth":178,"text":131538},{"id":131828,"depth":178,"text":131829},{"id":131957,"depth":178,"text":131958},{"id":132157,"depth":178,"text":132158},{"id":132199,"depth":178,"text":132200},{"id":132237,"depth":178,"text":132238},{"id":132327,"depth":178,"text":132328},{"id":132607,"depth":167,"text":132608,"children":133086},[133087,133088],{"id":132611,"depth":178,"text":132612},{"id":132618,"depth":178,"text":132619},{"id":132989,"depth":167,"text":132990,"children":133090},[133091,133092,133093,133094],{"id":132993,"depth":178,"text":132994},{"id":133035,"depth":178,"text":133036},{"id":133045,"depth":178,"text":133046},{"id":133057,"depth":178,"text":133058},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":131504,"description":25402},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":133101,"title":133102,"body":133103,"description":25402,"extension":2186,"meta":133744,"navigation":541,"path":133745,"seo":133746,"stem":133747,"__hash__":133748},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":133104,"toc":133732},[133105,133108,133112,133138,133172,133176,133180,133183,133225,133232,133242,133250,133252,133255,133258,133261,133268,133282,133286,133289,133318,133322,133325,133339,133343,133346,133374,133378,133381,133407,133411,133416,133449,133454,133482,133486,133503,133549,133554,133598,133615,133722,133730],[10,133106,133102],{"id":133107},"_10-css规范与学成在线案例",[14,133109,133111],{"id":133110},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[26,133113,133114,133120,133126,133132],{},[29,133115,133116,133119],{},[2398,133117,133118],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[29,133121,133122,133125],{},[2398,133123,133124],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[29,133127,133128,133131],{},[2398,133129,133130],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[29,133133,133134,133137],{},[2398,133135,133136],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[51,133139,133140],{"className":128185,"code":131549,"language":128187,"meta":57,"style":57},[59,133141,133142,133146,133152,133168],{"__ignoreMap":57},[79,133143,133144],{"class":81,"line":82},[79,133145,131556],{"class":2313},[79,133147,133148,133150],{"class":81,"line":167},[79,133149,53605],{"class":232},[79,133151,17604],{"class":228},[79,133153,133154,133156,133158,133160,133162,133164,133166],{"class":81,"line":178},[79,133155,72884],{"class":96},[79,133157,53431],{"class":228},[79,133159,775],{"class":96},[79,133161,53486],{"class":448},[79,133163,53515],{"class":96},[79,133165,131577],{"class":96},[79,133167,3400],{"class":228},[79,133169,133170],{"class":81,"line":545},[79,133171,3671],{"class":228},[14,133173,133175],{"id":133174},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[339,133177,133179],{"id":133178},"_1021-header头部制作","10.2.1 header头部制作",[3569,133181],{"style":128041,"src":133182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[3246,133184,133185,133192,133199,133205,133212,133219],{},[29,133186,133187,133188,133191],{},"1号是版心盒子 ",[2398,133189,133190],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[29,133193,133194,133195,133198],{},"版心盒子 里面包含 2号盒子 ",[2398,133196,133197],{},"logo"," 图标",[29,133200,133201,133202,133204],{},"版心盒子 里面包含 3号盒子 ",[2398,133203,55704],{}," 导航栏",[29,133206,133207,133208,133211],{},"版心盒子 里面包含 4号盒子 ",[2398,133209,133210],{},"search"," 搜索框",[29,133213,133214,133215,133218],{},"版心盒子 里面包含 5号盒子 ",[2398,133216,133217],{},"user"," 个人信息",[29,133220,133221,133222],{},"注意，要求里面的 ",[2398,133223,133224],{},"4个子盒子 必须都浮动",[26,133226,133227],{},[29,133228,133229],{},[2398,133230,133231],{},"导航栏注意点:",[19,133233,133234,133235,133238,133239],{},"实际开发中， ",[2398,133236,133237],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[2398,133240,133241],{},"用 li 包含链接(li+a)的做法",[3246,133243,133244,133247],{},[29,133245,133246],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[29,133248,133249],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,133251,11080],{},[19,133253,133254],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,133256,133257],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,133259,133260],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[26,133262,133263],{"start":167},[29,133264,133265],{},[2398,133266,133267],{},"4号盒子search的细节：",[3246,133269,133270,133273,133276],{},[29,133271,133272],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[29,133274,133275],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[29,133277,133278,133281],{},[59,133279,133280],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[339,133283,133285],{"id":133284},"_1022-banner制作","10.2.2 banner制作",[3569,133287],{"style":128041,"src":133288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[3246,133290,133291,133298,133304,133311],{},[29,133292,133293,133294,133297],{},"1号盒子是通栏的大盒子 ",[2398,133295,133296],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[29,133299,133300,133301,133303],{},"2号盒子是版心 ",[2398,133302,3035],{}," ， 要水平居中对齐",[29,133305,133306,133307,133310],{},"3号盒子版心内，左对齐 ",[2398,133308,133309],{},"subnav"," 侧导航栏",[29,133312,133313,133314,133317],{},"4号盒子版心内，右对齐 ",[2398,133315,133316],{},"course"," 课程",[339,133319,133321],{"id":133320},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[3569,133323],{"style":128041,"src":133324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[3246,133326,133327,133330,133333,133336],{},[29,133328,133329],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[29,133331,133332],{},"1号盒子是标题 H3 左侧浮动",[29,133334,133335],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[29,133337,133338],{},"3号盒子 右浮动 mod 修改",[339,133340,133342],{"id":133341},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[3569,133344],{"style":128041,"src":133345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[3246,133347,133348,133354,133361,133368,133371],{},[29,133349,133350,133351,133353],{},"1号盒子为最大的盒子 ",[2398,133352,55705],{}," 版心水平居中对齐",[29,133355,133356,133357,133360],{},"2号盒子为上面部分 ",[2398,133358,133359],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[29,133362,133363,133364,133367],{},"3号盒子为底下部分 ",[2398,133365,133366],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[29,133369,133370],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[29,133372,133373],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[339,133375,133377],{"id":133376},"_1025-底部模块制作","10.2.5 底部模块制作",[3569,133379],{"style":128041,"src":133380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[3246,133382,133383,133390,133393,133400],{},[29,133384,133385,133386,133389],{},"1号盒子通栏大盒子 底部 ",[2398,133387,133388],{},"footer"," 给高度 底色是白色",[29,133391,133392],{},"2号盒子版心水平居中",[29,133394,133395,133396,133399],{},"3号盒子版权 ",[2398,133397,133398],{},"copyright"," 左对齐",[29,133401,133402,133403,133406],{},"4号盒子 链接组 ",[2398,133404,133405],{},"links"," 右对齐",[339,133408,133410],{"id":133409},"_1026-代码模块","10.2.6 代码模块",[26,133412,133413],{},[29,133414,133415],{},"html部分",[51,133417,133419],{"className":128932,"code":133418,"language":128934,"meta":57,"style":57},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[59,133420,133421],{"__ignoreMap":57},[79,133422,133423,133425,133427,133429,133431,133434,133437,133439,133442,133445,133447],{"class":81,"line":82},[79,133424,229],{"class":228},[79,133426,2482],{"class":232},[79,133428,63046],{"class":85},[79,133430,239],{"class":228},[79,133432,133433],{"class":89},"\"https:\u002F\u002Fexample.com\"",[79,133435,133436],{"class":85}," target",[79,133438,239],{"class":228},[79,133440,133441],{"class":89},"\"_blank\"",[79,133443,133444],{"class":228},">链接文字\u003C\u002F",[79,133446,2482],{"class":232},[79,133448,53301],{"class":228},[26,133450,133451],{"start":167},[29,133452,133453],{},"css部分",[51,133455,133456],{"className":128932,"code":133418,"language":128934,"meta":57,"style":57},[59,133457,133458],{"__ignoreMap":57},[79,133459,133460,133462,133464,133466,133468,133470,133472,133474,133476,133478,133480],{"class":81,"line":82},[79,133461,229],{"class":228},[79,133463,2482],{"class":232},[79,133465,63046],{"class":85},[79,133467,239],{"class":228},[79,133469,133433],{"class":89},[79,133471,133436],{"class":85},[79,133473,239],{"class":228},[79,133475,133441],{"class":89},[79,133477,133444],{"class":228},[79,133479,2482],{"class":232},[79,133481,53301],{"class":228},[339,133483,133485],{"id":133484},"_1027-收获","10.2.7 收获",[26,133487,133488,133491,133494,133497,133500],{},[29,133489,133490],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[29,133492,133493],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[29,133495,133496],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[29,133498,133499],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[29,133501,133502],{},"遗忘代码",[51,133504,133506],{"className":128185,"code":133505,"language":128187,"meta":57,"style":57},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[59,133507,133508,133530,133535,133545],{"__ignoreMap":57},[79,133509,133510,133512,133514,133516,133518,133520,133522,133524,133526,133528],{"class":81,"line":82},[79,133511,53605],{"class":232},[79,133513,1020],{"class":228},[79,133515,19],{"class":232},[79,133517,1020],{"class":228},[79,133519,10],{"class":232},[79,133521,1020],{"class":228},[79,133523,3246],{"class":232},[79,133525,1020],{"class":228},[79,133527,29],{"class":232},[79,133529,17604],{"class":228},[79,133531,133532],{"class":81,"line":167},[79,133533,133534],{"class":2313},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[79,133536,133537,133539,133541,133543],{"class":81,"line":178},[79,133538,129801],{"class":96},[79,133540,53431],{"class":228},[79,133542,62858],{"class":96},[79,133544,3400],{"class":228},[79,133546,133547],{"class":81,"line":545},[79,133548,3671],{"class":228},[26,133550,133551],{"start":562},[29,133552,133553],{},"html引css的程序",[51,133555,133556],{"className":128185,"code":133505,"language":128187,"meta":57,"style":57},[59,133557,133558,133580,133584,133594],{"__ignoreMap":57},[79,133559,133560,133562,133564,133566,133568,133570,133572,133574,133576,133578],{"class":81,"line":82},[79,133561,53605],{"class":232},[79,133563,1020],{"class":228},[79,133565,19],{"class":232},[79,133567,1020],{"class":228},[79,133569,10],{"class":232},[79,133571,1020],{"class":228},[79,133573,3246],{"class":232},[79,133575,1020],{"class":228},[79,133577,29],{"class":232},[79,133579,17604],{"class":228},[79,133581,133582],{"class":81,"line":167},[79,133583,133534],{"class":2313},[79,133585,133586,133588,133590,133592],{"class":81,"line":178},[79,133587,129801],{"class":96},[79,133589,53431],{"class":228},[79,133591,62858],{"class":96},[79,133593,3400],{"class":228},[79,133595,133596],{"class":81,"line":545},[79,133597,3671],{"class":228},[26,133599,133600,133603,133606,133609,133612],{"start":568},[29,133601,133602],{},"浮动的盒子不会有外边距合并问题",[29,133604,133605],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[29,133607,133608],{},"ctrl+g快速定位行；shift+alt多个光标",[29,133610,133611],{},"学习上方各个模块的选择器起名方法，以后就这样用",[29,133613,133614],{},"在写选择器时尽量写全一些，例如",[51,133616,133618],{"className":128185,"code":133617,"language":128187,"meta":57,"style":57},"\u002F* 静态定位（默认） *\u002F\n.static { position: static; }\n\u002F* 相对定位 *\u002F\n.relative { position: relative; }\n\u002F* 绝对定位 *\u002F\n.absolute { position: absolute; }\n\u002F* 固定定位 *\u002F\n.fixed { position: fixed; }\n\u002F* 粘性定位 *\u002F\n.sticky { position: sticky; }\n",[59,133619,133620,133625,133641,133646,133661,133666,133681,133686,133701,133706],{"__ignoreMap":57},[79,133621,133622],{"class":81,"line":82},[79,133623,133624],{"class":2313},"\u002F* 静态定位（默认） *\u002F\n",[79,133626,133627,133630,133632,133634,133636,133639],{"class":81,"line":167},[79,133628,133629],{"class":85},".static",[79,133631,81795],{"class":228},[79,133633,130545],{"class":96},[79,133635,53431],{"class":228},[79,133637,133638],{"class":96},"static",[79,133640,131115],{"class":228},[79,133642,133643],{"class":81,"line":178},[79,133644,133645],{"class":2313},"\u002F* 相对定位 *\u002F\n",[79,133647,133648,133651,133653,133655,133657,133659],{"class":81,"line":545},[79,133649,133650],{"class":85},".relative",[79,133652,81795],{"class":228},[79,133654,130545],{"class":96},[79,133656,53431],{"class":228},[79,133658,56753],{"class":96},[79,133660,131115],{"class":228},[79,133662,133663],{"class":81,"line":550},[79,133664,133665],{"class":2313},"\u002F* 绝对定位 *\u002F\n",[79,133667,133668,133671,133673,133675,133677,133679],{"class":81,"line":562},[79,133669,133670],{"class":85},".absolute",[79,133672,81795],{"class":228},[79,133674,130545],{"class":96},[79,133676,53431],{"class":228},[79,133678,56820],{"class":96},[79,133680,131115],{"class":228},[79,133682,133683],{"class":81,"line":568},[79,133684,133685],{"class":2313},"\u002F* 固定定位 *\u002F\n",[79,133687,133688,133691,133693,133695,133697,133699],{"class":81,"line":574},[79,133689,133690],{"class":85},".fixed",[79,133692,81795],{"class":228},[79,133694,130545],{"class":96},[79,133696,53431],{"class":228},[79,133698,88220],{"class":96},[79,133700,131115],{"class":228},[79,133702,133703],{"class":81,"line":579},[79,133704,133705],{"class":2313},"\u002F* 粘性定位 *\u002F\n",[79,133707,133708,133711,133713,133715,133717,133720],{"class":81,"line":585},[79,133709,133710],{"class":85},".sticky",[79,133712,81795],{"class":228},[79,133714,130545],{"class":96},[79,133716,53431],{"class":228},[79,133718,133719],{"class":96},"sticky",[79,133721,131115],{"class":228},[26,133723,133724,133727],{"start":596},[29,133725,133726],{},"一定要用好注释",[29,133728,133729],{},"浮动的盒子不会有外边距合并的问题",[2159,133731,133073],{},{"title":57,"searchDepth":167,"depth":167,"links":133733},[133734,133735],{"id":133110,"depth":167,"text":133111},{"id":133174,"depth":167,"text":133175,"children":133736},[133737,133738,133739,133740,133741,133742,133743],{"id":133178,"depth":178,"text":133179},{"id":133284,"depth":178,"text":133285},{"id":133320,"depth":178,"text":133321},{"id":133341,"depth":178,"text":133342},{"id":133376,"depth":178,"text":133377},{"id":133409,"depth":178,"text":133410},{"id":133484,"depth":178,"text":133485},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":133102,"description":25402},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":133750,"title":133751,"body":133752,"description":25402,"extension":2186,"meta":135238,"navigation":541,"path":135239,"seo":135240,"stem":135241,"__hash__":135242},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":133753,"toc":135230},[133754,133757,133761,133765,133776,133780,133797,133841,133874,133877,133894,133897,133900,133944,133948,133952,133955,133958,133962,133965,133976,134039,134080,134083,134098,134152,134160,134163,134174,134228,134254,134257,134270,134324,134356,134410,134433,134487,134490,134493,134500,134554,134575,134629,134632,134635,134720,134728,134785,134808,134812,134815,134833,134837,134856,134910,134948,134952,134955,134958,134980,134984,134992,134995,135000,135011,135014,135018,135032,135076,135079,135083,135086,135091,135117,135122,135199,135202,135206,135209,135212,135215,135218,135221,135224,135227],[10,133755,133751],{"id":133756},"_11-传统布局与定位体系",[14,133758,133760],{"id":133759},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[339,133762,133764],{"id":133763},"_1111-普通流标准流","11.1.1 普通流（标准流）",[3246,133766,133767,133770,133773],{},[29,133768,133769],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[29,133771,133772],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[29,133774,133775],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[339,133777,133779],{"id":133778},"_1112-浮动","11.1.2 浮动",[3246,133781,133782,133785,133788,133791,133794],{},[29,133783,133784],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[29,133786,133787],{},"浮动可以改变元素标签默认的排列方式",[29,133789,133790],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[29,133792,133793],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[29,133795,133796],{},"在使用行内块转换时盒子之间是有空隙的",[51,133798,133799],{"className":128185,"code":132651,"language":128187,"meta":57,"style":57},[59,133800,133801,133807,133817,133821,133827,133837],{"__ignoreMap":57},[79,133802,133803,133805],{"class":81,"line":82},[79,133804,132658],{"class":85},[79,133806,17604],{"class":228},[79,133808,133809,133811,133813,133815],{"class":81,"line":167},[79,133810,132665],{"class":96},[79,133812,53431],{"class":228},[79,133814,358],{"class":96},[79,133816,3400],{"class":228},[79,133818,133819],{"class":81,"line":178},[79,133820,3671],{"class":228},[79,133822,133823,133825],{"class":81,"line":545},[79,133824,132680],{"class":85},[79,133826,17604],{"class":228},[79,133828,133829,133831,133833,133835],{"class":81,"line":550},[79,133830,132665],{"class":96},[79,133832,53431],{"class":228},[79,133834,74510],{"class":96},[79,133836,3400],{"class":228},[79,133838,133839],{"class":81,"line":562},[79,133840,3671],{"class":228},[347,133842,133843,133851],{},[350,133844,133845],{},[353,133846,133847,133849],{},[356,133848,128649],{"align":358},[356,133850,29505],{"align":358},[367,133852,133853,133860,133867],{},[353,133854,133855,133857],{},[372,133856,56726],{"align":358},[372,133858,133859],{"align":358},"元素不浮动（默认值）",[353,133861,133862,133864],{},[372,133863,358],{"align":358},[372,133865,133866],{"align":358},"元素向左浮动",[353,133868,133869,133871],{},[372,133870,74510],{"align":358},[372,133872,133873],{"align":358},"元素向右浮动",[19,133875,133876],{},"浮动重点：",[3246,133878,133879,133882,133885,133888,133891],{},[29,133880,133881],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[29,133883,133884],{},"浮动的元素会一行内显示并且元素顶部对齐",[29,133886,133887],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[29,133889,133890],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[29,133892,133893],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,133895,133896],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,133898,133899],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[51,133901,133902],{"className":128185,"code":132651,"language":128187,"meta":57,"style":57},[59,133903,133904,133910,133920,133924,133930,133940],{"__ignoreMap":57},[79,133905,133906,133908],{"class":81,"line":82},[79,133907,132658],{"class":85},[79,133909,17604],{"class":228},[79,133911,133912,133914,133916,133918],{"class":81,"line":167},[79,133913,132665],{"class":96},[79,133915,53431],{"class":228},[79,133917,358],{"class":96},[79,133919,3400],{"class":228},[79,133921,133922],{"class":81,"line":178},[79,133923,3671],{"class":228},[79,133925,133926,133928],{"class":81,"line":545},[79,133927,132680],{"class":85},[79,133929,17604],{"class":228},[79,133931,133932,133934,133936,133938],{"class":81,"line":550},[79,133933,132665],{"class":96},[79,133935,53431],{"class":228},[79,133937,74510],{"class":96},[79,133939,3400],{"class":228},[79,133941,133942],{"class":81,"line":562},[79,133943,3671],{"class":228},[339,133945,133947],{"id":133946},"_1113-定位","11.1.3 定位",[24023,133949,133951],{"id":133950},"_11131-使用场景","11.1.3.1 使用场景",[19,133953,133954],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,133956,133957],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[24023,133959,133961],{"id":133960},"_11132-定位组成","11.1.3.2 定位组成",[19,133963,133964],{},"定位 = 定位模式 + 边偏移",[26,133966,133967],{},[29,133968,133969,133972,133973],{},[2398,133970,133971],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[2398,133974,133975],{},"定位模式",[51,133977,133979],{"className":128185,"code":133978,"language":128187,"meta":57,"style":57},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[59,133980,133981,133987,134001,134018,134035],{"__ignoreMap":57},[79,133982,133983,133985],{"class":81,"line":82},[79,133984,132033],{"class":85},[79,133986,17604],{"class":228},[79,133988,133989,133992,133994,133996,133998],{"class":81,"line":167},[79,133990,133991],{"class":96},"  position",[79,133993,53431],{"class":228},[79,133995,56753],{"class":96},[79,133997,132048],{"class":228},[79,133999,134000],{"class":2313},"\u002F* 定位模式 *\u002F\n",[79,134002,134003,134006,134008,134010,134012,134015],{"class":81,"line":178},[79,134004,134005],{"class":96},"  top",[79,134007,53431],{"class":228},[79,134009,2689],{"class":96},[79,134011,53486],{"class":448},[79,134013,134014],{"class":228},";           ",[79,134016,134017],{"class":2313},"\u002F* 边偏移：上 *\u002F\n",[79,134019,134020,134023,134025,134027,134029,134032],{"class":81,"line":545},[79,134021,134022],{"class":96},"  left",[79,134024,53431],{"class":228},[79,134026,2940],{"class":96},[79,134028,53486],{"class":448},[79,134030,134031],{"class":228},";          ",[79,134033,134034],{"class":2313},"\u002F* 边偏移：左 *\u002F\n",[79,134036,134037],{"class":81,"line":550},[79,134038,3671],{"class":228},[347,134040,134041,134050],{},[350,134042,134043],{},[353,134044,134045,134047],{},[356,134046,2401],{"align":358},[356,134048,134049],{"align":358},"语义",[367,134051,134052,134059,134066,134073],{},[353,134053,134054,134056],{},[372,134055,133638],{"align":358},[372,134057,134058],{"align":358},"静态定位",[353,134060,134061,134063],{},[372,134062,56753],{"align":358},[372,134064,134065],{"align":358},"相对定位",[353,134067,134068,134070],{},[372,134069,56820],{"align":358},[372,134071,134072],{"align":358},"绝对定位",[353,134074,134075,134077],{},[372,134076,88220],{"align":358},[372,134078,134079],{"align":358},"固定定位",[19,134081,134082],{},"（1）静态定位：",[3246,134084,134085,134096],{},[29,134086,134087,134088,134091,134092,134095],{},"静态定位是元素的 ",[2398,134089,134090],{},"默认定位方式"," ， ",[2398,134093,134094],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[29,134097,7251],{},[51,134099,134100],{"className":128185,"code":133978,"language":128187,"meta":57,"style":57},[59,134101,134102,134108,134120,134134,134148],{"__ignoreMap":57},[79,134103,134104,134106],{"class":81,"line":82},[79,134105,132033],{"class":85},[79,134107,17604],{"class":228},[79,134109,134110,134112,134114,134116,134118],{"class":81,"line":167},[79,134111,133991],{"class":96},[79,134113,53431],{"class":228},[79,134115,56753],{"class":96},[79,134117,132048],{"class":228},[79,134119,134000],{"class":2313},[79,134121,134122,134124,134126,134128,134130,134132],{"class":81,"line":178},[79,134123,134005],{"class":96},[79,134125,53431],{"class":228},[79,134127,2689],{"class":96},[79,134129,53486],{"class":448},[79,134131,134014],{"class":228},[79,134133,134017],{"class":2313},[79,134135,134136,134138,134140,134142,134144,134146],{"class":81,"line":545},[79,134137,134022],{"class":96},[79,134139,53431],{"class":228},[79,134141,2940],{"class":96},[79,134143,53486],{"class":448},[79,134145,134031],{"class":228},[79,134147,134034],{"class":2313},[79,134149,134150],{"class":81,"line":550},[79,134151,3671],{"class":228},[3246,134153,134154,134157],{},[29,134155,134156],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[29,134158,134159],{},"静态定位在布局时我们几乎不用的",[19,134161,134162],{},"（2）相对定位",[3246,134164,134165,134172],{},[29,134166,134167,134168,134171],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[2398,134169,134170],{},"原来的位置"," 来说的（自恋型）",[29,134173,7251],{},[51,134175,134176],{"className":128185,"code":133978,"language":128187,"meta":57,"style":57},[59,134177,134178,134184,134196,134210,134224],{"__ignoreMap":57},[79,134179,134180,134182],{"class":81,"line":82},[79,134181,132033],{"class":85},[79,134183,17604],{"class":228},[79,134185,134186,134188,134190,134192,134194],{"class":81,"line":167},[79,134187,133991],{"class":96},[79,134189,53431],{"class":228},[79,134191,56753],{"class":96},[79,134193,132048],{"class":228},[79,134195,134000],{"class":2313},[79,134197,134198,134200,134202,134204,134206,134208],{"class":81,"line":178},[79,134199,134005],{"class":96},[79,134201,53431],{"class":228},[79,134203,2689],{"class":96},[79,134205,53486],{"class":448},[79,134207,134014],{"class":228},[79,134209,134017],{"class":2313},[79,134211,134212,134214,134216,134218,134220,134222],{"class":81,"line":545},[79,134213,134022],{"class":96},[79,134215,53431],{"class":228},[79,134217,2940],{"class":96},[79,134219,53486],{"class":448},[79,134221,134031],{"class":228},[79,134223,134034],{"class":2313},[79,134225,134226],{"class":81,"line":550},[79,134227,3671],{"class":228},[3246,134229,134230],{},[29,134231,134232,134233,134235,134236,134238,134239,134242,134243,134246,134247,134249,134250,134253],{},"相对定位的特点：",[55707,134234],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[55707,134237],{},"  ② ",[2398,134240,134241],{},"原来"," 在标准流的 ",[2398,134244,134245],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[55707,134248],{},"  ③因此， ",[2398,134251,134252],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,134255,134256],{},"（3）绝对定位",[3246,134258,134259,134268],{},[29,134260,134261,134263,134264,134267],{},[2398,134262,134072],{}," 是元素在移动位置的时候，是相对于它 ",[2398,134265,134266],{},"祖先元素"," 来说的（拼爹型）",[29,134269,7251],{},[51,134271,134272],{"className":128185,"code":133978,"language":128187,"meta":57,"style":57},[59,134273,134274,134280,134292,134306,134320],{"__ignoreMap":57},[79,134275,134276,134278],{"class":81,"line":82},[79,134277,132033],{"class":85},[79,134279,17604],{"class":228},[79,134281,134282,134284,134286,134288,134290],{"class":81,"line":167},[79,134283,133991],{"class":96},[79,134285,53431],{"class":228},[79,134287,56753],{"class":96},[79,134289,132048],{"class":228},[79,134291,134000],{"class":2313},[79,134293,134294,134296,134298,134300,134302,134304],{"class":81,"line":178},[79,134295,134005],{"class":96},[79,134297,53431],{"class":228},[79,134299,2689],{"class":96},[79,134301,53486],{"class":448},[79,134303,134014],{"class":228},[79,134305,134017],{"class":2313},[79,134307,134308,134310,134312,134314,134316,134318],{"class":81,"line":545},[79,134309,134022],{"class":96},[79,134311,53431],{"class":228},[79,134313,2940],{"class":96},[79,134315,53486],{"class":448},[79,134317,134031],{"class":228},[79,134319,134034],{"class":2313},[79,134321,134322],{"class":81,"line":550},[79,134323,3671],{"class":228},[3246,134325,134326,134341,134350,134353],{},[29,134327,134328,134329,134331,134332,134334,134335,134337,134338,134340],{},"绝对定位的特点：",[55707,134330],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[55707,134333],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[55707,134336],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[55707,134339],{},"  (4)固定定位",[29,134342,134343,134345,134346,134349],{},[2398,134344,134079],{}," 是元素 ",[2398,134347,134348],{},"固定于浏览器可视区的位置"," 。（认死理型）",[29,134351,134352],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[29,134354,134355],{},"语法:",[51,134357,134358],{"className":128185,"code":133978,"language":128187,"meta":57,"style":57},[59,134359,134360,134366,134378,134392,134406],{"__ignoreMap":57},[79,134361,134362,134364],{"class":81,"line":82},[79,134363,132033],{"class":85},[79,134365,17604],{"class":228},[79,134367,134368,134370,134372,134374,134376],{"class":81,"line":167},[79,134369,133991],{"class":96},[79,134371,53431],{"class":228},[79,134373,56753],{"class":96},[79,134375,132048],{"class":228},[79,134377,134000],{"class":2313},[79,134379,134380,134382,134384,134386,134388,134390],{"class":81,"line":178},[79,134381,134005],{"class":96},[79,134383,53431],{"class":228},[79,134385,2689],{"class":96},[79,134387,53486],{"class":448},[79,134389,134014],{"class":228},[79,134391,134017],{"class":2313},[79,134393,134394,134396,134398,134400,134402,134404],{"class":81,"line":545},[79,134395,134022],{"class":96},[79,134397,53431],{"class":228},[79,134399,2940],{"class":96},[79,134401,53486],{"class":448},[79,134403,134031],{"class":228},[79,134405,134034],{"class":2313},[79,134407,134408],{"class":81,"line":550},[79,134409,3671],{"class":228},[3246,134411,134412,134421],{},[29,134413,134414,134415,134417,134418,134420],{},"特点:",[55707,134416],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[55707,134419],{},"  ②固定定位不再占有原先的位置,完全脱标",[29,134422,134423,134424,134426,134427,134429,134430,134432],{},"固定在版心位置的方法:",[55707,134425],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[55707,134428],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[55707,134431],{},"  实例：",[51,134434,134435],{"className":128185,"code":133978,"language":128187,"meta":57,"style":57},[59,134436,134437,134443,134455,134469,134483],{"__ignoreMap":57},[79,134438,134439,134441],{"class":81,"line":82},[79,134440,132033],{"class":85},[79,134442,17604],{"class":228},[79,134444,134445,134447,134449,134451,134453],{"class":81,"line":167},[79,134446,133991],{"class":96},[79,134448,53431],{"class":228},[79,134450,56753],{"class":96},[79,134452,132048],{"class":228},[79,134454,134000],{"class":2313},[79,134456,134457,134459,134461,134463,134465,134467],{"class":81,"line":178},[79,134458,134005],{"class":96},[79,134460,53431],{"class":228},[79,134462,2689],{"class":96},[79,134464,53486],{"class":448},[79,134466,134014],{"class":228},[79,134468,134017],{"class":2313},[79,134470,134471,134473,134475,134477,134479,134481],{"class":81,"line":545},[79,134472,134022],{"class":96},[79,134474,53431],{"class":228},[79,134476,2940],{"class":96},[79,134478,53486],{"class":448},[79,134480,134031],{"class":228},[79,134482,134034],{"class":2313},[79,134484,134485],{"class":81,"line":550},[79,134486,3671],{"class":228},[3569,134488],{"style":128041,"src":134489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,134491,134492],{},"(5)粘性定位",[3246,134494,134495,134498],{},[29,134496,134497],{},"粘性定位可以被认为是相对定位和固定定位的混合",[29,134499,7251],{},[51,134501,134502],{"className":128185,"code":133978,"language":128187,"meta":57,"style":57},[59,134503,134504,134510,134522,134536,134550],{"__ignoreMap":57},[79,134505,134506,134508],{"class":81,"line":82},[79,134507,132033],{"class":85},[79,134509,17604],{"class":228},[79,134511,134512,134514,134516,134518,134520],{"class":81,"line":167},[79,134513,133991],{"class":96},[79,134515,53431],{"class":228},[79,134517,56753],{"class":96},[79,134519,132048],{"class":228},[79,134521,134000],{"class":2313},[79,134523,134524,134526,134528,134530,134532,134534],{"class":81,"line":178},[79,134525,134005],{"class":96},[79,134527,53431],{"class":228},[79,134529,2689],{"class":96},[79,134531,53486],{"class":448},[79,134533,134014],{"class":228},[79,134535,134017],{"class":2313},[79,134537,134538,134540,134542,134544,134546,134548],{"class":81,"line":545},[79,134539,134022],{"class":96},[79,134541,53431],{"class":228},[79,134543,2940],{"class":96},[79,134545,53486],{"class":448},[79,134547,134031],{"class":228},[79,134549,134034],{"class":2313},[79,134551,134552],{"class":81,"line":550},[79,134553,3671],{"class":228},[3246,134555,134556],{},[29,134557,134558,134559,134561,134562,134564,134565,134567,134568,134571,134572,134574],{},"粘性定位的特点：",[55707,134560],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[55707,134563],{},"  ②粘性定位占有原先的位置（相对定位特点）",[55707,134566],{},"  ③必须添加 top 、left、right、bottom ",[2398,134569,134570],{},"其中一个"," 才有效",[55707,134573],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[51,134576,134577],{"className":128185,"code":133978,"language":128187,"meta":57,"style":57},[59,134578,134579,134585,134597,134611,134625],{"__ignoreMap":57},[79,134580,134581,134583],{"class":81,"line":82},[79,134582,132033],{"class":85},[79,134584,17604],{"class":228},[79,134586,134587,134589,134591,134593,134595],{"class":81,"line":167},[79,134588,133991],{"class":96},[79,134590,53431],{"class":228},[79,134592,56753],{"class":96},[79,134594,132048],{"class":228},[79,134596,134000],{"class":2313},[79,134598,134599,134601,134603,134605,134607,134609],{"class":81,"line":178},[79,134600,134005],{"class":96},[79,134602,53431],{"class":228},[79,134604,2689],{"class":96},[79,134606,53486],{"class":448},[79,134608,134014],{"class":228},[79,134610,134017],{"class":2313},[79,134612,134613,134615,134617,134619,134621,134623],{"class":81,"line":545},[79,134614,134022],{"class":96},[79,134616,53431],{"class":228},[79,134618,2940],{"class":96},[79,134620,53486],{"class":448},[79,134622,134031],{"class":228},[79,134624,134034],{"class":2313},[79,134626,134627],{"class":81,"line":550},[79,134628,3671],{"class":228},[3569,134630],{"style":128041,"src":134631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,134633,134634],{},"(6)总结",[347,134636,134637,134652],{},[350,134638,134639],{},[353,134640,134641,134643,134646,134649],{},[356,134642,133975],{"align":358},[356,134644,134645],{"align":358},"是否脱标",[356,134647,134648],{"align":358},"移动位置",[356,134650,134651],{"align":358},"是否常用",[367,134653,134654,134667,134681,134695,134708],{},[353,134655,134656,134659,134661,134664],{},[372,134657,134658],{"align":358},"Static 静态定位",[372,134660,106594],{"align":358},[372,134662,134663],{"align":358},"不能使用边偏移",[372,134665,134666],{"align":358},"很少",[353,134668,134669,134672,134675,134678],{},[372,134670,134671],{"align":358},"Relative 相对定位",[372,134673,134674],{"align":358},"否(占有位置)",[372,134676,134677],{"align":358},"相对于自身位置移动",[372,134679,134680],{"align":358},"基本单独使用",[353,134682,134683,134686,134689,134692],{},[372,134684,134685],{"align":358},"Absolute 绝对定位",[372,134687,134688],{"align":358},"是(不占有位置)",[372,134690,134691],{"align":358},"带有定位的父级",[372,134693,134694],{"align":358},"要和定位父级元素搭配使用",[353,134696,134697,134700,134702,134705],{},[372,134698,134699],{"align":358},"Fixed 固定定位",[372,134701,134688],{"align":358},[372,134703,134704],{"align":358},"浏览器可视区",[372,134706,134707],{"align":358},"单独使用,不需要父级",[353,134709,134710,134713,134715,134717],{},[372,134711,134712],{"align":358},"Sticky 粘性定位",[372,134714,134674],{"align":358},[372,134716,134704],{"align":358},[372,134718,134719],{"align":358},"当前阶段少",[26,134721,134722],{"start":167},[29,134723,134724,134727],{},[2398,134725,134726],{},"边偏移"," 则决定了该元素的最终位置",[347,134729,134730,134741],{},[350,134731,134732],{},[353,134733,134734,134737,134739],{},[356,134735,134736],{"align":358},"边偏移属性",[356,134738,29508],{"align":358},[356,134740,29505],{"align":358},[367,134742,134743,134754,134765,134775],{},[353,134744,134745,134748,134751],{},[372,134746,134747],{"align":358},"top",[372,134749,134750],{"align":358},"top: 80px;",[372,134752,134753],{"align":358},"顶端偏移量，定义元素相对于父元素上边线的距离",[353,134755,134756,134759,134762],{},[372,134757,134758],{"align":358},"bottom",[372,134760,134761],{"align":358},"bottom: 80px ;",[372,134763,134764],{"align":358},"底部偏移量，定义元素相对于其父元素下边线的距离",[353,134766,134767,134769,134772],{},[372,134768,358],{"align":358},[372,134770,134771],{"align":358},"left: 80px ;",[372,134773,134774],{"align":358},"左侧偏移量，定义元素相对于其父元素左边线的距离",[353,134776,134777,134779,134782],{},[372,134778,74510],{"align":358},[372,134780,134781],{"align":358},"right: 80px ;",[372,134783,134784],{"align":358},"右侧偏移量，定义元素相对于其父元素右边线的距离",[3246,134786,134787],{},[29,134788,11080,134789,134791,134792,134794,134795,134797,134798,134801,134802,134804,134805,134807],{},[55707,134790],{},"  ① ",[2398,134793,134726],{}," 需要和 ",[2398,134796,133975],{}," 联合使用， ",[2398,134799,134800],{},"单独使用无效"," ；",[55707,134803],{},"  ②top和bottom不要同时使用",[55707,134806],{},"  ③left和right不要同时使用",[24023,134809,134811],{"id":134810},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,134813,134814],{},"子级是绝对定位的话，父级要用相对定位",[3246,134816,134817,134820,134823,134826],{},[29,134818,134819],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[29,134821,134822],{},"父盒子需要加定位限制子盒子在父盒子内显示",[29,134824,134825],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[29,134827,134828,134829,134832],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[2398,134830,134831],{},"子绝父绝"," 也会遇到",[24023,134834,134836],{"id":134835},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[3246,134838,134839,134854],{},[29,134840,134841,134842,134845,134846,134849,134850,134853],{},"在使用 ",[2398,134843,134844],{},"定位"," 布局时，可能会 ",[2398,134847,134848],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[2398,134851,134852],{},"z-index"," 来控制盒子的前后次序 (z轴)",[29,134855,7251],{},[51,134857,134858],{"className":128185,"code":133978,"language":128187,"meta":57,"style":57},[59,134859,134860,134866,134878,134892,134906],{"__ignoreMap":57},[79,134861,134862,134864],{"class":81,"line":82},[79,134863,132033],{"class":85},[79,134865,17604],{"class":228},[79,134867,134868,134870,134872,134874,134876],{"class":81,"line":167},[79,134869,133991],{"class":96},[79,134871,53431],{"class":228},[79,134873,56753],{"class":96},[79,134875,132048],{"class":228},[79,134877,134000],{"class":2313},[79,134879,134880,134882,134884,134886,134888,134890],{"class":81,"line":178},[79,134881,134005],{"class":96},[79,134883,53431],{"class":228},[79,134885,2689],{"class":96},[79,134887,53486],{"class":448},[79,134889,134014],{"class":228},[79,134891,134017],{"class":2313},[79,134893,134894,134896,134898,134900,134902,134904],{"class":81,"line":545},[79,134895,134022],{"class":96},[79,134897,53431],{"class":228},[79,134899,2940],{"class":96},[79,134901,53486],{"class":448},[79,134903,134031],{"class":228},[79,134905,134034],{"class":2313},[79,134907,134908],{"class":81,"line":550},[79,134909,3671],{"class":228},[3246,134911,134912],{},[29,134913,134914,134915,134791,134917,134919,134920,129348,134923,1978,134926,134928,134929,134931,134932,134935,134936,134801,134939,134941,134942,134945,134947],{},"z-index的特性",[55707,134916],{},[2398,134918,128649],{}," ： ",[2398,134921,134922],{},"正整数",[2398,134924,134925],{},"负整数",[2398,134927,759],{}," ，默认值是 0，数值越大，盒子越靠上；",[55707,134930],{},"  ②如果 ",[2398,134933,134934],{},"属性值相同"," ，则按照书写顺序， ",[2398,134937,134938],{},"后来居上",[55707,134940],{},"  ③数字后面 ",[2398,134943,134944],{},"不能加单位",[55707,134946],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[24023,134949,134951],{"id":134950},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,134953,134954],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,134956,134957],{},"方法:",[3246,134959,134960,134970],{},[29,134961,134962,134963,134966,134967],{},"left: 50%; 让 ",[2398,134964,134965],{},"盒子的左侧"," 移动到 ",[2398,134968,134969],{},"父级元素的水平中心位置",[29,134971,134972,134973,134976,134977],{},"margin-left: -100px; 让盒子 ",[2398,134974,134975],{},"向左"," 移动 ",[2398,134978,134979],{},"自身宽度的一半",[24023,134981,134983],{"id":134982},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[26,134985,134986,134989],{},[29,134987,134988],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[29,134990,134991],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,134993,134994],{},"也就是说绝对定位和固定定位和浮动类似",[26,134996,134997],{"start":178},[29,134998,134999],{},"display 是显示模式， 可以改变显示模式有以下方式:",[3246,135001,135002,135005,135008],{},[29,135003,135004],{},"可以用inline-block 转换为行内块",[29,135006,135007],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[29,135009,135010],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,135012,135013],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[24023,135015,135017],{"id":135016},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[26,135019,135020,135023,135026,135029],{},[29,135021,135022],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[29,135024,135025],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[29,135027,135028],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[29,135030,135031],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[51,135033,135034],{"className":128185,"code":132651,"language":128187,"meta":57,"style":57},[59,135035,135036,135042,135052,135056,135062,135072],{"__ignoreMap":57},[79,135037,135038,135040],{"class":81,"line":82},[79,135039,132658],{"class":85},[79,135041,17604],{"class":228},[79,135043,135044,135046,135048,135050],{"class":81,"line":167},[79,135045,132665],{"class":96},[79,135047,53431],{"class":228},[79,135049,358],{"class":96},[79,135051,3400],{"class":228},[79,135053,135054],{"class":81,"line":178},[79,135055,3671],{"class":228},[79,135057,135058,135060],{"class":81,"line":545},[79,135059,132680],{"class":85},[79,135061,17604],{"class":228},[79,135063,135064,135066,135068,135070],{"class":81,"line":550},[79,135065,132665],{"class":96},[79,135067,53431],{"class":228},[79,135069,74510],{"class":96},[79,135071,3400],{"class":228},[79,135073,135074],{"class":81,"line":562},[79,135075,3671],{"class":228},[3569,135077],{"style":128041,"src":135078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[24023,135080,135082],{"id":135081},"_11138-轮播图","11.1.3.8 轮播图",[3569,135084],{"style":128041,"src":135085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[26,135087,135088],{},[29,135089,135090],{},"制作顺序:",[3246,135092,135093,135096,135099,135108],{},[29,135094,135095],{},"大盒子我们类名为： tb-promo 淘宝广告",[29,135097,135098],{},"里面先放一张图片",[29,135100,135101,135102,135104,135105,135107],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[55707,135103],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[55707,135106],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[29,135109,135110,135111,135113,135114,135116],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[55707,135112],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[55707,135115],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[26,135118,135119],{"start":167},[29,135120,135121],{},"代码模块",[51,135123,135125],{"className":128185,"code":135124,"language":128187,"meta":57,"style":57},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n.son {\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n\u002F* 父元素需要加 relative（子绝父相） *\u002F\n.father {\n  position: relative;\n}\n",[59,135126,135127,135132,135139,135149,135159,135169,135173,135178,135185,135195],{"__ignoreMap":57},[79,135128,135129],{"class":81,"line":82},[79,135130,135131],{"class":2313},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[79,135133,135134,135137],{"class":81,"line":167},[79,135135,135136],{"class":85},".son",[79,135138,17604],{"class":228},[79,135140,135141,135143,135145,135147],{"class":81,"line":178},[79,135142,133991],{"class":96},[79,135144,53431],{"class":228},[79,135146,56820],{"class":96},[79,135148,3400],{"class":228},[79,135150,135151,135153,135155,135157],{"class":81,"line":545},[79,135152,134005],{"class":96},[79,135154,53431],{"class":228},[79,135156,759],{"class":96},[79,135158,3400],{"class":228},[79,135160,135161,135163,135165,135167],{"class":81,"line":550},[79,135162,134022],{"class":96},[79,135164,53431],{"class":228},[79,135166,759],{"class":96},[79,135168,3400],{"class":228},[79,135170,135171],{"class":81,"line":562},[79,135172,3671],{"class":228},[79,135174,135175],{"class":81,"line":568},[79,135176,135177],{"class":2313},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[79,135179,135180,135183],{"class":81,"line":574},[79,135181,135182],{"class":85},".father",[79,135184,17604],{"class":228},[79,135186,135187,135189,135191,135193],{"class":81,"line":579},[79,135188,133991],{"class":96},[79,135190,53431],{"class":228},[79,135192,56753],{"class":96},[79,135194,3400],{"class":228},[79,135196,135197],{"class":81,"line":585},[79,135198,3671],{"class":228},[19,135200,135201],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[339,135203,135205],{"id":135204},"_1114-定位数值的移动","11.1.4 定位数值的移动",[3569,135207],{"style":128041,"src":135208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,135210,135211],{},"✨ 黄金口诀：",[19,135213,135214],{},"\"TOP正下负上，LEFT正右负左\"",[19,135216,135217],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,135219,135220],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,135222,135223],{},"✨ 简单记：",[19,135225,135226],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[2159,135228,135229],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":57,"searchDepth":167,"depth":167,"links":135231},[135232],{"id":133759,"depth":167,"text":133760,"children":135233},[135234,135235,135236,135237],{"id":133763,"depth":178,"text":133764},{"id":133778,"depth":178,"text":133779},{"id":133946,"depth":178,"text":133947},{"id":135204,"depth":178,"text":135205},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":133751,"description":25402},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":135244,"title":135245,"body":135246,"description":25402,"extension":2186,"meta":136669,"navigation":541,"path":136670,"seo":136671,"stem":136672,"__hash__":136673},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":135247,"toc":136648},[135248,135251,135255,135263,135267,135272,135280,135292,135296,135301,135309,135320,135324,135329,135370,135378,135382,135385,135388,135391,135485,135488,135582,135585,135679,135682,135685,135720,135723,135726,135756,135759,135762,135765,135768,135771,135774,135777,135847,135850,135854,135858,135899,135903,135909,135912,135915,135919,135922,135925,135928,136009,136012,136015,136019,136023,136026,136029,136032,136035,136038,136044,136053,136057,136076,136080,136090,136093,136096,136099,136102,136105,136108,136111,136114,136123,136127,136136,136139,136144,136197,136202,136368,136371,136374,136379,136382,136385,136388,136391,136396,136544,136547,136550,136555,136558,136563,136597,136600,136603,136607,136610,136617,136620,136623,136626,136629,136632,136635,136638,136642,136645],[10,135249,135245],{"id":135250},"_12-显示隐藏与图形资源",[14,135252,135254],{"id":135253},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[3246,135256,135257,135260],{},[29,135258,135259],{},"目的:让一个元素在页面中消失或者显示出来",[29,135261,135262],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[339,135264,135266],{"id":135265},"_1211-display-显示","12.1.1 display 显示",[26,135268,135269],{},[29,135270,135271],{},"display 设置或检索对象是否及如何显示",[3246,135273,135274,135277],{},[29,135275,135276],{},"display: none;隐藏对象",[29,135278,135279],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[26,135281,135282,135289],{"start":167},[29,135283,135284,135285,135288],{},"特点： display 隐藏元素后， ",[2398,135286,135287],{},"不再占"," 有原来的位置",[29,135290,135291],{},"在js中使用非常的广泛",[339,135293,135295],{"id":135294},"_1212-visibility可见性","12.1.2 visibility可见性",[26,135297,135298],{},[29,135299,135300],{},"visibility 属性用于指定一个元素应可见还是隐藏",[3246,135302,135303,135306],{},[29,135304,135305],{},"visibility： visible；元素可见",[29,135307,135308],{},"visibility：hidden；元素隐藏",[26,135310,135311,135314,135317],{"start":167},[29,135312,135313],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[29,135315,135316],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[29,135318,135319],{},"隐藏后继续占有原有位置",[339,135321,135323],{"id":135322},"_1213-overflow溢出","12.1.3 overflow溢出",[3246,135325,135326],{},[29,135327,135328],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[347,135330,135331,135339],{},[350,135332,135333],{},[353,135334,135335,135337],{},[356,135336,128649],{"align":358},[356,135338,29505],{"align":358},[367,135340,135341,135349,135356,135363],{},[353,135342,135343,135346],{},[372,135344,135345],{"align":358},"visible",[372,135347,135348],{"align":358},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[353,135350,135351,135353],{},[372,135352,63703],{"align":358},[372,135354,135355],{"align":358},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[353,135357,135358,135360],{},[372,135359,130605],{"align":358},[372,135361,135362],{"align":358},"不管超出内容否，总是显示滚动条",[353,135364,135365,135367],{},[372,135366,74651],{"align":358},[372,135368,135369],{"align":358},"超出自动显示滚动条，不超出不显示滚动条",[3246,135371,135372,135375],{},[29,135373,135374],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[29,135376,135377],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[339,135379,135381],{"id":135380},"_1214-案例收获","12.1.4 案例收获",[3569,135383],{"style":128041,"src":135384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,135386,135387],{},"问题：没做出来动态效果，使用hover没实现",[19,135389,135390],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[51,135392,135393],{"className":128185,"code":133617,"language":128187,"meta":57,"style":57},[59,135394,135395,135399,135413,135417,135431,135435,135449,135453,135467,135471],{"__ignoreMap":57},[79,135396,135397],{"class":81,"line":82},[79,135398,133624],{"class":2313},[79,135400,135401,135403,135405,135407,135409,135411],{"class":81,"line":167},[79,135402,133629],{"class":85},[79,135404,81795],{"class":228},[79,135406,130545],{"class":96},[79,135408,53431],{"class":228},[79,135410,133638],{"class":96},[79,135412,131115],{"class":228},[79,135414,135415],{"class":81,"line":178},[79,135416,133645],{"class":2313},[79,135418,135419,135421,135423,135425,135427,135429],{"class":81,"line":545},[79,135420,133650],{"class":85},[79,135422,81795],{"class":228},[79,135424,130545],{"class":96},[79,135426,53431],{"class":228},[79,135428,56753],{"class":96},[79,135430,131115],{"class":228},[79,135432,135433],{"class":81,"line":550},[79,135434,133665],{"class":2313},[79,135436,135437,135439,135441,135443,135445,135447],{"class":81,"line":562},[79,135438,133670],{"class":85},[79,135440,81795],{"class":228},[79,135442,130545],{"class":96},[79,135444,53431],{"class":228},[79,135446,56820],{"class":96},[79,135448,131115],{"class":228},[79,135450,135451],{"class":81,"line":568},[79,135452,133685],{"class":2313},[79,135454,135455,135457,135459,135461,135463,135465],{"class":81,"line":574},[79,135456,133690],{"class":85},[79,135458,81795],{"class":228},[79,135460,130545],{"class":96},[79,135462,53431],{"class":228},[79,135464,88220],{"class":96},[79,135466,131115],{"class":228},[79,135468,135469],{"class":81,"line":579},[79,135470,133705],{"class":2313},[79,135472,135473,135475,135477,135479,135481,135483],{"class":81,"line":585},[79,135474,133710],{"class":85},[79,135476,81795],{"class":228},[79,135478,130545],{"class":96},[79,135480,53431],{"class":228},[79,135482,133719],{"class":96},[79,135484,131115],{"class":228},[19,135486,135487],{},"完整代码：",[51,135489,135490],{"className":128185,"code":133617,"language":128187,"meta":57,"style":57},[59,135491,135492,135496,135510,135514,135528,135532,135546,135550,135564,135568],{"__ignoreMap":57},[79,135493,135494],{"class":81,"line":82},[79,135495,133624],{"class":2313},[79,135497,135498,135500,135502,135504,135506,135508],{"class":81,"line":167},[79,135499,133629],{"class":85},[79,135501,81795],{"class":228},[79,135503,130545],{"class":96},[79,135505,53431],{"class":228},[79,135507,133638],{"class":96},[79,135509,131115],{"class":228},[79,135511,135512],{"class":81,"line":178},[79,135513,133645],{"class":2313},[79,135515,135516,135518,135520,135522,135524,135526],{"class":81,"line":545},[79,135517,133650],{"class":85},[79,135519,81795],{"class":228},[79,135521,130545],{"class":96},[79,135523,53431],{"class":228},[79,135525,56753],{"class":96},[79,135527,131115],{"class":228},[79,135529,135530],{"class":81,"line":550},[79,135531,133665],{"class":2313},[79,135533,135534,135536,135538,135540,135542,135544],{"class":81,"line":562},[79,135535,133670],{"class":85},[79,135537,81795],{"class":228},[79,135539,130545],{"class":96},[79,135541,53431],{"class":228},[79,135543,56820],{"class":96},[79,135545,131115],{"class":228},[79,135547,135548],{"class":81,"line":568},[79,135549,133685],{"class":2313},[79,135551,135552,135554,135556,135558,135560,135562],{"class":81,"line":574},[79,135553,133690],{"class":85},[79,135555,81795],{"class":228},[79,135557,130545],{"class":96},[79,135559,53431],{"class":228},[79,135561,88220],{"class":96},[79,135563,131115],{"class":228},[79,135565,135566],{"class":81,"line":579},[79,135567,133705],{"class":2313},[79,135569,135570,135572,135574,135576,135578,135580],{"class":81,"line":585},[79,135571,133710],{"class":85},[79,135573,81795],{"class":228},[79,135575,130545],{"class":96},[79,135577,53431],{"class":228},[79,135579,133719],{"class":96},[79,135581,131115],{"class":228},[19,135583,135584],{},"分布思路重点详解：",[51,135586,135587],{"className":128185,"code":133617,"language":128187,"meta":57,"style":57},[59,135588,135589,135593,135607,135611,135625,135629,135643,135647,135661,135665],{"__ignoreMap":57},[79,135590,135591],{"class":81,"line":82},[79,135592,133624],{"class":2313},[79,135594,135595,135597,135599,135601,135603,135605],{"class":81,"line":167},[79,135596,133629],{"class":85},[79,135598,81795],{"class":228},[79,135600,130545],{"class":96},[79,135602,53431],{"class":228},[79,135604,133638],{"class":96},[79,135606,131115],{"class":228},[79,135608,135609],{"class":81,"line":178},[79,135610,133645],{"class":2313},[79,135612,135613,135615,135617,135619,135621,135623],{"class":81,"line":545},[79,135614,133650],{"class":85},[79,135616,81795],{"class":228},[79,135618,130545],{"class":96},[79,135620,53431],{"class":228},[79,135622,56753],{"class":96},[79,135624,131115],{"class":228},[79,135626,135627],{"class":81,"line":550},[79,135628,133665],{"class":2313},[79,135630,135631,135633,135635,135637,135639,135641],{"class":81,"line":562},[79,135632,133670],{"class":85},[79,135634,81795],{"class":228},[79,135636,130545],{"class":96},[79,135638,53431],{"class":228},[79,135640,56820],{"class":96},[79,135642,131115],{"class":228},[79,135644,135645],{"class":81,"line":568},[79,135646,133685],{"class":2313},[79,135648,135649,135651,135653,135655,135657,135659],{"class":81,"line":574},[79,135650,133690],{"class":85},[79,135652,81795],{"class":228},[79,135654,130545],{"class":96},[79,135656,53431],{"class":228},[79,135658,88220],{"class":96},[79,135660,131115],{"class":228},[79,135662,135663],{"class":81,"line":579},[79,135664,133705],{"class":2313},[79,135666,135667,135669,135671,135673,135675,135677],{"class":81,"line":585},[79,135668,133710],{"class":85},[79,135670,81795],{"class":228},[79,135672,130545],{"class":96},[79,135674,53431],{"class":228},[79,135676,133719],{"class":96},[79,135678,131115],{"class":228},[3569,135680],{"style":128041,"src":135681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,135683,135684],{},"图片太大，盒子太小，此时需要修改图片的大小",[51,135686,135688],{"className":128932,"code":135687,"language":128934,"meta":57,"style":57},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[59,135689,135690],{"__ignoreMap":57},[79,135691,135692,135694,135696,135698,135700,135703,135705,135707,135710,135713,135715,135718],{"class":81,"line":82},[79,135693,229],{"class":228},[79,135695,3569],{"class":232},[79,135697,57228],{"class":85},[79,135699,239],{"class":228},[79,135701,135702],{"class":89},"\"images\u002Fpic.jpg\"",[79,135704,57236],{"class":85},[79,135706,239],{"class":228},[79,135708,135709],{"class":89},"\"描述文字\"",[79,135711,135712],{"class":85}," title",[79,135714,239],{"class":228},[79,135716,135717],{"class":89},"\"悬停提示\"",[79,135719,53301],{"class":228},[3569,135721],{"style":128041,"src":135722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,135724,135725],{},"制造遮罩层",[51,135727,135728],{"className":128932,"code":135687,"language":128934,"meta":57,"style":57},[59,135729,135730],{"__ignoreMap":57},[79,135731,135732,135734,135736,135738,135740,135742,135744,135746,135748,135750,135752,135754],{"class":81,"line":82},[79,135733,229],{"class":228},[79,135735,3569],{"class":232},[79,135737,57228],{"class":85},[79,135739,239],{"class":228},[79,135741,135702],{"class":89},[79,135743,57236],{"class":85},[79,135745,239],{"class":228},[79,135747,135709],{"class":89},[79,135749,135712],{"class":85},[79,135751,239],{"class":228},[79,135753,135717],{"class":89},[79,135755,53301],{"class":228},[19,135757,135758],{},"此时是这样的为标准流",[3569,135760],{"style":128041,"src":135761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,135763,135764],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,135766,135767],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,135769,135770],{},"让他在中间，用center(background-position)",[19,135772,135773],{},"将需要变的尽可能放到一个盒子中",[19,135775,135776],{},"放大盒子上内部盒子发生变化",[51,135778,135780],{"className":128185,"code":135779,"language":128187,"meta":57,"style":57},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[59,135781,135782,135788,135798,135802,135809,135819,135831,135843],{"__ignoreMap":57},[79,135783,135784,135786],{"class":81,"line":82},[79,135785,129252],{"class":85},[79,135787,17604],{"class":228},[79,135789,135790,135792,135794,135796],{"class":81,"line":167},[79,135791,133991],{"class":96},[79,135793,53431],{"class":228},[79,135795,56753],{"class":96},[79,135797,3400],{"class":228},[79,135799,135800],{"class":81,"line":178},[79,135801,3671],{"class":228},[79,135803,135804,135807],{"class":81,"line":545},[79,135805,135806],{"class":85},".child",[79,135808,17604],{"class":228},[79,135810,135811,135813,135815,135817],{"class":81,"line":550},[79,135812,133991],{"class":96},[79,135814,53431],{"class":228},[79,135816,56820],{"class":96},[79,135818,3400],{"class":228},[79,135820,135821,135823,135825,135827,135829],{"class":81,"line":562},[79,135822,134005],{"class":96},[79,135824,53431],{"class":228},[79,135826,2896],{"class":96},[79,135828,1094],{"class":448},[79,135830,3400],{"class":228},[79,135832,135833,135835,135837,135839,135841],{"class":81,"line":568},[79,135834,134022],{"class":96},[79,135836,53431],{"class":228},[79,135838,2896],{"class":96},[79,135840,1094],{"class":448},[79,135842,3400],{"class":228},[79,135844,135845],{"class":81,"line":574},[79,135846,3671],{"class":228},[19,135848,135849],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,135851,135853],{"id":135852},"_122-精灵图","12.2 精灵图",[339,135855,135857],{"id":135856},"_1221-理解","12.2.1 理解",[26,135859,135860,135878],{},[29,135861,135862,135863,134091,135866,135869,135870,135873,135874,135877],{},"目的： ",[2398,135864,135865],{},"为了有效地减少服务器接收和发送请求的次数",[2398,135867,135868],{},"提高"," 页面的 ",[2398,135871,135872],{},"加载速度"," ，出现了 ",[2398,135875,135876],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[29,135879,135880,135881,135883,135884,135886,135887,135889,135890,135892,135893,135895,135896,135898],{},"使用精灵图核心：",[55707,135882],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[55707,135885],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[55707,135888],{},"  ③移动背景图片位置， 此时可以使用 background-position",[55707,135891],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[55707,135894],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[55707,135897],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[339,135900,135902],{"id":135901},"_1222-扒图","12.2.2 扒图",[51,135904,135907],{"className":135905,"code":135906,"language":56},[54],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[59,135908,135906],{"__ignoreMap":57},[3569,135910],{"style":128041,"src":135911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[3569,135913],{"style":128041,"src":135914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[339,135916,135918],{"id":135917},"_1223-精灵图的实现","12.2.3 精灵图的实现",[3569,135920],{"style":128041,"src":135921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,135923,135924],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[3569,135926],{"style":128041,"src":135927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[51,135929,135931],{"className":128185,"code":135930,"language":128187,"meta":57,"style":57},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n.icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat;\n  background-position: -10px -20px;\n}\n",[59,135932,135933,135938,135945,135957,135969,135988,136005],{"__ignoreMap":57},[79,135934,135935],{"class":81,"line":82},[79,135936,135937],{"class":2313},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[79,135939,135940,135943],{"class":81,"line":167},[79,135941,135942],{"class":85},".icon",[79,135944,17604],{"class":228},[79,135946,135947,135949,135951,135953,135955],{"class":81,"line":178},[79,135948,72556],{"class":96},[79,135950,53431],{"class":228},[79,135952,2940],{"class":96},[79,135954,53486],{"class":448},[79,135956,3400],{"class":228},[79,135958,135959,135961,135963,135965,135967],{"class":81,"line":545},[79,135960,72776],{"class":96},[79,135962,53431],{"class":228},[79,135964,2940],{"class":96},[79,135966,53486],{"class":448},[79,135968,3400],{"class":228},[79,135970,135971,135973,135975,135977,135979,135982,135984,135986],{"class":81,"line":550},[79,135972,72599],{"class":96},[79,135974,53431],{"class":228},[79,135976,63715],{"class":96},[79,135978,455],{"class":228},[79,135980,135981],{"class":7284},"sprites.png",[79,135983,15747],{"class":228},[79,135985,63725],{"class":96},[79,135987,3400],{"class":228},[79,135989,135990,135992,135994,135996,135998,136001,136003],{"class":81,"line":562},[79,135991,130445],{"class":96},[79,135993,53431],{"class":228},[79,135995,53757],{"class":96},[79,135997,53486],{"class":448},[79,135999,136000],{"class":96}," -20",[79,136002,53486],{"class":448},[79,136004,3400],{"class":228},[79,136006,136007],{"class":81,"line":568},[79,136008,3671],{"class":228},[3569,136010],{"style":128041,"src":136011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,136013,136014],{},"在前端中坐标轴的正方向是右和下",[14,136016,136018],{"id":136017},"_123-字体图标","12.3 字体图标",[339,136020,136022],{"id":136021},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,136024,136025],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,136027,136028],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,136030,136031],{},"1.图片文件还是比较大的。",[19,136033,136034],{},"2.图片本身放大和缩小会失真。",[19,136036,136037],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,136039,136040,136041,27759],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[2398,136042,136043],{},"字体图标 iconfont",[19,136045,136046,136049,136050,497],{},[2398,136047,136048],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[2398,136051,136052],{},"展示的是图标，本质属于字体",[339,136054,136056],{"id":136055},"_1232-字体图标的优点","12.3.2 字体图标的优点",[3246,136058,136059,136064,136067,136070,136073],{},[29,136060,136061,136063],{},[2398,136062,27895],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[29,136065,136066],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[29,136068,136069],{},"兼容性：几乎支持所有的浏览器，请放心使用",[29,136071,136072],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[29,136074,136075],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[339,136077,136079],{"id":136078},"_1233-字体库下载网站","12.3.3 字体库下载网站",[3246,136081,136082],{},[29,136083,136084,136085],{},"icomoon字体库：",[2482,136086,136089],{"href":136087,"rel":136088},"http:\u002F\u002Ficomoon.io\u002F",[25885],"http:\u002F\u002Ficomoon.io",[19,136091,136092],{},"进去之后点icomoon app",[3569,136094],{"style":128041,"src":136095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,136097,136098],{},"可以对其编辑：",[3569,136100],{"style":128041,"src":136101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,136103,136104],{},"生成字体：",[3569,136106],{"style":128041,"src":136107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,136109,136110],{},"下载：",[3569,136112],{"style":128041,"src":136113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[3246,136115,136116],{},[29,136117,136118,136119],{},"阿里iconfont字体库： ",[2482,136120,136121],{"href":136121,"rel":136122},"http:\u002F\u002Fwww.iconfont.cn\u002F",[25885],[339,136124,136126],{"id":136125},"_1234-字体图标的引入","12.3.4 字体图标的引入",[26,136128,136129],{},[29,136130,136131,136132,136135],{},"把下载包里面的 ",[2398,136133,136134],{},"fonts"," 文件夹放入页面根目录下",[3569,136137],{"style":128041,"src":136138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[26,136140,136141],{"start":167},[29,136142,136143],{},"字体文件格式",[347,136145,136146,136155],{},[350,136147,136148],{},[353,136149,136150,136153],{},[356,136151,136152],{"align":358},"格式",[356,136154,25764],{"align":358},[367,136156,136157,136167,136177,136187],{},[353,136158,136159,136164],{},[372,136160,136161],{"align":358},[2398,136162,136163],{},".ttf",[372,136165,136166],{"align":358},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[353,136168,136169,136174],{},[372,136170,136171],{"align":358},[2398,136172,136173],{},".woff",[372,136175,136176],{"align":358},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[353,136178,136179,136184],{},[372,136180,136181],{"align":358},[2398,136182,136183],{},".eot",[372,136185,136186],{"align":358},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[353,136188,136189,136194],{},[372,136190,136191],{"align":358},[2398,136192,136193],{},"svg",[372,136195,136196],{"align":358},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[26,136198,136199],{"start":178},[29,136200,136201],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[51,136203,136205],{"className":128185,"code":136204,"language":128187,"meta":57,"style":57},"\u002F* 引入字体图标 *\u002F\n@font-face {\n  font-family: 'icomoon';\n  src: url('fonts\u002Ficomoon.eot');\n  src: url('fonts\u002Ficomoon.eot?#iefix') format('embedded-opentype'),\n       url('fonts\u002Ficomoon.woff') format('woff'),\n       url('fonts\u002Ficomoon.ttf') format('truetype'),\n       url('fonts\u002Ficomoon.svg#icomoon') format('svg');\n}\n.icon {\n  font-family: 'icomoon';\n  font-style: normal;\n}\n",[59,136206,136207,136212,136219,136231,136247,136272,136293,136313,136333,136337,136343,136353,136364],{"__ignoreMap":57},[79,136208,136209],{"class":81,"line":82},[79,136210,136211],{"class":2313},"\u002F* 引入字体图标 *\u002F\n",[79,136213,136214,136217],{"class":81,"line":167},[79,136215,136216],{"class":448},"@font-face",[79,136218,17604],{"class":228},[79,136220,136221,136224,136226,136229],{"class":81,"line":178},[79,136222,136223],{"class":96},"  font-family",[79,136225,53431],{"class":228},[79,136227,136228],{"class":89},"'icomoon'",[79,136230,3400],{"class":228},[79,136232,136233,136236,136238,136240,136242,136245],{"class":81,"line":545},[79,136234,136235],{"class":96},"  src",[79,136237,53431],{"class":228},[79,136239,63715],{"class":96},[79,136241,455],{"class":228},[79,136243,136244],{"class":89},"'fonts\u002Ficomoon.eot'",[79,136246,4795],{"class":228},[79,136248,136249,136251,136253,136255,136257,136260,136262,136265,136267,136270],{"class":81,"line":550},[79,136250,136235],{"class":96},[79,136252,53431],{"class":228},[79,136254,63715],{"class":96},[79,136256,455],{"class":228},[79,136258,136259],{"class":89},"'fonts\u002Ficomoon.eot?#iefix'",[79,136261,15747],{"class":228},[79,136263,136264],{"class":96},"format",[79,136266,455],{"class":228},[79,136268,136269],{"class":89},"'embedded-opentype'",[79,136271,40042],{"class":228},[79,136273,136274,136277,136279,136282,136284,136286,136288,136291],{"class":81,"line":562},[79,136275,136276],{"class":96},"       url",[79,136278,455],{"class":228},[79,136280,136281],{"class":89},"'fonts\u002Ficomoon.woff'",[79,136283,15747],{"class":228},[79,136285,136264],{"class":96},[79,136287,455],{"class":228},[79,136289,136290],{"class":89},"'woff'",[79,136292,40042],{"class":228},[79,136294,136295,136297,136299,136302,136304,136306,136308,136311],{"class":81,"line":568},[79,136296,136276],{"class":96},[79,136298,455],{"class":228},[79,136300,136301],{"class":89},"'fonts\u002Ficomoon.ttf'",[79,136303,15747],{"class":228},[79,136305,136264],{"class":96},[79,136307,455],{"class":228},[79,136309,136310],{"class":89},"'truetype'",[79,136312,40042],{"class":228},[79,136314,136315,136317,136319,136322,136324,136326,136328,136331],{"class":81,"line":574},[79,136316,136276],{"class":96},[79,136318,455],{"class":228},[79,136320,136321],{"class":89},"'fonts\u002Ficomoon.svg#icomoon'",[79,136323,15747],{"class":228},[79,136325,136264],{"class":96},[79,136327,455],{"class":228},[79,136329,136330],{"class":89},"'svg'",[79,136332,4795],{"class":228},[79,136334,136335],{"class":81,"line":579},[79,136336,3671],{"class":228},[79,136338,136339,136341],{"class":81,"line":585},[79,136340,135942],{"class":85},[79,136342,17604],{"class":228},[79,136344,136345,136347,136349,136351],{"class":81,"line":591},[79,136346,136223],{"class":96},[79,136348,53431],{"class":228},[79,136350,136228],{"class":89},[79,136352,3400],{"class":228},[79,136354,136355,136358,136360,136362],{"class":81,"line":596},[79,136356,136357],{"class":96},"  font-style",[79,136359,53431],{"class":228},[79,136361,65829],{"class":96},[79,136363,3400],{"class":228},[79,136365,136366],{"class":81,"line":602},[79,136367,3671],{"class":228},[19,136369,136370],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[3569,136372],{"style":128041,"src":136373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[26,136375,136376],{"start":545},[29,136377,136378],{},"添加字体",[3569,136380],{"style":128041,"src":136381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,136383,136384],{},"复制：",[3569,136386],{"style":128041,"src":136387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,136389,136390],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[26,136392,136393],{"start":550},[29,136394,136395],{},"代码展示：",[51,136397,136398],{"className":128185,"code":136204,"language":128187,"meta":57,"style":57},[59,136399,136400,136404,136410,136420,136434,136456,136474,136492,136510,136514,136520,136530,136540],{"__ignoreMap":57},[79,136401,136402],{"class":81,"line":82},[79,136403,136211],{"class":2313},[79,136405,136406,136408],{"class":81,"line":167},[79,136407,136216],{"class":448},[79,136409,17604],{"class":228},[79,136411,136412,136414,136416,136418],{"class":81,"line":178},[79,136413,136223],{"class":96},[79,136415,53431],{"class":228},[79,136417,136228],{"class":89},[79,136419,3400],{"class":228},[79,136421,136422,136424,136426,136428,136430,136432],{"class":81,"line":545},[79,136423,136235],{"class":96},[79,136425,53431],{"class":228},[79,136427,63715],{"class":96},[79,136429,455],{"class":228},[79,136431,136244],{"class":89},[79,136433,4795],{"class":228},[79,136435,136436,136438,136440,136442,136444,136446,136448,136450,136452,136454],{"class":81,"line":550},[79,136437,136235],{"class":96},[79,136439,53431],{"class":228},[79,136441,63715],{"class":96},[79,136443,455],{"class":228},[79,136445,136259],{"class":89},[79,136447,15747],{"class":228},[79,136449,136264],{"class":96},[79,136451,455],{"class":228},[79,136453,136269],{"class":89},[79,136455,40042],{"class":228},[79,136457,136458,136460,136462,136464,136466,136468,136470,136472],{"class":81,"line":562},[79,136459,136276],{"class":96},[79,136461,455],{"class":228},[79,136463,136281],{"class":89},[79,136465,15747],{"class":228},[79,136467,136264],{"class":96},[79,136469,455],{"class":228},[79,136471,136290],{"class":89},[79,136473,40042],{"class":228},[79,136475,136476,136478,136480,136482,136484,136486,136488,136490],{"class":81,"line":568},[79,136477,136276],{"class":96},[79,136479,455],{"class":228},[79,136481,136301],{"class":89},[79,136483,15747],{"class":228},[79,136485,136264],{"class":96},[79,136487,455],{"class":228},[79,136489,136310],{"class":89},[79,136491,40042],{"class":228},[79,136493,136494,136496,136498,136500,136502,136504,136506,136508],{"class":81,"line":574},[79,136495,136276],{"class":96},[79,136497,455],{"class":228},[79,136499,136321],{"class":89},[79,136501,15747],{"class":228},[79,136503,136264],{"class":96},[79,136505,455],{"class":228},[79,136507,136330],{"class":89},[79,136509,4795],{"class":228},[79,136511,136512],{"class":81,"line":579},[79,136513,3671],{"class":228},[79,136515,136516,136518],{"class":81,"line":585},[79,136517,135942],{"class":85},[79,136519,17604],{"class":228},[79,136521,136522,136524,136526,136528],{"class":81,"line":591},[79,136523,136223],{"class":96},[79,136525,53431],{"class":228},[79,136527,136228],{"class":89},[79,136529,3400],{"class":228},[79,136531,136532,136534,136536,136538],{"class":81,"line":596},[79,136533,136357],{"class":96},[79,136535,53431],{"class":228},[79,136537,65829],{"class":96},[79,136539,3400],{"class":228},[79,136541,136542],{"class":81,"line":602},[79,136543,3671],{"class":228},[3569,136545],{"style":128041,"src":136546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,136548,136549],{},"更加细节展示：",[26,136551,136552],{},[29,136553,136554],{},"html 标签内添加小图标",[3569,136556],{"style":128041,"src":136557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[26,136559,136560],{"start":167},[29,136561,136562],{},"给标签定义字体",[51,136564,136565],{"className":128932,"code":132289,"language":128934,"meta":57,"style":57},[59,136566,136567,136571,136585,136589],{"__ignoreMap":57},[79,136568,136569],{"class":81,"line":82},[79,136570,132296],{"class":2313},[79,136572,136573,136575,136577,136579,136581,136583],{"class":81,"line":167},[79,136574,229],{"class":228},[79,136576,53605],{"class":232},[79,136578,55477],{"class":85},[79,136580,239],{"class":228},[79,136582,132309],{"class":89},[79,136584,53301],{"class":228},[79,136586,136587],{"class":81,"line":178},[79,136588,132316],{"class":228},[79,136590,136591,136593,136595],{"class":81,"line":545},[79,136592,53779],{"class":228},[79,136594,53605],{"class":232},[79,136596,53301],{"class":228},[19,136598,136599],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[3569,136601],{"style":128041,"src":136602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[339,136604,136606],{"id":136605},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,136608,136609],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,136611,136612,136613,136616],{},"把压缩包里面的 ",[2398,136614,136615],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,136618,136619],{},"打开网站，点下方：",[3569,136621],{"style":128041,"src":136622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[3569,136624],{"style":128041,"src":136625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[3569,136627],{"style":128041,"src":136628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,136630,136631],{},"点yes重新加载",[19,136633,136634],{},"然后重复之前的操作就可以实现了",[19,136636,136637],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[339,136639,136641],{"id":136640},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[3569,136643],{"style":128041,"src":136644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[2159,136646,136647],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":57,"searchDepth":167,"depth":167,"links":136649},[136650,136656,136661],{"id":135253,"depth":167,"text":135254,"children":136651},[136652,136653,136654,136655],{"id":135265,"depth":178,"text":135266},{"id":135294,"depth":178,"text":135295},{"id":135322,"depth":178,"text":135323},{"id":135380,"depth":178,"text":135381},{"id":135852,"depth":167,"text":135853,"children":136657},[136658,136659,136660],{"id":135856,"depth":178,"text":135857},{"id":135901,"depth":178,"text":135902},{"id":135917,"depth":178,"text":135918},{"id":136017,"depth":167,"text":136018,"children":136662},[136663,136664,136665,136666,136667,136668],{"id":136021,"depth":178,"text":136022},{"id":136055,"depth":178,"text":136056},{"id":136078,"depth":178,"text":136079},{"id":136125,"depth":178,"text":136126},{"id":136605,"depth":178,"text":136606},{"id":136640,"depth":178,"text":136641},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":135245,"description":25402},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":136675,"title":136676,"body":136677,"description":25402,"extension":2186,"meta":137904,"navigation":541,"path":137905,"seo":137906,"stem":137907,"__hash__":137908},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":136678,"toc":137885},[136679,136682,136686,136689,136703,136771,136801,136804,136808,136812,136914,136961,136965,136968,136971,137005,137008,137011,137014,137017,137020,137023,137026,137028,137031,137034,137037,137040,137043,137046,137049,137077,137080,137084,137087,137094,137097,137100,137126,137129,137133,137136,137139,137146,137150,137153,137155,137187,137190,137193,137205,137211,137214,137217,137220,137222,137226,137229,137232,137235,137280,137284,137286,137289,137296,137338,137341,137345,137350,137364,137368,137371,137374,137377,137380,137383,137417,137420,137423,137477,137480,137483,137486,137489,137541,137544,137547,137596,137600,137602,137605,137608,137611,137614,137617,137675,137678,137684,137687,137690,137722,137725,137729,137733,137736,137768,137772,137775,137819,137823,137826,137829,137832,137835,137838,137841,137844,137846,137849,137851,137854,137857,137860,137863,137868,137871,137873,137876,137879,137882],[10,136680,136676],{"id":136681},"_13-界面样式与布局技巧",[14,136683,136685],{"id":136684},"_131-css三角","13.1 css三角",[19,136687,136688],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[3246,136690,136691,136694,136697,136700],{},[29,136692,136693],{},"用css 边框可以模拟三角效果",[29,136695,136696],{},"宽度高度为0",[29,136698,136699],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[29,136701,136702],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[51,136704,136706],{"className":128185,"code":136705,"language":128187,"meta":57,"style":57},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[59,136707,136708,136713,136720,136730,136740,136756,136767],{"__ignoreMap":57},[79,136709,136710],{"class":81,"line":82},[79,136711,136712],{"class":2313},"\u002F* CSS 实现三角形 *\u002F\n",[79,136714,136715,136718],{"class":81,"line":167},[79,136716,136717],{"class":85},".triangle",[79,136719,17604],{"class":228},[79,136721,136722,136724,136726,136728],{"class":81,"line":178},[79,136723,72556],{"class":96},[79,136725,53431],{"class":228},[79,136727,759],{"class":96},[79,136729,3400],{"class":228},[79,136731,136732,136734,136736,136738],{"class":81,"line":545},[79,136733,72776],{"class":96},[79,136735,53431],{"class":228},[79,136737,759],{"class":96},[79,136739,3400],{"class":228},[79,136741,136742,136744,136746,136748,136750,136752,136754],{"class":81,"line":550},[79,136743,72884],{"class":96},[79,136745,53431],{"class":228},[79,136747,2689],{"class":96},[79,136749,53486],{"class":448},[79,136751,53515],{"class":96},[79,136753,65979],{"class":96},[79,136755,3400],{"class":228},[79,136757,136758,136761,136763,136765],{"class":81,"line":562},[79,136759,136760],{"class":96},"  border-bottom-color",[79,136762,53431],{"class":228},[79,136764,64357],{"class":96},[79,136766,3400],{"class":228},[79,136768,136769],{"class":81,"line":568},[79,136770,3671],{"class":228},[51,136772,136773],{"className":128185,"code":132342,"language":128187,"meta":57,"style":57},[59,136774,136775,136781,136797],{"__ignoreMap":57},[79,136776,136777,136779],{"class":81,"line":82},[79,136778,53605],{"class":232},[79,136780,17604],{"class":228},[79,136782,136783,136785,136787,136789,136791,136793,136795],{"class":81,"line":167},[79,136784,72884],{"class":96},[79,136786,53431],{"class":228},[79,136788,775],{"class":96},[79,136790,53486],{"class":448},[79,136792,53515],{"class":96},[79,136794,131577],{"class":96},[79,136796,3400],{"class":228},[79,136798,136799],{"class":81,"line":178},[79,136800,3671],{"class":228},[3569,136802],{"style":128041,"src":136803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,136805,136807],{"id":136806},"_132-css用户界面样式","13.2 css用户界面样式",[339,136809,136811],{"id":136810},"_1321-鼠标样式","13.2.1 鼠标样式",[51,136813,136815],{"className":128185,"code":136814,"language":128187,"meta":57,"style":57},"\u002F* 鼠标样式 *\u002F\ndiv { cursor: pointer; }   \u002F* 手型 *\u002F\ndiv { cursor: default; }   \u002F* 默认 *\u002F\ndiv { cursor: move; }      \u002F* 移动 *\u002F\ndiv { cursor: text; }      \u002F* 文本 *\u002F\ndiv { cursor: not-allowed; } \u002F* 禁止 *\u002F\n",[59,136816,136817,136822,136841,136859,136878,136895],{"__ignoreMap":57},[79,136818,136819],{"class":81,"line":82},[79,136820,136821],{"class":2313},"\u002F* 鼠标样式 *\u002F\n",[79,136823,136824,136826,136828,136831,136833,136835,136838],{"class":81,"line":167},[79,136825,53605],{"class":232},[79,136827,81795],{"class":228},[79,136829,136830],{"class":96},"cursor",[79,136832,53431],{"class":228},[79,136834,64018],{"class":96},[79,136836,136837],{"class":228},"; }   ",[79,136839,136840],{"class":2313},"\u002F* 手型 *\u002F\n",[79,136842,136843,136845,136847,136849,136851,136854,136856],{"class":81,"line":178},[79,136844,53605],{"class":232},[79,136846,81795],{"class":228},[79,136848,136830],{"class":96},[79,136850,53431],{"class":228},[79,136852,136853],{"class":96},"default",[79,136855,136837],{"class":228},[79,136857,136858],{"class":2313},"\u002F* 默认 *\u002F\n",[79,136860,136861,136863,136865,136867,136869,136872,136875],{"class":81,"line":545},[79,136862,53605],{"class":232},[79,136864,81795],{"class":228},[79,136866,136830],{"class":96},[79,136868,53431],{"class":228},[79,136870,136871],{"class":96},"move",[79,136873,136874],{"class":228},"; }      ",[79,136876,136877],{"class":2313},"\u002F* 移动 *\u002F\n",[79,136879,136880,136882,136884,136886,136888,136890,136892],{"class":81,"line":550},[79,136881,53605],{"class":232},[79,136883,81795],{"class":228},[79,136885,136830],{"class":96},[79,136887,53431],{"class":228},[79,136889,56],{"class":96},[79,136891,136874],{"class":228},[79,136893,136894],{"class":2313},"\u002F* 文本 *\u002F\n",[79,136896,136897,136899,136901,136903,136905,136908,136911],{"class":81,"line":562},[79,136898,53605],{"class":232},[79,136900,81795],{"class":228},[79,136902,136830],{"class":96},[79,136904,53431],{"class":228},[79,136906,136907],{"class":96},"not-allowed",[79,136909,136910],{"class":228},"; } ",[79,136912,136913],{"class":2313},"\u002F* 禁止 *\u002F\n",[347,136915,136916,136924],{},[350,136917,136918],{},[353,136919,136920,136922],{},[356,136921,128649],{"align":358},[356,136923,29505],{"align":358},[367,136925,136926,136933,136940,136947,136954],{},[353,136927,136928,136930],{},[372,136929,136853],{"align":358},[372,136931,136932],{"align":358},"小白 默认",[353,136934,136935,136937],{},[372,136936,64018],{"align":358},[372,136938,136939],{"align":358},"小手",[353,136941,136942,136944],{},[372,136943,136871],{"align":358},[372,136945,136946],{"align":358},"移动",[353,136948,136949,136951],{},[372,136950,56],{"align":358},[372,136952,136953],{"align":358},"文本",[353,136955,136956,136958],{},[372,136957,136907],{"align":358},[372,136959,136960],{"align":358},"禁止",[339,136962,136964],{"id":136963},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,136966,136967],{},"去除表单轮廓线",[19,136969,136970],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[51,136972,136973],{"className":128185,"code":131549,"language":128187,"meta":57,"style":57},[59,136974,136975,136979,136985,137001],{"__ignoreMap":57},[79,136976,136977],{"class":81,"line":82},[79,136978,131556],{"class":2313},[79,136980,136981,136983],{"class":81,"line":167},[79,136982,53605],{"class":232},[79,136984,17604],{"class":228},[79,136986,136987,136989,136991,136993,136995,136997,136999],{"class":81,"line":178},[79,136988,72884],{"class":96},[79,136990,53431],{"class":228},[79,136992,775],{"class":96},[79,136994,53486],{"class":448},[79,136996,53515],{"class":96},[79,136998,131577],{"class":96},[79,137000,3400],{"class":228},[79,137002,137003],{"class":81,"line":545},[79,137004,3671],{"class":228},[19,137006,137007],{},"文本域：",[3569,137009],{"style":128041,"src":137010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,137012,137013],{},"此时会有一个空白区域",[3569,137015],{"style":128041,"src":137016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,137018,137019],{},"写在同一行就不会出现这个问题",[3569,137021],{"style":128041,"src":137022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,137024,137025],{},"文本域是行内块元素，一定记住！！！",[19,137027,100218],{},[3569,137029],{"style":128041,"src":137030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,137032,137033],{},"文本域尽量放在一行",[19,137035,137036],{},"知识回顾：cols是列，rols是行",[3569,137038],{"style":128041,"src":137039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,137041,137042],{},"它可以进行拖动，显然这是我们不愿意看到的",[3569,137044],{"style":128041,"src":137045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,137047,137048],{},"使用resize进行解决",[51,137050,137052],{"className":128185,"code":137051,"language":128187,"meta":57,"style":57},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[59,137053,137054,137060,137073],{"__ignoreMap":57},[79,137055,137056,137058],{"class":81,"line":82},[79,137057,55812],{"class":232},[79,137059,17604],{"class":228},[79,137061,137062,137064,137066,137068,137070],{"class":81,"line":167},[79,137063,72786],{"class":96},[79,137065,53431],{"class":228},[79,137067,56726],{"class":96},[79,137069,132048],{"class":228},[79,137071,137072],{"class":2313},"\u002F* 取消表单轮廓线 *\u002F\n",[79,137074,137075],{"class":81,"line":178},[79,137076,3671],{"class":228},[19,137078,137079],{},"此时就无法通过右下方实现拖动了",[339,137081,137083],{"id":137082},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,137085,137086],{},"实现一个盒子中的文字和图片对齐",[19,137088,137089,137090,137093],{},"用于设置一个元素的 ",[2398,137091,137092],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,137095,137096],{},"图片和文字默认是基线对齐",[3569,137098],{"style":128041,"src":137099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[51,137101,137102],{"className":128185,"code":137051,"language":128187,"meta":57,"style":57},[59,137103,137104,137110,137122],{"__ignoreMap":57},[79,137105,137106,137108],{"class":81,"line":82},[79,137107,55812],{"class":232},[79,137109,17604],{"class":228},[79,137111,137112,137114,137116,137118,137120],{"class":81,"line":167},[79,137113,72786],{"class":96},[79,137115,53431],{"class":228},[79,137117,56726],{"class":96},[79,137119,132048],{"class":228},[79,137121,137072],{"class":2313},[79,137123,137124],{"class":81,"line":178},[79,137125,3671],{"class":228},[3569,137127],{"style":128041,"src":137128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[24023,137130,137132],{"id":137131},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,137134,137135],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[3569,137137],{"style":128041,"src":137138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,137140,137141,137142,137145],{},"此时可以给图片、表单这些行内块元素的 ",[2398,137143,137144],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[24023,137147,137149],{"id":137148},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,137151,137152],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,137154,16666],{},[51,137156,137158],{"className":128185,"code":137157,"language":128187,"meta":57,"style":57},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[59,137159,137160,137165,137171,137183],{"__ignoreMap":57},[79,137161,137162],{"class":81,"line":82},[79,137163,137164],{"class":2313},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[79,137166,137167,137169],{"class":81,"line":167},[79,137168,3569],{"class":232},[79,137170,17604],{"class":228},[79,137172,137173,137176,137178,137181],{"class":81,"line":178},[79,137174,137175],{"class":96},"  vertical-align",[79,137177,53431],{"class":228},[79,137179,137180],{"class":96},"middle",[79,137182,3400],{"class":228},[79,137184,137185],{"class":81,"line":545},[79,137186,3671],{"class":228},[3569,137188],{"style":128041,"src":137189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,137191,137192],{},"主要解决方法有两种：",[26,137194,137195],{},[29,137196,137197,137200,137201,137204],{},[2398,137198,137199],{},"给图片"," 添加 ",[2398,137202,137203],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,137206,137207,137208],{},"2.把图片转换为块级元素 ",[2398,137209,137210],{},"display: block",[19,137212,137213],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,137215,137216],{},"img {",[19,137218,137219],{},"vertical-align:middle;",[19,137221,3185],{},[339,137223,137225],{"id":137224},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,137227,137228],{},"效果：",[3569,137230],{"style":128041,"src":137231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,137233,137234],{},"单行文本溢出显示省略号--必须满足三个条件：",[51,137236,137238],{"className":128185,"code":137237,"language":128187,"meta":57,"style":57},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[59,137239,137240,137245,137251,137261,137266,137276],{"__ignoreMap":57},[79,137241,137242],{"class":81,"line":82},[79,137243,137244],{"class":2313},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[79,137246,137247,137249],{"class":81,"line":167},[79,137248,3569],{"class":232},[79,137250,17604],{"class":228},[79,137252,137253,137255,137257,137259],{"class":81,"line":178},[79,137254,137175],{"class":96},[79,137256,53431],{"class":228},[79,137258,137180],{"class":96},[79,137260,3400],{"class":228},[79,137262,137263],{"class":81,"line":545},[79,137264,137265],{"class":2313},"  \u002F* 或 *\u002F\n",[79,137267,137268,137270,137272,137274],{"class":81,"line":550},[79,137269,129801],{"class":96},[79,137271,53431],{"class":228},[79,137273,62858],{"class":96},[79,137275,3400],{"class":228},[79,137277,137278],{"class":81,"line":562},[79,137279,3671],{"class":228},[339,137281,137283],{"id":137282},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,137285,137228],{},[3569,137287],{"style":128041,"src":137288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,137290,137291,137292,137295],{},"多行文本溢出显示省略号， ",[2398,137293,137294],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[51,137297,137298],{"className":128185,"code":137237,"language":128187,"meta":57,"style":57},[59,137299,137300,137304,137310,137320,137324,137334],{"__ignoreMap":57},[79,137301,137302],{"class":81,"line":82},[79,137303,137244],{"class":2313},[79,137305,137306,137308],{"class":81,"line":167},[79,137307,3569],{"class":232},[79,137309,17604],{"class":228},[79,137311,137312,137314,137316,137318],{"class":81,"line":178},[79,137313,137175],{"class":96},[79,137315,53431],{"class":228},[79,137317,137180],{"class":96},[79,137319,3400],{"class":228},[79,137321,137322],{"class":81,"line":545},[79,137323,137265],{"class":2313},[79,137325,137326,137328,137330,137332],{"class":81,"line":550},[79,137327,129801],{"class":96},[79,137329,53431],{"class":228},[79,137331,62858],{"class":96},[79,137333,3400],{"class":228},[79,137335,137336],{"class":81,"line":562},[79,137337,3671],{"class":228},[19,137339,137340],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,137342,137344],{"id":137343},"_133-常见布局技巧","13.3 常见布局技巧",[19,137346,137347],{},[2398,137348,137349],{},"巧妙利用一个技术更快更好的布局：",[26,137351,137352,137355,137358,137361],{},[29,137353,137354],{},"margin负值的运用",[29,137356,137357],{},"文字围绕浮动元素",[29,137359,137360],{},"行内块的巧妙运用",[29,137362,137363],{},"CSS三角强化",[339,137365,137367],{"id":137366},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,137369,137370],{},"应用场景：",[3569,137372],{"style":128041,"src":137373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[3569,137375],{"style":128041,"src":137376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,137378,137379],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,137381,137382],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[51,137384,137385],{"className":128185,"code":131549,"language":128187,"meta":57,"style":57},[59,137386,137387,137391,137397,137413],{"__ignoreMap":57},[79,137388,137389],{"class":81,"line":82},[79,137390,131556],{"class":2313},[79,137392,137393,137395],{"class":81,"line":167},[79,137394,53605],{"class":232},[79,137396,17604],{"class":228},[79,137398,137399,137401,137403,137405,137407,137409,137411],{"class":81,"line":178},[79,137400,72884],{"class":96},[79,137402,53431],{"class":228},[79,137404,775],{"class":96},[79,137406,53486],{"class":448},[79,137408,53515],{"class":96},[79,137410,131577],{"class":96},[79,137412,3400],{"class":228},[79,137414,137415],{"class":81,"line":545},[79,137416,3671],{"class":228},[3569,137418],{"style":128041,"src":137419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,137421,137422],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[51,137424,137426],{"className":128185,"code":137425,"language":128187,"meta":57,"style":57},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[59,137427,137428,137433,137439,137449,137461,137473],{"__ignoreMap":57},[79,137429,137430],{"class":81,"line":82},[79,137431,137432],{"class":2313},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[79,137434,137435,137437],{"class":81,"line":167},[79,137436,132033],{"class":85},[79,137438,17604],{"class":228},[79,137440,137441,137443,137445,137447],{"class":81,"line":178},[79,137442,133991],{"class":96},[79,137444,53431],{"class":228},[79,137446,56753],{"class":96},[79,137448,3400],{"class":228},[79,137450,137451,137453,137455,137457,137459],{"class":81,"line":545},[79,137452,134005],{"class":96},[79,137454,53431],{"class":228},[79,137456,2689],{"class":96},[79,137458,53486],{"class":448},[79,137460,3400],{"class":228},[79,137462,137463,137465,137467,137469,137471],{"class":81,"line":550},[79,137464,134022],{"class":96},[79,137466,53431],{"class":228},[79,137468,2940],{"class":96},[79,137470,53486],{"class":448},[79,137472,3400],{"class":228},[79,137474,137475],{"class":81,"line":562},[79,137476,3671],{"class":228},[19,137478,137479],{},"加上上述代码会发现：",[3569,137481],{"style":128041,"src":137482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,137484,137485],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,137487,137488],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[51,137490,137491],{"className":128185,"code":137425,"language":128187,"meta":57,"style":57},[59,137492,137493,137497,137503,137513,137525,137537],{"__ignoreMap":57},[79,137494,137495],{"class":81,"line":82},[79,137496,137432],{"class":2313},[79,137498,137499,137501],{"class":81,"line":167},[79,137500,132033],{"class":85},[79,137502,17604],{"class":228},[79,137504,137505,137507,137509,137511],{"class":81,"line":178},[79,137506,133991],{"class":96},[79,137508,53431],{"class":228},[79,137510,56753],{"class":96},[79,137512,3400],{"class":228},[79,137514,137515,137517,137519,137521,137523],{"class":81,"line":545},[79,137516,134005],{"class":96},[79,137518,53431],{"class":228},[79,137520,2689],{"class":96},[79,137522,53486],{"class":448},[79,137524,3400],{"class":228},[79,137526,137527,137529,137531,137533,137535],{"class":81,"line":550},[79,137528,134022],{"class":96},[79,137530,53431],{"class":228},[79,137532,2940],{"class":96},[79,137534,53486],{"class":448},[79,137536,3400],{"class":228},[79,137538,137539],{"class":81,"line":562},[79,137540,3671],{"class":228},[19,137542,137543],{},"解决方式2：",[19,137545,137546],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[51,137548,137550],{"className":128185,"code":137549,"language":128187,"meta":57,"style":57},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[59,137551,137552,137558,137568,137580,137592],{"__ignoreMap":57},[79,137553,137554,137556],{"class":81,"line":82},[79,137555,53605],{"class":232},[79,137557,17604],{"class":228},[79,137559,137560,137562,137564,137566],{"class":81,"line":167},[79,137561,133991],{"class":96},[79,137563,53431],{"class":228},[79,137565,56753],{"class":96},[79,137567,3400],{"class":228},[79,137569,137570,137572,137574,137576,137578],{"class":81,"line":178},[79,137571,134005],{"class":96},[79,137573,53431],{"class":228},[79,137575,2689],{"class":96},[79,137577,53486],{"class":448},[79,137579,3400],{"class":228},[79,137581,137582,137584,137586,137588,137590],{"class":81,"line":545},[79,137583,134022],{"class":96},[79,137585,53431],{"class":228},[79,137587,2940],{"class":96},[79,137589,53486],{"class":448},[79,137591,3400],{"class":228},[79,137593,137594],{"class":81,"line":550},[79,137595,3671],{"class":228},[339,137597,137599],{"id":137598},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,137601,137370],{},[3569,137603],{"style":128041,"src":137604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,137606,137607],{},"实现结构图：",[3569,137609],{"style":128041,"src":137610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,137612,137613],{},"巧妙运用浮动元素不会压住文字的特性",[19,137615,137616],{},"代码显示：",[51,137618,137620],{"className":128185,"code":137619,"language":128187,"meta":57,"style":57},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[59,137621,137622,137628,137638,137642,137647,137651,137657,137671],{"__ignoreMap":57},[79,137623,137624,137626],{"class":81,"line":82},[79,137625,132033],{"class":85},[79,137627,17604],{"class":228},[79,137629,137630,137632,137634,137636],{"class":81,"line":167},[79,137631,132665],{"class":96},[79,137633,53431],{"class":228},[79,137635,358],{"class":96},[79,137637,3400],{"class":228},[79,137639,137640],{"class":81,"line":178},[79,137641,3671],{"class":228},[79,137643,137644],{"class":81,"line":545},[79,137645,137646],{"class":228},"```Css\n",[79,137648,137649],{"class":81,"line":550},[79,137650,132028],{"class":2313},[79,137652,137653,137655],{"class":81,"line":562},[79,137654,132033],{"class":85},[79,137656,17604],{"class":228},[79,137658,137659,137661,137663,137665,137667,137669],{"class":81,"line":568},[79,137660,72458],{"class":96},[79,137662,53431],{"class":228},[79,137664,759],{"class":96},[79,137666,53550],{"class":96},[79,137668,132048],{"class":228},[79,137670,132051],{"class":2313},[79,137672,137673],{"class":81,"line":574},[79,137674,3671],{"class":228},[19,137676,137677],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[51,137679,137682],{"className":137680,"code":137681,"language":56},[54],"\n对行内元素转换为行内块元素之后，就可以设置宽和高了\n\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-107.png\">\n\n此时要实现整体居中可以使用text-align:center\n\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[59,137683,137681],{"__ignoreMap":57},[3569,137685],{"style":128041,"src":137686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,137688,137689],{},"最终展示结果：",[51,137691,137692],{"className":128185,"code":132021,"language":128187,"meta":57,"style":57},[59,137693,137694,137698,137704,137718],{"__ignoreMap":57},[79,137695,137696],{"class":81,"line":82},[79,137697,132028],{"class":2313},[79,137699,137700,137702],{"class":81,"line":167},[79,137701,132033],{"class":85},[79,137703,17604],{"class":228},[79,137705,137706,137708,137710,137712,137714,137716],{"class":81,"line":178},[79,137707,72458],{"class":96},[79,137709,53431],{"class":228},[79,137711,759],{"class":96},[79,137713,53550],{"class":96},[79,137715,132048],{"class":228},[79,137717,132051],{"class":2313},[79,137719,137720],{"class":81,"line":545},[79,137721,3671],{"class":228},[3569,137723],{"style":128041,"src":137724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,137726,137728],{"id":137727},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[339,137730,137732],{"id":137731},"_1341-原理","13.4.1 原理",[3569,137734],{"style":128041,"src":137735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[51,137737,137738],{"className":128185,"code":132021,"language":128187,"meta":57,"style":57},[59,137739,137740,137744,137750,137764],{"__ignoreMap":57},[79,137741,137742],{"class":81,"line":82},[79,137743,132028],{"class":2313},[79,137745,137746,137748],{"class":81,"line":167},[79,137747,132033],{"class":85},[79,137749,17604],{"class":228},[79,137751,137752,137754,137756,137758,137760,137762],{"class":81,"line":178},[79,137753,72458],{"class":96},[79,137755,53431],{"class":228},[79,137757,759],{"class":96},[79,137759,53550],{"class":96},[79,137761,132048],{"class":228},[79,137763,132051],{"class":2313},[79,137765,137766],{"class":81,"line":545},[79,137767,3671],{"class":228},[339,137769,137771],{"id":137770},"_1342-实例","13.4.2 实例",[3569,137773],{"style":128041,"src":137774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[51,137776,137777],{"className":128185,"code":132651,"language":128187,"meta":57,"style":57},[59,137778,137779,137785,137795,137799,137805,137815],{"__ignoreMap":57},[79,137780,137781,137783],{"class":81,"line":82},[79,137782,132658],{"class":85},[79,137784,17604],{"class":228},[79,137786,137787,137789,137791,137793],{"class":81,"line":167},[79,137788,132665],{"class":96},[79,137790,53431],{"class":228},[79,137792,358],{"class":96},[79,137794,3400],{"class":228},[79,137796,137797],{"class":81,"line":178},[79,137798,3671],{"class":228},[79,137800,137801,137803],{"class":81,"line":545},[79,137802,132680],{"class":85},[79,137804,17604],{"class":228},[79,137806,137807,137809,137811,137813],{"class":81,"line":550},[79,137808,132665],{"class":96},[79,137810,53431],{"class":228},[79,137812,74510],{"class":96},[79,137814,3400],{"class":228},[79,137816,137817],{"class":81,"line":562},[79,137818,3671],{"class":228},[14,137820,137822],{"id":137821},"_135-css的初始化","13.5 css的初始化",[19,137824,137825],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,137827,137828],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,137830,137831],{},"每个网页都必须首先进行 CSS初始化。",[19,137833,137834],{},"这里我们以 京东CSS初始化代码为例。",[19,137836,137837],{},"在网页右键查看网页源代码",[19,137839,137840],{},"找到css的link引入语句",[19,137842,137843],{},"然后ctrl+f 输入body",[19,137845,79214],{},[3569,137847],{"style":128041,"src":137848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,137850,79237],{},[3569,137852],{"style":128041,"src":137853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,137855,137856],{},"③打开了网页上传压缩的代码",[3569,137858],{"style":128041,"src":137859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,137861,137862],{},"④从body前可以查看这个网页的初始化代码",[19,137864,137865],{},[2398,137866,137867],{},"Unicode编码字体：",[19,137869,137870],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,137872,85194],{},[19,137874,137875],{},"黑体 \\9ED1\\4F53",[19,137877,137878],{},"宋体 \\5B8B\\4F53",[19,137880,137881],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[2159,137883,137884],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":57,"searchDepth":167,"depth":167,"links":137886},[137887,137888,137895,137899,137903],{"id":136684,"depth":167,"text":136685},{"id":136806,"depth":167,"text":136807,"children":137889},[137890,137891,137892,137893,137894],{"id":136810,"depth":178,"text":136811},{"id":136963,"depth":178,"text":136964},{"id":137082,"depth":178,"text":137083},{"id":137224,"depth":178,"text":137225},{"id":137282,"depth":178,"text":137283},{"id":137343,"depth":167,"text":137344,"children":137896},[137897,137898],{"id":137366,"depth":178,"text":137367},{"id":137598,"depth":178,"text":137599},{"id":137727,"depth":167,"text":137728,"children":137900},[137901,137902],{"id":137731,"depth":178,"text":137732},{"id":137770,"depth":178,"text":137771},{"id":137821,"depth":167,"text":137822},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":136676,"description":25402},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":137910,"title":137911,"body":137912,"description":25402,"extension":2186,"meta":139598,"navigation":541,"path":139599,"seo":139600,"stem":139601,"__hash__":139602},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":137913,"toc":139587},[137914,137917,137921,137925,137928,137935,137938,137941,137979,137982,137984,137998,138002,138011,138015,138020,138023,138026,138029,138064,138069,138072,138102,138105,138110,138113,138116,138146,138149,138203,138206,138210,138215,138227,138230,138234,138264,138267,138272,138275,138305,138308,138312,138329,138333,138337,138340,138373,138376,138380,138383,138386,138389,138392,138395,138506,138509,138512,138515,138617,138620,138624,138628,138632,138635,138675,138678,138680,138696,138700,138703,138708,138789,138792,138795,138921,138926,138929,138937,138940,138945,139030,139033,139037,139040,139043,139047,139067,139072,139156,139159,139164,139167,139170,139248,139251,139254,139257,139260,139263,139268,139271,139274,139346,139349,139354,139357,139454,139457,139463,139466,139469,139472,139475,139478,139481,139484,139487,139491,139496,139499,139532,139537,139540,139581,139584],[10,137915,137911],{"id":137916},"_14-html5与css3新特性",[14,137918,137920],{"id":137919},"_141-html5的新特性","14.1 HTML5的新特性",[339,137922,137924],{"id":137923},"_1411-基本标签","14.1.1 基本标签",[19,137926,137927],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,137929,137930,137931,137934],{},"这些新特性都有兼容性问题，基本是 ",[2398,137932,137933],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,137936,137937],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,137939,137940],{},"现在使用的是新特性：",[3246,137942,137943,137949,137955,137961,137967,137973],{},[29,137944,137945,137948],{},[59,137946,137947],{},"\u003Cheader>"," 头部标签",[29,137950,137951,137954],{},[59,137952,137953],{},"\u003Cnav>"," 导航标签",[29,137956,137957,137960],{},[59,137958,137959],{},"\u003Carticle>"," 内容标签",[29,137962,137963,137966],{},[59,137964,137965],{},"\u003Csection>"," 定义文档某个区域",[29,137968,137969,137972],{},[59,137970,137971],{},"\u003Caside>"," 侧边栏标签",[29,137974,137975,137978],{},[59,137976,137977],{},"\u003Cfooter>"," 尾部标签",[3569,137980],{"style":128041,"src":137981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,137983,2287],{},[3246,137985,137986,137989,137992,137995],{},[29,137987,137988],{},"这种语义化标准主要是针对搜索引擎的",[29,137990,137991],{},"这些标签页面中可以经常使用",[29,137993,137994],{},"在IE9中，需要把这些元素转换为块级元素",[29,137996,137997],{},"移动端更喜欢使用这些标签",[339,137999,138001],{"id":138000},"_1412-多媒体标签","14.1.2 多媒体标签",[19,138003,138004,138005,138007,138008,138010],{},"音频 ",[2398,138006,30190],{}," 和视频 ",[2398,138009,30199],{}," 两个标签",[24023,138012,138014],{"id":138013},"_14121-视频标签-video","14.1.2.1 视频标签- video",[26,138016,138017],{},[29,138018,138019],{},"支持格式：",[3569,138021],{"style":128041,"src":138022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,138024,138025],{},"尽量使用MP4，兼容性好",[19,138027,138028],{},"用MP4就可以",[51,138030,138032],{"className":128932,"code":138031,"language":128934,"meta":57,"style":57},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[59,138033,138034],{"__ignoreMap":57},[79,138035,138036,138038,138040,138042,138044,138047,138049,138052,138055,138058,138060,138062],{"class":81,"line":82},[79,138037,229],{"class":228},[79,138039,30199],{"class":232},[79,138041,57228],{"class":85},[79,138043,239],{"class":228},[79,138045,138046],{"class":89},"\"movie.mp4\"",[79,138048,94410],{"class":85},[79,138050,138051],{"class":85}," autoplay",[79,138053,138054],{"class":85}," muted",[79,138056,138057],{"class":85}," loop",[79,138059,57303],{"class":228},[79,138061,30199],{"class":232},[79,138063,53301],{"class":228},[26,138065,138066],{"start":167},[29,138067,138068],{},"兼容写法",[19,138070,138071],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[51,138073,138074],{"className":128932,"code":138031,"language":128934,"meta":57,"style":57},[59,138075,138076],{"__ignoreMap":57},[79,138077,138078,138080,138082,138084,138086,138088,138090,138092,138094,138096,138098,138100],{"class":81,"line":82},[79,138079,229],{"class":228},[79,138081,30199],{"class":232},[79,138083,57228],{"class":85},[79,138085,239],{"class":228},[79,138087,138046],{"class":89},[79,138089,94410],{"class":85},[79,138091,138051],{"class":85},[79,138093,138054],{"class":85},[79,138095,138057],{"class":85},[79,138097,57303],{"class":228},[79,138099,30199],{"class":232},[79,138101,53301],{"class":228},[19,138103,138104],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[26,138106,138107],{"start":178},[29,138108,138109],{},"video常用属性",[3569,138111],{"style":128041,"src":138112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,138114,138115],{},"poster属性后面是跟的等待加载图片的地址",[51,138117,138118],{"className":128932,"code":135687,"language":128934,"meta":57,"style":57},[59,138119,138120],{"__ignoreMap":57},[79,138121,138122,138124,138126,138128,138130,138132,138134,138136,138138,138140,138142,138144],{"class":81,"line":82},[79,138123,229],{"class":228},[79,138125,3569],{"class":232},[79,138127,57228],{"class":85},[79,138129,239],{"class":228},[79,138131,135702],{"class":89},[79,138133,57236],{"class":85},[79,138135,239],{"class":228},[79,138137,135709],{"class":89},[79,138139,135712],{"class":85},[79,138141,239],{"class":228},[79,138143,135717],{"class":89},[79,138145,53301],{"class":228},[19,138147,138148],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[51,138150,138152],{"className":128185,"code":138151,"language":128187,"meta":57,"style":57},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[59,138153,138154,138159,138165,138189,138194,138199],{"__ignoreMap":57},[79,138155,138156],{"class":81,"line":82},[79,138157,138158],{"class":2313},"\u002F* 2D 位移 *\u002F\n",[79,138160,138161,138163],{"class":81,"line":167},[79,138162,53605],{"class":232},[79,138164,17604],{"class":228},[79,138166,138167,138170,138172,138175,138177,138179,138181,138183,138185,138187],{"class":81,"line":178},[79,138168,138169],{"class":96},"  transform",[79,138171,53431],{"class":228},[79,138173,138174],{"class":96},"translate",[79,138176,455],{"class":228},[79,138178,2555],{"class":96},[79,138180,53486],{"class":448},[79,138182,1020],{"class":228},[79,138184,2896],{"class":96},[79,138186,53486],{"class":448},[79,138188,4795],{"class":228},[79,138190,138191],{"class":81,"line":545},[79,138192,138193],{"class":2313},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[79,138195,138196],{"class":81,"line":550},[79,138197,138198],{"class":2313},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[79,138200,138201],{"class":81,"line":562},[79,138202,3671],{"class":228},[19,138204,138205],{},"muted:自动静音属性",[24023,138207,138209],{"id":138208},"_14122-音频标签audio","14.1.2.2 音频标签audio",[26,138211,138212],{},[29,138213,138214],{},"基本使用",[19,138216,138217,138218,138223,138224],{},"当前 ",[2398,138219,138220],{},[59,138221,138222],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[2398,138225,138226],{},"mp3格式",[3569,138228],{"style":128041,"src":138229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[26,138231,138232],{"start":167},[29,138233,138068],{},[51,138235,138236],{"className":128932,"code":138031,"language":128934,"meta":57,"style":57},[59,138237,138238],{"__ignoreMap":57},[79,138239,138240,138242,138244,138246,138248,138250,138252,138254,138256,138258,138260,138262],{"class":81,"line":82},[79,138241,229],{"class":228},[79,138243,30199],{"class":232},[79,138245,57228],{"class":85},[79,138247,239],{"class":228},[79,138249,138046],{"class":89},[79,138251,94410],{"class":85},[79,138253,138051],{"class":85},[79,138255,138054],{"class":85},[79,138257,138057],{"class":85},[79,138259,57303],{"class":228},[79,138261,30199],{"class":232},[79,138263,53301],{"class":228},[19,138265,138266],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[26,138268,138269],{"start":178},[29,138270,138271],{},"常用属性",[3569,138273],{"style":128041,"src":138274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[51,138276,138277],{"className":128932,"code":138031,"language":128934,"meta":57,"style":57},[59,138278,138279],{"__ignoreMap":57},[79,138280,138281,138283,138285,138287,138289,138291,138293,138295,138297,138299,138301,138303],{"class":81,"line":82},[79,138282,229],{"class":228},[79,138284,30199],{"class":232},[79,138286,57228],{"class":85},[79,138288,239],{"class":228},[79,138290,138046],{"class":89},[79,138292,94410],{"class":85},[79,138294,138051],{"class":85},[79,138296,138054],{"class":85},[79,138298,138057],{"class":85},[79,138300,57303],{"class":228},[79,138302,30199],{"class":232},[79,138304,53301],{"class":228},[19,138306,138307],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[24023,138309,138311],{"id":138310},"_14123-总结","14.1.2.3 总结",[3246,138313,138314,138317,138320,138323,138326],{},[29,138315,138316],{},"音频标签和视频标签使用方式基本一致",[29,138318,138319],{},"浏览器支持情况不同",[29,138321,138322],{},"谷歌浏览器把音频和视频自动播放禁止了",[29,138324,138325],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[29,138327,138328],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[339,138330,138332],{"id":138331},"_1413-表单元素","14.1.3 表单元素",[24023,138334,138336],{"id":138335},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[3569,138338],{"style":128041,"src":138339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[51,138341,138343],{"className":128932,"code":138342,"language":128934,"meta":57,"style":57},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[59,138344,138345],{"__ignoreMap":57},[79,138346,138347,138349,138351,138353,138355,138357,138359,138361,138364,138366,138368,138371],{"class":81,"line":82},[79,138348,229],{"class":228},[79,138350,55812],{"class":232},[79,138352,245],{"class":85},[79,138354,239],{"class":228},[79,138356,64687],{"class":89},[79,138358,236],{"class":85},[79,138360,239],{"class":228},[79,138362,138363],{"class":89},"\"username\"",[79,138365,63009],{"class":85},[79,138367,239],{"class":228},[79,138369,138370],{"class":89},"\"请输入用户名\"",[79,138372,53301],{"class":228},[3569,138374],{"style":128041,"src":138375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[24023,138377,138379],{"id":138378},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[3569,138381],{"style":128041,"src":138382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,138384,138385],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,138387,138388],{},"快捷操作：",[3569,138390],{"style":128041,"src":138391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,138393,138394],{},"例子1：",[51,138396,138398],{"className":128932,"code":138397,"language":128934,"meta":57,"style":57},"\u003Cform action=\"\u002Fsubmit\" method=\"post\">\n  \u003Cinput type=\"text\" name=\"username\" placeholder=\"用户名\">\n  \u003Cinput type=\"password\" name=\"pwd\" placeholder=\"密码\">\n  \u003Cbutton type=\"submit\">提交\u003C\u002Fbutton>\n\u003C\u002Fform>\n",[59,138399,138400,138423,138450,138479,138498],{"__ignoreMap":57},[79,138401,138402,138404,138406,138408,138410,138413,138416,138418,138421],{"class":81,"line":82},[79,138403,229],{"class":228},[79,138405,68613],{"class":232},[79,138407,68616],{"class":85},[79,138409,239],{"class":228},[79,138411,138412],{"class":89},"\"\u002Fsubmit\"",[79,138414,138415],{"class":85}," method",[79,138417,239],{"class":228},[79,138419,138420],{"class":89},"\"post\"",[79,138422,53301],{"class":228},[79,138424,138425,138427,138429,138431,138433,138435,138437,138439,138441,138443,138445,138448],{"class":81,"line":167},[79,138426,54138],{"class":228},[79,138428,55812],{"class":232},[79,138430,245],{"class":85},[79,138432,239],{"class":228},[79,138434,64687],{"class":89},[79,138436,236],{"class":85},[79,138438,239],{"class":228},[79,138440,138363],{"class":89},[79,138442,63009],{"class":85},[79,138444,239],{"class":228},[79,138446,138447],{"class":89},"\"用户名\"",[79,138449,53301],{"class":228},[79,138451,138452,138454,138456,138458,138460,138463,138465,138467,138470,138472,138474,138477],{"class":81,"line":178},[79,138453,54138],{"class":228},[79,138455,55812],{"class":232},[79,138457,245],{"class":85},[79,138459,239],{"class":228},[79,138461,138462],{"class":89},"\"password\"",[79,138464,236],{"class":85},[79,138466,239],{"class":228},[79,138468,138469],{"class":89},"\"pwd\"",[79,138471,63009],{"class":85},[79,138473,239],{"class":228},[79,138475,138476],{"class":89},"\"密码\"",[79,138478,53301],{"class":228},[79,138480,138481,138483,138485,138487,138489,138491,138494,138496],{"class":81,"line":545},[79,138482,54138],{"class":228},[79,138484,55877],{"class":232},[79,138486,245],{"class":85},[79,138488,239],{"class":228},[79,138490,68636],{"class":89},[79,138492,138493],{"class":228},">提交\u003C\u002F",[79,138495,55877],{"class":232},[79,138497,53301],{"class":228},[79,138499,138500,138502,138504],{"class":81,"line":550},[79,138501,53779],{"class":228},[79,138503,68613],{"class":232},[79,138505,53301],{"class":228},[3569,138507],{"style":128041,"src":138508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,138510,138511],{},"value是表单域的内容",[19,138513,138514],{},"例子2：",[51,138516,138517],{"className":128932,"code":138397,"language":128934,"meta":57,"style":57},[59,138518,138519,138539,138565,138591,138609],{"__ignoreMap":57},[79,138520,138521,138523,138525,138527,138529,138531,138533,138535,138537],{"class":81,"line":82},[79,138522,229],{"class":228},[79,138524,68613],{"class":232},[79,138526,68616],{"class":85},[79,138528,239],{"class":228},[79,138530,138412],{"class":89},[79,138532,138415],{"class":85},[79,138534,239],{"class":228},[79,138536,138420],{"class":89},[79,138538,53301],{"class":228},[79,138540,138541,138543,138545,138547,138549,138551,138553,138555,138557,138559,138561,138563],{"class":81,"line":167},[79,138542,54138],{"class":228},[79,138544,55812],{"class":232},[79,138546,245],{"class":85},[79,138548,239],{"class":228},[79,138550,64687],{"class":89},[79,138552,236],{"class":85},[79,138554,239],{"class":228},[79,138556,138363],{"class":89},[79,138558,63009],{"class":85},[79,138560,239],{"class":228},[79,138562,138447],{"class":89},[79,138564,53301],{"class":228},[79,138566,138567,138569,138571,138573,138575,138577,138579,138581,138583,138585,138587,138589],{"class":81,"line":178},[79,138568,54138],{"class":228},[79,138570,55812],{"class":232},[79,138572,245],{"class":85},[79,138574,239],{"class":228},[79,138576,138462],{"class":89},[79,138578,236],{"class":85},[79,138580,239],{"class":228},[79,138582,138469],{"class":89},[79,138584,63009],{"class":85},[79,138586,239],{"class":228},[79,138588,138476],{"class":89},[79,138590,53301],{"class":228},[79,138592,138593,138595,138597,138599,138601,138603,138605,138607],{"class":81,"line":545},[79,138594,54138],{"class":228},[79,138596,55877],{"class":232},[79,138598,245],{"class":85},[79,138600,239],{"class":228},[79,138602,68636],{"class":89},[79,138604,138493],{"class":228},[79,138606,55877],{"class":232},[79,138608,53301],{"class":228},[79,138610,138611,138613,138615],{"class":81,"line":550},[79,138612,53779],{"class":228},[79,138614,68613],{"class":232},[79,138616,53301],{"class":228},[3569,138618],{"style":128041,"src":138619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,138621,138623],{"id":138622},"_142-css新特性","14.2 CSS新特性",[339,138625,138627],{"id":138626},"_1421-新增选择器","14.2.1 新增选择器",[24023,138629,138631],{"id":138630},"_14211-属性选择器","14.2.1.1 属性选择器",[3569,138633],{"style":128041,"src":138634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[51,138636,138638],{"className":128185,"code":138637,"language":128187,"meta":57,"style":57},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[59,138639,138640,138655,138671],{"__ignoreMap":57},[79,138641,138642,138644,138646,138648,138650,138652],{"class":81,"line":82},[79,138643,55812],{"class":232},[79,138645,3130],{"class":228},[79,138647,105035],{"class":85},[79,138649,239],{"class":448},[79,138651,64687],{"class":89},[79,138653,138654],{"class":228},"] {\n",[79,138656,138657,138659,138661,138663,138665,138667,138669],{"class":81,"line":167},[79,138658,72884],{"class":96},[79,138660,53431],{"class":228},[79,138662,775],{"class":96},[79,138664,53486],{"class":448},[79,138666,53515],{"class":96},[79,138668,131765],{"class":96},[79,138670,3400],{"class":228},[79,138672,138673],{"class":81,"line":178},[79,138674,3671],{"class":228},[3569,138676],{"style":128041,"src":138677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,138679,2287],{},[3246,138681,138682,138685,138688,138691],{},[29,138683,138684],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[29,138686,138687],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[29,138689,138690],{},"属性选择器也可以选择出来自定义的属性",[29,138692,138693,138695],{},[2398,138694,11080],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[24023,138697,138699],{"id":138698},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[3569,138701],{"style":128041,"src":138702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[26,138704,138705],{},[29,138706,138707],{},"fist-child",[51,138709,138711],{"className":128185,"code":138710,"language":128187,"meta":57,"style":57},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[59,138712,138713,138718,138733,138753,138771],{"__ignoreMap":57},[79,138714,138715],{"class":81,"line":82},[79,138716,138717],{"class":2313},"\u002F* 属性选择器 *\u002F\n",[79,138719,138720,138722,138724,138726,138728,138730],{"class":81,"line":167},[79,138721,55812],{"class":232},[79,138723,3130],{"class":228},[79,138725,105035],{"class":85},[79,138727,239],{"class":448},[79,138729,64687],{"class":89},[79,138731,138732],{"class":228},"] { }\n",[79,138734,138735,138737,138739,138741,138744,138747,138750],{"class":81,"line":178},[79,138736,55812],{"class":232},[79,138738,3130],{"class":228},[79,138740,16727],{"class":85},[79,138742,138743],{"class":448},"^=",[79,138745,138746],{"class":89},"\"icon\"",[79,138748,138749],{"class":228},"] { }  ",[79,138751,138752],{"class":2313},"\u002F* 以 icon 开头 *\u002F\n",[79,138754,138755,138757,138759,138761,138764,138766,138768],{"class":81,"line":545},[79,138756,55812],{"class":232},[79,138758,3130],{"class":228},[79,138760,16727],{"class":85},[79,138762,138763],{"class":448},"$=",[79,138765,138746],{"class":89},[79,138767,138749],{"class":228},[79,138769,138770],{"class":2313},"\u002F* 以 icon 结尾 *\u002F\n",[79,138772,138773,138775,138777,138779,138782,138784,138786],{"class":81,"line":550},[79,138774,55812],{"class":232},[79,138776,3130],{"class":228},[79,138778,16727],{"class":85},[79,138780,138781],{"class":448},"*=",[79,138783,138746],{"class":89},[79,138785,138749],{"class":228},[79,138787,138788],{"class":2313},"\u002F* 包含 icon *\u002F\n",[19,138790,138791],{},"ul的第一个儿子文本为红色",[19,138793,138794],{},"一定要在冒号前加空格，不然就是选中所有的了",[51,138796,138798],{"className":128185,"code":138797,"language":128187,"meta":57,"style":57},".center {\n  color: red;\n}\n```Css\n\u002F* 结构伪类选择器 *\u002F\nli:first-child { }           \u002F* 第一个 *\u002F\nli:last-child { }            \u002F* 最后一个 *\u002F\nli:nth-child(2) { }          \u002F* 第2个 *\u002F\nli:nth-child(2n) { }         \u002F* 偶数 *\u002F\nli:nth-child(2n+1) { }       \u002F* 奇数 *\u002F\nli:nth-child(-n+3) { }       \u002F* 前3个 *\u002F\n",[59,138799,138800,138806,138816,138820,138824,138829,138842,138855,138871,138888,138905],{"__ignoreMap":57},[79,138801,138802,138804],{"class":81,"line":82},[79,138803,128476],{"class":85},[79,138805,17604],{"class":228},[79,138807,138808,138810,138812,138814],{"class":81,"line":167},[79,138809,72893],{"class":96},[79,138811,53431],{"class":228},[79,138813,59410],{"class":96},[79,138815,3400],{"class":228},[79,138817,138818],{"class":81,"line":178},[79,138819,3671],{"class":228},[79,138821,138822],{"class":81,"line":545},[79,138823,137646],{"class":228},[79,138825,138826],{"class":81,"line":550},[79,138827,138828],{"class":2313},"\u002F* 结构伪类选择器 *\u002F\n",[79,138830,138831,138833,138836,138839],{"class":81,"line":562},[79,138832,29],{"class":232},[79,138834,138835],{"class":85},":first-child",[79,138837,138838],{"class":228}," { }           ",[79,138840,138841],{"class":2313},"\u002F* 第一个 *\u002F\n",[79,138843,138844,138846,138849,138852],{"class":81,"line":568},[79,138845,29],{"class":232},[79,138847,138848],{"class":85},":last-child",[79,138850,138851],{"class":228}," { }            ",[79,138853,138854],{"class":2313},"\u002F* 最后一个 *\u002F\n",[79,138856,138857,138859,138861,138863,138865,138868],{"class":81,"line":574},[79,138858,29],{"class":232},[79,138860,131099],{"class":85},[79,138862,455],{"class":228},[79,138864,2331],{"class":96},[79,138866,138867],{"class":228},") { }          ",[79,138869,138870],{"class":2313},"\u002F* 第2个 *\u002F\n",[79,138872,138873,138875,138877,138879,138882,138885],{"class":81,"line":579},[79,138874,29],{"class":232},[79,138876,131099],{"class":85},[79,138878,455],{"class":228},[79,138880,138881],{"class":96},"2n",[79,138883,138884],{"class":228},") { }         ",[79,138886,138887],{"class":2313},"\u002F* 偶数 *\u002F\n",[79,138889,138890,138892,138894,138896,138899,138902],{"class":81,"line":585},[79,138891,29],{"class":232},[79,138893,131099],{"class":85},[79,138895,455],{"class":228},[79,138897,138898],{"class":96},"2n+1",[79,138900,138901],{"class":228},") { }       ",[79,138903,138904],{"class":2313},"\u002F* 奇数 *\u002F\n",[79,138906,138907,138909,138911,138913,138916,138918],{"class":81,"line":591},[79,138908,29],{"class":232},[79,138910,131099],{"class":85},[79,138912,455],{"class":228},[79,138914,138915],{"class":96},"-n+3",[79,138917,138901],{"class":228},[79,138919,138920],{"class":2313},"\u002F* 前3个 *\u002F\n",[53605,138922,138925],{"className":138923},[138924],"example","\n  示例内容\n",[19,138927,138928],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[3246,138930,138931],{},[29,138932,138933,138936],{},[59,138934,138935],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,138938,138939],{},"也就是说它选择的是熊大",[26,138941,138942],{"start":562},[29,138943,138944],{},"权重",[51,138946,138948],{"className":128185,"code":138947,"language":128187,"meta":57,"style":57},"\u002F* 结构伪类选择器 *\u002F\nli:first-child { }           \u002F* 第一个 *\u002F\nli:last-child { }            \u002F* 最后一个 *\u002F\nli:nth-child(2) { }          \u002F* 第2个 *\u002F\nli:nth-child(2n) { }         \u002F* 偶数 *\u002F\nli:nth-child(2n+1) { }       \u002F* 奇数 *\u002F\nli:nth-child(-n+3) { }       \u002F* 前3个 *\u002F\n",[59,138949,138950,138954,138964,138974,138988,139002,139016],{"__ignoreMap":57},[79,138951,138952],{"class":81,"line":82},[79,138953,138828],{"class":2313},[79,138955,138956,138958,138960,138962],{"class":81,"line":167},[79,138957,29],{"class":232},[79,138959,138835],{"class":85},[79,138961,138838],{"class":228},[79,138963,138841],{"class":2313},[79,138965,138966,138968,138970,138972],{"class":81,"line":178},[79,138967,29],{"class":232},[79,138969,138848],{"class":85},[79,138971,138851],{"class":228},[79,138973,138854],{"class":2313},[79,138975,138976,138978,138980,138982,138984,138986],{"class":81,"line":545},[79,138977,29],{"class":232},[79,138979,131099],{"class":85},[79,138981,455],{"class":228},[79,138983,2331],{"class":96},[79,138985,138867],{"class":228},[79,138987,138870],{"class":2313},[79,138989,138990,138992,138994,138996,138998,139000],{"class":81,"line":550},[79,138991,29],{"class":232},[79,138993,131099],{"class":85},[79,138995,455],{"class":228},[79,138997,138881],{"class":96},[79,138999,138884],{"class":228},[79,139001,138887],{"class":2313},[79,139003,139004,139006,139008,139010,139012,139014],{"class":81,"line":562},[79,139005,29],{"class":232},[79,139007,131099],{"class":85},[79,139009,455],{"class":228},[79,139011,138898],{"class":96},[79,139013,138901],{"class":228},[79,139015,138904],{"class":2313},[79,139017,139018,139020,139022,139024,139026,139028],{"class":81,"line":568},[79,139019,29],{"class":232},[79,139021,131099],{"class":85},[79,139023,455],{"class":228},[79,139025,138915],{"class":96},[79,139027,138901],{"class":228},[79,139029,138920],{"class":2313},[19,139031,139032],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[24023,139034,139036],{"id":139035},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,139038,139039],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[3569,139041],{"style":128041,"src":139042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[26,139044,139045],{},[29,139046,2287],{},[3246,139048,139049,139052,139055,139058,139061,139064],{},[29,139050,139051],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[29,139053,139054],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[29,139056,139057],{},"语法： element::before {}",[29,139059,139060],{},"before 和 after 必须有 content 属性",[29,139062,139063],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[29,139065,139066],{},"伪元素选择器和标签选择器一样，权重为 1",[26,139068,139069],{"start":167},[29,139070,139071],{},"实例",[51,139073,139074],{"className":128185,"code":138947,"language":128187,"meta":57,"style":57},[59,139075,139076,139080,139090,139100,139114,139128,139142],{"__ignoreMap":57},[79,139077,139078],{"class":81,"line":82},[79,139079,138828],{"class":2313},[79,139081,139082,139084,139086,139088],{"class":81,"line":167},[79,139083,29],{"class":232},[79,139085,138835],{"class":85},[79,139087,138838],{"class":228},[79,139089,138841],{"class":2313},[79,139091,139092,139094,139096,139098],{"class":81,"line":178},[79,139093,29],{"class":232},[79,139095,138848],{"class":85},[79,139097,138851],{"class":228},[79,139099,138854],{"class":2313},[79,139101,139102,139104,139106,139108,139110,139112],{"class":81,"line":545},[79,139103,29],{"class":232},[79,139105,131099],{"class":85},[79,139107,455],{"class":228},[79,139109,2331],{"class":96},[79,139111,138867],{"class":228},[79,139113,138870],{"class":2313},[79,139115,139116,139118,139120,139122,139124,139126],{"class":81,"line":550},[79,139117,29],{"class":232},[79,139119,131099],{"class":85},[79,139121,455],{"class":228},[79,139123,138881],{"class":96},[79,139125,138884],{"class":228},[79,139127,138887],{"class":2313},[79,139129,139130,139132,139134,139136,139138,139140],{"class":81,"line":562},[79,139131,29],{"class":232},[79,139133,131099],{"class":85},[79,139135,455],{"class":228},[79,139137,138898],{"class":96},[79,139139,138901],{"class":228},[79,139141,138904],{"class":2313},[79,139143,139144,139146,139148,139150,139152,139154],{"class":81,"line":568},[79,139145,29],{"class":232},[79,139147,131099],{"class":85},[79,139149,455],{"class":228},[79,139151,138915],{"class":96},[79,139153,138901],{"class":228},[79,139155,138920],{"class":2313},[3569,139157],{"style":128041,"src":139158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[26,139160,139161],{"start":178},[29,139162,139163],{},"使用场景1",[3569,139165],{"style":128041,"src":139166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,139168,139169],{},"不需要再加盒子来整红色那部分了",[51,139171,139173],{"className":128185,"code":139172,"language":128187,"meta":57,"style":57},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[59,139174,139175,139180,139189,139200,139210,139214,139223,139234,139244],{"__ignoreMap":57},[79,139176,139177],{"class":81,"line":82},[79,139178,139179],{"class":2313},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[79,139181,139182,139184,139187],{"class":81,"line":167},[79,139183,53605],{"class":232},[79,139185,139186],{"class":85},"::before",[79,139188,17604],{"class":228},[79,139190,139191,139194,139196,139198],{"class":81,"line":178},[79,139192,139193],{"class":96},"  content",[79,139195,53431],{"class":228},[79,139197,9717],{"class":89},[79,139199,3400],{"class":228},[79,139201,139202,139204,139206,139208],{"class":81,"line":545},[79,139203,129801],{"class":96},[79,139205,53431],{"class":228},[79,139207,62858],{"class":96},[79,139209,3400],{"class":228},[79,139211,139212],{"class":81,"line":550},[79,139213,3671],{"class":228},[79,139215,139216,139218,139221],{"class":81,"line":562},[79,139217,53605],{"class":232},[79,139219,139220],{"class":85},"::after",[79,139222,17604],{"class":228},[79,139224,139225,139227,139229,139232],{"class":81,"line":568},[79,139226,139193],{"class":96},[79,139228,53431],{"class":228},[79,139230,139231],{"class":89},"\"→\"",[79,139233,3400],{"class":228},[79,139235,139236,139238,139240,139242],{"class":81,"line":574},[79,139237,72893],{"class":96},[79,139239,53431],{"class":228},[79,139241,64058],{"class":96},[79,139243,3400],{"class":228},[79,139245,139246],{"class":81,"line":579},[79,139247,3671],{"class":228},[3569,139249],{"style":128041,"src":139250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,139252,139253],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[3569,139255],{"style":128041,"src":139256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,139258,139259],{},"但是在引用时需要先转义一下",[19,139261,139262],{},"content='\\e930'",[26,139264,139265],{"start":545},[29,139266,139267],{},"使用场景2",[19,139269,139270],{},"仿土豆效果",[19,139272,139273],{},"通过使用伪元素选择器可以减少body中盒子的数量",[51,139275,139276],{"className":128185,"code":139172,"language":128187,"meta":57,"style":57},[59,139277,139278,139282,139290,139300,139310,139314,139322,139332,139342],{"__ignoreMap":57},[79,139279,139280],{"class":81,"line":82},[79,139281,139179],{"class":2313},[79,139283,139284,139286,139288],{"class":81,"line":167},[79,139285,53605],{"class":232},[79,139287,139186],{"class":85},[79,139289,17604],{"class":228},[79,139291,139292,139294,139296,139298],{"class":81,"line":178},[79,139293,139193],{"class":96},[79,139295,53431],{"class":228},[79,139297,9717],{"class":89},[79,139299,3400],{"class":228},[79,139301,139302,139304,139306,139308],{"class":81,"line":545},[79,139303,129801],{"class":96},[79,139305,53431],{"class":228},[79,139307,62858],{"class":96},[79,139309,3400],{"class":228},[79,139311,139312],{"class":81,"line":550},[79,139313,3671],{"class":228},[79,139315,139316,139318,139320],{"class":81,"line":562},[79,139317,53605],{"class":232},[79,139319,139220],{"class":85},[79,139321,17604],{"class":228},[79,139323,139324,139326,139328,139330],{"class":81,"line":568},[79,139325,139193],{"class":96},[79,139327,53431],{"class":228},[79,139329,139231],{"class":89},[79,139331,3400],{"class":228},[79,139333,139334,139336,139338,139340],{"class":81,"line":574},[79,139335,72893],{"class":96},[79,139337,53431],{"class":228},[79,139339,64058],{"class":96},[79,139341,3400],{"class":228},[79,139343,139344],{"class":81,"line":579},[79,139345,3671],{"class":228},[3569,139347],{"style":128041,"src":139348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[26,139350,139351],{"start":550},[29,139352,139353],{},"使用场景3",[19,139355,139356],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[51,139358,139360],{"className":128185,"code":139359,"language":128187,"meta":57,"style":57},".box {\n  float: left;\n}\n```Css\n\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[59,139361,139362,139368,139378,139382,139386,139390,139398,139408,139418,139422,139430,139440,139450],{"__ignoreMap":57},[79,139363,139364,139366],{"class":81,"line":82},[79,139365,132033],{"class":85},[79,139367,17604],{"class":228},[79,139369,139370,139372,139374,139376],{"class":81,"line":167},[79,139371,132665],{"class":96},[79,139373,53431],{"class":228},[79,139375,358],{"class":96},[79,139377,3400],{"class":228},[79,139379,139380],{"class":81,"line":178},[79,139381,3671],{"class":228},[79,139383,139384],{"class":81,"line":545},[79,139385,137646],{"class":228},[79,139387,139388],{"class":81,"line":550},[79,139389,139179],{"class":2313},[79,139391,139392,139394,139396],{"class":81,"line":562},[79,139393,53605],{"class":232},[79,139395,139186],{"class":85},[79,139397,17604],{"class":228},[79,139399,139400,139402,139404,139406],{"class":81,"line":568},[79,139401,139193],{"class":96},[79,139403,53431],{"class":228},[79,139405,9717],{"class":89},[79,139407,3400],{"class":228},[79,139409,139410,139412,139414,139416],{"class":81,"line":574},[79,139411,129801],{"class":96},[79,139413,53431],{"class":228},[79,139415,62858],{"class":96},[79,139417,3400],{"class":228},[79,139419,139420],{"class":81,"line":579},[79,139421,3671],{"class":228},[79,139423,139424,139426,139428],{"class":81,"line":585},[79,139425,53605],{"class":232},[79,139427,139220],{"class":85},[79,139429,17604],{"class":228},[79,139431,139432,139434,139436,139438],{"class":81,"line":591},[79,139433,139193],{"class":96},[79,139435,53431],{"class":228},[79,139437,139231],{"class":89},[79,139439,3400],{"class":228},[79,139441,139442,139444,139446,139448],{"class":81,"line":596},[79,139443,72893],{"class":96},[79,139445,53431],{"class":228},[79,139447,64058],{"class":96},[79,139449,3400],{"class":228},[79,139451,139452],{"class":81,"line":602},[79,139453,3671],{"class":228},[19,139455,139456],{},"div {\nmargin: 0 auto;\n}",[51,139458,139461],{"className":139459,"code":139460,"language":56},[54],"\n### 14.2.3 CSS3图片变模糊\n\nfilter CSS属性将模糊或颜色偏移等图形效果应用于元素\n\n`filter: 函数();`，例如：`filter: blur(5px);`，`blur` 表示模糊处理，数值越大越模糊。\n\n### 14.2.4 计算盒子宽度\n\ncalc() 此CSS函数让你在声明CSS属性值时执行一些计算\n\nwidth: calc(100% - 80px);\n\n括号里面可以使用 + - \\* \u002F 来进行计算\n\n运算符前后要加空格，不然显示不出来\n\n要求子盒子宽度永远比父盒子小30像素\n\n### 14.2.5 CSS3 过渡\n\n过渡（transition)是CSS3中具有颠覆性的特征之一，我们可以在不使用 Flash 动画或 JavaScript 的情况下，当元素从一种样式变换为另一种样式时为元素添加效果\n\n**过渡动画：** 是从一个状态 渐渐的过渡到另外一个状态\n\n可以让我们页面更好看，更动感十足，虽然 低版本浏览器不支持（ie9以下版本） 但是不会影响页面布局。\n\n我们现在经常和 :hover 一起 搭配使用\n\n语法：\n\ntransition: 要过渡的属性 花费时间 运动曲线 何时开始;\n\n*   属性 ： 想要变化的 css 属性， 宽度高度 背景颜色 内外边距都可以 。如果想要所有的属性都变化过渡， 写一个all 就可以\n    \n*   花费时间： 单位是 秒（必须写单位） 比如 0.5s\n    \n*   运动曲线： 默认是 ease （可以省略）\n    \n*   何时开始：单位是 秒（必须写单位）可以设置延迟触发时间 默认是 0s （可以省略）\n    \n*   **后面两个属性可以省略**\n    \n*   **记住过渡的使用口诀： 谁做过渡给谁加**\n    \n\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-140.png\">\n\n代码案例\n\n```Css\ndiv {\n  transition: all 0.3s ease;\n}\n",[59,139462,139460],{"__ignoreMap":57},[19,139464,139465],{},"如果想让多个元素都发生变化",[19,139467,139468],{},"不能如下操作：",[19,139470,139471],{},"transition: width 2s ease 0.5s;",[19,139473,139474],{},"transition: height 2s ease 0.5s;不对！！！",[19,139476,139477],{},"上方会样式冲突，导致不显示任何过渡效果",[19,139479,139480],{},"使用如下：加逗号隔开",[19,139482,139483],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,139485,139486],{},"transition all 2s ease;",[339,139488,139490],{"id":139489},"_1426-过渡练习","14.2.6 过渡练习",[26,139492,139493],{},[29,139494,139495],{},"进度条",[3569,139497],{"style":128041,"src":139498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[51,139500,139502],{"className":128185,"code":139501,"language":128187,"meta":57,"style":57},"div {\n  transition: all 0.3s ease;\n}\n",[59,139503,139504,139510,139528],{"__ignoreMap":57},[79,139505,139506,139508],{"class":81,"line":82},[79,139507,53605],{"class":232},[79,139509,17604],{"class":228},[79,139511,139512,139515,139517,139519,139522,139524,139526],{"class":81,"line":167},[79,139513,139514],{"class":96},"  transition",[79,139516,53431],{"class":228},[79,139518,30137],{"class":96},[79,139520,139521],{"class":96}," 0.3",[79,139523,2935],{"class":448},[79,139525,80668],{"class":96},[79,139527,3400],{"class":228},[79,139529,139530],{"class":81,"line":178},[79,139531,3671],{"class":228},[26,139533,139534],{"start":167},[29,139535,139536],{},"小米logo",[19,139538,139539],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[51,139541,139543],{"className":128185,"code":139542,"language":128187,"meta":57,"style":57},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[59,139544,139545,139550,139556,139572,139577],{"__ignoreMap":57},[79,139546,139547],{"class":81,"line":82},[79,139548,139549],{"class":2313},"\u002F* CSS3 过渡 *\u002F\n",[79,139551,139552,139554],{"class":81,"line":167},[79,139553,53605],{"class":232},[79,139555,17604],{"class":228},[79,139557,139558,139560,139562,139564,139566,139568,139570],{"class":81,"line":178},[79,139559,139514],{"class":96},[79,139561,53431],{"class":228},[79,139563,30137],{"class":96},[79,139565,139521],{"class":96},[79,139567,2935],{"class":448},[79,139569,80668],{"class":96},[79,139571,3400],{"class":228},[79,139573,139574],{"class":81,"line":545},[79,139575,139576],{"class":2313},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[79,139578,139579],{"class":81,"line":550},[79,139580,3671],{"class":228},[19,139582,139583],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[2159,139585,139586],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":57,"searchDepth":167,"depth":167,"links":139588},[139589,139594],{"id":137919,"depth":167,"text":137920,"children":139590},[139591,139592,139593],{"id":137923,"depth":178,"text":137924},{"id":138000,"depth":178,"text":138001},{"id":138331,"depth":178,"text":138332},{"id":138622,"depth":167,"text":138623,"children":139595},[139596,139597],{"id":138626,"depth":178,"text":138627},{"id":139489,"depth":178,"text":139490},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":137911,"description":25402},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":139604,"title":139605,"body":139606,"description":25402,"extension":2186,"meta":141350,"navigation":541,"path":141351,"seo":141352,"stem":141353,"__hash__":141354},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":139607,"toc":141331},[139608,139611,139615,139618,139624,139630,139634,139636,139639,139642,139645,139648,139651,139654,139657,139661,139665,139668,139671,139674,139678,139681,139684,139689,139692,139695,139698,139702,139705,139714,139717,139720,139724,139727,139730,139735,139742,139756,139764,139771,139776,139779,139782,139785,139792,139796,139802,139808,139811,139814,139819,139825,139827,139835,139840,139843,139849,139851,139856,139861,139864,139866,139871,139874,139879,139884,139918,139922,139926,139929,139933,139936,140022,140025,140062,140065,140101,140105,140110,140123,140177,140179,140207,140209,140237,140243,140257,140259,140303,140305,140349,140352,140359,140370,140372,140399,140401,140427,140434,140450,140452,140546,140548,140642,140649,140652,140657,140663,140737,140740,140742,140778,140780,140816,140819,140826,140845,140848,140851,140853,140878,140880,140904,140907,140910,140940,140944,140947,141010,141012,141078,141080,141144,141147,141179,141181,141207,141209,141235,141238,141269,141271,141297,141299,141325,141328],[10,139609,139605],{"id":139610},"_15-品优购项目上篇-搭建与公共模块",[14,139612,139614],{"id":139613},"_151-项目规划","15.1 项目规划",[3569,139616],{"style":128041,"src":139617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,139619,139620,139623],{},[2398,139621,139622],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,139625,139626,139629],{},[2398,139627,139628],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,139631,139633],{"id":139632},"_152-项目介绍","15.2 项目介绍",[19,139635,139622],{},[3569,139637],{"style":128041,"src":139638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,139640,139641],{},"主页：",[3569,139643],{"style":128041,"src":139644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,139646,139647],{},"列表页：",[3569,139649],{"style":128041,"src":139650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,139652,139653],{},"注册页：",[3569,139655],{"style":128041,"src":139656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,139658,139660],{"id":139659},"_153-项目搭建工作","15.3 项目搭建工作",[339,139662,139664],{"id":139663},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[3569,139666],{"style":128041,"src":139667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,139669,139670],{},"经常更换的图片要放到upload文件夹中",[19,139672,139673],{},"不经常换的放到images文件夹中",[339,139675,139677],{"id":139676},"_1532-创建文件如下","15.3.2 创建文件如下",[3569,139679],{"style":128041,"src":139680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[3569,139682],{"style":128041,"src":139683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,139685,139686],{},[2398,139687,139688],{},"初始化样式：",[19,139690,139691],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,139693,139694],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,139696,139697],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[339,139699,139701],{"id":139700},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,139703,139704],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,139706,139707,139708,139713],{},"这里最典型的应用就是 ",[2398,139709,139710],{},[59,139711,139712],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[3569,139715],{"style":128041,"src":139716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,139718,139719],{},"通过link方法来引入",[339,139721,139723],{"id":139722},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[3569,139725],{"style":128041,"src":139726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,139728,139729],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[26,139731,139732],{},[29,139733,139734],{},"制作favicon图标",[19,139736,139737,139738,139741],{},"①把品优购图标切成 ",[59,139739,139740],{},"png"," 图片",[19,139743,139744,139745,139747,139748,139751,139752],{},"②把 ",[59,139746,139740],{}," 图片转换为 ",[59,139749,139750],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[2482,139753,139754],{"href":139754,"rel":139755},"http:\u002F\u002Fwww.bitbug.net\u002F",[25885],[26,139757,139758,139761],{"start":167},[29,139759,139760],{},"favicon图标放到网站根目录下",[29,139762,139763],{},"HTML页面引入favicon",[19,139765,139766,139767,139770],{},"在html 页面里面的 ",[59,139768,139769],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,139772,139773],{},[59,139774,139775],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,139777,139778],{},"复制这行代码或者在生成这个的网站进行复制",[3569,139780],{"style":128041,"src":139781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,139783,139784],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,139786,139787,139788],{},"例如:",[2482,139789,139790],{"href":139790,"rel":139791},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[25885],[339,139793,139795],{"id":139794},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,139797,139798,139801],{},[2398,139799,139800],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,139803,139804,139807],{},[2398,139805,139806],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,139809,139810],{},"页面必须有三个标签用来符合 SEO 优化",[3569,139812],{"style":128041,"src":139813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[26,139815,139816],{},[29,139817,139818],{},"title网站标题",[19,139820,139821,139824],{},[2398,139822,139823],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,139826,70778],{},[3246,139828,139829,139832],{},[29,139830,139831],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[29,139833,139834],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[26,139836,139837],{"start":167},[29,139838,139839],{},"description网站描述",[19,139841,139842],{},"简要说明我们网站主要是做什么的",[19,139844,139845,139848],{},[2398,139846,139847],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,139850,70778],{},[19,139852,139853],{},[59,139854,139855],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[26,139857,139858],{"start":178},[29,139859,139860],{},"keywords关键词",[19,139862,139863],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,139865,70778],{},[19,139867,139868],{},[59,139869,139870],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,139872,139873],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,139875,139876],{},[2398,139877,139878],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[26,139880,139881],{"start":545},[29,139882,139883],{},"代码总结",[51,139885,139886],{"className":128932,"code":132289,"language":128934,"meta":57,"style":57},[59,139887,139888,139892,139906,139910],{"__ignoreMap":57},[79,139889,139890],{"class":81,"line":82},[79,139891,132296],{"class":2313},[79,139893,139894,139896,139898,139900,139902,139904],{"class":81,"line":167},[79,139895,229],{"class":228},[79,139897,53605],{"class":232},[79,139899,55477],{"class":85},[79,139901,239],{"class":228},[79,139903,132309],{"class":89},[79,139905,53301],{"class":228},[79,139907,139908],{"class":81,"line":178},[79,139909,132316],{"class":228},[79,139911,139912,139914,139916],{"class":81,"line":545},[79,139913,53779],{"class":228},[79,139915,53605],{"class":232},[79,139917,53301],{"class":228},[14,139919,139921],{"id":139920},"_154-项目公共部分制作","15.4 项目公共部分制作",[339,139923,139925],{"id":139924},"_1541-常用模块类命名","15.4.1 常用模块类命名",[3569,139927],{"style":128041,"src":139928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[339,139930,139932],{"id":139931},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,139934,139935],{},"布局思路：",[3246,139937,139938,139941,139944,139966,139999],{},[29,139939,139940],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[29,139942,139943],{},"里面包含版心的盒子",[29,139945,139946,139947],{},"版心盒子里面包含 1 号左侧盒子左浮动",[3246,139948,139949,139957,139963],{},[29,139950,139951,139952,23525,139954,139956],{},"1 号盒子 里面包含一个",[59,139953,3246],{},[59,139955,3246],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[29,139958,139959,139960,139962],{},"里面的内容是水平排列，所以需要给",[59,139961,29],{},"设置浮动",[29,139964,139965],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[29,139967,139968,139969],{},"版心盒子里面包含 2 号右侧盒子右浮动",[3246,139970,139971,139985,139990],{},[29,139972,139973,139974,23525,139976,139978,139979,139981,139982,139984],{},"2 号盒子 里面包含一个",[59,139975,3246],{},[59,139977,3246],{},"包裹",[59,139980,29],{},"，中间的",[59,139983,3160],{},"可以用样式去设置，也可以用字符 |",[29,139986,139987,139988,139962],{},"里面内容水平排列，给",[59,139989,29],{},[29,139991,139992,139993,139995,139996,139998],{},"找到里面所有偶数的 ",[59,139994,29],{}," 设置样式（偶数的 ",[59,139997,29],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[29,140000,140001,140002],{},"需要用到字体图标",[3246,140003,140004,140010,140013,140016,140019],{},[29,140005,140006,140007],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[59,140008,140009],{},"arrow-icon",[29,140011,140012],{},"先要引入字体图片的资源",[29,140014,140015],{},"在样式里面利用 font-face 来进行声明",[29,140017,140018],{},"在伪元素的 content属性设置 图标的编码",[29,140020,140021],{},"给伪元素设置font-family属性",[19,140023,140024],{},"结构实例代码：",[51,140026,140028],{"className":128185,"code":140027,"language":128187,"meta":57,"style":57},"div::before {\n  content: \"\";\n  display: block;\n}\n",[59,140029,140030,140038,140048,140058],{"__ignoreMap":57},[79,140031,140032,140034,140036],{"class":81,"line":82},[79,140033,53605],{"class":232},[79,140035,139186],{"class":85},[79,140037,17604],{"class":228},[79,140039,140040,140042,140044,140046],{"class":81,"line":167},[79,140041,139193],{"class":96},[79,140043,53431],{"class":228},[79,140045,9717],{"class":89},[79,140047,3400],{"class":228},[79,140049,140050,140052,140054,140056],{"class":81,"line":178},[79,140051,129801],{"class":96},[79,140053,53431],{"class":228},[79,140055,62858],{"class":96},[79,140057,3400],{"class":228},[79,140059,140060],{"class":81,"line":545},[79,140061,3671],{"class":228},[19,140063,140064],{},"样式实例代码：",[51,140066,140067],{"className":128185,"code":140027,"language":128187,"meta":57,"style":57},[59,140068,140069,140077,140087,140097],{"__ignoreMap":57},[79,140070,140071,140073,140075],{"class":81,"line":82},[79,140072,53605],{"class":232},[79,140074,139186],{"class":85},[79,140076,17604],{"class":228},[79,140078,140079,140081,140083,140085],{"class":81,"line":167},[79,140080,139193],{"class":96},[79,140082,53431],{"class":228},[79,140084,9717],{"class":89},[79,140086,3400],{"class":228},[79,140088,140089,140091,140093,140095],{"class":81,"line":178},[79,140090,129801],{"class":96},[79,140092,53431],{"class":228},[79,140094,62858],{"class":96},[79,140096,3400],{"class":228},[79,140098,140099],{"class":81,"line":545},[79,140100,3671],{"class":228},[339,140102,140104],{"id":140103},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[3246,140106,140107],{},[29,140108,140109],{},"header 盒子必须要有高度",[19,140111,140112,140113,140115,140116],{},"1 号盒子是 ",[59,140114,133197],{}," 标志定位，在正常开发过程中， ",[2398,140117,140118,140119,140122],{},"logo的布局其实是有讲究的，需要进行 ",[59,140120,140121],{},"logoSEO","的优化 （★★★）",[3246,140124,140125,140133,140141,140168],{},[29,140126,140127,140129,140130,140132],{},[59,140128,133197],{}," 里面首先放一个 ",[59,140131,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[29,140134,140135,140137,140138,140140],{},[59,140136,10],{}," 里面再放一个链接，可以返回首页的，把 ",[59,140139,133197],{}," 的背景图片给链接即可",[29,140142,140143,140144],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[3246,140145,140146,140161],{},[29,140147,140148,140149,140152,140153,140156,140157,140160],{},"方法1：",[59,140150,140151],{},"text-indent"," 移到盒子外面（",[59,140154,140155],{},"text-indent: -9999px",") ，然后 ",[59,140158,140159],{},"overflow:hidden"," ，淘宝的做法",[29,140162,140163,140164,140167],{},"方法2：直接给 ",[59,140165,140166],{},"font-size: 0;"," 就看不到文字了，京东的做法",[29,140169,140170,140171,140173,140174,140176],{},"最后给链接一个 ",[59,140172,53401],{}," 属性，这样鼠标放到 ",[59,140175,133197],{}," 上就可以看到提示文字了",[19,140178,140024],{},[51,140180,140181],{"className":128932,"code":133418,"language":128934,"meta":57,"style":57},[59,140182,140183],{"__ignoreMap":57},[79,140184,140185,140187,140189,140191,140193,140195,140197,140199,140201,140203,140205],{"class":81,"line":82},[79,140186,229],{"class":228},[79,140188,2482],{"class":232},[79,140190,63046],{"class":85},[79,140192,239],{"class":228},[79,140194,133433],{"class":89},[79,140196,133436],{"class":85},[79,140198,239],{"class":228},[79,140200,133441],{"class":89},[79,140202,133444],{"class":228},[79,140204,2482],{"class":232},[79,140206,53301],{"class":228},[19,140208,140064],{},[51,140210,140211],{"className":128932,"code":133418,"language":128934,"meta":57,"style":57},[59,140212,140213],{"__ignoreMap":57},[79,140214,140215,140217,140219,140221,140223,140225,140227,140229,140231,140233,140235],{"class":81,"line":82},[79,140216,229],{"class":228},[79,140218,2482],{"class":232},[79,140220,63046],{"class":85},[79,140222,239],{"class":228},[79,140224,133433],{"class":89},[79,140226,133436],{"class":85},[79,140228,239],{"class":228},[79,140230,133441],{"class":89},[79,140232,133444],{"class":228},[79,140234,2482],{"class":232},[79,140236,53301],{"class":228},[19,140238,140239,140240,140242],{},"2 号盒子是 ",[59,140241,133210],{}," 搜索模块定位",[3246,140244,140245,140248,140251,140254],{},[29,140246,140247],{},"search盒子利用定位的方式放在对应的位置",[29,140249,140250],{},"search盒子设置绝对定位，header盒子设置相对定位",[29,140252,140253],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[29,140255,140256],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,140258,140024],{},[51,140260,140261],{"className":128185,"code":133505,"language":128187,"meta":57,"style":57},[59,140262,140263,140285,140289,140299],{"__ignoreMap":57},[79,140264,140265,140267,140269,140271,140273,140275,140277,140279,140281,140283],{"class":81,"line":82},[79,140266,53605],{"class":232},[79,140268,1020],{"class":228},[79,140270,19],{"class":232},[79,140272,1020],{"class":228},[79,140274,10],{"class":232},[79,140276,1020],{"class":228},[79,140278,3246],{"class":232},[79,140280,1020],{"class":228},[79,140282,29],{"class":232},[79,140284,17604],{"class":228},[79,140286,140287],{"class":81,"line":167},[79,140288,133534],{"class":2313},[79,140290,140291,140293,140295,140297],{"class":81,"line":178},[79,140292,129801],{"class":96},[79,140294,53431],{"class":228},[79,140296,62858],{"class":96},[79,140298,3400],{"class":228},[79,140300,140301],{"class":81,"line":545},[79,140302,3671],{"class":228},[19,140304,140064],{},[51,140306,140307],{"className":128185,"code":133505,"language":128187,"meta":57,"style":57},[59,140308,140309,140331,140335,140345],{"__ignoreMap":57},[79,140310,140311,140313,140315,140317,140319,140321,140323,140325,140327,140329],{"class":81,"line":82},[79,140312,53605],{"class":232},[79,140314,1020],{"class":228},[79,140316,19],{"class":232},[79,140318,1020],{"class":228},[79,140320,10],{"class":232},[79,140322,1020],{"class":228},[79,140324,3246],{"class":232},[79,140326,1020],{"class":228},[79,140328,29],{"class":232},[79,140330,17604],{"class":228},[79,140332,140333],{"class":81,"line":167},[79,140334,133534],{"class":2313},[79,140336,140337,140339,140341,140343],{"class":81,"line":178},[79,140338,129801],{"class":96},[79,140340,53431],{"class":228},[79,140342,62858],{"class":96},[79,140344,3400],{"class":228},[79,140346,140347],{"class":81,"line":545},[79,140348,3671],{"class":228},[19,140350,140351],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,140353,140354,140355,140358],{},"3 号盒子是 ",[59,140356,140357],{},"hotwords"," 热词模块定位",[3246,140360,140361,140364,140367],{},[29,140362,140363],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[29,140365,140366],{},"给里面所有的a标签设置 左右10px的外边距",[29,140368,140369],{},"给第一个a标签设置文字变红色（#c81623）",[19,140371,140024],{},[51,140373,140375],{"className":128185,"code":140374,"language":128187,"meta":57,"style":57},"div {\n  margin: 0 auto;\n}\n",[59,140376,140377,140383,140395],{"__ignoreMap":57},[79,140378,140379,140381],{"class":81,"line":82},[79,140380,53605],{"class":232},[79,140382,17604],{"class":228},[79,140384,140385,140387,140389,140391,140393],{"class":81,"line":167},[79,140386,72458],{"class":96},[79,140388,53431],{"class":228},[79,140390,759],{"class":96},[79,140392,53550],{"class":96},[79,140394,3400],{"class":228},[79,140396,140397],{"class":81,"line":178},[79,140398,3671],{"class":228},[19,140400,140064],{},[51,140402,140403],{"className":128185,"code":140374,"language":128187,"meta":57,"style":57},[59,140404,140405,140411,140423],{"__ignoreMap":57},[79,140406,140407,140409],{"class":81,"line":82},[79,140408,53605],{"class":232},[79,140410,17604],{"class":228},[79,140412,140413,140415,140417,140419,140421],{"class":81,"line":167},[79,140414,72458],{"class":96},[79,140416,53431],{"class":228},[79,140418,759],{"class":96},[79,140420,53550],{"class":96},[79,140422,3400],{"class":228},[79,140424,140425],{"class":81,"line":178},[79,140426,3671],{"class":228},[19,140428,140429,140430,140433],{},"4 号盒子是 ",[59,140431,140432],{},"shopcar"," 购物车模块",[3246,140435,140436,140441,140444,140447],{},[29,140437,124968,140438,140440],{},[59,140439,140432],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[29,140442,140443],{},"count 统计部分用绝对定位做",[29,140445,140446],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[29,140448,140449],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,140451,140024],{},[51,140453,140454],{"className":128185,"code":133617,"language":128187,"meta":57,"style":57},[59,140455,140456,140460,140474,140478,140492,140496,140510,140514,140528,140532],{"__ignoreMap":57},[79,140457,140458],{"class":81,"line":82},[79,140459,133624],{"class":2313},[79,140461,140462,140464,140466,140468,140470,140472],{"class":81,"line":167},[79,140463,133629],{"class":85},[79,140465,81795],{"class":228},[79,140467,130545],{"class":96},[79,140469,53431],{"class":228},[79,140471,133638],{"class":96},[79,140473,131115],{"class":228},[79,140475,140476],{"class":81,"line":178},[79,140477,133645],{"class":2313},[79,140479,140480,140482,140484,140486,140488,140490],{"class":81,"line":545},[79,140481,133650],{"class":85},[79,140483,81795],{"class":228},[79,140485,130545],{"class":96},[79,140487,53431],{"class":228},[79,140489,56753],{"class":96},[79,140491,131115],{"class":228},[79,140493,140494],{"class":81,"line":550},[79,140495,133665],{"class":2313},[79,140497,140498,140500,140502,140504,140506,140508],{"class":81,"line":562},[79,140499,133670],{"class":85},[79,140501,81795],{"class":228},[79,140503,130545],{"class":96},[79,140505,53431],{"class":228},[79,140507,56820],{"class":96},[79,140509,131115],{"class":228},[79,140511,140512],{"class":81,"line":568},[79,140513,133685],{"class":2313},[79,140515,140516,140518,140520,140522,140524,140526],{"class":81,"line":574},[79,140517,133690],{"class":85},[79,140519,81795],{"class":228},[79,140521,130545],{"class":96},[79,140523,53431],{"class":228},[79,140525,88220],{"class":96},[79,140527,131115],{"class":228},[79,140529,140530],{"class":81,"line":579},[79,140531,133705],{"class":2313},[79,140533,140534,140536,140538,140540,140542,140544],{"class":81,"line":585},[79,140535,133710],{"class":85},[79,140537,81795],{"class":228},[79,140539,130545],{"class":96},[79,140541,53431],{"class":228},[79,140543,133719],{"class":96},[79,140545,131115],{"class":228},[19,140547,140064],{},[51,140549,140550],{"className":128185,"code":133617,"language":128187,"meta":57,"style":57},[59,140551,140552,140556,140570,140574,140588,140592,140606,140610,140624,140628],{"__ignoreMap":57},[79,140553,140554],{"class":81,"line":82},[79,140555,133624],{"class":2313},[79,140557,140558,140560,140562,140564,140566,140568],{"class":81,"line":167},[79,140559,133629],{"class":85},[79,140561,81795],{"class":228},[79,140563,130545],{"class":96},[79,140565,53431],{"class":228},[79,140567,133638],{"class":96},[79,140569,131115],{"class":228},[79,140571,140572],{"class":81,"line":178},[79,140573,133645],{"class":2313},[79,140575,140576,140578,140580,140582,140584,140586],{"class":81,"line":545},[79,140577,133650],{"class":85},[79,140579,81795],{"class":228},[79,140581,130545],{"class":96},[79,140583,53431],{"class":228},[79,140585,56753],{"class":96},[79,140587,131115],{"class":228},[79,140589,140590],{"class":81,"line":550},[79,140591,133665],{"class":2313},[79,140593,140594,140596,140598,140600,140602,140604],{"class":81,"line":562},[79,140595,133670],{"class":85},[79,140597,81795],{"class":228},[79,140599,130545],{"class":96},[79,140601,53431],{"class":228},[79,140603,56820],{"class":96},[79,140605,131115],{"class":228},[79,140607,140608],{"class":81,"line":568},[79,140609,133685],{"class":2313},[79,140611,140612,140614,140616,140618,140620,140622],{"class":81,"line":574},[79,140613,133690],{"class":85},[79,140615,81795],{"class":228},[79,140617,130545],{"class":96},[79,140619,53431],{"class":228},[79,140621,88220],{"class":96},[79,140623,131115],{"class":228},[79,140625,140626],{"class":81,"line":579},[79,140627,133705],{"class":2313},[79,140629,140630,140632,140634,140636,140638,140640],{"class":81,"line":585},[79,140631,133710],{"class":85},[79,140633,81795],{"class":228},[79,140635,130545],{"class":96},[79,140637,53431],{"class":228},[79,140639,133719],{"class":96},[79,140641,131115],{"class":228},[339,140643,140645,140646,140648],{"id":140644},"_1544-nav导航模块制作","15.4.4 ",[59,140647,55704],{},"导航模块制作",[3569,140650],{"style":128041,"src":140651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,140653,140654,140656],{},[59,140655,55704],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,140658,140659,140660],{},"1 号盒子左侧浮动，",[59,140661,140662],{},"dropdown",[3246,140664,140665,140675,140683,140689,140697,140707,140715,140726],{},[29,140666,140667,140668,1748,140671,140674],{},"1号盒子有讲究，根据相关性 里面包含 ",[59,140669,140670],{},".dt",[59,140672,140673],{},".dd"," 两个盒子",[29,140676,140677,140679,140680,140682],{},[59,140678,140670],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[59,140681,140673],{}," 挤到下面去了",[29,140684,140685,140686,140688],{},"给 ",[59,140687,140673],{}," 盒子设置宽度 和 高度，以及背景颜色",[29,140690,140685,140691,140693,140694,121870],{},[59,140692,140673],{}," 盒子里面定义 无序列表 （",[59,140695,140696],{},"ul > li > a",[29,140698,140699,140700,140702,140703,140706],{},"每个 ",[59,140701,29],{}," 都有一个高度（",[59,140704,140705],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[29,140708,140685,140709,140711,140712,121870],{},[59,140710,29],{}," 里面的a设置文字大小（",[59,140713,140714],{},"14px",[29,140716,140685,140717,140719,140720,140722,140723,140725],{},[59,140718,29],{}," 设置 ",[59,140721,129346],{},"，当鼠标移入的时候，让",[59,140724,29],{},"的背景变成白色，让里面的文字变成红色",[29,140727,140728,140730,140731,140733,140734,140736],{},[59,140729,29],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[59,140732,29],{},"的右侧，那么给",[59,140735,29],{},"设置相对定位",[19,140738,140739],{},"一定要注意相关性",[19,140741,140024],{},[51,140743,140744],{"className":128185,"code":140027,"language":128187,"meta":57,"style":57},[59,140745,140746,140754,140764,140774],{"__ignoreMap":57},[79,140747,140748,140750,140752],{"class":81,"line":82},[79,140749,53605],{"class":232},[79,140751,139186],{"class":85},[79,140753,17604],{"class":228},[79,140755,140756,140758,140760,140762],{"class":81,"line":167},[79,140757,139193],{"class":96},[79,140759,53431],{"class":228},[79,140761,9717],{"class":89},[79,140763,3400],{"class":228},[79,140765,140766,140768,140770,140772],{"class":81,"line":178},[79,140767,129801],{"class":96},[79,140769,53431],{"class":228},[79,140771,62858],{"class":96},[79,140773,3400],{"class":228},[79,140775,140776],{"class":81,"line":545},[79,140777,3671],{"class":228},[19,140779,140064],{},[51,140781,140782],{"className":128185,"code":140027,"language":128187,"meta":57,"style":57},[59,140783,140784,140792,140802,140812],{"__ignoreMap":57},[79,140785,140786,140788,140790],{"class":81,"line":82},[79,140787,53605],{"class":232},[79,140789,139186],{"class":85},[79,140791,17604],{"class":228},[79,140793,140794,140796,140798,140800],{"class":81,"line":167},[79,140795,139193],{"class":96},[79,140797,53431],{"class":228},[79,140799,9717],{"class":89},[79,140801,3400],{"class":228},[79,140803,140804,140806,140808,140810],{"class":81,"line":178},[79,140805,129801],{"class":96},[79,140807,53431],{"class":228},[79,140809,62858],{"class":96},[79,140811,3400],{"class":228},[79,140813,140814],{"class":81,"line":545},[79,140815,3671],{"class":228},[19,140817,140818],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,140820,140821,140822,140825],{},"2 号盒子左侧浮动，",[59,140823,140824],{},"navitems"," 导航栏组",[3246,140827,140828,140833,140842],{},[29,140829,140830,140831],{},"里面结构是 ",[59,140832,140696],{},[29,140834,140835,140836,140838,140839,140841],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[59,140837,2482],{},"左右的",[59,140840,32890],{},"把两侧撑开",[29,140843,140844],{},"让文字垂直居中（行高等于高度）",[3569,140846],{"style":128041,"src":140847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,140849,140850],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,140852,140024],{},[51,140854,140856],{"className":128185,"code":140855,"language":128187,"meta":57,"style":57},".box {\n  float: left;\n}\n",[59,140857,140858,140864,140874],{"__ignoreMap":57},[79,140859,140860,140862],{"class":81,"line":82},[79,140861,132033],{"class":85},[79,140863,17604],{"class":228},[79,140865,140866,140868,140870,140872],{"class":81,"line":167},[79,140867,132665],{"class":96},[79,140869,53431],{"class":228},[79,140871,358],{"class":96},[79,140873,3400],{"class":228},[79,140875,140876],{"class":81,"line":178},[79,140877,3671],{"class":228},[19,140879,140064],{},[51,140881,140882],{"className":128185,"code":140855,"language":128187,"meta":57,"style":57},[59,140883,140884,140890,140900],{"__ignoreMap":57},[79,140885,140886,140888],{"class":81,"line":82},[79,140887,132033],{"class":85},[79,140889,17604],{"class":228},[79,140891,140892,140894,140896,140898],{"class":81,"line":167},[79,140893,132665],{"class":96},[79,140895,53431],{"class":228},[79,140897,358],{"class":96},[79,140899,3400],{"class":228},[79,140901,140902],{"class":81,"line":178},[79,140903,3671],{"class":228},[19,140905,140906],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[3569,140908],{"style":128041,"src":140909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[51,140911,140912],{"className":128185,"code":132342,"language":128187,"meta":57,"style":57},[59,140913,140914,140920,140936],{"__ignoreMap":57},[79,140915,140916,140918],{"class":81,"line":82},[79,140917,53605],{"class":232},[79,140919,17604],{"class":228},[79,140921,140922,140924,140926,140928,140930,140932,140934],{"class":81,"line":167},[79,140923,72884],{"class":96},[79,140925,53431],{"class":228},[79,140927,775],{"class":96},[79,140929,53486],{"class":448},[79,140931,53515],{"class":96},[79,140933,131577],{"class":96},[79,140935,3400],{"class":228},[79,140937,140938],{"class":81,"line":178},[79,140939,3671],{"class":228},[339,140941,140943],{"id":140942},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[3569,140945],{"style":128041,"src":140946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[3246,140948,140949,140954,140959],{},[29,140950,140951,140953],{},[59,140952,133388],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[29,140955,140956,140958],{},[59,140957,133388],{}," 里面有一个大的版心",[29,140960,140961,140962,140965,140966],{},"版心里面包含 1 号盒子，",[59,140963,140964],{},"mod_service"," 是服务模块，mod 是模块的意思",[3246,140967,140968,140973,140986,141002,141007],{},[29,140969,140685,140970,140972],{},[59,140971,140964],{}," 设置高度（80px）和下边框",[29,140974,140975,140976,140979,140980,140982,140983,140985],{},"在里面定义 ",[59,140977,140978],{},"ul > li"," ,每个",[59,140981,29],{}," 宽度是300px 高度是 50px，给每个",[59,140984,29],{},"设置35px的左内边距",[29,140987,140988,140989,140991,140992,140994,140995,140997,140998,20435,141000,121870],{},"在每个",[59,140990,29],{},"里面，放一个 ",[59,140993,24935],{},"（里面放图标），一个",[59,140996,53605],{},"（里面放",[59,140999,53605],{},[59,141001,19],{},[29,141003,140685,141004,141006],{},[59,141005,24935],{},"设置浮动，让h5与这个div左右排列",[29,141008,141009],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,141011,140024],{},[51,141013,141015],{"className":128185,"code":141014,"language":128187,"meta":57,"style":57},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[59,141016,141017,141023,141035,141047,141074],{"__ignoreMap":57},[79,141018,141019,141021],{"class":81,"line":82},[79,141020,135942],{"class":85},[79,141022,17604],{"class":228},[79,141024,141025,141027,141029,141031,141033],{"class":81,"line":167},[79,141026,72556],{"class":96},[79,141028,53431],{"class":228},[79,141030,2940],{"class":96},[79,141032,53486],{"class":448},[79,141034,3400],{"class":228},[79,141036,141037,141039,141041,141043,141045],{"class":81,"line":178},[79,141038,72776],{"class":96},[79,141040,53431],{"class":228},[79,141042,2940],{"class":96},[79,141044,53486],{"class":448},[79,141046,3400],{"class":228},[79,141048,141049,141051,141053,141055,141057,141059,141061,141063,141066,141068,141070,141072],{"class":81,"line":545},[79,141050,72599],{"class":96},[79,141052,53431],{"class":228},[79,141054,63715],{"class":96},[79,141056,455],{"class":228},[79,141058,135981],{"class":7284},[79,141060,15747],{"class":228},[79,141062,63725],{"class":96},[79,141064,141065],{"class":96}," -10",[79,141067,53486],{"class":448},[79,141069,136000],{"class":96},[79,141071,53486],{"class":448},[79,141073,3400],{"class":228},[79,141075,141076],{"class":81,"line":550},[79,141077,3671],{"class":228},[19,141079,140064],{},[51,141081,141082],{"className":128185,"code":141014,"language":128187,"meta":57,"style":57},[59,141083,141084,141090,141102,141114,141140],{"__ignoreMap":57},[79,141085,141086,141088],{"class":81,"line":82},[79,141087,135942],{"class":85},[79,141089,17604],{"class":228},[79,141091,141092,141094,141096,141098,141100],{"class":81,"line":167},[79,141093,72556],{"class":96},[79,141095,53431],{"class":228},[79,141097,2940],{"class":96},[79,141099,53486],{"class":448},[79,141101,3400],{"class":228},[79,141103,141104,141106,141108,141110,141112],{"class":81,"line":178},[79,141105,72776],{"class":96},[79,141107,53431],{"class":228},[79,141109,2940],{"class":96},[79,141111,53486],{"class":448},[79,141113,3400],{"class":228},[79,141115,141116,141118,141120,141122,141124,141126,141128,141130,141132,141134,141136,141138],{"class":81,"line":545},[79,141117,72599],{"class":96},[79,141119,53431],{"class":228},[79,141121,63715],{"class":96},[79,141123,455],{"class":228},[79,141125,135981],{"class":7284},[79,141127,15747],{"class":228},[79,141129,63725],{"class":96},[79,141131,141065],{"class":96},[79,141133,53486],{"class":448},[79,141135,136000],{"class":96},[79,141137,53486],{"class":448},[79,141139,3400],{"class":228},[79,141141,141142],{"class":81,"line":550},[79,141143,3671],{"class":228},[19,141145,141146],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[3246,141148,141149,141152,141158,141164,141176],{},[29,141150,141151],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[29,141153,141154,141155,121870],{},"里面的布局利用 自定义列表来实现（",[59,141156,141157],{},"dl > dt + dd",[29,141159,140685,141160,141163],{},[59,141161,141162],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[29,141165,140685,141166,141169,141170,20435,141172,141175],{},[59,141167,141168],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[59,141171,141168],{},[59,141173,141174],{},"dd","之间有些距离",[29,141177,141178],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,141180,140024],{},[51,141182,141183],{"className":128185,"code":140374,"language":128187,"meta":57,"style":57},[59,141184,141185,141191,141203],{"__ignoreMap":57},[79,141186,141187,141189],{"class":81,"line":82},[79,141188,53605],{"class":232},[79,141190,17604],{"class":228},[79,141192,141193,141195,141197,141199,141201],{"class":81,"line":167},[79,141194,72458],{"class":96},[79,141196,53431],{"class":228},[79,141198,759],{"class":96},[79,141200,53550],{"class":96},[79,141202,3400],{"class":228},[79,141204,141205],{"class":81,"line":178},[79,141206,3671],{"class":228},[19,141208,140064],{},[51,141210,141211],{"className":128185,"code":140374,"language":128187,"meta":57,"style":57},[59,141212,141213,141219,141231],{"__ignoreMap":57},[79,141214,141215,141217],{"class":81,"line":82},[79,141216,53605],{"class":232},[79,141218,17604],{"class":228},[79,141220,141221,141223,141225,141227,141229],{"class":81,"line":167},[79,141222,72458],{"class":96},[79,141224,53431],{"class":228},[79,141226,759],{"class":96},[79,141228,53550],{"class":96},[79,141230,3400],{"class":228},[79,141232,141233],{"class":81,"line":178},[79,141234,3671],{"class":228},[19,141236,141237],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[3246,141239,141240,141249,141252,141263],{},[29,141241,141242,141243,141245,141246,141248],{},"分为上下两块，上面是 ",[59,141244,133405],{}," 友情链接，下面是 ",[59,141247,133398],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[29,141250,141251],{},"把内容分别复制到相应模块中",[29,141253,140685,141254,141256,141257,141259,141260,141262],{},[59,141255,133405],{}," 设置 15px 的下外边距，给",[59,141258,133405],{}," 里面 的 ",[59,141261,2482],{}," 标签设置 左右 3px 的外边距",[29,141264,141265,141266,141268],{},"给",[59,141267,133398],{}," 设置 20px 的行高",[19,141270,140024],{},[51,141272,141273],{"className":128185,"code":140374,"language":128187,"meta":57,"style":57},[59,141274,141275,141281,141293],{"__ignoreMap":57},[79,141276,141277,141279],{"class":81,"line":82},[79,141278,53605],{"class":232},[79,141280,17604],{"class":228},[79,141282,141283,141285,141287,141289,141291],{"class":81,"line":167},[79,141284,72458],{"class":96},[79,141286,53431],{"class":228},[79,141288,759],{"class":96},[79,141290,53550],{"class":96},[79,141292,3400],{"class":228},[79,141294,141295],{"class":81,"line":178},[79,141296,3671],{"class":228},[19,141298,140064],{},[51,141300,141301],{"className":128185,"code":140374,"language":128187,"meta":57,"style":57},[59,141302,141303,141309,141321],{"__ignoreMap":57},[79,141304,141305,141307],{"class":81,"line":82},[79,141306,53605],{"class":232},[79,141308,17604],{"class":228},[79,141310,141311,141313,141315,141317,141319],{"class":81,"line":167},[79,141312,72458],{"class":96},[79,141314,53431],{"class":228},[79,141316,759],{"class":96},[79,141318,53550],{"class":96},[79,141320,3400],{"class":228},[79,141322,141323],{"class":81,"line":178},[79,141324,3671],{"class":228},[19,141326,141327],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[2159,141329,141330],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":57,"searchDepth":167,"depth":167,"links":141332},[141333,141334,141335,141342],{"id":139613,"depth":167,"text":139614},{"id":139632,"depth":167,"text":139633},{"id":139659,"depth":167,"text":139660,"children":141336},[141337,141338,141339,141340,141341],{"id":139663,"depth":178,"text":139664},{"id":139676,"depth":178,"text":139677},{"id":139700,"depth":178,"text":139701},{"id":139722,"depth":178,"text":139723},{"id":139794,"depth":178,"text":139795},{"id":139920,"depth":167,"text":139921,"children":141343},[141344,141345,141346,141347,141349],{"id":139924,"depth":178,"text":139925},{"id":139931,"depth":178,"text":139932},{"id":140103,"depth":178,"text":140104},{"id":140644,"depth":178,"text":141348},"15.4.4 nav导航模块制作",{"id":140942,"depth":178,"text":140943},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":139605,"description":25402},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":141356,"title":141357,"body":141358,"description":25402,"extension":2186,"meta":143760,"navigation":541,"path":143761,"seo":143762,"stem":143763,"__hash__":143764},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":141359,"toc":143737},[141360,141363,141367,141371,141383,141386,141389,141392,141403,141405,141429,141431,141455,141460,141463,141465,141501,141503,141539,141542,141547,141550,141553,141556,141586,141593,141596,141606,141608,141642,141645,141679,141685,141702,141704,141740,141742,141778,141783,141808,141810,141836,141838,141862,141869,141872,141936,141938,141980,141982,142022,142029,142034,142036,142066,142068,142098,142102,142105,142112,142124,142126,142152,142154,142178,142181,142183,142207,142213,142223,142225,142255,142257,142287,142294,142335,142337,142373,142375,142411,142415,142418,142421,142424,142430,142435,142438,142461,142464,142488,142491,142515,142520,142523,142526,142529,142532,142535,142609,142611,142641,142643,142673,142676,142679,142711,142715,142719,142733,142742,142745,142750,142752,142846,142848,142942,142965,142967,142991,142993,143017,143024,143027,143037,143039,143063,143068,143076,143078,143108,143113,143153,143155,143181,143183,143209,143213,143216,143221,143224,143228,143236,143243,143251,143253,143283,143285,143315,143323,143326,143329,143331,143361,143363,143393,143396,143401,143403,143427,143429,143453,143456,143541,143543,143567,143569,143593,143597,143599,143623,143625,143659,143663,143677,143680,143685,143688,143693,143696,143726,143734],[10,141361,141357],{"id":141362},"_16-品优购项目下篇-主体与页面开发",[14,141364,141366],{"id":141365},"_161-项目主体模块制作","16.1 项目主体模块制作",[339,141368,141370],{"id":141369},"_1611-首页制作","16.1.1 首页制作",[19,141372,141373,141375,141376,141378,141379,141382],{},[2398,141374,104001],{}," 主体模块是 ",[2398,141377,76046],{}," 里面专有的，注意需要新的样式文件 ",[2398,141380,141381],{},"index.css，"," 就不要写在common.css中了",[3569,141384],{"style":128041,"src":141385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[3569,141387],{"style":128041,"src":141388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,141390,141391],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[3246,141393,141394,141397,141400],{},[29,141395,141396],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[29,141398,141399],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[29,141401,141402],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,141404,140024],{},[51,141406,141407],{"className":128185,"code":140855,"language":128187,"meta":57,"style":57},[59,141408,141409,141415,141425],{"__ignoreMap":57},[79,141410,141411,141413],{"class":81,"line":82},[79,141412,132033],{"class":85},[79,141414,17604],{"class":228},[79,141416,141417,141419,141421,141423],{"class":81,"line":167},[79,141418,132665],{"class":96},[79,141420,53431],{"class":228},[79,141422,358],{"class":96},[79,141424,3400],{"class":228},[79,141426,141427],{"class":81,"line":178},[79,141428,3671],{"class":228},[19,141430,140064],{},[51,141432,141433],{"className":128185,"code":140855,"language":128187,"meta":57,"style":57},[59,141434,141435,141441,141451],{"__ignoreMap":57},[79,141436,141437,141439],{"class":81,"line":82},[79,141438,132033],{"class":85},[79,141440,17604],{"class":228},[79,141442,141443,141445,141447,141449],{"class":81,"line":167},[79,141444,132665],{"class":96},[79,141446,53431],{"class":228},[79,141448,358],{"class":96},[79,141450,3400],{"class":228},[79,141452,141453],{"class":81,"line":178},[79,141454,3671],{"class":228},[26,141456,141457],{},[29,141458,141459],{},"左侧focus模块制作",[3569,141461],{"style":128041,"src":141462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,141464,140024],{},[51,141466,141467],{"className":128185,"code":129508,"language":128187,"meta":57,"style":57},[59,141468,141469,141477,141487,141497],{"__ignoreMap":57},[79,141470,141471,141473,141475],{"class":81,"line":82},[79,141472,55812],{"class":232},[79,141474,63888],{"class":85},[79,141476,17604],{"class":228},[79,141478,141479,141481,141483,141485],{"class":81,"line":167},[79,141480,129523],{"class":96},[79,141482,53431],{"class":228},[79,141484,56878],{"class":96},[79,141486,3400],{"class":228},[79,141488,141489,141491,141493,141495],{"class":81,"line":178},[79,141490,72786],{"class":96},[79,141492,53431],{"class":228},[79,141494,56726],{"class":96},[79,141496,3400],{"class":228},[79,141498,141499],{"class":81,"line":545},[79,141500,3671],{"class":228},[19,141502,140064],{},[51,141504,141505],{"className":128185,"code":129508,"language":128187,"meta":57,"style":57},[59,141506,141507,141515,141525,141535],{"__ignoreMap":57},[79,141508,141509,141511,141513],{"class":81,"line":82},[79,141510,55812],{"class":232},[79,141512,63888],{"class":85},[79,141514,17604],{"class":228},[79,141516,141517,141519,141521,141523],{"class":81,"line":167},[79,141518,129523],{"class":96},[79,141520,53431],{"class":228},[79,141522,56878],{"class":96},[79,141524,3400],{"class":228},[79,141526,141527,141529,141531,141533],{"class":81,"line":178},[79,141528,72786],{"class":96},[79,141530,53431],{"class":228},[79,141532,56726],{"class":96},[79,141534,3400],{"class":228},[79,141536,141537],{"class":81,"line":545},[79,141538,3671],{"class":228},[19,141540,141541],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[26,141543,141544],{"start":167},[29,141545,141546],{},"右侧newsflash模块制作",[3569,141548],{"style":128041,"src":141549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,141551,141552],{},"右侧的模块 分为上中下三个盒子",[19,141554,141555],{},"结构代码：",[51,141557,141558],{"className":128932,"code":135687,"language":128934,"meta":57,"style":57},[59,141559,141560],{"__ignoreMap":57},[79,141561,141562,141564,141566,141568,141570,141572,141574,141576,141578,141580,141582,141584],{"class":81,"line":82},[79,141563,229],{"class":228},[79,141565,3569],{"class":232},[79,141567,57228],{"class":85},[79,141569,239],{"class":228},[79,141571,135702],{"class":89},[79,141573,57236],{"class":85},[79,141575,239],{"class":228},[79,141577,135709],{"class":89},[79,141579,135712],{"class":85},[79,141581,239],{"class":228},[79,141583,135717],{"class":89},[79,141585,53301],{"class":228},[19,141587,141588,141589,141592],{},"1 号盒子为 ",[59,141590,141591],{},"news"," 新闻模块 高度为 165px",[3569,141594],{"style":128041,"src":141595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,141597,141598,141599,141602,141603],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[59,141600,141601],{},"news-hd","，下面是 ",[59,141604,141605],{},"news-bd",[19,141607,141555],{},[51,141609,141610],{"className":128932,"code":132289,"language":128934,"meta":57,"style":57},[59,141611,141612,141616,141630,141634],{"__ignoreMap":57},[79,141613,141614],{"class":81,"line":82},[79,141615,132296],{"class":2313},[79,141617,141618,141620,141622,141624,141626,141628],{"class":81,"line":167},[79,141619,229],{"class":228},[79,141621,53605],{"class":232},[79,141623,55477],{"class":85},[79,141625,239],{"class":228},[79,141627,132309],{"class":89},[79,141629,53301],{"class":228},[79,141631,141632],{"class":81,"line":178},[79,141633,132316],{"class":228},[79,141635,141636,141638,141640],{"class":81,"line":545},[79,141637,53779],{"class":228},[79,141639,53605],{"class":232},[79,141641,53301],{"class":228},[19,141643,141644],{},"样式代码：",[51,141646,141647],{"className":128932,"code":132289,"language":128934,"meta":57,"style":57},[59,141648,141649,141653,141667,141671],{"__ignoreMap":57},[79,141650,141651],{"class":81,"line":82},[79,141652,132296],{"class":2313},[79,141654,141655,141657,141659,141661,141663,141665],{"class":81,"line":167},[79,141656,229],{"class":228},[79,141658,53605],{"class":232},[79,141660,55477],{"class":85},[79,141662,239],{"class":228},[79,141664,132309],{"class":89},[79,141666,53301],{"class":228},[79,141668,141669],{"class":81,"line":178},[79,141670,132316],{"class":228},[79,141672,141673,141675,141677],{"class":81,"line":545},[79,141674,53779],{"class":228},[79,141676,53605],{"class":232},[79,141678,53301],{"class":228},[19,141680,141681,141682,141684],{},"上面是",[59,141683,141601],{},"，设置高度是 33px，设置下边框",[3246,141686,141687,141693],{},[29,141688,141689,141690,141692],{},"里面放一个",[59,141691,24935],{}," 标题",[29,141694,141695,141696,141698,141699,141701],{},"放一个a",[59,141697,104625],{},"，内容是 更多，然后让 ",[59,141700,2482],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,141703,141555],{},[51,141705,141706],{"className":128185,"code":140027,"language":128187,"meta":57,"style":57},[59,141707,141708,141716,141726,141736],{"__ignoreMap":57},[79,141709,141710,141712,141714],{"class":81,"line":82},[79,141711,53605],{"class":232},[79,141713,139186],{"class":85},[79,141715,17604],{"class":228},[79,141717,141718,141720,141722,141724],{"class":81,"line":167},[79,141719,139193],{"class":96},[79,141721,53431],{"class":228},[79,141723,9717],{"class":89},[79,141725,3400],{"class":228},[79,141727,141728,141730,141732,141734],{"class":81,"line":178},[79,141729,129801],{"class":96},[79,141731,53431],{"class":228},[79,141733,62858],{"class":96},[79,141735,3400],{"class":228},[79,141737,141738],{"class":81,"line":545},[79,141739,3671],{"class":228},[19,141741,141644],{},[51,141743,141744],{"className":128185,"code":140027,"language":128187,"meta":57,"style":57},[59,141745,141746,141754,141764,141774],{"__ignoreMap":57},[79,141747,141748,141750,141752],{"class":81,"line":82},[79,141749,53605],{"class":232},[79,141751,139186],{"class":85},[79,141753,17604],{"class":228},[79,141755,141756,141758,141760,141762],{"class":81,"line":167},[79,141757,139193],{"class":96},[79,141759,53431],{"class":228},[79,141761,9717],{"class":89},[79,141763,3400],{"class":228},[79,141765,141766,141768,141770,141772],{"class":81,"line":178},[79,141767,129801],{"class":96},[79,141769,53431],{"class":228},[79,141771,62858],{"class":96},[79,141773,3400],{"class":228},[79,141775,141776],{"class":81,"line":545},[79,141777,3671],{"class":228},[19,141779,141780,141781],{},"下面是",[59,141782,141605],{},[3246,141784,141785,141793],{},[29,141786,141787,141788,1748,141790,141792],{},"里面包含 ",[59,141789,3246],{},[59,141791,29],{}," 还有链接",[29,141794,141265,141795,141797,141798,141800,141801,141804,141805],{},[59,141796,29],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[59,141799,132851],{}," 2.设置 ",[59,141802,141803],{},"white-space: nowrap;"," 3. 设置 ",[59,141806,141807],{},"text-overflow: ellipsis;",[19,141809,141555],{},[51,141811,141813],{"className":128185,"code":141812,"language":128187,"meta":57,"style":57},"div {\n  overflow: hidden;\n}\n",[59,141814,141815,141821,141832],{"__ignoreMap":57},[79,141816,141817,141819],{"class":81,"line":82},[79,141818,53605],{"class":232},[79,141820,17604],{"class":228},[79,141822,141823,141826,141828,141830],{"class":81,"line":167},[79,141824,141825],{"class":96},"  overflow",[79,141827,53431],{"class":228},[79,141829,63703],{"class":96},[79,141831,3400],{"class":228},[79,141833,141834],{"class":81,"line":178},[79,141835,3671],{"class":228},[19,141837,141644],{},[51,141839,141840],{"className":128185,"code":141812,"language":128187,"meta":57,"style":57},[59,141841,141842,141848,141858],{"__ignoreMap":57},[79,141843,141844,141846],{"class":81,"line":82},[79,141845,53605],{"class":232},[79,141847,17604],{"class":228},[79,141849,141850,141852,141854,141856],{"class":81,"line":167},[79,141851,141825],{"class":96},[79,141853,53431],{"class":228},[79,141855,63703],{"class":96},[79,141857,3400],{"class":228},[79,141859,141860],{"class":81,"line":178},[79,141861,3671],{"class":228},[19,141863,141864,141865,141868],{},"2 号盒子为 ",[59,141866,141867],{},"lifeservice"," 生活服务模块 高度为 209px",[3569,141870],{"style":128041,"src":141871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[3246,141873,141874,141877,141887,141911,141922],{},[29,141875,141876],{},"设置边框（左右下边框）",[29,141878,141879,141880,141883,141884,141886],{},"里面的内容 是 ",[59,141881,141882],{},"ul > 12*li","，给",[59,141885,29],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[29,141888,141889,141890],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[3246,141891,141892,141897,141906],{},[29,141893,141894,141896],{},[59,141895,141867],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[29,141898,141899,141900,141902,141903,141905],{},"可以让 ",[59,141901,141867],{}," 里面的 ",[59,141904,3246],{}," 宽度为 252，就可以装的下 4 个 小 li",[29,141907,141908,141910],{},[59,141909,141867],{}," 盒子 overflow 隐藏多余的部分就可以了",[29,141912,118100,141913,141915,141916,141918,141919,141921],{},[59,141914,29],{}," 里面放一个 ",[59,141917,2684],{},"（里面放图标），下面的文本用 ",[59,141920,19],{}," 标签包裹",[29,141923,140685,141924,141926,141927,141929,141930,140719,141932,141935],{},[59,141925,2684],{}," 设置 24px宽和28px的高（注意 ",[59,141928,2684],{}," 是行内元素， 转成行内块），给 ",[59,141931,29],{},[59,141933,141934],{},"text-align:center"," 让里面内容居中显示",[19,141937,141555],{},[51,141939,141941],{"className":128185,"code":141940,"language":128187,"meta":57,"style":57},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[59,141942,141943,141961,141966,141976],{"__ignoreMap":57},[79,141944,141945,141947,141949,141951,141953,141955,141957,141959],{"class":81,"line":82},[79,141946,79],{"class":232},[79,141948,1020],{"class":228},[79,141950,2482],{"class":232},[79,141952,1020],{"class":228},[79,141954,25579],{"class":232},[79,141956,1020],{"class":228},[79,141958,2398],{"class":232},[79,141960,17604],{"class":228},[79,141962,141963],{"class":81,"line":167},[79,141964,141965],{"class":2313},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[79,141967,141968,141970,141972,141974],{"class":81,"line":178},[79,141969,129801],{"class":96},[79,141971,53431],{"class":228},[79,141973,129863],{"class":96},[79,141975,3400],{"class":228},[79,141977,141978],{"class":81,"line":545},[79,141979,3671],{"class":228},[19,141981,141644],{},[51,141983,141984],{"className":128185,"code":141940,"language":128187,"meta":57,"style":57},[59,141985,141986,142004,142008,142018],{"__ignoreMap":57},[79,141987,141988,141990,141992,141994,141996,141998,142000,142002],{"class":81,"line":82},[79,141989,79],{"class":232},[79,141991,1020],{"class":228},[79,141993,2482],{"class":232},[79,141995,1020],{"class":228},[79,141997,25579],{"class":232},[79,141999,1020],{"class":228},[79,142001,2398],{"class":232},[79,142003,17604],{"class":228},[79,142005,142006],{"class":81,"line":167},[79,142007,141965],{"class":2313},[79,142009,142010,142012,142014,142016],{"class":81,"line":178},[79,142011,129801],{"class":96},[79,142013,53431],{"class":228},[79,142015,129863],{"class":96},[79,142017,3400],{"class":228},[79,142019,142020],{"class":81,"line":545},[79,142021,3671],{"class":228},[19,142023,142024,142025,142028],{},"3 号盒子为 ",[59,142026,142027],{},"bargain"," 特价商品",[3246,142030,142031],{},[29,142032,142033],{},"这个比较简单，直接插入一张图片即可",[19,142035,141555],{},[51,142037,142038],{"className":128932,"code":135687,"language":128934,"meta":57,"style":57},[59,142039,142040],{"__ignoreMap":57},[79,142041,142042,142044,142046,142048,142050,142052,142054,142056,142058,142060,142062,142064],{"class":81,"line":82},[79,142043,229],{"class":228},[79,142045,3569],{"class":232},[79,142047,57228],{"class":85},[79,142049,239],{"class":228},[79,142051,135702],{"class":89},[79,142053,57236],{"class":85},[79,142055,239],{"class":228},[79,142057,135709],{"class":89},[79,142059,135712],{"class":85},[79,142061,239],{"class":228},[79,142063,135717],{"class":89},[79,142065,53301],{"class":228},[19,142067,141644],{},[51,142069,142070],{"className":128932,"code":135687,"language":128934,"meta":57,"style":57},[59,142071,142072],{"__ignoreMap":57},[79,142073,142074,142076,142078,142080,142082,142084,142086,142088,142090,142092,142094,142096],{"class":81,"line":82},[79,142075,229],{"class":228},[79,142077,3569],{"class":232},[79,142079,57228],{"class":85},[79,142081,239],{"class":228},[79,142083,135702],{"class":89},[79,142085,57236],{"class":85},[79,142087,239],{"class":228},[79,142089,135709],{"class":89},[79,142091,135712],{"class":85},[79,142093,239],{"class":228},[79,142095,135717],{"class":89},[79,142097,53301],{"class":228},[339,142099,142101],{"id":142100},"_1612-推荐模块制作","16.1.2 推荐模块制作",[3569,142103],{"style":128041,"src":142104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,142106,142107,142108,142111],{},"大盒子 ",[59,142109,142110],{},"recom"," 推荐模块 recommend",[3246,142113,142114],{},[29,142115,142116,142117,142119,142120,142123],{},"给这个 ",[59,142118,142110],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[59,142121,142122],{},"#ebebeb","），设置距离上边 12px",[19,142125,141555],{},[51,142127,142129],{"className":128185,"code":142128,"language":128187,"meta":57,"style":57},"div {\n  background-color: #f0f0f0;\n}\n",[59,142130,142131,142137,142148],{"__ignoreMap":57},[79,142132,142133,142135],{"class":81,"line":82},[79,142134,53605],{"class":232},[79,142136,17604],{"class":228},[79,142138,142139,142141,142143,142146],{"class":81,"line":167},[79,142140,72866],{"class":96},[79,142142,53431],{"class":228},[79,142144,142145],{"class":96},"#f0f0f0",[79,142147,3400],{"class":228},[79,142149,142150],{"class":81,"line":178},[79,142151,3671],{"class":228},[19,142153,141644],{},[51,142155,142156],{"className":128185,"code":142128,"language":128187,"meta":57,"style":57},[59,142157,142158,142164,142174],{"__ignoreMap":57},[79,142159,142160,142162],{"class":81,"line":82},[79,142161,53605],{"class":232},[79,142163,17604],{"class":228},[79,142165,142166,142168,142170,142172],{"class":81,"line":167},[79,142167,72866],{"class":96},[79,142169,53431],{"class":228},[79,142171,142145],{"class":96},[79,142173,3400],{"class":228},[79,142175,142176],{"class":81,"line":178},[79,142177,3671],{"class":228},[19,142179,142180],{},"里面包含 2 个盒子， 浮动即可",[19,142182,141555],{},[51,142184,142185],{"className":128185,"code":140855,"language":128187,"meta":57,"style":57},[59,142186,142187,142193,142203],{"__ignoreMap":57},[79,142188,142189,142191],{"class":81,"line":82},[79,142190,132033],{"class":85},[79,142192,17604],{"class":228},[79,142194,142195,142197,142199,142201],{"class":81,"line":167},[79,142196,132665],{"class":96},[79,142198,53431],{"class":228},[79,142200,358],{"class":96},[79,142202,3400],{"class":228},[79,142204,142205],{"class":81,"line":178},[79,142206,3671],{"class":228},[19,142208,142209,142210],{},"1 号盒子 ",[59,142211,142212],{},"recom_hd",[3246,142214,142215,142218],{},[29,142216,142217],{},"设置宽度205px，高度163px",[29,142219,141689,142220,142222],{},[59,142221,3569],{},"标签，插入图片即可",[19,142224,141555],{},[51,142226,142227],{"className":128932,"code":135687,"language":128934,"meta":57,"style":57},[59,142228,142229],{"__ignoreMap":57},[79,142230,142231,142233,142235,142237,142239,142241,142243,142245,142247,142249,142251,142253],{"class":81,"line":82},[79,142232,229],{"class":228},[79,142234,3569],{"class":232},[79,142236,57228],{"class":85},[79,142238,239],{"class":228},[79,142240,135702],{"class":89},[79,142242,57236],{"class":85},[79,142244,239],{"class":228},[79,142246,135709],{"class":89},[79,142248,135712],{"class":85},[79,142250,239],{"class":228},[79,142252,135717],{"class":89},[79,142254,53301],{"class":228},[19,142256,141644],{},[51,142258,142259],{"className":128932,"code":135687,"language":128934,"meta":57,"style":57},[59,142260,142261],{"__ignoreMap":57},[79,142262,142263,142265,142267,142269,142271,142273,142275,142277,142279,142281,142283,142285],{"class":81,"line":82},[79,142264,229],{"class":228},[79,142266,3569],{"class":232},[79,142268,57228],{"class":85},[79,142270,239],{"class":228},[79,142272,135702],{"class":89},[79,142274,57236],{"class":85},[79,142276,239],{"class":228},[79,142278,135709],{"class":89},[79,142280,135712],{"class":85},[79,142282,239],{"class":228},[79,142284,135717],{"class":89},[79,142286,53301],{"class":228},[19,142288,142289,142290,142293],{},"2 号盒子 ",[59,142291,142292],{},"recom_bd"," ，注意里面的小竖线",[3246,142295,142296,142307,142310,142315,142320],{},[29,142297,142298,142299,142301,142302,142304,142305],{},"右侧结构里面放 ",[59,142300,3246],{}," 包含 4个 ",[59,142303,29],{},"，每个li里面包含一个",[59,142306,3569],{},[29,142308,142309],{},"直接利用切片工具把里面的内容当成一张图片",[29,142311,140685,142312,142314],{},[59,142313,29],{}," 设置浮动",[29,142316,140685,142317,142319],{},[59,142318,3569],{}," 设置宽高，宽度 248px，高度 163px",[29,142321,142322,142323,141883,142326,142328,142329,142331,142332],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[59,142324,142325],{},"top 10px",[59,142327,29],{},"设置相对定位（注意，最后一个",[59,142330,29],{},"不用设置伪元素），可以利用 ",[59,142333,142334],{},"nth-child(-n+3){...}",[19,142336,141555],{},[51,142338,142339],{"className":128185,"code":140027,"language":128187,"meta":57,"style":57},[59,142340,142341,142349,142359,142369],{"__ignoreMap":57},[79,142342,142343,142345,142347],{"class":81,"line":82},[79,142344,53605],{"class":232},[79,142346,139186],{"class":85},[79,142348,17604],{"class":228},[79,142350,142351,142353,142355,142357],{"class":81,"line":167},[79,142352,139193],{"class":96},[79,142354,53431],{"class":228},[79,142356,9717],{"class":89},[79,142358,3400],{"class":228},[79,142360,142361,142363,142365,142367],{"class":81,"line":178},[79,142362,129801],{"class":96},[79,142364,53431],{"class":228},[79,142366,62858],{"class":96},[79,142368,3400],{"class":228},[79,142370,142371],{"class":81,"line":545},[79,142372,3671],{"class":228},[19,142374,141644],{},[51,142376,142377],{"className":128185,"code":140027,"language":128187,"meta":57,"style":57},[59,142378,142379,142387,142397,142407],{"__ignoreMap":57},[79,142380,142381,142383,142385],{"class":81,"line":82},[79,142382,53605],{"class":232},[79,142384,139186],{"class":85},[79,142386,17604],{"class":228},[79,142388,142389,142391,142393,142395],{"class":81,"line":167},[79,142390,139193],{"class":96},[79,142392,53431],{"class":228},[79,142394,9717],{"class":89},[79,142396,3400],{"class":228},[79,142398,142399,142401,142403,142405],{"class":81,"line":178},[79,142400,129801],{"class":96},[79,142402,53431],{"class":228},[79,142404,62858],{"class":96},[79,142406,3400],{"class":228},[79,142408,142409],{"class":81,"line":545},[79,142410,3671],{"class":228},[339,142412,142414],{"id":142413},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[3569,142416],{"style":128041,"src":142417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,142419,142420],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,142422,142423],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,142425,142426,142429],{},[59,142427,142428],{},"box_hd"," 制作",[19,142431,142209,142432,142434],{},[59,142433,142428],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[3569,142436],{"style":128041,"src":142437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[3246,142439,142440,142445,142450,142453],{},[29,142441,142442,142444],{},[59,142443,142428],{}," 给 30px 的高度，2个像素的下边框",[29,142446,142447,142448],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[59,142449,140696],{},[29,142451,142452],{},"左侧盒左浮动，右侧盒子右浮动",[29,142454,142455,142457,142458,142460],{},[59,142456,2482],{},"标签之间的距离用左右的",[59,142459,32890],{},"撑开即可",[19,142462,142463],{},"结构代码",[51,142465,142466],{"className":128185,"code":140855,"language":128187,"meta":57,"style":57},[59,142467,142468,142474,142484],{"__ignoreMap":57},[79,142469,142470,142472],{"class":81,"line":82},[79,142471,132033],{"class":85},[79,142473,17604],{"class":228},[79,142475,142476,142478,142480,142482],{"class":81,"line":167},[79,142477,132665],{"class":96},[79,142479,53431],{"class":228},[79,142481,358],{"class":96},[79,142483,3400],{"class":228},[79,142485,142486],{"class":81,"line":178},[79,142487,3671],{"class":228},[19,142489,142490],{},"样式代码",[51,142492,142493],{"className":128185,"code":140855,"language":128187,"meta":57,"style":57},[59,142494,142495,142501,142511],{"__ignoreMap":57},[79,142496,142497,142499],{"class":81,"line":82},[79,142498,132033],{"class":85},[79,142500,17604],{"class":228},[79,142502,142503,142505,142507,142509],{"class":81,"line":167},[79,142504,132665],{"class":96},[79,142506,53431],{"class":228},[79,142508,358],{"class":96},[79,142510,3400],{"class":228},[79,142512,142513],{"class":81,"line":178},[79,142514,3671],{"class":228},[19,142516,142517,142429],{},[59,142518,142519],{},"box_bd",[19,142521,142522],{},"2 号盒子 box_bd，不要给高度",[3569,142524],{"style":128041,"src":142525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,142527,142528],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,142530,142531],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,142533,142534],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[3246,142536,142537,142549,142565],{},[29,142538,142539,142541,142542,142545,142546,142548],{},[59,142540,142519],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[59,142543,142544],{},"tab_content","，在",[59,142547,142544],{}," 里面包裹tab选项卡对应的内容",[29,142550,142551,142552,142555,142556,142558,142559,142561,142562,142564],{},"内容被一个大盒子包裹（",[59,142553,142554],{},"tab_list_item","），里面是 ",[59,142557,3246],{}," 包裹 5个 ",[59,142560,29],{},"，每个",[59,142563,29],{},"设置对应的宽度，然后设置浮动",[29,142566,142567,142568,142570,142571,142573,142574],{},"而这5个",[59,142569,29],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[59,142572,29],{},"设置",[3246,142575,142576,142594,142597],{},[29,142577,142578,142579,142581,142582,142584,142585,142587,142588,142590,142591,142593],{},"第一个小 ",[59,142580,29],{}," 分为上下结构，上面是 ",[59,142583,3246],{}," 包裹 ",[59,142586,29],{}," ，",[59,142589,29],{},"里面包裹 ",[59,142592,2482],{},"，下面插入一张图片",[29,142595,142596],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[29,142598,142599,142600,142602,142603,142605,142606,142608],{},"后面的小 ",[59,142601,29],{}," 里面先放一个",[59,142604,2482],{},"标签，然后在",[59,142607,2482],{},"标签里面插入图片即可",[19,142610,142463],{},[51,142612,142613],{"className":128932,"code":135687,"language":128934,"meta":57,"style":57},[59,142614,142615],{"__ignoreMap":57},[79,142616,142617,142619,142621,142623,142625,142627,142629,142631,142633,142635,142637,142639],{"class":81,"line":82},[79,142618,229],{"class":228},[79,142620,3569],{"class":232},[79,142622,57228],{"class":85},[79,142624,239],{"class":228},[79,142626,135702],{"class":89},[79,142628,57236],{"class":85},[79,142630,239],{"class":228},[79,142632,135709],{"class":89},[79,142634,135712],{"class":85},[79,142636,239],{"class":228},[79,142638,135717],{"class":89},[79,142640,53301],{"class":228},[19,142642,142490],{},[51,142644,142645],{"className":128932,"code":135687,"language":128934,"meta":57,"style":57},[59,142646,142647],{"__ignoreMap":57},[79,142648,142649,142651,142653,142655,142657,142659,142661,142663,142665,142667,142669,142671],{"class":81,"line":82},[79,142650,229],{"class":228},[79,142652,3569],{"class":232},[79,142654,57228],{"class":85},[79,142656,239],{"class":228},[79,142658,135702],{"class":89},[79,142660,57236],{"class":85},[79,142662,239],{"class":228},[79,142664,135709],{"class":89},[79,142666,135712],{"class":85},[79,142668,239],{"class":228},[79,142670,135717],{"class":89},[79,142672,53301],{"class":228},[19,142674,142675],{},"tab栏切换需求！！！！！！介绍：",[3569,142677],{"style":128041,"src":142678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[3246,142680,142681,142689,142695,142698],{},[29,142682,142683,142686,142687],{},[59,142684,142685],{},"tab","栏的布局是 ",[59,142688,140696],{},[29,142690,142691,142692,142694],{},"有多少个",[59,142693,142685],{},"选项卡，那么对应就有多少个内容",[29,142696,142697],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[29,142699,142700,142701,142704,142705,142707,142708,142710],{},"等后面我们学习了",[59,142702,142703],{},"js","之后，我们就会配合",[59,142706,142703],{},"来实现，",[59,142709,142685],{},"栏的切换",[14,142712,142714],{"id":142713},"_162-列表制作","16.2 列表制作",[339,142716,142718],{"id":142717},"_1621-准备工作","16.2.1 准备工作",[3246,142720,142721,142724,142727,142730],{},[29,142722,142723],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[29,142725,142726],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[29,142728,142729],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[29,142731,142732],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[339,142734,142736,142737,1748,142739,142741],{"id":142735},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[59,142738,133190],{},[59,142740,55704],{}," 修改",[3569,142743],{"style":128041,"src":142744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[3246,142746,142747],{},[29,142748,142749],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,142751,141555],{},[51,142753,142754],{"className":128185,"code":133617,"language":128187,"meta":57,"style":57},[59,142755,142756,142760,142774,142778,142792,142796,142810,142814,142828,142832],{"__ignoreMap":57},[79,142757,142758],{"class":81,"line":82},[79,142759,133624],{"class":2313},[79,142761,142762,142764,142766,142768,142770,142772],{"class":81,"line":167},[79,142763,133629],{"class":85},[79,142765,81795],{"class":228},[79,142767,130545],{"class":96},[79,142769,53431],{"class":228},[79,142771,133638],{"class":96},[79,142773,131115],{"class":228},[79,142775,142776],{"class":81,"line":178},[79,142777,133645],{"class":2313},[79,142779,142780,142782,142784,142786,142788,142790],{"class":81,"line":545},[79,142781,133650],{"class":85},[79,142783,81795],{"class":228},[79,142785,130545],{"class":96},[79,142787,53431],{"class":228},[79,142789,56753],{"class":96},[79,142791,131115],{"class":228},[79,142793,142794],{"class":81,"line":550},[79,142795,133665],{"class":2313},[79,142797,142798,142800,142802,142804,142806,142808],{"class":81,"line":562},[79,142799,133670],{"class":85},[79,142801,81795],{"class":228},[79,142803,130545],{"class":96},[79,142805,53431],{"class":228},[79,142807,56820],{"class":96},[79,142809,131115],{"class":228},[79,142811,142812],{"class":81,"line":568},[79,142813,133685],{"class":2313},[79,142815,142816,142818,142820,142822,142824,142826],{"class":81,"line":574},[79,142817,133690],{"class":85},[79,142819,81795],{"class":228},[79,142821,130545],{"class":96},[79,142823,53431],{"class":228},[79,142825,88220],{"class":96},[79,142827,131115],{"class":228},[79,142829,142830],{"class":81,"line":579},[79,142831,133705],{"class":2313},[79,142833,142834,142836,142838,142840,142842,142844],{"class":81,"line":585},[79,142835,133710],{"class":85},[79,142837,81795],{"class":228},[79,142839,130545],{"class":96},[79,142841,53431],{"class":228},[79,142843,133719],{"class":96},[79,142845,131115],{"class":228},[19,142847,141644],{},[51,142849,142850],{"className":128185,"code":133617,"language":128187,"meta":57,"style":57},[59,142851,142852,142856,142870,142874,142888,142892,142906,142910,142924,142928],{"__ignoreMap":57},[79,142853,142854],{"class":81,"line":82},[79,142855,133624],{"class":2313},[79,142857,142858,142860,142862,142864,142866,142868],{"class":81,"line":167},[79,142859,133629],{"class":85},[79,142861,81795],{"class":228},[79,142863,130545],{"class":96},[79,142865,53431],{"class":228},[79,142867,133638],{"class":96},[79,142869,131115],{"class":228},[79,142871,142872],{"class":81,"line":178},[79,142873,133645],{"class":2313},[79,142875,142876,142878,142880,142882,142884,142886],{"class":81,"line":545},[79,142877,133650],{"class":85},[79,142879,81795],{"class":228},[79,142881,130545],{"class":96},[79,142883,53431],{"class":228},[79,142885,56753],{"class":96},[79,142887,131115],{"class":228},[79,142889,142890],{"class":81,"line":550},[79,142891,133665],{"class":2313},[79,142893,142894,142896,142898,142900,142902,142904],{"class":81,"line":562},[79,142895,133670],{"class":85},[79,142897,81795],{"class":228},[79,142899,130545],{"class":96},[79,142901,53431],{"class":228},[79,142903,56820],{"class":96},[79,142905,131115],{"class":228},[79,142907,142908],{"class":81,"line":568},[79,142909,133685],{"class":2313},[79,142911,142912,142914,142916,142918,142920,142922],{"class":81,"line":574},[79,142913,133690],{"class":85},[79,142915,81795],{"class":228},[79,142917,130545],{"class":96},[79,142919,53431],{"class":228},[79,142921,88220],{"class":96},[79,142923,131115],{"class":228},[79,142925,142926],{"class":81,"line":579},[79,142927,133705],{"class":2313},[79,142929,142930,142932,142934,142936,142938,142940],{"class":81,"line":585},[79,142931,133710],{"class":85},[79,142933,81795],{"class":228},[79,142935,130545],{"class":96},[79,142937,53431],{"class":228},[79,142939,133719],{"class":96},[79,142941,131115],{"class":228},[3246,142943,142944,142955],{},[29,142945,142946,142947,142950,142951,1748,142953],{},"1 号盒子左侧浮动 ",[59,142948,142949],{},"sk_list"," 里面包含 ",[59,142952,3246],{},[59,142954,29],{},[29,142956,142957,142958,142950,142961,1748,142963],{},"2 号盒子左侧浮动 ",[59,142959,142960],{},"sk_con",[59,142962,3246],{},[59,142964,29],{},[19,142966,141555],{},[51,142968,142969],{"className":128185,"code":140855,"language":128187,"meta":57,"style":57},[59,142970,142971,142977,142987],{"__ignoreMap":57},[79,142972,142973,142975],{"class":81,"line":82},[79,142974,132033],{"class":85},[79,142976,17604],{"class":228},[79,142978,142979,142981,142983,142985],{"class":81,"line":167},[79,142980,132665],{"class":96},[79,142982,53431],{"class":228},[79,142984,358],{"class":96},[79,142986,3400],{"class":228},[79,142988,142989],{"class":81,"line":178},[79,142990,3671],{"class":228},[19,142992,141644],{},[51,142994,142995],{"className":128185,"code":140855,"language":128187,"meta":57,"style":57},[59,142996,142997,143003,143013],{"__ignoreMap":57},[79,142998,142999,143001],{"class":81,"line":82},[79,143000,132033],{"class":85},[79,143002,17604],{"class":228},[79,143004,143005,143007,143009,143011],{"class":81,"line":167},[79,143006,132665],{"class":96},[79,143008,53431],{"class":228},[79,143010,358],{"class":96},[79,143012,3400],{"class":228},[79,143014,143015],{"class":81,"line":178},[79,143016,3671],{"class":228},[339,143018,143020,143021],{"id":143019},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[59,143022,143023],{},"sk_container",[3569,143025],{"style":128041,"src":143026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[3246,143028,143029,143034],{},[29,143030,142209,143031,143033],{},[59,143032,143023],{}," 给宽度 1200，不要给高度",[29,143035,143036],{},"一定不要忘记清除浮动",[19,143038,141555],{},[51,143040,143041],{"className":128185,"code":140855,"language":128187,"meta":57,"style":57},[59,143042,143043,143049,143059],{"__ignoreMap":57},[79,143044,143045,143047],{"class":81,"line":82},[79,143046,132033],{"class":85},[79,143048,17604],{"class":228},[79,143050,143051,143053,143055,143057],{"class":81,"line":167},[79,143052,132665],{"class":96},[79,143054,53431],{"class":228},[79,143056,358],{"class":96},[79,143058,3400],{"class":228},[79,143060,143061],{"class":81,"line":178},[79,143062,3671],{"class":228},[26,143064,143065],{},[29,143066,143067],{},"sk_hd制作",[3246,143069,143070],{},[29,143071,142289,143072,143075],{},[59,143073,143074],{},"sk_hd"," ，插入图片即可",[19,143077,141555],{},[51,143079,143080],{"className":128932,"code":135687,"language":128934,"meta":57,"style":57},[59,143081,143082],{"__ignoreMap":57},[79,143083,143084,143086,143088,143090,143092,143094,143096,143098,143100,143102,143104,143106],{"class":81,"line":82},[79,143085,229],{"class":228},[79,143087,3569],{"class":232},[79,143089,57228],{"class":85},[79,143091,239],{"class":228},[79,143093,135702],{"class":89},[79,143095,57236],{"class":85},[79,143097,239],{"class":228},[79,143099,135709],{"class":89},[79,143101,135712],{"class":85},[79,143103,239],{"class":228},[79,143105,135717],{"class":89},[79,143107,53301],{"class":228},[26,143109,143110],{"start":167},[29,143111,143112],{},"sk_bd制作",[3246,143114,143115],{},[29,143116,143117,143118,143121,143122,1748,143124,143126],{},"3 号盒子 ",[59,143119,143120],{},"sk_bd"," ，里面包含很多的 ",[59,143123,3246],{},[59,143125,29],{},[3246,143127,143128,143137],{},[29,143129,143130,143131,143133,143134,143136],{},"当鼠标移入到 ",[59,143132,29],{}," 上面的时候显示红色的边框，在这里先给 ",[59,143135,29],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[29,143138,143139,143140,143142,143143,143145,143146,143149,143150,143152],{},"由于给每个 ",[59,143141,29],{}," 都设置了外边距，导致一行的最后一个 ",[59,143144,29],{}," 掉了下来，在这里我们利用 ",[59,143147,143148],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[59,143151,29],{},"，去掉外边距就好了",[19,143154,141555],{},[51,143156,143157],{"className":128185,"code":140374,"language":128187,"meta":57,"style":57},[59,143158,143159,143165,143177],{"__ignoreMap":57},[79,143160,143161,143163],{"class":81,"line":82},[79,143162,53605],{"class":232},[79,143164,17604],{"class":228},[79,143166,143167,143169,143171,143173,143175],{"class":81,"line":167},[79,143168,72458],{"class":96},[79,143170,53431],{"class":228},[79,143172,759],{"class":96},[79,143174,53550],{"class":96},[79,143176,3400],{"class":228},[79,143178,143179],{"class":81,"line":178},[79,143180,3671],{"class":228},[19,143182,141644],{},[51,143184,143185],{"className":128185,"code":140374,"language":128187,"meta":57,"style":57},[59,143186,143187,143193,143205],{"__ignoreMap":57},[79,143188,143189,143191],{"class":81,"line":82},[79,143190,53605],{"class":232},[79,143192,17604],{"class":228},[79,143194,143195,143197,143199,143201,143203],{"class":81,"line":167},[79,143196,72458],{"class":96},[79,143198,53431],{"class":228},[79,143200,759],{"class":96},[79,143202,53550],{"class":96},[79,143204,3400],{"class":228},[79,143206,143207],{"class":81,"line":178},[79,143208,3671],{"class":228},[14,143210,143212],{"id":143211},"_163-注册页面制作","16.3 注册页面制作",[3569,143214],{"style":128041,"src":143215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,143217,143218,143220],{},[2398,143219,11080],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[3569,143222],{"style":128041,"src":143223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[339,143225,143227],{"id":143226},"_1631-准备工作","16.3.1 准备工作",[3246,143229,143230,143233],{},[29,143231,143232],{},"创建register.html，引入 base.css，引入favicon图标",[29,143234,143235],{},"创建register.css ，在html页面进行引入",[339,143237,143239,143240,143242],{"id":143238},"_1632-header-头部实现","16.3.2 ",[59,143241,133190],{}," 头部实现",[3246,143244,143245,143248],{},[29,143246,143247],{},"整个内容用 版心 进行包裹",[29,143249,143250],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,143252,141555],{},[51,143254,143255],{"className":128932,"code":135687,"language":128934,"meta":57,"style":57},[59,143256,143257],{"__ignoreMap":57},[79,143258,143259,143261,143263,143265,143267,143269,143271,143273,143275,143277,143279,143281],{"class":81,"line":82},[79,143260,229],{"class":228},[79,143262,3569],{"class":232},[79,143264,57228],{"class":85},[79,143266,239],{"class":228},[79,143268,135702],{"class":89},[79,143270,57236],{"class":85},[79,143272,239],{"class":228},[79,143274,135709],{"class":89},[79,143276,135712],{"class":85},[79,143278,239],{"class":228},[79,143280,135717],{"class":89},[79,143282,53301],{"class":228},[19,143284,141644],{},[51,143286,143287],{"className":128932,"code":135687,"language":128934,"meta":57,"style":57},[59,143288,143289],{"__ignoreMap":57},[79,143290,143291,143293,143295,143297,143299,143301,143303,143305,143307,143309,143311,143313],{"class":81,"line":82},[79,143292,229],{"class":228},[79,143294,3569],{"class":232},[79,143296,57228],{"class":85},[79,143298,239],{"class":228},[79,143300,135702],{"class":89},[79,143302,57236],{"class":85},[79,143304,239],{"class":228},[79,143306,135709],{"class":89},[79,143308,135712],{"class":85},[79,143310,239],{"class":228},[79,143312,135717],{"class":89},[79,143314,53301],{"class":228},[339,143316,143318,143319,143322],{"id":143317},"_1633-registerarea-主体模块实现","16.3.3 ",[59,143320,143321],{},"registerarea"," 主体模块实现",[3569,143324],{"style":128041,"src":143325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,143327,143328],{},"整个大盒子 高度为 522px，设置4个边框",[19,143330,141555],{},[51,143332,143333],{"className":128185,"code":132342,"language":128187,"meta":57,"style":57},[59,143334,143335,143341,143357],{"__ignoreMap":57},[79,143336,143337,143339],{"class":81,"line":82},[79,143338,53605],{"class":232},[79,143340,17604],{"class":228},[79,143342,143343,143345,143347,143349,143351,143353,143355],{"class":81,"line":167},[79,143344,72884],{"class":96},[79,143346,53431],{"class":228},[79,143348,775],{"class":96},[79,143350,53486],{"class":448},[79,143352,53515],{"class":96},[79,143354,131577],{"class":96},[79,143356,3400],{"class":228},[79,143358,143359],{"class":81,"line":178},[79,143360,3671],{"class":228},[19,143362,141644],{},[51,143364,143365],{"className":128185,"code":132342,"language":128187,"meta":57,"style":57},[59,143366,143367,143373,143389],{"__ignoreMap":57},[79,143368,143369,143371],{"class":81,"line":82},[79,143370,53605],{"class":232},[79,143372,17604],{"class":228},[79,143374,143375,143377,143379,143381,143383,143385,143387],{"class":81,"line":167},[79,143376,72884],{"class":96},[79,143378,53431],{"class":228},[79,143380,775],{"class":96},[79,143382,53486],{"class":448},[79,143384,53515],{"class":96},[79,143386,131577],{"class":96},[79,143388,3400],{"class":228},[79,143390,143391],{"class":81,"line":178},[79,143392,3671],{"class":228},[19,143394,143395],{},"1号盒子 是一个 h3 标签，放标题",[3246,143397,143398],{},[29,143399,143400],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,143402,141555],{},[51,143404,143405],{"className":128185,"code":140855,"language":128187,"meta":57,"style":57},[59,143406,143407,143413,143423],{"__ignoreMap":57},[79,143408,143409,143411],{"class":81,"line":82},[79,143410,132033],{"class":85},[79,143412,17604],{"class":228},[79,143414,143415,143417,143419,143421],{"class":81,"line":167},[79,143416,132665],{"class":96},[79,143418,53431],{"class":228},[79,143420,358],{"class":96},[79,143422,3400],{"class":228},[79,143424,143425],{"class":81,"line":178},[79,143426,3671],{"class":228},[19,143428,141644],{},[51,143430,143431],{"className":128185,"code":140855,"language":128187,"meta":57,"style":57},[59,143432,143433,143439,143449],{"__ignoreMap":57},[79,143434,143435,143437],{"class":81,"line":82},[79,143436,132033],{"class":85},[79,143438,17604],{"class":228},[79,143440,143441,143443,143445,143447],{"class":81,"line":167},[79,143442,132665],{"class":96},[79,143444,53431],{"class":228},[79,143446,358],{"class":96},[79,143448,3400],{"class":228},[79,143450,143451],{"class":81,"line":178},[79,143452,3671],{"class":228},[19,143454,143455],{},"2号盒子 里面放注册的内容",[3246,143457,143458,143461,143470,143484,143497,143500,143503,143521,143535],{},[29,143459,143460],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[29,143462,143463,143464,143466,143467,143469],{},"里面的内容利用 ",[59,143465,3246],{}," 包含 ",[59,143468,29],{}," 来实现的（不需要用表格）",[29,143471,140699,143472,143474,143475,143477,143478,143480,143481,143483],{},[59,143473,29],{}," 里面，左侧放 ",[59,143476,35605],{}," 标签， 中间放",[59,143479,55812],{}," 标签， 右侧放 ",[59,143482,79],{}," 提示信息",[29,143485,143486,143487,143489,143490,143492,143493,143496],{},"左侧 ",[59,143488,35605],{},"里面的文字都是右对齐，我们可以给",[59,143491,35605],{},"设置一个宽度（88px），然后利用",[59,143494,143495],{},"text-align"," 来设置右对齐",[29,143498,143499],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[29,143501,143502],{},"右侧 span修饰一下文字颜色",[29,143504,143505,143506],{},"提示信息的样式优化",[3246,143507,143508,143511,143514],{},[29,143509,143510],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[29,143512,143513],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[29,143515,143516,143517,143520],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[59,143518,143519],{},"vertical-algin"," 来设置 图片与文字对齐方式",[29,143522,143523,143524],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[3246,143525,143526,143532],{},[29,143527,143528,143529,143531],{},"设置 ",[59,143530,25579],{}," 的 左右 12px 的内边距，设置一下文字颜色",[29,143533,143534],{},"分别设置 背景颜色",[29,143536,143537,143538,143540],{},"同意协议 和 完成注册 都是用 ",[59,143539,29],{}," 进行包裹",[19,143542,141555],{},[51,143544,143545],{"className":128185,"code":142128,"language":128187,"meta":57,"style":57},[59,143546,143547,143553,143563],{"__ignoreMap":57},[79,143548,143549,143551],{"class":81,"line":82},[79,143550,53605],{"class":232},[79,143552,17604],{"class":228},[79,143554,143555,143557,143559,143561],{"class":81,"line":167},[79,143556,72866],{"class":96},[79,143558,53431],{"class":228},[79,143560,142145],{"class":96},[79,143562,3400],{"class":228},[79,143564,143565],{"class":81,"line":178},[79,143566,3671],{"class":228},[19,143568,141644],{},[51,143570,143571],{"className":128185,"code":142128,"language":128187,"meta":57,"style":57},[59,143572,143573,143579,143589],{"__ignoreMap":57},[79,143574,143575,143577],{"class":81,"line":82},[79,143576,53605],{"class":232},[79,143578,17604],{"class":228},[79,143580,143581,143583,143585,143587],{"class":81,"line":167},[79,143582,72866],{"class":96},[79,143584,53431],{"class":228},[79,143586,142145],{"class":96},[79,143588,3400],{"class":228},[79,143590,143591],{"class":81,"line":178},[79,143592,3671],{"class":228},[339,143594,143596],{"id":143595},"_1634-底部实现","16.3.4 底部实现",[19,143598,141555],{},[51,143600,143601],{"className":128185,"code":142128,"language":128187,"meta":57,"style":57},[59,143602,143603,143609,143619],{"__ignoreMap":57},[79,143604,143605,143607],{"class":81,"line":82},[79,143606,53605],{"class":232},[79,143608,17604],{"class":228},[79,143610,143611,143613,143615,143617],{"class":81,"line":167},[79,143612,72866],{"class":96},[79,143614,53431],{"class":228},[79,143616,142145],{"class":96},[79,143618,3400],{"class":228},[79,143620,143621],{"class":81,"line":178},[79,143622,3671],{"class":228},[19,143624,141644],{},[51,143626,143627],{"className":128932,"code":132289,"language":128934,"meta":57,"style":57},[59,143628,143629,143633,143647,143651],{"__ignoreMap":57},[79,143630,143631],{"class":81,"line":82},[79,143632,132296],{"class":2313},[79,143634,143635,143637,143639,143641,143643,143645],{"class":81,"line":167},[79,143636,229],{"class":228},[79,143638,53605],{"class":232},[79,143640,55477],{"class":85},[79,143642,239],{"class":228},[79,143644,132309],{"class":89},[79,143646,53301],{"class":228},[79,143648,143649],{"class":81,"line":178},[79,143650,132316],{"class":228},[79,143652,143653,143655,143657],{"class":81,"line":545},[79,143654,53779],{"class":228},[79,143656,53605],{"class":232},[79,143658,53301],{"class":228},[14,143660,143662],{"id":143661},"_164-项目总结","16.4 项目总结",[26,143664,143665,143668,143671,143674],{},[29,143666,143667],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[29,143669,143670],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[29,143672,143673],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[29,143675,143676],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[3569,143678],{"style":128041,"src":143679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[26,143681,143682],{"start":550},[29,143683,143684],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[3569,143686],{"style":128041,"src":143687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[26,143689,143690],{"start":562},[29,143691,143692],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[3569,143694],{"style":128041,"src":143695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[51,143697,143698],{"className":128932,"code":138342,"language":128934,"meta":57,"style":57},[59,143699,143700],{"__ignoreMap":57},[79,143701,143702,143704,143706,143708,143710,143712,143714,143716,143718,143720,143722,143724],{"class":81,"line":82},[79,143703,229],{"class":228},[79,143705,55812],{"class":232},[79,143707,245],{"class":85},[79,143709,239],{"class":228},[79,143711,64687],{"class":89},[79,143713,236],{"class":85},[79,143715,239],{"class":228},[79,143717,138363],{"class":89},[79,143719,63009],{"class":85},[79,143721,239],{"class":228},[79,143723,138370],{"class":89},[79,143725,53301],{"class":228},[26,143727,143728,143731],{"start":568},[29,143729,143730],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[29,143732,143733],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[2159,143735,143736],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":57,"searchDepth":167,"depth":167,"links":143738},[143739,143744,143751,143759],{"id":141365,"depth":167,"text":141366,"children":143740},[143741,143742,143743],{"id":141369,"depth":178,"text":141370},{"id":142100,"depth":178,"text":142101},{"id":142413,"depth":178,"text":142414},{"id":142713,"depth":167,"text":142714,"children":143745},[143746,143747,143749],{"id":142717,"depth":178,"text":142718},{"id":142735,"depth":178,"text":143748},"16.2.2 列表页 header 和 nav 修改",{"id":143019,"depth":178,"text":143750},"16.2.3 列表页主体 sk_container",{"id":143211,"depth":167,"text":143212,"children":143752},[143753,143754,143756,143758],{"id":143226,"depth":178,"text":143227},{"id":143238,"depth":178,"text":143755},"16.3.2 header 头部实现",{"id":143317,"depth":178,"text":143757},"16.3.3 registerarea 主体模块实现",{"id":143595,"depth":178,"text":143596},{"id":143661,"depth":167,"text":143662},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":141357,"description":25402},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":143766,"title":143767,"body":143768,"description":25402,"extension":2186,"meta":143876,"navigation":541,"path":143877,"seo":143878,"stem":143879,"__hash__":143880},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":143769,"toc":143871},[143770,143773,143777,143780,143783,143792,143801,143805,143810,143817,143835,143838,143841,143844,143847,143850,143853,143856,143859,143862,143865,143868],[10,143771,143767],{"id":143772},"_17-web服务器与网站发布",[14,143774,143776],{"id":143775},"_171-web服务器","17.1 Web服务器",[19,143778,143779],{},"把自己网站上传到服务器上，可以让其他人访问",[3569,143781],{"style":128041,"src":143782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,143784,143785,143788,143789],{},[2398,143786,143787],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[2398,143790,143791],{},"Web 服务器等",[19,143793,143794,143795,1748,143798,27759],{},"根据服务器在网络中所在的位置不同，又可分为 ",[2398,143796,143797],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[2398,143799,143800],{},"远程服务器",[339,143802,143804],{"id":143803},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,143806,143807],{},[2398,143808,143809],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,143811,143812,143813],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[2482,143814,143815],{"href":143815,"rel":143816},"http:\u002F\u002Ffree.3v.do\u002F",[25885],[3246,143818,143819,143822,143825,143832],{},[29,143820,143821],{},"去免费空间网站注册账号。",[29,143823,143824],{},"记录下主机名、用户名、密码、域名。",[29,143826,143827,143828,143831],{},"利用 ",[59,143829,143830],{},"utftp"," 软件 上传网站到远程服务器",[29,143833,143834],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,143836,143837],{},"使用软件上传，对上传软件文件进行解压",[3569,143839],{"style":128041,"src":143840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[3569,143842],{"style":128041,"src":143843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,143845,143846],{},"输入刚刚申请的服务器账号信息：",[3569,143848],{"style":128041,"src":143849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[3569,143851],{"style":128041,"src":143852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[3569,143854],{"style":128041,"src":143855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[3569,143857],{"style":128041,"src":143858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,143860,143861],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[3569,143863],{"style":128041,"src":143864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,143866,143867],{},"浏览器输入域名即可访问",[19,143869,143870],{},"首页一定必须是index",{"title":57,"searchDepth":167,"depth":167,"links":143872},[143873],{"id":143775,"depth":167,"text":143776,"children":143874},[143875],{"id":143803,"depth":178,"text":143804},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":143767,"description":25402},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":143882,"title":143883,"body":143884,"description":25402,"extension":2186,"meta":144811,"navigation":541,"path":144812,"seo":144813,"stem":144814,"__hash__":144815},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":143885,"toc":144794},[143886,143889,143893,143896,143899,143910,143913,143917,143921,143926,143929,143932,143935,143938,143942,143968,143972,143976,143979,143982,143986,144019,144023,144026,144029,144093,144097,144101,144104,144107,144110,144114,144159,144163,144166,144196,144200,144204,144207,144210,144214,144217,144286,144289,144397,144399,144405,144409,144412,144415,144511,144514,144518,144542,144546,144549,144553,144556,144560,144563,144566,144569,144572,144576,144579,144582,144586,144590,144593,144596,144599,144602,144606,144609,144613,144616,144619,144664,144668,144672,144675,144678,144681,144713,144717,144720,144754,144758,144761,144791],[10,143887,143883],{"id":143888},"_18-2d动画与3d转换",[14,143890,143892],{"id":143891},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,143894,143895],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,143897,143898],{},"转换（transform）你可以简单理解为变形",[3246,143900,143901,143904,143907],{},[29,143902,143903],{},"移动：translate",[29,143905,143906],{},"旋转：rotate",[29,143908,143909],{},"缩放：scale",[3569,143911],{"style":128041,"src":143912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[339,143914,143916],{"id":143915},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[24023,143918,143920],{"id":143919},"_18111-translate介绍","18.1.1.1 translate介绍",[19,143922,143923,143924],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[2398,143925,134844],{},[3569,143927],{"style":128041,"src":143928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,143930,143931],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,143933,143934],{},"对于行内元素无效",[19,143936,143937],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[24023,143939,143941],{"id":143940},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[51,143943,143944],{"className":128185,"code":140374,"language":128187,"meta":57,"style":57},[59,143945,143946,143952,143964],{"__ignoreMap":57},[79,143947,143948,143950],{"class":81,"line":82},[79,143949,53605],{"class":232},[79,143951,17604],{"class":228},[79,143953,143954,143956,143958,143960,143962],{"class":81,"line":167},[79,143955,72458],{"class":96},[79,143957,53431],{"class":228},[79,143959,759],{"class":96},[79,143961,53550],{"class":96},[79,143963,3400],{"class":228},[79,143965,143966],{"class":81,"line":178},[79,143967,3671],{"class":228},[339,143969,143971],{"id":143970},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[24023,143973,143975],{"id":143974},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,143977,143978],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[3569,143980],{"style":128041,"src":143981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[24023,143983,143985],{"id":143984},"_18122-旋转效果","18.1.2.2 旋转效果",[51,143987,143989],{"className":128185,"code":143988,"language":128187,"meta":57,"style":57},"div {\n  transform: rotate(45deg);\n}\n",[59,143990,143991,143997,144015],{"__ignoreMap":57},[79,143992,143993,143995],{"class":81,"line":82},[79,143994,53605],{"class":232},[79,143996,17604],{"class":228},[79,143998,143999,144001,144003,144006,144008,144010,144013],{"class":81,"line":167},[79,144000,138169],{"class":96},[79,144002,53431],{"class":228},[79,144004,144005],{"class":96},"rotate",[79,144007,455],{"class":228},[79,144009,2770],{"class":96},[79,144011,144012],{"class":448},"deg",[79,144014,4795],{"class":228},[79,144016,144017],{"class":81,"line":178},[79,144018,3671],{"class":228},[24023,144020,144022],{"id":144021},"_18123-三角做法","18.1.2.3 三角做法",[19,144024,144025],{},"该下标当经过最外层大盒子时会实现向上反转",[3569,144027],{"style":128041,"src":144028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[51,144030,144031],{"className":128185,"code":136705,"language":128187,"meta":57,"style":57},[59,144032,144033,144037,144043,144053,144063,144079,144089],{"__ignoreMap":57},[79,144034,144035],{"class":81,"line":82},[79,144036,136712],{"class":2313},[79,144038,144039,144041],{"class":81,"line":167},[79,144040,136717],{"class":85},[79,144042,17604],{"class":228},[79,144044,144045,144047,144049,144051],{"class":81,"line":178},[79,144046,72556],{"class":96},[79,144048,53431],{"class":228},[79,144050,759],{"class":96},[79,144052,3400],{"class":228},[79,144054,144055,144057,144059,144061],{"class":81,"line":545},[79,144056,72776],{"class":96},[79,144058,53431],{"class":228},[79,144060,759],{"class":96},[79,144062,3400],{"class":228},[79,144064,144065,144067,144069,144071,144073,144075,144077],{"class":81,"line":550},[79,144066,72884],{"class":96},[79,144068,53431],{"class":228},[79,144070,2689],{"class":96},[79,144072,53486],{"class":448},[79,144074,53515],{"class":96},[79,144076,65979],{"class":96},[79,144078,3400],{"class":228},[79,144080,144081,144083,144085,144087],{"class":81,"line":562},[79,144082,136760],{"class":96},[79,144084,53431],{"class":228},[79,144086,64357],{"class":96},[79,144088,3400],{"class":228},[79,144090,144091],{"class":81,"line":568},[79,144092,3671],{"class":228},[339,144094,144096],{"id":144095},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[24023,144098,144100],{"id":144099},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,144102,144103],{},"设置中心点",[3569,144105],{"style":128041,"src":144106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,144108,144109],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[24023,144111,144113],{"id":144112},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[51,144115,144117],{"className":128185,"code":144116,"language":128187,"meta":57,"style":57},"\u002F* 转换中心点 *\u002F\ndiv {\n  transform-origin: center center;  \u002F* 默认 *\u002F\n  \u002F* transform-origin: 50% 50%; *\u002F\n  \u002F* transform-origin: left top; *\u002F\n}\n",[59,144118,144119,144124,144130,144145,144150,144155],{"__ignoreMap":57},[79,144120,144121],{"class":81,"line":82},[79,144122,144123],{"class":2313},"\u002F* 转换中心点 *\u002F\n",[79,144125,144126,144128],{"class":81,"line":167},[79,144127,53605],{"class":232},[79,144129,17604],{"class":228},[79,144131,144132,144135,144137,144139,144141,144143],{"class":81,"line":178},[79,144133,144134],{"class":96},"  transform-origin",[79,144136,53431],{"class":228},[79,144138,53586],{"class":96},[79,144140,19169],{"class":96},[79,144142,132048],{"class":228},[79,144144,136858],{"class":2313},[79,144146,144147],{"class":81,"line":545},[79,144148,144149],{"class":2313},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[79,144151,144152],{"class":81,"line":550},[79,144153,144154],{"class":2313},"  \u002F* transform-origin: left top; *\u002F\n",[79,144156,144157],{"class":81,"line":562},[79,144158,3671],{"class":228},[24023,144160,144162],{"id":144161},"_18133-旋转案例","18.1.3.3 旋转案例",[3569,144164],{"style":128041,"src":144165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[51,144167,144168],{"className":128185,"code":143988,"language":128187,"meta":57,"style":57},[59,144169,144170,144176,144192],{"__ignoreMap":57},[79,144171,144172,144174],{"class":81,"line":82},[79,144173,53605],{"class":232},[79,144175,17604],{"class":228},[79,144177,144178,144180,144182,144184,144186,144188,144190],{"class":81,"line":167},[79,144179,138169],{"class":96},[79,144181,53431],{"class":228},[79,144183,144005],{"class":96},[79,144185,455],{"class":228},[79,144187,2770],{"class":96},[79,144189,144012],{"class":448},[79,144191,4795],{"class":228},[79,144193,144194],{"class":81,"line":178},[79,144195,3671],{"class":228},[339,144197,144199],{"id":144198},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[24023,144201,144203],{"id":144202},"_18141-scale介绍","18.1.4.1 scale介绍",[19,144205,144206],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[3569,144208],{"style":128041,"src":144209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[24023,144211,144213],{"id":144212},"_18142-分页按钮","18.1.4.2 分页按钮",[3569,144215],{"style":128041,"src":144216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[51,144218,144220],{"className":128185,"code":144219,"language":128187,"meta":57,"style":57},"div {\n  transform: scale(1.2);\n}\n```Css\n\u002F* 2D 缩放 *\u002F\ndiv {\n  transform: scale(1.2);\n  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n}\n",[59,144221,144222,144228,144244,144248,144252,144257,144263,144277,144282],{"__ignoreMap":57},[79,144223,144224,144226],{"class":81,"line":82},[79,144225,53605],{"class":232},[79,144227,17604],{"class":228},[79,144229,144230,144232,144234,144237,144239,144242],{"class":81,"line":167},[79,144231,138169],{"class":96},[79,144233,53431],{"class":228},[79,144235,144236],{"class":96},"scale",[79,144238,455],{"class":228},[79,144240,144241],{"class":96},"1.2",[79,144243,4795],{"class":228},[79,144245,144246],{"class":81,"line":178},[79,144247,3671],{"class":228},[79,144249,144250],{"class":81,"line":545},[79,144251,137646],{"class":228},[79,144253,144254],{"class":81,"line":550},[79,144255,144256],{"class":2313},"\u002F* 2D 缩放 *\u002F\n",[79,144258,144259,144261],{"class":81,"line":562},[79,144260,53605],{"class":232},[79,144262,17604],{"class":228},[79,144264,144265,144267,144269,144271,144273,144275],{"class":81,"line":568},[79,144266,138169],{"class":96},[79,144268,53431],{"class":228},[79,144270,144236],{"class":96},[79,144272,455],{"class":228},[79,144274,144241],{"class":96},[79,144276,4795],{"class":228},[79,144278,144279],{"class":81,"line":574},[79,144280,144281],{"class":2313},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[79,144283,144284],{"class":81,"line":579},[79,144285,3671],{"class":228},[19,144287,144288],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[51,144290,144292],{"className":128185,"code":144291,"language":128187,"meta":57,"style":57},"\u002F* 定义动画 *\u002F\n@keyframes move {\n  0% { transform: translateX(0); }\n  100% { transform: translateX(100px); }\n}\n\u002F* 调用动画 *\u002F\ndiv {\n  animation: move 1s ease 0s infinite alternate;\n}\n",[59,144293,144294,144299,144309,144330,144351,144355,144360,144366,144393],{"__ignoreMap":57},[79,144295,144296],{"class":81,"line":82},[79,144297,144298],{"class":2313},"\u002F* 定义动画 *\u002F\n",[79,144300,144301,144304,144307],{"class":81,"line":167},[79,144302,144303],{"class":448},"@keyframes",[79,144305,144306],{"class":7284}," move",[79,144308,17604],{"class":228},[79,144310,144311,144314,144316,144318,144320,144323,144325,144327],{"class":81,"line":178},[79,144312,144313],{"class":85},"  0%",[79,144315,81795],{"class":228},[79,144317,50129],{"class":96},[79,144319,53431],{"class":228},[79,144321,144322],{"class":96},"translateX",[79,144324,455],{"class":228},[79,144326,759],{"class":96},[79,144328,144329],{"class":228},"); }\n",[79,144331,144332,144335,144337,144339,144341,144343,144345,144347,144349],{"class":81,"line":545},[79,144333,144334],{"class":85},"  100%",[79,144336,81795],{"class":228},[79,144338,50129],{"class":96},[79,144340,53431],{"class":228},[79,144342,144322],{"class":96},[79,144344,455],{"class":228},[79,144346,2555],{"class":96},[79,144348,53486],{"class":448},[79,144350,144329],{"class":228},[79,144352,144353],{"class":81,"line":550},[79,144354,3671],{"class":228},[79,144356,144357],{"class":81,"line":562},[79,144358,144359],{"class":2313},"\u002F* 调用动画 *\u002F\n",[79,144361,144362,144364],{"class":81,"line":568},[79,144363,53605],{"class":232},[79,144365,17604],{"class":228},[79,144367,144368,144371,144373,144375,144377,144379,144381,144383,144385,144388,144391],{"class":81,"line":574},[79,144369,144370],{"class":96},"  animation",[79,144372,53431],{"class":228},[79,144374,136871],{"class":96},[79,144376,27137],{"class":96},[79,144378,2935],{"class":448},[79,144380,80668],{"class":96},[79,144382,1103],{"class":96},[79,144384,2935],{"class":448},[79,144386,144387],{"class":96}," infinite",[79,144389,144390],{"class":96}," alternate",[79,144392,3400],{"class":228},[79,144394,144395],{"class":81,"line":579},[79,144396,3671],{"class":228},[19,144398,144288],{},[51,144400,144403],{"className":144401,"code":144402,"language":56},[54],"\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-200.png\">\n\n#### 18.2.1.5 动画简写\n\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-201.png\">\n\nname,duration这两个属性必须写！\n\n### 18.2.2 案例\n\n#### 18.2.2.1 热点图\n\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-202.png\">\n\n```Css\n@keyframes slide {\n  from { transform: translateX(0); }\n  to { transform: translateX(100px); }\n}\ndiv {\n  animation: slide 1s ease infinite;\n}\n",[59,144404,144402],{"__ignoreMap":57},[24023,144406,144408],{"id":144407},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,144410,144411],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[3569,144413],{"style":128041,"src":144414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[51,144416,144417],{"className":128185,"code":144291,"language":128187,"meta":57,"style":57},[59,144418,144419,144423,144431,144449,144469,144473,144477,144483,144507],{"__ignoreMap":57},[79,144420,144421],{"class":81,"line":82},[79,144422,144298],{"class":2313},[79,144424,144425,144427,144429],{"class":81,"line":167},[79,144426,144303],{"class":448},[79,144428,144306],{"class":7284},[79,144430,17604],{"class":228},[79,144432,144433,144435,144437,144439,144441,144443,144445,144447],{"class":81,"line":178},[79,144434,144313],{"class":85},[79,144436,81795],{"class":228},[79,144438,50129],{"class":96},[79,144440,53431],{"class":228},[79,144442,144322],{"class":96},[79,144444,455],{"class":228},[79,144446,759],{"class":96},[79,144448,144329],{"class":228},[79,144450,144451,144453,144455,144457,144459,144461,144463,144465,144467],{"class":81,"line":545},[79,144452,144334],{"class":85},[79,144454,81795],{"class":228},[79,144456,50129],{"class":96},[79,144458,53431],{"class":228},[79,144460,144322],{"class":96},[79,144462,455],{"class":228},[79,144464,2555],{"class":96},[79,144466,53486],{"class":448},[79,144468,144329],{"class":228},[79,144470,144471],{"class":81,"line":550},[79,144472,3671],{"class":228},[79,144474,144475],{"class":81,"line":562},[79,144476,144359],{"class":2313},[79,144478,144479,144481],{"class":81,"line":568},[79,144480,53605],{"class":232},[79,144482,17604],{"class":228},[79,144484,144485,144487,144489,144491,144493,144495,144497,144499,144501,144503,144505],{"class":81,"line":574},[79,144486,144370],{"class":96},[79,144488,53431],{"class":228},[79,144490,136871],{"class":96},[79,144492,27137],{"class":96},[79,144494,2935],{"class":448},[79,144496,80668],{"class":96},[79,144498,1103],{"class":96},[79,144500,2935],{"class":448},[79,144502,144387],{"class":96},[79,144504,144390],{"class":96},[79,144506,3400],{"class":228},[79,144508,144509],{"class":81,"line":579},[79,144510,3671],{"class":228},[19,144512,144513],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[339,144515,144517],{"id":144516},"_1823-知识点回顾","18.2.3 知识点回顾",[51,144519,144520],{"className":128185,"code":130354,"language":128187,"meta":57,"style":57},[59,144521,144522,144528,144538],{"__ignoreMap":57},[79,144523,144524,144526],{"class":81,"line":82},[79,144525,53605],{"class":232},[79,144527,17604],{"class":228},[79,144529,144530,144532,144534,144536],{"class":81,"line":167},[79,144531,130367],{"class":96},[79,144533,53431],{"class":228},[79,144535,63725],{"class":96},[79,144537,3400],{"class":228},[79,144539,144540],{"class":81,"line":178},[79,144541,3671],{"class":228},[14,144543,144545],{"id":144544},"_183-3d-转换","18.3 3D 转换",[19,144547,144548],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[339,144550,144552],{"id":144551},"_1831-坐标轴认识","18.3.1 坐标轴认识",[3569,144554],{"style":128041,"src":144555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[339,144557,144559],{"id":144558},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[3569,144561],{"style":128041,"src":144562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,144564,144565],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,144567,144568],{},"translate3d的效果需要搭配透视perspective来使用",[3569,144570],{"style":128041,"src":144571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[339,144573,144575],{"id":144574},"_1833-透视-perspective","18.3.3 透视 perspective",[3569,144577],{"style":128041,"src":144578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,144580,144581],{},"透视写在父盒子上，单位为像素",[339,144583,144585],{"id":144584},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[24023,144587,144589],{"id":144588},"_18341-分开解释","18.3.4.1 分开解释",[3569,144591],{"style":128041,"src":144592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[3569,144594],{"style":128041,"src":144595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[3569,144597],{"style":128041,"src":144598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,144600,144601],{},"总结来说就是左手原则",[24023,144603,144605],{"id":144604},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[3569,144607],{"style":128041,"src":144608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[339,144610,144612],{"id":144611},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[3569,144614],{"style":128041,"src":144615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[3569,144617],{"style":128041,"src":144618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[51,144620,144622],{"className":128185,"code":144621,"language":128187,"meta":57,"style":57},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[59,144623,144624,144630,144643,144660],{"__ignoreMap":57},[79,144625,144626,144628],{"class":81,"line":82},[79,144627,53605],{"class":232},[79,144629,17604],{"class":228},[79,144631,144632,144635,144637,144639,144641],{"class":81,"line":167},[79,144633,144634],{"class":96},"  perspective",[79,144636,53431],{"class":228},[79,144638,67062],{"class":96},[79,144640,53486],{"class":448},[79,144642,3400],{"class":228},[79,144644,144645,144647,144649,144652,144654,144656,144658],{"class":81,"line":178},[79,144646,138169],{"class":96},[79,144648,53431],{"class":228},[79,144650,144651],{"class":96},"rotateX",[79,144653,455],{"class":228},[79,144655,2770],{"class":96},[79,144657,144012],{"class":448},[79,144659,4795],{"class":228},[79,144661,144662],{"class":81,"line":545},[79,144663,3671],{"class":228},[339,144665,144667],{"id":144666},"_1836-案例","18.3.6 案例",[24023,144669,144671],{"id":144670},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[3569,144673],{"style":128041,"src":144674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[3569,144676],{"style":128041,"src":144677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[3569,144679],{"style":128041,"src":144680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[51,144682,144684],{"className":128185,"code":144683,"language":128187,"meta":57,"style":57},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[59,144685,144686,144691,144697,144709],{"__ignoreMap":57},[79,144687,144688],{"class":81,"line":82},[79,144689,144690],{"class":2313},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[79,144692,144693,144695],{"class":81,"line":167},[79,144694,135182],{"class":85},[79,144696,17604],{"class":228},[79,144698,144699,144701,144703,144705,144707],{"class":81,"line":178},[79,144700,144634],{"class":96},[79,144702,53431],{"class":228},[79,144704,67062],{"class":96},[79,144706,53486],{"class":448},[79,144708,3400],{"class":228},[79,144710,144711],{"class":81,"line":545},[79,144712,3671],{"class":228},[24023,144714,144716],{"id":144715},"_18362-3d导航栏","18.3.6.2 3D导航栏",[3569,144718],{"style":128041,"src":144719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[51,144721,144722],{"className":128932,"code":132289,"language":128934,"meta":57,"style":57},[59,144723,144724,144728,144742,144746],{"__ignoreMap":57},[79,144725,144726],{"class":81,"line":82},[79,144727,132296],{"class":2313},[79,144729,144730,144732,144734,144736,144738,144740],{"class":81,"line":167},[79,144731,229],{"class":228},[79,144733,53605],{"class":232},[79,144735,55477],{"class":85},[79,144737,239],{"class":228},[79,144739,132309],{"class":89},[79,144741,53301],{"class":228},[79,144743,144744],{"class":81,"line":178},[79,144745,132316],{"class":228},[79,144747,144748,144750,144752],{"class":81,"line":545},[79,144749,53779],{"class":228},[79,144751,53605],{"class":232},[79,144753,53301],{"class":228},[24023,144755,144757],{"id":144756},"_18363-旋转木马","18.3.6.3 旋转木马",[3569,144759],{"style":128041,"src":144760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[51,144762,144763],{"className":128185,"code":143988,"language":128187,"meta":57,"style":57},[59,144764,144765,144771,144787],{"__ignoreMap":57},[79,144766,144767,144769],{"class":81,"line":82},[79,144768,53605],{"class":232},[79,144770,17604],{"class":228},[79,144772,144773,144775,144777,144779,144781,144783,144785],{"class":81,"line":167},[79,144774,138169],{"class":96},[79,144776,53431],{"class":228},[79,144778,144005],{"class":96},[79,144780,455],{"class":228},[79,144782,2770],{"class":96},[79,144784,144012],{"class":448},[79,144786,4795],{"class":228},[79,144788,144789],{"class":81,"line":178},[79,144790,3671],{"class":228},[2159,144792,144793],{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":57,"searchDepth":167,"depth":167,"links":144795},[144796,144803],{"id":143891,"depth":167,"text":143892,"children":144797},[144798,144799,144800,144801,144802],{"id":143915,"depth":178,"text":143916},{"id":143970,"depth":178,"text":143971},{"id":144095,"depth":178,"text":144096},{"id":144198,"depth":178,"text":144199},{"id":144516,"depth":178,"text":144517},{"id":144544,"depth":167,"text":144545,"children":144804},[144805,144806,144807,144808,144809,144810],{"id":144551,"depth":178,"text":144552},{"id":144558,"depth":178,"text":144559},{"id":144574,"depth":178,"text":144575},{"id":144584,"depth":178,"text":144585},{"id":144611,"depth":178,"text":144612},{"id":144666,"depth":178,"text":144667},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":143883,"description":25402},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":144817,"title":144818,"body":144819,"description":25402,"extension":2186,"meta":145022,"navigation":541,"path":145023,"seo":145024,"stem":145025,"__hash__":145026},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":144820,"toc":145011},[144821,144824,144828,144831,144834,144838,144841,144844,144847,144851,144854,144858,144861,144865,144868,144872,144886,144890,144915,144918,144921,144938,144942,144946,144949,144952,144956,144959,144962,144980,144984,144987,145001,145005,145008],[10,144822,144818],{"id":144823},"_19-移动端基础-前缀现状与视口",[14,144825,144827],{"id":144826},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[3569,144829],{"style":128041,"src":144830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,144832,144833],{},"意思就是加个前缀，增加兼容性",[14,144835,144837],{"id":144836},"_192-移动端现状认识","19.2 移动端现状认识",[3569,144839],{"style":128041,"src":144840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,144842,144843],{},"调试方法：",[3569,144845],{"style":128041,"src":144846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,144848,144850],{"id":144849},"_193-视口","19.3 视口",[19,144852,144853],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[339,144855,144857],{"id":144856},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[3569,144859],{"style":128041,"src":144860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[339,144862,144864],{"id":144863},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[3569,144866],{"style":128041,"src":144867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[339,144869,144871],{"id":144870},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[3246,144873,144874,144877,144880,144883],{},[29,144875,144876],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[29,144878,144879],{},"理想视口，对设备来讲，是最理想的视口尺寸",[29,144881,144882],{},"需要手动添写meta视口标签通知浏览器操作",[29,144884,144885],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[339,144887,144889],{"id":144888},"_1934-meta视口标签","19.3.4 meta视口标签",[51,144891,144893],{"className":128932,"code":144892,"language":128934,"meta":57,"style":57},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[59,144894,144895],{"__ignoreMap":57},[79,144896,144897,144899,144901,144903,144905,144907,144909,144911,144913],{"class":81,"line":82},[79,144898,229],{"class":228},[79,144900,53338],{"class":232},[79,144902,236],{"class":85},[79,144904,239],{"class":228},[79,144906,53385],{"class":89},[79,144908,53365],{"class":85},[79,144910,239],{"class":228},[79,144912,53392],{"class":89},[79,144914,53301],{"class":228},[3569,144916],{"style":128041,"src":144917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,144919,144920],{},"标准视口设置：",[26,144922,144923,144926,144929,144932,144935],{},[29,144924,144925],{},"视口宽度和设备保持一致",[29,144927,144928],{},"视口的默认缩放比例1.0",[29,144930,144931],{},"不允许用户自行缩放",[29,144933,144934],{},"最大允许的缩放比例1.0",[29,144936,144937],{},"最小允许的缩放比例1.0",[339,144939,144941],{"id":144940},"_1935-二倍图","19.3.5 二倍图",[24023,144943,144945],{"id":144944},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[3569,144947],{"style":128041,"src":144948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[3569,144950],{"style":128041,"src":144951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[24023,144953,144955],{"id":144954},"_19352-多倍图","19.3.5.2 多倍图",[3569,144957],{"style":128041,"src":144958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,144960,144961],{},"二倍图法，代码如下：",[51,144963,144965],{"className":128185,"code":144964,"language":128187,"meta":57,"style":57},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[59,144966,144967,144972],{"__ignoreMap":57},[79,144968,144969],{"class":81,"line":82},[79,144970,144971],{"class":2313},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[79,144973,144974,144977],{"class":81,"line":167},[79,144975,144976],{"class":232},"background-size",[79,144978,144979],{"class":228},": 50% 50%;\n",[24023,144981,144983],{"id":144982},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[3569,144985],{"style":128041,"src":144986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[26,144988,144989,144992,144995,144998],{},[29,144990,144991],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[29,144993,144994],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[29,144996,144997],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[29,144999,145000],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[24023,145002,145004],{"id":145003},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[3569,145006],{"style":128041,"src":145007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[2159,145009,145010],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":57,"searchDepth":167,"depth":167,"links":145012},[145013,145014,145015],{"id":144826,"depth":167,"text":144827},{"id":144836,"depth":167,"text":144837},{"id":144849,"depth":167,"text":144850,"children":145016},[145017,145018,145019,145020,145021],{"id":144856,"depth":178,"text":144857},{"id":144863,"depth":178,"text":144864},{"id":144870,"depth":178,"text":144871},{"id":144888,"depth":178,"text":144889},{"id":144940,"depth":178,"text":144941},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":144818,"description":25402},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":145028,"title":145029,"body":145030,"description":25402,"extension":2186,"meta":145907,"navigation":541,"path":145908,"seo":145909,"stem":145910,"__hash__":145911},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":145031,"toc":145891},[145032,145035,145039,145046,145049,145056,145059,145064,145067,145071,145075,145082,145085,145088,145092,145095,145098,145101,145104,145107,145111,145114,145118,145120,145123,145126,145129,145132,145134,145137,145139,145169,145171,145201,145205,145208,145212,145215,145232,145235,145238,145314,145316,145319,145322,145325,145328,145330,145333,145336,145340,145362,145365,145368,145372,145375,145381,145384,145388,145391,145394,145398,145401,145404,145407,145411,145414,145417,145420,145423,145427,145430,145434,145441,145444,145447,145450,145453,145463,145466,145469,145476,145479,145483,145486,145489,145493,145496,145499,145502,145547,145550,145553,145556,145558,145687,145689,145727,145730,145733,145735,145853,145855,145889],[10,145033,145029],{"id":145034},"_20-移动端布局实战上篇",[14,145036,145038],{"id":145037},"_201-移动端主流方案","20.1 移动端主流方案",[26,145040,145041],{},[29,145042,145043],{},[2398,145044,145045],{},"单独移动端页面（主流）",[3569,145047],{"style":128041,"src":145048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[26,145050,145051],{"start":167},[29,145052,145053],{},[2398,145054,145055],{},"响应式兼容PC移动端",[3569,145057],{"style":128041,"src":145058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[26,145060,145061],{"start":178},[29,145062,145063],{},"两种页面选型布局方式",[3569,145065],{"style":128041,"src":145066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,145068,145070],{"id":145069},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[339,145072,145074],{"id":145073},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,145076,145077,145078],{},"官网地址： ",[2482,145079,145080],{"href":145080,"rel":145081},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[25885],[3569,145083],{"style":128041,"src":145084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[3569,145086],{"style":128041,"src":145087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[339,145089,145091],{"id":145090},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[3569,145093],{"style":128041,"src":145094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[3569,145096],{"style":128041,"src":145097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,145099,145100],{},"去除高亮：",[19,145102,145103],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,145105,145106],{},"-webkit- tap-highlight-color: transparent;",[14,145108,145110],{"id":145109},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[3569,145112],{"style":128041,"src":145113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,145115,145117],{"id":145116},"_204-流式布局案例","20.4 流式布局案例",[19,145119,2287],{},[19,145121,145122],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,145124,145125],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,145127,145128],{},"图片格式：",[3569,145130],{"style":128041,"src":145131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,145133,137228],{},[3569,145135],{"style":128041,"src":145136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,145138,141555],{},[51,145140,145141],{"className":128932,"code":135687,"language":128934,"meta":57,"style":57},[59,145142,145143],{"__ignoreMap":57},[79,145144,145145,145147,145149,145151,145153,145155,145157,145159,145161,145163,145165,145167],{"class":81,"line":82},[79,145146,229],{"class":228},[79,145148,3569],{"class":232},[79,145150,57228],{"class":85},[79,145152,239],{"class":228},[79,145154,135702],{"class":89},[79,145156,57236],{"class":85},[79,145158,239],{"class":228},[79,145160,135709],{"class":89},[79,145162,135712],{"class":85},[79,145164,239],{"class":228},[79,145166,135717],{"class":89},[79,145168,53301],{"class":228},[19,145170,141644],{},[51,145172,145173],{"className":128932,"code":135687,"language":128934,"meta":57,"style":57},[59,145174,145175],{"__ignoreMap":57},[79,145176,145177,145179,145181,145183,145185,145187,145189,145191,145193,145195,145197,145199],{"class":81,"line":82},[79,145178,229],{"class":228},[79,145180,3569],{"class":232},[79,145182,57228],{"class":85},[79,145184,239],{"class":228},[79,145186,135702],{"class":89},[79,145188,57236],{"class":85},[79,145190,239],{"class":228},[79,145192,135709],{"class":89},[79,145194,135712],{"class":85},[79,145196,239],{"class":228},[79,145198,135717],{"class":89},[79,145200,53301],{"class":228},[14,145202,145204],{"id":145203},"_205-flex布局","20.5 flex布局",[3569,145206],{"style":128041,"src":145207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[339,145209,145211],{"id":145210},"_2051-布局原理","20.5.1 布局原理",[19,145213,145214],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[3246,145216,145217,145220,145223,145226,145229],{},[29,145218,145219],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[29,145221,145222],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[29,145224,145225],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[29,145227,145228],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[29,145230,145231],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,145233,145234],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,145236,145237],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[51,145239,145241],{"className":128185,"code":145240,"language":128187,"meta":57,"style":57},"\u002F* Flex 弹性布局 *\u002F\n.container {\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  align-items: center;\n  flex-wrap: wrap;\n}\n",[59,145242,145243,145248,145255,145265,145277,145288,145299,145310],{"__ignoreMap":57},[79,145244,145245],{"class":81,"line":82},[79,145246,145247],{"class":2313},"\u002F* Flex 弹性布局 *\u002F\n",[79,145249,145250,145253],{"class":81,"line":167},[79,145251,145252],{"class":85},".container",[79,145254,17604],{"class":228},[79,145256,145257,145259,145261,145263],{"class":81,"line":178},[79,145258,129801],{"class":96},[79,145260,53431],{"class":228},[79,145262,53471],{"class":96},[79,145264,3400],{"class":228},[79,145266,145267,145270,145272,145275],{"class":81,"line":545},[79,145268,145269],{"class":96},"  flex-direction",[79,145271,53431],{"class":228},[79,145273,145274],{"class":96},"row",[79,145276,3400],{"class":228},[79,145278,145279,145282,145284,145286],{"class":81,"line":550},[79,145280,145281],{"class":96},"  justify-content",[79,145283,53431],{"class":228},[79,145285,53662],{"class":96},[79,145287,3400],{"class":228},[79,145289,145290,145293,145295,145297],{"class":81,"line":562},[79,145291,145292],{"class":96},"  align-items",[79,145294,53431],{"class":228},[79,145296,53586],{"class":96},[79,145298,3400],{"class":228},[79,145300,145301,145304,145306,145308],{"class":81,"line":568},[79,145302,145303],{"class":96},"  flex-wrap",[79,145305,53431],{"class":228},[79,145307,80598],{"class":96},[79,145309,3400],{"class":228},[79,145311,145312],{"class":81,"line":574},[79,145313,3671],{"class":228},[19,145315,72441],{},[19,145317,145318],{},".form-item .male-label {",[19,145320,145321],{},"   margin-right: 20px;",[19,145323,145324],{},"   display: inline-flex;",[19,145326,145327],{},"   align-items: center;",[19,145329,3185],{},[3569,145331],{"style":128041,"src":145332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[3569,145334],{"style":128041,"src":145335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[339,145337,145339],{"id":145338},"_2052-常见父项属性","20.5.2 常见父项属性",[26,145341,145342,145345,145348,145351,145354,145357,145360],{},[29,145343,145344],{},"flex-direction：设置主轴的方向",[29,145346,145347],{},"justify-content：设置主轴上的子元素排列方式",[29,145349,145350],{},"flex-wrap：设置子元素是否换行",[29,145352,145353],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[29,145355,145356],{},"align-items：设置侧轴上的子元素排列方式（单行）",[29,145358,145359],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[29,145361,145344],{},[3569,145363],{"style":128041,"src":145364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[3569,145366],{"style":128041,"src":145367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[26,145369,145370],{"start":167},[29,145371,145347],{},[3569,145373],{"style":128041,"src":145374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,145376,145377,145380],{},[59,145378,145379],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,145382,145383],{},"跟着主轴走",[26,145385,145386],{"start":178},[29,145387,145350],{},[3569,145389],{"style":128041,"src":145390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,145392,145393],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[26,145395,145396],{"start":545},[29,145397,145353],{},[3569,145399],{"style":128041,"src":145400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,145402,145403],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,145405,145406],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[26,145408,145409],{"start":550},[29,145410,145356],{},[3569,145412],{"style":128041,"src":145413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,145415,145416],{},"align-items与align-content之间的区别：",[19,145418,145419],{},"单找items，多找content",[3569,145421],{"style":128041,"src":145422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[26,145424,145425],{"start":562},[29,145426,145359],{},[3569,145428],{"style":128041,"src":145429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[339,145431,145433],{"id":145432},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[26,145435,145436],{},[29,145437,145438],{},[2398,145439,145440],{},"flex 属性",[19,145442,145443],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[3569,145445],{"style":128041,"src":145446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,145448,145449],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,145451,145452],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[26,145454,145455],{"start":167},[29,145456,145457,15828,145460],{},[2398,145458,145459],{},"align-self",[2398,145461,145462],{},"控制子项自己在侧轴上的排列方式",[3569,145464],{"style":128041,"src":145465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,145467,145468],{},"单个子盒子在父盒子侧轴上的排列方式",[26,145470,145471],{"start":178},[29,145472,145473,145475],{},[2398,145474,97284],{}," 属性定义项目的排列顺序",[3569,145477],{"style":128041,"src":145478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[339,145480,145482],{"id":145481},"_2054-背景线性渐变","20.5.4 背景线性渐变",[3569,145484],{"style":128041,"src":145485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,145487,145488],{},"必须要添加浏览器的私有前缀",[339,145490,145492],{"id":145491},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,145494,145495],{},"学到最重要的知识：",[19,145497,145498],{},"flex处理这样的布局思路",[3569,145500],{"style":128041,"src":145501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[51,145503,145505],{"className":128185,"code":145504,"language":128187,"meta":57,"style":57},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[59,145506,145507,145513,145523,145533,145543],{"__ignoreMap":57},[79,145508,145509,145511],{"class":81,"line":82},[79,145510,145252],{"class":85},[79,145512,17604],{"class":228},[79,145514,145515,145517,145519,145521],{"class":81,"line":167},[79,145516,129801],{"class":96},[79,145518,53431],{"class":228},[79,145520,53471],{"class":96},[79,145522,3400],{"class":228},[79,145524,145525,145527,145529,145531],{"class":81,"line":178},[79,145526,145281],{"class":96},[79,145528,53431],{"class":228},[79,145530,53586],{"class":96},[79,145532,3400],{"class":228},[79,145534,145535,145537,145539,145541],{"class":81,"line":545},[79,145536,145292],{"class":96},[79,145538,53431],{"class":228},[79,145540,53586],{"class":96},[79,145542,3400],{"class":228},[79,145544,145545],{"class":81,"line":550},[79,145546,3671],{"class":228},[19,145548,145549],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,145551,145552],{},"使用属性选择器",[3569,145554],{"style":128041,"src":145555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,145557,70877],{},[51,145559,145561],{"className":128932,"code":145560,"language":128934,"meta":57,"style":57},"\u003C!-- 携程网移动端案例结构 -->\n\u003Cdiv class=\"container\">\n  \u003C!-- 搜索栏 -->\n  \u003Cdiv class=\"search-index\">...\u003C\u002Fdiv>\n  \u003C!-- 焦点图 -->\n  \u003Cdiv class=\"focus\">...\u003C\u002Fdiv>\n  \u003C!-- 主导航 -->\n  \u003Cdiv class=\"local-nav\">...\u003C\u002Fdiv>\n  \u003C!-- 子导航 -->\n  \u003Cdiv class=\"nav-common\">...\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n",[59,145562,145563,145568,145582,145587,145607,145612,145631,145636,145655,145660,145679],{"__ignoreMap":57},[79,145564,145565],{"class":81,"line":82},[79,145566,145567],{"class":2313},"\u003C!-- 携程网移动端案例结构 -->\n",[79,145569,145570,145572,145574,145576,145578,145580],{"class":81,"line":167},[79,145571,229],{"class":228},[79,145573,53605],{"class":232},[79,145575,55477],{"class":85},[79,145577,239],{"class":228},[79,145579,94310],{"class":89},[79,145581,53301],{"class":228},[79,145583,145584],{"class":81,"line":178},[79,145585,145586],{"class":2313},"  \u003C!-- 搜索栏 -->\n",[79,145588,145589,145591,145593,145595,145597,145600,145603,145605],{"class":81,"line":545},[79,145590,54138],{"class":228},[79,145592,53605],{"class":232},[79,145594,55477],{"class":85},[79,145596,239],{"class":228},[79,145598,145599],{"class":89},"\"search-index\"",[79,145601,145602],{"class":228},">...\u003C\u002F",[79,145604,53605],{"class":232},[79,145606,53301],{"class":228},[79,145608,145609],{"class":81,"line":550},[79,145610,145611],{"class":2313},"  \u003C!-- 焦点图 -->\n",[79,145613,145614,145616,145618,145620,145622,145625,145627,145629],{"class":81,"line":562},[79,145615,54138],{"class":228},[79,145617,53605],{"class":232},[79,145619,55477],{"class":85},[79,145621,239],{"class":228},[79,145623,145624],{"class":89},"\"focus\"",[79,145626,145602],{"class":228},[79,145628,53605],{"class":232},[79,145630,53301],{"class":228},[79,145632,145633],{"class":81,"line":568},[79,145634,145635],{"class":2313},"  \u003C!-- 主导航 -->\n",[79,145637,145638,145640,145642,145644,145646,145649,145651,145653],{"class":81,"line":574},[79,145639,54138],{"class":228},[79,145641,53605],{"class":232},[79,145643,55477],{"class":85},[79,145645,239],{"class":228},[79,145647,145648],{"class":89},"\"local-nav\"",[79,145650,145602],{"class":228},[79,145652,53605],{"class":232},[79,145654,53301],{"class":228},[79,145656,145657],{"class":81,"line":579},[79,145658,145659],{"class":2313},"  \u003C!-- 子导航 -->\n",[79,145661,145662,145664,145666,145668,145670,145673,145675,145677],{"class":81,"line":585},[79,145663,54138],{"class":228},[79,145665,53605],{"class":232},[79,145667,55477],{"class":85},[79,145669,239],{"class":228},[79,145671,145672],{"class":89},"\"nav-common\"",[79,145674,145602],{"class":228},[79,145676,53605],{"class":232},[79,145678,53301],{"class":228},[79,145680,145681,145683,145685],{"class":81,"line":591},[79,145682,53779],{"class":228},[79,145684,53605],{"class":232},[79,145686,53301],{"class":228},[19,145688,72441],{},[51,145690,145691],{"className":128185,"code":138637,"language":128187,"meta":57,"style":57},[59,145692,145693,145707,145723],{"__ignoreMap":57},[79,145694,145695,145697,145699,145701,145703,145705],{"class":81,"line":82},[79,145696,55812],{"class":232},[79,145698,3130],{"class":228},[79,145700,105035],{"class":85},[79,145702,239],{"class":448},[79,145704,64687],{"class":89},[79,145706,138654],{"class":228},[79,145708,145709,145711,145713,145715,145717,145719,145721],{"class":81,"line":167},[79,145710,72884],{"class":96},[79,145712,53431],{"class":228},[79,145714,775],{"class":96},[79,145716,53486],{"class":448},[79,145718,53515],{"class":96},[79,145720,131765],{"class":96},[79,145722,3400],{"class":228},[79,145724,145725],{"class":81,"line":178},[79,145726,3671],{"class":228},[19,145728,145729],{},"总代码和效果展示：",[3569,145731],{"style":128041,"src":145732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,145734,70877],{},[51,145736,145737],{"className":128932,"code":145560,"language":128934,"meta":57,"style":57},[59,145738,145739,145743,145757,145761,145779,145783,145801,145805,145823,145827,145845],{"__ignoreMap":57},[79,145740,145741],{"class":81,"line":82},[79,145742,145567],{"class":2313},[79,145744,145745,145747,145749,145751,145753,145755],{"class":81,"line":167},[79,145746,229],{"class":228},[79,145748,53605],{"class":232},[79,145750,55477],{"class":85},[79,145752,239],{"class":228},[79,145754,94310],{"class":89},[79,145756,53301],{"class":228},[79,145758,145759],{"class":81,"line":178},[79,145760,145586],{"class":2313},[79,145762,145763,145765,145767,145769,145771,145773,145775,145777],{"class":81,"line":545},[79,145764,54138],{"class":228},[79,145766,53605],{"class":232},[79,145768,55477],{"class":85},[79,145770,239],{"class":228},[79,145772,145599],{"class":89},[79,145774,145602],{"class":228},[79,145776,53605],{"class":232},[79,145778,53301],{"class":228},[79,145780,145781],{"class":81,"line":550},[79,145782,145611],{"class":2313},[79,145784,145785,145787,145789,145791,145793,145795,145797,145799],{"class":81,"line":562},[79,145786,54138],{"class":228},[79,145788,53605],{"class":232},[79,145790,55477],{"class":85},[79,145792,239],{"class":228},[79,145794,145624],{"class":89},[79,145796,145602],{"class":228},[79,145798,53605],{"class":232},[79,145800,53301],{"class":228},[79,145802,145803],{"class":81,"line":568},[79,145804,145635],{"class":2313},[79,145806,145807,145809,145811,145813,145815,145817,145819,145821],{"class":81,"line":574},[79,145808,54138],{"class":228},[79,145810,53605],{"class":232},[79,145812,55477],{"class":85},[79,145814,239],{"class":228},[79,145816,145648],{"class":89},[79,145818,145602],{"class":228},[79,145820,53605],{"class":232},[79,145822,53301],{"class":228},[79,145824,145825],{"class":81,"line":579},[79,145826,145659],{"class":2313},[79,145828,145829,145831,145833,145835,145837,145839,145841,145843],{"class":81,"line":585},[79,145830,54138],{"class":228},[79,145832,53605],{"class":232},[79,145834,55477],{"class":85},[79,145836,239],{"class":228},[79,145838,145672],{"class":89},[79,145840,145602],{"class":228},[79,145842,53605],{"class":232},[79,145844,53301],{"class":228},[79,145846,145847,145849,145851],{"class":81,"line":591},[79,145848,53779],{"class":228},[79,145850,53605],{"class":232},[79,145852,53301],{"class":228},[19,145854,72441],{},[51,145856,145857],{"className":128932,"code":132289,"language":128934,"meta":57,"style":57},[59,145858,145859,145863,145877,145881],{"__ignoreMap":57},[79,145860,145861],{"class":81,"line":82},[79,145862,132296],{"class":2313},[79,145864,145865,145867,145869,145871,145873,145875],{"class":81,"line":167},[79,145866,229],{"class":228},[79,145868,53605],{"class":232},[79,145870,55477],{"class":85},[79,145872,239],{"class":228},[79,145874,132309],{"class":89},[79,145876,53301],{"class":228},[79,145878,145879],{"class":81,"line":178},[79,145880,132316],{"class":228},[79,145882,145883,145885,145887],{"class":81,"line":545},[79,145884,53779],{"class":228},[79,145886,53605],{"class":232},[79,145888,53301],{"class":228},[2159,145890,139586],{},{"title":57,"searchDepth":167,"depth":167,"links":145892},[145893,145894,145898,145899,145900],{"id":145037,"depth":167,"text":145038},{"id":145069,"depth":167,"text":145070,"children":145895},[145896,145897],{"id":145073,"depth":178,"text":145074},{"id":145090,"depth":178,"text":145091},{"id":145109,"depth":167,"text":145110},{"id":145116,"depth":167,"text":145117},{"id":145203,"depth":167,"text":145204,"children":145901},[145902,145903,145904,145905,145906],{"id":145210,"depth":178,"text":145211},{"id":145338,"depth":178,"text":145339},{"id":145432,"depth":178,"text":145433},{"id":145481,"depth":178,"text":145482},{"id":145491,"depth":178,"text":145492},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":145029,"description":25402},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":145913,"title":145914,"body":145915,"description":25402,"extension":2186,"meta":147142,"navigation":541,"path":147143,"seo":147144,"stem":147145,"__hash__":147146},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":145916,"toc":147120},[145917,145920,145924,145928,145931,145934,145938,145943,145946,145949,145952,145955,145958,146015,146018,146023,146026,146029,146033,146044,146048,146051,146054,146061,146066,146070,146073,146079,146082,146086,146089,146096,146099,146102,146109,146112,146119,146122,146125,146132,146135,146138,146140,146157,146161,146164,146167,146170,146174,146177,146180,146183,146186,146189,146192,146194,146197,146200,146262,146265,146375,146382,146388,146391,146394,146398,146401,146405,146410,146413,146420,146423,146429,146434,146437,146440,146443,146446,146449,146452,146455,146458,146514,146516,146542,146546,146549,146552,146555,146563,146566,146569,146573,146629,146632,146636,146642,146653,146656,146661,146664,146667,146673,146676,146679,146682,146685,146688,146691,146694,146697,146722,146728,146731,146734,146737,146740,146743,146746,146751,146754,146757,146760,146768,146771,146778,146781,146784,146786,146810,146812,146815,146818,146821,146824,146827,146830,146833,146867,146870,146873,146907,146914,146917,146920,146923,146926,146929,146932,146939,146942,146945,146948,146951,146958,146961,146964,146971,146974,146977,146981,146984,146987,146990,146993,146996,146999,147002,147005,147007,147031,147033,147057,147061,147072,147075,147078,147081,147084,147087,147090,147093,147096,147099,147102,147105,147108,147111,147114,147117],[10,145918,145914],{"id":145919},"_21-移动端布局实战下篇",[14,145921,145923],{"id":145922},"_211-rem适配布局","21.1 rem适配布局",[339,145925,145927],{"id":145926},"_2111-rem单位","21.1.1 rem单位",[3569,145929],{"style":128041,"src":145930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,145932,145933],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[339,145935,145937],{"id":145936},"_2112-媒体查询","21.1.2 媒体查询",[26,145939,145940],{},[29,145941,145942],{},"参数介绍",[3569,145944],{"style":128041,"src":145945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[3569,145947],{"style":128041,"src":145948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[3569,145950],{"style":128041,"src":145951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[3569,145953],{"style":128041,"src":145954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[3569,145956],{"style":128041,"src":145957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[51,145959,145961],{"className":128185,"code":145960,"language":128187,"meta":57,"style":57},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[59,145962,145963,145968,145987,145994,146007,146011],{"__ignoreMap":57},[79,145964,145965],{"class":81,"line":82},[79,145966,145967],{"class":2313},"\u002F* 媒体查询 *\u002F\n",[79,145969,145970,145973,145975,145978,145980,145983,145985],{"class":81,"line":167},[79,145971,145972],{"class":448},"@media",[79,145974,3757],{"class":228},[79,145976,145977],{"class":96},"max-width",[79,145979,53431],{"class":228},[79,145981,145982],{"class":96},"768",[79,145984,53486],{"class":448},[79,145986,14476],{"class":228},[79,145988,145989,145992],{"class":81,"line":178},[79,145990,145991],{"class":85},"  .container",[79,145993,17604],{"class":228},[79,145995,145996,145999,146001,146003,146005],{"class":81,"line":545},[79,145997,145998],{"class":96},"    width",[79,146000,53431],{"class":228},[79,146002,2555],{"class":96},[79,146004,1094],{"class":448},[79,146006,3400],{"class":228},[79,146008,146009],{"class":81,"line":550},[79,146010,128981],{"class":228},[79,146012,146013],{"class":81,"line":562},[79,146014,3671],{"class":228},[19,146016,146017],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[26,146019,146020],{"start":167},[29,146021,146022],{},"引入资源",[3569,146024],{"style":128041,"src":146025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,146027,146028],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[339,146030,146032],{"id":146031},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[3246,146034,146035,146038,146041],{},[29,146036,146037],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[29,146039,146040],{},"媒体查询可以根据不同设备宽度来修改样式",[29,146042,146043],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,146045,146047],{"id":146046},"_212-less基础","21.2 Less基础",[19,146049,146050],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,146052,146053],{},"Less可以解决该问题，它是css的扩展语言",[19,146055,146056,146057],{},"Less中文网址： ",[2482,146058,146059],{"href":146059,"rel":146060},"http:\u002F\u002Flesscss.cn\u002F",[25885],[19,146062,146063],{},[2398,146064,146065],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[339,146067,146069],{"id":146068},"_2121-less安装","21.2.1 less安装",[19,146071,146072],{},"如果使用vscode，则无需进行下方安装步骤",[19,146074,146075],{},[2482,146076,146077],{"href":146077,"rel":146078},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[25885],[3569,146080],{"style":128041,"src":146081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[339,146083,146085],{"id":146084},"_2122-less使用","21.2.2 less使用",[19,146087,146088],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[26,146090,146091],{},[29,146092,146093],{},[2398,146094,146095],{},"Less 变量",[3569,146097],{"style":128041,"src":146098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[3569,146100],{"style":128041,"src":146101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[26,146103,146104],{"start":167},[29,146105,146106],{},[2398,146107,146108],{},"Less 编译",[3569,146110],{"style":128041,"src":146111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[26,146113,146114],{"start":178},[29,146115,146116],{},[2398,146117,146118],{},"Less 嵌套",[3569,146120],{"style":128041,"src":146121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[3569,146123],{"style":128041,"src":146124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[26,146126,146127],{"start":545},[29,146128,146129],{},[2398,146130,146131],{},"Less 运算",[3569,146133],{"style":128041,"src":146134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,146136,146137],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,146139,2287],{},[3246,146141,146142,146145,146148,146151,146154],{},[29,146143,146144],{},"乘号（*）和除号（\u002F）的写法",[29,146146,146147],{},"运算符中间左右有个空格隔开 1px + 5",[29,146149,146150],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[29,146152,146153],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[29,146155,146156],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,146158,146160],{"id":146159},"_213-rem-适配方案","21.3 rem 适配方案",[19,146162,146163],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,146165,146166],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[3569,146168],{"style":128041,"src":146169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[339,146171,146173],{"id":146172},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,146175,146176],{},"rem + 媒体查询 + less 技术",[3569,146178],{"style":128041,"src":146179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,146181,146182],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,146184,146185],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[3569,146187],{"style":128041,"src":146188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,146190,146191],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,146193,16666],{},[3569,146195],{"style":128041,"src":146196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,146198,146199],{},"index.html:",[51,146201,146203],{"className":128185,"code":146202,"language":128187,"meta":57,"style":57},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[59,146204,146205,146210,146216,146232,146236,146242,146258],{"__ignoreMap":57},[79,146206,146207],{"class":81,"line":82},[79,146208,146209],{"class":2313},"\u002F* rem 适配方案 *\u002F\n",[79,146211,146212,146214],{"class":81,"line":167},[79,146213,52630],{"class":232},[79,146215,17604],{"class":228},[79,146217,146218,146220,146222,146225,146227,146229],{"class":81,"line":178},[79,146219,72614],{"class":96},[79,146221,53431],{"class":228},[79,146223,146224],{"class":96},"62.5",[79,146226,1094],{"class":448},[79,146228,132048],{"class":228},[79,146230,146231],{"class":2313},"\u002F* 1rem = 10px *\u002F\n",[79,146233,146234],{"class":81,"line":545},[79,146235,3671],{"class":228},[79,146237,146238,146240],{"class":81,"line":550},[79,146239,132033],{"class":85},[79,146241,17604],{"class":228},[79,146243,146244,146246,146248,146250,146253,146255],{"class":81,"line":562},[79,146245,72556],{"class":96},[79,146247,53431],{"class":228},[79,146249,2689],{"class":96},[79,146251,146252],{"class":448},"rem",[79,146254,132048],{"class":228},[79,146256,146257],{"class":2313},"\u002F* 100px *\u002F\n",[79,146259,146260],{"class":81,"line":568},[79,146261,3671],{"class":228},[19,146263,146264],{},"common.less",[51,146266,146268],{"className":128185,"code":146267,"language":128187,"meta":57,"style":57},"html {\n  font-size: 62.5%; \u002F* 10px *\u002F\n}\ndiv {\n  width: 10rem; \u002F* 100px *\u002F\n}\n```Css\n\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[59,146269,146270,146276,146291,146295,146301,146315,146319,146323,146327,146333,146347,146351,146357,146371],{"__ignoreMap":57},[79,146271,146272,146274],{"class":81,"line":82},[79,146273,52630],{"class":232},[79,146275,17604],{"class":228},[79,146277,146278,146280,146282,146284,146286,146288],{"class":81,"line":167},[79,146279,72614],{"class":96},[79,146281,53431],{"class":228},[79,146283,146224],{"class":96},[79,146285,1094],{"class":448},[79,146287,28085],{"class":228},[79,146289,146290],{"class":2313},"\u002F* 10px *\u002F\n",[79,146292,146293],{"class":81,"line":178},[79,146294,3671],{"class":228},[79,146296,146297,146299],{"class":81,"line":545},[79,146298,53605],{"class":232},[79,146300,17604],{"class":228},[79,146302,146303,146305,146307,146309,146311,146313],{"class":81,"line":550},[79,146304,72556],{"class":96},[79,146306,53431],{"class":228},[79,146308,2689],{"class":96},[79,146310,146252],{"class":448},[79,146312,28085],{"class":228},[79,146314,146257],{"class":2313},[79,146316,146317],{"class":81,"line":562},[79,146318,3671],{"class":228},[79,146320,146321],{"class":81,"line":568},[79,146322,137646],{"class":228},[79,146324,146325],{"class":81,"line":574},[79,146326,146209],{"class":2313},[79,146328,146329,146331],{"class":81,"line":579},[79,146330,52630],{"class":232},[79,146332,17604],{"class":228},[79,146334,146335,146337,146339,146341,146343,146345],{"class":81,"line":585},[79,146336,72614],{"class":96},[79,146338,53431],{"class":228},[79,146340,146224],{"class":96},[79,146342,1094],{"class":448},[79,146344,132048],{"class":228},[79,146346,146231],{"class":2313},[79,146348,146349],{"class":81,"line":591},[79,146350,3671],{"class":228},[79,146352,146353,146355],{"class":81,"line":596},[79,146354,132033],{"class":85},[79,146356,17604],{"class":228},[79,146358,146359,146361,146363,146365,146367,146369],{"class":81,"line":602},[79,146360,72556],{"class":96},[79,146362,53431],{"class":228},[79,146364,2689],{"class":96},[79,146366,146252],{"class":448},[79,146368,132048],{"class":228},[79,146370,146257],{"class":2313},[79,146372,146373],{"class":81,"line":608},[79,146374,3671],{"class":228},[19,146376,146377,146378,146381],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[25579,146379,146380],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[51,146383,146386],{"className":146384,"code":146385,"language":56},[54],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[59,146387,146385],{"__ignoreMap":57},[19,146389,146390],{},"less保存时会自动变成.css文件",[19,146392,146393],{},"好好搞懂上述代码写法",[339,146395,146397],{"id":146396},"_2132-样式导入样式","21.3.2 样式导入样式",[3569,146399],{"style":128041,"src":146400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[339,146402,146404],{"id":146403},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[26,146406,146407],{},[29,146408,146409],{},"准备工作",[3569,146411],{"style":128041,"src":146412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,146414,146415,146416],{},"github地址：",[2482,146417,146418],{"href":146418,"rel":146419},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[25885],[19,146421,146422],{},"下载之后，将index.js文件拖到项目中就可以了",[19,146424,146425,146426],{},"js文件引入到index.html中使用的是",[59,146427,146428],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[26,146430,146431],{"start":167},[29,146432,146433],{},"vscode插件",[3569,146435],{"style":128041,"src":146436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,146438,146439],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,146441,146442],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[3569,146444],{"style":128041,"src":146445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,146447,146448],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[3569,146450],{"style":128041,"src":146451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,146453,146454],{},"修改成75就可以，alt+z为快捷键",[19,146456,146457],{},"index.css：",[51,146459,146460],{"className":128185,"code":146202,"language":128187,"meta":57,"style":57},[59,146461,146462,146466,146472,146486,146490,146496,146510],{"__ignoreMap":57},[79,146463,146464],{"class":81,"line":82},[79,146465,146209],{"class":2313},[79,146467,146468,146470],{"class":81,"line":167},[79,146469,52630],{"class":232},[79,146471,17604],{"class":228},[79,146473,146474,146476,146478,146480,146482,146484],{"class":81,"line":178},[79,146475,72614],{"class":96},[79,146477,53431],{"class":228},[79,146479,146224],{"class":96},[79,146481,1094],{"class":448},[79,146483,132048],{"class":228},[79,146485,146231],{"class":2313},[79,146487,146488],{"class":81,"line":545},[79,146489,3671],{"class":228},[79,146491,146492,146494],{"class":81,"line":550},[79,146493,132033],{"class":85},[79,146495,17604],{"class":228},[79,146497,146498,146500,146502,146504,146506,146508],{"class":81,"line":562},[79,146499,72556],{"class":96},[79,146501,53431],{"class":228},[79,146503,2689],{"class":96},[79,146505,146252],{"class":448},[79,146507,132048],{"class":228},[79,146509,146257],{"class":2313},[79,146511,146512],{"class":81,"line":568},[79,146513,3671],{"class":228},[19,146515,146199],{},[51,146517,146518],{"className":128185,"code":128589,"language":128187,"meta":57,"style":57},[59,146519,146520,146526,146538],{"__ignoreMap":57},[79,146521,146522,146524],{"class":81,"line":82},[79,146523,53794],{"class":232},[79,146525,17604],{"class":228},[79,146527,146528,146530,146532,146534,146536],{"class":81,"line":167},[79,146529,72614],{"class":96},[79,146531,53431],{"class":228},[79,146533,2841],{"class":96},[79,146535,53486],{"class":448},[79,146537,3400],{"class":228},[79,146539,146540],{"class":81,"line":178},[79,146541,3671],{"class":228},[14,146543,146545],{"id":146544},"_214-响应式开发","21.4 响应式开发",[19,146547,146548],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[3569,146550],{"style":128041,"src":146551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,146553,146554],{},"做法：",[3246,146556,146557,146560],{},[29,146558,146559],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[29,146561,146562],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[3569,146564],{"style":128041,"src":146565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,146567,146568],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[339,146570,146572],{"id":146571},"_2141-简单代码示范","21.4.1 简单代码示范",[51,146574,146575],{"className":128185,"code":146202,"language":128187,"meta":57,"style":57},[59,146576,146577,146581,146587,146601,146605,146611,146625],{"__ignoreMap":57},[79,146578,146579],{"class":81,"line":82},[79,146580,146209],{"class":2313},[79,146582,146583,146585],{"class":81,"line":167},[79,146584,52630],{"class":232},[79,146586,17604],{"class":228},[79,146588,146589,146591,146593,146595,146597,146599],{"class":81,"line":178},[79,146590,72614],{"class":96},[79,146592,53431],{"class":228},[79,146594,146224],{"class":96},[79,146596,1094],{"class":448},[79,146598,132048],{"class":228},[79,146600,146231],{"class":2313},[79,146602,146603],{"class":81,"line":545},[79,146604,3671],{"class":228},[79,146606,146607,146609],{"class":81,"line":550},[79,146608,132033],{"class":85},[79,146610,17604],{"class":228},[79,146612,146613,146615,146617,146619,146621,146623],{"class":81,"line":562},[79,146614,72556],{"class":96},[79,146616,53431],{"class":228},[79,146618,2689],{"class":96},[79,146620,146252],{"class":448},[79,146622,132048],{"class":228},[79,146624,146257],{"class":2313},[79,146626,146627],{"class":81,"line":568},[79,146628,3671],{"class":228},[19,146630,146631],{},"父盒子一般命名为container",[339,146633,146635],{"id":146634},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,146637,146638,146639],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[2398,146640,146641],{},"使得 Web 开发更加快捷",[3246,146643,146644],{},[29,146645,146646,146647],{},"官网：",[2398,146648,146649],{},[2482,146650,146651],{"href":146651,"rel":146652},"http:\u002F\u002Fgetbootstrap.com\u002F",[25885],[19,146654,146655],{},"可以直接去官网拿现成的东西",[26,146657,146658],{},[29,146659,146660],{},"Bootstrap的使用",[19,146662,146663],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,146665,146666],{},"Bootstrap 使用四步曲：",[19,146668,146669,146672],{},[2398,146670,146671],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[3569,146674],{"style":128041,"src":146675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,146677,146678],{},"打开Bootstrap官网，然后下载",[3569,146680],{"style":128041,"src":146681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[3569,146683],{"style":128041,"src":146684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,146686,146687],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,146689,146690],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,146692,146693],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[3569,146695],{"style":128041,"src":146696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[51,146698,146700],{"className":128185,"code":146699,"language":128187,"meta":57,"style":57},".center {\n  color: red;\n}\n",[59,146701,146702,146708,146718],{"__ignoreMap":57},[79,146703,146704,146706],{"class":81,"line":82},[79,146705,128476],{"class":85},[79,146707,17604],{"class":228},[79,146709,146710,146712,146714,146716],{"class":81,"line":167},[79,146711,72893],{"class":96},[79,146713,53431],{"class":228},[79,146715,59410],{"class":96},[79,146717,3400],{"class":228},[79,146719,146720],{"class":81,"line":178},[79,146721,3671],{"class":228},[19,146723,146724,146727],{},[59,146725,146726],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[3569,146729],{"style":128041,"src":146730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[3569,146732],{"style":128041,"src":146733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[3569,146735],{"style":128041,"src":146736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,146738,146739],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[3569,146741],{"style":128041,"src":146742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,146744,146745],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[26,146747,146748],{"start":167},[29,146749,146750],{},"布局容器",[3569,146752],{"style":128041,"src":146753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,146755,146756],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,146758,146759],{},"container-fluid用于移动式布局比较方便",[26,146761,146762],{"start":178},[29,146763,146764,146765],{},"bootstrap ",[2398,146766,146767],{},"栅格系统原理",[3569,146769],{"style":128041,"src":146770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[26,146772,146773],{"start":545},[29,146774,146775],{},[2398,146776,146777],{},"栅格选项参数",[3569,146779],{"style":128041,"src":146780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,146782,146783],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,146785,16666],{},[51,146787,146788],{"className":128185,"code":146699,"language":128187,"meta":57,"style":57},[59,146789,146790,146796,146806],{"__ignoreMap":57},[79,146791,146792,146794],{"class":81,"line":82},[79,146793,128476],{"class":85},[79,146795,17604],{"class":228},[79,146797,146798,146800,146802,146804],{"class":81,"line":167},[79,146799,72893],{"class":96},[79,146801,53431],{"class":228},[79,146803,59410],{"class":96},[79,146805,3400],{"class":228},[79,146807,146808],{"class":81,"line":178},[79,146809,3671],{"class":228},[19,146811,137228],{},[3569,146813],{"style":128041,"src":146814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,146816,146817],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,146819,146820],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,146822,146823],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,146825,146826],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,146828,146829],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,146831,146832],{},"汇总展示说明：",[51,146834,146835],{"className":128932,"code":132289,"language":128934,"meta":57,"style":57},[59,146836,146837,146841,146855,146859],{"__ignoreMap":57},[79,146838,146839],{"class":81,"line":82},[79,146840,132296],{"class":2313},[79,146842,146843,146845,146847,146849,146851,146853],{"class":81,"line":167},[79,146844,229],{"class":228},[79,146846,53605],{"class":232},[79,146848,55477],{"class":85},[79,146850,239],{"class":228},[79,146852,132309],{"class":89},[79,146854,53301],{"class":228},[79,146856,146857],{"class":81,"line":178},[79,146858,132316],{"class":228},[79,146860,146861,146863,146865],{"class":81,"line":545},[79,146862,53779],{"class":228},[79,146864,53605],{"class":232},[79,146866,53301],{"class":228},[3569,146868],{"style":128041,"src":146869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,146871,146872],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[51,146874,146875],{"className":128932,"code":132289,"language":128934,"meta":57,"style":57},[59,146876,146877,146881,146895,146899],{"__ignoreMap":57},[79,146878,146879],{"class":81,"line":82},[79,146880,132296],{"class":2313},[79,146882,146883,146885,146887,146889,146891,146893],{"class":81,"line":167},[79,146884,229],{"class":228},[79,146886,53605],{"class":232},[79,146888,55477],{"class":85},[79,146890,239],{"class":228},[79,146892,132309],{"class":89},[79,146894,53301],{"class":228},[79,146896,146897],{"class":81,"line":178},[79,146898,132316],{"class":228},[79,146900,146901,146903,146905],{"class":81,"line":545},[79,146902,53779],{"class":228},[79,146904,53605],{"class":232},[79,146906,53301],{"class":228},[26,146908,146909],{"start":550},[29,146910,146911],{},[2398,146912,146913],{},"列嵌套",[3569,146915],{"style":128041,"src":146916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,146918,146919],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,146921,146922],{},"没加row内部这样：",[3569,146924],{"style":128041,"src":146925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,146927,146928],{},"加上row之后内部为：",[3569,146930],{"style":128041,"src":146931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[26,146933,146934],{"start":562},[29,146935,146936],{},[2398,146937,146938],{},"列偏移",[3569,146940],{"style":128041,"src":146941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,146943,146944],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,146946,146947],{},"要加偏移量，即偏移份数",[19,146949,146950],{},"偏移的份数=12-两个盒子的份数",[26,146952,146953],{"start":568},[29,146954,146955],{},[2398,146956,146957],{},"列排序",[3569,146959],{"style":128041,"src":146960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,146962,146963],{},"pull拉左；push推右",[26,146965,146966],{"start":574},[29,146967,146968],{},[2398,146969,146970],{},"响应式工具",[3569,146972],{"style":128041,"src":146973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,146975,146976],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[339,146978,146980],{"id":146979},"_2143-响应式小项目","21.4.3 响应式小项目",[19,146982,146983],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,146985,146986],{},"ul {",[19,146988,146989],{},"list-style: none;",[19,146991,146992],{},"margin:0;",[19,146994,146995],{},"padding:0; }",[3569,146997],{"style":128041,"src":146998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[3569,147000],{"style":128041,"src":147001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,147003,147004],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,147006,70877],{},[51,147008,147009],{"className":128185,"code":140855,"language":128187,"meta":57,"style":57},[59,147010,147011,147017,147027],{"__ignoreMap":57},[79,147012,147013,147015],{"class":81,"line":82},[79,147014,132033],{"class":85},[79,147016,17604],{"class":228},[79,147018,147019,147021,147023,147025],{"class":81,"line":167},[79,147020,132665],{"class":96},[79,147022,53431],{"class":228},[79,147024,358],{"class":96},[79,147026,3400],{"class":228},[79,147028,147029],{"class":81,"line":178},[79,147030,3671],{"class":228},[19,147032,72441],{},[51,147034,147035],{"className":128185,"code":140855,"language":128187,"meta":57,"style":57},[59,147036,147037,147043,147053],{"__ignoreMap":57},[79,147038,147039,147041],{"class":81,"line":82},[79,147040,132033],{"class":85},[79,147042,17604],{"class":228},[79,147044,147045,147047,147049,147051],{"class":81,"line":167},[79,147046,132665],{"class":96},[79,147048,53431],{"class":228},[79,147050,358],{"class":96},[79,147052,3400],{"class":228},[79,147054,147055],{"class":81,"line":178},[79,147056,3671],{"class":228},[14,147058,147060],{"id":147059},"_215-swiper-插件使用","21.5 swiper 插件使用",[3246,147062,147063,147066,147069],{},[29,147064,147065],{},"下载需要的css和js文件html页面中 引入相关文件",[29,147067,147068],{},"官网找到类似案例，复制html结构，css样式 js 语法",[29,147070,147071],{},"根据需求定制修改模块",[3569,147073],{"style":128041,"src":147074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,147076,147077],{},"解压后将这两部分放到项目中",[3569,147079],{"style":128041,"src":147080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,147082,147083],{},"这个插件可以帮助我们实现轮播图效果",[19,147085,147086],{},"用法：",[3569,147088],{"style":128041,"src":147089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,147091,147092],{},"找到自己喜欢的",[3569,147094],{"style":128041,"src":147095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,147097,147098],{},"右键，查看网页源代码",[3569,147100],{"style":128041,"src":147101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,147103,147104],{},"复制人家的结构内容",[19,147106,147107],{},"然后去看API文档：",[3569,147109],{"style":128041,"src":147110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,147112,147113],{},"可以看看如何修改样式",[19,147115,147116],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[2159,147118,147119],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":57,"searchDepth":167,"depth":167,"links":147121},[147122,147127,147131,147136,147141],{"id":145922,"depth":167,"text":145923,"children":147123},[147124,147125,147126],{"id":145926,"depth":178,"text":145927},{"id":145936,"depth":178,"text":145937},{"id":146031,"depth":178,"text":146032},{"id":146046,"depth":167,"text":146047,"children":147128},[147129,147130],{"id":146068,"depth":178,"text":146069},{"id":146084,"depth":178,"text":146085},{"id":146159,"depth":167,"text":146160,"children":147132},[147133,147134,147135],{"id":146172,"depth":178,"text":146173},{"id":146396,"depth":178,"text":146397},{"id":146403,"depth":178,"text":146404},{"id":146544,"depth":167,"text":146545,"children":147137},[147138,147139,147140],{"id":146571,"depth":178,"text":146572},{"id":146634,"depth":178,"text":146635},{"id":146979,"depth":178,"text":146980},{"id":147059,"depth":167,"text":147060},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":145914,"description":25402},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":147148,"title":147149,"body":147150,"description":25402,"extension":2186,"meta":147370,"navigation":541,"path":147371,"seo":147372,"stem":147373,"__hash__":147374},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":147151,"toc":147366},[147152,147155,147159,147162,147177,147182,147185,147190,147225,147230,147242,147247,147260,147265,147282,147287,147307,147312,147330,147333,147336,147339,147342,147346,147349,147352,147355,147358,147361,147364],[10,147153,147149],{"id":147154},"_22-代码提交与新型相对单位",[14,147156,147158],{"id":147157},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,147160,147161],{},"法1：",[26,147163,147164,147171,147174],{},[29,147165,147166,147167],{},"登录网站注册：",[2482,147168,147169],{"href":147169,"rel":147170},"https:\u002F\u002Fgitee.com\u002F",[25885],[29,147172,147173],{},"码云创建新的仓库",[29,147175,147176],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[3246,147178,147179],{},[29,147180,147181],{},"在网站根目录右键-- Git Bash Here",[3569,147183],{"style":128041,"src":147184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[3246,147186,147187],{},[29,147188,147189],{},"如果是第一次利用git提交，请配置好全局选项",[51,147191,147193],{"className":118929,"code":147192,"language":118931,"meta":57,"style":57},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[59,147194,147195,147211],{"__ignoreMap":57},[79,147196,147197,147200,147202,147205,147208],{"class":81,"line":82},[79,147198,147199],{"class":85},"git",[79,147201,121352],{"class":89},[79,147203,147204],{"class":96}," --global",[79,147206,147207],{"class":89}," user.name",[79,147209,147210],{"class":89}," \"你的名字\"\n",[79,147212,147213,147215,147217,147219,147222],{"class":81,"line":167},[79,147214,147199],{"class":85},[79,147216,121352],{"class":89},[79,147218,147204],{"class":96},[79,147220,147221],{"class":89}," user.email",[79,147223,147224],{"class":89}," \"你的邮箱\"\n",[3246,147226,147227],{},[29,147228,147229],{},"初始化仓库",[51,147231,147233],{"className":118929,"code":147232,"language":118931,"meta":57,"style":57},"git init\n",[59,147234,147235],{"__ignoreMap":57},[79,147236,147237,147239],{"class":81,"line":82},[79,147238,147199],{"class":85},[79,147240,147241],{"class":89}," init\n",[3246,147243,147244],{},[29,147245,147246],{},"把本地文件放到暂存区",[51,147248,147250],{"className":118929,"code":147249,"language":118931,"meta":57,"style":57},"git add .\n",[59,147251,147252],{"__ignoreMap":57},[79,147253,147254,147256,147258],{"class":81,"line":82},[79,147255,147199],{"class":85},[79,147257,7277],{"class":89},[79,147259,30756],{"class":89},[3246,147261,147262],{},[29,147263,147264],{},"把本地文件放到本地仓库里面",[51,147266,147268],{"className":118929,"code":147267,"language":118931,"meta":57,"style":57},"git commit -m \"first commit\"\n",[59,147269,147270],{"__ignoreMap":57},[79,147271,147272,147274,147277,147279],{"class":81,"line":82},[79,147273,147199],{"class":85},[79,147275,147276],{"class":89}," commit",[79,147278,102860],{"class":96},[79,147280,147281],{"class":89}," \"first commit\"\n",[3246,147283,147284],{},[29,147285,147286],{},"链接远程仓库",[51,147288,147290],{"className":118929,"code":147289,"language":118931,"meta":57,"style":57},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[59,147291,147292],{"__ignoreMap":57},[79,147293,147294,147296,147299,147301,147304],{"class":81,"line":82},[79,147295,147199],{"class":85},[79,147297,147298],{"class":89}," remote",[79,147300,7277],{"class":89},[79,147302,147303],{"class":89}," origin",[79,147305,147306],{"class":89}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[3246,147308,147309],{},[29,147310,147311],{},"把本地仓库的文件推送到远程仓库 push",[51,147313,147315],{"className":118929,"code":147314,"language":118931,"meta":57,"style":57},"git push -u origin master\n",[59,147316,147317],{"__ignoreMap":57},[79,147318,147319,147321,147323,147325,147327],{"class":81,"line":82},[79,147320,147199],{"class":85},[79,147322,31031],{"class":89},[79,147324,30306],{"class":96},[79,147326,147303],{"class":89},[79,147328,147329],{"class":89}," master\n",[3569,147331],{"style":128041,"src":147332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,147334,147335],{},"上方方法暂未实现，后边学完git后在整",[19,147337,147338],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[3569,147340],{"style":128041,"src":147341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,147343,147345],{"id":147344},"_222-新型相对单位","22.2 新型相对单位",[3569,147347],{"style":128041,"src":147348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[3569,147350],{"style":128041,"src":147351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,147353,147354],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,147356,147357],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[3569,147359],{"style":128041,"src":147360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,147362,147363],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[2159,147365,25978],{},{"title":57,"searchDepth":167,"depth":167,"links":147367},[147368,147369],{"id":147157,"depth":167,"text":147158},{"id":147344,"depth":167,"text":147345},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":147149,"description":25402},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":147376,"title":147377,"body":147378,"description":147382,"extension":2186,"meta":147383,"navigation":541,"path":147384,"seo":147385,"stem":147386,"__hash__":147387},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":147379,"toc":147380},[],{"title":57,"searchDepth":167,"depth":167,"links":147381},[],"自己正经开始学编程的第一门语言！",{"category":94826},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":147377,"description":147382},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":147389,"title":147390,"body":147391,"description":25402,"extension":2186,"meta":148538,"navigation":541,"path":148539,"seo":148540,"stem":148541,"__hash__":148542},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":147392,"toc":148514},[147393,147396,147400,147403,147406,147431,147434,147440,147444,147447,147474,147477,147517,147520,147532,147535,147541,147545,147549,147576,147593,147600,147604,147607,147633,147636,147640,147643,147683,147686,147703,147709,147713,147718,147762,147765,147783,147786,147854,147858,147865,147868,147883,147886,147895,147898,147909,147912,147921,147924,147941,147944,147959,147963,147967,147970,147972,147992,147996,147999,148002,148013,148016,148022,148026,148032,148059,148062,148074,148077,148088,148091,148097,148101,148107,148157,148160,148202,148205,148238,148241,148275,148279,148282,148302,148305,148341,148344,148357,148361,148365,148371,148374,148387,148391,148394,148400,148403,148407,148410,148413,148462,148466,148482,148488,148495,148501,148511],[10,147394,147390],{"id":147395},"_1-python环境与第一个程序",[14,147397,147399],{"id":147398},"_11-什么是python","1.1 什么是Python",[19,147401,147402],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,147404,147405],{},"理解 Python 时抓住三个关键词：",[26,147407,147408,147411,147414],{},[29,147409,147410],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[29,147412,147413],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[29,147415,147416,147417,2139,147420,2139,147423,2139,147426,2139,147428,497],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[59,147418,147419],{},"os",[59,147421,147422],{},"sys",[59,147424,147425],{},"json",[59,147427,59849],{},[59,147429,147430],{},"datetime",[19,147432,147433],{},"Python 程序的运行链路：",[51,147435,147438],{"className":147436,"code":147437,"language":56,"meta":57},[54],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[59,147439,147437],{"__ignoreMap":57},[14,147441,147443],{"id":147442},"_12-python解释器","1.2 Python解释器",[19,147445,147446],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[51,147448,147450],{"className":73,"code":147449,"language":75,"meta":57,"style":57},"python --version\npython3 --version\npython\npython3\n",[59,147451,147452,147458,147464,147469],{"__ignoreMap":57},[79,147453,147454,147456],{"class":81,"line":82},[79,147455,441],{"class":85},[79,147457,28311],{"class":96},[79,147459,147460,147462],{"class":81,"line":167},[79,147461,102857],{"class":85},[79,147463,28311],{"class":96},[79,147465,147466],{"class":81,"line":178},[79,147467,147468],{"class":85},"python\n",[79,147470,147471],{"class":81,"line":545},[79,147472,147473],{"class":85},"python3\n",[19,147475,147476],{},"进入交互模式后，可以直接输入表达式：",[51,147478,147480],{"className":439,"code":147479,"language":441,"meta":57,"style":57},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[59,147481,147482,147493,147498,147512],{"__ignoreMap":57},[79,147483,147484,147487,147489,147491],{"class":81,"line":82},[79,147485,147486],{"class":448},">>>",[79,147488,27137],{"class":96},[79,147490,47561],{"class":448},[79,147492,49718],{"class":96},[79,147494,147495],{"class":81,"line":167},[79,147496,147497],{"class":96},"3\n",[79,147499,147500,147502,147505,147507,147510],{"class":81,"line":178},[79,147501,147486],{"class":448},[79,147503,147504],{"class":96}," print",[79,147506,455],{"class":228},[79,147508,147509],{"class":89},"\"hello python\"",[79,147511,850],{"class":228},[79,147513,147514],{"class":81,"line":545},[79,147515,147516],{"class":228},"hello python\n",[19,147518,147519],{},"退出交互模式：",[51,147521,147523],{"className":439,"code":147522,"language":441,"meta":57,"style":57},"exit()\n",[59,147524,147525],{"__ignoreMap":57},[79,147526,147527,147530],{"class":81,"line":82},[79,147528,147529],{"class":96},"exit",[79,147531,4061],{"class":228},[19,147533,147534],{},"或使用快捷键：",[51,147536,147539],{"className":147537,"code":147538,"language":56,"meta":57},[54],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[59,147540,147538],{"__ignoreMap":57},[14,147542,147544],{"id":147543},"_13-安装python","1.3 安装Python",[339,147546,147548],{"id":147547},"_131-windows安装","1.3.1 Windows安装",[26,147550,147551,147558,147561,147567,147573],{},[29,147552,147553,147554],{},"打开 Python 官网：",[2482,147555,147556],{"href":147556,"rel":147557},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[25885],[29,147559,147560],{},"下载 Windows Installer。",[29,147562,147563,147564,497],{},"安装时勾选 ",[59,147565,147566],{},"Add Python to PATH",[29,147568,147569,147570,497],{},"点击 ",[59,147571,147572],{},"Install Now",[29,147574,147575],{},"安装完成后打开命令提示符验证：",[51,147577,147579],{"className":73,"code":147578,"language":75,"meta":57,"style":57},"python --version\npip --version\n",[59,147580,147581,147587],{"__ignoreMap":57},[79,147582,147583,147585],{"class":81,"line":82},[79,147584,441],{"class":85},[79,147586,28311],{"class":96},[79,147588,147589,147591],{"class":81,"line":167},[79,147590,125],{"class":85},[79,147592,28311],{"class":96},[19,147594,147595,147596,147599],{},"如果提示 ",[59,147597,147598],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[339,147601,147603],{"id":147602},"_132-macos安装","1.3.2 macOS安装",[19,147605,147606],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[51,147608,147610],{"className":73,"code":147609,"language":75,"meta":57,"style":57},"brew install python\npython3 --version\npip3 --version\n",[59,147611,147612,147621,147627],{"__ignoreMap":57},[79,147613,147614,147617,147619],{"class":81,"line":82},[79,147615,147616],{"class":85},"brew",[79,147618,93],{"class":89},[79,147620,125951],{"class":89},[79,147622,147623,147625],{"class":81,"line":167},[79,147624,102857],{"class":85},[79,147626,28311],{"class":96},[79,147628,147629,147631],{"class":81,"line":178},[79,147630,121333],{"class":85},[79,147632,28311],{"class":96},[19,147634,147635],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[339,147637,147639],{"id":147638},"_133-linux安装","1.3.3 Linux安装",[19,147641,147642],{},"Ubuntu\u002FDebian：",[51,147644,147646],{"className":73,"code":147645,"language":75,"meta":57,"style":57},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[59,147647,147648,147656,147671,147677],{"__ignoreMap":57},[79,147649,147650,147652,147654],{"class":81,"line":82},[79,147651,86],{"class":85},[79,147653,118950],{"class":89},[79,147655,28260],{"class":89},[79,147657,147658,147660,147662,147664,147666,147668],{"class":81,"line":167},[79,147659,86],{"class":85},[79,147661,118950],{"class":89},[79,147663,93],{"class":89},[79,147665,100],{"class":89},[79,147667,103],{"class":89},[79,147669,147670],{"class":89}," python3-venv\n",[79,147672,147673,147675],{"class":81,"line":178},[79,147674,102857],{"class":85},[79,147676,28311],{"class":96},[79,147678,147679,147681],{"class":81,"line":545},[79,147680,121333],{"class":85},[79,147682,28311],{"class":96},[19,147684,147685],{},"Fedora：",[51,147687,147689],{"className":73,"code":147688,"language":75,"meta":57,"style":57},"sudo dnf install python3 python3-pip\n",[59,147690,147691],{"__ignoreMap":57},[79,147692,147693,147695,147697,147699,147701],{"class":81,"line":82},[79,147694,86],{"class":85},[79,147696,90],{"class":89},[79,147698,93],{"class":89},[79,147700,100],{"class":89},[79,147702,121398],{"class":89},[19,147704,147705,147706,147708],{},"Linux 上通常使用 ",[59,147707,102857],{}," 命令，避免和系统旧版本 Python 冲突。",[14,147710,147712],{"id":147711},"_14-pip包管理器","1.4 pip包管理器",[19,147714,147715,147717],{},[59,147716,125],{}," 用来安装第三方库。",[51,147719,147721],{"className":73,"code":147720,"language":75,"meta":57,"style":57},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[59,147722,147723,147732,147741,147749,147755],{"__ignoreMap":57},[79,147724,147725,147727,147729],{"class":81,"line":82},[79,147726,125],{"class":85},[79,147728,93],{"class":89},[79,147730,147731],{"class":89}," requests\n",[79,147733,147734,147736,147739],{"class":81,"line":167},[79,147735,125],{"class":85},[79,147737,147738],{"class":89}," uninstall",[79,147740,147731],{"class":89},[79,147742,147743,147745,147747],{"class":81,"line":178},[79,147744,125],{"class":85},[79,147746,119207],{"class":89},[79,147748,147731],{"class":89},[79,147750,147751,147753],{"class":81,"line":545},[79,147752,125],{"class":85},[79,147754,120588],{"class":89},[79,147756,147757,147759],{"class":81,"line":550},[79,147758,125],{"class":85},[79,147760,147761],{"class":89}," freeze\n",[19,147763,147764],{},"国内网络较慢时可以临时使用镜像：",[51,147766,147768],{"className":73,"code":147767,"language":75,"meta":57,"style":57},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[59,147769,147770],{"__ignoreMap":57},[79,147771,147772,147774,147776,147779,147781],{"class":81,"line":82},[79,147773,125],{"class":85},[79,147775,93],{"class":89},[79,147777,147778],{"class":89}," requests",[79,147780,28446],{"class":96},[79,147782,121361],{"class":89},[19,147784,147785],{},"常见第三方库：",[347,147787,147788,147797],{},[350,147789,147790],{},[353,147791,147792,147795],{},[356,147793,147794],{},"库",[356,147796,104628],{},[367,147798,147799,147807,147814,147822,147830,147838,147846],{},[353,147800,147801,147804],{},[372,147802,147803],{},"requests",[372,147805,147806],{},"网络请求",[353,147808,147809,147811],{},[372,147810,102611],{},[372,147812,147813],{},"数值计算",[353,147815,147816,147819],{},[372,147817,147818],{},"pandas",[372,147820,147821],{},"表格数据处理",[353,147823,147824,147827],{},[372,147825,147826],{},"matplotlib",[372,147828,147829],{},"绘图",[353,147831,147832,147835],{},[372,147833,147834],{},"pyecharts",[372,147836,147837],{},"ECharts 图表",[353,147839,147840,147843],{},[372,147841,147842],{},"flask",[372,147844,147845],{},"Web 后端",[353,147847,147848,147851],{},[372,147849,147850],{},"pytest",[372,147852,147853],{},"自动化测试",[14,147855,147857],{"id":147856},"_15-虚拟环境","1.5 虚拟环境",[19,147859,147860,147861,147864],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[59,147862,147863],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,147866,147867],{},"创建虚拟环境：",[51,147869,147871],{"className":73,"code":147870,"language":75,"meta":57,"style":57},"python -m venv .venv\n",[59,147872,147873],{"__ignoreMap":57},[79,147874,147875,147877,147879,147881],{"class":81,"line":82},[79,147876,441],{"class":85},[79,147878,102860],{"class":96},[79,147880,102863],{"class":89},[79,147882,102866],{"class":89},[19,147884,147885],{},"Windows 激活：",[51,147887,147889],{"className":73,"code":147888,"language":75,"meta":57,"style":57},".venv\\Scripts\\activate\n",[59,147890,147891],{"__ignoreMap":57},[79,147892,147893],{"class":81,"line":82},[79,147894,147888],{"class":85},[19,147896,147897],{},"macOS\u002FLinux 激活：",[51,147899,147901],{"className":73,"code":147900,"language":75,"meta":57,"style":57},"source .venv\u002Fbin\u002Factivate\n",[59,147902,147903],{"__ignoreMap":57},[79,147904,147905,147907],{"class":81,"line":82},[79,147906,102871],{"class":96},[79,147908,102874],{"class":89},[19,147910,147911],{},"退出虚拟环境：",[51,147913,147915],{"className":73,"code":147914,"language":75,"meta":57,"style":57},"deactivate\n",[59,147916,147917],{"__ignoreMap":57},[79,147918,147919],{"class":81,"line":82},[79,147920,147914],{"class":85},[19,147922,147923],{},"保存依赖：",[51,147925,147927],{"className":73,"code":147926,"language":75,"meta":57,"style":57},"pip freeze > requirements.txt\n",[59,147928,147929],{"__ignoreMap":57},[79,147930,147931,147933,147936,147938],{"class":81,"line":82},[79,147932,125],{"class":85},[79,147934,147935],{"class":89}," freeze",[79,147937,28240],{"class":448},[79,147939,147940],{"class":89}," requirements.txt\n",[19,147942,147943],{},"安装依赖：",[51,147945,147947],{"className":73,"code":147946,"language":75,"meta":57,"style":57},"pip install -r requirements.txt\n",[59,147948,147949],{"__ignoreMap":57},[79,147950,147951,147953,147955,147957],{"class":81,"line":82},[79,147952,125],{"class":85},[79,147954,93],{"class":89},[79,147956,121272],{"class":96},[79,147958,147940],{"class":89},[14,147960,147962],{"id":147961},"_16-开发工具","1.6 开发工具",[339,147964,147966],{"id":147965},"_161-pycharm","1.6.1 PyCharm",[19,147968,147969],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,147971,123695],{},[26,147973,147974,147977,147980,147986,147989],{},[29,147975,147976],{},"New Project：创建项目。",[29,147978,147979],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[29,147981,147982,147983,127616],{},"New Python File：创建 ",[59,147984,147985],{},".py",[29,147987,147988],{},"Run：运行当前文件。",[29,147990,147991],{},"Debug：断点调试。",[339,147993,147995],{"id":147994},"_162-vs-code","1.6.2 VS Code",[19,147997,147998],{},"VS Code 轻量，适合后续多语言开发。",[19,148000,148001],{},"建议安装插件：",[26,148003,148004,148007,148010],{},[29,148005,148006],{},"Python。",[29,148008,148009],{},"Pylance。",[29,148011,148012],{},"Jupyter。",[19,148014,148015],{},"选择解释器：",[51,148017,148020],{"className":148018,"code":148019,"language":56,"meta":57},[54],"Ctrl + Shift + P -> Python: Select Interpreter\n",[59,148021,148019],{"__ignoreMap":57},[14,148023,148025],{"id":148024},"_17-第一个python程序","1.7 第一个Python程序",[19,148027,148028,148029,26638],{},"创建文件 ",[59,148030,148031],{},"hello.py",[51,148033,148035],{"className":439,"code":148034,"language":441,"meta":57,"style":57},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[59,148036,148037,148048],{"__ignoreMap":57},[79,148038,148039,148041,148043,148046],{"class":81,"line":82},[79,148040,1889],{"class":96},[79,148042,455],{"class":228},[79,148044,148045],{"class":89},"\"Hello World\"",[79,148047,850],{"class":228},[79,148049,148050,148052,148054,148057],{"class":81,"line":167},[79,148051,1889],{"class":96},[79,148053,455],{"class":228},[79,148055,148056],{"class":89},"\"你好，Python\"",[79,148058,850],{"class":228},[19,148060,148061],{},"在终端运行：",[51,148063,148065],{"className":73,"code":148064,"language":75,"meta":57,"style":57},"python hello.py\n",[59,148066,148067],{"__ignoreMap":57},[79,148068,148069,148071],{"class":81,"line":82},[79,148070,441],{"class":85},[79,148072,148073],{"class":89}," hello.py\n",[19,148075,148076],{},"或：",[51,148078,148080],{"className":73,"code":148079,"language":75,"meta":57,"style":57},"python3 hello.py\n",[59,148081,148082],{"__ignoreMap":57},[79,148083,148084,148086],{"class":81,"line":82},[79,148085,102857],{"class":85},[79,148087,148073],{"class":89},[19,148089,148090],{},"输出：",[51,148092,148095],{"className":148093,"code":148094,"language":56,"meta":57},[54],"Hello World\n你好，Python\n",[59,148096,148094],{"__ignoreMap":57},[14,148098,148100],{"id":148099},"_18-print函数","1.8 print函数",[19,148102,148103,148106],{},[59,148104,148105],{},"print()"," 用来输出内容。",[51,148108,148110],{"className":439,"code":148109,"language":441,"meta":57,"style":57},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[59,148111,148112,148122,148132,148142],{"__ignoreMap":57},[79,148113,148114,148116,148118,148120],{"class":81,"line":82},[79,148115,1889],{"class":96},[79,148117,455],{"class":228},[79,148119,7911],{"class":89},[79,148121,850],{"class":228},[79,148123,148124,148126,148128,148130],{"class":81,"line":167},[79,148125,1889],{"class":96},[79,148127,455],{"class":228},[79,148129,2555],{"class":96},[79,148131,850],{"class":228},[79,148133,148134,148136,148138,148140],{"class":81,"line":178},[79,148135,1889],{"class":96},[79,148137,455],{"class":228},[79,148139,2304],{"class":96},[79,148141,850],{"class":228},[79,148143,148144,148146,148148,148151,148153,148155],{"class":81,"line":545},[79,148145,1889],{"class":96},[79,148147,455],{"class":228},[79,148149,148150],{"class":89},"\"年龄:\"",[79,148152,1020],{"class":228},[79,148154,2890],{"class":96},[79,148156,850],{"class":228},[19,148158,148159],{},"多个内容用逗号隔开，默认中间加空格：",[51,148161,148163],{"className":439,"code":148162,"language":441,"meta":57,"style":57},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[59,148164,148165,148175,148185],{"__ignoreMap":57},[79,148166,148167,148170,148172],{"class":81,"line":82},[79,148168,148169],{"class":228},"name ",[79,148171,239],{"class":448},[79,148173,148174],{"class":89}," \"张三\"\n",[79,148176,148177,148180,148182],{"class":81,"line":167},[79,148178,148179],{"class":228},"age ",[79,148181,239],{"class":448},[79,148183,148184],{"class":96}," 18\n",[79,148186,148187,148189,148191,148194,148197,148199],{"class":81,"line":178},[79,148188,1889],{"class":96},[79,148190,455],{"class":228},[79,148192,148193],{"class":89},"\"姓名:\"",[79,148195,148196],{"class":228},", name, ",[79,148198,148150],{"class":89},[79,148200,148201],{"class":228},", age)\n",[19,148203,148204],{},"修改分隔符：",[51,148206,148208],{"className":439,"code":148207,"language":441,"meta":57,"style":57},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[59,148209,148210],{"__ignoreMap":57},[79,148211,148212,148214,148216,148219,148221,148223,148225,148227,148229,148232,148234,148236],{"class":81,"line":82},[79,148213,1889],{"class":96},[79,148215,455],{"class":228},[79,148217,148218],{"class":89},"\"2024\"",[79,148220,1020],{"class":228},[79,148222,335],{"class":89},[79,148224,1020],{"class":228},[79,148226,335],{"class":89},[79,148228,1020],{"class":228},[79,148230,148231],{"class":7284},"sep",[79,148233,239],{"class":448},[79,148235,34481],{"class":89},[79,148237,850],{"class":228},[19,148239,148240],{},"修改结尾符：",[51,148242,148244],{"className":439,"code":148243,"language":441,"meta":57,"style":57},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[59,148245,148246,148264],{"__ignoreMap":57},[79,148247,148248,148250,148252,148254,148256,148258,148260,148262],{"class":81,"line":82},[79,148249,1889],{"class":96},[79,148251,455],{"class":228},[79,148253,7911],{"class":89},[79,148255,1020],{"class":228},[79,148257,47796],{"class":7284},[79,148259,239],{"class":448},[79,148261,6430],{"class":89},[79,148263,850],{"class":228},[79,148265,148266,148268,148270,148273],{"class":81,"line":167},[79,148267,1889],{"class":96},[79,148269,455],{"class":228},[79,148271,148272],{"class":89},"\"python\"",[79,148274,850],{"class":228},[14,148276,148278],{"id":148277},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,148280,148281],{},"交互运行适合临时验证：",[51,148283,148285],{"className":439,"code":148284,"language":441,"meta":57,"style":57},">>> 10 * 3\n30\n",[59,148286,148287,148297],{"__ignoreMap":57},[79,148288,148289,148291,148293,148295],{"class":81,"line":82},[79,148290,147486],{"class":448},[79,148292,4123],{"class":96},[79,148294,467],{"class":448},[79,148296,121669],{"class":96},[79,148298,148299],{"class":81,"line":167},[79,148300,148301],{"class":96},"30\n",[19,148303,148304],{},"脚本运行适合保存程序：",[51,148306,148308],{"className":439,"code":148307,"language":441,"meta":57,"style":57},"price = 8\ncount = 5\nprint(price * count)\n",[59,148309,148310,148320,148329],{"__ignoreMap":57},[79,148311,148312,148315,148317],{"class":81,"line":82},[79,148313,148314],{"class":228},"price ",[79,148316,239],{"class":448},[79,148318,148319],{"class":96}," 8\n",[79,148321,148322,148325,148327],{"class":81,"line":167},[79,148323,148324],{"class":228},"count ",[79,148326,239],{"class":448},[79,148328,56416],{"class":96},[79,148330,148331,148333,148336,148338],{"class":81,"line":178},[79,148332,1889],{"class":96},[79,148334,148335],{"class":228},"(price ",[79,148337,473],{"class":448},[79,148339,148340],{"class":228}," count)\n",[19,148342,148343],{},"实际学习中推荐：",[26,148345,148346,148349,148354],{},[29,148347,148348],{},"临时试一个语法，用交互模式。",[29,148350,148351,148352,127616],{},"写完整练习，用 ",[59,148353,147985],{},[29,148355,148356],{},"写项目，用独立目录和虚拟环境。",[14,148358,148360],{"id":148359},"_110-常见错误","1.10 常见错误",[339,148362,148364],{"id":148363},"_1101-命令找不到","1.10.1 命令找不到",[51,148366,148369],{"className":148367,"code":148368,"language":56,"meta":57},[54],"python: command not found\n",[59,148370,148368],{"__ignoreMap":57},[19,148372,148373],{},"原因：",[26,148375,148376,148379,148382],{},[29,148377,148378],{},"没安装 Python。",[29,148380,148381],{},"PATH 没配置。",[29,148383,148384,148385,497],{},"Linux\u002FmacOS 应该使用 ",[59,148386,102857],{},[339,148388,148390],{"id":148389},"_1102-文件名冲突","1.10.2 文件名冲突",[19,148392,148393],{},"不要把文件命名为：",[51,148395,148398],{"className":148396,"code":148397,"language":56,"meta":57},[54],"random.py\njson.py\ntime.py\nrequests.py\n",[59,148399,148397],{"__ignoreMap":57},[19,148401,148402],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[339,148404,148406],{"id":148405},"_1103-中文乱码","1.10.3 中文乱码",[19,148408,148409],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,148411,148412],{},"如果读写文件出现乱码，要明确指定编码：",[51,148414,148416],{"className":439,"code":148415,"language":441,"meta":57,"style":57},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[59,148417,148418,148452],{"__ignoreMap":57},[79,148419,148420,148422,148425,148427,148430,148432,148435,148437,148440,148442,148445,148447,148449],{"class":81,"line":82},[79,148421,109720],{"class":448},[79,148423,148424],{"class":96}," open",[79,148426,455],{"class":228},[79,148428,148429],{"class":89},"\"data.txt\"",[79,148431,1020],{"class":228},[79,148433,148434],{"class":89},"\"r\"",[79,148436,1020],{"class":228},[79,148438,148439],{"class":7284},"encoding",[79,148441,239],{"class":448},[79,148443,148444],{"class":89},"\"utf-8\"",[79,148446,15747],{"class":228},[79,148448,533],{"class":448},[79,148450,148451],{"class":228}," f:\n",[79,148453,148454,148457,148459],{"class":81,"line":167},[79,148455,148456],{"class":228},"    content ",[79,148458,239],{"class":448},[79,148460,148461],{"class":228}," f.read()\n",[14,148463,148465],{"id":148464},"_111-本章练习","1.11 本章练习",[26,148467,148468,148471,148477],{},[29,148469,148470],{},"安装 Python，并在终端输出版本号。",[29,148472,148473,148474,148476],{},"新建 ",[59,148475,148031],{},"，输出自己的姓名、年龄、学习目标。",[29,148478,106287,148479,148481],{},[59,148480,148105],{}," 输出下面格式：",[51,148483,148486],{"className":148484,"code":148485,"language":56,"meta":57},[54],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[59,148487,148485],{"__ignoreMap":57},[26,148489,148490],{"start":545},[29,148491,106287,148492,148494],{},[59,148493,148231],{}," 输出日期：",[51,148496,148499],{"className":148497,"code":148498,"language":56,"meta":57},[54],"2024-10-10\n",[59,148500,148498],{"__ignoreMap":57},[26,148502,148503],{"start":550},[29,148504,106287,148505,148507,148508,148510],{},[59,148506,47796],{}," 让两次 ",[59,148509,148105],{}," 输出在同一行。",[2159,148512,148513],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":57,"searchDepth":167,"depth":167,"links":148515},[148516,148517,148518,148523,148524,148525,148529,148530,148531,148532,148537],{"id":147398,"depth":167,"text":147399},{"id":147442,"depth":167,"text":147443},{"id":147543,"depth":167,"text":147544,"children":148519},[148520,148521,148522],{"id":147547,"depth":178,"text":147548},{"id":147602,"depth":178,"text":147603},{"id":147638,"depth":178,"text":147639},{"id":147711,"depth":167,"text":147712},{"id":147856,"depth":167,"text":147857},{"id":147961,"depth":167,"text":147962,"children":148526},[148527,148528],{"id":147965,"depth":178,"text":147966},{"id":147994,"depth":178,"text":147995},{"id":148024,"depth":167,"text":148025},{"id":148099,"depth":167,"text":148100},{"id":148277,"depth":167,"text":148278},{"id":148359,"depth":167,"text":148360,"children":148533},[148534,148535,148536],{"id":148363,"depth":178,"text":148364},{"id":148389,"depth":178,"text":148390},{"id":148405,"depth":178,"text":148406},{"id":148464,"depth":167,"text":148465},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":147390,"description":25402},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":148544,"title":148545,"body":148546,"description":25402,"extension":2186,"meta":150950,"navigation":541,"path":150951,"seo":150952,"stem":150953,"__hash__":150954},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":148547,"toc":150935},[148548,148551,148555,148558,148561,148578,148581,148623,148626,148630,148633,148636,148673,148676,148710,148713,148805,148809,148823,148826,148853,148856,148860,148963,148970,148973,148990,148994,149001,149190,149193,149266,149270,149273,149357,149360,149392,149396,149600,149603,149607,149613,149715,149718,149974,149978,149981,149984,149998,150000,150186,150190,150552,150558,150562,150565,150689,150692,150871,150874,150878,150911,150915,150932],[10,148549,148545],{"id":148550},"_10-json与pyecharts折线图",[14,148552,148554],{"id":148553},"_101-数据可视化","10.1 数据可视化",[19,148556,148557],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,148559,148560],{},"常见图表：",[26,148562,148563,148566,148569,148572,148575],{},[29,148564,148565],{},"折线图：看趋势。",[29,148567,148568],{},"柱状图：看分类对比。",[29,148570,148571],{},"饼图：看占比。",[29,148573,148574],{},"地图：看地域分布。",[29,148576,148577],{},"散点图：看两个变量之间的关系。",[19,148579,148580],{},"Python 可视化常用库：",[347,148582,148583,148591],{},[350,148584,148585],{},[353,148586,148587,148589],{},[356,148588,147794],{},[356,148590,25764],{},[367,148592,148593,148600,148608,148615],{},[353,148594,148595,148597],{},[372,148596,147826],{},[372,148598,148599],{},"基础、经典、可定制",[353,148601,148602,148605],{},[372,148603,148604],{},"seaborn",[372,148606,148607],{},"统计图表更美观",[353,148609,148610,148612],{},[372,148611,147834],{},[372,148613,148614],{},"生成交互式网页图表",[353,148616,148617,148620],{},[372,148618,148619],{},"plotly",[372,148621,148622],{},"交互图表能力强",[19,148624,148625],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,148627,148629],{"id":148628},"_102-json回顾","10.2 JSON回顾",[19,148631,148632],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,148634,148635],{},"Python 字典：",[51,148637,148639],{"className":439,"code":148638,"language":441,"meta":57,"style":57},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[59,148640,148641,148649,148660,148669],{"__ignoreMap":57},[79,148642,148643,148645,148647],{"class":81,"line":82},[79,148644,103602],{"class":228},[79,148646,239],{"class":448},[79,148648,17604],{"class":228},[79,148650,148651,148654,148656,148658],{"class":81,"line":167},[79,148652,148653],{"class":89},"    \"name\"",[79,148655,53431],{"class":228},[79,148657,71257],{"class":89},[79,148659,33468],{"class":228},[79,148661,148662,148665,148667],{"class":81,"line":178},[79,148663,148664],{"class":89},"    \"value\"",[79,148666,53431],{"class":228},[79,148668,99443],{"class":96},[79,148670,148671],{"class":81,"line":545},[79,148672,3671],{"class":228},[19,148674,148675],{},"JSON 字符串：",[51,148677,148680],{"className":148678,"code":148679,"language":147425,"meta":57,"style":57},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[59,148681,148682,148686,148697,148706],{"__ignoreMap":57},[79,148683,148684],{"class":81,"line":82},[79,148685,3652],{"class":228},[79,148687,148688,148691,148693,148695],{"class":81,"line":167},[79,148689,148690],{"class":96},"  \"name\"",[79,148692,53431],{"class":228},[79,148694,71257],{"class":89},[79,148696,33468],{"class":228},[79,148698,148699,148702,148704],{"class":81,"line":178},[79,148700,148701],{"class":96},"  \"value\"",[79,148703,53431],{"class":228},[79,148705,99443],{"class":96},[79,148707,148708],{"class":81,"line":545},[79,148709,3671],{"class":228},[19,148711,148712],{},"Python 与 JSON 的转换：",[51,148714,148716],{"className":439,"code":148715,"language":441,"meta":57,"style":57},"import json\n\ndata = {\"name\": \"北京\", \"value\": 100}\n\njson_text = json.dumps(data, ensure_ascii=False)\nprint(json_text)\n\nnew_data = json.loads(json_text)\nprint(new_data)\n",[59,148717,148718,148725,148729,148754,148758,148777,148784,148788,148798],{"__ignoreMap":57},[79,148719,148720,148722],{"class":81,"line":82},[79,148721,520],{"class":448},[79,148723,148724],{"class":228}," json\n",[79,148726,148727],{"class":81,"line":167},[79,148728,542],{"emptyLinePlaceholder":541},[79,148730,148731,148733,148735,148737,148739,148741,148743,148745,148748,148750,148752],{"class":81,"line":178},[79,148732,103602],{"class":228},[79,148734,239],{"class":448},[79,148736,6518],{"class":228},[79,148738,64667],{"class":89},[79,148740,53431],{"class":228},[79,148742,71257],{"class":89},[79,148744,1020],{"class":228},[79,148746,148747],{"class":89},"\"value\"",[79,148749,53431],{"class":228},[79,148751,2555],{"class":96},[79,148753,3671],{"class":228},[79,148755,148756],{"class":81,"line":545},[79,148757,542],{"emptyLinePlaceholder":541},[79,148759,148760,148763,148765,148768,148771,148773,148775],{"class":81,"line":550},[79,148761,148762],{"class":228},"json_text ",[79,148764,239],{"class":448},[79,148766,148767],{"class":228}," json.dumps(data, ",[79,148769,148770],{"class":7284},"ensure_ascii",[79,148772,239],{"class":448},[79,148774,35984],{"class":96},[79,148776,850],{"class":228},[79,148778,148779,148781],{"class":81,"line":562},[79,148780,1889],{"class":96},[79,148782,148783],{"class":228},"(json_text)\n",[79,148785,148786],{"class":81,"line":568},[79,148787,542],{"emptyLinePlaceholder":541},[79,148789,148790,148793,148795],{"class":81,"line":574},[79,148791,148792],{"class":228},"new_data ",[79,148794,239],{"class":448},[79,148796,148797],{"class":228}," json.loads(json_text)\n",[79,148799,148800,148802],{"class":81,"line":579},[79,148801,1889],{"class":96},[79,148803,148804],{"class":228},"(new_data)\n",[14,148806,148808],{"id":148807},"_103-安装pyecharts","10.3 安装pyecharts",[51,148810,148812],{"className":73,"code":148811,"language":75,"meta":57,"style":57},"pip install pyecharts\n",[59,148813,148814],{"__ignoreMap":57},[79,148815,148816,148818,148820],{"class":81,"line":82},[79,148817,125],{"class":85},[79,148819,93],{"class":89},[79,148821,148822],{"class":89}," pyecharts\n",[19,148824,148825],{},"验证：",[51,148827,148829],{"className":439,"code":148828,"language":441,"meta":57,"style":57},"import pyecharts\n\nprint(pyecharts.__version__)\n",[59,148830,148831,148837,148841],{"__ignoreMap":57},[79,148832,148833,148835],{"class":81,"line":82},[79,148834,520],{"class":448},[79,148836,148822],{"class":228},[79,148838,148839],{"class":81,"line":167},[79,148840,542],{"emptyLinePlaceholder":541},[79,148842,148843,148845,148848,148851],{"class":81,"line":178},[79,148844,1889],{"class":96},[79,148846,148847],{"class":228},"(pyecharts.",[79,148849,148850],{"class":96},"__version__",[79,148852,850],{"class":228},[19,148854,148855],{},"如果使用虚拟环境，要先激活环境再安装。",[14,148857,148859],{"id":148858},"_104-第一个折线图","10.4 第一个折线图",[51,148861,148863],{"className":439,"code":148862,"language":441,"meta":57,"style":57},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[59,148864,148865,148877,148881,148891,148921,148953],{"__ignoreMap":57},[79,148866,148867,148869,148872,148874],{"class":81,"line":82},[79,148868,32745],{"class":448},[79,148870,148871],{"class":228}," pyecharts.charts ",[79,148873,520],{"class":448},[79,148875,148876],{"class":228}," Line\n",[79,148878,148879],{"class":81,"line":167},[79,148880,542],{"emptyLinePlaceholder":541},[79,148882,148883,148886,148888],{"class":81,"line":178},[79,148884,148885],{"class":228},"line ",[79,148887,239],{"class":448},[79,148889,148890],{"class":228}," Line()\n",[79,148892,148893,148896,148899,148901,148904,148906,148909,148911,148914,148916,148919],{"class":81,"line":545},[79,148894,148895],{"class":228},"line.add_xaxis([",[79,148897,148898],{"class":89},"\"周一\"",[79,148900,1020],{"class":228},[79,148902,148903],{"class":89},"\"周二\"",[79,148905,1020],{"class":228},[79,148907,148908],{"class":89},"\"周三\"",[79,148910,1020],{"class":228},[79,148912,148913],{"class":89},"\"周四\"",[79,148915,1020],{"class":228},[79,148917,148918],{"class":89},"\"周五\"",[79,148920,6727],{"class":228},[79,148922,148923,148926,148929,148931,148933,148935,148937,148939,148941,148943,148946,148948,148951],{"class":81,"line":550},[79,148924,148925],{"class":228},"line.add_yaxis(",[79,148927,148928],{"class":89},"\"销售额\"",[79,148930,79506],{"class":228},[79,148932,2555],{"class":96},[79,148934,1020],{"class":228},[79,148936,3057],{"class":96},[79,148938,1020],{"class":228},[79,148940,3102],{"class":96},[79,148942,1020],{"class":228},[79,148944,148945],{"class":96},"150",[79,148947,1020],{"class":228},[79,148949,148950],{"class":96},"180",[79,148952,6727],{"class":228},[79,148954,148955,148958,148961],{"class":81,"line":562},[79,148956,148957],{"class":228},"line.render(",[79,148959,148960],{"class":89},"\"line.html\"",[79,148962,850],{"class":228},[19,148964,148965,148966,148969],{},"运行后会生成 ",[59,148967,148968],{},"line.html","，用浏览器打开即可看到图表。",[19,148971,148972],{},"核心步骤：",[26,148974,148975,148978,148981,148984,148987],{},[29,148976,148977],{},"导入图表类。",[29,148979,148980],{},"创建图表对象。",[29,148982,148983],{},"添加 x 轴数据。",[29,148985,148986],{},"添加 y 轴数据。",[29,148988,148989],{},"渲染为 HTML。",[14,148991,148993],{"id":148992},"_105-全局配置","10.5 全局配置",[19,148995,148996,148997,149000],{},"常用配置在 ",[59,148998,148999],{},"pyecharts.options"," 中。",[51,149002,149004],{"className":439,"code":149003,"language":441,"meta":57,"style":57},"from pyecharts import options as opts\nfrom pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"一周销售额\"),\n    xaxis_opts=opts.AxisOpts(name=\"日期\"),\n    yaxis_opts=opts.AxisOpts(name=\"金额\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n)\nline.render(\"line.html\")\n",[59,149005,149006,149023,149033,149037,149045,149069,149097,149102,149121,149140,149158,149178,149182],{"__ignoreMap":57},[79,149007,149008,149010,149013,149015,149018,149020],{"class":81,"line":82},[79,149009,32745],{"class":448},[79,149011,149012],{"class":228}," pyecharts ",[79,149014,520],{"class":448},[79,149016,149017],{"class":228}," options ",[79,149019,533],{"class":448},[79,149021,149022],{"class":228}," opts\n",[79,149024,149025,149027,149029,149031],{"class":81,"line":167},[79,149026,32745],{"class":448},[79,149028,148871],{"class":228},[79,149030,520],{"class":448},[79,149032,148876],{"class":228},[79,149034,149035],{"class":81,"line":178},[79,149036,542],{"emptyLinePlaceholder":541},[79,149038,149039,149041,149043],{"class":81,"line":545},[79,149040,148885],{"class":228},[79,149042,239],{"class":448},[79,149044,148890],{"class":228},[79,149046,149047,149049,149051,149053,149055,149057,149059,149061,149063,149065,149067],{"class":81,"line":550},[79,149048,148895],{"class":228},[79,149050,148898],{"class":89},[79,149052,1020],{"class":228},[79,149054,148903],{"class":89},[79,149056,1020],{"class":228},[79,149058,148908],{"class":89},[79,149060,1020],{"class":228},[79,149062,148913],{"class":89},[79,149064,1020],{"class":228},[79,149066,148918],{"class":89},[79,149068,6727],{"class":228},[79,149070,149071,149073,149075,149077,149079,149081,149083,149085,149087,149089,149091,149093,149095],{"class":81,"line":562},[79,149072,148925],{"class":228},[79,149074,148928],{"class":89},[79,149076,79506],{"class":228},[79,149078,2555],{"class":96},[79,149080,1020],{"class":228},[79,149082,3057],{"class":96},[79,149084,1020],{"class":228},[79,149086,3102],{"class":96},[79,149088,1020],{"class":228},[79,149090,148945],{"class":96},[79,149092,1020],{"class":228},[79,149094,148950],{"class":96},[79,149096,6727],{"class":228},[79,149098,149099],{"class":81,"line":568},[79,149100,149101],{"class":228},"line.set_global_opts(\n",[79,149103,149104,149107,149109,149112,149114,149116,149119],{"class":81,"line":574},[79,149105,149106],{"class":7284},"    title_opts",[79,149108,239],{"class":448},[79,149110,149111],{"class":228},"opts.TitleOpts(",[79,149113,53401],{"class":7284},[79,149115,239],{"class":448},[79,149117,149118],{"class":89},"\"一周销售额\"",[79,149120,40042],{"class":228},[79,149122,149123,149126,149128,149131,149133,149135,149138],{"class":81,"line":579},[79,149124,149125],{"class":7284},"    xaxis_opts",[79,149127,239],{"class":448},[79,149129,149130],{"class":228},"opts.AxisOpts(",[79,149132,81798],{"class":7284},[79,149134,239],{"class":448},[79,149136,149137],{"class":89},"\"日期\"",[79,149139,40042],{"class":228},[79,149141,149142,149145,149147,149149,149151,149153,149156],{"class":81,"line":585},[79,149143,149144],{"class":7284},"    yaxis_opts",[79,149146,239],{"class":448},[79,149148,149130],{"class":228},[79,149150,81798],{"class":7284},[79,149152,239],{"class":448},[79,149154,149155],{"class":89},"\"金额\"",[79,149157,40042],{"class":228},[79,149159,149160,149163,149165,149168,149171,149173,149176],{"class":81,"line":591},[79,149161,149162],{"class":7284},"    tooltip_opts",[79,149164,239],{"class":448},[79,149166,149167],{"class":228},"opts.TooltipOpts(",[79,149169,149170],{"class":7284},"trigger",[79,149172,239],{"class":448},[79,149174,149175],{"class":89},"\"axis\"",[79,149177,40042],{"class":228},[79,149179,149180],{"class":81,"line":596},[79,149181,850],{"class":228},[79,149183,149184,149186,149188],{"class":81,"line":602},[79,149185,148957],{"class":228},[79,149187,148960],{"class":89},[79,149189,850],{"class":228},[19,149191,149192],{},"常见全局配置：",[347,149194,149195,149204],{},[350,149196,149197],{},[353,149198,149199,149202],{},[356,149200,149201],{},"配置",[356,149203,104628],{},[367,149205,149206,149216,149226,149236,149246,149256],{},[353,149207,149208,149213],{},[372,149209,149210],{},[59,149211,149212],{},"TitleOpts",[372,149214,149215],{},"标题",[353,149217,149218,149223],{},[372,149219,149220],{},[59,149221,149222],{},"LegendOpts",[372,149224,149225],{},"图例",[353,149227,149228,149233],{},[372,149229,149230],{},[59,149231,149232],{},"TooltipOpts",[372,149234,149235],{},"提示框",[353,149237,149238,149243],{},[372,149239,149240],{},[59,149241,149242],{},"AxisOpts",[372,149244,149245],{},"坐标轴",[353,149247,149248,149253],{},[372,149249,149250],{},[59,149251,149252],{},"VisualMapOpts",[372,149254,149255],{},"视觉映射",[353,149257,149258,149263],{},[372,149259,149260],{},[59,149261,149262],{},"DataZoomOpts",[372,149264,149265],{},"区域缩放",[14,149267,149269],{"id":149268},"_106-系列配置","10.6 系列配置",[19,149271,149272],{},"系列配置作用于某一组数据。",[51,149274,149276],{"className":439,"code":149275,"language":441,"meta":57,"style":57},"line.add_yaxis(\n    series_name=\"销售额\",\n    y_axis=[100, 120, 90, 150, 180],\n    is_smooth=True,\n    label_opts=opts.LabelOpts(is_show=True),\n)\n",[59,149277,149278,149283,149294,149323,149334,149353],{"__ignoreMap":57},[79,149279,149280],{"class":81,"line":82},[79,149281,149282],{"class":228},"line.add_yaxis(\n",[79,149284,149285,149288,149290,149292],{"class":81,"line":167},[79,149286,149287],{"class":7284},"    series_name",[79,149289,239],{"class":448},[79,149291,148928],{"class":89},[79,149293,33468],{"class":228},[79,149295,149296,149299,149301,149303,149305,149307,149309,149311,149313,149315,149317,149319,149321],{"class":81,"line":178},[79,149297,149298],{"class":7284},"    y_axis",[79,149300,239],{"class":448},[79,149302,3130],{"class":228},[79,149304,2555],{"class":96},[79,149306,1020],{"class":228},[79,149308,3057],{"class":96},[79,149310,1020],{"class":228},[79,149312,3102],{"class":96},[79,149314,1020],{"class":228},[79,149316,148945],{"class":96},[79,149318,1020],{"class":228},[79,149320,148950],{"class":96},[79,149322,89823],{"class":228},[79,149324,149325,149328,149330,149332],{"class":81,"line":545},[79,149326,149327],{"class":7284},"    is_smooth",[79,149329,239],{"class":448},[79,149331,33478],{"class":96},[79,149333,33468],{"class":228},[79,149335,149336,149339,149341,149344,149347,149349,149351],{"class":81,"line":550},[79,149337,149338],{"class":7284},"    label_opts",[79,149340,239],{"class":448},[79,149342,149343],{"class":228},"opts.LabelOpts(",[79,149345,149346],{"class":7284},"is_show",[79,149348,239],{"class":448},[79,149350,33478],{"class":96},[79,149352,40042],{"class":228},[79,149354,149355],{"class":81,"line":562},[79,149356,850],{"class":228},[19,149358,149359],{},"常用参数：",[26,149361,149362,149368,149374,149380,149386],{},[29,149363,149364,149367],{},[59,149365,149366],{},"series_name","：系列名称。",[29,149369,149370,149373],{},[59,149371,149372],{},"y_axis","：y 轴数据。",[29,149375,149376,149379],{},[59,149377,149378],{},"is_smooth","：是否平滑曲线。",[29,149381,149382,149385],{},[59,149383,149384],{},"label_opts","：标签配置。",[29,149387,149388,149391],{},[59,149389,149390],{},"symbol_size","：标记点大小。",[14,149393,149395],{"id":149394},"_107-多条折线","10.7 多条折线",[51,149397,149399],{"className":439,"code":149398,"language":441,"meta":57,"style":57},"from pyecharts import options as opts\nfrom pyecharts.charts import Line\n\ndates = [\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"]\n\nline = Line()\nline.add_xaxis(dates)\nline.add_yaxis(\"线上销售\", [100, 130, 120, 160, 200], is_smooth=True)\nline.add_yaxis(\"线下销售\", [80, 90, 100, 120, 150], is_smooth=True)\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"线上线下销售趋势\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n)\nline.render(\"sales.html\")\n",[59,149400,149401,149415,149425,149429,149458,149462,149470,149475,149513,149550,149554,149571,149587,149591],{"__ignoreMap":57},[79,149402,149403,149405,149407,149409,149411,149413],{"class":81,"line":82},[79,149404,32745],{"class":448},[79,149406,149012],{"class":228},[79,149408,520],{"class":448},[79,149410,149017],{"class":228},[79,149412,533],{"class":448},[79,149414,149022],{"class":228},[79,149416,149417,149419,149421,149423],{"class":81,"line":167},[79,149418,32745],{"class":448},[79,149420,148871],{"class":228},[79,149422,520],{"class":448},[79,149424,148876],{"class":228},[79,149426,149427],{"class":81,"line":178},[79,149428,542],{"emptyLinePlaceholder":541},[79,149430,149431,149434,149436,149438,149440,149442,149444,149446,149448,149450,149452,149454,149456],{"class":81,"line":545},[79,149432,149433],{"class":228},"dates ",[79,149435,239],{"class":448},[79,149437,54220],{"class":228},[79,149439,148898],{"class":89},[79,149441,1020],{"class":228},[79,149443,148903],{"class":89},[79,149445,1020],{"class":228},[79,149447,148908],{"class":89},[79,149449,1020],{"class":228},[79,149451,148913],{"class":89},[79,149453,1020],{"class":228},[79,149455,148918],{"class":89},[79,149457,762],{"class":228},[79,149459,149460],{"class":81,"line":550},[79,149461,542],{"emptyLinePlaceholder":541},[79,149463,149464,149466,149468],{"class":81,"line":562},[79,149465,148885],{"class":228},[79,149467,239],{"class":448},[79,149469,148890],{"class":228},[79,149471,149472],{"class":81,"line":568},[79,149473,149474],{"class":228},"line.add_xaxis(dates)\n",[79,149476,149477,149479,149482,149484,149486,149488,149491,149493,149495,149497,149499,149501,149503,149505,149507,149509,149511],{"class":81,"line":574},[79,149478,148925],{"class":228},[79,149480,149481],{"class":89},"\"线上销售\"",[79,149483,79506],{"class":228},[79,149485,2555],{"class":96},[79,149487,1020],{"class":228},[79,149489,149490],{"class":96},"130",[79,149492,1020],{"class":228},[79,149494,3057],{"class":96},[79,149496,1020],{"class":228},[79,149498,23073],{"class":96},[79,149500,1020],{"class":228},[79,149502,3817],{"class":96},[79,149504,113835],{"class":228},[79,149506,149378],{"class":7284},[79,149508,239],{"class":448},[79,149510,33478],{"class":96},[79,149512,850],{"class":228},[79,149514,149515,149517,149520,149522,149524,149526,149528,149530,149532,149534,149536,149538,149540,149542,149544,149546,149548],{"class":81,"line":579},[79,149516,148925],{"class":228},[79,149518,149519],{"class":89},"\"线下销售\"",[79,149521,79506],{"class":228},[79,149523,2852],{"class":96},[79,149525,1020],{"class":228},[79,149527,3102],{"class":96},[79,149529,1020],{"class":228},[79,149531,2555],{"class":96},[79,149533,1020],{"class":228},[79,149535,3057],{"class":96},[79,149537,1020],{"class":228},[79,149539,148945],{"class":96},[79,149541,113835],{"class":228},[79,149543,149378],{"class":7284},[79,149545,239],{"class":448},[79,149547,33478],{"class":96},[79,149549,850],{"class":228},[79,149551,149552],{"class":81,"line":585},[79,149553,149101],{"class":228},[79,149555,149556,149558,149560,149562,149564,149566,149569],{"class":81,"line":591},[79,149557,149106],{"class":7284},[79,149559,239],{"class":448},[79,149561,149111],{"class":228},[79,149563,53401],{"class":7284},[79,149565,239],{"class":448},[79,149567,149568],{"class":89},"\"线上线下销售趋势\"",[79,149570,40042],{"class":228},[79,149572,149573,149575,149577,149579,149581,149583,149585],{"class":81,"line":596},[79,149574,149162],{"class":7284},[79,149576,239],{"class":448},[79,149578,149167],{"class":228},[79,149580,149170],{"class":7284},[79,149582,239],{"class":448},[79,149584,149175],{"class":89},[79,149586,40042],{"class":228},[79,149588,149589],{"class":81,"line":602},[79,149590,850],{"class":228},[79,149592,149593,149595,149598],{"class":81,"line":608},[79,149594,148957],{"class":228},[79,149596,149597],{"class":89},"\"sales.html\"",[79,149599,850],{"class":228},[19,149601,149602],{},"多条折线适合比较不同指标或不同地区。",[14,149604,149606],{"id":149605},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,149608,149609,149610,26638],{},"假设 ",[59,149611,149612],{},"sales.json",[51,149614,149616],{"className":148678,"code":149615,"language":147425,"meta":57,"style":57},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[59,149617,149618,149623,149655,149683,149711],{"__ignoreMap":57},[79,149619,149620],{"class":81,"line":82},[79,149621,149622],{"class":228},"[\n",[79,149624,149625,149628,149631,149633,149635,149637,149640,149642,149644,149646,149649,149651,149653],{"class":81,"line":167},[79,149626,149627],{"class":228},"  {",[79,149629,149630],{"class":96},"\"date\"",[79,149632,53431],{"class":228},[79,149634,148898],{"class":89},[79,149636,1020],{"class":228},[79,149638,149639],{"class":96},"\"online\"",[79,149641,53431],{"class":228},[79,149643,2555],{"class":96},[79,149645,1020],{"class":228},[79,149647,149648],{"class":96},"\"offline\"",[79,149650,53431],{"class":228},[79,149652,2852],{"class":96},[79,149654,7000],{"class":228},[79,149656,149657,149659,149661,149663,149665,149667,149669,149671,149673,149675,149677,149679,149681],{"class":81,"line":178},[79,149658,149627],{"class":228},[79,149660,149630],{"class":96},[79,149662,53431],{"class":228},[79,149664,148903],{"class":89},[79,149666,1020],{"class":228},[79,149668,149639],{"class":96},[79,149670,53431],{"class":228},[79,149672,149490],{"class":96},[79,149674,1020],{"class":228},[79,149676,149648],{"class":96},[79,149678,53431],{"class":228},[79,149680,3102],{"class":96},[79,149682,7000],{"class":228},[79,149684,149685,149687,149689,149691,149693,149695,149697,149699,149701,149703,149705,149707,149709],{"class":81,"line":545},[79,149686,149627],{"class":228},[79,149688,149630],{"class":96},[79,149690,53431],{"class":228},[79,149692,148908],{"class":89},[79,149694,1020],{"class":228},[79,149696,149639],{"class":96},[79,149698,53431],{"class":228},[79,149700,3057],{"class":96},[79,149702,1020],{"class":228},[79,149704,149648],{"class":96},[79,149706,53431],{"class":228},[79,149708,2555],{"class":96},[79,149710,3671],{"class":228},[79,149712,149713],{"class":81,"line":550},[79,149714,762],{"class":228},[19,149716,149717],{},"读取并绘图：",[51,149719,149721],{"className":439,"code":149720,"language":441,"meta":57,"style":57},"import json\nfrom pyecharts import options as opts\nfrom pyecharts.charts import Line\n\nwith open(\"sales.json\", \"r\", encoding=\"utf-8\") as file:\n    data = json.load(file)\n\ndates = []\nonline_sales = []\noffline_sales = []\n\nfor item in data:\n    dates.append(item[\"date\"])\n    online_sales.append(item[\"online\"])\n    offline_sales.append(item[\"offline\"])\n\nline = Line()\nline.add_xaxis(dates)\nline.add_yaxis(\"线上销售\", online_sales, is_smooth=True)\nline.add_yaxis(\"线下销售\", offline_sales, is_smooth=True)\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"销售趋势\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n)\nline.render(\"sales.html\")\n",[59,149722,149723,149729,149743,149753,149757,149789,149802,149806,149814,149823,149832,149836,149848,149857,149866,149875,149879,149887,149891,149908,149925,149929,149946,149962,149966],{"__ignoreMap":57},[79,149724,149725,149727],{"class":81,"line":82},[79,149726,520],{"class":448},[79,149728,148724],{"class":228},[79,149730,149731,149733,149735,149737,149739,149741],{"class":81,"line":167},[79,149732,32745],{"class":448},[79,149734,149012],{"class":228},[79,149736,520],{"class":448},[79,149738,149017],{"class":228},[79,149740,533],{"class":448},[79,149742,149022],{"class":228},[79,149744,149745,149747,149749,149751],{"class":81,"line":178},[79,149746,32745],{"class":448},[79,149748,148871],{"class":228},[79,149750,520],{"class":448},[79,149752,148876],{"class":228},[79,149754,149755],{"class":81,"line":545},[79,149756,542],{"emptyLinePlaceholder":541},[79,149758,149759,149761,149763,149765,149768,149770,149772,149774,149776,149778,149780,149782,149784,149787],{"class":81,"line":550},[79,149760,109720],{"class":448},[79,149762,148424],{"class":96},[79,149764,455],{"class":228},[79,149766,149767],{"class":89},"\"sales.json\"",[79,149769,1020],{"class":228},[79,149771,148434],{"class":89},[79,149773,1020],{"class":228},[79,149775,148439],{"class":7284},[79,149777,239],{"class":448},[79,149779,148444],{"class":89},[79,149781,15747],{"class":228},[79,149783,533],{"class":448},[79,149785,149786],{"class":7284}," file",[79,149788,745],{"class":228},[79,149790,149791,149793,149795,149798,149800],{"class":81,"line":562},[79,149792,856],{"class":228},[79,149794,239],{"class":448},[79,149796,149797],{"class":228}," json.load(",[79,149799,47349],{"class":7284},[79,149801,850],{"class":228},[79,149803,149804],{"class":81,"line":568},[79,149805,542],{"emptyLinePlaceholder":541},[79,149807,149808,149810,149812],{"class":81,"line":574},[79,149809,149433],{"class":228},[79,149811,239],{"class":448},[79,149813,53832],{"class":228},[79,149815,149816,149819,149821],{"class":81,"line":579},[79,149817,149818],{"class":228},"online_sales ",[79,149820,239],{"class":448},[79,149822,53832],{"class":228},[79,149824,149825,149828,149830],{"class":81,"line":585},[79,149826,149827],{"class":228},"offline_sales ",[79,149829,239],{"class":448},[79,149831,53832],{"class":228},[79,149833,149834],{"class":81,"line":591},[79,149835,542],{"emptyLinePlaceholder":541},[79,149837,149838,149840,149843,149845],{"class":81,"line":596},[79,149839,1638],{"class":448},[79,149841,149842],{"class":228}," item ",[79,149844,921],{"class":448},[79,149846,149847],{"class":228}," data:\n",[79,149849,149850,149853,149855],{"class":81,"line":602},[79,149851,149852],{"class":228},"    dates.append(item[",[79,149854,149630],{"class":89},[79,149856,6727],{"class":228},[79,149858,149859,149862,149864],{"class":81,"line":608},[79,149860,149861],{"class":228},"    online_sales.append(item[",[79,149863,149639],{"class":89},[79,149865,6727],{"class":228},[79,149867,149868,149871,149873],{"class":81,"line":614},[79,149869,149870],{"class":228},"    offline_sales.append(item[",[79,149872,149648],{"class":89},[79,149874,6727],{"class":228},[79,149876,149877],{"class":81,"line":619},[79,149878,542],{"emptyLinePlaceholder":541},[79,149880,149881,149883,149885],{"class":81,"line":625},[79,149882,148885],{"class":228},[79,149884,239],{"class":448},[79,149886,148890],{"class":228},[79,149888,149889],{"class":81,"line":631},[79,149890,149474],{"class":228},[79,149892,149893,149895,149897,149900,149902,149904,149906],{"class":81,"line":637},[79,149894,148925],{"class":228},[79,149896,149481],{"class":89},[79,149898,149899],{"class":228},", online_sales, ",[79,149901,149378],{"class":7284},[79,149903,239],{"class":448},[79,149905,33478],{"class":96},[79,149907,850],{"class":228},[79,149909,149910,149912,149914,149917,149919,149921,149923],{"class":81,"line":643},[79,149911,148925],{"class":228},[79,149913,149519],{"class":89},[79,149915,149916],{"class":228},", offline_sales, ",[79,149918,149378],{"class":7284},[79,149920,239],{"class":448},[79,149922,33478],{"class":96},[79,149924,850],{"class":228},[79,149926,149927],{"class":81,"line":649},[79,149928,149101],{"class":228},[79,149930,149931,149933,149935,149937,149939,149941,149944],{"class":81,"line":655},[79,149932,149106],{"class":7284},[79,149934,239],{"class":448},[79,149936,149111],{"class":228},[79,149938,53401],{"class":7284},[79,149940,239],{"class":448},[79,149942,149943],{"class":89},"\"销售趋势\"",[79,149945,40042],{"class":228},[79,149947,149948,149950,149952,149954,149956,149958,149960],{"class":81,"line":660},[79,149949,149162],{"class":7284},[79,149951,239],{"class":448},[79,149953,149167],{"class":228},[79,149955,149170],{"class":7284},[79,149957,239],{"class":448},[79,149959,149175],{"class":89},[79,149961,40042],{"class":228},[79,149963,149964],{"class":81,"line":666},[79,149965,850],{"class":228},[79,149967,149968,149970,149972],{"class":81,"line":672},[79,149969,148957],{"class":228},[79,149971,149597],{"class":89},[79,149973,850],{"class":228},[14,149975,149977],{"id":149976},"_109-数据清洗","10.9 数据清洗",[19,149979,149980],{},"真实数据经常不整齐，需要清洗。",[19,149982,149983],{},"常见问题：",[26,149985,149986,149989,149992,149995],{},[29,149987,149988],{},"数字是字符串。",[29,149990,149991],{},"字段缺失。",[29,149993,149994],{},"空值。",[29,149996,149997],{},"日期格式不统一。",[19,149999,17167],{},[51,150001,150003],{"className":439,"code":150002,"language":441,"meta":57,"style":57},"raw_data = [\n    {\"date\": \"周一\", \"sales\": \"100\"},\n    {\"date\": \"周二\", \"sales\": \"\"},\n    {\"date\": \"周三\", \"sales\": \"120\"},\n]\n\ndates = []\nsales = []\n\nfor item in raw_data:\n    value = item.get(\"sales\")\n    if not value:\n        continue\n\n    dates.append(item[\"date\"])\n    sales.append(int(value))\n\nprint(dates)\nprint(sales)\n",[59,150004,150005,150014,150037,150057,150078,150082,150086,150094,150103,150107,150118,150132,150141,150146,150150,150158,150168,150172,150179],{"__ignoreMap":57},[79,150006,150007,150010,150012],{"class":81,"line":82},[79,150008,150009],{"class":228},"raw_data ",[79,150011,239],{"class":448},[79,150013,57436],{"class":228},[79,150015,150016,150019,150021,150023,150025,150027,150030,150032,150035],{"class":81,"line":167},[79,150017,150018],{"class":228},"    {",[79,150020,149630],{"class":89},[79,150022,53431],{"class":228},[79,150024,148898],{"class":89},[79,150026,1020],{"class":228},[79,150028,150029],{"class":89},"\"sales\"",[79,150031,53431],{"class":228},[79,150033,150034],{"class":89},"\"100\"",[79,150036,7000],{"class":228},[79,150038,150039,150041,150043,150045,150047,150049,150051,150053,150055],{"class":81,"line":178},[79,150040,150018],{"class":228},[79,150042,149630],{"class":89},[79,150044,53431],{"class":228},[79,150046,148903],{"class":89},[79,150048,1020],{"class":228},[79,150050,150029],{"class":89},[79,150052,53431],{"class":228},[79,150054,9717],{"class":89},[79,150056,7000],{"class":228},[79,150058,150059,150061,150063,150065,150067,150069,150071,150073,150076],{"class":81,"line":545},[79,150060,150018],{"class":228},[79,150062,149630],{"class":89},[79,150064,53431],{"class":228},[79,150066,148908],{"class":89},[79,150068,1020],{"class":228},[79,150070,150029],{"class":89},[79,150072,53431],{"class":228},[79,150074,150075],{"class":89},"\"120\"",[79,150077,7000],{"class":228},[79,150079,150080],{"class":81,"line":550},[79,150081,762],{"class":228},[79,150083,150084],{"class":81,"line":562},[79,150085,542],{"emptyLinePlaceholder":541},[79,150087,150088,150090,150092],{"class":81,"line":568},[79,150089,149433],{"class":228},[79,150091,239],{"class":448},[79,150093,53832],{"class":228},[79,150095,150096,150099,150101],{"class":81,"line":574},[79,150097,150098],{"class":228},"sales ",[79,150100,239],{"class":448},[79,150102,53832],{"class":228},[79,150104,150105],{"class":81,"line":579},[79,150106,542],{"emptyLinePlaceholder":541},[79,150108,150109,150111,150113,150115],{"class":81,"line":585},[79,150110,1638],{"class":448},[79,150112,149842],{"class":228},[79,150114,921],{"class":448},[79,150116,150117],{"class":228}," raw_data:\n",[79,150119,150120,150123,150125,150128,150130],{"class":81,"line":591},[79,150121,150122],{"class":228},"    value ",[79,150124,239],{"class":448},[79,150126,150127],{"class":228}," item.get(",[79,150129,150029],{"class":89},[79,150131,850],{"class":228},[79,150133,150134,150136,150138],{"class":81,"line":596},[79,150135,5176],{"class":448},[79,150137,40925],{"class":448},[79,150139,150140],{"class":228}," value:\n",[79,150142,150143],{"class":81,"line":602},[79,150144,150145],{"class":448},"        continue\n",[79,150147,150148],{"class":81,"line":608},[79,150149,542],{"emptyLinePlaceholder":541},[79,150151,150152,150154,150156],{"class":81,"line":614},[79,150153,149852],{"class":228},[79,150155,149630],{"class":89},[79,150157,6727],{"class":228},[79,150159,150160,150163,150165],{"class":81,"line":619},[79,150161,150162],{"class":228},"    sales.append(",[79,150164,2262],{"class":96},[79,150166,150167],{"class":228},"(value))\n",[79,150169,150170],{"class":81,"line":625},[79,150171,542],{"emptyLinePlaceholder":541},[79,150173,150174,150176],{"class":81,"line":631},[79,150175,1889],{"class":96},[79,150177,150178],{"class":228},"(dates)\n",[79,150180,150181,150183],{"class":81,"line":637},[79,150182,1889],{"class":96},[79,150184,150185],{"class":228},"(sales)\n",[14,150187,150189],{"id":150188},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[51,150191,150193],{"className":439,"code":150192,"language":441,"meta":57,"style":57},"from pyecharts import options as opts\nfrom pyecharts.charts import Line\n\nsales = [\n    {\"date\": \"2024-10-01\", \"amount\": 1200},\n    {\"date\": \"2024-10-02\", \"amount\": 1800},\n    {\"date\": \"2024-10-03\", \"amount\": 1500},\n    {\"date\": \"2024-10-04\", \"amount\": 2100},\n    {\"date\": \"2024-10-05\", \"amount\": 2600},\n]\n\ndates = [item[\"date\"] for item in sales]\namounts = [item[\"amount\"] for item in sales]\n\nline = Line()\nline.add_xaxis(dates)\nline.add_yaxis(\n    series_name=\"销售额\",\n    y_axis=amounts,\n    is_smooth=True,\n    label_opts=opts.LabelOpts(is_show=True),\n)\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"每日销售额\"),\n    xaxis_opts=opts.AxisOpts(name=\"日期\"),\n    yaxis_opts=opts.AxisOpts(name=\"金额\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n    datazoom_opts=[opts.DataZoomOpts()],\n)\nline.render(\"daily_sales.html\")\n",[59,150194,150195,150209,150219,150223,150231,150252,150274,150296,150318,150340,150344,150348,150370,150391,150395,150403,150407,150411,150421,150430,150440,150456,150460,150464,150481,150497,150513,150529,150539,150543],{"__ignoreMap":57},[79,150196,150197,150199,150201,150203,150205,150207],{"class":81,"line":82},[79,150198,32745],{"class":448},[79,150200,149012],{"class":228},[79,150202,520],{"class":448},[79,150204,149017],{"class":228},[79,150206,533],{"class":448},[79,150208,149022],{"class":228},[79,150210,150211,150213,150215,150217],{"class":81,"line":167},[79,150212,32745],{"class":448},[79,150214,148871],{"class":228},[79,150216,520],{"class":448},[79,150218,148876],{"class":228},[79,150220,150221],{"class":81,"line":178},[79,150222,542],{"emptyLinePlaceholder":541},[79,150224,150225,150227,150229],{"class":81,"line":545},[79,150226,150098],{"class":228},[79,150228,239],{"class":448},[79,150230,57436],{"class":228},[79,150232,150233,150235,150237,150239,150242,150244,150246,150248,150250],{"class":81,"line":550},[79,150234,150018],{"class":228},[79,150236,149630],{"class":89},[79,150238,53431],{"class":228},[79,150240,150241],{"class":89},"\"2024-10-01\"",[79,150243,1020],{"class":228},[79,150245,86071],{"class":89},[79,150247,53431],{"class":228},[79,150249,94010],{"class":96},[79,150251,7000],{"class":228},[79,150253,150254,150256,150258,150260,150263,150265,150267,150269,150272],{"class":81,"line":562},[79,150255,150018],{"class":228},[79,150257,149630],{"class":89},[79,150259,53431],{"class":228},[79,150261,150262],{"class":89},"\"2024-10-02\"",[79,150264,1020],{"class":228},[79,150266,86071],{"class":89},[79,150268,53431],{"class":228},[79,150270,150271],{"class":96},"1800",[79,150273,7000],{"class":228},[79,150275,150276,150278,150280,150282,150285,150287,150289,150291,150294],{"class":81,"line":568},[79,150277,150018],{"class":228},[79,150279,149630],{"class":89},[79,150281,53431],{"class":228},[79,150283,150284],{"class":89},"\"2024-10-03\"",[79,150286,1020],{"class":228},[79,150288,86071],{"class":89},[79,150290,53431],{"class":228},[79,150292,150293],{"class":96},"1500",[79,150295,7000],{"class":228},[79,150297,150298,150300,150302,150304,150307,150309,150311,150313,150316],{"class":81,"line":574},[79,150299,150018],{"class":228},[79,150301,149630],{"class":89},[79,150303,53431],{"class":228},[79,150305,150306],{"class":89},"\"2024-10-04\"",[79,150308,1020],{"class":228},[79,150310,86071],{"class":89},[79,150312,53431],{"class":228},[79,150314,150315],{"class":96},"2100",[79,150317,7000],{"class":228},[79,150319,150320,150322,150324,150326,150329,150331,150333,150335,150338],{"class":81,"line":579},[79,150321,150018],{"class":228},[79,150323,149630],{"class":89},[79,150325,53431],{"class":228},[79,150327,150328],{"class":89},"\"2024-10-05\"",[79,150330,1020],{"class":228},[79,150332,86071],{"class":89},[79,150334,53431],{"class":228},[79,150336,150337],{"class":96},"2600",[79,150339,7000],{"class":228},[79,150341,150342],{"class":81,"line":585},[79,150343,762],{"class":228},[79,150345,150346],{"class":81,"line":591},[79,150347,542],{"emptyLinePlaceholder":541},[79,150349,150350,150352,150354,150357,150359,150361,150363,150365,150367],{"class":81,"line":596},[79,150351,149433],{"class":228},[79,150353,239],{"class":448},[79,150355,150356],{"class":228}," [item[",[79,150358,149630],{"class":89},[79,150360,877],{"class":228},[79,150362,1638],{"class":448},[79,150364,149842],{"class":228},[79,150366,921],{"class":448},[79,150368,150369],{"class":228}," sales]\n",[79,150371,150372,150375,150377,150379,150381,150383,150385,150387,150389],{"class":81,"line":602},[79,150373,150374],{"class":228},"amounts ",[79,150376,239],{"class":448},[79,150378,150356],{"class":228},[79,150380,86071],{"class":89},[79,150382,877],{"class":228},[79,150384,1638],{"class":448},[79,150386,149842],{"class":228},[79,150388,921],{"class":448},[79,150390,150369],{"class":228},[79,150392,150393],{"class":81,"line":608},[79,150394,542],{"emptyLinePlaceholder":541},[79,150396,150397,150399,150401],{"class":81,"line":614},[79,150398,148885],{"class":228},[79,150400,239],{"class":448},[79,150402,148890],{"class":228},[79,150404,150405],{"class":81,"line":619},[79,150406,149474],{"class":228},[79,150408,150409],{"class":81,"line":625},[79,150410,149282],{"class":228},[79,150412,150413,150415,150417,150419],{"class":81,"line":631},[79,150414,149287],{"class":7284},[79,150416,239],{"class":448},[79,150418,148928],{"class":89},[79,150420,33468],{"class":228},[79,150422,150423,150425,150427],{"class":81,"line":637},[79,150424,149298],{"class":7284},[79,150426,239],{"class":448},[79,150428,150429],{"class":228},"amounts,\n",[79,150431,150432,150434,150436,150438],{"class":81,"line":643},[79,150433,149327],{"class":7284},[79,150435,239],{"class":448},[79,150437,33478],{"class":96},[79,150439,33468],{"class":228},[79,150441,150442,150444,150446,150448,150450,150452,150454],{"class":81,"line":649},[79,150443,149338],{"class":7284},[79,150445,239],{"class":448},[79,150447,149343],{"class":228},[79,150449,149346],{"class":7284},[79,150451,239],{"class":448},[79,150453,33478],{"class":96},[79,150455,40042],{"class":228},[79,150457,150458],{"class":81,"line":655},[79,150459,850],{"class":228},[79,150461,150462],{"class":81,"line":660},[79,150463,149101],{"class":228},[79,150465,150466,150468,150470,150472,150474,150476,150479],{"class":81,"line":666},[79,150467,149106],{"class":7284},[79,150469,239],{"class":448},[79,150471,149111],{"class":228},[79,150473,53401],{"class":7284},[79,150475,239],{"class":448},[79,150477,150478],{"class":89},"\"每日销售额\"",[79,150480,40042],{"class":228},[79,150482,150483,150485,150487,150489,150491,150493,150495],{"class":81,"line":672},[79,150484,149125],{"class":7284},[79,150486,239],{"class":448},[79,150488,149130],{"class":228},[79,150490,81798],{"class":7284},[79,150492,239],{"class":448},[79,150494,149137],{"class":89},[79,150496,40042],{"class":228},[79,150498,150499,150501,150503,150505,150507,150509,150511],{"class":81,"line":678},[79,150500,149144],{"class":7284},[79,150502,239],{"class":448},[79,150504,149130],{"class":228},[79,150506,81798],{"class":7284},[79,150508,239],{"class":448},[79,150510,149155],{"class":89},[79,150512,40042],{"class":228},[79,150514,150515,150517,150519,150521,150523,150525,150527],{"class":81,"line":684},[79,150516,149162],{"class":7284},[79,150518,239],{"class":448},[79,150520,149167],{"class":228},[79,150522,149170],{"class":7284},[79,150524,239],{"class":448},[79,150526,149175],{"class":89},[79,150528,40042],{"class":228},[79,150530,150531,150534,150536],{"class":81,"line":690},[79,150532,150533],{"class":7284},"    datazoom_opts",[79,150535,239],{"class":448},[79,150537,150538],{"class":228},"[opts.DataZoomOpts()],\n",[79,150540,150541],{"class":81,"line":695},[79,150542,850],{"class":228},[79,150544,150545,150547,150550],{"class":81,"line":700},[79,150546,148957],{"class":228},[79,150548,150549],{"class":89},"\"daily_sales.html\"",[79,150551,850],{"class":228},[19,150553,150554,150557],{},[59,150555,150556],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,150559,150561],{"id":150560},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,150563,150564],{},"如果数据结构如下：",[51,150566,150568],{"className":439,"code":150567,"language":441,"meta":57,"style":57},"data = {\n    \"北京\": [\n        {\"date\": \"2024-01-01\", \"confirm\": 10},\n        {\"date\": \"2024-01-02\", \"confirm\": 12},\n    ],\n    \"上海\": [\n        {\"date\": \"2024-01-01\", \"confirm\": 8},\n        {\"date\": \"2024-01-02\", \"confirm\": 13},\n    ],\n}\n",[59,150569,150570,150578,150586,150608,150629,150634,150641,150661,150681,150685],{"__ignoreMap":57},[79,150571,150572,150574,150576],{"class":81,"line":82},[79,150573,103602],{"class":228},[79,150575,239],{"class":448},[79,150577,17604],{"class":228},[79,150579,150580,150583],{"class":81,"line":167},[79,150581,150582],{"class":89},"    \"北京\"",[79,150584,150585],{"class":228},": [\n",[79,150587,150588,150590,150592,150594,150597,150599,150602,150604,150606],{"class":81,"line":178},[79,150589,6987],{"class":228},[79,150591,149630],{"class":89},[79,150593,53431],{"class":228},[79,150595,150596],{"class":89},"\"2024-01-01\"",[79,150598,1020],{"class":228},[79,150600,150601],{"class":89},"\"confirm\"",[79,150603,53431],{"class":228},[79,150605,2689],{"class":96},[79,150607,7000],{"class":228},[79,150609,150610,150612,150614,150616,150619,150621,150623,150625,150627],{"class":81,"line":545},[79,150611,6987],{"class":228},[79,150613,149630],{"class":89},[79,150615,53431],{"class":228},[79,150617,150618],{"class":89},"\"2024-01-02\"",[79,150620,1020],{"class":228},[79,150622,150601],{"class":89},[79,150624,53431],{"class":228},[79,150626,2739],{"class":96},[79,150628,7000],{"class":228},[79,150630,150631],{"class":81,"line":550},[79,150632,150633],{"class":228},"    ],\n",[79,150635,150636,150639],{"class":81,"line":562},[79,150637,150638],{"class":89},"    \"上海\"",[79,150640,150585],{"class":228},[79,150642,150643,150645,150647,150649,150651,150653,150655,150657,150659],{"class":81,"line":568},[79,150644,6987],{"class":228},[79,150646,149630],{"class":89},[79,150648,53431],{"class":228},[79,150650,150596],{"class":89},[79,150652,1020],{"class":228},[79,150654,150601],{"class":89},[79,150656,53431],{"class":228},[79,150658,2638],{"class":96},[79,150660,7000],{"class":228},[79,150662,150663,150665,150667,150669,150671,150673,150675,150677,150679],{"class":81,"line":574},[79,150664,6987],{"class":228},[79,150666,149630],{"class":89},[79,150668,53431],{"class":228},[79,150670,150618],{"class":89},[79,150672,1020],{"class":228},[79,150674,150601],{"class":89},[79,150676,53431],{"class":228},[79,150678,2764],{"class":96},[79,150680,7000],{"class":228},[79,150682,150683],{"class":81,"line":579},[79,150684,150633],{"class":228},[79,150686,150687],{"class":81,"line":585},[79,150688,3671],{"class":228},[19,150690,150691],{},"绘制多地区趋势：",[51,150693,150695],{"className":439,"code":150694,"language":441,"meta":57,"style":57},"from pyecharts import options as opts\nfrom pyecharts.charts import Line\n\ndates = [item[\"date\"] for item in data[\"北京\"]]\n\nline = Line()\nline.add_xaxis(dates)\n\nfor city, records in data.items():\n    values = [item[\"confirm\"] for item in records]\n    line.add_yaxis(city, values, is_smooth=True)\n\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"多地区趋势图\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n)\nline.render(\"trend.html\")\n",[59,150696,150697,150711,150721,150725,150750,150754,150762,150766,150770,150782,150804,150817,150821,150825,150842,150858,150862],{"__ignoreMap":57},[79,150698,150699,150701,150703,150705,150707,150709],{"class":81,"line":82},[79,150700,32745],{"class":448},[79,150702,149012],{"class":228},[79,150704,520],{"class":448},[79,150706,149017],{"class":228},[79,150708,533],{"class":448},[79,150710,149022],{"class":228},[79,150712,150713,150715,150717,150719],{"class":81,"line":167},[79,150714,32745],{"class":448},[79,150716,148871],{"class":228},[79,150718,520],{"class":448},[79,150720,148876],{"class":228},[79,150722,150723],{"class":81,"line":178},[79,150724,542],{"emptyLinePlaceholder":541},[79,150726,150727,150729,150731,150733,150735,150737,150739,150741,150743,150746,150748],{"class":81,"line":545},[79,150728,149433],{"class":228},[79,150730,239],{"class":448},[79,150732,150356],{"class":228},[79,150734,149630],{"class":89},[79,150736,877],{"class":228},[79,150738,1638],{"class":448},[79,150740,149842],{"class":228},[79,150742,921],{"class":448},[79,150744,150745],{"class":228}," data[",[79,150747,71257],{"class":89},[79,150749,79515],{"class":228},[79,150751,150752],{"class":81,"line":550},[79,150753,542],{"emptyLinePlaceholder":541},[79,150755,150756,150758,150760],{"class":81,"line":562},[79,150757,148885],{"class":228},[79,150759,239],{"class":448},[79,150761,148890],{"class":228},[79,150763,150764],{"class":81,"line":568},[79,150765,149474],{"class":228},[79,150767,150768],{"class":81,"line":574},[79,150769,542],{"emptyLinePlaceholder":541},[79,150771,150772,150774,150777,150779],{"class":81,"line":579},[79,150773,1638],{"class":448},[79,150775,150776],{"class":228}," city, records ",[79,150778,921],{"class":448},[79,150780,150781],{"class":228}," data.items():\n",[79,150783,150784,150787,150789,150791,150793,150795,150797,150799,150801],{"class":81,"line":585},[79,150785,150786],{"class":228},"    values ",[79,150788,239],{"class":448},[79,150790,150356],{"class":228},[79,150792,150601],{"class":89},[79,150794,877],{"class":228},[79,150796,1638],{"class":448},[79,150798,149842],{"class":228},[79,150800,921],{"class":448},[79,150802,150803],{"class":228}," records]\n",[79,150805,150806,150809,150811,150813,150815],{"class":81,"line":591},[79,150807,150808],{"class":228},"    line.add_yaxis(city, values, ",[79,150810,149378],{"class":7284},[79,150812,239],{"class":448},[79,150814,33478],{"class":96},[79,150816,850],{"class":228},[79,150818,150819],{"class":81,"line":596},[79,150820,542],{"emptyLinePlaceholder":541},[79,150822,150823],{"class":81,"line":602},[79,150824,149101],{"class":228},[79,150826,150827,150829,150831,150833,150835,150837,150840],{"class":81,"line":608},[79,150828,149106],{"class":7284},[79,150830,239],{"class":448},[79,150832,149111],{"class":228},[79,150834,53401],{"class":7284},[79,150836,239],{"class":448},[79,150838,150839],{"class":89},"\"多地区趋势图\"",[79,150841,40042],{"class":228},[79,150843,150844,150846,150848,150850,150852,150854,150856],{"class":81,"line":614},[79,150845,149162],{"class":7284},[79,150847,239],{"class":448},[79,150849,149167],{"class":228},[79,150851,149170],{"class":7284},[79,150853,239],{"class":448},[79,150855,149175],{"class":89},[79,150857,40042],{"class":228},[79,150859,150860],{"class":81,"line":619},[79,150861,850],{"class":228},[79,150863,150864,150866,150869],{"class":81,"line":625},[79,150865,148957],{"class":228},[79,150867,150868],{"class":89},"\"trend.html\"",[79,150870,850],{"class":228},[19,150872,150873],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,150875,150877],{"id":150876},"_1012-易错点","10.12 易错点",[26,150879,150880,150886,150892,150902,150908],{},[29,150881,150882,150885],{},[59,150883,150884],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[29,150887,150888,150891],{},[59,150889,150890],{},"render()"," 生成的是 HTML，不是图片。",[29,150893,150894,150895,150898,150899,497],{},"JSON 字符串用 ",[59,150896,150897],{},"json.loads()","，JSON 文件用 ",[59,150900,150901],{},"json.load()",[29,150903,150904,150905,497],{},"中文 JSON 保存时加 ",[59,150906,150907],{},"ensure_ascii=False",[29,150909,150910],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,150912,150914],{"id":150913},"_1013-本章练习","10.13 本章练习",[26,150916,150917,150920,150923,150926,150929],{},[29,150918,150919],{},"安装 pyecharts 并生成第一个折线图。",[29,150921,150922],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[29,150924,150925],{},"绘制两条折线，对比线上和线下销售额。",[29,150927,150928],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[29,150930,150931],{},"对含有空值的销售数据进行清洗后再绘图。",[2159,150933,150934],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":57,"searchDepth":167,"depth":167,"links":150936},[150937,150938,150939,150940,150941,150942,150943,150944,150945,150946,150947,150948,150949],{"id":148553,"depth":167,"text":148554},{"id":148628,"depth":167,"text":148629},{"id":148807,"depth":167,"text":148808},{"id":148858,"depth":167,"text":148859},{"id":148992,"depth":167,"text":148993},{"id":149268,"depth":167,"text":149269},{"id":149394,"depth":167,"text":149395},{"id":149605,"depth":167,"text":149606},{"id":149976,"depth":167,"text":149977},{"id":150188,"depth":167,"text":150189},{"id":150560,"depth":167,"text":150561},{"id":150876,"depth":167,"text":150877},{"id":150913,"depth":167,"text":150914},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":148545,"description":25402},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":150956,"title":150957,"body":150958,"description":25402,"extension":2186,"meta":153318,"navigation":541,"path":153319,"seo":153320,"stem":153321,"__hash__":153322},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":150959,"toc":153295},[150960,150963,150967,150970,150973,151049,151052,151143,151146,151150,151153,151197,151210,151214,151217,151284,151287,151291,151294,151378,151386,151390,151395,151536,151539,151550,151556,151562,151676,151680,151683,151686,151939,151942,151946,151949,152053,152056,152060,152211,152215,152222,152335,152339,152342,152448,152451,152455,152458,152489,152492,152597,152600,152604,152608,152618,152686,152690,152697,152761,152764,152768,152774,152870,152879,152883,153207,153216,153220,153248,153252,153292],[10,150961,150957],{"id":150962},"_11-面向对象基础",[14,150964,150966],{"id":150965},"_111-什么是面向对象","11.1 什么是面向对象",[19,150968,150969],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,150971,150972],{},"面向过程：",[51,150974,150976],{"className":439,"code":150975,"language":441,"meta":57,"style":57},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[59,150977,150978,150987,150995,150999,151009,151040,151044],{"__ignoreMap":57},[79,150979,150980,150982,150984],{"class":81,"line":82},[79,150981,148169],{"class":228},[79,150983,239],{"class":448},[79,150985,150986],{"class":89}," \"小明\"\n",[79,150988,150989,150991,150993],{"class":81,"line":167},[79,150990,148179],{"class":228},[79,150992,239],{"class":448},[79,150994,148184],{"class":96},[79,150996,150997],{"class":81,"line":178},[79,150998,542],{"emptyLinePlaceholder":541},[79,151000,151001,151003,151006],{"class":81,"line":545},[79,151002,703],{"class":448},[79,151004,151005],{"class":85}," introduce",[79,151007,151008],{"class":228},"(name, age):\n",[79,151010,151011,151013,151015,151017,151020,151022,151024,151026,151029,151031,151033,151035,151038],{"class":81,"line":550},[79,151012,1161],{"class":96},[79,151014,455],{"class":228},[79,151016,2307],{"class":448},[79,151018,151019],{"class":89},"\"我叫",[79,151021,3136],{"class":96},[79,151023,81798],{"class":228},[79,151025,3185],{"class":96},[79,151027,151028],{"class":89},"，今年",[79,151030,3136],{"class":96},[79,151032,72209],{"class":228},[79,151034,3185],{"class":96},[79,151036,151037],{"class":89},"岁\"",[79,151039,850],{"class":228},[79,151041,151042],{"class":81,"line":562},[79,151043,542],{"emptyLinePlaceholder":541},[79,151045,151046],{"class":81,"line":568},[79,151047,151048],{"class":228},"introduce(name, age)\n",[19,151050,151051],{},"面向对象：",[51,151053,151055],{"className":439,"code":151054,"language":441,"meta":57,"style":57},"class Student:\n    def introduce(self):\n        print(f\"我叫{self.name}，今年{self.age}岁\")\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\nstudent.introduce()\n",[59,151056,151057,151065,151073,151102,151106,151110,151120,151129,151138],{"__ignoreMap":57},[79,151058,151059,151061,151063],{"class":81,"line":82},[79,151060,16727],{"class":448},[79,151062,9963],{"class":85},[79,151064,745],{"class":228},[79,151066,151067,151069,151071],{"class":81,"line":167},[79,151068,32808],{"class":448},[79,151070,151005],{"class":85},[79,151072,32814],{"class":228},[79,151074,151075,151077,151079,151081,151083,151086,151088,151090,151092,151094,151096,151098,151100],{"class":81,"line":178},[79,151076,34449],{"class":96},[79,151078,455],{"class":228},[79,151080,2307],{"class":448},[79,151082,151019],{"class":89},[79,151084,151085],{"class":96},"{self",[79,151087,82289],{"class":228},[79,151089,3185],{"class":96},[79,151091,151028],{"class":89},[79,151093,151085],{"class":96},[79,151095,82301],{"class":228},[79,151097,3185],{"class":96},[79,151099,151037],{"class":89},[79,151101,850],{"class":228},[79,151103,151104],{"class":81,"line":545},[79,151105,542],{"emptyLinePlaceholder":541},[79,151107,151108],{"class":81,"line":550},[79,151109,542],{"emptyLinePlaceholder":541},[79,151111,151112,151115,151117],{"class":81,"line":562},[79,151113,151114],{"class":228},"student ",[79,151116,239],{"class":448},[79,151118,151119],{"class":228}," Student()\n",[79,151121,151122,151125,151127],{"class":81,"line":568},[79,151123,151124],{"class":228},"student.name ",[79,151126,239],{"class":448},[79,151128,150986],{"class":89},[79,151130,151131,151134,151136],{"class":81,"line":574},[79,151132,151133],{"class":228},"student.age ",[79,151135,239],{"class":448},[79,151137,148184],{"class":96},[79,151139,151140],{"class":81,"line":579},[79,151141,151142],{"class":228},"student.introduce()\n",[19,151144,151145],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,151147,151149],{"id":151148},"_112-类和对象","11.2 类和对象",[19,151151,151152],{},"类是模板，对象是根据模板创建出来的具体实例。",[51,151154,151156],{"className":439,"code":151155,"language":441,"meta":57,"style":57},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[59,151157,151158,151166,151171,151175,151179,151188],{"__ignoreMap":57},[79,151159,151160,151162,151164],{"class":81,"line":82},[79,151161,16727],{"class":448},[79,151163,9963],{"class":85},[79,151165,745],{"class":228},[79,151167,151168],{"class":81,"line":167},[79,151169,151170],{"class":448},"    pass\n",[79,151172,151173],{"class":81,"line":178},[79,151174,542],{"emptyLinePlaceholder":541},[79,151176,151177],{"class":81,"line":545},[79,151178,542],{"emptyLinePlaceholder":541},[79,151180,151181,151184,151186],{"class":81,"line":550},[79,151182,151183],{"class":228},"student1 ",[79,151185,239],{"class":448},[79,151187,151119],{"class":228},[79,151189,151190,151193,151195],{"class":81,"line":562},[79,151191,151192],{"class":228},"student2 ",[79,151194,239],{"class":448},[79,151196,151119],{"class":228},[19,151198,151199,151202,151203,1748,151206,151209],{},[59,151200,151201],{},"Student"," 是类，",[59,151204,151205],{},"student1",[59,151207,151208],{},"student2"," 是对象。",[14,151211,151213],{"id":151212},"_113-属性","11.3 属性",[19,151215,151216],{},"属性是对象保存的数据。",[51,151218,151220],{"className":439,"code":151219,"language":441,"meta":57,"style":57},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[59,151221,151222,151230,151234,151238,151242,151250,151258,151266,151270,151277],{"__ignoreMap":57},[79,151223,151224,151226,151228],{"class":81,"line":82},[79,151225,16727],{"class":448},[79,151227,9963],{"class":85},[79,151229,745],{"class":228},[79,151231,151232],{"class":81,"line":167},[79,151233,151170],{"class":448},[79,151235,151236],{"class":81,"line":178},[79,151237,542],{"emptyLinePlaceholder":541},[79,151239,151240],{"class":81,"line":545},[79,151241,542],{"emptyLinePlaceholder":541},[79,151243,151244,151246,151248],{"class":81,"line":550},[79,151245,151114],{"class":228},[79,151247,239],{"class":448},[79,151249,151119],{"class":228},[79,151251,151252,151254,151256],{"class":81,"line":562},[79,151253,151124],{"class":228},[79,151255,239],{"class":448},[79,151257,150986],{"class":89},[79,151259,151260,151262,151264],{"class":81,"line":568},[79,151261,151133],{"class":228},[79,151263,239],{"class":448},[79,151265,148184],{"class":96},[79,151267,151268],{"class":81,"line":574},[79,151269,542],{"emptyLinePlaceholder":541},[79,151271,151272,151274],{"class":81,"line":579},[79,151273,1889],{"class":96},[79,151275,151276],{"class":228},"(student.name)\n",[79,151278,151279,151281],{"class":81,"line":585},[79,151280,1889],{"class":96},[79,151282,151283],{"class":228},"(student.age)\n",[19,151285,151286],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,151288,151290],{"id":151289},"_114-方法","11.4 方法",[19,151292,151293],{},"类中的函数叫方法。",[51,151295,151296],{"className":439,"code":151054,"language":441,"meta":57,"style":57},[59,151297,151298,151306,151314,151342,151346,151350,151358,151366,151374],{"__ignoreMap":57},[79,151299,151300,151302,151304],{"class":81,"line":82},[79,151301,16727],{"class":448},[79,151303,9963],{"class":85},[79,151305,745],{"class":228},[79,151307,151308,151310,151312],{"class":81,"line":167},[79,151309,32808],{"class":448},[79,151311,151005],{"class":85},[79,151313,32814],{"class":228},[79,151315,151316,151318,151320,151322,151324,151326,151328,151330,151332,151334,151336,151338,151340],{"class":81,"line":178},[79,151317,34449],{"class":96},[79,151319,455],{"class":228},[79,151321,2307],{"class":448},[79,151323,151019],{"class":89},[79,151325,151085],{"class":96},[79,151327,82289],{"class":228},[79,151329,3185],{"class":96},[79,151331,151028],{"class":89},[79,151333,151085],{"class":96},[79,151335,82301],{"class":228},[79,151337,3185],{"class":96},[79,151339,151037],{"class":89},[79,151341,850],{"class":228},[79,151343,151344],{"class":81,"line":545},[79,151345,542],{"emptyLinePlaceholder":541},[79,151347,151348],{"class":81,"line":550},[79,151349,542],{"emptyLinePlaceholder":541},[79,151351,151352,151354,151356],{"class":81,"line":562},[79,151353,151114],{"class":228},[79,151355,239],{"class":448},[79,151357,151119],{"class":228},[79,151359,151360,151362,151364],{"class":81,"line":568},[79,151361,151124],{"class":228},[79,151363,239],{"class":448},[79,151365,150986],{"class":89},[79,151367,151368,151370,151372],{"class":81,"line":574},[79,151369,151133],{"class":228},[79,151371,239],{"class":448},[79,151373,148184],{"class":96},[79,151375,151376],{"class":81,"line":579},[79,151377,151142],{"class":228},[19,151379,151380,151382,151383,151385],{},[59,151381,32830],{}," 表示当前对象。调用方法时不需要手动传入 ",[59,151384,32830],{},"，Python 会自动传。",[14,151387,151389],{"id":151388},"_115-构造方法__init__","11.5 构造方法__init__",[19,151391,151392,151394],{},[59,151393,32836],{}," 在对象创建时自动执行，用于初始化属性。",[51,151396,151398],{"className":439,"code":151397,"language":441,"meta":57,"style":57},"class Student:\n    def __init__(self, name, age, score):\n        self.name = name\n        self.age = age\n        self.score = score\n\n    def introduce(self):\n        print(f\"我叫{self.name}，今年{self.age}岁，成绩{self.score}\")\n\n\nstudent = Student(\"小明\", 18, 95)\nstudent.introduce()\n",[59,151399,151400,151408,151417,151429,151441,151452,151456,151464,151502,151506,151510,151532],{"__ignoreMap":57},[79,151401,151402,151404,151406],{"class":81,"line":82},[79,151403,16727],{"class":448},[79,151405,9963],{"class":85},[79,151407,745],{"class":228},[79,151409,151410,151412,151414],{"class":81,"line":167},[79,151411,32808],{"class":448},[79,151413,32811],{"class":96},[79,151415,151416],{"class":228},"(self, name, age, score):\n",[79,151418,151419,151421,151424,151426],{"class":81,"line":178},[79,151420,32852],{"class":96},[79,151422,151423],{"class":228},".name ",[79,151425,239],{"class":448},[79,151427,151428],{"class":228}," name\n",[79,151430,151431,151433,151436,151438],{"class":81,"line":545},[79,151432,32852],{"class":96},[79,151434,151435],{"class":228},".age ",[79,151437,239],{"class":448},[79,151439,151440],{"class":228}," age\n",[79,151442,151443,151445,151448,151450],{"class":81,"line":550},[79,151444,32852],{"class":96},[79,151446,151447],{"class":228},".score ",[79,151449,239],{"class":448},[79,151451,3685],{"class":228},[79,151453,151454],{"class":81,"line":562},[79,151455,542],{"emptyLinePlaceholder":541},[79,151457,151458,151460,151462],{"class":81,"line":568},[79,151459,32808],{"class":448},[79,151461,151005],{"class":85},[79,151463,32814],{"class":228},[79,151465,151466,151468,151470,151472,151474,151476,151478,151480,151482,151484,151486,151488,151491,151493,151496,151498,151500],{"class":81,"line":574},[79,151467,34449],{"class":96},[79,151469,455],{"class":228},[79,151471,2307],{"class":448},[79,151473,151019],{"class":89},[79,151475,151085],{"class":96},[79,151477,82289],{"class":228},[79,151479,3185],{"class":96},[79,151481,151028],{"class":89},[79,151483,151085],{"class":96},[79,151485,82301],{"class":228},[79,151487,3185],{"class":96},[79,151489,151490],{"class":89},"岁，成绩",[79,151492,151085],{"class":96},[79,151494,151495],{"class":228},".score",[79,151497,3185],{"class":96},[79,151499,2495],{"class":89},[79,151501,850],{"class":228},[79,151503,151504],{"class":81,"line":579},[79,151505,542],{"emptyLinePlaceholder":541},[79,151507,151508],{"class":81,"line":585},[79,151509,542],{"emptyLinePlaceholder":541},[79,151511,151512,151514,151516,151519,151522,151524,151526,151528,151530],{"class":81,"line":591},[79,151513,151114],{"class":228},[79,151515,239],{"class":448},[79,151517,151518],{"class":228}," Student(",[79,151520,151521],{"class":89},"\"小明\"",[79,151523,1020],{"class":228},[79,151525,2890],{"class":96},[79,151527,1020],{"class":228},[79,151529,3228],{"class":96},[79,151531,850],{"class":228},[79,151533,151534],{"class":81,"line":596},[79,151535,151142],{"class":228},[19,151537,151538],{},"构造方法的好处：",[26,151540,151541,151544,151547],{},[29,151542,151543],{},"创建对象时必须提供必要数据。",[29,151545,151546],{},"属性初始化集中，不容易漏。",[29,151548,151549],{},"对象状态更完整。",[14,151551,151553,151554],{"id":151552},"_116-str","11.6 ",[2398,151555,3409],{},[19,151557,151558,151559,497],{},"直接打印对象时，默认输出不直观。可以定义 ",[59,151560,151561],{},"__str__",[51,151563,151565],{"className":439,"code":151564,"language":441,"meta":57,"style":57},"class Student:\n    def __init__(self, name, age):\n        self.name = name\n        self.age = age\n\n    def __str__(self):\n        return f\"Student(name={self.name}, age={self.age})\"\n\n\nstudent = Student(\"小明\", 18)\nprint(student)\n",[59,151566,151567,151575,151584,151594,151604,151608,151617,151645,151649,151653,151669],{"__ignoreMap":57},[79,151568,151569,151571,151573],{"class":81,"line":82},[79,151570,16727],{"class":448},[79,151572,9963],{"class":85},[79,151574,745],{"class":228},[79,151576,151577,151579,151581],{"class":81,"line":167},[79,151578,32808],{"class":448},[79,151580,32811],{"class":96},[79,151582,151583],{"class":228},"(self, name, age):\n",[79,151585,151586,151588,151590,151592],{"class":81,"line":178},[79,151587,32852],{"class":96},[79,151589,151423],{"class":228},[79,151591,239],{"class":448},[79,151593,151428],{"class":228},[79,151595,151596,151598,151600,151602],{"class":81,"line":545},[79,151597,32852],{"class":96},[79,151599,151435],{"class":228},[79,151601,239],{"class":448},[79,151603,151440],{"class":228},[79,151605,151606],{"class":81,"line":550},[79,151607,542],{"emptyLinePlaceholder":541},[79,151609,151610,151612,151615],{"class":81,"line":562},[79,151611,32808],{"class":448},[79,151613,151614],{"class":96}," __str__",[79,151616,32814],{"class":228},[79,151618,151619,151621,151624,151627,151629,151631,151633,151636,151638,151640,151642],{"class":81,"line":568},[79,151620,16785],{"class":448},[79,151622,151623],{"class":448}," f",[79,151625,151626],{"class":89},"\"Student(name=",[79,151628,151085],{"class":96},[79,151630,82289],{"class":228},[79,151632,3185],{"class":96},[79,151634,151635],{"class":89},", age=",[79,151637,151085],{"class":96},[79,151639,82301],{"class":228},[79,151641,3185],{"class":96},[79,151643,151644],{"class":89},")\"\n",[79,151646,151647],{"class":81,"line":574},[79,151648,542],{"emptyLinePlaceholder":541},[79,151650,151651],{"class":81,"line":579},[79,151652,542],{"emptyLinePlaceholder":541},[79,151654,151655,151657,151659,151661,151663,151665,151667],{"class":81,"line":585},[79,151656,151114],{"class":228},[79,151658,239],{"class":448},[79,151660,151518],{"class":228},[79,151662,151521],{"class":89},[79,151664,1020],{"class":228},[79,151666,2890],{"class":96},[79,151668,850],{"class":228},[79,151670,151671,151673],{"class":81,"line":591},[79,151672,1889],{"class":96},[79,151674,151675],{"class":228},"(student)\n",[14,151677,151679],{"id":151678},"_117-封装","11.7 封装",[19,151681,151682],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,151684,151685],{},"Python 中以双下划线开头的属性通常视为私有属性。",[51,151687,151689],{"className":439,"code":151688,"language":441,"meta":57,"style":57},"class Account:\n    def __init__(self, owner, balance):\n        self.owner = owner\n        self.__balance = balance\n\n    def get_balance(self):\n        return self.__balance\n\n    def deposit(self, money):\n        if money \u003C= 0:\n            print(\"存款金额必须大于0\")\n            return\n        self.__balance += money\n\n    def withdraw(self, money):\n        if money \u003C= 0:\n            print(\"取款金额必须大于0\")\n            return\n        if money > self.__balance:\n            print(\"余额不足\")\n            return\n        self.__balance -= money\n\n\naccount = Account(\"小明\", 1000)\naccount.deposit(200)\naccount.withdraw(100)\nprint(account.get_balance())\n",[59,151690,151691,151700,151709,151721,151733,151737,151746,151755,151759,151769,151782,151793,151798,151809,151813,151822,151834,151845,151849,151862,151873,151877,151888,151892,151896,151914,151923,151932],{"__ignoreMap":57},[79,151692,151693,151695,151698],{"class":81,"line":82},[79,151694,16727],{"class":448},[79,151696,151697],{"class":85}," Account",[79,151699,745],{"class":228},[79,151701,151702,151704,151706],{"class":81,"line":167},[79,151703,32808],{"class":448},[79,151705,32811],{"class":96},[79,151707,151708],{"class":228},"(self, owner, balance):\n",[79,151710,151711,151713,151716,151718],{"class":81,"line":178},[79,151712,32852],{"class":96},[79,151714,151715],{"class":228},".owner ",[79,151717,239],{"class":448},[79,151719,151720],{"class":228}," owner\n",[79,151722,151723,151725,151728,151730],{"class":81,"line":545},[79,151724,32852],{"class":96},[79,151726,151727],{"class":228},".__balance ",[79,151729,239],{"class":448},[79,151731,151732],{"class":228}," balance\n",[79,151734,151735],{"class":81,"line":550},[79,151736,542],{"emptyLinePlaceholder":541},[79,151738,151739,151741,151744],{"class":81,"line":562},[79,151740,32808],{"class":448},[79,151742,151743],{"class":85}," get_balance",[79,151745,32814],{"class":228},[79,151747,151748,151750,151752],{"class":81,"line":568},[79,151749,16785],{"class":448},[79,151751,40868],{"class":96},[79,151753,151754],{"class":228},".__balance\n",[79,151756,151757],{"class":81,"line":574},[79,151758,542],{"emptyLinePlaceholder":541},[79,151760,151761,151763,151766],{"class":81,"line":579},[79,151762,32808],{"class":448},[79,151764,151765],{"class":85}," deposit",[79,151767,151768],{"class":228},"(self, money):\n",[79,151770,151771,151773,151776,151778,151780],{"class":81,"line":585},[79,151772,1089],{"class":448},[79,151774,151775],{"class":228}," money ",[79,151777,3694],{"class":448},[79,151779,1103],{"class":96},[79,151781,745],{"class":228},[79,151783,151784,151786,151788,151791],{"class":81,"line":591},[79,151785,1111],{"class":96},[79,151787,455],{"class":228},[79,151789,151790],{"class":89},"\"存款金额必须大于0\"",[79,151792,850],{"class":228},[79,151794,151795],{"class":81,"line":596},[79,151796,151797],{"class":448},"            return\n",[79,151799,151800,151802,151804,151806],{"class":81,"line":602},[79,151801,32852],{"class":96},[79,151803,151727],{"class":228},[79,151805,1075],{"class":448},[79,151807,151808],{"class":228}," money\n",[79,151810,151811],{"class":81,"line":608},[79,151812,542],{"emptyLinePlaceholder":541},[79,151814,151815,151817,151820],{"class":81,"line":614},[79,151816,32808],{"class":448},[79,151818,151819],{"class":85}," withdraw",[79,151821,151768],{"class":228},[79,151823,151824,151826,151828,151830,151832],{"class":81,"line":619},[79,151825,1089],{"class":448},[79,151827,151775],{"class":228},[79,151829,3694],{"class":448},[79,151831,1103],{"class":96},[79,151833,745],{"class":228},[79,151835,151836,151838,151840,151843],{"class":81,"line":625},[79,151837,1111],{"class":96},[79,151839,455],{"class":228},[79,151841,151842],{"class":89},"\"取款金额必须大于0\"",[79,151844,850],{"class":228},[79,151846,151847],{"class":81,"line":631},[79,151848,151797],{"class":448},[79,151850,151851,151853,151855,151857,151859],{"class":81,"line":637},[79,151852,1089],{"class":448},[79,151854,151775],{"class":228},[79,151856,3199],{"class":448},[79,151858,40868],{"class":96},[79,151860,151861],{"class":228},".__balance:\n",[79,151863,151864,151866,151868,151871],{"class":81,"line":643},[79,151865,1111],{"class":96},[79,151867,455],{"class":228},[79,151869,151870],{"class":89},"\"余额不足\"",[79,151872,850],{"class":228},[79,151874,151875],{"class":81,"line":649},[79,151876,151797],{"class":448},[79,151878,151879,151881,151883,151886],{"class":81,"line":655},[79,151880,32852],{"class":96},[79,151882,151727],{"class":228},[79,151884,151885],{"class":448},"-=",[79,151887,151808],{"class":228},[79,151889,151890],{"class":81,"line":660},[79,151891,542],{"emptyLinePlaceholder":541},[79,151893,151894],{"class":81,"line":666},[79,151895,542],{"emptyLinePlaceholder":541},[79,151897,151898,151901,151903,151906,151908,151910,151912],{"class":81,"line":672},[79,151899,151900],{"class":228},"account ",[79,151902,239],{"class":448},[79,151904,151905],{"class":228}," Account(",[79,151907,151521],{"class":89},[79,151909,1020],{"class":228},[79,151911,929],{"class":96},[79,151913,850],{"class":228},[79,151915,151916,151919,151921],{"class":81,"line":678},[79,151917,151918],{"class":228},"account.deposit(",[79,151920,3817],{"class":96},[79,151922,850],{"class":228},[79,151924,151925,151928,151930],{"class":81,"line":684},[79,151926,151927],{"class":228},"account.withdraw(",[79,151929,2555],{"class":96},[79,151931,850],{"class":228},[79,151933,151934,151936],{"class":81,"line":690},[79,151935,1889],{"class":96},[79,151937,151938],{"class":228},"(account.get_balance())\n",[19,151940,151941],{},"封装的意义是避免外部随意修改内部状态。",[14,151943,151945],{"id":151944},"_118-继承","11.8 继承",[19,151947,151948],{},"继承可以让子类复用父类的属性和方法。",[51,151950,151952],{"className":439,"code":151951,"language":441,"meta":57,"style":57},"class Animal:\n    def eat(self):\n        print(\"吃东西\")\n\n\nclass Dog(Animal):\n    def bark(self):\n        print(\"汪汪\")\n\n\ndog = Dog()\ndog.eat()\ndog.bark()\n",[59,151953,151954,151963,151972,151983,151987,151991,152005,152014,152025,152029,152033,152043,152048],{"__ignoreMap":57},[79,151955,151956,151958,151961],{"class":81,"line":82},[79,151957,16727],{"class":448},[79,151959,151960],{"class":85}," Animal",[79,151962,745],{"class":228},[79,151964,151965,151967,151970],{"class":81,"line":167},[79,151966,32808],{"class":448},[79,151968,151969],{"class":85}," eat",[79,151971,32814],{"class":228},[79,151973,151974,151976,151978,151981],{"class":81,"line":178},[79,151975,34449],{"class":96},[79,151977,455],{"class":228},[79,151979,151980],{"class":89},"\"吃东西\"",[79,151982,850],{"class":228},[79,151984,151985],{"class":81,"line":545},[79,151986,542],{"emptyLinePlaceholder":541},[79,151988,151989],{"class":81,"line":550},[79,151990,542],{"emptyLinePlaceholder":541},[79,151992,151993,151995,151998,152000,152003],{"class":81,"line":562},[79,151994,16727],{"class":448},[79,151996,151997],{"class":85}," Dog",[79,151999,455],{"class":228},[79,152001,152002],{"class":85},"Animal",[79,152004,932],{"class":228},[79,152006,152007,152009,152012],{"class":81,"line":568},[79,152008,32808],{"class":448},[79,152010,152011],{"class":85}," bark",[79,152013,32814],{"class":228},[79,152015,152016,152018,152020,152023],{"class":81,"line":574},[79,152017,34449],{"class":96},[79,152019,455],{"class":228},[79,152021,152022],{"class":89},"\"汪汪\"",[79,152024,850],{"class":228},[79,152026,152027],{"class":81,"line":579},[79,152028,542],{"emptyLinePlaceholder":541},[79,152030,152031],{"class":81,"line":585},[79,152032,542],{"emptyLinePlaceholder":541},[79,152034,152035,152038,152040],{"class":81,"line":591},[79,152036,152037],{"class":228},"dog ",[79,152039,239],{"class":448},[79,152041,152042],{"class":228}," Dog()\n",[79,152044,152045],{"class":81,"line":596},[79,152046,152047],{"class":228},"dog.eat()\n",[79,152049,152050],{"class":81,"line":602},[79,152051,152052],{"class":228},"dog.bark()\n",[19,152054,152055],{},"子类可以扩展新方法，也可以重写父类方法。",[14,152057,152059],{"id":152058},"_119-方法重写","11.9 方法重写",[51,152061,152063],{"className":439,"code":152062,"language":441,"meta":57,"style":57},"class Animal:\n    def speak(self):\n        print(\"动物叫\")\n\n\nclass Dog(Animal):\n    def speak(self):\n        print(\"汪汪\")\n\n\nclass Cat(Animal):\n    def speak(self):\n        print(\"喵喵\")\n\n\ndog = Dog()\ncat = Cat()\n\ndog.speak()\ncat.speak()\n",[59,152064,152065,152073,152082,152093,152097,152101,152113,152121,152131,152135,152139,152152,152160,152171,152175,152179,152187,152197,152201,152206],{"__ignoreMap":57},[79,152066,152067,152069,152071],{"class":81,"line":82},[79,152068,16727],{"class":448},[79,152070,151960],{"class":85},[79,152072,745],{"class":228},[79,152074,152075,152077,152080],{"class":81,"line":167},[79,152076,32808],{"class":448},[79,152078,152079],{"class":85}," speak",[79,152081,32814],{"class":228},[79,152083,152084,152086,152088,152091],{"class":81,"line":178},[79,152085,34449],{"class":96},[79,152087,455],{"class":228},[79,152089,152090],{"class":89},"\"动物叫\"",[79,152092,850],{"class":228},[79,152094,152095],{"class":81,"line":545},[79,152096,542],{"emptyLinePlaceholder":541},[79,152098,152099],{"class":81,"line":550},[79,152100,542],{"emptyLinePlaceholder":541},[79,152102,152103,152105,152107,152109,152111],{"class":81,"line":562},[79,152104,16727],{"class":448},[79,152106,151997],{"class":85},[79,152108,455],{"class":228},[79,152110,152002],{"class":85},[79,152112,932],{"class":228},[79,152114,152115,152117,152119],{"class":81,"line":568},[79,152116,32808],{"class":448},[79,152118,152079],{"class":85},[79,152120,32814],{"class":228},[79,152122,152123,152125,152127,152129],{"class":81,"line":574},[79,152124,34449],{"class":96},[79,152126,455],{"class":228},[79,152128,152022],{"class":89},[79,152130,850],{"class":228},[79,152132,152133],{"class":81,"line":579},[79,152134,542],{"emptyLinePlaceholder":541},[79,152136,152137],{"class":81,"line":585},[79,152138,542],{"emptyLinePlaceholder":541},[79,152140,152141,152143,152146,152148,152150],{"class":81,"line":591},[79,152142,16727],{"class":448},[79,152144,152145],{"class":85}," Cat",[79,152147,455],{"class":228},[79,152149,152002],{"class":85},[79,152151,932],{"class":228},[79,152153,152154,152156,152158],{"class":81,"line":596},[79,152155,32808],{"class":448},[79,152157,152079],{"class":85},[79,152159,32814],{"class":228},[79,152161,152162,152164,152166,152169],{"class":81,"line":602},[79,152163,34449],{"class":96},[79,152165,455],{"class":228},[79,152167,152168],{"class":89},"\"喵喵\"",[79,152170,850],{"class":228},[79,152172,152173],{"class":81,"line":608},[79,152174,542],{"emptyLinePlaceholder":541},[79,152176,152177],{"class":81,"line":614},[79,152178,542],{"emptyLinePlaceholder":541},[79,152180,152181,152183,152185],{"class":81,"line":619},[79,152182,152037],{"class":228},[79,152184,239],{"class":448},[79,152186,152042],{"class":228},[79,152188,152189,152192,152194],{"class":81,"line":625},[79,152190,152191],{"class":228},"cat ",[79,152193,239],{"class":448},[79,152195,152196],{"class":228}," Cat()\n",[79,152198,152199],{"class":81,"line":631},[79,152200,542],{"emptyLinePlaceholder":541},[79,152202,152203],{"class":81,"line":637},[79,152204,152205],{"class":228},"dog.speak()\n",[79,152207,152208],{"class":81,"line":643},[79,152209,152210],{"class":228},"cat.speak()\n",[14,152212,152214],{"id":152213},"_1110-super","11.10 super",[19,152216,152217,152218,152221],{},"子类可以通过 ",[59,152219,152220],{},"super()"," 调用父类方法。",[51,152223,152225],{"className":439,"code":152224,"language":441,"meta":57,"style":57},"class Person:\n    def __init__(self, name):\n        self.name = name\n\n\nclass Student(Person):\n    def __init__(self, name, score):\n        super().__init__(name)\n        self.score = score\n\n\nstudent = Student(\"小明\", 95)\nprint(student.name, student.score)\n",[59,152226,152227,152235,152244,152254,152258,152262,152274,152283,152294,152304,152308,152312,152328],{"__ignoreMap":57},[79,152228,152229,152231,152233],{"class":81,"line":82},[79,152230,16727],{"class":448},[79,152232,17601],{"class":85},[79,152234,745],{"class":228},[79,152236,152237,152239,152241],{"class":81,"line":167},[79,152238,32808],{"class":448},[79,152240,32811],{"class":96},[79,152242,152243],{"class":228},"(self, name):\n",[79,152245,152246,152248,152250,152252],{"class":81,"line":178},[79,152247,32852],{"class":96},[79,152249,151423],{"class":228},[79,152251,239],{"class":448},[79,152253,151428],{"class":228},[79,152255,152256],{"class":81,"line":545},[79,152257,542],{"emptyLinePlaceholder":541},[79,152259,152260],{"class":81,"line":550},[79,152261,542],{"emptyLinePlaceholder":541},[79,152263,152264,152266,152268,152270,152272],{"class":81,"line":562},[79,152265,16727],{"class":448},[79,152267,9963],{"class":85},[79,152269,455],{"class":228},[79,152271,21071],{"class":85},[79,152273,932],{"class":228},[79,152275,152276,152278,152280],{"class":81,"line":568},[79,152277,32808],{"class":448},[79,152279,32811],{"class":96},[79,152281,152282],{"class":228},"(self, name, score):\n",[79,152284,152285,152287,152289,152291],{"class":81,"line":574},[79,152286,32824],{"class":96},[79,152288,19286],{"class":228},[79,152290,32836],{"class":96},[79,152292,152293],{"class":228},"(name)\n",[79,152295,152296,152298,152300,152302],{"class":81,"line":579},[79,152297,32852],{"class":96},[79,152299,151447],{"class":228},[79,152301,239],{"class":448},[79,152303,3685],{"class":228},[79,152305,152306],{"class":81,"line":585},[79,152307,542],{"emptyLinePlaceholder":541},[79,152309,152310],{"class":81,"line":591},[79,152311,542],{"emptyLinePlaceholder":541},[79,152313,152314,152316,152318,152320,152322,152324,152326],{"class":81,"line":596},[79,152315,151114],{"class":228},[79,152317,239],{"class":448},[79,152319,151518],{"class":228},[79,152321,151521],{"class":89},[79,152323,1020],{"class":228},[79,152325,3228],{"class":96},[79,152327,850],{"class":228},[79,152329,152330,152332],{"class":81,"line":602},[79,152331,1889],{"class":96},[79,152333,152334],{"class":228},"(student.name, student.score)\n",[14,152336,152338],{"id":152337},"_1111-多态","11.11 多态",[19,152340,152341],{},"多态指不同对象响应同一个方法，表现出不同结果。",[51,152343,152345],{"className":439,"code":152344,"language":441,"meta":57,"style":57},"class Dog:\n    def speak(self):\n        print(\"汪汪\")\n\n\nclass Cat:\n    def speak(self):\n        print(\"喵喵\")\n\n\ndef make_sound(animal):\n    animal.speak()\n\n\nmake_sound(Dog())\nmake_sound(Cat())\n",[59,152346,152347,152355,152363,152373,152377,152381,152389,152397,152407,152411,152415,152425,152430,152434,152438,152443],{"__ignoreMap":57},[79,152348,152349,152351,152353],{"class":81,"line":82},[79,152350,16727],{"class":448},[79,152352,151997],{"class":85},[79,152354,745],{"class":228},[79,152356,152357,152359,152361],{"class":81,"line":167},[79,152358,32808],{"class":448},[79,152360,152079],{"class":85},[79,152362,32814],{"class":228},[79,152364,152365,152367,152369,152371],{"class":81,"line":178},[79,152366,34449],{"class":96},[79,152368,455],{"class":228},[79,152370,152022],{"class":89},[79,152372,850],{"class":228},[79,152374,152375],{"class":81,"line":545},[79,152376,542],{"emptyLinePlaceholder":541},[79,152378,152379],{"class":81,"line":550},[79,152380,542],{"emptyLinePlaceholder":541},[79,152382,152383,152385,152387],{"class":81,"line":562},[79,152384,16727],{"class":448},[79,152386,152145],{"class":85},[79,152388,745],{"class":228},[79,152390,152391,152393,152395],{"class":81,"line":568},[79,152392,32808],{"class":448},[79,152394,152079],{"class":85},[79,152396,32814],{"class":228},[79,152398,152399,152401,152403,152405],{"class":81,"line":574},[79,152400,34449],{"class":96},[79,152402,455],{"class":228},[79,152404,152168],{"class":89},[79,152406,850],{"class":228},[79,152408,152409],{"class":81,"line":579},[79,152410,542],{"emptyLinePlaceholder":541},[79,152412,152413],{"class":81,"line":585},[79,152414,542],{"emptyLinePlaceholder":541},[79,152416,152417,152419,152422],{"class":81,"line":591},[79,152418,703],{"class":448},[79,152420,152421],{"class":85}," make_sound",[79,152423,152424],{"class":228},"(animal):\n",[79,152426,152427],{"class":81,"line":596},[79,152428,152429],{"class":228},"    animal.speak()\n",[79,152431,152432],{"class":81,"line":602},[79,152433,542],{"emptyLinePlaceholder":541},[79,152435,152436],{"class":81,"line":608},[79,152437,542],{"emptyLinePlaceholder":541},[79,152439,152440],{"class":81,"line":614},[79,152441,152442],{"class":228},"make_sound(Dog())\n",[79,152444,152445],{"class":81,"line":619},[79,152446,152447],{"class":228},"make_sound(Cat())\n",[19,152449,152450],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,152452,152454],{"id":152453},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,152456,152457],{},"实例属性属于对象：",[51,152459,152461],{"className":439,"code":152460,"language":441,"meta":57,"style":57},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[59,152462,152463,152471,152479],{"__ignoreMap":57},[79,152464,152465,152467,152469],{"class":81,"line":82},[79,152466,16727],{"class":448},[79,152468,9963],{"class":85},[79,152470,745],{"class":228},[79,152472,152473,152475,152477],{"class":81,"line":167},[79,152474,32808],{"class":448},[79,152476,32811],{"class":96},[79,152478,152243],{"class":228},[79,152480,152481,152483,152485,152487],{"class":81,"line":178},[79,152482,32852],{"class":96},[79,152484,151423],{"class":228},[79,152486,239],{"class":448},[79,152488,151428],{"class":228},[19,152490,152491],{},"类属性属于类，所有对象共享：",[51,152493,152495],{"className":439,"code":152494,"language":441,"meta":57,"style":57},"class Student:\n    school = \"黑马学校\"\n\n    def __init__(self, name):\n        self.name = name\n\n\ns1 = Student(\"小明\")\ns2 = Student(\"小红\")\n\nprint(s1.school)\nprint(s2.school)\nprint(Student.school)\n",[59,152496,152497,152505,152515,152519,152527,152537,152541,152545,152558,152572,152576,152583,152590],{"__ignoreMap":57},[79,152498,152499,152501,152503],{"class":81,"line":82},[79,152500,16727],{"class":448},[79,152502,9963],{"class":85},[79,152504,745],{"class":228},[79,152506,152507,152510,152512],{"class":81,"line":167},[79,152508,152509],{"class":228},"    school ",[79,152511,239],{"class":448},[79,152513,152514],{"class":89}," \"黑马学校\"\n",[79,152516,152517],{"class":81,"line":178},[79,152518,542],{"emptyLinePlaceholder":541},[79,152520,152521,152523,152525],{"class":81,"line":545},[79,152522,32808],{"class":448},[79,152524,32811],{"class":96},[79,152526,152243],{"class":228},[79,152528,152529,152531,152533,152535],{"class":81,"line":550},[79,152530,32852],{"class":96},[79,152532,151423],{"class":228},[79,152534,239],{"class":448},[79,152536,151428],{"class":228},[79,152538,152539],{"class":81,"line":562},[79,152540,542],{"emptyLinePlaceholder":541},[79,152542,152543],{"class":81,"line":568},[79,152544,542],{"emptyLinePlaceholder":541},[79,152546,152547,152550,152552,152554,152556],{"class":81,"line":574},[79,152548,152549],{"class":228},"s1 ",[79,152551,239],{"class":448},[79,152553,151518],{"class":228},[79,152555,151521],{"class":89},[79,152557,850],{"class":228},[79,152559,152560,152563,152565,152567,152570],{"class":81,"line":579},[79,152561,152562],{"class":228},"s2 ",[79,152564,239],{"class":448},[79,152566,151518],{"class":228},[79,152568,152569],{"class":89},"\"小红\"",[79,152571,850],{"class":228},[79,152573,152574],{"class":81,"line":585},[79,152575,542],{"emptyLinePlaceholder":541},[79,152577,152578,152580],{"class":81,"line":591},[79,152579,1889],{"class":96},[79,152581,152582],{"class":228},"(s1.school)\n",[79,152584,152585,152587],{"class":81,"line":596},[79,152586,1889],{"class":96},[79,152588,152589],{"class":228},"(s2.school)\n",[79,152591,152592,152594],{"class":81,"line":602},[79,152593,1889],{"class":96},[79,152595,152596],{"class":228},"(Student.school)\n",[19,152598,152599],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,152601,152603],{"id":152602},"_1113-类方法和静态方法","11.13 类方法和静态方法",[339,152605,152607],{"id":152606},"_11131-类方法","11.13.1 类方法",[19,152609,152610,152611,152614,152615,497],{},"类方法使用 ",[59,152612,152613],{},"@classmethod","，第一个参数通常是 ",[59,152616,152617],{},"cls",[51,152619,152621],{"className":439,"code":152620,"language":441,"meta":57,"style":57},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[59,152622,152623,152631,152639,152643,152651,152661,152671,152675,152679],{"__ignoreMap":57},[79,152624,152625,152627,152629],{"class":81,"line":82},[79,152626,16727],{"class":448},[79,152628,9963],{"class":85},[79,152630,745],{"class":228},[79,152632,152633,152635,152637],{"class":81,"line":167},[79,152634,152509],{"class":228},[79,152636,239],{"class":448},[79,152638,152514],{"class":89},[79,152640,152641],{"class":81,"line":178},[79,152642,542],{"emptyLinePlaceholder":541},[79,152644,152645,152648],{"class":81,"line":545},[79,152646,152647],{"class":85},"    @",[79,152649,152650],{"class":96},"classmethod\n",[79,152652,152653,152655,152658],{"class":81,"line":550},[79,152654,32808],{"class":448},[79,152656,152657],{"class":85}," get_school",[79,152659,152660],{"class":228},"(cls):\n",[79,152662,152663,152665,152668],{"class":81,"line":562},[79,152664,16785],{"class":448},[79,152666,152667],{"class":96}," cls",[79,152669,152670],{"class":228},".school\n",[79,152672,152673],{"class":81,"line":568},[79,152674,542],{"emptyLinePlaceholder":541},[79,152676,152677],{"class":81,"line":574},[79,152678,542],{"emptyLinePlaceholder":541},[79,152680,152681,152683],{"class":81,"line":579},[79,152682,1889],{"class":96},[79,152684,152685],{"class":228},"(Student.get_school())\n",[339,152687,152689],{"id":152688},"_11132-静态方法","11.13.2 静态方法",[19,152691,152692,152693,152696],{},"静态方法使用 ",[59,152694,152695],{},"@staticmethod","，不需要访问实例和类。",[51,152698,152700],{"className":439,"code":152699,"language":441,"meta":57,"style":57},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[59,152701,152702,152711,152718,152727,152738,152742,152746],{"__ignoreMap":57},[79,152703,152704,152706,152709],{"class":81,"line":82},[79,152705,16727],{"class":448},[79,152707,152708],{"class":85}," MathUtils",[79,152710,745],{"class":228},[79,152712,152713,152715],{"class":81,"line":167},[79,152714,152647],{"class":85},[79,152716,152717],{"class":96},"staticmethod\n",[79,152719,152720,152722,152724],{"class":81,"line":178},[79,152721,32808],{"class":448},[79,152723,7277],{"class":85},[79,152725,152726],{"class":228},"(a, b):\n",[79,152728,152729,152731,152733,152735],{"class":81,"line":545},[79,152730,16785],{"class":448},[79,152732,12904],{"class":228},[79,152734,995],{"class":448},[79,152736,152737],{"class":228}," b\n",[79,152739,152740],{"class":81,"line":550},[79,152741,542],{"emptyLinePlaceholder":541},[79,152743,152744],{"class":81,"line":562},[79,152745,542],{"emptyLinePlaceholder":541},[79,152747,152748,152750,152753,152755,152757,152759],{"class":81,"line":568},[79,152749,1889],{"class":96},[79,152751,152752],{"class":228},"(MathUtils.add(",[79,152754,775],{"class":96},[79,152756,1020],{"class":228},[79,152758,2331],{"class":96},[79,152760,1150],{"class":228},[19,152762,152763],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,152765,152767],{"id":152766},"_1114-dataclass","11.14 dataclass",[19,152769,152770,152773],{},[59,152771,152772],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[51,152775,152777],{"className":439,"code":152776,"language":441,"meta":57,"style":57},"from dataclasses import dataclass\n\n\n@dataclass\nclass Student:\n    name: str\n    age: int\n    score: float\n\n\nstudent = Student(\"小明\", 18, 95)\nprint(student)\n",[59,152778,152779,152791,152795,152799,152804,152812,152820,152828,152836,152840,152844,152864],{"__ignoreMap":57},[79,152780,152781,152783,152786,152788],{"class":81,"line":82},[79,152782,32745],{"class":448},[79,152784,152785],{"class":228}," dataclasses ",[79,152787,520],{"class":448},[79,152789,152790],{"class":228}," dataclass\n",[79,152792,152793],{"class":81,"line":167},[79,152794,542],{"emptyLinePlaceholder":541},[79,152796,152797],{"class":81,"line":178},[79,152798,542],{"emptyLinePlaceholder":541},[79,152800,152801],{"class":81,"line":545},[79,152802,152803],{"class":85},"@dataclass\n",[79,152805,152806,152808,152810],{"class":81,"line":550},[79,152807,16727],{"class":448},[79,152809,9963],{"class":85},[79,152811,745],{"class":228},[79,152813,152814,152817],{"class":81,"line":562},[79,152815,152816],{"class":228},"    name: ",[79,152818,152819],{"class":96},"str\n",[79,152821,152822,152825],{"class":81,"line":568},[79,152823,152824],{"class":228},"    age: ",[79,152826,152827],{"class":96},"int\n",[79,152829,152830,152833],{"class":81,"line":574},[79,152831,152832],{"class":228},"    score: ",[79,152834,152835],{"class":96},"float\n",[79,152837,152838],{"class":81,"line":579},[79,152839,542],{"emptyLinePlaceholder":541},[79,152841,152842],{"class":81,"line":585},[79,152843,542],{"emptyLinePlaceholder":541},[79,152845,152846,152848,152850,152852,152854,152856,152858,152860,152862],{"class":81,"line":591},[79,152847,151114],{"class":228},[79,152849,239],{"class":448},[79,152851,151518],{"class":228},[79,152853,151521],{"class":89},[79,152855,1020],{"class":228},[79,152857,2890],{"class":96},[79,152859,1020],{"class":228},[79,152861,3228],{"class":96},[79,152863,850],{"class":228},[79,152865,152866,152868],{"class":81,"line":596},[79,152867,1889],{"class":96},[79,152869,151675],{"class":228},[19,152871,152872,152873,2139,152875,152878],{},"它会自动生成 ",[59,152874,32836],{},[59,152876,152877],{},"__repr__"," 等方法。适合数据模型类。",[14,152880,152882],{"id":152881},"_1115-小案例学生类","11.15 小案例：学生类",[51,152884,152886],{"className":439,"code":152885,"language":441,"meta":57,"style":57},"class Student:\n    def __init__(self, student_id, name, age, score):\n        self.student_id = student_id\n        self.name = name\n        self.age = age\n        self.score = score\n\n    def is_passed(self):\n        return self.score >= 60\n\n    def to_dict(self):\n        return {\n            \"student_id\": self.student_id,\n            \"name\": self.name,\n            \"age\": self.age,\n            \"score\": self.score,\n        }\n\n    @classmethod\n    def from_dict(cls, data):\n        return cls(\n            data[\"student_id\"],\n            data[\"name\"],\n            data[\"age\"],\n            data[\"score\"],\n        )\n\n    def __str__(self):\n        return f\"{self.student_id} {self.name} {self.age} {self.score}\"\n\n\nstudent = Student(\"001\", \"小明\", 18, 95)\nprint(student.is_passed())\nprint(student.to_dict())\n",[59,152887,152888,152896,152905,152917,152927,152937,152947,152951,152960,152973,152977,152986,152992,153004,153016,153028,153040,153044,153048,153054,153064,153073,153083,153091,153099,153108,153112,153116,153124,153160,153164,153168,153193,153200],{"__ignoreMap":57},[79,152889,152890,152892,152894],{"class":81,"line":82},[79,152891,16727],{"class":448},[79,152893,9963],{"class":85},[79,152895,745],{"class":228},[79,152897,152898,152900,152902],{"class":81,"line":167},[79,152899,32808],{"class":448},[79,152901,32811],{"class":96},[79,152903,152904],{"class":228},"(self, student_id, name, age, score):\n",[79,152906,152907,152909,152912,152914],{"class":81,"line":178},[79,152908,32852],{"class":96},[79,152910,152911],{"class":228},".student_id ",[79,152913,239],{"class":448},[79,152915,152916],{"class":228}," student_id\n",[79,152918,152919,152921,152923,152925],{"class":81,"line":545},[79,152920,32852],{"class":96},[79,152922,151423],{"class":228},[79,152924,239],{"class":448},[79,152926,151428],{"class":228},[79,152928,152929,152931,152933,152935],{"class":81,"line":550},[79,152930,32852],{"class":96},[79,152932,151435],{"class":228},[79,152934,239],{"class":448},[79,152936,151440],{"class":228},[79,152938,152939,152941,152943,152945],{"class":81,"line":562},[79,152940,32852],{"class":96},[79,152942,151447],{"class":228},[79,152944,239],{"class":448},[79,152946,3685],{"class":228},[79,152948,152949],{"class":81,"line":568},[79,152950,542],{"emptyLinePlaceholder":541},[79,152952,152953,152955,152958],{"class":81,"line":574},[79,152954,32808],{"class":448},[79,152956,152957],{"class":85}," is_passed",[79,152959,32814],{"class":228},[79,152961,152962,152964,152966,152968,152970],{"class":81,"line":579},[79,152963,16785],{"class":448},[79,152965,40868],{"class":96},[79,152967,151447],{"class":228},[79,152969,3805],{"class":448},[79,152971,152972],{"class":96}," 60\n",[79,152974,152975],{"class":81,"line":585},[79,152976,542],{"emptyLinePlaceholder":541},[79,152978,152979,152981,152984],{"class":81,"line":591},[79,152980,32808],{"class":448},[79,152982,152983],{"class":85}," to_dict",[79,152985,32814],{"class":228},[79,152987,152988,152990],{"class":81,"line":596},[79,152989,16785],{"class":448},[79,152991,17604],{"class":228},[79,152993,152994,152997,152999,153001],{"class":81,"line":602},[79,152995,152996],{"class":89},"            \"student_id\"",[79,152998,53431],{"class":228},[79,153000,32830],{"class":96},[79,153002,153003],{"class":228},".student_id,\n",[79,153005,153006,153009,153011,153013],{"class":81,"line":608},[79,153007,153008],{"class":89},"            \"name\"",[79,153010,53431],{"class":228},[79,153012,32830],{"class":96},[79,153014,153015],{"class":228},".name,\n",[79,153017,153018,153021,153023,153025],{"class":81,"line":614},[79,153019,153020],{"class":89},"            \"age\"",[79,153022,53431],{"class":228},[79,153024,32830],{"class":96},[79,153026,153027],{"class":228},".age,\n",[79,153029,153030,153033,153035,153037],{"class":81,"line":619},[79,153031,153032],{"class":89},"            \"score\"",[79,153034,53431],{"class":228},[79,153036,32830],{"class":96},[79,153038,153039],{"class":228},".score,\n",[79,153041,153042],{"class":81,"line":625},[79,153043,4612],{"class":228},[79,153045,153046],{"class":81,"line":631},[79,153047,542],{"emptyLinePlaceholder":541},[79,153049,153050,153052],{"class":81,"line":637},[79,153051,152647],{"class":85},[79,153053,152650],{"class":96},[79,153055,153056,153058,153061],{"class":81,"line":643},[79,153057,32808],{"class":448},[79,153059,153060],{"class":85}," from_dict",[79,153062,153063],{"class":228},"(cls, data):\n",[79,153065,153066,153068,153070],{"class":81,"line":649},[79,153067,16785],{"class":448},[79,153069,152667],{"class":96},[79,153071,153072],{"class":228},"(\n",[79,153074,153075,153078,153081],{"class":81,"line":655},[79,153076,153077],{"class":228},"            data[",[79,153079,153080],{"class":89},"\"student_id\"",[79,153082,89823],{"class":228},[79,153084,153085,153087,153089],{"class":81,"line":660},[79,153086,153077],{"class":228},[79,153088,64667],{"class":89},[79,153090,89823],{"class":228},[79,153092,153093,153095,153097],{"class":81,"line":666},[79,153094,153077],{"class":228},[79,153096,71112],{"class":89},[79,153098,89823],{"class":228},[79,153100,153101,153103,153106],{"class":81,"line":672},[79,153102,153077],{"class":228},[79,153104,153105],{"class":89},"\"score\"",[79,153107,89823],{"class":228},[79,153109,153110],{"class":81,"line":678},[79,153111,40121],{"class":228},[79,153113,153114],{"class":81,"line":684},[79,153115,542],{"emptyLinePlaceholder":541},[79,153117,153118,153120,153122],{"class":81,"line":690},[79,153119,32808],{"class":448},[79,153121,151614],{"class":96},[79,153123,32814],{"class":228},[79,153125,153126,153128,153130,153132,153134,153137,153139,153142,153144,153146,153148,153150,153152,153154,153156,153158],{"class":81,"line":695},[79,153127,16785],{"class":448},[79,153129,151623],{"class":448},[79,153131,2495],{"class":89},[79,153133,151085],{"class":96},[79,153135,153136],{"class":228},".student_id",[79,153138,3185],{"class":96},[79,153140,153141],{"class":96}," {self",[79,153143,82289],{"class":228},[79,153145,3185],{"class":96},[79,153147,153141],{"class":96},[79,153149,82301],{"class":228},[79,153151,3185],{"class":96},[79,153153,153141],{"class":96},[79,153155,151495],{"class":228},[79,153157,3185],{"class":96},[79,153159,27152],{"class":89},[79,153161,153162],{"class":81,"line":700},[79,153163,542],{"emptyLinePlaceholder":541},[79,153165,153166],{"class":81,"line":712},[79,153167,542],{"emptyLinePlaceholder":541},[79,153169,153170,153172,153174,153176,153179,153181,153183,153185,153187,153189,153191],{"class":81,"line":721},[79,153171,151114],{"class":228},[79,153173,239],{"class":448},[79,153175,151518],{"class":228},[79,153177,153178],{"class":89},"\"001\"",[79,153180,1020],{"class":228},[79,153182,151521],{"class":89},[79,153184,1020],{"class":228},[79,153186,2890],{"class":96},[79,153188,1020],{"class":228},[79,153190,3228],{"class":96},[79,153192,850],{"class":228},[79,153194,153195,153197],{"class":81,"line":726},[79,153196,1889],{"class":96},[79,153198,153199],{"class":228},"(student.is_passed())\n",[79,153201,153202,153204],{"class":81,"line":731},[79,153203,1889],{"class":96},[79,153205,153206],{"class":228},"(student.to_dict())\n",[19,153208,153209,1748,153212,153215],{},[59,153210,153211],{},"to_dict()",[59,153213,153214],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,153217,153219],{"id":153218},"_1116-易错点","11.16 易错点",[26,153221,153222,153228,153234,153239,153242,153245],{},[29,153223,153224,153225,497],{},"类名推荐使用大驼峰，如 ",[59,153226,153227],{},"StudentManager",[29,153229,153230,153231,153233],{},"方法第一个参数必须写 ",[59,153232,32830],{},"，调用时不用传。",[29,153235,153236,153238],{},[59,153237,32836],{}," 不是普通方法，它在创建对象时自动执行。",[29,153240,153241],{},"私有属性不是绝对安全，只是约定和名称改写。",[29,153243,153244],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[29,153246,153247],{},"类中方法太多时，说明职责可能过重。",[14,153249,153251],{"id":153250},"_1117-本章练习","11.17 本章练习",[26,153253,153254,153260,153266,153271,153284],{},[29,153255,153256,153257,153259],{},"定义 ",[59,153258,151201],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[29,153261,153256,153262,153265],{},[59,153263,153264],{},"Account"," 类，实现存款、取款、查询余额。",[29,153267,153256,153268,153270],{},[59,153269,19251],{}," 类，计算圆的周长和面积。",[29,153272,153256,153273,2139,153276,153279,153280,153283],{},[59,153274,153275],{},"Dog",[59,153277,153278],{},"Cat"," 类，并用同一个函数调用它们的 ",[59,153281,153282],{},"speak()"," 方法。",[29,153285,106287,153286,153288,153289,497],{},[59,153287,152772],{}," 定义一个商品类 ",[59,153290,153291],{},"Product",[2159,153293,153294],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":57,"searchDepth":167,"depth":167,"links":153296},[153297,153298,153299,153300,153301,153302,153304,153305,153306,153307,153308,153309,153310,153314,153315,153316,153317],{"id":150965,"depth":167,"text":150966},{"id":151148,"depth":167,"text":151149},{"id":151212,"depth":167,"text":151213},{"id":151289,"depth":167,"text":151290},{"id":151388,"depth":167,"text":151389},{"id":151552,"depth":167,"text":153303},"11.6 str",{"id":151678,"depth":167,"text":151679},{"id":151944,"depth":167,"text":151945},{"id":152058,"depth":167,"text":152059},{"id":152213,"depth":167,"text":152214},{"id":152337,"depth":167,"text":152338},{"id":152453,"depth":167,"text":152454},{"id":152602,"depth":167,"text":152603,"children":153311},[153312,153313],{"id":152606,"depth":178,"text":152607},{"id":152688,"depth":178,"text":152689},{"id":152766,"depth":167,"text":152767},{"id":152881,"depth":167,"text":152882},{"id":153218,"depth":167,"text":153219},{"id":153250,"depth":167,"text":153251},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":150957,"description":25402},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":153324,"title":153325,"body":153326,"description":25402,"extension":2186,"meta":156639,"navigation":541,"path":156640,"seo":156641,"stem":156642,"__hash__":156643},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":153327,"toc":156615},[153328,153331,153335,153338,153341,153370,153373,153381,153385,153389,153392,153415,153418,153424,153428,154874,154877,154898,154902,154905,154917,154920,155104,155107,155233,155236,155240,155244,155380,155384,155470,155474,155556,155560,155597,155601,155790,155794,155797,156027,156031,156034,156215,156218,156222,156225,156231,156234,156260,156264,156267,156281,156284,156309,156312,156326,156329,156346,156349,156366,156369,156386,156390,156416,156420,156443,156447,156450,156452,156458,156460,156481,156484,156490,156496,156500,156503,156579,156582,156586,156612],[10,153329,153325],{"id":153330},"_12-综合案例与复习路线",[14,153332,153334],{"id":153333},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,153336,153337],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,153339,153340],{},"一个合格的入门综合项目最好覆盖：",[26,153342,153343,153346,153349,153352,153355,153358,153361,153364,153367],{},[29,153344,153345],{},"输入输出。",[29,153347,153348],{},"判断和循环。",[29,153350,153351],{},"函数拆分。",[29,153353,153354],{},"列表、字典等容器。",[29,153356,153357],{},"文件持久化。",[29,153359,153360],{},"异常处理。",[29,153362,153363],{},"模块拆分。",[29,153365,153366],{},"可选：面向对象。",[29,153368,153369],{},"可选：数据可视化。",[19,153371,153372],{},"本章整理两个方向：",[26,153374,153375,153378],{},[29,153376,153377],{},"学生管理系统。",[29,153379,153380],{},"销售数据统计和可视化。",[14,153382,153384],{"id":153383},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[339,153386,153388],{"id":153387},"_1221-需求","12.2.1 需求",[19,153390,153391],{},"实现一个命令行学生管理系统：",[26,153393,153394,153397,153400,153403,153406,153409,153412],{},[29,153395,153396],{},"添加学生。",[29,153398,153399],{},"删除学生。",[29,153401,153402],{},"修改学生。",[29,153404,153405],{},"查询学生。",[29,153407,153408],{},"显示所有学生。",[29,153410,153411],{},"保存到 JSON 文件。",[29,153413,153414],{},"程序启动时自动读取 JSON 文件。",[19,153416,153417],{},"学生字段：",[51,153419,153422],{"className":153420,"code":153421,"language":56,"meta":57},[54],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[59,153423,153421],{"__ignoreMap":57},[14,153425,153427],{"id":153426},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[51,153429,153431],{"className":439,"code":153430,"language":441,"meta":57,"style":57},"import json\nfrom pathlib import Path\n\nDATA_FILE = Path(\"students.json\")\n\n\ndef load_students():\n    if not DATA_FILE.exists():\n        return []\n\n    try:\n        with open(DATA_FILE, \"r\", encoding=\"utf-8\") as file:\n            return json.load(file)\n    except json.JSONDecodeError:\n        print(\"数据文件格式错误，已使用空数据启动\")\n        return []\n\n\ndef save_students(students):\n    with open(DATA_FILE, \"w\", encoding=\"utf-8\") as file:\n        json.dump(students, file, ensure_ascii=False, indent=2)\n\n\ndef show_menu():\n    print(\"====== 学生管理系统 ======\")\n    print(\"1. 添加学生\")\n    print(\"2. 删除学生\")\n    print(\"3. 修改学生\")\n    print(\"4. 查询学生\")\n    print(\"5. 显示所有学生\")\n    print(\"0. 退出系统\")\n\n\ndef find_student(students, student_id):\n    for student in students:\n        if student[\"student_id\"] == student_id:\n            return student\n    return None\n\n\ndef input_int(prompt):\n    while True:\n        try:\n            return int(input(prompt))\n        except ValueError:\n            print(\"请输入整数\")\n\n\ndef input_float(prompt):\n    while True:\n        try:\n            return float(input(prompt))\n        except ValueError:\n            print(\"请输入数字\")\n\n\ndef add_student(students):\n    student_id = input(\"请输入学号:\")\n\n    if find_student(students, student_id):\n        print(\"学号已存在\")\n        return\n\n    name = input(\"请输入姓名:\")\n    age = input_int(\"请输入年龄:\")\n    score = input_float(\"请输入成绩:\")\n\n    students.append({\n        \"student_id\": student_id,\n        \"name\": name,\n        \"age\": age,\n        \"score\": score,\n    })\n    save_students(students)\n    print(\"添加成功\")\n\n\ndef delete_student(students):\n    student_id = input(\"请输入要删除的学号:\")\n    student = find_student(students, student_id)\n\n    if student is None:\n        print(\"学生不存在\")\n        return\n\n    students.remove(student)\n    save_students(students)\n    print(\"删除成功\")\n\n\ndef update_student(students):\n    student_id = input(\"请输入要修改的学号:\")\n    student = find_student(students, student_id)\n\n    if student is None:\n        print(\"学生不存在\")\n        return\n\n    name = input(\"请输入新姓名:\")\n    age = input_int(\"请输入新年龄:\")\n    score = input_float(\"请输入新成绩:\")\n\n    student[\"name\"] = name\n    student[\"age\"] = age\n    student[\"score\"] = score\n\n    save_students(students)\n    print(\"修改成功\")\n\n\ndef query_student(students):\n    student_id = input(\"请输入要查询的学号:\")\n    student = find_student(students, student_id)\n\n    if student is None:\n        print(\"学生不存在\")\n        return\n\n    print_student(student)\n\n\ndef print_student(student):\n    print(\n        f\"{student['student_id']}\\t\"\n        f\"{student['name']}\\t\"\n        f\"{student['age']}\\t\"\n        f\"{student['score']}\"\n    )\n\n\ndef show_all_students(students):\n    if not students:\n        print(\"暂无学生\")\n        return\n\n    print(\"学号\\t姓名\\t年龄\\t成绩\")\n    for student in students:\n        print_student(student)\n\n\ndef main():\n    students = load_students()\n\n    while True:\n        show_menu()\n        choice = input(\"请输入操作:\")\n\n        if choice == \"1\":\n            add_student(students)\n        elif choice == \"2\":\n            delete_student(students)\n        elif choice == \"3\":\n            update_student(students)\n        elif choice == \"4\":\n            query_student(students)\n        elif choice == \"5\":\n            show_all_students(students)\n        elif choice == \"0\":\n            print(\"退出系统\")\n            break\n        else:\n            print(\"输入错误\")\n\n\nif __name__ == \"__main__\":\n    main()\n",[59,153432,153433,153439,153449,153453,153467,153471,153475,153484,153496,153502,153506,153512,153543,153553,153560,153571,153577,153581,153585,153595,153626,153652,153656,153660,153669,153680,153691,153702,153713,153724,153735,153746,153750,153754,153764,153776,153792,153799,153806,153810,153814,153824,153832,153839,153852,153862,153873,153877,153881,153890,153898,153904,153916,153924,153935,153939,153943,153952,153968,153972,153979,153990,153995,153999,154015,154030,154045,154049,154054,154062,154070,154078,154086,154090,154095,154106,154110,154114,154123,154138,154148,154152,154164,154175,154179,154183,154188,154192,154203,154207,154211,154220,154235,154243,154247,154259,154269,154273,154277,154292,154305,154318,154322,154335,154347,154359,154363,154367,154378,154382,154386,154395,154410,154418,154422,154434,154444,154448,154452,154457,154461,154465,154475,154481,154503,154522,154541,154560,154565,154569,154573,154582,154590,154601,154605,154609,154635,154645,154650,154654,154658,154666,154676,154680,154688,154693,154709,154713,154727,154732,154746,154751,154764,154769,154782,154787,154800,154805,154818,154829,154833,154839,154850,154854,154858,154870],{"__ignoreMap":57},[79,153434,153435,153437],{"class":81,"line":82},[79,153436,520],{"class":448},[79,153438,148724],{"class":228},[79,153440,153441,153443,153445,153447],{"class":81,"line":167},[79,153442,32745],{"class":448},[79,153444,110198],{"class":228},[79,153446,520],{"class":448},[79,153448,110203],{"class":228},[79,153450,153451],{"class":81,"line":178},[79,153452,542],{"emptyLinePlaceholder":541},[79,153454,153455,153458,153460,153462,153465],{"class":81,"line":545},[79,153456,153457],{"class":96},"DATA_FILE",[79,153459,556],{"class":448},[79,153461,110432],{"class":228},[79,153463,153464],{"class":89},"\"students.json\"",[79,153466,850],{"class":228},[79,153468,153469],{"class":81,"line":550},[79,153470,542],{"emptyLinePlaceholder":541},[79,153472,153473],{"class":81,"line":562},[79,153474,542],{"emptyLinePlaceholder":541},[79,153476,153477,153479,153482],{"class":81,"line":568},[79,153478,703],{"class":448},[79,153480,153481],{"class":85}," load_students",[79,153483,33953],{"class":228},[79,153485,153486,153488,153490,153493],{"class":81,"line":574},[79,153487,5176],{"class":448},[79,153489,40925],{"class":448},[79,153491,153492],{"class":96}," DATA_FILE",[79,153494,153495],{"class":228},".exists():\n",[79,153497,153498,153500],{"class":81,"line":579},[79,153499,16785],{"class":448},[79,153501,53832],{"class":228},[79,153503,153504],{"class":81,"line":585},[79,153505,542],{"emptyLinePlaceholder":541},[79,153507,153508,153510],{"class":81,"line":591},[79,153509,127417],{"class":448},[79,153511,745],{"class":228},[79,153513,153514,153517,153519,153521,153523,153525,153527,153529,153531,153533,153535,153537,153539,153541],{"class":81,"line":596},[79,153515,153516],{"class":448},"        with",[79,153518,148424],{"class":96},[79,153520,455],{"class":228},[79,153522,153457],{"class":96},[79,153524,1020],{"class":228},[79,153526,148434],{"class":89},[79,153528,1020],{"class":228},[79,153530,148439],{"class":7284},[79,153532,239],{"class":448},[79,153534,148444],{"class":89},[79,153536,15747],{"class":228},[79,153538,533],{"class":448},[79,153540,149786],{"class":7284},[79,153542,745],{"class":228},[79,153544,153545,153547,153549,153551],{"class":81,"line":602},[79,153546,17764],{"class":448},[79,153548,149797],{"class":228},[79,153550,47349],{"class":7284},[79,153552,850],{"class":228},[79,153554,153555,153557],{"class":81,"line":608},[79,153556,127445],{"class":448},[79,153558,153559],{"class":228}," json.JSONDecodeError:\n",[79,153561,153562,153564,153566,153569],{"class":81,"line":614},[79,153563,34449],{"class":96},[79,153565,455],{"class":228},[79,153567,153568],{"class":89},"\"数据文件格式错误，已使用空数据启动\"",[79,153570,850],{"class":228},[79,153572,153573,153575],{"class":81,"line":619},[79,153574,16785],{"class":448},[79,153576,53832],{"class":228},[79,153578,153579],{"class":81,"line":625},[79,153580,542],{"emptyLinePlaceholder":541},[79,153582,153583],{"class":81,"line":631},[79,153584,542],{"emptyLinePlaceholder":541},[79,153586,153587,153589,153592],{"class":81,"line":637},[79,153588,703],{"class":448},[79,153590,153591],{"class":85}," save_students",[79,153593,153594],{"class":228},"(students):\n",[79,153596,153597,153599,153601,153603,153605,153607,153610,153612,153614,153616,153618,153620,153622,153624],{"class":81,"line":643},[79,153598,36175],{"class":448},[79,153600,148424],{"class":96},[79,153602,455],{"class":228},[79,153604,153457],{"class":96},[79,153606,1020],{"class":228},[79,153608,153609],{"class":89},"\"w\"",[79,153611,1020],{"class":228},[79,153613,148439],{"class":7284},[79,153615,239],{"class":448},[79,153617,148444],{"class":89},[79,153619,15747],{"class":228},[79,153621,533],{"class":448},[79,153623,149786],{"class":7284},[79,153625,745],{"class":228},[79,153627,153628,153631,153633,153635,153637,153639,153641,153643,153646,153648,153650],{"class":81,"line":649},[79,153629,153630],{"class":228},"        json.dump(students, ",[79,153632,47349],{"class":7284},[79,153634,1020],{"class":228},[79,153636,148770],{"class":7284},[79,153638,239],{"class":448},[79,153640,35984],{"class":96},[79,153642,1020],{"class":228},[79,153644,153645],{"class":7284},"indent",[79,153647,239],{"class":448},[79,153649,2331],{"class":96},[79,153651,850],{"class":228},[79,153653,153654],{"class":81,"line":655},[79,153655,542],{"emptyLinePlaceholder":541},[79,153657,153658],{"class":81,"line":660},[79,153659,542],{"emptyLinePlaceholder":541},[79,153661,153662,153664,153667],{"class":81,"line":666},[79,153663,703],{"class":448},[79,153665,153666],{"class":85}," show_menu",[79,153668,33953],{"class":228},[79,153670,153671,153673,153675,153678],{"class":81,"line":672},[79,153672,1161],{"class":96},[79,153674,455],{"class":228},[79,153676,153677],{"class":89},"\"====== 学生管理系统 ======\"",[79,153679,850],{"class":228},[79,153681,153682,153684,153686,153689],{"class":81,"line":678},[79,153683,1161],{"class":96},[79,153685,455],{"class":228},[79,153687,153688],{"class":89},"\"1. 添加学生\"",[79,153690,850],{"class":228},[79,153692,153693,153695,153697,153700],{"class":81,"line":684},[79,153694,1161],{"class":96},[79,153696,455],{"class":228},[79,153698,153699],{"class":89},"\"2. 删除学生\"",[79,153701,850],{"class":228},[79,153703,153704,153706,153708,153711],{"class":81,"line":690},[79,153705,1161],{"class":96},[79,153707,455],{"class":228},[79,153709,153710],{"class":89},"\"3. 修改学生\"",[79,153712,850],{"class":228},[79,153714,153715,153717,153719,153722],{"class":81,"line":695},[79,153716,1161],{"class":96},[79,153718,455],{"class":228},[79,153720,153721],{"class":89},"\"4. 查询学生\"",[79,153723,850],{"class":228},[79,153725,153726,153728,153730,153733],{"class":81,"line":700},[79,153727,1161],{"class":96},[79,153729,455],{"class":228},[79,153731,153732],{"class":89},"\"5. 显示所有学生\"",[79,153734,850],{"class":228},[79,153736,153737,153739,153741,153744],{"class":81,"line":712},[79,153738,1161],{"class":96},[79,153740,455],{"class":228},[79,153742,153743],{"class":89},"\"0. 退出系统\"",[79,153745,850],{"class":228},[79,153747,153748],{"class":81,"line":721},[79,153749,542],{"emptyLinePlaceholder":541},[79,153751,153752],{"class":81,"line":726},[79,153753,542],{"emptyLinePlaceholder":541},[79,153755,153756,153758,153761],{"class":81,"line":731},[79,153757,703],{"class":448},[79,153759,153760],{"class":85}," find_student",[79,153762,153763],{"class":228},"(students, student_id):\n",[79,153765,153766,153768,153771,153773],{"class":81,"line":748},[79,153767,915],{"class":448},[79,153769,153770],{"class":228}," student ",[79,153772,921],{"class":448},[79,153774,153775],{"class":228}," students:\n",[79,153777,153778,153780,153783,153785,153787,153789],{"class":81,"line":765},[79,153779,1089],{"class":448},[79,153781,153782],{"class":228}," student[",[79,153784,153080],{"class":89},[79,153786,877],{"class":228},[79,153788,5025],{"class":448},[79,153790,153791],{"class":228}," student_id:\n",[79,153793,153794,153796],{"class":81,"line":780},[79,153795,17764],{"class":448},[79,153797,153798],{"class":228}," student\n",[79,153800,153801,153803],{"class":81,"line":811},[79,153802,715],{"class":448},[79,153804,153805],{"class":96}," None\n",[79,153807,153808],{"class":81,"line":816},[79,153809,542],{"emptyLinePlaceholder":541},[79,153811,153812],{"class":81,"line":821},[79,153813,542],{"emptyLinePlaceholder":541},[79,153815,153816,153818,153821],{"class":81,"line":837},[79,153817,703],{"class":448},[79,153819,153820],{"class":85}," input_int",[79,153822,153823],{"class":228},"(prompt):\n",[79,153825,153826,153828,153830],{"class":81,"line":853},[79,153827,4336],{"class":448},[79,153829,97279],{"class":96},[79,153831,745],{"class":228},[79,153833,153834,153837],{"class":81,"line":864},[79,153835,153836],{"class":448},"        try",[79,153838,745],{"class":228},[79,153840,153841,153843,153845,153847,153849],{"class":81,"line":869},[79,153842,17764],{"class":448},[79,153844,4467],{"class":96},[79,153846,455],{"class":228},[79,153848,55812],{"class":96},[79,153850,153851],{"class":228},"(prompt))\n",[79,153853,153854,153857,153860],{"class":81,"line":885},[79,153855,153856],{"class":448},"        except",[79,153858,153859],{"class":96}," ValueError",[79,153861,745],{"class":228},[79,153863,153864,153866,153868,153871],{"class":81,"line":891},[79,153865,1111],{"class":96},[79,153867,455],{"class":228},[79,153869,153870],{"class":89},"\"请输入整数\"",[79,153872,850],{"class":228},[79,153874,153875],{"class":81,"line":896},[79,153876,542],{"emptyLinePlaceholder":541},[79,153878,153879],{"class":81,"line":907},[79,153880,542],{"emptyLinePlaceholder":541},[79,153882,153883,153885,153888],{"class":81,"line":912},[79,153884,703],{"class":448},[79,153886,153887],{"class":85}," input_float",[79,153889,153823],{"class":228},[79,153891,153892,153894,153896],{"class":81,"line":935},[79,153893,4336],{"class":448},[79,153895,97279],{"class":96},[79,153897,745],{"class":228},[79,153899,153900,153902],{"class":81,"line":946},[79,153901,153836],{"class":448},[79,153903,745],{"class":228},[79,153905,153906,153908,153910,153912,153914],{"class":81,"line":960},[79,153907,17764],{"class":448},[79,153909,452],{"class":96},[79,153911,455],{"class":228},[79,153913,55812],{"class":96},[79,153915,153851],{"class":228},[79,153917,153918,153920,153922],{"class":81,"line":975},[79,153919,153856],{"class":448},[79,153921,153859],{"class":96},[79,153923,745],{"class":228},[79,153925,153926,153928,153930,153933],{"class":81,"line":980},[79,153927,1111],{"class":96},[79,153929,455],{"class":228},[79,153931,153932],{"class":89},"\"请输入数字\"",[79,153934,850],{"class":228},[79,153936,153937],{"class":81,"line":1006},[79,153938,542],{"emptyLinePlaceholder":541},[79,153940,153941],{"class":81,"line":1027},[79,153942,542],{"emptyLinePlaceholder":541},[79,153944,153945,153947,153950],{"class":81,"line":1032},[79,153946,703],{"class":448},[79,153948,153949],{"class":85}," add_student",[79,153951,153594],{"class":228},[79,153953,153954,153957,153959,153961,153963,153966],{"class":81,"line":1047},[79,153955,153956],{"class":228},"    student_id ",[79,153958,239],{"class":448},[79,153960,62594],{"class":96},[79,153962,455],{"class":228},[79,153964,153965],{"class":89},"\"请输入学号:\"",[79,153967,850],{"class":228},[79,153969,153970],{"class":81,"line":1053},[79,153971,542],{"emptyLinePlaceholder":541},[79,153973,153974,153976],{"class":81,"line":1058},[79,153975,5176],{"class":448},[79,153977,153978],{"class":228}," find_student(students, student_id):\n",[79,153980,153981,153983,153985,153988],{"class":81,"line":1069},[79,153982,34449],{"class":96},[79,153984,455],{"class":228},[79,153986,153987],{"class":89},"\"学号已存在\"",[79,153989,850],{"class":228},[79,153991,153992],{"class":81,"line":1081},[79,153993,153994],{"class":448},"        return\n",[79,153996,153997],{"class":81,"line":1086},[79,153998,542],{"emptyLinePlaceholder":541},[79,154000,154001,154004,154006,154008,154010,154013],{"class":81,"line":1108},[79,154002,154003],{"class":228},"    name ",[79,154005,239],{"class":448},[79,154007,62594],{"class":96},[79,154009,455],{"class":228},[79,154011,154012],{"class":89},"\"请输入姓名:\"",[79,154014,850],{"class":228},[79,154016,154017,154020,154022,154025,154028],{"class":81,"line":1153},[79,154018,154019],{"class":228},"    age ",[79,154021,239],{"class":448},[79,154023,154024],{"class":228}," input_int(",[79,154026,154027],{"class":89},"\"请输入年龄:\"",[79,154029,850],{"class":228},[79,154031,154032,154035,154037,154040,154043],{"class":81,"line":1158},[79,154033,154034],{"class":228},"    score ",[79,154036,239],{"class":448},[79,154038,154039],{"class":228}," input_float(",[79,154041,154042],{"class":89},"\"请输入成绩:\"",[79,154044,850],{"class":228},[79,154046,154047],{"class":81,"line":1180},[79,154048,542],{"emptyLinePlaceholder":541},[79,154050,154051],{"class":81,"line":1197},[79,154052,154053],{"class":228},"    students.append({\n",[79,154055,154056,154059],{"class":81,"line":1202},[79,154057,154058],{"class":89},"        \"student_id\"",[79,154060,154061],{"class":228},": student_id,\n",[79,154063,154064,154067],{"class":81,"line":1207},[79,154065,154066],{"class":89},"        \"name\"",[79,154068,154069],{"class":228},": name,\n",[79,154071,154072,154075],{"class":81,"line":1223},[79,154073,154074],{"class":89},"        \"age\"",[79,154076,154077],{"class":228},": age,\n",[79,154079,154080,154083],{"class":81,"line":18722},[79,154081,154082],{"class":89},"        \"score\"",[79,154084,154085],{"class":228},": score,\n",[79,154087,154088],{"class":81,"line":18728},[79,154089,35458],{"class":228},[79,154091,154092],{"class":81,"line":18739},[79,154093,154094],{"class":228},"    save_students(students)\n",[79,154096,154097,154099,154101,154104],{"class":81,"line":18762},[79,154098,1161],{"class":96},[79,154100,455],{"class":228},[79,154102,154103],{"class":89},"\"添加成功\"",[79,154105,850],{"class":228},[79,154107,154108],{"class":81,"line":18784},[79,154109,542],{"emptyLinePlaceholder":541},[79,154111,154112],{"class":81,"line":18789},[79,154113,542],{"emptyLinePlaceholder":541},[79,154115,154116,154118,154121],{"class":81,"line":18795},[79,154117,703],{"class":448},[79,154119,154120],{"class":85}," delete_student",[79,154122,153594],{"class":228},[79,154124,154125,154127,154129,154131,154133,154136],{"class":81,"line":18809},[79,154126,153956],{"class":228},[79,154128,239],{"class":448},[79,154130,62594],{"class":96},[79,154132,455],{"class":228},[79,154134,154135],{"class":89},"\"请输入要删除的学号:\"",[79,154137,850],{"class":228},[79,154139,154140,154143,154145],{"class":81,"line":18822},[79,154141,154142],{"class":228},"    student ",[79,154144,239],{"class":448},[79,154146,154147],{"class":228}," find_student(students, student_id)\n",[79,154149,154150],{"class":81,"line":18827},[79,154151,542],{"emptyLinePlaceholder":541},[79,154153,154154,154156,154158,154160,154162],{"class":81,"line":18841},[79,154155,5176],{"class":448},[79,154157,153770],{"class":228},[79,154159,40922],{"class":448},[79,154161,40928],{"class":96},[79,154163,745],{"class":228},[79,154165,154166,154168,154170,154173],{"class":81,"line":18846},[79,154167,34449],{"class":96},[79,154169,455],{"class":228},[79,154171,154172],{"class":89},"\"学生不存在\"",[79,154174,850],{"class":228},[79,154176,154177],{"class":81,"line":18852},[79,154178,153994],{"class":448},[79,154180,154181],{"class":81,"line":18857},[79,154182,542],{"emptyLinePlaceholder":541},[79,154184,154185],{"class":81,"line":18871},[79,154186,154187],{"class":228},"    students.remove(student)\n",[79,154189,154190],{"class":81,"line":18876},[79,154191,154094],{"class":228},[79,154193,154194,154196,154198,154201],{"class":81,"line":18881},[79,154195,1161],{"class":96},[79,154197,455],{"class":228},[79,154199,154200],{"class":89},"\"删除成功\"",[79,154202,850],{"class":228},[79,154204,154205],{"class":81,"line":18895},[79,154206,542],{"emptyLinePlaceholder":541},[79,154208,154209],{"class":81,"line":18907},[79,154210,542],{"emptyLinePlaceholder":541},[79,154212,154213,154215,154218],{"class":81,"line":18912},[79,154214,703],{"class":448},[79,154216,154217],{"class":85}," update_student",[79,154219,153594],{"class":228},[79,154221,154222,154224,154226,154228,154230,154233],{"class":81,"line":18925},[79,154223,153956],{"class":228},[79,154225,239],{"class":448},[79,154227,62594],{"class":96},[79,154229,455],{"class":228},[79,154231,154232],{"class":89},"\"请输入要修改的学号:\"",[79,154234,850],{"class":228},[79,154236,154237,154239,154241],{"class":81,"line":18930},[79,154238,154142],{"class":228},[79,154240,239],{"class":448},[79,154242,154147],{"class":228},[79,154244,154245],{"class":81,"line":18935},[79,154246,542],{"emptyLinePlaceholder":541},[79,154248,154249,154251,154253,154255,154257],{"class":81,"line":18940},[79,154250,5176],{"class":448},[79,154252,153770],{"class":228},[79,154254,40922],{"class":448},[79,154256,40928],{"class":96},[79,154258,745],{"class":228},[79,154260,154261,154263,154265,154267],{"class":81,"line":18953},[79,154262,34449],{"class":96},[79,154264,455],{"class":228},[79,154266,154172],{"class":89},[79,154268,850],{"class":228},[79,154270,154271],{"class":81,"line":18958},[79,154272,153994],{"class":448},[79,154274,154275],{"class":81,"line":34631},[79,154276,542],{"emptyLinePlaceholder":541},[79,154278,154279,154281,154283,154285,154287,154290],{"class":81,"line":34637},[79,154280,154003],{"class":228},[79,154282,239],{"class":448},[79,154284,62594],{"class":96},[79,154286,455],{"class":228},[79,154288,154289],{"class":89},"\"请输入新姓名:\"",[79,154291,850],{"class":228},[79,154293,154294,154296,154298,154300,154303],{"class":81,"line":34643},[79,154295,154019],{"class":228},[79,154297,239],{"class":448},[79,154299,154024],{"class":228},[79,154301,154302],{"class":89},"\"请输入新年龄:\"",[79,154304,850],{"class":228},[79,154306,154307,154309,154311,154313,154316],{"class":81,"line":34649},[79,154308,154034],{"class":228},[79,154310,239],{"class":448},[79,154312,154039],{"class":228},[79,154314,154315],{"class":89},"\"请输入新成绩:\"",[79,154317,850],{"class":228},[79,154319,154320],{"class":81,"line":34655},[79,154321,542],{"emptyLinePlaceholder":541},[79,154323,154324,154327,154329,154331,154333],{"class":81,"line":34666},[79,154325,154326],{"class":228},"    student[",[79,154328,64667],{"class":89},[79,154330,877],{"class":228},[79,154332,239],{"class":448},[79,154334,151428],{"class":228},[79,154336,154337,154339,154341,154343,154345],{"class":81,"line":34672},[79,154338,154326],{"class":228},[79,154340,71112],{"class":89},[79,154342,877],{"class":228},[79,154344,239],{"class":448},[79,154346,151440],{"class":228},[79,154348,154349,154351,154353,154355,154357],{"class":81,"line":34692},[79,154350,154326],{"class":228},[79,154352,153105],{"class":89},[79,154354,877],{"class":228},[79,154356,239],{"class":448},[79,154358,3685],{"class":228},[79,154360,154361],{"class":81,"line":34698},[79,154362,542],{"emptyLinePlaceholder":541},[79,154364,154365],{"class":81,"line":34709},[79,154366,154094],{"class":228},[79,154368,154369,154371,154373,154376],{"class":81,"line":34715},[79,154370,1161],{"class":96},[79,154372,455],{"class":228},[79,154374,154375],{"class":89},"\"修改成功\"",[79,154377,850],{"class":228},[79,154379,154380],{"class":81,"line":34721},[79,154381,542],{"emptyLinePlaceholder":541},[79,154383,154384],{"class":81,"line":34727},[79,154385,542],{"emptyLinePlaceholder":541},[79,154387,154388,154390,154393],{"class":81,"line":34733},[79,154389,703],{"class":448},[79,154391,154392],{"class":85}," query_student",[79,154394,153594],{"class":228},[79,154396,154397,154399,154401,154403,154405,154408],{"class":81,"line":34739},[79,154398,153956],{"class":228},[79,154400,239],{"class":448},[79,154402,62594],{"class":96},[79,154404,455],{"class":228},[79,154406,154407],{"class":89},"\"请输入要查询的学号:\"",[79,154409,850],{"class":228},[79,154411,154412,154414,154416],{"class":81,"line":34745},[79,154413,154142],{"class":228},[79,154415,239],{"class":448},[79,154417,154147],{"class":228},[79,154419,154420],{"class":81,"line":34751},[79,154421,542],{"emptyLinePlaceholder":541},[79,154423,154424,154426,154428,154430,154432],{"class":81,"line":34771},[79,154425,5176],{"class":448},[79,154427,153770],{"class":228},[79,154429,40922],{"class":448},[79,154431,40928],{"class":96},[79,154433,745],{"class":228},[79,154435,154436,154438,154440,154442],{"class":81,"line":34777},[79,154437,34449],{"class":96},[79,154439,455],{"class":228},[79,154441,154172],{"class":89},[79,154443,850],{"class":228},[79,154445,154446],{"class":81,"line":34793},[79,154447,153994],{"class":448},[79,154449,154450],{"class":81,"line":34799},[79,154451,542],{"emptyLinePlaceholder":541},[79,154453,154454],{"class":81,"line":34813},[79,154455,154456],{"class":228},"    print_student(student)\n",[79,154458,154459],{"class":81,"line":34819},[79,154460,542],{"emptyLinePlaceholder":541},[79,154462,154463],{"class":81,"line":34834},[79,154464,542],{"emptyLinePlaceholder":541},[79,154466,154467,154469,154472],{"class":81,"line":34840},[79,154468,703],{"class":448},[79,154470,154471],{"class":85}," print_student",[79,154473,154474],{"class":228},"(student):\n",[79,154476,154477,154479],{"class":81,"line":34849},[79,154478,1161],{"class":96},[79,154480,153072],{"class":228},[79,154482,154483,154486,154488,154490,154493,154496,154498,154501],{"class":81,"line":34855},[79,154484,154485],{"class":448},"        f",[79,154487,2495],{"class":89},[79,154489,3136],{"class":96},[79,154491,154492],{"class":228},"student[",[79,154494,154495],{"class":89},"'student_id'",[79,154497,3179],{"class":228},[79,154499,154500],{"class":96},"}\\t",[79,154502,27152],{"class":89},[79,154504,154505,154507,154509,154511,154513,154516,154518,154520],{"class":81,"line":34864},[79,154506,154485],{"class":448},[79,154508,2495],{"class":89},[79,154510,3136],{"class":96},[79,154512,154492],{"class":228},[79,154514,154515],{"class":89},"'name'",[79,154517,3179],{"class":228},[79,154519,154500],{"class":96},[79,154521,27152],{"class":89},[79,154523,154524,154526,154528,154530,154532,154535,154537,154539],{"class":81,"line":34870},[79,154525,154485],{"class":448},[79,154527,2495],{"class":89},[79,154529,3136],{"class":96},[79,154531,154492],{"class":228},[79,154533,154534],{"class":89},"'age'",[79,154536,3179],{"class":228},[79,154538,154500],{"class":96},[79,154540,27152],{"class":89},[79,154542,154543,154545,154547,154549,154551,154554,154556,154558],{"class":81,"line":34876},[79,154544,154485],{"class":448},[79,154546,2495],{"class":89},[79,154548,3136],{"class":96},[79,154550,154492],{"class":228},[79,154552,154553],{"class":89},"'score'",[79,154555,3179],{"class":228},[79,154557,3185],{"class":96},[79,154559,27152],{"class":89},[79,154561,154562],{"class":81,"line":34885},[79,154563,154564],{"class":228},"    )\n",[79,154566,154567],{"class":81,"line":34891},[79,154568,542],{"emptyLinePlaceholder":541},[79,154570,154571],{"class":81,"line":34902},[79,154572,542],{"emptyLinePlaceholder":541},[79,154574,154575,154577,154580],{"class":81,"line":34908},[79,154576,703],{"class":448},[79,154578,154579],{"class":85}," show_all_students",[79,154581,153594],{"class":228},[79,154583,154584,154586,154588],{"class":81,"line":34927},[79,154585,5176],{"class":448},[79,154587,40925],{"class":448},[79,154589,153775],{"class":228},[79,154591,154592,154594,154596,154599],{"class":81,"line":34933},[79,154593,34449],{"class":96},[79,154595,455],{"class":228},[79,154597,154598],{"class":89},"\"暂无学生\"",[79,154600,850],{"class":228},[79,154602,154603],{"class":81,"line":34944},[79,154604,153994],{"class":448},[79,154606,154607],{"class":81,"line":34950},[79,154608,542],{"emptyLinePlaceholder":541},[79,154610,154611,154613,154615,154618,154620,154623,154625,154628,154630,154633],{"class":81,"line":34970},[79,154612,1161],{"class":96},[79,154614,455],{"class":228},[79,154616,154617],{"class":89},"\"学号",[79,154619,3340],{"class":96},[79,154621,154622],{"class":89},"姓名",[79,154624,3340],{"class":96},[79,154626,154627],{"class":89},"年龄",[79,154629,3340],{"class":96},[79,154631,154632],{"class":89},"成绩\"",[79,154634,850],{"class":228},[79,154636,154637,154639,154641,154643],{"class":81,"line":34986},[79,154638,915],{"class":448},[79,154640,153770],{"class":228},[79,154642,921],{"class":448},[79,154644,153775],{"class":228},[79,154646,154647],{"class":81,"line":34992},[79,154648,154649],{"class":228},"        print_student(student)\n",[79,154651,154652],{"class":81,"line":35006},[79,154653,542],{"emptyLinePlaceholder":541},[79,154655,154656],{"class":81,"line":35012},[79,154657,542],{"emptyLinePlaceholder":541},[79,154659,154660,154662,154664],{"class":81,"line":35018},[79,154661,703],{"class":448},[79,154663,826],{"class":85},[79,154665,33953],{"class":228},[79,154667,154668,154671,154673],{"class":81,"line":35029},[79,154669,154670],{"class":228},"    students ",[79,154672,239],{"class":448},[79,154674,154675],{"class":228}," load_students()\n",[79,154677,154678],{"class":81,"line":35035},[79,154679,542],{"emptyLinePlaceholder":541},[79,154681,154682,154684,154686],{"class":81,"line":35041},[79,154683,4336],{"class":448},[79,154685,97279],{"class":96},[79,154687,745],{"class":228},[79,154689,154690],{"class":81,"line":35051},[79,154691,154692],{"class":228},"        show_menu()\n",[79,154694,154695,154698,154700,154702,154704,154707],{"class":81,"line":35057},[79,154696,154697],{"class":228},"        choice ",[79,154699,239],{"class":448},[79,154701,62594],{"class":96},[79,154703,455],{"class":228},[79,154705,154706],{"class":89},"\"请输入操作:\"",[79,154708,850],{"class":228},[79,154710,154711],{"class":81,"line":35068},[79,154712,542],{"emptyLinePlaceholder":541},[79,154714,154715,154717,154720,154722,154725],{"class":81,"line":35074},[79,154716,1089],{"class":448},[79,154718,154719],{"class":228}," choice ",[79,154721,5025],{"class":448},[79,154723,154724],{"class":89}," \"1\"",[79,154726,745],{"class":228},[79,154728,154729],{"class":81,"line":35084},[79,154730,154731],{"class":228},"            add_student(students)\n",[79,154733,154734,154737,154739,154741,154744],{"class":81,"line":35089},[79,154735,154736],{"class":448},"        elif",[79,154738,154719],{"class":228},[79,154740,5025],{"class":448},[79,154742,154743],{"class":89}," \"2\"",[79,154745,745],{"class":228},[79,154747,154748],{"class":81,"line":35095},[79,154749,154750],{"class":228},"            delete_student(students)\n",[79,154752,154753,154755,154757,154759,154762],{"class":81,"line":35144},[79,154754,154736],{"class":448},[79,154756,154719],{"class":228},[79,154758,5025],{"class":448},[79,154760,154761],{"class":89}," \"3\"",[79,154763,745],{"class":228},[79,154765,154766],{"class":81,"line":35191},[79,154767,154768],{"class":228},"            update_student(students)\n",[79,154770,154771,154773,154775,154777,154780],{"class":81,"line":35196},[79,154772,154736],{"class":448},[79,154774,154719],{"class":228},[79,154776,5025],{"class":448},[79,154778,154779],{"class":89}," \"4\"",[79,154781,745],{"class":228},[79,154783,154784],{"class":81,"line":35202},[79,154785,154786],{"class":228},"            query_student(students)\n",[79,154788,154789,154791,154793,154795,154798],{"class":81,"line":35221},[79,154790,154736],{"class":448},[79,154792,154719],{"class":228},[79,154794,5025],{"class":448},[79,154796,154797],{"class":89}," \"5\"",[79,154799,745],{"class":228},[79,154801,154802],{"class":81,"line":35227},[79,154803,154804],{"class":228},"            show_all_students(students)\n",[79,154806,154807,154809,154811,154813,154816],{"class":81,"line":35246},[79,154808,154736],{"class":448},[79,154810,154719],{"class":228},[79,154812,5025],{"class":448},[79,154814,154815],{"class":89}," \"0\"",[79,154817,745],{"class":228},[79,154819,154820,154822,154824,154827],{"class":81,"line":35252},[79,154821,1111],{"class":96},[79,154823,455],{"class":228},[79,154825,154826],{"class":89},"\"退出系统\"",[79,154828,850],{"class":228},[79,154830,154831],{"class":81,"line":35258},[79,154832,116731],{"class":448},[79,154834,154835,154837],{"class":81,"line":35268},[79,154836,4617],{"class":448},[79,154838,745],{"class":228},[79,154840,154841,154843,154845,154848],{"class":81,"line":35273},[79,154842,1111],{"class":96},[79,154844,455],{"class":228},[79,154846,154847],{"class":89},"\"输入错误\"",[79,154849,850],{"class":228},[79,154851,154852],{"class":81,"line":35279},[79,154853,542],{"emptyLinePlaceholder":541},[79,154855,154856],{"class":81,"line":35295},[79,154857,542],{"emptyLinePlaceholder":541},[79,154859,154860,154862,154864,154866,154868],{"class":81,"line":35340},[79,154861,1210],{"class":448},[79,154863,1213],{"class":96},[79,154865,1100],{"class":448},[79,154867,1218],{"class":89},[79,154869,745],{"class":228},[79,154871,154872],{"class":81,"line":35346},[79,154873,1226],{"class":228},[19,154875,154876],{},"这个项目串联了：",[26,154878,154879,154882,154885,154888,154891,154893],{},[29,154880,154881],{},"菜单循环。",[29,154883,154884],{},"函数封装。",[29,154886,154887],{},"列表字典。",[29,154889,154890],{},"JSON 读写。",[29,154892,153360],{},[29,154894,154895,497],{},[59,154896,154897],{},"if __name__ == \"__main__\"",[14,154899,154901],{"id":154900},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,154903,154904],{},"可以进一步拆成两个类：",[26,154906,154907,154912],{},[29,154908,154909,154911],{},[59,154910,151201],{},"：表示单个学生。",[29,154913,154914,154916],{},[59,154915,153227],{},"：负责学生增删改查和文件保存。",[19,154918,154919],{},"示意代码：",[51,154921,154923],{"className":439,"code":154922,"language":441,"meta":57,"style":57},"from dataclasses import dataclass\n\n\n@dataclass\nclass Student:\n    student_id: str\n    name: str\n    age: int\n    score: float\n\n    def to_dict(self):\n        return {\n            \"student_id\": self.student_id,\n            \"name\": self.name,\n            \"age\": self.age,\n            \"score\": self.score,\n        }\n\n    @classmethod\n    def from_dict(cls, data):\n        return cls(\n            data[\"student_id\"],\n            data[\"name\"],\n            data[\"age\"],\n            data[\"score\"],\n        )\n",[59,154924,154925,154935,154939,154943,154947,154955,154962,154968,154974,154980,154984,154992,154998,155008,155018,155028,155038,155042,155046,155052,155060,155068,155076,155084,155092,155100],{"__ignoreMap":57},[79,154926,154927,154929,154931,154933],{"class":81,"line":82},[79,154928,32745],{"class":448},[79,154930,152785],{"class":228},[79,154932,520],{"class":448},[79,154934,152790],{"class":228},[79,154936,154937],{"class":81,"line":167},[79,154938,542],{"emptyLinePlaceholder":541},[79,154940,154941],{"class":81,"line":178},[79,154942,542],{"emptyLinePlaceholder":541},[79,154944,154945],{"class":81,"line":545},[79,154946,152803],{"class":85},[79,154948,154949,154951,154953],{"class":81,"line":550},[79,154950,16727],{"class":448},[79,154952,9963],{"class":85},[79,154954,745],{"class":228},[79,154956,154957,154960],{"class":81,"line":562},[79,154958,154959],{"class":228},"    student_id: ",[79,154961,152819],{"class":96},[79,154963,154964,154966],{"class":81,"line":568},[79,154965,152816],{"class":228},[79,154967,152819],{"class":96},[79,154969,154970,154972],{"class":81,"line":574},[79,154971,152824],{"class":228},[79,154973,152827],{"class":96},[79,154975,154976,154978],{"class":81,"line":579},[79,154977,152832],{"class":228},[79,154979,152835],{"class":96},[79,154981,154982],{"class":81,"line":585},[79,154983,542],{"emptyLinePlaceholder":541},[79,154985,154986,154988,154990],{"class":81,"line":591},[79,154987,32808],{"class":448},[79,154989,152983],{"class":85},[79,154991,32814],{"class":228},[79,154993,154994,154996],{"class":81,"line":596},[79,154995,16785],{"class":448},[79,154997,17604],{"class":228},[79,154999,155000,155002,155004,155006],{"class":81,"line":602},[79,155001,152996],{"class":89},[79,155003,53431],{"class":228},[79,155005,32830],{"class":96},[79,155007,153003],{"class":228},[79,155009,155010,155012,155014,155016],{"class":81,"line":608},[79,155011,153008],{"class":89},[79,155013,53431],{"class":228},[79,155015,32830],{"class":96},[79,155017,153015],{"class":228},[79,155019,155020,155022,155024,155026],{"class":81,"line":614},[79,155021,153020],{"class":89},[79,155023,53431],{"class":228},[79,155025,32830],{"class":96},[79,155027,153027],{"class":228},[79,155029,155030,155032,155034,155036],{"class":81,"line":619},[79,155031,153032],{"class":89},[79,155033,53431],{"class":228},[79,155035,32830],{"class":96},[79,155037,153039],{"class":228},[79,155039,155040],{"class":81,"line":625},[79,155041,4612],{"class":228},[79,155043,155044],{"class":81,"line":631},[79,155045,542],{"emptyLinePlaceholder":541},[79,155047,155048,155050],{"class":81,"line":637},[79,155049,152647],{"class":85},[79,155051,152650],{"class":96},[79,155053,155054,155056,155058],{"class":81,"line":643},[79,155055,32808],{"class":448},[79,155057,153060],{"class":85},[79,155059,153063],{"class":228},[79,155061,155062,155064,155066],{"class":81,"line":649},[79,155063,16785],{"class":448},[79,155065,152667],{"class":96},[79,155067,153072],{"class":228},[79,155069,155070,155072,155074],{"class":81,"line":655},[79,155071,153077],{"class":228},[79,155073,153080],{"class":89},[79,155075,89823],{"class":228},[79,155077,155078,155080,155082],{"class":81,"line":660},[79,155079,153077],{"class":228},[79,155081,64667],{"class":89},[79,155083,89823],{"class":228},[79,155085,155086,155088,155090],{"class":81,"line":666},[79,155087,153077],{"class":228},[79,155089,71112],{"class":89},[79,155091,89823],{"class":228},[79,155093,155094,155096,155098],{"class":81,"line":672},[79,155095,153077],{"class":228},[79,155097,153105],{"class":89},[79,155099,89823],{"class":228},[79,155101,155102],{"class":81,"line":678},[79,155103,40121],{"class":228},[19,155105,155106],{},"管理器示意：",[51,155108,155110],{"className":439,"code":155109,"language":441,"meta":57,"style":57},"class StudentManager:\n    def __init__(self):\n        self.students = []\n\n    def find_by_id(self, student_id):\n        for student in self.students:\n            if student.student_id == student_id:\n                return student\n        return None\n\n    def add(self, student):\n        if self.find_by_id(student.student_id):\n            return False\n        self.students.append(student)\n        return True\n",[59,155111,155112,155121,155129,155140,155144,155154,155167,155178,155185,155191,155195,155204,155213,155219,155226],{"__ignoreMap":57},[79,155113,155114,155116,155119],{"class":81,"line":82},[79,155115,16727],{"class":448},[79,155117,155118],{"class":85}," StudentManager",[79,155120,745],{"class":228},[79,155122,155123,155125,155127],{"class":81,"line":167},[79,155124,32808],{"class":448},[79,155126,32811],{"class":96},[79,155128,32814],{"class":228},[79,155130,155131,155133,155136,155138],{"class":81,"line":178},[79,155132,32852],{"class":96},[79,155134,155135],{"class":228},".students ",[79,155137,239],{"class":448},[79,155139,53832],{"class":228},[79,155141,155142],{"class":81,"line":545},[79,155143,542],{"emptyLinePlaceholder":541},[79,155145,155146,155148,155151],{"class":81,"line":550},[79,155147,32808],{"class":448},[79,155149,155150],{"class":85}," find_by_id",[79,155152,155153],{"class":228},"(self, student_id):\n",[79,155155,155156,155158,155160,155162,155164],{"class":81,"line":562},[79,155157,5477],{"class":448},[79,155159,153770],{"class":228},[79,155161,921],{"class":448},[79,155163,40868],{"class":96},[79,155165,155166],{"class":228},".students:\n",[79,155168,155169,155171,155174,155176],{"class":81,"line":568},[79,155170,6712],{"class":448},[79,155172,155173],{"class":228}," student.student_id ",[79,155175,5025],{"class":448},[79,155177,153791],{"class":228},[79,155179,155180,155183],{"class":81,"line":574},[79,155181,155182],{"class":448},"                return",[79,155184,153798],{"class":228},[79,155186,155187,155189],{"class":81,"line":579},[79,155188,16785],{"class":448},[79,155190,153805],{"class":96},[79,155192,155193],{"class":81,"line":585},[79,155194,542],{"emptyLinePlaceholder":541},[79,155196,155197,155199,155201],{"class":81,"line":591},[79,155198,32808],{"class":448},[79,155200,7277],{"class":85},[79,155202,155203],{"class":228},"(self, student):\n",[79,155205,155206,155208,155210],{"class":81,"line":596},[79,155207,1089],{"class":448},[79,155209,40868],{"class":96},[79,155211,155212],{"class":228},".find_by_id(student.student_id):\n",[79,155214,155215,155217],{"class":81,"line":602},[79,155216,17764],{"class":448},[79,155218,127440],{"class":96},[79,155220,155221,155223],{"class":81,"line":608},[79,155222,32852],{"class":96},[79,155224,155225],{"class":228},".students.append(student)\n",[79,155227,155228,155230],{"class":81,"line":614},[79,155229,16785],{"class":448},[79,155231,155232],{"class":96}," True\n",[19,155234,155235],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,155237,155239],{"id":155238},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[339,155241,155243],{"id":155242},"_1251-数据结构","12.5.1 数据结构",[51,155245,155247],{"className":439,"code":155246,"language":441,"meta":57,"style":57},"sales = [\n    {\"date\": \"2024-10-01\", \"category\": \"手机\", \"amount\": 12000},\n    {\"date\": \"2024-10-01\", \"category\": \"电脑\", \"amount\": 18000},\n    {\"date\": \"2024-10-02\", \"category\": \"手机\", \"amount\": 15000},\n    {\"date\": \"2024-10-02\", \"category\": \"电脑\", \"amount\": 16000},\n]\n",[59,155248,155249,155257,155288,155318,155347,155376],{"__ignoreMap":57},[79,155250,155251,155253,155255],{"class":81,"line":82},[79,155252,150098],{"class":228},[79,155254,239],{"class":448},[79,155256,57436],{"class":228},[79,155258,155259,155261,155263,155265,155267,155269,155272,155274,155277,155279,155281,155283,155286],{"class":81,"line":167},[79,155260,150018],{"class":228},[79,155262,149630],{"class":89},[79,155264,53431],{"class":228},[79,155266,150241],{"class":89},[79,155268,1020],{"class":228},[79,155270,155271],{"class":89},"\"category\"",[79,155273,53431],{"class":228},[79,155275,155276],{"class":89},"\"手机\"",[79,155278,1020],{"class":228},[79,155280,86071],{"class":89},[79,155282,53431],{"class":228},[79,155284,155285],{"class":96},"12000",[79,155287,7000],{"class":228},[79,155289,155290,155292,155294,155296,155298,155300,155302,155304,155307,155309,155311,155313,155316],{"class":81,"line":178},[79,155291,150018],{"class":228},[79,155293,149630],{"class":89},[79,155295,53431],{"class":228},[79,155297,150241],{"class":89},[79,155299,1020],{"class":228},[79,155301,155271],{"class":89},[79,155303,53431],{"class":228},[79,155305,155306],{"class":89},"\"电脑\"",[79,155308,1020],{"class":228},[79,155310,86071],{"class":89},[79,155312,53431],{"class":228},[79,155314,155315],{"class":96},"18000",[79,155317,7000],{"class":228},[79,155319,155320,155322,155324,155326,155328,155330,155332,155334,155336,155338,155340,155342,155345],{"class":81,"line":545},[79,155321,150018],{"class":228},[79,155323,149630],{"class":89},[79,155325,53431],{"class":228},[79,155327,150262],{"class":89},[79,155329,1020],{"class":228},[79,155331,155271],{"class":89},[79,155333,53431],{"class":228},[79,155335,155276],{"class":89},[79,155337,1020],{"class":228},[79,155339,86071],{"class":89},[79,155341,53431],{"class":228},[79,155343,155344],{"class":96},"15000",[79,155346,7000],{"class":228},[79,155348,155349,155351,155353,155355,155357,155359,155361,155363,155365,155367,155369,155371,155374],{"class":81,"line":550},[79,155350,150018],{"class":228},[79,155352,149630],{"class":89},[79,155354,53431],{"class":228},[79,155356,150262],{"class":89},[79,155358,1020],{"class":228},[79,155360,155271],{"class":89},[79,155362,53431],{"class":228},[79,155364,155306],{"class":89},[79,155366,1020],{"class":228},[79,155368,86071],{"class":89},[79,155370,53431],{"class":228},[79,155372,155373],{"class":96},"16000",[79,155375,7000],{"class":228},[79,155377,155378],{"class":81,"line":562},[79,155379,762],{"class":228},[339,155381,155383],{"id":155382},"_1252-按日期统计","12.5.2 按日期统计",[51,155385,155387],{"className":439,"code":155386,"language":441,"meta":57,"style":57},"daily_total = {}\n\nfor item in sales:\n    date = item[\"date\"]\n    amount = item[\"amount\"]\n    daily_total[date] = daily_total.get(date, 0) + amount\n\nprint(daily_total)\n",[59,155388,155389,155398,155402,155413,155427,155440,155459,155463],{"__ignoreMap":57},[79,155390,155391,155394,155396],{"class":81,"line":82},[79,155392,155393],{"class":228},"daily_total ",[79,155395,239],{"class":448},[79,155397,89855],{"class":228},[79,155399,155400],{"class":81,"line":167},[79,155401,542],{"emptyLinePlaceholder":541},[79,155403,155404,155406,155408,155410],{"class":81,"line":178},[79,155405,1638],{"class":448},[79,155407,149842],{"class":228},[79,155409,921],{"class":448},[79,155411,155412],{"class":228}," sales:\n",[79,155414,155415,155418,155420,155423,155425],{"class":81,"line":545},[79,155416,155417],{"class":228},"    date ",[79,155419,239],{"class":448},[79,155421,155422],{"class":228}," item[",[79,155424,149630],{"class":89},[79,155426,762],{"class":228},[79,155428,155429,155432,155434,155436,155438],{"class":81,"line":550},[79,155430,155431],{"class":228},"    amount ",[79,155433,239],{"class":448},[79,155435,155422],{"class":228},[79,155437,86071],{"class":89},[79,155439,762],{"class":228},[79,155441,155442,155445,155447,155450,155452,155454,155456],{"class":81,"line":562},[79,155443,155444],{"class":228},"    daily_total[date] ",[79,155446,239],{"class":448},[79,155448,155449],{"class":228}," daily_total.get(date, ",[79,155451,759],{"class":96},[79,155453,15747],{"class":228},[79,155455,995],{"class":448},[79,155457,155458],{"class":228}," amount\n",[79,155460,155461],{"class":81,"line":568},[79,155462,542],{"emptyLinePlaceholder":541},[79,155464,155465,155467],{"class":81,"line":574},[79,155466,1889],{"class":96},[79,155468,155469],{"class":228},"(daily_total)\n",[339,155471,155473],{"id":155472},"_1253-按类别统计","12.5.3 按类别统计",[51,155475,155477],{"className":439,"code":155476,"language":441,"meta":57,"style":57},"category_total = {}\n\nfor item in sales:\n    category = item[\"category\"]\n    amount = item[\"amount\"]\n    category_total[category] = category_total.get(category, 0) + amount\n\nprint(category_total)\n",[59,155478,155479,155488,155492,155502,155515,155527,155545,155549],{"__ignoreMap":57},[79,155480,155481,155484,155486],{"class":81,"line":82},[79,155482,155483],{"class":228},"category_total ",[79,155485,239],{"class":448},[79,155487,89855],{"class":228},[79,155489,155490],{"class":81,"line":167},[79,155491,542],{"emptyLinePlaceholder":541},[79,155493,155494,155496,155498,155500],{"class":81,"line":178},[79,155495,1638],{"class":448},[79,155497,149842],{"class":228},[79,155499,921],{"class":448},[79,155501,155412],{"class":228},[79,155503,155504,155507,155509,155511,155513],{"class":81,"line":545},[79,155505,155506],{"class":228},"    category ",[79,155508,239],{"class":448},[79,155510,155422],{"class":228},[79,155512,155271],{"class":89},[79,155514,762],{"class":228},[79,155516,155517,155519,155521,155523,155525],{"class":81,"line":550},[79,155518,155431],{"class":228},[79,155520,239],{"class":448},[79,155522,155422],{"class":228},[79,155524,86071],{"class":89},[79,155526,762],{"class":228},[79,155528,155529,155532,155534,155537,155539,155541,155543],{"class":81,"line":562},[79,155530,155531],{"class":228},"    category_total[category] ",[79,155533,239],{"class":448},[79,155535,155536],{"class":228}," category_total.get(category, ",[79,155538,759],{"class":96},[79,155540,15747],{"class":228},[79,155542,995],{"class":448},[79,155544,155458],{"class":228},[79,155546,155547],{"class":81,"line":568},[79,155548,542],{"emptyLinePlaceholder":541},[79,155550,155551,155553],{"class":81,"line":574},[79,155552,1889],{"class":96},[79,155554,155555],{"class":228},"(category_total)\n",[339,155557,155559],{"id":155558},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[51,155561,155563],{"className":439,"code":155562,"language":441,"meta":57,"style":57},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[59,155564,155565,155590],{"__ignoreMap":57},[79,155566,155567,155570,155572,155574,155577,155580,155583,155586,155588],{"class":81,"line":82},[79,155568,155569],{"class":228},"top_date, top_amount ",[79,155571,239],{"class":448},[79,155573,8018],{"class":96},[79,155575,155576],{"class":228},"(daily_total.items(), ",[79,155578,155579],{"class":7284},"key",[79,155581,155582],{"class":448},"=lambda",[79,155584,155585],{"class":228}," item: item[",[79,155587,775],{"class":96},[79,155589,6727],{"class":228},[79,155591,155592,155594],{"class":81,"line":167},[79,155593,1889],{"class":96},[79,155595,155596],{"class":228},"(top_date, top_amount)\n",[14,155598,155600],{"id":155599},"_126-绘制柱状图","12.6 绘制柱状图",[51,155602,155604],{"className":439,"code":155603,"language":441,"meta":57,"style":57},"from pyecharts import options as opts\nfrom pyecharts.charts import Bar\n\ncategory_total = {\n    \"手机\": 27000,\n    \"电脑\": 34000,\n    \"耳机\": 8000,\n}\n\nbar = Bar()\nbar.add_xaxis(list(category_total.keys()))\nbar.add_yaxis(\"销售额\", list(category_total.values()))\nbar.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"品类销售额\"),\n    xaxis_opts=opts.AxisOpts(name=\"品类\"),\n    yaxis_opts=opts.AxisOpts(name=\"销售额\"),\n)\nbar.render(\"category_sales.html\")\n",[59,155605,155606,155620,155631,155635,155643,155655,155667,155678,155682,155686,155696,155707,155721,155726,155743,155760,155776,155780],{"__ignoreMap":57},[79,155607,155608,155610,155612,155614,155616,155618],{"class":81,"line":82},[79,155609,32745],{"class":448},[79,155611,149012],{"class":228},[79,155613,520],{"class":448},[79,155615,149017],{"class":228},[79,155617,533],{"class":448},[79,155619,149022],{"class":228},[79,155621,155622,155624,155626,155628],{"class":81,"line":167},[79,155623,32745],{"class":448},[79,155625,148871],{"class":228},[79,155627,520],{"class":448},[79,155629,155630],{"class":228}," Bar\n",[79,155632,155633],{"class":81,"line":178},[79,155634,542],{"emptyLinePlaceholder":541},[79,155636,155637,155639,155641],{"class":81,"line":545},[79,155638,155483],{"class":228},[79,155640,239],{"class":448},[79,155642,17604],{"class":228},[79,155644,155645,155648,155650,155653],{"class":81,"line":550},[79,155646,155647],{"class":89},"    \"手机\"",[79,155649,53431],{"class":228},[79,155651,155652],{"class":96},"27000",[79,155654,33468],{"class":228},[79,155656,155657,155660,155662,155665],{"class":81,"line":562},[79,155658,155659],{"class":89},"    \"电脑\"",[79,155661,53431],{"class":228},[79,155663,155664],{"class":96},"34000",[79,155666,33468],{"class":228},[79,155668,155669,155672,155674,155676],{"class":81,"line":568},[79,155670,155671],{"class":89},"    \"耳机\"",[79,155673,53431],{"class":228},[79,155675,126032],{"class":96},[79,155677,33468],{"class":228},[79,155679,155680],{"class":81,"line":574},[79,155681,3671],{"class":228},[79,155683,155684],{"class":81,"line":579},[79,155685,542],{"emptyLinePlaceholder":541},[79,155687,155688,155691,155693],{"class":81,"line":585},[79,155689,155690],{"class":228},"bar ",[79,155692,239],{"class":448},[79,155694,155695],{"class":228}," Bar()\n",[79,155697,155698,155701,155704],{"class":81,"line":591},[79,155699,155700],{"class":228},"bar.add_xaxis(",[79,155702,155703],{"class":96},"list",[79,155705,155706],{"class":228},"(category_total.keys()))\n",[79,155708,155709,155712,155714,155716,155718],{"class":81,"line":596},[79,155710,155711],{"class":228},"bar.add_yaxis(",[79,155713,148928],{"class":89},[79,155715,1020],{"class":228},[79,155717,155703],{"class":96},[79,155719,155720],{"class":228},"(category_total.values()))\n",[79,155722,155723],{"class":81,"line":602},[79,155724,155725],{"class":228},"bar.set_global_opts(\n",[79,155727,155728,155730,155732,155734,155736,155738,155741],{"class":81,"line":608},[79,155729,149106],{"class":7284},[79,155731,239],{"class":448},[79,155733,149111],{"class":228},[79,155735,53401],{"class":7284},[79,155737,239],{"class":448},[79,155739,155740],{"class":89},"\"品类销售额\"",[79,155742,40042],{"class":228},[79,155744,155745,155747,155749,155751,155753,155755,155758],{"class":81,"line":614},[79,155746,149125],{"class":7284},[79,155748,239],{"class":448},[79,155750,149130],{"class":228},[79,155752,81798],{"class":7284},[79,155754,239],{"class":448},[79,155756,155757],{"class":89},"\"品类\"",[79,155759,40042],{"class":228},[79,155761,155762,155764,155766,155768,155770,155772,155774],{"class":81,"line":619},[79,155763,149144],{"class":7284},[79,155765,239],{"class":448},[79,155767,149130],{"class":228},[79,155769,81798],{"class":7284},[79,155771,239],{"class":448},[79,155773,148928],{"class":89},[79,155775,40042],{"class":228},[79,155777,155778],{"class":81,"line":625},[79,155779,850],{"class":228},[79,155781,155782,155785,155788],{"class":81,"line":631},[79,155783,155784],{"class":228},"bar.render(",[79,155786,155787],{"class":89},"\"category_sales.html\"",[79,155789,850],{"class":228},[14,155791,155793],{"id":155792},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,155795,155796],{},"时间线适合展示不同日期、月份、年份的数据变化。",[51,155798,155800],{"className":439,"code":155799,"language":441,"meta":57,"style":57},"from pyecharts import options as opts\nfrom pyecharts.charts import Bar, Timeline\n\ndata = {\n    \"2024-10-01\": {\"手机\": 12000, \"电脑\": 18000},\n    \"2024-10-02\": {\"手机\": 15000, \"电脑\": 16000},\n    \"2024-10-03\": {\"手机\": 17000, \"电脑\": 19000},\n}\n\ntimeline = Timeline()\n\nfor date, category_data in data.items():\n    bar = Bar()\n    bar.add_xaxis(list(category_data.keys()))\n    bar.add_yaxis(\"销售额\", list(category_data.values()))\n    bar.set_global_opts(title_opts=opts.TitleOpts(title=f\"{date}销售额\"))\n    timeline.add(bar, date)\n\ntimeline.render(\"timeline_sales.html\")\n",[59,155801,155802,155816,155827,155831,155839,155863,155886,155911,155915,155919,155929,155933,155944,155953,155963,155977,156008,156013,156017],{"__ignoreMap":57},[79,155803,155804,155806,155808,155810,155812,155814],{"class":81,"line":82},[79,155805,32745],{"class":448},[79,155807,149012],{"class":228},[79,155809,520],{"class":448},[79,155811,149017],{"class":228},[79,155813,533],{"class":448},[79,155815,149022],{"class":228},[79,155817,155818,155820,155822,155824],{"class":81,"line":167},[79,155819,32745],{"class":448},[79,155821,148871],{"class":228},[79,155823,520],{"class":448},[79,155825,155826],{"class":228}," Bar, Timeline\n",[79,155828,155829],{"class":81,"line":178},[79,155830,542],{"emptyLinePlaceholder":541},[79,155832,155833,155835,155837],{"class":81,"line":545},[79,155834,103602],{"class":228},[79,155836,239],{"class":448},[79,155838,17604],{"class":228},[79,155840,155841,155844,155847,155849,155851,155853,155855,155857,155859,155861],{"class":81,"line":550},[79,155842,155843],{"class":89},"    \"2024-10-01\"",[79,155845,155846],{"class":228},": {",[79,155848,155276],{"class":89},[79,155850,53431],{"class":228},[79,155852,155285],{"class":96},[79,155854,1020],{"class":228},[79,155856,155306],{"class":89},[79,155858,53431],{"class":228},[79,155860,155315],{"class":96},[79,155862,7000],{"class":228},[79,155864,155865,155868,155870,155872,155874,155876,155878,155880,155882,155884],{"class":81,"line":562},[79,155866,155867],{"class":89},"    \"2024-10-02\"",[79,155869,155846],{"class":228},[79,155871,155276],{"class":89},[79,155873,53431],{"class":228},[79,155875,155344],{"class":96},[79,155877,1020],{"class":228},[79,155879,155306],{"class":89},[79,155881,53431],{"class":228},[79,155883,155373],{"class":96},[79,155885,7000],{"class":228},[79,155887,155888,155891,155893,155895,155897,155900,155902,155904,155906,155909],{"class":81,"line":568},[79,155889,155890],{"class":89},"    \"2024-10-03\"",[79,155892,155846],{"class":228},[79,155894,155276],{"class":89},[79,155896,53431],{"class":228},[79,155898,155899],{"class":96},"17000",[79,155901,1020],{"class":228},[79,155903,155306],{"class":89},[79,155905,53431],{"class":228},[79,155907,155908],{"class":96},"19000",[79,155910,7000],{"class":228},[79,155912,155913],{"class":81,"line":574},[79,155914,3671],{"class":228},[79,155916,155917],{"class":81,"line":579},[79,155918,542],{"emptyLinePlaceholder":541},[79,155920,155921,155924,155926],{"class":81,"line":585},[79,155922,155923],{"class":228},"timeline ",[79,155925,239],{"class":448},[79,155927,155928],{"class":228}," Timeline()\n",[79,155930,155931],{"class":81,"line":591},[79,155932,542],{"emptyLinePlaceholder":541},[79,155934,155935,155937,155940,155942],{"class":81,"line":596},[79,155936,1638],{"class":448},[79,155938,155939],{"class":228}," date, category_data ",[79,155941,921],{"class":448},[79,155943,150781],{"class":228},[79,155945,155946,155949,155951],{"class":81,"line":602},[79,155947,155948],{"class":228},"    bar ",[79,155950,239],{"class":448},[79,155952,155695],{"class":228},[79,155954,155955,155958,155960],{"class":81,"line":608},[79,155956,155957],{"class":228},"    bar.add_xaxis(",[79,155959,155703],{"class":96},[79,155961,155962],{"class":228},"(category_data.keys()))\n",[79,155964,155965,155968,155970,155972,155974],{"class":81,"line":614},[79,155966,155967],{"class":228},"    bar.add_yaxis(",[79,155969,148928],{"class":89},[79,155971,1020],{"class":228},[79,155973,155703],{"class":96},[79,155975,155976],{"class":228},"(category_data.values()))\n",[79,155978,155979,155982,155985,155987,155989,155991,155993,155995,155997,155999,156001,156003,156006],{"class":81,"line":619},[79,155980,155981],{"class":228},"    bar.set_global_opts(",[79,155983,155984],{"class":7284},"title_opts",[79,155986,239],{"class":448},[79,155988,149111],{"class":228},[79,155990,53401],{"class":7284},[79,155992,239],{"class":448},[79,155994,2307],{"class":448},[79,155996,2495],{"class":89},[79,155998,3136],{"class":96},[79,156000,75914],{"class":228},[79,156002,3185],{"class":96},[79,156004,156005],{"class":89},"销售额\"",[79,156007,1150],{"class":228},[79,156009,156010],{"class":81,"line":625},[79,156011,156012],{"class":228},"    timeline.add(bar, date)\n",[79,156014,156015],{"class":81,"line":631},[79,156016,542],{"emptyLinePlaceholder":541},[79,156018,156019,156022,156025],{"class":81,"line":637},[79,156020,156021],{"class":228},"timeline.render(",[79,156023,156024],{"class":89},"\"timeline_sales.html\"",[79,156026,850],{"class":228},[14,156028,156030],{"id":156029},"_128-绘制地图","12.8 绘制地图",[19,156032,156033],{},"地图适合展示地区数据。",[51,156035,156037],{"className":439,"code":156036,"language":441,"meta":57,"style":57},"from pyecharts import options as opts\nfrom pyecharts.charts import Map\n\ndata = [\n    (\"北京\", 120),\n    (\"上海\", 150),\n    (\"广东\", 200),\n    (\"浙江\", 180),\n]\n\nmap_chart = Map()\nmap_chart.add(\"销售额\", data, \"china\")\nmap_chart.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"地区销售额\"),\n    visualmap_opts=opts.VisualMapOpts(max_=200),\n)\nmap_chart.render(\"map_sales.html\")\n",[59,156038,156039,156053,156064,156068,156076,156089,156101,156114,156127,156131,156135,156145,156160,156165,156182,156201,156205],{"__ignoreMap":57},[79,156040,156041,156043,156045,156047,156049,156051],{"class":81,"line":82},[79,156042,32745],{"class":448},[79,156044,149012],{"class":228},[79,156046,520],{"class":448},[79,156048,149017],{"class":228},[79,156050,533],{"class":448},[79,156052,149022],{"class":228},[79,156054,156055,156057,156059,156061],{"class":81,"line":167},[79,156056,32745],{"class":448},[79,156058,148871],{"class":228},[79,156060,520],{"class":448},[79,156062,156063],{"class":228}," Map\n",[79,156065,156066],{"class":81,"line":178},[79,156067,542],{"emptyLinePlaceholder":541},[79,156069,156070,156072,156074],{"class":81,"line":545},[79,156071,103602],{"class":228},[79,156073,239],{"class":448},[79,156075,57436],{"class":228},[79,156077,156078,156081,156083,156085,156087],{"class":81,"line":550},[79,156079,156080],{"class":228},"    (",[79,156082,71257],{"class":89},[79,156084,1020],{"class":228},[79,156086,3057],{"class":96},[79,156088,40042],{"class":228},[79,156090,156091,156093,156095,156097,156099],{"class":81,"line":562},[79,156092,156080],{"class":228},[79,156094,71277],{"class":89},[79,156096,1020],{"class":228},[79,156098,148945],{"class":96},[79,156100,40042],{"class":228},[79,156102,156103,156105,156108,156110,156112],{"class":81,"line":568},[79,156104,156080],{"class":228},[79,156106,156107],{"class":89},"\"广东\"",[79,156109,1020],{"class":228},[79,156111,3817],{"class":96},[79,156113,40042],{"class":228},[79,156115,156116,156118,156121,156123,156125],{"class":81,"line":574},[79,156117,156080],{"class":228},[79,156119,156120],{"class":89},"\"浙江\"",[79,156122,1020],{"class":228},[79,156124,148950],{"class":96},[79,156126,40042],{"class":228},[79,156128,156129],{"class":81,"line":579},[79,156130,762],{"class":228},[79,156132,156133],{"class":81,"line":585},[79,156134,542],{"emptyLinePlaceholder":541},[79,156136,156137,156140,156142],{"class":81,"line":591},[79,156138,156139],{"class":228},"map_chart ",[79,156141,239],{"class":448},[79,156143,156144],{"class":228}," Map()\n",[79,156146,156147,156150,156152,156155,156158],{"class":81,"line":596},[79,156148,156149],{"class":228},"map_chart.add(",[79,156151,148928],{"class":89},[79,156153,156154],{"class":228},", data, ",[79,156156,156157],{"class":89},"\"china\"",[79,156159,850],{"class":228},[79,156161,156162],{"class":81,"line":602},[79,156163,156164],{"class":228},"map_chart.set_global_opts(\n",[79,156166,156167,156169,156171,156173,156175,156177,156180],{"class":81,"line":608},[79,156168,149106],{"class":7284},[79,156170,239],{"class":448},[79,156172,149111],{"class":228},[79,156174,53401],{"class":7284},[79,156176,239],{"class":448},[79,156178,156179],{"class":89},"\"地区销售额\"",[79,156181,40042],{"class":228},[79,156183,156184,156187,156189,156192,156195,156197,156199],{"class":81,"line":614},[79,156185,156186],{"class":7284},"    visualmap_opts",[79,156188,239],{"class":448},[79,156190,156191],{"class":228},"opts.VisualMapOpts(",[79,156193,156194],{"class":7284},"max_",[79,156196,239],{"class":448},[79,156198,3817],{"class":96},[79,156200,40042],{"class":228},[79,156202,156203],{"class":81,"line":619},[79,156204,850],{"class":228},[79,156206,156207,156210,156213],{"class":81,"line":625},[79,156208,156209],{"class":228},"map_chart.render(",[79,156211,156212],{"class":89},"\"map_sales.html\"",[79,156214,850],{"class":228},[19,156216,156217],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,156219,156221],{"id":156220},"_129-项目拆分建议","12.9 项目拆分建议",[19,156223,156224],{},"当代码超过一个文件时，可以这样组织：",[51,156226,156229],{"className":156227,"code":156228,"language":56,"meta":57},[54],"sales_project\u002F\n  main.py\n  data\u002F\n    sales.json\n  services\u002F\n    __init__.py\n    sales_service.py\n  charts\u002F\n    __init__.py\n    chart_builder.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n",[59,156230,156228],{"__ignoreMap":57},[19,156232,156233],{},"职责：",[26,156235,156236,156242,156248,156254],{},[29,156237,156238,156241],{},[59,156239,156240],{},"main.py","：程序入口。",[29,156243,156244,156247],{},[59,156245,156246],{},"file_utils.py","：读写 JSON。",[29,156249,156250,156253],{},[59,156251,156252],{},"sales_service.py","：统计销售数据。",[29,156255,156256,156259],{},[59,156257,156258],{},"chart_builder.py","：生成图表。",[14,156261,156263],{"id":156262},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,156265,156266],{},"语法基础：",[26,156268,156269,156272,156275,156278],{},[29,156270,156271],{},"会写变量、注释、输入输出。",[29,156273,156274],{},"会使用 int、float、str、bool。",[29,156276,156277],{},"会做类型转换。",[29,156279,156280],{},"会使用 f-string 格式化输出。",[19,156282,156283],{},"流程控制：",[26,156285,156286,156292,156298,156306],{},[29,156287,156288,156289,497],{},"会写 ",[59,156290,156291],{},"if elif else",[29,156293,156288,156294,1748,156296,497],{},[59,156295,110550],{},[59,156297,1638],{},[29,156299,156300,156301,1748,156303,497],{},"理解 ",[59,156302,4138],{},[59,156304,156305],{},"continue",[29,156307,156308],{},"能写嵌套循环。",[19,156310,156311],{},"函数：",[26,156313,156314,156317,156320,156323],{},[29,156315,156316],{},"会定义和调用函数。",[29,156318,156319],{},"理解参数和返回值。",[29,156321,156322],{},"知道局部变量和全局变量。",[29,156324,156325],{},"会使用默认参数、关键字参数、不定长参数。",[19,156327,156328],{},"容器：",[26,156330,156331,156334,156337,156340,156343],{},[29,156332,156333],{},"会使用列表增删改查。",[29,156335,156336],{},"会遍历列表、字典。",[29,156338,156339],{},"会使用切片。",[29,156341,156342],{},"会用集合去重。",[29,156344,156345],{},"会处理列表嵌套字典。",[19,156347,156348],{},"文件和模块：",[26,156350,156351,156354,156357,156360,156363],{},[29,156352,156353],{},"会读写文本文件。",[29,156355,156356],{},"会读写 JSON。",[29,156358,156359],{},"会捕获常见异常。",[29,156361,156362],{},"会导入模块和第三方包。",[29,156364,156365],{},"会创建简单包结构。",[19,156367,156368],{},"项目能力：",[26,156370,156371,156374,156377,156380,156383],{},[29,156372,156373],{},"能把代码拆成函数。",[29,156375,156376],{},"能把数据保存到文件。",[29,156378,156379],{},"能处理用户输入错误。",[29,156381,156382],{},"能写一个完整菜单程序。",[29,156384,156385],{},"能用 pyecharts 生成图表。",[14,156387,156389],{"id":156388},"_1211-推荐练习顺序","12.11 推荐练习顺序",[26,156391,156392,156395,156398,156401,156404,156407,156410,156413],{},[29,156393,156394],{},"猜数字游戏。",[29,156396,156397],{},"ATM 菜单程序。",[29,156399,156400],{},"学生成绩统计。",[29,156402,156403],{},"学生管理系统函数版。",[29,156405,156406],{},"学生管理系统文件持久化版。",[29,156408,156409],{},"学生管理系统面向对象版。",[29,156411,156412],{},"销售数据统计。",[29,156414,156415],{},"销售数据可视化。",[14,156417,156419],{"id":156418},"_1212-常见学习误区","12.12 常见学习误区",[26,156421,156422,156425,156428,156431,156434,156437,156440],{},[29,156423,156424],{},"只看视频不敲代码。",[29,156426,156427],{},"一报错就复制错误去搜，不先读报错位置。",[29,156429,156430],{},"变量名随便写，后续自己看不懂。",[29,156432,156433],{},"所有代码都写在一个文件一个函数里。",[29,156435,156436],{},"不保存练习代码，复习时没有材料。",[29,156438,156439],{},"还没掌握列表字典就急着学框架。",[29,156441,156442],{},"不会读官方文档，只依赖教程。",[14,156444,156446],{"id":156445},"_1213-如何读报错","12.13 如何读报错",[19,156448,156449],{},"报错通常从下往上看最后几行。",[19,156451,17167],{},[51,156453,156456],{"className":156454,"code":156455,"language":56,"meta":57},[54],"ValueError: invalid literal for int() with base 10: 'abc'\n",[59,156457,156455],{"__ignoreMap":57},[19,156459,26619],{},[26,156461,156462,156468,156478],{},[29,156463,156464,156465,497],{},"异常类型是 ",[59,156466,156467],{},"ValueError",[29,156469,109235,156470,156473,156474,156477],{},[59,156471,156472],{},"int()"," 无法把 ",[59,156475,156476],{},"'abc'"," 转成整数。",[29,156479,156480],{},"应该检查输入内容或增加异常处理。",[19,156482,156483],{},"再看文件名和行号：",[51,156485,156488],{"className":156486,"code":156487,"language":56,"meta":57},[54],"File \"main.py\", line 10, in \u003Cmodule>\n",[59,156489,156487],{"__ignoreMap":57},[19,156491,156492,156493,156495],{},"表示错误发生在 ",[59,156494,156240],{}," 第 10 行。",[14,156497,156499],{"id":156498},"_1214-后续学习方向","12.14 后续学习方向",[19,156501,156502],{},"Python 基础完成后，可以按兴趣选择方向：",[26,156504,156505,156517,156526,156538,156549,156558,156568],{},[29,156506,156507,156508,2139,156511,2139,156514,497],{},"自动化办公：",[59,156509,156510],{},"openpyxl",[59,156512,156513],{},"python-docx",[59,156515,156516],{},"pdfplumber",[29,156518,156519,156520,2139,156522,2139,156524,497],{},"数据分析：",[59,156521,102611],{},[59,156523,147818],{},[59,156525,147826],{},[29,156527,156528,156529,2139,156532,2139,156535,497],{},"Web 后端：",[59,156530,156531],{},"Flask",[59,156533,156534],{},"FastAPI",[59,156536,156537],{},"Django",[29,156539,156540,156541,2139,156543,2139,156546,497],{},"爬虫：",[59,156542,147803],{},[59,156544,156545],{},"BeautifulSoup",[59,156547,156548],{},"Scrapy",[29,156550,156551,156552,2139,156554,156557],{},"测试开发：",[59,156553,147850],{},[59,156555,156556],{},"selenium","、接口测试。",[29,156559,156560,156561,2139,156563,2139,156565,497],{},"人工智能：",[59,156562,102611],{},[59,156564,147818],{},[59,156566,156567],{},"pytorch",[29,156569,156570,156571,2139,156573,2139,156576,497],{},"运维脚本：",[59,156572,147419],{},[59,156574,156575],{},"subprocess",[59,156577,156578],{},"paramiko",[19,156580,156581],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,156583,156585],{"id":156584},"_1215-结课练习","12.15 结课练习",[26,156587,156588,156591,156594,156597,156600,156603,156606,156609],{},[29,156589,156590],{},"完成函数版学生管理系统。",[29,156592,156593],{},"给学生管理系统增加 JSON 持久化。",[29,156595,156596],{},"给学生管理系统增加异常处理。",[29,156598,156599],{},"把学生管理系统改成面向对象版。",[29,156601,156602],{},"使用 pyecharts 绘制学生成绩柱状图。",[29,156604,156605],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[29,156607,156608],{},"按品类统计销售额并绘制柱状图。",[29,156610,156611],{},"写一份自己的 Python 学习路线图。",[2159,156613,156614],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":57,"searchDepth":167,"depth":167,"links":156616},[156617,156618,156621,156622,156623,156629,156630,156631,156632,156633,156634,156635,156636,156637,156638],{"id":153333,"depth":167,"text":153334},{"id":153383,"depth":167,"text":153384,"children":156619},[156620],{"id":153387,"depth":178,"text":153388},{"id":153426,"depth":167,"text":153427},{"id":154900,"depth":167,"text":154901},{"id":155238,"depth":167,"text":155239,"children":156624},[156625,156626,156627,156628],{"id":155242,"depth":178,"text":155243},{"id":155382,"depth":178,"text":155383},{"id":155472,"depth":178,"text":155473},{"id":155558,"depth":178,"text":155559},{"id":155599,"depth":167,"text":155600},{"id":155792,"depth":167,"text":155793},{"id":156029,"depth":167,"text":156030},{"id":156220,"depth":167,"text":156221},{"id":156262,"depth":167,"text":156263},{"id":156388,"depth":167,"text":156389},{"id":156418,"depth":167,"text":156419},{"id":156445,"depth":167,"text":156446},{"id":156498,"depth":167,"text":156499},{"id":156584,"depth":167,"text":156585},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":153325,"description":25402},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":156645,"title":156646,"body":156647,"description":25402,"extension":2186,"meta":159116,"navigation":541,"path":159117,"seo":159118,"stem":159119,"__hash__":159120},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":156648,"toc":159091},[156649,156652,156656,156659,156662,156682,156685,156708,156711,156714,156736,156739,156761,156765,156768,156808,156811,156932,156936,156939,156979,156982,157006,157009,157013,157016,157030,157063,157066,157101,157104,157127,157130,157163,157166,157168,157174,157249,157252,157258,157275,157315,157319,157322,157368,157370,157408,157411,157446,157449,157484,157487,157519,157522,157541,157545,157549,157662,157664,157739,157743,157789,157792,157818,157827,157831,157834,157897,157905,157933,157937,157977,158042,158046,158049,158088,158091,158136,158139,158200,158204,158231,158234,158262,158265,158269,158273,158338,158341,158379,158382,158414,158418,158517,158521,158524,158597,158600,158648,158652,158658,158698,158701,158748,158751,158800,158804,158806,158820,158822,159003,159007,159034,159054,159061,159065,159082,159088],[10,156650,156646],{"id":156651},"_2-基础语法变量与字符串",[14,156653,156655],{"id":156654},"_21-注释","2.1 注释",[19,156657,156658],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,156660,156661],{},"单行注释：",[51,156663,156665],{"className":439,"code":156664,"language":441,"meta":57,"style":57},"# 这是单行注释\nprint(\"hello\")\n",[59,156666,156667,156672],{"__ignoreMap":57},[79,156668,156669],{"class":81,"line":82},[79,156670,156671],{"class":2313},"# 这是单行注释\n",[79,156673,156674,156676,156678,156680],{"class":81,"line":167},[79,156675,1889],{"class":96},[79,156677,455],{"class":228},[79,156679,7911],{"class":89},[79,156681,850],{"class":228},[19,156683,156684],{},"多行说明常用三引号：",[51,156686,156688],{"className":439,"code":156687,"language":441,"meta":57,"style":57},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[59,156689,156690,156694,156699,156704],{"__ignoreMap":57},[79,156691,156692],{"class":81,"line":82},[79,156693,687],{"class":89},[79,156695,156696],{"class":81,"line":167},[79,156697,156698],{"class":89},"这是多行说明。\n",[79,156700,156701],{"class":81,"line":178},[79,156702,156703],{"class":89},"常用于文件顶部说明、函数说明等。\n",[79,156705,156706],{"class":81,"line":545},[79,156707,687],{"class":89},[19,156709,156710],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,156712,156713],{},"不好：",[51,156715,156717],{"className":439,"code":156716,"language":441,"meta":57,"style":57},"# age 加 1\nage = age + 1\n",[59,156718,156719,156724],{"__ignoreMap":57},[79,156720,156721],{"class":81,"line":82},[79,156722,156723],{"class":2313},"# age 加 1\n",[79,156725,156726,156728,156730,156732,156734],{"class":81,"line":167},[79,156727,148179],{"class":228},[79,156729,239],{"class":448},[79,156731,17739],{"class":228},[79,156733,995],{"class":448},[79,156735,57688],{"class":96},[19,156737,156738],{},"较好：",[51,156740,156742],{"className":439,"code":156741,"language":441,"meta":57,"style":57},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[59,156743,156744,156749],{"__ignoreMap":57},[79,156745,156746],{"class":81,"line":82},[79,156747,156748],{"class":2313},"# 用户过完生日后，年龄增加一岁\n",[79,156750,156751,156753,156755,156757,156759],{"class":81,"line":167},[79,156752,148179],{"class":228},[79,156754,239],{"class":448},[79,156756,17739],{"class":228},[79,156758,995],{"class":448},[79,156760,57688],{"class":96},[14,156762,156764],{"id":156763},"_22-字面量","2.2 字面量",[19,156766,156767],{},"字面量就是代码中直接写出来的数据。",[51,156769,156771],{"className":439,"code":156770,"language":441,"meta":57,"style":57},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[59,156772,156773,156780,156787,156794,156801],{"__ignoreMap":57},[79,156774,156775,156777],{"class":81,"line":82},[79,156776,2555],{"class":96},[79,156778,156779],{"class":2313},"          # 整数\n",[79,156781,156782,156784],{"class":81,"line":167},[79,156783,2304],{"class":96},[79,156785,156786],{"class":2313},"         # 小数\n",[79,156788,156789,156791],{"class":81,"line":178},[79,156790,7911],{"class":89},[79,156792,156793],{"class":2313},"      # 字符串\n",[79,156795,156796,156798],{"class":81,"line":545},[79,156797,33478],{"class":96},[79,156799,156800],{"class":2313},"         # 布尔值\n",[79,156802,156803,156805],{"class":81,"line":550},[79,156804,832],{"class":96},[79,156806,156807],{"class":2313},"         # 空值\n",[19,156809,156810],{},"常见字面量类型：",[347,156812,156813,156823],{},[350,156814,156815],{},[353,156816,156817,156819,156821],{},[356,156818,362],{},[356,156820,29508],{},[356,156822,27888],{},[367,156824,156825,156836,156847,156858,156870,156882,156894,156907,156919],{},[353,156826,156827,156829,156833],{},[372,156828,2262],{},[372,156830,156831],{},[59,156832,2555],{},[372,156834,156835],{},"整数",[353,156837,156838,156840,156844],{},[372,156839,742],{},[372,156841,156842],{},[59,156843,2304],{},[372,156845,156846],{},"浮点数",[353,156848,156849,156851,156855],{},[372,156850,3409],{},[372,156852,156853],{},[59,156854,7911],{},[372,156856,156857],{},"字符串",[353,156859,156860,156862,156868],{},[372,156861,3461],{},[372,156863,156864,2139,156866],{},[59,156865,33478],{},[59,156867,35984],{},[372,156869,68003],{},[353,156871,156872,156875,156879],{},[372,156873,156874],{},"NoneType",[372,156876,156877],{},[59,156878,832],{},[372,156880,156881],{},"空值",[353,156883,156884,156886,156891],{},[372,156885,155703],{},[372,156887,156888],{},[59,156889,156890],{},"[1, 2, 3]",[372,156892,156893],{},"列表",[353,156895,156896,156899,156904],{},[372,156897,156898],{},"tuple",[372,156900,156901],{},[59,156902,156903],{},"(1, 2, 3)",[372,156905,156906],{},"元组",[353,156908,156909,156911,156916],{},[372,156910,116179],{},[372,156912,156913],{},[59,156914,156915],{},"{\"name\": \"张三\"}",[372,156917,156918],{},"字典",[353,156920,156921,156924,156929],{},[372,156922,156923],{},"set",[372,156925,156926],{},[59,156927,156928],{},"{1, 2, 3}",[372,156930,156931],{},"集合",[14,156933,156935],{"id":156934},"_23-变量","2.3 变量",[19,156937,156938],{},"变量是保存数据的名字。",[51,156940,156942],{"className":439,"code":156941,"language":441,"meta":57,"style":57},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[59,156943,156944,156952,156960,156970],{"__ignoreMap":57},[79,156945,156946,156948,156950],{"class":81,"line":82},[79,156947,148169],{"class":228},[79,156949,239],{"class":448},[79,156951,150986],{"class":89},[79,156953,156954,156956,156958],{"class":81,"line":167},[79,156955,148179],{"class":228},[79,156957,239],{"class":448},[79,156959,148184],{"class":96},[79,156961,156962,156965,156967],{"class":81,"line":178},[79,156963,156964],{"class":228},"height ",[79,156966,239],{"class":448},[79,156968,156969],{"class":96}," 1.75\n",[79,156971,156972,156975,156977],{"class":81,"line":545},[79,156973,156974],{"class":228},"is_student ",[79,156976,239],{"class":448},[79,156978,155232],{"class":96},[19,156980,156981],{},"Python 的变量不需要提前声明类型：",[51,156983,156985],{"className":439,"code":156984,"language":441,"meta":57,"style":57},"score = 100\nscore = \"满分\"\n",[59,156986,156987,156997],{"__ignoreMap":57},[79,156988,156989,156992,156994],{"class":81,"line":82},[79,156990,156991],{"class":228},"score ",[79,156993,239],{"class":448},[79,156995,156996],{"class":96}," 100\n",[79,156998,156999,157001,157003],{"class":81,"line":167},[79,157000,156991],{"class":228},[79,157002,239],{"class":448},[79,157004,157005],{"class":89}," \"满分\"\n",[19,157007,157008],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,157010,157012],{"id":157011},"_24-变量命名规则","2.4 变量命名规则",[19,157014,157015],{},"硬性规则：",[26,157017,157018,157021,157024,157027],{},[29,157019,157020],{},"只能由字母、数字、下划线组成。",[29,157022,157023],{},"不能以数字开头。",[29,157025,157026],{},"不能使用 Python 关键字。",[29,157028,157029],{},"区分大小写。",[51,157031,157033],{"className":439,"code":157032,"language":441,"meta":57,"style":57},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[59,157034,157035,157044,157053],{"__ignoreMap":57},[79,157036,157037,157040,157042],{"class":81,"line":82},[79,157038,157039],{"class":228},"user_name ",[79,157041,239],{"class":448},[79,157043,148174],{"class":89},[79,157045,157046,157049,157051],{"class":81,"line":167},[79,157047,157048],{"class":228},"age2 ",[79,157050,239],{"class":448},[79,157052,148184],{"class":96},[79,157054,157055,157058,157060],{"class":81,"line":178},[79,157056,157057],{"class":228},"_token ",[79,157059,239],{"class":448},[79,157061,157062],{"class":89}," \"abc\"\n",[19,157064,157065],{},"错误写法：",[51,157067,157069],{"className":439,"code":157068,"language":441,"meta":57,"style":57},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[59,157070,157071,157080,157092],{"__ignoreMap":57},[79,157072,157073,157076,157078],{"class":81,"line":82},[79,157074,157075],{"class":79391},"2age",[79,157077,556],{"class":448},[79,157079,148184],{"class":96},[79,157081,157082,157084,157086,157088,157090],{"class":81,"line":167},[79,157083,133217],{"class":228},[79,157085,478],{"class":448},[79,157087,148169],{"class":228},[79,157089,239],{"class":448},[79,157091,148174],{"class":89},[79,157093,157094,157096,157098],{"class":81,"line":178},[79,157095,16727],{"class":448},[79,157097,556],{"class":448},[79,157099,157100],{"class":89}," \"一班\"\n",[19,157102,157103],{},"查看关键字：",[51,157105,157107],{"className":439,"code":157106,"language":441,"meta":57,"style":57},"import keyword\n\nprint(keyword.kwlist)\n",[59,157108,157109,157116,157120],{"__ignoreMap":57},[79,157110,157111,157113],{"class":81,"line":82},[79,157112,520],{"class":448},[79,157114,157115],{"class":228}," keyword\n",[79,157117,157118],{"class":81,"line":167},[79,157119,542],{"emptyLinePlaceholder":541},[79,157121,157122,157124],{"class":81,"line":178},[79,157123,1889],{"class":96},[79,157125,157126],{"class":228},"(keyword.kwlist)\n",[19,157128,157129],{},"推荐命名风格：",[51,157131,157133],{"className":439,"code":157132,"language":441,"meta":57,"style":57},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[59,157134,157135,157144,157154],{"__ignoreMap":57},[79,157136,157137,157140,157142],{"class":81,"line":82},[79,157138,157139],{"class":228},"student_name ",[79,157141,239],{"class":448},[79,157143,150986],{"class":89},[79,157145,157146,157149,157151],{"class":81,"line":167},[79,157147,157148],{"class":228},"total_price ",[79,157150,239],{"class":448},[79,157152,157153],{"class":96}," 99.8\n",[79,157155,157156,157159,157161],{"class":81,"line":178},[79,157157,157158],{"class":228},"is_finished ",[79,157160,239],{"class":448},[79,157162,127440],{"class":96},[19,157164,157165],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,157167,52727],{"id":52726},[19,157169,106287,157170,157173],{},[59,157171,157172],{},"type()"," 查看数据类型：",[51,157175,157177],{"className":439,"code":157176,"language":441,"meta":57,"style":57},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[59,157178,157179,157193,157207,157221,157235],{"__ignoreMap":57},[79,157180,157181,157183,157185,157187,157189,157191],{"class":81,"line":82},[79,157182,1889],{"class":96},[79,157184,455],{"class":228},[79,157186,105035],{"class":96},[79,157188,455],{"class":228},[79,157190,2555],{"class":96},[79,157192,1150],{"class":228},[79,157194,157195,157197,157199,157201,157203,157205],{"class":81,"line":167},[79,157196,1889],{"class":96},[79,157198,455],{"class":228},[79,157200,105035],{"class":96},[79,157202,455],{"class":228},[79,157204,2304],{"class":96},[79,157206,1150],{"class":228},[79,157208,157209,157211,157213,157215,157217,157219],{"class":81,"line":178},[79,157210,1889],{"class":96},[79,157212,455],{"class":228},[79,157214,105035],{"class":96},[79,157216,455],{"class":228},[79,157218,7911],{"class":89},[79,157220,1150],{"class":228},[79,157222,157223,157225,157227,157229,157231,157233],{"class":81,"line":545},[79,157224,1889],{"class":96},[79,157226,455],{"class":228},[79,157228,105035],{"class":96},[79,157230,455],{"class":228},[79,157232,33478],{"class":96},[79,157234,1150],{"class":228},[79,157236,157237,157239,157241,157243,157245,157247],{"class":81,"line":550},[79,157238,1889],{"class":96},[79,157240,455],{"class":228},[79,157242,105035],{"class":96},[79,157244,455],{"class":228},[79,157246,832],{"class":96},[79,157248,1150],{"class":228},[19,157250,157251],{},"输出类似：",[51,157253,157256],{"className":157254,"code":157255,"language":56,"meta":57},[54],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[59,157257,157255],{"__ignoreMap":57},[19,157259,11080,157260,109173,157262,157264,157265,157267,157268,23525,157270,157267,157272,157274],{},[59,157261,3461],{},[59,157263,2262],{}," 的子类，",[59,157266,33478],{}," 可以当作 ",[59,157269,775],{},[59,157271,35984],{},[59,157273,759],{},"，但业务代码中不要滥用。",[51,157276,157278],{"className":439,"code":157277,"language":441,"meta":57,"style":57},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[59,157279,157280,157298],{"__ignoreMap":57},[79,157281,157282,157284,157286,157288,157290,157292,157295],{"class":81,"line":82},[79,157283,1889],{"class":96},[79,157285,455],{"class":228},[79,157287,33478],{"class":96},[79,157289,47561],{"class":448},[79,157291,27137],{"class":96},[79,157293,157294],{"class":228},")   ",[79,157296,157297],{"class":2313},"# 2\n",[79,157299,157300,157302,157304,157306,157308,157310,157312],{"class":81,"line":167},[79,157301,1889],{"class":96},[79,157303,455],{"class":228},[79,157305,35984],{"class":96},[79,157307,47561],{"class":448},[79,157309,27137],{"class":96},[79,157311,47803],{"class":228},[79,157313,157314],{"class":2313},"# 1\n",[14,157316,157318],{"id":157317},"_26-类型转换","2.6 类型转换",[19,157320,157321],{},"常用转换函数：",[51,157323,157325],{"className":439,"code":157324,"language":441,"meta":57,"style":57},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[59,157326,157327,157337,157348,157358],{"__ignoreMap":57},[79,157328,157329,157331,157333,157335],{"class":81,"line":82},[79,157330,2262],{"class":96},[79,157332,455],{"class":228},[79,157334,335],{"class":89},[79,157336,850],{"class":228},[79,157338,157339,157341,157343,157346],{"class":81,"line":167},[79,157340,742],{"class":96},[79,157342,455],{"class":228},[79,157344,157345],{"class":89},"\"3.14\"",[79,157347,850],{"class":228},[79,157349,157350,157352,157354,157356],{"class":81,"line":178},[79,157351,3409],{"class":96},[79,157353,455],{"class":228},[79,157355,2555],{"class":96},[79,157357,850],{"class":228},[79,157359,157360,157362,157364,157366],{"class":81,"line":545},[79,157361,3461],{"class":96},[79,157363,455],{"class":228},[79,157365,775],{"class":96},[79,157367,850],{"class":228},[19,157369,17167],{},[51,157371,157373],{"className":439,"code":157372,"language":441,"meta":57,"style":57},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[59,157374,157375,157384,157395],{"__ignoreMap":57},[79,157376,157377,157379,157381],{"class":81,"line":82},[79,157378,148179],{"class":228},[79,157380,239],{"class":448},[79,157382,157383],{"class":89}," \"18\"\n",[79,157385,157386,157388,157390,157392],{"class":81,"line":167},[79,157387,148179],{"class":228},[79,157389,239],{"class":448},[79,157391,4467],{"class":96},[79,157393,157394],{"class":228},"(age)\n",[79,157396,157397,157399,157402,157404,157406],{"class":81,"line":178},[79,157398,1889],{"class":96},[79,157400,157401],{"class":228},"(age ",[79,157403,995],{"class":448},[79,157405,27137],{"class":96},[79,157407,850],{"class":228},[19,157409,157410],{},"输入得到的内容永远是字符串：",[51,157412,157414],{"className":439,"code":157413,"language":441,"meta":57,"style":57},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[59,157415,157416,157432],{"__ignoreMap":57},[79,157417,157418,157421,157423,157425,157427,157430],{"class":81,"line":82},[79,157419,157420],{"class":228},"num ",[79,157422,239],{"class":448},[79,157424,62594],{"class":96},[79,157426,455],{"class":228},[79,157428,157429],{"class":89},"\"请输入数字:\"",[79,157431,850],{"class":228},[79,157433,157434,157436,157438,157440,157443],{"class":81,"line":167},[79,157435,1889],{"class":96},[79,157437,455],{"class":228},[79,157439,105035],{"class":96},[79,157441,157442],{"class":228},"(num))  ",[79,157444,157445],{"class":2313},"# str\n",[19,157447,157448],{},"如果要做数学运算，必须转换：",[51,157450,157452],{"className":439,"code":157451,"language":441,"meta":57,"style":57},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[59,157453,157454,157472],{"__ignoreMap":57},[79,157455,157456,157458,157460,157462,157464,157466,157468,157470],{"class":81,"line":82},[79,157457,157420],{"class":228},[79,157459,239],{"class":448},[79,157461,4467],{"class":96},[79,157463,455],{"class":228},[79,157465,55812],{"class":96},[79,157467,455],{"class":228},[79,157469,157429],{"class":89},[79,157471,1150],{"class":228},[79,157473,157474,157476,157478,157480,157482],{"class":81,"line":167},[79,157475,1889],{"class":96},[79,157477,47614],{"class":228},[79,157479,995],{"class":448},[79,157481,4123],{"class":96},[79,157483,850],{"class":228},[19,157485,157486],{},"常见错误：",[51,157488,157490],{"className":439,"code":157489,"language":441,"meta":57,"style":57},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[59,157491,157492,157505],{"__ignoreMap":57},[79,157493,157494,157496,157498,157500,157502],{"class":81,"line":82},[79,157495,2262],{"class":96},[79,157497,455],{"class":228},[79,157499,157345],{"class":89},[79,157501,157294],{"class":228},[79,157503,157504],{"class":2313},"# 错误\n",[79,157506,157507,157509,157511,157514,157517],{"class":81,"line":167},[79,157508,2262],{"class":96},[79,157510,455],{"class":228},[79,157512,157513],{"class":89},"\"abc\"",[79,157515,157516],{"class":228},")    ",[79,157518,157504],{"class":2313},[19,157520,157521],{},"正确写法：",[51,157523,157525],{"className":439,"code":157524,"language":441,"meta":57,"style":57},"num = float(\"3.14\")\n",[59,157526,157527],{"__ignoreMap":57},[79,157528,157529,157531,157533,157535,157537,157539],{"class":81,"line":82},[79,157530,157420],{"class":228},[79,157532,239],{"class":448},[79,157534,452],{"class":96},[79,157536,455],{"class":228},[79,157538,157345],{"class":89},[79,157540,850],{"class":228},[14,157542,157544],{"id":157543},"_27-运算符","2.7 运算符",[339,157546,157548],{"id":157547},"_271-算术运算符","2.7.1 算术运算符",[347,157550,157551,157562],{},[350,157552,157553],{},[353,157554,157555,157558,157560],{},[356,157556,157557],{},"运算符",[356,157559,27888],{},[356,157561,29508],{},[367,157563,157564,157578,157592,157606,157620,157634,157648],{},[353,157565,157566,157570,157573],{},[372,157567,157568],{},[59,157569,995],{},[372,157571,157572],{},"加法",[372,157574,157575],{},[59,157576,157577],{},"1 + 2",[353,157579,157580,157584,157587],{},[372,157581,157582],{},[59,157583,478],{},[372,157585,157586],{},"减法",[372,157588,157589],{},[59,157590,157591],{},"5 - 3",[353,157593,157594,157598,157601],{},[372,157595,157596],{},[59,157597,473],{},[372,157599,157600],{},"乘法",[372,157602,157603],{},[59,157604,157605],{},"2 * 3",[353,157607,157608,157612,157615],{},[372,157609,157610],{},[59,157611,2824],{},[372,157613,157614],{},"除法，结果是浮点数",[372,157616,157617],{},[59,157618,157619],{},"5 \u002F 2",[353,157621,157622,157626,157629],{},[372,157623,157624],{},[59,157625,35326],{},[372,157627,157628],{},"整除",[372,157630,157631],{},[59,157632,157633],{},"5 \u002F\u002F 2",[353,157635,157636,157640,157643],{},[372,157637,157638],{},[59,157639,1094],{},[372,157641,157642],{},"取余",[372,157644,157645],{},[59,157646,157647],{},"5 % 2",[353,157649,157650,157654,157657],{},[372,157651,157652],{},[59,157653,12696],{},[372,157655,157656],{},"幂运算",[372,157658,157659],{},[59,157660,157661],{},"2 ** 3",[19,157663,17167],{},[51,157665,157667],{"className":439,"code":157666,"language":441,"meta":57,"style":57},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[59,157668,157669,157687,157704,157721],{"__ignoreMap":57},[79,157670,157671,157673,157675,157677,157680,157682,157684],{"class":81,"line":82},[79,157672,1889],{"class":96},[79,157674,455],{"class":228},[79,157676,2563],{"class":96},[79,157678,157679],{"class":448}," \u002F",[79,157681,16788],{"class":96},[79,157683,157294],{"class":228},[79,157685,157686],{"class":2313},"# 2.5\n",[79,157688,157689,157691,157693,157695,157698,157700,157702],{"class":81,"line":167},[79,157690,1889],{"class":96},[79,157692,455],{"class":228},[79,157694,2563],{"class":96},[79,157696,157697],{"class":448}," \u002F\u002F",[79,157699,16788],{"class":96},[79,157701,47803],{"class":228},[79,157703,157297],{"class":2313},[79,157705,157706,157708,157710,157712,157715,157717,157719],{"class":81,"line":178},[79,157707,1889],{"class":96},[79,157709,455],{"class":228},[79,157711,2563],{"class":96},[79,157713,157714],{"class":448}," %",[79,157716,16788],{"class":96},[79,157718,157294],{"class":228},[79,157720,157314],{"class":2313},[79,157722,157723,157725,157727,157729,157732,157734,157736],{"class":81,"line":545},[79,157724,1889],{"class":96},[79,157726,455],{"class":228},[79,157728,2331],{"class":96},[79,157730,157731],{"class":448}," **",[79,157733,80058],{"class":96},[79,157735,47803],{"class":228},[79,157737,157738],{"class":2313},"# 8\n",[339,157740,157742],{"id":157741},"_272-赋值运算符","2.7.2 赋值运算符",[51,157744,157746],{"className":439,"code":157745,"language":441,"meta":57,"style":57},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[59,157747,157748,157756,157764,157772,157780],{"__ignoreMap":57},[79,157749,157750,157752,157754],{"class":81,"line":82},[79,157751,157420],{"class":228},[79,157753,239],{"class":448},[79,157755,60417],{"class":96},[79,157757,157758,157760,157762],{"class":81,"line":167},[79,157759,157420],{"class":228},[79,157761,1075],{"class":448},[79,157763,56416],{"class":96},[79,157765,157766,157768,157770],{"class":81,"line":178},[79,157767,157420],{"class":228},[79,157769,151885],{"class":448},[79,157771,49718],{"class":96},[79,157773,157774,157776,157778],{"class":81,"line":545},[79,157775,157420],{"class":228},[79,157777,138781],{"class":448},[79,157779,121669],{"class":96},[79,157781,157782,157784,157787],{"class":81,"line":550},[79,157783,157420],{"class":228},[79,157785,157786],{"class":448},"\u002F=",[79,157788,49718],{"class":96},[19,157790,157791],{},"等价关系：",[51,157793,157795],{"className":439,"code":157794,"language":441,"meta":57,"style":57},"num += 1\nnum = num + 1\n",[59,157796,157797,157805],{"__ignoreMap":57},[79,157798,157799,157801,157803],{"class":81,"line":82},[79,157800,157420],{"class":228},[79,157802,1075],{"class":448},[79,157804,57688],{"class":96},[79,157806,157807,157809,157811,157814,157816],{"class":81,"line":167},[79,157808,157420],{"class":228},[79,157810,239],{"class":448},[79,157812,157813],{"class":228}," num ",[79,157815,995],{"class":448},[79,157817,57688],{"class":96},[19,157819,157820,157821,1748,157824,497],{},"Python 没有 ",[59,157822,157823],{},"num++",[59,157825,157826],{},"num--",[339,157828,157830],{"id":157829},"_273-比较运算符","2.7.3 比较运算符",[19,157832,157833],{},"比较运算结果是布尔值。",[51,157835,157837],{"className":439,"code":157836,"language":441,"meta":57,"style":57},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[59,157838,157839,157853,157868,157882],{"__ignoreMap":57},[79,157840,157841,157843,157845,157847,157849,157851],{"class":81,"line":82},[79,157842,1889],{"class":96},[79,157844,455],{"class":228},[79,157846,2689],{"class":96},[79,157848,28240],{"class":448},[79,157850,4233],{"class":96},[79,157852,850],{"class":228},[79,157854,157855,157857,157859,157861,157864,157866],{"class":81,"line":167},[79,157856,1889],{"class":96},[79,157858,455],{"class":228},[79,157860,2689],{"class":96},[79,157862,157863],{"class":448}," >=",[79,157865,4123],{"class":96},[79,157867,850],{"class":228},[79,157869,157870,157872,157874,157876,157878,157880],{"class":81,"line":178},[79,157871,1889],{"class":96},[79,157873,455],{"class":228},[79,157875,2689],{"class":96},[79,157877,1100],{"class":448},[79,157879,4168],{"class":96},[79,157881,850],{"class":228},[79,157883,157884,157886,157888,157890,157893,157895],{"class":81,"line":545},[79,157885,1889],{"class":96},[79,157887,455],{"class":228},[79,157889,2689],{"class":96},[79,157891,157892],{"class":448}," !=",[79,157894,4168],{"class":96},[79,157896,850],{"class":228},[19,157898,157899,157900,157902,157903,497],{},"注意：判断相等用 ",[59,157901,5025],{},"，赋值用 ",[59,157904,239],{},[51,157906,157908],{"className":439,"code":157907,"language":441,"meta":57,"style":57},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[59,157909,157910,157922],{"__ignoreMap":57},[79,157911,157912,157914,157916,157919],{"class":81,"line":82},[79,157913,148179],{"class":228},[79,157915,239],{"class":448},[79,157917,157918],{"class":96}," 18",[79,157920,157921],{"class":2313},"       # 赋值\n",[79,157923,157924,157926,157928,157930],{"class":81,"line":167},[79,157925,148179],{"class":228},[79,157927,5025],{"class":448},[79,157929,157918],{"class":96},[79,157931,157932],{"class":2313},"      # 判断是否相等\n",[339,157934,157936],{"id":157935},"_274-逻辑运算符","2.7.4 逻辑运算符",[347,157938,157939,157947],{},[350,157940,157941],{},[353,157942,157943,157945],{},[356,157944,157557],{},[356,157946,27888],{},[367,157948,157949,157958,157967],{},[353,157950,157951,157955],{},[372,157952,157953],{},[59,157954,32471],{},[372,157956,157957],{},"并且",[353,157959,157960,157964],{},[372,157961,157962],{},[59,157963,116723],{},[372,157965,157966],{},"或者",[353,157968,157969,157974],{},[372,157970,157971],{},[59,157972,157973],{},"not",[372,157975,157976],{},"取反",[51,157978,157980],{"className":439,"code":157979,"language":441,"meta":57,"style":57},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[59,157981,157982,157990,157999,158003,158018,158032],{"__ignoreMap":57},[79,157983,157984,157986,157988],{"class":81,"line":82},[79,157985,148179],{"class":228},[79,157987,239],{"class":448},[79,157989,90052],{"class":96},[79,157991,157992,157995,157997],{"class":81,"line":167},[79,157993,157994],{"class":228},"has_ticket ",[79,157996,239],{"class":448},[79,157998,155232],{"class":96},[79,158000,158001],{"class":81,"line":178},[79,158002,542],{"emptyLinePlaceholder":541},[79,158004,158005,158007,158009,158011,158013,158015],{"class":81,"line":545},[79,158006,1889],{"class":96},[79,158008,157401],{"class":228},[79,158010,3805],{"class":448},[79,158012,157918],{"class":96},[79,158014,122062],{"class":448},[79,158016,158017],{"class":228}," has_ticket)\n",[79,158019,158020,158022,158024,158026,158028,158030],{"class":81,"line":550},[79,158021,1889],{"class":96},[79,158023,157401],{"class":228},[79,158025,229],{"class":448},[79,158027,157918],{"class":96},[79,158029,115834],{"class":448},[79,158031,158017],{"class":228},[79,158033,158034,158036,158038,158040],{"class":81,"line":562},[79,158035,1889],{"class":96},[79,158037,455],{"class":228},[79,158039,157973],{"class":448},[79,158041,158017],{"class":228},[14,158043,158045],{"id":158044},"_28-字符串定义","2.8 字符串定义",[19,158047,158048],{},"三种常见写法：",[51,158050,158052],{"className":439,"code":158051,"language":441,"meta":57,"style":57},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[59,158053,158054,158064,158073,158083],{"__ignoreMap":57},[79,158055,158056,158059,158061],{"class":81,"line":82},[79,158057,158058],{"class":228},"name1 ",[79,158060,239],{"class":448},[79,158062,158063],{"class":89}," '小明'\n",[79,158065,158066,158069,158071],{"class":81,"line":167},[79,158067,158068],{"class":228},"name2 ",[79,158070,239],{"class":448},[79,158072,150986],{"class":89},[79,158074,158075,158078,158080],{"class":81,"line":178},[79,158076,158077],{"class":228},"text ",[79,158079,239],{"class":448},[79,158081,158082],{"class":89}," \"\"\"这是多行字符串\n",[79,158084,158085],{"class":81,"line":545},[79,158086,158087],{"class":89},"可以换行\"\"\"\n",[19,158089,158090],{},"字符串中包含引号：",[51,158092,158094],{"className":439,"code":158093,"language":441,"meta":57,"style":57},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[59,158095,158096,158106,158116],{"__ignoreMap":57},[79,158097,158098,158101,158103],{"class":81,"line":82},[79,158099,158100],{"class":228},"msg ",[79,158102,239],{"class":448},[79,158104,158105],{"class":89}," \"他说:'你好'\"\n",[79,158107,158108,158111,158113],{"class":81,"line":167},[79,158109,158110],{"class":228},"msg2 ",[79,158112,239],{"class":448},[79,158114,158115],{"class":89}," '他说:\"你好\"'\n",[79,158117,158118,158121,158123,158126,158129,158132,158134],{"class":81,"line":178},[79,158119,158120],{"class":228},"msg3 ",[79,158122,239],{"class":448},[79,158124,158125],{"class":89}," \"他说:",[79,158127,158128],{"class":96},"\\\"",[79,158130,158131],{"class":89},"你好",[79,158133,158128],{"class":96},[79,158135,27152],{"class":89},[19,158137,158138],{},"常见转义字符：",[347,158140,158141,158150],{},[350,158142,158143],{},[353,158144,158145,158148],{},[356,158146,158147],{},"写法",[356,158149,102683],{},[367,158151,158152,158162,158171,158181,158190],{},[353,158153,158154,158159],{},[372,158155,158156],{},[59,158157,158158],{},"\\n",[372,158160,158161],{},"换行",[353,158163,158164,158168],{},[372,158165,158166],{},[59,158167,3340],{},[372,158169,158170],{},"制表符",[353,158172,158173,158178],{},[372,158174,158175],{},[59,158176,158177],{},"\\\\",[372,158179,158180],{},"反斜杠",[353,158182,158183,158187],{},[372,158184,158185],{},[59,158186,158128],{},[372,158188,158189],{},"双引号",[353,158191,158192,158197],{},[372,158193,158194],{},[59,158195,158196],{},"\\'",[372,158198,158199],{},"单引号",[14,158201,158203],{"id":158202},"_29-字符串拼接","2.9 字符串拼接",[51,158205,158207],{"className":439,"code":158206,"language":441,"meta":57,"style":57},"name = \"小明\"\nprint(\"你好，\" + name)\n",[59,158208,158209,158217],{"__ignoreMap":57},[79,158210,158211,158213,158215],{"class":81,"line":82},[79,158212,148169],{"class":228},[79,158214,239],{"class":448},[79,158216,150986],{"class":89},[79,158218,158219,158221,158223,158226,158228],{"class":81,"line":167},[79,158220,1889],{"class":96},[79,158222,455],{"class":228},[79,158224,158225],{"class":89},"\"你好，\"",[79,158227,47561],{"class":448},[79,158229,158230],{"class":228}," name)\n",[19,158232,158233],{},"字符串只能和字符串拼接：",[51,158235,158237],{"className":439,"code":158236,"language":441,"meta":57,"style":57},"age = 18\nprint(\"年龄:\" + str(age))\n",[59,158238,158239,158247],{"__ignoreMap":57},[79,158240,158241,158243,158245],{"class":81,"line":82},[79,158242,148179],{"class":228},[79,158244,239],{"class":448},[79,158246,148184],{"class":96},[79,158248,158249,158251,158253,158255,158257,158259],{"class":81,"line":167},[79,158250,1889],{"class":96},[79,158252,455],{"class":228},[79,158254,148150],{"class":89},[79,158256,47561],{"class":448},[79,158258,75907],{"class":96},[79,158260,158261],{"class":228},"(age))\n",[19,158263,158264],{},"更推荐使用格式化字符串。",[14,158266,158268],{"id":158267},"_210-字符串格式化","2.10 字符串格式化",[339,158270,158272],{"id":158271},"_2101-百分号格式化","2.10.1 百分号格式化",[51,158274,158276],{"className":439,"code":158275,"language":441,"meta":57,"style":57},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[59,158277,158278,158286,158294,158303,158307],{"__ignoreMap":57},[79,158279,158280,158282,158284],{"class":81,"line":82},[79,158281,148169],{"class":228},[79,158283,239],{"class":448},[79,158285,150986],{"class":89},[79,158287,158288,158290,158292],{"class":81,"line":167},[79,158289,148179],{"class":228},[79,158291,239],{"class":448},[79,158293,148184],{"class":96},[79,158295,158296,158298,158300],{"class":81,"line":178},[79,158297,156991],{"class":228},[79,158299,239],{"class":448},[79,158301,158302],{"class":96}," 95.5\n",[79,158304,158305],{"class":81,"line":545},[79,158306,542],{"emptyLinePlaceholder":541},[79,158308,158309,158311,158313,158316,158319,158322,158325,158328,158331,158333,158335],{"class":81,"line":550},[79,158310,1889],{"class":96},[79,158312,455],{"class":228},[79,158314,158315],{"class":89},"\"姓名:",[79,158317,158318],{"class":96},"%s",[79,158320,158321],{"class":89}," 年龄:",[79,158323,158324],{"class":96},"%d",[79,158326,158327],{"class":89}," 分数:",[79,158329,158330],{"class":96},"%.1f",[79,158332,2495],{"class":89},[79,158334,157714],{"class":448},[79,158336,158337],{"class":228}," (name, age, score))\n",[19,158339,158340],{},"常用占位符：",[347,158342,158343,158352],{},[350,158344,158345],{},[353,158346,158347,158350],{},[356,158348,158349],{},"占位符",[356,158351,27888],{},[367,158353,158354,158362,158370],{},[353,158355,158356,158360],{},[372,158357,158358],{},[59,158359,158318],{},[372,158361,156857],{},[353,158363,158364,158368],{},[372,158365,158366],{},[59,158367,158324],{},[372,158369,156835],{},[353,158371,158372,158377],{},[372,158373,158374],{},[59,158375,158376],{},"%f",[372,158378,156846],{},[19,158380,158381],{},"精度控制：",[51,158383,158385],{"className":439,"code":158384,"language":441,"meta":57,"style":57},"price = 12.3456\nprint(\"%.2f\" % price)\n",[59,158386,158387,158396],{"__ignoreMap":57},[79,158388,158389,158391,158393],{"class":81,"line":82},[79,158390,148314],{"class":228},[79,158392,239],{"class":448},[79,158394,158395],{"class":96}," 12.3456\n",[79,158397,158398,158400,158402,158404,158407,158409,158411],{"class":81,"line":167},[79,158399,1889],{"class":96},[79,158401,455],{"class":228},[79,158403,2495],{"class":89},[79,158405,158406],{"class":96},"%.2f",[79,158408,2495],{"class":89},[79,158410,157714],{"class":448},[79,158412,158413],{"class":228}," price)\n",[339,158415,158417],{"id":158416},"_2102-format方法","2.10.2 format方法",[51,158419,158421],{"className":439,"code":158420,"language":441,"meta":57,"style":57},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[59,158422,158423,158431,158439,158443,158462,158482],{"__ignoreMap":57},[79,158424,158425,158427,158429],{"class":81,"line":82},[79,158426,148169],{"class":228},[79,158428,239],{"class":448},[79,158430,150986],{"class":89},[79,158432,158433,158435,158437],{"class":81,"line":167},[79,158434,148179],{"class":228},[79,158436,239],{"class":448},[79,158438,148184],{"class":96},[79,158440,158441],{"class":81,"line":178},[79,158442,542],{"emptyLinePlaceholder":541},[79,158444,158445,158447,158449,158451,158453,158455,158457,158459],{"class":81,"line":545},[79,158446,1889],{"class":96},[79,158448,455],{"class":228},[79,158450,158315],{"class":89},[79,158452,34457],{"class":96},[79,158454,158321],{"class":89},[79,158456,34457],{"class":96},[79,158458,2495],{"class":89},[79,158460,158461],{"class":228},".format(name, age))\n",[79,158463,158464,158466,158468,158470,158473,158475,158478,158480],{"class":81,"line":550},[79,158465,1889],{"class":96},[79,158467,455],{"class":228},[79,158469,158315],{"class":89},[79,158471,158472],{"class":96},"{0}",[79,158474,158321],{"class":89},[79,158476,158477],{"class":96},"{1}",[79,158479,2495],{"class":89},[79,158481,158461],{"class":228},[79,158483,158484,158486,158488,158490,158493,158495,158498,158500,158503,158505,158507,158510,158512,158514],{"class":81,"line":562},[79,158485,1889],{"class":96},[79,158487,455],{"class":228},[79,158489,158315],{"class":89},[79,158491,158492],{"class":96},"{name}",[79,158494,158321],{"class":89},[79,158496,158497],{"class":96},"{age}",[79,158499,2495],{"class":89},[79,158501,158502],{"class":228},".format(",[79,158504,81798],{"class":7284},[79,158506,239],{"class":448},[79,158508,158509],{"class":228},"name, ",[79,158511,72209],{"class":7284},[79,158513,239],{"class":448},[79,158515,158516],{"class":228},"age))\n",[339,158518,158520],{"id":158519},"_2103-f-string","2.10.3 f-string",[19,158522,158523],{},"推荐写法：",[51,158525,158527],{"className":439,"code":158526,"language":441,"meta":57,"style":57},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[59,158528,158529,158537,158545,158553,158557],{"__ignoreMap":57},[79,158530,158531,158533,158535],{"class":81,"line":82},[79,158532,148169],{"class":228},[79,158534,239],{"class":448},[79,158536,150986],{"class":89},[79,158538,158539,158541,158543],{"class":81,"line":167},[79,158540,148179],{"class":228},[79,158542,239],{"class":448},[79,158544,148184],{"class":96},[79,158546,158547,158549,158551],{"class":81,"line":178},[79,158548,156991],{"class":228},[79,158550,239],{"class":448},[79,158552,158302],{"class":96},[79,158554,158555],{"class":81,"line":545},[79,158556,542],{"emptyLinePlaceholder":541},[79,158558,158559,158561,158563,158565,158567,158569,158571,158573,158575,158577,158579,158581,158583,158585,158588,158591,158593,158595],{"class":81,"line":550},[79,158560,1889],{"class":96},[79,158562,455],{"class":228},[79,158564,2307],{"class":448},[79,158566,158315],{"class":89},[79,158568,3136],{"class":96},[79,158570,81798],{"class":228},[79,158572,3185],{"class":96},[79,158574,158321],{"class":89},[79,158576,3136],{"class":96},[79,158578,72209],{"class":228},[79,158580,3185],{"class":96},[79,158582,158327],{"class":89},[79,158584,3136],{"class":96},[79,158586,158587],{"class":228},"score",[79,158589,158590],{"class":448},":.1f",[79,158592,3185],{"class":96},[79,158594,2495],{"class":89},[79,158596,850],{"class":228},[19,158598,158599],{},"表达式也可以放进去：",[51,158601,158603],{"className":439,"code":158602,"language":441,"meta":57,"style":57},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[59,158604,158605,158613,158621],{"__ignoreMap":57},[79,158606,158607,158609,158611],{"class":81,"line":82},[79,158608,148314],{"class":228},[79,158610,239],{"class":448},[79,158612,148319],{"class":96},[79,158614,158615,158617,158619],{"class":81,"line":167},[79,158616,148324],{"class":228},[79,158618,239],{"class":448},[79,158620,56416],{"class":96},[79,158622,158623,158625,158627,158629,158632,158634,158636,158638,158641,158643,158646],{"class":81,"line":178},[79,158624,1889],{"class":96},[79,158626,455],{"class":228},[79,158628,2307],{"class":448},[79,158630,158631],{"class":89},"\"总价:",[79,158633,3136],{"class":96},[79,158635,148314],{"class":228},[79,158637,473],{"class":448},[79,158639,158640],{"class":228}," count",[79,158642,3185],{"class":96},[79,158644,158645],{"class":89},"元\"",[79,158647,850],{"class":228},[14,158649,158651],{"id":158650},"_211-input输入","2.11 input输入",[19,158653,158654,158657],{},[59,158655,158656],{},"input()"," 会暂停程序，等待用户输入。",[51,158659,158661],{"className":439,"code":158660,"language":441,"meta":57,"style":57},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[59,158662,158663,158677],{"__ignoreMap":57},[79,158664,158665,158667,158669,158671,158673,158675],{"class":81,"line":82},[79,158666,148169],{"class":228},[79,158668,239],{"class":448},[79,158670,62594],{"class":96},[79,158672,455],{"class":228},[79,158674,154012],{"class":89},[79,158676,850],{"class":228},[79,158678,158679,158681,158683,158685,158688,158690,158692,158694,158696],{"class":81,"line":167},[79,158680,1889],{"class":96},[79,158682,455],{"class":228},[79,158684,2307],{"class":448},[79,158686,158687],{"class":89},"\"你好，",[79,158689,3136],{"class":96},[79,158691,81798],{"class":228},[79,158693,3185],{"class":96},[79,158695,2495],{"class":89},[79,158697,850],{"class":228},[19,158699,158700],{},"输入整数：",[51,158702,158704],{"className":439,"code":158703,"language":441,"meta":57,"style":57},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[59,158705,158706,158724],{"__ignoreMap":57},[79,158707,158708,158710,158712,158714,158716,158718,158720,158722],{"class":81,"line":82},[79,158709,148179],{"class":228},[79,158711,239],{"class":448},[79,158713,4467],{"class":96},[79,158715,455],{"class":228},[79,158717,55812],{"class":96},[79,158719,455],{"class":228},[79,158721,154027],{"class":89},[79,158723,1150],{"class":228},[79,158725,158726,158728,158730,158732,158735,158737,158739,158741,158744,158746],{"class":81,"line":167},[79,158727,1889],{"class":96},[79,158729,455],{"class":228},[79,158731,2307],{"class":448},[79,158733,158734],{"class":89},"\"明年你",[79,158736,3136],{"class":96},[79,158738,148179],{"class":228},[79,158740,995],{"class":448},[79,158742,158743],{"class":96}," 1}",[79,158745,151037],{"class":89},[79,158747,850],{"class":228},[19,158749,158750],{},"输入小数：",[51,158752,158754],{"className":439,"code":158753,"language":441,"meta":57,"style":57},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[59,158755,158756,158775],{"__ignoreMap":57},[79,158757,158758,158760,158762,158764,158766,158768,158770,158773],{"class":81,"line":82},[79,158759,156964],{"class":228},[79,158761,239],{"class":448},[79,158763,452],{"class":96},[79,158765,455],{"class":228},[79,158767,55812],{"class":96},[79,158769,455],{"class":228},[79,158771,158772],{"class":89},"\"请输入身高:\"",[79,158774,1150],{"class":228},[79,158776,158777,158779,158781,158783,158786,158788,158790,158793,158795,158798],{"class":81,"line":167},[79,158778,1889],{"class":96},[79,158780,455],{"class":228},[79,158782,2307],{"class":448},[79,158784,158785],{"class":89},"\"身高:",[79,158787,3136],{"class":96},[79,158789,27001],{"class":228},[79,158791,158792],{"class":448},":.2f",[79,158794,3185],{"class":96},[79,158796,158797],{"class":89},"米\"",[79,158799,850],{"class":228},[14,158801,158803],{"id":158802},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,158805,124925],{},[26,158807,158808,158811,158814,158817],{},[29,158809,158810],{},"输入商品单价。",[29,158812,158813],{},"输入购买数量。",[29,158815,158816],{},"输入折扣，例如 0.8 表示八折。",[29,158818,158819],{},"输出最终金额，保留两位小数。",[19,158821,12070],{},[51,158823,158825],{"className":439,"code":158824,"language":441,"meta":57,"style":57},"price = float(input(\"请输入商品单价:\"))\ncount = int(input(\"请输入购买数量:\"))\ndiscount = float(input(\"请输入折扣:\"))\n\ntotal = price * count * discount\n\nprint(f\"商品单价:{price:.2f}\")\nprint(f\"购买数量:{count}\")\nprint(f\"折扣:{discount}\")\nprint(f\"应付金额:{total:.2f}元\")\n",[59,158826,158827,158846,158865,158885,158889,158909,158913,158936,158957,158979],{"__ignoreMap":57},[79,158828,158829,158831,158833,158835,158837,158839,158841,158844],{"class":81,"line":82},[79,158830,148314],{"class":228},[79,158832,239],{"class":448},[79,158834,452],{"class":96},[79,158836,455],{"class":228},[79,158838,55812],{"class":96},[79,158840,455],{"class":228},[79,158842,158843],{"class":89},"\"请输入商品单价:\"",[79,158845,1150],{"class":228},[79,158847,158848,158850,158852,158854,158856,158858,158860,158863],{"class":81,"line":167},[79,158849,148324],{"class":228},[79,158851,239],{"class":448},[79,158853,4467],{"class":96},[79,158855,455],{"class":228},[79,158857,55812],{"class":96},[79,158859,455],{"class":228},[79,158861,158862],{"class":89},"\"请输入购买数量:\"",[79,158864,1150],{"class":228},[79,158866,158867,158870,158872,158874,158876,158878,158880,158883],{"class":81,"line":178},[79,158868,158869],{"class":228},"discount ",[79,158871,239],{"class":448},[79,158873,452],{"class":96},[79,158875,455],{"class":228},[79,158877,55812],{"class":96},[79,158879,455],{"class":228},[79,158881,158882],{"class":89},"\"请输入折扣:\"",[79,158884,1150],{"class":228},[79,158886,158887],{"class":81,"line":545},[79,158888,542],{"emptyLinePlaceholder":541},[79,158890,158891,158894,158896,158899,158901,158904,158906],{"class":81,"line":550},[79,158892,158893],{"class":228},"total ",[79,158895,239],{"class":448},[79,158897,158898],{"class":228}," price ",[79,158900,473],{"class":448},[79,158902,158903],{"class":228}," count ",[79,158905,473],{"class":448},[79,158907,158908],{"class":228}," discount\n",[79,158910,158911],{"class":81,"line":562},[79,158912,542],{"emptyLinePlaceholder":541},[79,158914,158915,158917,158919,158921,158924,158926,158928,158930,158932,158934],{"class":81,"line":568},[79,158916,1889],{"class":96},[79,158918,455],{"class":228},[79,158920,2307],{"class":448},[79,158922,158923],{"class":89},"\"商品单价:",[79,158925,3136],{"class":96},[79,158927,81803],{"class":228},[79,158929,158792],{"class":448},[79,158931,3185],{"class":96},[79,158933,2495],{"class":89},[79,158935,850],{"class":228},[79,158937,158938,158940,158942,158944,158947,158949,158951,158953,158955],{"class":81,"line":574},[79,158939,1889],{"class":96},[79,158941,455],{"class":228},[79,158943,2307],{"class":448},[79,158945,158946],{"class":89},"\"购买数量:",[79,158948,3136],{"class":96},[79,158950,86421],{"class":228},[79,158952,3185],{"class":96},[79,158954,2495],{"class":89},[79,158956,850],{"class":228},[79,158958,158959,158961,158963,158965,158968,158970,158973,158975,158977],{"class":81,"line":579},[79,158960,1889],{"class":96},[79,158962,455],{"class":228},[79,158964,2307],{"class":448},[79,158966,158967],{"class":89},"\"折扣:",[79,158969,3136],{"class":96},[79,158971,158972],{"class":228},"discount",[79,158974,3185],{"class":96},[79,158976,2495],{"class":89},[79,158978,850],{"class":228},[79,158980,158981,158983,158985,158987,158990,158992,158995,158997,158999,159001],{"class":81,"line":585},[79,158982,1889],{"class":96},[79,158984,455],{"class":228},[79,158986,2307],{"class":448},[79,158988,158989],{"class":89},"\"应付金额:",[79,158991,3136],{"class":96},[79,158993,158994],{"class":228},"total",[79,158996,158792],{"class":448},[79,158998,3185],{"class":96},[79,159000,158645],{"class":89},[79,159002,850],{"class":228},[14,159004,159006],{"id":159005},"_213-易错点","2.13 易错点",[26,159008,159009,159014,159020,159028,159031],{},[29,159010,159011,159013],{},[59,159012,158656],{}," 的结果是字符串，做运算前要转换。",[29,159015,159016,159017,497],{},"字符串拼接时，数字要先 ",[59,159018,159019],{},"str()",[29,159021,159022,159024,159025,159027],{},[59,159023,239],{}," 是赋值，",[59,159026,5025],{}," 是比较。",[29,159029,159030],{},"Python 没有自增自减运算符。",[29,159032,159033],{},"浮点数计算可能有精度误差：",[51,159035,159037],{"className":439,"code":159036,"language":441,"meta":57,"style":57},"print(0.1 + 0.2)\n",[59,159038,159039],{"__ignoreMap":57},[79,159040,159041,159043,159045,159047,159049,159052],{"class":81,"line":82},[79,159042,1889],{"class":96},[79,159044,455],{"class":228},[79,159046,88197],{"class":96},[79,159048,47561],{"class":448},[79,159050,159051],{"class":96}," 0.2",[79,159053,850],{"class":228},[19,159055,159056,159057,159060],{},"金额计算如果要求严格，可以后续学习 ",[59,159058,159059],{},"decimal"," 模块。",[14,159062,159064],{"id":159063},"_214-本章练习","2.14 本章练习",[26,159066,159067,159070,159073,159076,159079],{},[29,159068,159069],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[29,159071,159072],{},"输入圆的半径，计算面积，保留两位小数。",[29,159074,159075],{},"输入工资和奖金，计算总收入。",[29,159077,159078],{},"输入摄氏温度，转换为华氏温度。",[29,159080,159081],{},"写一个 BMI 计算程序：",[51,159083,159086],{"className":159084,"code":159085,"language":56,"meta":57},[54],"BMI = 体重kg \u002F 身高m ** 2\n",[59,159087,159085],{"__ignoreMap":57},[2159,159089,159090],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":57,"searchDepth":167,"depth":167,"links":159092},[159093,159094,159095,159096,159097,159098,159099,159105,159106,159107,159112,159113,159114,159115],{"id":156654,"depth":167,"text":156655},{"id":156763,"depth":167,"text":156764},{"id":156934,"depth":167,"text":156935},{"id":157011,"depth":167,"text":157012},{"id":52726,"depth":167,"text":52727},{"id":157317,"depth":167,"text":157318},{"id":157543,"depth":167,"text":157544,"children":159100},[159101,159102,159103,159104],{"id":157547,"depth":178,"text":157548},{"id":157741,"depth":178,"text":157742},{"id":157829,"depth":178,"text":157830},{"id":157935,"depth":178,"text":157936},{"id":158044,"depth":167,"text":158045},{"id":158202,"depth":167,"text":158203},{"id":158267,"depth":167,"text":158268,"children":159108},[159109,159110,159111],{"id":158271,"depth":178,"text":158272},{"id":158416,"depth":178,"text":158417},{"id":158519,"depth":178,"text":158520},{"id":158650,"depth":167,"text":158651},{"id":158802,"depth":167,"text":158803},{"id":159005,"depth":167,"text":159006},{"id":159063,"depth":167,"text":159064},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":156646,"description":25402},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":159122,"title":159123,"body":159124,"description":25402,"extension":2186,"meta":160760,"navigation":541,"path":160761,"seo":160762,"stem":160763,"__hash__":160764},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":159125,"toc":160741},[159126,159129,159133,159136,159151,159154,159182,159186,159236,159238,159254,159257,159283,159286,159290,159357,159360,159376,159380,159383,159501,159504,159511,159560,159566,159570,159573,159686,159689,159693,159697,159700,159750,159754,159757,159807,159811,159814,159852,159856,159859,159905,159908,159943,159947,159952,159955,160001,160003,160070,160074,160080,160191,160200,160204,160206,160217,160219,160385,160389,160391,160405,160407,160621,160625,160644,160661,160664,160710,160714,160738],[10,159127,159123],{"id":159128},"_3-判断语句",[14,159130,159132],{"id":159131},"_31-布尔值","3.1 布尔值",[19,159134,159135],{},"判断语句依赖布尔值：",[51,159137,159139],{"className":439,"code":159138,"language":441,"meta":57,"style":57},"True\nFalse\n",[59,159140,159141,159146],{"__ignoreMap":57},[79,159142,159143],{"class":81,"line":82},[79,159144,159145],{"class":96},"True\n",[79,159147,159148],{"class":81,"line":167},[79,159149,159150],{"class":96},"False\n",[19,159152,159153],{},"比较表达式会产生布尔值：",[51,159155,159157],{"className":439,"code":159156,"language":441,"meta":57,"style":57},"age = 18\nprint(age >= 18)  # True\n",[59,159158,159159,159167],{"__ignoreMap":57},[79,159160,159161,159163,159165],{"class":81,"line":82},[79,159162,148179],{"class":228},[79,159164,239],{"class":448},[79,159166,148184],{"class":96},[79,159168,159169,159171,159173,159175,159177,159179],{"class":81,"line":167},[79,159170,1889],{"class":96},[79,159172,157401],{"class":228},[79,159174,3805],{"class":448},[79,159176,157918],{"class":96},[79,159178,47803],{"class":228},[79,159180,159181],{"class":2313},"# True\n",[14,159183,159185],{"id":159184},"_32-if基础语法","3.2 if基础语法",[51,159187,159189],{"className":439,"code":159188,"language":441,"meta":57,"style":57},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[59,159190,159191,159209,159213,159225],{"__ignoreMap":57},[79,159192,159193,159195,159197,159199,159201,159203,159205,159207],{"class":81,"line":82},[79,159194,148179],{"class":228},[79,159196,239],{"class":448},[79,159198,4467],{"class":96},[79,159200,455],{"class":228},[79,159202,55812],{"class":96},[79,159204,455],{"class":228},[79,159206,154027],{"class":89},[79,159208,1150],{"class":228},[79,159210,159211],{"class":81,"line":167},[79,159212,542],{"emptyLinePlaceholder":541},[79,159214,159215,159217,159219,159221,159223],{"class":81,"line":178},[79,159216,1210],{"class":448},[79,159218,17739],{"class":228},[79,159220,3805],{"class":448},[79,159222,157918],{"class":96},[79,159224,745],{"class":228},[79,159226,159227,159229,159231,159234],{"class":81,"line":545},[79,159228,1161],{"class":96},[79,159230,455],{"class":228},[79,159232,159233],{"class":89},"\"可以进入网吧\"",[79,159235,850],{"class":228},[19,159237,11080],{},[26,159239,159240,159245,159248,159251],{},[29,159241,159242,159244],{},[59,159243,1210],{}," 后面是条件表达式。",[29,159246,159247],{},"条件后面必须写冒号。",[29,159249,159250],{},"条件成立时执行缩进代码块。",[29,159252,159253],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,159255,159256],{},"错误示例：",[51,159258,159260],{"className":439,"code":159259,"language":441,"meta":57,"style":57},"if age >= 18\n    print(\"可以进入\")\n",[59,159261,159262,159272],{"__ignoreMap":57},[79,159263,159264,159266,159268,159270],{"class":81,"line":82},[79,159265,1210],{"class":448},[79,159267,17739],{"class":228},[79,159269,3805],{"class":448},[79,159271,148184],{"class":96},[79,159273,159274,159276,159278,159281],{"class":81,"line":167},[79,159275,1161],{"class":96},[79,159277,455],{"class":228},[79,159279,159280],{"class":89},"\"可以进入\"",[79,159282,850],{"class":228},[19,159284,159285],{},"缺少冒号。",[14,159287,159289],{"id":159288},"_33-if-else","3.3 if else",[51,159291,159293],{"className":439,"code":159292,"language":441,"meta":57,"style":57},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[59,159294,159295,159313,159317,159329,159340,159346],{"__ignoreMap":57},[79,159296,159297,159299,159301,159303,159305,159307,159309,159311],{"class":81,"line":82},[79,159298,148179],{"class":228},[79,159300,239],{"class":448},[79,159302,4467],{"class":96},[79,159304,455],{"class":228},[79,159306,55812],{"class":96},[79,159308,455],{"class":228},[79,159310,154027],{"class":89},[79,159312,1150],{"class":228},[79,159314,159315],{"class":81,"line":167},[79,159316,542],{"emptyLinePlaceholder":541},[79,159318,159319,159321,159323,159325,159327],{"class":81,"line":178},[79,159320,1210],{"class":448},[79,159322,17739],{"class":228},[79,159324,3805],{"class":448},[79,159326,157918],{"class":96},[79,159328,745],{"class":228},[79,159330,159331,159333,159335,159338],{"class":81,"line":545},[79,159332,1161],{"class":96},[79,159334,455],{"class":228},[79,159336,159337],{"class":89},"\"成年人\"",[79,159339,850],{"class":228},[79,159341,159342,159344],{"class":81,"line":550},[79,159343,3796],{"class":448},[79,159345,745],{"class":228},[79,159347,159348,159350,159352,159355],{"class":81,"line":562},[79,159349,1161],{"class":96},[79,159351,455],{"class":228},[79,159353,159354],{"class":89},"\"未成年人\"",[79,159356,850],{"class":228},[19,159358,159359],{},"执行逻辑：",[26,159361,159362,159368,159373],{},[29,159363,159364,159365,159367],{},"条件成立，执行 ",[59,159366,1210],{}," 代码块。",[29,159369,159370,159371,159367],{},"条件不成立，执行 ",[59,159372,3796],{},[29,159374,159375],{},"两个代码块只会执行其中一个。",[14,159377,159379],{"id":159378},"_34-if-elif-else","3.4 if elif else",[19,159381,159382],{},"多条件判断：",[51,159384,159386],{"className":439,"code":159385,"language":441,"meta":57,"style":57},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[59,159387,159388,159406,159410,159424,159435,159449,159460,159473,159484,159490],{"__ignoreMap":57},[79,159389,159390,159392,159394,159396,159398,159400,159402,159404],{"class":81,"line":82},[79,159391,156991],{"class":228},[79,159393,239],{"class":448},[79,159395,4467],{"class":96},[79,159397,455],{"class":228},[79,159399,55812],{"class":96},[79,159401,455],{"class":228},[79,159403,154042],{"class":89},[79,159405,1150],{"class":228},[79,159407,159408],{"class":81,"line":167},[79,159409,542],{"emptyLinePlaceholder":541},[79,159411,159412,159414,159417,159419,159422],{"class":81,"line":178},[79,159413,1210],{"class":448},[79,159415,159416],{"class":228}," score ",[79,159418,3805],{"class":448},[79,159420,159421],{"class":96}," 90",[79,159423,745],{"class":228},[79,159425,159426,159428,159430,159433],{"class":81,"line":545},[79,159427,1161],{"class":96},[79,159429,455],{"class":228},[79,159431,159432],{"class":89},"\"优秀\"",[79,159434,850],{"class":228},[79,159436,159437,159440,159442,159444,159447],{"class":81,"line":550},[79,159438,159439],{"class":448},"elif",[79,159441,159416],{"class":228},[79,159443,3805],{"class":448},[79,159445,159446],{"class":96}," 80",[79,159448,745],{"class":228},[79,159450,159451,159453,159455,159458],{"class":81,"line":562},[79,159452,1161],{"class":96},[79,159454,455],{"class":228},[79,159456,159457],{"class":89},"\"良好\"",[79,159459,850],{"class":228},[79,159461,159462,159464,159466,159468,159471],{"class":81,"line":568},[79,159463,159439],{"class":448},[79,159465,159416],{"class":228},[79,159467,3805],{"class":448},[79,159469,159470],{"class":96}," 60",[79,159472,745],{"class":228},[79,159474,159475,159477,159479,159482],{"class":81,"line":574},[79,159476,1161],{"class":96},[79,159478,455],{"class":228},[79,159480,159481],{"class":89},"\"及格\"",[79,159483,850],{"class":228},[79,159485,159486,159488],{"class":81,"line":579},[79,159487,3796],{"class":448},[79,159489,745],{"class":228},[79,159491,159492,159494,159496,159499],{"class":81,"line":585},[79,159493,1161],{"class":96},[79,159495,455],{"class":228},[79,159497,159498],{"class":89},"\"不及格\"",[79,159500,850],{"class":228},[19,159502,159503],{},"注意判断顺序很重要。",[19,159505,159506,159507,159510],{},"如果把 ",[59,159508,159509],{},"score >= 60"," 放在最前面：",[51,159512,159514],{"className":439,"code":159513,"language":441,"meta":57,"style":57},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[59,159515,159516,159528,159538,159550],{"__ignoreMap":57},[79,159517,159518,159520,159522,159524,159526],{"class":81,"line":82},[79,159519,1210],{"class":448},[79,159521,159416],{"class":228},[79,159523,3805],{"class":448},[79,159525,159470],{"class":96},[79,159527,745],{"class":228},[79,159529,159530,159532,159534,159536],{"class":81,"line":167},[79,159531,1161],{"class":96},[79,159533,455],{"class":228},[79,159535,159481],{"class":89},[79,159537,850],{"class":228},[79,159539,159540,159542,159544,159546,159548],{"class":81,"line":178},[79,159541,159439],{"class":448},[79,159543,159416],{"class":228},[79,159545,3805],{"class":448},[79,159547,159421],{"class":96},[79,159549,745],{"class":228},[79,159551,159552,159554,159556,159558],{"class":81,"line":545},[79,159553,1161],{"class":96},[79,159555,455],{"class":228},[79,159557,159432],{"class":89},[79,159559,850],{"class":228},[19,159561,159562,159563,159565],{},"成绩 95 会先满足 ",[59,159564,159509],{},"，后面的优秀分支就不会执行。",[14,159567,159569],{"id":159568},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,159571,159572],{},"嵌套判断就是在一个判断内部再写判断。",[51,159574,159576],{"className":439,"code":159575,"language":441,"meta":57,"style":57},"age = int(input(\"请输入年龄:\"))\nhas_ticket = input(\"是否有票(y\u002Fn):\")\n\nif age >= 18:\n    if has_ticket == \"y\":\n        print(\"可以进入\")\n    else:\n        print(\"请先买票\")\nelse:\n    print(\"未成年人禁止进入\")\n",[59,159577,159578,159596,159611,159615,159627,159641,159651,159658,159669,159675],{"__ignoreMap":57},[79,159579,159580,159582,159584,159586,159588,159590,159592,159594],{"class":81,"line":82},[79,159581,148179],{"class":228},[79,159583,239],{"class":448},[79,159585,4467],{"class":96},[79,159587,455],{"class":228},[79,159589,55812],{"class":96},[79,159591,455],{"class":228},[79,159593,154027],{"class":89},[79,159595,1150],{"class":228},[79,159597,159598,159600,159602,159604,159606,159609],{"class":81,"line":167},[79,159599,157994],{"class":228},[79,159601,239],{"class":448},[79,159603,62594],{"class":96},[79,159605,455],{"class":228},[79,159607,159608],{"class":89},"\"是否有票(y\u002Fn):\"",[79,159610,850],{"class":228},[79,159612,159613],{"class":81,"line":178},[79,159614,542],{"emptyLinePlaceholder":541},[79,159616,159617,159619,159621,159623,159625],{"class":81,"line":545},[79,159618,1210],{"class":448},[79,159620,17739],{"class":228},[79,159622,3805],{"class":448},[79,159624,157918],{"class":96},[79,159626,745],{"class":228},[79,159628,159629,159631,159634,159636,159639],{"class":81,"line":550},[79,159630,5176],{"class":448},[79,159632,159633],{"class":228}," has_ticket ",[79,159635,5025],{"class":448},[79,159637,159638],{"class":89}," \"y\"",[79,159640,745],{"class":228},[79,159642,159643,159645,159647,159649],{"class":81,"line":562},[79,159644,34449],{"class":96},[79,159646,455],{"class":228},[79,159648,159280],{"class":89},[79,159650,850],{"class":228},[79,159652,159653,159656],{"class":81,"line":568},[79,159654,159655],{"class":448},"    else",[79,159657,745],{"class":228},[79,159659,159660,159662,159664,159667],{"class":81,"line":574},[79,159661,34449],{"class":96},[79,159663,455],{"class":228},[79,159665,159666],{"class":89},"\"请先买票\"",[79,159668,850],{"class":228},[79,159670,159671,159673],{"class":81,"line":579},[79,159672,3796],{"class":448},[79,159674,745],{"class":228},[79,159676,159677,159679,159681,159684],{"class":81,"line":585},[79,159678,1161],{"class":96},[79,159680,455],{"class":228},[79,159682,159683],{"class":89},"\"未成年人禁止进入\"",[79,159685,850],{"class":228},[19,159687,159688],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,159690,159692],{"id":159691},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[339,159694,159696],{"id":159695},"_361-and","3.6.1 and",[19,159698,159699],{},"两个条件都成立才成立。",[51,159701,159703],{"className":439,"code":159702,"language":441,"meta":57,"style":57},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[59,159704,159705,159713,159721,159725,159740],{"__ignoreMap":57},[79,159706,159707,159709,159711],{"class":81,"line":82},[79,159708,148179],{"class":228},[79,159710,239],{"class":448},[79,159712,90052],{"class":96},[79,159714,159715,159717,159719],{"class":81,"line":167},[79,159716,157994],{"class":228},[79,159718,239],{"class":448},[79,159720,155232],{"class":96},[79,159722,159723],{"class":81,"line":178},[79,159724,542],{"emptyLinePlaceholder":541},[79,159726,159727,159729,159731,159733,159735,159737],{"class":81,"line":545},[79,159728,1210],{"class":448},[79,159730,17739],{"class":228},[79,159732,3805],{"class":448},[79,159734,157918],{"class":96},[79,159736,122062],{"class":448},[79,159738,159739],{"class":228}," has_ticket:\n",[79,159741,159742,159744,159746,159748],{"class":81,"line":550},[79,159743,1161],{"class":96},[79,159745,455],{"class":228},[79,159747,159280],{"class":89},[79,159749,850],{"class":228},[339,159751,159753],{"id":159752},"_362-or","3.6.2 or",[19,159755,159756],{},"只要一个条件成立就成立。",[51,159758,159760],{"className":439,"code":159759,"language":441,"meta":57,"style":57},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[59,159761,159762,159771,159780,159784,159796],{"__ignoreMap":57},[79,159763,159764,159767,159769],{"class":81,"line":82},[79,159765,159766],{"class":228},"is_vip ",[79,159768,239],{"class":448},[79,159770,127440],{"class":96},[79,159772,159773,159776,159778],{"class":81,"line":167},[79,159774,159775],{"class":228},"coupon ",[79,159777,239],{"class":448},[79,159779,155232],{"class":96},[79,159781,159782],{"class":81,"line":178},[79,159783,542],{"emptyLinePlaceholder":541},[79,159785,159786,159788,159791,159793],{"class":81,"line":545},[79,159787,1210],{"class":448},[79,159789,159790],{"class":228}," is_vip ",[79,159792,116723],{"class":448},[79,159794,159795],{"class":228}," coupon:\n",[79,159797,159798,159800,159802,159805],{"class":81,"line":550},[79,159799,1161],{"class":96},[79,159801,455],{"class":228},[79,159803,159804],{"class":89},"\"可以享受优惠\"",[79,159806,850],{"class":228},[339,159808,159810],{"id":159809},"_363-not","3.6.3 not",[19,159812,159813],{},"取反。",[51,159815,159817],{"className":439,"code":159816,"language":441,"meta":57,"style":57},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[59,159818,159819,159828,159832,159841],{"__ignoreMap":57},[79,159820,159821,159824,159826],{"class":81,"line":82},[79,159822,159823],{"class":228},"is_closed ",[79,159825,239],{"class":448},[79,159827,127440],{"class":96},[79,159829,159830],{"class":81,"line":167},[79,159831,542],{"emptyLinePlaceholder":541},[79,159833,159834,159836,159838],{"class":81,"line":178},[79,159835,1210],{"class":448},[79,159837,40925],{"class":448},[79,159839,159840],{"class":228}," is_closed:\n",[79,159842,159843,159845,159847,159850],{"class":81,"line":545},[79,159844,1161],{"class":96},[79,159846,455],{"class":228},[79,159848,159849],{"class":89},"\"店铺营业中\"",[79,159851,850],{"class":228},[14,159853,159855],{"id":159854},"_37-链式比较","3.7 链式比较",[19,159857,159858],{},"Python 支持链式比较：",[51,159860,159862],{"className":439,"code":159861,"language":441,"meta":57,"style":57},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[59,159863,159864,159873,159877,159894],{"__ignoreMap":57},[79,159865,159866,159868,159870],{"class":81,"line":82},[79,159867,156991],{"class":228},[79,159869,239],{"class":448},[79,159871,159872],{"class":96}," 85\n",[79,159874,159875],{"class":81,"line":167},[79,159876,542],{"emptyLinePlaceholder":541},[79,159878,159879,159881,159883,159886,159888,159890,159892],{"class":81,"line":178},[79,159880,1210],{"class":448},[79,159882,1103],{"class":96},[79,159884,159885],{"class":448}," \u003C=",[79,159887,159416],{"class":228},[79,159889,3694],{"class":448},[79,159891,1097],{"class":96},[79,159893,745],{"class":228},[79,159895,159896,159898,159900,159903],{"class":81,"line":545},[79,159897,1161],{"class":96},[79,159899,455],{"class":228},[79,159901,159902],{"class":89},"\"成绩合法\"",[79,159904,850],{"class":228},[19,159906,159907],{},"等价于：",[51,159909,159911],{"className":439,"code":159910,"language":441,"meta":57,"style":57},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[59,159912,159913,159933],{"__ignoreMap":57},[79,159914,159915,159917,159919,159921,159923,159925,159927,159929,159931],{"class":81,"line":82},[79,159916,1210],{"class":448},[79,159918,159416],{"class":228},[79,159920,3805],{"class":448},[79,159922,1103],{"class":96},[79,159924,122062],{"class":448},[79,159926,159416],{"class":228},[79,159928,3694],{"class":448},[79,159930,1097],{"class":96},[79,159932,745],{"class":228},[79,159934,159935,159937,159939,159941],{"class":81,"line":167},[79,159936,1161],{"class":96},[79,159938,455],{"class":228},[79,159940,159902],{"class":89},[79,159942,850],{"class":228},[14,159944,159946],{"id":159945},"_38-真值和假值","3.8 真值和假值",[19,159948,118100,159949,159951],{},[59,159950,1210],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,159953,159954],{},"假值：",[51,159956,159958],{"className":439,"code":159957,"language":441,"meta":57,"style":57},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[59,159959,159960,159964,159969,159973,159977,159982,159986,159990,159995],{"__ignoreMap":57},[79,159961,159962],{"class":81,"line":82},[79,159963,159150],{"class":96},[79,159965,159966],{"class":81,"line":167},[79,159967,159968],{"class":96},"None\n",[79,159970,159971],{"class":81,"line":178},[79,159972,5160],{"class":96},[79,159974,159975],{"class":81,"line":545},[79,159976,34341],{"class":96},[79,159978,159979],{"class":81,"line":550},[79,159980,159981],{"class":89},"\"\"\n",[79,159983,159984],{"class":81,"line":562},[79,159985,34356],{"class":228},[79,159987,159988],{"class":81,"line":568},[79,159989,4061],{"class":228},[79,159991,159992],{"class":81,"line":574},[79,159993,159994],{"class":228},"{}\n",[79,159996,159997,159999],{"class":81,"line":579},[79,159998,156923],{"class":96},[79,160000,4061],{"class":228},[19,160002,17167],{},[51,160004,160006],{"className":439,"code":160005,"language":441,"meta":57,"style":57},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[59,160007,160008,160022,160026,160033,160053,160059],{"__ignoreMap":57},[79,160009,160010,160012,160014,160016,160018,160020],{"class":81,"line":82},[79,160011,148169],{"class":228},[79,160013,239],{"class":448},[79,160015,62594],{"class":96},[79,160017,455],{"class":228},[79,160019,154012],{"class":89},[79,160021,850],{"class":228},[79,160023,160024],{"class":81,"line":167},[79,160025,542],{"emptyLinePlaceholder":541},[79,160027,160028,160030],{"class":81,"line":178},[79,160029,1210],{"class":448},[79,160031,160032],{"class":228}," name:\n",[79,160034,160035,160037,160039,160041,160043,160045,160047,160049,160051],{"class":81,"line":545},[79,160036,1161],{"class":96},[79,160038,455],{"class":228},[79,160040,2307],{"class":448},[79,160042,158687],{"class":89},[79,160044,3136],{"class":96},[79,160046,81798],{"class":228},[79,160048,3185],{"class":96},[79,160050,2495],{"class":89},[79,160052,850],{"class":228},[79,160054,160055,160057],{"class":81,"line":550},[79,160056,3796],{"class":448},[79,160058,745],{"class":228},[79,160060,160061,160063,160065,160068],{"class":81,"line":562},[79,160062,1161],{"class":96},[79,160064,455],{"class":228},[79,160066,160067],{"class":89},"\"姓名不能为空\"",[79,160069,850],{"class":228},[14,160071,160073],{"id":160072},"_39-match语句","3.9 match语句",[19,160075,160076,160077,160079],{},"Python 3.10 开始支持 ",[59,160078,73253],{},"。它适合处理固定选项。",[51,160081,160083],{"className":439,"code":160082,"language":441,"meta":57,"style":57},"command = input(\"请输入命令:\")\n\nmatch command:\n    case \"start\":\n        print(\"启动\")\n    case \"stop\":\n        print(\"停止\")\n    case \"restart\":\n        print(\"重启\")\n    case _:\n        print(\"未知命令\")\n",[59,160084,160085,160101,160105,160112,160122,160133,160142,160153,160162,160173,160180],{"__ignoreMap":57},[79,160086,160087,160090,160092,160094,160096,160099],{"class":81,"line":82},[79,160088,160089],{"class":228},"command ",[79,160091,239],{"class":448},[79,160093,62594],{"class":96},[79,160095,455],{"class":228},[79,160097,160098],{"class":89},"\"请输入命令:\"",[79,160100,850],{"class":228},[79,160102,160103],{"class":81,"line":167},[79,160104,542],{"emptyLinePlaceholder":541},[79,160106,160107,160109],{"class":81,"line":178},[79,160108,73253],{"class":448},[79,160110,160111],{"class":228}," command:\n",[79,160113,160114,160117,160120],{"class":81,"line":545},[79,160115,160116],{"class":448},"    case",[79,160118,160119],{"class":89}," \"start\"",[79,160121,745],{"class":228},[79,160123,160124,160126,160128,160131],{"class":81,"line":550},[79,160125,34449],{"class":96},[79,160127,455],{"class":228},[79,160129,160130],{"class":89},"\"启动\"",[79,160132,850],{"class":228},[79,160134,160135,160137,160140],{"class":81,"line":562},[79,160136,160116],{"class":448},[79,160138,160139],{"class":89}," \"stop\"",[79,160141,745],{"class":228},[79,160143,160144,160146,160148,160151],{"class":81,"line":568},[79,160145,34449],{"class":96},[79,160147,455],{"class":228},[79,160149,160150],{"class":89},"\"停止\"",[79,160152,850],{"class":228},[79,160154,160155,160157,160160],{"class":81,"line":574},[79,160156,160116],{"class":448},[79,160158,160159],{"class":89}," \"restart\"",[79,160161,745],{"class":228},[79,160163,160164,160166,160168,160171],{"class":81,"line":579},[79,160165,34449],{"class":96},[79,160167,455],{"class":228},[79,160169,160170],{"class":89},"\"重启\"",[79,160172,850],{"class":228},[79,160174,160175,160177],{"class":81,"line":585},[79,160176,160116],{"class":448},[79,160178,160179],{"class":228}," _:\n",[79,160181,160182,160184,160186,160189],{"class":81,"line":591},[79,160183,34449],{"class":96},[79,160185,455],{"class":228},[79,160187,160188],{"class":89},"\"未知命令\"",[79,160190,850],{"class":228},[19,160192,160193,160194,160196,160197,160199],{},"入门阶段掌握 ",[59,160195,156291],{}," 更重要，",[59,160198,73253],{}," 可以作为补充。",[14,160201,160203],{"id":160202},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,160205,124925],{},[26,160207,160208,160211,160214],{},[29,160209,160210],{},"输入成绩。",[29,160212,160213],{},"判断成绩是否合法。",[29,160215,160216],{},"输出等级。",[19,160218,12070],{},[51,160220,160222],{"className":439,"code":160221,"language":441,"meta":57,"style":57},"score = float(input(\"请输入成绩:\"))\n\nif not 0 \u003C= score \u003C= 100:\n    print(\"成绩不合法\")\nelif score >= 90:\n    print(\"等级:A\")\nelif score >= 80:\n    print(\"等级:B\")\nelif score >= 70:\n    print(\"等级:C\")\nelif score >= 60:\n    print(\"等级:D\")\nelse:\n    print(\"等级:E\")\n",[59,160223,160224,160242,160246,160264,160275,160287,160298,160310,160321,160334,160345,160357,160368,160374],{"__ignoreMap":57},[79,160225,160226,160228,160230,160232,160234,160236,160238,160240],{"class":81,"line":82},[79,160227,156991],{"class":228},[79,160229,239],{"class":448},[79,160231,452],{"class":96},[79,160233,455],{"class":228},[79,160235,55812],{"class":96},[79,160237,455],{"class":228},[79,160239,154042],{"class":89},[79,160241,1150],{"class":228},[79,160243,160244],{"class":81,"line":167},[79,160245,542],{"emptyLinePlaceholder":541},[79,160247,160248,160250,160252,160254,160256,160258,160260,160262],{"class":81,"line":178},[79,160249,1210],{"class":448},[79,160251,40925],{"class":448},[79,160253,1103],{"class":96},[79,160255,159885],{"class":448},[79,160257,159416],{"class":228},[79,160259,3694],{"class":448},[79,160261,1097],{"class":96},[79,160263,745],{"class":228},[79,160265,160266,160268,160270,160273],{"class":81,"line":545},[79,160267,1161],{"class":96},[79,160269,455],{"class":228},[79,160271,160272],{"class":89},"\"成绩不合法\"",[79,160274,850],{"class":228},[79,160276,160277,160279,160281,160283,160285],{"class":81,"line":550},[79,160278,159439],{"class":448},[79,160280,159416],{"class":228},[79,160282,3805],{"class":448},[79,160284,159421],{"class":96},[79,160286,745],{"class":228},[79,160288,160289,160291,160293,160296],{"class":81,"line":562},[79,160290,1161],{"class":96},[79,160292,455],{"class":228},[79,160294,160295],{"class":89},"\"等级:A\"",[79,160297,850],{"class":228},[79,160299,160300,160302,160304,160306,160308],{"class":81,"line":568},[79,160301,159439],{"class":448},[79,160303,159416],{"class":228},[79,160305,3805],{"class":448},[79,160307,159446],{"class":96},[79,160309,745],{"class":228},[79,160311,160312,160314,160316,160319],{"class":81,"line":574},[79,160313,1161],{"class":96},[79,160315,455],{"class":228},[79,160317,160318],{"class":89},"\"等级:B\"",[79,160320,850],{"class":228},[79,160322,160323,160325,160327,160329,160332],{"class":81,"line":579},[79,160324,159439],{"class":448},[79,160326,159416],{"class":228},[79,160328,3805],{"class":448},[79,160330,160331],{"class":96}," 70",[79,160333,745],{"class":228},[79,160335,160336,160338,160340,160343],{"class":81,"line":585},[79,160337,1161],{"class":96},[79,160339,455],{"class":228},[79,160341,160342],{"class":89},"\"等级:C\"",[79,160344,850],{"class":228},[79,160346,160347,160349,160351,160353,160355],{"class":81,"line":591},[79,160348,159439],{"class":448},[79,160350,159416],{"class":228},[79,160352,3805],{"class":448},[79,160354,159470],{"class":96},[79,160356,745],{"class":228},[79,160358,160359,160361,160363,160366],{"class":81,"line":596},[79,160360,1161],{"class":96},[79,160362,455],{"class":228},[79,160364,160365],{"class":89},"\"等级:D\"",[79,160367,850],{"class":228},[79,160369,160370,160372],{"class":81,"line":602},[79,160371,3796],{"class":448},[79,160373,745],{"class":228},[79,160375,160376,160378,160380,160383],{"class":81,"line":608},[79,160377,1161],{"class":96},[79,160379,455],{"class":228},[79,160381,160382],{"class":89},"\"等级:E\"",[79,160384,850],{"class":228},[14,160386,160388],{"id":160387},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,160390,124925],{},[26,160392,160393,160396,160399,160402],{},[29,160394,160395],{},"输入消费金额。",[29,160397,160398],{},"输入会员等级，普通、银卡、金卡。",[29,160400,160401],{},"普通不打折，银卡 9 折，金卡 8 折。",[29,160403,160404],{},"满 500 再减 50。",[19,160406,12070],{},[51,160408,160410],{"className":439,"code":160409,"language":441,"meta":57,"style":57},"amount = float(input(\"请输入消费金额:\"))\nlevel = input(\"请输入会员等级(普通\u002F银卡\u002F金卡):\")\n\ndiscount = 1\n\nif level == \"银卡\":\n    discount = 0.9\nelif level == \"金卡\":\n    discount = 0.8\nelif level == \"普通\":\n    discount = 1\nelse:\n    print(\"会员等级输入错误，按普通会员计算\")\n\npay = amount * discount\n\nif pay >= 500:\n    pay -= 50\n\nprint(f\"应付金额:{pay:.2f}元\")\n",[59,160411,160412,160432,160448,160452,160460,160464,160478,160488,160501,160510,160523,160531,160537,160548,160552,160566,160570,160584,160594,160598],{"__ignoreMap":57},[79,160413,160414,160417,160419,160421,160423,160425,160427,160430],{"class":81,"line":82},[79,160415,160416],{"class":228},"amount ",[79,160418,239],{"class":448},[79,160420,452],{"class":96},[79,160422,455],{"class":228},[79,160424,55812],{"class":96},[79,160426,455],{"class":228},[79,160428,160429],{"class":89},"\"请输入消费金额:\"",[79,160431,1150],{"class":228},[79,160433,160434,160437,160439,160441,160443,160446],{"class":81,"line":167},[79,160435,160436],{"class":228},"level ",[79,160438,239],{"class":448},[79,160440,62594],{"class":96},[79,160442,455],{"class":228},[79,160444,160445],{"class":89},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[79,160447,850],{"class":228},[79,160449,160450],{"class":81,"line":178},[79,160451,542],{"emptyLinePlaceholder":541},[79,160453,160454,160456,160458],{"class":81,"line":545},[79,160455,158869],{"class":228},[79,160457,239],{"class":448},[79,160459,57688],{"class":96},[79,160461,160462],{"class":81,"line":550},[79,160463,542],{"emptyLinePlaceholder":541},[79,160465,160466,160468,160471,160473,160476],{"class":81,"line":562},[79,160467,1210],{"class":448},[79,160469,160470],{"class":228}," level ",[79,160472,5025],{"class":448},[79,160474,160475],{"class":89}," \"银卡\"",[79,160477,745],{"class":228},[79,160479,160480,160483,160485],{"class":81,"line":568},[79,160481,160482],{"class":228},"    discount ",[79,160484,239],{"class":448},[79,160486,160487],{"class":96}," 0.9\n",[79,160489,160490,160492,160494,160496,160499],{"class":81,"line":574},[79,160491,159439],{"class":448},[79,160493,160470],{"class":228},[79,160495,5025],{"class":448},[79,160497,160498],{"class":89}," \"金卡\"",[79,160500,745],{"class":228},[79,160502,160503,160505,160507],{"class":81,"line":579},[79,160504,160482],{"class":228},[79,160506,239],{"class":448},[79,160508,160509],{"class":96}," 0.8\n",[79,160511,160512,160514,160516,160518,160521],{"class":81,"line":585},[79,160513,159439],{"class":448},[79,160515,160470],{"class":228},[79,160517,5025],{"class":448},[79,160519,160520],{"class":89}," \"普通\"",[79,160522,745],{"class":228},[79,160524,160525,160527,160529],{"class":81,"line":591},[79,160526,160482],{"class":228},[79,160528,239],{"class":448},[79,160530,57688],{"class":96},[79,160532,160533,160535],{"class":81,"line":596},[79,160534,3796],{"class":448},[79,160536,745],{"class":228},[79,160538,160539,160541,160543,160546],{"class":81,"line":602},[79,160540,1161],{"class":96},[79,160542,455],{"class":228},[79,160544,160545],{"class":89},"\"会员等级输入错误，按普通会员计算\"",[79,160547,850],{"class":228},[79,160549,160550],{"class":81,"line":608},[79,160551,542],{"emptyLinePlaceholder":541},[79,160553,160554,160557,160559,160562,160564],{"class":81,"line":614},[79,160555,160556],{"class":228},"pay ",[79,160558,239],{"class":448},[79,160560,160561],{"class":228}," amount ",[79,160563,473],{"class":448},[79,160565,158908],{"class":228},[79,160567,160568],{"class":81,"line":619},[79,160569,542],{"emptyLinePlaceholder":541},[79,160571,160572,160574,160577,160579,160582],{"class":81,"line":625},[79,160573,1210],{"class":448},[79,160575,160576],{"class":228}," pay ",[79,160578,3805],{"class":448},[79,160580,160581],{"class":96}," 500",[79,160583,745],{"class":228},[79,160585,160586,160589,160591],{"class":81,"line":631},[79,160587,160588],{"class":228},"    pay ",[79,160590,151885],{"class":448},[79,160592,160593],{"class":96}," 50\n",[79,160595,160596],{"class":81,"line":637},[79,160597,542],{"emptyLinePlaceholder":541},[79,160599,160600,160602,160604,160606,160608,160610,160613,160615,160617,160619],{"class":81,"line":643},[79,160601,1889],{"class":96},[79,160603,455],{"class":228},[79,160605,2307],{"class":448},[79,160607,158989],{"class":89},[79,160609,3136],{"class":96},[79,160611,160612],{"class":228},"pay",[79,160614,158792],{"class":448},[79,160616,3185],{"class":96},[79,160618,158645],{"class":89},[79,160620,850],{"class":228},[14,160622,160624],{"id":160623},"_312-易错点","3.12 易错点",[26,160626,160627,160630,160633,160636,160641],{},[29,160628,160629],{},"冒号不能漏。",[29,160631,160632],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[29,160634,160635],{},"多分支判断要注意顺序。",[29,160637,160638,160639,497],{},"判断相等用 ",[59,160640,5025],{},[29,160642,160643],{},"字符串比较区分大小写：",[51,160645,160647],{"className":439,"code":160646,"language":441,"meta":57,"style":57},"\"Y\" == \"y\"  # False\n",[59,160648,160649],{"__ignoreMap":57},[79,160650,160651,160654,160656,160658],{"class":81,"line":82},[79,160652,160653],{"class":89},"\"Y\"",[79,160655,1100],{"class":448},[79,160657,159638],{"class":89},[79,160659,160660],{"class":2313},"  # False\n",[19,160662,160663],{},"可转换后再判断：",[51,160665,160667],{"className":439,"code":160666,"language":441,"meta":57,"style":57},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[59,160668,160669,160686,160699],{"__ignoreMap":57},[79,160670,160671,160674,160676,160678,160680,160683],{"class":81,"line":82},[79,160672,160673],{"class":228},"answer ",[79,160675,239],{"class":448},[79,160677,62594],{"class":96},[79,160679,455],{"class":228},[79,160681,160682],{"class":89},"\"是否继续(y\u002Fn):\"",[79,160684,160685],{"class":228},").lower()\n",[79,160687,160688,160690,160693,160695,160697],{"class":81,"line":167},[79,160689,1210],{"class":448},[79,160691,160692],{"class":228}," answer ",[79,160694,5025],{"class":448},[79,160696,159638],{"class":89},[79,160698,745],{"class":228},[79,160700,160701,160703,160705,160708],{"class":81,"line":178},[79,160702,1161],{"class":96},[79,160704,455],{"class":228},[79,160706,160707],{"class":89},"\"继续\"",[79,160709,850],{"class":228},[14,160711,160713],{"id":160712},"_313-本章练习","3.13 本章练习",[26,160715,160716,160719,160722,160725,160735],{},[29,160717,160718],{},"输入年龄，判断是否成年。",[29,160720,160721],{},"输入年份，判断是否为闰年。",[29,160723,160724],{},"输入三个数字，输出最大值。",[29,160726,160727,160728,160731,160732,160734],{},"写登录判断：用户名是 ",[59,160729,160730],{},"admin"," 且密码是 ",[59,160733,17116],{}," 才登录成功。",[29,160736,160737],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[2159,160739,160740],{},"html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":57,"searchDepth":167,"depth":167,"links":160742},[160743,160744,160745,160746,160747,160748,160753,160754,160755,160756,160757,160758,160759],{"id":159131,"depth":167,"text":159132},{"id":159184,"depth":167,"text":159185},{"id":159288,"depth":167,"text":159289},{"id":159378,"depth":167,"text":159379},{"id":159568,"depth":167,"text":159569},{"id":159691,"depth":167,"text":159692,"children":160749},[160750,160751,160752],{"id":159695,"depth":178,"text":159696},{"id":159752,"depth":178,"text":159753},{"id":159809,"depth":178,"text":159810},{"id":159854,"depth":167,"text":159855},{"id":159945,"depth":167,"text":159946},{"id":160072,"depth":167,"text":160073},{"id":160202,"depth":167,"text":160203},{"id":160387,"depth":167,"text":160388},{"id":160623,"depth":167,"text":160624},{"id":160712,"depth":167,"text":160713},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":159123,"description":25402},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":160766,"title":160767,"body":160768,"description":25402,"extension":2186,"meta":162537,"navigation":541,"path":162538,"seo":162539,"stem":162540,"__hash__":162541},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":160769,"toc":162517},[160770,160773,160777,160783,160786,160803,160807,160809,160826,160828,160873,160875,160892,160896,160899,160965,160968,160986,160990,161151,161160,161164,161168,161173,161220,161222,161228,161232,161237,161284,161286,161292,161296,161301,161337,161340,161387,161391,161397,161455,161460,161491,161496,161500,161555,161558,161630,161633,161692,161696,161699,161774,161777,161781,161887,161890,161916,161920,161932,162001,162004,162096,162100,162102,162113,162115,162245,162249,162451,162459,162463,162493,162497,162514],[10,160771,160767],{"id":160772},"_4-循环语句",[14,160774,160776],{"id":160775},"_41-为什么需要循环","4.1 为什么需要循环",[19,160778,160779,160780,160782],{},"如果要输出 1 到 100，不应该写 100 行 ",[59,160781,148105],{},"，而应该用循环。",[19,160784,160785],{},"循环适合处理重复任务：",[26,160787,160788,160791,160794,160797,160800],{},[29,160789,160790],{},"重复输出。",[29,160792,160793],{},"重复输入。",[29,160795,160796],{},"遍历数据。",[29,160798,160799],{},"持续执行菜单。",[29,160801,160802],{},"批量处理文件或数据。",[14,160804,160806],{"id":160805},"_42-while循环","4.2 while循环",[19,160808,7251],{},[51,160810,160812],{"className":439,"code":160811,"language":441,"meta":57,"style":57},"while 条件:\n    循环体\n",[59,160813,160814,160821],{"__ignoreMap":57},[79,160815,160816,160818],{"class":81,"line":82},[79,160817,110550],{"class":448},[79,160819,160820],{"class":228}," 条件:\n",[79,160822,160823],{"class":81,"line":167},[79,160824,160825],{"class":228},"    循环体\n",[19,160827,17167],{},[51,160829,160831],{"className":439,"code":160830,"language":441,"meta":57,"style":57},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[59,160832,160833,160841,160845,160857,160864],{"__ignoreMap":57},[79,160834,160835,160837,160839],{"class":81,"line":82},[79,160836,102133],{"class":228},[79,160838,239],{"class":448},[79,160840,57688],{"class":96},[79,160842,160843],{"class":81,"line":167},[79,160844,542],{"emptyLinePlaceholder":541},[79,160846,160847,160849,160851,160853,160855],{"class":81,"line":178},[79,160848,110550],{"class":448},[79,160850,11493],{"class":228},[79,160852,3694],{"class":448},[79,160854,4233],{"class":96},[79,160856,745],{"class":228},[79,160858,160859,160861],{"class":81,"line":545},[79,160860,1161],{"class":96},[79,160862,160863],{"class":228},"(i)\n",[79,160865,160866,160869,160871],{"class":81,"line":550},[79,160867,160868],{"class":228},"    i ",[79,160870,1075],{"class":448},[79,160872,57688],{"class":96},[19,160874,82917],{},[26,160876,160877,160883,160886,160889],{},[29,160878,160879,160880,497],{},"判断条件 ",[59,160881,160882],{},"i \u003C= 5",[29,160884,160885],{},"条件成立，执行循环体。",[29,160887,160888],{},"执行完后回到条件判断。",[29,160890,160891],{},"条件不成立，退出循环。",[14,160893,160895],{"id":160894},"_43-while累加","4.3 while累加",[19,160897,160898],{},"计算 1 到 100 的和：",[51,160900,160902],{"className":439,"code":160901,"language":441,"meta":57,"style":57},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[59,160903,160904,160912,160920,160924,160936,160946,160954,160958],{"__ignoreMap":57},[79,160905,160906,160908,160910],{"class":81,"line":82},[79,160907,102133],{"class":228},[79,160909,239],{"class":448},[79,160911,57688],{"class":96},[79,160913,160914,160916,160918],{"class":81,"line":167},[79,160915,158893],{"class":228},[79,160917,239],{"class":448},[79,160919,49328],{"class":96},[79,160921,160922],{"class":81,"line":178},[79,160923,542],{"emptyLinePlaceholder":541},[79,160925,160926,160928,160930,160932,160934],{"class":81,"line":545},[79,160927,110550],{"class":448},[79,160929,11493],{"class":228},[79,160931,3694],{"class":448},[79,160933,1097],{"class":96},[79,160935,745],{"class":228},[79,160937,160938,160941,160943],{"class":81,"line":550},[79,160939,160940],{"class":228},"    total ",[79,160942,1075],{"class":448},[79,160944,160945],{"class":228}," i\n",[79,160947,160948,160950,160952],{"class":81,"line":562},[79,160949,160868],{"class":228},[79,160951,1075],{"class":448},[79,160953,57688],{"class":96},[79,160955,160956],{"class":81,"line":568},[79,160957,542],{"emptyLinePlaceholder":541},[79,160959,160960,160962],{"class":81,"line":574},[79,160961,1889],{"class":96},[79,160963,160964],{"class":228},"(total)\n",[19,160966,160967],{},"核心思想：",[26,160969,160970,160975,160980],{},[29,160971,160972,160974],{},[59,160973,2684],{}," 控制循环次数。",[29,160976,160977,160979],{},[59,160978,158994],{}," 保存累加结果。",[29,160981,160982,160983,160985],{},"每轮循环都要更新 ",[59,160984,2684],{},"，否则可能死循环。",[14,160987,160989],{"id":160988},"_44-while猜数字","4.4 while猜数字",[51,160991,160993],{"className":439,"code":160992,"language":441,"meta":57,"style":57},"import random\n\nanswer = random.randint(1, 100)\ncount = 0\n\nwhile True:\n    guess = int(input(\"请输入1到100之间的数字:\"))\n    count += 1\n\n    if guess > answer:\n        print(\"猜大了\")\n    elif guess \u003C answer:\n        print(\"猜小了\")\n    else:\n        print(f\"猜对了，一共猜了{count}次\")\n        break\n",[59,160994,160995,161001,161005,161022,161030,161034,161042,161062,161071,161075,161087,161098,161108,161119,161125,161147],{"__ignoreMap":57},[79,160996,160997,160999],{"class":81,"line":82},[79,160998,520],{"class":448},[79,161000,47323],{"class":228},[79,161002,161003],{"class":81,"line":167},[79,161004,542],{"emptyLinePlaceholder":541},[79,161006,161007,161009,161011,161014,161016,161018,161020],{"class":81,"line":178},[79,161008,160673],{"class":228},[79,161010,239],{"class":448},[79,161012,161013],{"class":228}," random.randint(",[79,161015,775],{"class":96},[79,161017,1020],{"class":228},[79,161019,2555],{"class":96},[79,161021,850],{"class":228},[79,161023,161024,161026,161028],{"class":81,"line":545},[79,161025,148324],{"class":228},[79,161027,239],{"class":448},[79,161029,49328],{"class":96},[79,161031,161032],{"class":81,"line":550},[79,161033,542],{"emptyLinePlaceholder":541},[79,161035,161036,161038,161040],{"class":81,"line":562},[79,161037,110550],{"class":448},[79,161039,97279],{"class":96},[79,161041,745],{"class":228},[79,161043,161044,161047,161049,161051,161053,161055,161057,161060],{"class":81,"line":568},[79,161045,161046],{"class":228},"    guess ",[79,161048,239],{"class":448},[79,161050,4467],{"class":96},[79,161052,455],{"class":228},[79,161054,55812],{"class":96},[79,161056,455],{"class":228},[79,161058,161059],{"class":89},"\"请输入1到100之间的数字:\"",[79,161061,1150],{"class":228},[79,161063,161064,161067,161069],{"class":81,"line":574},[79,161065,161066],{"class":228},"    count ",[79,161068,1075],{"class":448},[79,161070,57688],{"class":96},[79,161072,161073],{"class":81,"line":579},[79,161074,542],{"emptyLinePlaceholder":541},[79,161076,161077,161079,161082,161084],{"class":81,"line":585},[79,161078,5176],{"class":448},[79,161080,161081],{"class":228}," guess ",[79,161083,3199],{"class":448},[79,161085,161086],{"class":228}," answer:\n",[79,161088,161089,161091,161093,161096],{"class":81,"line":591},[79,161090,34449],{"class":96},[79,161092,455],{"class":228},[79,161094,161095],{"class":89},"\"猜大了\"",[79,161097,850],{"class":228},[79,161099,161100,161102,161104,161106],{"class":81,"line":596},[79,161101,41288],{"class":448},[79,161103,161081],{"class":228},[79,161105,229],{"class":448},[79,161107,161086],{"class":228},[79,161109,161110,161112,161114,161117],{"class":81,"line":602},[79,161111,34449],{"class":96},[79,161113,455],{"class":228},[79,161115,161116],{"class":89},"\"猜小了\"",[79,161118,850],{"class":228},[79,161120,161121,161123],{"class":81,"line":608},[79,161122,159655],{"class":448},[79,161124,745],{"class":228},[79,161126,161127,161129,161131,161133,161136,161138,161140,161142,161145],{"class":81,"line":614},[79,161128,34449],{"class":96},[79,161130,455],{"class":228},[79,161132,2307],{"class":448},[79,161134,161135],{"class":89},"\"猜对了，一共猜了",[79,161137,3136],{"class":96},[79,161139,86421],{"class":228},[79,161141,3185],{"class":96},[79,161143,161144],{"class":89},"次\"",[79,161146,850],{"class":228},[79,161148,161149],{"class":81,"line":619},[79,161150,33628],{"class":448},[19,161152,161153,161156,161157,161159],{},[59,161154,161155],{},"while True"," 表示无限循环，通常配合 ",[59,161158,4138],{}," 使用。",[14,161161,161163],{"id":161162},"_45-break和continue","4.5 break和continue",[339,161165,161167],{"id":161166},"_451-break","4.5.1 break",[19,161169,161170,161172],{},[59,161171,4138],{}," 直接结束整个循环。",[51,161174,161176],{"className":439,"code":161175,"language":441,"meta":57,"style":57},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[59,161177,161178,161198,161210,161214],{"__ignoreMap":57},[79,161179,161180,161182,161184,161186,161188,161190,161192,161194,161196],{"class":81,"line":82},[79,161181,1638],{"class":448},[79,161183,11493],{"class":228},[79,161185,921],{"class":448},[79,161187,924],{"class":96},[79,161189,455],{"class":228},[79,161191,775],{"class":96},[79,161193,1020],{"class":228},[79,161195,2587],{"class":96},[79,161197,932],{"class":228},[79,161199,161200,161202,161204,161206,161208],{"class":81,"line":167},[79,161201,5176],{"class":448},[79,161203,11493],{"class":228},[79,161205,5025],{"class":448},[79,161207,80058],{"class":96},[79,161209,745],{"class":228},[79,161211,161212],{"class":81,"line":178},[79,161213,33628],{"class":448},[79,161215,161216,161218],{"class":81,"line":545},[79,161217,1161],{"class":96},[79,161219,160863],{"class":228},[19,161221,148090],{},[51,161223,161226],{"className":161224,"code":161225,"language":56,"meta":57},[54],"1\n2\n",[59,161227,161225],{"__ignoreMap":57},[339,161229,161231],{"id":161230},"_452-continue","4.5.2 continue",[19,161233,161234,161236],{},[59,161235,156305],{}," 跳过本轮剩余代码，进入下一轮循环。",[51,161238,161240],{"className":439,"code":161239,"language":441,"meta":57,"style":57},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[59,161241,161242,161262,161274,161278],{"__ignoreMap":57},[79,161243,161244,161246,161248,161250,161252,161254,161256,161258,161260],{"class":81,"line":82},[79,161245,1638],{"class":448},[79,161247,11493],{"class":228},[79,161249,921],{"class":448},[79,161251,924],{"class":96},[79,161253,455],{"class":228},[79,161255,775],{"class":96},[79,161257,1020],{"class":228},[79,161259,2587],{"class":96},[79,161261,932],{"class":228},[79,161263,161264,161266,161268,161270,161272],{"class":81,"line":167},[79,161265,5176],{"class":448},[79,161267,11493],{"class":228},[79,161269,5025],{"class":448},[79,161271,80058],{"class":96},[79,161273,745],{"class":228},[79,161275,161276],{"class":81,"line":178},[79,161277,150145],{"class":448},[79,161279,161280,161282],{"class":81,"line":545},[79,161281,1161],{"class":96},[79,161283,160863],{"class":228},[19,161285,148090],{},[51,161287,161290],{"className":161288,"code":161289,"language":56,"meta":57},[54],"1\n2\n4\n5\n",[59,161291,161289],{"__ignoreMap":57},[14,161293,161295],{"id":161294},"_46-for循环","4.6 for循环",[19,161297,161298,161300],{},[59,161299,1638],{}," 常用于遍历序列。",[51,161302,161304],{"className":439,"code":161303,"language":441,"meta":57,"style":57},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[59,161305,161306,161315,161319,161330],{"__ignoreMap":57},[79,161307,161308,161310,161312],{"class":81,"line":82},[79,161309,148169],{"class":228},[79,161311,239],{"class":448},[79,161313,161314],{"class":89}," \"python\"\n",[79,161316,161317],{"class":81,"line":167},[79,161318,542],{"emptyLinePlaceholder":541},[79,161320,161321,161323,161326,161328],{"class":81,"line":178},[79,161322,1638],{"class":448},[79,161324,161325],{"class":228}," ch ",[79,161327,921],{"class":448},[79,161329,160032],{"class":228},[79,161331,161332,161334],{"class":81,"line":545},[79,161333,1161],{"class":96},[79,161335,161336],{"class":228},"(ch)\n",[19,161338,161339],{},"遍历列表：",[51,161341,161343],{"className":439,"code":161342,"language":441,"meta":57,"style":57},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[59,161344,161345,161367,161371,161381],{"__ignoreMap":57},[79,161346,161347,161350,161352,161354,161356,161358,161360,161362,161365],{"class":81,"line":82},[79,161348,161349],{"class":228},"students ",[79,161351,239],{"class":448},[79,161353,54220],{"class":228},[79,161355,151521],{"class":89},[79,161357,1020],{"class":228},[79,161359,152569],{"class":89},[79,161361,1020],{"class":228},[79,161363,161364],{"class":89},"\"小刚\"",[79,161366,762],{"class":228},[79,161368,161369],{"class":81,"line":167},[79,161370,542],{"emptyLinePlaceholder":541},[79,161372,161373,161375,161377,161379],{"class":81,"line":178},[79,161374,1638],{"class":448},[79,161376,153770],{"class":228},[79,161378,921],{"class":448},[79,161380,153775],{"class":228},[79,161382,161383,161385],{"class":81,"line":545},[79,161384,1161],{"class":96},[79,161386,151675],{"class":228},[14,161388,161390],{"id":161389},"_47-range函数","4.7 range函数",[19,161392,161393,161396],{},[59,161394,161395],{},"range()"," 用于生成整数序列。",[51,161398,161400],{"className":439,"code":161399,"language":441,"meta":57,"style":57},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[59,161401,161402,161416,161434],{"__ignoreMap":57},[79,161403,161404,161406,161408,161410,161413],{"class":81,"line":82},[79,161405,35413],{"class":96},[79,161407,455],{"class":228},[79,161409,2563],{"class":96},[79,161411,161412],{"class":228},")          ",[79,161414,161415],{"class":2313},"# 0,1,2,3,4\n",[79,161417,161418,161420,161422,161424,161426,161428,161431],{"class":81,"line":167},[79,161419,35413],{"class":96},[79,161421,455],{"class":228},[79,161423,775],{"class":96},[79,161425,1020],{"class":228},[79,161427,2563],{"class":96},[79,161429,161430],{"class":228},")       ",[79,161432,161433],{"class":2313},"# 1,2,3,4\n",[79,161435,161436,161438,161440,161442,161444,161446,161448,161450,161452],{"class":81,"line":178},[79,161437,35413],{"class":96},[79,161439,455],{"class":228},[79,161441,775],{"class":96},[79,161443,1020],{"class":228},[79,161445,2689],{"class":96},[79,161447,1020],{"class":228},[79,161449,2331],{"class":96},[79,161451,157294],{"class":228},[79,161453,161454],{"class":2313},"# 1,3,5,7,9\n",[19,161456,161457,161458,26638],{},"配合 ",[59,161459,1638],{},[51,161461,161463],{"className":439,"code":161462,"language":441,"meta":57,"style":57},"for i in range(1, 6):\n    print(i)\n",[59,161464,161465,161485],{"__ignoreMap":57},[79,161466,161467,161469,161471,161473,161475,161477,161479,161481,161483],{"class":81,"line":82},[79,161468,1638],{"class":448},[79,161470,11493],{"class":228},[79,161472,921],{"class":448},[79,161474,924],{"class":96},[79,161476,455],{"class":228},[79,161478,775],{"class":96},[79,161480,1020],{"class":228},[79,161482,2587],{"class":96},[79,161484,932],{"class":228},[79,161486,161487,161489],{"class":81,"line":167},[79,161488,1161],{"class":96},[79,161490,160863],{"class":228},[19,161492,11080,161493,161495],{},[59,161494,35413],{}," 的结束值不包含在内。",[14,161497,161499],{"id":161498},"_48-for循环求和","4.8 for循环求和",[51,161501,161503],{"className":439,"code":161502,"language":441,"meta":57,"style":57},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[59,161504,161505,161513,161517,161537,161545,161549],{"__ignoreMap":57},[79,161506,161507,161509,161511],{"class":81,"line":82},[79,161508,158893],{"class":228},[79,161510,239],{"class":448},[79,161512,49328],{"class":96},[79,161514,161515],{"class":81,"line":167},[79,161516,542],{"emptyLinePlaceholder":541},[79,161518,161519,161521,161523,161525,161527,161529,161531,161533,161535],{"class":81,"line":178},[79,161520,1638],{"class":448},[79,161522,11493],{"class":228},[79,161524,921],{"class":448},[79,161526,924],{"class":96},[79,161528,455],{"class":228},[79,161530,775],{"class":96},[79,161532,1020],{"class":228},[79,161534,2580],{"class":96},[79,161536,932],{"class":228},[79,161538,161539,161541,161543],{"class":81,"line":545},[79,161540,160940],{"class":228},[79,161542,1075],{"class":448},[79,161544,160945],{"class":228},[79,161546,161547],{"class":81,"line":550},[79,161548,542],{"emptyLinePlaceholder":541},[79,161550,161551,161553],{"class":81,"line":562},[79,161552,1889],{"class":96},[79,161554,160964],{"class":228},[19,161556,161557],{},"求偶数和：",[51,161559,161561],{"className":439,"code":161560,"language":441,"meta":57,"style":57},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[59,161562,161563,161571,161575,161595,161611,161620,161624],{"__ignoreMap":57},[79,161564,161565,161567,161569],{"class":81,"line":82},[79,161566,158893],{"class":228},[79,161568,239],{"class":448},[79,161570,49328],{"class":96},[79,161572,161573],{"class":81,"line":167},[79,161574,542],{"emptyLinePlaceholder":541},[79,161576,161577,161579,161581,161583,161585,161587,161589,161591,161593],{"class":81,"line":178},[79,161578,1638],{"class":448},[79,161580,11493],{"class":228},[79,161582,921],{"class":448},[79,161584,924],{"class":96},[79,161586,455],{"class":228},[79,161588,775],{"class":96},[79,161590,1020],{"class":228},[79,161592,2580],{"class":96},[79,161594,932],{"class":228},[79,161596,161597,161599,161601,161603,161605,161607,161609],{"class":81,"line":545},[79,161598,5176],{"class":448},[79,161600,11493],{"class":228},[79,161602,1094],{"class":448},[79,161604,16788],{"class":96},[79,161606,1100],{"class":448},[79,161608,1103],{"class":96},[79,161610,745],{"class":228},[79,161612,161613,161616,161618],{"class":81,"line":550},[79,161614,161615],{"class":228},"        total ",[79,161617,1075],{"class":448},[79,161619,160945],{"class":228},[79,161621,161622],{"class":81,"line":562},[79,161623,542],{"emptyLinePlaceholder":541},[79,161625,161626,161628],{"class":81,"line":568},[79,161627,1889],{"class":96},[79,161629,160964],{"class":228},[19,161631,161632],{},"也可以：",[51,161634,161636],{"className":439,"code":161635,"language":441,"meta":57,"style":57},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[59,161637,161638,161646,161650,161674,161682,161686],{"__ignoreMap":57},[79,161639,161640,161642,161644],{"class":81,"line":82},[79,161641,158893],{"class":228},[79,161643,239],{"class":448},[79,161645,49328],{"class":96},[79,161647,161648],{"class":81,"line":167},[79,161649,542],{"emptyLinePlaceholder":541},[79,161651,161652,161654,161656,161658,161660,161662,161664,161666,161668,161670,161672],{"class":81,"line":178},[79,161653,1638],{"class":448},[79,161655,11493],{"class":228},[79,161657,921],{"class":448},[79,161659,924],{"class":96},[79,161661,455],{"class":228},[79,161663,2331],{"class":96},[79,161665,1020],{"class":228},[79,161667,2580],{"class":96},[79,161669,1020],{"class":228},[79,161671,2331],{"class":96},[79,161673,932],{"class":228},[79,161675,161676,161678,161680],{"class":81,"line":545},[79,161677,160940],{"class":228},[79,161679,1075],{"class":448},[79,161681,160945],{"class":228},[79,161683,161684],{"class":81,"line":550},[79,161685,542],{"emptyLinePlaceholder":541},[79,161687,161688,161690],{"class":81,"line":562},[79,161689,1889],{"class":96},[79,161691,160964],{"class":228},[14,161693,161695],{"id":161694},"_49-循环嵌套","4.9 循环嵌套",[19,161697,161698],{},"嵌套循环就是循环里面再写循环。",[51,161700,161702],{"className":439,"code":161701,"language":441,"meta":57,"style":57},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[59,161703,161704,161724,161744],{"__ignoreMap":57},[79,161705,161706,161708,161710,161712,161714,161716,161718,161720,161722],{"class":81,"line":82},[79,161707,1638],{"class":448},[79,161709,11493],{"class":228},[79,161711,921],{"class":448},[79,161713,924],{"class":96},[79,161715,455],{"class":228},[79,161717,775],{"class":96},[79,161719,1020],{"class":228},[79,161721,2537],{"class":96},[79,161723,932],{"class":228},[79,161725,161726,161728,161730,161732,161734,161736,161738,161740,161742],{"class":81,"line":167},[79,161727,915],{"class":448},[79,161729,11554],{"class":228},[79,161731,921],{"class":448},[79,161733,924],{"class":96},[79,161735,455],{"class":228},[79,161737,775],{"class":96},[79,161739,1020],{"class":228},[79,161741,2537],{"class":96},[79,161743,932],{"class":228},[79,161745,161746,161748,161750,161752,161755,161757,161759,161761,161764,161766,161768,161770,161772],{"class":81,"line":178},[79,161747,34449],{"class":96},[79,161749,455],{"class":228},[79,161751,2307],{"class":448},[79,161753,161754],{"class":89},"\"i=",[79,161756,3136],{"class":96},[79,161758,2684],{"class":228},[79,161760,3185],{"class":96},[79,161762,161763],{"class":89},", j=",[79,161765,3136],{"class":96},[79,161767,2709],{"class":228},[79,161769,3185],{"class":96},[79,161771,2495],{"class":89},[79,161773,850],{"class":228},[19,161775,161776],{},"外层循环执行一次，内层循环执行完整一轮。",[14,161778,161780],{"id":161779},"_410-九九乘法表","4.10 九九乘法表",[51,161782,161784],{"className":439,"code":161783,"language":441,"meta":57,"style":57},"for i in range(1, 10):\n    for j in range(1, i + 1):\n        print(f\"{j}*{i}={i * j}\", end=\"\\t\")\n    print()\n",[59,161785,161786,161806,161829,161881],{"__ignoreMap":57},[79,161787,161788,161790,161792,161794,161796,161798,161800,161802,161804],{"class":81,"line":82},[79,161789,1638],{"class":448},[79,161791,11493],{"class":228},[79,161793,921],{"class":448},[79,161795,924],{"class":96},[79,161797,455],{"class":228},[79,161799,775],{"class":96},[79,161801,1020],{"class":228},[79,161803,2689],{"class":96},[79,161805,932],{"class":228},[79,161807,161808,161810,161812,161814,161816,161818,161820,161823,161825,161827],{"class":81,"line":167},[79,161809,915],{"class":448},[79,161811,11554],{"class":228},[79,161813,921],{"class":448},[79,161815,924],{"class":96},[79,161817,455],{"class":228},[79,161819,775],{"class":96},[79,161821,161822],{"class":228},", i ",[79,161824,995],{"class":448},[79,161826,27137],{"class":96},[79,161828,932],{"class":228},[79,161830,161831,161833,161835,161837,161839,161841,161843,161845,161847,161849,161851,161853,161855,161857,161859,161861,161863,161865,161867,161869,161871,161873,161875,161877,161879],{"class":81,"line":178},[79,161832,34449],{"class":96},[79,161834,455],{"class":228},[79,161836,2307],{"class":448},[79,161838,2495],{"class":89},[79,161840,3136],{"class":96},[79,161842,2709],{"class":228},[79,161844,3185],{"class":96},[79,161846,473],{"class":89},[79,161848,3136],{"class":96},[79,161850,2684],{"class":228},[79,161852,3185],{"class":96},[79,161854,239],{"class":89},[79,161856,3136],{"class":96},[79,161858,102133],{"class":228},[79,161860,473],{"class":448},[79,161862,5484],{"class":228},[79,161864,3185],{"class":96},[79,161866,2495],{"class":89},[79,161868,1020],{"class":228},[79,161870,47796],{"class":7284},[79,161872,239],{"class":448},[79,161874,2495],{"class":89},[79,161876,3340],{"class":96},[79,161878,2495],{"class":89},[79,161880,850],{"class":228},[79,161882,161883,161885],{"class":81,"line":545},[79,161884,1161],{"class":96},[79,161886,4061],{"class":228},[19,161888,161889],{},"关键点：",[26,161891,161892,161898,161904,161910],{},[29,161893,161894,161895,161897],{},"外层 ",[59,161896,2684],{}," 控制行。",[29,161899,161900,161901,161903],{},"内层 ",[59,161902,2709],{}," 控制列。",[29,161905,161906,161907,161909],{},"每行结束后用 ",[59,161908,148105],{}," 换行。",[29,161911,161912,161915],{},[59,161913,161914],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,161917,161919],{"id":161918},"_411-循环else","4.11 循环else",[19,161921,161922,161923,161925,161926,161928,161929,161931],{},"Python 的循环可以带 ",[59,161924,3796],{},"。当循环正常结束时执行 ",[59,161927,3796],{},"，如果被 ",[59,161930,4138],{}," 打断，则不执行。",[51,161933,161935],{"className":439,"code":161934,"language":441,"meta":57,"style":57},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[59,161936,161937,161957,161969,161980,161984,161990],{"__ignoreMap":57},[79,161938,161939,161941,161943,161945,161947,161949,161951,161953,161955],{"class":81,"line":82},[79,161940,1638],{"class":448},[79,161942,11493],{"class":228},[79,161944,921],{"class":448},[79,161946,924],{"class":96},[79,161948,455],{"class":228},[79,161950,775],{"class":96},[79,161952,1020],{"class":228},[79,161954,2587],{"class":96},[79,161956,932],{"class":228},[79,161958,161959,161961,161963,161965,161967],{"class":81,"line":167},[79,161960,5176],{"class":448},[79,161962,11493],{"class":228},[79,161964,5025],{"class":448},[79,161966,4123],{"class":96},[79,161968,745],{"class":228},[79,161970,161971,161973,161975,161978],{"class":81,"line":178},[79,161972,34449],{"class":96},[79,161974,455],{"class":228},[79,161976,161977],{"class":89},"\"找到了\"",[79,161979,850],{"class":228},[79,161981,161982],{"class":81,"line":545},[79,161983,33628],{"class":448},[79,161985,161986,161988],{"class":81,"line":550},[79,161987,3796],{"class":448},[79,161989,745],{"class":228},[79,161991,161992,161994,161996,161999],{"class":81,"line":562},[79,161993,1161],{"class":96},[79,161995,455],{"class":228},[79,161997,161998],{"class":89},"\"没找到\"",[79,162000,850],{"class":228},[19,162002,162003],{},"常用于搜索。",[51,162005,162007],{"className":439,"code":162006,"language":441,"meta":57,"style":57},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[59,162008,162009,162030,162039,162043,162055,162066,162076,162080,162086],{"__ignoreMap":57},[79,162010,162011,162014,162016,162018,162020,162022,162024,162026,162028],{"class":81,"line":82},[79,162012,162013],{"class":228},"names ",[79,162015,239],{"class":448},[79,162017,54220],{"class":228},[79,162019,151521],{"class":89},[79,162021,1020],{"class":228},[79,162023,152569],{"class":89},[79,162025,1020],{"class":228},[79,162027,161364],{"class":89},[79,162029,762],{"class":228},[79,162031,162032,162034,162036],{"class":81,"line":167},[79,162033,113211],{"class":228},[79,162035,239],{"class":448},[79,162037,162038],{"class":89}," \"小李\"\n",[79,162040,162041],{"class":81,"line":178},[79,162042,542],{"emptyLinePlaceholder":541},[79,162044,162045,162047,162050,162052],{"class":81,"line":545},[79,162046,1638],{"class":448},[79,162048,162049],{"class":228}," name ",[79,162051,921],{"class":448},[79,162053,162054],{"class":228}," names:\n",[79,162056,162057,162059,162061,162063],{"class":81,"line":550},[79,162058,5176],{"class":448},[79,162060,162049],{"class":228},[79,162062,5025],{"class":448},[79,162064,162065],{"class":228}," target:\n",[79,162067,162068,162070,162072,162074],{"class":81,"line":562},[79,162069,34449],{"class":96},[79,162071,455],{"class":228},[79,162073,161977],{"class":89},[79,162075,850],{"class":228},[79,162077,162078],{"class":81,"line":568},[79,162079,33628],{"class":448},[79,162081,162082,162084],{"class":81,"line":574},[79,162083,3796],{"class":448},[79,162085,745],{"class":228},[79,162087,162088,162090,162092,162094],{"class":81,"line":579},[79,162089,1161],{"class":96},[79,162091,455],{"class":228},[79,162093,161998],{"class":89},[79,162095,850],{"class":228},[14,162097,162099],{"id":162098},"_412-小案例登录重试","4.12 小案例：登录重试",[19,162101,124925],{},[26,162103,162104,162107,162110],{},[29,162105,162106],{},"用户最多输入 3 次密码。",[29,162108,162109],{},"密码正确则登录成功。",[29,162111,162112],{},"3 次都错误则锁定账号。",[19,162114,12070],{},[51,162116,162118],{"className":439,"code":162117,"language":441,"meta":57,"style":57},"password = \"123456\"\n\nfor i in range(3):\n    user_password = input(\"请输入密码:\")\n\n    if user_password == password:\n        print(\"登录成功\")\n        break\n    else:\n        print(f\"密码错误，还剩{2 - i}次机会\")\nelse:\n    print(\"账号已锁定\")\n",[59,162119,162120,162130,162134,162150,162166,162170,162182,162193,162197,162203,162228,162234],{"__ignoreMap":57},[79,162121,162122,162125,162127],{"class":81,"line":82},[79,162123,162124],{"class":228},"password ",[79,162126,239],{"class":448},[79,162128,162129],{"class":89}," \"123456\"\n",[79,162131,162132],{"class":81,"line":167},[79,162133,542],{"emptyLinePlaceholder":541},[79,162135,162136,162138,162140,162142,162144,162146,162148],{"class":81,"line":178},[79,162137,1638],{"class":448},[79,162139,11493],{"class":228},[79,162141,921],{"class":448},[79,162143,924],{"class":96},[79,162145,455],{"class":228},[79,162147,970],{"class":96},[79,162149,932],{"class":228},[79,162151,162152,162155,162157,162159,162161,162164],{"class":81,"line":545},[79,162153,162154],{"class":228},"    user_password ",[79,162156,239],{"class":448},[79,162158,62594],{"class":96},[79,162160,455],{"class":228},[79,162162,162163],{"class":89},"\"请输入密码:\"",[79,162165,850],{"class":228},[79,162167,162168],{"class":81,"line":550},[79,162169,542],{"emptyLinePlaceholder":541},[79,162171,162172,162174,162177,162179],{"class":81,"line":562},[79,162173,5176],{"class":448},[79,162175,162176],{"class":228}," user_password ",[79,162178,5025],{"class":448},[79,162180,162181],{"class":228}," password:\n",[79,162183,162184,162186,162188,162191],{"class":81,"line":568},[79,162185,34449],{"class":96},[79,162187,455],{"class":228},[79,162189,162190],{"class":89},"\"登录成功\"",[79,162192,850],{"class":228},[79,162194,162195],{"class":81,"line":574},[79,162196,33628],{"class":448},[79,162198,162199,162201],{"class":81,"line":579},[79,162200,159655],{"class":448},[79,162202,745],{"class":228},[79,162204,162205,162207,162209,162211,162214,162217,162219,162221,162223,162226],{"class":81,"line":585},[79,162206,34449],{"class":96},[79,162208,455],{"class":228},[79,162210,2307],{"class":448},[79,162212,162213],{"class":89},"\"密码错误，还剩",[79,162215,162216],{"class":96},"{2",[79,162218,461],{"class":448},[79,162220,5107],{"class":228},[79,162222,3185],{"class":96},[79,162224,162225],{"class":89},"次机会\"",[79,162227,850],{"class":228},[79,162229,162230,162232],{"class":81,"line":591},[79,162231,3796],{"class":448},[79,162233,745],{"class":228},[79,162235,162236,162238,162240,162243],{"class":81,"line":596},[79,162237,1161],{"class":96},[79,162239,455],{"class":228},[79,162241,162242],{"class":89},"\"账号已锁定\"",[79,162244,850],{"class":228},[14,162246,162248],{"id":162247},"_413-小案例菜单程序","4.13 小案例：菜单程序",[51,162250,162252],{"className":439,"code":162251,"language":441,"meta":57,"style":57},"while True:\n    print(\"====== 菜单 ======\")\n    print(\"1. 查询余额\")\n    print(\"2. 存款\")\n    print(\"3. 取款\")\n    print(\"0. 退出\")\n\n    choice = input(\"请输入操作:\")\n\n    if choice == \"1\":\n        print(\"余额为1000元\")\n    elif choice == \"2\":\n        print(\"存款功能\")\n    elif choice == \"3\":\n        print(\"取款功能\")\n    elif choice == \"0\":\n        print(\"退出系统\")\n        break\n    else:\n        print(\"输入错误\")\n",[59,162253,162254,162262,162273,162284,162295,162306,162317,162321,162336,162340,162352,162363,162375,162386,162398,162409,162421,162431,162435,162441],{"__ignoreMap":57},[79,162255,162256,162258,162260],{"class":81,"line":82},[79,162257,110550],{"class":448},[79,162259,97279],{"class":96},[79,162261,745],{"class":228},[79,162263,162264,162266,162268,162271],{"class":81,"line":167},[79,162265,1161],{"class":96},[79,162267,455],{"class":228},[79,162269,162270],{"class":89},"\"====== 菜单 ======\"",[79,162272,850],{"class":228},[79,162274,162275,162277,162279,162282],{"class":81,"line":178},[79,162276,1161],{"class":96},[79,162278,455],{"class":228},[79,162280,162281],{"class":89},"\"1. 查询余额\"",[79,162283,850],{"class":228},[79,162285,162286,162288,162290,162293],{"class":81,"line":545},[79,162287,1161],{"class":96},[79,162289,455],{"class":228},[79,162291,162292],{"class":89},"\"2. 存款\"",[79,162294,850],{"class":228},[79,162296,162297,162299,162301,162304],{"class":81,"line":550},[79,162298,1161],{"class":96},[79,162300,455],{"class":228},[79,162302,162303],{"class":89},"\"3. 取款\"",[79,162305,850],{"class":228},[79,162307,162308,162310,162312,162315],{"class":81,"line":562},[79,162309,1161],{"class":96},[79,162311,455],{"class":228},[79,162313,162314],{"class":89},"\"0. 退出\"",[79,162316,850],{"class":228},[79,162318,162319],{"class":81,"line":568},[79,162320,542],{"emptyLinePlaceholder":541},[79,162322,162323,162326,162328,162330,162332,162334],{"class":81,"line":574},[79,162324,162325],{"class":228},"    choice ",[79,162327,239],{"class":448},[79,162329,62594],{"class":96},[79,162331,455],{"class":228},[79,162333,154706],{"class":89},[79,162335,850],{"class":228},[79,162337,162338],{"class":81,"line":579},[79,162339,542],{"emptyLinePlaceholder":541},[79,162341,162342,162344,162346,162348,162350],{"class":81,"line":585},[79,162343,5176],{"class":448},[79,162345,154719],{"class":228},[79,162347,5025],{"class":448},[79,162349,154724],{"class":89},[79,162351,745],{"class":228},[79,162353,162354,162356,162358,162361],{"class":81,"line":591},[79,162355,34449],{"class":96},[79,162357,455],{"class":228},[79,162359,162360],{"class":89},"\"余额为1000元\"",[79,162362,850],{"class":228},[79,162364,162365,162367,162369,162371,162373],{"class":81,"line":596},[79,162366,41288],{"class":448},[79,162368,154719],{"class":228},[79,162370,5025],{"class":448},[79,162372,154743],{"class":89},[79,162374,745],{"class":228},[79,162376,162377,162379,162381,162384],{"class":81,"line":602},[79,162378,34449],{"class":96},[79,162380,455],{"class":228},[79,162382,162383],{"class":89},"\"存款功能\"",[79,162385,850],{"class":228},[79,162387,162388,162390,162392,162394,162396],{"class":81,"line":608},[79,162389,41288],{"class":448},[79,162391,154719],{"class":228},[79,162393,5025],{"class":448},[79,162395,154761],{"class":89},[79,162397,745],{"class":228},[79,162399,162400,162402,162404,162407],{"class":81,"line":614},[79,162401,34449],{"class":96},[79,162403,455],{"class":228},[79,162405,162406],{"class":89},"\"取款功能\"",[79,162408,850],{"class":228},[79,162410,162411,162413,162415,162417,162419],{"class":81,"line":619},[79,162412,41288],{"class":448},[79,162414,154719],{"class":228},[79,162416,5025],{"class":448},[79,162418,154815],{"class":89},[79,162420,745],{"class":228},[79,162422,162423,162425,162427,162429],{"class":81,"line":625},[79,162424,34449],{"class":96},[79,162426,455],{"class":228},[79,162428,154826],{"class":89},[79,162430,850],{"class":228},[79,162432,162433],{"class":81,"line":631},[79,162434,33628],{"class":448},[79,162436,162437,162439],{"class":81,"line":637},[79,162438,159655],{"class":448},[79,162440,745],{"class":228},[79,162442,162443,162445,162447,162449],{"class":81,"line":643},[79,162444,34449],{"class":96},[79,162446,455],{"class":228},[79,162448,154847],{"class":89},[79,162450,850],{"class":228},[19,162452,162453,162454,162456,162457,497],{},"菜单类程序通常使用 ",[59,162455,161155],{},"，用户选择退出时 ",[59,162458,4138],{},[14,162460,162462],{"id":162461},"_414-易错点","4.14 易错点",[26,162464,162465,162470,162476,162484,162490],{},[29,162466,162467,162469],{},[59,162468,110550],{}," 循环必须更新控制变量。",[29,162471,162472,162475],{},[59,162473,162474],{},"range(1, 10)"," 不包含 10。",[29,162477,162478,162480,162481,162483],{},[59,162479,4138],{}," 结束整个循环，",[59,162482,156305],{}," 只跳过本轮。",[29,162485,162486,162487,162489],{},"嵌套循环中，",[59,162488,4138],{}," 只跳出当前所在的一层循环。",[29,162491,162492],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,162494,162496],{"id":162495},"_415-本章练习","4.15 本章练习",[26,162498,162499,162502,162505,162508,162511],{},[29,162500,162501],{},"输出 1 到 100。",[29,162503,162504],{},"计算 1 到 100 的偶数和。",[29,162506,162507],{},"输出 100 以内能被 3 和 5 同时整除的数。",[29,162509,162510],{},"编写猜数字游戏，限制最多猜 7 次。",[29,162512,162513],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[2159,162515,162516],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":57,"searchDepth":167,"depth":167,"links":162518},[162519,162520,162521,162522,162523,162527,162528,162529,162530,162531,162532,162533,162534,162535,162536],{"id":160775,"depth":167,"text":160776},{"id":160805,"depth":167,"text":160806},{"id":160894,"depth":167,"text":160895},{"id":160988,"depth":167,"text":160989},{"id":161162,"depth":167,"text":161163,"children":162524},[162525,162526],{"id":161166,"depth":178,"text":161167},{"id":161230,"depth":178,"text":161231},{"id":161294,"depth":167,"text":161295},{"id":161389,"depth":167,"text":161390},{"id":161498,"depth":167,"text":161499},{"id":161694,"depth":167,"text":161695},{"id":161779,"depth":167,"text":161780},{"id":161918,"depth":167,"text":161919},{"id":162098,"depth":167,"text":162099},{"id":162247,"depth":167,"text":162248},{"id":162461,"depth":167,"text":162462},{"id":162495,"depth":167,"text":162496},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":160767,"description":25402},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":162543,"title":162544,"body":162545,"description":25402,"extension":2186,"meta":164550,"navigation":541,"path":164551,"seo":164552,"stem":164553,"__hash__":164554},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":162546,"toc":164530},[162547,162550,162554,162557,162560,162574,162577,162591,162595,162597,162616,162618,162665,162667,162681,162685,162759,162762,162766,162769,162828,162836,162839,162892,162895,162899,162904,162959,162967,163017,163021,163026,163034,163133,163139,163143,163148,163151,163162,163203,163216,163220,163223,163259,163262,163275,163278,163338,163342,163346,163349,163400,163404,163407,163454,163460,163526,163529,163533,163536,163652,163655,163659,163662,163768,163772,163775,163813,163816,163858,163861,163921,163924,163928,164392,164395,164399,164426,164432,164493,164497,164527],[10,162548,162544],{"id":162549},"_5-函数基础",[14,162551,162553],{"id":162552},"_51-为什么需要函数","5.1 为什么需要函数",[19,162555,162556],{},"函数用于封装一段可以重复使用的代码。",[19,162558,162559],{},"不使用函数的问题：",[26,162561,162562,162565,162568,162571],{},[29,162563,162564],{},"重复代码多。",[29,162566,162567],{},"修改逻辑时容易漏改。",[29,162569,162570],{},"主流程不清晰。",[29,162572,162573],{},"程序越写越长，难以维护。",[19,162575,162576],{},"使用函数后的好处：",[26,162578,162579,162582,162585,162588],{},[29,162580,162581],{},"提高复用性。",[29,162583,162584],{},"提高可读性。",[29,162586,162587],{},"便于调试。",[29,162589,162590],{},"便于分工。",[14,162592,162594],{"id":162593},"_52-函数定义","5.2 函数定义",[19,162596,7251],{},[51,162598,162600],{"className":439,"code":162599,"language":441,"meta":57,"style":57},"def 函数名():\n    函数体\n",[59,162601,162602,162611],{"__ignoreMap":57},[79,162603,162604,162606,162609],{"class":81,"line":82},[79,162605,703],{"class":448},[79,162607,162608],{"class":85}," 函数名",[79,162610,33953],{"class":228},[79,162612,162613],{"class":81,"line":167},[79,162614,162615],{"class":228},"    函数体\n",[19,162617,17167],{},[51,162619,162621],{"className":439,"code":162620,"language":441,"meta":57,"style":57},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[59,162622,162623,162632,162642,162652,162656,162660],{"__ignoreMap":57},[79,162624,162625,162627,162630],{"class":81,"line":82},[79,162626,703],{"class":448},[79,162628,162629],{"class":85}," say_hello",[79,162631,33953],{"class":228},[79,162633,162634,162636,162638,162640],{"class":81,"line":167},[79,162635,1161],{"class":96},[79,162637,455],{"class":228},[79,162639,7911],{"class":89},[79,162641,850],{"class":228},[79,162643,162644,162646,162648,162650],{"class":81,"line":178},[79,162645,1161],{"class":96},[79,162647,455],{"class":228},[79,162649,148272],{"class":89},[79,162651,850],{"class":228},[79,162653,162654],{"class":81,"line":545},[79,162655,542],{"emptyLinePlaceholder":541},[79,162657,162658],{"class":81,"line":550},[79,162659,542],{"emptyLinePlaceholder":541},[79,162661,162662],{"class":81,"line":562},[79,162663,162664],{"class":228},"say_hello()\n",[19,162666,11080],{},[26,162668,162669,162672,162675,162678],{},[29,162670,162671],{},"函数必须先定义，再调用。",[29,162673,162674],{},"函数名遵循变量命名规则。",[29,162676,162677],{},"函数体需要缩进。",[29,162679,162680],{},"函数不调用就不会执行。",[14,162682,162684],{"id":162683},"_53-函数调用","5.3 函数调用",[51,162686,162688],{"className":439,"code":162687,"language":441,"meta":57,"style":57},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[59,162689,162690,162699,162710,162721,162732,162742,162746,162750,162755],{"__ignoreMap":57},[79,162691,162692,162694,162697],{"class":81,"line":82},[79,162693,703],{"class":448},[79,162695,162696],{"class":85}," print_menu",[79,162698,33953],{"class":228},[79,162700,162701,162703,162705,162708],{"class":81,"line":167},[79,162702,1161],{"class":96},[79,162704,455],{"class":228},[79,162706,162707],{"class":89},"\"1. 查询\"",[79,162709,850],{"class":228},[79,162711,162712,162714,162716,162719],{"class":81,"line":178},[79,162713,1161],{"class":96},[79,162715,455],{"class":228},[79,162717,162718],{"class":89},"\"2. 添加\"",[79,162720,850],{"class":228},[79,162722,162723,162725,162727,162730],{"class":81,"line":545},[79,162724,1161],{"class":96},[79,162726,455],{"class":228},[79,162728,162729],{"class":89},"\"3. 删除\"",[79,162731,850],{"class":228},[79,162733,162734,162736,162738,162740],{"class":81,"line":550},[79,162735,1161],{"class":96},[79,162737,455],{"class":228},[79,162739,162314],{"class":89},[79,162741,850],{"class":228},[79,162743,162744],{"class":81,"line":562},[79,162745,542],{"emptyLinePlaceholder":541},[79,162747,162748],{"class":81,"line":568},[79,162749,542],{"emptyLinePlaceholder":541},[79,162751,162752],{"class":81,"line":574},[79,162753,162754],{"class":228},"print_menu()\n",[79,162756,162757],{"class":81,"line":579},[79,162758,162754],{"class":228},[19,162760,162761],{},"函数可以多次调用，每次调用都会执行函数体。",[14,162763,162765],{"id":162764},"_54-参数","5.4 参数",[19,162767,162768],{},"参数用于向函数传递数据。",[51,162770,162772],{"className":439,"code":162771,"language":441,"meta":57,"style":57},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[59,162773,162774,162783,162803,162807,162811,162820],{"__ignoreMap":57},[79,162775,162776,162778,162780],{"class":81,"line":82},[79,162777,703],{"class":448},[79,162779,162629],{"class":85},[79,162781,162782],{"class":228},"(name):\n",[79,162784,162785,162787,162789,162791,162793,162795,162797,162799,162801],{"class":81,"line":167},[79,162786,1161],{"class":96},[79,162788,455],{"class":228},[79,162790,2307],{"class":448},[79,162792,158687],{"class":89},[79,162794,3136],{"class":96},[79,162796,81798],{"class":228},[79,162798,3185],{"class":96},[79,162800,2495],{"class":89},[79,162802,850],{"class":228},[79,162804,162805],{"class":81,"line":178},[79,162806,542],{"emptyLinePlaceholder":541},[79,162808,162809],{"class":81,"line":545},[79,162810,542],{"emptyLinePlaceholder":541},[79,162812,162813,162816,162818],{"class":81,"line":550},[79,162814,162815],{"class":228},"say_hello(",[79,162817,151521],{"class":89},[79,162819,850],{"class":228},[79,162821,162822,162824,162826],{"class":81,"line":562},[79,162823,162815],{"class":228},[79,162825,152569],{"class":89},[79,162827,850],{"class":228},[19,162829,162830,162832,162833,162835],{},[59,162831,81798],{}," 是形参，",[59,162834,151521],{}," 是实参。",[19,162837,162838],{},"多个参数：",[51,162840,162842],{"className":439,"code":162841,"language":441,"meta":57,"style":57},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[59,162843,162844,162852,162865,162871,162875,162879],{"__ignoreMap":57},[79,162845,162846,162848,162850],{"class":81,"line":82},[79,162847,703],{"class":448},[79,162849,7277],{"class":85},[79,162851,152726],{"class":228},[79,162853,162854,162857,162859,162861,162863],{"class":81,"line":167},[79,162855,162856],{"class":228},"    result ",[79,162858,239],{"class":448},[79,162860,12904],{"class":228},[79,162862,995],{"class":448},[79,162864,152737],{"class":228},[79,162866,162867,162869],{"class":81,"line":178},[79,162868,1161],{"class":96},[79,162870,78573],{"class":228},[79,162872,162873],{"class":81,"line":545},[79,162874,542],{"emptyLinePlaceholder":541},[79,162876,162877],{"class":81,"line":550},[79,162878,542],{"emptyLinePlaceholder":541},[79,162880,162881,162884,162886,162888,162890],{"class":81,"line":562},[79,162882,162883],{"class":228},"add(",[79,162885,2689],{"class":96},[79,162887,1020],{"class":228},[79,162889,2940],{"class":96},[79,162891,850],{"class":228},[19,162893,162894],{},"调用时参数数量必须匹配。",[14,162896,162898],{"id":162897},"_55-返回值","5.5 返回值",[19,162900,162901,162903],{},[59,162902,449],{}," 用于把函数内部的结果返回给调用者。",[51,162905,162907],{"className":439,"code":162906,"language":441,"meta":57,"style":57},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[59,162908,162909,162917,162927,162931,162935,162953],{"__ignoreMap":57},[79,162910,162911,162913,162915],{"class":81,"line":82},[79,162912,703],{"class":448},[79,162914,7277],{"class":85},[79,162916,152726],{"class":228},[79,162918,162919,162921,162923,162925],{"class":81,"line":167},[79,162920,715],{"class":448},[79,162922,12904],{"class":228},[79,162924,995],{"class":448},[79,162926,152737],{"class":228},[79,162928,162929],{"class":81,"line":178},[79,162930,542],{"emptyLinePlaceholder":541},[79,162932,162933],{"class":81,"line":545},[79,162934,542],{"emptyLinePlaceholder":541},[79,162936,162937,162940,162942,162945,162947,162949,162951],{"class":81,"line":550},[79,162938,162939],{"class":228},"result ",[79,162941,239],{"class":448},[79,162943,162944],{"class":228}," add(",[79,162946,2689],{"class":96},[79,162948,1020],{"class":228},[79,162950,2940],{"class":96},[79,162952,850],{"class":228},[79,162954,162955,162957],{"class":81,"line":562},[79,162956,1889],{"class":96},[79,162958,78573],{"class":228},[19,162960,162961,162962,162964,162965,497],{},"如果函数没有写 ",[59,162963,449],{},"，默认返回 ",[59,162966,832],{},[51,162968,162970],{"className":439,"code":162969,"language":441,"meta":57,"style":57},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[59,162971,162972,162980,162990,162994,162998,163007],{"__ignoreMap":57},[79,162973,162974,162976,162978],{"class":81,"line":82},[79,162975,703],{"class":448},[79,162977,162629],{"class":85},[79,162979,33953],{"class":228},[79,162981,162982,162984,162986,162988],{"class":81,"line":167},[79,162983,1161],{"class":96},[79,162985,455],{"class":228},[79,162987,7911],{"class":89},[79,162989,850],{"class":228},[79,162991,162992],{"class":81,"line":178},[79,162993,542],{"emptyLinePlaceholder":541},[79,162995,162996],{"class":81,"line":545},[79,162997,542],{"emptyLinePlaceholder":541},[79,162999,163000,163002,163004],{"class":81,"line":550},[79,163001,162939],{"class":228},[79,163003,239],{"class":448},[79,163005,163006],{"class":228}," say_hello()\n",[79,163008,163009,163011,163014],{"class":81,"line":562},[79,163010,1889],{"class":96},[79,163012,163013],{"class":228},"(result)  ",[79,163015,163016],{"class":2313},"# None\n",[14,163018,163020],{"id":163019},"_56-return的作用","5.6 return的作用",[19,163022,163023,163025],{},[59,163024,449],{}," 有两个作用：",[26,163027,163028,163031],{},[29,163029,163030],{},"返回结果。",[29,163032,163033],{},"结束函数。",[51,163035,163037],{"className":439,"code":163036,"language":441,"meta":57,"style":57},"def check_age(age):\n    if age \u003C 0:\n        return \"年龄不合法\"\n\n    if age >= 18:\n        return \"成年人\"\n\n    return \"未成年人\"\n\n\nprint(check_age(20))\nprint(check_age(-1))\n",[59,163038,163039,163049,163061,163068,163072,163084,163091,163095,163102,163106,163110,163121],{"__ignoreMap":57},[79,163040,163041,163043,163046],{"class":81,"line":82},[79,163042,703],{"class":448},[79,163044,163045],{"class":85}," check_age",[79,163047,163048],{"class":228},"(age):\n",[79,163050,163051,163053,163055,163057,163059],{"class":81,"line":167},[79,163052,5176],{"class":448},[79,163054,17739],{"class":228},[79,163056,229],{"class":448},[79,163058,1103],{"class":96},[79,163060,745],{"class":228},[79,163062,163063,163065],{"class":81,"line":178},[79,163064,16785],{"class":448},[79,163066,163067],{"class":89}," \"年龄不合法\"\n",[79,163069,163070],{"class":81,"line":545},[79,163071,542],{"emptyLinePlaceholder":541},[79,163073,163074,163076,163078,163080,163082],{"class":81,"line":550},[79,163075,5176],{"class":448},[79,163077,17739],{"class":228},[79,163079,3805],{"class":448},[79,163081,157918],{"class":96},[79,163083,745],{"class":228},[79,163085,163086,163088],{"class":81,"line":562},[79,163087,16785],{"class":448},[79,163089,163090],{"class":89}," \"成年人\"\n",[79,163092,163093],{"class":81,"line":568},[79,163094,542],{"emptyLinePlaceholder":541},[79,163096,163097,163099],{"class":81,"line":574},[79,163098,715],{"class":448},[79,163100,163101],{"class":89}," \"未成年人\"\n",[79,163103,163104],{"class":81,"line":579},[79,163105,542],{"emptyLinePlaceholder":541},[79,163107,163108],{"class":81,"line":585},[79,163109,542],{"emptyLinePlaceholder":541},[79,163111,163112,163114,163117,163119],{"class":81,"line":591},[79,163113,1889],{"class":96},[79,163115,163116],{"class":228},"(check_age(",[79,163118,2940],{"class":96},[79,163120,1150],{"class":228},[79,163122,163123,163125,163127,163129,163131],{"class":81,"line":596},[79,163124,1889],{"class":96},[79,163126,163116],{"class":228},[79,163128,478],{"class":448},[79,163130,775],{"class":96},[79,163132,1150],{"class":228},[19,163134,163135,163136,163138],{},"函数执行到 ",[59,163137,449],{}," 后，后面的代码不会继续执行。",[14,163140,163142],{"id":163141},"_57-none","5.7 None",[19,163144,163145,163147],{},[59,163146,832],{}," 表示空值或没有结果。",[19,163149,163150],{},"常见使用场景：",[26,163152,163153,163156,163159],{},[29,163154,163155],{},"函数没有返回值。",[29,163157,163158],{},"变量暂时没有具体值。",[29,163160,163161],{},"表示查询不到结果。",[51,163163,163165],{"className":439,"code":163164,"language":441,"meta":57,"style":57},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[59,163166,163167,163175,163179,163192],{"__ignoreMap":57},[79,163168,163169,163171,163173],{"class":81,"line":82},[79,163170,162939],{"class":228},[79,163172,239],{"class":448},[79,163174,153805],{"class":96},[79,163176,163177],{"class":81,"line":167},[79,163178,542],{"emptyLinePlaceholder":541},[79,163180,163181,163183,163186,163188,163190],{"class":81,"line":178},[79,163182,1210],{"class":448},[79,163184,163185],{"class":228}," result ",[79,163187,40922],{"class":448},[79,163189,40928],{"class":96},[79,163191,745],{"class":228},[79,163193,163194,163196,163198,163201],{"class":81,"line":545},[79,163195,1161],{"class":96},[79,163197,455],{"class":228},[79,163199,163200],{"class":89},"\"没有数据\"",[79,163202,850],{"class":228},[19,163204,163205,163206,163208,163209,163212,163213,497],{},"判断 ",[59,163207,832],{}," 推荐使用 ",[59,163210,163211],{},"is None","，不要写成 ",[59,163214,163215],{},"== None",[14,163217,163219],{"id":163218},"_58-函数文档字符串","5.8 函数文档字符串",[19,163221,163222],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[51,163224,163226],{"className":439,"code":163225,"language":441,"meta":57,"style":57},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[59,163227,163228,163238,163243],{"__ignoreMap":57},[79,163229,163230,163232,163235],{"class":81,"line":82},[79,163231,703],{"class":448},[79,163233,163234],{"class":85}," calculate_bmi",[79,163236,163237],{"class":228},"(weight, height):\n",[79,163239,163240],{"class":81,"line":167},[79,163241,163242],{"class":89},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[79,163244,163245,163247,163250,163252,163255,163257],{"class":81,"line":178},[79,163246,715],{"class":448},[79,163248,163249],{"class":228}," weight ",[79,163251,2824],{"class":448},[79,163253,163254],{"class":228}," height ",[79,163256,12696],{"class":448},[79,163258,49718],{"class":96},[19,163260,163261],{},"查看说明：",[51,163263,163265],{"className":439,"code":163264,"language":441,"meta":57,"style":57},"help(calculate_bmi)\n",[59,163266,163267],{"__ignoreMap":57},[79,163268,163269,163272],{"class":81,"line":82},[79,163270,163271],{"class":96},"help",[79,163273,163274],{"class":228},"(calculate_bmi)\n",[19,163276,163277],{},"较完整的写法：",[51,163279,163281],{"className":439,"code":163280,"language":441,"meta":57,"style":57},"def calculate_bmi(weight, height):\n    \"\"\"\n    计算BMI。\n\n    :param weight: 体重，单位kg\n    :param height: 身高，单位m\n    :return: BMI数值\n    \"\"\"\n    return weight \u002F height ** 2\n",[59,163282,163283,163291,163296,163301,163305,163310,163315,163320,163324],{"__ignoreMap":57},[79,163284,163285,163287,163289],{"class":81,"line":82},[79,163286,703],{"class":448},[79,163288,163234],{"class":85},[79,163290,163237],{"class":228},[79,163292,163293],{"class":81,"line":167},[79,163294,163295],{"class":89},"    \"\"\"\n",[79,163297,163298],{"class":81,"line":178},[79,163299,163300],{"class":89},"    计算BMI。\n",[79,163302,163303],{"class":81,"line":545},[79,163304,542],{"emptyLinePlaceholder":541},[79,163306,163307],{"class":81,"line":550},[79,163308,163309],{"class":89},"    :param weight: 体重，单位kg\n",[79,163311,163312],{"class":81,"line":562},[79,163313,163314],{"class":89},"    :param height: 身高，单位m\n",[79,163316,163317],{"class":81,"line":568},[79,163318,163319],{"class":89},"    :return: BMI数值\n",[79,163321,163322],{"class":81,"line":574},[79,163323,163295],{"class":89},[79,163325,163326,163328,163330,163332,163334,163336],{"class":81,"line":579},[79,163327,715],{"class":448},[79,163329,163249],{"class":228},[79,163331,2824],{"class":448},[79,163333,163254],{"class":228},[79,163335,12696],{"class":448},[79,163337,49718],{"class":96},[14,163339,163341],{"id":163340},"_59-变量作用域","5.9 变量作用域",[339,163343,163345],{"id":163344},"_591-局部变量","5.9.1 局部变量",[19,163347,163348],{},"在函数内部定义的变量，只能在函数内部使用。",[51,163350,163352],{"className":439,"code":163351,"language":441,"meta":57,"style":57},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[59,163353,163354,163363,163371,163377,163381,163385,163390],{"__ignoreMap":57},[79,163355,163356,163358,163361],{"class":81,"line":82},[79,163357,703],{"class":448},[79,163359,163360],{"class":85}," test",[79,163362,33953],{"class":228},[79,163364,163365,163367,163369],{"class":81,"line":167},[79,163366,47588],{"class":228},[79,163368,239],{"class":448},[79,163370,60417],{"class":96},[79,163372,163373,163375],{"class":81,"line":178},[79,163374,1161],{"class":96},[79,163376,2271],{"class":228},[79,163378,163379],{"class":81,"line":545},[79,163380,542],{"emptyLinePlaceholder":541},[79,163382,163383],{"class":81,"line":550},[79,163384,542],{"emptyLinePlaceholder":541},[79,163386,163387],{"class":81,"line":562},[79,163388,163389],{"class":228},"test()\n",[79,163391,163392,163394,163397],{"class":81,"line":568},[79,163393,1889],{"class":96},[79,163395,163396],{"class":228},"(num)  ",[79,163398,163399],{"class":2313},"# 报错\n",[339,163401,163403],{"id":163402},"_592-全局变量","5.9.2 全局变量",[19,163405,163406],{},"在函数外部定义的变量，可以在函数内部读取。",[51,163408,163410],{"className":439,"code":163409,"language":441,"meta":57,"style":57},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[59,163411,163412,163420,163424,163428,163436,163442,163446,163450],{"__ignoreMap":57},[79,163413,163414,163416,163418],{"class":81,"line":82},[79,163415,148169],{"class":228},[79,163417,239],{"class":448},[79,163419,150986],{"class":89},[79,163421,163422],{"class":81,"line":167},[79,163423,542],{"emptyLinePlaceholder":541},[79,163425,163426],{"class":81,"line":178},[79,163427,542],{"emptyLinePlaceholder":541},[79,163429,163430,163432,163434],{"class":81,"line":545},[79,163431,703],{"class":448},[79,163433,162629],{"class":85},[79,163435,33953],{"class":228},[79,163437,163438,163440],{"class":81,"line":550},[79,163439,1161],{"class":96},[79,163441,152293],{"class":228},[79,163443,163444],{"class":81,"line":562},[79,163445,542],{"emptyLinePlaceholder":541},[79,163447,163448],{"class":81,"line":568},[79,163449,542],{"emptyLinePlaceholder":541},[79,163451,163452],{"class":81,"line":574},[79,163453,162664],{"class":228},[19,163455,163456,163457,497],{},"如果要在函数内部修改全局变量，需要 ",[59,163458,163459],{},"global",[51,163461,163463],{"className":439,"code":163462,"language":441,"meta":57,"style":57},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[59,163464,163465,163473,163477,163481,163490,163498,163506,163510,163514,163519],{"__ignoreMap":57},[79,163466,163467,163469,163471],{"class":81,"line":82},[79,163468,148324],{"class":228},[79,163470,239],{"class":448},[79,163472,49328],{"class":96},[79,163474,163475],{"class":81,"line":167},[79,163476,542],{"emptyLinePlaceholder":541},[79,163478,163479],{"class":81,"line":178},[79,163480,542],{"emptyLinePlaceholder":541},[79,163482,163483,163485,163488],{"class":81,"line":545},[79,163484,703],{"class":448},[79,163486,163487],{"class":85}," add_count",[79,163489,33953],{"class":228},[79,163491,163492,163495],{"class":81,"line":550},[79,163493,163494],{"class":448},"    global",[79,163496,163497],{"class":228}," count\n",[79,163499,163500,163502,163504],{"class":81,"line":562},[79,163501,161066],{"class":228},[79,163503,1075],{"class":448},[79,163505,57688],{"class":96},[79,163507,163508],{"class":81,"line":568},[79,163509,542],{"emptyLinePlaceholder":541},[79,163511,163512],{"class":81,"line":574},[79,163513,542],{"emptyLinePlaceholder":541},[79,163515,163516],{"class":81,"line":579},[79,163517,163518],{"class":228},"add_count()\n",[79,163520,163521,163523],{"class":81,"line":585},[79,163522,1889],{"class":96},[79,163524,163525],{"class":228},"(count)\n",[19,163527,163528],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,163530,163532],{"id":163531},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,163534,163535],{},"一个函数中可以调用另一个函数。",[51,163537,163539],{"className":439,"code":163538,"language":441,"meta":57,"style":57},"def print_line():\n    print(\"-\" * 30)\n\n\ndef print_info(name, age):\n    print_line()\n    print(f\"姓名:{name}\")\n    print(f\"年龄:{age}\")\n    print_line()\n\n\nprint_info(\"小明\", 18)\n",[59,163540,163541,163550,163564,163568,163572,163581,163586,163606,163627,163631,163635,163639],{"__ignoreMap":57},[79,163542,163543,163545,163548],{"class":81,"line":82},[79,163544,703],{"class":448},[79,163546,163547],{"class":85}," print_line",[79,163549,33953],{"class":228},[79,163551,163552,163554,163556,163558,163560,163562],{"class":81,"line":167},[79,163553,1161],{"class":96},[79,163555,455],{"class":228},[79,163557,34481],{"class":89},[79,163559,467],{"class":448},[79,163561,80653],{"class":96},[79,163563,850],{"class":228},[79,163565,163566],{"class":81,"line":178},[79,163567,542],{"emptyLinePlaceholder":541},[79,163569,163570],{"class":81,"line":545},[79,163571,542],{"emptyLinePlaceholder":541},[79,163573,163574,163576,163579],{"class":81,"line":550},[79,163575,703],{"class":448},[79,163577,163578],{"class":85}," print_info",[79,163580,151008],{"class":228},[79,163582,163583],{"class":81,"line":562},[79,163584,163585],{"class":228},"    print_line()\n",[79,163587,163588,163590,163592,163594,163596,163598,163600,163602,163604],{"class":81,"line":568},[79,163589,1161],{"class":96},[79,163591,455],{"class":228},[79,163593,2307],{"class":448},[79,163595,158315],{"class":89},[79,163597,3136],{"class":96},[79,163599,81798],{"class":228},[79,163601,3185],{"class":96},[79,163603,2495],{"class":89},[79,163605,850],{"class":228},[79,163607,163608,163610,163612,163614,163617,163619,163621,163623,163625],{"class":81,"line":574},[79,163609,1161],{"class":96},[79,163611,455],{"class":228},[79,163613,2307],{"class":448},[79,163615,163616],{"class":89},"\"年龄:",[79,163618,3136],{"class":96},[79,163620,72209],{"class":228},[79,163622,3185],{"class":96},[79,163624,2495],{"class":89},[79,163626,850],{"class":228},[79,163628,163629],{"class":81,"line":579},[79,163630,163585],{"class":228},[79,163632,163633],{"class":81,"line":585},[79,163634,542],{"emptyLinePlaceholder":541},[79,163636,163637],{"class":81,"line":591},[79,163638,542],{"emptyLinePlaceholder":541},[79,163640,163641,163644,163646,163648,163650],{"class":81,"line":596},[79,163642,163643],{"class":228},"print_info(",[79,163645,151521],{"class":89},[79,163647,1020],{"class":228},[79,163649,2890],{"class":96},[79,163651,850],{"class":228},[19,163653,163654],{},"这种方式可以把小功能组合成大功能。",[14,163656,163658],{"id":163657},"_511-参数检查","5.11 参数检查",[19,163660,163661],{},"函数内部可以检查参数是否合法。",[51,163663,163665],{"className":439,"code":163664,"language":441,"meta":57,"style":57},"def divide(a, b):\n    if b == 0:\n        return None\n    return a \u002F b\n\n\nresult = divide(10, 0)\n\nif result is None:\n    print(\"除数不能为0\")\nelse:\n    print(result)\n",[59,163666,163667,163676,163688,163694,163704,163708,163712,163729,163733,163745,163756,163762],{"__ignoreMap":57},[79,163668,163669,163671,163674],{"class":81,"line":82},[79,163670,703],{"class":448},[79,163672,163673],{"class":85}," divide",[79,163675,152726],{"class":228},[79,163677,163678,163680,163682,163684,163686],{"class":81,"line":167},[79,163679,5176],{"class":448},[79,163681,12917],{"class":228},[79,163683,5025],{"class":448},[79,163685,1103],{"class":96},[79,163687,745],{"class":228},[79,163689,163690,163692],{"class":81,"line":178},[79,163691,16785],{"class":448},[79,163693,153805],{"class":96},[79,163695,163696,163698,163700,163702],{"class":81,"line":545},[79,163697,715],{"class":448},[79,163699,12904],{"class":228},[79,163701,2824],{"class":448},[79,163703,152737],{"class":228},[79,163705,163706],{"class":81,"line":550},[79,163707,542],{"emptyLinePlaceholder":541},[79,163709,163710],{"class":81,"line":562},[79,163711,542],{"emptyLinePlaceholder":541},[79,163713,163714,163716,163718,163721,163723,163725,163727],{"class":81,"line":568},[79,163715,162939],{"class":228},[79,163717,239],{"class":448},[79,163719,163720],{"class":228}," divide(",[79,163722,2689],{"class":96},[79,163724,1020],{"class":228},[79,163726,759],{"class":96},[79,163728,850],{"class":228},[79,163730,163731],{"class":81,"line":574},[79,163732,542],{"emptyLinePlaceholder":541},[79,163734,163735,163737,163739,163741,163743],{"class":81,"line":579},[79,163736,1210],{"class":448},[79,163738,163185],{"class":228},[79,163740,40922],{"class":448},[79,163742,40928],{"class":96},[79,163744,745],{"class":228},[79,163746,163747,163749,163751,163754],{"class":81,"line":585},[79,163748,1161],{"class":96},[79,163750,455],{"class":228},[79,163752,163753],{"class":89},"\"除数不能为0\"",[79,163755,850],{"class":228},[79,163757,163758,163760],{"class":81,"line":591},[79,163759,3796],{"class":448},[79,163761,745],{"class":228},[79,163763,163764,163766],{"class":81,"line":596},[79,163765,1161],{"class":96},[79,163767,78573],{"class":228},[14,163769,163771],{"id":163770},"_512-类型提示","5.12 类型提示",[19,163773,163774],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[51,163776,163778],{"className":439,"code":163777,"language":441,"meta":57,"style":57},"def add(a: int, b: int) -> int:\n    return a + b\n",[59,163779,163780,163803],{"__ignoreMap":57},[79,163781,163782,163784,163786,163789,163791,163794,163796,163799,163801],{"class":81,"line":82},[79,163783,703],{"class":448},[79,163785,7277],{"class":85},[79,163787,163788],{"class":228},"(a: ",[79,163790,2262],{"class":96},[79,163792,163793],{"class":228},", b: ",[79,163795,2262],{"class":96},[79,163797,163798],{"class":228},") -> ",[79,163800,2262],{"class":96},[79,163802,745],{"class":228},[79,163804,163805,163807,163809,163811],{"class":81,"line":167},[79,163806,715],{"class":448},[79,163808,12904],{"class":228},[79,163810,995],{"class":448},[79,163812,152737],{"class":228},[19,163814,163815],{},"字符串参数：",[51,163817,163819],{"className":439,"code":163818,"language":441,"meta":57,"style":57},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[59,163820,163821,163838],{"__ignoreMap":57},[79,163822,163823,163825,163827,163830,163832,163834,163836],{"class":81,"line":82},[79,163824,703],{"class":448},[79,163826,162629],{"class":85},[79,163828,163829],{"class":228},"(name: ",[79,163831,3409],{"class":96},[79,163833,163798],{"class":228},[79,163835,832],{"class":96},[79,163837,745],{"class":228},[79,163839,163840,163842,163844,163846,163848,163850,163852,163854,163856],{"class":81,"line":167},[79,163841,1161],{"class":96},[79,163843,455],{"class":228},[79,163845,2307],{"class":448},[79,163847,158687],{"class":89},[79,163849,3136],{"class":96},[79,163851,81798],{"class":228},[79,163853,3185],{"class":96},[79,163855,2495],{"class":89},[79,163857,850],{"class":228},[19,163859,163860],{},"列表参数：",[51,163862,163864],{"className":439,"code":163863,"language":441,"meta":57,"style":57},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[59,163865,163866,163885,163893,163905,163914],{"__ignoreMap":57},[79,163867,163868,163870,163873,163876,163878,163881,163883],{"class":81,"line":82},[79,163869,703],{"class":448},[79,163871,163872],{"class":85}," get_total",[79,163874,163875],{"class":228},"(numbers: list[",[79,163877,2262],{"class":96},[79,163879,163880],{"class":228},"]) -> ",[79,163882,2262],{"class":96},[79,163884,745],{"class":228},[79,163886,163887,163889,163891],{"class":81,"line":167},[79,163888,160940],{"class":228},[79,163890,239],{"class":448},[79,163892,49328],{"class":96},[79,163894,163895,163897,163900,163902],{"class":81,"line":178},[79,163896,915],{"class":448},[79,163898,163899],{"class":228}," number ",[79,163901,921],{"class":448},[79,163903,163904],{"class":228}," numbers:\n",[79,163906,163907,163909,163911],{"class":81,"line":545},[79,163908,161615],{"class":228},[79,163910,1075],{"class":448},[79,163912,163913],{"class":228}," number\n",[79,163915,163916,163918],{"class":81,"line":550},[79,163917,715],{"class":448},[79,163919,163920],{"class":228}," total\n",[19,163922,163923],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,163925,163927],{"id":163926},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[51,163929,163931],{"className":439,"code":163930,"language":441,"meta":57,"style":57},"balance = 1000\n\n\ndef show_menu():\n    print(\"====== ATM ======\")\n    print(\"1. 查询余额\")\n    print(\"2. 存款\")\n    print(\"3. 取款\")\n    print(\"0. 退出\")\n\n\ndef show_balance():\n    print(f\"当前余额:{balance}元\")\n\n\ndef save_money():\n    global balance\n    money = float(input(\"请输入存款金额:\"))\n    if money \u003C= 0:\n        print(\"金额必须大于0\")\n        return\n    balance += money\n    print(\"存款成功\")\n    show_balance()\n\n\ndef withdraw_money():\n    global balance\n    money = float(input(\"请输入取款金额:\"))\n    if money \u003C= 0:\n        print(\"金额必须大于0\")\n        return\n    if money > balance:\n        print(\"余额不足\")\n        return\n    balance -= money\n    print(\"取款成功\")\n    show_balance()\n\n\nwhile True:\n    show_menu()\n    choice = input(\"请输入操作:\")\n\n    if choice == \"1\":\n        show_balance()\n    elif choice == \"2\":\n        save_money()\n    elif choice == \"3\":\n        withdraw_money()\n    elif choice == \"0\":\n        print(\"退出系统\")\n        break\n    else:\n        print(\"输入错误\")\n",[59,163932,163933,163943,163947,163951,163959,163970,163980,163990,164000,164010,164014,164018,164027,164049,164053,164057,164066,164072,164092,164104,164115,164119,164128,164139,164144,164148,164152,164161,164167,164186,164198,164208,164212,164223,164233,164237,164245,164256,164260,164264,164268,164276,164281,164295,164299,164311,164316,164328,164333,164345,164350,164362,164372,164376,164382],{"__ignoreMap":57},[79,163934,163935,163938,163940],{"class":81,"line":82},[79,163936,163937],{"class":228},"balance ",[79,163939,239],{"class":448},[79,163941,163942],{"class":96}," 1000\n",[79,163944,163945],{"class":81,"line":167},[79,163946,542],{"emptyLinePlaceholder":541},[79,163948,163949],{"class":81,"line":178},[79,163950,542],{"emptyLinePlaceholder":541},[79,163952,163953,163955,163957],{"class":81,"line":545},[79,163954,703],{"class":448},[79,163956,153666],{"class":85},[79,163958,33953],{"class":228},[79,163960,163961,163963,163965,163968],{"class":81,"line":550},[79,163962,1161],{"class":96},[79,163964,455],{"class":228},[79,163966,163967],{"class":89},"\"====== ATM ======\"",[79,163969,850],{"class":228},[79,163971,163972,163974,163976,163978],{"class":81,"line":562},[79,163973,1161],{"class":96},[79,163975,455],{"class":228},[79,163977,162281],{"class":89},[79,163979,850],{"class":228},[79,163981,163982,163984,163986,163988],{"class":81,"line":568},[79,163983,1161],{"class":96},[79,163985,455],{"class":228},[79,163987,162292],{"class":89},[79,163989,850],{"class":228},[79,163991,163992,163994,163996,163998],{"class":81,"line":574},[79,163993,1161],{"class":96},[79,163995,455],{"class":228},[79,163997,162303],{"class":89},[79,163999,850],{"class":228},[79,164001,164002,164004,164006,164008],{"class":81,"line":579},[79,164003,1161],{"class":96},[79,164005,455],{"class":228},[79,164007,162314],{"class":89},[79,164009,850],{"class":228},[79,164011,164012],{"class":81,"line":585},[79,164013,542],{"emptyLinePlaceholder":541},[79,164015,164016],{"class":81,"line":591},[79,164017,542],{"emptyLinePlaceholder":541},[79,164019,164020,164022,164025],{"class":81,"line":596},[79,164021,703],{"class":448},[79,164023,164024],{"class":85}," show_balance",[79,164026,33953],{"class":228},[79,164028,164029,164031,164033,164035,164038,164040,164043,164045,164047],{"class":81,"line":602},[79,164030,1161],{"class":96},[79,164032,455],{"class":228},[79,164034,2307],{"class":448},[79,164036,164037],{"class":89},"\"当前余额:",[79,164039,3136],{"class":96},[79,164041,164042],{"class":228},"balance",[79,164044,3185],{"class":96},[79,164046,158645],{"class":89},[79,164048,850],{"class":228},[79,164050,164051],{"class":81,"line":608},[79,164052,542],{"emptyLinePlaceholder":541},[79,164054,164055],{"class":81,"line":614},[79,164056,542],{"emptyLinePlaceholder":541},[79,164058,164059,164061,164064],{"class":81,"line":619},[79,164060,703],{"class":448},[79,164062,164063],{"class":85}," save_money",[79,164065,33953],{"class":228},[79,164067,164068,164070],{"class":81,"line":625},[79,164069,163494],{"class":448},[79,164071,151732],{"class":228},[79,164073,164074,164077,164079,164081,164083,164085,164087,164090],{"class":81,"line":631},[79,164075,164076],{"class":228},"    money ",[79,164078,239],{"class":448},[79,164080,452],{"class":96},[79,164082,455],{"class":228},[79,164084,55812],{"class":96},[79,164086,455],{"class":228},[79,164088,164089],{"class":89},"\"请输入存款金额:\"",[79,164091,1150],{"class":228},[79,164093,164094,164096,164098,164100,164102],{"class":81,"line":637},[79,164095,5176],{"class":448},[79,164097,151775],{"class":228},[79,164099,3694],{"class":448},[79,164101,1103],{"class":96},[79,164103,745],{"class":228},[79,164105,164106,164108,164110,164113],{"class":81,"line":643},[79,164107,34449],{"class":96},[79,164109,455],{"class":228},[79,164111,164112],{"class":89},"\"金额必须大于0\"",[79,164114,850],{"class":228},[79,164116,164117],{"class":81,"line":649},[79,164118,153994],{"class":448},[79,164120,164121,164124,164126],{"class":81,"line":655},[79,164122,164123],{"class":228},"    balance ",[79,164125,1075],{"class":448},[79,164127,151808],{"class":228},[79,164129,164130,164132,164134,164137],{"class":81,"line":660},[79,164131,1161],{"class":96},[79,164133,455],{"class":228},[79,164135,164136],{"class":89},"\"存款成功\"",[79,164138,850],{"class":228},[79,164140,164141],{"class":81,"line":666},[79,164142,164143],{"class":228},"    show_balance()\n",[79,164145,164146],{"class":81,"line":672},[79,164147,542],{"emptyLinePlaceholder":541},[79,164149,164150],{"class":81,"line":678},[79,164151,542],{"emptyLinePlaceholder":541},[79,164153,164154,164156,164159],{"class":81,"line":684},[79,164155,703],{"class":448},[79,164157,164158],{"class":85}," withdraw_money",[79,164160,33953],{"class":228},[79,164162,164163,164165],{"class":81,"line":690},[79,164164,163494],{"class":448},[79,164166,151732],{"class":228},[79,164168,164169,164171,164173,164175,164177,164179,164181,164184],{"class":81,"line":695},[79,164170,164076],{"class":228},[79,164172,239],{"class":448},[79,164174,452],{"class":96},[79,164176,455],{"class":228},[79,164178,55812],{"class":96},[79,164180,455],{"class":228},[79,164182,164183],{"class":89},"\"请输入取款金额:\"",[79,164185,1150],{"class":228},[79,164187,164188,164190,164192,164194,164196],{"class":81,"line":700},[79,164189,5176],{"class":448},[79,164191,151775],{"class":228},[79,164193,3694],{"class":448},[79,164195,1103],{"class":96},[79,164197,745],{"class":228},[79,164199,164200,164202,164204,164206],{"class":81,"line":712},[79,164201,34449],{"class":96},[79,164203,455],{"class":228},[79,164205,164112],{"class":89},[79,164207,850],{"class":228},[79,164209,164210],{"class":81,"line":721},[79,164211,153994],{"class":448},[79,164213,164214,164216,164218,164220],{"class":81,"line":726},[79,164215,5176],{"class":448},[79,164217,151775],{"class":228},[79,164219,3199],{"class":448},[79,164221,164222],{"class":228}," balance:\n",[79,164224,164225,164227,164229,164231],{"class":81,"line":731},[79,164226,34449],{"class":96},[79,164228,455],{"class":228},[79,164230,151870],{"class":89},[79,164232,850],{"class":228},[79,164234,164235],{"class":81,"line":748},[79,164236,153994],{"class":448},[79,164238,164239,164241,164243],{"class":81,"line":765},[79,164240,164123],{"class":228},[79,164242,151885],{"class":448},[79,164244,151808],{"class":228},[79,164246,164247,164249,164251,164254],{"class":81,"line":780},[79,164248,1161],{"class":96},[79,164250,455],{"class":228},[79,164252,164253],{"class":89},"\"取款成功\"",[79,164255,850],{"class":228},[79,164257,164258],{"class":81,"line":811},[79,164259,164143],{"class":228},[79,164261,164262],{"class":81,"line":816},[79,164263,542],{"emptyLinePlaceholder":541},[79,164265,164266],{"class":81,"line":821},[79,164267,542],{"emptyLinePlaceholder":541},[79,164269,164270,164272,164274],{"class":81,"line":837},[79,164271,110550],{"class":448},[79,164273,97279],{"class":96},[79,164275,745],{"class":228},[79,164277,164278],{"class":81,"line":853},[79,164279,164280],{"class":228},"    show_menu()\n",[79,164282,164283,164285,164287,164289,164291,164293],{"class":81,"line":864},[79,164284,162325],{"class":228},[79,164286,239],{"class":448},[79,164288,62594],{"class":96},[79,164290,455],{"class":228},[79,164292,154706],{"class":89},[79,164294,850],{"class":228},[79,164296,164297],{"class":81,"line":869},[79,164298,542],{"emptyLinePlaceholder":541},[79,164300,164301,164303,164305,164307,164309],{"class":81,"line":885},[79,164302,5176],{"class":448},[79,164304,154719],{"class":228},[79,164306,5025],{"class":448},[79,164308,154724],{"class":89},[79,164310,745],{"class":228},[79,164312,164313],{"class":81,"line":891},[79,164314,164315],{"class":228},"        show_balance()\n",[79,164317,164318,164320,164322,164324,164326],{"class":81,"line":896},[79,164319,41288],{"class":448},[79,164321,154719],{"class":228},[79,164323,5025],{"class":448},[79,164325,154743],{"class":89},[79,164327,745],{"class":228},[79,164329,164330],{"class":81,"line":907},[79,164331,164332],{"class":228},"        save_money()\n",[79,164334,164335,164337,164339,164341,164343],{"class":81,"line":912},[79,164336,41288],{"class":448},[79,164338,154719],{"class":228},[79,164340,5025],{"class":448},[79,164342,154761],{"class":89},[79,164344,745],{"class":228},[79,164346,164347],{"class":81,"line":935},[79,164348,164349],{"class":228},"        withdraw_money()\n",[79,164351,164352,164354,164356,164358,164360],{"class":81,"line":946},[79,164353,41288],{"class":448},[79,164355,154719],{"class":228},[79,164357,5025],{"class":448},[79,164359,154815],{"class":89},[79,164361,745],{"class":228},[79,164363,164364,164366,164368,164370],{"class":81,"line":960},[79,164365,34449],{"class":96},[79,164367,455],{"class":228},[79,164369,154826],{"class":89},[79,164371,850],{"class":228},[79,164373,164374],{"class":81,"line":975},[79,164375,33628],{"class":448},[79,164377,164378,164380],{"class":81,"line":980},[79,164379,159655],{"class":448},[79,164381,745],{"class":228},[79,164383,164384,164386,164388,164390],{"class":81,"line":1006},[79,164385,34449],{"class":96},[79,164387,455],{"class":228},[79,164389,154847],{"class":89},[79,164391,850],{"class":228},[19,164393,164394],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,164396,164398],{"id":164397},"_514-易错点","5.14 易错点",[26,164400,164401,164404,164407,164412,164417,164420],{},[29,164402,164403],{},"函数定义后必须调用才会执行。",[29,164405,164406],{},"函数名后面有括号才是调用。",[29,164408,164409,164411],{},[59,164410,449],{}," 后面的代码不会执行。",[29,164413,164414,164415,497],{},"没有返回值的函数默认返回 ",[59,164416,832],{},[29,164418,164419],{},"局部变量不能在函数外部访问。",[29,164421,164422,164423,164425],{},"不要滥用 ",[59,164424,163459],{},"，更好的方式是让函数返回新值。",[19,164427,164428,164429,164431],{},"例如不用 ",[59,164430,163459],{}," 改写存款：",[51,164433,164435],{"className":439,"code":164434,"language":441,"meta":57,"style":57},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[59,164436,164437,164446,164457,164461,164465,164473,164486],{"__ignoreMap":57},[79,164438,164439,164441,164443],{"class":81,"line":82},[79,164440,703],{"class":448},[79,164442,164063],{"class":85},[79,164444,164445],{"class":228},"(balance, money):\n",[79,164447,164448,164450,164453,164455],{"class":81,"line":167},[79,164449,715],{"class":448},[79,164451,164452],{"class":228}," balance ",[79,164454,995],{"class":448},[79,164456,151808],{"class":228},[79,164458,164459],{"class":81,"line":178},[79,164460,542],{"emptyLinePlaceholder":541},[79,164462,164463],{"class":81,"line":545},[79,164464,542],{"emptyLinePlaceholder":541},[79,164466,164467,164469,164471],{"class":81,"line":550},[79,164468,163937],{"class":228},[79,164470,239],{"class":448},[79,164472,163942],{"class":96},[79,164474,164475,164477,164479,164482,164484],{"class":81,"line":562},[79,164476,163937],{"class":228},[79,164478,239],{"class":448},[79,164480,164481],{"class":228}," save_money(balance, ",[79,164483,3817],{"class":96},[79,164485,850],{"class":228},[79,164487,164488,164490],{"class":81,"line":568},[79,164489,1889],{"class":96},[79,164491,164492],{"class":228},"(balance)\n",[14,164494,164496],{"id":164495},"_515-本章练习","5.15 本章练习",[26,164498,164499,164506,164512,164518,164524],{},[29,164500,164501,164502,164505],{},"定义函数 ",[59,164503,164504],{},"print_student(name, age)","，输出学生信息。",[29,164507,164501,164508,164511],{},[59,164509,164510],{},"get_max(a, b, c)","，返回三个数中的最大值。",[29,164513,164501,164514,164517],{},[59,164515,164516],{},"is_even(num)","，判断一个数是否为偶数。",[29,164519,164501,164520,164523],{},[59,164521,164522],{},"calculate_bmi(weight, height)","，返回 BMI。",[29,164525,164526],{},"把第 4 章的菜单程序拆分成多个函数。",[2159,164528,164529],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":57,"searchDepth":167,"depth":167,"links":164531},[164532,164533,164534,164535,164536,164537,164538,164539,164540,164544,164545,164546,164547,164548,164549],{"id":162552,"depth":167,"text":162553},{"id":162593,"depth":167,"text":162594},{"id":162683,"depth":167,"text":162684},{"id":162764,"depth":167,"text":162765},{"id":162897,"depth":167,"text":162898},{"id":163019,"depth":167,"text":163020},{"id":163141,"depth":167,"text":163142},{"id":163218,"depth":167,"text":163219},{"id":163340,"depth":167,"text":163341,"children":164541},[164542,164543],{"id":163344,"depth":178,"text":163345},{"id":163402,"depth":178,"text":163403},{"id":163531,"depth":167,"text":163532},{"id":163657,"depth":167,"text":163658},{"id":163770,"depth":167,"text":163771},{"id":163926,"depth":167,"text":163927},{"id":164397,"depth":167,"text":164398},{"id":164495,"depth":167,"text":164496},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":162544,"description":25402},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":164556,"title":164557,"body":164558,"description":25402,"extension":2186,"meta":167602,"navigation":541,"path":167603,"seo":167604,"stem":167605,"__hash__":167606},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":164559,"toc":167583},[164560,164563,164567,164570,164573,164677,164680,164684,164687,164767,164770,164774,164777,164837,164840,164876,164879,164894,164898,164971,164974,165029,165032,165102,165105,165189,165199,165257,165261,165306,165309,165335,165338,165444,165448,165451,165493,165496,165560,165563,165567,165570,165631,165634,165664,165667,165705,165709,165712,165721,165724,165848,165851,165892,165896,165899,165910,165950,165953,165968,165973,165976,166043,166046,166136,166140,166143,166191,166194,166221,166223,166253,166256,166276,166279,166310,166313,166346,166350,166353,166377,166380,166404,166407,166431,166435,166438,166568,166571,166651,166654,166729,166733,166736,166786,166789,166831,166834,166858,166860,166884,166887,166942,166945,167011,167015,167018,167021,167059,167062,167115,167118,167164,167167,167200,167203,167207,167526,167530,167559,167563,167580],[10,164561,164557],{"id":164562},"_6-数据容器",[14,164564,164566],{"id":164565},"_61-什么是数据容器","6.1 什么是数据容器",[19,164568,164569],{},"数据容器用于一次保存多个数据。",[19,164571,164572],{},"常见容器：",[347,164574,164575,164592],{},[350,164576,164577],{},[353,164578,164579,164581,164584,164587,164590],{},[356,164580,27790],{},[356,164582,164583],{},"是否有序",[356,164585,164586],{},"是否可变",[356,164588,164589],{},"是否允许重复",[356,164591,29508],{},[367,164593,164594,164612,164628,164643,164660],{},[353,164595,164596,164599,164602,164605,164608],{},[372,164597,164598],{},"list列表",[372,164600,164601],{},"有序",[372,164603,164604],{},"可变",[372,164606,164607],{},"允许",[372,164609,164610],{},[59,164611,156890],{},[353,164613,164614,164617,164619,164622,164624],{},[372,164615,164616],{},"tuple元组",[372,164618,164601],{},[372,164620,164621],{},"不可变",[372,164623,164607],{},[372,164625,164626],{},[59,164627,156903],{},[353,164629,164630,164633,164635,164637,164639],{},[372,164631,164632],{},"str字符串",[372,164634,164601],{},[372,164636,164621],{},[372,164638,164607],{},[372,164640,164641],{},[59,164642,157513],{},[353,164644,164645,164648,164651,164653,164656],{},[372,164646,164647],{},"set集合",[372,164649,164650],{},"无序",[372,164652,164604],{},[372,164654,164655],{},"不允许",[372,164657,164658],{},[59,164659,156928],{},[353,164661,164662,164665,164667,164669,164672],{},[372,164663,164664],{},"dict字典",[372,164666,164601],{},[372,164668,164604],{},[372,164670,164671],{},"key不允许重复",[372,164673,164674],{},[59,164675,164676],{},"{\"name\": \"小明\"}",[19,164678,164679],{},"Python 3.7 之后，字典保持插入顺序。",[14,164681,164683],{"id":164682},"_62-列表list","6.2 列表list",[19,164685,164686],{},"列表用于保存一组有顺序的数据。",[51,164688,164690],{"className":439,"code":164689,"language":441,"meta":57,"style":57},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[59,164691,164692,164712,164737,164758],{"__ignoreMap":57},[79,164693,164694,164696,164698,164700,164702,164704,164706,164708,164710],{"class":81,"line":82},[79,164695,162013],{"class":228},[79,164697,239],{"class":448},[79,164699,54220],{"class":228},[79,164701,151521],{"class":89},[79,164703,1020],{"class":228},[79,164705,152569],{"class":89},[79,164707,1020],{"class":228},[79,164709,161364],{"class":89},[79,164711,762],{"class":228},[79,164713,164714,164717,164719,164721,164723,164725,164727,164729,164731,164733,164735],{"class":81,"line":167},[79,164715,164716],{"class":228},"numbers ",[79,164718,239],{"class":448},[79,164720,54220],{"class":228},[79,164722,775],{"class":96},[79,164724,1020],{"class":228},[79,164726,2331],{"class":96},[79,164728,1020],{"class":228},[79,164730,970],{"class":96},[79,164732,1020],{"class":228},[79,164734,2537],{"class":96},[79,164736,762],{"class":228},[79,164738,164739,164742,164744,164746,164748,164750,164752,164754,164756],{"class":81,"line":178},[79,164740,164741],{"class":228},"mixed ",[79,164743,239],{"class":448},[79,164745,54220],{"class":228},[79,164747,151521],{"class":89},[79,164749,1020],{"class":228},[79,164751,2890],{"class":96},[79,164753,1020],{"class":228},[79,164755,33478],{"class":96},[79,164757,762],{"class":228},[79,164759,164760,164763,164765],{"class":81,"line":545},[79,164761,164762],{"class":228},"empty ",[79,164764,239],{"class":448},[79,164766,53832],{"class":228},[19,164768,164769],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,164771,164773],{"id":164772},"_63-列表索引","6.3 列表索引",[19,164775,164776],{},"正向索引从 0 开始：",[51,164778,164780],{"className":439,"code":164779,"language":441,"meta":57,"style":57},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[59,164781,164782,164802,164806,164817,164827],{"__ignoreMap":57},[79,164783,164784,164786,164788,164790,164792,164794,164796,164798,164800],{"class":81,"line":82},[79,164785,162013],{"class":228},[79,164787,239],{"class":448},[79,164789,54220],{"class":228},[79,164791,151521],{"class":89},[79,164793,1020],{"class":228},[79,164795,152569],{"class":89},[79,164797,1020],{"class":228},[79,164799,161364],{"class":89},[79,164801,762],{"class":228},[79,164803,164804],{"class":81,"line":167},[79,164805,542],{"emptyLinePlaceholder":541},[79,164807,164808,164810,164813,164815],{"class":81,"line":178},[79,164809,1889],{"class":96},[79,164811,164812],{"class":228},"(names[",[79,164814,759],{"class":96},[79,164816,6727],{"class":228},[79,164818,164819,164821,164823,164825],{"class":81,"line":545},[79,164820,1889],{"class":96},[79,164822,164812],{"class":228},[79,164824,775],{"class":96},[79,164826,6727],{"class":228},[79,164828,164829,164831,164833,164835],{"class":81,"line":550},[79,164830,1889],{"class":96},[79,164832,164812],{"class":228},[79,164834,2331],{"class":96},[79,164836,6727],{"class":228},[19,164838,164839],{},"反向索引从 -1 开始：",[51,164841,164843],{"className":439,"code":164842,"language":441,"meta":57,"style":57},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[59,164844,164845,164861],{"__ignoreMap":57},[79,164846,164847,164849,164851,164853,164855,164858],{"class":81,"line":82},[79,164848,1889],{"class":96},[79,164850,164812],{"class":228},[79,164852,478],{"class":448},[79,164854,775],{"class":96},[79,164856,164857],{"class":228},"])  ",[79,164859,164860],{"class":2313},"# 小刚\n",[79,164862,164863,164865,164867,164869,164871,164873],{"class":81,"line":167},[79,164864,1889],{"class":96},[79,164866,164812],{"class":228},[79,164868,478],{"class":448},[79,164870,2331],{"class":96},[79,164872,164857],{"class":228},[79,164874,164875],{"class":2313},"# 小红\n",[19,164877,164878],{},"索引越界会报错：",[51,164880,164882],{"className":439,"code":164881,"language":441,"meta":57,"style":57},"print(names[3])\n",[59,164883,164884],{"__ignoreMap":57},[79,164885,164886,164888,164890,164892],{"class":81,"line":82},[79,164887,1889],{"class":96},[79,164889,164812],{"class":228},[79,164891,970],{"class":96},[79,164893,6727],{"class":228},[14,164895,164897],{"id":164896},"_64-列表常用方法","6.4 列表常用方法",[51,164899,164901],{"className":439,"code":164900,"language":441,"meta":57,"style":57},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[59,164902,164903,164919,164923,164932,164946,164960,164964],{"__ignoreMap":57},[79,164904,164905,164907,164909,164911,164913,164915,164917],{"class":81,"line":82},[79,164906,162013],{"class":228},[79,164908,239],{"class":448},[79,164910,54220],{"class":228},[79,164912,151521],{"class":89},[79,164914,1020],{"class":228},[79,164916,152569],{"class":89},[79,164918,762],{"class":228},[79,164920,164921],{"class":81,"line":167},[79,164922,542],{"emptyLinePlaceholder":541},[79,164924,164925,164928,164930],{"class":81,"line":178},[79,164926,164927],{"class":228},"names.append(",[79,164929,161364],{"class":89},[79,164931,850],{"class":228},[79,164933,164934,164937,164939,164941,164944],{"class":81,"line":545},[79,164935,164936],{"class":228},"names.insert(",[79,164938,775],{"class":96},[79,164940,1020],{"class":228},[79,164942,164943],{"class":89},"\"小李\"",[79,164945,850],{"class":228},[79,164947,164948,164951,164953,164955,164958],{"class":81,"line":550},[79,164949,164950],{"class":228},"names.extend([",[79,164952,10738],{"class":89},[79,164954,1020],{"class":228},[79,164956,164957],{"class":89},"\"小赵\"",[79,164959,6727],{"class":228},[79,164961,164962],{"class":81,"line":562},[79,164963,542],{"emptyLinePlaceholder":541},[79,164965,164966,164968],{"class":81,"line":568},[79,164967,1889],{"class":96},[79,164969,164970],{"class":228},"(names)\n",[19,164972,164973],{},"删除元素：",[51,164975,164977],{"className":439,"code":164976,"language":441,"meta":57,"style":57},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[59,164978,164979,164988,164998,165012,165024],{"__ignoreMap":57},[79,164980,164981,164984,164986],{"class":81,"line":82},[79,164982,164983],{"class":228},"names.remove(",[79,164985,152569],{"class":89},[79,164987,850],{"class":228},[79,164989,164990,164993,164995],{"class":81,"line":167},[79,164991,164992],{"class":228},"last ",[79,164994,239],{"class":448},[79,164996,164997],{"class":228}," names.pop()\n",[79,164999,165000,165003,165005,165008,165010],{"class":81,"line":178},[79,165001,165002],{"class":228},"first ",[79,165004,239],{"class":448},[79,165006,165007],{"class":228}," names.pop(",[79,165009,759],{"class":96},[79,165011,850],{"class":228},[79,165013,165014,165017,165020,165022],{"class":81,"line":545},[79,165015,165016],{"class":448},"del",[79,165018,165019],{"class":228}," names[",[79,165021,759],{"class":96},[79,165023,762],{"class":228},[79,165025,165026],{"class":81,"line":550},[79,165027,165028],{"class":228},"names.clear()\n",[19,165030,165031],{},"查询和统计：",[51,165033,165035],{"className":439,"code":165034,"language":441,"meta":57,"style":57},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[59,165036,165037,165065,165069,165080,165091],{"__ignoreMap":57},[79,165038,165039,165041,165043,165045,165047,165049,165051,165053,165055,165057,165059,165061,165063],{"class":81,"line":82},[79,165040,164716],{"class":228},[79,165042,239],{"class":448},[79,165044,54220],{"class":228},[79,165046,775],{"class":96},[79,165048,1020],{"class":228},[79,165050,2331],{"class":96},[79,165052,1020],{"class":228},[79,165054,970],{"class":96},[79,165056,1020],{"class":228},[79,165058,2331],{"class":96},[79,165060,1020],{"class":228},[79,165062,2537],{"class":96},[79,165064,762],{"class":228},[79,165066,165067],{"class":81,"line":167},[79,165068,542],{"emptyLinePlaceholder":541},[79,165070,165071,165073,165076,165078],{"class":81,"line":178},[79,165072,1889],{"class":96},[79,165074,165075],{"class":228},"(numbers.index(",[79,165077,970],{"class":96},[79,165079,1150],{"class":228},[79,165081,165082,165084,165087,165089],{"class":81,"line":545},[79,165083,1889],{"class":96},[79,165085,165086],{"class":228},"(numbers.count(",[79,165088,2331],{"class":96},[79,165090,1150],{"class":228},[79,165092,165093,165095,165097,165099],{"class":81,"line":550},[79,165094,1889],{"class":96},[79,165096,455],{"class":228},[79,165098,9423],{"class":96},[79,165100,165101],{"class":228},"(numbers))\n",[19,165103,165104],{},"排序：",[51,165106,165108],{"className":439,"code":165107,"language":441,"meta":57,"style":57},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[59,165109,165110,165134,165138,165143,165150,165154,165168,165174,165178,165183],{"__ignoreMap":57},[79,165111,165112,165114,165116,165118,165120,165122,165124,165126,165128,165130,165132],{"class":81,"line":82},[79,165113,164716],{"class":228},[79,165115,239],{"class":448},[79,165117,54220],{"class":228},[79,165119,970],{"class":96},[79,165121,1020],{"class":228},[79,165123,775],{"class":96},[79,165125,1020],{"class":228},[79,165127,2563],{"class":96},[79,165129,1020],{"class":228},[79,165131,2331],{"class":96},[79,165133,762],{"class":228},[79,165135,165136],{"class":81,"line":167},[79,165137,542],{"emptyLinePlaceholder":541},[79,165139,165140],{"class":81,"line":178},[79,165141,165142],{"class":228},"numbers.sort()\n",[79,165144,165145,165147],{"class":81,"line":545},[79,165146,1889],{"class":96},[79,165148,165149],{"class":228},"(numbers)\n",[79,165151,165152],{"class":81,"line":550},[79,165153,542],{"emptyLinePlaceholder":541},[79,165155,165156,165159,165162,165164,165166],{"class":81,"line":562},[79,165157,165158],{"class":228},"numbers.sort(",[79,165160,165161],{"class":7284},"reverse",[79,165163,239],{"class":448},[79,165165,33478],{"class":96},[79,165167,850],{"class":228},[79,165169,165170,165172],{"class":81,"line":568},[79,165171,1889],{"class":96},[79,165173,165149],{"class":228},[79,165175,165176],{"class":81,"line":574},[79,165177,542],{"emptyLinePlaceholder":541},[79,165179,165180],{"class":81,"line":579},[79,165181,165182],{"class":228},"numbers.reverse()\n",[79,165184,165185,165187],{"class":81,"line":585},[79,165186,1889],{"class":96},[79,165188,165149],{"class":228},[19,165190,165191,165194,165195,165198],{},[59,165192,165193],{},"sort()"," 会修改原列表，",[59,165196,165197],{},"sorted()"," 返回新列表。",[51,165200,165202],{"className":439,"code":165201,"language":441,"meta":57,"style":57},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[59,165203,165204,165228,165240,165244,165250],{"__ignoreMap":57},[79,165205,165206,165208,165210,165212,165214,165216,165218,165220,165222,165224,165226],{"class":81,"line":82},[79,165207,164716],{"class":228},[79,165209,239],{"class":448},[79,165211,54220],{"class":228},[79,165213,970],{"class":96},[79,165215,1020],{"class":228},[79,165217,775],{"class":96},[79,165219,1020],{"class":228},[79,165221,2563],{"class":96},[79,165223,1020],{"class":228},[79,165225,2331],{"class":96},[79,165227,762],{"class":228},[79,165229,165230,165233,165235,165238],{"class":81,"line":167},[79,165231,165232],{"class":228},"new_numbers ",[79,165234,239],{"class":448},[79,165236,165237],{"class":96}," sorted",[79,165239,165149],{"class":228},[79,165241,165242],{"class":81,"line":178},[79,165243,542],{"emptyLinePlaceholder":541},[79,165245,165246,165248],{"class":81,"line":545},[79,165247,1889],{"class":96},[79,165249,165149],{"class":228},[79,165251,165252,165254],{"class":81,"line":550},[79,165253,1889],{"class":96},[79,165255,165256],{"class":228},"(new_numbers)\n",[14,165258,165260],{"id":165259},"_65-列表遍历","6.5 列表遍历",[51,165262,165264],{"className":439,"code":165263,"language":441,"meta":57,"style":57},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[59,165265,165266,165286,165290,165300],{"__ignoreMap":57},[79,165267,165268,165270,165272,165274,165276,165278,165280,165282,165284],{"class":81,"line":82},[79,165269,162013],{"class":228},[79,165271,239],{"class":448},[79,165273,54220],{"class":228},[79,165275,151521],{"class":89},[79,165277,1020],{"class":228},[79,165279,152569],{"class":89},[79,165281,1020],{"class":228},[79,165283,161364],{"class":89},[79,165285,762],{"class":228},[79,165287,165288],{"class":81,"line":167},[79,165289,542],{"emptyLinePlaceholder":541},[79,165291,165292,165294,165296,165298],{"class":81,"line":178},[79,165293,1638],{"class":448},[79,165295,162049],{"class":228},[79,165297,921],{"class":448},[79,165299,162054],{"class":228},[79,165301,165302,165304],{"class":81,"line":545},[79,165303,1161],{"class":96},[79,165305,152293],{"class":228},[19,165307,165308],{},"需要索引时：",[51,165310,165312],{"className":439,"code":165311,"language":441,"meta":57,"style":57},"for index, name in enumerate(names):\n    print(index, name)\n",[59,165313,165314,165328],{"__ignoreMap":57},[79,165315,165316,165318,165321,165323,165325],{"class":81,"line":82},[79,165317,1638],{"class":448},[79,165319,165320],{"class":228}," index, name ",[79,165322,921],{"class":448},[79,165324,33608],{"class":96},[79,165326,165327],{"class":228},"(names):\n",[79,165329,165330,165332],{"class":81,"line":167},[79,165331,1161],{"class":96},[79,165333,165334],{"class":228},"(index, name)\n",[19,165336,165337],{},"统计总分：",[51,165339,165341],{"className":439,"code":165340,"language":441,"meta":57,"style":57},"scores = [90, 85, 66, 78]\ntotal = 0\n\nfor score in scores:\n    total += score\n\navg = total \u002F len(scores)\nprint(f\"平均分:{avg:.2f}\")\n",[59,165342,165343,165368,165376,165380,165391,165399,165403,165420],{"__ignoreMap":57},[79,165344,165345,165348,165350,165352,165354,165356,165358,165360,165362,165364,165366],{"class":81,"line":82},[79,165346,165347],{"class":228},"scores ",[79,165349,239],{"class":448},[79,165351,54220],{"class":228},[79,165353,3102],{"class":96},[79,165355,1020],{"class":228},[79,165357,2976],{"class":96},[79,165359,1020],{"class":228},[79,165361,2498],{"class":96},[79,165363,1020],{"class":228},[79,165365,2801],{"class":96},[79,165367,762],{"class":228},[79,165369,165370,165372,165374],{"class":81,"line":167},[79,165371,158893],{"class":228},[79,165373,239],{"class":448},[79,165375,49328],{"class":96},[79,165377,165378],{"class":81,"line":178},[79,165379,542],{"emptyLinePlaceholder":541},[79,165381,165382,165384,165386,165388],{"class":81,"line":545},[79,165383,1638],{"class":448},[79,165385,159416],{"class":228},[79,165387,921],{"class":448},[79,165389,165390],{"class":228}," scores:\n",[79,165392,165393,165395,165397],{"class":81,"line":550},[79,165394,160940],{"class":228},[79,165396,1075],{"class":448},[79,165398,3685],{"class":228},[79,165400,165401],{"class":81,"line":562},[79,165402,542],{"emptyLinePlaceholder":541},[79,165404,165405,165408,165410,165413,165415,165417],{"class":81,"line":568},[79,165406,165407],{"class":228},"avg ",[79,165409,239],{"class":448},[79,165411,165412],{"class":228}," total ",[79,165414,2824],{"class":448},[79,165416,9396],{"class":96},[79,165418,165419],{"class":228},"(scores)\n",[79,165421,165422,165424,165426,165428,165431,165433,165436,165438,165440,165442],{"class":81,"line":574},[79,165423,1889],{"class":96},[79,165425,455],{"class":228},[79,165427,2307],{"class":448},[79,165429,165430],{"class":89},"\"平均分:",[79,165432,3136],{"class":96},[79,165434,165435],{"class":228},"avg",[79,165437,158792],{"class":448},[79,165439,3185],{"class":96},[79,165441,2495],{"class":89},[79,165443,850],{"class":228},[14,165445,165447],{"id":165446},"_66-元组tuple","6.6 元组tuple",[19,165449,165450],{},"元组和列表类似，但不可修改。",[51,165452,165454],{"className":439,"code":165453,"language":441,"meta":57,"style":57},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[59,165455,165456,165473],{"__ignoreMap":57},[79,165457,165458,165461,165463,165465,165467,165469,165471],{"class":81,"line":82},[79,165459,165460],{"class":228},"point ",[79,165462,239],{"class":448},[79,165464,3757],{"class":228},[79,165466,2689],{"class":96},[79,165468,1020],{"class":228},[79,165470,2940],{"class":96},[79,165472,850],{"class":228},[79,165474,165475,165477,165479,165481,165483,165485,165487,165489,165491],{"class":81,"line":167},[79,165476,117947],{"class":228},[79,165478,239],{"class":448},[79,165480,3757],{"class":228},[79,165482,151521],{"class":89},[79,165484,1020],{"class":228},[79,165486,2890],{"class":96},[79,165488,1020],{"class":228},[79,165490,71257],{"class":89},[79,165492,850],{"class":228},[19,165494,165495],{},"单元素元组必须加逗号：",[51,165497,165499],{"className":439,"code":165498,"language":441,"meta":57,"style":57},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[59,165500,165501,165515,165528,165532,165546],{"__ignoreMap":57},[79,165502,165503,165506,165508,165510,165512],{"class":81,"line":82},[79,165504,165505],{"class":228},"t1 ",[79,165507,239],{"class":448},[79,165509,3757],{"class":228},[79,165511,2689],{"class":96},[79,165513,165514],{"class":228},",)\n",[79,165516,165517,165520,165522,165524,165526],{"class":81,"line":167},[79,165518,165519],{"class":228},"t2 ",[79,165521,239],{"class":448},[79,165523,3757],{"class":228},[79,165525,2689],{"class":96},[79,165527,850],{"class":228},[79,165529,165530],{"class":81,"line":178},[79,165531,542],{"emptyLinePlaceholder":541},[79,165533,165534,165536,165538,165540,165543],{"class":81,"line":545},[79,165535,1889],{"class":96},[79,165537,455],{"class":228},[79,165539,105035],{"class":96},[79,165541,165542],{"class":228},"(t1))  ",[79,165544,165545],{"class":2313},"# tuple\n",[79,165547,165548,165550,165552,165554,165557],{"class":81,"line":550},[79,165549,1889],{"class":96},[79,165551,455],{"class":228},[79,165553,105035],{"class":96},[79,165555,165556],{"class":228},"(t2))  ",[79,165558,165559],{"class":2313},"# int\n",[19,165561,165562],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,165564,165566],{"id":165565},"_67-字符串str","6.7 字符串str",[19,165568,165569],{},"字符串也是序列，可以索引、切片和遍历。",[51,165571,165573],{"className":439,"code":165572,"language":441,"meta":57,"style":57},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[59,165574,165575,165583,165587,165598,165610,165614,165625],{"__ignoreMap":57},[79,165576,165577,165579,165581],{"class":81,"line":82},[79,165578,158077],{"class":228},[79,165580,239],{"class":448},[79,165582,161314],{"class":89},[79,165584,165585],{"class":81,"line":167},[79,165586,542],{"emptyLinePlaceholder":541},[79,165588,165589,165591,165594,165596],{"class":81,"line":178},[79,165590,1889],{"class":96},[79,165592,165593],{"class":228},"(text[",[79,165595,759],{"class":96},[79,165597,6727],{"class":228},[79,165599,165600,165602,165604,165606,165608],{"class":81,"line":545},[79,165601,1889],{"class":96},[79,165603,165593],{"class":228},[79,165605,478],{"class":448},[79,165607,775],{"class":96},[79,165609,6727],{"class":228},[79,165611,165612],{"class":81,"line":550},[79,165613,542],{"emptyLinePlaceholder":541},[79,165615,165616,165618,165620,165622],{"class":81,"line":562},[79,165617,1638],{"class":448},[79,165619,161325],{"class":228},[79,165621,921],{"class":448},[79,165623,165624],{"class":228}," text:\n",[79,165626,165627,165629],{"class":81,"line":568},[79,165628,1161],{"class":96},[79,165630,161336],{"class":228},[19,165632,165633],{},"字符串不可变：",[51,165635,165637],{"className":439,"code":165636,"language":441,"meta":57,"style":57},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[59,165638,165639,165647],{"__ignoreMap":57},[79,165640,165641,165643,165645],{"class":81,"line":82},[79,165642,158077],{"class":228},[79,165644,239],{"class":448},[79,165646,161314],{"class":89},[79,165648,165649,165652,165654,165656,165658,165661],{"class":81,"line":167},[79,165650,165651],{"class":228},"text[",[79,165653,759],{"class":96},[79,165655,877],{"class":228},[79,165657,239],{"class":448},[79,165659,165660],{"class":89}," \"P\"",[79,165662,165663],{"class":2313},"  # 报错\n",[19,165665,165666],{},"如果要得到新字符串：",[51,165668,165670],{"className":439,"code":165669,"language":441,"meta":57,"style":57},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[59,165671,165672,165680,165698],{"__ignoreMap":57},[79,165673,165674,165676,165678],{"class":81,"line":82},[79,165675,158077],{"class":228},[79,165677,239],{"class":448},[79,165679,161314],{"class":89},[79,165681,165682,165684,165686,165688,165690,165693,165695],{"class":81,"line":167},[79,165683,158077],{"class":228},[79,165685,239],{"class":448},[79,165687,165660],{"class":89},[79,165689,47561],{"class":448},[79,165691,165692],{"class":228}," text[",[79,165694,775],{"class":96},[79,165696,165697],{"class":228},":]\n",[79,165699,165700,165702],{"class":81,"line":178},[79,165701,1889],{"class":96},[79,165703,165704],{"class":228},"(text)\n",[14,165706,165708],{"id":165707},"_68-切片","6.8 切片",[19,165710,165711],{},"切片用于从序列中取一部分。",[51,165713,165715],{"className":439,"code":165714,"language":441,"meta":57,"style":57},"序列[开始:结束:步长]\n",[59,165716,165717],{"__ignoreMap":57},[79,165718,165719],{"class":81,"line":82},[79,165720,165714],{"class":228},[19,165722,165723],{},"结束位置不包含。",[51,165725,165727],{"className":439,"code":165726,"language":441,"meta":57,"style":57},"nums = [0, 1, 2, 3, 4, 5, 6]\n\nprint(nums[1:4])    # [1, 2, 3]\nprint(nums[:3])     # [0, 1, 2]\nprint(nums[3:])     # [3, 4, 5, 6]\nprint(nums[::2])    # [0, 2, 4, 6]\nprint(nums[::-1])   # 反转\n",[59,165728,165729,165766,165770,165789,165804,165818,165832],{"__ignoreMap":57},[79,165730,165731,165734,165736,165738,165740,165742,165744,165746,165748,165750,165752,165754,165756,165758,165760,165762,165764],{"class":81,"line":82},[79,165732,165733],{"class":228},"nums ",[79,165735,239],{"class":448},[79,165737,54220],{"class":228},[79,165739,759],{"class":96},[79,165741,1020],{"class":228},[79,165743,775],{"class":96},[79,165745,1020],{"class":228},[79,165747,2331],{"class":96},[79,165749,1020],{"class":228},[79,165751,970],{"class":96},[79,165753,1020],{"class":228},[79,165755,2537],{"class":96},[79,165757,1020],{"class":228},[79,165759,2563],{"class":96},[79,165761,1020],{"class":228},[79,165763,2587],{"class":96},[79,165765,762],{"class":228},[79,165767,165768],{"class":81,"line":167},[79,165769,542],{"emptyLinePlaceholder":541},[79,165771,165772,165774,165777,165779,165781,165783,165786],{"class":81,"line":178},[79,165773,1889],{"class":96},[79,165775,165776],{"class":228},"(nums[",[79,165778,775],{"class":96},[79,165780,3099],{"class":228},[79,165782,2537],{"class":96},[79,165784,165785],{"class":228},"])    ",[79,165787,165788],{"class":2313},"# [1, 2, 3]\n",[79,165790,165791,165793,165796,165798,165801],{"class":81,"line":545},[79,165792,1889],{"class":96},[79,165794,165795],{"class":228},"(nums[:",[79,165797,970],{"class":96},[79,165799,165800],{"class":228},"])     ",[79,165802,165803],{"class":2313},"# [0, 1, 2]\n",[79,165805,165806,165808,165810,165812,165815],{"class":81,"line":550},[79,165807,1889],{"class":96},[79,165809,165776],{"class":228},[79,165811,970],{"class":96},[79,165813,165814],{"class":228},":])     ",[79,165816,165817],{"class":2313},"# [3, 4, 5, 6]\n",[79,165819,165820,165822,165825,165827,165829],{"class":81,"line":562},[79,165821,1889],{"class":96},[79,165823,165824],{"class":228},"(nums[::",[79,165826,2331],{"class":96},[79,165828,165785],{"class":228},[79,165830,165831],{"class":2313},"# [0, 2, 4, 6]\n",[79,165833,165834,165836,165838,165840,165842,165845],{"class":81,"line":568},[79,165835,1889],{"class":96},[79,165837,165824],{"class":228},[79,165839,478],{"class":448},[79,165841,775],{"class":96},[79,165843,165844],{"class":228},"])   ",[79,165846,165847],{"class":2313},"# 反转\n",[19,165849,165850],{},"字符串切片：",[51,165852,165854],{"className":439,"code":165853,"language":441,"meta":57,"style":57},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[59,165855,165856,165865,165879],{"__ignoreMap":57},[79,165857,165858,165860,165862],{"class":81,"line":82},[79,165859,158077],{"class":228},[79,165861,239],{"class":448},[79,165863,165864],{"class":89}," \"abcdef\"\n",[79,165866,165867,165869,165871,165873,165875,165877],{"class":81,"line":167},[79,165868,1889],{"class":96},[79,165870,165593],{"class":228},[79,165872,775],{"class":96},[79,165874,3099],{"class":228},[79,165876,2537],{"class":96},[79,165878,6727],{"class":228},[79,165880,165881,165883,165886,165888,165890],{"class":81,"line":178},[79,165882,1889],{"class":96},[79,165884,165885],{"class":228},"(text[::",[79,165887,478],{"class":448},[79,165889,775],{"class":96},[79,165891,6727],{"class":228},[14,165893,165895],{"id":165894},"_69-集合set","6.9 集合set",[19,165897,165898],{},"集合特点：",[26,165900,165901,165904,165907],{},[29,165902,165903],{},"无序。",[29,165905,165906],{},"元素不重复。",[29,165908,165909],{},"可以做交集、并集、差集。",[51,165911,165913],{"className":439,"code":165912,"language":441,"meta":57,"style":57},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[59,165914,165915,165943],{"__ignoreMap":57},[79,165916,165917,165919,165921,165923,165925,165927,165929,165931,165933,165935,165937,165939,165941],{"class":81,"line":82},[79,165918,165733],{"class":228},[79,165920,239],{"class":448},[79,165922,6518],{"class":228},[79,165924,775],{"class":96},[79,165926,1020],{"class":228},[79,165928,2331],{"class":96},[79,165930,1020],{"class":228},[79,165932,970],{"class":96},[79,165934,1020],{"class":228},[79,165936,970],{"class":96},[79,165938,1020],{"class":228},[79,165940,2537],{"class":96},[79,165942,3671],{"class":228},[79,165944,165945,165947],{"class":81,"line":167},[79,165946,1889],{"class":96},[79,165948,165949],{"class":228},"(nums)\n",[19,165951,165952],{},"创建空集合：",[51,165954,165956],{"className":439,"code":165955,"language":441,"meta":57,"style":57},"s = set()\n",[59,165957,165958],{"__ignoreMap":57},[79,165959,165960,165962,165964,165966],{"class":81,"line":82},[79,165961,12614],{"class":228},[79,165963,239],{"class":448},[79,165965,121355],{"class":96},[79,165967,4061],{"class":228},[19,165969,11080,165970,165972],{},[59,165971,34457],{}," 是空字典，不是空集合。",[19,165974,165975],{},"集合常用操作：",[51,165977,165979],{"className":439,"code":165978,"language":441,"meta":57,"style":57},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[59,165980,165981,166001,166005,166014,166023,166032],{"__ignoreMap":57},[79,165982,165983,165985,165987,165989,165991,165993,165995,165997,165999],{"class":81,"line":82},[79,165984,12614],{"class":228},[79,165986,239],{"class":448},[79,165988,6518],{"class":228},[79,165990,775],{"class":96},[79,165992,1020],{"class":228},[79,165994,2331],{"class":96},[79,165996,1020],{"class":228},[79,165998,970],{"class":96},[79,166000,3671],{"class":228},[79,166002,166003],{"class":81,"line":167},[79,166004,542],{"emptyLinePlaceholder":541},[79,166006,166007,166010,166012],{"class":81,"line":178},[79,166008,166009],{"class":228},"s.add(",[79,166011,2537],{"class":96},[79,166013,850],{"class":228},[79,166015,166016,166019,166021],{"class":81,"line":545},[79,166017,166018],{"class":228},"s.remove(",[79,166020,2331],{"class":96},[79,166022,850],{"class":228},[79,166024,166025,166028,166030],{"class":81,"line":550},[79,166026,166027],{"class":228},"s.discard(",[79,166029,2689],{"class":96},[79,166031,850],{"class":228},[79,166033,166034,166036,166038,166040],{"class":81,"line":562},[79,166035,1889],{"class":96},[79,166037,455],{"class":228},[79,166039,9423],{"class":96},[79,166041,166042],{"class":228},"(s))\n",[19,166044,166045],{},"交并差：",[51,166047,166049],{"className":439,"code":166048,"language":441,"meta":57,"style":57},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[59,166050,166051,166071,166091,166095,166110,166123],{"__ignoreMap":57},[79,166052,166053,166055,166057,166059,166061,166063,166065,166067,166069],{"class":81,"line":82},[79,166054,12954],{"class":228},[79,166056,239],{"class":448},[79,166058,6518],{"class":228},[79,166060,775],{"class":96},[79,166062,1020],{"class":228},[79,166064,2331],{"class":96},[79,166066,1020],{"class":228},[79,166068,970],{"class":96},[79,166070,3671],{"class":228},[79,166072,166073,166075,166077,166079,166081,166083,166085,166087,166089],{"class":81,"line":167},[79,166074,12980],{"class":228},[79,166076,239],{"class":448},[79,166078,6518],{"class":228},[79,166080,970],{"class":96},[79,166082,1020],{"class":228},[79,166084,2537],{"class":96},[79,166086,1020],{"class":228},[79,166088,2563],{"class":96},[79,166090,3671],{"class":228},[79,166092,166093],{"class":81,"line":178},[79,166094,542],{"emptyLinePlaceholder":541},[79,166096,166097,166099,166102,166104,166107],{"class":81,"line":545},[79,166098,1889],{"class":96},[79,166100,166101],{"class":228},"(a ",[79,166103,2596],{"class":448},[79,166105,166106],{"class":228}," b)  ",[79,166108,166109],{"class":2313},"# 交集\n",[79,166111,166112,166114,166116,166118,166120],{"class":81,"line":550},[79,166113,1889],{"class":96},[79,166115,166101],{"class":228},[79,166117,3160],{"class":448},[79,166119,166106],{"class":228},[79,166121,166122],{"class":2313},"# 并集\n",[79,166124,166125,166127,166129,166131,166133],{"class":81,"line":562},[79,166126,1889],{"class":96},[79,166128,166101],{"class":228},[79,166130,478],{"class":448},[79,166132,166106],{"class":228},[79,166134,166135],{"class":2313},"# 差集\n",[14,166137,166139],{"id":166138},"_610-字典dict","6.10 字典dict",[19,166141,166142],{},"字典通过 key-value 保存数据。",[51,166144,166146],{"className":439,"code":166145,"language":441,"meta":57,"style":57},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[59,166147,166148,166156,166166,166177,166187],{"__ignoreMap":57},[79,166149,166150,166152,166154],{"class":81,"line":82},[79,166151,151114],{"class":228},[79,166153,239],{"class":448},[79,166155,17604],{"class":228},[79,166157,166158,166160,166162,166164],{"class":81,"line":167},[79,166159,148653],{"class":89},[79,166161,53431],{"class":228},[79,166163,151521],{"class":89},[79,166165,33468],{"class":228},[79,166167,166168,166171,166173,166175],{"class":81,"line":178},[79,166169,166170],{"class":89},"    \"age\"",[79,166172,53431],{"class":228},[79,166174,2890],{"class":96},[79,166176,33468],{"class":228},[79,166178,166179,166182,166184],{"class":81,"line":545},[79,166180,166181],{"class":89},"    \"score\"",[79,166183,53431],{"class":228},[79,166185,166186],{"class":96},"95\n",[79,166188,166189],{"class":81,"line":550},[79,166190,3671],{"class":228},[19,166192,166193],{},"获取值：",[51,166195,166197],{"className":439,"code":166196,"language":441,"meta":57,"style":57},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[59,166198,166199,166210],{"__ignoreMap":57},[79,166200,166201,166203,166206,166208],{"class":81,"line":82},[79,166202,1889],{"class":96},[79,166204,166205],{"class":228},"(student[",[79,166207,64667],{"class":89},[79,166209,6727],{"class":228},[79,166211,166212,166214,166217,166219],{"class":81,"line":167},[79,166213,1889],{"class":96},[79,166215,166216],{"class":228},"(student.get(",[79,166218,64667],{"class":89},[79,166220,1150],{"class":228},[19,166222,17420],{},[51,166224,166226],{"className":439,"code":166225,"language":441,"meta":57,"style":57},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[59,166227,166228,166241],{"__ignoreMap":57},[79,166229,166230,166232,166235,166238],{"class":81,"line":82},[79,166231,154492],{"class":228},[79,166233,166234],{"class":89},"\"address\"",[79,166236,166237],{"class":228},"]     ",[79,166239,166240],{"class":2313},"# key不存在会报错\n",[79,166242,166243,166246,166248,166250],{"class":81,"line":167},[79,166244,166245],{"class":228},"student.get(",[79,166247,166234],{"class":89},[79,166249,15747],{"class":228},[79,166251,166252],{"class":2313},"# key不存在返回None\n",[19,166254,166255],{},"设置默认值：",[51,166257,166259],{"className":439,"code":166258,"language":441,"meta":57,"style":57},"print(student.get(\"address\", \"未知\"))\n",[59,166260,166261],{"__ignoreMap":57},[79,166262,166263,166265,166267,166269,166271,166274],{"class":81,"line":82},[79,166264,1889],{"class":96},[79,166266,166216],{"class":228},[79,166268,166234],{"class":89},[79,166270,1020],{"class":228},[79,166272,166273],{"class":89},"\"未知\"",[79,166275,1150],{"class":228},[19,166277,166278],{},"新增和修改：",[51,166280,166282],{"className":439,"code":166281,"language":441,"meta":57,"style":57},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[59,166283,166284,166297],{"__ignoreMap":57},[79,166285,166286,166288,166290,166292,166294],{"class":81,"line":82},[79,166287,154492],{"class":228},[79,166289,71112],{"class":89},[79,166291,877],{"class":228},[79,166293,239],{"class":448},[79,166295,166296],{"class":96}," 19\n",[79,166298,166299,166301,166303,166305,166307],{"class":81,"line":167},[79,166300,154492],{"class":228},[79,166302,166234],{"class":89},[79,166304,877],{"class":228},[79,166306,239],{"class":448},[79,166308,166309],{"class":89}," \"北京\"\n",[19,166311,166312],{},"删除：",[51,166314,166316],{"className":439,"code":166315,"language":441,"meta":57,"style":57},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[59,166317,166318,166331,166341],{"__ignoreMap":57},[79,166319,166320,166322,166324,166327,166329],{"class":81,"line":82},[79,166321,156991],{"class":228},[79,166323,239],{"class":448},[79,166325,166326],{"class":228}," student.pop(",[79,166328,153105],{"class":89},[79,166330,850],{"class":228},[79,166332,166333,166335,166337,166339],{"class":81,"line":167},[79,166334,165016],{"class":448},[79,166336,153782],{"class":228},[79,166338,71112],{"class":89},[79,166340,762],{"class":228},[79,166342,166343],{"class":81,"line":178},[79,166344,166345],{"class":228},"student.clear()\n",[14,166347,166349],{"id":166348},"_611-字典遍历","6.11 字典遍历",[19,166351,166352],{},"遍历 key：",[51,166354,166356],{"className":439,"code":166355,"language":441,"meta":57,"style":57},"for key in student:\n    print(key, student[key])\n",[59,166357,166358,166370],{"__ignoreMap":57},[79,166359,166360,166362,166365,166367],{"class":81,"line":82},[79,166361,1638],{"class":448},[79,166363,166364],{"class":228}," key ",[79,166366,921],{"class":448},[79,166368,166369],{"class":228}," student:\n",[79,166371,166372,166374],{"class":81,"line":167},[79,166373,1161],{"class":96},[79,166375,166376],{"class":228},"(key, student[key])\n",[19,166378,166379],{},"遍历 value：",[51,166381,166383],{"className":439,"code":166382,"language":441,"meta":57,"style":57},"for value in student.values():\n    print(value)\n",[59,166384,166385,166397],{"__ignoreMap":57},[79,166386,166387,166389,166392,166394],{"class":81,"line":82},[79,166388,1638],{"class":448},[79,166390,166391],{"class":228}," value ",[79,166393,921],{"class":448},[79,166395,166396],{"class":228}," student.values():\n",[79,166398,166399,166401],{"class":81,"line":167},[79,166400,1161],{"class":96},[79,166402,166403],{"class":228},"(value)\n",[19,166405,166406],{},"遍历 key 和 value：",[51,166408,166410],{"className":439,"code":166409,"language":441,"meta":57,"style":57},"for key, value in student.items():\n    print(key, value)\n",[59,166411,166412,166424],{"__ignoreMap":57},[79,166413,166414,166416,166419,166421],{"class":81,"line":82},[79,166415,1638],{"class":448},[79,166417,166418],{"class":228}," key, value ",[79,166420,921],{"class":448},[79,166422,166423],{"class":228}," student.items():\n",[79,166425,166426,166428],{"class":81,"line":167},[79,166427,1161],{"class":96},[79,166429,166430],{"class":228},"(key, value)\n",[14,166432,166434],{"id":166433},"_612-嵌套容器","6.12 嵌套容器",[19,166436,166437],{},"列表中保存字典，是项目中最常见的结构之一。",[51,166439,166441],{"className":439,"code":166440,"language":441,"meta":57,"style":57},"students = [\n    {\"name\": \"小明\", \"age\": 18, \"score\": 95},\n    {\"name\": \"小红\", \"age\": 17, \"score\": 88},\n    {\"name\": \"小刚\", \"age\": 19, \"score\": 72},\n]\n\nfor student in students:\n    print(student[\"name\"], student[\"score\"])\n",[59,166442,166443,166451,166479,166507,166535,166539,166543,166553],{"__ignoreMap":57},[79,166444,166445,166447,166449],{"class":81,"line":82},[79,166446,161349],{"class":228},[79,166448,239],{"class":448},[79,166450,57436],{"class":228},[79,166452,166453,166455,166457,166459,166461,166463,166465,166467,166469,166471,166473,166475,166477],{"class":81,"line":167},[79,166454,150018],{"class":228},[79,166456,64667],{"class":89},[79,166458,53431],{"class":228},[79,166460,151521],{"class":89},[79,166462,1020],{"class":228},[79,166464,71112],{"class":89},[79,166466,53431],{"class":228},[79,166468,2890],{"class":96},[79,166470,1020],{"class":228},[79,166472,153105],{"class":89},[79,166474,53431],{"class":228},[79,166476,3228],{"class":96},[79,166478,7000],{"class":228},[79,166480,166481,166483,166485,166487,166489,166491,166493,166495,166497,166499,166501,166503,166505],{"class":81,"line":178},[79,166482,150018],{"class":228},[79,166484,64667],{"class":89},[79,166486,53431],{"class":228},[79,166488,152569],{"class":89},[79,166490,1020],{"class":228},[79,166492,71112],{"class":89},[79,166494,53431],{"class":228},[79,166496,2865],{"class":96},[79,166498,1020],{"class":228},[79,166500,153105],{"class":89},[79,166502,53431],{"class":228},[79,166504,3051],{"class":96},[79,166506,7000],{"class":228},[79,166508,166509,166511,166513,166515,166517,166519,166521,166523,166525,166527,166529,166531,166533],{"class":81,"line":545},[79,166510,150018],{"class":228},[79,166512,64667],{"class":89},[79,166514,53431],{"class":228},[79,166516,161364],{"class":89},[79,166518,1020],{"class":228},[79,166520,71112],{"class":89},[79,166522,53431],{"class":228},[79,166524,2915],{"class":96},[79,166526,1020],{"class":228},[79,166528,153105],{"class":89},[79,166530,53431],{"class":228},[79,166532,2649],{"class":96},[79,166534,7000],{"class":228},[79,166536,166537],{"class":81,"line":550},[79,166538,762],{"class":228},[79,166540,166541],{"class":81,"line":562},[79,166542,542],{"emptyLinePlaceholder":541},[79,166544,166545,166547,166549,166551],{"class":81,"line":568},[79,166546,1638],{"class":448},[79,166548,153770],{"class":228},[79,166550,921],{"class":448},[79,166552,153775],{"class":228},[79,166554,166555,166557,166559,166561,166564,166566],{"class":81,"line":574},[79,166556,1161],{"class":96},[79,166558,166205],{"class":228},[79,166560,64667],{"class":89},[79,166562,166563],{"class":228},"], student[",[79,166565,153105],{"class":89},[79,166567,6727],{"class":228},[19,166569,166570],{},"统计平均分：",[51,166572,166574],{"className":439,"code":166573,"language":441,"meta":57,"style":57},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[59,166575,166576,166584,166588,166598,166610,166614,166629],{"__ignoreMap":57},[79,166577,166578,166580,166582],{"class":81,"line":82},[79,166579,158893],{"class":228},[79,166581,239],{"class":448},[79,166583,49328],{"class":96},[79,166585,166586],{"class":81,"line":167},[79,166587,542],{"emptyLinePlaceholder":541},[79,166589,166590,166592,166594,166596],{"class":81,"line":178},[79,166591,1638],{"class":448},[79,166593,153770],{"class":228},[79,166595,921],{"class":448},[79,166597,153775],{"class":228},[79,166599,166600,166602,166604,166606,166608],{"class":81,"line":545},[79,166601,160940],{"class":228},[79,166603,1075],{"class":448},[79,166605,153782],{"class":228},[79,166607,153105],{"class":89},[79,166609,762],{"class":228},[79,166611,166612],{"class":81,"line":550},[79,166613,542],{"emptyLinePlaceholder":541},[79,166615,166616,166618,166620,166622,166624,166626],{"class":81,"line":562},[79,166617,165407],{"class":228},[79,166619,239],{"class":448},[79,166621,165412],{"class":228},[79,166623,2824],{"class":448},[79,166625,9396],{"class":96},[79,166627,166628],{"class":228},"(students)\n",[79,166630,166631,166633,166635,166637,166639,166641,166643,166645,166647,166649],{"class":81,"line":568},[79,166632,1889],{"class":96},[79,166634,455],{"class":228},[79,166636,2307],{"class":448},[79,166638,165430],{"class":89},[79,166640,3136],{"class":96},[79,166642,165435],{"class":228},[79,166644,158792],{"class":448},[79,166646,3185],{"class":96},[79,166648,2495],{"class":89},[79,166650,850],{"class":228},[19,166652,166653],{},"查找学生：",[51,166655,166657],{"className":439,"code":166656,"language":441,"meta":57,"style":57},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[59,166658,166659,166674,166678,166688,166702,166708,166712,166718],{"__ignoreMap":57},[79,166660,166661,166663,166665,166667,166669,166672],{"class":81,"line":82},[79,166662,113211],{"class":228},[79,166664,239],{"class":448},[79,166666,62594],{"class":96},[79,166668,455],{"class":228},[79,166670,166671],{"class":89},"\"请输入学生姓名:\"",[79,166673,850],{"class":228},[79,166675,166676],{"class":81,"line":167},[79,166677,542],{"emptyLinePlaceholder":541},[79,166679,166680,166682,166684,166686],{"class":81,"line":178},[79,166681,1638],{"class":448},[79,166683,153770],{"class":228},[79,166685,921],{"class":448},[79,166687,153775],{"class":228},[79,166689,166690,166692,166694,166696,166698,166700],{"class":81,"line":545},[79,166691,5176],{"class":448},[79,166693,153782],{"class":228},[79,166695,64667],{"class":89},[79,166697,877],{"class":228},[79,166699,5025],{"class":448},[79,166701,162065],{"class":228},[79,166703,166704,166706],{"class":81,"line":550},[79,166705,34449],{"class":96},[79,166707,151675],{"class":228},[79,166709,166710],{"class":81,"line":562},[79,166711,33628],{"class":448},[79,166713,166714,166716],{"class":81,"line":568},[79,166715,3796],{"class":448},[79,166717,745],{"class":228},[79,166719,166720,166722,166724,166727],{"class":81,"line":574},[79,166721,1161],{"class":96},[79,166723,455],{"class":228},[79,166725,166726],{"class":89},"\"没有找到\"",[79,166728,850],{"class":228},[14,166730,166732],{"id":166731},"_613-容器通用操作","6.13 容器通用操作",[19,166734,166735],{},"长度：",[51,166737,166739],{"className":439,"code":166738,"language":441,"meta":57,"style":57},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[59,166740,166741,166760,166770],{"__ignoreMap":57},[79,166742,166743,166745,166748,166750,166752,166754,166756,166758],{"class":81,"line":82},[79,166744,9423],{"class":96},[79,166746,166747],{"class":228},"([",[79,166749,775],{"class":96},[79,166751,1020],{"class":228},[79,166753,2331],{"class":96},[79,166755,1020],{"class":228},[79,166757,970],{"class":96},[79,166759,6727],{"class":228},[79,166761,166762,166764,166766,166768],{"class":81,"line":167},[79,166763,9423],{"class":96},[79,166765,455],{"class":228},[79,166767,157513],{"class":89},[79,166769,850],{"class":228},[79,166771,166772,166774,166777,166779,166781,166783],{"class":81,"line":178},[79,166773,9423],{"class":96},[79,166775,166776],{"class":228},"({",[79,166778,64667],{"class":89},[79,166780,53431],{"class":228},[79,166782,151521],{"class":89},[79,166784,166785],{"class":228},"})\n",[19,166787,166788],{},"最大最小：",[51,166790,166792],{"className":439,"code":166791,"language":441,"meta":57,"style":57},"max([1, 2, 3])\nmin([1, 2, 3])\n",[59,166793,166794,166812],{"__ignoreMap":57},[79,166795,166796,166798,166800,166802,166804,166806,166808,166810],{"class":81,"line":82},[79,166797,8082],{"class":96},[79,166799,166747],{"class":228},[79,166801,775],{"class":96},[79,166803,1020],{"class":228},[79,166805,2331],{"class":96},[79,166807,1020],{"class":228},[79,166809,970],{"class":96},[79,166811,6727],{"class":228},[79,166813,166814,166817,166819,166821,166823,166825,166827,166829],{"class":81,"line":167},[79,166815,166816],{"class":96},"min",[79,166818,166747],{"class":228},[79,166820,775],{"class":96},[79,166822,1020],{"class":228},[79,166824,2331],{"class":96},[79,166826,1020],{"class":228},[79,166828,970],{"class":96},[79,166830,6727],{"class":228},[19,166832,166833],{},"求和：",[51,166835,166837],{"className":439,"code":166836,"language":441,"meta":57,"style":57},"sum([1, 2, 3])\n",[59,166838,166839],{"__ignoreMap":57},[79,166840,166841,166844,166846,166848,166850,166852,166854,166856],{"class":81,"line":82},[79,166842,166843],{"class":96},"sum",[79,166845,166747],{"class":228},[79,166847,775],{"class":96},[79,166849,1020],{"class":228},[79,166851,2331],{"class":96},[79,166853,1020],{"class":228},[79,166855,970],{"class":96},[79,166857,6727],{"class":228},[19,166859,165104],{},[51,166861,166863],{"className":439,"code":166862,"language":441,"meta":57,"style":57},"sorted([3, 1, 2])\n",[59,166864,166865],{"__ignoreMap":57},[79,166866,166867,166870,166872,166874,166876,166878,166880,166882],{"class":81,"line":82},[79,166868,166869],{"class":96},"sorted",[79,166871,166747],{"class":228},[79,166873,970],{"class":96},[79,166875,1020],{"class":228},[79,166877,775],{"class":96},[79,166879,1020],{"class":228},[79,166881,2331],{"class":96},[79,166883,6727],{"class":228},[19,166885,166886],{},"类型转换：",[51,166888,166890],{"className":439,"code":166889,"language":441,"meta":57,"style":57},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[59,166891,166892,166902,166920],{"__ignoreMap":57},[79,166893,166894,166896,166898,166900],{"class":81,"line":82},[79,166895,155703],{"class":96},[79,166897,455],{"class":228},[79,166899,157513],{"class":89},[79,166901,850],{"class":228},[79,166903,166904,166906,166908,166910,166912,166914,166916,166918],{"class":81,"line":167},[79,166905,156898],{"class":96},[79,166907,166747],{"class":228},[79,166909,775],{"class":96},[79,166911,1020],{"class":228},[79,166913,2331],{"class":96},[79,166915,1020],{"class":228},[79,166917,970],{"class":96},[79,166919,6727],{"class":228},[79,166921,166922,166924,166926,166928,166930,166932,166934,166936,166938,166940],{"class":81,"line":178},[79,166923,156923],{"class":96},[79,166925,166747],{"class":228},[79,166927,775],{"class":96},[79,166929,1020],{"class":228},[79,166931,775],{"class":96},[79,166933,1020],{"class":228},[79,166935,2331],{"class":96},[79,166937,1020],{"class":228},[79,166939,970],{"class":96},[79,166941,6727],{"class":228},[19,166943,166944],{},"成员判断：",[51,166946,166948],{"className":439,"code":166947,"language":441,"meta":57,"style":57},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[59,166949,166950,166967,166991],{"__ignoreMap":57},[79,166951,166952,166954,166956,166959,166962,166965],{"class":81,"line":82},[79,166953,1889],{"class":96},[79,166955,455],{"class":228},[79,166957,166958],{"class":89},"\"a\"",[79,166960,166961],{"class":448}," in",[79,166963,166964],{"class":89}," \"abc\"",[79,166966,850],{"class":228},[79,166968,166969,166971,166973,166975,166977,166979,166981,166983,166985,166987,166989],{"class":81,"line":167},[79,166970,1889],{"class":96},[79,166972,455],{"class":228},[79,166974,775],{"class":96},[79,166976,166961],{"class":448},[79,166978,54220],{"class":228},[79,166980,775],{"class":96},[79,166982,1020],{"class":228},[79,166984,2331],{"class":96},[79,166986,1020],{"class":228},[79,166988,970],{"class":96},[79,166990,6727],{"class":228},[79,166992,166993,166995,166997,166999,167001,167003,167005,167007,167009],{"class":81,"line":178},[79,166994,1889],{"class":96},[79,166996,455],{"class":228},[79,166998,64667],{"class":89},[79,167000,166961],{"class":448},[79,167002,6518],{"class":228},[79,167004,64667],{"class":89},[79,167006,53431],{"class":228},[79,167008,151521],{"class":89},[79,167010,166785],{"class":228},[14,167012,167014],{"id":167013},"_614-推导式","6.14 推导式",[19,167016,167017],{},"推导式用于快速生成容器。",[19,167019,167020],{},"列表推导式：",[51,167022,167024],{"className":439,"code":167023,"language":441,"meta":57,"style":57},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[59,167025,167026,167053],{"__ignoreMap":57},[79,167027,167028,167030,167032,167035,167037,167039,167041,167043,167045,167047,167049,167051],{"class":81,"line":82},[79,167029,165733],{"class":228},[79,167031,239],{"class":448},[79,167033,167034],{"class":228}," [i ",[79,167036,1638],{"class":448},[79,167038,11493],{"class":228},[79,167040,921],{"class":448},[79,167042,924],{"class":96},[79,167044,455],{"class":228},[79,167046,775],{"class":96},[79,167048,1020],{"class":228},[79,167050,2587],{"class":96},[79,167052,99285],{"class":228},[79,167054,167055,167057],{"class":81,"line":167},[79,167056,1889],{"class":96},[79,167058,165949],{"class":228},[19,167060,167061],{},"带条件：",[51,167063,167065],{"className":439,"code":167064,"language":441,"meta":57,"style":57},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[59,167066,167067,167108],{"__ignoreMap":57},[79,167068,167069,167072,167074,167076,167078,167080,167082,167084,167086,167088,167090,167092,167094,167096,167098,167100,167102,167104,167106],{"class":81,"line":82},[79,167070,167071],{"class":228},"even_nums ",[79,167073,239],{"class":448},[79,167075,167034],{"class":228},[79,167077,1638],{"class":448},[79,167079,11493],{"class":228},[79,167081,921],{"class":448},[79,167083,924],{"class":96},[79,167085,455],{"class":228},[79,167087,775],{"class":96},[79,167089,1020],{"class":228},[79,167091,2580],{"class":96},[79,167093,15747],{"class":228},[79,167095,1210],{"class":448},[79,167097,11493],{"class":228},[79,167099,1094],{"class":448},[79,167101,16788],{"class":96},[79,167103,1100],{"class":448},[79,167105,1103],{"class":96},[79,167107,762],{"class":228},[79,167109,167110,167112],{"class":81,"line":167},[79,167111,1889],{"class":96},[79,167113,167114],{"class":228},"(even_nums)\n",[19,167116,167117],{},"字典推导式：",[51,167119,167121],{"className":439,"code":167120,"language":441,"meta":57,"style":57},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[59,167122,167123,167157],{"__ignoreMap":57},[79,167124,167125,167128,167130,167133,167135,167137,167140,167142,167144,167146,167148,167150,167152,167154],{"class":81,"line":82},[79,167126,167127],{"class":228},"squares ",[79,167129,239],{"class":448},[79,167131,167132],{"class":228}," {i: i ",[79,167134,12696],{"class":448},[79,167136,16788],{"class":96},[79,167138,167139],{"class":448}," for",[79,167141,11493],{"class":228},[79,167143,921],{"class":448},[79,167145,924],{"class":96},[79,167147,455],{"class":228},[79,167149,775],{"class":96},[79,167151,1020],{"class":228},[79,167153,2587],{"class":96},[79,167155,167156],{"class":228},")}\n",[79,167158,167159,167161],{"class":81,"line":167},[79,167160,1889],{"class":96},[79,167162,167163],{"class":228},"(squares)\n",[19,167165,167166],{},"集合推导式：",[51,167168,167170],{"className":439,"code":167169,"language":441,"meta":57,"style":57},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[59,167171,167172,167193],{"__ignoreMap":57},[79,167173,167174,167177,167179,167182,167184,167186,167188,167191],{"class":81,"line":82},[79,167175,167176],{"class":228},"chars ",[79,167178,239],{"class":448},[79,167180,167181],{"class":228}," {ch ",[79,167183,1638],{"class":448},[79,167185,161325],{"class":228},[79,167187,921],{"class":448},[79,167189,167190],{"class":89}," \"hello\"",[79,167192,3671],{"class":228},[79,167194,167195,167197],{"class":81,"line":167},[79,167196,1889],{"class":96},[79,167198,167199],{"class":228},"(chars)\n",[19,167201,167202],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,167204,167206],{"id":167205},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[51,167208,167210],{"className":439,"code":167209,"language":441,"meta":57,"style":57},"students = [\n    {\"name\": \"小明\", \"score\": 95},\n    {\"name\": \"小红\", \"score\": 88},\n    {\"name\": \"小刚\", \"score\": 72},\n    {\"name\": \"小李\", \"score\": 59},\n]\n\ntotal = 0\nmax_student = students[0]\npassed = []\n\nfor student in students:\n    total += student[\"score\"]\n\n    if student[\"score\"] > max_student[\"score\"]:\n        max_student = student\n\n    if student[\"score\"] >= 60:\n        passed.append(student)\n\navg = total \u002F len(students)\n\nprint(f\"平均分:{avg:.2f}\")\nprint(f\"最高分学生:{max_student['name']} {max_student['score']}\")\nprint(f\"及格人数:{len(passed)}\")\n",[59,167211,167212,167220,167240,167260,167280,167300,167304,167308,167316,167330,167339,167343,167353,167365,167369,167389,167398,167402,167418,167423,167427,167441,167445,167467,167503],{"__ignoreMap":57},[79,167213,167214,167216,167218],{"class":81,"line":82},[79,167215,161349],{"class":228},[79,167217,239],{"class":448},[79,167219,57436],{"class":228},[79,167221,167222,167224,167226,167228,167230,167232,167234,167236,167238],{"class":81,"line":167},[79,167223,150018],{"class":228},[79,167225,64667],{"class":89},[79,167227,53431],{"class":228},[79,167229,151521],{"class":89},[79,167231,1020],{"class":228},[79,167233,153105],{"class":89},[79,167235,53431],{"class":228},[79,167237,3228],{"class":96},[79,167239,7000],{"class":228},[79,167241,167242,167244,167246,167248,167250,167252,167254,167256,167258],{"class":81,"line":178},[79,167243,150018],{"class":228},[79,167245,64667],{"class":89},[79,167247,53431],{"class":228},[79,167249,152569],{"class":89},[79,167251,1020],{"class":228},[79,167253,153105],{"class":89},[79,167255,53431],{"class":228},[79,167257,3051],{"class":96},[79,167259,7000],{"class":228},[79,167261,167262,167264,167266,167268,167270,167272,167274,167276,167278],{"class":81,"line":545},[79,167263,150018],{"class":228},[79,167265,64667],{"class":89},[79,167267,53431],{"class":228},[79,167269,161364],{"class":89},[79,167271,1020],{"class":228},[79,167273,153105],{"class":89},[79,167275,53431],{"class":228},[79,167277,2649],{"class":96},[79,167279,7000],{"class":228},[79,167281,167282,167284,167286,167288,167290,167292,167294,167296,167298],{"class":81,"line":550},[79,167283,150018],{"class":228},[79,167285,64667],{"class":89},[79,167287,53431],{"class":228},[79,167289,164943],{"class":89},[79,167291,1020],{"class":228},[79,167293,153105],{"class":89},[79,167295,53431],{"class":228},[79,167297,3122],{"class":96},[79,167299,7000],{"class":228},[79,167301,167302],{"class":81,"line":562},[79,167303,762],{"class":228},[79,167305,167306],{"class":81,"line":568},[79,167307,542],{"emptyLinePlaceholder":541},[79,167309,167310,167312,167314],{"class":81,"line":574},[79,167311,158893],{"class":228},[79,167313,239],{"class":448},[79,167315,49328],{"class":96},[79,167317,167318,167321,167323,167326,167328],{"class":81,"line":579},[79,167319,167320],{"class":228},"max_student ",[79,167322,239],{"class":448},[79,167324,167325],{"class":228}," students[",[79,167327,759],{"class":96},[79,167329,762],{"class":228},[79,167331,167332,167335,167337],{"class":81,"line":585},[79,167333,167334],{"class":228},"passed ",[79,167336,239],{"class":448},[79,167338,53832],{"class":228},[79,167340,167341],{"class":81,"line":591},[79,167342,542],{"emptyLinePlaceholder":541},[79,167344,167345,167347,167349,167351],{"class":81,"line":596},[79,167346,1638],{"class":448},[79,167348,153770],{"class":228},[79,167350,921],{"class":448},[79,167352,153775],{"class":228},[79,167354,167355,167357,167359,167361,167363],{"class":81,"line":602},[79,167356,160940],{"class":228},[79,167358,1075],{"class":448},[79,167360,153782],{"class":228},[79,167362,153105],{"class":89},[79,167364,762],{"class":228},[79,167366,167367],{"class":81,"line":608},[79,167368,542],{"emptyLinePlaceholder":541},[79,167370,167371,167373,167375,167377,167379,167381,167384,167386],{"class":81,"line":614},[79,167372,5176],{"class":448},[79,167374,153782],{"class":228},[79,167376,153105],{"class":89},[79,167378,877],{"class":228},[79,167380,3199],{"class":448},[79,167382,167383],{"class":228}," max_student[",[79,167385,153105],{"class":89},[79,167387,167388],{"class":228},"]:\n",[79,167390,167391,167394,167396],{"class":81,"line":619},[79,167392,167393],{"class":228},"        max_student ",[79,167395,239],{"class":448},[79,167397,153798],{"class":228},[79,167399,167400],{"class":81,"line":625},[79,167401,542],{"emptyLinePlaceholder":541},[79,167403,167404,167406,167408,167410,167412,167414,167416],{"class":81,"line":631},[79,167405,5176],{"class":448},[79,167407,153782],{"class":228},[79,167409,153105],{"class":89},[79,167411,877],{"class":228},[79,167413,3805],{"class":448},[79,167415,159470],{"class":96},[79,167417,745],{"class":228},[79,167419,167420],{"class":81,"line":637},[79,167421,167422],{"class":228},"        passed.append(student)\n",[79,167424,167425],{"class":81,"line":643},[79,167426,542],{"emptyLinePlaceholder":541},[79,167428,167429,167431,167433,167435,167437,167439],{"class":81,"line":649},[79,167430,165407],{"class":228},[79,167432,239],{"class":448},[79,167434,165412],{"class":228},[79,167436,2824],{"class":448},[79,167438,9396],{"class":96},[79,167440,166628],{"class":228},[79,167442,167443],{"class":81,"line":655},[79,167444,542],{"emptyLinePlaceholder":541},[79,167446,167447,167449,167451,167453,167455,167457,167459,167461,167463,167465],{"class":81,"line":660},[79,167448,1889],{"class":96},[79,167450,455],{"class":228},[79,167452,2307],{"class":448},[79,167454,165430],{"class":89},[79,167456,3136],{"class":96},[79,167458,165435],{"class":228},[79,167460,158792],{"class":448},[79,167462,3185],{"class":96},[79,167464,2495],{"class":89},[79,167466,850],{"class":228},[79,167468,167469,167471,167473,167475,167478,167480,167483,167485,167487,167489,167491,167493,167495,167497,167499,167501],{"class":81,"line":666},[79,167470,1889],{"class":96},[79,167472,455],{"class":228},[79,167474,2307],{"class":448},[79,167476,167477],{"class":89},"\"最高分学生:",[79,167479,3136],{"class":96},[79,167481,167482],{"class":228},"max_student[",[79,167484,154515],{"class":89},[79,167486,3179],{"class":228},[79,167488,3185],{"class":96},[79,167490,6518],{"class":96},[79,167492,167482],{"class":228},[79,167494,154553],{"class":89},[79,167496,3179],{"class":228},[79,167498,3185],{"class":96},[79,167500,2495],{"class":89},[79,167502,850],{"class":228},[79,167504,167505,167507,167509,167511,167514,167517,167520,167522,167524],{"class":81,"line":672},[79,167506,1889],{"class":96},[79,167508,455],{"class":228},[79,167510,2307],{"class":448},[79,167512,167513],{"class":89},"\"及格人数:",[79,167515,167516],{"class":96},"{len",[79,167518,167519],{"class":228},"(passed)",[79,167521,3185],{"class":96},[79,167523,2495],{"class":89},[79,167525,850],{"class":228},[14,167527,167529],{"id":167528},"_616-易错点","6.16 易错点",[26,167531,167532,167535,167538,167541,167547,167556],{},[29,167533,167534],{},"列表可变，元组和字符串不可变。",[29,167536,167537],{},"切片结束位置不包含。",[29,167539,167540],{},"字典通过 key 取值，不是通过索引。",[29,167542,167543,167544,497],{},"空集合要用 ",[59,167545,167546],{},"set()",[29,167548,106287,167549,167552,167553,497],{},[59,167550,167551],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[59,167554,167555],{},"get()",[29,167557,167558],{},"嵌套容器要先看清楚每一层是什么类型。",[14,167560,167562],{"id":167561},"_617-本章练习","6.17 本章练习",[26,167564,167565,167568,167571,167574,167577],{},[29,167566,167567],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[29,167569,167570],{},"输入一句话，统计每个字符出现次数。",[29,167572,167573],{},"使用集合去除列表中的重复元素。",[29,167575,167576],{},"使用字典保存一个学生的信息，并实现修改成绩。",[29,167578,167579],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[2159,167581,167582],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":57,"searchDepth":167,"depth":167,"links":167584},[167585,167586,167587,167588,167589,167590,167591,167592,167593,167594,167595,167596,167597,167598,167599,167600,167601],{"id":164565,"depth":167,"text":164566},{"id":164682,"depth":167,"text":164683},{"id":164772,"depth":167,"text":164773},{"id":164896,"depth":167,"text":164897},{"id":165259,"depth":167,"text":165260},{"id":165446,"depth":167,"text":165447},{"id":165565,"depth":167,"text":165566},{"id":165707,"depth":167,"text":165708},{"id":165894,"depth":167,"text":165895},{"id":166138,"depth":167,"text":166139},{"id":166348,"depth":167,"text":166349},{"id":166433,"depth":167,"text":166434},{"id":166731,"depth":167,"text":166732},{"id":167013,"depth":167,"text":167014},{"id":167205,"depth":167,"text":167206},{"id":167528,"depth":167,"text":167529},{"id":167561,"depth":167,"text":167562},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":164557,"description":25402},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":167608,"title":167609,"body":167610,"description":25402,"extension":2186,"meta":169782,"navigation":541,"path":169783,"seo":169784,"stem":169785,"__hash__":169786},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":167611,"toc":169757},[167612,167615,167619,167622,167702,167705,167726,167729,167733,167736,167798,167801,167818,167822,167825,167870,167872,167880,167884,167887,167969,167972,167975,168000,168003,168026,168030,168033,168035,168097,168100,168102,168153,168157,168161,168167,168272,168276,168282,168353,168357,168360,168428,168431,168511,168515,168521,168557,168560,168563,168673,168679,168683,168686,168758,168761,168765,168769,168774,168836,168840,168845,168913,168917,168922,169038,169042,169045,169125,169128,169132,169135,169239,169241,169256,169259,169263,169401,169409,169413,169415,169426,169428,169686,169690,169722,169726,169754],[10,167613,167609],{"id":167614},"_7-函数进阶",[14,167616,167618],{"id":167617},"_71-多返回值","7.1 多返回值",[19,167620,167621],{},"Python 函数可以返回多个值，本质上返回的是元组。",[51,167623,167625],{"className":439,"code":167624,"language":441,"meta":57,"style":57},"def get_info():\n    name = \"小明\"\n    age = 18\n    score = 95\n    return name, age, score\n\n\nresult = get_info()\nprint(result)\nprint(type(result))\n",[59,167626,167627,167636,167644,167652,167661,167668,167672,167676,167685,167691],{"__ignoreMap":57},[79,167628,167629,167631,167634],{"class":81,"line":82},[79,167630,703],{"class":448},[79,167632,167633],{"class":85}," get_info",[79,167635,33953],{"class":228},[79,167637,167638,167640,167642],{"class":81,"line":167},[79,167639,154003],{"class":228},[79,167641,239],{"class":448},[79,167643,150986],{"class":89},[79,167645,167646,167648,167650],{"class":81,"line":178},[79,167647,154019],{"class":228},[79,167649,239],{"class":448},[79,167651,148184],{"class":96},[79,167653,167654,167656,167658],{"class":81,"line":545},[79,167655,154034],{"class":228},[79,167657,239],{"class":448},[79,167659,167660],{"class":96}," 95\n",[79,167662,167663,167665],{"class":81,"line":550},[79,167664,715],{"class":448},[79,167666,167667],{"class":228}," name, age, score\n",[79,167669,167670],{"class":81,"line":562},[79,167671,542],{"emptyLinePlaceholder":541},[79,167673,167674],{"class":81,"line":568},[79,167675,542],{"emptyLinePlaceholder":541},[79,167677,167678,167680,167682],{"class":81,"line":574},[79,167679,162939],{"class":228},[79,167681,239],{"class":448},[79,167683,167684],{"class":228}," get_info()\n",[79,167686,167687,167689],{"class":81,"line":579},[79,167688,1889],{"class":96},[79,167690,78573],{"class":228},[79,167692,167693,167695,167697,167699],{"class":81,"line":585},[79,167694,1889],{"class":96},[79,167696,455],{"class":228},[79,167698,105035],{"class":96},[79,167700,167701],{"class":228},"(result))\n",[19,167703,167704],{},"可以直接解包：",[51,167706,167708],{"className":439,"code":167707,"language":441,"meta":57,"style":57},"name, age, score = get_info()\nprint(name, age, score)\n",[59,167709,167710,167719],{"__ignoreMap":57},[79,167711,167712,167715,167717],{"class":81,"line":82},[79,167713,167714],{"class":228},"name, age, score ",[79,167716,239],{"class":448},[79,167718,167684],{"class":228},[79,167720,167721,167723],{"class":81,"line":167},[79,167722,1889],{"class":96},[79,167724,167725],{"class":228},"(name, age, score)\n",[19,167727,167728],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,167730,167732],{"id":167731},"_72-位置参数","7.2 位置参数",[19,167734,167735],{},"位置参数按顺序传递。",[51,167737,167739],{"className":439,"code":167738,"language":441,"meta":57,"style":57},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[59,167740,167741,167749,167777,167781,167785],{"__ignoreMap":57},[79,167742,167743,167745,167747],{"class":81,"line":82},[79,167744,703],{"class":448},[79,167746,151005],{"class":85},[79,167748,151008],{"class":228},[79,167750,167751,167753,167755,167757,167759,167761,167763,167765,167767,167769,167771,167773,167775],{"class":81,"line":167},[79,167752,1161],{"class":96},[79,167754,455],{"class":228},[79,167756,2307],{"class":448},[79,167758,151019],{"class":89},[79,167760,3136],{"class":96},[79,167762,81798],{"class":228},[79,167764,3185],{"class":96},[79,167766,151028],{"class":89},[79,167768,3136],{"class":96},[79,167770,72209],{"class":228},[79,167772,3185],{"class":96},[79,167774,151037],{"class":89},[79,167776,850],{"class":228},[79,167778,167779],{"class":81,"line":178},[79,167780,542],{"emptyLinePlaceholder":541},[79,167782,167783],{"class":81,"line":545},[79,167784,542],{"emptyLinePlaceholder":541},[79,167786,167787,167790,167792,167794,167796],{"class":81,"line":550},[79,167788,167789],{"class":228},"introduce(",[79,167791,151521],{"class":89},[79,167793,1020],{"class":228},[79,167795,2890],{"class":96},[79,167797,850],{"class":228},[19,167799,167800],{},"顺序错了就会得到错误含义：",[51,167802,167804],{"className":439,"code":167803,"language":441,"meta":57,"style":57},"introduce(18, \"小明\")\n",[59,167805,167806],{"__ignoreMap":57},[79,167807,167808,167810,167812,167814,167816],{"class":81,"line":82},[79,167809,167789],{"class":228},[79,167811,2890],{"class":96},[79,167813,1020],{"class":228},[79,167815,151521],{"class":89},[79,167817,850],{"class":228},[14,167819,167821],{"id":167820},"_73-关键字参数","7.3 关键字参数",[19,167823,167824],{},"关键字参数按参数名传递。",[51,167826,167828],{"className":439,"code":167827,"language":441,"meta":57,"style":57},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[59,167829,167830,167850],{"__ignoreMap":57},[79,167831,167832,167834,167836,167838,167840,167842,167844,167846,167848],{"class":81,"line":82},[79,167833,167789],{"class":228},[79,167835,81798],{"class":7284},[79,167837,239],{"class":448},[79,167839,151521],{"class":89},[79,167841,1020],{"class":228},[79,167843,72209],{"class":7284},[79,167845,239],{"class":448},[79,167847,2890],{"class":96},[79,167849,850],{"class":228},[79,167851,167852,167854,167856,167858,167860,167862,167864,167866,167868],{"class":81,"line":167},[79,167853,167789],{"class":228},[79,167855,72209],{"class":7284},[79,167857,239],{"class":448},[79,167859,2890],{"class":96},[79,167861,1020],{"class":228},[79,167863,81798],{"class":7284},[79,167865,239],{"class":448},[79,167867,151521],{"class":89},[79,167869,850],{"class":228},[19,167871,119567],{},[26,167873,167874,167877],{},[29,167875,167876],{},"顺序不容易错。",[29,167878,167879],{},"调用时可读性更强。",[14,167881,167883],{"id":167882},"_74-默认参数","7.4 默认参数",[19,167885,167886],{},"默认参数给参数设置默认值。",[51,167888,167890],{"className":439,"code":167889,"language":441,"meta":57,"style":57},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[59,167891,167892,167908,167938,167942,167946,167956],{"__ignoreMap":57},[79,167893,167894,167896,167898,167901,167903,167906],{"class":81,"line":82},[79,167895,703],{"class":448},[79,167897,123726],{"class":85},[79,167899,167900],{"class":228},"(host, port",[79,167902,239],{"class":448},[79,167904,167905],{"class":96},"3306",[79,167907,932],{"class":228},[79,167909,167910,167912,167914,167916,167919,167921,167923,167925,167927,167929,167932,167934,167936],{"class":81,"line":167},[79,167911,1161],{"class":96},[79,167913,455],{"class":228},[79,167915,2307],{"class":448},[79,167917,167918],{"class":89},"\"连接",[79,167920,3136],{"class":96},[79,167922,29411],{"class":228},[79,167924,3185],{"class":96},[79,167926,3099],{"class":89},[79,167928,3136],{"class":96},[79,167930,167931],{"class":228},"port",[79,167933,3185],{"class":96},[79,167935,2495],{"class":89},[79,167937,850],{"class":228},[79,167939,167940],{"class":81,"line":178},[79,167941,542],{"emptyLinePlaceholder":541},[79,167943,167944],{"class":81,"line":545},[79,167945,542],{"emptyLinePlaceholder":541},[79,167947,167948,167951,167954],{"class":81,"line":550},[79,167949,167950],{"class":228},"connect(",[79,167952,167953],{"class":89},"\"localhost\"",[79,167955,850],{"class":228},[79,167957,167958,167960,167962,167964,167967],{"class":81,"line":562},[79,167959,167950],{"class":228},[79,167961,167953],{"class":89},[79,167963,1020],{"class":228},[79,167965,167966],{"class":96},"6379",[79,167968,850],{"class":228},[19,167970,167971],{},"注意：默认参数必须放在非默认参数后面。",[19,167973,167974],{},"错误：",[51,167976,167978],{"className":439,"code":167977,"language":441,"meta":57,"style":57},"def connect(port=3306, host):\n    pass\n",[59,167979,167980,167996],{"__ignoreMap":57},[79,167981,167982,167984,167986,167989,167991,167993],{"class":81,"line":82},[79,167983,703],{"class":448},[79,167985,123726],{"class":85},[79,167987,167988],{"class":228},"(port",[79,167990,239],{"class":448},[79,167992,167905],{"class":96},[79,167994,167995],{"class":228},", host):\n",[79,167997,167998],{"class":81,"line":167},[79,167999,151170],{"class":448},[19,168001,168002],{},"正确：",[51,168004,168006],{"className":439,"code":168005,"language":441,"meta":57,"style":57},"def connect(host, port=3306):\n    pass\n",[59,168007,168008,168022],{"__ignoreMap":57},[79,168009,168010,168012,168014,168016,168018,168020],{"class":81,"line":82},[79,168011,703],{"class":448},[79,168013,123726],{"class":85},[79,168015,167900],{"class":228},[79,168017,239],{"class":448},[79,168019,167905],{"class":96},[79,168021,932],{"class":228},[79,168023,168024],{"class":81,"line":167},[79,168025,151170],{"class":448},[14,168027,168029],{"id":168028},"_75-默认参数的坑","7.5 默认参数的坑",[19,168031,168032],{},"不要使用可变对象作为默认参数。",[19,168034,159256],{},[51,168036,168038],{"className":439,"code":168037,"language":441,"meta":57,"style":57},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[59,168039,168040,168055,168060,168067,168071,168075,168086],{"__ignoreMap":57},[79,168041,168042,168044,168047,168050,168052],{"class":81,"line":82},[79,168043,703],{"class":448},[79,168045,168046],{"class":85}," add_item",[79,168048,168049],{"class":228},"(item, items",[79,168051,239],{"class":448},[79,168053,168054],{"class":228},"[]):\n",[79,168056,168057],{"class":81,"line":167},[79,168058,168059],{"class":228},"    items.append(item)\n",[79,168061,168062,168064],{"class":81,"line":178},[79,168063,715],{"class":448},[79,168065,168066],{"class":228}," items\n",[79,168068,168069],{"class":81,"line":545},[79,168070,542],{"emptyLinePlaceholder":541},[79,168072,168073],{"class":81,"line":550},[79,168074,542],{"emptyLinePlaceholder":541},[79,168076,168077,168079,168082,168084],{"class":81,"line":562},[79,168078,1889],{"class":96},[79,168080,168081],{"class":228},"(add_item(",[79,168083,166958],{"class":89},[79,168085,1150],{"class":228},[79,168087,168088,168090,168092,168095],{"class":81,"line":568},[79,168089,1889],{"class":96},[79,168091,168081],{"class":228},[79,168093,168094],{"class":89},"\"b\"",[79,168096,1150],{"class":228},[19,168098,168099],{},"第二次调用会复用第一次的列表。",[19,168101,157521],{},[51,168103,168105],{"className":439,"code":168104,"language":441,"meta":57,"style":57},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[59,168106,168107,168121,168134,168143,168147],{"__ignoreMap":57},[79,168108,168109,168111,168113,168115,168117,168119],{"class":81,"line":82},[79,168110,703],{"class":448},[79,168112,168046],{"class":85},[79,168114,168049],{"class":228},[79,168116,239],{"class":448},[79,168118,832],{"class":96},[79,168120,932],{"class":228},[79,168122,168123,168125,168128,168130,168132],{"class":81,"line":167},[79,168124,5176],{"class":448},[79,168126,168127],{"class":228}," items ",[79,168129,40922],{"class":448},[79,168131,40928],{"class":96},[79,168133,745],{"class":228},[79,168135,168136,168139,168141],{"class":81,"line":178},[79,168137,168138],{"class":228},"        items ",[79,168140,239],{"class":448},[79,168142,53832],{"class":228},[79,168144,168145],{"class":81,"line":545},[79,168146,168059],{"class":228},[79,168148,168149,168151],{"class":81,"line":550},[79,168150,715],{"class":448},[79,168152,168066],{"class":228},[14,168154,168156],{"id":168155},"_76-不定长参数","7.6 不定长参数",[339,168158,168160],{"id":168159},"_761-args","7.6.1 *args",[19,168162,168163,168166],{},[59,168164,168165],{},"*args"," 接收任意数量的位置参数，得到元组。",[51,168168,168170],{"className":439,"code":168169,"language":441,"meta":57,"style":57},"def add(*args):\n    total = 0\n    for num in args:\n        total += num\n    return total\n\n\nprint(add(1, 2, 3))\nprint(add(1, 2, 3, 4, 5))\n",[59,168171,168172,168185,168193,168204,168213,168219,168223,168227,168246],{"__ignoreMap":57},[79,168173,168174,168176,168178,168180,168182],{"class":81,"line":82},[79,168175,703],{"class":448},[79,168177,7277],{"class":85},[79,168179,455],{"class":228},[79,168181,473],{"class":448},[79,168183,168184],{"class":228},"args):\n",[79,168186,168187,168189,168191],{"class":81,"line":167},[79,168188,160940],{"class":228},[79,168190,239],{"class":448},[79,168192,49328],{"class":96},[79,168194,168195,168197,168199,168201],{"class":81,"line":178},[79,168196,915],{"class":448},[79,168198,157813],{"class":228},[79,168200,921],{"class":448},[79,168202,168203],{"class":228}," args:\n",[79,168205,168206,168208,168210],{"class":81,"line":545},[79,168207,161615],{"class":228},[79,168209,1075],{"class":448},[79,168211,168212],{"class":228}," num\n",[79,168214,168215,168217],{"class":81,"line":550},[79,168216,715],{"class":448},[79,168218,163920],{"class":228},[79,168220,168221],{"class":81,"line":562},[79,168222,542],{"emptyLinePlaceholder":541},[79,168224,168225],{"class":81,"line":568},[79,168226,542],{"emptyLinePlaceholder":541},[79,168228,168229,168231,168234,168236,168238,168240,168242,168244],{"class":81,"line":574},[79,168230,1889],{"class":96},[79,168232,168233],{"class":228},"(add(",[79,168235,775],{"class":96},[79,168237,1020],{"class":228},[79,168239,2331],{"class":96},[79,168241,1020],{"class":228},[79,168243,970],{"class":96},[79,168245,1150],{"class":228},[79,168247,168248,168250,168252,168254,168256,168258,168260,168262,168264,168266,168268,168270],{"class":81,"line":579},[79,168249,1889],{"class":96},[79,168251,168233],{"class":228},[79,168253,775],{"class":96},[79,168255,1020],{"class":228},[79,168257,2331],{"class":96},[79,168259,1020],{"class":228},[79,168261,970],{"class":96},[79,168263,1020],{"class":228},[79,168265,2537],{"class":96},[79,168267,1020],{"class":228},[79,168269,2563],{"class":96},[79,168271,1150],{"class":228},[339,168273,168275],{"id":168274},"_762-kwargs","7.6.2 **kwargs",[19,168277,168278,168281],{},[59,168279,168280],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[51,168283,168285],{"className":439,"code":168284,"language":441,"meta":57,"style":57},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[59,168286,168287,168300,168311,168317,168321,168325],{"__ignoreMap":57},[79,168288,168289,168291,168293,168295,168297],{"class":81,"line":82},[79,168290,703],{"class":448},[79,168292,163578],{"class":85},[79,168294,455],{"class":228},[79,168296,12696],{"class":448},[79,168298,168299],{"class":228},"kwargs):\n",[79,168301,168302,168304,168306,168308],{"class":81,"line":167},[79,168303,915],{"class":448},[79,168305,166418],{"class":228},[79,168307,921],{"class":448},[79,168309,168310],{"class":228}," kwargs.items():\n",[79,168312,168313,168315],{"class":81,"line":178},[79,168314,34449],{"class":96},[79,168316,166430],{"class":228},[79,168318,168319],{"class":81,"line":545},[79,168320,542],{"emptyLinePlaceholder":541},[79,168322,168323],{"class":81,"line":550},[79,168324,542],{"emptyLinePlaceholder":541},[79,168326,168327,168329,168331,168333,168335,168337,168339,168341,168343,168345,168347,168349,168351],{"class":81,"line":562},[79,168328,163643],{"class":228},[79,168330,81798],{"class":7284},[79,168332,239],{"class":448},[79,168334,151521],{"class":89},[79,168336,1020],{"class":228},[79,168338,72209],{"class":7284},[79,168340,239],{"class":448},[79,168342,2890],{"class":96},[79,168344,1020],{"class":228},[79,168346,72260],{"class":7284},[79,168348,239],{"class":448},[79,168350,71257],{"class":89},[79,168352,850],{"class":228},[14,168354,168356],{"id":168355},"_77-参数解包","7.7 参数解包",[19,168358,168359],{},"列表或元组解包为位置参数：",[51,168361,168363],{"className":439,"code":168362,"language":441,"meta":57,"style":57},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[59,168364,168365,168374,168389,168393,168397,168417],{"__ignoreMap":57},[79,168366,168367,168369,168371],{"class":81,"line":82},[79,168368,703],{"class":448},[79,168370,7277],{"class":85},[79,168372,168373],{"class":228},"(a, b, c):\n",[79,168375,168376,168378,168380,168382,168384,168386],{"class":81,"line":167},[79,168377,715],{"class":448},[79,168379,12904],{"class":228},[79,168381,995],{"class":448},[79,168383,12917],{"class":228},[79,168385,995],{"class":448},[79,168387,168388],{"class":228}," c\n",[79,168390,168391],{"class":81,"line":178},[79,168392,542],{"emptyLinePlaceholder":541},[79,168394,168395],{"class":81,"line":545},[79,168396,542],{"emptyLinePlaceholder":541},[79,168398,168399,168401,168403,168405,168407,168409,168411,168413,168415],{"class":81,"line":550},[79,168400,165733],{"class":228},[79,168402,239],{"class":448},[79,168404,54220],{"class":228},[79,168406,775],{"class":96},[79,168408,1020],{"class":228},[79,168410,2331],{"class":96},[79,168412,1020],{"class":228},[79,168414,970],{"class":96},[79,168416,762],{"class":228},[79,168418,168419,168421,168423,168425],{"class":81,"line":562},[79,168420,1889],{"class":96},[79,168422,168233],{"class":228},[79,168424,473],{"class":448},[79,168426,168427],{"class":228},"nums))\n",[19,168429,168430],{},"字典解包为关键字参数：",[51,168432,168434],{"className":439,"code":168433,"language":441,"meta":57,"style":57},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[59,168435,168436,168444,168470,168474,168478,168502],{"__ignoreMap":57},[79,168437,168438,168440,168442],{"class":81,"line":82},[79,168439,703],{"class":448},[79,168441,151005],{"class":85},[79,168443,151008],{"class":228},[79,168445,168446,168448,168450,168452,168454,168456,168458,168460,168462,168464,168466,168468],{"class":81,"line":167},[79,168447,1161],{"class":96},[79,168449,455],{"class":228},[79,168451,2307],{"class":448},[79,168453,2495],{"class":89},[79,168455,3136],{"class":96},[79,168457,81798],{"class":228},[79,168459,3185],{"class":96},[79,168461,6518],{"class":96},[79,168463,72209],{"class":228},[79,168465,3185],{"class":96},[79,168467,2495],{"class":89},[79,168469,850],{"class":228},[79,168471,168472],{"class":81,"line":178},[79,168473,542],{"emptyLinePlaceholder":541},[79,168475,168476],{"class":81,"line":545},[79,168477,542],{"emptyLinePlaceholder":541},[79,168479,168480,168482,168484,168486,168488,168490,168492,168494,168496,168498,168500],{"class":81,"line":550},[79,168481,117947],{"class":228},[79,168483,239],{"class":448},[79,168485,6518],{"class":228},[79,168487,64667],{"class":89},[79,168489,53431],{"class":228},[79,168491,151521],{"class":89},[79,168493,1020],{"class":228},[79,168495,71112],{"class":89},[79,168497,53431],{"class":228},[79,168499,2890],{"class":96},[79,168501,3671],{"class":228},[79,168503,168504,168506,168508],{"class":81,"line":562},[79,168505,167789],{"class":228},[79,168507,12696],{"class":448},[79,168509,168510],{"class":228},"info)\n",[14,168512,168514],{"id":168513},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,168516,168517,168520],{},[59,168518,168519],{},"lambda"," 用于定义简单匿名函数。",[51,168522,168524],{"className":439,"code":168523,"language":441,"meta":57,"style":57},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[59,168525,168526,168543],{"__ignoreMap":57},[79,168527,168528,168531,168533,168536,168539,168541],{"class":81,"line":82},[79,168529,168530],{"class":228},"add ",[79,168532,239],{"class":448},[79,168534,168535],{"class":448}," lambda",[79,168537,168538],{"class":228}," a, b: a ",[79,168540,995],{"class":448},[79,168542,152737],{"class":228},[79,168544,168545,168547,168549,168551,168553,168555],{"class":81,"line":167},[79,168546,1889],{"class":96},[79,168548,168233],{"class":228},[79,168550,775],{"class":96},[79,168552,1020],{"class":228},[79,168554,2331],{"class":96},[79,168556,1150],{"class":228},[19,168558,168559],{},"常和排序、过滤等函数一起使用。",[19,168561,168562],{},"按分数排序：",[51,168564,168566],{"className":439,"code":168565,"language":441,"meta":57,"style":57},"students = [\n    {\"name\": \"小明\", \"score\": 95},\n    {\"name\": \"小红\", \"score\": 88},\n    {\"name\": \"小刚\", \"score\": 72},\n]\n\nstudents.sort(key=lambda item: item[\"score\"], reverse=True)\nprint(students)\n",[59,168567,168568,168576,168596,168616,168636,168640,168644,168667],{"__ignoreMap":57},[79,168569,168570,168572,168574],{"class":81,"line":82},[79,168571,161349],{"class":228},[79,168573,239],{"class":448},[79,168575,57436],{"class":228},[79,168577,168578,168580,168582,168584,168586,168588,168590,168592,168594],{"class":81,"line":167},[79,168579,150018],{"class":228},[79,168581,64667],{"class":89},[79,168583,53431],{"class":228},[79,168585,151521],{"class":89},[79,168587,1020],{"class":228},[79,168589,153105],{"class":89},[79,168591,53431],{"class":228},[79,168593,3228],{"class":96},[79,168595,7000],{"class":228},[79,168597,168598,168600,168602,168604,168606,168608,168610,168612,168614],{"class":81,"line":178},[79,168599,150018],{"class":228},[79,168601,64667],{"class":89},[79,168603,53431],{"class":228},[79,168605,152569],{"class":89},[79,168607,1020],{"class":228},[79,168609,153105],{"class":89},[79,168611,53431],{"class":228},[79,168613,3051],{"class":96},[79,168615,7000],{"class":228},[79,168617,168618,168620,168622,168624,168626,168628,168630,168632,168634],{"class":81,"line":545},[79,168619,150018],{"class":228},[79,168621,64667],{"class":89},[79,168623,53431],{"class":228},[79,168625,161364],{"class":89},[79,168627,1020],{"class":228},[79,168629,153105],{"class":89},[79,168631,53431],{"class":228},[79,168633,2649],{"class":96},[79,168635,7000],{"class":228},[79,168637,168638],{"class":81,"line":550},[79,168639,762],{"class":228},[79,168641,168642],{"class":81,"line":562},[79,168643,542],{"emptyLinePlaceholder":541},[79,168645,168646,168649,168651,168653,168655,168657,168659,168661,168663,168665],{"class":81,"line":568},[79,168647,168648],{"class":228},"students.sort(",[79,168650,155579],{"class":7284},[79,168652,155582],{"class":448},[79,168654,155585],{"class":228},[79,168656,153105],{"class":89},[79,168658,113835],{"class":228},[79,168660,165161],{"class":7284},[79,168662,239],{"class":448},[79,168664,33478],{"class":96},[79,168666,850],{"class":228},[79,168668,168669,168671],{"class":81,"line":574},[79,168670,1889],{"class":96},[79,168672,166628],{"class":228},[19,168674,168675,168676,168678],{},"如果逻辑复杂，不要硬写 ",[59,168677,168519],{},"，定义普通函数更清晰。",[14,168680,168682],{"id":168681},"_79-函数作为参数","7.9 函数作为参数",[19,168684,168685],{},"函数可以作为参数传给另一个函数。",[51,168687,168689],{"className":439,"code":168688,"language":441,"meta":57,"style":57},"def add(a, b):\n    return a + b\n\n\ndef calculate(a, b, func):\n    return func(a, b)\n\n\nprint(calculate(10, 20, add))\n",[59,168690,168691,168699,168709,168713,168717,168727,168734,168738,168742],{"__ignoreMap":57},[79,168692,168693,168695,168697],{"class":81,"line":82},[79,168694,703],{"class":448},[79,168696,7277],{"class":85},[79,168698,152726],{"class":228},[79,168700,168701,168703,168705,168707],{"class":81,"line":167},[79,168702,715],{"class":448},[79,168704,12904],{"class":228},[79,168706,995],{"class":448},[79,168708,152737],{"class":228},[79,168710,168711],{"class":81,"line":178},[79,168712,542],{"emptyLinePlaceholder":541},[79,168714,168715],{"class":81,"line":545},[79,168716,542],{"emptyLinePlaceholder":541},[79,168718,168719,168721,168724],{"class":81,"line":550},[79,168720,703],{"class":448},[79,168722,168723],{"class":85}," calculate",[79,168725,168726],{"class":228},"(a, b, func):\n",[79,168728,168729,168731],{"class":81,"line":562},[79,168730,715],{"class":448},[79,168732,168733],{"class":228}," func(a, b)\n",[79,168735,168736],{"class":81,"line":568},[79,168737,542],{"emptyLinePlaceholder":541},[79,168739,168740],{"class":81,"line":574},[79,168741,542],{"emptyLinePlaceholder":541},[79,168743,168744,168746,168749,168751,168753,168755],{"class":81,"line":579},[79,168745,1889],{"class":96},[79,168747,168748],{"class":228},"(calculate(",[79,168750,2689],{"class":96},[79,168752,1020],{"class":228},[79,168754,2940],{"class":96},[79,168756,168757],{"class":228},", add))\n",[19,168759,168760],{},"这种思想在排序、回调、框架中经常出现。",[14,168762,168764],{"id":168763},"_710-mapfiltersorted","7.10 map、filter、sorted",[339,168766,168768],{"id":168767},"_7101-map","7.10.1 map",[19,168770,168771,168773],{},[59,168772,76032],{}," 对每个元素执行函数。",[51,168775,168777],{"className":439,"code":168776,"language":441,"meta":57,"style":57},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[59,168778,168779,168803,168826],{"__ignoreMap":57},[79,168780,168781,168783,168785,168787,168789,168791,168793,168795,168797,168799,168801],{"class":81,"line":82},[79,168782,165733],{"class":228},[79,168784,239],{"class":448},[79,168786,54220],{"class":228},[79,168788,775],{"class":96},[79,168790,1020],{"class":228},[79,168792,2331],{"class":96},[79,168794,1020],{"class":228},[79,168796,970],{"class":96},[79,168798,1020],{"class":228},[79,168800,2537],{"class":96},[79,168802,762],{"class":228},[79,168804,168805,168807,168809,168812,168814,168816,168819,168821,168823],{"class":81,"line":167},[79,168806,162939],{"class":228},[79,168808,239],{"class":448},[79,168810,168811],{"class":96}," map",[79,168813,455],{"class":228},[79,168815,168519],{"class":448},[79,168817,168818],{"class":228}," x: x ",[79,168820,473],{"class":448},[79,168822,16788],{"class":96},[79,168824,168825],{"class":228},", nums)\n",[79,168827,168828,168830,168832,168834],{"class":81,"line":178},[79,168829,1889],{"class":96},[79,168831,455],{"class":228},[79,168833,155703],{"class":96},[79,168835,167701],{"class":228},[339,168837,168839],{"id":168838},"_7102-filter","7.10.2 filter",[19,168841,168842,168844],{},[59,168843,82039],{}," 保留满足条件的元素。",[51,168846,168848],{"className":439,"code":168847,"language":441,"meta":57,"style":57},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[59,168849,168850,168878,168903],{"__ignoreMap":57},[79,168851,168852,168854,168856,168858,168860,168862,168864,168866,168868,168870,168872,168874,168876],{"class":81,"line":82},[79,168853,165733],{"class":228},[79,168855,239],{"class":448},[79,168857,54220],{"class":228},[79,168859,775],{"class":96},[79,168861,1020],{"class":228},[79,168863,2331],{"class":96},[79,168865,1020],{"class":228},[79,168867,970],{"class":96},[79,168869,1020],{"class":228},[79,168871,2537],{"class":96},[79,168873,1020],{"class":228},[79,168875,2563],{"class":96},[79,168877,762],{"class":228},[79,168879,168880,168882,168884,168887,168889,168891,168893,168895,168897,168899,168901],{"class":81,"line":167},[79,168881,162939],{"class":228},[79,168883,239],{"class":448},[79,168885,168886],{"class":96}," filter",[79,168888,455],{"class":228},[79,168890,168519],{"class":448},[79,168892,168818],{"class":228},[79,168894,1094],{"class":448},[79,168896,16788],{"class":96},[79,168898,1100],{"class":448},[79,168900,1103],{"class":96},[79,168902,168825],{"class":228},[79,168904,168905,168907,168909,168911],{"class":81,"line":178},[79,168906,1889],{"class":96},[79,168908,455],{"class":228},[79,168910,155703],{"class":96},[79,168912,167701],{"class":228},[339,168914,168916],{"id":168915},"_7103-sorted","7.10.3 sorted",[19,168918,168919,168921],{},[59,168920,166869],{}," 返回排序后的新列表。",[51,168923,168925],{"className":439,"code":168924,"language":441,"meta":57,"style":57},"students = [\n    {\"name\": \"小明\", \"score\": 95},\n    {\"name\": \"小红\", \"score\": 88},\n    {\"name\": \"小刚\", \"score\": 72},\n]\n\nresult = sorted(students, key=lambda item: item[\"score\"], reverse=True)\nprint(result)\n",[59,168926,168927,168935,168955,168975,168995,168999,169003,169032],{"__ignoreMap":57},[79,168928,168929,168931,168933],{"class":81,"line":82},[79,168930,161349],{"class":228},[79,168932,239],{"class":448},[79,168934,57436],{"class":228},[79,168936,168937,168939,168941,168943,168945,168947,168949,168951,168953],{"class":81,"line":167},[79,168938,150018],{"class":228},[79,168940,64667],{"class":89},[79,168942,53431],{"class":228},[79,168944,151521],{"class":89},[79,168946,1020],{"class":228},[79,168948,153105],{"class":89},[79,168950,53431],{"class":228},[79,168952,3228],{"class":96},[79,168954,7000],{"class":228},[79,168956,168957,168959,168961,168963,168965,168967,168969,168971,168973],{"class":81,"line":178},[79,168958,150018],{"class":228},[79,168960,64667],{"class":89},[79,168962,53431],{"class":228},[79,168964,152569],{"class":89},[79,168966,1020],{"class":228},[79,168968,153105],{"class":89},[79,168970,53431],{"class":228},[79,168972,3051],{"class":96},[79,168974,7000],{"class":228},[79,168976,168977,168979,168981,168983,168985,168987,168989,168991,168993],{"class":81,"line":545},[79,168978,150018],{"class":228},[79,168980,64667],{"class":89},[79,168982,53431],{"class":228},[79,168984,161364],{"class":89},[79,168986,1020],{"class":228},[79,168988,153105],{"class":89},[79,168990,53431],{"class":228},[79,168992,2649],{"class":96},[79,168994,7000],{"class":228},[79,168996,168997],{"class":81,"line":550},[79,168998,762],{"class":228},[79,169000,169001],{"class":81,"line":562},[79,169002,542],{"emptyLinePlaceholder":541},[79,169004,169005,169007,169009,169011,169014,169016,169018,169020,169022,169024,169026,169028,169030],{"class":81,"line":568},[79,169006,162939],{"class":228},[79,169008,239],{"class":448},[79,169010,165237],{"class":96},[79,169012,169013],{"class":228},"(students, ",[79,169015,155579],{"class":7284},[79,169017,155582],{"class":448},[79,169019,155585],{"class":228},[79,169021,153105],{"class":89},[79,169023,113835],{"class":228},[79,169025,165161],{"class":7284},[79,169027,239],{"class":448},[79,169029,33478],{"class":96},[79,169031,850],{"class":228},[79,169033,169034,169036],{"class":81,"line":574},[79,169035,1889],{"class":96},[79,169037,78573],{"class":228},[14,169039,169041],{"id":169040},"_711-闭包入门","7.11 闭包入门",[19,169043,169044],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[51,169046,169048],{"className":439,"code":169047,"language":441,"meta":57,"style":57},"def outer(base):\n    def inner(num):\n        return base + num\n\n    return inner\n\n\nadd_10 = outer(10)\nprint(add_10(5))\n",[59,169049,169050,169060,169070,169081,169085,169092,169096,169100,169114],{"__ignoreMap":57},[79,169051,169052,169054,169057],{"class":81,"line":82},[79,169053,703],{"class":448},[79,169055,169056],{"class":85}," outer",[79,169058,169059],{"class":228},"(base):\n",[79,169061,169062,169064,169067],{"class":81,"line":167},[79,169063,32808],{"class":448},[79,169065,169066],{"class":85}," inner",[79,169068,169069],{"class":228},"(num):\n",[79,169071,169072,169074,169077,169079],{"class":81,"line":178},[79,169073,16785],{"class":448},[79,169075,169076],{"class":228}," base ",[79,169078,995],{"class":448},[79,169080,168212],{"class":228},[79,169082,169083],{"class":81,"line":545},[79,169084,542],{"emptyLinePlaceholder":541},[79,169086,169087,169089],{"class":81,"line":550},[79,169088,715],{"class":448},[79,169090,169091],{"class":228}," inner\n",[79,169093,169094],{"class":81,"line":562},[79,169095,542],{"emptyLinePlaceholder":541},[79,169097,169098],{"class":81,"line":568},[79,169099,542],{"emptyLinePlaceholder":541},[79,169101,169102,169105,169107,169110,169112],{"class":81,"line":574},[79,169103,169104],{"class":228},"add_10 ",[79,169106,239],{"class":448},[79,169108,169109],{"class":228}," outer(",[79,169111,2689],{"class":96},[79,169113,850],{"class":228},[79,169115,169116,169118,169121,169123],{"class":81,"line":579},[79,169117,1889],{"class":96},[79,169119,169120],{"class":228},"(add_10(",[79,169122,2563],{"class":96},[79,169124,1150],{"class":228},[19,169126,169127],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,169129,169131],{"id":169130},"_712-装饰器入门","7.12 装饰器入门",[19,169133,169134],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[51,169136,169138],{"className":439,"code":169137,"language":441,"meta":57,"style":57},"def log(func):\n    def wrapper():\n        print(\"函数开始执行\")\n        func()\n        print(\"函数执行结束\")\n\n    return wrapper\n\n\n@log\ndef say_hello():\n    print(\"hello\")\n\n\nsay_hello()\n",[59,169139,169140,169149,169158,169169,169174,169185,169189,169196,169200,169204,169209,169217,169227,169231,169235],{"__ignoreMap":57},[79,169141,169142,169144,169146],{"class":81,"line":82},[79,169143,703],{"class":448},[79,169145,89178],{"class":85},[79,169147,169148],{"class":228},"(func):\n",[79,169150,169151,169153,169156],{"class":81,"line":167},[79,169152,32808],{"class":448},[79,169154,169155],{"class":85}," wrapper",[79,169157,33953],{"class":228},[79,169159,169160,169162,169164,169167],{"class":81,"line":178},[79,169161,34449],{"class":96},[79,169163,455],{"class":228},[79,169165,169166],{"class":89},"\"函数开始执行\"",[79,169168,850],{"class":228},[79,169170,169171],{"class":81,"line":545},[79,169172,169173],{"class":228},"        func()\n",[79,169175,169176,169178,169180,169183],{"class":81,"line":550},[79,169177,34449],{"class":96},[79,169179,455],{"class":228},[79,169181,169182],{"class":89},"\"函数执行结束\"",[79,169184,850],{"class":228},[79,169186,169187],{"class":81,"line":562},[79,169188,542],{"emptyLinePlaceholder":541},[79,169190,169191,169193],{"class":81,"line":568},[79,169192,715],{"class":448},[79,169194,169195],{"class":228}," wrapper\n",[79,169197,169198],{"class":81,"line":574},[79,169199,542],{"emptyLinePlaceholder":541},[79,169201,169202],{"class":81,"line":579},[79,169203,542],{"emptyLinePlaceholder":541},[79,169205,169206],{"class":81,"line":585},[79,169207,169208],{"class":85},"@log\n",[79,169210,169211,169213,169215],{"class":81,"line":591},[79,169212,703],{"class":448},[79,169214,162629],{"class":85},[79,169216,33953],{"class":228},[79,169218,169219,169221,169223,169225],{"class":81,"line":596},[79,169220,1161],{"class":96},[79,169222,455],{"class":228},[79,169224,7911],{"class":89},[79,169226,850],{"class":228},[79,169228,169229],{"class":81,"line":602},[79,169230,542],{"emptyLinePlaceholder":541},[79,169232,169233],{"class":81,"line":608},[79,169234,542],{"emptyLinePlaceholder":541},[79,169236,169237],{"class":81,"line":614},[79,169238,162664],{"class":228},[19,169240,159907],{},[51,169242,169244],{"className":439,"code":169243,"language":441,"meta":57,"style":57},"say_hello = log(say_hello)\n",[59,169245,169246],{"__ignoreMap":57},[79,169247,169248,169251,169253],{"class":81,"line":82},[79,169249,169250],{"class":228},"say_hello ",[79,169252,239],{"class":448},[79,169254,169255],{"class":228}," log(say_hello)\n",[19,169257,169258],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,169260,169262],{"id":169261},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[51,169264,169266],{"className":439,"code":169265,"language":441,"meta":57,"style":57},"def log(func):\n    def wrapper(*args, **kwargs):\n        print(\"函数开始执行\")\n        result = func(*args, **kwargs)\n        print(\"函数执行结束\")\n        return result\n\n    return wrapper\n\n\n@log\ndef add(a, b):\n    return a + b\n\n\nprint(add(10, 20))\n",[59,169267,169268,169276,169293,169303,169322,169332,169339,169343,169349,169353,169357,169361,169369,169379,169383,169387],{"__ignoreMap":57},[79,169269,169270,169272,169274],{"class":81,"line":82},[79,169271,703],{"class":448},[79,169273,89178],{"class":85},[79,169275,169148],{"class":228},[79,169277,169278,169280,169282,169284,169286,169289,169291],{"class":81,"line":167},[79,169279,32808],{"class":448},[79,169281,169155],{"class":85},[79,169283,455],{"class":228},[79,169285,473],{"class":448},[79,169287,169288],{"class":228},"args, ",[79,169290,12696],{"class":448},[79,169292,168299],{"class":228},[79,169294,169295,169297,169299,169301],{"class":81,"line":178},[79,169296,34449],{"class":96},[79,169298,455],{"class":228},[79,169300,169166],{"class":89},[79,169302,850],{"class":228},[79,169304,169305,169308,169310,169313,169315,169317,169319],{"class":81,"line":545},[79,169306,169307],{"class":228},"        result ",[79,169309,239],{"class":448},[79,169311,169312],{"class":228}," func(",[79,169314,473],{"class":448},[79,169316,169288],{"class":228},[79,169318,12696],{"class":448},[79,169320,169321],{"class":228},"kwargs)\n",[79,169323,169324,169326,169328,169330],{"class":81,"line":550},[79,169325,34449],{"class":96},[79,169327,455],{"class":228},[79,169329,169182],{"class":89},[79,169331,850],{"class":228},[79,169333,169334,169336],{"class":81,"line":562},[79,169335,16785],{"class":448},[79,169337,169338],{"class":228}," result\n",[79,169340,169341],{"class":81,"line":568},[79,169342,542],{"emptyLinePlaceholder":541},[79,169344,169345,169347],{"class":81,"line":574},[79,169346,715],{"class":448},[79,169348,169195],{"class":228},[79,169350,169351],{"class":81,"line":579},[79,169352,542],{"emptyLinePlaceholder":541},[79,169354,169355],{"class":81,"line":585},[79,169356,542],{"emptyLinePlaceholder":541},[79,169358,169359],{"class":81,"line":591},[79,169360,169208],{"class":85},[79,169362,169363,169365,169367],{"class":81,"line":596},[79,169364,703],{"class":448},[79,169366,7277],{"class":85},[79,169368,152726],{"class":228},[79,169370,169371,169373,169375,169377],{"class":81,"line":602},[79,169372,715],{"class":448},[79,169374,12904],{"class":228},[79,169376,995],{"class":448},[79,169378,152737],{"class":228},[79,169380,169381],{"class":81,"line":608},[79,169382,542],{"emptyLinePlaceholder":541},[79,169384,169385],{"class":81,"line":614},[79,169386,542],{"emptyLinePlaceholder":541},[79,169388,169389,169391,169393,169395,169397,169399],{"class":81,"line":619},[79,169390,1889],{"class":96},[79,169392,168233],{"class":228},[79,169394,2689],{"class":96},[79,169396,1020],{"class":228},[79,169398,2940],{"class":96},[79,169400,1150],{"class":228},[19,169402,169403,169404,1748,169406,169408],{},"这个写法使用 ",[59,169405,168165],{},[59,169407,168280],{}," 接收原函数的所有参数。",[14,169410,169412],{"id":169411},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,169414,124925],{},[26,169416,169417,169420,169423],{},[29,169418,169419],{},"给定一组学生数据。",[29,169421,169422],{},"封装函数，根据传入规则筛选学生。",[29,169424,169425],{},"筛选及格、优秀、未成年学生。",[19,169427,12070],{},[51,169429,169431],{"className":439,"code":169430,"language":441,"meta":57,"style":57},"students = [\n    {\"name\": \"小明\", \"age\": 18, \"score\": 95},\n    {\"name\": \"小红\", \"age\": 17, \"score\": 88},\n    {\"name\": \"小刚\", \"age\": 19, \"score\": 59},\n]\n\n\ndef filter_students(students, condition):\n    result = []\n    for student in students:\n        if condition(student):\n            result.append(student)\n    return result\n\n\npassed = filter_students(students, lambda s: s[\"score\"] >= 60)\nexcellent = filter_students(students, lambda s: s[\"score\"] >= 90)\nunder_age = filter_students(students, lambda s: s[\"age\"] \u003C 18)\n\nprint(passed)\nprint(excellent)\nprint(under_age)\n",[59,169432,169433,169441,169469,169497,169525,169529,169533,169537,169547,169555,169565,169572,169577,169583,169587,169591,169615,169638,169661,169665,169672,169679],{"__ignoreMap":57},[79,169434,169435,169437,169439],{"class":81,"line":82},[79,169436,161349],{"class":228},[79,169438,239],{"class":448},[79,169440,57436],{"class":228},[79,169442,169443,169445,169447,169449,169451,169453,169455,169457,169459,169461,169463,169465,169467],{"class":81,"line":167},[79,169444,150018],{"class":228},[79,169446,64667],{"class":89},[79,169448,53431],{"class":228},[79,169450,151521],{"class":89},[79,169452,1020],{"class":228},[79,169454,71112],{"class":89},[79,169456,53431],{"class":228},[79,169458,2890],{"class":96},[79,169460,1020],{"class":228},[79,169462,153105],{"class":89},[79,169464,53431],{"class":228},[79,169466,3228],{"class":96},[79,169468,7000],{"class":228},[79,169470,169471,169473,169475,169477,169479,169481,169483,169485,169487,169489,169491,169493,169495],{"class":81,"line":178},[79,169472,150018],{"class":228},[79,169474,64667],{"class":89},[79,169476,53431],{"class":228},[79,169478,152569],{"class":89},[79,169480,1020],{"class":228},[79,169482,71112],{"class":89},[79,169484,53431],{"class":228},[79,169486,2865],{"class":96},[79,169488,1020],{"class":228},[79,169490,153105],{"class":89},[79,169492,53431],{"class":228},[79,169494,3051],{"class":96},[79,169496,7000],{"class":228},[79,169498,169499,169501,169503,169505,169507,169509,169511,169513,169515,169517,169519,169521,169523],{"class":81,"line":545},[79,169500,150018],{"class":228},[79,169502,64667],{"class":89},[79,169504,53431],{"class":228},[79,169506,161364],{"class":89},[79,169508,1020],{"class":228},[79,169510,71112],{"class":89},[79,169512,53431],{"class":228},[79,169514,2915],{"class":96},[79,169516,1020],{"class":228},[79,169518,153105],{"class":89},[79,169520,53431],{"class":228},[79,169522,3122],{"class":96},[79,169524,7000],{"class":228},[79,169526,169527],{"class":81,"line":550},[79,169528,762],{"class":228},[79,169530,169531],{"class":81,"line":562},[79,169532,542],{"emptyLinePlaceholder":541},[79,169534,169535],{"class":81,"line":568},[79,169536,542],{"emptyLinePlaceholder":541},[79,169538,169539,169541,169544],{"class":81,"line":574},[79,169540,703],{"class":448},[79,169542,169543],{"class":85}," filter_students",[79,169545,169546],{"class":228},"(students, condition):\n",[79,169548,169549,169551,169553],{"class":81,"line":579},[79,169550,162856],{"class":228},[79,169552,239],{"class":448},[79,169554,53832],{"class":228},[79,169556,169557,169559,169561,169563],{"class":81,"line":585},[79,169558,915],{"class":448},[79,169560,153770],{"class":228},[79,169562,921],{"class":448},[79,169564,153775],{"class":228},[79,169566,169567,169569],{"class":81,"line":591},[79,169568,1089],{"class":448},[79,169570,169571],{"class":228}," condition(student):\n",[79,169573,169574],{"class":81,"line":596},[79,169575,169576],{"class":228},"            result.append(student)\n",[79,169578,169579,169581],{"class":81,"line":602},[79,169580,715],{"class":448},[79,169582,169338],{"class":228},[79,169584,169585],{"class":81,"line":608},[79,169586,542],{"emptyLinePlaceholder":541},[79,169588,169589],{"class":81,"line":614},[79,169590,542],{"emptyLinePlaceholder":541},[79,169592,169593,169595,169597,169600,169602,169605,169607,169609,169611,169613],{"class":81,"line":619},[79,169594,167334],{"class":228},[79,169596,239],{"class":448},[79,169598,169599],{"class":228}," filter_students(students, ",[79,169601,168519],{"class":448},[79,169603,169604],{"class":228}," s: s[",[79,169606,153105],{"class":89},[79,169608,877],{"class":228},[79,169610,3805],{"class":448},[79,169612,159470],{"class":96},[79,169614,850],{"class":228},[79,169616,169617,169620,169622,169624,169626,169628,169630,169632,169634,169636],{"class":81,"line":625},[79,169618,169619],{"class":228},"excellent ",[79,169621,239],{"class":448},[79,169623,169599],{"class":228},[79,169625,168519],{"class":448},[79,169627,169604],{"class":228},[79,169629,153105],{"class":89},[79,169631,877],{"class":228},[79,169633,3805],{"class":448},[79,169635,159421],{"class":96},[79,169637,850],{"class":228},[79,169639,169640,169643,169645,169647,169649,169651,169653,169655,169657,169659],{"class":81,"line":631},[79,169641,169642],{"class":228},"under_age ",[79,169644,239],{"class":448},[79,169646,169599],{"class":228},[79,169648,168519],{"class":448},[79,169650,169604],{"class":228},[79,169652,71112],{"class":89},[79,169654,877],{"class":228},[79,169656,229],{"class":448},[79,169658,157918],{"class":96},[79,169660,850],{"class":228},[79,169662,169663],{"class":81,"line":637},[79,169664,542],{"emptyLinePlaceholder":541},[79,169666,169667,169669],{"class":81,"line":643},[79,169668,1889],{"class":96},[79,169670,169671],{"class":228},"(passed)\n",[79,169673,169674,169676],{"class":81,"line":649},[79,169675,1889],{"class":96},[79,169677,169678],{"class":228},"(excellent)\n",[79,169680,169681,169683],{"class":81,"line":655},[79,169682,1889],{"class":96},[79,169684,169685],{"class":228},"(under_age)\n",[14,169687,169689],{"id":169688},"_715-易错点","7.15 易错点",[26,169691,169692,169695,169703,169708,169719],{},[29,169693,169694],{},"默认参数不要写可变对象。",[29,169696,169697,169699,169700,169702],{},[59,169698,168165],{}," 是元组，",[59,169701,168280],{}," 是字典。",[29,169704,169705,169707],{},[59,169706,168519],{}," 只适合简单表达式。",[29,169709,169710,1748,169712,169714,169715,169718],{},[59,169711,76032],{},[59,169713,82039],{}," 的结果是迭代器，常用 ",[59,169716,169717],{},"list()"," 转换查看。",[29,169720,169721],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,169723,169725],{"id":169724},"_716-本章练习","7.16 本章练习",[26,169727,169728,169735,169741,169746,169751],{},[29,169729,169730,169731,169734],{},"写函数 ",[59,169732,169733],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[29,169736,169730,169737,169740],{},[59,169738,169739],{},"print_user(**kwargs)","，输出用户所有字段。",[29,169742,106287,169743,169745],{},[59,169744,168519],{}," 对学生列表按年龄排序。",[29,169747,106287,169748,169750],{},[59,169749,82039],{}," 找出成绩不及格的学生。",[29,169752,169753],{},"写一个装饰器，统计函数执行前后的提示信息。",[2159,169755,169756],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":57,"searchDepth":167,"depth":167,"links":169758},[169759,169760,169761,169762,169763,169764,169768,169769,169770,169771,169776,169777,169778,169779,169780,169781],{"id":167617,"depth":167,"text":167618},{"id":167731,"depth":167,"text":167732},{"id":167820,"depth":167,"text":167821},{"id":167882,"depth":167,"text":167883},{"id":168028,"depth":167,"text":168029},{"id":168155,"depth":167,"text":168156,"children":169765},[169766,169767],{"id":168159,"depth":178,"text":168160},{"id":168274,"depth":178,"text":168275},{"id":168355,"depth":167,"text":168356},{"id":168513,"depth":167,"text":168514},{"id":168681,"depth":167,"text":168682},{"id":168763,"depth":167,"text":168764,"children":169772},[169773,169774,169775],{"id":168767,"depth":178,"text":168768},{"id":168838,"depth":178,"text":168839},{"id":168915,"depth":178,"text":168916},{"id":169040,"depth":167,"text":169041},{"id":169130,"depth":167,"text":169131},{"id":169261,"depth":167,"text":169262},{"id":169411,"depth":167,"text":169412},{"id":169688,"depth":167,"text":169689},{"id":169724,"depth":167,"text":169725},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":167609,"description":25402},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":169788,"title":169789,"body":169790,"description":25402,"extension":2186,"meta":172309,"navigation":541,"path":172310,"seo":172311,"stem":172312,"__hash__":172313},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":169791,"toc":172284},[169792,169795,169799,169802,169805,169836,169840,169844,169847,169874,169878,169881,169932,169935,169950,169953,169988,169992,169994,170018,170021,170081,170085,170089,170092,170149,170152,170172,170176,170179,170242,170246,170249,170305,170312,170336,170340,170343,170406,170410,170415,170466,170469,170473,170478,170545,170548,170630,170634,170639,170690,170693,170697,170700,170703,170711,170714,170760,170763,170809,170813,170819,170863,170866,170912,170915,170955,170958,171019,171023,171026,171116,171119,171261,171264,171331,171335,171338,171341,171482,171485,171563,171566,171742,171746,171748,171759,171761,171960,171964,172208,172212,172246,172250,172281],[10,169793,169789],{"id":169794},"_8-文件操作",[14,169796,169798],{"id":169797},"_81-文件操作的意义","8.1 文件操作的意义",[19,169800,169801],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,169803,169804],{},"常见文件类型：",[26,169806,169807,169813,169819,169825,169831],{},[29,169808,169809,169812],{},[59,169810,169811],{},".txt","：普通文本。",[29,169814,169815,169818],{},[59,169816,169817],{},".csv","：表格文本。",[29,169820,169821,169824],{},[59,169822,169823],{},".json","：结构化数据。",[29,169826,169827,169830],{},[59,169828,169829],{},".log","：日志文件。",[29,169832,169833,169835],{},[59,169834,147985],{},"：Python 源代码。",[14,169837,169839],{"id":169838},"_82-路径","8.2 路径",[339,169841,169843],{"id":169842},"_821-相对路径","8.2.1 相对路径",[19,169845,169846],{},"相对当前运行目录：",[51,169848,169850],{"className":439,"code":169849,"language":441,"meta":57,"style":57},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[59,169851,169852],{"__ignoreMap":57},[79,169853,169854,169856,169858,169860,169862,169864,169866,169868,169870,169872],{"class":81,"line":82},[79,169855,88902],{"class":96},[79,169857,455],{"class":228},[79,169859,148429],{"class":89},[79,169861,1020],{"class":228},[79,169863,148434],{"class":89},[79,169865,1020],{"class":228},[79,169867,148439],{"class":7284},[79,169869,239],{"class":448},[79,169871,148444],{"class":89},[79,169873,850],{"class":228},[339,169875,169877],{"id":169876},"_822-绝对路径","8.2.2 绝对路径",[19,169879,169880],{},"从根目录或盘符开始：",[51,169882,169884],{"className":439,"code":169883,"language":441,"meta":57,"style":57},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[59,169885,169886,169909],{"__ignoreMap":57},[79,169887,169888,169890,169892,169895,169897,169899,169901,169903,169905,169907],{"class":81,"line":82},[79,169889,88902],{"class":96},[79,169891,455],{"class":228},[79,169893,169894],{"class":89},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[79,169896,1020],{"class":228},[79,169898,148434],{"class":89},[79,169900,1020],{"class":228},[79,169902,148439],{"class":7284},[79,169904,239],{"class":448},[79,169906,148444],{"class":89},[79,169908,850],{"class":228},[79,169910,169911,169913,169915,169918,169920,169922,169924,169926,169928,169930],{"class":81,"line":167},[79,169912,88902],{"class":96},[79,169914,455],{"class":228},[79,169916,169917],{"class":89},"\"D:\u002Fdata\u002Fdata.txt\"",[79,169919,1020],{"class":228},[79,169921,148434],{"class":89},[79,169923,1020],{"class":228},[79,169925,148439],{"class":7284},[79,169927,239],{"class":448},[79,169929,148444],{"class":89},[79,169931,850],{"class":228},[19,169933,169934],{},"Windows 路径建议写成：",[51,169936,169938],{"className":439,"code":169937,"language":441,"meta":57,"style":57},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[59,169939,169940],{"__ignoreMap":57},[79,169941,169942,169945,169947],{"class":81,"line":82},[79,169943,169944],{"class":228},"path ",[79,169946,239],{"class":448},[79,169948,169949],{"class":89}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,169951,169952],{},"或原始字符串：",[51,169954,169956],{"className":439,"code":169955,"language":441,"meta":57,"style":57},"path = r\"D:\\data\\data.txt\"\n",[59,169957,169958],{"__ignoreMap":57},[79,169959,169960,169962,169964,169966,169968,169971,169974,169977,169979,169981,169983,169986],{"class":81,"line":82},[79,169961,169944],{"class":228},[79,169963,239],{"class":448},[79,169965,19146],{"class":448},[79,169967,2495],{"class":89},[79,169969,169970],{"class":49972},"D:",[79,169972,169973],{"class":96},"\\d",[79,169975,169976],{"class":49972},"ata",[79,169978,169973],{"class":96},[79,169980,169976],{"class":49972},[79,169982,2798],{"class":96},[79,169984,169985],{"class":49972},"txt",[79,169987,27152],{"class":89},[14,169989,169991],{"id":169990},"_83-open函数","8.3 open函数",[19,169993,7251],{},[51,169995,169997],{"className":439,"code":169996,"language":441,"meta":57,"style":57},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[59,169998,169999],{"__ignoreMap":57},[79,170000,170001,170003,170005,170007,170010,170012,170014,170016],{"class":81,"line":82},[79,170002,47349],{"class":7284},[79,170004,556],{"class":448},[79,170006,148424],{"class":96},[79,170008,170009],{"class":228},"(文件路径, 打开模式, ",[79,170011,148439],{"class":7284},[79,170013,239],{"class":448},[79,170015,148444],{"class":89},[79,170017,850],{"class":228},[19,170019,170020],{},"常见模式：",[347,170022,170023,170032],{},[350,170024,170025],{},[353,170026,170027,170030],{},[356,170028,170029],{},"模式",[356,170031,27888],{},[367,170033,170034,170043,170052,170061,170071],{},[353,170035,170036,170040],{},[372,170037,170038],{},[59,170039,2910],{},[372,170041,170042],{},"只读，文件不存在会报错",[353,170044,170045,170049],{},[372,170046,170047],{},[59,170048,3035],{},[372,170050,170051],{},"只写，文件不存在会创建，存在会清空",[353,170053,170054,170058],{},[372,170055,170056],{},[59,170057,2482],{},[372,170059,170060],{},"追加，文件不存在会创建",[353,170062,170063,170068],{},[372,170064,170065],{},[59,170066,170067],{},"rb",[372,170069,170070],{},"二进制只读",[353,170072,170073,170078],{},[372,170074,170075],{},[59,170076,170077],{},"wb",[372,170079,170080],{},"二进制只写",[14,170082,170084],{"id":170083},"_84-读取文件","8.4 读取文件",[339,170086,170088],{"id":170087},"_841-read","8.4.1 read",[19,170090,170091],{},"一次读取全部内容：",[51,170093,170095],{"className":439,"code":170094,"language":441,"meta":57,"style":57},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[59,170096,170097,170123,170135,170142],{"__ignoreMap":57},[79,170098,170099,170101,170103,170105,170107,170109,170111,170113,170115,170117,170119,170121],{"class":81,"line":82},[79,170100,47349],{"class":7284},[79,170102,556],{"class":448},[79,170104,148424],{"class":96},[79,170106,455],{"class":228},[79,170108,148429],{"class":89},[79,170110,1020],{"class":228},[79,170112,148434],{"class":89},[79,170114,1020],{"class":228},[79,170116,148439],{"class":7284},[79,170118,239],{"class":448},[79,170120,148444],{"class":89},[79,170122,850],{"class":228},[79,170124,170125,170128,170130,170132],{"class":81,"line":167},[79,170126,170127],{"class":228},"content ",[79,170129,239],{"class":448},[79,170131,149786],{"class":7284},[79,170133,170134],{"class":228},".read()\n",[79,170136,170137,170139],{"class":81,"line":178},[79,170138,1889],{"class":96},[79,170140,170141],{"class":228},"(content)\n",[79,170143,170144,170146],{"class":81,"line":545},[79,170145,47349],{"class":7284},[79,170147,170148],{"class":228},".close()\n",[19,170150,170151],{},"可以指定读取字符数：",[51,170153,170155],{"className":439,"code":170154,"language":441,"meta":57,"style":57},"content = file.read(10)\n",[59,170156,170157],{"__ignoreMap":57},[79,170158,170159,170161,170163,170165,170168,170170],{"class":81,"line":82},[79,170160,170127],{"class":228},[79,170162,239],{"class":448},[79,170164,149786],{"class":7284},[79,170166,170167],{"class":228},".read(",[79,170169,2689],{"class":96},[79,170171,850],{"class":228},[339,170173,170175],{"id":170174},"_842-readline","8.4.2 readline",[19,170177,170178],{},"一次读取一行：",[51,170180,170182],{"className":439,"code":170181,"language":441,"meta":57,"style":57},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[59,170183,170184,170210,170214,170225,170232,170236],{"__ignoreMap":57},[79,170185,170186,170188,170190,170192,170194,170196,170198,170200,170202,170204,170206,170208],{"class":81,"line":82},[79,170187,47349],{"class":7284},[79,170189,556],{"class":448},[79,170191,148424],{"class":96},[79,170193,455],{"class":228},[79,170195,148429],{"class":89},[79,170197,1020],{"class":228},[79,170199,148434],{"class":89},[79,170201,1020],{"class":228},[79,170203,148439],{"class":7284},[79,170205,239],{"class":448},[79,170207,148444],{"class":89},[79,170209,850],{"class":228},[79,170211,170212],{"class":81,"line":167},[79,170213,542],{"emptyLinePlaceholder":541},[79,170215,170216,170218,170220,170222],{"class":81,"line":178},[79,170217,148885],{"class":228},[79,170219,239],{"class":448},[79,170221,149786],{"class":7284},[79,170223,170224],{"class":228},".readline()\n",[79,170226,170227,170229],{"class":81,"line":545},[79,170228,1889],{"class":96},[79,170230,170231],{"class":228},"(line)\n",[79,170233,170234],{"class":81,"line":550},[79,170235,542],{"emptyLinePlaceholder":541},[79,170237,170238,170240],{"class":81,"line":562},[79,170239,47349],{"class":7284},[79,170241,170148],{"class":228},[339,170243,170245],{"id":170244},"_843-readlines","8.4.3 readlines",[19,170247,170248],{},"读取所有行，返回列表：",[51,170250,170252],{"className":439,"code":170251,"language":441,"meta":57,"style":57},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[59,170253,170254,170280,170292,170299],{"__ignoreMap":57},[79,170255,170256,170258,170260,170262,170264,170266,170268,170270,170272,170274,170276,170278],{"class":81,"line":82},[79,170257,47349],{"class":7284},[79,170259,556],{"class":448},[79,170261,148424],{"class":96},[79,170263,455],{"class":228},[79,170265,148429],{"class":89},[79,170267,1020],{"class":228},[79,170269,148434],{"class":89},[79,170271,1020],{"class":228},[79,170273,148439],{"class":7284},[79,170275,239],{"class":448},[79,170277,148444],{"class":89},[79,170279,850],{"class":228},[79,170281,170282,170285,170287,170289],{"class":81,"line":167},[79,170283,170284],{"class":228},"lines ",[79,170286,239],{"class":448},[79,170288,149786],{"class":7284},[79,170290,170291],{"class":228},".readlines()\n",[79,170293,170294,170296],{"class":81,"line":178},[79,170295,1889],{"class":96},[79,170297,170298],{"class":228},"(lines)\n",[79,170300,170301,170303],{"class":81,"line":545},[79,170302,47349],{"class":7284},[79,170304,170148],{"class":228},[19,170306,170307,170308,170311],{},"每一行通常带有换行符，可以用 ",[59,170309,170310],{},"strip()"," 去掉：",[51,170313,170315],{"className":439,"code":170314,"language":441,"meta":57,"style":57},"for line in lines:\n    print(line.strip())\n",[59,170316,170317,170329],{"__ignoreMap":57},[79,170318,170319,170321,170324,170326],{"class":81,"line":82},[79,170320,1638],{"class":448},[79,170322,170323],{"class":228}," line ",[79,170325,921],{"class":448},[79,170327,170328],{"class":228}," lines:\n",[79,170330,170331,170333],{"class":81,"line":167},[79,170332,1161],{"class":96},[79,170334,170335],{"class":228},"(line.strip())\n",[339,170337,170339],{"id":170338},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,170341,170342],{},"推荐读取大文件时使用：",[51,170344,170346],{"className":439,"code":170345,"language":441,"meta":57,"style":57},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[59,170347,170348,170374,170378,170390,170396,170400],{"__ignoreMap":57},[79,170349,170350,170352,170354,170356,170358,170360,170362,170364,170366,170368,170370,170372],{"class":81,"line":82},[79,170351,47349],{"class":7284},[79,170353,556],{"class":448},[79,170355,148424],{"class":96},[79,170357,455],{"class":228},[79,170359,148429],{"class":89},[79,170361,1020],{"class":228},[79,170363,148434],{"class":89},[79,170365,1020],{"class":228},[79,170367,148439],{"class":7284},[79,170369,239],{"class":448},[79,170371,148444],{"class":89},[79,170373,850],{"class":228},[79,170375,170376],{"class":81,"line":167},[79,170377,542],{"emptyLinePlaceholder":541},[79,170379,170380,170382,170384,170386,170388],{"class":81,"line":178},[79,170381,1638],{"class":448},[79,170383,170323],{"class":228},[79,170385,921],{"class":448},[79,170387,149786],{"class":7284},[79,170389,745],{"class":228},[79,170391,170392,170394],{"class":81,"line":545},[79,170393,1161],{"class":96},[79,170395,170335],{"class":228},[79,170397,170398],{"class":81,"line":550},[79,170399,542],{"emptyLinePlaceholder":541},[79,170401,170402,170404],{"class":81,"line":562},[79,170403,47349],{"class":7284},[79,170405,170148],{"class":228},[14,170407,170409],{"id":170408},"_85-with语句","8.5 with语句",[19,170411,170412,170414],{},[59,170413,109720],{}," 会自动关闭文件，推荐使用。",[51,170416,170418],{"className":439,"code":170417,"language":441,"meta":57,"style":57},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[59,170419,170420,170450,170460],{"__ignoreMap":57},[79,170421,170422,170424,170426,170428,170430,170432,170434,170436,170438,170440,170442,170444,170446,170448],{"class":81,"line":82},[79,170423,109720],{"class":448},[79,170425,148424],{"class":96},[79,170427,455],{"class":228},[79,170429,148429],{"class":89},[79,170431,1020],{"class":228},[79,170433,148434],{"class":89},[79,170435,1020],{"class":228},[79,170437,148439],{"class":7284},[79,170439,239],{"class":448},[79,170441,148444],{"class":89},[79,170443,15747],{"class":228},[79,170445,533],{"class":448},[79,170447,149786],{"class":7284},[79,170449,745],{"class":228},[79,170451,170452,170454,170456,170458],{"class":81,"line":167},[79,170453,148456],{"class":228},[79,170455,239],{"class":448},[79,170457,149786],{"class":7284},[79,170459,170134],{"class":228},[79,170461,170462,170464],{"class":81,"line":178},[79,170463,1161],{"class":96},[79,170465,170141],{"class":228},[19,170467,170468],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,170470,170472],{"id":170471},"_86-写入文件","8.6 写入文件",[19,170474,170475,170477],{},[59,170476,3035],{}," 模式会清空原文件。",[51,170479,170481],{"className":439,"code":170480,"language":441,"meta":57,"style":57},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[59,170482,170483,170513,170530],{"__ignoreMap":57},[79,170484,170485,170487,170489,170491,170493,170495,170497,170499,170501,170503,170505,170507,170509,170511],{"class":81,"line":82},[79,170486,109720],{"class":448},[79,170488,148424],{"class":96},[79,170490,455],{"class":228},[79,170492,148429],{"class":89},[79,170494,1020],{"class":228},[79,170496,153609],{"class":89},[79,170498,1020],{"class":228},[79,170500,148439],{"class":7284},[79,170502,239],{"class":448},[79,170504,148444],{"class":89},[79,170506,15747],{"class":228},[79,170508,533],{"class":448},[79,170510,149786],{"class":7284},[79,170512,745],{"class":228},[79,170514,170515,170518,170521,170524,170526,170528],{"class":81,"line":167},[79,170516,170517],{"class":7284},"    file",[79,170519,170520],{"class":228},".write(",[79,170522,170523],{"class":89},"\"hello",[79,170525,158158],{"class":96},[79,170527,2495],{"class":89},[79,170529,850],{"class":228},[79,170531,170532,170534,170536,170539,170541,170543],{"class":81,"line":178},[79,170533,170517],{"class":7284},[79,170535,170520],{"class":228},[79,170537,170538],{"class":89},"\"python",[79,170540,158158],{"class":96},[79,170542,2495],{"class":89},[79,170544,850],{"class":228},[19,170546,170547],{},"写入多行：",[51,170549,170551],{"className":439,"code":170550,"language":441,"meta":57,"style":57},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[59,170552,170553,170588,170592,170623],{"__ignoreMap":57},[79,170554,170555,170557,170559,170561,170564,170566,170568,170570,170573,170575,170577,170579,170582,170584,170586],{"class":81,"line":82},[79,170556,170284],{"class":228},[79,170558,239],{"class":448},[79,170560,54220],{"class":228},[79,170562,170563],{"class":89},"\"小明,18",[79,170565,158158],{"class":96},[79,170567,2495],{"class":89},[79,170569,1020],{"class":228},[79,170571,170572],{"class":89},"\"小红,17",[79,170574,158158],{"class":96},[79,170576,2495],{"class":89},[79,170578,1020],{"class":228},[79,170580,170581],{"class":89},"\"小刚,19",[79,170583,158158],{"class":96},[79,170585,2495],{"class":89},[79,170587,762],{"class":228},[79,170589,170590],{"class":81,"line":167},[79,170591,542],{"emptyLinePlaceholder":541},[79,170593,170594,170596,170598,170600,170603,170605,170607,170609,170611,170613,170615,170617,170619,170621],{"class":81,"line":178},[79,170595,109720],{"class":448},[79,170597,148424],{"class":96},[79,170599,455],{"class":228},[79,170601,170602],{"class":89},"\"students.txt\"",[79,170604,1020],{"class":228},[79,170606,153609],{"class":89},[79,170608,1020],{"class":228},[79,170610,148439],{"class":7284},[79,170612,239],{"class":448},[79,170614,148444],{"class":89},[79,170616,15747],{"class":228},[79,170618,533],{"class":448},[79,170620,149786],{"class":7284},[79,170622,745],{"class":228},[79,170624,170625,170627],{"class":81,"line":545},[79,170626,170517],{"class":7284},[79,170628,170629],{"class":228},".writelines(lines)\n",[14,170631,170633],{"id":170632},"_87-追加文件","8.7 追加文件",[19,170635,170636,170638],{},[59,170637,2482],{}," 模式不会清空原内容，而是在末尾追加。",[51,170640,170642],{"className":439,"code":170641,"language":441,"meta":57,"style":57},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[59,170643,170644,170675],{"__ignoreMap":57},[79,170645,170646,170648,170650,170652,170655,170657,170659,170661,170663,170665,170667,170669,170671,170673],{"class":81,"line":82},[79,170647,109720],{"class":448},[79,170649,148424],{"class":96},[79,170651,455],{"class":228},[79,170653,170654],{"class":89},"\"log.txt\"",[79,170656,1020],{"class":228},[79,170658,166958],{"class":89},[79,170660,1020],{"class":228},[79,170662,148439],{"class":7284},[79,170664,239],{"class":448},[79,170666,148444],{"class":89},[79,170668,15747],{"class":228},[79,170670,533],{"class":448},[79,170672,149786],{"class":7284},[79,170674,745],{"class":228},[79,170676,170677,170679,170681,170684,170686,170688],{"class":81,"line":167},[79,170678,170517],{"class":7284},[79,170680,170520],{"class":228},[79,170682,170683],{"class":89},"\"程序启动",[79,170685,158158],{"class":96},[79,170687,2495],{"class":89},[79,170689,850],{"class":228},[19,170691,170692],{},"日志类文件常用追加模式。",[14,170694,170696],{"id":170695},"_88-文件编码","8.8 文件编码",[19,170698,170699],{},"编码决定文字如何保存为字节。",[19,170701,170702],{},"常见编码：",[26,170704,170705,170708],{},[29,170706,170707],{},"UTF-8：推荐。",[29,170709,170710],{},"GBK：部分 Windows 中文文件常见。",[19,170712,170713],{},"读取文件乱码时，可以尝试：",[51,170715,170717],{"className":439,"code":170716,"language":441,"meta":57,"style":57},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[59,170718,170719,170750],{"__ignoreMap":57},[79,170720,170721,170723,170725,170727,170729,170731,170733,170735,170737,170739,170742,170744,170746,170748],{"class":81,"line":82},[79,170722,109720],{"class":448},[79,170724,148424],{"class":96},[79,170726,455],{"class":228},[79,170728,148429],{"class":89},[79,170730,1020],{"class":228},[79,170732,148434],{"class":89},[79,170734,1020],{"class":228},[79,170736,148439],{"class":7284},[79,170738,239],{"class":448},[79,170740,170741],{"class":89},"\"gbk\"",[79,170743,15747],{"class":228},[79,170745,533],{"class":448},[79,170747,149786],{"class":7284},[79,170749,745],{"class":228},[79,170751,170752,170754,170756,170758],{"class":81,"line":167},[79,170753,148456],{"class":228},[79,170755,239],{"class":448},[79,170757,149786],{"class":7284},[79,170759,170134],{"class":228},[19,170761,170762],{},"写文件时建议统一 UTF-8：",[51,170764,170766],{"className":439,"code":170765,"language":441,"meta":57,"style":57},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[59,170767,170768,170798],{"__ignoreMap":57},[79,170769,170770,170772,170774,170776,170778,170780,170782,170784,170786,170788,170790,170792,170794,170796],{"class":81,"line":82},[79,170771,109720],{"class":448},[79,170773,148424],{"class":96},[79,170775,455],{"class":228},[79,170777,148429],{"class":89},[79,170779,1020],{"class":228},[79,170781,153609],{"class":89},[79,170783,1020],{"class":228},[79,170785,148439],{"class":7284},[79,170787,239],{"class":448},[79,170789,148444],{"class":89},[79,170791,15747],{"class":228},[79,170793,533],{"class":448},[79,170795,149786],{"class":7284},[79,170797,745],{"class":228},[79,170799,170800,170802,170804,170807],{"class":81,"line":167},[79,170801,170517],{"class":7284},[79,170803,170520],{"class":228},[79,170805,170806],{"class":89},"\"中文内容\"",[79,170808,850],{"class":228},[14,170810,170812],{"id":170811},"_89-pathlib","8.9 pathlib",[19,170814,170815,170818],{},[59,170816,170817],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[51,170820,170822],{"className":439,"code":170821,"language":441,"meta":57,"style":57},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[59,170823,170824,170834,170838,170856],{"__ignoreMap":57},[79,170825,170826,170828,170830,170832],{"class":81,"line":82},[79,170827,32745],{"class":448},[79,170829,110198],{"class":228},[79,170831,520],{"class":448},[79,170833,110203],{"class":228},[79,170835,170836],{"class":81,"line":167},[79,170837,542],{"emptyLinePlaceholder":541},[79,170839,170840,170842,170844,170846,170849,170851,170853],{"class":81,"line":178},[79,170841,169944],{"class":228},[79,170843,239],{"class":448},[79,170845,110432],{"class":228},[79,170847,170848],{"class":89},"\"data\"",[79,170850,15747],{"class":228},[79,170852,2824],{"class":448},[79,170854,170855],{"class":89}," \"students.txt\"\n",[79,170857,170858,170860],{"class":81,"line":545},[79,170859,1889],{"class":96},[79,170861,170862],{"class":228},"(path)\n",[19,170864,170865],{},"创建目录：",[51,170867,170869],{"className":439,"code":170868,"language":441,"meta":57,"style":57},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[59,170870,170871,170881,170885,170898],{"__ignoreMap":57},[79,170872,170873,170875,170877,170879],{"class":81,"line":82},[79,170874,32745],{"class":448},[79,170876,110198],{"class":228},[79,170878,520],{"class":448},[79,170880,110203],{"class":228},[79,170882,170883],{"class":81,"line":167},[79,170884,542],{"emptyLinePlaceholder":541},[79,170886,170887,170890,170892,170894,170896],{"class":81,"line":178},[79,170888,170889],{"class":228},"data_dir ",[79,170891,239],{"class":448},[79,170893,110432],{"class":228},[79,170895,170848],{"class":89},[79,170897,850],{"class":228},[79,170899,170900,170903,170906,170908,170910],{"class":81,"line":545},[79,170901,170902],{"class":228},"data_dir.mkdir(",[79,170904,170905],{"class":7284},"exist_ok",[79,170907,239],{"class":448},[79,170909,33478],{"class":96},[79,170911,850],{"class":228},[19,170913,170914],{},"判断文件是否存在：",[51,170916,170918],{"className":439,"code":170917,"language":441,"meta":57,"style":57},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[59,170919,170920,170933,170937,170944],{"__ignoreMap":57},[79,170921,170922,170924,170926,170928,170931],{"class":81,"line":82},[79,170923,169944],{"class":228},[79,170925,239],{"class":448},[79,170927,110432],{"class":228},[79,170929,170930],{"class":89},"\"data\u002Fstudents.txt\"",[79,170932,850],{"class":228},[79,170934,170935],{"class":81,"line":167},[79,170936,542],{"emptyLinePlaceholder":541},[79,170938,170939,170941],{"class":81,"line":178},[79,170940,1210],{"class":448},[79,170942,170943],{"class":228}," path.exists():\n",[79,170945,170946,170948,170950,170953],{"class":81,"line":545},[79,170947,1161],{"class":96},[79,170949,455],{"class":228},[79,170951,170952],{"class":89},"\"文件存在\"",[79,170954,850],{"class":228},[19,170956,170957],{},"读写文本：",[51,170959,170961],{"className":439,"code":170960,"language":441,"meta":57,"style":57},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[59,170962,170963,170975,170979,170996,171013],{"__ignoreMap":57},[79,170964,170965,170967,170969,170971,170973],{"class":81,"line":82},[79,170966,169944],{"class":228},[79,170968,239],{"class":448},[79,170970,110432],{"class":228},[79,170972,148429],{"class":89},[79,170974,850],{"class":228},[79,170976,170977],{"class":81,"line":167},[79,170978,542],{"emptyLinePlaceholder":541},[79,170980,170981,170984,170986,170988,170990,170992,170994],{"class":81,"line":178},[79,170982,170983],{"class":228},"path.write_text(",[79,170985,147509],{"class":89},[79,170987,1020],{"class":228},[79,170989,148439],{"class":7284},[79,170991,239],{"class":448},[79,170993,148444],{"class":89},[79,170995,850],{"class":228},[79,170997,170998,171000,171002,171005,171007,171009,171011],{"class":81,"line":545},[79,170999,170127],{"class":228},[79,171001,239],{"class":448},[79,171003,171004],{"class":228}," path.read_text(",[79,171006,148439],{"class":7284},[79,171008,239],{"class":448},[79,171010,148444],{"class":89},[79,171012,850],{"class":228},[79,171014,171015,171017],{"class":81,"line":550},[79,171016,1889],{"class":96},[79,171018,170141],{"class":228},[14,171020,171022],{"id":171021},"_810-json文件","8.10 JSON文件",[19,171024,171025],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[51,171027,171029],{"className":439,"code":171028,"language":441,"meta":57,"style":57},"import json\n\nstudent = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n\ntext = json.dumps(student, ensure_ascii=False, indent=2)\nprint(text)\n",[59,171030,171031,171037,171041,171049,171059,171069,171077,171081,171085,171110],{"__ignoreMap":57},[79,171032,171033,171035],{"class":81,"line":82},[79,171034,520],{"class":448},[79,171036,148724],{"class":228},[79,171038,171039],{"class":81,"line":167},[79,171040,542],{"emptyLinePlaceholder":541},[79,171042,171043,171045,171047],{"class":81,"line":178},[79,171044,151114],{"class":228},[79,171046,239],{"class":448},[79,171048,17604],{"class":228},[79,171050,171051,171053,171055,171057],{"class":81,"line":545},[79,171052,148653],{"class":89},[79,171054,53431],{"class":228},[79,171056,151521],{"class":89},[79,171058,33468],{"class":228},[79,171060,171061,171063,171065,171067],{"class":81,"line":550},[79,171062,166170],{"class":89},[79,171064,53431],{"class":228},[79,171066,2890],{"class":96},[79,171068,33468],{"class":228},[79,171070,171071,171073,171075],{"class":81,"line":562},[79,171072,166181],{"class":89},[79,171074,53431],{"class":228},[79,171076,166186],{"class":96},[79,171078,171079],{"class":81,"line":568},[79,171080,3671],{"class":228},[79,171082,171083],{"class":81,"line":574},[79,171084,542],{"emptyLinePlaceholder":541},[79,171086,171087,171089,171091,171094,171096,171098,171100,171102,171104,171106,171108],{"class":81,"line":579},[79,171088,158077],{"class":228},[79,171090,239],{"class":448},[79,171092,171093],{"class":228}," json.dumps(student, ",[79,171095,148770],{"class":7284},[79,171097,239],{"class":448},[79,171099,35984],{"class":96},[79,171101,1020],{"class":228},[79,171103,153645],{"class":7284},[79,171105,239],{"class":448},[79,171107,2331],{"class":96},[79,171109,850],{"class":228},[79,171111,171112,171114],{"class":81,"line":585},[79,171113,1889],{"class":96},[79,171115,165704],{"class":228},[19,171117,171118],{},"写入 JSON 文件：",[51,171120,171122],{"className":439,"code":171121,"language":441,"meta":57,"style":57},"import json\n\nstudents = [\n    {\"name\": \"小明\", \"age\": 18, \"score\": 95},\n    {\"name\": \"小红\", \"age\": 17, \"score\": 88},\n]\n\nwith open(\"students.json\", \"w\", encoding=\"utf-8\") as file:\n    json.dump(students, file, ensure_ascii=False, indent=2)\n",[59,171123,171124,171130,171134,171142,171170,171198,171202,171206,171236],{"__ignoreMap":57},[79,171125,171126,171128],{"class":81,"line":82},[79,171127,520],{"class":448},[79,171129,148724],{"class":228},[79,171131,171132],{"class":81,"line":167},[79,171133,542],{"emptyLinePlaceholder":541},[79,171135,171136,171138,171140],{"class":81,"line":178},[79,171137,161349],{"class":228},[79,171139,239],{"class":448},[79,171141,57436],{"class":228},[79,171143,171144,171146,171148,171150,171152,171154,171156,171158,171160,171162,171164,171166,171168],{"class":81,"line":545},[79,171145,150018],{"class":228},[79,171147,64667],{"class":89},[79,171149,53431],{"class":228},[79,171151,151521],{"class":89},[79,171153,1020],{"class":228},[79,171155,71112],{"class":89},[79,171157,53431],{"class":228},[79,171159,2890],{"class":96},[79,171161,1020],{"class":228},[79,171163,153105],{"class":89},[79,171165,53431],{"class":228},[79,171167,3228],{"class":96},[79,171169,7000],{"class":228},[79,171171,171172,171174,171176,171178,171180,171182,171184,171186,171188,171190,171192,171194,171196],{"class":81,"line":550},[79,171173,150018],{"class":228},[79,171175,64667],{"class":89},[79,171177,53431],{"class":228},[79,171179,152569],{"class":89},[79,171181,1020],{"class":228},[79,171183,71112],{"class":89},[79,171185,53431],{"class":228},[79,171187,2865],{"class":96},[79,171189,1020],{"class":228},[79,171191,153105],{"class":89},[79,171193,53431],{"class":228},[79,171195,3051],{"class":96},[79,171197,7000],{"class":228},[79,171199,171200],{"class":81,"line":562},[79,171201,762],{"class":228},[79,171203,171204],{"class":81,"line":568},[79,171205,542],{"emptyLinePlaceholder":541},[79,171207,171208,171210,171212,171214,171216,171218,171220,171222,171224,171226,171228,171230,171232,171234],{"class":81,"line":574},[79,171209,109720],{"class":448},[79,171211,148424],{"class":96},[79,171213,455],{"class":228},[79,171215,153464],{"class":89},[79,171217,1020],{"class":228},[79,171219,153609],{"class":89},[79,171221,1020],{"class":228},[79,171223,148439],{"class":7284},[79,171225,239],{"class":448},[79,171227,148444],{"class":89},[79,171229,15747],{"class":228},[79,171231,533],{"class":448},[79,171233,149786],{"class":7284},[79,171235,745],{"class":228},[79,171237,171238,171241,171243,171245,171247,171249,171251,171253,171255,171257,171259],{"class":81,"line":579},[79,171239,171240],{"class":228},"    json.dump(students, ",[79,171242,47349],{"class":7284},[79,171244,1020],{"class":228},[79,171246,148770],{"class":7284},[79,171248,239],{"class":448},[79,171250,35984],{"class":96},[79,171252,1020],{"class":228},[79,171254,153645],{"class":7284},[79,171256,239],{"class":448},[79,171258,2331],{"class":96},[79,171260,850],{"class":228},[19,171262,171263],{},"读取 JSON 文件：",[51,171265,171267],{"className":439,"code":171266,"language":441,"meta":57,"style":57},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[59,171268,171269,171275,171279,171309,171321,171325],{"__ignoreMap":57},[79,171270,171271,171273],{"class":81,"line":82},[79,171272,520],{"class":448},[79,171274,148724],{"class":228},[79,171276,171277],{"class":81,"line":167},[79,171278,542],{"emptyLinePlaceholder":541},[79,171280,171281,171283,171285,171287,171289,171291,171293,171295,171297,171299,171301,171303,171305,171307],{"class":81,"line":178},[79,171282,109720],{"class":448},[79,171284,148424],{"class":96},[79,171286,455],{"class":228},[79,171288,153464],{"class":89},[79,171290,1020],{"class":228},[79,171292,148434],{"class":89},[79,171294,1020],{"class":228},[79,171296,148439],{"class":7284},[79,171298,239],{"class":448},[79,171300,148444],{"class":89},[79,171302,15747],{"class":228},[79,171304,533],{"class":448},[79,171306,149786],{"class":7284},[79,171308,745],{"class":228},[79,171310,171311,171313,171315,171317,171319],{"class":81,"line":545},[79,171312,154670],{"class":228},[79,171314,239],{"class":448},[79,171316,149797],{"class":228},[79,171318,47349],{"class":7284},[79,171320,850],{"class":228},[79,171322,171323],{"class":81,"line":550},[79,171324,542],{"emptyLinePlaceholder":541},[79,171326,171327,171329],{"class":81,"line":562},[79,171328,1889],{"class":96},[79,171330,166628],{"class":228},[14,171332,171334],{"id":171333},"_811-csv文件","8.11 CSV文件",[19,171336,171337],{},"CSV 是逗号分隔值，常用于表格数据。",[19,171339,171340],{},"写入 CSV：",[51,171342,171344],{"className":439,"code":171343,"language":441,"meta":57,"style":57},"import csv\n\nstudents = [\n    [\"姓名\", \"年龄\", \"成绩\"],\n    [\"小明\", 18, 95],\n    [\"小红\", 17, 88],\n]\n\nwith open(\"students.csv\", \"w\", encoding=\"utf-8\", newline=\"\") as file:\n    writer = csv.writer(file)\n    writer.writerows(students)\n",[59,171345,171346,171353,171357,171365,171383,171399,171415,171419,171423,171463,171477],{"__ignoreMap":57},[79,171347,171348,171350],{"class":81,"line":82},[79,171349,520],{"class":448},[79,171351,171352],{"class":228}," csv\n",[79,171354,171355],{"class":81,"line":167},[79,171356,542],{"emptyLinePlaceholder":541},[79,171358,171359,171361,171363],{"class":81,"line":178},[79,171360,161349],{"class":228},[79,171362,239],{"class":448},[79,171364,57436],{"class":228},[79,171366,171367,171370,171372,171374,171376,171378,171381],{"class":81,"line":545},[79,171368,171369],{"class":228},"    [",[79,171371,75087],{"class":89},[79,171373,1020],{"class":228},[79,171375,75120],{"class":89},[79,171377,1020],{"class":228},[79,171379,171380],{"class":89},"\"成绩\"",[79,171382,89823],{"class":228},[79,171384,171385,171387,171389,171391,171393,171395,171397],{"class":81,"line":550},[79,171386,171369],{"class":228},[79,171388,151521],{"class":89},[79,171390,1020],{"class":228},[79,171392,2890],{"class":96},[79,171394,1020],{"class":228},[79,171396,3228],{"class":96},[79,171398,89823],{"class":228},[79,171400,171401,171403,171405,171407,171409,171411,171413],{"class":81,"line":562},[79,171402,171369],{"class":228},[79,171404,152569],{"class":89},[79,171406,1020],{"class":228},[79,171408,2865],{"class":96},[79,171410,1020],{"class":228},[79,171412,3051],{"class":96},[79,171414,89823],{"class":228},[79,171416,171417],{"class":81,"line":568},[79,171418,762],{"class":228},[79,171420,171421],{"class":81,"line":574},[79,171422,542],{"emptyLinePlaceholder":541},[79,171424,171425,171427,171429,171431,171434,171436,171438,171440,171442,171444,171446,171448,171451,171453,171455,171457,171459,171461],{"class":81,"line":579},[79,171426,109720],{"class":448},[79,171428,148424],{"class":96},[79,171430,455],{"class":228},[79,171432,171433],{"class":89},"\"students.csv\"",[79,171435,1020],{"class":228},[79,171437,153609],{"class":89},[79,171439,1020],{"class":228},[79,171441,148439],{"class":7284},[79,171443,239],{"class":448},[79,171445,148444],{"class":89},[79,171447,1020],{"class":228},[79,171449,171450],{"class":7284},"newline",[79,171452,239],{"class":448},[79,171454,9717],{"class":89},[79,171456,15747],{"class":228},[79,171458,533],{"class":448},[79,171460,149786],{"class":7284},[79,171462,745],{"class":228},[79,171464,171465,171468,171470,171473,171475],{"class":81,"line":585},[79,171466,171467],{"class":228},"    writer ",[79,171469,239],{"class":448},[79,171471,171472],{"class":228}," csv.writer(",[79,171474,47349],{"class":7284},[79,171476,850],{"class":228},[79,171478,171479],{"class":81,"line":591},[79,171480,171481],{"class":228},"    writer.writerows(students)\n",[19,171483,171484],{},"读取 CSV：",[51,171486,171488],{"className":439,"code":171487,"language":441,"meta":57,"style":57},"import csv\n\nwith open(\"students.csv\", \"r\", encoding=\"utf-8\") as file:\n    reader = csv.reader(file)\n    for row in reader:\n        print(row)\n",[59,171489,171490,171496,171500,171530,171544,171556],{"__ignoreMap":57},[79,171491,171492,171494],{"class":81,"line":82},[79,171493,520],{"class":448},[79,171495,171352],{"class":228},[79,171497,171498],{"class":81,"line":167},[79,171499,542],{"emptyLinePlaceholder":541},[79,171501,171502,171504,171506,171508,171510,171512,171514,171516,171518,171520,171522,171524,171526,171528],{"class":81,"line":178},[79,171503,109720],{"class":448},[79,171505,148424],{"class":96},[79,171507,455],{"class":228},[79,171509,171433],{"class":89},[79,171511,1020],{"class":228},[79,171513,148434],{"class":89},[79,171515,1020],{"class":228},[79,171517,148439],{"class":7284},[79,171519,239],{"class":448},[79,171521,148444],{"class":89},[79,171523,15747],{"class":228},[79,171525,533],{"class":448},[79,171527,149786],{"class":7284},[79,171529,745],{"class":228},[79,171531,171532,171535,171537,171540,171542],{"class":81,"line":545},[79,171533,171534],{"class":228},"    reader ",[79,171536,239],{"class":448},[79,171538,171539],{"class":228}," csv.reader(",[79,171541,47349],{"class":7284},[79,171543,850],{"class":228},[79,171545,171546,171548,171551,171553],{"class":81,"line":550},[79,171547,915],{"class":448},[79,171549,171550],{"class":228}," row ",[79,171552,921],{"class":448},[79,171554,171555],{"class":228}," reader:\n",[79,171557,171558,171560],{"class":81,"line":562},[79,171559,34449],{"class":96},[79,171561,171562],{"class":228},"(row)\n",[19,171564,171565],{},"使用字典写入：",[51,171567,171569],{"className":439,"code":171568,"language":441,"meta":57,"style":57},"import csv\n\nstudents = [\n    {\"name\": \"小明\", \"age\": 18, \"score\": 95},\n    {\"name\": \"小红\", \"age\": 17, \"score\": 88},\n]\n\nwith open(\"students.csv\", \"w\", encoding=\"utf-8\", newline=\"\") as file:\n    fieldnames = [\"name\", \"age\", \"score\"]\n    writer = csv.DictWriter(file, fieldnames=fieldnames)\n    writer.writeheader()\n    writer.writerows(students)\n",[59,171570,171571,171577,171581,171589,171617,171645,171649,171653,171691,171712,171733,171738],{"__ignoreMap":57},[79,171572,171573,171575],{"class":81,"line":82},[79,171574,520],{"class":448},[79,171576,171352],{"class":228},[79,171578,171579],{"class":81,"line":167},[79,171580,542],{"emptyLinePlaceholder":541},[79,171582,171583,171585,171587],{"class":81,"line":178},[79,171584,161349],{"class":228},[79,171586,239],{"class":448},[79,171588,57436],{"class":228},[79,171590,171591,171593,171595,171597,171599,171601,171603,171605,171607,171609,171611,171613,171615],{"class":81,"line":545},[79,171592,150018],{"class":228},[79,171594,64667],{"class":89},[79,171596,53431],{"class":228},[79,171598,151521],{"class":89},[79,171600,1020],{"class":228},[79,171602,71112],{"class":89},[79,171604,53431],{"class":228},[79,171606,2890],{"class":96},[79,171608,1020],{"class":228},[79,171610,153105],{"class":89},[79,171612,53431],{"class":228},[79,171614,3228],{"class":96},[79,171616,7000],{"class":228},[79,171618,171619,171621,171623,171625,171627,171629,171631,171633,171635,171637,171639,171641,171643],{"class":81,"line":550},[79,171620,150018],{"class":228},[79,171622,64667],{"class":89},[79,171624,53431],{"class":228},[79,171626,152569],{"class":89},[79,171628,1020],{"class":228},[79,171630,71112],{"class":89},[79,171632,53431],{"class":228},[79,171634,2865],{"class":96},[79,171636,1020],{"class":228},[79,171638,153105],{"class":89},[79,171640,53431],{"class":228},[79,171642,3051],{"class":96},[79,171644,7000],{"class":228},[79,171646,171647],{"class":81,"line":562},[79,171648,762],{"class":228},[79,171650,171651],{"class":81,"line":568},[79,171652,542],{"emptyLinePlaceholder":541},[79,171654,171655,171657,171659,171661,171663,171665,171667,171669,171671,171673,171675,171677,171679,171681,171683,171685,171687,171689],{"class":81,"line":574},[79,171656,109720],{"class":448},[79,171658,148424],{"class":96},[79,171660,455],{"class":228},[79,171662,171433],{"class":89},[79,171664,1020],{"class":228},[79,171666,153609],{"class":89},[79,171668,1020],{"class":228},[79,171670,148439],{"class":7284},[79,171672,239],{"class":448},[79,171674,148444],{"class":89},[79,171676,1020],{"class":228},[79,171678,171450],{"class":7284},[79,171680,239],{"class":448},[79,171682,9717],{"class":89},[79,171684,15747],{"class":228},[79,171686,533],{"class":448},[79,171688,149786],{"class":7284},[79,171690,745],{"class":228},[79,171692,171693,171696,171698,171700,171702,171704,171706,171708,171710],{"class":81,"line":579},[79,171694,171695],{"class":228},"    fieldnames ",[79,171697,239],{"class":448},[79,171699,54220],{"class":228},[79,171701,64667],{"class":89},[79,171703,1020],{"class":228},[79,171705,71112],{"class":89},[79,171707,1020],{"class":228},[79,171709,153105],{"class":89},[79,171711,762],{"class":228},[79,171713,171714,171716,171718,171721,171723,171725,171728,171730],{"class":81,"line":585},[79,171715,171467],{"class":228},[79,171717,239],{"class":448},[79,171719,171720],{"class":228}," csv.DictWriter(",[79,171722,47349],{"class":7284},[79,171724,1020],{"class":228},[79,171726,171727],{"class":7284},"fieldnames",[79,171729,239],{"class":448},[79,171731,171732],{"class":228},"fieldnames)\n",[79,171734,171735],{"class":81,"line":591},[79,171736,171737],{"class":228},"    writer.writeheader()\n",[79,171739,171740],{"class":81,"line":596},[79,171741,171481],{"class":228},[14,171743,171745],{"id":171744},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,171747,124925],{},[26,171749,171750,171753,171756],{},[29,171751,171752],{},"读取文本文件。",[29,171754,171755],{},"统计每个单词出现次数。",[29,171757,171758],{},"输出出现次数最多的前 10 个单词。",[19,171760,12070],{},[51,171762,171764],{"className":439,"code":171763,"language":441,"meta":57,"style":57},"from pathlib import Path\n\npath = Path(\"article.txt\")\ncontent = path.read_text(encoding=\"utf-8\")\n\nwords = content.lower().split()\ncounter = {}\n\nfor word in words:\n    word = word.strip(\".,!?;:\\\"'()[]\")\n    if not word:\n        continue\n    counter[word] = counter.get(word, 0) + 1\n\nitems = sorted(counter.items(), key=lambda item: item[1], reverse=True)\n\nfor word, count in items[:10]:\n    print(word, count)\n",[59,171765,171766,171776,171780,171793,171809,171813,171823,171832,171836,171848,171868,171877,171881,171899,171903,171933,171937,171953],{"__ignoreMap":57},[79,171767,171768,171770,171772,171774],{"class":81,"line":82},[79,171769,32745],{"class":448},[79,171771,110198],{"class":228},[79,171773,520],{"class":448},[79,171775,110203],{"class":228},[79,171777,171778],{"class":81,"line":167},[79,171779,542],{"emptyLinePlaceholder":541},[79,171781,171782,171784,171786,171788,171791],{"class":81,"line":178},[79,171783,169944],{"class":228},[79,171785,239],{"class":448},[79,171787,110432],{"class":228},[79,171789,171790],{"class":89},"\"article.txt\"",[79,171792,850],{"class":228},[79,171794,171795,171797,171799,171801,171803,171805,171807],{"class":81,"line":545},[79,171796,170127],{"class":228},[79,171798,239],{"class":448},[79,171800,171004],{"class":228},[79,171802,148439],{"class":7284},[79,171804,239],{"class":448},[79,171806,148444],{"class":89},[79,171808,850],{"class":228},[79,171810,171811],{"class":81,"line":550},[79,171812,542],{"emptyLinePlaceholder":541},[79,171814,171815,171818,171820],{"class":81,"line":562},[79,171816,171817],{"class":228},"words ",[79,171819,239],{"class":448},[79,171821,171822],{"class":228}," content.lower().split()\n",[79,171824,171825,171828,171830],{"class":81,"line":568},[79,171826,171827],{"class":228},"counter ",[79,171829,239],{"class":448},[79,171831,89855],{"class":228},[79,171833,171834],{"class":81,"line":574},[79,171835,542],{"emptyLinePlaceholder":541},[79,171837,171838,171840,171843,171845],{"class":81,"line":579},[79,171839,1638],{"class":448},[79,171841,171842],{"class":228}," word ",[79,171844,921],{"class":448},[79,171846,171847],{"class":228}," words:\n",[79,171849,171850,171853,171855,171858,171861,171863,171866],{"class":81,"line":585},[79,171851,171852],{"class":228},"    word ",[79,171854,239],{"class":448},[79,171856,171857],{"class":228}," word.strip(",[79,171859,171860],{"class":89},"\".,!?;:",[79,171862,158128],{"class":96},[79,171864,171865],{"class":89},"'()[]\"",[79,171867,850],{"class":228},[79,171869,171870,171872,171874],{"class":81,"line":591},[79,171871,5176],{"class":448},[79,171873,40925],{"class":448},[79,171875,171876],{"class":228}," word:\n",[79,171878,171879],{"class":81,"line":596},[79,171880,150145],{"class":448},[79,171882,171883,171886,171888,171891,171893,171895,171897],{"class":81,"line":602},[79,171884,171885],{"class":228},"    counter[word] ",[79,171887,239],{"class":448},[79,171889,171890],{"class":228}," counter.get(word, ",[79,171892,759],{"class":96},[79,171894,15747],{"class":228},[79,171896,995],{"class":448},[79,171898,57688],{"class":96},[79,171900,171901],{"class":81,"line":608},[79,171902,542],{"emptyLinePlaceholder":541},[79,171904,171905,171908,171910,171912,171915,171917,171919,171921,171923,171925,171927,171929,171931],{"class":81,"line":614},[79,171906,171907],{"class":228},"items ",[79,171909,239],{"class":448},[79,171911,165237],{"class":96},[79,171913,171914],{"class":228},"(counter.items(), ",[79,171916,155579],{"class":7284},[79,171918,155582],{"class":448},[79,171920,155585],{"class":228},[79,171922,775],{"class":96},[79,171924,113835],{"class":228},[79,171926,165161],{"class":7284},[79,171928,239],{"class":448},[79,171930,33478],{"class":96},[79,171932,850],{"class":228},[79,171934,171935],{"class":81,"line":619},[79,171936,542],{"emptyLinePlaceholder":541},[79,171938,171939,171941,171944,171946,171949,171951],{"class":81,"line":625},[79,171940,1638],{"class":448},[79,171942,171943],{"class":228}," word, count ",[79,171945,921],{"class":448},[79,171947,171948],{"class":228}," items[:",[79,171950,2689],{"class":96},[79,171952,167388],{"class":228},[79,171954,171955,171957],{"class":81,"line":631},[79,171956,1161],{"class":96},[79,171958,171959],{"class":228},"(word, count)\n",[14,171961,171963],{"id":171962},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[51,171965,171967],{"className":439,"code":171966,"language":441,"meta":57,"style":57},"import json\nfrom pathlib import Path\n\nDATA_FILE = Path(\"students.json\")\n\n\ndef load_students():\n    if not DATA_FILE.exists():\n        return []\n\n    with open(DATA_FILE, \"r\", encoding=\"utf-8\") as file:\n        return json.load(file)\n\n\ndef save_students(students):\n    with open(DATA_FILE, \"w\", encoding=\"utf-8\") as file:\n        json.dump(students, file, ensure_ascii=False, indent=2)\n\n\nstudents = load_students()\nstudents.append({\"name\": \"小明\", \"age\": 18, \"score\": 95})\nsave_students(students)\nprint(\"保存成功\")\n",[59,171968,171969,171975,171985,171989,172001,172005,172009,172017,172027,172033,172037,172067,172077,172081,172085,172093,172123,172147,172151,172155,172163,172192,172197],{"__ignoreMap":57},[79,171970,171971,171973],{"class":81,"line":82},[79,171972,520],{"class":448},[79,171974,148724],{"class":228},[79,171976,171977,171979,171981,171983],{"class":81,"line":167},[79,171978,32745],{"class":448},[79,171980,110198],{"class":228},[79,171982,520],{"class":448},[79,171984,110203],{"class":228},[79,171986,171987],{"class":81,"line":178},[79,171988,542],{"emptyLinePlaceholder":541},[79,171990,171991,171993,171995,171997,171999],{"class":81,"line":545},[79,171992,153457],{"class":96},[79,171994,556],{"class":448},[79,171996,110432],{"class":228},[79,171998,153464],{"class":89},[79,172000,850],{"class":228},[79,172002,172003],{"class":81,"line":550},[79,172004,542],{"emptyLinePlaceholder":541},[79,172006,172007],{"class":81,"line":562},[79,172008,542],{"emptyLinePlaceholder":541},[79,172010,172011,172013,172015],{"class":81,"line":568},[79,172012,703],{"class":448},[79,172014,153481],{"class":85},[79,172016,33953],{"class":228},[79,172018,172019,172021,172023,172025],{"class":81,"line":574},[79,172020,5176],{"class":448},[79,172022,40925],{"class":448},[79,172024,153492],{"class":96},[79,172026,153495],{"class":228},[79,172028,172029,172031],{"class":81,"line":579},[79,172030,16785],{"class":448},[79,172032,53832],{"class":228},[79,172034,172035],{"class":81,"line":585},[79,172036,542],{"emptyLinePlaceholder":541},[79,172038,172039,172041,172043,172045,172047,172049,172051,172053,172055,172057,172059,172061,172063,172065],{"class":81,"line":591},[79,172040,36175],{"class":448},[79,172042,148424],{"class":96},[79,172044,455],{"class":228},[79,172046,153457],{"class":96},[79,172048,1020],{"class":228},[79,172050,148434],{"class":89},[79,172052,1020],{"class":228},[79,172054,148439],{"class":7284},[79,172056,239],{"class":448},[79,172058,148444],{"class":89},[79,172060,15747],{"class":228},[79,172062,533],{"class":448},[79,172064,149786],{"class":7284},[79,172066,745],{"class":228},[79,172068,172069,172071,172073,172075],{"class":81,"line":596},[79,172070,16785],{"class":448},[79,172072,149797],{"class":228},[79,172074,47349],{"class":7284},[79,172076,850],{"class":228},[79,172078,172079],{"class":81,"line":602},[79,172080,542],{"emptyLinePlaceholder":541},[79,172082,172083],{"class":81,"line":608},[79,172084,542],{"emptyLinePlaceholder":541},[79,172086,172087,172089,172091],{"class":81,"line":614},[79,172088,703],{"class":448},[79,172090,153591],{"class":85},[79,172092,153594],{"class":228},[79,172094,172095,172097,172099,172101,172103,172105,172107,172109,172111,172113,172115,172117,172119,172121],{"class":81,"line":619},[79,172096,36175],{"class":448},[79,172098,148424],{"class":96},[79,172100,455],{"class":228},[79,172102,153457],{"class":96},[79,172104,1020],{"class":228},[79,172106,153609],{"class":89},[79,172108,1020],{"class":228},[79,172110,148439],{"class":7284},[79,172112,239],{"class":448},[79,172114,148444],{"class":89},[79,172116,15747],{"class":228},[79,172118,533],{"class":448},[79,172120,149786],{"class":7284},[79,172122,745],{"class":228},[79,172124,172125,172127,172129,172131,172133,172135,172137,172139,172141,172143,172145],{"class":81,"line":625},[79,172126,153630],{"class":228},[79,172128,47349],{"class":7284},[79,172130,1020],{"class":228},[79,172132,148770],{"class":7284},[79,172134,239],{"class":448},[79,172136,35984],{"class":96},[79,172138,1020],{"class":228},[79,172140,153645],{"class":7284},[79,172142,239],{"class":448},[79,172144,2331],{"class":96},[79,172146,850],{"class":228},[79,172148,172149],{"class":81,"line":631},[79,172150,542],{"emptyLinePlaceholder":541},[79,172152,172153],{"class":81,"line":637},[79,172154,542],{"emptyLinePlaceholder":541},[79,172156,172157,172159,172161],{"class":81,"line":643},[79,172158,161349],{"class":228},[79,172160,239],{"class":448},[79,172162,154675],{"class":228},[79,172164,172165,172168,172170,172172,172174,172176,172178,172180,172182,172184,172186,172188,172190],{"class":81,"line":649},[79,172166,172167],{"class":228},"students.append({",[79,172169,64667],{"class":89},[79,172171,53431],{"class":228},[79,172173,151521],{"class":89},[79,172175,1020],{"class":228},[79,172177,71112],{"class":89},[79,172179,53431],{"class":228},[79,172181,2890],{"class":96},[79,172183,1020],{"class":228},[79,172185,153105],{"class":89},[79,172187,53431],{"class":228},[79,172189,3228],{"class":96},[79,172191,166785],{"class":228},[79,172193,172194],{"class":81,"line":655},[79,172195,172196],{"class":228},"save_students(students)\n",[79,172198,172199,172201,172203,172206],{"class":81,"line":660},[79,172200,1889],{"class":96},[79,172202,455],{"class":228},[79,172204,172205],{"class":89},"\"保存成功\"",[79,172207,850],{"class":228},[14,172209,172211],{"id":172210},"_814-易错点","8.14 易错点",[26,172213,172214,172218,172224,172229,172236,172243],{},[29,172215,172216,170477],{},[59,172217,3035],{},[29,172219,172220,172221,497],{},"读写中文要指定 ",[59,172222,172223],{},"encoding=\"utf-8\"",[29,172225,172226,172227,497],{},"打开文件后要关闭，推荐使用 ",[59,172228,109720],{},[29,172230,172231,172232,172235],{},"读取大文件不要直接 ",[59,172233,172234],{},"read()"," 全部内容。",[29,172237,172238,172239,172242],{},"Windows 写 CSV 时建议加 ",[59,172240,172241],{},"newline=\"\"","，避免空行。",[29,172244,172245],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,172247,172249],{"id":172248},"_815-本章练习","8.15 本章练习",[26,172251,172252,172259,172264,172267,172270],{},[29,172253,172254,172255,172258],{},"写入一个 ",[59,172256,172257],{},"students.txt","，每行保存一个学生姓名。",[29,172260,106277,172261,172263],{},[59,172262,172257],{}," 并输出所有学生。",[29,172265,172266],{},"把学生列表保存为 JSON 文件。",[29,172268,172269],{},"从 JSON 文件读取学生数据，计算平均分。",[29,172271,172272,172273,172276,172277,172280],{},"写一个日志函数 ",[59,172274,172275],{},"write_log(message)","，每次调用向 ",[59,172278,172279],{},"app.log"," 追加一行。",[2159,172282,172283],{},"html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":57,"searchDepth":167,"depth":167,"links":172285},[172286,172287,172291,172292,172298,172299,172300,172301,172302,172303,172304,172305,172306,172307,172308],{"id":169797,"depth":167,"text":169798},{"id":169838,"depth":167,"text":169839,"children":172288},[172289,172290],{"id":169842,"depth":178,"text":169843},{"id":169876,"depth":178,"text":169877},{"id":169990,"depth":167,"text":169991},{"id":170083,"depth":167,"text":170084,"children":172293},[172294,172295,172296,172297],{"id":170087,"depth":178,"text":170088},{"id":170174,"depth":178,"text":170175},{"id":170244,"depth":178,"text":170245},{"id":170338,"depth":178,"text":170339},{"id":170408,"depth":167,"text":170409},{"id":170471,"depth":167,"text":170472},{"id":170632,"depth":167,"text":170633},{"id":170695,"depth":167,"text":170696},{"id":170811,"depth":167,"text":170812},{"id":171021,"depth":167,"text":171022},{"id":171333,"depth":167,"text":171334},{"id":171744,"depth":167,"text":171745},{"id":171962,"depth":167,"text":171963},{"id":172210,"depth":167,"text":172211},{"id":172248,"depth":167,"text":172249},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":169789,"description":25402},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":172315,"title":172316,"body":172317,"description":25402,"extension":2186,"meta":174503,"navigation":541,"path":174504,"seo":174505,"stem":174506,"__hash__":174507},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":172318,"toc":174470},[172319,172322,172326,172329,172332,172424,172426,172445,172450,172454,172457,172460,172489,172496,172499,172503,172506,172535,172537,172589,172595,172648,172652,172750,172753,172820,172824,172881,172883,172889,172893,172898,172904,172995,173000,173004,173007,173085,173088,173126,173130,173248,173251,173255,173258,173303,173306,173310,173315,173321,173371,173374,173405,173409,173413,173443,173447,173482,173486,173521,173561,173565,173581,173584,173588,173592,173671,173675,173716,173720,173775,173779,173813,173817,173847,173856,173863,173869,173926,173929,173937,173940,173944,173951,173954,173960,173963,173980,173985,173989,173995,174008,174011,174048,174051,174062,174065,174079,174082,174096,174100,174107,174140,174143,174145,174151,174154,174158,174160,174166,174171,174344,174348,174411,174415,174439,174443,174467],[10,172320,172316],{"id":172321},"_9-异常模块与包",[14,172323,172325],{"id":172324},"_91-什么是异常","9.1 什么是异常",[19,172327,172328],{},"异常是程序运行过程中出现的错误。",[19,172330,172331],{},"常见异常：",[347,172333,172334,172343],{},[350,172335,172336],{},[353,172337,172338,172341],{},[356,172339,172340],{},"异常",[356,172342,27888],{},[367,172344,172345,172355,172365,172374,172384,172394,172404,172414],{},[353,172346,172347,172352],{},[372,172348,172349],{},[59,172350,172351],{},"NameError",[372,172353,172354],{},"使用了未定义变量",[353,172356,172357,172362],{},[372,172358,172359],{},[59,172360,172361],{},"TypeError",[372,172363,172364],{},"类型不匹配",[353,172366,172367,172371],{},[372,172368,172369],{},[59,172370,156467],{},[372,172372,172373],{},"值不合法",[353,172375,172376,172381],{},[372,172377,172378],{},[59,172379,172380],{},"IndexError",[372,172382,172383],{},"列表索引越界",[353,172385,172386,172391],{},[372,172387,172388],{},[59,172389,172390],{},"KeyError",[372,172392,172393],{},"字典 key 不存在",[353,172395,172396,172401],{},[372,172397,172398],{},[59,172399,172400],{},"FileNotFoundError",[372,172402,172403],{},"文件不存在",[353,172405,172406,172411],{},[372,172407,172408],{},[59,172409,172410],{},"ZeroDivisionError",[372,172412,172413],{},"除数为 0",[353,172415,172416,172421],{},[372,172417,172418],{},[59,172419,172420],{},"ImportError",[372,172422,172423],{},"导入失败",[19,172425,17167],{},[51,172427,172429],{"className":439,"code":172428,"language":441,"meta":57,"style":57},"num = int(\"abc\")\n",[59,172430,172431],{"__ignoreMap":57},[79,172432,172433,172435,172437,172439,172441,172443],{"class":81,"line":82},[79,172434,157420],{"class":228},[79,172436,239],{"class":448},[79,172438,4467],{"class":96},[79,172440,455],{"class":228},[79,172442,157513],{"class":89},[79,172444,850],{"class":228},[19,172446,172447,172448,497],{},"会触发 ",[59,172449,156467],{},[14,172451,172453],{"id":172452},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,172455,172456],{},"如果不处理异常，程序会直接终止。",[19,172458,172459],{},"例如用户输入年龄：",[51,172461,172463],{"className":439,"code":172462,"language":441,"meta":57,"style":57},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[59,172464,172465,172483],{"__ignoreMap":57},[79,172466,172467,172469,172471,172473,172475,172477,172479,172481],{"class":81,"line":82},[79,172468,148179],{"class":228},[79,172470,239],{"class":448},[79,172472,4467],{"class":96},[79,172474,455],{"class":228},[79,172476,55812],{"class":96},[79,172478,455],{"class":228},[79,172480,154027],{"class":89},[79,172482,1150],{"class":228},[79,172484,172485,172487],{"class":81,"line":167},[79,172486,1889],{"class":96},[79,172488,157394],{"class":228},[19,172490,172491,172492,172495],{},"用户输入 ",[59,172493,172494],{},"abc","，程序就会报错退出。",[19,172497,172498],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,172500,172502],{"id":172501},"_93-try-except","9.3 try except",[19,172504,172505],{},"基础语法：",[51,172507,172509],{"className":439,"code":172508,"language":441,"meta":57,"style":57},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[59,172510,172511,172518,172523,172530],{"__ignoreMap":57},[79,172512,172513,172516],{"class":81,"line":82},[79,172514,172515],{"class":448},"try",[79,172517,745],{"class":228},[79,172519,172520],{"class":81,"line":167},[79,172521,172522],{"class":228},"    可能出错的代码\n",[79,172524,172525,172528],{"class":81,"line":178},[79,172526,172527],{"class":448},"except",[79,172529,745],{"class":228},[79,172531,172532],{"class":81,"line":545},[79,172533,172534],{"class":228},"    出错后的处理代码\n",[19,172536,17167],{},[51,172538,172540],{"className":439,"code":172539,"language":441,"meta":57,"style":57},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[59,172541,172542,172548,172566,172572,172578],{"__ignoreMap":57},[79,172543,172544,172546],{"class":81,"line":82},[79,172545,172515],{"class":448},[79,172547,745],{"class":228},[79,172549,172550,172552,172554,172556,172558,172560,172562,172564],{"class":81,"line":167},[79,172551,154019],{"class":228},[79,172553,239],{"class":448},[79,172555,4467],{"class":96},[79,172557,455],{"class":228},[79,172559,55812],{"class":96},[79,172561,455],{"class":228},[79,172563,154027],{"class":89},[79,172565,1150],{"class":228},[79,172567,172568,172570],{"class":81,"line":178},[79,172569,1161],{"class":96},[79,172571,157394],{"class":228},[79,172573,172574,172576],{"class":81,"line":545},[79,172575,172527],{"class":448},[79,172577,745],{"class":228},[79,172579,172580,172582,172584,172587],{"class":81,"line":550},[79,172581,1161],{"class":96},[79,172583,455],{"class":228},[79,172585,172586],{"class":89},"\"年龄必须是数字\"",[79,172588,850],{"class":228},[19,172590,172591,172592,172594],{},"不建议裸写 ",[59,172593,172527],{},"，最好指定异常类型。",[51,172596,172598],{"className":439,"code":172597,"language":441,"meta":57,"style":57},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[59,172599,172600,172606,172624,172630,172638],{"__ignoreMap":57},[79,172601,172602,172604],{"class":81,"line":82},[79,172603,172515],{"class":448},[79,172605,745],{"class":228},[79,172607,172608,172610,172612,172614,172616,172618,172620,172622],{"class":81,"line":167},[79,172609,154019],{"class":228},[79,172611,239],{"class":448},[79,172613,4467],{"class":96},[79,172615,455],{"class":228},[79,172617,55812],{"class":96},[79,172619,455],{"class":228},[79,172621,154027],{"class":89},[79,172623,1150],{"class":228},[79,172625,172626,172628],{"class":81,"line":178},[79,172627,1161],{"class":96},[79,172629,157394],{"class":228},[79,172631,172632,172634,172636],{"class":81,"line":545},[79,172633,172527],{"class":448},[79,172635,153859],{"class":96},[79,172637,745],{"class":228},[79,172639,172640,172642,172644,172646],{"class":81,"line":550},[79,172641,1161],{"class":96},[79,172643,455],{"class":228},[79,172645,172586],{"class":89},[79,172647,850],{"class":228},[14,172649,172651],{"id":172650},"_94-捕获多个异常","9.4 捕获多个异常",[51,172653,172655],{"className":439,"code":172654,"language":441,"meta":57,"style":57},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[59,172656,172657,172663,172684,172704,172711,172719,172730,172739],{"__ignoreMap":57},[79,172658,172659,172661],{"class":81,"line":82},[79,172660,172515],{"class":448},[79,172662,745],{"class":228},[79,172664,172665,172668,172670,172672,172674,172676,172678,172680,172682],{"class":81,"line":167},[79,172666,172667],{"class":228},"    nums ",[79,172669,239],{"class":448},[79,172671,54220],{"class":228},[79,172673,775],{"class":96},[79,172675,1020],{"class":228},[79,172677,2331],{"class":96},[79,172679,1020],{"class":228},[79,172681,970],{"class":96},[79,172683,762],{"class":228},[79,172685,172686,172689,172691,172693,172695,172697,172699,172702],{"class":81,"line":178},[79,172687,172688],{"class":228},"    index ",[79,172690,239],{"class":448},[79,172692,4467],{"class":96},[79,172694,455],{"class":228},[79,172696,55812],{"class":96},[79,172698,455],{"class":228},[79,172700,172701],{"class":89},"\"请输入索引:\"",[79,172703,1150],{"class":228},[79,172705,172706,172708],{"class":81,"line":545},[79,172707,1161],{"class":96},[79,172709,172710],{"class":228},"(nums[index])\n",[79,172712,172713,172715,172717],{"class":81,"line":550},[79,172714,172527],{"class":448},[79,172716,153859],{"class":96},[79,172718,745],{"class":228},[79,172720,172721,172723,172725,172728],{"class":81,"line":562},[79,172722,1161],{"class":96},[79,172724,455],{"class":228},[79,172726,172727],{"class":89},"\"索引必须是整数\"",[79,172729,850],{"class":228},[79,172731,172732,172734,172737],{"class":81,"line":568},[79,172733,172527],{"class":448},[79,172735,172736],{"class":96}," IndexError",[79,172738,745],{"class":228},[79,172740,172741,172743,172745,172748],{"class":81,"line":574},[79,172742,1161],{"class":96},[79,172744,455],{"class":228},[79,172746,172747],{"class":89},"\"索引越界\"",[79,172749,850],{"class":228},[19,172751,172752],{},"多个异常使用相同处理逻辑：",[51,172754,172756],{"className":439,"code":172755,"language":441,"meta":57,"style":57},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[59,172757,172758,172764,172782,172795,172809],{"__ignoreMap":57},[79,172759,172760,172762],{"class":81,"line":82},[79,172761,172515],{"class":448},[79,172763,745],{"class":228},[79,172765,172766,172768,172770,172772,172774,172776,172778,172780],{"class":81,"line":167},[79,172767,47588],{"class":228},[79,172769,239],{"class":448},[79,172771,4467],{"class":96},[79,172773,455],{"class":228},[79,172775,55812],{"class":96},[79,172777,455],{"class":228},[79,172779,157429],{"class":89},[79,172781,1150],{"class":228},[79,172783,172784,172786,172788,172790,172792],{"class":81,"line":178},[79,172785,1161],{"class":96},[79,172787,455],{"class":228},[79,172789,2689],{"class":96},[79,172791,157679],{"class":448},[79,172793,172794],{"class":228}," num)\n",[79,172796,172797,172799,172801,172803,172805,172807],{"class":81,"line":545},[79,172798,172527],{"class":448},[79,172800,3757],{"class":228},[79,172802,156467],{"class":96},[79,172804,1020],{"class":228},[79,172806,172410],{"class":96},[79,172808,932],{"class":228},[79,172810,172811,172813,172815,172818],{"class":81,"line":550},[79,172812,1161],{"class":96},[79,172814,455],{"class":228},[79,172816,172817],{"class":89},"\"输入不合法\"",[79,172819,850],{"class":228},[14,172821,172823],{"id":172822},"_95-获取异常信息","9.5 获取异常信息",[51,172825,172827],{"className":439,"code":172826,"language":441,"meta":57,"style":57},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[59,172828,172829,172835,172849,172860],{"__ignoreMap":57},[79,172830,172831,172833],{"class":81,"line":82},[79,172832,172515],{"class":448},[79,172834,745],{"class":228},[79,172836,172837,172839,172841,172843,172845,172847],{"class":81,"line":167},[79,172838,47588],{"class":228},[79,172840,239],{"class":448},[79,172842,4467],{"class":96},[79,172844,455],{"class":228},[79,172846,157513],{"class":89},[79,172848,850],{"class":228},[79,172850,172851,172853,172855,172857],{"class":81,"line":178},[79,172852,172527],{"class":448},[79,172854,153859],{"class":96},[79,172856,66592],{"class":448},[79,172858,172859],{"class":228}," e:\n",[79,172861,172862,172864,172866,172868,172871,172873,172875,172877,172879],{"class":81,"line":545},[79,172863,1161],{"class":96},[79,172865,455],{"class":228},[79,172867,2307],{"class":448},[79,172869,172870],{"class":89},"\"出错了:",[79,172872,3136],{"class":96},[79,172874,2328],{"class":228},[79,172876,3185],{"class":96},[79,172878,2495],{"class":89},[79,172880,850],{"class":228},[19,172882,148090],{},[51,172884,172887],{"className":172885,"code":172886,"language":56,"meta":57},[54],"出错了:invalid literal for int() with base 10: 'abc'\n",[59,172888,172886],{"__ignoreMap":57},[14,172890,172892],{"id":172891},"_96-else和finally","9.6 else和finally",[19,172894,172895,172897],{},[59,172896,3796],{},"：没有异常时执行。",[19,172899,172900,172903],{},[59,172901,172902],{},"finally","：无论是否异常都会执行。",[51,172905,172907],{"className":439,"code":172906,"language":441,"meta":57,"style":57},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[59,172908,172909,172915,172933,172941,172951,172957,172978,172984],{"__ignoreMap":57},[79,172910,172911,172913],{"class":81,"line":82},[79,172912,172515],{"class":448},[79,172914,745],{"class":228},[79,172916,172917,172919,172921,172923,172925,172927,172929,172931],{"class":81,"line":167},[79,172918,47588],{"class":228},[79,172920,239],{"class":448},[79,172922,4467],{"class":96},[79,172924,455],{"class":228},[79,172926,55812],{"class":96},[79,172928,455],{"class":228},[79,172930,157429],{"class":89},[79,172932,1150],{"class":228},[79,172934,172935,172937,172939],{"class":81,"line":178},[79,172936,172527],{"class":448},[79,172938,153859],{"class":96},[79,172940,745],{"class":228},[79,172942,172943,172945,172947,172949],{"class":81,"line":545},[79,172944,1161],{"class":96},[79,172946,455],{"class":228},[79,172948,154847],{"class":89},[79,172950,850],{"class":228},[79,172952,172953,172955],{"class":81,"line":550},[79,172954,3796],{"class":448},[79,172956,745],{"class":228},[79,172958,172959,172961,172963,172965,172968,172970,172972,172974,172976],{"class":81,"line":562},[79,172960,1161],{"class":96},[79,172962,455],{"class":228},[79,172964,2307],{"class":448},[79,172966,172967],{"class":89},"\"输入正确:",[79,172969,3136],{"class":96},[79,172971,3764],{"class":228},[79,172973,3185],{"class":96},[79,172975,2495],{"class":89},[79,172977,850],{"class":228},[79,172979,172980,172982],{"class":81,"line":568},[79,172981,172902],{"class":448},[79,172983,745],{"class":228},[79,172985,172986,172988,172990,172993],{"class":81,"line":574},[79,172987,1161],{"class":96},[79,172989,455],{"class":228},[79,172991,172992],{"class":89},"\"程序结束\"",[79,172994,850],{"class":228},[19,172996,172997,172999],{},[59,172998,172902],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,173001,173003],{"id":173002},"_97-抛出异常","9.7 抛出异常",[19,173005,173006],{},"程序可以主动抛出异常。",[51,173008,173010],{"className":439,"code":173009,"language":441,"meta":57,"style":57},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[59,173011,173012,173021,173033,173046,173066,173070,173074],{"__ignoreMap":57},[79,173013,173014,173016,173019],{"class":81,"line":82},[79,173015,703],{"class":448},[79,173017,173018],{"class":85}," set_age",[79,173020,163048],{"class":228},[79,173022,173023,173025,173027,173029,173031],{"class":81,"line":167},[79,173024,5176],{"class":448},[79,173026,17739],{"class":228},[79,173028,229],{"class":448},[79,173030,1103],{"class":96},[79,173032,745],{"class":228},[79,173034,173035,173037,173039,173041,173044],{"class":81,"line":178},[79,173036,105359],{"class":448},[79,173038,153859],{"class":96},[79,173040,455],{"class":228},[79,173042,173043],{"class":89},"\"年龄不能为负数\"",[79,173045,850],{"class":228},[79,173047,173048,173050,173052,173054,173056,173058,173060,173062,173064],{"class":81,"line":545},[79,173049,1161],{"class":96},[79,173051,455],{"class":228},[79,173053,2307],{"class":448},[79,173055,163616],{"class":89},[79,173057,3136],{"class":96},[79,173059,72209],{"class":228},[79,173061,3185],{"class":96},[79,173063,2495],{"class":89},[79,173065,850],{"class":228},[79,173067,173068],{"class":81,"line":550},[79,173069,542],{"emptyLinePlaceholder":541},[79,173071,173072],{"class":81,"line":562},[79,173073,542],{"emptyLinePlaceholder":541},[79,173075,173076,173079,173081,173083],{"class":81,"line":568},[79,173077,173078],{"class":228},"set_age(",[79,173080,478],{"class":448},[79,173082,775],{"class":96},[79,173084,850],{"class":228},[19,173086,173087],{},"调用者可以捕获：",[51,173089,173091],{"className":439,"code":173090,"language":441,"meta":57,"style":57},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[59,173092,173093,173099,173110,173120],{"__ignoreMap":57},[79,173094,173095,173097],{"class":81,"line":82},[79,173096,172515],{"class":448},[79,173098,745],{"class":228},[79,173100,173101,173104,173106,173108],{"class":81,"line":167},[79,173102,173103],{"class":228},"    set_age(",[79,173105,478],{"class":448},[79,173107,775],{"class":96},[79,173109,850],{"class":228},[79,173111,173112,173114,173116,173118],{"class":81,"line":178},[79,173113,172527],{"class":448},[79,173115,153859],{"class":96},[79,173117,66592],{"class":448},[79,173119,172859],{"class":228},[79,173121,173122,173124],{"class":81,"line":545},[79,173123,1161],{"class":96},[79,173125,68987],{"class":228},[14,173127,173129],{"id":173128},"_98-自定义异常","9.8 自定义异常",[51,173131,173133],{"className":439,"code":173132,"language":441,"meta":57,"style":57},"class BalanceNotEnoughError(Exception):\n    pass\n\n\ndef withdraw(balance, money):\n    if money > balance:\n        raise BalanceNotEnoughError(\"余额不足\")\n    return balance - money\n\n\ntry:\n    balance = withdraw(100, 200)\nexcept BalanceNotEnoughError as e:\n    print(e)\n",[59,173134,173135,173149,173153,173157,173161,173169,173179,173190,173200,173204,173208,173214,173231,173242],{"__ignoreMap":57},[79,173136,173137,173139,173142,173144,173147],{"class":81,"line":82},[79,173138,16727],{"class":448},[79,173140,173141],{"class":85}," BalanceNotEnoughError",[79,173143,455],{"class":228},[79,173145,173146],{"class":96},"Exception",[79,173148,932],{"class":228},[79,173150,173151],{"class":81,"line":167},[79,173152,151170],{"class":448},[79,173154,173155],{"class":81,"line":178},[79,173156,542],{"emptyLinePlaceholder":541},[79,173158,173159],{"class":81,"line":545},[79,173160,542],{"emptyLinePlaceholder":541},[79,173162,173163,173165,173167],{"class":81,"line":550},[79,173164,703],{"class":448},[79,173166,151819],{"class":85},[79,173168,164445],{"class":228},[79,173170,173171,173173,173175,173177],{"class":81,"line":562},[79,173172,5176],{"class":448},[79,173174,151775],{"class":228},[79,173176,3199],{"class":448},[79,173178,164222],{"class":228},[79,173180,173181,173183,173186,173188],{"class":81,"line":568},[79,173182,105359],{"class":448},[79,173184,173185],{"class":228}," BalanceNotEnoughError(",[79,173187,151870],{"class":89},[79,173189,850],{"class":228},[79,173191,173192,173194,173196,173198],{"class":81,"line":574},[79,173193,715],{"class":448},[79,173195,164452],{"class":228},[79,173197,478],{"class":448},[79,173199,151808],{"class":228},[79,173201,173202],{"class":81,"line":579},[79,173203,542],{"emptyLinePlaceholder":541},[79,173205,173206],{"class":81,"line":585},[79,173207,542],{"emptyLinePlaceholder":541},[79,173209,173210,173212],{"class":81,"line":591},[79,173211,172515],{"class":448},[79,173213,745],{"class":228},[79,173215,173216,173218,173220,173223,173225,173227,173229],{"class":81,"line":596},[79,173217,164123],{"class":228},[79,173219,239],{"class":448},[79,173221,173222],{"class":228}," withdraw(",[79,173224,2555],{"class":96},[79,173226,1020],{"class":228},[79,173228,3817],{"class":96},[79,173230,850],{"class":228},[79,173232,173233,173235,173238,173240],{"class":81,"line":602},[79,173234,172527],{"class":448},[79,173236,173237],{"class":228}," BalanceNotEnoughError ",[79,173239,533],{"class":448},[79,173241,172859],{"class":228},[79,173243,173244,173246],{"class":81,"line":608},[79,173245,1161],{"class":96},[79,173247,68987],{"class":228},[19,173249,173250],{},"入门阶段大多数情况使用内置异常即可。",[14,173252,173254],{"id":173253},"_99-traceback","9.9 traceback",[19,173256,173257],{},"调试时可以输出完整异常堆栈。",[51,173259,173261],{"className":439,"code":173260,"language":441,"meta":57,"style":57},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[59,173262,173263,173270,173274,173280,173290,173298],{"__ignoreMap":57},[79,173264,173265,173267],{"class":81,"line":82},[79,173266,520],{"class":448},[79,173268,173269],{"class":228}," traceback\n",[79,173271,173272],{"class":81,"line":167},[79,173273,542],{"emptyLinePlaceholder":541},[79,173275,173276,173278],{"class":81,"line":178},[79,173277,172515],{"class":448},[79,173279,745],{"class":228},[79,173281,173282,173284,173286,173288],{"class":81,"line":545},[79,173283,4070],{"class":96},[79,173285,455],{"class":228},[79,173287,157513],{"class":89},[79,173289,850],{"class":228},[79,173291,173292,173294,173296],{"class":81,"line":550},[79,173293,172527],{"class":448},[79,173295,153859],{"class":96},[79,173297,745],{"class":228},[79,173299,173300],{"class":81,"line":562},[79,173301,173302],{"class":228},"    traceback.print_exc()\n",[19,173304,173305],{},"日志系统中常把异常堆栈记录到文件。",[14,173307,173309],{"id":173308},"_910-什么是模块","9.10 什么是模块",[19,173311,173312,173313,127616],{},"模块就是一个 ",[59,173314,147985],{},[19,173316,173317,173318,26638],{},"例如创建 ",[59,173319,173320],{},"my_math.py",[51,173322,173324],{"className":439,"code":173323,"language":441,"meta":57,"style":57},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[59,173325,173326,173334,173344,173348,173352,173361],{"__ignoreMap":57},[79,173327,173328,173330,173332],{"class":81,"line":82},[79,173329,703],{"class":448},[79,173331,7277],{"class":85},[79,173333,152726],{"class":228},[79,173335,173336,173338,173340,173342],{"class":81,"line":167},[79,173337,715],{"class":448},[79,173339,12904],{"class":228},[79,173341,995],{"class":448},[79,173343,152737],{"class":228},[79,173345,173346],{"class":81,"line":178},[79,173347,542],{"emptyLinePlaceholder":541},[79,173349,173350],{"class":81,"line":545},[79,173351,542],{"emptyLinePlaceholder":541},[79,173353,173354,173356,173359],{"class":81,"line":550},[79,173355,703],{"class":448},[79,173357,173358],{"class":85}," sub",[79,173360,152726],{"class":228},[79,173362,173363,173365,173367,173369],{"class":81,"line":562},[79,173364,715],{"class":448},[79,173366,12904],{"class":228},[79,173368,478],{"class":448},[79,173370,152737],{"class":228},[19,173372,173373],{},"在另一个文件中导入：",[51,173375,173377],{"className":439,"code":173376,"language":441,"meta":57,"style":57},"import my_math\n\nprint(my_math.add(1, 2))\n",[59,173378,173379,173386,173390],{"__ignoreMap":57},[79,173380,173381,173383],{"class":81,"line":82},[79,173382,520],{"class":448},[79,173384,173385],{"class":228}," my_math\n",[79,173387,173388],{"class":81,"line":167},[79,173389,542],{"emptyLinePlaceholder":541},[79,173391,173392,173394,173397,173399,173401,173403],{"class":81,"line":178},[79,173393,1889],{"class":96},[79,173395,173396],{"class":228},"(my_math.add(",[79,173398,775],{"class":96},[79,173400,1020],{"class":228},[79,173402,2331],{"class":96},[79,173404,1150],{"class":228},[14,173406,173408],{"id":173407},"_911-import导入","9.11 import导入",[339,173410,173412],{"id":173411},"_9111-导入模块","9.11.1 导入模块",[51,173414,173416],{"className":439,"code":173415,"language":441,"meta":57,"style":57},"import random\n\nprint(random.randint(1, 10))\n",[59,173417,173418,173424,173428],{"__ignoreMap":57},[79,173419,173420,173422],{"class":81,"line":82},[79,173421,520],{"class":448},[79,173423,47323],{"class":228},[79,173425,173426],{"class":81,"line":167},[79,173427,542],{"emptyLinePlaceholder":541},[79,173429,173430,173432,173435,173437,173439,173441],{"class":81,"line":178},[79,173431,1889],{"class":96},[79,173433,173434],{"class":228},"(random.randint(",[79,173436,775],{"class":96},[79,173438,1020],{"class":228},[79,173440,2689],{"class":96},[79,173442,1150],{"class":228},[339,173444,173446],{"id":173445},"_9112-导入指定内容","9.11.2 导入指定内容",[51,173448,173450],{"className":439,"code":173449,"language":441,"meta":57,"style":57},"from random import randint\n\nprint(randint(1, 10))\n",[59,173451,173452,173463,173467],{"__ignoreMap":57},[79,173453,173454,173456,173458,173460],{"class":81,"line":82},[79,173455,32745],{"class":448},[79,173457,59785],{"class":228},[79,173459,520],{"class":448},[79,173461,173462],{"class":228}," randint\n",[79,173464,173465],{"class":81,"line":167},[79,173466,542],{"emptyLinePlaceholder":541},[79,173468,173469,173471,173474,173476,173478,173480],{"class":81,"line":178},[79,173470,1889],{"class":96},[79,173472,173473],{"class":228},"(randint(",[79,173475,775],{"class":96},[79,173477,1020],{"class":228},[79,173479,2689],{"class":96},[79,173481,1150],{"class":228},[339,173483,173485],{"id":173484},"_9113-起别名","9.11.3 起别名",[51,173487,173489],{"className":439,"code":173488,"language":441,"meta":57,"style":57},"import random as rd\n\nprint(rd.randint(1, 10))\n",[59,173490,173491,173502,173506],{"__ignoreMap":57},[79,173492,173493,173495,173497,173499],{"class":81,"line":82},[79,173494,520],{"class":448},[79,173496,59785],{"class":228},[79,173498,533],{"class":448},[79,173500,173501],{"class":228}," rd\n",[79,173503,173504],{"class":81,"line":167},[79,173505,542],{"emptyLinePlaceholder":541},[79,173507,173508,173510,173513,173515,173517,173519],{"class":81,"line":178},[79,173509,1889],{"class":96},[79,173511,173512],{"class":228},"(rd.randint(",[79,173514,775],{"class":96},[79,173516,1020],{"class":228},[79,173518,2689],{"class":96},[79,173520,1150],{"class":228},[51,173522,173524],{"className":439,"code":173523,"language":441,"meta":57,"style":57},"from random import randint as rint\n\nprint(rint(1, 10))\n",[59,173525,173526,173542,173546],{"__ignoreMap":57},[79,173527,173528,173530,173532,173534,173537,173539],{"class":81,"line":82},[79,173529,32745],{"class":448},[79,173531,59785],{"class":228},[79,173533,520],{"class":448},[79,173535,173536],{"class":228}," randint ",[79,173538,533],{"class":448},[79,173540,173541],{"class":228}," rint\n",[79,173543,173544],{"class":81,"line":167},[79,173545,542],{"emptyLinePlaceholder":541},[79,173547,173548,173550,173553,173555,173557,173559],{"class":81,"line":178},[79,173549,1889],{"class":96},[79,173551,173552],{"class":228},"(rint(",[79,173554,775],{"class":96},[79,173556,1020],{"class":228},[79,173558,2689],{"class":96},[79,173560,1150],{"class":228},[339,173562,173564],{"id":173563},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[51,173566,173568],{"className":439,"code":173567,"language":441,"meta":57,"style":57},"from random import *\n",[59,173569,173570],{"__ignoreMap":57},[79,173571,173572,173574,173576,173578],{"class":81,"line":82},[79,173573,32745],{"class":448},[79,173575,59785],{"class":228},[79,173577,520],{"class":448},[79,173579,173580],{"class":448}," *\n",[19,173582,173583],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,173585,173587],{"id":173586},"_912-常用内置模块","9.12 常用内置模块",[339,173589,173591],{"id":173590},"_9121-random","9.12.1 random",[51,173593,173595],{"className":439,"code":173594,"language":441,"meta":57,"style":57},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[59,173596,173597,173603,173607,173621,173640],{"__ignoreMap":57},[79,173598,173599,173601],{"class":81,"line":82},[79,173600,520],{"class":448},[79,173602,47323],{"class":228},[79,173604,173605],{"class":81,"line":167},[79,173606,542],{"emptyLinePlaceholder":541},[79,173608,173609,173611,173613,173615,173617,173619],{"class":81,"line":178},[79,173610,1889],{"class":96},[79,173612,173434],{"class":228},[79,173614,775],{"class":96},[79,173616,1020],{"class":228},[79,173618,2689],{"class":96},[79,173620,1150],{"class":228},[79,173622,173623,173625,173628,173630,173632,173634,173636,173638],{"class":81,"line":545},[79,173624,1889],{"class":96},[79,173626,173627],{"class":228},"(random.choice([",[79,173629,151521],{"class":89},[79,173631,1020],{"class":228},[79,173633,152569],{"class":89},[79,173635,1020],{"class":228},[79,173637,161364],{"class":89},[79,173639,35141],{"class":228},[79,173641,173642,173644,173647,173649,173651,173653,173655,173657,173659,173661,173663,173665,173667,173669],{"class":81,"line":550},[79,173643,1889],{"class":96},[79,173645,173646],{"class":228},"(random.sample([",[79,173648,775],{"class":96},[79,173650,1020],{"class":228},[79,173652,2331],{"class":96},[79,173654,1020],{"class":228},[79,173656,970],{"class":96},[79,173658,1020],{"class":228},[79,173660,2537],{"class":96},[79,173662,1020],{"class":228},[79,173664,2563],{"class":96},[79,173666,113835],{"class":228},[79,173668,2331],{"class":96},[79,173670,1150],{"class":228},[339,173672,173674],{"id":173673},"_9122-time","9.12.2 time",[51,173676,173678],{"className":439,"code":173677,"language":441,"meta":57,"style":57},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[59,173679,173680,173686,173690,173697,173705],{"__ignoreMap":57},[79,173681,173682,173684],{"class":81,"line":82},[79,173683,520],{"class":448},[79,173685,33830],{"class":228},[79,173687,173688],{"class":81,"line":167},[79,173689,542],{"emptyLinePlaceholder":541},[79,173691,173692,173694],{"class":81,"line":178},[79,173693,1889],{"class":96},[79,173695,173696],{"class":228},"(time.time())\n",[79,173698,173699,173701,173703],{"class":81,"line":545},[79,173700,97058],{"class":228},[79,173702,775],{"class":96},[79,173704,850],{"class":228},[79,173706,173707,173709,173711,173714],{"class":81,"line":550},[79,173708,1889],{"class":96},[79,173710,455],{"class":228},[79,173712,173713],{"class":89},"\"1秒后执行\"",[79,173715,850],{"class":228},[339,173717,173719],{"id":173718},"_9123-datetime","9.12.3 datetime",[51,173721,173723],{"className":439,"code":173722,"language":441,"meta":57,"style":57},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[59,173724,173725,173737,173741,173751,173758],{"__ignoreMap":57},[79,173726,173727,173729,173732,173734],{"class":81,"line":82},[79,173728,32745],{"class":448},[79,173730,173731],{"class":228}," datetime ",[79,173733,520],{"class":448},[79,173735,173736],{"class":228}," datetime\n",[79,173738,173739],{"class":81,"line":167},[79,173740,542],{"emptyLinePlaceholder":541},[79,173742,173743,173746,173748],{"class":81,"line":178},[79,173744,173745],{"class":228},"now ",[79,173747,239],{"class":448},[79,173749,173750],{"class":228}," datetime.now()\n",[79,173752,173753,173755],{"class":81,"line":545},[79,173754,1889],{"class":96},[79,173756,173757],{"class":228},"(now)\n",[79,173759,173760,173762,173765,173768,173770,173773],{"class":81,"line":550},[79,173761,1889],{"class":96},[79,173763,173764],{"class":228},"(now.strftime(",[79,173766,173767],{"class":89},"\"%Y-%m-",[79,173769,158324],{"class":96},[79,173771,173772],{"class":89}," %H:%M:%S\"",[79,173774,1150],{"class":228},[339,173776,173778],{"id":173777},"_9124-os","9.12.4 os",[51,173780,173782],{"className":439,"code":173781,"language":441,"meta":57,"style":57},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[59,173783,173784,173790,173794,173801],{"__ignoreMap":57},[79,173785,173786,173788],{"class":81,"line":82},[79,173787,520],{"class":448},[79,173789,47300],{"class":228},[79,173791,173792],{"class":81,"line":167},[79,173793,542],{"emptyLinePlaceholder":541},[79,173795,173796,173798],{"class":81,"line":178},[79,173797,1889],{"class":96},[79,173799,173800],{"class":228},"(os.getcwd())\n",[79,173802,173803,173805,173808,173811],{"class":81,"line":545},[79,173804,1889],{"class":96},[79,173806,173807],{"class":228},"(os.listdir(",[79,173809,173810],{"class":89},"\".\"",[79,173812,1150],{"class":228},[339,173814,173816],{"id":173815},"_9125-sys","9.12.5 sys",[51,173818,173820],{"className":439,"code":173819,"language":441,"meta":57,"style":57},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[59,173821,173822,173829,173833,173840],{"__ignoreMap":57},[79,173823,173824,173826],{"class":81,"line":82},[79,173825,520],{"class":448},[79,173827,173828],{"class":228}," sys\n",[79,173830,173831],{"class":81,"line":167},[79,173832,542],{"emptyLinePlaceholder":541},[79,173834,173835,173837],{"class":81,"line":178},[79,173836,1889],{"class":96},[79,173838,173839],{"class":228},"(sys.version)\n",[79,173841,173842,173844],{"class":81,"line":545},[79,173843,1889],{"class":96},[79,173845,173846],{"class":228},"(sys.path)\n",[14,173848,173850,173851,173853,173854,2495],{"id":173849},"_913-if-name-main","9.13 if ",[2398,173852,81798],{}," == \"",[2398,173855,104001],{},[19,173857,173858,173859,173862],{},"模块被直接运行和被导入时，",[59,173860,173861],{},"__name__"," 的值不同。",[19,173864,173865,173866,26638],{},"创建 ",[59,173867,173868],{},"my_module.py",[51,173870,173872],{"className":439,"code":173871,"language":441,"meta":57,"style":57},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[59,173873,173874,173882,173892,173896,173900,173912],{"__ignoreMap":57},[79,173875,173876,173878,173880],{"class":81,"line":82},[79,173877,703],{"class":448},[79,173879,7277],{"class":85},[79,173881,152726],{"class":228},[79,173883,173884,173886,173888,173890],{"class":81,"line":167},[79,173885,715],{"class":448},[79,173887,12904],{"class":228},[79,173889,995],{"class":448},[79,173891,152737],{"class":228},[79,173893,173894],{"class":81,"line":178},[79,173895,542],{"emptyLinePlaceholder":541},[79,173897,173898],{"class":81,"line":545},[79,173899,542],{"emptyLinePlaceholder":541},[79,173901,173902,173904,173906,173908,173910],{"class":81,"line":550},[79,173903,1210],{"class":448},[79,173905,1213],{"class":96},[79,173907,1100],{"class":448},[79,173909,1218],{"class":89},[79,173911,745],{"class":228},[79,173913,173914,173916,173918,173920,173922,173924],{"class":81,"line":562},[79,173915,1161],{"class":96},[79,173917,168233],{"class":228},[79,173919,775],{"class":96},[79,173921,1020],{"class":228},[79,173923,2331],{"class":96},[79,173925,1150],{"class":228},[19,173927,173928],{},"作用：",[26,173930,173931,173934],{},[29,173932,173933],{},"直接运行该文件时，执行测试代码。",[29,173935,173936],{},"被其他文件导入时，不执行测试代码。",[19,173938,173939],{},"这是写模块时很常用的习惯。",[14,173941,173943],{"id":173942},"_914-包","9.14 包",[19,173945,173946,173947,173950],{},"包是包含 ",[59,173948,173949],{},"__init__.py"," 的目录，用于组织多个模块。",[19,173952,173953],{},"目录结构：",[51,173955,173958],{"className":173956,"code":173957,"language":56,"meta":57},[54],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[59,173959,173957],{"__ignoreMap":57},[19,173961,173962],{},"导入：",[51,173964,173966],{"className":439,"code":173965,"language":441,"meta":57,"style":57},"from utils.file_utils import read_file\n",[59,173967,173968],{"__ignoreMap":57},[79,173969,173970,173972,173975,173977],{"class":81,"line":82},[79,173971,32745],{"class":448},[79,173973,173974],{"class":228}," utils.file_utils ",[79,173976,520],{"class":448},[79,173978,173979],{"class":228}," read_file\n",[19,173981,173982,173984],{},[59,173983,173949],{}," 可以为空，也可以写包初始化逻辑。",[14,173986,173988],{"id":173987},"_915-第三方包","9.15 第三方包",[19,173990,173991,173992,173994],{},"第三方包通过 ",[59,173993,125],{}," 安装。",[51,173996,173998],{"className":73,"code":173997,"language":75,"meta":57,"style":57},"pip install requests\n",[59,173999,174000],{"__ignoreMap":57},[79,174001,174002,174004,174006],{"class":81,"line":82},[79,174003,125],{"class":85},[79,174005,93],{"class":89},[79,174007,147731],{"class":89},[19,174009,174010],{},"使用：",[51,174012,174014],{"className":439,"code":174013,"language":441,"meta":57,"style":57},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[59,174015,174016,174022,174026,174041],{"__ignoreMap":57},[79,174017,174018,174020],{"class":81,"line":82},[79,174019,520],{"class":448},[79,174021,147731],{"class":228},[79,174023,174024],{"class":81,"line":167},[79,174025,542],{"emptyLinePlaceholder":541},[79,174027,174028,174031,174033,174036,174039],{"class":81,"line":178},[79,174029,174030],{"class":228},"response ",[79,174032,239],{"class":448},[79,174034,174035],{"class":228}," requests.get(",[79,174037,174038],{"class":89},"\"https:\u002F\u002Fwww.example.com\"",[79,174040,850],{"class":228},[79,174042,174043,174045],{"class":81,"line":545},[79,174044,1889],{"class":96},[79,174046,174047],{"class":228},"(response.status_code)\n",[19,174049,174050],{},"查看已安装包：",[51,174052,174054],{"className":73,"code":174053,"language":75,"meta":57,"style":57},"pip list\n",[59,174055,174056],{"__ignoreMap":57},[79,174057,174058,174060],{"class":81,"line":82},[79,174059,125],{"class":85},[79,174061,120588],{"class":89},[19,174063,174064],{},"导出项目依赖：",[51,174066,174067],{"className":73,"code":147926,"language":75,"meta":57,"style":57},[59,174068,174069],{"__ignoreMap":57},[79,174070,174071,174073,174075,174077],{"class":81,"line":82},[79,174072,125],{"class":85},[79,174074,147935],{"class":89},[79,174076,28240],{"class":448},[79,174078,147940],{"class":89},[19,174080,174081],{},"安装项目依赖：",[51,174083,174084],{"className":73,"code":147946,"language":75,"meta":57,"style":57},[59,174085,174086],{"__ignoreMap":57},[79,174087,174088,174090,174092,174094],{"class":81,"line":82},[79,174089,125],{"class":85},[79,174091,93],{"class":89},[79,174093,121272],{"class":96},[79,174095,147940],{"class":89},[14,174097,174099],{"id":174098},"_916-模块搜索路径","9.16 模块搜索路径",[19,174101,174102,174103,174106],{},"Python 导入模块时会在 ",[59,174104,174105],{},"sys.path"," 中查找。",[51,174108,174110],{"className":439,"code":174109,"language":441,"meta":57,"style":57},"import sys\n\nfor path in sys.path:\n    print(path)\n",[59,174111,174112,174118,174122,174134],{"__ignoreMap":57},[79,174113,174114,174116],{"class":81,"line":82},[79,174115,520],{"class":448},[79,174117,173828],{"class":228},[79,174119,174120],{"class":81,"line":167},[79,174121,542],{"emptyLinePlaceholder":541},[79,174123,174124,174126,174129,174131],{"class":81,"line":178},[79,174125,1638],{"class":448},[79,174127,174128],{"class":228}," path ",[79,174130,921],{"class":448},[79,174132,174133],{"class":228}," sys.path:\n",[79,174135,174136,174138],{"class":81,"line":545},[79,174137,1161],{"class":96},[79,174139,170862],{"class":228},[19,174141,174142],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,174144,159256],{},[51,174146,174149],{"className":174147,"code":174148,"language":56,"meta":57},[54],"random.py\njson.py\ntime.py\n",[59,174150,174148],{"__ignoreMap":57},[19,174152,174153],{},"这些文件名可能导致导入异常。",[14,174155,174157],{"id":174156},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,174159,173953],{},[51,174161,174164],{"className":174162,"code":174163,"language":56,"meta":57},[54],"student_system\u002F\n  main.py\n  services\u002F\n    __init__.py\n    student_service.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n",[59,174165,174163],{"__ignoreMap":57},[19,174167,174168,26638],{},[59,174169,174170],{},"utils\u002Ffile_utils.py",[51,174172,174174],{"className":439,"code":174173,"language":441,"meta":57,"style":57},"import json\nfrom pathlib import Path\n\n\ndef read_json(path):\n    path = Path(path)\n    if not path.exists():\n        return []\n\n    with open(path, \"r\", encoding=\"utf-8\") as file:\n        return json.load(file)\n\n\ndef write_json(path, data):\n    with open(path, \"w\", encoding=\"utf-8\") as file:\n        json.dump(data, file, ensure_ascii=False, indent=2)\n",[59,174175,174176,174182,174192,174196,174200,174210,174220,174228,174234,174238,174265,174275,174279,174283,174293,174319],{"__ignoreMap":57},[79,174177,174178,174180],{"class":81,"line":82},[79,174179,520],{"class":448},[79,174181,148724],{"class":228},[79,174183,174184,174186,174188,174190],{"class":81,"line":167},[79,174185,32745],{"class":448},[79,174187,110198],{"class":228},[79,174189,520],{"class":448},[79,174191,110203],{"class":228},[79,174193,174194],{"class":81,"line":178},[79,174195,542],{"emptyLinePlaceholder":541},[79,174197,174198],{"class":81,"line":545},[79,174199,542],{"emptyLinePlaceholder":541},[79,174201,174202,174204,174207],{"class":81,"line":550},[79,174203,703],{"class":448},[79,174205,174206],{"class":85}," read_json",[79,174208,174209],{"class":228},"(path):\n",[79,174211,174212,174215,174217],{"class":81,"line":562},[79,174213,174214],{"class":228},"    path ",[79,174216,239],{"class":448},[79,174218,174219],{"class":228}," Path(path)\n",[79,174221,174222,174224,174226],{"class":81,"line":568},[79,174223,5176],{"class":448},[79,174225,40925],{"class":448},[79,174227,170943],{"class":228},[79,174229,174230,174232],{"class":81,"line":574},[79,174231,16785],{"class":448},[79,174233,53832],{"class":228},[79,174235,174236],{"class":81,"line":579},[79,174237,542],{"emptyLinePlaceholder":541},[79,174239,174240,174242,174244,174247,174249,174251,174253,174255,174257,174259,174261,174263],{"class":81,"line":585},[79,174241,36175],{"class":448},[79,174243,148424],{"class":96},[79,174245,174246],{"class":228},"(path, ",[79,174248,148434],{"class":89},[79,174250,1020],{"class":228},[79,174252,148439],{"class":7284},[79,174254,239],{"class":448},[79,174256,148444],{"class":89},[79,174258,15747],{"class":228},[79,174260,533],{"class":448},[79,174262,149786],{"class":7284},[79,174264,745],{"class":228},[79,174266,174267,174269,174271,174273],{"class":81,"line":591},[79,174268,16785],{"class":448},[79,174270,149797],{"class":228},[79,174272,47349],{"class":7284},[79,174274,850],{"class":228},[79,174276,174277],{"class":81,"line":596},[79,174278,542],{"emptyLinePlaceholder":541},[79,174280,174281],{"class":81,"line":602},[79,174282,542],{"emptyLinePlaceholder":541},[79,174284,174285,174287,174290],{"class":81,"line":608},[79,174286,703],{"class":448},[79,174288,174289],{"class":85}," write_json",[79,174291,174292],{"class":228},"(path, data):\n",[79,174294,174295,174297,174299,174301,174303,174305,174307,174309,174311,174313,174315,174317],{"class":81,"line":614},[79,174296,36175],{"class":448},[79,174298,148424],{"class":96},[79,174300,174246],{"class":228},[79,174302,153609],{"class":89},[79,174304,1020],{"class":228},[79,174306,148439],{"class":7284},[79,174308,239],{"class":448},[79,174310,148444],{"class":89},[79,174312,15747],{"class":228},[79,174314,533],{"class":448},[79,174316,149786],{"class":7284},[79,174318,745],{"class":228},[79,174320,174321,174324,174326,174328,174330,174332,174334,174336,174338,174340,174342],{"class":81,"line":619},[79,174322,174323],{"class":228},"        json.dump(data, ",[79,174325,47349],{"class":7284},[79,174327,1020],{"class":228},[79,174329,148770],{"class":7284},[79,174331,239],{"class":448},[79,174333,35984],{"class":96},[79,174335,1020],{"class":228},[79,174337,153645],{"class":7284},[79,174339,239],{"class":448},[79,174341,2331],{"class":96},[79,174343,850],{"class":228},[19,174345,174346,26638],{},[59,174347,156240],{},[51,174349,174351],{"className":439,"code":174350,"language":441,"meta":57,"style":57},"from utils.file_utils import read_json, write_json\n\nstudents = read_json(\"students.json\")\nstudents.append({\"name\": \"小明\", \"score\": 95})\nwrite_json(\"students.json\", students)\n",[59,174352,174353,174364,174368,174381,174401],{"__ignoreMap":57},[79,174354,174355,174357,174359,174361],{"class":81,"line":82},[79,174356,32745],{"class":448},[79,174358,173974],{"class":228},[79,174360,520],{"class":448},[79,174362,174363],{"class":228}," read_json, write_json\n",[79,174365,174366],{"class":81,"line":167},[79,174367,542],{"emptyLinePlaceholder":541},[79,174369,174370,174372,174374,174377,174379],{"class":81,"line":178},[79,174371,161349],{"class":228},[79,174373,239],{"class":448},[79,174375,174376],{"class":228}," read_json(",[79,174378,153464],{"class":89},[79,174380,850],{"class":228},[79,174382,174383,174385,174387,174389,174391,174393,174395,174397,174399],{"class":81,"line":545},[79,174384,172167],{"class":228},[79,174386,64667],{"class":89},[79,174388,53431],{"class":228},[79,174390,151521],{"class":89},[79,174392,1020],{"class":228},[79,174394,153105],{"class":89},[79,174396,53431],{"class":228},[79,174398,3228],{"class":96},[79,174400,166785],{"class":228},[79,174402,174403,174406,174408],{"class":81,"line":550},[79,174404,174405],{"class":228},"write_json(",[79,174407,153464],{"class":89},[79,174409,174410],{"class":228},", students)\n",[14,174412,174414],{"id":174413},"_918-易错点","9.18 易错点",[26,174416,174417,174420,174425,174430,174433,174436],{},[29,174418,174419],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[29,174421,174422,174423,497],{},"能指定异常类型就不要裸写 ",[59,174424,172527],{},[29,174426,174427,174429],{},[59,174428,172902],{}," 无论是否出错都会执行。",[29,174431,174432],{},"模块文件名不要和标准库重名。",[29,174434,174435],{},"导入自己写的模块时，要注意运行目录。",[29,174437,174438],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,174440,174442],{"id":174441},"_919-本章练习","9.19 本章练习",[26,174444,174445,174448,174451,174457,174464],{},[29,174446,174447],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[29,174449,174450],{},"写函数读取文件，如果文件不存在则返回空字符串。",[29,174452,173865,174453,174456],{},[59,174454,174455],{},"math_utils.py","，实现加减乘除函数并导入使用。",[29,174458,174459,174460,174463],{},"创建一个 ",[59,174461,174462],{},"utils"," 包，把 JSON 读写函数放进去。",[29,174465,174466],{},"写一个程序，捕获除零异常和输入格式异常。",[2159,174468,174469],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":57,"searchDepth":167,"depth":167,"links":174471},[174472,174473,174474,174475,174476,174477,174478,174479,174480,174481,174482,174488,174495,174497,174498,174499,174500,174501,174502],{"id":172324,"depth":167,"text":172325},{"id":172452,"depth":167,"text":172453},{"id":172501,"depth":167,"text":172502},{"id":172650,"depth":167,"text":172651},{"id":172822,"depth":167,"text":172823},{"id":172891,"depth":167,"text":172892},{"id":173002,"depth":167,"text":173003},{"id":173128,"depth":167,"text":173129},{"id":173253,"depth":167,"text":173254},{"id":173308,"depth":167,"text":173309},{"id":173407,"depth":167,"text":173408,"children":174483},[174484,174485,174486,174487],{"id":173411,"depth":178,"text":173412},{"id":173445,"depth":178,"text":173446},{"id":173484,"depth":178,"text":173485},{"id":173563,"depth":178,"text":173564},{"id":173586,"depth":167,"text":173587,"children":174489},[174490,174491,174492,174493,174494],{"id":173590,"depth":178,"text":173591},{"id":173673,"depth":178,"text":173674},{"id":173718,"depth":178,"text":173719},{"id":173777,"depth":178,"text":173778},{"id":173815,"depth":178,"text":173816},{"id":173849,"depth":167,"text":174496},"9.13 if name == \"main\"",{"id":173942,"depth":167,"text":173943},{"id":173987,"depth":167,"text":173988},{"id":174098,"depth":167,"text":174099},{"id":174156,"depth":167,"text":174157},{"id":174413,"depth":167,"text":174414},{"id":174441,"depth":167,"text":174442},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":172316,"description":25402},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":174509,"title":174510,"body":174511,"description":174674,"extension":2186,"meta":174675,"navigation":541,"path":174676,"seo":174677,"stem":174678,"__hash__":174679},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":174512,"toc":174669},[174513,174516,174519,174522,174533,174535,174609,174612,174615,174618,174621,174624,174627,174630,174633,174636,174639],[10,174514,174510],{"id":174515},"python教程",[19,174517,174518],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,174520,174521],{},"建议学习环境：",[26,174523,174524,174527,174530],{},[29,174525,174526],{},"Python 版本：Python 3.10 及以上。",[29,174528,174529],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[29,174531,174532],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,174534,118711],{"id":118711},[26,174536,174537,174543,174549,174555,174561,174567,174573,174579,174585,174591,174597,174603],{},[29,174538,174539],{},[2482,174540,174542],{"href":174541},".\u002Fch1-Python","Python环境与第一个程序",[29,174544,174545],{},[2482,174546,174548],{"href":174547},".\u002Fch2","基础语法、变量与字符串",[29,174550,174551],{},[2482,174552,174554],{"href":174553},".\u002Fch3","判断语句",[29,174556,174557],{},[2482,174558,174560],{"href":174559},".\u002Fch4","循环语句",[29,174562,174563],{},[2482,174564,174566],{"href":174565},".\u002Fch5","函数基础",[29,174568,174569],{},[2482,174570,174572],{"href":174571},".\u002Fch6","数据容器",[29,174574,174575],{},[2482,174576,174578],{"href":174577},".\u002Fch7","函数进阶",[29,174580,174581],{},[2482,174582,174584],{"href":174583},".\u002Fch8","文件操作",[29,174586,174587],{},[2482,174588,174590],{"href":174589},".\u002Fch9","异常、模块与包",[29,174592,174593],{},[2482,174594,174596],{"href":174595},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[29,174598,174599],{},[2482,174600,174602],{"href":174601},".\u002Fch11","面向对象基础",[29,174604,174605],{},[2482,174606,174608],{"href":174607},".\u002Fch12","综合案例与复习路线",[14,174610,174611],{"id":174611},"学习路线",[19,174613,174614],{},"第一阶段：能运行程序。",[19,174616,174617],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,174619,174620],{},"第二阶段：能组织数据。",[19,174622,174623],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,174625,174626],{},"第三阶段：能封装逻辑。",[19,174628,174629],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,174631,174632],{},"第四阶段：能做小项目。",[19,174634,174635],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,174637,174638],{"id":174638},"参考资料",[26,174640,174641,174648,174655,174662],{},[29,174642,174643,174644],{},"黑马程序员 Python 入门教程推荐：",[2482,174645,174646],{"href":174646,"rel":174647},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[25885],[29,174649,174650,174651],{},"Python 官方中文教程：",[2482,174652,174653],{"href":174653,"rel":174654},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[25885],[29,174656,174657,174658],{},"Python 标准库文档：",[2482,174659,174660],{"href":174660,"rel":174661},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[25885],[29,174663,174664,174665],{},"pyecharts 文档：",[2482,174666,174667],{"href":174667,"rel":174668},"https:\u002F\u002Fpyecharts.org\u002F",[25885],{"title":57,"searchDepth":167,"depth":167,"links":174670},[174671,174672,174673],{"id":118711,"depth":167,"text":118711},{"id":174611,"depth":167,"text":174611},{"id":174638,"depth":167,"text":174638},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":25404},"\u002Fwiki\u002F2024-10-10-python",{"title":174510,"description":174674},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331469816]