[{"data":1,"prerenderedAt":174289},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou":3,"wiki-doc-nav":1714},{"id":4,"title":5,"body":6,"description":79,"extension":1708,"meta":1709,"navigation":569,"path":1710,"seo":1711,"stem":1712,"__hash__":1713},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":8,"toc":1680},"minimark",[9,13,18,22,25,69,72,82,85,89,92,134,137,155,158,208,211,240,244,247,259,271,274,283,292,301,304,315,318,379,387,393,402,450,453,476,479,487,491,501,535,539,976,979,992,995,1006,1009,1012,1033,1039,1042,1069,1080,1083,1091,1094,1097,1118,1129,1132,1152,1155,1177,1186,1206,1212,1239,1242,1256,1263,1287,1290,1298,1307,1323,1335,1343,1352,1356,1359,1384,1389,1392,1415,1419,1460,1464,1471,1474,1482,1485,1488,1500,1542,1549,1562,1569,1572,1625,1628,1631,1637,1641,1647,1673,1676],[10,11,5],"h1",{"id":12},"_3python-控制接口读取状态与推进仿真",[14,15,17],"h2",{"id":16},"_1目标说明","1.目标说明",[19,20,21],"p",{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,23,24],{},"你将学习:",[26,27,28,35,40,45,50,63],"ol",{},[29,30,31],"li",{},[32,33,34],"code",{},"MjModel.from_xml_string",[29,36,37],{},[32,38,39],{},"MjData(model)",[29,41,42],{},[32,43,44],{},"mj_step",[29,46,47],{},[32,48,49],{},"mj_resetData",[29,51,52,53,56,57,56,60],{},"读取 ",[32,54,55],{},"qpos","、",[32,58,59],{},"qvel",[32,61,62],{},"ctrl",[29,64,65,66],{},"使用 ",[32,67,68],{},"model.opt.timestep",[19,70,71],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[73,74,80],"pre",{"className":75,"code":77,"language":78,"meta":79},[76],"language-text","当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n","text","",[32,81,77],{"__ignoreMap":79},[19,83,84],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,86,88],{"id":87},"_2环境与依赖安装","2.环境与依赖安装",[19,90,91],{},"Fedora 44 系统依赖:",[73,93,97],{"className":94,"code":95,"language":96,"meta":79,"style":79},"language-bash shiki shiki-themes github-light github-dark","sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n","bash",[32,98,99],{"__ignoreMap":79},[100,101,104,108,112,115,119,122,125,128,131],"span",{"class":102,"line":103},"line",1,[100,105,107],{"class":106},"sScJk","sudo",[100,109,111],{"class":110},"sZZnC"," dnf",[100,113,114],{"class":110}," install",[100,116,118],{"class":117},"sj4cs"," -y",[100,120,121],{"class":110}," python3",[100,123,124],{"class":110}," python3-pip",[100,126,127],{"class":110}," mesa-libGL",[100,129,130],{"class":110}," mesa-dri-drivers",[100,132,133],{"class":110}," glfw\n",[19,135,136],{},"pip:",[73,138,140],{"className":94,"code":139,"language":96,"meta":79,"style":79},"pip install \"mujoco>=2.3\" numpy\n",[32,141,142],{"__ignoreMap":79},[100,143,144,147,149,152],{"class":102,"line":103},[100,145,146],{"class":106},"pip",[100,148,114],{"class":110},[100,150,151],{"class":110}," \"mujoco>=2.3\"",[100,153,154],{"class":110}," numpy\n",[19,156,157],{},"conda:",[73,159,161],{"className":94,"code":160,"language":96,"meta":79,"style":79},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[32,162,163,186,197],{"__ignoreMap":79},[100,164,165,168,171,174,177,180,183],{"class":102,"line":103},[100,166,167],{"class":106},"conda",[100,169,170],{"class":110}," create",[100,172,173],{"class":117}," -n",[100,175,176],{"class":110}," mujoco-python-api",[100,178,179],{"class":110}," python=",[100,181,182],{"class":117},"3.10",[100,184,185],{"class":117}," -y\n",[100,187,189,191,194],{"class":102,"line":188},2,[100,190,167],{"class":106},[100,192,193],{"class":110}," activate",[100,195,196],{"class":110}," mujoco-python-api\n",[100,198,200,202,204,206],{"class":102,"line":199},3,[100,201,146],{"class":106},[100,203,114],{"class":110},[100,205,151],{"class":110},[100,207,154],{"class":110},[19,209,210],{},"版本冲突说明:",[26,212,213,223,234],{},[29,214,215,218,219,222],{},[32,216,217],{},"mujoco.MjModel"," 和 ",[32,220,221],{},"mujoco.MjData"," 是官方 Python bindings 的类名。",[29,224,225,226,229,230,233],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[32,227,228],{},"mjModel"," 在 Python 中是 ",[32,231,232],{},"MjModel","。",[29,235,236,237,233],{},"不要使用 ",[32,238,239],{},"sim = mujoco_py.MjSim(...)",[14,241,243],{"id":242},"_3核心概念解释","3.核心概念解释",[19,245,246],{},"仿真推进核心代码:",[73,248,252],{"className":249,"code":250,"language":251,"meta":79,"style":79},"language-python shiki shiki-themes github-light github-dark","mujoco.mj_step(model, data)\n","python",[32,253,254],{"__ignoreMap":79},[100,255,256],{"class":102,"line":103},[100,257,250],{"class":258},"sVt8B",[19,260,261,262,56,265,56,268,233],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[32,263,264],{},"data.qpos",[32,266,267],{},"data.qvel",[32,269,270],{},"data.time",[19,272,273],{},"重置仿真:",[73,275,277],{"className":249,"code":276,"language":251,"meta":79,"style":79},"mujoco.mj_resetData(model, data)\n",[32,278,279],{"__ignoreMap":79},[100,280,281],{"class":102,"line":103},[100,282,276],{"class":258},[19,284,285,286,288,289,291],{},"如果手动修改了 ",[32,287,264],{}," 或 ",[32,290,267],{},"，通常应调用:",[73,293,295],{"className":249,"code":294,"language":251,"meta":79,"style":79},"mujoco.mj_forward(model, data)\n",[32,296,297],{"__ignoreMap":79},[100,298,299],{"class":102,"line":103},[100,300,294],{"class":258},[19,302,303],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[305,306,308,56,310,56,312,314],"h3",{"id":307},"qposqvelctrl-是什么",[32,309,55],{},[32,311,59],{},[32,313,62],{}," 是什么",[19,316,317],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[319,320,321,338],"table",{},[322,323,324],"thead",{},[325,326,327,332,335],"tr",{},[328,329,331],"th",{"align":330},"left","字段",[328,333,334],{"align":330},"含义",[328,336,337],{"align":330},"谁来修改",[339,340,341,354,366],"tbody",{},[325,342,343,348,351],{},[344,345,346],"td",{"align":330},[32,347,264],{},[344,349,350],{"align":330},"广义位置，例如小车位置、关节角、自由物体位置姿态",[344,352,353],{"align":330},"MuJoCo 更新，也可以手动设置初始状态",[325,355,356,360,363],{},[344,357,358],{"align":330},[32,359,267],{},[344,361,362],{"align":330},"广义速度，例如小车速度、关节角速度",[344,364,365],{"align":330},"MuJoCo 更新，也可以手动清零",[325,367,368,373,376],{},[344,369,370],{"align":330},[32,371,372],{},"data.ctrl",[344,374,375],{"align":330},"actuator 的控制输入",[344,377,378],{"align":330},"主要由你的控制代码写入",[19,380,381,382,218,384,386],{},"注意：",[32,383,55],{},[32,385,59],{}," 不一定同维。自由刚体就是典型例子：",[73,388,391],{"className":389,"code":390,"language":78,"meta":79},[76],"freejoint: qpos 7 维，qvel 6 维\n",[32,392,390],{"__ignoreMap":79},[305,394,396,218,398,401],{"id":395},"mj_step-和-mj_forward-的区别",[32,397,44],{},[32,399,400],{},"mj_forward"," 的区别",[319,403,404,417],{},[322,405,406],{},[325,407,408,411,414],{},[328,409,410],{"align":330},"函数",[328,412,413],{"align":330},"是否推进时间",[328,415,416],{"align":330},"什么时候用",[339,418,419,432],{},[325,420,421,426,429],{},[344,422,423],{"align":330},[32,424,425],{},"mj_step(model, data)",[344,427,428],{"align":330},"是",[344,430,431],{"align":330},"正常仿真循环，每调用一次前进一步",[325,433,434,439,442],{},[344,435,436],{"align":330},[32,437,438],{},"mj_forward(model, data)",[344,440,441],{"align":330},"否",[344,443,444,445,56,447,449],{"align":330},"手动改了 ",[32,446,55],{},[32,448,59],{}," 后，刷新派生量",[19,451,452],{},"例如你写：",[73,454,456],{"className":249,"code":455,"language":251,"meta":79,"style":79},"data.qpos[2] = 2.0\n",[32,457,458],{"__ignoreMap":79},[100,459,460,463,466,469,473],{"class":102,"line":103},[100,461,462],{"class":258},"data.qpos[",[100,464,465],{"class":117},"2",[100,467,468],{"class":258},"] ",[100,470,472],{"class":471},"szBVR","=",[100,474,475],{"class":117}," 2.0\n",[19,477,478],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[73,480,481],{"className":249,"code":294,"language":251,"meta":79,"style":79},[32,482,483],{"__ignoreMap":79},[100,484,485],{"class":102,"line":103},[100,486,294],{"class":258},[305,488,490],{"id":489},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,492,493,496,497,500],{},[32,494,495],{},"mujoco.mj_resetData(model, data)"," 会把 ",[32,498,499],{},"data"," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[73,502,504],{"className":249,"code":503,"language":251,"meta":79,"style":79},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[32,505,506,510,520,530],{"__ignoreMap":79},[100,507,508],{"class":102,"line":103},[100,509,276],{"class":258},[100,511,512,515,517],{"class":102,"line":188},[100,513,514],{"class":258},"data.qpos[:] ",[100,516,472],{"class":471},[100,518,519],{"class":258}," random_qpos\n",[100,521,522,525,527],{"class":102,"line":199},[100,523,524],{"class":258},"data.qvel[:] ",[100,526,472],{"class":471},[100,528,529],{"class":117}," 0.0\n",[100,531,533],{"class":102,"line":532},4,[100,534,294],{"class":258},[14,536,538],{"id":537},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[73,540,542],{"className":249,"code":541,"language":251,"meta":79,"style":79},"import mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"state_api\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n\n    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"ball_free\"\u002F>\n      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n    print(prefix)\n    print(\"  timestep:\", model.opt.timestep)\n    print(\"  time:\", data.time)\n    print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n    print(\"  qvel:\", np.round(data.qvel.copy(), 4))\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    print_state(\"initial\", model, data)\n\n    for _ in range(50):\n        mujoco.mj_step(model, data)\n\n    print_state(\"after 50 steps\", model, data)\n\n    mujoco.mj_resetData(model, data)\n    print_state(\"after reset\", model, data)\n\n    data.qpos[2] = 2.0\n    mujoco.mj_forward(model, data)\n    print_state(\"after manual qpos edit\", model, data)\n\n\nif __name__ == \"__main__\":\n    main()\n",[32,543,544,552,565,571,575,587,593,599,604,610,616,621,627,633,639,645,651,657,663,668,673,697,706,720,733,752,769,774,779,794,810,821,826,838,843,866,872,877,887,892,898,908,913,927,933,943,948,953,970],{"__ignoreMap":79},[100,545,546,549],{"class":102,"line":103},[100,547,548],{"class":471},"import",[100,550,551],{"class":258}," mujoco\n",[100,553,554,556,559,562],{"class":102,"line":188},[100,555,548],{"class":471},[100,557,558],{"class":258}," numpy ",[100,560,561],{"class":471},"as",[100,563,564],{"class":258}," np\n",[100,566,567],{"class":102,"line":199},[100,568,570],{"emptyLinePlaceholder":569},true,"\n",[100,572,573],{"class":102,"line":532},[100,574,570],{"emptyLinePlaceholder":569},[100,576,578,581,584],{"class":102,"line":577},5,[100,579,580],{"class":117},"XML",[100,582,583],{"class":471}," =",[100,585,586],{"class":110}," \"\"\"\n",[100,588,590],{"class":102,"line":589},6,[100,591,592],{"class":110},"\u003Cmujoco model=\"state_api\">\n",[100,594,596],{"class":102,"line":595},7,[100,597,598],{"class":110},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[100,600,602],{"class":102,"line":601},8,[100,603,570],{"emptyLinePlaceholder":569},[100,605,607],{"class":102,"line":606},9,[100,608,609],{"class":110},"  \u003Cworldbody>\n",[100,611,613],{"class":102,"line":612},10,[100,614,615],{"class":110},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[100,617,619],{"class":102,"line":618},11,[100,620,570],{"emptyLinePlaceholder":569},[100,622,624],{"class":102,"line":623},12,[100,625,626],{"class":110},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[100,628,630],{"class":102,"line":629},13,[100,631,632],{"class":110},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[100,634,636],{"class":102,"line":635},14,[100,637,638],{"class":110},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[100,640,642],{"class":102,"line":641},15,[100,643,644],{"class":110},"    \u003C\u002Fbody>\n",[100,646,648],{"class":102,"line":647},16,[100,649,650],{"class":110},"  \u003C\u002Fworldbody>\n",[100,652,654],{"class":102,"line":653},17,[100,655,656],{"class":110},"\u003C\u002Fmujoco>\n",[100,658,660],{"class":102,"line":659},18,[100,661,662],{"class":110},"\"\"\"\n",[100,664,666],{"class":102,"line":665},19,[100,667,570],{"emptyLinePlaceholder":569},[100,669,671],{"class":102,"line":670},20,[100,672,570],{"emptyLinePlaceholder":569},[100,674,676,679,682,685,688,691,694],{"class":102,"line":675},21,[100,677,678],{"class":471},"def",[100,680,681],{"class":106}," print_state",[100,683,684],{"class":258},"(prefix: ",[100,686,687],{"class":117},"str",[100,689,690],{"class":258},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[100,692,693],{"class":117},"None",[100,695,696],{"class":258},":\n",[100,698,700,703],{"class":102,"line":699},22,[100,701,702],{"class":117},"    print",[100,704,705],{"class":258},"(prefix)\n",[100,707,709,711,714,717],{"class":102,"line":708},23,[100,710,702],{"class":117},[100,712,713],{"class":258},"(",[100,715,716],{"class":110},"\"  timestep:\"",[100,718,719],{"class":258},", model.opt.timestep)\n",[100,721,723,725,727,730],{"class":102,"line":722},24,[100,724,702],{"class":117},[100,726,713],{"class":258},[100,728,729],{"class":110},"\"  time:\"",[100,731,732],{"class":258},", data.time)\n",[100,734,736,738,740,743,746,749],{"class":102,"line":735},25,[100,737,702],{"class":117},[100,739,713],{"class":258},[100,741,742],{"class":110},"\"  qpos:\"",[100,744,745],{"class":258},", np.round(data.qpos.copy(), ",[100,747,748],{"class":117},"4",[100,750,751],{"class":258},"))\n",[100,753,755,757,759,762,765,767],{"class":102,"line":754},26,[100,756,702],{"class":117},[100,758,713],{"class":258},[100,760,761],{"class":110},"\"  qvel:\"",[100,763,764],{"class":258},", np.round(data.qvel.copy(), ",[100,766,748],{"class":117},[100,768,751],{"class":258},[100,770,772],{"class":102,"line":771},27,[100,773,570],{"emptyLinePlaceholder":569},[100,775,777],{"class":102,"line":776},28,[100,778,570],{"emptyLinePlaceholder":569},[100,780,782,784,787,790,792],{"class":102,"line":781},29,[100,783,678],{"class":471},[100,785,786],{"class":106}," main",[100,788,789],{"class":258},"() -> ",[100,791,693],{"class":117},[100,793,696],{"class":258},[100,795,797,800,802,805,807],{"class":102,"line":796},30,[100,798,799],{"class":258},"    model ",[100,801,472],{"class":471},[100,803,804],{"class":258}," mujoco.MjModel.from_xml_string(",[100,806,580],{"class":117},[100,808,809],{"class":258},")\n",[100,811,813,816,818],{"class":102,"line":812},31,[100,814,815],{"class":258},"    data ",[100,817,472],{"class":471},[100,819,820],{"class":258}," mujoco.MjData(model)\n",[100,822,824],{"class":102,"line":823},32,[100,825,570],{"emptyLinePlaceholder":569},[100,827,829,832,835],{"class":102,"line":828},33,[100,830,831],{"class":258},"    print_state(",[100,833,834],{"class":110},"\"initial\"",[100,836,837],{"class":258},", model, data)\n",[100,839,841],{"class":102,"line":840},34,[100,842,570],{"emptyLinePlaceholder":569},[100,844,846,849,852,855,858,860,863],{"class":102,"line":845},35,[100,847,848],{"class":471},"    for",[100,850,851],{"class":258}," _ ",[100,853,854],{"class":471},"in",[100,856,857],{"class":117}," range",[100,859,713],{"class":258},[100,861,862],{"class":117},"50",[100,864,865],{"class":258},"):\n",[100,867,869],{"class":102,"line":868},36,[100,870,871],{"class":258},"        mujoco.mj_step(model, data)\n",[100,873,875],{"class":102,"line":874},37,[100,876,570],{"emptyLinePlaceholder":569},[100,878,880,882,885],{"class":102,"line":879},38,[100,881,831],{"class":258},[100,883,884],{"class":110},"\"after 50 steps\"",[100,886,837],{"class":258},[100,888,890],{"class":102,"line":889},39,[100,891,570],{"emptyLinePlaceholder":569},[100,893,895],{"class":102,"line":894},40,[100,896,897],{"class":258},"    mujoco.mj_resetData(model, data)\n",[100,899,901,903,906],{"class":102,"line":900},41,[100,902,831],{"class":258},[100,904,905],{"class":110},"\"after reset\"",[100,907,837],{"class":258},[100,909,911],{"class":102,"line":910},42,[100,912,570],{"emptyLinePlaceholder":569},[100,914,916,919,921,923,925],{"class":102,"line":915},43,[100,917,918],{"class":258},"    data.qpos[",[100,920,465],{"class":117},[100,922,468],{"class":258},[100,924,472],{"class":471},[100,926,475],{"class":117},[100,928,930],{"class":102,"line":929},44,[100,931,932],{"class":258},"    mujoco.mj_forward(model, data)\n",[100,934,936,938,941],{"class":102,"line":935},45,[100,937,831],{"class":258},[100,939,940],{"class":110},"\"after manual qpos edit\"",[100,942,837],{"class":258},[100,944,946],{"class":102,"line":945},46,[100,947,570],{"emptyLinePlaceholder":569},[100,949,951],{"class":102,"line":950},47,[100,952,570],{"emptyLinePlaceholder":569},[100,954,956,959,962,965,968],{"class":102,"line":955},48,[100,957,958],{"class":471},"if",[100,960,961],{"class":117}," __name__",[100,963,964],{"class":471}," ==",[100,966,967],{"class":110}," \"__main__\"",[100,969,696],{"class":258},[100,971,973],{"class":102,"line":972},49,[100,974,975],{"class":258},"    main()\n",[19,977,978],{},"保存为：",[73,980,982],{"className":94,"code":981,"language":96,"meta":79,"style":79},"touch ch3_python_state.py\n",[32,983,984],{"__ignoreMap":79},[100,985,986,989],{"class":102,"line":103},[100,987,988],{"class":106},"touch",[100,990,991],{"class":110}," ch3_python_state.py\n",[19,993,994],{},"运行:",[73,996,998],{"className":94,"code":997,"language":96,"meta":79,"style":79},"python ch3_python_state.py\n",[32,999,1000],{"__ignoreMap":79},[100,1001,1002,1004],{"class":102,"line":103},[100,1003,251],{"class":106},[100,1005,991],{"class":110},[305,1007,1008],{"id":1008},"代码逐段解释",[19,1010,1011],{},"打印状态的函数：",[73,1013,1015],{"className":249,"code":1014,"language":251,"meta":79,"style":79},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[32,1016,1017],{"__ignoreMap":79},[100,1018,1019,1021,1023,1025,1027,1029,1031],{"class":102,"line":103},[100,1020,678],{"class":471},[100,1022,681],{"class":106},[100,1024,684],{"class":258},[100,1026,687],{"class":117},[100,1028,690],{"class":258},[100,1030,693],{"class":117},[100,1032,696],{"class":258},[19,1034,1035,1036,1038],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[32,1037,499],{}," 里发生了什么。",[19,1040,1041],{},"推进 50 步：",[73,1043,1045],{"className":249,"code":1044,"language":251,"meta":79,"style":79},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[32,1046,1047,1064],{"__ignoreMap":79},[100,1048,1049,1052,1054,1056,1058,1060,1062],{"class":102,"line":103},[100,1050,1051],{"class":471},"for",[100,1053,851],{"class":258},[100,1055,854],{"class":471},[100,1057,857],{"class":117},[100,1059,713],{"class":258},[100,1061,862],{"class":117},[100,1063,865],{"class":258},[100,1065,1066],{"class":102,"line":188},[100,1067,1068],{"class":258},"    mujoco.mj_step(model, data)\n",[19,1070,1071,1072,1075,1076,1079],{},"由于 ",[32,1073,1074],{},"timestep=0.01","，所以 50 步后时间约为 ",[32,1077,1078],{},"0.5"," 秒。",[19,1081,1082],{},"重置：",[73,1084,1085],{"className":249,"code":276,"language":251,"meta":79,"style":79},[32,1086,1087],{"__ignoreMap":79},[100,1088,1089],{"class":102,"line":103},[100,1090,276],{"class":258},[19,1092,1093],{},"这会把时间、位置、速度恢复到初始状态。",[19,1095,1096],{},"手动改高度：",[73,1098,1100],{"className":249,"code":1099,"language":251,"meta":79,"style":79},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[32,1101,1102,1114],{"__ignoreMap":79},[100,1103,1104,1106,1108,1110,1112],{"class":102,"line":103},[100,1105,462],{"class":258},[100,1107,465],{"class":117},[100,1109,468],{"class":258},[100,1111,472],{"class":471},[100,1113,475],{"class":117},[100,1115,1116],{"class":102,"line":188},[100,1117,294],{"class":258},[19,1119,1120,1121,1124,1125,1128],{},"这个例子里 ",[32,1122,1123],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[32,1126,1127],{},"2.0"," 表示把小球放到更高的位置。",[305,1130,1131],{"id":1131},"代码逐行细讲",[73,1133,1134],{"className":249,"code":1014,"language":251,"meta":79,"style":79},[32,1135,1136],{"__ignoreMap":79},[100,1137,1138,1140,1142,1144,1146,1148,1150],{"class":102,"line":103},[100,1139,678],{"class":471},[100,1141,681],{"class":106},[100,1143,684],{"class":258},[100,1145,687],{"class":117},[100,1147,690],{"class":258},[100,1149,693],{"class":117},[100,1151,696],{"class":258},[19,1153,1154],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[26,1156,1157,1166,1172],{},[29,1158,1159,1162,1163,1165],{},[32,1160,1161],{},"prefix","：一段文字，比如 ",[32,1164,834],{},"，用来说明现在打印的是哪个阶段。",[29,1167,1168,1171],{},[32,1169,1170],{},"model","：MuJoCo 模型。",[29,1173,1174,1176],{},[32,1175,499],{},"：MuJoCo 当前状态。",[19,1178,1179,56,1182,1185],{},[32,1180,1181],{},"prefix: str",[32,1183,1184],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[73,1187,1189],{"className":249,"code":1188,"language":251,"meta":79,"style":79},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[32,1190,1191],{"__ignoreMap":79},[100,1192,1193,1196,1198,1200,1202,1204],{"class":102,"line":103},[100,1194,1195],{"class":117},"print",[100,1197,713],{"class":258},[100,1199,742],{"class":110},[100,1201,745],{"class":258},[100,1203,748],{"class":117},[100,1205,751],{"class":258},[19,1207,1208,1211],{},[32,1209,1210],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[73,1213,1215],{"className":249,"code":1214,"language":251,"meta":79,"style":79},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[32,1216,1217,1230],{"__ignoreMap":79},[100,1218,1219,1222,1224,1226,1228],{"class":102,"line":103},[100,1220,1221],{"class":258},"model ",[100,1223,472],{"class":471},[100,1225,804],{"class":258},[100,1227,580],{"class":117},[100,1229,809],{"class":258},[100,1231,1232,1235,1237],{"class":102,"line":188},[100,1233,1234],{"class":258},"data ",[100,1236,472],{"class":471},[100,1238,820],{"class":258},[19,1240,1241],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[73,1243,1245],{"className":249,"code":1244,"language":251,"meta":79,"style":79},"print_state(\"initial\", model, data)\n",[32,1246,1247],{"__ignoreMap":79},[100,1248,1249,1252,1254],{"class":102,"line":103},[100,1250,1251],{"class":258},"print_state(",[100,1253,834],{"class":110},[100,1255,837],{"class":258},[19,1257,1258,1259,1262],{},"调用刚才定义的 ",[32,1260,1261],{},"print_state"," 函数，打印初始状态。",[73,1264,1265],{"className":249,"code":1044,"language":251,"meta":79,"style":79},[32,1266,1267,1283],{"__ignoreMap":79},[100,1268,1269,1271,1273,1275,1277,1279,1281],{"class":102,"line":103},[100,1270,1051],{"class":471},[100,1272,851],{"class":258},[100,1274,854],{"class":471},[100,1276,857],{"class":117},[100,1278,713],{"class":258},[100,1280,862],{"class":117},[100,1282,865],{"class":258},[100,1284,1285],{"class":102,"line":188},[100,1286,1068],{"class":258},[19,1288,1289],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[73,1291,1292],{"className":249,"code":276,"language":251,"meta":79,"style":79},[32,1293,1294],{"__ignoreMap":79},[100,1295,1296],{"class":102,"line":103},[100,1297,276],{"class":258},[19,1299,1300,1301,1303,1304,1306],{},"重置 ",[32,1302,499],{},"。注意它不会重新创建 ",[32,1305,1170],{},"，因为模型结构没有变，只是状态回到初始值。",[73,1308,1309],{"className":249,"code":455,"language":251,"meta":79,"style":79},[32,1310,1311],{"__ignoreMap":79},[100,1312,1313,1315,1317,1319,1321],{"class":102,"line":103},[100,1314,462],{"class":258},[100,1316,465],{"class":117},[100,1318,468],{"class":258},[100,1320,472],{"class":471},[100,1322,475],{"class":117},[19,1324,1325,1326,56,1329,56,1332,1334],{},"这行是“手动改状态”。在 freejoint 中，",[32,1327,1328],{},"qpos[0]",[32,1330,1331],{},"qpos[1]",[32,1333,1123],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[73,1336,1337],{"className":249,"code":294,"language":251,"meta":79,"style":79},[32,1338,1339],{"__ignoreMap":79},[100,1340,1341],{"class":102,"line":103},[100,1342,294],{"class":258},[19,1344,1345,1346,1348,1349,1351],{},"手动改完 ",[32,1347,55],{}," 后，调用 ",[32,1350,400],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,1353,1355],{"id":1354},"_5运行结果说明","5.运行结果说明",[19,1357,1358],{},"你会看到:",[26,1360,1361,1367,1372,1375],{},[29,1362,1363,1364],{},"初始时间为 ",[32,1365,1366],{},"0",[29,1368,1369,1370],{},"50 步后时间约为 ",[32,1371,1078],{},[29,1373,1374],{},"reset 后状态恢复",[29,1376,1377,1378,1381,1382],{},"手动修改 ",[32,1379,1380],{},"data.qpos[2]"," 后，小球高度变为 ",[32,1383,1127],{},[19,1385,1386,1388],{},[32,1387,1123],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,1390,1391],{},"输出里可以重点看三件事：",[26,1393,1394,1403,1408],{},[29,1395,1396,1399,1400,1402],{},[32,1397,1398],{},"time"," 是否随着 ",[32,1401,44],{}," 增加。",[29,1404,1405,1407],{},[32,1406,55],{}," 的 z 坐标是否因为下落而变化。",[29,1409,1410,1412,1413,233],{},[32,1411,49],{}," 后时间是否回到 ",[32,1414,1366],{},[14,1416,1418],{"id":1417},"_6验证步骤","6.验证步骤",[26,1420,1421,1427,1433,1439,1442,1453],{},[29,1422,1423,1424,233],{},"修改 timestep 为 ",[32,1425,1426],{},"0.005",[29,1428,1429,1430,233],{},"重新运行，检查 50 步后时间是否约为 ",[32,1431,1432],{},"0.25",[29,1434,1435,1436,233],{},"修改重力为 ",[32,1437,1438],{},"0 0 -1.0",[29,1440,1441],{},"观察小球下降速度是否变慢。",[29,1443,1444,1445,1448,1449,1452],{},"把 ",[32,1446,1447],{},"data.qpos[2] = 2.0"," 改成 ",[32,1450,1451],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[29,1454,1455,1456,1459],{},"注释掉 ",[32,1457,1458],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,1461,1463],{"id":1462},"_7常见错误与解决方案","7.常见错误与解决方案",[305,1465,1467,1468,1470],{"id":1466},"修改-dataqpos-后位置没有更新","修改 ",[32,1469,264],{}," 后位置没有更新",[19,1472,1473],{},"解决:",[73,1475,1476],{"className":249,"code":294,"language":251,"meta":79,"style":79},[32,1477,1478],{"__ignoreMap":79},[100,1479,1480],{"class":102,"line":103},[100,1481,294],{"class":258},[305,1483,1484],{"id":1484},"数组维度看不懂",[19,1486,1487],{},"打印模型维度:",[73,1489,1491],{"className":249,"code":1490,"language":251,"meta":79,"style":79},"print(model.nq, model.nv, model.nu)\n",[32,1492,1493],{"__ignoreMap":79},[100,1494,1495,1497],{"class":102,"line":103},[100,1496,1195],{"class":117},[100,1498,1499],{"class":258},"(model.nq, model.nv, model.nu)\n",[319,1501,1502,1510],{},[322,1503,1504],{},[325,1505,1506,1508],{},[328,1507,331],{"align":330},[328,1509,334],{"align":330},[339,1511,1512,1522,1532],{},[325,1513,1514,1519],{},[344,1515,1516],{"align":330},[32,1517,1518],{},"nq",[344,1520,1521],{"align":330},"位置变量数量",[325,1523,1524,1529],{},[344,1525,1526],{"align":330},[32,1527,1528],{},"nv",[344,1530,1531],{"align":330},"速度变量数量",[325,1533,1534,1539],{},[344,1535,1536],{"align":330},[32,1537,1538],{},"nu",[344,1540,1541],{"align":330},"控制输入数量",[305,1543,1545,1546,1548],{"id":1544},"误以为-qpos-一定等于关节数","误以为 ",[32,1547,55],{}," 一定等于关节数",[19,1550,1551,1552,1555,1556,1558,1559,1561],{},"不是。例如 ",[32,1553,1554],{},"freejoint"," 的 ",[32,1557,55],{}," 是 7 维，但 ",[32,1560,59],{}," 是 6 维。",[305,1563,1565,1566,1568],{"id":1564},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[32,1567,55],{}," 的第几位",[19,1570,1571],{},"初学时可以先打印：",[73,1573,1575],{"className":249,"code":1574,"language":251,"meta":79,"style":79},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[32,1576,1577,1589,1601,1613],{"__ignoreMap":79},[100,1578,1579,1581,1583,1586],{"class":102,"line":103},[100,1580,1195],{"class":117},[100,1582,713],{"class":258},[100,1584,1585],{"class":110},"\"nq:\"",[100,1587,1588],{"class":258},", model.nq)\n",[100,1590,1591,1593,1595,1598],{"class":102,"line":188},[100,1592,1195],{"class":117},[100,1594,713],{"class":258},[100,1596,1597],{"class":110},"\"nv:\"",[100,1599,1600],{"class":258},", model.nv)\n",[100,1602,1603,1605,1607,1610],{"class":102,"line":199},[100,1604,1195],{"class":117},[100,1606,713],{"class":258},[100,1608,1609],{"class":110},"\"qpos:\"",[100,1611,1612],{"class":258},", data.qpos)\n",[100,1614,1615,1617,1619,1622],{"class":102,"line":532},[100,1616,1195],{"class":117},[100,1618,713],{"class":258},[100,1620,1621],{"class":110},"\"qvel:\"",[100,1623,1624],{"class":258},", data.qvel)\n",[19,1626,1627],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[305,1629,1630],{"id":1630},"仿真结果每次都一样",[19,1632,1633,1634,1636],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[32,1635,55],{},"、目标点或控制输入。",[14,1638,1640],{"id":1639},"_8本章小结","8.本章小结",[19,1642,1643,1644,1646],{},"Python 控制 MuJoCo 的核心就是读写 ",[32,1645,499],{},"：",[26,1648,1649,1657,1662,1667],{},[29,1650,1651,1652,218,1654,1656],{},"用 ",[32,1653,264],{},[32,1655,267],{}," 读取状态。",[29,1658,1651,1659,1661],{},[32,1660,372],{}," 写入控制。",[29,1663,1651,1664,1666],{},[32,1665,44],{}," 推进时间。",[29,1668,1669,1670,1672],{},"手动改状态后用 ",[32,1671,400],{}," 刷新派生量。",[19,1674,1675],{},"理解这一章后，就可以进入关节和 actuator 控制。",[1677,1678,1679],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":79,"searchDepth":188,"depth":188,"links":1681},[1682,1683,1684,1691,1695,1696,1697,1707],{"id":16,"depth":188,"text":17},{"id":87,"depth":188,"text":88},{"id":242,"depth":188,"text":243,"children":1685},[1686,1688,1690],{"id":307,"depth":199,"text":1687},"qpos、qvel、ctrl 是什么",{"id":395,"depth":199,"text":1689},"mj_step 和 mj_forward 的区别",{"id":489,"depth":199,"text":490},{"id":537,"depth":188,"text":538,"children":1692},[1693,1694],{"id":1008,"depth":199,"text":1008},{"id":1131,"depth":199,"text":1131},{"id":1354,"depth":188,"text":1355},{"id":1417,"depth":188,"text":1418},{"id":1462,"depth":188,"text":1463,"children":1698},[1699,1701,1702,1704,1706],{"id":1466,"depth":199,"text":1700},"修改 data.qpos 后位置没有更新",{"id":1484,"depth":199,"text":1484},{"id":1544,"depth":199,"text":1703},"误以为 qpos 一定等于关节数",{"id":1564,"depth":199,"text":1705},"不知道某个元素在 qpos 的第几位",{"id":1630,"depth":199,"text":1630},{"id":1639,"depth":188,"text":1640},"md",{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":5,"description":79},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",[1715,6760,7866,9286,12261,13612,15101,16189,24952,24965,25559,25585,25709,25950,26015,26033,26046,26093,26215,26384,26583,26762,26967,27103,27198,27235,27248,27558,28296,29004,29025,30044,31674,31825,31838,31850,32145,51947,51962,51979,52012,54884,78232,94375,94396,94509,94630,95400,96063,96424,96462,96568,96668,96711,96737,96798,98450,98551,98576,99067,99567,100647,100930,101672,102174,102186,104128,105787,107061,108759,110676,112595,114617,118087,118519,118982,119731,122675,123023,123045,123401,126708,126720,127123,127146,127293,127460,127665,127966,128523,129180,131111,132709,133358,134852,136283,137518,139212,140964,143374,143490,144425,144636,145521,146756,146984,146997,148152,150564,152932,156253,158730,160374,162151,164164,167216,169396,171923,174117],{"id":1716,"title":1717,"body":1718,"description":79,"extension":1708,"meta":6755,"navigation":569,"path":6756,"seo":6757,"stem":6758,"__hash__":6759},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":1719,"toc":6727},[1720,1723,1727,1730,1734,1745,1749,1753,1756,1759,1762,1765,1768,1794,1798,1801,1804,1807,1810,1860,1864,1882,1884,1898,1901,1909,1912,2765,2772,2789,2793,2879,2883,2889,2974,2978,3016,3020,3084,3088,3092,3099,3110,3114,3119,3123,3128,3132,3137,3141,3145,3150,3400,3405,3543,3548,3803,3806,3814,3818,3823,3926,3929,4226,4235,4336,4339,4342,4345,4348,4608,4613,4752,4755,4933,4936,5064,5067,5219,5223,5228,5231,5242,5250,5253,5359,5363,5367,5372,5422,5427,5432,5456,5461,5514,5517,5522,5699,5704,5989,5994,6390,6394,6399,6456,6461,6469,6472,6612,6615,6724],[10,1721,1717],{"id":1722},"_1基础入门",[14,1724,1726],{"id":1725},"_11注释","1.1注释",[19,1728,1729],{},"\u002F\u002F或者\u002F* *\u002F",[14,1731,1733],{"id":1732},"_12命名","1.2命名",[26,1735,1736,1739,1742],{},[29,1737,1738],{},"字母数字下划线",[29,1740,1741],{},"开头必须是字母或_",[29,1743,1744],{},"不能使用关键词",[14,1746,1748],{"id":1747},"_13数据类型","1.3数据类型",[305,1750,1752],{"id":1751},"_131整形","1.3.1整形",[19,1754,1755],{},"short 短整形 2",[19,1757,1758],{},"int 整形 4",[19,1760,1761],{},"long 长整形 win4 linux32位4 linux64位8",[19,1763,1764],{},"long long 长长整形 8",[19,1766,1767],{},"利用sizeof可以求数据类型占用的内存空间大小",[73,1769,1773],{"className":1770,"code":1771,"language":1772,"meta":79,"style":79},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[32,1774,1775,1787],{"__ignoreMap":79},[100,1776,1777,1780,1782,1785],{"class":102,"line":103},[100,1778,1779],{"class":471},"sizeof",[100,1781,713],{"class":258},[100,1783,1784],{"class":471},"int",[100,1786,809],{"class":258},[100,1788,1789,1791],{"class":102,"line":188},[100,1790,1779],{"class":471},[100,1792,1793],{"class":258},"(num)\n",[305,1795,1797],{"id":1796},"_132浮点型","1.3.2浮点型",[19,1799,1800],{},"float 单精度 4节 7位有效数字",[19,1802,1803],{},"double 双精度 8节 15-16有效数字",[19,1805,1806],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,1808,1809],{},"注意点：",[73,1811,1813],{"className":1770,"code":1812,"language":1772,"meta":79,"style":79},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[32,1814,1815,1838],{"__ignoreMap":79},[100,1816,1817,1820,1823,1825,1828,1831,1834],{"class":102,"line":103},[100,1818,1819],{"class":471},"float",[100,1821,1822],{"class":258}," f1",[100,1824,472],{"class":471},[100,1826,1827],{"class":117},"3.14",[100,1829,1830],{"class":471},"f",[100,1832,1833],{"class":258},";",[100,1835,1837],{"class":1836},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[100,1839,1840,1842,1845,1847,1850,1853,1855,1857],{"class":102,"line":188},[100,1841,1819],{"class":471},[100,1843,1844],{"class":258}," f2",[100,1846,472],{"class":471},[100,1848,1849],{"class":117},"3",[100,1851,1852],{"class":471},"e",[100,1854,465],{"class":117},[100,1856,1833],{"class":258},[100,1858,1859],{"class":1836}," \u002F\u002F科学记数法\n",[305,1861,1863],{"id":1862},"_133字符型","1.3.3字符型",[73,1865,1867],{"className":1770,"code":1866,"language":1772,"meta":79,"style":79},"char ch='a'\n",[32,1868,1869],{"__ignoreMap":79},[100,1870,1871,1874,1877,1879],{"class":102,"line":103},[100,1872,1873],{"class":471},"char",[100,1875,1876],{"class":258}," ch",[100,1878,472],{"class":471},[100,1880,1881],{"class":110},"'a'\n",[19,1883,1809],{},[26,1885,1886,1889,1892,1895],{},[29,1887,1888],{},"在显示字符型变量时，只能单引号，双引号x",[29,1890,1891],{},"单引号内只能一个字符，不能字符串",[29,1893,1894],{},"c和c++字符型变量只占用一个字符",[29,1896,1897],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,1899,1900],{},"ASCII码大致由以下两部分组成：",[26,1902,1903,1906],{},[29,1904,1905],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[29,1907,1908],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,1910,1911],{},"ASCII码表格：",[319,1913,1914,1955],{},[322,1915,1916],{},[325,1917,1918,1925,1930,1934,1939,1943,1947,1951],{},[328,1919,1920,1924],{},[1921,1922,1923],"strong",{},"ASCII","值",[328,1926,1927],{},[1921,1928,1929],{},"控制字符",[328,1931,1932,1924],{},[1921,1933,1923],{},[328,1935,1936],{},[1921,1937,1938],{},"字符",[328,1940,1941,1924],{},[1921,1942,1923],{},[328,1944,1945],{},[1921,1946,1938],{},[328,1948,1949,1924],{},[1921,1950,1923],{},[328,1952,1953],{},[1921,1954,1938],{},[339,1956,1957,1981,2007,2032,2057,2082,2107,2132,2158,2183,2209,2235,2261,2286,2312,2338,2364,2388,2413,2437,2462,2487,2512,2537,2562,2587,2612,2638,2663,2688,2713,2739],{},[325,1958,1959,1961,1964,1967,1970,1973,1976,1979],{},[344,1960,1366],{},[344,1962,1963],{},"NUT",[344,1965,1966],{},"32",[344,1968,1969],{},"(space)",[344,1971,1972],{},"64",[344,1974,1975],{},"@",[344,1977,1978],{},"96",[344,1980,56],{},[325,1982,1983,1986,1989,1992,1995,1998,2001,2004],{},[344,1984,1985],{},"1",[344,1987,1988],{},"SOH",[344,1990,1991],{},"33",[344,1993,1994],{},"!",[344,1996,1997],{},"65",[344,1999,2000],{},"A",[344,2002,2003],{},"97",[344,2005,2006],{},"a",[325,2008,2009,2011,2014,2017,2020,2023,2026,2029],{},[344,2010,465],{},[344,2012,2013],{},"STX",[344,2015,2016],{},"34",[344,2018,2019],{},"\"",[344,2021,2022],{},"66",[344,2024,2025],{},"B",[344,2027,2028],{},"98",[344,2030,2031],{},"b",[325,2033,2034,2036,2039,2042,2045,2048,2051,2054],{},[344,2035,1849],{},[344,2037,2038],{},"ETX",[344,2040,2041],{},"35",[344,2043,2044],{},"#",[344,2046,2047],{},"67",[344,2049,2050],{},"C",[344,2052,2053],{},"99",[344,2055,2056],{},"c",[325,2058,2059,2061,2064,2067,2070,2073,2076,2079],{},[344,2060,748],{},[344,2062,2063],{},"EOT",[344,2065,2066],{},"36",[344,2068,2069],{},"$",[344,2071,2072],{},"68",[344,2074,2075],{},"D",[344,2077,2078],{},"100",[344,2080,2081],{},"d",[325,2083,2084,2087,2090,2093,2096,2099,2102,2105],{},[344,2085,2086],{},"5",[344,2088,2089],{},"ENQ",[344,2091,2092],{},"37",[344,2094,2095],{},"%",[344,2097,2098],{},"69",[344,2100,2101],{},"E",[344,2103,2104],{},"101",[344,2106,1852],{},[325,2108,2109,2112,2115,2118,2121,2124,2127,2130],{},[344,2110,2111],{},"6",[344,2113,2114],{},"ACK",[344,2116,2117],{},"38",[344,2119,2120],{},"&",[344,2122,2123],{},"70",[344,2125,2126],{},"F",[344,2128,2129],{},"102",[344,2131,1830],{},[325,2133,2134,2137,2140,2143,2146,2149,2152,2155],{},[344,2135,2136],{},"7",[344,2138,2139],{},"BEL",[344,2141,2142],{},"39",[344,2144,2145],{},",",[344,2147,2148],{},"71",[344,2150,2151],{},"G",[344,2153,2154],{},"103",[344,2156,2157],{},"g",[325,2159,2160,2163,2166,2169,2171,2174,2177,2180],{},[344,2161,2162],{},"8",[344,2164,2165],{},"BS",[344,2167,2168],{},"40",[344,2170,713],{},[344,2172,2173],{},"72",[344,2175,2176],{},"H",[344,2178,2179],{},"104",[344,2181,2182],{},"h",[325,2184,2185,2188,2191,2194,2197,2200,2203,2206],{},[344,2186,2187],{},"9",[344,2189,2190],{},"HT",[344,2192,2193],{},"41",[344,2195,2196],{},")",[344,2198,2199],{},"73",[344,2201,2202],{},"I",[344,2204,2205],{},"105",[344,2207,2208],{},"i",[325,2210,2211,2214,2217,2220,2223,2226,2229,2232],{},[344,2212,2213],{},"10",[344,2215,2216],{},"LF",[344,2218,2219],{},"42",[344,2221,2222],{},"*",[344,2224,2225],{},"74",[344,2227,2228],{},"J",[344,2230,2231],{},"106",[344,2233,2234],{},"j",[325,2236,2237,2240,2243,2246,2249,2252,2255,2258],{},[344,2238,2239],{},"11",[344,2241,2242],{},"VT",[344,2244,2245],{},"43",[344,2247,2248],{},"+",[344,2250,2251],{},"75",[344,2253,2254],{},"K",[344,2256,2257],{},"107",[344,2259,2260],{},"k",[325,2262,2263,2266,2269,2272,2274,2277,2280,2283],{},[344,2264,2265],{},"12",[344,2267,2268],{},"FF",[344,2270,2271],{},"44",[344,2273,2145],{},[344,2275,2276],{},"76",[344,2278,2279],{},"L",[344,2281,2282],{},"108",[344,2284,2285],{},"l",[325,2287,2288,2291,2294,2297,2300,2303,2306,2309],{},[344,2289,2290],{},"13",[344,2292,2293],{},"CR",[344,2295,2296],{},"45",[344,2298,2299],{},"-",[344,2301,2302],{},"77",[344,2304,2305],{},"M",[344,2307,2308],{},"109",[344,2310,2311],{},"m",[325,2313,2314,2317,2320,2323,2326,2329,2332,2335],{},[344,2315,2316],{},"14",[344,2318,2319],{},"SO",[344,2321,2322],{},"46",[344,2324,2325],{},".",[344,2327,2328],{},"78",[344,2330,2331],{},"N",[344,2333,2334],{},"110",[344,2336,2337],{},"n",[325,2339,2340,2343,2346,2349,2352,2355,2358,2361],{},[344,2341,2342],{},"15",[344,2344,2345],{},"SI",[344,2347,2348],{},"47",[344,2350,2351],{},"\u002F",[344,2353,2354],{},"79",[344,2356,2357],{},"O",[344,2359,2360],{},"111",[344,2362,2363],{},"o",[325,2365,2366,2369,2372,2375,2377,2380,2383,2386],{},[344,2367,2368],{},"16",[344,2370,2371],{},"DLE",[344,2373,2374],{},"48",[344,2376,1366],{},[344,2378,2379],{},"80",[344,2381,2382],{},"P",[344,2384,2385],{},"112",[344,2387,19],{},[325,2389,2390,2393,2396,2399,2401,2404,2407,2410],{},[344,2391,2392],{},"17",[344,2394,2395],{},"DCI",[344,2397,2398],{},"49",[344,2400,1985],{},[344,2402,2403],{},"81",[344,2405,2406],{},"Q",[344,2408,2409],{},"113",[344,2411,2412],{},"q",[325,2414,2415,2418,2421,2423,2425,2428,2431,2434],{},[344,2416,2417],{},"18",[344,2419,2420],{},"DC2",[344,2422,862],{},[344,2424,465],{},[344,2426,2427],{},"82",[344,2429,2430],{},"R",[344,2432,2433],{},"114",[344,2435,2436],{},"r",[325,2438,2439,2442,2445,2448,2450,2453,2456,2459],{},[344,2440,2441],{},"19",[344,2443,2444],{},"DC3",[344,2446,2447],{},"51",[344,2449,1849],{},[344,2451,2452],{},"83",[344,2454,2455],{},"S",[344,2457,2458],{},"115",[344,2460,2461],{},"s",[325,2463,2464,2467,2470,2473,2475,2478,2481,2484],{},[344,2465,2466],{},"20",[344,2468,2469],{},"DC4",[344,2471,2472],{},"52",[344,2474,748],{},[344,2476,2477],{},"84",[344,2479,2480],{},"T",[344,2482,2483],{},"116",[344,2485,2486],{},"t",[325,2488,2489,2492,2495,2498,2500,2503,2506,2509],{},[344,2490,2491],{},"21",[344,2493,2494],{},"NAK",[344,2496,2497],{},"53",[344,2499,2086],{},[344,2501,2502],{},"85",[344,2504,2505],{},"U",[344,2507,2508],{},"117",[344,2510,2511],{},"u",[325,2513,2514,2517,2520,2523,2525,2528,2531,2534],{},[344,2515,2516],{},"22",[344,2518,2519],{},"SYN",[344,2521,2522],{},"54",[344,2524,2111],{},[344,2526,2527],{},"86",[344,2529,2530],{},"V",[344,2532,2533],{},"118",[344,2535,2536],{},"v",[325,2538,2539,2542,2545,2548,2550,2553,2556,2559],{},[344,2540,2541],{},"23",[344,2543,2544],{},"TB",[344,2546,2547],{},"55",[344,2549,2136],{},[344,2551,2552],{},"87",[344,2554,2555],{},"W",[344,2557,2558],{},"119",[344,2560,2561],{},"w",[325,2563,2564,2567,2570,2573,2575,2578,2581,2584],{},[344,2565,2566],{},"24",[344,2568,2569],{},"CAN",[344,2571,2572],{},"56",[344,2574,2162],{},[344,2576,2577],{},"88",[344,2579,2580],{},"X",[344,2582,2583],{},"120",[344,2585,2586],{},"x",[325,2588,2589,2592,2595,2598,2600,2603,2606,2609],{},[344,2590,2591],{},"25",[344,2593,2594],{},"EM",[344,2596,2597],{},"57",[344,2599,2187],{},[344,2601,2602],{},"89",[344,2604,2605],{},"Y",[344,2607,2608],{},"121",[344,2610,2611],{},"y",[325,2613,2614,2617,2620,2623,2626,2629,2632,2635],{},[344,2615,2616],{},"26",[344,2618,2619],{},"SUB",[344,2621,2622],{},"58",[344,2624,2625],{},":",[344,2627,2628],{},"90",[344,2630,2631],{},"Z",[344,2633,2634],{},"122",[344,2636,2637],{},"z",[325,2639,2640,2643,2646,2649,2651,2654,2657,2660],{},[344,2641,2642],{},"27",[344,2644,2645],{},"ESC",[344,2647,2648],{},"59",[344,2650,1833],{},[344,2652,2653],{},"91",[344,2655,2656],{},"[",[344,2658,2659],{},"123",[344,2661,2662],{},"{",[325,2664,2665,2668,2671,2674,2677,2680,2682,2685],{},[344,2666,2667],{},"28",[344,2669,2670],{},"FS",[344,2672,2673],{},"60",[344,2675,2676],{},"\u003C",[344,2678,2679],{},"92",[344,2681,2351],{},[344,2683,2684],{},"124",[344,2686,2687],{},"|",[325,2689,2690,2693,2696,2699,2701,2704,2707,2710],{},[344,2691,2692],{},"29",[344,2694,2695],{},"GS",[344,2697,2698],{},"61",[344,2700,472],{},[344,2702,2703],{},"93",[344,2705,2706],{},"]",[344,2708,2709],{},"125",[344,2711,2712],{},"}",[325,2714,2715,2718,2721,2724,2727,2730,2733,2736],{},[344,2716,2717],{},"30",[344,2719,2720],{},"RS",[344,2722,2723],{},"62",[344,2725,2726],{},">",[344,2728,2729],{},"94",[344,2731,2732],{},"^",[344,2734,2735],{},"126",[344,2737,2738],{},"`",[325,2740,2741,2744,2747,2750,2753,2756,2759,2762],{},[344,2742,2743],{},"31",[344,2745,2746],{},"US",[344,2748,2749],{},"63",[344,2751,2752],{},"?",[344,2754,2755],{},"95",[344,2757,2758],{},"_",[344,2760,2761],{},"127",[344,2763,2764],{},"DEL",[19,2766,2767,2768,2771],{},"ASCII 码大致由以下",[1921,2769,2770],{},"两部分组","成：",[2773,2774,2775,2782],"ul",{},[29,2776,2777,2778,2781],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[1921,2779,2780],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[29,2783,2784,2785,2788],{},"ASCII 打印字符：数字 ",[1921,2786,2787],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[305,2790,2792],{"id":2791},"_134转义字符","1.3.4转义字符",[73,2794,2796],{"className":1770,"code":2795,"language":1772,"meta":79,"style":79},"\u002F\u002F换行符\ncout \u003C\u003C\"hello world\u002Fn\"; \u002F\u002F就等同于如下：\ncout \u003C\u003C\"hello world\"\u003C\u003Cendl;\n\u002F\u002F反斜杠\ncout \u003C\u003C\"\u002F\u002F\"\u003C\u003Cendl;\n\u002F\u002F水平制表符\ncout \u003C\u003C\"aaaa\\thelloworld\"\u003C\u003Cendl; \u002F\u002F输出窗口时有对齐效果\n",[32,2797,2798,2803,2819,2833,2838,2851,2856],{"__ignoreMap":79},[100,2799,2800],{"class":102,"line":103},[100,2801,2802],{"class":1836},"\u002F\u002F换行符\n",[100,2804,2805,2808,2811,2814,2816],{"class":102,"line":188},[100,2806,2807],{"class":258},"cout ",[100,2809,2810],{"class":471},"\u003C\u003C",[100,2812,2813],{"class":110},"\"hello world\u002Fn\"",[100,2815,1833],{"class":258},[100,2817,2818],{"class":1836}," \u002F\u002F就等同于如下：\n",[100,2820,2821,2823,2825,2828,2830],{"class":102,"line":199},[100,2822,2807],{"class":258},[100,2824,2810],{"class":471},[100,2826,2827],{"class":110},"\"hello world\"",[100,2829,2810],{"class":471},[100,2831,2832],{"class":258},"endl;\n",[100,2834,2835],{"class":102,"line":532},[100,2836,2837],{"class":1836},"\u002F\u002F反斜杠\n",[100,2839,2840,2842,2844,2847,2849],{"class":102,"line":577},[100,2841,2807],{"class":258},[100,2843,2810],{"class":471},[100,2845,2846],{"class":110},"\"\u002F\u002F\"",[100,2848,2810],{"class":471},[100,2850,2832],{"class":258},[100,2852,2853],{"class":102,"line":589},[100,2854,2855],{"class":1836},"\u002F\u002F水平制表符\n",[100,2857,2858,2860,2862,2865,2868,2871,2873,2876],{"class":102,"line":595},[100,2859,2807],{"class":258},[100,2861,2810],{"class":471},[100,2863,2864],{"class":110},"\"aaaa",[100,2866,2867],{"class":117},"\\t",[100,2869,2870],{"class":110},"helloworld\"",[100,2872,2810],{"class":471},[100,2874,2875],{"class":258},"endl;",[100,2877,2878],{"class":1836}," \u002F\u002F输出窗口时有对齐效果\n",[305,2880,2882],{"id":2881},"_135字符串型","1.3.5字符串型",[19,2884,2885,2886,2888],{},"char 变量名",[100,2887],{},"=\"字符串值\"",[73,2890,2892],{"className":1770,"code":2891,"language":1772,"meta":79,"style":79},"\u002F\u002Fc风格字符串\n\u002F\u002F注意事项：\n\u002F\u002F1.char字符串名[]\n\u002F\u002F2.等号后面要用双引号，包含起来字符串\nchar str[]=\"hello world\";\ncout \u003C\u003Cstr\u003C\u003Cendl;\n\u002F\u002Fc++风格字符串\n\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\nstring str2=\"hello world\";\ncout \u003C\u003Cstr2\u003C\u003Cendl;\n",[32,2893,2894,2899,2904,2909,2914,2928,2940,2945,2950,2961],{"__ignoreMap":79},[100,2895,2896],{"class":102,"line":103},[100,2897,2898],{"class":1836},"\u002F\u002Fc风格字符串\n",[100,2900,2901],{"class":102,"line":188},[100,2902,2903],{"class":1836},"\u002F\u002F注意事项：\n",[100,2905,2906],{"class":102,"line":199},[100,2907,2908],{"class":1836},"\u002F\u002F1.char字符串名[]\n",[100,2910,2911],{"class":102,"line":532},[100,2912,2913],{"class":1836},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[100,2915,2916,2918,2921,2923,2925],{"class":102,"line":577},[100,2917,1873],{"class":471},[100,2919,2920],{"class":258}," str[]",[100,2922,472],{"class":471},[100,2924,2827],{"class":110},[100,2926,2927],{"class":258},";\n",[100,2929,2930,2932,2934,2936,2938],{"class":102,"line":589},[100,2931,2807],{"class":258},[100,2933,2810],{"class":471},[100,2935,687],{"class":258},[100,2937,2810],{"class":471},[100,2939,2832],{"class":258},[100,2941,2942],{"class":102,"line":595},[100,2943,2944],{"class":1836},"\u002F\u002Fc++风格字符串\n",[100,2946,2947],{"class":102,"line":601},[100,2948,2949],{"class":1836},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[100,2951,2952,2955,2957,2959],{"class":102,"line":606},[100,2953,2954],{"class":258},"string str2",[100,2956,472],{"class":471},[100,2958,2827],{"class":110},[100,2960,2927],{"class":258},[100,2962,2963,2965,2967,2970,2972],{"class":102,"line":612},[100,2964,2807],{"class":258},[100,2966,2810],{"class":471},[100,2968,2969],{"class":258},"str2",[100,2971,2810],{"class":471},[100,2973,2832],{"class":258},[305,2975,2977],{"id":2976},"_136布尔类型bool","1.3.6布尔类型bool",[73,2979,2981],{"className":1770,"code":2980,"language":1772,"meta":79,"style":79},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[32,2982,2983,2998],{"__ignoreMap":79},[100,2984,2985,2988,2991,2993,2996],{"class":102,"line":103},[100,2986,2987],{"class":471},"bool",[100,2989,2990],{"class":258}," flag",[100,2992,472],{"class":471},[100,2994,2995],{"class":117},"true",[100,2997,2927],{"class":258},[100,2999,3000,3003,3006,3009,3011,3013],{"class":102,"line":188},[100,3001,3002],{"class":258},"cout",[100,3004,3005],{"class":471},"\u003C\u003Csizeof",[100,3007,3008],{"class":258},"(flag)",[100,3010,2810],{"class":471},[100,3012,2875],{"class":258},[100,3014,3015],{"class":1836}," \u002F\u002F查看布尔占内存空间\n",[14,3017,3019],{"id":3018},"_14键盘输入cin","1.4键盘输入cin",[73,3021,3023],{"className":1770,"code":3022,"language":1772,"meta":79,"style":79},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[32,3024,3025,3038,3055,3066],{"__ignoreMap":79},[100,3026,3027,3029,3032,3034,3036],{"class":102,"line":103},[100,3028,1784],{"class":471},[100,3030,3031],{"class":258}," a",[100,3033,472],{"class":471},[100,3035,1366],{"class":117},[100,3037,2927],{"class":258},[100,3039,3040,3042,3044,3047,3049,3051,3053],{"class":102,"line":188},[100,3041,3002],{"class":258},[100,3043,2810],{"class":471},[100,3045,3046],{"class":110},"\"请给整型变量a赋值\"",[100,3048,2810],{"class":471},[100,3050,2006],{"class":258},[100,3052,2810],{"class":471},[100,3054,2832],{"class":258},[100,3056,3057,3060,3063],{"class":102,"line":199},[100,3058,3059],{"class":258},"cin ",[100,3061,3062],{"class":471},">>",[100,3064,3065],{"class":258}," a;\n",[100,3067,3068,3070,3072,3075,3078,3080,3082],{"class":102,"line":532},[100,3069,2807],{"class":258},[100,3071,2810],{"class":471},[100,3073,3074],{"class":110}," \"整型变量a=\"",[100,3076,3077],{"class":471}," \u003C\u003C",[100,3079,2006],{"class":258},[100,3081,2810],{"class":471},[100,3083,2832],{"class":258},[14,3085,3087],{"id":3086},"_15运算符","1.5运算符",[305,3089,3091],{"id":3090},"_151算术运算符","1.5.1算术运算符",[19,3093,3094,3098],{},[3095,3096],"img",{"alt":79,"src":3097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[26,3100,3101,3104,3107],{},[29,3102,3103],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[29,3105,3106],{},"两个小数不可以做取模运算",[29,3108,3109],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[305,3111,3113],{"id":3112},"_152赋值运算符","1.5.2赋值运算符",[19,3115,3116],{},[3095,3117],{"alt":79,"src":3118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[305,3120,3122],{"id":3121},"_153比较运算符","1.5.3比较运算符",[19,3124,3125],{},[3095,3126],{"alt":79,"src":3127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[305,3129,3131],{"id":3130},"_154逻辑运算符","1.5.4逻辑运算符",[19,3133,3134],{},[3095,3135],{"alt":79,"src":3136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,3138,3140],{"id":3139},"_16程序流程结构","1.6程序流程结构",[305,3142,3144],{"id":3143},"_161选择结构","1.6.1选择结构",[26,3146,3147],{},[29,3148,3149],{},"if语句\n单行、多行、多条件if语句",[73,3151,3153],{"className":1770,"code":3152,"language":1772,"meta":79,"style":79},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\nif(score>600)\n{\n    cout\u003C\u003C'这是单行if语句'\u003C\u003Cendl;\n}\n\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\ncin >> score\nif(score\u003C=600)\n{\n    cout>>\"小于等于600\"\u003C\u003Cendl;\n}\nelse\n{\n    cout>>\"大于600\">>endl;\n}\n\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\nif (0\u003Cnum\u003C100)\n{\n    cout\u003C\u003C\"小于100\"\u003C\u003Cendl;\n}\nelse if (nmu>=100&&num\u003C200)\n{\n    cout\u003C\u003C\"不小于100且小于200\"\u003C\u003Cendl; \u002F\u002F可以无限else if,python中是elif：\n}\nelse\n{\n    cout\u003C\u003C\"不小于200\"\u003C\u003Cendl;\n}\n\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[32,3154,3155,3160,3174,3179,3193,3198,3203,3212,3225,3229,3242,3246,3251,3255,3268,3272,3277,3297,3301,3314,3318,3346,3350,3366,3370,3374,3378,3391,3395],{"__ignoreMap":79},[100,3156,3157],{"class":102,"line":103},[100,3158,3159],{"class":1836},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[100,3161,3162,3164,3167,3169,3172],{"class":102,"line":188},[100,3163,958],{"class":471},[100,3165,3166],{"class":258},"(score",[100,3168,2726],{"class":471},[100,3170,3171],{"class":117},"600",[100,3173,809],{"class":258},[100,3175,3176],{"class":102,"line":199},[100,3177,3178],{"class":258},"{\n",[100,3180,3181,3184,3186,3189,3191],{"class":102,"line":532},[100,3182,3183],{"class":258},"    cout",[100,3185,2810],{"class":471},[100,3187,3188],{"class":110},"'这是单行if语句'",[100,3190,2810],{"class":471},[100,3192,2832],{"class":258},[100,3194,3195],{"class":102,"line":577},[100,3196,3197],{"class":258},"}\n",[100,3199,3200],{"class":102,"line":589},[100,3201,3202],{"class":1836},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[100,3204,3205,3207,3209],{"class":102,"line":595},[100,3206,3059],{"class":258},[100,3208,3062],{"class":471},[100,3210,3211],{"class":258}," score\n",[100,3213,3214,3216,3218,3221,3223],{"class":102,"line":601},[100,3215,958],{"class":471},[100,3217,3166],{"class":258},[100,3219,3220],{"class":471},"\u003C=",[100,3222,3171],{"class":117},[100,3224,809],{"class":258},[100,3226,3227],{"class":102,"line":606},[100,3228,3178],{"class":258},[100,3230,3231,3233,3235,3238,3240],{"class":102,"line":612},[100,3232,3183],{"class":258},[100,3234,3062],{"class":471},[100,3236,3237],{"class":110},"\"小于等于600\"",[100,3239,2810],{"class":471},[100,3241,2832],{"class":258},[100,3243,3244],{"class":102,"line":618},[100,3245,3197],{"class":258},[100,3247,3248],{"class":102,"line":623},[100,3249,3250],{"class":471},"else\n",[100,3252,3253],{"class":102,"line":629},[100,3254,3178],{"class":258},[100,3256,3257,3259,3261,3264,3266],{"class":102,"line":635},[100,3258,3183],{"class":258},[100,3260,3062],{"class":471},[100,3262,3263],{"class":110},"\"大于600\"",[100,3265,3062],{"class":471},[100,3267,2832],{"class":258},[100,3269,3270],{"class":102,"line":641},[100,3271,3197],{"class":258},[100,3273,3274],{"class":102,"line":647},[100,3275,3276],{"class":1836},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[100,3278,3279,3281,3284,3286,3288,3291,3293,3295],{"class":102,"line":653},[100,3280,958],{"class":471},[100,3282,3283],{"class":258}," (",[100,3285,1366],{"class":117},[100,3287,2676],{"class":471},[100,3289,3290],{"class":258},"num",[100,3292,2676],{"class":471},[100,3294,2078],{"class":117},[100,3296,809],{"class":258},[100,3298,3299],{"class":102,"line":659},[100,3300,3178],{"class":258},[100,3302,3303,3305,3307,3310,3312],{"class":102,"line":665},[100,3304,3183],{"class":258},[100,3306,2810],{"class":471},[100,3308,3309],{"class":110},"\"小于100\"",[100,3311,2810],{"class":471},[100,3313,2832],{"class":258},[100,3315,3316],{"class":102,"line":670},[100,3317,3197],{"class":258},[100,3319,3320,3323,3326,3329,3332,3334,3337,3339,3341,3344],{"class":102,"line":675},[100,3321,3322],{"class":471},"else",[100,3324,3325],{"class":471}," if",[100,3327,3328],{"class":258}," (nmu",[100,3330,3331],{"class":471},">=",[100,3333,2078],{"class":117},[100,3335,3336],{"class":471},"&&",[100,3338,3290],{"class":258},[100,3340,2676],{"class":471},[100,3342,3343],{"class":117},"200",[100,3345,809],{"class":258},[100,3347,3348],{"class":102,"line":699},[100,3349,3178],{"class":258},[100,3351,3352,3354,3356,3359,3361,3363],{"class":102,"line":708},[100,3353,3183],{"class":258},[100,3355,2810],{"class":471},[100,3357,3358],{"class":110},"\"不小于100且小于200\"",[100,3360,2810],{"class":471},[100,3362,2875],{"class":258},[100,3364,3365],{"class":1836}," \u002F\u002F可以无限else if,python中是elif：\n",[100,3367,3368],{"class":102,"line":722},[100,3369,3197],{"class":258},[100,3371,3372],{"class":102,"line":735},[100,3373,3250],{"class":471},[100,3375,3376],{"class":102,"line":754},[100,3377,3178],{"class":258},[100,3379,3380,3382,3384,3387,3389],{"class":102,"line":771},[100,3381,3183],{"class":258},[100,3383,2810],{"class":471},[100,3385,3386],{"class":110},"\"不小于200\"",[100,3388,2810],{"class":471},[100,3390,2832],{"class":258},[100,3392,3393],{"class":102,"line":776},[100,3394,3197],{"class":258},[100,3396,3397],{"class":102,"line":781},[100,3398,3399],{"class":1836},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[26,3401,3402],{"start":188},[29,3403,3404],{},"三目运算符",[73,3406,3408],{"className":1770,"code":3407,"language":1772,"meta":79,"style":79},"\u002F\u002F创建三个变量a,b,c\n\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\nint a=20,b=10,c=0;\nc=(a>b?a:b)\ncout\u003C\u003C\"c=\"\u003C\u003Cc\u003C\u003Cendl;\n\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n(a>b?a:b)=100;\ncout\u003C\u003Ca\u003C\u003Cendl; \u002F\u002F100  a是大于b的，将100赋值给了a\ncout\u003C\u003Cb\u003C\u003Cendl; \u002F\u002F10   a>b,b还是原值\n",[32,3409,3410,3415,3420,3446,3468,3485,3490,3513,3528],{"__ignoreMap":79},[100,3411,3412],{"class":102,"line":103},[100,3413,3414],{"class":1836},"\u002F\u002F创建三个变量a,b,c\n",[100,3416,3417],{"class":102,"line":188},[100,3418,3419],{"class":1836},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[100,3421,3422,3424,3426,3428,3430,3433,3435,3437,3440,3442,3444],{"class":102,"line":199},[100,3423,1784],{"class":471},[100,3425,3031],{"class":258},[100,3427,472],{"class":471},[100,3429,2466],{"class":117},[100,3431,3432],{"class":258},",b",[100,3434,472],{"class":471},[100,3436,2213],{"class":117},[100,3438,3439],{"class":258},",c",[100,3441,472],{"class":471},[100,3443,1366],{"class":117},[100,3445,2927],{"class":258},[100,3447,3448,3450,3452,3455,3457,3459,3461,3463,3465],{"class":102,"line":532},[100,3449,2056],{"class":258},[100,3451,472],{"class":471},[100,3453,3454],{"class":258},"(a",[100,3456,2726],{"class":471},[100,3458,2031],{"class":258},[100,3460,2752],{"class":471},[100,3462,2006],{"class":258},[100,3464,2625],{"class":471},[100,3466,3467],{"class":258},"b)\n",[100,3469,3470,3472,3474,3477,3479,3481,3483],{"class":102,"line":577},[100,3471,3002],{"class":258},[100,3473,2810],{"class":471},[100,3475,3476],{"class":110},"\"c=\"",[100,3478,2810],{"class":471},[100,3480,2056],{"class":258},[100,3482,2810],{"class":471},[100,3484,2832],{"class":258},[100,3486,3487],{"class":102,"line":589},[100,3488,3489],{"class":1836},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[100,3491,3492,3494,3496,3498,3500,3502,3504,3507,3509,3511],{"class":102,"line":595},[100,3493,3454],{"class":258},[100,3495,2726],{"class":471},[100,3497,2031],{"class":258},[100,3499,2752],{"class":471},[100,3501,2006],{"class":258},[100,3503,2625],{"class":471},[100,3505,3506],{"class":258},"b)",[100,3508,472],{"class":471},[100,3510,2078],{"class":117},[100,3512,2927],{"class":258},[100,3514,3515,3517,3519,3521,3523,3525],{"class":102,"line":601},[100,3516,3002],{"class":258},[100,3518,2810],{"class":471},[100,3520,2006],{"class":258},[100,3522,2810],{"class":471},[100,3524,2875],{"class":258},[100,3526,3527],{"class":1836}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[100,3529,3530,3532,3534,3536,3538,3540],{"class":102,"line":606},[100,3531,3002],{"class":258},[100,3533,2810],{"class":471},[100,3535,2031],{"class":258},[100,3537,2810],{"class":471},[100,3539,2875],{"class":258},[100,3541,3542],{"class":1836}," \u002F\u002F10   a>b,b还是原值\n",[26,3544,3545],{"start":199},[29,3546,3547],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[73,3549,3551],{"className":1770,"code":3550,"language":1772,"meta":79,"style":79},"\u002F\u002F案例-电影打分\n#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    int score=0;\n    cout\u003C\u003C\"电影打分：\"\u003C\u003Cendl;\n    cin>>score;\n    switch(score)\n    {\n        case 10:cout\u003C\u003C\"经典\"\u003C\u003Cendl;break;\n        case 9:cout\u003C\u003C\"经典\"\u003C\u003Cendl;break;\n        case 8:cout\u003C\u003C\"非常好\"\u003C\u003Cendl;break;\n        case 7:cout\u003C\u003C\"非常好\"\u003C\u003Cendl;break;\n        case 6:cout\u003C\u003C\"一般\"\u003C\u003Cendl;break;\n        case 5:cout\u003C\u003C\"一般\"\u003C\u003Cendl;break;\n        default:cout\u003C\u003C\"烂片\"\u003C\u003Cendl;break;\n    }\n}\n",[32,3552,3553,3558,3566,3579,3588,3592,3606,3619,3629,3637,3642,3667,3688,3710,3731,3753,3774,3794,3799],{"__ignoreMap":79},[100,3554,3555],{"class":102,"line":103},[100,3556,3557],{"class":1836},"\u002F\u002F案例-电影打分\n",[100,3559,3560,3563],{"class":102,"line":188},[100,3561,3562],{"class":471},"#include",[100,3564,3565],{"class":110},"\u003Ciostream>\n",[100,3567,3568,3571,3574,3577],{"class":102,"line":199},[100,3569,3570],{"class":471},"using",[100,3572,3573],{"class":471}," namespace",[100,3575,3576],{"class":106}," std",[100,3578,2927],{"class":258},[100,3580,3581,3583,3585],{"class":102,"line":532},[100,3582,1784],{"class":471},[100,3584,786],{"class":106},[100,3586,3587],{"class":258},"()\n",[100,3589,3590],{"class":102,"line":577},[100,3591,3178],{"class":258},[100,3593,3594,3597,3600,3602,3604],{"class":102,"line":589},[100,3595,3596],{"class":471},"    int",[100,3598,3599],{"class":258}," score",[100,3601,472],{"class":471},[100,3603,1366],{"class":117},[100,3605,2927],{"class":258},[100,3607,3608,3610,3612,3615,3617],{"class":102,"line":595},[100,3609,3183],{"class":258},[100,3611,2810],{"class":471},[100,3613,3614],{"class":110},"\"电影打分：\"",[100,3616,2810],{"class":471},[100,3618,2832],{"class":258},[100,3620,3621,3624,3626],{"class":102,"line":601},[100,3622,3623],{"class":258},"    cin",[100,3625,3062],{"class":471},[100,3627,3628],{"class":258},"score;\n",[100,3630,3631,3634],{"class":102,"line":606},[100,3632,3633],{"class":471},"    switch",[100,3635,3636],{"class":258},"(score)\n",[100,3638,3639],{"class":102,"line":612},[100,3640,3641],{"class":258},"    {\n",[100,3643,3644,3647,3650,3653,3655,3658,3660,3662,3665],{"class":102,"line":618},[100,3645,3646],{"class":471},"        case",[100,3648,3649],{"class":117}," 10",[100,3651,3652],{"class":258},":cout",[100,3654,2810],{"class":471},[100,3656,3657],{"class":110},"\"经典\"",[100,3659,2810],{"class":471},[100,3661,2875],{"class":258},[100,3663,3664],{"class":471},"break",[100,3666,2927],{"class":258},[100,3668,3669,3671,3674,3676,3678,3680,3682,3684,3686],{"class":102,"line":623},[100,3670,3646],{"class":471},[100,3672,3673],{"class":117}," 9",[100,3675,3652],{"class":258},[100,3677,2810],{"class":471},[100,3679,3657],{"class":110},[100,3681,2810],{"class":471},[100,3683,2875],{"class":258},[100,3685,3664],{"class":471},[100,3687,2927],{"class":258},[100,3689,3690,3692,3695,3697,3699,3702,3704,3706,3708],{"class":102,"line":629},[100,3691,3646],{"class":471},[100,3693,3694],{"class":117}," 8",[100,3696,3652],{"class":258},[100,3698,2810],{"class":471},[100,3700,3701],{"class":110},"\"非常好\"",[100,3703,2810],{"class":471},[100,3705,2875],{"class":258},[100,3707,3664],{"class":471},[100,3709,2927],{"class":258},[100,3711,3712,3714,3717,3719,3721,3723,3725,3727,3729],{"class":102,"line":635},[100,3713,3646],{"class":471},[100,3715,3716],{"class":117}," 7",[100,3718,3652],{"class":258},[100,3720,2810],{"class":471},[100,3722,3701],{"class":110},[100,3724,2810],{"class":471},[100,3726,2875],{"class":258},[100,3728,3664],{"class":471},[100,3730,2927],{"class":258},[100,3732,3733,3735,3738,3740,3742,3745,3747,3749,3751],{"class":102,"line":641},[100,3734,3646],{"class":471},[100,3736,3737],{"class":117}," 6",[100,3739,3652],{"class":258},[100,3741,2810],{"class":471},[100,3743,3744],{"class":110},"\"一般\"",[100,3746,2810],{"class":471},[100,3748,2875],{"class":258},[100,3750,3664],{"class":471},[100,3752,2927],{"class":258},[100,3754,3755,3757,3760,3762,3764,3766,3768,3770,3772],{"class":102,"line":647},[100,3756,3646],{"class":471},[100,3758,3759],{"class":117}," 5",[100,3761,3652],{"class":258},[100,3763,2810],{"class":471},[100,3765,3744],{"class":110},[100,3767,2810],{"class":471},[100,3769,2875],{"class":258},[100,3771,3664],{"class":471},[100,3773,2927],{"class":258},[100,3775,3776,3779,3781,3783,3786,3788,3790,3792],{"class":102,"line":653},[100,3777,3778],{"class":471},"        default",[100,3780,3652],{"class":258},[100,3782,2810],{"class":471},[100,3784,3785],{"class":110},"\"烂片\"",[100,3787,2810],{"class":471},[100,3789,2875],{"class":258},[100,3791,3664],{"class":471},[100,3793,2927],{"class":258},[100,3795,3796],{"class":102,"line":659},[100,3797,3798],{"class":258},"    }\n",[100,3800,3801],{"class":102,"line":665},[100,3802,3197],{"class":258},[19,3804,3805],{},"if和switch区别：",[2773,3807,3808,3811],{},[29,3809,3810],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[29,3812,3813],{},"switch优点：结构清晰，执行效率高",[305,3815,3817],{"id":3816},"_162循环结构","1.6.2循环结构",[26,3819,3820],{},[29,3821,3822],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[73,3824,3826],{"className":1770,"code":3825,"language":1772,"meta":79,"style":79},"\u002F\u002F打印0-9数字\nint main()\n{\n    int num=0;\n    while(num\u003C10)\n    {\n       std::cout\u003C\u003Cnum\u003C\u003Cstd::endl;\n        num++;\n    }\n    system(\"pause\")\n}\n",[32,3827,3828,3833,3841,3845,3858,3872,3876,3896,3906,3910,3922],{"__ignoreMap":79},[100,3829,3830],{"class":102,"line":103},[100,3831,3832],{"class":1836},"\u002F\u002F打印0-9数字\n",[100,3834,3835,3837,3839],{"class":102,"line":188},[100,3836,1784],{"class":471},[100,3838,786],{"class":106},[100,3840,3587],{"class":258},[100,3842,3843],{"class":102,"line":199},[100,3844,3178],{"class":258},[100,3846,3847,3849,3852,3854,3856],{"class":102,"line":532},[100,3848,3596],{"class":471},[100,3850,3851],{"class":258}," num",[100,3853,472],{"class":471},[100,3855,1366],{"class":117},[100,3857,2927],{"class":258},[100,3859,3860,3863,3866,3868,3870],{"class":102,"line":577},[100,3861,3862],{"class":471},"    while",[100,3864,3865],{"class":258},"(num",[100,3867,2676],{"class":471},[100,3869,2213],{"class":117},[100,3871,809],{"class":258},[100,3873,3874],{"class":102,"line":589},[100,3875,3641],{"class":258},[100,3877,3878,3881,3884,3886,3888,3890,3893],{"class":102,"line":595},[100,3879,3880],{"class":106},"       std",[100,3882,3883],{"class":258},"::cout",[100,3885,2810],{"class":471},[100,3887,3290],{"class":258},[100,3889,2810],{"class":471},[100,3891,3892],{"class":106},"std",[100,3894,3895],{"class":258},"::endl;\n",[100,3897,3898,3901,3904],{"class":102,"line":601},[100,3899,3900],{"class":258},"        num",[100,3902,3903],{"class":471},"++",[100,3905,2927],{"class":258},[100,3907,3908],{"class":102,"line":606},[100,3909,3798],{"class":258},[100,3911,3912,3915,3917,3920],{"class":102,"line":612},[100,3913,3914],{"class":106},"    system",[100,3916,713],{"class":258},[100,3918,3919],{"class":110},"\"pause\"",[100,3921,809],{"class":258},[100,3923,3924],{"class":102,"line":618},[100,3925,3197],{"class":258},[19,3927,3928],{},"注意：写好循环条件，避免死循环情况",[73,3930,3932],{"className":1770,"code":3931,"language":1772,"meta":79,"style":79},"\u002F\u002F循环结构-猜数字\n#include \u003Ciostream>\n#include \u003Cctime>\nusing namespace std;\nint main()\n{\n    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n    srand((unsigned int)time(NULL));\n\n    \u002F\u002F1.系统生成随机数\n    \u002F\u002Frand()%100 \u002F\u002F生成0-99的随机数\n    int num=rand()%100+1; \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n    \u002F\u002F2.玩家猜测\n    int val=0;\n    while (1)\n    {\n        cin>>val;\n        \u002F\u002F3.判断玩家猜测\n        if(val\u003Cnum) \n        {\n            cout\u003C\u003C\"猜小了！\"\u003C\u003Cendl;\n        }\n        else if (val>num)\n        {\n            cout\u003C\u003C\"猜大了！\"\u003C\u003Cendl;\n        }\n        else\n        {\n            cout\u003C\u003C\"猜对了！\"\u003C\u003Cendl;\n            break;\n        }\n        \u002F\u002F猜对 退出游戏\n        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n    }\n}\n",[32,3933,3934,3939,3946,3953,3963,3971,3975,3980,4006,4010,4015,4023,4050,4055,4060,4073,4083,4087,4097,4102,4115,4120,4134,4139,4154,4158,4171,4175,4180,4184,4197,4204,4208,4213,4218,4222],{"__ignoreMap":79},[100,3935,3936],{"class":102,"line":103},[100,3937,3938],{"class":1836},"\u002F\u002F循环结构-猜数字\n",[100,3940,3941,3943],{"class":102,"line":188},[100,3942,3562],{"class":471},[100,3944,3945],{"class":110}," \u003Ciostream>\n",[100,3947,3948,3950],{"class":102,"line":199},[100,3949,3562],{"class":471},[100,3951,3952],{"class":110}," \u003Cctime>\n",[100,3954,3955,3957,3959,3961],{"class":102,"line":532},[100,3956,3570],{"class":471},[100,3958,3573],{"class":471},[100,3960,3576],{"class":106},[100,3962,2927],{"class":258},[100,3964,3965,3967,3969],{"class":102,"line":577},[100,3966,1784],{"class":471},[100,3968,786],{"class":106},[100,3970,3587],{"class":258},[100,3972,3973],{"class":102,"line":589},[100,3974,3178],{"class":258},[100,3976,3977],{"class":102,"line":595},[100,3978,3979],{"class":1836},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[100,3981,3982,3985,3988,3991,3994,3996,3998,4000,4003],{"class":102,"line":601},[100,3983,3984],{"class":106},"    srand",[100,3986,3987],{"class":258},"((",[100,3989,3990],{"class":471},"unsigned",[100,3992,3993],{"class":471}," int",[100,3995,2196],{"class":258},[100,3997,1398],{"class":106},[100,3999,713],{"class":258},[100,4001,4002],{"class":117},"NULL",[100,4004,4005],{"class":258},"));\n",[100,4007,4008],{"class":102,"line":606},[100,4009,570],{"emptyLinePlaceholder":569},[100,4011,4012],{"class":102,"line":612},[100,4013,4014],{"class":1836},"    \u002F\u002F1.系统生成随机数\n",[100,4016,4017,4020],{"class":102,"line":618},[100,4018,4019],{"class":1836},"    \u002F\u002Frand()%100",[100,4021,4022],{"class":1836}," \u002F\u002F生成0-99的随机数\n",[100,4024,4025,4027,4029,4031,4034,4037,4039,4041,4043,4045,4047],{"class":102,"line":623},[100,4026,3596],{"class":471},[100,4028,3851],{"class":258},[100,4030,472],{"class":471},[100,4032,4033],{"class":106},"rand",[100,4035,4036],{"class":258},"()",[100,4038,2095],{"class":471},[100,4040,2078],{"class":117},[100,4042,2248],{"class":471},[100,4044,1985],{"class":117},[100,4046,1833],{"class":258},[100,4048,4049],{"class":1836}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[100,4051,4052],{"class":102,"line":629},[100,4053,4054],{"class":1836},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[100,4056,4057],{"class":102,"line":635},[100,4058,4059],{"class":1836},"    \u002F\u002F2.玩家猜测\n",[100,4061,4062,4064,4067,4069,4071],{"class":102,"line":641},[100,4063,3596],{"class":471},[100,4065,4066],{"class":258}," val",[100,4068,472],{"class":471},[100,4070,1366],{"class":117},[100,4072,2927],{"class":258},[100,4074,4075,4077,4079,4081],{"class":102,"line":647},[100,4076,3862],{"class":471},[100,4078,3283],{"class":258},[100,4080,1985],{"class":117},[100,4082,809],{"class":258},[100,4084,4085],{"class":102,"line":653},[100,4086,3641],{"class":258},[100,4088,4089,4092,4094],{"class":102,"line":659},[100,4090,4091],{"class":258},"        cin",[100,4093,3062],{"class":471},[100,4095,4096],{"class":258},"val;\n",[100,4098,4099],{"class":102,"line":665},[100,4100,4101],{"class":1836},"        \u002F\u002F3.判断玩家猜测\n",[100,4103,4104,4107,4110,4112],{"class":102,"line":670},[100,4105,4106],{"class":471},"        if",[100,4108,4109],{"class":258},"(val",[100,4111,2676],{"class":471},[100,4113,4114],{"class":258},"num) \n",[100,4116,4117],{"class":102,"line":675},[100,4118,4119],{"class":258},"        {\n",[100,4121,4122,4125,4127,4130,4132],{"class":102,"line":699},[100,4123,4124],{"class":258},"            cout",[100,4126,2810],{"class":471},[100,4128,4129],{"class":110},"\"猜小了！\"",[100,4131,2810],{"class":471},[100,4133,2832],{"class":258},[100,4135,4136],{"class":102,"line":708},[100,4137,4138],{"class":258},"        }\n",[100,4140,4141,4144,4146,4149,4151],{"class":102,"line":722},[100,4142,4143],{"class":471},"        else",[100,4145,3325],{"class":471},[100,4147,4148],{"class":258}," (val",[100,4150,2726],{"class":471},[100,4152,4153],{"class":258},"num)\n",[100,4155,4156],{"class":102,"line":735},[100,4157,4119],{"class":258},[100,4159,4160,4162,4164,4167,4169],{"class":102,"line":754},[100,4161,4124],{"class":258},[100,4163,2810],{"class":471},[100,4165,4166],{"class":110},"\"猜大了！\"",[100,4168,2810],{"class":471},[100,4170,2832],{"class":258},[100,4172,4173],{"class":102,"line":771},[100,4174,4138],{"class":258},[100,4176,4177],{"class":102,"line":776},[100,4178,4179],{"class":471},"        else\n",[100,4181,4182],{"class":102,"line":781},[100,4183,4119],{"class":258},[100,4185,4186,4188,4190,4193,4195],{"class":102,"line":796},[100,4187,4124],{"class":258},[100,4189,2810],{"class":471},[100,4191,4192],{"class":110},"\"猜对了！\"",[100,4194,2810],{"class":471},[100,4196,2832],{"class":258},[100,4198,4199,4202],{"class":102,"line":812},[100,4200,4201],{"class":471},"            break",[100,4203,2927],{"class":258},[100,4205,4206],{"class":102,"line":823},[100,4207,4138],{"class":258},[100,4209,4210],{"class":102,"line":828},[100,4211,4212],{"class":1836},"        \u002F\u002F猜对 退出游戏\n",[100,4214,4215],{"class":102,"line":840},[100,4216,4217],{"class":1836},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[100,4219,4220],{"class":102,"line":845},[100,4221,3798],{"class":258},[100,4223,4224],{"class":102,"line":868},[100,4225,3197],{"class":258},[26,4227,4228],{"start":188},[29,4229,4230,4231,4234],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[1921,4232,4233],{},"do...while会先执行一次循环语句","，在判断循环语句",[73,4236,4238],{"className":1770,"code":4237,"language":1772,"meta":79,"style":79},"\u002F\u002F在屏幕中输出0-9这10个数字\nint main()\n{\n    int num=0;\n    do \n    {\n        std::cout\u003C\u003Cnum\u003C\u003Cstd::endl;\n        num++\n    }\n    while(num\u003C10);\n    system(\"pause\");\n}\n",[32,4239,4240,4245,4253,4257,4269,4277,4281,4298,4305,4309,4322,4332],{"__ignoreMap":79},[100,4241,4242],{"class":102,"line":103},[100,4243,4244],{"class":1836},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[100,4246,4247,4249,4251],{"class":102,"line":188},[100,4248,1784],{"class":471},[100,4250,786],{"class":106},[100,4252,3587],{"class":258},[100,4254,4255],{"class":102,"line":199},[100,4256,3178],{"class":258},[100,4258,4259,4261,4263,4265,4267],{"class":102,"line":532},[100,4260,3596],{"class":471},[100,4262,3851],{"class":258},[100,4264,472],{"class":471},[100,4266,1366],{"class":117},[100,4268,2927],{"class":258},[100,4270,4271,4274],{"class":102,"line":577},[100,4272,4273],{"class":471},"    do",[100,4275,4276],{"class":258}," \n",[100,4278,4279],{"class":102,"line":589},[100,4280,3641],{"class":258},[100,4282,4283,4286,4288,4290,4292,4294,4296],{"class":102,"line":595},[100,4284,4285],{"class":106},"        std",[100,4287,3883],{"class":258},[100,4289,2810],{"class":471},[100,4291,3290],{"class":258},[100,4293,2810],{"class":471},[100,4295,3892],{"class":106},[100,4297,3895],{"class":258},[100,4299,4300,4302],{"class":102,"line":601},[100,4301,3900],{"class":258},[100,4303,4304],{"class":471},"++\n",[100,4306,4307],{"class":102,"line":606},[100,4308,3798],{"class":258},[100,4310,4311,4313,4315,4317,4319],{"class":102,"line":612},[100,4312,3862],{"class":471},[100,4314,3865],{"class":258},[100,4316,2676],{"class":471},[100,4318,2213],{"class":117},[100,4320,4321],{"class":258},");\n",[100,4323,4324,4326,4328,4330],{"class":102,"line":618},[100,4325,3914],{"class":106},[100,4327,713],{"class":258},[100,4329,3919],{"class":110},[100,4331,4321],{"class":258},[100,4333,4334],{"class":102,"line":623},[100,4335,3197],{"class":258},[19,4337,4338],{},"案例-水仙花数",[19,4340,4341],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,4343,4344],{},"例如：1^3+5^3+3^3=153",[19,4346,4347],{},"请用do...while语句，求出所有3位数的水仙花数",[73,4349,4351],{"className":1770,"code":4350,"language":1772,"meta":79,"style":79},"#include \u003Ciostream>\nusing namespace std;\nint main()\n{\n    \u002F\u002F1.先打印所有三位数字\n    int num=100;\n    do \n    {\n        \u002F\u002F2.从所有三位数字中找到水仙花数\n        int a=0; \u002F\u002F个位\n        int b=0; \u002F\u002F十位\n        int c=0; \u002F\u002F百位\n        a=num%10;\n        b=num\u002F10%10;\n        c=num\u002F100;\n        if(a*a*a+b*b*b+c*c*c == num) \u002F\u002F如果是水仙花数，才打印\n        {\n            cout\u003C\u003Cnum\u003C\u003Cendl;\n        }\n        num++;\n    }\n    while (num \u003C 1000);\n}\n",[32,4352,4353,4359,4369,4377,4381,4386,4398,4404,4408,4413,4429,4445,4461,4476,4495,4510,4558,4562,4574,4578,4586,4590,4604],{"__ignoreMap":79},[100,4354,4355,4357],{"class":102,"line":103},[100,4356,3562],{"class":471},[100,4358,3945],{"class":110},[100,4360,4361,4363,4365,4367],{"class":102,"line":188},[100,4362,3570],{"class":471},[100,4364,3573],{"class":471},[100,4366,3576],{"class":106},[100,4368,2927],{"class":258},[100,4370,4371,4373,4375],{"class":102,"line":199},[100,4372,1784],{"class":471},[100,4374,786],{"class":106},[100,4376,3587],{"class":258},[100,4378,4379],{"class":102,"line":532},[100,4380,3178],{"class":258},[100,4382,4383],{"class":102,"line":577},[100,4384,4385],{"class":1836},"    \u002F\u002F1.先打印所有三位数字\n",[100,4387,4388,4390,4392,4394,4396],{"class":102,"line":589},[100,4389,3596],{"class":471},[100,4391,3851],{"class":258},[100,4393,472],{"class":471},[100,4395,2078],{"class":117},[100,4397,2927],{"class":258},[100,4399,4400,4402],{"class":102,"line":595},[100,4401,4273],{"class":471},[100,4403,4276],{"class":258},[100,4405,4406],{"class":102,"line":601},[100,4407,3641],{"class":258},[100,4409,4410],{"class":102,"line":606},[100,4411,4412],{"class":1836},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[100,4414,4415,4418,4420,4422,4424,4426],{"class":102,"line":612},[100,4416,4417],{"class":471},"        int",[100,4419,3031],{"class":258},[100,4421,472],{"class":471},[100,4423,1366],{"class":117},[100,4425,1833],{"class":258},[100,4427,4428],{"class":1836}," \u002F\u002F个位\n",[100,4430,4431,4433,4436,4438,4440,4442],{"class":102,"line":618},[100,4432,4417],{"class":471},[100,4434,4435],{"class":258}," b",[100,4437,472],{"class":471},[100,4439,1366],{"class":117},[100,4441,1833],{"class":258},[100,4443,4444],{"class":1836}," \u002F\u002F十位\n",[100,4446,4447,4449,4452,4454,4456,4458],{"class":102,"line":623},[100,4448,4417],{"class":471},[100,4450,4451],{"class":258}," c",[100,4453,472],{"class":471},[100,4455,1366],{"class":117},[100,4457,1833],{"class":258},[100,4459,4460],{"class":1836}," \u002F\u002F百位\n",[100,4462,4463,4466,4468,4470,4472,4474],{"class":102,"line":629},[100,4464,4465],{"class":258},"        a",[100,4467,472],{"class":471},[100,4469,3290],{"class":258},[100,4471,2095],{"class":471},[100,4473,2213],{"class":117},[100,4475,2927],{"class":258},[100,4477,4478,4481,4483,4485,4487,4489,4491,4493],{"class":102,"line":635},[100,4479,4480],{"class":258},"        b",[100,4482,472],{"class":471},[100,4484,3290],{"class":258},[100,4486,2351],{"class":471},[100,4488,2213],{"class":117},[100,4490,2095],{"class":471},[100,4492,2213],{"class":117},[100,4494,2927],{"class":258},[100,4496,4497,4500,4502,4504,4506,4508],{"class":102,"line":641},[100,4498,4499],{"class":258},"        c",[100,4501,472],{"class":471},[100,4503,3290],{"class":258},[100,4505,2351],{"class":471},[100,4507,2078],{"class":117},[100,4509,2927],{"class":258},[100,4511,4512,4514,4516,4518,4520,4522,4524,4526,4528,4530,4532,4534,4536,4538,4540,4542,4544,4546,4549,4552,4555],{"class":102,"line":647},[100,4513,4106],{"class":471},[100,4515,3454],{"class":258},[100,4517,2222],{"class":471},[100,4519,2006],{"class":258},[100,4521,2222],{"class":471},[100,4523,2006],{"class":258},[100,4525,2248],{"class":471},[100,4527,2031],{"class":258},[100,4529,2222],{"class":471},[100,4531,2031],{"class":258},[100,4533,2222],{"class":471},[100,4535,2031],{"class":258},[100,4537,2248],{"class":471},[100,4539,2056],{"class":258},[100,4541,2222],{"class":471},[100,4543,2056],{"class":258},[100,4545,2222],{"class":471},[100,4547,4548],{"class":258},"c ",[100,4550,4551],{"class":471},"==",[100,4553,4554],{"class":258}," num)",[100,4556,4557],{"class":1836}," \u002F\u002F如果是水仙花数，才打印\n",[100,4559,4560],{"class":102,"line":653},[100,4561,4119],{"class":258},[100,4563,4564,4566,4568,4570,4572],{"class":102,"line":659},[100,4565,4124],{"class":258},[100,4567,2810],{"class":471},[100,4569,3290],{"class":258},[100,4571,2810],{"class":471},[100,4573,2832],{"class":258},[100,4575,4576],{"class":102,"line":665},[100,4577,4138],{"class":258},[100,4579,4580,4582,4584],{"class":102,"line":670},[100,4581,3900],{"class":258},[100,4583,3903],{"class":471},[100,4585,2927],{"class":258},[100,4587,4588],{"class":102,"line":675},[100,4589,3798],{"class":258},[100,4591,4592,4594,4597,4599,4602],{"class":102,"line":699},[100,4593,3862],{"class":471},[100,4595,4596],{"class":258}," (num ",[100,4598,2676],{"class":471},[100,4600,4601],{"class":117}," 1000",[100,4603,4321],{"class":258},[100,4605,4606],{"class":102,"line":708},[100,4607,3197],{"class":258},[26,4609,4610],{"start":199},[29,4611,4612],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[73,4614,4616],{"className":1770,"code":4615,"language":1772,"meta":79,"style":79},"\u002F\u002F从数字0-9打印\nfor(int i=0;i\u003C10;i++)\n{\n    cout\u003C\u003Ci\u003C\u003Cendl;\n}\n\u002F\u002F上式可以进行拆分\nint i=0\nfor(;;;)\n{\n    if(i>=10)\n    {\n        break;\n    }\n    cout\u003C\u003Ci\u003C\u003Cendl;\n    i++;\n}\n",[32,4617,4618,4623,4651,4655,4667,4671,4676,4687,4694,4698,4712,4716,4723,4727,4739,4748],{"__ignoreMap":79},[100,4619,4620],{"class":102,"line":103},[100,4621,4622],{"class":1836},"\u002F\u002F从数字0-9打印\n",[100,4624,4625,4627,4629,4631,4634,4636,4638,4641,4643,4645,4647,4649],{"class":102,"line":188},[100,4626,1051],{"class":471},[100,4628,713],{"class":258},[100,4630,1784],{"class":471},[100,4632,4633],{"class":258}," i",[100,4635,472],{"class":471},[100,4637,1366],{"class":117},[100,4639,4640],{"class":258},";i",[100,4642,2676],{"class":471},[100,4644,2213],{"class":117},[100,4646,4640],{"class":258},[100,4648,3903],{"class":471},[100,4650,809],{"class":258},[100,4652,4653],{"class":102,"line":199},[100,4654,3178],{"class":258},[100,4656,4657,4659,4661,4663,4665],{"class":102,"line":532},[100,4658,3183],{"class":258},[100,4660,2810],{"class":471},[100,4662,2208],{"class":258},[100,4664,2810],{"class":471},[100,4666,2832],{"class":258},[100,4668,4669],{"class":102,"line":577},[100,4670,3197],{"class":258},[100,4672,4673],{"class":102,"line":589},[100,4674,4675],{"class":1836},"\u002F\u002F上式可以进行拆分\n",[100,4677,4678,4680,4682,4684],{"class":102,"line":595},[100,4679,1784],{"class":471},[100,4681,4633],{"class":258},[100,4683,472],{"class":471},[100,4685,4686],{"class":117},"0\n",[100,4688,4689,4691],{"class":102,"line":601},[100,4690,1051],{"class":471},[100,4692,4693],{"class":258},"(;;;)\n",[100,4695,4696],{"class":102,"line":606},[100,4697,3178],{"class":258},[100,4699,4700,4703,4706,4708,4710],{"class":102,"line":612},[100,4701,4702],{"class":471},"    if",[100,4704,4705],{"class":258},"(i",[100,4707,3331],{"class":471},[100,4709,2213],{"class":117},[100,4711,809],{"class":258},[100,4713,4714],{"class":102,"line":618},[100,4715,3641],{"class":258},[100,4717,4718,4721],{"class":102,"line":623},[100,4719,4720],{"class":471},"        break",[100,4722,2927],{"class":258},[100,4724,4725],{"class":102,"line":629},[100,4726,3798],{"class":258},[100,4728,4729,4731,4733,4735,4737],{"class":102,"line":635},[100,4730,3183],{"class":258},[100,4732,2810],{"class":471},[100,4734,2208],{"class":258},[100,4736,2810],{"class":471},[100,4738,2832],{"class":258},[100,4740,4741,4744,4746],{"class":102,"line":641},[100,4742,4743],{"class":258},"    i",[100,4745,3903],{"class":471},[100,4747,2927],{"class":258},[100,4749,4750],{"class":102,"line":647},[100,4751,3197],{"class":258},[19,4753,4754],{},"小练习",[73,4756,4758],{"className":1770,"code":4757,"language":1772,"meta":79,"style":79},"#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    \u002F\u002F敲桌子案例\n    \u002F\u002F1.先输出1-100的数字\n    for(int i=1; i\u003C=100; i++)\n    {\n        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n        if(i%7==0 || i%10==7 || i\u002F10==7)\n        {\n            cout\u003C\u003C\"敲桌子\"\u003C\u003Cendl;\n        }\n        else\n        {\n            cout\u003C\u003Ci\u003C\u003Cendl;\n        }\n    }\n}\n",[32,4759,4760,4766,4776,4784,4788,4793,4798,4825,4829,4834,4839,4880,4884,4897,4901,4905,4909,4921,4925,4929],{"__ignoreMap":79},[100,4761,4762,4764],{"class":102,"line":103},[100,4763,3562],{"class":471},[100,4765,3565],{"class":110},[100,4767,4768,4770,4772,4774],{"class":102,"line":188},[100,4769,3570],{"class":471},[100,4771,3573],{"class":471},[100,4773,3576],{"class":106},[100,4775,2927],{"class":258},[100,4777,4778,4780,4782],{"class":102,"line":199},[100,4779,1784],{"class":471},[100,4781,786],{"class":106},[100,4783,3587],{"class":258},[100,4785,4786],{"class":102,"line":532},[100,4787,3178],{"class":258},[100,4789,4790],{"class":102,"line":577},[100,4791,4792],{"class":1836},"    \u002F\u002F敲桌子案例\n",[100,4794,4795],{"class":102,"line":589},[100,4796,4797],{"class":1836},"    \u002F\u002F1.先输出1-100的数字\n",[100,4799,4800,4802,4804,4806,4808,4810,4812,4815,4817,4819,4821,4823],{"class":102,"line":595},[100,4801,848],{"class":471},[100,4803,713],{"class":258},[100,4805,1784],{"class":471},[100,4807,4633],{"class":258},[100,4809,472],{"class":471},[100,4811,1985],{"class":117},[100,4813,4814],{"class":258},"; i",[100,4816,3220],{"class":471},[100,4818,2078],{"class":117},[100,4820,4814],{"class":258},[100,4822,3903],{"class":471},[100,4824,809],{"class":258},[100,4826,4827],{"class":102,"line":601},[100,4828,3641],{"class":258},[100,4830,4831],{"class":102,"line":606},[100,4832,4833],{"class":1836},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[100,4835,4836],{"class":102,"line":612},[100,4837,4838],{"class":1836},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[100,4840,4841,4843,4845,4847,4849,4851,4853,4856,4858,4860,4862,4864,4866,4868,4870,4872,4874,4876,4878],{"class":102,"line":618},[100,4842,4106],{"class":471},[100,4844,4705],{"class":258},[100,4846,2095],{"class":471},[100,4848,2136],{"class":117},[100,4850,4551],{"class":471},[100,4852,1366],{"class":117},[100,4854,4855],{"class":471}," ||",[100,4857,4633],{"class":258},[100,4859,2095],{"class":471},[100,4861,2213],{"class":117},[100,4863,4551],{"class":471},[100,4865,2136],{"class":117},[100,4867,4855],{"class":471},[100,4869,4633],{"class":258},[100,4871,2351],{"class":471},[100,4873,2213],{"class":117},[100,4875,4551],{"class":471},[100,4877,2136],{"class":117},[100,4879,809],{"class":258},[100,4881,4882],{"class":102,"line":623},[100,4883,4119],{"class":258},[100,4885,4886,4888,4890,4893,4895],{"class":102,"line":629},[100,4887,4124],{"class":258},[100,4889,2810],{"class":471},[100,4891,4892],{"class":110},"\"敲桌子\"",[100,4894,2810],{"class":471},[100,4896,2832],{"class":258},[100,4898,4899],{"class":102,"line":635},[100,4900,4138],{"class":258},[100,4902,4903],{"class":102,"line":641},[100,4904,4179],{"class":471},[100,4906,4907],{"class":102,"line":647},[100,4908,4119],{"class":258},[100,4910,4911,4913,4915,4917,4919],{"class":102,"line":653},[100,4912,4124],{"class":258},[100,4914,2810],{"class":471},[100,4916,2208],{"class":258},[100,4918,2810],{"class":471},[100,4920,2832],{"class":258},[100,4922,4923],{"class":102,"line":659},[100,4924,4138],{"class":258},[100,4926,4927],{"class":102,"line":665},[100,4928,3798],{"class":258},[100,4930,4931],{"class":102,"line":670},[100,4932,3197],{"class":258},[19,4934,4935],{},"嵌套实现星图",[73,4937,4939],{"className":1770,"code":4938,"language":1772,"meta":79,"style":79},"#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    for (int i=0;i\u003C10;i++)\n    {\n        for (int j=0;j\u003C10;j++)\n        {\n            cout\u003C\u003C\"*\";\n        }\n        cout\u003C\u003Cendl;\n    }\n}\n",[32,4940,4941,4947,4957,4965,4969,4995,4999,5028,5032,5043,5047,5056,5060],{"__ignoreMap":79},[100,4942,4943,4945],{"class":102,"line":103},[100,4944,3562],{"class":471},[100,4946,3565],{"class":110},[100,4948,4949,4951,4953,4955],{"class":102,"line":188},[100,4950,3570],{"class":471},[100,4952,3573],{"class":471},[100,4954,3576],{"class":106},[100,4956,2927],{"class":258},[100,4958,4959,4961,4963],{"class":102,"line":199},[100,4960,1784],{"class":471},[100,4962,786],{"class":106},[100,4964,3587],{"class":258},[100,4966,4967],{"class":102,"line":532},[100,4968,3178],{"class":258},[100,4970,4971,4973,4975,4977,4979,4981,4983,4985,4987,4989,4991,4993],{"class":102,"line":577},[100,4972,848],{"class":471},[100,4974,3283],{"class":258},[100,4976,1784],{"class":471},[100,4978,4633],{"class":258},[100,4980,472],{"class":471},[100,4982,1366],{"class":117},[100,4984,4640],{"class":258},[100,4986,2676],{"class":471},[100,4988,2213],{"class":117},[100,4990,4640],{"class":258},[100,4992,3903],{"class":471},[100,4994,809],{"class":258},[100,4996,4997],{"class":102,"line":589},[100,4998,3641],{"class":258},[100,5000,5001,5004,5006,5008,5011,5013,5015,5018,5020,5022,5024,5026],{"class":102,"line":595},[100,5002,5003],{"class":471},"        for",[100,5005,3283],{"class":258},[100,5007,1784],{"class":471},[100,5009,5010],{"class":258}," j",[100,5012,472],{"class":471},[100,5014,1366],{"class":117},[100,5016,5017],{"class":258},";j",[100,5019,2676],{"class":471},[100,5021,2213],{"class":117},[100,5023,5017],{"class":258},[100,5025,3903],{"class":471},[100,5027,809],{"class":258},[100,5029,5030],{"class":102,"line":601},[100,5031,4119],{"class":258},[100,5033,5034,5036,5038,5041],{"class":102,"line":606},[100,5035,4124],{"class":258},[100,5037,2810],{"class":471},[100,5039,5040],{"class":110},"\"*\"",[100,5042,2927],{"class":258},[100,5044,5045],{"class":102,"line":612},[100,5046,4138],{"class":258},[100,5048,5049,5052,5054],{"class":102,"line":618},[100,5050,5051],{"class":258},"        cout",[100,5053,2810],{"class":471},[100,5055,2832],{"class":258},[100,5057,5058],{"class":102,"line":623},[100,5059,3798],{"class":258},[100,5061,5062],{"class":102,"line":629},[100,5063,3197],{"class":258},[19,5065,5066],{},"乘法口诀表",[73,5068,5070],{"className":1770,"code":5069,"language":1772,"meta":79,"style":79},"#include \u003Ciostream>\nusing namespace std;\nint main()\n{\n    for(int i=1;i\u003C10;i++)\n    {\n        for(int j=1;j\u003C=i;j++)\n        {\n            cout\u003C\u003Cj\u003C\u003C\"*\"\u003C\u003Ci\u003C\u003C\"=\"\u003C\u003Ci*j\u003C\u003C'\\t';\n        }\n        cout\u003C\u003Cendl;\n    }\n} \n",[32,5071,5072,5078,5088,5096,5100,5126,5130,5155,5159,5199,5203,5211,5215],{"__ignoreMap":79},[100,5073,5074,5076],{"class":102,"line":103},[100,5075,3562],{"class":471},[100,5077,3945],{"class":110},[100,5079,5080,5082,5084,5086],{"class":102,"line":188},[100,5081,3570],{"class":471},[100,5083,3573],{"class":471},[100,5085,3576],{"class":106},[100,5087,2927],{"class":258},[100,5089,5090,5092,5094],{"class":102,"line":199},[100,5091,1784],{"class":471},[100,5093,786],{"class":106},[100,5095,3587],{"class":258},[100,5097,5098],{"class":102,"line":532},[100,5099,3178],{"class":258},[100,5101,5102,5104,5106,5108,5110,5112,5114,5116,5118,5120,5122,5124],{"class":102,"line":577},[100,5103,848],{"class":471},[100,5105,713],{"class":258},[100,5107,1784],{"class":471},[100,5109,4633],{"class":258},[100,5111,472],{"class":471},[100,5113,1985],{"class":117},[100,5115,4640],{"class":258},[100,5117,2676],{"class":471},[100,5119,2213],{"class":117},[100,5121,4640],{"class":258},[100,5123,3903],{"class":471},[100,5125,809],{"class":258},[100,5127,5128],{"class":102,"line":589},[100,5129,3641],{"class":258},[100,5131,5132,5134,5136,5138,5140,5142,5144,5146,5148,5151,5153],{"class":102,"line":595},[100,5133,5003],{"class":471},[100,5135,713],{"class":258},[100,5137,1784],{"class":471},[100,5139,5010],{"class":258},[100,5141,472],{"class":471},[100,5143,1985],{"class":117},[100,5145,5017],{"class":258},[100,5147,3220],{"class":471},[100,5149,5150],{"class":258},"i;j",[100,5152,3903],{"class":471},[100,5154,809],{"class":258},[100,5156,5157],{"class":102,"line":601},[100,5158,4119],{"class":258},[100,5160,5161,5163,5165,5167,5169,5171,5173,5175,5177,5180,5182,5184,5186,5188,5190,5193,5195,5197],{"class":102,"line":606},[100,5162,4124],{"class":258},[100,5164,2810],{"class":471},[100,5166,2234],{"class":258},[100,5168,2810],{"class":471},[100,5170,5040],{"class":110},[100,5172,2810],{"class":471},[100,5174,2208],{"class":258},[100,5176,2810],{"class":471},[100,5178,5179],{"class":110},"\"=\"",[100,5181,2810],{"class":471},[100,5183,2208],{"class":258},[100,5185,2222],{"class":471},[100,5187,2234],{"class":258},[100,5189,2810],{"class":471},[100,5191,5192],{"class":110},"'",[100,5194,2867],{"class":117},[100,5196,5192],{"class":110},[100,5198,2927],{"class":258},[100,5200,5201],{"class":102,"line":612},[100,5202,4138],{"class":258},[100,5204,5205,5207,5209],{"class":102,"line":618},[100,5206,5051],{"class":258},[100,5208,2810],{"class":471},[100,5210,2832],{"class":258},[100,5212,5213],{"class":102,"line":623},[100,5214,3798],{"class":258},[100,5216,5217],{"class":102,"line":629},[100,5218,3197],{"class":258},[305,5220,5222],{"id":5221},"_163跳出语句","1.6.3跳出语句",[26,5224,5225],{},[29,5226,5227],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,5229,5230],{},"break使用时机：",[2773,5232,5233,5236,5239],{},[29,5234,5235],{},"出现在switch条件语句中，作用是终止case并跳出switch",[29,5237,5238],{},"出现在循环结构中，作用是跳出当前的循环结构",[29,5240,5241],{},"出现在嵌套循环中，跳出最近的内层循环语句",[26,5243,5244,5247],{"start":188},[29,5245,5246],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[29,5248,5249],{},"goto语句\n语法：goto 标记;",[19,5251,5252],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[73,5254,5256],{"className":1770,"code":5255,"language":1772,"meta":79,"style":79},"int main()\n{\n    cout\u003C\u003C\"1\"\u003C\u003Cendl;\n    goto FLAG;\n    cout\u003C\u003C\"2\"\u003C\u003Cendl;\n    cout\u003C\u003C\"3\"\u003C\u003Cendl;\n    cout\u003C\u003C\"4\"\u003C\u003Cendl;\n    FLAG:\n    cout\u003C\u003C\"5\"\u003C\u003Cendl;\u002F\u002F跳过了2,3,4,直接到5\n}\n",[32,5257,5258,5266,5270,5283,5293,5306,5319,5332,5339,5355],{"__ignoreMap":79},[100,5259,5260,5262,5264],{"class":102,"line":103},[100,5261,1784],{"class":471},[100,5263,786],{"class":106},[100,5265,3587],{"class":258},[100,5267,5268],{"class":102,"line":188},[100,5269,3178],{"class":258},[100,5271,5272,5274,5276,5279,5281],{"class":102,"line":199},[100,5273,3183],{"class":258},[100,5275,2810],{"class":471},[100,5277,5278],{"class":110},"\"1\"",[100,5280,2810],{"class":471},[100,5282,2832],{"class":258},[100,5284,5285,5288,5291],{"class":102,"line":532},[100,5286,5287],{"class":471},"    goto",[100,5289,5290],{"class":106}," FLAG",[100,5292,2927],{"class":258},[100,5294,5295,5297,5299,5302,5304],{"class":102,"line":577},[100,5296,3183],{"class":258},[100,5298,2810],{"class":471},[100,5300,5301],{"class":110},"\"2\"",[100,5303,2810],{"class":471},[100,5305,2832],{"class":258},[100,5307,5308,5310,5312,5315,5317],{"class":102,"line":589},[100,5309,3183],{"class":258},[100,5311,2810],{"class":471},[100,5313,5314],{"class":110},"\"3\"",[100,5316,2810],{"class":471},[100,5318,2832],{"class":258},[100,5320,5321,5323,5325,5328,5330],{"class":102,"line":595},[100,5322,3183],{"class":258},[100,5324,2810],{"class":471},[100,5326,5327],{"class":110},"\"4\"",[100,5329,2810],{"class":471},[100,5331,2832],{"class":258},[100,5333,5334,5337],{"class":102,"line":601},[100,5335,5336],{"class":106},"    FLAG",[100,5338,696],{"class":258},[100,5340,5341,5343,5345,5348,5350,5352],{"class":102,"line":606},[100,5342,3183],{"class":258},[100,5344,2810],{"class":471},[100,5346,5347],{"class":110},"\"5\"",[100,5349,2810],{"class":471},[100,5351,2875],{"class":258},[100,5353,5354],{"class":1836},"\u002F\u002F跳过了2,3,4,直接到5\n",[100,5356,5357],{"class":102,"line":612},[100,5358,3197],{"class":258},[14,5360,5362],{"id":5361},"_17数组","1.7数组",[305,5364,5366],{"id":5365},"_171一维数组","1.7.1一维数组",[26,5368,5369],{},[29,5370,5371],{},"一维数组定义方式",[319,5373,5374,5384],{},[322,5375,5376],{},[325,5377,5378,5381],{},[328,5379,5380],{},"方式",[328,5382,5383],{},"注意事项",[339,5385,5386,5400,5410],{},[325,5387,5388,5394],{},[344,5389,5390,5391,1833],{},"数据类型 数组名",[100,5392,5393],{},"数组长度",[344,5395,5396,5397,5399],{},"这种方式是先定义再arr",[100,5398,2208],{},"赋值",[325,5401,5402,5407],{},[344,5403,5390,5404,5406],{},[100,5405,5393],{},"={值1,值2....};",[344,5408,5409],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[325,5411,5412,5416],{},[344,5413,5390,5414,5406],{},[100,5415],{},[344,5417,5418,5419,5421],{},"int arr",[100,5420],{},";这是不正确的，按照这样的方式定义必须有初始长度",[26,5423,5424],{"start":188},[29,5425,5426],{},"一维数组数组名\n用途：",[2773,5428,5429],{},[29,5430,5431],{},"1.可以统计整个数组在内存中的长度：",[73,5433,5435],{"className":1770,"code":5434,"language":1772,"meta":79,"style":79},"sizeof(arr);\nsizeof(arr[0]);\n",[32,5436,5437,5444],{"__ignoreMap":79},[100,5438,5439,5441],{"class":102,"line":103},[100,5440,1779],{"class":471},[100,5442,5443],{"class":258},"(arr);\n",[100,5445,5446,5448,5451,5453],{"class":102,"line":188},[100,5447,1779],{"class":471},[100,5449,5450],{"class":258},"(arr[",[100,5452,1366],{"class":117},[100,5454,5455],{"class":258},"]);\n",[2773,5457,5458],{},[29,5459,5460],{},"2.可以获取数组在内存中的首地址:",[73,5462,5464],{"className":1770,"code":5463,"language":1772,"meta":79,"style":79},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[32,5465,5466,5471,5484,5489],{"__ignoreMap":79},[100,5467,5468],{"class":102,"line":103},[100,5469,5470],{"class":1836},"\u002F\u002F查看16进制的首地址\n",[100,5472,5473,5475,5477,5480,5482],{"class":102,"line":188},[100,5474,3002],{"class":258},[100,5476,2810],{"class":471},[100,5478,5479],{"class":258},"arr",[100,5481,2810],{"class":471},[100,5483,2832],{"class":258},[100,5485,5486],{"class":102,"line":199},[100,5487,5488],{"class":1836},"\u002F\u002F看10进制数\n",[100,5490,5491,5493,5495,5497,5499,5501,5503,5506,5508,5510,5512],{"class":102,"line":532},[100,5492,3002],{"class":258},[100,5494,2810],{"class":471},[100,5496,713],{"class":258},[100,5498,1784],{"class":471},[100,5500,2196],{"class":258},[100,5502,2120],{"class":471},[100,5504,5505],{"class":258},"arr[",[100,5507,1366],{"class":117},[100,5509,2706],{"class":258},[100,5511,2810],{"class":471},[100,5513,2832],{"class":258},[19,5515,5516],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[2773,5518,5519],{},[29,5520,5521],{},"1️⃣五只小猪称体重",[73,5523,5525],{"className":1770,"code":5524,"language":1772,"meta":79,"style":79},"#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    int arr[5]={300,350,200,400,250};\n    int tmp=0;\n    for (int i=0;i\u003C5;i++)\n    {\n        if(tmp\u003Carr[i])\n        {\n            tmp=arr[i];\n        }\n    }\n    cout\u003C\u003Ctmp\u003C\u003Cendl;\n    return 0;\n}\n",[32,5526,5527,5533,5543,5551,5555,5595,5608,5634,5638,5650,5654,5664,5668,5672,5685,5695],{"__ignoreMap":79},[100,5528,5529,5531],{"class":102,"line":103},[100,5530,3562],{"class":471},[100,5532,3565],{"class":110},[100,5534,5535,5537,5539,5541],{"class":102,"line":188},[100,5536,3570],{"class":471},[100,5538,3573],{"class":471},[100,5540,3576],{"class":106},[100,5542,2927],{"class":258},[100,5544,5545,5547,5549],{"class":102,"line":199},[100,5546,1784],{"class":471},[100,5548,786],{"class":106},[100,5550,3587],{"class":258},[100,5552,5553],{"class":102,"line":532},[100,5554,3178],{"class":258},[100,5556,5557,5559,5562,5564,5566,5568,5570,5573,5575,5578,5580,5582,5584,5587,5589,5592],{"class":102,"line":577},[100,5558,3596],{"class":471},[100,5560,5561],{"class":258}," arr[",[100,5563,2086],{"class":117},[100,5565,2706],{"class":258},[100,5567,472],{"class":471},[100,5569,2662],{"class":258},[100,5571,5572],{"class":117},"300",[100,5574,2145],{"class":258},[100,5576,5577],{"class":117},"350",[100,5579,2145],{"class":258},[100,5581,3343],{"class":117},[100,5583,2145],{"class":258},[100,5585,5586],{"class":117},"400",[100,5588,2145],{"class":258},[100,5590,5591],{"class":117},"250",[100,5593,5594],{"class":258},"};\n",[100,5596,5597,5599,5602,5604,5606],{"class":102,"line":589},[100,5598,3596],{"class":471},[100,5600,5601],{"class":258}," tmp",[100,5603,472],{"class":471},[100,5605,1366],{"class":117},[100,5607,2927],{"class":258},[100,5609,5610,5612,5614,5616,5618,5620,5622,5624,5626,5628,5630,5632],{"class":102,"line":595},[100,5611,848],{"class":471},[100,5613,3283],{"class":258},[100,5615,1784],{"class":471},[100,5617,4633],{"class":258},[100,5619,472],{"class":471},[100,5621,1366],{"class":117},[100,5623,4640],{"class":258},[100,5625,2676],{"class":471},[100,5627,2086],{"class":117},[100,5629,4640],{"class":258},[100,5631,3903],{"class":471},[100,5633,809],{"class":258},[100,5635,5636],{"class":102,"line":601},[100,5637,3641],{"class":258},[100,5639,5640,5642,5645,5647],{"class":102,"line":606},[100,5641,4106],{"class":471},[100,5643,5644],{"class":258},"(tmp",[100,5646,2676],{"class":471},[100,5648,5649],{"class":258},"arr[i])\n",[100,5651,5652],{"class":102,"line":612},[100,5653,4119],{"class":258},[100,5655,5656,5659,5661],{"class":102,"line":618},[100,5657,5658],{"class":258},"            tmp",[100,5660,472],{"class":471},[100,5662,5663],{"class":258},"arr[i];\n",[100,5665,5666],{"class":102,"line":623},[100,5667,4138],{"class":258},[100,5669,5670],{"class":102,"line":629},[100,5671,3798],{"class":258},[100,5673,5674,5676,5678,5681,5683],{"class":102,"line":635},[100,5675,3183],{"class":258},[100,5677,2810],{"class":471},[100,5679,5680],{"class":258},"tmp",[100,5682,2810],{"class":471},[100,5684,2832],{"class":258},[100,5686,5687,5690,5693],{"class":102,"line":641},[100,5688,5689],{"class":471},"    return",[100,5691,5692],{"class":117}," 0",[100,5694,2927],{"class":258},[100,5696,5697],{"class":102,"line":647},[100,5698,3197],{"class":258},[2773,5700,5701],{},[29,5702,5703],{},"2️⃣数组元素逆置",[73,5705,5707],{"className":1770,"code":5706,"language":1772,"meta":79,"style":79},"\u002F\u002F元素逆置\n#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n   int arr[5]={1,2,3,4,5};\n   int start=0;\u002F\u002F起始下标\n   int end=sizeof(arr)\u002Fsizeof(arr[0])-1;\u002F\u002F结束下标\n   while (start\u003Cend)\n   {\n    \u002F\u002F实现元素互换代码\n    int temp=arr[start];\n    arr[start]=arr[end];\n    arr[end]=temp;\n    \u002F\u002F下标更新\n    start++;\n    end--;\n   }\n   \u002F\u002F输出逆置后的数组\n   for (int i=0;i\u003C5;i++)\n   {\n    cout\u003C\u003Carr[i]\u003C\u003C\" \";\n   }\n   system(\"pause\");\n   return 0;\n}\n",[32,5708,5709,5714,5720,5730,5738,5742,5777,5793,5825,5838,5843,5848,5860,5870,5880,5885,5894,5904,5909,5914,5941,5945,5961,5965,5976,5985],{"__ignoreMap":79},[100,5710,5711],{"class":102,"line":103},[100,5712,5713],{"class":1836},"\u002F\u002F元素逆置\n",[100,5715,5716,5718],{"class":102,"line":188},[100,5717,3562],{"class":471},[100,5719,3565],{"class":110},[100,5721,5722,5724,5726,5728],{"class":102,"line":199},[100,5723,3570],{"class":471},[100,5725,3573],{"class":471},[100,5727,3576],{"class":106},[100,5729,2927],{"class":258},[100,5731,5732,5734,5736],{"class":102,"line":532},[100,5733,1784],{"class":471},[100,5735,786],{"class":106},[100,5737,3587],{"class":258},[100,5739,5740],{"class":102,"line":577},[100,5741,3178],{"class":258},[100,5743,5744,5747,5749,5751,5753,5755,5757,5759,5761,5763,5765,5767,5769,5771,5773,5775],{"class":102,"line":589},[100,5745,5746],{"class":471},"   int",[100,5748,5561],{"class":258},[100,5750,2086],{"class":117},[100,5752,2706],{"class":258},[100,5754,472],{"class":471},[100,5756,2662],{"class":258},[100,5758,1985],{"class":117},[100,5760,2145],{"class":258},[100,5762,465],{"class":117},[100,5764,2145],{"class":258},[100,5766,1849],{"class":117},[100,5768,2145],{"class":258},[100,5770,748],{"class":117},[100,5772,2145],{"class":258},[100,5774,2086],{"class":117},[100,5776,5594],{"class":258},[100,5778,5779,5781,5784,5786,5788,5790],{"class":102,"line":595},[100,5780,5746],{"class":471},[100,5782,5783],{"class":258}," start",[100,5785,472],{"class":471},[100,5787,1366],{"class":117},[100,5789,1833],{"class":258},[100,5791,5792],{"class":1836},"\u002F\u002F起始下标\n",[100,5794,5795,5797,5800,5803,5806,5809,5811,5813,5816,5818,5820,5822],{"class":102,"line":601},[100,5796,5746],{"class":471},[100,5798,5799],{"class":258}," end",[100,5801,5802],{"class":471},"=sizeof",[100,5804,5805],{"class":258},"(arr)",[100,5807,5808],{"class":471},"\u002Fsizeof",[100,5810,5450],{"class":258},[100,5812,1366],{"class":117},[100,5814,5815],{"class":258},"])",[100,5817,2299],{"class":471},[100,5819,1985],{"class":117},[100,5821,1833],{"class":258},[100,5823,5824],{"class":1836},"\u002F\u002F结束下标\n",[100,5826,5827,5830,5833,5835],{"class":102,"line":606},[100,5828,5829],{"class":471},"   while",[100,5831,5832],{"class":258}," (start",[100,5834,2676],{"class":471},[100,5836,5837],{"class":258},"end)\n",[100,5839,5840],{"class":102,"line":612},[100,5841,5842],{"class":258},"   {\n",[100,5844,5845],{"class":102,"line":618},[100,5846,5847],{"class":1836},"    \u002F\u002F实现元素互换代码\n",[100,5849,5850,5852,5855,5857],{"class":102,"line":623},[100,5851,3596],{"class":471},[100,5853,5854],{"class":258}," temp",[100,5856,472],{"class":471},[100,5858,5859],{"class":258},"arr[start];\n",[100,5861,5862,5865,5867],{"class":102,"line":629},[100,5863,5864],{"class":258},"    arr[start]",[100,5866,472],{"class":471},[100,5868,5869],{"class":258},"arr[end];\n",[100,5871,5872,5875,5877],{"class":102,"line":635},[100,5873,5874],{"class":258},"    arr[end]",[100,5876,472],{"class":471},[100,5878,5879],{"class":258},"temp;\n",[100,5881,5882],{"class":102,"line":641},[100,5883,5884],{"class":1836},"    \u002F\u002F下标更新\n",[100,5886,5887,5890,5892],{"class":102,"line":647},[100,5888,5889],{"class":258},"    start",[100,5891,3903],{"class":471},[100,5893,2927],{"class":258},[100,5895,5896,5899,5902],{"class":102,"line":653},[100,5897,5898],{"class":258},"    end",[100,5900,5901],{"class":471},"--",[100,5903,2927],{"class":258},[100,5905,5906],{"class":102,"line":659},[100,5907,5908],{"class":258},"   }\n",[100,5910,5911],{"class":102,"line":665},[100,5912,5913],{"class":1836},"   \u002F\u002F输出逆置后的数组\n",[100,5915,5916,5919,5921,5923,5925,5927,5929,5931,5933,5935,5937,5939],{"class":102,"line":670},[100,5917,5918],{"class":471},"   for",[100,5920,3283],{"class":258},[100,5922,1784],{"class":471},[100,5924,4633],{"class":258},[100,5926,472],{"class":471},[100,5928,1366],{"class":117},[100,5930,4640],{"class":258},[100,5932,2676],{"class":471},[100,5934,2086],{"class":117},[100,5936,4640],{"class":258},[100,5938,3903],{"class":471},[100,5940,809],{"class":258},[100,5942,5943],{"class":102,"line":675},[100,5944,5842],{"class":258},[100,5946,5947,5949,5951,5954,5956,5959],{"class":102,"line":699},[100,5948,3183],{"class":258},[100,5950,2810],{"class":471},[100,5952,5953],{"class":258},"arr[i]",[100,5955,2810],{"class":471},[100,5957,5958],{"class":110},"\" \"",[100,5960,2927],{"class":258},[100,5962,5963],{"class":102,"line":708},[100,5964,5908],{"class":258},[100,5966,5967,5970,5972,5974],{"class":102,"line":722},[100,5968,5969],{"class":106},"   system",[100,5971,713],{"class":258},[100,5973,3919],{"class":110},[100,5975,4321],{"class":258},[100,5977,5978,5981,5983],{"class":102,"line":735},[100,5979,5980],{"class":471},"   return",[100,5982,5692],{"class":117},[100,5984,2927],{"class":258},[100,5986,5987],{"class":102,"line":754},[100,5988,3197],{"class":258},[2773,5990,5991],{},[29,5992,5993],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[73,5995,5997],{"className":1770,"code":5996,"language":1772,"meta":79,"style":79},"\u002F\u002F冒泡排序,升序\n#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    int arr[9] = {4,2,8,0,5,7,1,3,9};\n    cout\u003C\u003C\"排序前：\"\u003C\u003Cendl;\n    for (int i=0;i\u003C9;i++)\n    {\n        cout\u003C\u003Carr[i]\u003C\u003C\" \";\n    }\n    \u002F\u002F开始冒泡排序\n    \u002F\u002F总共排序轮数为 元素个数-1\n    for (int i=0;i\u003C9-1;i++)\n    {\n        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n        for (int j=0;j\u003C9-i-1;j++)\n        {\n            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n            if(arr[j]>arr[j+1])\n            {\n                int temp=arr[j];\n                arr[j]=arr[j+1];\n                arr[j+1]=temp;\n            }\n        }\n    }\n    cout\u003C\u003C\"排序后：\"\u003C\u003Cendl;\n    for (int i=0;i\u003C9;i++)\n    {\n        cout\u003C\u003Carr[i]\u003C\u003C\" \";\n    }\n    return 0;\n}\n",[32,5998,5999,6004,6010,6020,6028,6032,6083,6096,6122,6126,6140,6144,6149,6154,6184,6188,6193,6227,6231,6236,6256,6261,6273,6289,6304,6309,6313,6317,6330,6356,6360,6374,6378,6386],{"__ignoreMap":79},[100,6000,6001],{"class":102,"line":103},[100,6002,6003],{"class":1836},"\u002F\u002F冒泡排序,升序\n",[100,6005,6006,6008],{"class":102,"line":188},[100,6007,3562],{"class":471},[100,6009,3565],{"class":110},[100,6011,6012,6014,6016,6018],{"class":102,"line":199},[100,6013,3570],{"class":471},[100,6015,3573],{"class":471},[100,6017,3576],{"class":106},[100,6019,2927],{"class":258},[100,6021,6022,6024,6026],{"class":102,"line":532},[100,6023,1784],{"class":471},[100,6025,786],{"class":106},[100,6027,3587],{"class":258},[100,6029,6030],{"class":102,"line":577},[100,6031,3178],{"class":258},[100,6033,6034,6036,6038,6040,6042,6044,6047,6049,6051,6053,6055,6057,6059,6061,6063,6065,6067,6069,6071,6073,6075,6077,6079,6081],{"class":102,"line":589},[100,6035,3596],{"class":471},[100,6037,5561],{"class":258},[100,6039,2187],{"class":117},[100,6041,468],{"class":258},[100,6043,472],{"class":471},[100,6045,6046],{"class":258}," {",[100,6048,748],{"class":117},[100,6050,2145],{"class":258},[100,6052,465],{"class":117},[100,6054,2145],{"class":258},[100,6056,2162],{"class":117},[100,6058,2145],{"class":258},[100,6060,1366],{"class":117},[100,6062,2145],{"class":258},[100,6064,2086],{"class":117},[100,6066,2145],{"class":258},[100,6068,2136],{"class":117},[100,6070,2145],{"class":258},[100,6072,1985],{"class":117},[100,6074,2145],{"class":258},[100,6076,1849],{"class":117},[100,6078,2145],{"class":258},[100,6080,2187],{"class":117},[100,6082,5594],{"class":258},[100,6084,6085,6087,6089,6092,6094],{"class":102,"line":595},[100,6086,3183],{"class":258},[100,6088,2810],{"class":471},[100,6090,6091],{"class":110},"\"排序前：\"",[100,6093,2810],{"class":471},[100,6095,2832],{"class":258},[100,6097,6098,6100,6102,6104,6106,6108,6110,6112,6114,6116,6118,6120],{"class":102,"line":601},[100,6099,848],{"class":471},[100,6101,3283],{"class":258},[100,6103,1784],{"class":471},[100,6105,4633],{"class":258},[100,6107,472],{"class":471},[100,6109,1366],{"class":117},[100,6111,4640],{"class":258},[100,6113,2676],{"class":471},[100,6115,2187],{"class":117},[100,6117,4640],{"class":258},[100,6119,3903],{"class":471},[100,6121,809],{"class":258},[100,6123,6124],{"class":102,"line":606},[100,6125,3641],{"class":258},[100,6127,6128,6130,6132,6134,6136,6138],{"class":102,"line":612},[100,6129,5051],{"class":258},[100,6131,2810],{"class":471},[100,6133,5953],{"class":258},[100,6135,2810],{"class":471},[100,6137,5958],{"class":110},[100,6139,2927],{"class":258},[100,6141,6142],{"class":102,"line":618},[100,6143,3798],{"class":258},[100,6145,6146],{"class":102,"line":623},[100,6147,6148],{"class":1836},"    \u002F\u002F开始冒泡排序\n",[100,6150,6151],{"class":102,"line":629},[100,6152,6153],{"class":1836},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[100,6155,6156,6158,6160,6162,6164,6166,6168,6170,6172,6174,6176,6178,6180,6182],{"class":102,"line":635},[100,6157,848],{"class":471},[100,6159,3283],{"class":258},[100,6161,1784],{"class":471},[100,6163,4633],{"class":258},[100,6165,472],{"class":471},[100,6167,1366],{"class":117},[100,6169,4640],{"class":258},[100,6171,2676],{"class":471},[100,6173,2187],{"class":117},[100,6175,2299],{"class":471},[100,6177,1985],{"class":117},[100,6179,4640],{"class":258},[100,6181,3903],{"class":471},[100,6183,809],{"class":258},[100,6185,6186],{"class":102,"line":641},[100,6187,3641],{"class":258},[100,6189,6190],{"class":102,"line":647},[100,6191,6192],{"class":1836},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[100,6194,6195,6197,6199,6201,6203,6205,6207,6209,6211,6213,6215,6217,6219,6221,6223,6225],{"class":102,"line":653},[100,6196,5003],{"class":471},[100,6198,3283],{"class":258},[100,6200,1784],{"class":471},[100,6202,5010],{"class":258},[100,6204,472],{"class":471},[100,6206,1366],{"class":117},[100,6208,5017],{"class":258},[100,6210,2676],{"class":471},[100,6212,2187],{"class":117},[100,6214,2299],{"class":471},[100,6216,2208],{"class":258},[100,6218,2299],{"class":471},[100,6220,1985],{"class":117},[100,6222,5017],{"class":258},[100,6224,3903],{"class":471},[100,6226,809],{"class":258},[100,6228,6229],{"class":102,"line":659},[100,6230,4119],{"class":258},[100,6232,6233],{"class":102,"line":665},[100,6234,6235],{"class":1836},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[100,6237,6238,6241,6244,6246,6249,6251,6253],{"class":102,"line":670},[100,6239,6240],{"class":471},"            if",[100,6242,6243],{"class":258},"(arr[j]",[100,6245,2726],{"class":471},[100,6247,6248],{"class":258},"arr[j",[100,6250,2248],{"class":471},[100,6252,1985],{"class":117},[100,6254,6255],{"class":258},"])\n",[100,6257,6258],{"class":102,"line":675},[100,6259,6260],{"class":258},"            {\n",[100,6262,6263,6266,6268,6270],{"class":102,"line":699},[100,6264,6265],{"class":471},"                int",[100,6267,5854],{"class":258},[100,6269,472],{"class":471},[100,6271,6272],{"class":258},"arr[j];\n",[100,6274,6275,6278,6280,6282,6284,6286],{"class":102,"line":708},[100,6276,6277],{"class":258},"                arr[j]",[100,6279,472],{"class":471},[100,6281,6248],{"class":258},[100,6283,2248],{"class":471},[100,6285,1985],{"class":117},[100,6287,6288],{"class":258},"];\n",[100,6290,6291,6294,6296,6298,6300,6302],{"class":102,"line":722},[100,6292,6293],{"class":258},"                arr[j",[100,6295,2248],{"class":471},[100,6297,1985],{"class":117},[100,6299,2706],{"class":258},[100,6301,472],{"class":471},[100,6303,5879],{"class":258},[100,6305,6306],{"class":102,"line":735},[100,6307,6308],{"class":258},"            }\n",[100,6310,6311],{"class":102,"line":754},[100,6312,4138],{"class":258},[100,6314,6315],{"class":102,"line":771},[100,6316,3798],{"class":258},[100,6318,6319,6321,6323,6326,6328],{"class":102,"line":776},[100,6320,3183],{"class":258},[100,6322,2810],{"class":471},[100,6324,6325],{"class":110},"\"排序后：\"",[100,6327,2810],{"class":471},[100,6329,2832],{"class":258},[100,6331,6332,6334,6336,6338,6340,6342,6344,6346,6348,6350,6352,6354],{"class":102,"line":781},[100,6333,848],{"class":471},[100,6335,3283],{"class":258},[100,6337,1784],{"class":471},[100,6339,4633],{"class":258},[100,6341,472],{"class":471},[100,6343,1366],{"class":117},[100,6345,4640],{"class":258},[100,6347,2676],{"class":471},[100,6349,2187],{"class":117},[100,6351,4640],{"class":258},[100,6353,3903],{"class":471},[100,6355,809],{"class":258},[100,6357,6358],{"class":102,"line":796},[100,6359,3641],{"class":258},[100,6361,6362,6364,6366,6368,6370,6372],{"class":102,"line":812},[100,6363,5051],{"class":258},[100,6365,2810],{"class":471},[100,6367,5953],{"class":258},[100,6369,2810],{"class":471},[100,6371,5958],{"class":110},[100,6373,2927],{"class":258},[100,6375,6376],{"class":102,"line":823},[100,6377,3798],{"class":258},[100,6379,6380,6382,6384],{"class":102,"line":828},[100,6381,5689],{"class":471},[100,6383,5692],{"class":117},[100,6385,2927],{"class":258},[100,6387,6388],{"class":102,"line":840},[100,6389,3197],{"class":258},[305,6391,6393],{"id":6392},"_172二维数组","1.7.2二维数组",[26,6395,6396],{},[29,6397,6398],{},"二维数组的四种定义方式",[319,6400,6401,6410],{},[322,6402,6403],{},[325,6404,6405,6408],{},[328,6406,6407],{},"序号",[328,6409,5380],{},[339,6411,6412,6422,6431,6440,6449],{},[325,6413,6414,6416],{},[344,6415,1985],{},[344,6417,6418,6419,1833],{},"数据类型 数组名[行数]",[100,6420,6421],{},"列数",[325,6423,6424,6426],{},[344,6425,465],{},[344,6427,6418,6428,6430],{},[100,6429,6421],{},"={ {数据1,数据2}，{数据3，数据4}... }",[325,6432,6433,6435],{},[344,6434,1849],{},[344,6436,6418,6437,6439],{},[100,6438,6421],{},"={数据1,数据2,数据3...}",[325,6441,6442,6444],{},[344,6443,748],{},[344,6445,6446,6447,6439],{},"数据类型 数组名[]",[100,6448,6421],{},[325,6450,6451,6454],{},[344,6452,6453],{},"注意：不能只省略列数",[344,6455],{},[26,6457,6458],{"start":188},[29,6459,6460],{},"二维数组数组名",[2773,6462,6463,6466],{},[29,6464,6465],{},"1.查看二维数组所占内存空间",[29,6467,6468],{},"2.获取二维数组首地址",[19,6470,6471],{},"已知二维数组，求二维数组的行数与列数",[73,6473,6475],{"className":1770,"code":6474,"language":1772,"meta":79,"style":79},"int main()\n{\n    int arr[2][3]=\n    {\n        {1,2,3},\n        {4,5,6}\n    };\n    cout\u003C\u003C\"二维数组的行数\"\u003C\u003Csizeof(arr)\u002Fsizeof(arr[0])\u003C\u003Cendl;\n    cout\u003C\u003C\"二维数组的列数\"\u003C\u003Csizeof(arr[0])\u002Fsizeof(arr[0][0])\u003C\u003Cendl;\n}\n",[32,6476,6477,6485,6489,6507,6511,6529,6545,6550,6575,6608],{"__ignoreMap":79},[100,6478,6479,6481,6483],{"class":102,"line":103},[100,6480,1784],{"class":471},[100,6482,786],{"class":106},[100,6484,3587],{"class":258},[100,6486,6487],{"class":102,"line":188},[100,6488,3178],{"class":258},[100,6490,6491,6493,6495,6497,6500,6502,6504],{"class":102,"line":199},[100,6492,3596],{"class":471},[100,6494,5561],{"class":258},[100,6496,465],{"class":117},[100,6498,6499],{"class":258},"][",[100,6501,1849],{"class":117},[100,6503,2706],{"class":258},[100,6505,6506],{"class":471},"=\n",[100,6508,6509],{"class":102,"line":532},[100,6510,3641],{"class":258},[100,6512,6513,6516,6518,6520,6522,6524,6526],{"class":102,"line":577},[100,6514,6515],{"class":258},"        {",[100,6517,1985],{"class":117},[100,6519,2145],{"class":258},[100,6521,465],{"class":117},[100,6523,2145],{"class":258},[100,6525,1849],{"class":117},[100,6527,6528],{"class":258},"},\n",[100,6530,6531,6533,6535,6537,6539,6541,6543],{"class":102,"line":589},[100,6532,6515],{"class":258},[100,6534,748],{"class":117},[100,6536,2145],{"class":258},[100,6538,2086],{"class":117},[100,6540,2145],{"class":258},[100,6542,2111],{"class":117},[100,6544,3197],{"class":258},[100,6546,6547],{"class":102,"line":595},[100,6548,6549],{"class":258},"    };\n",[100,6551,6552,6554,6556,6559,6561,6563,6565,6567,6569,6571,6573],{"class":102,"line":601},[100,6553,3183],{"class":258},[100,6555,2810],{"class":471},[100,6557,6558],{"class":110},"\"二维数组的行数\"",[100,6560,3005],{"class":471},[100,6562,5805],{"class":258},[100,6564,5808],{"class":471},[100,6566,5450],{"class":258},[100,6568,1366],{"class":117},[100,6570,5815],{"class":258},[100,6572,2810],{"class":471},[100,6574,2832],{"class":258},[100,6576,6577,6579,6581,6584,6586,6588,6590,6592,6594,6596,6598,6600,6602,6604,6606],{"class":102,"line":606},[100,6578,3183],{"class":258},[100,6580,2810],{"class":471},[100,6582,6583],{"class":110},"\"二维数组的列数\"",[100,6585,3005],{"class":471},[100,6587,5450],{"class":258},[100,6589,1366],{"class":117},[100,6591,5815],{"class":258},[100,6593,5808],{"class":471},[100,6595,5450],{"class":258},[100,6597,1366],{"class":117},[100,6599,6499],{"class":258},[100,6601,1366],{"class":117},[100,6603,5815],{"class":258},[100,6605,2810],{"class":471},[100,6607,2832],{"class":258},[100,6609,6610],{"class":102,"line":612},[100,6611,3197],{"class":258},[19,6613,6614],{},"查看二维数组首地址",[73,6616,6618],{"className":1770,"code":6617,"language":1772,"meta":79,"style":79},"cout\u003C\u003C\"二维数组首地址：\"\u003C\u003Carr\u003C\u003Cendl;\ncout\u003C\u003C\"二维数组第一行的首地址：\"\u003C\u003C(int)arr[0]\u003C\u003Cendl;\ncout\u003C\u003C\"二维数组第二行的首地址：\"\u003C\u003C(int)arr[1]\u003C\u003Cendl;\ncout\u003C\u003C\"二维数组第一个元素的首地址:\"\u003C\u003C(int)&arr[0][0]\u003C\u003Cendl;\u002F\u002F对于数，要加取址符\n",[32,6619,6620,6637,6663,6688],{"__ignoreMap":79},[100,6621,6622,6624,6626,6629,6631,6633,6635],{"class":102,"line":103},[100,6623,3002],{"class":258},[100,6625,2810],{"class":471},[100,6627,6628],{"class":110},"\"二维数组首地址：\"",[100,6630,2810],{"class":471},[100,6632,5479],{"class":258},[100,6634,2810],{"class":471},[100,6636,2832],{"class":258},[100,6638,6639,6641,6643,6646,6648,6650,6652,6655,6657,6659,6661],{"class":102,"line":188},[100,6640,3002],{"class":258},[100,6642,2810],{"class":471},[100,6644,6645],{"class":110},"\"二维数组第一行的首地址：\"",[100,6647,2810],{"class":471},[100,6649,713],{"class":258},[100,6651,1784],{"class":471},[100,6653,6654],{"class":258},")arr[",[100,6656,1366],{"class":117},[100,6658,2706],{"class":258},[100,6660,2810],{"class":471},[100,6662,2832],{"class":258},[100,6664,6665,6667,6669,6672,6674,6676,6678,6680,6682,6684,6686],{"class":102,"line":199},[100,6666,3002],{"class":258},[100,6668,2810],{"class":471},[100,6670,6671],{"class":110},"\"二维数组第二行的首地址：\"",[100,6673,2810],{"class":471},[100,6675,713],{"class":258},[100,6677,1784],{"class":471},[100,6679,6654],{"class":258},[100,6681,1985],{"class":117},[100,6683,2706],{"class":258},[100,6685,2810],{"class":471},[100,6687,2832],{"class":258},[100,6689,6690,6692,6694,6697,6699,6701,6703,6705,6707,6709,6711,6713,6715,6717,6719,6721],{"class":102,"line":532},[100,6691,3002],{"class":258},[100,6693,2810],{"class":471},[100,6695,6696],{"class":110},"\"二维数组第一个元素的首地址:\"",[100,6698,2810],{"class":471},[100,6700,713],{"class":258},[100,6702,1784],{"class":471},[100,6704,2196],{"class":258},[100,6706,2120],{"class":471},[100,6708,5505],{"class":258},[100,6710,1366],{"class":117},[100,6712,6499],{"class":258},[100,6714,1366],{"class":117},[100,6716,2706],{"class":258},[100,6718,2810],{"class":471},[100,6720,2875],{"class":258},[100,6722,6723],{"class":1836},"\u002F\u002F对于数，要加取址符\n",[1677,6725,6726],{},"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":79,"searchDepth":188,"depth":188,"links":6728},[6729,6730,6731,6739,6740,6746,6751],{"id":1725,"depth":188,"text":1726},{"id":1732,"depth":188,"text":1733},{"id":1747,"depth":188,"text":1748,"children":6732},[6733,6734,6735,6736,6737,6738],{"id":1751,"depth":199,"text":1752},{"id":1796,"depth":199,"text":1797},{"id":1862,"depth":199,"text":1863},{"id":2791,"depth":199,"text":2792},{"id":2881,"depth":199,"text":2882},{"id":2976,"depth":199,"text":2977},{"id":3018,"depth":188,"text":3019},{"id":3086,"depth":188,"text":3087,"children":6741},[6742,6743,6744,6745],{"id":3090,"depth":199,"text":3091},{"id":3112,"depth":199,"text":3113},{"id":3121,"depth":199,"text":3122},{"id":3130,"depth":199,"text":3131},{"id":3139,"depth":188,"text":3140,"children":6747},[6748,6749,6750],{"id":3143,"depth":199,"text":3144},{"id":3816,"depth":199,"text":3817},{"id":5221,"depth":199,"text":5222},{"id":5361,"depth":188,"text":5362,"children":6752},[6753,6754],{"id":5365,"depth":199,"text":5366},{"id":6392,"depth":199,"text":6393},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":1717,"description":79},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":6761,"title":6762,"body":6763,"description":79,"extension":1708,"meta":7861,"navigation":569,"path":7862,"seo":7863,"stem":7864,"__hash__":7865},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":6764,"toc":7853},[6765,6768,6772,6780,6786,6789,6855,6859,6862,6938,6942,6945,6948,6951,7164,7168,7173,7237,7242,7309,7314,7405,7408,7513,7517,7520,7526,7670,7674,7677,7691,7694,7739,7742,7850],[10,6766,6762],{"id":6767},"_2函数",[14,6769,6771],{"id":6770},"_21函数概述","2.1函数概述",[26,6773,6774,6777],{},[29,6775,6776],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[29,6778,6779],{},"语法：",[73,6781,6784],{"className":6782,"code":6783,"language":78,"meta":79},[76],"返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n",[32,6785,6783],{"__ignoreMap":79},[19,6787,6788],{},"小案例",[73,6790,6792],{"className":1770,"code":6791,"language":1772,"meta":79,"style":79},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[32,6793,6794,6799,6823,6827,6844,6851],{"__ignoreMap":79},[100,6795,6796],{"class":102,"line":103},[100,6797,6798],{"class":1836},"\u002F\u002Fnum1,num2形参\n",[100,6800,6801,6803,6806,6808,6810,6814,6816,6818,6821],{"class":102,"line":188},[100,6802,1784],{"class":471},[100,6804,6805],{"class":106}," add",[100,6807,713],{"class":258},[100,6809,1784],{"class":471},[100,6811,6813],{"class":6812},"s4XuR"," num1",[100,6815,2145],{"class":258},[100,6817,1784],{"class":471},[100,6819,6820],{"class":6812}," num2",[100,6822,809],{"class":258},[100,6824,6825],{"class":102,"line":199},[100,6826,3178],{"class":258},[100,6828,6829,6831,6834,6836,6839,6841],{"class":102,"line":532},[100,6830,3596],{"class":471},[100,6832,6833],{"class":258}," sum",[100,6835,472],{"class":471},[100,6837,6838],{"class":258},"num1",[100,6840,2248],{"class":471},[100,6842,6843],{"class":258},"num2;\n",[100,6845,6846,6848],{"class":102,"line":577},[100,6847,5689],{"class":471},[100,6849,6850],{"class":258}," sum;\n",[100,6852,6853],{"class":102,"line":589},[100,6854,3197],{"class":258},[14,6856,6858],{"id":6857},"_22函数调用","2.2函数调用",[19,6860,6861],{},"调用刚刚写的求和函数",[73,6863,6865],{"className":1770,"code":6864,"language":1772,"meta":79,"style":79},"int main()\n{\n    \u002F\u002Fa,b实参\n    int a=0;\n    int b=0;\n    cin>>a,b;\n    \u002F\u002F调用函数时，实参值传给了形参\n    cout\u003C\u003Cadd(a,b);\n}\n",[32,6866,6867,6875,6879,6884,6896,6908,6917,6922,6934],{"__ignoreMap":79},[100,6868,6869,6871,6873],{"class":102,"line":103},[100,6870,1784],{"class":471},[100,6872,786],{"class":106},[100,6874,3587],{"class":258},[100,6876,6877],{"class":102,"line":188},[100,6878,3178],{"class":258},[100,6880,6881],{"class":102,"line":199},[100,6882,6883],{"class":1836},"    \u002F\u002Fa,b实参\n",[100,6885,6886,6888,6890,6892,6894],{"class":102,"line":532},[100,6887,3596],{"class":471},[100,6889,3031],{"class":258},[100,6891,472],{"class":471},[100,6893,1366],{"class":117},[100,6895,2927],{"class":258},[100,6897,6898,6900,6902,6904,6906],{"class":102,"line":577},[100,6899,3596],{"class":471},[100,6901,4435],{"class":258},[100,6903,472],{"class":471},[100,6905,1366],{"class":117},[100,6907,2927],{"class":258},[100,6909,6910,6912,6914],{"class":102,"line":589},[100,6911,3623],{"class":258},[100,6913,3062],{"class":471},[100,6915,6916],{"class":258},"a,b;\n",[100,6918,6919],{"class":102,"line":595},[100,6920,6921],{"class":1836},"    \u002F\u002F调用函数时，实参值传给了形参\n",[100,6923,6924,6926,6928,6931],{"class":102,"line":601},[100,6925,3183],{"class":258},[100,6927,2810],{"class":471},[100,6929,6930],{"class":106},"add",[100,6932,6933],{"class":258},"(a,b);\n",[100,6935,6936],{"class":102,"line":606},[100,6937,3197],{"class":258},[14,6939,6941],{"id":6940},"_23值传递","2.3值传递",[19,6943,6944],{},"值传递就是函数调用时实参将数值传给形参",[19,6946,6947],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,6949,6950],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[73,6952,6954],{"className":1770,"code":6953,"language":1772,"meta":79,"style":79},"void swap(int num1,int num2)\n{\n    cout\u003C\u003C\"交换前：\"\u003C\u003Cendl;\n    cout\u003C\u003C\"num1=\"\u003C\u003Cnum1\u003C\u003Cendl;\n    cout\u003C\u003C\"num2=\"\u003C\u003Cnum2\u003C\u003Cendl;\n    int temp=num1;\n    num1=num2;\n    num2=temp;\n    cout\u003C\u003C\"交换后：\"\u003C\u003Cendl;\n    cout\u003C\u003C\"num1=\"\u003C\u003Cnum1\u003C\u003Cendl;\n    cout\u003C\u003C\"num2=\"\u003C\u003Cnum2\u003C\u003Cendl;\n    return;\u002F\u002F或者不写\n}\nint main()\n{\n    int a=10;\n    int b=20;\n    swap(a,b);\n}\n",[32,6955,6956,6978,6982,6995,7012,7030,7041,7050,7059,7072,7088,7104,7113,7117,7125,7129,7141,7153,7160],{"__ignoreMap":79},[100,6957,6958,6961,6964,6966,6968,6970,6972,6974,6976],{"class":102,"line":103},[100,6959,6960],{"class":471},"void",[100,6962,6963],{"class":106}," swap",[100,6965,713],{"class":258},[100,6967,1784],{"class":471},[100,6969,6813],{"class":6812},[100,6971,2145],{"class":258},[100,6973,1784],{"class":471},[100,6975,6820],{"class":6812},[100,6977,809],{"class":258},[100,6979,6980],{"class":102,"line":188},[100,6981,3178],{"class":258},[100,6983,6984,6986,6988,6991,6993],{"class":102,"line":199},[100,6985,3183],{"class":258},[100,6987,2810],{"class":471},[100,6989,6990],{"class":110},"\"交换前：\"",[100,6992,2810],{"class":471},[100,6994,2832],{"class":258},[100,6996,6997,6999,7001,7004,7006,7008,7010],{"class":102,"line":532},[100,6998,3183],{"class":258},[100,7000,2810],{"class":471},[100,7002,7003],{"class":110},"\"num1=\"",[100,7005,2810],{"class":471},[100,7007,6838],{"class":258},[100,7009,2810],{"class":471},[100,7011,2832],{"class":258},[100,7013,7014,7016,7018,7021,7023,7026,7028],{"class":102,"line":577},[100,7015,3183],{"class":258},[100,7017,2810],{"class":471},[100,7019,7020],{"class":110},"\"num2=\"",[100,7022,2810],{"class":471},[100,7024,7025],{"class":258},"num2",[100,7027,2810],{"class":471},[100,7029,2832],{"class":258},[100,7031,7032,7034,7036,7038],{"class":102,"line":589},[100,7033,3596],{"class":471},[100,7035,5854],{"class":258},[100,7037,472],{"class":471},[100,7039,7040],{"class":258},"num1;\n",[100,7042,7043,7046,7048],{"class":102,"line":595},[100,7044,7045],{"class":258},"    num1",[100,7047,472],{"class":471},[100,7049,6843],{"class":258},[100,7051,7052,7055,7057],{"class":102,"line":601},[100,7053,7054],{"class":258},"    num2",[100,7056,472],{"class":471},[100,7058,5879],{"class":258},[100,7060,7061,7063,7065,7068,7070],{"class":102,"line":606},[100,7062,3183],{"class":258},[100,7064,2810],{"class":471},[100,7066,7067],{"class":110},"\"交换后：\"",[100,7069,2810],{"class":471},[100,7071,2832],{"class":258},[100,7073,7074,7076,7078,7080,7082,7084,7086],{"class":102,"line":612},[100,7075,3183],{"class":258},[100,7077,2810],{"class":471},[100,7079,7003],{"class":110},[100,7081,2810],{"class":471},[100,7083,6838],{"class":258},[100,7085,2810],{"class":471},[100,7087,2832],{"class":258},[100,7089,7090,7092,7094,7096,7098,7100,7102],{"class":102,"line":618},[100,7091,3183],{"class":258},[100,7093,2810],{"class":471},[100,7095,7020],{"class":110},[100,7097,2810],{"class":471},[100,7099,7025],{"class":258},[100,7101,2810],{"class":471},[100,7103,2832],{"class":258},[100,7105,7106,7108,7110],{"class":102,"line":623},[100,7107,5689],{"class":471},[100,7109,1833],{"class":258},[100,7111,7112],{"class":1836},"\u002F\u002F或者不写\n",[100,7114,7115],{"class":102,"line":629},[100,7116,3197],{"class":258},[100,7118,7119,7121,7123],{"class":102,"line":635},[100,7120,1784],{"class":471},[100,7122,786],{"class":106},[100,7124,3587],{"class":258},[100,7126,7127],{"class":102,"line":641},[100,7128,3178],{"class":258},[100,7130,7131,7133,7135,7137,7139],{"class":102,"line":647},[100,7132,3596],{"class":471},[100,7134,3031],{"class":258},[100,7136,472],{"class":471},[100,7138,2213],{"class":117},[100,7140,2927],{"class":258},[100,7142,7143,7145,7147,7149,7151],{"class":102,"line":653},[100,7144,3596],{"class":471},[100,7146,4435],{"class":258},[100,7148,472],{"class":471},[100,7150,2466],{"class":117},[100,7152,2927],{"class":258},[100,7154,7155,7158],{"class":102,"line":659},[100,7156,7157],{"class":106},"    swap",[100,7159,6933],{"class":258},[100,7161,7162],{"class":102,"line":665},[100,7163,3197],{"class":258},[14,7165,7167],{"id":7166},"_24函数的常见形式","2.4函数的常见形式",[26,7169,7170],{},[29,7171,7172],{},"无参无返",[73,7174,7176],{"className":1770,"code":7175,"language":1772,"meta":79,"style":79},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[32,7177,7178,7187,7191,7204,7208,7216,7220,7225,7233],{"__ignoreMap":79},[100,7179,7180,7182,7185],{"class":102,"line":103},[100,7181,6960],{"class":471},[100,7183,7184],{"class":106}," test01",[100,7186,3587],{"class":258},[100,7188,7189],{"class":102,"line":188},[100,7190,3178],{"class":258},[100,7192,7193,7195,7197,7200,7202],{"class":102,"line":199},[100,7194,3183],{"class":258},[100,7196,2810],{"class":471},[100,7198,7199],{"class":110},"\"你好\"",[100,7201,2810],{"class":471},[100,7203,2832],{"class":258},[100,7205,7206],{"class":102,"line":532},[100,7207,3197],{"class":258},[100,7209,7210,7212,7214],{"class":102,"line":577},[100,7211,1784],{"class":471},[100,7213,786],{"class":106},[100,7215,3587],{"class":258},[100,7217,7218],{"class":102,"line":589},[100,7219,3178],{"class":258},[100,7221,7222],{"class":102,"line":595},[100,7223,7224],{"class":1836},"    \u002F\u002F函数调用\n",[100,7226,7227,7230],{"class":102,"line":601},[100,7228,7229],{"class":106},"    test01",[100,7231,7232],{"class":258},"();\n",[100,7234,7235],{"class":102,"line":606},[100,7236,3197],{"class":258},[26,7238,7239],{"start":188},[29,7240,7241],{},"有参无返",[73,7243,7245],{"className":1770,"code":7244,"language":1772,"meta":79,"style":79},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[32,7246,7247,7262,7266,7278,7282,7290,7294,7305],{"__ignoreMap":79},[100,7248,7249,7251,7254,7256,7258,7260],{"class":102,"line":103},[100,7250,6960],{"class":471},[100,7252,7253],{"class":106}," test02",[100,7255,713],{"class":258},[100,7257,1784],{"class":471},[100,7259,3031],{"class":6812},[100,7261,809],{"class":258},[100,7263,7264],{"class":102,"line":188},[100,7265,3178],{"class":258},[100,7267,7268,7270,7272,7274,7276],{"class":102,"line":199},[100,7269,3183],{"class":258},[100,7271,2810],{"class":471},[100,7273,7199],{"class":110},[100,7275,2810],{"class":471},[100,7277,2832],{"class":258},[100,7279,7280],{"class":102,"line":532},[100,7281,3197],{"class":258},[100,7283,7284,7286,7288],{"class":102,"line":577},[100,7285,1784],{"class":471},[100,7287,786],{"class":106},[100,7289,3587],{"class":258},[100,7291,7292],{"class":102,"line":589},[100,7293,3178],{"class":258},[100,7295,7296,7299,7301,7303],{"class":102,"line":595},[100,7297,7298],{"class":106},"    test02",[100,7300,713],{"class":258},[100,7302,2078],{"class":117},[100,7304,4321],{"class":258},[100,7306,7307],{"class":102,"line":601},[100,7308,3197],{"class":258},[26,7310,7311],{"start":199},[29,7312,7313],{},"无参有返",[73,7315,7317],{"className":1770,"code":7316,"language":1772,"meta":79,"style":79},"int test03()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n    return 100;\n}\nint main()\n{\n    int num1=test03();\n    cout\u003C\u003C\"num1=\"\u003C\u003Cnum1\u003C\u003Cendl; \u002F\u002F100\n}\n",[32,7318,7319,7328,7332,7344,7353,7357,7365,7369,7382,7401],{"__ignoreMap":79},[100,7320,7321,7323,7326],{"class":102,"line":103},[100,7322,1784],{"class":471},[100,7324,7325],{"class":106}," test03",[100,7327,3587],{"class":258},[100,7329,7330],{"class":102,"line":188},[100,7331,3178],{"class":258},[100,7333,7334,7336,7338,7340,7342],{"class":102,"line":199},[100,7335,3183],{"class":258},[100,7337,2810],{"class":471},[100,7339,7199],{"class":110},[100,7341,2810],{"class":471},[100,7343,2832],{"class":258},[100,7345,7346,7348,7351],{"class":102,"line":532},[100,7347,5689],{"class":471},[100,7349,7350],{"class":117}," 100",[100,7352,2927],{"class":258},[100,7354,7355],{"class":102,"line":577},[100,7356,3197],{"class":258},[100,7358,7359,7361,7363],{"class":102,"line":589},[100,7360,1784],{"class":471},[100,7362,786],{"class":106},[100,7364,3587],{"class":258},[100,7366,7367],{"class":102,"line":595},[100,7368,3178],{"class":258},[100,7370,7371,7373,7375,7377,7380],{"class":102,"line":601},[100,7372,3596],{"class":471},[100,7374,6813],{"class":258},[100,7376,472],{"class":471},[100,7378,7379],{"class":106},"test03",[100,7381,7232],{"class":258},[100,7383,7384,7386,7388,7390,7392,7394,7396,7398],{"class":102,"line":606},[100,7385,3183],{"class":258},[100,7387,2810],{"class":471},[100,7389,7003],{"class":110},[100,7391,2810],{"class":471},[100,7393,6838],{"class":258},[100,7395,2810],{"class":471},[100,7397,2875],{"class":258},[100,7399,7400],{"class":1836}," \u002F\u002F100\n",[100,7402,7403],{"class":102,"line":612},[100,7404,3197],{"class":258},[19,7406,7407],{},"4.有参有返",[73,7409,7411],{"className":1770,"code":7410,"language":1772,"meta":79,"style":79},"int test04(int a)\n{\n    cout\u003C\u003C\"hello\"\u003C\u003Cendl;\n    return a;\n}\nint mian()\n{\n    int b=1;\n    int c=test04(b);\n    cout\u003C\u003Cc\u003C\u003Cendl; \u002F\u002F1\n}\n",[32,7412,7413,7428,7432,7445,7451,7455,7464,7468,7480,7494,7509],{"__ignoreMap":79},[100,7414,7415,7417,7420,7422,7424,7426],{"class":102,"line":103},[100,7416,1784],{"class":471},[100,7418,7419],{"class":106}," test04",[100,7421,713],{"class":258},[100,7423,1784],{"class":471},[100,7425,3031],{"class":6812},[100,7427,809],{"class":258},[100,7429,7430],{"class":102,"line":188},[100,7431,3178],{"class":258},[100,7433,7434,7436,7438,7441,7443],{"class":102,"line":199},[100,7435,3183],{"class":258},[100,7437,2810],{"class":471},[100,7439,7440],{"class":110},"\"hello\"",[100,7442,2810],{"class":471},[100,7444,2832],{"class":258},[100,7446,7447,7449],{"class":102,"line":532},[100,7448,5689],{"class":471},[100,7450,3065],{"class":258},[100,7452,7453],{"class":102,"line":577},[100,7454,3197],{"class":258},[100,7456,7457,7459,7462],{"class":102,"line":589},[100,7458,1784],{"class":471},[100,7460,7461],{"class":106}," mian",[100,7463,3587],{"class":258},[100,7465,7466],{"class":102,"line":595},[100,7467,3178],{"class":258},[100,7469,7470,7472,7474,7476,7478],{"class":102,"line":601},[100,7471,3596],{"class":471},[100,7473,4435],{"class":258},[100,7475,472],{"class":471},[100,7477,1985],{"class":117},[100,7479,2927],{"class":258},[100,7481,7482,7484,7486,7488,7491],{"class":102,"line":606},[100,7483,3596],{"class":471},[100,7485,4451],{"class":258},[100,7487,472],{"class":471},[100,7489,7490],{"class":106},"test04",[100,7492,7493],{"class":258},"(b);\n",[100,7495,7496,7498,7500,7502,7504,7506],{"class":102,"line":612},[100,7497,3183],{"class":258},[100,7499,2810],{"class":471},[100,7501,2056],{"class":258},[100,7503,2810],{"class":471},[100,7505,2875],{"class":258},[100,7507,7508],{"class":1836}," \u002F\u002F1\n",[100,7510,7511],{"class":102,"line":618},[100,7512,3197],{"class":258},[14,7514,7516],{"id":7515},"_25函数的声明","2.5函数的声明",[19,7518,7519],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,7521,7522,7523],{},"函数的",[1921,7524,7525],{},"声明可以多次，但是函数的定义只能有一次",[73,7527,7529],{"className":1770,"code":7528,"language":1772,"meta":79,"style":79},"\u002F\u002F函数声明\n\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\nint max(int a,int b);\u002F\u002F这样函数就可以写在后面，不报错了\nint main() \n{\n    int a=10;\n    int b=20;\n    cout\u003C\u003Cmax(a,b)\u003C\u003Cendl;\n}\nint max(int a,int b)\n{\n    return a>b?a:b;\n}\n",[32,7530,7531,7536,7541,7566,7575,7579,7591,7603,7619,7623,7643,7647,7666],{"__ignoreMap":79},[100,7532,7533],{"class":102,"line":103},[100,7534,7535],{"class":1836},"\u002F\u002F函数声明\n",[100,7537,7538],{"class":102,"line":188},[100,7539,7540],{"class":1836},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[100,7542,7543,7545,7548,7550,7552,7554,7556,7558,7560,7563],{"class":102,"line":199},[100,7544,1784],{"class":471},[100,7546,7547],{"class":106}," max",[100,7549,713],{"class":258},[100,7551,1784],{"class":471},[100,7553,3031],{"class":6812},[100,7555,2145],{"class":258},[100,7557,1784],{"class":471},[100,7559,4435],{"class":6812},[100,7561,7562],{"class":258},");",[100,7564,7565],{"class":1836},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[100,7567,7568,7570,7572],{"class":102,"line":532},[100,7569,1784],{"class":471},[100,7571,786],{"class":106},[100,7573,7574],{"class":258},"() \n",[100,7576,7577],{"class":102,"line":577},[100,7578,3178],{"class":258},[100,7580,7581,7583,7585,7587,7589],{"class":102,"line":589},[100,7582,3596],{"class":471},[100,7584,3031],{"class":258},[100,7586,472],{"class":471},[100,7588,2213],{"class":117},[100,7590,2927],{"class":258},[100,7592,7593,7595,7597,7599,7601],{"class":102,"line":595},[100,7594,3596],{"class":471},[100,7596,4435],{"class":258},[100,7598,472],{"class":471},[100,7600,2466],{"class":117},[100,7602,2927],{"class":258},[100,7604,7605,7607,7609,7612,7615,7617],{"class":102,"line":601},[100,7606,3183],{"class":258},[100,7608,2810],{"class":471},[100,7610,7611],{"class":106},"max",[100,7613,7614],{"class":258},"(a,b)",[100,7616,2810],{"class":471},[100,7618,2832],{"class":258},[100,7620,7621],{"class":102,"line":606},[100,7622,3197],{"class":258},[100,7624,7625,7627,7629,7631,7633,7635,7637,7639,7641],{"class":102,"line":612},[100,7626,1784],{"class":471},[100,7628,7547],{"class":106},[100,7630,713],{"class":258},[100,7632,1784],{"class":471},[100,7634,3031],{"class":6812},[100,7636,2145],{"class":258},[100,7638,1784],{"class":471},[100,7640,4435],{"class":6812},[100,7642,809],{"class":258},[100,7644,7645],{"class":102,"line":618},[100,7646,3178],{"class":258},[100,7648,7649,7651,7653,7655,7657,7659,7661,7663],{"class":102,"line":623},[100,7650,5689],{"class":471},[100,7652,3031],{"class":258},[100,7654,2726],{"class":471},[100,7656,2031],{"class":258},[100,7658,2752],{"class":471},[100,7660,2006],{"class":258},[100,7662,2625],{"class":471},[100,7664,7665],{"class":258},"b;\n",[100,7667,7668],{"class":102,"line":629},[100,7669,3197],{"class":258},[14,7671,7673],{"id":7672},"_26函数的分文件编写","2.6函数的分文件编写",[19,7675,7676],{},"4个步骤：",[2773,7678,7679,7682,7685,7688],{},[29,7680,7681],{},"1.创建后缀名为.h的头文件",[29,7683,7684],{},"2.创建后缀名为.cpp的源文件",[29,7686,7687],{},"3.在头文件中写函数的定义",[29,7689,7690],{},"4.在源文件中写函数的定义\n示例：",[19,7692,7693],{},"头文件：swap.h",[73,7695,7697],{"className":1770,"code":7696,"language":1772,"meta":79,"style":79},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[32,7698,7699,7705,7715,7719],{"__ignoreMap":79},[100,7700,7701,7703],{"class":102,"line":103},[100,7702,3562],{"class":471},[100,7704,3565],{"class":110},[100,7706,7707,7709,7711,7713],{"class":102,"line":188},[100,7708,3570],{"class":471},[100,7710,3573],{"class":471},[100,7712,3576],{"class":106},[100,7714,2927],{"class":258},[100,7716,7717],{"class":102,"line":199},[100,7718,7535],{"class":1836},[100,7720,7721,7723,7725,7727,7729,7731,7733,7735,7737],{"class":102,"line":532},[100,7722,6960],{"class":471},[100,7724,6963],{"class":106},[100,7726,713],{"class":258},[100,7728,1784],{"class":471},[100,7730,3031],{"class":6812},[100,7732,2145],{"class":258},[100,7734,1784],{"class":471},[100,7736,4435],{"class":6812},[100,7738,4321],{"class":258},[19,7740,7741],{},"源文件：swap.cpp",[73,7743,7745],{"className":1770,"code":7744,"language":1772,"meta":79,"style":79},"#include \"swap.h\"\n\u002F\u002F函数的定义\nvoid swap(int a,int b)\n{\n    int temp=a;\n    a=b;\n    b=temp;\n    cout\u003C\u003C\"a=\"\u003C\u003Ca\u003C\u003Cendl;\n    cout\u003C\u003C\"b=\"\u003C\u003Cb\u003C\u003Cendl;\n}\n",[32,7746,7747,7754,7759,7779,7783,7794,7803,7812,7829,7846],{"__ignoreMap":79},[100,7748,7749,7751],{"class":102,"line":103},[100,7750,3562],{"class":471},[100,7752,7753],{"class":110}," \"swap.h\"\n",[100,7755,7756],{"class":102,"line":188},[100,7757,7758],{"class":1836},"\u002F\u002F函数的定义\n",[100,7760,7761,7763,7765,7767,7769,7771,7773,7775,7777],{"class":102,"line":199},[100,7762,6960],{"class":471},[100,7764,6963],{"class":106},[100,7766,713],{"class":258},[100,7768,1784],{"class":471},[100,7770,3031],{"class":6812},[100,7772,2145],{"class":258},[100,7774,1784],{"class":471},[100,7776,4435],{"class":6812},[100,7778,809],{"class":258},[100,7780,7781],{"class":102,"line":532},[100,7782,3178],{"class":258},[100,7784,7785,7787,7789,7791],{"class":102,"line":577},[100,7786,3596],{"class":471},[100,7788,5854],{"class":258},[100,7790,472],{"class":471},[100,7792,7793],{"class":258},"a;\n",[100,7795,7796,7799,7801],{"class":102,"line":589},[100,7797,7798],{"class":258},"    a",[100,7800,472],{"class":471},[100,7802,7665],{"class":258},[100,7804,7805,7808,7810],{"class":102,"line":595},[100,7806,7807],{"class":258},"    b",[100,7809,472],{"class":471},[100,7811,5879],{"class":258},[100,7813,7814,7816,7818,7821,7823,7825,7827],{"class":102,"line":601},[100,7815,3183],{"class":258},[100,7817,2810],{"class":471},[100,7819,7820],{"class":110},"\"a=\"",[100,7822,2810],{"class":471},[100,7824,2006],{"class":258},[100,7826,2810],{"class":471},[100,7828,2832],{"class":258},[100,7830,7831,7833,7835,7838,7840,7842,7844],{"class":102,"line":606},[100,7832,3183],{"class":258},[100,7834,2810],{"class":471},[100,7836,7837],{"class":110},"\"b=\"",[100,7839,2810],{"class":471},[100,7841,2031],{"class":258},[100,7843,2810],{"class":471},[100,7845,2832],{"class":258},[100,7847,7848],{"class":102,"line":612},[100,7849,3197],{"class":258},[1677,7851,7852],{},"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":79,"searchDepth":188,"depth":188,"links":7854},[7855,7856,7857,7858,7859,7860],{"id":6770,"depth":188,"text":6771},{"id":6857,"depth":188,"text":6858},{"id":6940,"depth":188,"text":6941},{"id":7166,"depth":188,"text":7167},{"id":7515,"depth":188,"text":7516},{"id":7672,"depth":188,"text":7673},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":6762,"description":79},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":7867,"title":7868,"body":7869,"description":7876,"extension":1708,"meta":9281,"navigation":569,"path":9282,"seo":9283,"stem":9284,"__hash__":9285},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":7870,"toc":9271},[7871,7874,7877,7881,8043,8047,8050,8053,8056,8059,8199,8203,8206,8209,8212,8277,8281,8286,8353,8356,8360,8363,8374,8379,8399,8402,8407,8426,8429,8433,8452,8455,8459,8694,8698,8701,8704,8707,8869,8872,8876,8879,8885,9268],[10,7872,7868],{"id":7873},"_3指针",[19,7875,7876],{},"通过指针保存一个地址，指针就是个地址",[14,7878,7880],{"id":7879},"_31定义指针","3.1定义指针",[73,7882,7884],{"className":1770,"code":7883,"language":1772,"meta":79,"style":79},"int main()\n{\n    \u002F\u002F1.定义指针\n    int a=10;\n    \u002F\u002F指针定义语法：数据类型*指针变量名;\n    int*p;\n    p=&a;\n    cout\u003C\u003C\"a的地址为：\"\u003C\u003C&a\u003C\u003Cendl;\n    cout\u003C\u003C\"指针p为：\"\u003C\u003Cp\u003C\u003Cendl;\u002F\u002F指针p表示的就是a的地址\n\n    \u002F\u002F2.使用指针\n    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n    *p=1000;\n    cout\u003C\u003C*p\u003C\u003Cendl;\u002F\u002F1000\n    cout\u003C\u003Ca\u003C\u003Cendl;\u002F\u002F1000\n}\n",[32,7885,7886,7894,7898,7903,7915,7920,7928,7938,7956,7976,7980,7985,7990,7995,8009,8025,8039],{"__ignoreMap":79},[100,7887,7888,7890,7892],{"class":102,"line":103},[100,7889,1784],{"class":471},[100,7891,786],{"class":106},[100,7893,3587],{"class":258},[100,7895,7896],{"class":102,"line":188},[100,7897,3178],{"class":258},[100,7899,7900],{"class":102,"line":199},[100,7901,7902],{"class":1836},"    \u002F\u002F1.定义指针\n",[100,7904,7905,7907,7909,7911,7913],{"class":102,"line":532},[100,7906,3596],{"class":471},[100,7908,3031],{"class":258},[100,7910,472],{"class":471},[100,7912,2213],{"class":117},[100,7914,2927],{"class":258},[100,7916,7917],{"class":102,"line":577},[100,7918,7919],{"class":1836},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[100,7921,7922,7925],{"class":102,"line":589},[100,7923,7924],{"class":471},"    int*",[100,7926,7927],{"class":258},"p;\n",[100,7929,7930,7933,7936],{"class":102,"line":595},[100,7931,7932],{"class":258},"    p",[100,7934,7935],{"class":471},"=&",[100,7937,7793],{"class":258},[100,7939,7940,7942,7944,7947,7950,7952,7954],{"class":102,"line":601},[100,7941,3183],{"class":258},[100,7943,2810],{"class":471},[100,7945,7946],{"class":110},"\"a的地址为：\"",[100,7948,7949],{"class":471},"\u003C\u003C&",[100,7951,2006],{"class":258},[100,7953,2810],{"class":471},[100,7955,2832],{"class":258},[100,7957,7958,7960,7962,7965,7967,7969,7971,7973],{"class":102,"line":606},[100,7959,3183],{"class":258},[100,7961,2810],{"class":471},[100,7963,7964],{"class":110},"\"指针p为：\"",[100,7966,2810],{"class":471},[100,7968,19],{"class":258},[100,7970,2810],{"class":471},[100,7972,2875],{"class":258},[100,7974,7975],{"class":1836},"\u002F\u002F指针p表示的就是a的地址\n",[100,7977,7978],{"class":102,"line":612},[100,7979,570],{"emptyLinePlaceholder":569},[100,7981,7982],{"class":102,"line":618},[100,7983,7984],{"class":1836},"    \u002F\u002F2.使用指针\n",[100,7986,7987],{"class":102,"line":623},[100,7988,7989],{"class":1836},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[100,7991,7992],{"class":102,"line":629},[100,7993,7994],{"class":1836},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[100,7996,7997,8000,8002,8004,8007],{"class":102,"line":635},[100,7998,7999],{"class":471},"    *",[100,8001,19],{"class":258},[100,8003,472],{"class":471},[100,8005,8006],{"class":117},"1000",[100,8008,2927],{"class":258},[100,8010,8011,8013,8016,8018,8020,8022],{"class":102,"line":641},[100,8012,3183],{"class":258},[100,8014,8015],{"class":471},"\u003C\u003C*",[100,8017,19],{"class":258},[100,8019,2810],{"class":471},[100,8021,2875],{"class":258},[100,8023,8024],{"class":1836},"\u002F\u002F1000\n",[100,8026,8027,8029,8031,8033,8035,8037],{"class":102,"line":647},[100,8028,3183],{"class":258},[100,8030,2810],{"class":471},[100,8032,2006],{"class":258},[100,8034,2810],{"class":471},[100,8036,2875],{"class":258},[100,8038,8024],{"class":1836},[100,8040,8041],{"class":102,"line":653},[100,8042,3197],{"class":258},[14,8044,8046],{"id":8045},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,8048,8049],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,8051,8052],{},"在32位操作系统下：占用4个字节空间",[19,8054,8055],{},"在64位操作系统下：占用8个字节空间",[19,8057,8058],{},"上方是不管啥数据类型的",[73,8060,8062],{"className":1770,"code":8061,"language":1772,"meta":79,"style":79},"int main()\n{\n    \u002F\u002F指针所占内存空间\n    int a=10;\n    \u002F\u002Fint *p;\n    \u002F\u002Fp=&a;\n    \u002F\u002F上述可以写为以下：\n    int *p=&a;\n    cout \u003C\u003C\"sizeof(int *)\"\u003C\u003Csizeof(p)\u003C\u003Cendl;\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n    cout \u003C\u003C\"sizeof(int *)\"\u003C\u003Csizeof(int *)\u003C\u003Cendl  \u002F\u002F4字节(32位的话)\n    cout \u003C\u003C\"sizeof(char *)\"\u003C\u003Csizeof(char *)\u003C\u003Cendl; \u002F\u002F4字节(32位的话)\n}\n",[32,8063,8064,8072,8076,8081,8093,8098,8103,8108,8121,8143,8169,8195],{"__ignoreMap":79},[100,8065,8066,8068,8070],{"class":102,"line":103},[100,8067,1784],{"class":471},[100,8069,786],{"class":106},[100,8071,3587],{"class":258},[100,8073,8074],{"class":102,"line":188},[100,8075,3178],{"class":258},[100,8077,8078],{"class":102,"line":199},[100,8079,8080],{"class":1836},"    \u002F\u002F指针所占内存空间\n",[100,8082,8083,8085,8087,8089,8091],{"class":102,"line":532},[100,8084,3596],{"class":471},[100,8086,3031],{"class":258},[100,8088,472],{"class":471},[100,8090,2213],{"class":117},[100,8092,2927],{"class":258},[100,8094,8095],{"class":102,"line":577},[100,8096,8097],{"class":1836},"    \u002F\u002Fint *p;\n",[100,8099,8100],{"class":102,"line":589},[100,8101,8102],{"class":1836},"    \u002F\u002Fp=&a;\n",[100,8104,8105],{"class":102,"line":595},[100,8106,8107],{"class":1836},"    \u002F\u002F上述可以写为以下：\n",[100,8109,8110,8112,8115,8117,8119],{"class":102,"line":601},[100,8111,3596],{"class":471},[100,8113,8114],{"class":471}," *",[100,8116,19],{"class":258},[100,8118,7935],{"class":471},[100,8120,7793],{"class":258},[100,8122,8123,8126,8128,8131,8133,8136,8138,8140],{"class":102,"line":606},[100,8124,8125],{"class":258},"    cout ",[100,8127,2810],{"class":471},[100,8129,8130],{"class":110},"\"sizeof(int *)\"",[100,8132,3005],{"class":471},[100,8134,8135],{"class":258},"(p)",[100,8137,2810],{"class":471},[100,8139,2875],{"class":258},[100,8141,8142],{"class":1836},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[100,8144,8145,8147,8149,8151,8153,8155,8157,8159,8161,8163,8166],{"class":102,"line":612},[100,8146,8125],{"class":258},[100,8148,2810],{"class":471},[100,8150,8130],{"class":110},[100,8152,3005],{"class":471},[100,8154,713],{"class":258},[100,8156,1784],{"class":471},[100,8158,8114],{"class":471},[100,8160,2196],{"class":258},[100,8162,2810],{"class":471},[100,8164,8165],{"class":258},"endl",[100,8167,8168],{"class":1836},"  \u002F\u002F4字节(32位的话)\n",[100,8170,8171,8173,8175,8178,8180,8182,8184,8186,8188,8190,8192],{"class":102,"line":618},[100,8172,8125],{"class":258},[100,8174,2810],{"class":471},[100,8176,8177],{"class":110},"\"sizeof(char *)\"",[100,8179,3005],{"class":471},[100,8181,713],{"class":258},[100,8183,1873],{"class":471},[100,8185,8114],{"class":471},[100,8187,2196],{"class":258},[100,8189,2810],{"class":471},[100,8191,2875],{"class":258},[100,8193,8194],{"class":1836}," \u002F\u002F4字节(32位的话)\n",[100,8196,8197],{"class":102,"line":623},[100,8198,3197],{"class":258},[14,8200,8202],{"id":8201},"_33空指针","3.3空指针",[19,8204,8205],{},"空指针：指针变量指向内存中编号为0的空间",[19,8207,8208],{},"用途：初始化指针变量",[19,8210,8211],{},"注意：空指针指向的内存是不可以访问的",[73,8213,8215],{"className":1770,"code":8214,"language":1772,"meta":79,"style":79},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[32,8216,8217,8225,8229,8234,8248,8253,8268,8273],{"__ignoreMap":79},[100,8218,8219,8221,8223],{"class":102,"line":103},[100,8220,1784],{"class":471},[100,8222,786],{"class":106},[100,8224,3587],{"class":258},[100,8226,8227],{"class":102,"line":188},[100,8228,3178],{"class":258},[100,8230,8231],{"class":102,"line":199},[100,8232,8233],{"class":1836},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[100,8235,8236,8238,8240,8242,8244,8246],{"class":102,"line":532},[100,8237,3596],{"class":471},[100,8239,8114],{"class":471},[100,8241,19],{"class":258},[100,8243,472],{"class":471},[100,8245,4002],{"class":117},[100,8247,2927],{"class":258},[100,8249,8250],{"class":102,"line":577},[100,8251,8252],{"class":1836},"    \u002F\u002F2.空指针不能进行访问\n",[100,8254,8255,8257,8259,8261,8263,8265],{"class":102,"line":589},[100,8256,7999],{"class":471},[100,8258,19],{"class":258},[100,8260,472],{"class":471},[100,8262,2078],{"class":117},[100,8264,1833],{"class":258},[100,8266,8267],{"class":1836},"\u002F\u002F直接报错，压根不能访问\n",[100,8269,8270],{"class":102,"line":595},[100,8271,8272],{"class":1836},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[100,8274,8275],{"class":102,"line":601},[100,8276,3197],{"class":258},[14,8278,8280],{"id":8279},"_34野指针","3.4野指针",[19,8282,8283],{},[1921,8284,8285],{},"指针变量指向非法的内存空间",[73,8287,8289],{"className":1770,"code":8288,"language":1772,"meta":79,"style":79},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[32,8290,8291,8299,8303,8332,8337,8349],{"__ignoreMap":79},[100,8292,8293,8295,8297],{"class":102,"line":103},[100,8294,1784],{"class":471},[100,8296,786],{"class":106},[100,8298,3587],{"class":258},[100,8300,8301],{"class":102,"line":188},[100,8302,3178],{"class":258},[100,8304,8305,8307,8309,8311,8313,8315,8317,8319,8321,8324,8327,8329],{"class":102,"line":199},[100,8306,3596],{"class":471},[100,8308,8114],{"class":471},[100,8310,19],{"class":258},[100,8312,472],{"class":471},[100,8314,713],{"class":258},[100,8316,1784],{"class":471},[100,8318,8114],{"class":471},[100,8320,2196],{"class":258},[100,8322,8323],{"class":471},"0x",[100,8325,8326],{"class":117},"1100",[100,8328,1833],{"class":258},[100,8330,8331],{"class":1836}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[100,8333,8334],{"class":102,"line":532},[100,8335,8336],{"class":1836},"    \u002F\u002F访问野指针报错\n",[100,8338,8339,8341,8343,8345,8347],{"class":102,"line":577},[100,8340,3183],{"class":258},[100,8342,8015],{"class":471},[100,8344,19],{"class":258},[100,8346,2810],{"class":471},[100,8348,2832],{"class":258},[100,8350,8351],{"class":102,"line":589},[100,8352,3197],{"class":258},[19,8354,8355],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,8357,8359],{"id":8358},"_35const修饰指针","3.5const修饰指针",[19,8361,8362],{},"三种情况：",[2773,8364,8365,8368,8371],{},[29,8366,8367],{},"const修饰指针 常量指针",[29,8369,8370],{},"const修饰常量 指针常量",[29,8372,8373],{},"const即修饰指针，又修饰常量",[26,8375,8376],{},[29,8377,8378],{},"常量指针",[73,8380,8382],{"className":1770,"code":8381,"language":1772,"meta":79,"style":79},"const int *p=&a;\n",[32,8383,8384],{"__ignoreMap":79},[100,8385,8386,8389,8391,8393,8395,8397],{"class":102,"line":103},[100,8387,8388],{"class":471},"const",[100,8390,3993],{"class":471},[100,8392,8114],{"class":471},[100,8394,19],{"class":258},[100,8396,7935],{"class":471},[100,8398,7793],{"class":258},[19,8400,8401],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[26,8403,8404],{"start":188},[29,8405,8406],{},"指针常量",[73,8408,8410],{"className":1770,"code":8409,"language":1772,"meta":79,"style":79},"int *const p=&a;\n",[32,8411,8412],{"__ignoreMap":79},[100,8413,8414,8416,8419,8422,8424],{"class":102,"line":103},[100,8415,1784],{"class":471},[100,8417,8418],{"class":471}," *const",[100,8420,8421],{"class":258}," p",[100,8423,7935],{"class":471},[100,8425,7793],{"class":258},[19,8427,8428],{},"指针的指向不可以改，指针指向的值可以改",[26,8430,8431],{"start":199},[29,8432,8373],{},[73,8434,8436],{"className":1770,"code":8435,"language":1772,"meta":79,"style":79},"const int *const p=&a;\n",[32,8437,8438],{"__ignoreMap":79},[100,8439,8440,8442,8444,8446,8448,8450],{"class":102,"line":103},[100,8441,8388],{"class":471},[100,8443,3993],{"class":471},[100,8445,8418],{"class":471},[100,8447,8421],{"class":258},[100,8449,7935],{"class":471},[100,8451,7793],{"class":258},[19,8453,8454],{},"指针的指向和指针指向的值都不可以改变",[14,8456,8458],{"id":8457},"_36指针和数组","3.6指针和数组",[73,8460,8462],{"className":1770,"code":8461,"language":1772,"meta":79,"style":79},"int main()\n{\n    \u002F\u002F利用指针访问数组中的元素\n    int arr[10]={1,2,3,4,5,6,7,8,9,10};\n    cout\u003C\u003C\"数组的第一个元素为：\"\u003C\u003Carr[0]\u003C\u003Cendl;\n    int *p=arr;\u002F\u002F注意数才要加取地址符号&\n    cout\u003C\u003C\"数组的第一个元素为：\"\u003C\u003C*p\u003C\u003Cendl;\n    p++; \u002F\u002F让指针向后偏移4个字节\n    cout\u003C\u003C\"数组的第二个元素为：\"\u003C\u003C*p\u003C\u003Cendl;\n    \u002F\u002F利用指针遍历数组\n    int *p2=arr;\n    for (int i=0;i\u003C10;i++)\n    {\n        cout\u003C\u003C*p2\u003C\u003Cendl;\n        p2++;\n    }\n}\n",[32,8463,8464,8472,8476,8481,8535,8556,8572,8588,8599,8616,8621,8635,8661,8665,8677,8686,8690],{"__ignoreMap":79},[100,8465,8466,8468,8470],{"class":102,"line":103},[100,8467,1784],{"class":471},[100,8469,786],{"class":106},[100,8471,3587],{"class":258},[100,8473,8474],{"class":102,"line":188},[100,8475,3178],{"class":258},[100,8477,8478],{"class":102,"line":199},[100,8479,8480],{"class":1836},"    \u002F\u002F利用指针访问数组中的元素\n",[100,8482,8483,8485,8487,8489,8491,8493,8495,8497,8499,8501,8503,8505,8507,8509,8511,8513,8515,8517,8519,8521,8523,8525,8527,8529,8531,8533],{"class":102,"line":532},[100,8484,3596],{"class":471},[100,8486,5561],{"class":258},[100,8488,2213],{"class":117},[100,8490,2706],{"class":258},[100,8492,472],{"class":471},[100,8494,2662],{"class":258},[100,8496,1985],{"class":117},[100,8498,2145],{"class":258},[100,8500,465],{"class":117},[100,8502,2145],{"class":258},[100,8504,1849],{"class":117},[100,8506,2145],{"class":258},[100,8508,748],{"class":117},[100,8510,2145],{"class":258},[100,8512,2086],{"class":117},[100,8514,2145],{"class":258},[100,8516,2111],{"class":117},[100,8518,2145],{"class":258},[100,8520,2136],{"class":117},[100,8522,2145],{"class":258},[100,8524,2162],{"class":117},[100,8526,2145],{"class":258},[100,8528,2187],{"class":117},[100,8530,2145],{"class":258},[100,8532,2213],{"class":117},[100,8534,5594],{"class":258},[100,8536,8537,8539,8541,8544,8546,8548,8550,8552,8554],{"class":102,"line":577},[100,8538,3183],{"class":258},[100,8540,2810],{"class":471},[100,8542,8543],{"class":110},"\"数组的第一个元素为：\"",[100,8545,2810],{"class":471},[100,8547,5505],{"class":258},[100,8549,1366],{"class":117},[100,8551,2706],{"class":258},[100,8553,2810],{"class":471},[100,8555,2832],{"class":258},[100,8557,8558,8560,8562,8564,8566,8569],{"class":102,"line":589},[100,8559,3596],{"class":471},[100,8561,8114],{"class":471},[100,8563,19],{"class":258},[100,8565,472],{"class":471},[100,8567,8568],{"class":258},"arr;",[100,8570,8571],{"class":1836},"\u002F\u002F注意数才要加取地址符号&\n",[100,8573,8574,8576,8578,8580,8582,8584,8586],{"class":102,"line":595},[100,8575,3183],{"class":258},[100,8577,2810],{"class":471},[100,8579,8543],{"class":110},[100,8581,8015],{"class":471},[100,8583,19],{"class":258},[100,8585,2810],{"class":471},[100,8587,2832],{"class":258},[100,8589,8590,8592,8594,8596],{"class":102,"line":601},[100,8591,7932],{"class":258},[100,8593,3903],{"class":471},[100,8595,1833],{"class":258},[100,8597,8598],{"class":1836}," \u002F\u002F让指针向后偏移4个字节\n",[100,8600,8601,8603,8605,8608,8610,8612,8614],{"class":102,"line":606},[100,8602,3183],{"class":258},[100,8604,2810],{"class":471},[100,8606,8607],{"class":110},"\"数组的第二个元素为：\"",[100,8609,8015],{"class":471},[100,8611,19],{"class":258},[100,8613,2810],{"class":471},[100,8615,2832],{"class":258},[100,8617,8618],{"class":102,"line":612},[100,8619,8620],{"class":1836},"    \u002F\u002F利用指针遍历数组\n",[100,8622,8623,8625,8627,8630,8632],{"class":102,"line":618},[100,8624,3596],{"class":471},[100,8626,8114],{"class":471},[100,8628,8629],{"class":258},"p2",[100,8631,472],{"class":471},[100,8633,8634],{"class":258},"arr;\n",[100,8636,8637,8639,8641,8643,8645,8647,8649,8651,8653,8655,8657,8659],{"class":102,"line":623},[100,8638,848],{"class":471},[100,8640,3283],{"class":258},[100,8642,1784],{"class":471},[100,8644,4633],{"class":258},[100,8646,472],{"class":471},[100,8648,1366],{"class":117},[100,8650,4640],{"class":258},[100,8652,2676],{"class":471},[100,8654,2213],{"class":117},[100,8656,4640],{"class":258},[100,8658,3903],{"class":471},[100,8660,809],{"class":258},[100,8662,8663],{"class":102,"line":629},[100,8664,3641],{"class":258},[100,8666,8667,8669,8671,8673,8675],{"class":102,"line":635},[100,8668,5051],{"class":258},[100,8670,8015],{"class":471},[100,8672,8629],{"class":258},[100,8674,2810],{"class":471},[100,8676,2832],{"class":258},[100,8678,8679,8682,8684],{"class":102,"line":641},[100,8680,8681],{"class":258},"        p2",[100,8683,3903],{"class":471},[100,8685,2927],{"class":258},[100,8687,8688],{"class":102,"line":647},[100,8689,3798],{"class":258},[100,8691,8692],{"class":102,"line":653},[100,8693,3197],{"class":258},[14,8695,8697],{"id":8696},"_37指针和函数","3.7指针和函数",[19,8699,8700],{},"利用指针做函数参数，可以修改实参的值",[19,8702,8703],{},"值传递：只改变形参，不改变实参",[19,8705,8706],{},"地址传递：",[73,8708,8710],{"className":1770,"code":8709,"language":1772,"meta":79,"style":79},"void swap(int *p1,int *p2)\n{\n    int temp=*p1;\n    *p1=*p2;\n    *p2=temp;\n}\nint main()\n{\n    int a=10;\n    int b=20;\n    \u002F\u002F地址传递\n    swap(&a,&b);\n    cout\u003C\u003Ca\u003C\u003Cendl;\u002F\u002F20\n    cout\u003C\u003Cb\u003C\u003Cendl;\u002F\u002F10\n}\n",[32,8711,8712,8737,8741,8753,8764,8774,8778,8786,8790,8802,8814,8819,8835,8850,8865],{"__ignoreMap":79},[100,8713,8714,8716,8718,8720,8722,8724,8727,8729,8731,8733,8735],{"class":102,"line":103},[100,8715,6960],{"class":471},[100,8717,6963],{"class":106},[100,8719,713],{"class":258},[100,8721,1784],{"class":471},[100,8723,8114],{"class":471},[100,8725,8726],{"class":6812},"p1",[100,8728,2145],{"class":258},[100,8730,1784],{"class":471},[100,8732,8114],{"class":471},[100,8734,8629],{"class":6812},[100,8736,809],{"class":258},[100,8738,8739],{"class":102,"line":188},[100,8740,3178],{"class":258},[100,8742,8743,8745,8747,8750],{"class":102,"line":199},[100,8744,3596],{"class":471},[100,8746,5854],{"class":258},[100,8748,8749],{"class":471},"=*",[100,8751,8752],{"class":258},"p1;\n",[100,8754,8755,8757,8759,8761],{"class":102,"line":532},[100,8756,7999],{"class":471},[100,8758,8726],{"class":258},[100,8760,8749],{"class":471},[100,8762,8763],{"class":258},"p2;\n",[100,8765,8766,8768,8770,8772],{"class":102,"line":577},[100,8767,7999],{"class":471},[100,8769,8629],{"class":258},[100,8771,472],{"class":471},[100,8773,5879],{"class":258},[100,8775,8776],{"class":102,"line":589},[100,8777,3197],{"class":258},[100,8779,8780,8782,8784],{"class":102,"line":595},[100,8781,1784],{"class":471},[100,8783,786],{"class":106},[100,8785,3587],{"class":258},[100,8787,8788],{"class":102,"line":601},[100,8789,3178],{"class":258},[100,8791,8792,8794,8796,8798,8800],{"class":102,"line":606},[100,8793,3596],{"class":471},[100,8795,3031],{"class":258},[100,8797,472],{"class":471},[100,8799,2213],{"class":117},[100,8801,2927],{"class":258},[100,8803,8804,8806,8808,8810,8812],{"class":102,"line":612},[100,8805,3596],{"class":471},[100,8807,4435],{"class":258},[100,8809,472],{"class":471},[100,8811,2466],{"class":117},[100,8813,2927],{"class":258},[100,8815,8816],{"class":102,"line":618},[100,8817,8818],{"class":1836},"    \u002F\u002F地址传递\n",[100,8820,8821,8823,8825,8827,8830,8832],{"class":102,"line":623},[100,8822,7157],{"class":106},[100,8824,713],{"class":258},[100,8826,2120],{"class":471},[100,8828,8829],{"class":258},"a,",[100,8831,2120],{"class":471},[100,8833,8834],{"class":258},"b);\n",[100,8836,8837,8839,8841,8843,8845,8847],{"class":102,"line":629},[100,8838,3183],{"class":258},[100,8840,2810],{"class":471},[100,8842,2006],{"class":258},[100,8844,2810],{"class":471},[100,8846,2875],{"class":258},[100,8848,8849],{"class":1836},"\u002F\u002F20\n",[100,8851,8852,8854,8856,8858,8860,8862],{"class":102,"line":635},[100,8853,3183],{"class":258},[100,8855,2810],{"class":471},[100,8857,2031],{"class":258},[100,8859,2810],{"class":471},[100,8861,2875],{"class":258},[100,8863,8864],{"class":1836},"\u002F\u002F10\n",[100,8866,8867],{"class":102,"line":641},[100,8868,3197],{"class":258},[19,8870,8871],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,8873,8875],{"id":8874},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,8877,8878],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,8880,8881,8882,8884],{},"例如数组：int arr",[100,8883,2213],{},"={4,3,6,9,1,2,10,8,7,5}",[73,8886,8888],{"className":1770,"code":8887,"language":1772,"meta":79,"style":79},"#include\u003Ciostream>\nusing namespace std;\nvoid bubbleSort(int *p,int len)\n{\n    for(int i=0;i\u003Clen-1;i++)\n    {\n        for(int j=0;j\u003Clen-i-1;j++)\n        {\n            if(p[j]>p[j+1])\n            {\n                int temp=p[j];\n                p[j]=p[j+1];\n                p[j+1]=temp;\n            }\n        }\n    }\n}\n\nint main()\n{\n    \u002F\u002F 1.创建数组\n    int arr[10]={4,3,6,9,1,2,10,8,7,5};\n    int len=10;\n    int *p=arr;\n    \u002F\u002F 2.创建函数，实现冒泡排序\n    bubbleSort(p,len);\n\n    \u002F\u002F 3.打印排序后的数组\n    for (int i=0; i\u003Clen; i++)\n    {\n        cout\u003C\u003C*p\u003C\u003C\"\";\n        p++;\n    }\n}\n",[32,8889,8890,8896,8906,8930,8934,8965,8969,9003,9007,9025,9029,9040,9055,9070,9074,9078,9082,9086,9090,9098,9102,9107,9161,9173,9185,9190,9198,9202,9207,9232,9236,9251,9260,9264],{"__ignoreMap":79},[100,8891,8892,8894],{"class":102,"line":103},[100,8893,3562],{"class":471},[100,8895,3565],{"class":110},[100,8897,8898,8900,8902,8904],{"class":102,"line":188},[100,8899,3570],{"class":471},[100,8901,3573],{"class":471},[100,8903,3576],{"class":106},[100,8905,2927],{"class":258},[100,8907,8908,8910,8913,8915,8917,8919,8921,8923,8925,8928],{"class":102,"line":199},[100,8909,6960],{"class":471},[100,8911,8912],{"class":106}," bubbleSort",[100,8914,713],{"class":258},[100,8916,1784],{"class":471},[100,8918,8114],{"class":471},[100,8920,19],{"class":6812},[100,8922,2145],{"class":258},[100,8924,1784],{"class":471},[100,8926,8927],{"class":6812}," len",[100,8929,809],{"class":258},[100,8931,8932],{"class":102,"line":532},[100,8933,3178],{"class":258},[100,8935,8936,8938,8940,8942,8944,8946,8948,8950,8952,8955,8957,8959,8961,8963],{"class":102,"line":577},[100,8937,848],{"class":471},[100,8939,713],{"class":258},[100,8941,1784],{"class":471},[100,8943,4633],{"class":258},[100,8945,472],{"class":471},[100,8947,1366],{"class":117},[100,8949,4640],{"class":258},[100,8951,2676],{"class":471},[100,8953,8954],{"class":258},"len",[100,8956,2299],{"class":471},[100,8958,1985],{"class":117},[100,8960,4640],{"class":258},[100,8962,3903],{"class":471},[100,8964,809],{"class":258},[100,8966,8967],{"class":102,"line":589},[100,8968,3641],{"class":258},[100,8970,8971,8973,8975,8977,8979,8981,8983,8985,8987,8989,8991,8993,8995,8997,8999,9001],{"class":102,"line":595},[100,8972,5003],{"class":471},[100,8974,713],{"class":258},[100,8976,1784],{"class":471},[100,8978,5010],{"class":258},[100,8980,472],{"class":471},[100,8982,1366],{"class":117},[100,8984,5017],{"class":258},[100,8986,2676],{"class":471},[100,8988,8954],{"class":258},[100,8990,2299],{"class":471},[100,8992,2208],{"class":258},[100,8994,2299],{"class":471},[100,8996,1985],{"class":117},[100,8998,5017],{"class":258},[100,9000,3903],{"class":471},[100,9002,809],{"class":258},[100,9004,9005],{"class":102,"line":601},[100,9006,4119],{"class":258},[100,9008,9009,9011,9014,9016,9019,9021,9023],{"class":102,"line":606},[100,9010,6240],{"class":471},[100,9012,9013],{"class":258},"(p[j]",[100,9015,2726],{"class":471},[100,9017,9018],{"class":258},"p[j",[100,9020,2248],{"class":471},[100,9022,1985],{"class":117},[100,9024,6255],{"class":258},[100,9026,9027],{"class":102,"line":612},[100,9028,6260],{"class":258},[100,9030,9031,9033,9035,9037],{"class":102,"line":618},[100,9032,6265],{"class":471},[100,9034,5854],{"class":258},[100,9036,472],{"class":471},[100,9038,9039],{"class":258},"p[j];\n",[100,9041,9042,9045,9047,9049,9051,9053],{"class":102,"line":623},[100,9043,9044],{"class":258},"                p[j]",[100,9046,472],{"class":471},[100,9048,9018],{"class":258},[100,9050,2248],{"class":471},[100,9052,1985],{"class":117},[100,9054,6288],{"class":258},[100,9056,9057,9060,9062,9064,9066,9068],{"class":102,"line":629},[100,9058,9059],{"class":258},"                p[j",[100,9061,2248],{"class":471},[100,9063,1985],{"class":117},[100,9065,2706],{"class":258},[100,9067,472],{"class":471},[100,9069,5879],{"class":258},[100,9071,9072],{"class":102,"line":635},[100,9073,6308],{"class":258},[100,9075,9076],{"class":102,"line":641},[100,9077,4138],{"class":258},[100,9079,9080],{"class":102,"line":647},[100,9081,3798],{"class":258},[100,9083,9084],{"class":102,"line":653},[100,9085,3197],{"class":258},[100,9087,9088],{"class":102,"line":659},[100,9089,570],{"emptyLinePlaceholder":569},[100,9091,9092,9094,9096],{"class":102,"line":665},[100,9093,1784],{"class":471},[100,9095,786],{"class":106},[100,9097,3587],{"class":258},[100,9099,9100],{"class":102,"line":670},[100,9101,3178],{"class":258},[100,9103,9104],{"class":102,"line":675},[100,9105,9106],{"class":1836},"    \u002F\u002F 1.创建数组\n",[100,9108,9109,9111,9113,9115,9117,9119,9121,9123,9125,9127,9129,9131,9133,9135,9137,9139,9141,9143,9145,9147,9149,9151,9153,9155,9157,9159],{"class":102,"line":699},[100,9110,3596],{"class":471},[100,9112,5561],{"class":258},[100,9114,2213],{"class":117},[100,9116,2706],{"class":258},[100,9118,472],{"class":471},[100,9120,2662],{"class":258},[100,9122,748],{"class":117},[100,9124,2145],{"class":258},[100,9126,1849],{"class":117},[100,9128,2145],{"class":258},[100,9130,2111],{"class":117},[100,9132,2145],{"class":258},[100,9134,2187],{"class":117},[100,9136,2145],{"class":258},[100,9138,1985],{"class":117},[100,9140,2145],{"class":258},[100,9142,465],{"class":117},[100,9144,2145],{"class":258},[100,9146,2213],{"class":117},[100,9148,2145],{"class":258},[100,9150,2162],{"class":117},[100,9152,2145],{"class":258},[100,9154,2136],{"class":117},[100,9156,2145],{"class":258},[100,9158,2086],{"class":117},[100,9160,5594],{"class":258},[100,9162,9163,9165,9167,9169,9171],{"class":102,"line":708},[100,9164,3596],{"class":471},[100,9166,8927],{"class":258},[100,9168,472],{"class":471},[100,9170,2213],{"class":117},[100,9172,2927],{"class":258},[100,9174,9175,9177,9179,9181,9183],{"class":102,"line":722},[100,9176,3596],{"class":471},[100,9178,8114],{"class":471},[100,9180,19],{"class":258},[100,9182,472],{"class":471},[100,9184,8634],{"class":258},[100,9186,9187],{"class":102,"line":735},[100,9188,9189],{"class":1836},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[100,9191,9192,9195],{"class":102,"line":754},[100,9193,9194],{"class":106},"    bubbleSort",[100,9196,9197],{"class":258},"(p,len);\n",[100,9199,9200],{"class":102,"line":771},[100,9201,570],{"emptyLinePlaceholder":569},[100,9203,9204],{"class":102,"line":776},[100,9205,9206],{"class":1836},"    \u002F\u002F 3.打印排序后的数组\n",[100,9208,9209,9211,9213,9215,9217,9219,9221,9223,9225,9228,9230],{"class":102,"line":781},[100,9210,848],{"class":471},[100,9212,3283],{"class":258},[100,9214,1784],{"class":471},[100,9216,4633],{"class":258},[100,9218,472],{"class":471},[100,9220,1366],{"class":117},[100,9222,4814],{"class":258},[100,9224,2676],{"class":471},[100,9226,9227],{"class":258},"len; i",[100,9229,3903],{"class":471},[100,9231,809],{"class":258},[100,9233,9234],{"class":102,"line":796},[100,9235,3641],{"class":258},[100,9237,9238,9240,9242,9244,9246,9249],{"class":102,"line":812},[100,9239,5051],{"class":258},[100,9241,8015],{"class":471},[100,9243,19],{"class":258},[100,9245,2810],{"class":471},[100,9247,9248],{"class":110},"\"\"",[100,9250,2927],{"class":258},[100,9252,9253,9256,9258],{"class":102,"line":823},[100,9254,9255],{"class":258},"        p",[100,9257,3903],{"class":471},[100,9259,2927],{"class":258},[100,9261,9262],{"class":102,"line":828},[100,9263,3798],{"class":258},[100,9265,9266],{"class":102,"line":840},[100,9267,3197],{"class":258},[1677,9269,9270],{},"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":79,"searchDepth":188,"depth":188,"links":9272},[9273,9274,9275,9276,9277,9278,9279,9280],{"id":7879,"depth":188,"text":7880},{"id":8045,"depth":188,"text":8046},{"id":8201,"depth":188,"text":8202},{"id":8279,"depth":188,"text":8280},{"id":8358,"depth":188,"text":8359},{"id":8457,"depth":188,"text":8458},{"id":8696,"depth":188,"text":8697},{"id":8874,"depth":188,"text":8875},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":7868,"description":7876},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":9287,"title":9288,"body":9289,"description":9296,"extension":1708,"meta":12256,"navigation":569,"path":12257,"seo":12258,"stem":12259,"__hash__":12260},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":9290,"toc":12247},[9291,9294,9297,9301,9304,9307,9318,9646,9649,9653,9656,9663,9918,9922,9925,9928,10083,10087,10090,10093,10299,10303,10306,10609,10611,10619,10623,10626,10777,10779,10790,10847,10851,10856,11510,11518,11521,11615,11618,12238,12244],[10,9292,9288],{"id":9293},"_4结构体",[19,9295,9296],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,9298,9300],{"id":9299},"_41结构体定义与使用","4.1结构体定义与使用",[19,9302,9303],{},"语法：struct 结构体名 {结构体成员列表}；",[19,9305,9306],{},"通过结构体创建变量的方式：",[2773,9308,9309,9312,9315],{},[29,9310,9311],{},"struct 结构体名 变量名",[29,9313,9314],{},"struct 结构体名 变量名={成员1值，成员2值...}",[29,9316,9317],{},"定义结构体时顺便创建变量",[73,9319,9321],{"className":1770,"code":9320,"language":1772,"meta":79,"style":79},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\nstruct Student\n{\n    \u002F\u002F成员列表\n\n    \u002F\u002F姓名\n    string name;\n    \u002F\u002F年龄\n    int age;\n    \u002F\u002F分数\n    int score;\n};\nstruct School\n{\n    \u002F\u002F成员列表\n\n    \u002F\u002F姓名\n    string name;\n    \u002F\u002F年龄\n    int age;\n    \u002F\u002F分数\n    int score;\n} s3; \u002F\u002F创建结构体时就创建了变量\nint main()\n{\n    \u002F\u002F2.通过学生类型创建具体学生\n    \u002F\u002F2.1 struct Student s1;\n    struct Student s1;\n    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n    s1.name=\"张三\";\n    s1.age=18;\n    s1.score=66;\n    \u002F\u002F输出结果\n    cout\u003C\u003Cs1.name\u003C\u003Cs1.age\u003C\u003Cs1.score\u003C\u003Cendl;\n\n    \u002F\u002F2.2 struct Student s2={...}\n    struct Student s2={\"王五\",18,66};\n\n    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n    s3.name=\"1\";\n    s3.age=18;\n    s3.score=20;\n}\n",[32,9322,9323,9329,9339,9346,9351,9359,9363,9368,9372,9377,9382,9387,9394,9399,9406,9410,9417,9421,9425,9429,9433,9437,9441,9447,9451,9457,9465,9473,9477,9482,9487,9498,9503,9515,9526,9537,9542,9565,9569,9574,9600,9604,9609,9620,9631,9642],{"__ignoreMap":79},[100,9324,9325,9327],{"class":102,"line":103},[100,9326,3562],{"class":471},[100,9328,3565],{"class":110},[100,9330,9331,9333,9335,9337],{"class":102,"line":188},[100,9332,3570],{"class":471},[100,9334,3573],{"class":471},[100,9336,3576],{"class":106},[100,9338,2927],{"class":258},[100,9340,9341,9343],{"class":102,"line":199},[100,9342,3562],{"class":471},[100,9344,9345],{"class":110},"\u003Cstring>\n",[100,9347,9348],{"class":102,"line":532},[100,9349,9350],{"class":1836},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[100,9352,9353,9356],{"class":102,"line":577},[100,9354,9355],{"class":471},"struct",[100,9357,9358],{"class":106}," Student\n",[100,9360,9361],{"class":102,"line":589},[100,9362,3178],{"class":258},[100,9364,9365],{"class":102,"line":595},[100,9366,9367],{"class":1836},"    \u002F\u002F成员列表\n",[100,9369,9370],{"class":102,"line":601},[100,9371,570],{"emptyLinePlaceholder":569},[100,9373,9374],{"class":102,"line":606},[100,9375,9376],{"class":1836},"    \u002F\u002F姓名\n",[100,9378,9379],{"class":102,"line":612},[100,9380,9381],{"class":258},"    string name;\n",[100,9383,9384],{"class":102,"line":618},[100,9385,9386],{"class":1836},"    \u002F\u002F年龄\n",[100,9388,9389,9391],{"class":102,"line":623},[100,9390,3596],{"class":471},[100,9392,9393],{"class":258}," age;\n",[100,9395,9396],{"class":102,"line":629},[100,9397,9398],{"class":1836},"    \u002F\u002F分数\n",[100,9400,9401,9403],{"class":102,"line":635},[100,9402,3596],{"class":471},[100,9404,9405],{"class":258}," score;\n",[100,9407,9408],{"class":102,"line":641},[100,9409,5594],{"class":258},[100,9411,9412,9414],{"class":102,"line":647},[100,9413,9355],{"class":471},[100,9415,9416],{"class":106}," School\n",[100,9418,9419],{"class":102,"line":653},[100,9420,3178],{"class":258},[100,9422,9423],{"class":102,"line":659},[100,9424,9367],{"class":1836},[100,9426,9427],{"class":102,"line":665},[100,9428,570],{"emptyLinePlaceholder":569},[100,9430,9431],{"class":102,"line":670},[100,9432,9376],{"class":1836},[100,9434,9435],{"class":102,"line":675},[100,9436,9381],{"class":258},[100,9438,9439],{"class":102,"line":699},[100,9440,9386],{"class":1836},[100,9442,9443,9445],{"class":102,"line":708},[100,9444,3596],{"class":471},[100,9446,9393],{"class":258},[100,9448,9449],{"class":102,"line":722},[100,9450,9398],{"class":1836},[100,9452,9453,9455],{"class":102,"line":735},[100,9454,3596],{"class":471},[100,9456,9405],{"class":258},[100,9458,9459,9462],{"class":102,"line":754},[100,9460,9461],{"class":258},"} s3;",[100,9463,9464],{"class":1836}," \u002F\u002F创建结构体时就创建了变量\n",[100,9466,9467,9469,9471],{"class":102,"line":771},[100,9468,1784],{"class":471},[100,9470,786],{"class":106},[100,9472,3587],{"class":258},[100,9474,9475],{"class":102,"line":776},[100,9476,3178],{"class":258},[100,9478,9479],{"class":102,"line":781},[100,9480,9481],{"class":1836},"    \u002F\u002F2.通过学生类型创建具体学生\n",[100,9483,9484],{"class":102,"line":796},[100,9485,9486],{"class":1836},"    \u002F\u002F2.1 struct Student s1;\n",[100,9488,9489,9492,9495],{"class":102,"line":812},[100,9490,9491],{"class":471},"    struct",[100,9493,9494],{"class":106}," Student",[100,9496,9497],{"class":258}," s1;\n",[100,9499,9500],{"class":102,"line":823},[100,9501,9502],{"class":1836},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[100,9504,9505,9508,9510,9513],{"class":102,"line":828},[100,9506,9507],{"class":258},"    s1.name",[100,9509,472],{"class":471},[100,9511,9512],{"class":110},"\"张三\"",[100,9514,2927],{"class":258},[100,9516,9517,9520,9522,9524],{"class":102,"line":840},[100,9518,9519],{"class":258},"    s1.age",[100,9521,472],{"class":471},[100,9523,2417],{"class":117},[100,9525,2927],{"class":258},[100,9527,9528,9531,9533,9535],{"class":102,"line":845},[100,9529,9530],{"class":258},"    s1.score",[100,9532,472],{"class":471},[100,9534,2022],{"class":117},[100,9536,2927],{"class":258},[100,9538,9539],{"class":102,"line":868},[100,9540,9541],{"class":1836},"    \u002F\u002F输出结果\n",[100,9543,9544,9546,9548,9551,9553,9556,9558,9561,9563],{"class":102,"line":874},[100,9545,3183],{"class":258},[100,9547,2810],{"class":471},[100,9549,9550],{"class":258},"s1.name",[100,9552,2810],{"class":471},[100,9554,9555],{"class":258},"s1.age",[100,9557,2810],{"class":471},[100,9559,9560],{"class":258},"s1.score",[100,9562,2810],{"class":471},[100,9564,2832],{"class":258},[100,9566,9567],{"class":102,"line":879},[100,9568,570],{"emptyLinePlaceholder":569},[100,9570,9571],{"class":102,"line":889},[100,9572,9573],{"class":1836},"    \u002F\u002F2.2 struct Student s2={...}\n",[100,9575,9576,9578,9580,9583,9585,9587,9590,9592,9594,9596,9598],{"class":102,"line":894},[100,9577,9491],{"class":471},[100,9579,9494],{"class":106},[100,9581,9582],{"class":258}," s2",[100,9584,472],{"class":471},[100,9586,2662],{"class":258},[100,9588,9589],{"class":110},"\"王五\"",[100,9591,2145],{"class":258},[100,9593,2417],{"class":117},[100,9595,2145],{"class":258},[100,9597,2022],{"class":117},[100,9599,5594],{"class":258},[100,9601,9602],{"class":102,"line":900},[100,9603,570],{"emptyLinePlaceholder":569},[100,9605,9606],{"class":102,"line":910},[100,9607,9608],{"class":1836},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[100,9610,9611,9614,9616,9618],{"class":102,"line":915},[100,9612,9613],{"class":258},"    s3.name",[100,9615,472],{"class":471},[100,9617,5278],{"class":110},[100,9619,2927],{"class":258},[100,9621,9622,9625,9627,9629],{"class":102,"line":929},[100,9623,9624],{"class":258},"    s3.age",[100,9626,472],{"class":471},[100,9628,2417],{"class":117},[100,9630,2927],{"class":258},[100,9632,9633,9636,9638,9640],{"class":102,"line":935},[100,9634,9635],{"class":258},"    s3.score",[100,9637,472],{"class":471},[100,9639,2466],{"class":117},[100,9641,2927],{"class":258},[100,9643,9644],{"class":102,"line":945},[100,9645,3197],{"class":258},[19,9647,9648],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,9650,9652],{"id":9651},"_42结构体数组","4.2结构体数组",[19,9654,9655],{},"将自定义的结构体放入到数组中方便维护",[19,9657,9658,9659,9662],{},"语法：struct 结构体名 数组名",[100,9660,9661],{},"元素个数","={ {}，{},...{} };",[73,9664,9666],{"className":1770,"code":9665,"language":1772,"meta":79,"style":79},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n\u002F\u002F1.定义结构体\nstruct Student\n{\n    string name;\n    int age;\n    int score;\n\n};\nint main()\n{\n    \u002F\u002F2.创建结构体数组\n    struct Student stuArray[2]=\n    {\n        {\"张三\",18,100},\n        {\"1\",15,15}\n    }\n    \u002F\u002F3.给结构体数组中的元素赋值\n    stuArray[1].name=\"2\";\n    stuArray[1].age=2;\n    stuArray[1].score=2;\n    \u002F\u002F4.遍历结构体数组\n    for (int i=0;i\u003C2;i++)\n    {\n        cout\u003C\u003CstuArray[i].name\u003C\u003CstuArray[i].age\u003C\u003CstuArray[i].score\u003C\u003Cendl;\n    }\n}\n",[32,9667,9668,9674,9684,9690,9695,9701,9705,9709,9715,9721,9725,9729,9737,9741,9746,9761,9765,9781,9797,9801,9806,9822,9837,9852,9857,9883,9887,9910,9914],{"__ignoreMap":79},[100,9669,9670,9672],{"class":102,"line":103},[100,9671,3562],{"class":471},[100,9673,3565],{"class":110},[100,9675,9676,9678,9680,9682],{"class":102,"line":188},[100,9677,3570],{"class":471},[100,9679,3573],{"class":471},[100,9681,3576],{"class":106},[100,9683,2927],{"class":258},[100,9685,9686,9688],{"class":102,"line":199},[100,9687,3562],{"class":471},[100,9689,9345],{"class":110},[100,9691,9692],{"class":102,"line":532},[100,9693,9694],{"class":1836},"\u002F\u002F1.定义结构体\n",[100,9696,9697,9699],{"class":102,"line":577},[100,9698,9355],{"class":471},[100,9700,9358],{"class":106},[100,9702,9703],{"class":102,"line":589},[100,9704,3178],{"class":258},[100,9706,9707],{"class":102,"line":595},[100,9708,9381],{"class":258},[100,9710,9711,9713],{"class":102,"line":601},[100,9712,3596],{"class":471},[100,9714,9393],{"class":258},[100,9716,9717,9719],{"class":102,"line":606},[100,9718,3596],{"class":471},[100,9720,9405],{"class":258},[100,9722,9723],{"class":102,"line":612},[100,9724,570],{"emptyLinePlaceholder":569},[100,9726,9727],{"class":102,"line":618},[100,9728,5594],{"class":258},[100,9730,9731,9733,9735],{"class":102,"line":623},[100,9732,1784],{"class":471},[100,9734,786],{"class":106},[100,9736,3587],{"class":258},[100,9738,9739],{"class":102,"line":629},[100,9740,3178],{"class":258},[100,9742,9743],{"class":102,"line":635},[100,9744,9745],{"class":1836},"    \u002F\u002F2.创建结构体数组\n",[100,9747,9748,9750,9752,9755,9757,9759],{"class":102,"line":641},[100,9749,9491],{"class":471},[100,9751,9494],{"class":106},[100,9753,9754],{"class":258}," stuArray[",[100,9756,465],{"class":117},[100,9758,2706],{"class":258},[100,9760,6506],{"class":471},[100,9762,9763],{"class":102,"line":647},[100,9764,3641],{"class":258},[100,9766,9767,9769,9771,9773,9775,9777,9779],{"class":102,"line":653},[100,9768,6515],{"class":258},[100,9770,9512],{"class":110},[100,9772,2145],{"class":258},[100,9774,2417],{"class":117},[100,9776,2145],{"class":258},[100,9778,2078],{"class":117},[100,9780,6528],{"class":258},[100,9782,9783,9785,9787,9789,9791,9793,9795],{"class":102,"line":659},[100,9784,6515],{"class":258},[100,9786,5278],{"class":110},[100,9788,2145],{"class":258},[100,9790,2342],{"class":117},[100,9792,2145],{"class":258},[100,9794,2342],{"class":117},[100,9796,3197],{"class":258},[100,9798,9799],{"class":102,"line":665},[100,9800,3798],{"class":258},[100,9802,9803],{"class":102,"line":670},[100,9804,9805],{"class":1836},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[100,9807,9808,9811,9813,9816,9818,9820],{"class":102,"line":675},[100,9809,9810],{"class":258},"    stuArray[",[100,9812,1985],{"class":117},[100,9814,9815],{"class":258},"].name",[100,9817,472],{"class":471},[100,9819,5301],{"class":110},[100,9821,2927],{"class":258},[100,9823,9824,9826,9828,9831,9833,9835],{"class":102,"line":699},[100,9825,9810],{"class":258},[100,9827,1985],{"class":117},[100,9829,9830],{"class":258},"].age",[100,9832,472],{"class":471},[100,9834,465],{"class":117},[100,9836,2927],{"class":258},[100,9838,9839,9841,9843,9846,9848,9850],{"class":102,"line":708},[100,9840,9810],{"class":258},[100,9842,1985],{"class":117},[100,9844,9845],{"class":258},"].score",[100,9847,472],{"class":471},[100,9849,465],{"class":117},[100,9851,2927],{"class":258},[100,9853,9854],{"class":102,"line":722},[100,9855,9856],{"class":1836},"    \u002F\u002F4.遍历结构体数组\n",[100,9858,9859,9861,9863,9865,9867,9869,9871,9873,9875,9877,9879,9881],{"class":102,"line":735},[100,9860,848],{"class":471},[100,9862,3283],{"class":258},[100,9864,1784],{"class":471},[100,9866,4633],{"class":258},[100,9868,472],{"class":471},[100,9870,1366],{"class":117},[100,9872,4640],{"class":258},[100,9874,2676],{"class":471},[100,9876,465],{"class":117},[100,9878,4640],{"class":258},[100,9880,3903],{"class":471},[100,9882,809],{"class":258},[100,9884,9885],{"class":102,"line":754},[100,9886,3641],{"class":258},[100,9888,9889,9891,9893,9896,9898,9901,9903,9906,9908],{"class":102,"line":771},[100,9890,5051],{"class":258},[100,9892,2810],{"class":471},[100,9894,9895],{"class":258},"stuArray[i].name",[100,9897,2810],{"class":471},[100,9899,9900],{"class":258},"stuArray[i].age",[100,9902,2810],{"class":471},[100,9904,9905],{"class":258},"stuArray[i].score",[100,9907,2810],{"class":471},[100,9909,2832],{"class":258},[100,9911,9912],{"class":102,"line":776},[100,9913,3798],{"class":258},[100,9915,9916],{"class":102,"line":781},[100,9917,3197],{"class":258},[14,9919,9921],{"id":9920},"_43结构体指针","4.3结构体指针",[19,9923,9924],{},"作用：通过指针访问结构体中的成员",[19,9926,9927],{},"利用操作符->可以通过结构体指针访问结构体属性",[73,9929,9931],{"className":1770,"code":9930,"language":1772,"meta":79,"style":79},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n\u002F\u002F1.定义结构体\nstruct Student\n{\n    string name;\n    int age;\n    int score;\n};\nint main()\n{\n    \u002F\u002F创建学生结构体变量\n    struct Student s={\"张三\",18,200};\n    \u002F\u002F通过指针指向结构体变量\n    struct Student *p=&s\n    \u002F\u002F通过指针访问结构体变量中的数据\n    cout\u003C\u003Cp->name\u003C\u003Cp->age\u003C\u003Cp->score\u003C\u003Cendl;\n}\n",[32,9932,9933,9939,9949,9955,9959,9965,9969,9973,9979,9985,9989,9997,10001,10006,10031,10036,10051,10056,10079],{"__ignoreMap":79},[100,9934,9935,9937],{"class":102,"line":103},[100,9936,3562],{"class":471},[100,9938,3565],{"class":110},[100,9940,9941,9943,9945,9947],{"class":102,"line":188},[100,9942,3570],{"class":471},[100,9944,3573],{"class":471},[100,9946,3576],{"class":106},[100,9948,2927],{"class":258},[100,9950,9951,9953],{"class":102,"line":199},[100,9952,3562],{"class":471},[100,9954,9345],{"class":110},[100,9956,9957],{"class":102,"line":532},[100,9958,9694],{"class":1836},[100,9960,9961,9963],{"class":102,"line":577},[100,9962,9355],{"class":471},[100,9964,9358],{"class":106},[100,9966,9967],{"class":102,"line":589},[100,9968,3178],{"class":258},[100,9970,9971],{"class":102,"line":595},[100,9972,9381],{"class":258},[100,9974,9975,9977],{"class":102,"line":601},[100,9976,3596],{"class":471},[100,9978,9393],{"class":258},[100,9980,9981,9983],{"class":102,"line":606},[100,9982,3596],{"class":471},[100,9984,9405],{"class":258},[100,9986,9987],{"class":102,"line":612},[100,9988,5594],{"class":258},[100,9990,9991,9993,9995],{"class":102,"line":618},[100,9992,1784],{"class":471},[100,9994,786],{"class":106},[100,9996,3587],{"class":258},[100,9998,9999],{"class":102,"line":623},[100,10000,3178],{"class":258},[100,10002,10003],{"class":102,"line":629},[100,10004,10005],{"class":1836},"    \u002F\u002F创建学生结构体变量\n",[100,10007,10008,10010,10012,10015,10017,10019,10021,10023,10025,10027,10029],{"class":102,"line":635},[100,10009,9491],{"class":471},[100,10011,9494],{"class":106},[100,10013,10014],{"class":258}," s",[100,10016,472],{"class":471},[100,10018,2662],{"class":258},[100,10020,9512],{"class":110},[100,10022,2145],{"class":258},[100,10024,2417],{"class":117},[100,10026,2145],{"class":258},[100,10028,3343],{"class":117},[100,10030,5594],{"class":258},[100,10032,10033],{"class":102,"line":641},[100,10034,10035],{"class":1836},"    \u002F\u002F通过指针指向结构体变量\n",[100,10037,10038,10040,10042,10044,10046,10048],{"class":102,"line":647},[100,10039,9491],{"class":471},[100,10041,9494],{"class":106},[100,10043,8114],{"class":471},[100,10045,19],{"class":258},[100,10047,7935],{"class":471},[100,10049,10050],{"class":258},"s\n",[100,10052,10053],{"class":102,"line":653},[100,10054,10055],{"class":1836},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[100,10057,10058,10060,10062,10065,10067,10070,10072,10075,10077],{"class":102,"line":659},[100,10059,3183],{"class":258},[100,10061,2810],{"class":471},[100,10063,10064],{"class":258},"p->name",[100,10066,2810],{"class":471},[100,10068,10069],{"class":258},"p->age",[100,10071,2810],{"class":471},[100,10073,10074],{"class":258},"p->score",[100,10076,2810],{"class":471},[100,10078,2832],{"class":258},[100,10080,10081],{"class":102,"line":665},[100,10082,3197],{"class":258},[14,10084,10086],{"id":10085},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,10088,10089],{},"作用：结构体中的成员可以是另一个结构体",[19,10091,10092],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[73,10094,10096],{"className":1770,"code":10095,"language":1772,"meta":79,"style":79},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n\u002F\u002F定义学生结构体\nstruct Student \n{\n    string name;\n    int age;\n    int score;\n}\n\u002F\u002F定义老师结构体\nstruct Teacher\n{\n    int id;\n    string name;\n    int age;\n    Student stu;\n}\nint main() \n{\n    \u002F\u002F结构体嵌套结构体\n    \u002F\u002F创建老师\n    Teacher t;\n    t.id=100;\n    t.name=\"老王\";\n    t.age=18;\n    t.stu.name=\"小王\"；\n    t.stu.age=20;\n    t.stu.score=6;\n}\n",[32,10097,10098,10104,10114,10120,10125,10133,10137,10141,10147,10153,10157,10162,10169,10173,10180,10184,10190,10195,10199,10207,10211,10216,10221,10226,10237,10249,10260,10273,10284,10295],{"__ignoreMap":79},[100,10099,10100,10102],{"class":102,"line":103},[100,10101,3562],{"class":471},[100,10103,3565],{"class":110},[100,10105,10106,10108,10110,10112],{"class":102,"line":188},[100,10107,3570],{"class":471},[100,10109,3573],{"class":471},[100,10111,3576],{"class":106},[100,10113,2927],{"class":258},[100,10115,10116,10118],{"class":102,"line":199},[100,10117,3562],{"class":471},[100,10119,9345],{"class":110},[100,10121,10122],{"class":102,"line":532},[100,10123,10124],{"class":1836},"\u002F\u002F定义学生结构体\n",[100,10126,10127,10129,10131],{"class":102,"line":577},[100,10128,9355],{"class":471},[100,10130,9494],{"class":106},[100,10132,4276],{"class":258},[100,10134,10135],{"class":102,"line":589},[100,10136,3178],{"class":258},[100,10138,10139],{"class":102,"line":595},[100,10140,9381],{"class":258},[100,10142,10143,10145],{"class":102,"line":601},[100,10144,3596],{"class":471},[100,10146,9393],{"class":258},[100,10148,10149,10151],{"class":102,"line":606},[100,10150,3596],{"class":471},[100,10152,9405],{"class":258},[100,10154,10155],{"class":102,"line":612},[100,10156,3197],{"class":258},[100,10158,10159],{"class":102,"line":618},[100,10160,10161],{"class":1836},"\u002F\u002F定义老师结构体\n",[100,10163,10164,10166],{"class":102,"line":623},[100,10165,9355],{"class":471},[100,10167,10168],{"class":106}," Teacher\n",[100,10170,10171],{"class":102,"line":629},[100,10172,3178],{"class":258},[100,10174,10175,10177],{"class":102,"line":635},[100,10176,3596],{"class":471},[100,10178,10179],{"class":258}," id;\n",[100,10181,10182],{"class":102,"line":641},[100,10183,9381],{"class":258},[100,10185,10186,10188],{"class":102,"line":647},[100,10187,3596],{"class":471},[100,10189,9393],{"class":258},[100,10191,10192],{"class":102,"line":653},[100,10193,10194],{"class":258},"    Student stu;\n",[100,10196,10197],{"class":102,"line":659},[100,10198,3197],{"class":258},[100,10200,10201,10203,10205],{"class":102,"line":665},[100,10202,1784],{"class":471},[100,10204,786],{"class":106},[100,10206,7574],{"class":258},[100,10208,10209],{"class":102,"line":670},[100,10210,3178],{"class":258},[100,10212,10213],{"class":102,"line":675},[100,10214,10215],{"class":1836},"    \u002F\u002F结构体嵌套结构体\n",[100,10217,10218],{"class":102,"line":699},[100,10219,10220],{"class":1836},"    \u002F\u002F创建老师\n",[100,10222,10223],{"class":102,"line":708},[100,10224,10225],{"class":258},"    Teacher t;\n",[100,10227,10228,10231,10233,10235],{"class":102,"line":722},[100,10229,10230],{"class":258},"    t.id",[100,10232,472],{"class":471},[100,10234,2078],{"class":117},[100,10236,2927],{"class":258},[100,10238,10239,10242,10244,10247],{"class":102,"line":735},[100,10240,10241],{"class":258},"    t.name",[100,10243,472],{"class":471},[100,10245,10246],{"class":110},"\"老王\"",[100,10248,2927],{"class":258},[100,10250,10251,10254,10256,10258],{"class":102,"line":754},[100,10252,10253],{"class":258},"    t.age",[100,10255,472],{"class":471},[100,10257,2417],{"class":117},[100,10259,2927],{"class":258},[100,10261,10262,10265,10267,10270],{"class":102,"line":771},[100,10263,10264],{"class":258},"    t.stu.name",[100,10266,472],{"class":471},[100,10268,10269],{"class":110},"\"小王\"",[100,10271,10272],{"class":258},"；\n",[100,10274,10275,10278,10280,10282],{"class":102,"line":776},[100,10276,10277],{"class":258},"    t.stu.age",[100,10279,472],{"class":471},[100,10281,2466],{"class":117},[100,10283,2927],{"class":258},[100,10285,10286,10289,10291,10293],{"class":102,"line":781},[100,10287,10288],{"class":258},"    t.stu.score",[100,10290,472],{"class":471},[100,10292,2111],{"class":117},[100,10294,2927],{"class":258},[100,10296,10297],{"class":102,"line":796},[100,10298,3197],{"class":258},[14,10300,10302],{"id":10301},"_45结构体做函数参数","4.5结构体做函数参数",[19,10304,10305],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[73,10307,10309],{"className":1770,"code":10308,"language":1772,"meta":79,"style":79},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\nstruct Student\n{\n    string name;\n    int age;\n    int score;\n};\n\u002F\u002F打印学生信息的函数\n\u002F\u002F值传递\nvoid printStudent1(struct Student s)\n{\n    cout \u003C\u003C s.name \u003C\u003C \" \" \u003C\u003C s.age \u003C\u003C \" \" \u003C\u003C s.score \u003C\u003C endl;\n}\n\u002F\u002F地址传递\nvoid printStudent2(struct Student *s)\n{\n    cout \u003C\u003C s->name \u003C\u003C \" \" \u003C\u003C s->age \u003C\u003C \" \" \u003C\u003C s->score \u003C\u003C endl;\n}\nint main()\n{\n    struct Student s;\n    s.name = \"张三\";\n    s.age = 20;\n    s.score = 85;\n    cout\u003C\u003C\"值传递:\"\u003C\u003Cendl;\n    printStudent1(s);\n    cout\u003C\u003C\"地址传递:\"\u003C\u003Cendl;\n    printStudent2(&s); \n    return 0;\n}\n",[32,10310,10311,10317,10327,10333,10339,10343,10347,10353,10359,10363,10368,10373,10390,10394,10427,10431,10436,10455,10459,10490,10494,10502,10506,10515,10527,10539,10551,10564,10572,10585,10597,10605],{"__ignoreMap":79},[100,10312,10313,10315],{"class":102,"line":103},[100,10314,3562],{"class":471},[100,10316,3565],{"class":110},[100,10318,10319,10321,10323,10325],{"class":102,"line":188},[100,10320,3570],{"class":471},[100,10322,3573],{"class":471},[100,10324,3576],{"class":106},[100,10326,2927],{"class":258},[100,10328,10329,10331],{"class":102,"line":199},[100,10330,3562],{"class":471},[100,10332,9345],{"class":110},[100,10334,10335,10337],{"class":102,"line":532},[100,10336,9355],{"class":471},[100,10338,9358],{"class":106},[100,10340,10341],{"class":102,"line":577},[100,10342,3178],{"class":258},[100,10344,10345],{"class":102,"line":589},[100,10346,9381],{"class":258},[100,10348,10349,10351],{"class":102,"line":595},[100,10350,3596],{"class":471},[100,10352,9393],{"class":258},[100,10354,10355,10357],{"class":102,"line":601},[100,10356,3596],{"class":471},[100,10358,9405],{"class":258},[100,10360,10361],{"class":102,"line":606},[100,10362,5594],{"class":258},[100,10364,10365],{"class":102,"line":612},[100,10366,10367],{"class":1836},"\u002F\u002F打印学生信息的函数\n",[100,10369,10370],{"class":102,"line":618},[100,10371,10372],{"class":1836},"\u002F\u002F值传递\n",[100,10374,10375,10377,10380,10382,10384,10386,10388],{"class":102,"line":623},[100,10376,6960],{"class":471},[100,10378,10379],{"class":106}," printStudent1",[100,10381,713],{"class":258},[100,10383,9355],{"class":471},[100,10385,9494],{"class":106},[100,10387,10014],{"class":6812},[100,10389,809],{"class":258},[100,10391,10392],{"class":102,"line":629},[100,10393,3178],{"class":258},[100,10395,10396,10398,10400,10403,10405,10408,10410,10413,10415,10417,10419,10422,10424],{"class":102,"line":635},[100,10397,8125],{"class":258},[100,10399,2810],{"class":471},[100,10401,10402],{"class":258}," s.name ",[100,10404,2810],{"class":471},[100,10406,10407],{"class":110}," \" \"",[100,10409,3077],{"class":471},[100,10411,10412],{"class":258}," s.age ",[100,10414,2810],{"class":471},[100,10416,10407],{"class":110},[100,10418,3077],{"class":471},[100,10420,10421],{"class":258}," s.score ",[100,10423,2810],{"class":471},[100,10425,10426],{"class":258}," endl;\n",[100,10428,10429],{"class":102,"line":641},[100,10430,3197],{"class":258},[100,10432,10433],{"class":102,"line":647},[100,10434,10435],{"class":1836},"\u002F\u002F地址传递\n",[100,10437,10438,10440,10443,10445,10447,10449,10451,10453],{"class":102,"line":653},[100,10439,6960],{"class":471},[100,10441,10442],{"class":106}," printStudent2",[100,10444,713],{"class":258},[100,10446,9355],{"class":471},[100,10448,9494],{"class":106},[100,10450,8114],{"class":471},[100,10452,2461],{"class":6812},[100,10454,809],{"class":258},[100,10456,10457],{"class":102,"line":659},[100,10458,3178],{"class":258},[100,10460,10461,10463,10465,10468,10470,10472,10474,10477,10479,10481,10483,10486,10488],{"class":102,"line":665},[100,10462,8125],{"class":258},[100,10464,2810],{"class":471},[100,10466,10467],{"class":258}," s->name ",[100,10469,2810],{"class":471},[100,10471,10407],{"class":110},[100,10473,3077],{"class":471},[100,10475,10476],{"class":258}," s->age ",[100,10478,2810],{"class":471},[100,10480,10407],{"class":110},[100,10482,3077],{"class":471},[100,10484,10485],{"class":258}," s->score ",[100,10487,2810],{"class":471},[100,10489,10426],{"class":258},[100,10491,10492],{"class":102,"line":670},[100,10493,3197],{"class":258},[100,10495,10496,10498,10500],{"class":102,"line":675},[100,10497,1784],{"class":471},[100,10499,786],{"class":106},[100,10501,3587],{"class":258},[100,10503,10504],{"class":102,"line":699},[100,10505,3178],{"class":258},[100,10507,10508,10510,10512],{"class":102,"line":708},[100,10509,9491],{"class":471},[100,10511,9494],{"class":106},[100,10513,10514],{"class":258}," s;\n",[100,10516,10517,10520,10522,10525],{"class":102,"line":722},[100,10518,10519],{"class":258},"    s.name ",[100,10521,472],{"class":471},[100,10523,10524],{"class":110}," \"张三\"",[100,10526,2927],{"class":258},[100,10528,10529,10532,10534,10537],{"class":102,"line":735},[100,10530,10531],{"class":258},"    s.age ",[100,10533,472],{"class":471},[100,10535,10536],{"class":117}," 20",[100,10538,2927],{"class":258},[100,10540,10541,10544,10546,10549],{"class":102,"line":754},[100,10542,10543],{"class":258},"    s.score ",[100,10545,472],{"class":471},[100,10547,10548],{"class":117}," 85",[100,10550,2927],{"class":258},[100,10552,10553,10555,10557,10560,10562],{"class":102,"line":771},[100,10554,3183],{"class":258},[100,10556,2810],{"class":471},[100,10558,10559],{"class":110},"\"值传递:\"",[100,10561,2810],{"class":471},[100,10563,2832],{"class":258},[100,10565,10566,10569],{"class":102,"line":776},[100,10567,10568],{"class":106},"    printStudent1",[100,10570,10571],{"class":258},"(s);\n",[100,10573,10574,10576,10578,10581,10583],{"class":102,"line":781},[100,10575,3183],{"class":258},[100,10577,2810],{"class":471},[100,10579,10580],{"class":110},"\"地址传递:\"",[100,10582,2810],{"class":471},[100,10584,2832],{"class":258},[100,10586,10587,10590,10592,10594],{"class":102,"line":796},[100,10588,10589],{"class":106},"    printStudent2",[100,10591,713],{"class":258},[100,10593,2120],{"class":471},[100,10595,10596],{"class":258},"s); \n",[100,10598,10599,10601,10603],{"class":102,"line":812},[100,10600,5689],{"class":471},[100,10602,5692],{"class":117},[100,10604,2927],{"class":258},[100,10606,10607],{"class":102,"line":823},[100,10608,3197],{"class":258},[19,10610,381],{},[2773,10612,10613,10616],{},[29,10614,10615],{},"1.先定义结构体，不要在函数中写结构体的定义",[29,10617,10618],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,10620,10622],{"id":10621},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,10624,10625],{},"用const防止误操作",[73,10627,10629],{"className":1770,"code":10628,"language":1772,"meta":79,"style":79},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\nsctuct Student\n{\n    string name;\n    int age;\n    int score;\n};\nvoid printStudents(student s)\n{\n    cout\u003C\u003Cs.name\u003C\u003Cs.age\u003C\u003Cs.score\u003C\u003Cendl;\n}\nint main() \n{\n    Student s={\"张三\",18,18};\n    printStudent(s);\n\n}\n",[32,10630,10631,10637,10647,10653,10658,10662,10666,10672,10678,10682,10698,10702,10725,10729,10737,10741,10762,10769,10773],{"__ignoreMap":79},[100,10632,10633,10635],{"class":102,"line":103},[100,10634,3562],{"class":471},[100,10636,3565],{"class":110},[100,10638,10639,10641,10643,10645],{"class":102,"line":188},[100,10640,3570],{"class":471},[100,10642,3573],{"class":471},[100,10644,3576],{"class":106},[100,10646,2927],{"class":258},[100,10648,10649,10651],{"class":102,"line":199},[100,10650,3562],{"class":471},[100,10652,9345],{"class":110},[100,10654,10655],{"class":102,"line":532},[100,10656,10657],{"class":258},"sctuct Student\n",[100,10659,10660],{"class":102,"line":577},[100,10661,3178],{"class":258},[100,10663,10664],{"class":102,"line":589},[100,10665,9381],{"class":258},[100,10667,10668,10670],{"class":102,"line":595},[100,10669,3596],{"class":471},[100,10671,9393],{"class":258},[100,10673,10674,10676],{"class":102,"line":601},[100,10675,3596],{"class":471},[100,10677,9405],{"class":258},[100,10679,10680],{"class":102,"line":606},[100,10681,5594],{"class":258},[100,10683,10684,10686,10689,10691,10694,10696],{"class":102,"line":612},[100,10685,6960],{"class":471},[100,10687,10688],{"class":106}," printStudents",[100,10690,713],{"class":258},[100,10692,10693],{"class":106},"student",[100,10695,10014],{"class":6812},[100,10697,809],{"class":258},[100,10699,10700],{"class":102,"line":618},[100,10701,3178],{"class":258},[100,10703,10704,10706,10708,10711,10713,10716,10718,10721,10723],{"class":102,"line":623},[100,10705,3183],{"class":258},[100,10707,2810],{"class":471},[100,10709,10710],{"class":258},"s.name",[100,10712,2810],{"class":471},[100,10714,10715],{"class":258},"s.age",[100,10717,2810],{"class":471},[100,10719,10720],{"class":258},"s.score",[100,10722,2810],{"class":471},[100,10724,2832],{"class":258},[100,10726,10727],{"class":102,"line":629},[100,10728,3197],{"class":258},[100,10730,10731,10733,10735],{"class":102,"line":635},[100,10732,1784],{"class":471},[100,10734,786],{"class":106},[100,10736,7574],{"class":258},[100,10738,10739],{"class":102,"line":641},[100,10740,3178],{"class":258},[100,10742,10743,10746,10748,10750,10752,10754,10756,10758,10760],{"class":102,"line":647},[100,10744,10745],{"class":258},"    Student s",[100,10747,472],{"class":471},[100,10749,2662],{"class":258},[100,10751,9512],{"class":110},[100,10753,2145],{"class":258},[100,10755,2417],{"class":117},[100,10757,2145],{"class":258},[100,10759,2417],{"class":117},[100,10761,5594],{"class":258},[100,10763,10764,10767],{"class":102,"line":653},[100,10765,10766],{"class":106},"    printStudent",[100,10768,10571],{"class":258},[100,10770,10771],{"class":102,"line":659},[100,10772,570],{"emptyLinePlaceholder":569},[100,10774,10775],{"class":102,"line":665},[100,10776,3197],{"class":258},[19,10778,381],{},[2773,10780,10781,10784,10787],{},[29,10782,10783],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[29,10785,10786],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[29,10788,10789],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[73,10791,10793],{"className":1770,"code":10792,"language":1772,"meta":79,"style":79},"void printStudents(const student *s)\n{\n    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n    cout\u003C\u003Cs.name\u003C\u003Cs.age\u003C\u003Cs.score\u003C\u003Cendl;\n}\n",[32,10794,10795,10814,10818,10823,10843],{"__ignoreMap":79},[100,10796,10797,10799,10801,10803,10805,10808,10810,10812],{"class":102,"line":103},[100,10798,6960],{"class":471},[100,10800,10688],{"class":106},[100,10802,713],{"class":258},[100,10804,8388],{"class":471},[100,10806,10807],{"class":106}," student",[100,10809,8114],{"class":471},[100,10811,2461],{"class":6812},[100,10813,809],{"class":258},[100,10815,10816],{"class":102,"line":188},[100,10817,3178],{"class":258},[100,10819,10820],{"class":102,"line":199},[100,10821,10822],{"class":1836},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[100,10824,10825,10827,10829,10831,10833,10835,10837,10839,10841],{"class":102,"line":532},[100,10826,3183],{"class":258},[100,10828,2810],{"class":471},[100,10830,10710],{"class":258},[100,10832,2810],{"class":471},[100,10834,10715],{"class":258},[100,10836,2810],{"class":471},[100,10838,10720],{"class":258},[100,10840,2810],{"class":471},[100,10842,2832],{"class":258},[100,10844,10845],{"class":102,"line":577},[100,10846,3197],{"class":258},[14,10848,10850],{"id":10849},"_47案例","4.7案例",[26,10852,10853],{},[29,10854,10855],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[73,10857,10859],{"className":1770,"code":10858,"language":1772,"meta":79,"style":79},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n#include\u003Cctime>\n\u002F\u002F定义学生结构体\nstruct Student\n{\n    string sName;\n    int age;\n    int score;\n};\n\u002F\u002F定义老师结构体\nstruct Teacher\n{\n    string tName;\n    \u002F\u002F学生数组\n    struct Student sArray[5];\n};\n\u002F\u002F给老师和学生赋值的函数\nvoid allocateSpace(struct Teacher tArray[],int len)\n{\n    string nameSeed=\"ABCDE\";\n    for (int i = 0; i \u003C len; i++)\n    {\n        tArray[i].tName = \"Teacher_\";\n        tArray[i].tName +=nameSeed[i];\n\n        \u002F\u002F通过循环给每名老师带的学生赋值\n        for (int j = 0; j \u003C 5; j++)\n        {\n            tArray[i].sArray[j].sName = \"Student_\";\n            tArray[i].sArray[j].sName += nameSeed[j];\n            int random=rand()%60+40;\u002F\u002F40~99\n            tArray[i].sArray[j].age = 20;\n            tArray[i].sArray[j].score = random;\n        }\n    }\n}\n\u002F\u002F打印所有信息的函数\nvoid printInfo(struct Teacher tArray[], int len)\n{\n    for (int i = 0; i \u003C len; i++)\n    {\n        cout \u003C\u003C \"Teacher: \" \u003C\u003C tArray[i].tName \u003C\u003C endl;\n        for (int j = 0; j \u003C 5; j++)\n        {\n            cout \u003C\u003C \"\\tStudent: \" \u003C\u003C tArray[i].sArray[j].sName\u003C\u003Cendl;\n            cout \u003C\u003C \"\\tAge: \" \u003C\u003C tArray[i].sArray[j].age \u003C\u003C endl;\n            cout \u003C\u003C \"\\tScore: \" \u003C\u003C tArray[i].sArray[j].score \u003C\u003C endl;   \n        }\n    }\n}\nint main()\n{\n    \u002F\u002F随机数种子\n    srand((unsigned int)time(NULL));\n    \u002F\u002F1.创建3名老师的数组\n    struct Teacher tArray[3];\n    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n    int len = sizeof(tArray) \u002F sizeof(tArray[0]);\n    allocateSpace(tArray, len);\n    \u002F\u002F3.打印所有老师及所带的学生信息\n    printInfo(tArray, len);\n\n}\n",[32,10860,10861,10867,10877,10883,10890,10894,10900,10904,10909,10915,10921,10925,10929,10935,10939,10944,10949,10962,10966,10971,10997,11001,11013,11040,11044,11056,11066,11070,11075,11104,11108,11120,11129,11156,11167,11177,11181,11185,11189,11194,11218,11222,11246,11250,11269,11295,11299,11323,11345,11368,11373,11378,11383,11392,11397,11403,11424,11430,11444,11450,11477,11486,11492,11500,11505],{"__ignoreMap":79},[100,10862,10863,10865],{"class":102,"line":103},[100,10864,3562],{"class":471},[100,10866,3565],{"class":110},[100,10868,10869,10871,10873,10875],{"class":102,"line":188},[100,10870,3570],{"class":471},[100,10872,3573],{"class":471},[100,10874,3576],{"class":106},[100,10876,2927],{"class":258},[100,10878,10879,10881],{"class":102,"line":199},[100,10880,3562],{"class":471},[100,10882,9345],{"class":110},[100,10884,10885,10887],{"class":102,"line":532},[100,10886,3562],{"class":471},[100,10888,10889],{"class":110},"\u003Cctime>\n",[100,10891,10892],{"class":102,"line":577},[100,10893,10124],{"class":1836},[100,10895,10896,10898],{"class":102,"line":589},[100,10897,9355],{"class":471},[100,10899,9358],{"class":106},[100,10901,10902],{"class":102,"line":595},[100,10903,3178],{"class":258},[100,10905,10906],{"class":102,"line":601},[100,10907,10908],{"class":258},"    string sName;\n",[100,10910,10911,10913],{"class":102,"line":606},[100,10912,3596],{"class":471},[100,10914,9393],{"class":258},[100,10916,10917,10919],{"class":102,"line":612},[100,10918,3596],{"class":471},[100,10920,9405],{"class":258},[100,10922,10923],{"class":102,"line":618},[100,10924,5594],{"class":258},[100,10926,10927],{"class":102,"line":623},[100,10928,10161],{"class":1836},[100,10930,10931,10933],{"class":102,"line":629},[100,10932,9355],{"class":471},[100,10934,10168],{"class":106},[100,10936,10937],{"class":102,"line":635},[100,10938,3178],{"class":258},[100,10940,10941],{"class":102,"line":641},[100,10942,10943],{"class":258},"    string tName;\n",[100,10945,10946],{"class":102,"line":647},[100,10947,10948],{"class":1836},"    \u002F\u002F学生数组\n",[100,10950,10951,10953,10955,10958,10960],{"class":102,"line":653},[100,10952,9491],{"class":471},[100,10954,9494],{"class":106},[100,10956,10957],{"class":258}," sArray[",[100,10959,2086],{"class":117},[100,10961,6288],{"class":258},[100,10963,10964],{"class":102,"line":659},[100,10965,5594],{"class":258},[100,10967,10968],{"class":102,"line":665},[100,10969,10970],{"class":1836},"\u002F\u002F给老师和学生赋值的函数\n",[100,10972,10973,10975,10978,10980,10982,10985,10988,10991,10993,10995],{"class":102,"line":670},[100,10974,6960],{"class":471},[100,10976,10977],{"class":106}," allocateSpace",[100,10979,713],{"class":258},[100,10981,9355],{"class":471},[100,10983,10984],{"class":106}," Teacher",[100,10986,10987],{"class":6812}," tArray",[100,10989,10990],{"class":258},"[],",[100,10992,1784],{"class":471},[100,10994,8927],{"class":6812},[100,10996,809],{"class":258},[100,10998,10999],{"class":102,"line":675},[100,11000,3178],{"class":258},[100,11002,11003,11006,11008,11011],{"class":102,"line":699},[100,11004,11005],{"class":258},"    string nameSeed",[100,11007,472],{"class":471},[100,11009,11010],{"class":110},"\"ABCDE\"",[100,11012,2927],{"class":258},[100,11014,11015,11017,11019,11021,11024,11026,11028,11031,11033,11036,11038],{"class":102,"line":708},[100,11016,848],{"class":471},[100,11018,3283],{"class":258},[100,11020,1784],{"class":471},[100,11022,11023],{"class":258}," i ",[100,11025,472],{"class":471},[100,11027,5692],{"class":117},[100,11029,11030],{"class":258},"; i ",[100,11032,2676],{"class":471},[100,11034,11035],{"class":258}," len; i",[100,11037,3903],{"class":471},[100,11039,809],{"class":258},[100,11041,11042],{"class":102,"line":722},[100,11043,3641],{"class":258},[100,11045,11046,11049,11051,11054],{"class":102,"line":735},[100,11047,11048],{"class":258},"        tArray[i].tName ",[100,11050,472],{"class":471},[100,11052,11053],{"class":110}," \"Teacher_\"",[100,11055,2927],{"class":258},[100,11057,11058,11060,11063],{"class":102,"line":754},[100,11059,11048],{"class":258},[100,11061,11062],{"class":471},"+=",[100,11064,11065],{"class":258},"nameSeed[i];\n",[100,11067,11068],{"class":102,"line":771},[100,11069,570],{"emptyLinePlaceholder":569},[100,11071,11072],{"class":102,"line":776},[100,11073,11074],{"class":1836},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[100,11076,11077,11079,11081,11083,11086,11088,11090,11093,11095,11097,11100,11102],{"class":102,"line":781},[100,11078,5003],{"class":471},[100,11080,3283],{"class":258},[100,11082,1784],{"class":471},[100,11084,11085],{"class":258}," j ",[100,11087,472],{"class":471},[100,11089,5692],{"class":117},[100,11091,11092],{"class":258},"; j ",[100,11094,2676],{"class":471},[100,11096,3759],{"class":117},[100,11098,11099],{"class":258},"; j",[100,11101,3903],{"class":471},[100,11103,809],{"class":258},[100,11105,11106],{"class":102,"line":796},[100,11107,4119],{"class":258},[100,11109,11110,11113,11115,11118],{"class":102,"line":812},[100,11111,11112],{"class":258},"            tArray[i].sArray[j].sName ",[100,11114,472],{"class":471},[100,11116,11117],{"class":110}," \"Student_\"",[100,11119,2927],{"class":258},[100,11121,11122,11124,11126],{"class":102,"line":823},[100,11123,11112],{"class":258},[100,11125,11062],{"class":471},[100,11127,11128],{"class":258}," nameSeed[j];\n",[100,11130,11131,11134,11137,11139,11141,11143,11145,11147,11149,11151,11153],{"class":102,"line":828},[100,11132,11133],{"class":471},"            int",[100,11135,11136],{"class":258}," random",[100,11138,472],{"class":471},[100,11140,4033],{"class":106},[100,11142,4036],{"class":258},[100,11144,2095],{"class":471},[100,11146,2673],{"class":117},[100,11148,2248],{"class":471},[100,11150,2168],{"class":117},[100,11152,1833],{"class":258},[100,11154,11155],{"class":1836},"\u002F\u002F40~99\n",[100,11157,11158,11161,11163,11165],{"class":102,"line":840},[100,11159,11160],{"class":258},"            tArray[i].sArray[j].age ",[100,11162,472],{"class":471},[100,11164,10536],{"class":117},[100,11166,2927],{"class":258},[100,11168,11169,11172,11174],{"class":102,"line":845},[100,11170,11171],{"class":258},"            tArray[i].sArray[j].score ",[100,11173,472],{"class":471},[100,11175,11176],{"class":258}," random;\n",[100,11178,11179],{"class":102,"line":868},[100,11180,4138],{"class":258},[100,11182,11183],{"class":102,"line":874},[100,11184,3798],{"class":258},[100,11186,11187],{"class":102,"line":879},[100,11188,3197],{"class":258},[100,11190,11191],{"class":102,"line":889},[100,11192,11193],{"class":1836},"\u002F\u002F打印所有信息的函数\n",[100,11195,11196,11198,11201,11203,11205,11207,11209,11212,11214,11216],{"class":102,"line":894},[100,11197,6960],{"class":471},[100,11199,11200],{"class":106}," printInfo",[100,11202,713],{"class":258},[100,11204,9355],{"class":471},[100,11206,10984],{"class":106},[100,11208,10987],{"class":6812},[100,11210,11211],{"class":258},"[], ",[100,11213,1784],{"class":471},[100,11215,8927],{"class":6812},[100,11217,809],{"class":258},[100,11219,11220],{"class":102,"line":900},[100,11221,3178],{"class":258},[100,11223,11224,11226,11228,11230,11232,11234,11236,11238,11240,11242,11244],{"class":102,"line":910},[100,11225,848],{"class":471},[100,11227,3283],{"class":258},[100,11229,1784],{"class":471},[100,11231,11023],{"class":258},[100,11233,472],{"class":471},[100,11235,5692],{"class":117},[100,11237,11030],{"class":258},[100,11239,2676],{"class":471},[100,11241,11035],{"class":258},[100,11243,3903],{"class":471},[100,11245,809],{"class":258},[100,11247,11248],{"class":102,"line":915},[100,11249,3641],{"class":258},[100,11251,11252,11255,11257,11260,11262,11265,11267],{"class":102,"line":929},[100,11253,11254],{"class":258},"        cout ",[100,11256,2810],{"class":471},[100,11258,11259],{"class":110}," \"Teacher: \"",[100,11261,3077],{"class":471},[100,11263,11264],{"class":258}," tArray[i].tName ",[100,11266,2810],{"class":471},[100,11268,10426],{"class":258},[100,11270,11271,11273,11275,11277,11279,11281,11283,11285,11287,11289,11291,11293],{"class":102,"line":935},[100,11272,5003],{"class":471},[100,11274,3283],{"class":258},[100,11276,1784],{"class":471},[100,11278,11085],{"class":258},[100,11280,472],{"class":471},[100,11282,5692],{"class":117},[100,11284,11092],{"class":258},[100,11286,2676],{"class":471},[100,11288,3759],{"class":117},[100,11290,11099],{"class":258},[100,11292,3903],{"class":471},[100,11294,809],{"class":258},[100,11296,11297],{"class":102,"line":945},[100,11298,4119],{"class":258},[100,11300,11301,11304,11306,11309,11311,11314,11316,11319,11321],{"class":102,"line":950},[100,11302,11303],{"class":258},"            cout ",[100,11305,2810],{"class":471},[100,11307,11308],{"class":110}," \"",[100,11310,2867],{"class":117},[100,11312,11313],{"class":110},"Student: \"",[100,11315,3077],{"class":471},[100,11317,11318],{"class":258}," tArray[i].sArray[j].sName",[100,11320,2810],{"class":471},[100,11322,2832],{"class":258},[100,11324,11325,11327,11329,11331,11333,11336,11338,11341,11343],{"class":102,"line":955},[100,11326,11303],{"class":258},[100,11328,2810],{"class":471},[100,11330,11308],{"class":110},[100,11332,2867],{"class":117},[100,11334,11335],{"class":110},"Age: \"",[100,11337,3077],{"class":471},[100,11339,11340],{"class":258}," tArray[i].sArray[j].age ",[100,11342,2810],{"class":471},[100,11344,10426],{"class":258},[100,11346,11347,11349,11351,11353,11355,11358,11360,11363,11365],{"class":102,"line":972},[100,11348,11303],{"class":258},[100,11350,2810],{"class":471},[100,11352,11308],{"class":110},[100,11354,2867],{"class":117},[100,11356,11357],{"class":110},"Score: \"",[100,11359,3077],{"class":471},[100,11361,11362],{"class":258}," tArray[i].sArray[j].score ",[100,11364,2810],{"class":471},[100,11366,11367],{"class":258}," endl;   \n",[100,11369,11371],{"class":102,"line":11370},50,[100,11372,4138],{"class":258},[100,11374,11376],{"class":102,"line":11375},51,[100,11377,3798],{"class":258},[100,11379,11381],{"class":102,"line":11380},52,[100,11382,3197],{"class":258},[100,11384,11386,11388,11390],{"class":102,"line":11385},53,[100,11387,1784],{"class":471},[100,11389,786],{"class":106},[100,11391,3587],{"class":258},[100,11393,11395],{"class":102,"line":11394},54,[100,11396,3178],{"class":258},[100,11398,11400],{"class":102,"line":11399},55,[100,11401,11402],{"class":1836},"    \u002F\u002F随机数种子\n",[100,11404,11406,11408,11410,11412,11414,11416,11418,11420,11422],{"class":102,"line":11405},56,[100,11407,3984],{"class":106},[100,11409,3987],{"class":258},[100,11411,3990],{"class":471},[100,11413,3993],{"class":471},[100,11415,2196],{"class":258},[100,11417,1398],{"class":106},[100,11419,713],{"class":258},[100,11421,4002],{"class":117},[100,11423,4005],{"class":258},[100,11425,11427],{"class":102,"line":11426},57,[100,11428,11429],{"class":1836},"    \u002F\u002F1.创建3名老师的数组\n",[100,11431,11433,11435,11437,11440,11442],{"class":102,"line":11432},58,[100,11434,9491],{"class":471},[100,11436,10984],{"class":106},[100,11438,11439],{"class":258}," tArray[",[100,11441,1849],{"class":117},[100,11443,6288],{"class":258},[100,11445,11447],{"class":102,"line":11446},59,[100,11448,11449],{"class":1836},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[100,11451,11453,11455,11458,11460,11463,11466,11468,11470,11473,11475],{"class":102,"line":11452},60,[100,11454,3596],{"class":471},[100,11456,11457],{"class":258}," len ",[100,11459,472],{"class":471},[100,11461,11462],{"class":471}," sizeof",[100,11464,11465],{"class":258},"(tArray) ",[100,11467,2351],{"class":471},[100,11469,11462],{"class":471},[100,11471,11472],{"class":258},"(tArray[",[100,11474,1366],{"class":117},[100,11476,5455],{"class":258},[100,11478,11480,11483],{"class":102,"line":11479},61,[100,11481,11482],{"class":106},"    allocateSpace",[100,11484,11485],{"class":258},"(tArray, len);\n",[100,11487,11489],{"class":102,"line":11488},62,[100,11490,11491],{"class":1836},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[100,11493,11495,11498],{"class":102,"line":11494},63,[100,11496,11497],{"class":106},"    printInfo",[100,11499,11485],{"class":258},[100,11501,11503],{"class":102,"line":11502},64,[100,11504,570],{"emptyLinePlaceholder":569},[100,11506,11508],{"class":102,"line":11507},65,[100,11509,3197],{"class":258},[26,11511,11512],{"start":188},[29,11513,11514,11517],{},[1921,11515,11516],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,11519,11520],{},"五名英雄信息如下：",[73,11522,11526],{"className":11523,"code":11524,"language":11525,"meta":79,"style":79},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[32,11527,11528,11546,11563,11580,11597],{"__ignoreMap":79},[100,11529,11530,11532,11535,11537,11539,11541,11544],{"class":102,"line":103},[100,11531,6515],{"class":258},[100,11533,11534],{"class":110},"\"刘备\"",[100,11536,2145],{"class":258},[100,11538,2541],{"class":117},[100,11540,2145],{"class":258},[100,11542,11543],{"class":110},"\"男\"",[100,11545,6528],{"class":258},[100,11547,11548,11550,11553,11555,11557,11559,11561],{"class":102,"line":188},[100,11549,6515],{"class":258},[100,11551,11552],{"class":110},"\"关羽\"",[100,11554,2145],{"class":258},[100,11556,2516],{"class":117},[100,11558,2145],{"class":258},[100,11560,11543],{"class":110},[100,11562,6528],{"class":258},[100,11564,11565,11567,11570,11572,11574,11576,11578],{"class":102,"line":199},[100,11566,6515],{"class":258},[100,11568,11569],{"class":110},"\"张飞\"",[100,11571,2145],{"class":258},[100,11573,2466],{"class":117},[100,11575,2145],{"class":258},[100,11577,11543],{"class":110},[100,11579,6528],{"class":258},[100,11581,11582,11584,11587,11589,11591,11593,11595],{"class":102,"line":532},[100,11583,6515],{"class":258},[100,11585,11586],{"class":110},"\"赵云\"",[100,11588,2145],{"class":258},[100,11590,2491],{"class":117},[100,11592,2145],{"class":258},[100,11594,11543],{"class":110},[100,11596,6528],{"class":258},[100,11598,11599,11601,11604,11606,11608,11610,11613],{"class":102,"line":577},[100,11600,6515],{"class":258},[100,11602,11603],{"class":110},"\"貂蝉\"",[100,11605,2145],{"class":258},[100,11607,2441],{"class":117},[100,11609,2145],{"class":258},[100,11611,11612],{"class":110},"\"女\"",[100,11614,6528],{"class":258},[19,11616,11617],{},"代码：",[73,11619,11621],{"className":1770,"code":11620,"language":1772,"meta":79,"style":79},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\nstruct Sanguo\n{\n    string name;\n    int age;\n    string gender;\n};\n\u002F\u002F定义排序函数\nvoid bubbleSort(Sanguo *s,int len)\n{\n    for(int i=0;i\u003Clen;i++)\n    {\n     for (int j=0;j\u003Clen-1-i;j++)\n     {\n         if ((s+j)->age > (s+j+1)->age)\n         {\n             Sanguo temp=*(s+j);\n             *(s+j)=*(s+j+1);\n             *(s+j+1)=temp;\n         }\n     }\n    }\n}\n\u002F\u002F定义打印函数\nvoid printInfo(Sanguo *s,int len)\n{\n    for (int i=0;i\u003Clen;i++)\n    {\n        cout\u003C\u003C\"\\t姓名：\"\u003C\u003C(s+i)->name\u003C\u003C\"\\t年龄：\"\u003C\u003C(s+i)->age\u003C\u003C\"\\t性别：\"\u003C\u003C(s+i)->gender\u003C\u003Cendl;\n    }\n}\nint main()\n{\n    \u002F\u002F定义结构体变量\n    Sanguo s1[5]=\n    {\n        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n    };\n    int len=sizeof(s1)\u002Fsizeof(s1[0]);\n    Sanguo *s = &s1[0];\n    \u002F\u002F排序前：\n    cout \u003C\u003C \"排序前：\" \u003C\u003C endl;\n    printInfo(s,len);\n    \u002F\u002F调用排序函数\n    bubbleSort(s,len);\n    \u002F\u002F排序后\n    cout \u003C\u003C \"排序后：\" \u003C\u003C endl;\n    printInfo(s,len);\n}\n",[32,11622,11623,11629,11639,11645,11652,11656,11660,11666,11671,11675,11680,11703,11707,11732,11736,11769,11774,11803,11808,11823,11849,11869,11874,11879,11883,11887,11892,11914,11918,11942,11946,12008,12012,12016,12024,12028,12033,12044,12048,12064,12080,12096,12112,12128,12132,12152,12174,12179,12192,12199,12204,12210,12215,12228,12234],{"__ignoreMap":79},[100,11624,11625,11627],{"class":102,"line":103},[100,11626,3562],{"class":471},[100,11628,3565],{"class":110},[100,11630,11631,11633,11635,11637],{"class":102,"line":188},[100,11632,3570],{"class":471},[100,11634,3573],{"class":471},[100,11636,3576],{"class":106},[100,11638,2927],{"class":258},[100,11640,11641,11643],{"class":102,"line":199},[100,11642,3562],{"class":471},[100,11644,9345],{"class":110},[100,11646,11647,11649],{"class":102,"line":532},[100,11648,9355],{"class":471},[100,11650,11651],{"class":106}," Sanguo\n",[100,11653,11654],{"class":102,"line":577},[100,11655,3178],{"class":258},[100,11657,11658],{"class":102,"line":589},[100,11659,9381],{"class":258},[100,11661,11662,11664],{"class":102,"line":595},[100,11663,3596],{"class":471},[100,11665,9393],{"class":258},[100,11667,11668],{"class":102,"line":601},[100,11669,11670],{"class":258},"    string gender;\n",[100,11672,11673],{"class":102,"line":606},[100,11674,5594],{"class":258},[100,11676,11677],{"class":102,"line":612},[100,11678,11679],{"class":1836},"\u002F\u002F定义排序函数\n",[100,11681,11682,11684,11686,11688,11691,11693,11695,11697,11699,11701],{"class":102,"line":618},[100,11683,6960],{"class":471},[100,11685,8912],{"class":106},[100,11687,713],{"class":258},[100,11689,11690],{"class":106},"Sanguo",[100,11692,8114],{"class":471},[100,11694,2461],{"class":6812},[100,11696,2145],{"class":258},[100,11698,1784],{"class":471},[100,11700,8927],{"class":6812},[100,11702,809],{"class":258},[100,11704,11705],{"class":102,"line":623},[100,11706,3178],{"class":258},[100,11708,11709,11711,11713,11715,11717,11719,11721,11723,11725,11728,11730],{"class":102,"line":629},[100,11710,848],{"class":471},[100,11712,713],{"class":258},[100,11714,1784],{"class":471},[100,11716,4633],{"class":258},[100,11718,472],{"class":471},[100,11720,1366],{"class":117},[100,11722,4640],{"class":258},[100,11724,2676],{"class":471},[100,11726,11727],{"class":258},"len;i",[100,11729,3903],{"class":471},[100,11731,809],{"class":258},[100,11733,11734],{"class":102,"line":635},[100,11735,3641],{"class":258},[100,11737,11738,11741,11743,11745,11747,11749,11751,11753,11755,11757,11759,11761,11763,11765,11767],{"class":102,"line":641},[100,11739,11740],{"class":471},"     for",[100,11742,3283],{"class":258},[100,11744,1784],{"class":471},[100,11746,5010],{"class":258},[100,11748,472],{"class":471},[100,11750,1366],{"class":117},[100,11752,5017],{"class":258},[100,11754,2676],{"class":471},[100,11756,8954],{"class":258},[100,11758,2299],{"class":471},[100,11760,1985],{"class":117},[100,11762,2299],{"class":471},[100,11764,5150],{"class":258},[100,11766,3903],{"class":471},[100,11768,809],{"class":258},[100,11770,11771],{"class":102,"line":647},[100,11772,11773],{"class":258},"     {\n",[100,11775,11776,11779,11782,11784,11787,11789,11792,11794,11796,11798,11800],{"class":102,"line":653},[100,11777,11778],{"class":471},"         if",[100,11780,11781],{"class":258}," ((s",[100,11783,2248],{"class":471},[100,11785,11786],{"class":258},"j)->age ",[100,11788,2726],{"class":471},[100,11790,11791],{"class":258}," (s",[100,11793,2248],{"class":471},[100,11795,2234],{"class":258},[100,11797,2248],{"class":471},[100,11799,1985],{"class":117},[100,11801,11802],{"class":258},")->age)\n",[100,11804,11805],{"class":102,"line":659},[100,11806,11807],{"class":258},"         {\n",[100,11809,11810,11813,11815,11818,11820],{"class":102,"line":665},[100,11811,11812],{"class":258},"             Sanguo temp",[100,11814,8749],{"class":471},[100,11816,11817],{"class":258},"(s",[100,11819,2248],{"class":471},[100,11821,11822],{"class":258},"j);\n",[100,11824,11825,11828,11830,11832,11835,11837,11839,11841,11843,11845,11847],{"class":102,"line":670},[100,11826,11827],{"class":471},"             *",[100,11829,11817],{"class":258},[100,11831,2248],{"class":471},[100,11833,11834],{"class":258},"j)",[100,11836,8749],{"class":471},[100,11838,11817],{"class":258},[100,11840,2248],{"class":471},[100,11842,2234],{"class":258},[100,11844,2248],{"class":471},[100,11846,1985],{"class":117},[100,11848,4321],{"class":258},[100,11850,11851,11853,11855,11857,11859,11861,11863,11865,11867],{"class":102,"line":675},[100,11852,11827],{"class":471},[100,11854,11817],{"class":258},[100,11856,2248],{"class":471},[100,11858,2234],{"class":258},[100,11860,2248],{"class":471},[100,11862,1985],{"class":117},[100,11864,2196],{"class":258},[100,11866,472],{"class":471},[100,11868,5879],{"class":258},[100,11870,11871],{"class":102,"line":699},[100,11872,11873],{"class":258},"         }\n",[100,11875,11876],{"class":102,"line":708},[100,11877,11878],{"class":258},"     }\n",[100,11880,11881],{"class":102,"line":722},[100,11882,3798],{"class":258},[100,11884,11885],{"class":102,"line":735},[100,11886,3197],{"class":258},[100,11888,11889],{"class":102,"line":754},[100,11890,11891],{"class":1836},"\u002F\u002F定义打印函数\n",[100,11893,11894,11896,11898,11900,11902,11904,11906,11908,11910,11912],{"class":102,"line":771},[100,11895,6960],{"class":471},[100,11897,11200],{"class":106},[100,11899,713],{"class":258},[100,11901,11690],{"class":106},[100,11903,8114],{"class":471},[100,11905,2461],{"class":6812},[100,11907,2145],{"class":258},[100,11909,1784],{"class":471},[100,11911,8927],{"class":6812},[100,11913,809],{"class":258},[100,11915,11916],{"class":102,"line":776},[100,11917,3178],{"class":258},[100,11919,11920,11922,11924,11926,11928,11930,11932,11934,11936,11938,11940],{"class":102,"line":781},[100,11921,848],{"class":471},[100,11923,3283],{"class":258},[100,11925,1784],{"class":471},[100,11927,4633],{"class":258},[100,11929,472],{"class":471},[100,11931,1366],{"class":117},[100,11933,4640],{"class":258},[100,11935,2676],{"class":471},[100,11937,11727],{"class":258},[100,11939,3903],{"class":471},[100,11941,809],{"class":258},[100,11943,11944],{"class":102,"line":796},[100,11945,3641],{"class":258},[100,11947,11948,11950,11952,11954,11956,11959,11961,11963,11965,11968,11970,11972,11974,11977,11979,11981,11983,11986,11988,11990,11992,11995,11997,11999,12001,12004,12006],{"class":102,"line":812},[100,11949,5051],{"class":258},[100,11951,2810],{"class":471},[100,11953,2019],{"class":110},[100,11955,2867],{"class":117},[100,11957,11958],{"class":110},"姓名：\"",[100,11960,2810],{"class":471},[100,11962,11817],{"class":258},[100,11964,2248],{"class":471},[100,11966,11967],{"class":258},"i)->name",[100,11969,2810],{"class":471},[100,11971,2019],{"class":110},[100,11973,2867],{"class":117},[100,11975,11976],{"class":110},"年龄：\"",[100,11978,2810],{"class":471},[100,11980,11817],{"class":258},[100,11982,2248],{"class":471},[100,11984,11985],{"class":258},"i)->age",[100,11987,2810],{"class":471},[100,11989,2019],{"class":110},[100,11991,2867],{"class":117},[100,11993,11994],{"class":110},"性别：\"",[100,11996,2810],{"class":471},[100,11998,11817],{"class":258},[100,12000,2248],{"class":471},[100,12002,12003],{"class":258},"i)->gender",[100,12005,2810],{"class":471},[100,12007,2832],{"class":258},[100,12009,12010],{"class":102,"line":823},[100,12011,3798],{"class":258},[100,12013,12014],{"class":102,"line":828},[100,12015,3197],{"class":258},[100,12017,12018,12020,12022],{"class":102,"line":840},[100,12019,1784],{"class":471},[100,12021,786],{"class":106},[100,12023,3587],{"class":258},[100,12025,12026],{"class":102,"line":845},[100,12027,3178],{"class":258},[100,12029,12030],{"class":102,"line":868},[100,12031,12032],{"class":1836},"    \u002F\u002F定义结构体变量\n",[100,12034,12035,12038,12040,12042],{"class":102,"line":874},[100,12036,12037],{"class":258},"    Sanguo s1[",[100,12039,2086],{"class":117},[100,12041,2706],{"class":258},[100,12043,6506],{"class":471},[100,12045,12046],{"class":102,"line":879},[100,12047,3641],{"class":258},[100,12049,12050,12052,12054,12056,12058,12060,12062],{"class":102,"line":889},[100,12051,6515],{"class":258},[100,12053,11534],{"class":110},[100,12055,2145],{"class":258},[100,12057,2541],{"class":117},[100,12059,2145],{"class":258},[100,12061,11543],{"class":110},[100,12063,6528],{"class":258},[100,12065,12066,12068,12070,12072,12074,12076,12078],{"class":102,"line":894},[100,12067,6515],{"class":258},[100,12069,11552],{"class":110},[100,12071,2145],{"class":258},[100,12073,2516],{"class":117},[100,12075,2145],{"class":258},[100,12077,11543],{"class":110},[100,12079,6528],{"class":258},[100,12081,12082,12084,12086,12088,12090,12092,12094],{"class":102,"line":900},[100,12083,6515],{"class":258},[100,12085,11569],{"class":110},[100,12087,2145],{"class":258},[100,12089,2466],{"class":117},[100,12091,2145],{"class":258},[100,12093,11543],{"class":110},[100,12095,6528],{"class":258},[100,12097,12098,12100,12102,12104,12106,12108,12110],{"class":102,"line":910},[100,12099,6515],{"class":258},[100,12101,11586],{"class":110},[100,12103,2145],{"class":258},[100,12105,2491],{"class":117},[100,12107,2145],{"class":258},[100,12109,11543],{"class":110},[100,12111,6528],{"class":258},[100,12113,12114,12116,12118,12120,12122,12124,12126],{"class":102,"line":915},[100,12115,6515],{"class":258},[100,12117,11603],{"class":110},[100,12119,2145],{"class":258},[100,12121,2441],{"class":117},[100,12123,2145],{"class":258},[100,12125,11612],{"class":110},[100,12127,6528],{"class":258},[100,12129,12130],{"class":102,"line":929},[100,12131,6549],{"class":258},[100,12133,12134,12136,12138,12140,12143,12145,12148,12150],{"class":102,"line":935},[100,12135,3596],{"class":471},[100,12137,8927],{"class":258},[100,12139,5802],{"class":471},[100,12141,12142],{"class":258},"(s1)",[100,12144,5808],{"class":471},[100,12146,12147],{"class":258},"(s1[",[100,12149,1366],{"class":117},[100,12151,5455],{"class":258},[100,12153,12154,12157,12159,12162,12164,12167,12170,12172],{"class":102,"line":945},[100,12155,12156],{"class":258},"    Sanguo ",[100,12158,2222],{"class":471},[100,12160,12161],{"class":258},"s ",[100,12163,472],{"class":471},[100,12165,12166],{"class":471}," &",[100,12168,12169],{"class":258},"s1[",[100,12171,1366],{"class":117},[100,12173,6288],{"class":258},[100,12175,12176],{"class":102,"line":950},[100,12177,12178],{"class":1836},"    \u002F\u002F排序前：\n",[100,12180,12181,12183,12185,12188,12190],{"class":102,"line":955},[100,12182,8125],{"class":258},[100,12184,2810],{"class":471},[100,12186,12187],{"class":110}," \"排序前：\"",[100,12189,3077],{"class":471},[100,12191,10426],{"class":258},[100,12193,12194,12196],{"class":102,"line":972},[100,12195,11497],{"class":106},[100,12197,12198],{"class":258},"(s,len);\n",[100,12200,12201],{"class":102,"line":11370},[100,12202,12203],{"class":1836},"    \u002F\u002F调用排序函数\n",[100,12205,12206,12208],{"class":102,"line":11375},[100,12207,9194],{"class":106},[100,12209,12198],{"class":258},[100,12211,12212],{"class":102,"line":11380},[100,12213,12214],{"class":1836},"    \u002F\u002F排序后\n",[100,12216,12217,12219,12221,12224,12226],{"class":102,"line":11385},[100,12218,8125],{"class":258},[100,12220,2810],{"class":471},[100,12222,12223],{"class":110}," \"排序后：\"",[100,12225,3077],{"class":471},[100,12227,10426],{"class":258},[100,12229,12230,12232],{"class":102,"line":11394},[100,12231,11497],{"class":106},[100,12233,12198],{"class":258},[100,12235,12236],{"class":102,"line":11399},[100,12237,3197],{"class":258},[19,12239,12240,12241,12243],{},"注意：使用指针时直接用传首地址**&s",[100,12242,1366],{},"**",[1677,12245,12246],{},"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":79,"searchDepth":188,"depth":188,"links":12248},[12249,12250,12251,12252,12253,12254,12255],{"id":9299,"depth":188,"text":9300},{"id":9651,"depth":188,"text":9652},{"id":9920,"depth":188,"text":9921},{"id":10085,"depth":188,"text":10086},{"id":10301,"depth":188,"text":10302},{"id":10621,"depth":188,"text":10622},{"id":10849,"depth":188,"text":10850},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":9288,"description":9296},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":12262,"title":12263,"body":12264,"description":79,"extension":1708,"meta":13607,"navigation":569,"path":13608,"seo":13609,"stem":13610,"__hash__":13611},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":12265,"toc":13601},[12266,12269,12273,12279,12293,12298,12301,12305,12312,12318,12321,12328,12334,12339,12342,12345,12348,12912,12915,12929,12933,12938,12954,13094,13097,13103,13106,13111,13119,13227,13230,13235,13238,13243,13246,13252,13255,13598],[10,12267,12263],{"id":12268},"_5程序内存模型",[14,12270,12272],{"id":12271},"_51内存分区模型","5.1内存分区模型",[19,12274,12275,12276],{},"C++程序在执行时，将内存大方向划分为",[1921,12277,12278],{},"4个区域",[2773,12280,12281,12284,12287,12290],{},[29,12282,12283],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[29,12285,12286],{},"全局区：存放全局变量和静态变量以及常量",[29,12288,12289],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[29,12291,12292],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,12294,12295],{},[1921,12296,12297],{},"内存四区意义：",[19,12299,12300],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[305,12302,12304],{"id":12303},"_511程序运行前","5.1.1程序运行前",[19,12306,12307,12308,12311],{},"​\t在程序编译后，生成了exe可执行程序，",[1921,12309,12310],{},"未执行该程序前","分为两个区域",[19,12313,12314,12315],{},"​\t",[1921,12316,12317],{},"代码区：",[19,12319,12320],{},"​\t\t存放 CPU 执行的机器指令",[19,12322,12323,12324,12327],{},"​\t\t代码区是",[1921,12325,12326],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,12329,12323,12330,12333],{},[1921,12331,12332],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,12335,12314,12336],{},[1921,12337,12338],{},"全局区：",[19,12340,12341],{},"​\t\t全局变量和静态变量存放在此.",[19,12343,12344],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,12346,12347],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[73,12349,12351],{"className":1770,"code":12350,"language":1772,"meta":79,"style":79},"\u002F\u002F全局变量\nint g_a = 10;\nint g_b = 10;\n\n\u002F\u002F全局常量\nconst int c_g_a = 10;\nconst int c_g_b = 10;\n\nint main() {\n\n    \u002F\u002F局部变量\n    int a = 10;\n    int b = 10;\n\n    \u002F\u002F打印地址\n    cout \u003C\u003C \"局部变量a地址为： \" \u003C\u003C (int)&a \u003C\u003C endl;\n    cout \u003C\u003C \"局部变量b地址为： \" \u003C\u003C (int)&b \u003C\u003C endl;\n\n    cout \u003C\u003C \"全局变量g_a地址为： \" \u003C\u003C  (int)&g_a \u003C\u003C endl;\n    cout \u003C\u003C \"全局变量g_b地址为： \" \u003C\u003C  (int)&g_b \u003C\u003C endl;\n\n    \u002F\u002F静态变量\n    static int s_a = 10;\n    static int s_b = 10;\n\n    cout \u003C\u003C \"静态变量s_a地址为： \" \u003C\u003C (int)&s_a \u003C\u003C endl;\n    cout \u003C\u003C \"静态变量s_b地址为： \" \u003C\u003C (int)&s_b \u003C\u003C endl;\n\n    cout \u003C\u003C \"字符串常量地址为： \" \u003C\u003C (int)&\"hello world\" \u003C\u003C endl;\n    cout \u003C\u003C \"字符串常量地址为： \" \u003C\u003C (int)&\"hello world1\" \u003C\u003C endl;\n\n    cout \u003C\u003C \"全局常量c_g_a地址为： \" \u003C\u003C (int)&c_g_a \u003C\u003C endl;\n    cout \u003C\u003C \"全局常量c_g_b地址为： \" \u003C\u003C (int)&c_g_b \u003C\u003C endl;\n\n    const int c_l_a = 10;\n    const int c_l_b = 10;\n    cout \u003C\u003C \"局部常量c_l_a地址为： \" \u003C\u003C (int)&c_l_a \u003C\u003C endl;\n    cout \u003C\u003C \"局部常量c_l_b地址为： \" \u003C\u003C (int)&c_l_b \u003C\u003C endl;\n\n    system(\"pause\");\n\n    return 0;\n}\n",[32,12352,12353,12358,12371,12384,12388,12393,12408,12423,12427,12436,12440,12445,12458,12471,12475,12480,12506,12532,12536,12563,12589,12593,12598,12614,12629,12633,12659,12685,12689,12714,12739,12743,12769,12795,12799,12815,12830,12856,12882,12886,12896,12900,12908],{"__ignoreMap":79},[100,12354,12355],{"class":102,"line":103},[100,12356,12357],{"class":1836},"\u002F\u002F全局变量\n",[100,12359,12360,12362,12365,12367,12369],{"class":102,"line":188},[100,12361,1784],{"class":471},[100,12363,12364],{"class":258}," g_a ",[100,12366,472],{"class":471},[100,12368,3649],{"class":117},[100,12370,2927],{"class":258},[100,12372,12373,12375,12378,12380,12382],{"class":102,"line":199},[100,12374,1784],{"class":471},[100,12376,12377],{"class":258}," g_b ",[100,12379,472],{"class":471},[100,12381,3649],{"class":117},[100,12383,2927],{"class":258},[100,12385,12386],{"class":102,"line":532},[100,12387,570],{"emptyLinePlaceholder":569},[100,12389,12390],{"class":102,"line":577},[100,12391,12392],{"class":1836},"\u002F\u002F全局常量\n",[100,12394,12395,12397,12399,12402,12404,12406],{"class":102,"line":589},[100,12396,8388],{"class":471},[100,12398,3993],{"class":471},[100,12400,12401],{"class":258}," c_g_a ",[100,12403,472],{"class":471},[100,12405,3649],{"class":117},[100,12407,2927],{"class":258},[100,12409,12410,12412,12414,12417,12419,12421],{"class":102,"line":595},[100,12411,8388],{"class":471},[100,12413,3993],{"class":471},[100,12415,12416],{"class":258}," c_g_b ",[100,12418,472],{"class":471},[100,12420,3649],{"class":117},[100,12422,2927],{"class":258},[100,12424,12425],{"class":102,"line":601},[100,12426,570],{"emptyLinePlaceholder":569},[100,12428,12429,12431,12433],{"class":102,"line":606},[100,12430,1784],{"class":471},[100,12432,786],{"class":106},[100,12434,12435],{"class":258},"() {\n",[100,12437,12438],{"class":102,"line":612},[100,12439,570],{"emptyLinePlaceholder":569},[100,12441,12442],{"class":102,"line":618},[100,12443,12444],{"class":1836},"    \u002F\u002F局部变量\n",[100,12446,12447,12449,12452,12454,12456],{"class":102,"line":623},[100,12448,3596],{"class":471},[100,12450,12451],{"class":258}," a ",[100,12453,472],{"class":471},[100,12455,3649],{"class":117},[100,12457,2927],{"class":258},[100,12459,12460,12462,12465,12467,12469],{"class":102,"line":629},[100,12461,3596],{"class":471},[100,12463,12464],{"class":258}," b ",[100,12466,472],{"class":471},[100,12468,3649],{"class":117},[100,12470,2927],{"class":258},[100,12472,12473],{"class":102,"line":635},[100,12474,570],{"emptyLinePlaceholder":569},[100,12476,12477],{"class":102,"line":641},[100,12478,12479],{"class":1836},"    \u002F\u002F打印地址\n",[100,12481,12482,12484,12486,12489,12491,12493,12495,12497,12499,12502,12504],{"class":102,"line":647},[100,12483,8125],{"class":258},[100,12485,2810],{"class":471},[100,12487,12488],{"class":110}," \"局部变量a地址为： \"",[100,12490,3077],{"class":471},[100,12492,3283],{"class":258},[100,12494,1784],{"class":471},[100,12496,2196],{"class":258},[100,12498,2120],{"class":471},[100,12500,12501],{"class":258},"a ",[100,12503,2810],{"class":471},[100,12505,10426],{"class":258},[100,12507,12508,12510,12512,12515,12517,12519,12521,12523,12525,12528,12530],{"class":102,"line":653},[100,12509,8125],{"class":258},[100,12511,2810],{"class":471},[100,12513,12514],{"class":110}," \"局部变量b地址为： \"",[100,12516,3077],{"class":471},[100,12518,3283],{"class":258},[100,12520,1784],{"class":471},[100,12522,2196],{"class":258},[100,12524,2120],{"class":471},[100,12526,12527],{"class":258},"b ",[100,12529,2810],{"class":471},[100,12531,10426],{"class":258},[100,12533,12534],{"class":102,"line":659},[100,12535,570],{"emptyLinePlaceholder":569},[100,12537,12538,12540,12542,12545,12547,12550,12552,12554,12556,12559,12561],{"class":102,"line":665},[100,12539,8125],{"class":258},[100,12541,2810],{"class":471},[100,12543,12544],{"class":110}," \"全局变量g_a地址为： \"",[100,12546,3077],{"class":471},[100,12548,12549],{"class":258},"  (",[100,12551,1784],{"class":471},[100,12553,2196],{"class":258},[100,12555,2120],{"class":471},[100,12557,12558],{"class":258},"g_a ",[100,12560,2810],{"class":471},[100,12562,10426],{"class":258},[100,12564,12565,12567,12569,12572,12574,12576,12578,12580,12582,12585,12587],{"class":102,"line":670},[100,12566,8125],{"class":258},[100,12568,2810],{"class":471},[100,12570,12571],{"class":110}," \"全局变量g_b地址为： \"",[100,12573,3077],{"class":471},[100,12575,12549],{"class":258},[100,12577,1784],{"class":471},[100,12579,2196],{"class":258},[100,12581,2120],{"class":471},[100,12583,12584],{"class":258},"g_b ",[100,12586,2810],{"class":471},[100,12588,10426],{"class":258},[100,12590,12591],{"class":102,"line":675},[100,12592,570],{"emptyLinePlaceholder":569},[100,12594,12595],{"class":102,"line":699},[100,12596,12597],{"class":1836},"    \u002F\u002F静态变量\n",[100,12599,12600,12603,12605,12608,12610,12612],{"class":102,"line":708},[100,12601,12602],{"class":471},"    static",[100,12604,3993],{"class":471},[100,12606,12607],{"class":258}," s_a ",[100,12609,472],{"class":471},[100,12611,3649],{"class":117},[100,12613,2927],{"class":258},[100,12615,12616,12618,12620,12623,12625,12627],{"class":102,"line":722},[100,12617,12602],{"class":471},[100,12619,3993],{"class":471},[100,12621,12622],{"class":258}," s_b ",[100,12624,472],{"class":471},[100,12626,3649],{"class":117},[100,12628,2927],{"class":258},[100,12630,12631],{"class":102,"line":735},[100,12632,570],{"emptyLinePlaceholder":569},[100,12634,12635,12637,12639,12642,12644,12646,12648,12650,12652,12655,12657],{"class":102,"line":754},[100,12636,8125],{"class":258},[100,12638,2810],{"class":471},[100,12640,12641],{"class":110}," \"静态变量s_a地址为： \"",[100,12643,3077],{"class":471},[100,12645,3283],{"class":258},[100,12647,1784],{"class":471},[100,12649,2196],{"class":258},[100,12651,2120],{"class":471},[100,12653,12654],{"class":258},"s_a ",[100,12656,2810],{"class":471},[100,12658,10426],{"class":258},[100,12660,12661,12663,12665,12668,12670,12672,12674,12676,12678,12681,12683],{"class":102,"line":771},[100,12662,8125],{"class":258},[100,12664,2810],{"class":471},[100,12666,12667],{"class":110}," \"静态变量s_b地址为： \"",[100,12669,3077],{"class":471},[100,12671,3283],{"class":258},[100,12673,1784],{"class":471},[100,12675,2196],{"class":258},[100,12677,2120],{"class":471},[100,12679,12680],{"class":258},"s_b ",[100,12682,2810],{"class":471},[100,12684,10426],{"class":258},[100,12686,12687],{"class":102,"line":776},[100,12688,570],{"emptyLinePlaceholder":569},[100,12690,12691,12693,12695,12698,12700,12702,12704,12706,12708,12710,12712],{"class":102,"line":781},[100,12692,8125],{"class":258},[100,12694,2810],{"class":471},[100,12696,12697],{"class":110}," \"字符串常量地址为： \"",[100,12699,3077],{"class":471},[100,12701,3283],{"class":258},[100,12703,1784],{"class":471},[100,12705,2196],{"class":258},[100,12707,2120],{"class":471},[100,12709,2827],{"class":110},[100,12711,3077],{"class":471},[100,12713,10426],{"class":258},[100,12715,12716,12718,12720,12722,12724,12726,12728,12730,12732,12735,12737],{"class":102,"line":796},[100,12717,8125],{"class":258},[100,12719,2810],{"class":471},[100,12721,12697],{"class":110},[100,12723,3077],{"class":471},[100,12725,3283],{"class":258},[100,12727,1784],{"class":471},[100,12729,2196],{"class":258},[100,12731,2120],{"class":471},[100,12733,12734],{"class":110},"\"hello world1\"",[100,12736,3077],{"class":471},[100,12738,10426],{"class":258},[100,12740,12741],{"class":102,"line":812},[100,12742,570],{"emptyLinePlaceholder":569},[100,12744,12745,12747,12749,12752,12754,12756,12758,12760,12762,12765,12767],{"class":102,"line":823},[100,12746,8125],{"class":258},[100,12748,2810],{"class":471},[100,12750,12751],{"class":110}," \"全局常量c_g_a地址为： \"",[100,12753,3077],{"class":471},[100,12755,3283],{"class":258},[100,12757,1784],{"class":471},[100,12759,2196],{"class":258},[100,12761,2120],{"class":471},[100,12763,12764],{"class":258},"c_g_a ",[100,12766,2810],{"class":471},[100,12768,10426],{"class":258},[100,12770,12771,12773,12775,12778,12780,12782,12784,12786,12788,12791,12793],{"class":102,"line":828},[100,12772,8125],{"class":258},[100,12774,2810],{"class":471},[100,12776,12777],{"class":110}," \"全局常量c_g_b地址为： \"",[100,12779,3077],{"class":471},[100,12781,3283],{"class":258},[100,12783,1784],{"class":471},[100,12785,2196],{"class":258},[100,12787,2120],{"class":471},[100,12789,12790],{"class":258},"c_g_b ",[100,12792,2810],{"class":471},[100,12794,10426],{"class":258},[100,12796,12797],{"class":102,"line":840},[100,12798,570],{"emptyLinePlaceholder":569},[100,12800,12801,12804,12806,12809,12811,12813],{"class":102,"line":845},[100,12802,12803],{"class":471},"    const",[100,12805,3993],{"class":471},[100,12807,12808],{"class":258}," c_l_a ",[100,12810,472],{"class":471},[100,12812,3649],{"class":117},[100,12814,2927],{"class":258},[100,12816,12817,12819,12821,12824,12826,12828],{"class":102,"line":868},[100,12818,12803],{"class":471},[100,12820,3993],{"class":471},[100,12822,12823],{"class":258}," c_l_b ",[100,12825,472],{"class":471},[100,12827,3649],{"class":117},[100,12829,2927],{"class":258},[100,12831,12832,12834,12836,12839,12841,12843,12845,12847,12849,12852,12854],{"class":102,"line":874},[100,12833,8125],{"class":258},[100,12835,2810],{"class":471},[100,12837,12838],{"class":110}," \"局部常量c_l_a地址为： \"",[100,12840,3077],{"class":471},[100,12842,3283],{"class":258},[100,12844,1784],{"class":471},[100,12846,2196],{"class":258},[100,12848,2120],{"class":471},[100,12850,12851],{"class":258},"c_l_a ",[100,12853,2810],{"class":471},[100,12855,10426],{"class":258},[100,12857,12858,12860,12862,12865,12867,12869,12871,12873,12875,12878,12880],{"class":102,"line":879},[100,12859,8125],{"class":258},[100,12861,2810],{"class":471},[100,12863,12864],{"class":110}," \"局部常量c_l_b地址为： \"",[100,12866,3077],{"class":471},[100,12868,3283],{"class":258},[100,12870,1784],{"class":471},[100,12872,2196],{"class":258},[100,12874,2120],{"class":471},[100,12876,12877],{"class":258},"c_l_b ",[100,12879,2810],{"class":471},[100,12881,10426],{"class":258},[100,12883,12884],{"class":102,"line":889},[100,12885,570],{"emptyLinePlaceholder":569},[100,12887,12888,12890,12892,12894],{"class":102,"line":894},[100,12889,3914],{"class":106},[100,12891,713],{"class":258},[100,12893,3919],{"class":110},[100,12895,4321],{"class":258},[100,12897,12898],{"class":102,"line":900},[100,12899,570],{"emptyLinePlaceholder":569},[100,12901,12902,12904,12906],{"class":102,"line":910},[100,12903,5689],{"class":471},[100,12905,5692],{"class":117},[100,12907,2927],{"class":258},[100,12909,12910],{"class":102,"line":915},[100,12911,3197],{"class":258},[19,12913,12914],{},"总结：",[2773,12916,12917,12920,12923,12926],{},[29,12918,12919],{},"c++中程序运行前分为全局区和代码区",[29,12921,12922],{},"代码区特点是共享和只读",[29,12924,12925],{},"全局区中存放全局变量、静态变量、常量",[29,12927,12928],{},"常量区中存放const修饰的全局常量和字符串常量",[305,12930,12932],{"id":12931},"_512程序运行后","5.1.2程序运行后",[26,12934,12935],{},[29,12936,12937],{},"栈区：",[2773,12939,12940,12947],{},[29,12941,12942,12943,12946],{},"由编译器自动分配释放, 存放",[1921,12944,12945],{},"函数的参数值,局部变量","等",[29,12948,12949,12950,12953],{},"注意事项：",[1921,12951,12952],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[73,12955,12957],{"className":1770,"code":12956,"language":1772,"meta":79,"style":79},"int * func()\n{\n    int a = 10; \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n    return &a; \u002F\u002F放回局部变量的地址\n}\n\nint main() {\n    \u002F\u002F接受func的返回值\n    int *p = func();\n    cout \u003C\u003C *p \u003C\u003C endl; \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n    cout \u003C\u003C *p \u003C\u003C endl; \u002F\u002F第二次这个数据不再保留\n    system(\"pause\");\n    return 0;\n}\n",[32,12958,12959,12970,12974,12989,13001,13005,13009,13017,13022,13037,13055,13072,13082,13090],{"__ignoreMap":79},[100,12960,12961,12963,12965,12968],{"class":102,"line":103},[100,12962,1784],{"class":471},[100,12964,8114],{"class":471},[100,12966,12967],{"class":106}," func",[100,12969,3587],{"class":258},[100,12971,12972],{"class":102,"line":188},[100,12973,3178],{"class":258},[100,12975,12976,12978,12980,12982,12984,12986],{"class":102,"line":199},[100,12977,3596],{"class":471},[100,12979,12451],{"class":258},[100,12981,472],{"class":471},[100,12983,3649],{"class":117},[100,12985,1833],{"class":258},[100,12987,12988],{"class":1836}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[100,12990,12991,12993,12995,12998],{"class":102,"line":532},[100,12992,5689],{"class":471},[100,12994,12166],{"class":471},[100,12996,12997],{"class":258},"a;",[100,12999,13000],{"class":1836}," \u002F\u002F放回局部变量的地址\n",[100,13002,13003],{"class":102,"line":577},[100,13004,3197],{"class":258},[100,13006,13007],{"class":102,"line":589},[100,13008,570],{"emptyLinePlaceholder":569},[100,13010,13011,13013,13015],{"class":102,"line":595},[100,13012,1784],{"class":471},[100,13014,786],{"class":106},[100,13016,12435],{"class":258},[100,13018,13019],{"class":102,"line":601},[100,13020,13021],{"class":1836},"    \u002F\u002F接受func的返回值\n",[100,13023,13024,13026,13028,13031,13033,13035],{"class":102,"line":606},[100,13025,3596],{"class":471},[100,13027,8114],{"class":471},[100,13029,13030],{"class":258},"p ",[100,13032,472],{"class":471},[100,13034,12967],{"class":106},[100,13036,7232],{"class":258},[100,13038,13039,13041,13043,13045,13047,13049,13052],{"class":102,"line":612},[100,13040,8125],{"class":258},[100,13042,2810],{"class":471},[100,13044,8114],{"class":471},[100,13046,13030],{"class":258},[100,13048,2810],{"class":471},[100,13050,13051],{"class":258}," endl;",[100,13053,13054],{"class":1836}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[100,13056,13057,13059,13061,13063,13065,13067,13069],{"class":102,"line":618},[100,13058,8125],{"class":258},[100,13060,2810],{"class":471},[100,13062,8114],{"class":471},[100,13064,13030],{"class":258},[100,13066,2810],{"class":471},[100,13068,13051],{"class":258},[100,13070,13071],{"class":1836}," \u002F\u002F第二次这个数据不再保留\n",[100,13073,13074,13076,13078,13080],{"class":102,"line":623},[100,13075,3914],{"class":106},[100,13077,713],{"class":258},[100,13079,3919],{"class":110},[100,13081,4321],{"class":258},[100,13083,13084,13086,13088],{"class":102,"line":629},[100,13085,5689],{"class":471},[100,13087,5692],{"class":117},[100,13089,2927],{"class":258},[100,13091,13092],{"class":102,"line":635},[100,13093,3197],{"class":258},[19,13095,13096],{},"输出结果：",[19,13098,13099],{},[3095,13100],{"alt":13101,"src":13102},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,13104,13105],{},"总结：不要返回局部变量的地址",[26,13107,13108],{"start":188},[29,13109,13110],{},"堆区",[2773,13112,13113,13116],{},[29,13114,13115],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[29,13117,13118],{},"在c++中主要利用new在堆区开辟内存",[73,13120,13122],{"className":1770,"code":13121,"language":1772,"meta":79,"style":79},"int  *func()  \u002F\u002F函数返回指针\n{\n    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n   int *p= new int(10);\n   return p;\n}\nint main()\n{\n    \u002F\u002F在堆区开辟数据\n    int *p=func();\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[32,13123,13124,13139,13143,13148,13169,13176,13180,13188,13192,13197,13211,13223],{"__ignoreMap":79},[100,13125,13126,13128,13131,13134,13136],{"class":102,"line":103},[100,13127,1784],{"class":471},[100,13129,13130],{"class":471},"  *",[100,13132,13133],{"class":106},"func",[100,13135,4036],{"class":258},[100,13137,13138],{"class":1836},"  \u002F\u002F函数返回指针\n",[100,13140,13141],{"class":102,"line":188},[100,13142,3178],{"class":258},[100,13144,13145],{"class":102,"line":199},[100,13146,13147],{"class":1836},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[100,13149,13150,13152,13154,13156,13158,13161,13163,13165,13167],{"class":102,"line":532},[100,13151,5746],{"class":471},[100,13153,8114],{"class":471},[100,13155,19],{"class":258},[100,13157,472],{"class":471},[100,13159,13160],{"class":471}," new",[100,13162,3993],{"class":471},[100,13164,713],{"class":258},[100,13166,2213],{"class":117},[100,13168,4321],{"class":258},[100,13170,13171,13173],{"class":102,"line":577},[100,13172,5980],{"class":471},[100,13174,13175],{"class":258}," p;\n",[100,13177,13178],{"class":102,"line":589},[100,13179,3197],{"class":258},[100,13181,13182,13184,13186],{"class":102,"line":595},[100,13183,1784],{"class":471},[100,13185,786],{"class":106},[100,13187,3587],{"class":258},[100,13189,13190],{"class":102,"line":601},[100,13191,3178],{"class":258},[100,13193,13194],{"class":102,"line":606},[100,13195,13196],{"class":1836},"    \u002F\u002F在堆区开辟数据\n",[100,13198,13199,13201,13203,13205,13207,13209],{"class":102,"line":612},[100,13200,3596],{"class":471},[100,13202,8114],{"class":471},[100,13204,19],{"class":258},[100,13206,472],{"class":471},[100,13208,13133],{"class":106},[100,13210,7232],{"class":258},[100,13212,13213,13215,13217,13219,13221],{"class":102,"line":618},[100,13214,3183],{"class":258},[100,13216,8015],{"class":471},[100,13218,19],{"class":258},[100,13220,2810],{"class":471},[100,13222,2832],{"class":258},[100,13224,13225],{"class":102,"line":623},[100,13226,3197],{"class":258},[19,13228,13229],{},"图片展示：",[19,13231,13232],{},[3095,13233],{"alt":13101,"src":13234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,13236,13237],{},"堆区内存由程序员管生死！！！",[26,13239,13240],{"start":199},[29,13241,13242],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,13244,13245],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,13247,13248,13249],{},"​语法：",[32,13250,13251],{}," new 数据类型",[19,13253,13254],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[73,13256,13258],{"className":1770,"code":13257,"language":1772,"meta":79,"style":79},"\u002F\u002F1.new的基本语法\nint *func()\n{\n    \u002F\u002F在堆区创建整型数据\n    \u002F\u002Fnew返回的是该数据类型的指针\n    int *p=new int(10);\u002F\u002Fnew啥类型就返回啥类型数据的指针\n}\nvoid test01()\n{\n    int *p=func();\n    cout\u003C\u003C*p\u003C\u003Cendl;\n    cout\u003C\u003C*p\u003C\u003Cendl;\n    cout\u003C\u003C*p\u003C\u003Cendl;\n    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n    delete p;\u002F\u002F删除这块地址\n}\n\u002F\u002F2.在堆区利用new开辟数组\nvoid test02()\n{\n    \u002F\u002F创建10整数数据的数组，在堆区\n    int *arr=new int[10];\u002F\u002F10代表数组有10个元素\n    for (int i=0;i\u003C10;i++)\n    {\n        arr[i]=i+100;\u002F\u002F给10个元素赋值100～109\n    }\n    for (int i=0;i\u003C10;i++)\n    {\n        cout\u003C\u003Carr[i]\u003C\u003Cendl;\n    }\n    \u002F\u002F释放堆区数组\n    \u002F\u002F释放数组的时候 要加[]才可以\n    delete[] arr;\n}\n\nint main()\n{\n    test01();\n    test02();\n}\n\n",[32,13259,13260,13265,13275,13279,13284,13289,13311,13315,13323,13327,13341,13353,13365,13377,13382,13387,13398,13402,13407,13415,13419,13424,13446,13472,13476,13494,13498,13524,13528,13540,13544,13549,13554,13562,13566,13570,13578,13582,13588,13594],{"__ignoreMap":79},[100,13261,13262],{"class":102,"line":103},[100,13263,13264],{"class":1836},"\u002F\u002F1.new的基本语法\n",[100,13266,13267,13269,13271,13273],{"class":102,"line":188},[100,13268,1784],{"class":471},[100,13270,8114],{"class":471},[100,13272,13133],{"class":106},[100,13274,3587],{"class":258},[100,13276,13277],{"class":102,"line":199},[100,13278,3178],{"class":258},[100,13280,13281],{"class":102,"line":532},[100,13282,13283],{"class":1836},"    \u002F\u002F在堆区创建整型数据\n",[100,13285,13286],{"class":102,"line":577},[100,13287,13288],{"class":1836},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[100,13290,13291,13293,13295,13297,13300,13302,13304,13306,13308],{"class":102,"line":589},[100,13292,3596],{"class":471},[100,13294,8114],{"class":471},[100,13296,19],{"class":258},[100,13298,13299],{"class":471},"=new",[100,13301,3993],{"class":471},[100,13303,713],{"class":258},[100,13305,2213],{"class":117},[100,13307,7562],{"class":258},[100,13309,13310],{"class":1836},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[100,13312,13313],{"class":102,"line":595},[100,13314,3197],{"class":258},[100,13316,13317,13319,13321],{"class":102,"line":601},[100,13318,6960],{"class":471},[100,13320,7184],{"class":106},[100,13322,3587],{"class":258},[100,13324,13325],{"class":102,"line":606},[100,13326,3178],{"class":258},[100,13328,13329,13331,13333,13335,13337,13339],{"class":102,"line":612},[100,13330,3596],{"class":471},[100,13332,8114],{"class":471},[100,13334,19],{"class":258},[100,13336,472],{"class":471},[100,13338,13133],{"class":106},[100,13340,7232],{"class":258},[100,13342,13343,13345,13347,13349,13351],{"class":102,"line":618},[100,13344,3183],{"class":258},[100,13346,8015],{"class":471},[100,13348,19],{"class":258},[100,13350,2810],{"class":471},[100,13352,2832],{"class":258},[100,13354,13355,13357,13359,13361,13363],{"class":102,"line":623},[100,13356,3183],{"class":258},[100,13358,8015],{"class":471},[100,13360,19],{"class":258},[100,13362,2810],{"class":471},[100,13364,2832],{"class":258},[100,13366,13367,13369,13371,13373,13375],{"class":102,"line":629},[100,13368,3183],{"class":258},[100,13370,8015],{"class":471},[100,13372,19],{"class":258},[100,13374,2810],{"class":471},[100,13376,2832],{"class":258},[100,13378,13379],{"class":102,"line":635},[100,13380,13381],{"class":1836},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[100,13383,13384],{"class":102,"line":641},[100,13385,13386],{"class":1836},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[100,13388,13389,13392,13395],{"class":102,"line":647},[100,13390,13391],{"class":471},"    delete",[100,13393,13394],{"class":258}," p;",[100,13396,13397],{"class":1836},"\u002F\u002F删除这块地址\n",[100,13399,13400],{"class":102,"line":653},[100,13401,3197],{"class":258},[100,13403,13404],{"class":102,"line":659},[100,13405,13406],{"class":1836},"\u002F\u002F2.在堆区利用new开辟数组\n",[100,13408,13409,13411,13413],{"class":102,"line":665},[100,13410,6960],{"class":471},[100,13412,7253],{"class":106},[100,13414,3587],{"class":258},[100,13416,13417],{"class":102,"line":670},[100,13418,3178],{"class":258},[100,13420,13421],{"class":102,"line":675},[100,13422,13423],{"class":1836},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[100,13425,13426,13428,13430,13432,13434,13436,13438,13440,13443],{"class":102,"line":699},[100,13427,3596],{"class":471},[100,13429,8114],{"class":471},[100,13431,5479],{"class":258},[100,13433,13299],{"class":471},[100,13435,3993],{"class":471},[100,13437,2656],{"class":258},[100,13439,2213],{"class":117},[100,13441,13442],{"class":258},"];",[100,13444,13445],{"class":1836},"\u002F\u002F10代表数组有10个元素\n",[100,13447,13448,13450,13452,13454,13456,13458,13460,13462,13464,13466,13468,13470],{"class":102,"line":708},[100,13449,848],{"class":471},[100,13451,3283],{"class":258},[100,13453,1784],{"class":471},[100,13455,4633],{"class":258},[100,13457,472],{"class":471},[100,13459,1366],{"class":117},[100,13461,4640],{"class":258},[100,13463,2676],{"class":471},[100,13465,2213],{"class":117},[100,13467,4640],{"class":258},[100,13469,3903],{"class":471},[100,13471,809],{"class":258},[100,13473,13474],{"class":102,"line":722},[100,13475,3641],{"class":258},[100,13477,13478,13481,13483,13485,13487,13489,13491],{"class":102,"line":735},[100,13479,13480],{"class":258},"        arr[i]",[100,13482,472],{"class":471},[100,13484,2208],{"class":258},[100,13486,2248],{"class":471},[100,13488,2078],{"class":117},[100,13490,1833],{"class":258},[100,13492,13493],{"class":1836},"\u002F\u002F给10个元素赋值100～109\n",[100,13495,13496],{"class":102,"line":754},[100,13497,3798],{"class":258},[100,13499,13500,13502,13504,13506,13508,13510,13512,13514,13516,13518,13520,13522],{"class":102,"line":771},[100,13501,848],{"class":471},[100,13503,3283],{"class":258},[100,13505,1784],{"class":471},[100,13507,4633],{"class":258},[100,13509,472],{"class":471},[100,13511,1366],{"class":117},[100,13513,4640],{"class":258},[100,13515,2676],{"class":471},[100,13517,2213],{"class":117},[100,13519,4640],{"class":258},[100,13521,3903],{"class":471},[100,13523,809],{"class":258},[100,13525,13526],{"class":102,"line":776},[100,13527,3641],{"class":258},[100,13529,13530,13532,13534,13536,13538],{"class":102,"line":781},[100,13531,5051],{"class":258},[100,13533,2810],{"class":471},[100,13535,5953],{"class":258},[100,13537,2810],{"class":471},[100,13539,2832],{"class":258},[100,13541,13542],{"class":102,"line":796},[100,13543,3798],{"class":258},[100,13545,13546],{"class":102,"line":812},[100,13547,13548],{"class":1836},"    \u002F\u002F释放堆区数组\n",[100,13550,13551],{"class":102,"line":823},[100,13552,13553],{"class":1836},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[100,13555,13556,13559],{"class":102,"line":828},[100,13557,13558],{"class":471},"    delete[]",[100,13560,13561],{"class":258}," arr;\n",[100,13563,13564],{"class":102,"line":840},[100,13565,3197],{"class":258},[100,13567,13568],{"class":102,"line":845},[100,13569,570],{"emptyLinePlaceholder":569},[100,13571,13572,13574,13576],{"class":102,"line":868},[100,13573,1784],{"class":471},[100,13575,786],{"class":106},[100,13577,3587],{"class":258},[100,13579,13580],{"class":102,"line":874},[100,13581,3178],{"class":258},[100,13583,13584,13586],{"class":102,"line":879},[100,13585,7229],{"class":106},[100,13587,7232],{"class":258},[100,13589,13590,13592],{"class":102,"line":889},[100,13591,7298],{"class":106},[100,13593,7232],{"class":258},[100,13595,13596],{"class":102,"line":894},[100,13597,3197],{"class":258},[1677,13599,13600],{},"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":79,"searchDepth":188,"depth":188,"links":13602},[13603],{"id":12271,"depth":188,"text":12272,"children":13604},[13605,13606],{"id":12303,"depth":199,"text":12304},{"id":12931,"depth":199,"text":12932},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":12263,"description":79},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":13613,"title":13614,"body":13615,"description":79,"extension":1708,"meta":15096,"navigation":569,"path":15097,"seo":15098,"stem":15099,"__hash__":15100},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":13616,"toc":15088},[13617,13620,13624,13627,13630,13799,13803,13808,13825,13830,13982,13986,13989,13992,14386,14390,14393,14398,14401,14713,14717,14723,14883,14885,14893,14897,14900,14907,15085],[10,13618,13614],{"id":13619},"_6引用",[14,13621,13623],{"id":13622},"_61引用基本用法","6.1引用基本用法",[19,13625,13626],{},"引用的本质：给变量起别名",[19,13628,13629],{},"语法：数据类型 &别名=原名",[73,13631,13633],{"className":1770,"code":13632,"language":1772,"meta":79,"style":79},"int main() {\n\n    int a = 10;\n    int &b = a;\n\n    cout \u003C\u003C \"a = \" \u003C\u003C a \u003C\u003C endl;\u002F\u002F10\n    cout \u003C\u003C \"b = \" \u003C\u003C b \u003C\u003C endl;\u002F\u002F10\n\n    b = 100;\n\n    cout \u003C\u003C \"a = \" \u003C\u003C a \u003C\u003C endl;\u002F\u002F100\n    cout \u003C\u003C \"b = \" \u003C\u003C b \u003C\u003C endl;\u002F\u002F100\n\n    system(\"pause\");\n\n    return 0;\n}\n",[32,13634,13635,13643,13647,13659,13671,13675,13694,13713,13717,13728,13732,13751,13769,13773,13783,13787,13795],{"__ignoreMap":79},[100,13636,13637,13639,13641],{"class":102,"line":103},[100,13638,1784],{"class":471},[100,13640,786],{"class":106},[100,13642,12435],{"class":258},[100,13644,13645],{"class":102,"line":188},[100,13646,570],{"emptyLinePlaceholder":569},[100,13648,13649,13651,13653,13655,13657],{"class":102,"line":199},[100,13650,3596],{"class":471},[100,13652,12451],{"class":258},[100,13654,472],{"class":471},[100,13656,3649],{"class":117},[100,13658,2927],{"class":258},[100,13660,13661,13663,13665,13667,13669],{"class":102,"line":532},[100,13662,3596],{"class":471},[100,13664,12166],{"class":471},[100,13666,12527],{"class":258},[100,13668,472],{"class":471},[100,13670,3065],{"class":258},[100,13672,13673],{"class":102,"line":577},[100,13674,570],{"emptyLinePlaceholder":569},[100,13676,13677,13679,13681,13684,13686,13688,13690,13692],{"class":102,"line":589},[100,13678,8125],{"class":258},[100,13680,2810],{"class":471},[100,13682,13683],{"class":110}," \"a = \"",[100,13685,3077],{"class":471},[100,13687,12451],{"class":258},[100,13689,2810],{"class":471},[100,13691,13051],{"class":258},[100,13693,8864],{"class":1836},[100,13695,13696,13698,13700,13703,13705,13707,13709,13711],{"class":102,"line":595},[100,13697,8125],{"class":258},[100,13699,2810],{"class":471},[100,13701,13702],{"class":110}," \"b = \"",[100,13704,3077],{"class":471},[100,13706,12464],{"class":258},[100,13708,2810],{"class":471},[100,13710,13051],{"class":258},[100,13712,8864],{"class":1836},[100,13714,13715],{"class":102,"line":601},[100,13716,570],{"emptyLinePlaceholder":569},[100,13718,13719,13722,13724,13726],{"class":102,"line":606},[100,13720,13721],{"class":258},"    b ",[100,13723,472],{"class":471},[100,13725,7350],{"class":117},[100,13727,2927],{"class":258},[100,13729,13730],{"class":102,"line":612},[100,13731,570],{"emptyLinePlaceholder":569},[100,13733,13734,13736,13738,13740,13742,13744,13746,13748],{"class":102,"line":618},[100,13735,8125],{"class":258},[100,13737,2810],{"class":471},[100,13739,13683],{"class":110},[100,13741,3077],{"class":471},[100,13743,12451],{"class":258},[100,13745,2810],{"class":471},[100,13747,13051],{"class":258},[100,13749,13750],{"class":1836},"\u002F\u002F100\n",[100,13752,13753,13755,13757,13759,13761,13763,13765,13767],{"class":102,"line":623},[100,13754,8125],{"class":258},[100,13756,2810],{"class":471},[100,13758,13702],{"class":110},[100,13760,3077],{"class":471},[100,13762,12464],{"class":258},[100,13764,2810],{"class":471},[100,13766,13051],{"class":258},[100,13768,13750],{"class":1836},[100,13770,13771],{"class":102,"line":629},[100,13772,570],{"emptyLinePlaceholder":569},[100,13774,13775,13777,13779,13781],{"class":102,"line":635},[100,13776,3914],{"class":106},[100,13778,713],{"class":258},[100,13780,3919],{"class":110},[100,13782,4321],{"class":258},[100,13784,13785],{"class":102,"line":641},[100,13786,570],{"emptyLinePlaceholder":569},[100,13788,13789,13791,13793],{"class":102,"line":647},[100,13790,5689],{"class":471},[100,13792,5692],{"class":117},[100,13794,2927],{"class":258},[100,13796,13797],{"class":102,"line":653},[100,13798,3197],{"class":258},[14,13800,13802],{"id":13801},"_62引用的注意事项","6.2引用的注意事项",[26,13804,13805],{},[29,13806,13807],{},"引用必须要初始化",[73,13809,13811],{"className":1770,"code":13810,"language":1772,"meta":79,"style":79},"int &b;\u002F\u002F非常错误！\n",[32,13812,13813],{"__ignoreMap":79},[100,13814,13815,13817,13819,13822],{"class":102,"line":103},[100,13816,1784],{"class":471},[100,13818,12166],{"class":471},[100,13820,13821],{"class":258},"b;",[100,13823,13824],{"class":1836},"\u002F\u002F非常错误！\n",[26,13826,13827],{"start":188},[29,13828,13829],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[73,13831,13833],{"className":1770,"code":13832,"language":1772,"meta":79,"style":79},"int main() {\n    int a = 10;\n    int b = 20;\n    \u002F\u002Fint &c; \u002F\u002F错误，引用必须初始化\n    int &c = a; \u002F\u002F一旦初始化后，就不可以更改\n    c = b; \u002F\u002F这是赋值操作，不是更改引用\n    cout \u003C\u003C \"a = \" \u003C\u003C a \u003C\u003C endl;\u002F\u002F20\n    cout \u003C\u003C \"b = \" \u003C\u003C b \u003C\u003C endl;\u002F\u002F20\n    cout \u003C\u003C \"c = \" \u003C\u003C c \u003C\u003C endl;\u002F\u002F20\n    system(\"pause\");\n    return 0;\n}\n",[32,13834,13835,13843,13855,13867,13875,13891,13904,13922,13940,13960,13970,13978],{"__ignoreMap":79},[100,13836,13837,13839,13841],{"class":102,"line":103},[100,13838,1784],{"class":471},[100,13840,786],{"class":106},[100,13842,12435],{"class":258},[100,13844,13845,13847,13849,13851,13853],{"class":102,"line":188},[100,13846,3596],{"class":471},[100,13848,12451],{"class":258},[100,13850,472],{"class":471},[100,13852,3649],{"class":117},[100,13854,2927],{"class":258},[100,13856,13857,13859,13861,13863,13865],{"class":102,"line":199},[100,13858,3596],{"class":471},[100,13860,12464],{"class":258},[100,13862,472],{"class":471},[100,13864,10536],{"class":117},[100,13866,2927],{"class":258},[100,13868,13869,13872],{"class":102,"line":532},[100,13870,13871],{"class":1836},"    \u002F\u002Fint &c;",[100,13873,13874],{"class":1836}," \u002F\u002F错误，引用必须初始化\n",[100,13876,13877,13879,13881,13883,13885,13888],{"class":102,"line":577},[100,13878,3596],{"class":471},[100,13880,12166],{"class":471},[100,13882,4548],{"class":258},[100,13884,472],{"class":471},[100,13886,13887],{"class":258}," a;",[100,13889,13890],{"class":1836}," \u002F\u002F一旦初始化后，就不可以更改\n",[100,13892,13893,13896,13898,13901],{"class":102,"line":589},[100,13894,13895],{"class":258},"    c ",[100,13897,472],{"class":471},[100,13899,13900],{"class":258}," b;",[100,13902,13903],{"class":1836}," \u002F\u002F这是赋值操作，不是更改引用\n",[100,13905,13906,13908,13910,13912,13914,13916,13918,13920],{"class":102,"line":595},[100,13907,8125],{"class":258},[100,13909,2810],{"class":471},[100,13911,13683],{"class":110},[100,13913,3077],{"class":471},[100,13915,12451],{"class":258},[100,13917,2810],{"class":471},[100,13919,13051],{"class":258},[100,13921,8849],{"class":1836},[100,13923,13924,13926,13928,13930,13932,13934,13936,13938],{"class":102,"line":601},[100,13925,8125],{"class":258},[100,13927,2810],{"class":471},[100,13929,13702],{"class":110},[100,13931,3077],{"class":471},[100,13933,12464],{"class":258},[100,13935,2810],{"class":471},[100,13937,13051],{"class":258},[100,13939,8849],{"class":1836},[100,13941,13942,13944,13946,13949,13951,13954,13956,13958],{"class":102,"line":606},[100,13943,8125],{"class":258},[100,13945,2810],{"class":471},[100,13947,13948],{"class":110}," \"c = \"",[100,13950,3077],{"class":471},[100,13952,13953],{"class":258}," c ",[100,13955,2810],{"class":471},[100,13957,13051],{"class":258},[100,13959,8849],{"class":1836},[100,13961,13962,13964,13966,13968],{"class":102,"line":612},[100,13963,3914],{"class":106},[100,13965,713],{"class":258},[100,13967,3919],{"class":110},[100,13969,4321],{"class":258},[100,13971,13972,13974,13976],{"class":102,"line":618},[100,13973,5689],{"class":471},[100,13975,5692],{"class":117},[100,13977,2927],{"class":258},[100,13979,13980],{"class":102,"line":623},[100,13981,3197],{"class":258},[14,13983,13985],{"id":13984},"_63引用做函数参数","6.3引用做函数参数",[19,13987,13988],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,13990,13991],{},"优点：可以简化指针修改实参",[73,13993,13995],{"className":1770,"code":13994,"language":1772,"meta":79,"style":79},"\u002F\u002F1. 值传递\nvoid mySwap01(int a, int b) {\n    int temp = a;\n    a = b;\n    b = temp;\n}\n\n\u002F\u002F2. 地址传递\nvoid mySwap02(int* a, int* b) {\n    int temp = *a;\n    *a = *b;\n    *b = temp;\n}\n\n\u002F\u002F3. 引用传递\nvoid mySwap03(int& a, int& b) {\n    int temp = a;\n    a = b;\n    b = temp;\n}\n\nint main() {\n\n    int a = 10;\n    int b = 20;\n\n    mySwap01(a, b);\u002F\u002F值传递，形参不会修饰实参\n    cout \u003C\u003C \"a:\" \u003C\u003C a \u003C\u003C \" b:\" \u003C\u003C b \u003C\u003C endl;\n\n    mySwap02(&a, &b);\u002F\u002F地址传递，形参会修饰实参\n    cout \u003C\u003C \"a:\" \u003C\u003C a \u003C\u003C \" b:\" \u003C\u003C b \u003C\u003C endl;\n\n    mySwap03(a, b);\u002F\u002F引用传递，形参会修饰实参\n    cout \u003C\u003C \"a:\" \u003C\u003C a \u003C\u003C \" b:\" \u003C\u003C b \u003C\u003C endl;\n\n    system(\"pause\");\n\n    return 0;\n}\n\n",[32,13996,13997,14002,14025,14036,14046,14055,14059,14063,14068,14090,14102,14114,14124,14128,14132,14137,14159,14169,14177,14185,14189,14193,14201,14205,14217,14229,14233,14244,14270,14274,14294,14318,14322,14332,14356,14360,14370,14374,14382],{"__ignoreMap":79},[100,13998,13999],{"class":102,"line":103},[100,14000,14001],{"class":1836},"\u002F\u002F1. 值传递\n",[100,14003,14004,14006,14009,14011,14013,14015,14018,14020,14022],{"class":102,"line":188},[100,14005,6960],{"class":471},[100,14007,14008],{"class":106}," mySwap01",[100,14010,713],{"class":258},[100,14012,1784],{"class":471},[100,14014,3031],{"class":6812},[100,14016,14017],{"class":258},", ",[100,14019,1784],{"class":471},[100,14021,4435],{"class":6812},[100,14023,14024],{"class":258},") {\n",[100,14026,14027,14029,14032,14034],{"class":102,"line":199},[100,14028,3596],{"class":471},[100,14030,14031],{"class":258}," temp ",[100,14033,472],{"class":471},[100,14035,3065],{"class":258},[100,14037,14038,14041,14043],{"class":102,"line":532},[100,14039,14040],{"class":258},"    a ",[100,14042,472],{"class":471},[100,14044,14045],{"class":258}," b;\n",[100,14047,14048,14050,14052],{"class":102,"line":577},[100,14049,13721],{"class":258},[100,14051,472],{"class":471},[100,14053,14054],{"class":258}," temp;\n",[100,14056,14057],{"class":102,"line":589},[100,14058,3197],{"class":258},[100,14060,14061],{"class":102,"line":595},[100,14062,570],{"emptyLinePlaceholder":569},[100,14064,14065],{"class":102,"line":601},[100,14066,14067],{"class":1836},"\u002F\u002F2. 地址传递\n",[100,14069,14070,14072,14075,14077,14080,14082,14084,14086,14088],{"class":102,"line":606},[100,14071,6960],{"class":471},[100,14073,14074],{"class":106}," mySwap02",[100,14076,713],{"class":258},[100,14078,14079],{"class":471},"int*",[100,14081,3031],{"class":6812},[100,14083,14017],{"class":258},[100,14085,14079],{"class":471},[100,14087,4435],{"class":6812},[100,14089,14024],{"class":258},[100,14091,14092,14094,14096,14098,14100],{"class":102,"line":612},[100,14093,3596],{"class":471},[100,14095,14031],{"class":258},[100,14097,472],{"class":471},[100,14099,8114],{"class":471},[100,14101,7793],{"class":258},[100,14103,14104,14106,14108,14110,14112],{"class":102,"line":618},[100,14105,7999],{"class":471},[100,14107,12501],{"class":258},[100,14109,472],{"class":471},[100,14111,8114],{"class":471},[100,14113,7665],{"class":258},[100,14115,14116,14118,14120,14122],{"class":102,"line":623},[100,14117,7999],{"class":471},[100,14119,12527],{"class":258},[100,14121,472],{"class":471},[100,14123,14054],{"class":258},[100,14125,14126],{"class":102,"line":629},[100,14127,3197],{"class":258},[100,14129,14130],{"class":102,"line":635},[100,14131,570],{"emptyLinePlaceholder":569},[100,14133,14134],{"class":102,"line":641},[100,14135,14136],{"class":1836},"\u002F\u002F3. 引用传递\n",[100,14138,14139,14141,14144,14146,14149,14151,14153,14155,14157],{"class":102,"line":647},[100,14140,6960],{"class":471},[100,14142,14143],{"class":106}," mySwap03",[100,14145,713],{"class":258},[100,14147,14148],{"class":471},"int&",[100,14150,3031],{"class":6812},[100,14152,14017],{"class":258},[100,14154,14148],{"class":471},[100,14156,4435],{"class":6812},[100,14158,14024],{"class":258},[100,14160,14161,14163,14165,14167],{"class":102,"line":653},[100,14162,3596],{"class":471},[100,14164,14031],{"class":258},[100,14166,472],{"class":471},[100,14168,3065],{"class":258},[100,14170,14171,14173,14175],{"class":102,"line":659},[100,14172,14040],{"class":258},[100,14174,472],{"class":471},[100,14176,14045],{"class":258},[100,14178,14179,14181,14183],{"class":102,"line":665},[100,14180,13721],{"class":258},[100,14182,472],{"class":471},[100,14184,14054],{"class":258},[100,14186,14187],{"class":102,"line":670},[100,14188,3197],{"class":258},[100,14190,14191],{"class":102,"line":675},[100,14192,570],{"emptyLinePlaceholder":569},[100,14194,14195,14197,14199],{"class":102,"line":699},[100,14196,1784],{"class":471},[100,14198,786],{"class":106},[100,14200,12435],{"class":258},[100,14202,14203],{"class":102,"line":708},[100,14204,570],{"emptyLinePlaceholder":569},[100,14206,14207,14209,14211,14213,14215],{"class":102,"line":722},[100,14208,3596],{"class":471},[100,14210,12451],{"class":258},[100,14212,472],{"class":471},[100,14214,3649],{"class":117},[100,14216,2927],{"class":258},[100,14218,14219,14221,14223,14225,14227],{"class":102,"line":735},[100,14220,3596],{"class":471},[100,14222,12464],{"class":258},[100,14224,472],{"class":471},[100,14226,10536],{"class":117},[100,14228,2927],{"class":258},[100,14230,14231],{"class":102,"line":754},[100,14232,570],{"emptyLinePlaceholder":569},[100,14234,14235,14238,14241],{"class":102,"line":771},[100,14236,14237],{"class":106},"    mySwap01",[100,14239,14240],{"class":258},"(a, b);",[100,14242,14243],{"class":1836},"\u002F\u002F值传递，形参不会修饰实参\n",[100,14245,14246,14248,14250,14253,14255,14257,14259,14262,14264,14266,14268],{"class":102,"line":776},[100,14247,8125],{"class":258},[100,14249,2810],{"class":471},[100,14251,14252],{"class":110}," \"a:\"",[100,14254,3077],{"class":471},[100,14256,12451],{"class":258},[100,14258,2810],{"class":471},[100,14260,14261],{"class":110}," \" b:\"",[100,14263,3077],{"class":471},[100,14265,12464],{"class":258},[100,14267,2810],{"class":471},[100,14269,10426],{"class":258},[100,14271,14272],{"class":102,"line":781},[100,14273,570],{"emptyLinePlaceholder":569},[100,14275,14276,14279,14281,14283,14286,14288,14291],{"class":102,"line":796},[100,14277,14278],{"class":106},"    mySwap02",[100,14280,713],{"class":258},[100,14282,2120],{"class":471},[100,14284,14285],{"class":258},"a, ",[100,14287,2120],{"class":471},[100,14289,14290],{"class":258},"b);",[100,14292,14293],{"class":1836},"\u002F\u002F地址传递，形参会修饰实参\n",[100,14295,14296,14298,14300,14302,14304,14306,14308,14310,14312,14314,14316],{"class":102,"line":812},[100,14297,8125],{"class":258},[100,14299,2810],{"class":471},[100,14301,14252],{"class":110},[100,14303,3077],{"class":471},[100,14305,12451],{"class":258},[100,14307,2810],{"class":471},[100,14309,14261],{"class":110},[100,14311,3077],{"class":471},[100,14313,12464],{"class":258},[100,14315,2810],{"class":471},[100,14317,10426],{"class":258},[100,14319,14320],{"class":102,"line":823},[100,14321,570],{"emptyLinePlaceholder":569},[100,14323,14324,14327,14329],{"class":102,"line":828},[100,14325,14326],{"class":106},"    mySwap03",[100,14328,14240],{"class":258},[100,14330,14331],{"class":1836},"\u002F\u002F引用传递，形参会修饰实参\n",[100,14333,14334,14336,14338,14340,14342,14344,14346,14348,14350,14352,14354],{"class":102,"line":840},[100,14335,8125],{"class":258},[100,14337,2810],{"class":471},[100,14339,14252],{"class":110},[100,14341,3077],{"class":471},[100,14343,12451],{"class":258},[100,14345,2810],{"class":471},[100,14347,14261],{"class":110},[100,14349,3077],{"class":471},[100,14351,12464],{"class":258},[100,14353,2810],{"class":471},[100,14355,10426],{"class":258},[100,14357,14358],{"class":102,"line":845},[100,14359,570],{"emptyLinePlaceholder":569},[100,14361,14362,14364,14366,14368],{"class":102,"line":868},[100,14363,3914],{"class":106},[100,14365,713],{"class":258},[100,14367,3919],{"class":110},[100,14369,4321],{"class":258},[100,14371,14372],{"class":102,"line":874},[100,14373,570],{"emptyLinePlaceholder":569},[100,14375,14376,14378,14380],{"class":102,"line":879},[100,14377,5689],{"class":471},[100,14379,5692],{"class":117},[100,14381,2927],{"class":258},[100,14383,14384],{"class":102,"line":889},[100,14385,3197],{"class":258},[14,14387,14389],{"id":14388},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,14391,14392],{},"作用：引用是可以作为函数的返回值存在的",[19,14394,381,14395],{},[1921,14396,14397],{},"不要返回局部变量引用",[19,14399,14400],{},"用法：函数调用作为左值",[73,14402,14404],{"className":11523,"code":14403,"language":11525,"meta":79,"style":79},"\u002F\u002F返回局部变量引用\nint& test01() {\n    int a = 10; \u002F\u002F局部变量\n    return a;\n}\n\n\u002F\u002F返回静态变量引用\nint& test02() {\n    static int a = 20;\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n    return a;\n}\n\nint main() {\n\n    \u002F\u002F不能返回局部变量的引用\n    int& ref = test01();\n    cout \u003C\u003C \"ref = \" \u003C\u003C ref \u003C\u003C endl;\u002F\u002F10 第一次正确，是因为编译器做了保留\n    cout \u003C\u003C \"ref = \" \u003C\u003C ref \u003C\u003C endl;\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n\n    \u002F\u002F如果函数做左值，那么必须返回引用\n    int& ref2 = test02();\n    cout \u003C\u003C \"ref2 = \" \u003C\u003C ref2 \u003C\u003C endl; \u002F\u002F20\n    cout \u003C\u003C \"ref2 = \" \u003C\u003C ref2 \u003C\u003C endl; \u002F\u002F20\n\n    test02() = 1000;\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n\n    cout \u003C\u003C \"ref2 = \" \u003C\u003C ref2 \u003C\u003C endl; \u002F\u002F1000\n    cout \u003C\u003C \"ref2 = \" \u003C\u003C ref2 \u003C\u003C endl; \u002F\u002F1000\n\n    system(\"pause\");\n\n    return 0;\n}\n",[32,14405,14406,14411,14419,14434,14440,14444,14448,14453,14461,14478,14484,14488,14492,14500,14504,14509,14523,14543,14562,14566,14571,14584,14604,14622,14626,14642,14646,14665,14683,14687,14697,14701,14709],{"__ignoreMap":79},[100,14407,14408],{"class":102,"line":103},[100,14409,14410],{"class":1836},"\u002F\u002F返回局部变量引用\n",[100,14412,14413,14415,14417],{"class":102,"line":188},[100,14414,14148],{"class":471},[100,14416,7184],{"class":106},[100,14418,12435],{"class":258},[100,14420,14421,14423,14425,14427,14429,14431],{"class":102,"line":199},[100,14422,3596],{"class":471},[100,14424,12451],{"class":258},[100,14426,472],{"class":471},[100,14428,3649],{"class":117},[100,14430,1833],{"class":258},[100,14432,14433],{"class":1836}," \u002F\u002F局部变量\n",[100,14435,14436,14438],{"class":102,"line":532},[100,14437,5689],{"class":471},[100,14439,3065],{"class":258},[100,14441,14442],{"class":102,"line":577},[100,14443,3197],{"class":258},[100,14445,14446],{"class":102,"line":589},[100,14447,570],{"emptyLinePlaceholder":569},[100,14449,14450],{"class":102,"line":595},[100,14451,14452],{"class":1836},"\u002F\u002F返回静态变量引用\n",[100,14454,14455,14457,14459],{"class":102,"line":601},[100,14456,14148],{"class":471},[100,14458,7253],{"class":106},[100,14460,12435],{"class":258},[100,14462,14463,14465,14467,14469,14471,14473,14475],{"class":102,"line":606},[100,14464,12602],{"class":471},[100,14466,3993],{"class":471},[100,14468,12451],{"class":258},[100,14470,472],{"class":471},[100,14472,10536],{"class":117},[100,14474,1833],{"class":258},[100,14476,14477],{"class":1836},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[100,14479,14480,14482],{"class":102,"line":612},[100,14481,5689],{"class":471},[100,14483,3065],{"class":258},[100,14485,14486],{"class":102,"line":618},[100,14487,3197],{"class":258},[100,14489,14490],{"class":102,"line":623},[100,14491,570],{"emptyLinePlaceholder":569},[100,14493,14494,14496,14498],{"class":102,"line":629},[100,14495,1784],{"class":471},[100,14497,786],{"class":106},[100,14499,12435],{"class":258},[100,14501,14502],{"class":102,"line":635},[100,14503,570],{"emptyLinePlaceholder":569},[100,14505,14506],{"class":102,"line":641},[100,14507,14508],{"class":1836},"    \u002F\u002F不能返回局部变量的引用\n",[100,14510,14511,14514,14517,14519,14521],{"class":102,"line":647},[100,14512,14513],{"class":471},"    int&",[100,14515,14516],{"class":258}," ref ",[100,14518,472],{"class":471},[100,14520,7184],{"class":106},[100,14522,7232],{"class":258},[100,14524,14525,14527,14529,14532,14534,14536,14538,14540],{"class":102,"line":653},[100,14526,8125],{"class":258},[100,14528,2810],{"class":471},[100,14530,14531],{"class":110}," \"ref = \"",[100,14533,3077],{"class":471},[100,14535,14516],{"class":258},[100,14537,2810],{"class":471},[100,14539,13051],{"class":258},[100,14541,14542],{"class":1836},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[100,14544,14545,14547,14549,14551,14553,14555,14557,14559],{"class":102,"line":659},[100,14546,8125],{"class":258},[100,14548,2810],{"class":471},[100,14550,14531],{"class":110},[100,14552,3077],{"class":471},[100,14554,14516],{"class":258},[100,14556,2810],{"class":471},[100,14558,13051],{"class":258},[100,14560,14561],{"class":1836},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[100,14563,14564],{"class":102,"line":665},[100,14565,570],{"emptyLinePlaceholder":569},[100,14567,14568],{"class":102,"line":670},[100,14569,14570],{"class":1836},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[100,14572,14573,14575,14578,14580,14582],{"class":102,"line":675},[100,14574,14513],{"class":471},[100,14576,14577],{"class":258}," ref2 ",[100,14579,472],{"class":471},[100,14581,7253],{"class":106},[100,14583,7232],{"class":258},[100,14585,14586,14588,14590,14593,14595,14597,14599,14601],{"class":102,"line":699},[100,14587,8125],{"class":258},[100,14589,2810],{"class":471},[100,14591,14592],{"class":110}," \"ref2 = \"",[100,14594,3077],{"class":471},[100,14596,14577],{"class":258},[100,14598,2810],{"class":471},[100,14600,13051],{"class":258},[100,14602,14603],{"class":1836}," \u002F\u002F20\n",[100,14605,14606,14608,14610,14612,14614,14616,14618,14620],{"class":102,"line":708},[100,14607,8125],{"class":258},[100,14609,2810],{"class":471},[100,14611,14592],{"class":110},[100,14613,3077],{"class":471},[100,14615,14577],{"class":258},[100,14617,2810],{"class":471},[100,14619,13051],{"class":258},[100,14621,14603],{"class":1836},[100,14623,14624],{"class":102,"line":722},[100,14625,570],{"emptyLinePlaceholder":569},[100,14627,14628,14630,14633,14635,14637,14639],{"class":102,"line":735},[100,14629,7298],{"class":106},[100,14631,14632],{"class":258},"() ",[100,14634,472],{"class":471},[100,14636,4601],{"class":117},[100,14638,1833],{"class":258},[100,14640,14641],{"class":1836},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[100,14643,14644],{"class":102,"line":754},[100,14645,570],{"emptyLinePlaceholder":569},[100,14647,14648,14650,14652,14654,14656,14658,14660,14662],{"class":102,"line":771},[100,14649,8125],{"class":258},[100,14651,2810],{"class":471},[100,14653,14592],{"class":110},[100,14655,3077],{"class":471},[100,14657,14577],{"class":258},[100,14659,2810],{"class":471},[100,14661,13051],{"class":258},[100,14663,14664],{"class":1836}," \u002F\u002F1000\n",[100,14666,14667,14669,14671,14673,14675,14677,14679,14681],{"class":102,"line":776},[100,14668,8125],{"class":258},[100,14670,2810],{"class":471},[100,14672,14592],{"class":110},[100,14674,3077],{"class":471},[100,14676,14577],{"class":258},[100,14678,2810],{"class":471},[100,14680,13051],{"class":258},[100,14682,14664],{"class":1836},[100,14684,14685],{"class":102,"line":781},[100,14686,570],{"emptyLinePlaceholder":569},[100,14688,14689,14691,14693,14695],{"class":102,"line":796},[100,14690,3914],{"class":106},[100,14692,713],{"class":258},[100,14694,3919],{"class":110},[100,14696,4321],{"class":258},[100,14698,14699],{"class":102,"line":812},[100,14700,570],{"emptyLinePlaceholder":569},[100,14702,14703,14705,14707],{"class":102,"line":823},[100,14704,5689],{"class":471},[100,14706,5692],{"class":117},[100,14708,2927],{"class":258},[100,14710,14711],{"class":102,"line":828},[100,14712,3197],{"class":258},[14,14714,14716],{"id":14715},"_65引用的本质","6.5引用的本质",[19,14718,14719,14720],{},"本质：",[1921,14721,14722],{},"引用的本质在c++内部实现是一个指针常量.",[73,14724,14726],{"className":1770,"code":14725,"language":1772,"meta":79,"style":79},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\nvoid func(int& ref){\n    ref = 100; \u002F\u002F ref是引用，转换为*ref = 100\n}\nint main(){\n    int a = 10;\n    \n    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n    int& ref = a; \n    ref = 20; \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n    \n    cout \u003C\u003C \"a:\" \u003C\u003C a \u003C\u003C endl;\n    cout \u003C\u003C \"ref:\" \u003C\u003C ref \u003C\u003C endl;\n    \n    func(a);\n    return 0;\n}\n",[32,14727,14728,14733,14749,14763,14767,14776,14788,14793,14798,14809,14822,14826,14842,14859,14863,14871,14879],{"__ignoreMap":79},[100,14729,14730],{"class":102,"line":103},[100,14731,14732],{"class":1836},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[100,14734,14735,14737,14739,14741,14743,14746],{"class":102,"line":188},[100,14736,6960],{"class":471},[100,14738,12967],{"class":106},[100,14740,713],{"class":258},[100,14742,14148],{"class":471},[100,14744,14745],{"class":6812}," ref",[100,14747,14748],{"class":258},"){\n",[100,14750,14751,14754,14756,14758,14760],{"class":102,"line":199},[100,14752,14753],{"class":258},"    ref ",[100,14755,472],{"class":471},[100,14757,7350],{"class":117},[100,14759,1833],{"class":258},[100,14761,14762],{"class":1836}," \u002F\u002F ref是引用，转换为*ref = 100\n",[100,14764,14765],{"class":102,"line":532},[100,14766,3197],{"class":258},[100,14768,14769,14771,14773],{"class":102,"line":577},[100,14770,1784],{"class":471},[100,14772,786],{"class":106},[100,14774,14775],{"class":258},"(){\n",[100,14777,14778,14780,14782,14784,14786],{"class":102,"line":589},[100,14779,3596],{"class":471},[100,14781,12451],{"class":258},[100,14783,472],{"class":471},[100,14785,3649],{"class":117},[100,14787,2927],{"class":258},[100,14789,14790],{"class":102,"line":595},[100,14791,14792],{"class":258},"    \n",[100,14794,14795],{"class":102,"line":601},[100,14796,14797],{"class":1836},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[100,14799,14800,14802,14804,14806],{"class":102,"line":606},[100,14801,14513],{"class":471},[100,14803,14516],{"class":258},[100,14805,472],{"class":471},[100,14807,14808],{"class":258}," a; \n",[100,14810,14811,14813,14815,14817,14819],{"class":102,"line":612},[100,14812,14753],{"class":258},[100,14814,472],{"class":471},[100,14816,10536],{"class":117},[100,14818,1833],{"class":258},[100,14820,14821],{"class":1836}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[100,14823,14824],{"class":102,"line":618},[100,14825,14792],{"class":258},[100,14827,14828,14830,14832,14834,14836,14838,14840],{"class":102,"line":623},[100,14829,8125],{"class":258},[100,14831,2810],{"class":471},[100,14833,14252],{"class":110},[100,14835,3077],{"class":471},[100,14837,12451],{"class":258},[100,14839,2810],{"class":471},[100,14841,10426],{"class":258},[100,14843,14844,14846,14848,14851,14853,14855,14857],{"class":102,"line":629},[100,14845,8125],{"class":258},[100,14847,2810],{"class":471},[100,14849,14850],{"class":110}," \"ref:\"",[100,14852,3077],{"class":471},[100,14854,14516],{"class":258},[100,14856,2810],{"class":471},[100,14858,10426],{"class":258},[100,14860,14861],{"class":102,"line":635},[100,14862,14792],{"class":258},[100,14864,14865,14868],{"class":102,"line":641},[100,14866,14867],{"class":106},"    func",[100,14869,14870],{"class":258},"(a);\n",[100,14872,14873,14875,14877],{"class":102,"line":647},[100,14874,5689],{"class":471},[100,14876,5692],{"class":117},[100,14878,2927],{"class":258},[100,14880,14881],{"class":102,"line":653},[100,14882,3197],{"class":258},[19,14884,12914],{},[26,14886,14887,14890],{},[29,14888,14889],{},"引用的本质，就是一个指针常量",[29,14891,14892],{},"引用一旦初始化，就不可以发生改变",[14,14894,14896],{"id":14895},"_66常量引用","6.6常量引用",[19,14898,14899],{},"作用：常量引用主要用来修饰形参",[19,14901,14902,14903,14906],{},"在函数形参列表中，可以加",[1921,14904,14905],{},"const修饰形参","，防止形参改变实参",[73,14908,14910],{"className":1770,"code":14909,"language":1772,"meta":79,"style":79},"\u002F\u002F引用使用的场景，通常用来修饰形参\n\u002F\u002F加上const就不能修改实参的\nvoid showValue(const int& v) {\n    \u002F\u002Fv += 100;\n    cout \u003C\u003C v \u003C\u003C endl;\n}\n\nint main() {\n\n    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n    const int& ref = 10;\n\n    \u002F\u002Fref = 100;  \u002F\u002F加入const后不可以修改变量\n    cout \u003C\u003C ref \u003C\u003C endl;\n\n    \u002F\u002F函数中利用常量引用防止误操作修改实参\n    int a = 10;\n    showValue(a);\n\n    system(\"pause\");\n\n    return 0;\n}\n",[32,14911,14912,14917,14922,14941,14946,14959,14963,14967,14975,14979,14984,14989,15003,15007,15015,15027,15031,15036,15048,15055,15059,15069,15073,15081],{"__ignoreMap":79},[100,14913,14914],{"class":102,"line":103},[100,14915,14916],{"class":1836},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[100,14918,14919],{"class":102,"line":188},[100,14920,14921],{"class":1836},"\u002F\u002F加上const就不能修改实参的\n",[100,14923,14924,14926,14929,14931,14933,14936,14939],{"class":102,"line":199},[100,14925,6960],{"class":471},[100,14927,14928],{"class":106}," showValue",[100,14930,713],{"class":258},[100,14932,8388],{"class":471},[100,14934,14935],{"class":471}," int&",[100,14937,14938],{"class":6812}," v",[100,14940,14024],{"class":258},[100,14942,14943],{"class":102,"line":532},[100,14944,14945],{"class":1836},"    \u002F\u002Fv += 100;\n",[100,14947,14948,14950,14952,14955,14957],{"class":102,"line":577},[100,14949,8125],{"class":258},[100,14951,2810],{"class":471},[100,14953,14954],{"class":258}," v ",[100,14956,2810],{"class":471},[100,14958,10426],{"class":258},[100,14960,14961],{"class":102,"line":589},[100,14962,3197],{"class":258},[100,14964,14965],{"class":102,"line":595},[100,14966,570],{"emptyLinePlaceholder":569},[100,14968,14969,14971,14973],{"class":102,"line":601},[100,14970,1784],{"class":471},[100,14972,786],{"class":106},[100,14974,12435],{"class":258},[100,14976,14977],{"class":102,"line":606},[100,14978,570],{"emptyLinePlaceholder":569},[100,14980,14981],{"class":102,"line":612},[100,14982,14983],{"class":1836},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[100,14985,14986],{"class":102,"line":618},[100,14987,14988],{"class":1836},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[100,14990,14991,14993,14995,14997,14999,15001],{"class":102,"line":623},[100,14992,12803],{"class":471},[100,14994,14935],{"class":471},[100,14996,14516],{"class":258},[100,14998,472],{"class":471},[100,15000,3649],{"class":117},[100,15002,2927],{"class":258},[100,15004,15005],{"class":102,"line":629},[100,15006,570],{"emptyLinePlaceholder":569},[100,15008,15009,15012],{"class":102,"line":635},[100,15010,15011],{"class":1836},"    \u002F\u002Fref = 100;",[100,15013,15014],{"class":1836},"  \u002F\u002F加入const后不可以修改变量\n",[100,15016,15017,15019,15021,15023,15025],{"class":102,"line":641},[100,15018,8125],{"class":258},[100,15020,2810],{"class":471},[100,15022,14516],{"class":258},[100,15024,2810],{"class":471},[100,15026,10426],{"class":258},[100,15028,15029],{"class":102,"line":647},[100,15030,570],{"emptyLinePlaceholder":569},[100,15032,15033],{"class":102,"line":653},[100,15034,15035],{"class":1836},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[100,15037,15038,15040,15042,15044,15046],{"class":102,"line":659},[100,15039,3596],{"class":471},[100,15041,12451],{"class":258},[100,15043,472],{"class":471},[100,15045,3649],{"class":117},[100,15047,2927],{"class":258},[100,15049,15050,15053],{"class":102,"line":665},[100,15051,15052],{"class":106},"    showValue",[100,15054,14870],{"class":258},[100,15056,15057],{"class":102,"line":670},[100,15058,570],{"emptyLinePlaceholder":569},[100,15060,15061,15063,15065,15067],{"class":102,"line":675},[100,15062,3914],{"class":106},[100,15064,713],{"class":258},[100,15066,3919],{"class":110},[100,15068,4321],{"class":258},[100,15070,15071],{"class":102,"line":699},[100,15072,570],{"emptyLinePlaceholder":569},[100,15074,15075,15077,15079],{"class":102,"line":708},[100,15076,5689],{"class":471},[100,15078,5692],{"class":117},[100,15080,2927],{"class":258},[100,15082,15083],{"class":102,"line":722},[100,15084,3197],{"class":258},[1677,15086,15087],{},"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":79,"searchDepth":188,"depth":188,"links":15089},[15090,15091,15092,15093,15094,15095],{"id":13622,"depth":188,"text":13623},{"id":13801,"depth":188,"text":13802},{"id":13984,"depth":188,"text":13985},{"id":14388,"depth":188,"text":14389},{"id":14715,"depth":188,"text":14716},{"id":14895,"depth":188,"text":14896},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":13614,"description":79},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":15102,"title":15103,"body":15104,"description":79,"extension":1708,"meta":16184,"navigation":569,"path":16185,"seo":16186,"stem":16187,"__hash__":16188},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":15105,"toc":16176},[15106,15109,15113,15116,15121,15352,15354,15365,15369,15372,15380,15484,15487,15491,15494,15498,15501,15506,15528,15534,15861,15864,15868,15876,16173],[10,15107,15103],{"id":15108},"_7函数高级部分",[14,15110,15112],{"id":15111},"_71函数默认参数","7.1函数默认参数",[19,15114,15115],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,15117,6779,15118],{},[32,15119,15120],{}," 返回值类型  函数名 （参数= 默认值）{}",[73,15122,15124],{"className":1770,"code":15123,"language":1772,"meta":79,"style":79},"int func(int a, int b = 10, int c = 10) {\n    return a + b + c;\n}\n\n\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\nint func2(int a = 10, int b = 10);\nint func2(int a, int b) {\n    return a + b;\n}\n\nint main() {\n\n    cout \u003C\u003C \"ret = \" \u003C\u003C func(20, 20) \u003C\u003C endl;\n    cout \u003C\u003C \"ret = \" \u003C\u003C func(100) \u003C\u003C endl;\n\n    system(\"pause\");\n\n    return 0;\n}\n",[32,15125,15126,15160,15175,15179,15183,15188,15193,15222,15242,15252,15256,15260,15268,15272,15300,15322,15326,15336,15340,15348],{"__ignoreMap":79},[100,15127,15128,15130,15132,15134,15136,15138,15140,15142,15144,15146,15148,15150,15152,15154,15156,15158],{"class":102,"line":103},[100,15129,1784],{"class":471},[100,15131,12967],{"class":106},[100,15133,713],{"class":258},[100,15135,1784],{"class":471},[100,15137,3031],{"class":6812},[100,15139,14017],{"class":258},[100,15141,1784],{"class":471},[100,15143,4435],{"class":6812},[100,15145,583],{"class":471},[100,15147,3649],{"class":117},[100,15149,14017],{"class":258},[100,15151,1784],{"class":471},[100,15153,4451],{"class":6812},[100,15155,583],{"class":471},[100,15157,3649],{"class":117},[100,15159,14024],{"class":258},[100,15161,15162,15164,15166,15168,15170,15172],{"class":102,"line":188},[100,15163,5689],{"class":471},[100,15165,12451],{"class":258},[100,15167,2248],{"class":471},[100,15169,12464],{"class":258},[100,15171,2248],{"class":471},[100,15173,15174],{"class":258}," c;\n",[100,15176,15177],{"class":102,"line":199},[100,15178,3197],{"class":258},[100,15180,15181],{"class":102,"line":532},[100,15182,570],{"emptyLinePlaceholder":569},[100,15184,15185],{"class":102,"line":577},[100,15186,15187],{"class":1836},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[100,15189,15190],{"class":102,"line":589},[100,15191,15192],{"class":1836},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[100,15194,15195,15197,15200,15202,15204,15206,15208,15210,15212,15214,15216,15218,15220],{"class":102,"line":595},[100,15196,1784],{"class":471},[100,15198,15199],{"class":106}," func2",[100,15201,713],{"class":258},[100,15203,1784],{"class":471},[100,15205,3031],{"class":6812},[100,15207,583],{"class":471},[100,15209,3649],{"class":117},[100,15211,14017],{"class":258},[100,15213,1784],{"class":471},[100,15215,4435],{"class":6812},[100,15217,583],{"class":471},[100,15219,3649],{"class":117},[100,15221,4321],{"class":258},[100,15223,15224,15226,15228,15230,15232,15234,15236,15238,15240],{"class":102,"line":601},[100,15225,1784],{"class":471},[100,15227,15199],{"class":106},[100,15229,713],{"class":258},[100,15231,1784],{"class":471},[100,15233,3031],{"class":6812},[100,15235,14017],{"class":258},[100,15237,1784],{"class":471},[100,15239,4435],{"class":6812},[100,15241,14024],{"class":258},[100,15243,15244,15246,15248,15250],{"class":102,"line":606},[100,15245,5689],{"class":471},[100,15247,12451],{"class":258},[100,15249,2248],{"class":471},[100,15251,14045],{"class":258},[100,15253,15254],{"class":102,"line":612},[100,15255,3197],{"class":258},[100,15257,15258],{"class":102,"line":618},[100,15259,570],{"emptyLinePlaceholder":569},[100,15261,15262,15264,15266],{"class":102,"line":623},[100,15263,1784],{"class":471},[100,15265,786],{"class":106},[100,15267,12435],{"class":258},[100,15269,15270],{"class":102,"line":629},[100,15271,570],{"emptyLinePlaceholder":569},[100,15273,15274,15276,15278,15281,15283,15285,15287,15289,15291,15293,15296,15298],{"class":102,"line":635},[100,15275,8125],{"class":258},[100,15277,2810],{"class":471},[100,15279,15280],{"class":110}," \"ret = \"",[100,15282,3077],{"class":471},[100,15284,12967],{"class":106},[100,15286,713],{"class":258},[100,15288,2466],{"class":117},[100,15290,14017],{"class":258},[100,15292,2466],{"class":117},[100,15294,15295],{"class":258},") ",[100,15297,2810],{"class":471},[100,15299,10426],{"class":258},[100,15301,15302,15304,15306,15308,15310,15312,15314,15316,15318,15320],{"class":102,"line":641},[100,15303,8125],{"class":258},[100,15305,2810],{"class":471},[100,15307,15280],{"class":110},[100,15309,3077],{"class":471},[100,15311,12967],{"class":106},[100,15313,713],{"class":258},[100,15315,2078],{"class":117},[100,15317,15295],{"class":258},[100,15319,2810],{"class":471},[100,15321,10426],{"class":258},[100,15323,15324],{"class":102,"line":647},[100,15325,570],{"emptyLinePlaceholder":569},[100,15327,15328,15330,15332,15334],{"class":102,"line":653},[100,15329,3914],{"class":106},[100,15331,713],{"class":258},[100,15333,3919],{"class":110},[100,15335,4321],{"class":258},[100,15337,15338],{"class":102,"line":659},[100,15339,570],{"emptyLinePlaceholder":569},[100,15341,15342,15344,15346],{"class":102,"line":665},[100,15343,5689],{"class":471},[100,15345,5692],{"class":117},[100,15347,2927],{"class":258},[100,15349,15350],{"class":102,"line":670},[100,15351,3197],{"class":258},[19,15353,12914],{},[26,15355,15356,15359,15362],{},[29,15357,15358],{},"我传就用我；没传就用你",[29,15360,15361],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[29,15363,15364],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,15366,15368],{"id":15367},"_72函数的占位参数","7.2函数的占位参数",[19,15370,15371],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,15373,15374,15376,15377],{},[1921,15375,6779],{}," ",[32,15378,15379],{},"返回值类型 函数名 (数据类型){}",[73,15381,15383],{"className":1770,"code":15382,"language":1772,"meta":79,"style":79},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\nvoid func(int a, int) {\n    cout \u003C\u003C \"this is func\" \u003C\u003C endl;\n}\nint main() {\n\n    func(10,10); \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n\n    system(\"pause\");\n\n    return 0;\n}\n",[32,15384,15385,15390,15408,15421,15425,15433,15437,15454,15458,15468,15472,15480],{"__ignoreMap":79},[100,15386,15387],{"class":102,"line":103},[100,15388,15389],{"class":1836},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[100,15391,15392,15394,15396,15398,15400,15402,15404,15406],{"class":102,"line":188},[100,15393,6960],{"class":471},[100,15395,12967],{"class":106},[100,15397,713],{"class":258},[100,15399,1784],{"class":471},[100,15401,3031],{"class":6812},[100,15403,14017],{"class":258},[100,15405,1784],{"class":471},[100,15407,14024],{"class":258},[100,15409,15410,15412,15414,15417,15419],{"class":102,"line":199},[100,15411,8125],{"class":258},[100,15413,2810],{"class":471},[100,15415,15416],{"class":110}," \"this is func\"",[100,15418,3077],{"class":471},[100,15420,10426],{"class":258},[100,15422,15423],{"class":102,"line":532},[100,15424,3197],{"class":258},[100,15426,15427,15429,15431],{"class":102,"line":577},[100,15428,1784],{"class":471},[100,15430,786],{"class":106},[100,15432,12435],{"class":258},[100,15434,15435],{"class":102,"line":589},[100,15436,570],{"emptyLinePlaceholder":569},[100,15438,15439,15441,15443,15445,15447,15449,15451],{"class":102,"line":595},[100,15440,14867],{"class":106},[100,15442,713],{"class":258},[100,15444,2213],{"class":117},[100,15446,2145],{"class":258},[100,15448,2213],{"class":117},[100,15450,7562],{"class":258},[100,15452,15453],{"class":1836}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[100,15455,15456],{"class":102,"line":601},[100,15457,570],{"emptyLinePlaceholder":569},[100,15459,15460,15462,15464,15466],{"class":102,"line":606},[100,15461,3914],{"class":106},[100,15463,713],{"class":258},[100,15465,3919],{"class":110},[100,15467,4321],{"class":258},[100,15469,15470],{"class":102,"line":612},[100,15471,570],{"emptyLinePlaceholder":569},[100,15473,15474,15476,15478],{"class":102,"line":618},[100,15475,5689],{"class":471},[100,15477,5692],{"class":117},[100,15479,2927],{"class":258},[100,15481,15482],{"class":102,"line":623},[100,15483,3197],{"class":258},[19,15485,15486],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,15488,15490],{"id":15489},"_73函数重载","7.3函数重载",[19,15492,15493],{},"意思是函数名是可以相同的",[305,15495,15497],{"id":15496},"_731基本语法","7.3.1基本语法",[19,15499,15500],{},"作用：函数名可以相同，提高复用性",[19,15502,15503],{},[1921,15504,15505],{},"函数重载满足条件：",[2773,15507,15508,15511,15514],{},[29,15509,15510],{},"同一个作用域下",[29,15512,15513],{},"函数名称相同",[29,15515,15516,15517,15520,15521,15524,15525],{},"函数参数",[1921,15518,15519],{},"类型不同","  或者 ",[1921,15522,15523],{},"个数不同"," 或者 ",[1921,15526,15527],{},"顺序不同",[19,15529,15530,15533],{},[1921,15531,15532],{},"注意:","  函数的返回值不可以作为函数重载的条件",[73,15535,15537],{"className":11523,"code":15536,"language":11525,"meta":79,"style":79},"\u002F\u002F函数重载需要函数都在同一个作用域下\nvoid func()\n{\n    cout \u003C\u003C \"func 的调用！\" \u003C\u003C endl;\n}\nvoid func(int a)\n{\n    cout \u003C\u003C \"func (int a) 的调用！\" \u003C\u003C endl;\n}\nvoid func(double a)\n{\n    cout \u003C\u003C \"func (double a)的调用！\" \u003C\u003C endl;\n}\nvoid func(int a ,double b)\n{\n    cout \u003C\u003C \"func (int a ,double b) 的调用！\" \u003C\u003C endl;\n}\nvoid func(double a ,int b)\n{\n    cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n}\n\n\u002F\u002F函数返回值不可以作为函数重载条件\n\u002F\u002Fint func(double a, int b)\n\u002F\u002F{\n\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n\u002F\u002F}\n\n\nint main() {\n\n    func();\n    func(10);\n    func(3.14);\n    func(10,3.14);\n    func(3.14 , 10);\n    \n    system(\"pause\");\n\n    return 0;\n}\n",[32,15538,15539,15544,15552,15556,15569,15573,15587,15591,15604,15608,15623,15627,15640,15644,15665,15669,15682,15686,15706,15710,15723,15727,15731,15736,15741,15746,15751,15756,15760,15764,15772,15776,15782,15792,15802,15816,15831,15835,15845,15849,15857],{"__ignoreMap":79},[100,15540,15541],{"class":102,"line":103},[100,15542,15543],{"class":1836},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[100,15545,15546,15548,15550],{"class":102,"line":188},[100,15547,6960],{"class":471},[100,15549,12967],{"class":106},[100,15551,3587],{"class":258},[100,15553,15554],{"class":102,"line":199},[100,15555,3178],{"class":258},[100,15557,15558,15560,15562,15565,15567],{"class":102,"line":532},[100,15559,8125],{"class":258},[100,15561,2810],{"class":471},[100,15563,15564],{"class":110}," \"func 的调用！\"",[100,15566,3077],{"class":471},[100,15568,10426],{"class":258},[100,15570,15571],{"class":102,"line":577},[100,15572,3197],{"class":258},[100,15574,15575,15577,15579,15581,15583,15585],{"class":102,"line":589},[100,15576,6960],{"class":471},[100,15578,12967],{"class":106},[100,15580,713],{"class":258},[100,15582,1784],{"class":471},[100,15584,3031],{"class":6812},[100,15586,809],{"class":258},[100,15588,15589],{"class":102,"line":595},[100,15590,3178],{"class":258},[100,15592,15593,15595,15597,15600,15602],{"class":102,"line":601},[100,15594,8125],{"class":258},[100,15596,2810],{"class":471},[100,15598,15599],{"class":110}," \"func (int a) 的调用！\"",[100,15601,3077],{"class":471},[100,15603,10426],{"class":258},[100,15605,15606],{"class":102,"line":606},[100,15607,3197],{"class":258},[100,15609,15610,15612,15614,15616,15619,15621],{"class":102,"line":612},[100,15611,6960],{"class":471},[100,15613,12967],{"class":106},[100,15615,713],{"class":258},[100,15617,15618],{"class":471},"double",[100,15620,3031],{"class":6812},[100,15622,809],{"class":258},[100,15624,15625],{"class":102,"line":618},[100,15626,3178],{"class":258},[100,15628,15629,15631,15633,15636,15638],{"class":102,"line":623},[100,15630,8125],{"class":258},[100,15632,2810],{"class":471},[100,15634,15635],{"class":110}," \"func (double a)的调用！\"",[100,15637,3077],{"class":471},[100,15639,10426],{"class":258},[100,15641,15642],{"class":102,"line":629},[100,15643,3197],{"class":258},[100,15645,15646,15648,15650,15652,15654,15656,15659,15661,15663],{"class":102,"line":635},[100,15647,6960],{"class":471},[100,15649,12967],{"class":106},[100,15651,713],{"class":258},[100,15653,1784],{"class":471},[100,15655,3031],{"class":6812},[100,15657,15658],{"class":258}," ,",[100,15660,15618],{"class":471},[100,15662,4435],{"class":6812},[100,15664,809],{"class":258},[100,15666,15667],{"class":102,"line":641},[100,15668,3178],{"class":258},[100,15670,15671,15673,15675,15678,15680],{"class":102,"line":647},[100,15672,8125],{"class":258},[100,15674,2810],{"class":471},[100,15676,15677],{"class":110}," \"func (int a ,double b) 的调用！\"",[100,15679,3077],{"class":471},[100,15681,10426],{"class":258},[100,15683,15684],{"class":102,"line":653},[100,15685,3197],{"class":258},[100,15687,15688,15690,15692,15694,15696,15698,15700,15702,15704],{"class":102,"line":659},[100,15689,6960],{"class":471},[100,15691,12967],{"class":106},[100,15693,713],{"class":258},[100,15695,15618],{"class":471},[100,15697,3031],{"class":6812},[100,15699,15658],{"class":258},[100,15701,1784],{"class":471},[100,15703,4435],{"class":6812},[100,15705,809],{"class":258},[100,15707,15708],{"class":102,"line":665},[100,15709,3178],{"class":258},[100,15711,15712,15714,15716,15719,15721],{"class":102,"line":670},[100,15713,8125],{"class":258},[100,15715,2810],{"class":471},[100,15717,15718],{"class":110}," \"func (double a ,int b)的调用！\"",[100,15720,3077],{"class":471},[100,15722,10426],{"class":258},[100,15724,15725],{"class":102,"line":675},[100,15726,3197],{"class":258},[100,15728,15729],{"class":102,"line":699},[100,15730,570],{"emptyLinePlaceholder":569},[100,15732,15733],{"class":102,"line":708},[100,15734,15735],{"class":1836},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[100,15737,15738],{"class":102,"line":722},[100,15739,15740],{"class":1836},"\u002F\u002Fint func(double a, int b)\n",[100,15742,15743],{"class":102,"line":735},[100,15744,15745],{"class":1836},"\u002F\u002F{\n",[100,15747,15748],{"class":102,"line":754},[100,15749,15750],{"class":1836},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[100,15752,15753],{"class":102,"line":771},[100,15754,15755],{"class":1836},"\u002F\u002F}\n",[100,15757,15758],{"class":102,"line":776},[100,15759,570],{"emptyLinePlaceholder":569},[100,15761,15762],{"class":102,"line":781},[100,15763,570],{"emptyLinePlaceholder":569},[100,15765,15766,15768,15770],{"class":102,"line":796},[100,15767,1784],{"class":471},[100,15769,786],{"class":106},[100,15771,12435],{"class":258},[100,15773,15774],{"class":102,"line":812},[100,15775,570],{"emptyLinePlaceholder":569},[100,15777,15778,15780],{"class":102,"line":823},[100,15779,14867],{"class":106},[100,15781,7232],{"class":258},[100,15783,15784,15786,15788,15790],{"class":102,"line":828},[100,15785,14867],{"class":106},[100,15787,713],{"class":258},[100,15789,2213],{"class":117},[100,15791,4321],{"class":258},[100,15793,15794,15796,15798,15800],{"class":102,"line":840},[100,15795,14867],{"class":106},[100,15797,713],{"class":258},[100,15799,1827],{"class":117},[100,15801,4321],{"class":258},[100,15803,15804,15806,15808,15810,15812,15814],{"class":102,"line":845},[100,15805,14867],{"class":106},[100,15807,713],{"class":258},[100,15809,2213],{"class":117},[100,15811,2145],{"class":258},[100,15813,1827],{"class":117},[100,15815,4321],{"class":258},[100,15817,15818,15820,15822,15824,15827,15829],{"class":102,"line":868},[100,15819,14867],{"class":106},[100,15821,713],{"class":258},[100,15823,1827],{"class":117},[100,15825,15826],{"class":258}," , ",[100,15828,2213],{"class":117},[100,15830,4321],{"class":258},[100,15832,15833],{"class":102,"line":874},[100,15834,14792],{"class":258},[100,15836,15837,15839,15841,15843],{"class":102,"line":879},[100,15838,3914],{"class":106},[100,15840,713],{"class":258},[100,15842,3919],{"class":110},[100,15844,4321],{"class":258},[100,15846,15847],{"class":102,"line":889},[100,15848,570],{"emptyLinePlaceholder":569},[100,15850,15851,15853,15855],{"class":102,"line":894},[100,15852,5689],{"class":471},[100,15854,5692],{"class":117},[100,15856,2927],{"class":258},[100,15858,15859],{"class":102,"line":900},[100,15860,3197],{"class":258},[19,15862,15863],{},"重点：函数返回值不可以作为函数重载条件！",[305,15865,15867],{"id":15866},"_732注意事项","7.3.2注意事项",[2773,15869,15870,15873],{},[29,15871,15872],{},"引用作为重载条件!!!",[29,15874,15875],{},"函数重载碰到函数默认参数",[73,15877,15879],{"className":1770,"code":15878,"language":1772,"meta":79,"style":79},"\u002F\u002F函数重载注意事项\n\u002F\u002F1、引用作为重载条件\n\nvoid func(int &a)\n{\n    cout \u003C\u003C \"func (int &a) 调用 \" \u003C\u003C endl;\n}\n\nvoid func(const int &a)\n{\n    cout \u003C\u003C \"func (const int &a) 调用 \" \u003C\u003C endl;\n}\n\n\n\u002F\u002F2、函数重载碰到函数默认参数\n\nvoid func2(int a, int b = 10)\n{\n    cout \u003C\u003C \"func2(int a, int b = 10) 调用\" \u003C\u003C endl;\n}\n\nvoid func2(int a)\n{\n    cout \u003C\u003C \"func2(int a) 调用\" \u003C\u003C endl;\n}\n\nint main() {\n    \n    int a = 10;\n    func(a); \u002F\u002F调用无const   因为a本身是个变量，可读可写\n    func(10);\u002F\u002F调用有const   10是个常量\n\n\n    \u002F\u002Ffunc2(10); \u002F\u002F碰到默认参数产生歧义，需要避免\n\n    system(\"pause\");\n\n    return 0;\n}\n",[32,15880,15881,15886,15891,15895,15911,15915,15928,15932,15936,15954,15958,15971,15975,15979,15983,15988,15992,16016,16020,16033,16037,16041,16055,16059,16072,16076,16080,16088,16092,16104,16114,16127,16131,16135,16143,16147,16157,16161,16169],{"__ignoreMap":79},[100,15882,15883],{"class":102,"line":103},[100,15884,15885],{"class":1836},"\u002F\u002F函数重载注意事项\n",[100,15887,15888],{"class":102,"line":188},[100,15889,15890],{"class":1836},"\u002F\u002F1、引用作为重载条件\n",[100,15892,15893],{"class":102,"line":199},[100,15894,570],{"emptyLinePlaceholder":569},[100,15896,15897,15899,15901,15903,15905,15907,15909],{"class":102,"line":532},[100,15898,6960],{"class":471},[100,15900,12967],{"class":106},[100,15902,713],{"class":258},[100,15904,1784],{"class":471},[100,15906,12166],{"class":471},[100,15908,2006],{"class":6812},[100,15910,809],{"class":258},[100,15912,15913],{"class":102,"line":577},[100,15914,3178],{"class":258},[100,15916,15917,15919,15921,15924,15926],{"class":102,"line":589},[100,15918,8125],{"class":258},[100,15920,2810],{"class":471},[100,15922,15923],{"class":110}," \"func (int &a) 调用 \"",[100,15925,3077],{"class":471},[100,15927,10426],{"class":258},[100,15929,15930],{"class":102,"line":595},[100,15931,3197],{"class":258},[100,15933,15934],{"class":102,"line":601},[100,15935,570],{"emptyLinePlaceholder":569},[100,15937,15938,15940,15942,15944,15946,15948,15950,15952],{"class":102,"line":606},[100,15939,6960],{"class":471},[100,15941,12967],{"class":106},[100,15943,713],{"class":258},[100,15945,8388],{"class":471},[100,15947,3993],{"class":471},[100,15949,12166],{"class":471},[100,15951,2006],{"class":6812},[100,15953,809],{"class":258},[100,15955,15956],{"class":102,"line":612},[100,15957,3178],{"class":258},[100,15959,15960,15962,15964,15967,15969],{"class":102,"line":618},[100,15961,8125],{"class":258},[100,15963,2810],{"class":471},[100,15965,15966],{"class":110}," \"func (const int &a) 调用 \"",[100,15968,3077],{"class":471},[100,15970,10426],{"class":258},[100,15972,15973],{"class":102,"line":623},[100,15974,3197],{"class":258},[100,15976,15977],{"class":102,"line":629},[100,15978,570],{"emptyLinePlaceholder":569},[100,15980,15981],{"class":102,"line":635},[100,15982,570],{"emptyLinePlaceholder":569},[100,15984,15985],{"class":102,"line":641},[100,15986,15987],{"class":1836},"\u002F\u002F2、函数重载碰到函数默认参数\n",[100,15989,15990],{"class":102,"line":647},[100,15991,570],{"emptyLinePlaceholder":569},[100,15993,15994,15996,15998,16000,16002,16004,16006,16008,16010,16012,16014],{"class":102,"line":653},[100,15995,6960],{"class":471},[100,15997,15199],{"class":106},[100,15999,713],{"class":258},[100,16001,1784],{"class":471},[100,16003,3031],{"class":6812},[100,16005,14017],{"class":258},[100,16007,1784],{"class":471},[100,16009,4435],{"class":6812},[100,16011,583],{"class":471},[100,16013,3649],{"class":117},[100,16015,809],{"class":258},[100,16017,16018],{"class":102,"line":659},[100,16019,3178],{"class":258},[100,16021,16022,16024,16026,16029,16031],{"class":102,"line":665},[100,16023,8125],{"class":258},[100,16025,2810],{"class":471},[100,16027,16028],{"class":110}," \"func2(int a, int b = 10) 调用\"",[100,16030,3077],{"class":471},[100,16032,10426],{"class":258},[100,16034,16035],{"class":102,"line":670},[100,16036,3197],{"class":258},[100,16038,16039],{"class":102,"line":675},[100,16040,570],{"emptyLinePlaceholder":569},[100,16042,16043,16045,16047,16049,16051,16053],{"class":102,"line":699},[100,16044,6960],{"class":471},[100,16046,15199],{"class":106},[100,16048,713],{"class":258},[100,16050,1784],{"class":471},[100,16052,3031],{"class":6812},[100,16054,809],{"class":258},[100,16056,16057],{"class":102,"line":708},[100,16058,3178],{"class":258},[100,16060,16061,16063,16065,16068,16070],{"class":102,"line":722},[100,16062,8125],{"class":258},[100,16064,2810],{"class":471},[100,16066,16067],{"class":110}," \"func2(int a) 调用\"",[100,16069,3077],{"class":471},[100,16071,10426],{"class":258},[100,16073,16074],{"class":102,"line":735},[100,16075,3197],{"class":258},[100,16077,16078],{"class":102,"line":754},[100,16079,570],{"emptyLinePlaceholder":569},[100,16081,16082,16084,16086],{"class":102,"line":771},[100,16083,1784],{"class":471},[100,16085,786],{"class":106},[100,16087,12435],{"class":258},[100,16089,16090],{"class":102,"line":776},[100,16091,14792],{"class":258},[100,16093,16094,16096,16098,16100,16102],{"class":102,"line":781},[100,16095,3596],{"class":471},[100,16097,12451],{"class":258},[100,16099,472],{"class":471},[100,16101,3649],{"class":117},[100,16103,2927],{"class":258},[100,16105,16106,16108,16111],{"class":102,"line":796},[100,16107,14867],{"class":106},[100,16109,16110],{"class":258},"(a);",[100,16112,16113],{"class":1836}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[100,16115,16116,16118,16120,16122,16124],{"class":102,"line":812},[100,16117,14867],{"class":106},[100,16119,713],{"class":258},[100,16121,2213],{"class":117},[100,16123,7562],{"class":258},[100,16125,16126],{"class":1836},"\u002F\u002F调用有const   10是个常量\n",[100,16128,16129],{"class":102,"line":823},[100,16130,570],{"emptyLinePlaceholder":569},[100,16132,16133],{"class":102,"line":828},[100,16134,570],{"emptyLinePlaceholder":569},[100,16136,16137,16140],{"class":102,"line":840},[100,16138,16139],{"class":1836},"    \u002F\u002Ffunc2(10);",[100,16141,16142],{"class":1836}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[100,16144,16145],{"class":102,"line":845},[100,16146,570],{"emptyLinePlaceholder":569},[100,16148,16149,16151,16153,16155],{"class":102,"line":868},[100,16150,3914],{"class":106},[100,16152,713],{"class":258},[100,16154,3919],{"class":110},[100,16156,4321],{"class":258},[100,16158,16159],{"class":102,"line":874},[100,16160,570],{"emptyLinePlaceholder":569},[100,16162,16163,16165,16167],{"class":102,"line":879},[100,16164,5689],{"class":471},[100,16166,5692],{"class":117},[100,16168,2927],{"class":258},[100,16170,16171],{"class":102,"line":889},[100,16172,3197],{"class":258},[1677,16174,16175],{},"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":79,"searchDepth":188,"depth":188,"links":16177},[16178,16179,16180],{"id":15111,"depth":188,"text":15112},{"id":15367,"depth":188,"text":15368},{"id":15489,"depth":188,"text":15490,"children":16181},[16182,16183],{"id":15496,"depth":199,"text":15497},{"id":15866,"depth":199,"text":15867},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":15103,"description":79},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":16190,"title":16191,"body":16192,"description":24946,"extension":1708,"meta":24947,"navigation":569,"path":24948,"seo":24949,"stem":24950,"__hash__":24951},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":16193,"toc":24927},[16194,16197,16203,16210,16215,16218,16221,16224,16228,16232,16235,16238,16246,16251,16254,16261,16266,16425,16428,16681,16684,16687,16690,16695,16698,16701,16712,16717,16953,16957,16967,16970,16978,17125,17129,17132,17135,17139,17584,17588,17596,17604,18516,18523,18528,19156,19159,19162,19165,19284,19287,19374,19377,19503,19506,19600,19603,19956,19960,19968,19972,19979,19982,19985,19996,20002,20007,20019,20027,20047,20055,20072,20258,20261,20265,20268,20271,20274,20277,20280,20283,20286,20746,20752,20756,20759,20770,21357,21360,21849,21853,21856,21859,21862,21865,21868,21876,22272,22276,22279,22282,22729,22732,22735,22740,22743,22748,22751,22755,22758,22760,22766,22769,23075,23085,23126,23130,23133,23135,23168,23171,23478,23480,23495,23498,23521,23530,23536,23539,23543,23546,23549,23554,23565,23570,23578,23583,23713,23716,23719,23894,23899,24111,24115,24118,24232,24237,24476,24480,24484,24487,24490,24495,24600,24603,24606,24609,24613,24724,24727,24730,24735,24787,24790,24793,24798,24844,24847,24852,24920,24922,24925],[10,16195,16191],{"id":16196},"_8类和对象",[19,16198,16199,16200],{},"C++面向对象的三大特性为",[1921,16201,16202],{},"封装、继承、多态",[19,16204,16205,16206,16209],{},"C++认为",[1921,16207,16208],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,16211,16212],{},[1921,16213,16214],{},"例如：",[19,16216,16217],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,16219,16220],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,16222,16223],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,16225,16227],{"id":16226},"_81封装","8.1封装",[305,16229,16231],{"id":16230},"_811封装的意义","8.1.1封装的意义",[19,16233,16234],{},"封装是C++面向对象三大特性之一",[19,16236,16237],{},"封装的意义：",[2773,16239,16240,16243],{},[29,16241,16242],{},"将属性和行为作为一个整体，表现生活中的事物",[29,16244,16245],{},"将属性和行为加以权限控制",[19,16247,16248],{},[1921,16249,16250],{},"封装意义一：",[19,16252,16253],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,16255,16256,15376,16258],{},[1921,16257,6779],{},[32,16259,16260],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[26,16262,16263],{},[29,16264,16265],{},"**示例1：**设计一个圆类，求圆的周长",[73,16267,16269],{"className":1770,"code":16268,"language":1772,"meta":79,"style":79},"class Circle\n{\n    \u002F\u002F访问权限\n    \u002F\u002F公共权限\npublic:\n    \u002F\u002F属性\n    int m_r;\n    \u002F\u002F行为\n    double calculateZC()\n    {\n        return 2*PI*m_r;\n    }\n};\nint main()\n{\n    \u002F\u002F通过圆类 创建具体的圆(对象)\n    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n    Circle c1;\n    \u002F\u002F给圆对象 的属性进行赋值\n    c1.m_r=10;\n    cout\u003C\u003C\"圆的周长\"\u003C\u003Cc1.calculateZC()\u003C\u003Cendl;\n}\n",[32,16270,16271,16279,16283,16288,16293,16298,16303,16310,16315,16325,16329,16347,16351,16355,16363,16367,16372,16377,16382,16387,16398,16421],{"__ignoreMap":79},[100,16272,16273,16276],{"class":102,"line":103},[100,16274,16275],{"class":471},"class",[100,16277,16278],{"class":106}," Circle\n",[100,16280,16281],{"class":102,"line":188},[100,16282,3178],{"class":258},[100,16284,16285],{"class":102,"line":199},[100,16286,16287],{"class":1836},"    \u002F\u002F访问权限\n",[100,16289,16290],{"class":102,"line":532},[100,16291,16292],{"class":1836},"    \u002F\u002F公共权限\n",[100,16294,16295],{"class":102,"line":577},[100,16296,16297],{"class":471},"public:\n",[100,16299,16300],{"class":102,"line":589},[100,16301,16302],{"class":1836},"    \u002F\u002F属性\n",[100,16304,16305,16307],{"class":102,"line":595},[100,16306,3596],{"class":471},[100,16308,16309],{"class":258}," m_r;\n",[100,16311,16312],{"class":102,"line":601},[100,16313,16314],{"class":1836},"    \u002F\u002F行为\n",[100,16316,16317,16320,16323],{"class":102,"line":606},[100,16318,16319],{"class":471},"    double",[100,16321,16322],{"class":106}," calculateZC",[100,16324,3587],{"class":258},[100,16326,16327],{"class":102,"line":612},[100,16328,3641],{"class":258},[100,16330,16331,16334,16337,16339,16342,16344],{"class":102,"line":618},[100,16332,16333],{"class":471},"        return",[100,16335,16336],{"class":117}," 2",[100,16338,2222],{"class":471},[100,16340,16341],{"class":258},"PI",[100,16343,2222],{"class":471},[100,16345,16346],{"class":258},"m_r;\n",[100,16348,16349],{"class":102,"line":623},[100,16350,3798],{"class":258},[100,16352,16353],{"class":102,"line":629},[100,16354,5594],{"class":258},[100,16356,16357,16359,16361],{"class":102,"line":635},[100,16358,1784],{"class":471},[100,16360,786],{"class":106},[100,16362,3587],{"class":258},[100,16364,16365],{"class":102,"line":641},[100,16366,3178],{"class":258},[100,16368,16369],{"class":102,"line":647},[100,16370,16371],{"class":1836},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[100,16373,16374],{"class":102,"line":653},[100,16375,16376],{"class":1836},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[100,16378,16379],{"class":102,"line":659},[100,16380,16381],{"class":258},"    Circle c1;\n",[100,16383,16384],{"class":102,"line":665},[100,16385,16386],{"class":1836},"    \u002F\u002F给圆对象 的属性进行赋值\n",[100,16388,16389,16392,16394,16396],{"class":102,"line":670},[100,16390,16391],{"class":258},"    c1.m_r",[100,16393,472],{"class":471},[100,16395,2213],{"class":117},[100,16397,2927],{"class":258},[100,16399,16400,16402,16404,16407,16409,16412,16415,16417,16419],{"class":102,"line":675},[100,16401,3183],{"class":258},[100,16403,2810],{"class":471},[100,16405,16406],{"class":110},"\"圆的周长\"",[100,16408,2810],{"class":471},[100,16410,16411],{"class":258},"c1.",[100,16413,16414],{"class":106},"calculateZC",[100,16416,4036],{"class":258},[100,16418,2810],{"class":471},[100,16420,2832],{"class":258},[100,16422,16423],{"class":102,"line":699},[100,16424,3197],{"class":258},[19,16426,16427],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[73,16429,16431],{"className":1770,"code":16430,"language":1772,"meta":79,"style":79},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\nclass Student\n{\npublic:\n    string m_name;\n    int m_id;\n    \u002F\u002F赋值姓名\n    void setName(string name)\n    {\n        m_name=name;\n    }\n    \u002F\u002F赋值学号\n    void setId(int id)\n    {\n        m_id=id;\n    }\n    \u002F\u002F打印学生信息\n    void printInfo()\n    {\n        cout\u003C\u003C\"姓名：\"\u003C\u003Cm_name\u003C\u003C\" \"\u003C\u003C\"学号：\"\u003C\u003Cm_id\u003C\u003Cendl;\n    }\n};\nint main()\n{\n    \u002F\u002F实例化\n    Student s1;\n    s1.setName(\"张三\");\n    s1.setId(123456);\n    s1.printInfo();\n}\n",[32,16432,16433,16439,16449,16455,16461,16465,16469,16474,16481,16486,16504,16508,16518,16522,16527,16543,16547,16557,16561,16566,16574,16578,16610,16614,16618,16626,16630,16635,16640,16654,16668,16677],{"__ignoreMap":79},[100,16434,16435,16437],{"class":102,"line":103},[100,16436,3562],{"class":471},[100,16438,3565],{"class":110},[100,16440,16441,16443,16445,16447],{"class":102,"line":188},[100,16442,3570],{"class":471},[100,16444,3573],{"class":471},[100,16446,3576],{"class":106},[100,16448,2927],{"class":258},[100,16450,16451,16453],{"class":102,"line":199},[100,16452,3562],{"class":471},[100,16454,9345],{"class":110},[100,16456,16457,16459],{"class":102,"line":532},[100,16458,16275],{"class":471},[100,16460,9358],{"class":106},[100,16462,16463],{"class":102,"line":577},[100,16464,3178],{"class":258},[100,16466,16467],{"class":102,"line":589},[100,16468,16297],{"class":471},[100,16470,16471],{"class":102,"line":595},[100,16472,16473],{"class":258},"    string m_name;\n",[100,16475,16476,16478],{"class":102,"line":601},[100,16477,3596],{"class":471},[100,16479,16480],{"class":258}," m_id;\n",[100,16482,16483],{"class":102,"line":606},[100,16484,16485],{"class":1836},"    \u002F\u002F赋值姓名\n",[100,16487,16488,16491,16494,16496,16499,16502],{"class":102,"line":612},[100,16489,16490],{"class":471},"    void",[100,16492,16493],{"class":106}," setName",[100,16495,713],{"class":258},[100,16497,16498],{"class":106},"string",[100,16500,16501],{"class":6812}," name",[100,16503,809],{"class":258},[100,16505,16506],{"class":102,"line":618},[100,16507,3641],{"class":258},[100,16509,16510,16513,16515],{"class":102,"line":623},[100,16511,16512],{"class":258},"        m_name",[100,16514,472],{"class":471},[100,16516,16517],{"class":258},"name;\n",[100,16519,16520],{"class":102,"line":629},[100,16521,3798],{"class":258},[100,16523,16524],{"class":102,"line":635},[100,16525,16526],{"class":1836},"    \u002F\u002F赋值学号\n",[100,16528,16529,16531,16534,16536,16538,16541],{"class":102,"line":641},[100,16530,16490],{"class":471},[100,16532,16533],{"class":106}," setId",[100,16535,713],{"class":258},[100,16537,1784],{"class":471},[100,16539,16540],{"class":6812}," id",[100,16542,809],{"class":258},[100,16544,16545],{"class":102,"line":647},[100,16546,3641],{"class":258},[100,16548,16549,16552,16554],{"class":102,"line":653},[100,16550,16551],{"class":258},"        m_id",[100,16553,472],{"class":471},[100,16555,16556],{"class":258},"id;\n",[100,16558,16559],{"class":102,"line":659},[100,16560,3798],{"class":258},[100,16562,16563],{"class":102,"line":665},[100,16564,16565],{"class":1836},"    \u002F\u002F打印学生信息\n",[100,16567,16568,16570,16572],{"class":102,"line":670},[100,16569,16490],{"class":471},[100,16571,11200],{"class":106},[100,16573,3587],{"class":258},[100,16575,16576],{"class":102,"line":675},[100,16577,3641],{"class":258},[100,16579,16580,16582,16584,16587,16589,16592,16594,16596,16598,16601,16603,16606,16608],{"class":102,"line":699},[100,16581,5051],{"class":258},[100,16583,2810],{"class":471},[100,16585,16586],{"class":110},"\"姓名：\"",[100,16588,2810],{"class":471},[100,16590,16591],{"class":258},"m_name",[100,16593,2810],{"class":471},[100,16595,5958],{"class":110},[100,16597,2810],{"class":471},[100,16599,16600],{"class":110},"\"学号：\"",[100,16602,2810],{"class":471},[100,16604,16605],{"class":258},"m_id",[100,16607,2810],{"class":471},[100,16609,2832],{"class":258},[100,16611,16612],{"class":102,"line":708},[100,16613,3798],{"class":258},[100,16615,16616],{"class":102,"line":722},[100,16617,5594],{"class":258},[100,16619,16620,16622,16624],{"class":102,"line":735},[100,16621,1784],{"class":471},[100,16623,786],{"class":106},[100,16625,3587],{"class":258},[100,16627,16628],{"class":102,"line":754},[100,16629,3178],{"class":258},[100,16631,16632],{"class":102,"line":771},[100,16633,16634],{"class":1836},"    \u002F\u002F实例化\n",[100,16636,16637],{"class":102,"line":776},[100,16638,16639],{"class":258},"    Student s1;\n",[100,16641,16642,16645,16648,16650,16652],{"class":102,"line":781},[100,16643,16644],{"class":258},"    s1.",[100,16646,16647],{"class":106},"setName",[100,16649,713],{"class":258},[100,16651,9512],{"class":110},[100,16653,4321],{"class":258},[100,16655,16656,16658,16661,16663,16666],{"class":102,"line":796},[100,16657,16644],{"class":258},[100,16659,16660],{"class":106},"setId",[100,16662,713],{"class":258},[100,16664,16665],{"class":117},"123456",[100,16667,4321],{"class":258},[100,16669,16670,16672,16675],{"class":102,"line":812},[100,16671,16644],{"class":258},[100,16673,16674],{"class":106},"printInfo",[100,16676,7232],{"class":258},[100,16678,16679],{"class":102,"line":823},[100,16680,3197],{"class":258},[19,16682,16683],{},"类中的属性和行为统称为成员",[19,16685,16686],{},"属性：成员属性(成员变量)",[19,16688,16689],{},"方法：成员函数(成员方法)",[19,16691,16692],{},[1921,16693,16694],{},"封装意义二：",[19,16696,16697],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,16699,16700],{},"访问权限有三种：",[26,16702,16703,16706,16709],{},[29,16704,16705],{},"public        公共权限",[29,16707,16708],{},"protected 保护权限",[29,16710,16711],{},"private      私有权限",[19,16713,16714],{},[1921,16715,16716],{},"示例：",[73,16718,16720],{"className":11523,"code":16719,"language":11525,"meta":79,"style":79},"\u002F\u002F三种权限\n\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n\nclass Person\n{\n    \u002F\u002F姓名  公共权限\npublic:\n    string m_Name;\n\n    \u002F\u002F汽车  保护权限\nprotected:\n    string m_Car;\n\n    \u002F\u002F银行卡密码  私有权限\nprivate:\n    int m_Password;\n\npublic:\n    void func()\n    {\n        m_Name = \"张三\";\n        m_Car = \"拖拉机\";\n        m_Password = 123456;\n    }\n};\n\nint main() {\n\n    Person p;\n    p.m_Name = \"李四\";\n    \u002F\u002Fp.m_Car = \"奔驰\";  \u002F\u002F保护权限类外访问不到\n    \u002F\u002Fp.m_Password = 123; \u002F\u002F私有权限类外访问不到\n\n    system(\"pause\");\n\n    return 0;\n}\n",[32,16721,16722,16727,16732,16737,16742,16746,16753,16757,16762,16766,16771,16775,16780,16785,16790,16794,16799,16804,16811,16815,16819,16827,16831,16842,16854,16866,16870,16874,16878,16886,16890,16895,16907,16915,16923,16927,16937,16941,16949],{"__ignoreMap":79},[100,16723,16724],{"class":102,"line":103},[100,16725,16726],{"class":1836},"\u002F\u002F三种权限\n",[100,16728,16729],{"class":102,"line":188},[100,16730,16731],{"class":1836},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[100,16733,16734],{"class":102,"line":199},[100,16735,16736],{"class":1836},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[100,16738,16739],{"class":102,"line":532},[100,16740,16741],{"class":1836},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[100,16743,16744],{"class":102,"line":577},[100,16745,570],{"emptyLinePlaceholder":569},[100,16747,16748,16750],{"class":102,"line":589},[100,16749,16275],{"class":471},[100,16751,16752],{"class":106}," Person\n",[100,16754,16755],{"class":102,"line":595},[100,16756,3178],{"class":258},[100,16758,16759],{"class":102,"line":601},[100,16760,16761],{"class":1836},"    \u002F\u002F姓名  公共权限\n",[100,16763,16764],{"class":102,"line":606},[100,16765,16297],{"class":471},[100,16767,16768],{"class":102,"line":612},[100,16769,16770],{"class":258},"    string m_Name;\n",[100,16772,16773],{"class":102,"line":618},[100,16774,570],{"emptyLinePlaceholder":569},[100,16776,16777],{"class":102,"line":623},[100,16778,16779],{"class":1836},"    \u002F\u002F汽车  保护权限\n",[100,16781,16782],{"class":102,"line":629},[100,16783,16784],{"class":471},"protected:\n",[100,16786,16787],{"class":102,"line":635},[100,16788,16789],{"class":258},"    string m_Car;\n",[100,16791,16792],{"class":102,"line":641},[100,16793,570],{"emptyLinePlaceholder":569},[100,16795,16796],{"class":102,"line":647},[100,16797,16798],{"class":1836},"    \u002F\u002F银行卡密码  私有权限\n",[100,16800,16801],{"class":102,"line":653},[100,16802,16803],{"class":471},"private:\n",[100,16805,16806,16808],{"class":102,"line":659},[100,16807,3596],{"class":471},[100,16809,16810],{"class":258}," m_Password;\n",[100,16812,16813],{"class":102,"line":665},[100,16814,570],{"emptyLinePlaceholder":569},[100,16816,16817],{"class":102,"line":670},[100,16818,16297],{"class":471},[100,16820,16821,16823,16825],{"class":102,"line":675},[100,16822,16490],{"class":471},[100,16824,12967],{"class":106},[100,16826,3587],{"class":258},[100,16828,16829],{"class":102,"line":699},[100,16830,3641],{"class":258},[100,16832,16833,16836,16838,16840],{"class":102,"line":708},[100,16834,16835],{"class":258},"        m_Name ",[100,16837,472],{"class":471},[100,16839,10524],{"class":110},[100,16841,2927],{"class":258},[100,16843,16844,16847,16849,16852],{"class":102,"line":722},[100,16845,16846],{"class":258},"        m_Car ",[100,16848,472],{"class":471},[100,16850,16851],{"class":110}," \"拖拉机\"",[100,16853,2927],{"class":258},[100,16855,16856,16859,16861,16864],{"class":102,"line":735},[100,16857,16858],{"class":258},"        m_Password ",[100,16860,472],{"class":471},[100,16862,16863],{"class":117}," 123456",[100,16865,2927],{"class":258},[100,16867,16868],{"class":102,"line":754},[100,16869,3798],{"class":258},[100,16871,16872],{"class":102,"line":771},[100,16873,5594],{"class":258},[100,16875,16876],{"class":102,"line":776},[100,16877,570],{"emptyLinePlaceholder":569},[100,16879,16880,16882,16884],{"class":102,"line":781},[100,16881,1784],{"class":471},[100,16883,786],{"class":106},[100,16885,12435],{"class":258},[100,16887,16888],{"class":102,"line":796},[100,16889,570],{"emptyLinePlaceholder":569},[100,16891,16892],{"class":102,"line":812},[100,16893,16894],{"class":258},"    Person p;\n",[100,16896,16897,16900,16902,16905],{"class":102,"line":823},[100,16898,16899],{"class":258},"    p.m_Name ",[100,16901,472],{"class":471},[100,16903,16904],{"class":110}," \"李四\"",[100,16906,2927],{"class":258},[100,16908,16909,16912],{"class":102,"line":828},[100,16910,16911],{"class":1836},"    \u002F\u002Fp.m_Car = \"奔驰\";",[100,16913,16914],{"class":1836},"  \u002F\u002F保护权限类外访问不到\n",[100,16916,16917,16920],{"class":102,"line":840},[100,16918,16919],{"class":1836},"    \u002F\u002Fp.m_Password = 123;",[100,16921,16922],{"class":1836}," \u002F\u002F私有权限类外访问不到\n",[100,16924,16925],{"class":102,"line":845},[100,16926,570],{"emptyLinePlaceholder":569},[100,16928,16929,16931,16933,16935],{"class":102,"line":868},[100,16930,3914],{"class":106},[100,16932,713],{"class":258},[100,16934,3919],{"class":110},[100,16936,4321],{"class":258},[100,16938,16939],{"class":102,"line":874},[100,16940,570],{"emptyLinePlaceholder":569},[100,16942,16943,16945,16947],{"class":102,"line":879},[100,16944,5689],{"class":471},[100,16946,5692],{"class":117},[100,16948,2927],{"class":258},[100,16950,16951],{"class":102,"line":889},[100,16952,3197],{"class":258},[305,16954,16956],{"id":16955},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,16958,16959,16960,16963,16964],{},"在C++中 struct和class唯一的",[1921,16961,16962],{},"区别","就在于 ",[1921,16965,16966],{},"默认的访问权限不同",[19,16968,16969],{},"区别：",[2773,16971,16972,16975],{},[29,16973,16974],{},"struct 默认权限为公共",[29,16976,16977],{},"class   默认权限为私有",[73,16979,16981],{"className":11523,"code":16980,"language":11525,"meta":79,"style":79},"class C1\n{\n    int  m_A; \u002F\u002F默认是私有权限\n};\n\nstruct C2\n{\n    int m_A;  \u002F\u002F默认是公共权限\n};\n\nint main() {\n\n    C1 c1;\n    c1.m_A = 10; \u002F\u002F错误，访问权限是私有\n\n    C2 c2;\n    c2.m_A = 10; \u002F\u002F正确，访问权限是公共\n\n    system(\"pause\");\n\n    return 0;\n}\n",[32,16982,16983,16990,16994,17004,17008,17012,17019,17023,17033,17037,17041,17049,17053,17058,17072,17076,17081,17095,17099,17109,17113,17121],{"__ignoreMap":79},[100,16984,16985,16987],{"class":102,"line":103},[100,16986,16275],{"class":471},[100,16988,16989],{"class":106}," C1\n",[100,16991,16992],{"class":102,"line":188},[100,16993,3178],{"class":258},[100,16995,16996,16998,17001],{"class":102,"line":199},[100,16997,3596],{"class":471},[100,16999,17000],{"class":258},"  m_A;",[100,17002,17003],{"class":1836}," \u002F\u002F默认是私有权限\n",[100,17005,17006],{"class":102,"line":532},[100,17007,5594],{"class":258},[100,17009,17010],{"class":102,"line":577},[100,17011,570],{"emptyLinePlaceholder":569},[100,17013,17014,17016],{"class":102,"line":589},[100,17015,9355],{"class":471},[100,17017,17018],{"class":106}," C2\n",[100,17020,17021],{"class":102,"line":595},[100,17022,3178],{"class":258},[100,17024,17025,17027,17030],{"class":102,"line":601},[100,17026,3596],{"class":471},[100,17028,17029],{"class":258}," m_A;",[100,17031,17032],{"class":1836},"  \u002F\u002F默认是公共权限\n",[100,17034,17035],{"class":102,"line":606},[100,17036,5594],{"class":258},[100,17038,17039],{"class":102,"line":612},[100,17040,570],{"emptyLinePlaceholder":569},[100,17042,17043,17045,17047],{"class":102,"line":618},[100,17044,1784],{"class":471},[100,17046,786],{"class":106},[100,17048,12435],{"class":258},[100,17050,17051],{"class":102,"line":623},[100,17052,570],{"emptyLinePlaceholder":569},[100,17054,17055],{"class":102,"line":629},[100,17056,17057],{"class":258},"    C1 c1;\n",[100,17059,17060,17063,17065,17067,17069],{"class":102,"line":635},[100,17061,17062],{"class":258},"    c1.m_A ",[100,17064,472],{"class":471},[100,17066,3649],{"class":117},[100,17068,1833],{"class":258},[100,17070,17071],{"class":1836}," \u002F\u002F错误，访问权限是私有\n",[100,17073,17074],{"class":102,"line":641},[100,17075,570],{"emptyLinePlaceholder":569},[100,17077,17078],{"class":102,"line":647},[100,17079,17080],{"class":258},"    C2 c2;\n",[100,17082,17083,17086,17088,17090,17092],{"class":102,"line":653},[100,17084,17085],{"class":258},"    c2.m_A ",[100,17087,472],{"class":471},[100,17089,3649],{"class":117},[100,17091,1833],{"class":258},[100,17093,17094],{"class":1836}," \u002F\u002F正确，访问权限是公共\n",[100,17096,17097],{"class":102,"line":659},[100,17098,570],{"emptyLinePlaceholder":569},[100,17100,17101,17103,17105,17107],{"class":102,"line":665},[100,17102,3914],{"class":106},[100,17104,713],{"class":258},[100,17106,3919],{"class":110},[100,17108,4321],{"class":258},[100,17110,17111],{"class":102,"line":670},[100,17112,570],{"emptyLinePlaceholder":569},[100,17114,17115,17117,17119],{"class":102,"line":675},[100,17116,5689],{"class":471},[100,17118,5692],{"class":117},[100,17120,2927],{"class":258},[100,17122,17123],{"class":102,"line":699},[100,17124,3197],{"class":258},[305,17126,17128],{"id":17127},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,17130,17131],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,17133,17134],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,17136,17137],{},[1921,17138,16716],{},[73,17140,17142],{"className":11523,"code":17141,"language":11525,"meta":79,"style":79},"class Person {\npublic:\n\n    \u002F\u002F姓名设置可读可写\n    void setName(string name) {\n        m_Name = name;\n    }\n    string getName()\n    {\n        return m_Name;\n    }\n\n\n    \u002F\u002F获取年龄 \n    int getAge() {\n        return m_Age;\n    }\n    \u002F\u002F设置年龄\n    void setAge(int age) {\n        if (age \u003C 0 || age > 150) {\n            cout \u003C\u003C \"你个老妖精!\" \u003C\u003C endl;\n            return;\n        }\n        m_Age = age;\n    }\n\n    \u002F\u002F情人设置为只写\n    void setLover(string lover) {\n        m_Lover = lover;\n    }\n\nprivate:\n    string m_Name; \u002F\u002F可读可写  姓名\n    \n    int m_Age; \u002F\u002F只读  年龄\n\n    string m_Lover; \u002F\u002F只写  情人\n};\n\nint main() {\n\n    Person p;\n    \u002F\u002F姓名设置\n    p.setName(\"张三\");\n    cout \u003C\u003C \"姓名： \" \u003C\u003C p.getName() \u003C\u003C endl;\n\n    \u002F\u002F年龄设置\n    p.setAge(50);\n    cout \u003C\u003C \"年龄： \" \u003C\u003C p.getAge() \u003C\u003C endl;\n\n    \u002F\u002F情人设置\n    p.setLover(\"苍井\");\n    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;  \u002F\u002F只写属性，不可以读取\n\n    system(\"pause\");\n\n    return 0;\n}\n",[32,17143,17144,17154,17158,17162,17167,17181,17190,17194,17204,17208,17215,17219,17223,17227,17232,17241,17248,17252,17257,17273,17296,17309,17316,17320,17329,17333,17337,17342,17358,17368,17372,17376,17380,17388,17392,17402,17406,17414,17418,17422,17430,17434,17438,17443,17456,17479,17483,17488,17501,17523,17527,17532,17546,17554,17558,17568,17572,17580],{"__ignoreMap":79},[100,17145,17146,17148,17151],{"class":102,"line":103},[100,17147,16275],{"class":471},[100,17149,17150],{"class":106}," Person",[100,17152,17153],{"class":258}," {\n",[100,17155,17156],{"class":102,"line":188},[100,17157,16297],{"class":471},[100,17159,17160],{"class":102,"line":199},[100,17161,570],{"emptyLinePlaceholder":569},[100,17163,17164],{"class":102,"line":532},[100,17165,17166],{"class":1836},"    \u002F\u002F姓名设置可读可写\n",[100,17168,17169,17171,17173,17175,17177,17179],{"class":102,"line":577},[100,17170,16490],{"class":471},[100,17172,16493],{"class":106},[100,17174,713],{"class":258},[100,17176,16498],{"class":106},[100,17178,16501],{"class":6812},[100,17180,14024],{"class":258},[100,17182,17183,17185,17187],{"class":102,"line":589},[100,17184,16835],{"class":258},[100,17186,472],{"class":471},[100,17188,17189],{"class":258}," name;\n",[100,17191,17192],{"class":102,"line":595},[100,17193,3798],{"class":258},[100,17195,17196,17199,17202],{"class":102,"line":601},[100,17197,17198],{"class":106},"    string",[100,17200,17201],{"class":106}," getName",[100,17203,3587],{"class":258},[100,17205,17206],{"class":102,"line":606},[100,17207,3641],{"class":258},[100,17209,17210,17212],{"class":102,"line":612},[100,17211,16333],{"class":471},[100,17213,17214],{"class":258}," m_Name;\n",[100,17216,17217],{"class":102,"line":618},[100,17218,3798],{"class":258},[100,17220,17221],{"class":102,"line":623},[100,17222,570],{"emptyLinePlaceholder":569},[100,17224,17225],{"class":102,"line":629},[100,17226,570],{"emptyLinePlaceholder":569},[100,17228,17229],{"class":102,"line":635},[100,17230,17231],{"class":1836},"    \u002F\u002F获取年龄 \n",[100,17233,17234,17236,17239],{"class":102,"line":641},[100,17235,3596],{"class":471},[100,17237,17238],{"class":106}," getAge",[100,17240,12435],{"class":258},[100,17242,17243,17245],{"class":102,"line":647},[100,17244,16333],{"class":471},[100,17246,17247],{"class":258}," m_Age;\n",[100,17249,17250],{"class":102,"line":653},[100,17251,3798],{"class":258},[100,17253,17254],{"class":102,"line":659},[100,17255,17256],{"class":1836},"    \u002F\u002F设置年龄\n",[100,17258,17259,17261,17264,17266,17268,17271],{"class":102,"line":665},[100,17260,16490],{"class":471},[100,17262,17263],{"class":106}," setAge",[100,17265,713],{"class":258},[100,17267,1784],{"class":471},[100,17269,17270],{"class":6812}," age",[100,17272,14024],{"class":258},[100,17274,17275,17277,17280,17282,17284,17286,17289,17291,17294],{"class":102,"line":670},[100,17276,4106],{"class":471},[100,17278,17279],{"class":258}," (age ",[100,17281,2676],{"class":471},[100,17283,5692],{"class":117},[100,17285,4855],{"class":471},[100,17287,17288],{"class":258}," age ",[100,17290,2726],{"class":471},[100,17292,17293],{"class":117}," 150",[100,17295,14024],{"class":258},[100,17297,17298,17300,17302,17305,17307],{"class":102,"line":675},[100,17299,11303],{"class":258},[100,17301,2810],{"class":471},[100,17303,17304],{"class":110}," \"你个老妖精!\"",[100,17306,3077],{"class":471},[100,17308,10426],{"class":258},[100,17310,17311,17314],{"class":102,"line":699},[100,17312,17313],{"class":471},"            return",[100,17315,2927],{"class":258},[100,17317,17318],{"class":102,"line":708},[100,17319,4138],{"class":258},[100,17321,17322,17325,17327],{"class":102,"line":722},[100,17323,17324],{"class":258},"        m_Age ",[100,17326,472],{"class":471},[100,17328,9393],{"class":258},[100,17330,17331],{"class":102,"line":735},[100,17332,3798],{"class":258},[100,17334,17335],{"class":102,"line":754},[100,17336,570],{"emptyLinePlaceholder":569},[100,17338,17339],{"class":102,"line":771},[100,17340,17341],{"class":1836},"    \u002F\u002F情人设置为只写\n",[100,17343,17344,17346,17349,17351,17353,17356],{"class":102,"line":776},[100,17345,16490],{"class":471},[100,17347,17348],{"class":106}," setLover",[100,17350,713],{"class":258},[100,17352,16498],{"class":106},[100,17354,17355],{"class":6812}," lover",[100,17357,14024],{"class":258},[100,17359,17360,17363,17365],{"class":102,"line":781},[100,17361,17362],{"class":258},"        m_Lover ",[100,17364,472],{"class":471},[100,17366,17367],{"class":258}," lover;\n",[100,17369,17370],{"class":102,"line":796},[100,17371,3798],{"class":258},[100,17373,17374],{"class":102,"line":812},[100,17375,570],{"emptyLinePlaceholder":569},[100,17377,17378],{"class":102,"line":823},[100,17379,16803],{"class":471},[100,17381,17382,17385],{"class":102,"line":828},[100,17383,17384],{"class":258},"    string m_Name;",[100,17386,17387],{"class":1836}," \u002F\u002F可读可写  姓名\n",[100,17389,17390],{"class":102,"line":840},[100,17391,14792],{"class":258},[100,17393,17394,17396,17399],{"class":102,"line":845},[100,17395,3596],{"class":471},[100,17397,17398],{"class":258}," m_Age;",[100,17400,17401],{"class":1836}," \u002F\u002F只读  年龄\n",[100,17403,17404],{"class":102,"line":868},[100,17405,570],{"emptyLinePlaceholder":569},[100,17407,17408,17411],{"class":102,"line":874},[100,17409,17410],{"class":258},"    string m_Lover;",[100,17412,17413],{"class":1836}," \u002F\u002F只写  情人\n",[100,17415,17416],{"class":102,"line":879},[100,17417,5594],{"class":258},[100,17419,17420],{"class":102,"line":889},[100,17421,570],{"emptyLinePlaceholder":569},[100,17423,17424,17426,17428],{"class":102,"line":894},[100,17425,1784],{"class":471},[100,17427,786],{"class":106},[100,17429,12435],{"class":258},[100,17431,17432],{"class":102,"line":900},[100,17433,570],{"emptyLinePlaceholder":569},[100,17435,17436],{"class":102,"line":910},[100,17437,16894],{"class":258},[100,17439,17440],{"class":102,"line":915},[100,17441,17442],{"class":1836},"    \u002F\u002F姓名设置\n",[100,17444,17445,17448,17450,17452,17454],{"class":102,"line":929},[100,17446,17447],{"class":258},"    p.",[100,17449,16647],{"class":106},[100,17451,713],{"class":258},[100,17453,9512],{"class":110},[100,17455,4321],{"class":258},[100,17457,17458,17460,17462,17465,17467,17470,17473,17475,17477],{"class":102,"line":935},[100,17459,8125],{"class":258},[100,17461,2810],{"class":471},[100,17463,17464],{"class":110}," \"姓名： \"",[100,17466,3077],{"class":471},[100,17468,17469],{"class":258}," p.",[100,17471,17472],{"class":106},"getName",[100,17474,14632],{"class":258},[100,17476,2810],{"class":471},[100,17478,10426],{"class":258},[100,17480,17481],{"class":102,"line":945},[100,17482,570],{"emptyLinePlaceholder":569},[100,17484,17485],{"class":102,"line":950},[100,17486,17487],{"class":1836},"    \u002F\u002F年龄设置\n",[100,17489,17490,17492,17495,17497,17499],{"class":102,"line":955},[100,17491,17447],{"class":258},[100,17493,17494],{"class":106},"setAge",[100,17496,713],{"class":258},[100,17498,862],{"class":117},[100,17500,4321],{"class":258},[100,17502,17503,17505,17507,17510,17512,17514,17517,17519,17521],{"class":102,"line":972},[100,17504,8125],{"class":258},[100,17506,2810],{"class":471},[100,17508,17509],{"class":110}," \"年龄： \"",[100,17511,3077],{"class":471},[100,17513,17469],{"class":258},[100,17515,17516],{"class":106},"getAge",[100,17518,14632],{"class":258},[100,17520,2810],{"class":471},[100,17522,10426],{"class":258},[100,17524,17525],{"class":102,"line":11370},[100,17526,570],{"emptyLinePlaceholder":569},[100,17528,17529],{"class":102,"line":11375},[100,17530,17531],{"class":1836},"    \u002F\u002F情人设置\n",[100,17533,17534,17536,17539,17541,17544],{"class":102,"line":11380},[100,17535,17447],{"class":258},[100,17537,17538],{"class":106},"setLover",[100,17540,713],{"class":258},[100,17542,17543],{"class":110},"\"苍井\"",[100,17545,4321],{"class":258},[100,17547,17548,17551],{"class":102,"line":11385},[100,17549,17550],{"class":1836},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[100,17552,17553],{"class":1836},"  \u002F\u002F只写属性，不可以读取\n",[100,17555,17556],{"class":102,"line":11394},[100,17557,570],{"emptyLinePlaceholder":569},[100,17559,17560,17562,17564,17566],{"class":102,"line":11399},[100,17561,3914],{"class":106},[100,17563,713],{"class":258},[100,17565,3919],{"class":110},[100,17567,4321],{"class":258},[100,17569,17570],{"class":102,"line":11405},[100,17571,570],{"emptyLinePlaceholder":569},[100,17573,17574,17576,17578],{"class":102,"line":11426},[100,17575,5689],{"class":471},[100,17577,5692],{"class":117},[100,17579,2927],{"class":258},[100,17581,17582],{"class":102,"line":11432},[100,17583,3197],{"class":258},[305,17585,17587],{"id":17586},"_814封装案例","8.1.4封装案例",[26,17589,17590],{},[29,17591,17592,17595],{},[1921,17593,17594],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[2773,17597,17598,17601],{},[29,17599,17600],{},"求出立方体的面积和体积",[29,17602,17603],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[73,17605,17607],{"className":1770,"code":17606,"language":1772,"meta":79,"style":79},"#include\u003Ciostream>\nusing namespace std;\nclass Cube\n{\npublic:\n    \u002F\u002F输入长宽高\n    void setLwh(int l,int w,int h)\n    {\n        m_L=l;\n        m_W=w;\n        m_H=h;\n    }\n    int mianji()\n    {\n        return 2*(m_L*m_W + m_L*m_H + m_W*m_H);\n    }\n    int tiji()\n    {\n        return m_L*m_W*m_H;\n    }\n    \u002F\u002F获取长宽高\n    int getLength()\n    {\n        return m_L;\n    }\n    int getWidth()\n    {\n        return m_W;\n    }\n    int getHeight()\n    {\n        return m_H;\n    }\n    \u002F\u002F成员函数判断两个立方体是否相等\n    bool isEqual(Cube c)\n    {\n        if (c.getLength() == m_L && c.getWidth() == m_W && c.getHeight() == m_H)\n        {\n            return true;\n        }\n        else\n        {\n            return false;\n        }\n    }\n    \u002F\u002F私有属性\nprivate:\n    int m_L;\n    int m_W;\n    int m_H;\n\n};\n\u002F\u002F全局函数判断两个立方体是否相等\nbool isEqual(Cube c1,Cube c2)\n{\n    return (c1.getLength() == c2.getLength()) && (c1.getWidth() == c2.getWidth()) && (c1.getHeight() == c2.getHeight());\n}\nint main()\n{\n    Cube c1;\n    \u002F\u002F输入立方体的长宽高\n    cout\u003C\u003C\"请输入第一个立方体的长、宽、高：\"\u003C\u003Cendl;\n    int l,w,h,l1,w1,h1;\n    cin>>l>>w>>h;\n    c1.setLwh(l,w,h);\n    \u002F\u002F面积\n    cout\u003C\u003C\"立方体的表面积为：\"\u003C\u003Cc1.mianji()\u003C\u003Cendl;\n    \u002F\u002F体积\n    cout\u003C\u003C\"立方体的体积为：\"\u003C\u003Cc1.tiji()\u003C\u003Cendl;\n    cout\u003C\u003C\"请输入第二个立方体的长、宽、高：\"\u003C\u003Cendl;\n    cin>>l1>>w1>>h1;\n    Cube c2;\n    c2.setLwh(l1,w1,h1);\n    cout\u003C\u003C\"第二个立方体的表面积为：\"\u003C\u003Cc2.mianji()\u003C\u003Cendl;\n    cout\u003C\u003C\"第二个立方体的体积为：\"\u003C\u003Cc2.tiji()\u003C\u003Cendl;\n\n    \u002F\u002F判断两个立方体的表面积和体积是否相等\n    cout\u003C\u003C\"内部函数判断结果：\"\u003C\u003Cendl;\n    if (c1.isEqual(c2))\n    {\n        cout\u003C\u003C\"两个立方体相等\"\u003C\u003Cendl;\n    }\n    else\n    {\n        cout\u003C\u003C\"两个立方体不相等\"\u003C\u003Cendl;\n    }\n\n    cout\u003C\u003C\"全局函数判断结果：\"\u003C\u003Cendl;\n    if (isEqual(c1, c2))\n    {\n        cout\u003C\u003C\"两个立方体相等\"\u003C\u003Cendl;\n    }\n    else\n    {\n        cout\u003C\u003C\"两个立方体不相等\"\u003C\u003Cendl;\n    }\n}\n",[32,17608,17609,17615,17625,17632,17636,17640,17645,17675,17679,17689,17699,17709,17713,17722,17726,17762,17766,17775,17779,17795,17799,17804,17813,17817,17824,17828,17837,17841,17848,17852,17861,17865,17872,17876,17881,17898,17902,17948,17952,17961,17965,17969,17973,17982,17986,17990,17995,17999,18005,18011,18017,18021,18025,18030,18052,18056,18110,18114,18122,18126,18131,18136,18149,18156,18172,18183,18189,18212,18218,18241,18255,18275,18281,18292,18315,18337,18342,18348,18362,18375,18380,18394,18399,18405,18410,18424,18429,18434,18448,18460,18465,18478,18483,18488,18493,18506,18511],{"__ignoreMap":79},[100,17610,17611,17613],{"class":102,"line":103},[100,17612,3562],{"class":471},[100,17614,3565],{"class":110},[100,17616,17617,17619,17621,17623],{"class":102,"line":188},[100,17618,3570],{"class":471},[100,17620,3573],{"class":471},[100,17622,3576],{"class":106},[100,17624,2927],{"class":258},[100,17626,17627,17629],{"class":102,"line":199},[100,17628,16275],{"class":471},[100,17630,17631],{"class":106}," Cube\n",[100,17633,17634],{"class":102,"line":532},[100,17635,3178],{"class":258},[100,17637,17638],{"class":102,"line":577},[100,17639,16297],{"class":471},[100,17641,17642],{"class":102,"line":589},[100,17643,17644],{"class":1836},"    \u002F\u002F输入长宽高\n",[100,17646,17647,17649,17652,17654,17656,17659,17661,17663,17666,17668,17670,17673],{"class":102,"line":595},[100,17648,16490],{"class":471},[100,17650,17651],{"class":106}," setLwh",[100,17653,713],{"class":258},[100,17655,1784],{"class":471},[100,17657,17658],{"class":6812}," l",[100,17660,2145],{"class":258},[100,17662,1784],{"class":471},[100,17664,17665],{"class":6812}," w",[100,17667,2145],{"class":258},[100,17669,1784],{"class":471},[100,17671,17672],{"class":6812}," h",[100,17674,809],{"class":258},[100,17676,17677],{"class":102,"line":601},[100,17678,3641],{"class":258},[100,17680,17681,17684,17686],{"class":102,"line":606},[100,17682,17683],{"class":258},"        m_L",[100,17685,472],{"class":471},[100,17687,17688],{"class":258},"l;\n",[100,17690,17691,17694,17696],{"class":102,"line":612},[100,17692,17693],{"class":258},"        m_W",[100,17695,472],{"class":471},[100,17697,17698],{"class":258},"w;\n",[100,17700,17701,17704,17706],{"class":102,"line":618},[100,17702,17703],{"class":258},"        m_H",[100,17705,472],{"class":471},[100,17707,17708],{"class":258},"h;\n",[100,17710,17711],{"class":102,"line":623},[100,17712,3798],{"class":258},[100,17714,17715,17717,17720],{"class":102,"line":629},[100,17716,3596],{"class":471},[100,17718,17719],{"class":106}," mianji",[100,17721,3587],{"class":258},[100,17723,17724],{"class":102,"line":635},[100,17725,3641],{"class":258},[100,17727,17728,17730,17732,17734,17737,17739,17742,17744,17747,17749,17752,17754,17757,17759],{"class":102,"line":641},[100,17729,16333],{"class":471},[100,17731,16336],{"class":117},[100,17733,2222],{"class":471},[100,17735,17736],{"class":258},"(m_L",[100,17738,2222],{"class":471},[100,17740,17741],{"class":258},"m_W ",[100,17743,2248],{"class":471},[100,17745,17746],{"class":258}," m_L",[100,17748,2222],{"class":471},[100,17750,17751],{"class":258},"m_H ",[100,17753,2248],{"class":471},[100,17755,17756],{"class":258}," m_W",[100,17758,2222],{"class":471},[100,17760,17761],{"class":258},"m_H);\n",[100,17763,17764],{"class":102,"line":647},[100,17765,3798],{"class":258},[100,17767,17768,17770,17773],{"class":102,"line":653},[100,17769,3596],{"class":471},[100,17771,17772],{"class":106}," tiji",[100,17774,3587],{"class":258},[100,17776,17777],{"class":102,"line":659},[100,17778,3641],{"class":258},[100,17780,17781,17783,17785,17787,17790,17792],{"class":102,"line":665},[100,17782,16333],{"class":471},[100,17784,17746],{"class":258},[100,17786,2222],{"class":471},[100,17788,17789],{"class":258},"m_W",[100,17791,2222],{"class":471},[100,17793,17794],{"class":258},"m_H;\n",[100,17796,17797],{"class":102,"line":670},[100,17798,3798],{"class":258},[100,17800,17801],{"class":102,"line":675},[100,17802,17803],{"class":1836},"    \u002F\u002F获取长宽高\n",[100,17805,17806,17808,17811],{"class":102,"line":699},[100,17807,3596],{"class":471},[100,17809,17810],{"class":106}," getLength",[100,17812,3587],{"class":258},[100,17814,17815],{"class":102,"line":708},[100,17816,3641],{"class":258},[100,17818,17819,17821],{"class":102,"line":722},[100,17820,16333],{"class":471},[100,17822,17823],{"class":258}," m_L;\n",[100,17825,17826],{"class":102,"line":735},[100,17827,3798],{"class":258},[100,17829,17830,17832,17835],{"class":102,"line":754},[100,17831,3596],{"class":471},[100,17833,17834],{"class":106}," getWidth",[100,17836,3587],{"class":258},[100,17838,17839],{"class":102,"line":771},[100,17840,3641],{"class":258},[100,17842,17843,17845],{"class":102,"line":776},[100,17844,16333],{"class":471},[100,17846,17847],{"class":258}," m_W;\n",[100,17849,17850],{"class":102,"line":781},[100,17851,3798],{"class":258},[100,17853,17854,17856,17859],{"class":102,"line":796},[100,17855,3596],{"class":471},[100,17857,17858],{"class":106}," getHeight",[100,17860,3587],{"class":258},[100,17862,17863],{"class":102,"line":812},[100,17864,3641],{"class":258},[100,17866,17867,17869],{"class":102,"line":823},[100,17868,16333],{"class":471},[100,17870,17871],{"class":258}," m_H;\n",[100,17873,17874],{"class":102,"line":828},[100,17875,3798],{"class":258},[100,17877,17878],{"class":102,"line":840},[100,17879,17880],{"class":1836},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[100,17882,17883,17886,17889,17891,17894,17896],{"class":102,"line":845},[100,17884,17885],{"class":471},"    bool",[100,17887,17888],{"class":106}," isEqual",[100,17890,713],{"class":258},[100,17892,17893],{"class":106},"Cube",[100,17895,4451],{"class":6812},[100,17897,809],{"class":258},[100,17899,17900],{"class":102,"line":868},[100,17901,3641],{"class":258},[100,17903,17904,17906,17909,17912,17914,17916,17919,17921,17924,17927,17929,17931,17934,17936,17938,17941,17943,17945],{"class":102,"line":874},[100,17905,4106],{"class":471},[100,17907,17908],{"class":258}," (c.",[100,17910,17911],{"class":106},"getLength",[100,17913,14632],{"class":258},[100,17915,4551],{"class":471},[100,17917,17918],{"class":258}," m_L ",[100,17920,3336],{"class":471},[100,17922,17923],{"class":258}," c.",[100,17925,17926],{"class":106},"getWidth",[100,17928,14632],{"class":258},[100,17930,4551],{"class":471},[100,17932,17933],{"class":258}," m_W ",[100,17935,3336],{"class":471},[100,17937,17923],{"class":258},[100,17939,17940],{"class":106},"getHeight",[100,17942,14632],{"class":258},[100,17944,4551],{"class":471},[100,17946,17947],{"class":258}," m_H)\n",[100,17949,17950],{"class":102,"line":879},[100,17951,4119],{"class":258},[100,17953,17954,17956,17959],{"class":102,"line":889},[100,17955,17313],{"class":471},[100,17957,17958],{"class":117}," true",[100,17960,2927],{"class":258},[100,17962,17963],{"class":102,"line":894},[100,17964,4138],{"class":258},[100,17966,17967],{"class":102,"line":900},[100,17968,4179],{"class":471},[100,17970,17971],{"class":102,"line":910},[100,17972,4119],{"class":258},[100,17974,17975,17977,17980],{"class":102,"line":915},[100,17976,17313],{"class":471},[100,17978,17979],{"class":117}," false",[100,17981,2927],{"class":258},[100,17983,17984],{"class":102,"line":929},[100,17985,4138],{"class":258},[100,17987,17988],{"class":102,"line":935},[100,17989,3798],{"class":258},[100,17991,17992],{"class":102,"line":945},[100,17993,17994],{"class":1836},"    \u002F\u002F私有属性\n",[100,17996,17997],{"class":102,"line":950},[100,17998,16803],{"class":471},[100,18000,18001,18003],{"class":102,"line":955},[100,18002,3596],{"class":471},[100,18004,17823],{"class":258},[100,18006,18007,18009],{"class":102,"line":972},[100,18008,3596],{"class":471},[100,18010,17847],{"class":258},[100,18012,18013,18015],{"class":102,"line":11370},[100,18014,3596],{"class":471},[100,18016,17871],{"class":258},[100,18018,18019],{"class":102,"line":11375},[100,18020,570],{"emptyLinePlaceholder":569},[100,18022,18023],{"class":102,"line":11380},[100,18024,5594],{"class":258},[100,18026,18027],{"class":102,"line":11385},[100,18028,18029],{"class":1836},"\u002F\u002F全局函数判断两个立方体是否相等\n",[100,18031,18032,18034,18036,18038,18040,18043,18045,18047,18050],{"class":102,"line":11394},[100,18033,2987],{"class":471},[100,18035,17888],{"class":106},[100,18037,713],{"class":258},[100,18039,17893],{"class":106},[100,18041,18042],{"class":6812}," c1",[100,18044,2145],{"class":258},[100,18046,17893],{"class":106},[100,18048,18049],{"class":6812}," c2",[100,18051,809],{"class":258},[100,18053,18054],{"class":102,"line":11399},[100,18055,3178],{"class":258},[100,18057,18058,18060,18063,18065,18067,18069,18072,18074,18077,18079,18081,18083,18085,18087,18089,18091,18093,18095,18097,18099,18101,18103,18105,18107],{"class":102,"line":11405},[100,18059,5689],{"class":471},[100,18061,18062],{"class":258}," (c1.",[100,18064,17911],{"class":106},[100,18066,14632],{"class":258},[100,18068,4551],{"class":471},[100,18070,18071],{"class":258}," c2.",[100,18073,17911],{"class":106},[100,18075,18076],{"class":258},"()) ",[100,18078,3336],{"class":471},[100,18080,18062],{"class":258},[100,18082,17926],{"class":106},[100,18084,14632],{"class":258},[100,18086,4551],{"class":471},[100,18088,18071],{"class":258},[100,18090,17926],{"class":106},[100,18092,18076],{"class":258},[100,18094,3336],{"class":471},[100,18096,18062],{"class":258},[100,18098,17940],{"class":106},[100,18100,14632],{"class":258},[100,18102,4551],{"class":471},[100,18104,18071],{"class":258},[100,18106,17940],{"class":106},[100,18108,18109],{"class":258},"());\n",[100,18111,18112],{"class":102,"line":11426},[100,18113,3197],{"class":258},[100,18115,18116,18118,18120],{"class":102,"line":11432},[100,18117,1784],{"class":471},[100,18119,786],{"class":106},[100,18121,3587],{"class":258},[100,18123,18124],{"class":102,"line":11446},[100,18125,3178],{"class":258},[100,18127,18128],{"class":102,"line":11452},[100,18129,18130],{"class":258},"    Cube c1;\n",[100,18132,18133],{"class":102,"line":11479},[100,18134,18135],{"class":1836},"    \u002F\u002F输入立方体的长宽高\n",[100,18137,18138,18140,18142,18145,18147],{"class":102,"line":11488},[100,18139,3183],{"class":258},[100,18141,2810],{"class":471},[100,18143,18144],{"class":110},"\"请输入第一个立方体的长、宽、高：\"",[100,18146,2810],{"class":471},[100,18148,2832],{"class":258},[100,18150,18151,18153],{"class":102,"line":11494},[100,18152,3596],{"class":471},[100,18154,18155],{"class":258}," l,w,h,l1,w1,h1;\n",[100,18157,18158,18160,18162,18164,18166,18168,18170],{"class":102,"line":11502},[100,18159,3623],{"class":258},[100,18161,3062],{"class":471},[100,18163,2285],{"class":258},[100,18165,3062],{"class":471},[100,18167,2561],{"class":258},[100,18169,3062],{"class":471},[100,18171,17708],{"class":258},[100,18173,18174,18177,18180],{"class":102,"line":11507},[100,18175,18176],{"class":258},"    c1.",[100,18178,18179],{"class":106},"setLwh",[100,18181,18182],{"class":258},"(l,w,h);\n",[100,18184,18186],{"class":102,"line":18185},66,[100,18187,18188],{"class":1836},"    \u002F\u002F面积\n",[100,18190,18192,18194,18196,18199,18201,18203,18206,18208,18210],{"class":102,"line":18191},67,[100,18193,3183],{"class":258},[100,18195,2810],{"class":471},[100,18197,18198],{"class":110},"\"立方体的表面积为：\"",[100,18200,2810],{"class":471},[100,18202,16411],{"class":258},[100,18204,18205],{"class":106},"mianji",[100,18207,4036],{"class":258},[100,18209,2810],{"class":471},[100,18211,2832],{"class":258},[100,18213,18215],{"class":102,"line":18214},68,[100,18216,18217],{"class":1836},"    \u002F\u002F体积\n",[100,18219,18221,18223,18225,18228,18230,18232,18235,18237,18239],{"class":102,"line":18220},69,[100,18222,3183],{"class":258},[100,18224,2810],{"class":471},[100,18226,18227],{"class":110},"\"立方体的体积为：\"",[100,18229,2810],{"class":471},[100,18231,16411],{"class":258},[100,18233,18234],{"class":106},"tiji",[100,18236,4036],{"class":258},[100,18238,2810],{"class":471},[100,18240,2832],{"class":258},[100,18242,18244,18246,18248,18251,18253],{"class":102,"line":18243},70,[100,18245,3183],{"class":258},[100,18247,2810],{"class":471},[100,18249,18250],{"class":110},"\"请输入第二个立方体的长、宽、高：\"",[100,18252,2810],{"class":471},[100,18254,2832],{"class":258},[100,18256,18258,18260,18262,18265,18267,18270,18272],{"class":102,"line":18257},71,[100,18259,3623],{"class":258},[100,18261,3062],{"class":471},[100,18263,18264],{"class":258},"l1",[100,18266,3062],{"class":471},[100,18268,18269],{"class":258},"w1",[100,18271,3062],{"class":471},[100,18273,18274],{"class":258},"h1;\n",[100,18276,18278],{"class":102,"line":18277},72,[100,18279,18280],{"class":258},"    Cube c2;\n",[100,18282,18284,18287,18289],{"class":102,"line":18283},73,[100,18285,18286],{"class":258},"    c2.",[100,18288,18179],{"class":106},[100,18290,18291],{"class":258},"(l1,w1,h1);\n",[100,18293,18295,18297,18299,18302,18304,18307,18309,18311,18313],{"class":102,"line":18294},74,[100,18296,3183],{"class":258},[100,18298,2810],{"class":471},[100,18300,18301],{"class":110},"\"第二个立方体的表面积为：\"",[100,18303,2810],{"class":471},[100,18305,18306],{"class":258},"c2.",[100,18308,18205],{"class":106},[100,18310,4036],{"class":258},[100,18312,2810],{"class":471},[100,18314,2832],{"class":258},[100,18316,18318,18320,18322,18325,18327,18329,18331,18333,18335],{"class":102,"line":18317},75,[100,18319,3183],{"class":258},[100,18321,2810],{"class":471},[100,18323,18324],{"class":110},"\"第二个立方体的体积为：\"",[100,18326,2810],{"class":471},[100,18328,18306],{"class":258},[100,18330,18234],{"class":106},[100,18332,4036],{"class":258},[100,18334,2810],{"class":471},[100,18336,2832],{"class":258},[100,18338,18340],{"class":102,"line":18339},76,[100,18341,570],{"emptyLinePlaceholder":569},[100,18343,18345],{"class":102,"line":18344},77,[100,18346,18347],{"class":1836},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[100,18349,18351,18353,18355,18358,18360],{"class":102,"line":18350},78,[100,18352,3183],{"class":258},[100,18354,2810],{"class":471},[100,18356,18357],{"class":110},"\"内部函数判断结果：\"",[100,18359,2810],{"class":471},[100,18361,2832],{"class":258},[100,18363,18365,18367,18369,18372],{"class":102,"line":18364},79,[100,18366,4702],{"class":471},[100,18368,18062],{"class":258},[100,18370,18371],{"class":106},"isEqual",[100,18373,18374],{"class":258},"(c2))\n",[100,18376,18378],{"class":102,"line":18377},80,[100,18379,3641],{"class":258},[100,18381,18383,18385,18387,18390,18392],{"class":102,"line":18382},81,[100,18384,5051],{"class":258},[100,18386,2810],{"class":471},[100,18388,18389],{"class":110},"\"两个立方体相等\"",[100,18391,2810],{"class":471},[100,18393,2832],{"class":258},[100,18395,18397],{"class":102,"line":18396},82,[100,18398,3798],{"class":258},[100,18400,18402],{"class":102,"line":18401},83,[100,18403,18404],{"class":471},"    else\n",[100,18406,18408],{"class":102,"line":18407},84,[100,18409,3641],{"class":258},[100,18411,18413,18415,18417,18420,18422],{"class":102,"line":18412},85,[100,18414,5051],{"class":258},[100,18416,2810],{"class":471},[100,18418,18419],{"class":110},"\"两个立方体不相等\"",[100,18421,2810],{"class":471},[100,18423,2832],{"class":258},[100,18425,18427],{"class":102,"line":18426},86,[100,18428,3798],{"class":258},[100,18430,18432],{"class":102,"line":18431},87,[100,18433,570],{"emptyLinePlaceholder":569},[100,18435,18437,18439,18441,18444,18446],{"class":102,"line":18436},88,[100,18438,3183],{"class":258},[100,18440,2810],{"class":471},[100,18442,18443],{"class":110},"\"全局函数判断结果：\"",[100,18445,2810],{"class":471},[100,18447,2832],{"class":258},[100,18449,18451,18453,18455,18457],{"class":102,"line":18450},89,[100,18452,4702],{"class":471},[100,18454,3283],{"class":258},[100,18456,18371],{"class":106},[100,18458,18459],{"class":258},"(c1, c2))\n",[100,18461,18463],{"class":102,"line":18462},90,[100,18464,3641],{"class":258},[100,18466,18468,18470,18472,18474,18476],{"class":102,"line":18467},91,[100,18469,5051],{"class":258},[100,18471,2810],{"class":471},[100,18473,18389],{"class":110},[100,18475,2810],{"class":471},[100,18477,2832],{"class":258},[100,18479,18481],{"class":102,"line":18480},92,[100,18482,3798],{"class":258},[100,18484,18486],{"class":102,"line":18485},93,[100,18487,18404],{"class":471},[100,18489,18491],{"class":102,"line":18490},94,[100,18492,3641],{"class":258},[100,18494,18496,18498,18500,18502,18504],{"class":102,"line":18495},95,[100,18497,5051],{"class":258},[100,18499,2810],{"class":471},[100,18501,18419],{"class":110},[100,18503,2810],{"class":471},[100,18505,2832],{"class":258},[100,18507,18509],{"class":102,"line":18508},96,[100,18510,3798],{"class":258},[100,18512,18514],{"class":102,"line":18513},97,[100,18515,3197],{"class":258},[26,18517,18518],{"start":188},[29,18519,18520],{},[1921,18521,18522],{},"练习案例2：点和圆的关系",[2773,18524,18525],{},[29,18526,18527],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[73,18529,18531],{"className":1770,"code":18530,"language":1772,"meta":79,"style":79},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Ccmath>\nclass Point\n{\npublic:\n    \u002F\u002F赋值\n    void setPoint(double x, double y) { m_x = x; m_y = y; }\n    \u002F\u002F获取坐标\n    double getX() { return m_x; }\n    double getY() { return m_y; }\n\nprivate:\n    double m_x;\n    double m_y;\n};\nclass Circle\n{\npublic:\n    \u002F\u002F赋值\n    void setRadius(double r) { m_r = r; }\n    void setCenter(Point center) { m_center = center; }\n    \u002F\u002F获取属性\n    double getRadius() { return m_r; }\n    Point getCenter() { return m_center; }\n\nprivate:\n    double m_r;\n    \u002F\u002F在类中可以让另一个类作为本来的成员\n    Point m_center;\n};\nvoid isInCircle(Circle &c,Point &p)\n{\n    double dx = c.getCenter().getX() - p.getX();\n    double dy = c.getCenter().getY() - p.getY();\n    double distance = sqrt(dx * dx + dy * dy);\n    if (distance \u003C c.getRadius())\n    {\n        cout \u003C\u003C \"点在圆内\" \u003C\u003C endl;\n    }\n    else\n    {\n        cout \u003C\u003C \"点在圆外\" \u003C\u003C endl;\n    }\n}\nint main()\n{\n    \u002F\u002F实例化\n    Circle c1;\n    Point p1;\n    \u002F\u002F赋值\n    cout\u003C\u003C\"请输入圆的半径：\";\n    double r;\n    cin>>r;\n    c1.setRadius(r);\n    cout\u003C\u003C\"请输入圆心坐标：\";\n    double x, y;\n    cin>>x>>y;\n    p1.setPoint(x, y);\n    c1.setCenter(p1);\n    cout\u003C\u003C\"请输入测试点坐标：\";\n    double x1, y1;\n    cin>>x1>>y1;\n    Point p2;\n    p2.setPoint(x1, y1);\n    isInCircle(c1, p2);\n}\n",[32,18532,18533,18539,18549,18556,18563,18567,18571,18576,18610,18615,18631,18645,18649,18653,18660,18667,18671,18677,18681,18685,18689,18711,18734,18739,18753,18768,18772,18776,18782,18787,18792,18796,18822,18826,18856,18884,18912,18929,18933,18946,18950,18954,18958,18971,18975,18979,18987,18991,18995,18999,19004,19008,19019,19026,19035,19045,19056,19063,19076,19087,19097,19108,19115,19129,19134,19144,19152],{"__ignoreMap":79},[100,18534,18535,18537],{"class":102,"line":103},[100,18536,3562],{"class":471},[100,18538,3565],{"class":110},[100,18540,18541,18543,18545,18547],{"class":102,"line":188},[100,18542,3570],{"class":471},[100,18544,3573],{"class":471},[100,18546,3576],{"class":106},[100,18548,2927],{"class":258},[100,18550,18551,18553],{"class":102,"line":199},[100,18552,3562],{"class":471},[100,18554,18555],{"class":110},"\u003Ccmath>\n",[100,18557,18558,18560],{"class":102,"line":532},[100,18559,16275],{"class":471},[100,18561,18562],{"class":106}," Point\n",[100,18564,18565],{"class":102,"line":577},[100,18566,3178],{"class":258},[100,18568,18569],{"class":102,"line":589},[100,18570,16297],{"class":471},[100,18572,18573],{"class":102,"line":595},[100,18574,18575],{"class":1836},"    \u002F\u002F赋值\n",[100,18577,18578,18580,18583,18585,18587,18590,18592,18594,18597,18600,18602,18605,18607],{"class":102,"line":601},[100,18579,16490],{"class":471},[100,18581,18582],{"class":106}," setPoint",[100,18584,713],{"class":258},[100,18586,15618],{"class":471},[100,18588,18589],{"class":6812}," x",[100,18591,14017],{"class":258},[100,18593,15618],{"class":471},[100,18595,18596],{"class":6812}," y",[100,18598,18599],{"class":258},") { m_x ",[100,18601,472],{"class":471},[100,18603,18604],{"class":258}," x; m_y ",[100,18606,472],{"class":471},[100,18608,18609],{"class":258}," y; }\n",[100,18611,18612],{"class":102,"line":606},[100,18613,18614],{"class":1836},"    \u002F\u002F获取坐标\n",[100,18616,18617,18619,18622,18625,18628],{"class":102,"line":612},[100,18618,16319],{"class":471},[100,18620,18621],{"class":106}," getX",[100,18623,18624],{"class":258},"() { ",[100,18626,18627],{"class":471},"return",[100,18629,18630],{"class":258}," m_x; }\n",[100,18632,18633,18635,18638,18640,18642],{"class":102,"line":618},[100,18634,16319],{"class":471},[100,18636,18637],{"class":106}," getY",[100,18639,18624],{"class":258},[100,18641,18627],{"class":471},[100,18643,18644],{"class":258}," m_y; }\n",[100,18646,18647],{"class":102,"line":623},[100,18648,570],{"emptyLinePlaceholder":569},[100,18650,18651],{"class":102,"line":629},[100,18652,16803],{"class":471},[100,18654,18655,18657],{"class":102,"line":635},[100,18656,16319],{"class":471},[100,18658,18659],{"class":258}," m_x;\n",[100,18661,18662,18664],{"class":102,"line":641},[100,18663,16319],{"class":471},[100,18665,18666],{"class":258}," m_y;\n",[100,18668,18669],{"class":102,"line":647},[100,18670,5594],{"class":258},[100,18672,18673,18675],{"class":102,"line":653},[100,18674,16275],{"class":471},[100,18676,16278],{"class":106},[100,18678,18679],{"class":102,"line":659},[100,18680,3178],{"class":258},[100,18682,18683],{"class":102,"line":665},[100,18684,16297],{"class":471},[100,18686,18687],{"class":102,"line":670},[100,18688,18575],{"class":1836},[100,18690,18691,18693,18696,18698,18700,18703,18706,18708],{"class":102,"line":675},[100,18692,16490],{"class":471},[100,18694,18695],{"class":106}," setRadius",[100,18697,713],{"class":258},[100,18699,15618],{"class":471},[100,18701,18702],{"class":6812}," r",[100,18704,18705],{"class":258},") { m_r ",[100,18707,472],{"class":471},[100,18709,18710],{"class":258}," r; }\n",[100,18712,18713,18715,18718,18720,18723,18726,18729,18731],{"class":102,"line":699},[100,18714,16490],{"class":471},[100,18716,18717],{"class":106}," setCenter",[100,18719,713],{"class":258},[100,18721,18722],{"class":106},"Point",[100,18724,18725],{"class":6812}," center",[100,18727,18728],{"class":258},") { m_center ",[100,18730,472],{"class":471},[100,18732,18733],{"class":258}," center; }\n",[100,18735,18736],{"class":102,"line":708},[100,18737,18738],{"class":1836},"    \u002F\u002F获取属性\n",[100,18740,18741,18743,18746,18748,18750],{"class":102,"line":722},[100,18742,16319],{"class":471},[100,18744,18745],{"class":106}," getRadius",[100,18747,18624],{"class":258},[100,18749,18627],{"class":471},[100,18751,18752],{"class":258}," m_r; }\n",[100,18754,18755,18758,18761,18763,18765],{"class":102,"line":735},[100,18756,18757],{"class":106},"    Point",[100,18759,18760],{"class":106}," getCenter",[100,18762,18624],{"class":258},[100,18764,18627],{"class":471},[100,18766,18767],{"class":258}," m_center; }\n",[100,18769,18770],{"class":102,"line":754},[100,18771,570],{"emptyLinePlaceholder":569},[100,18773,18774],{"class":102,"line":771},[100,18775,16803],{"class":471},[100,18777,18778,18780],{"class":102,"line":776},[100,18779,16319],{"class":471},[100,18781,16309],{"class":258},[100,18783,18784],{"class":102,"line":781},[100,18785,18786],{"class":1836},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[100,18788,18789],{"class":102,"line":796},[100,18790,18791],{"class":258},"    Point m_center;\n",[100,18793,18794],{"class":102,"line":812},[100,18795,5594],{"class":258},[100,18797,18798,18800,18803,18805,18808,18810,18812,18814,18816,18818,18820],{"class":102,"line":823},[100,18799,6960],{"class":471},[100,18801,18802],{"class":106}," isInCircle",[100,18804,713],{"class":258},[100,18806,18807],{"class":106},"Circle",[100,18809,12166],{"class":471},[100,18811,2056],{"class":6812},[100,18813,2145],{"class":258},[100,18815,18722],{"class":106},[100,18817,12166],{"class":471},[100,18819,19],{"class":6812},[100,18821,809],{"class":258},[100,18823,18824],{"class":102,"line":828},[100,18825,3178],{"class":258},[100,18827,18828,18830,18833,18835,18837,18840,18843,18846,18848,18850,18852,18854],{"class":102,"line":840},[100,18829,16319],{"class":471},[100,18831,18832],{"class":258}," dx ",[100,18834,472],{"class":471},[100,18836,17923],{"class":258},[100,18838,18839],{"class":106},"getCenter",[100,18841,18842],{"class":258},"().",[100,18844,18845],{"class":106},"getX",[100,18847,14632],{"class":258},[100,18849,2299],{"class":471},[100,18851,17469],{"class":258},[100,18853,18845],{"class":106},[100,18855,7232],{"class":258},[100,18857,18858,18860,18863,18865,18867,18869,18871,18874,18876,18878,18880,18882],{"class":102,"line":845},[100,18859,16319],{"class":471},[100,18861,18862],{"class":258}," dy ",[100,18864,472],{"class":471},[100,18866,17923],{"class":258},[100,18868,18839],{"class":106},[100,18870,18842],{"class":258},[100,18872,18873],{"class":106},"getY",[100,18875,14632],{"class":258},[100,18877,2299],{"class":471},[100,18879,17469],{"class":258},[100,18881,18873],{"class":106},[100,18883,7232],{"class":258},[100,18885,18886,18888,18891,18893,18896,18899,18901,18903,18905,18907,18909],{"class":102,"line":868},[100,18887,16319],{"class":471},[100,18889,18890],{"class":258}," distance ",[100,18892,472],{"class":471},[100,18894,18895],{"class":106}," sqrt",[100,18897,18898],{"class":258},"(dx ",[100,18900,2222],{"class":471},[100,18902,18832],{"class":258},[100,18904,2248],{"class":471},[100,18906,18862],{"class":258},[100,18908,2222],{"class":471},[100,18910,18911],{"class":258}," dy);\n",[100,18913,18914,18916,18919,18921,18923,18926],{"class":102,"line":874},[100,18915,4702],{"class":471},[100,18917,18918],{"class":258}," (distance ",[100,18920,2676],{"class":471},[100,18922,17923],{"class":258},[100,18924,18925],{"class":106},"getRadius",[100,18927,18928],{"class":258},"())\n",[100,18930,18931],{"class":102,"line":879},[100,18932,3641],{"class":258},[100,18934,18935,18937,18939,18942,18944],{"class":102,"line":889},[100,18936,11254],{"class":258},[100,18938,2810],{"class":471},[100,18940,18941],{"class":110}," \"点在圆内\"",[100,18943,3077],{"class":471},[100,18945,10426],{"class":258},[100,18947,18948],{"class":102,"line":894},[100,18949,3798],{"class":258},[100,18951,18952],{"class":102,"line":900},[100,18953,18404],{"class":471},[100,18955,18956],{"class":102,"line":910},[100,18957,3641],{"class":258},[100,18959,18960,18962,18964,18967,18969],{"class":102,"line":915},[100,18961,11254],{"class":258},[100,18963,2810],{"class":471},[100,18965,18966],{"class":110}," \"点在圆外\"",[100,18968,3077],{"class":471},[100,18970,10426],{"class":258},[100,18972,18973],{"class":102,"line":929},[100,18974,3798],{"class":258},[100,18976,18977],{"class":102,"line":935},[100,18978,3197],{"class":258},[100,18980,18981,18983,18985],{"class":102,"line":945},[100,18982,1784],{"class":471},[100,18984,786],{"class":106},[100,18986,3587],{"class":258},[100,18988,18989],{"class":102,"line":950},[100,18990,3178],{"class":258},[100,18992,18993],{"class":102,"line":955},[100,18994,16634],{"class":1836},[100,18996,18997],{"class":102,"line":972},[100,18998,16381],{"class":258},[100,19000,19001],{"class":102,"line":11370},[100,19002,19003],{"class":258},"    Point p1;\n",[100,19005,19006],{"class":102,"line":11375},[100,19007,18575],{"class":1836},[100,19009,19010,19012,19014,19017],{"class":102,"line":11380},[100,19011,3183],{"class":258},[100,19013,2810],{"class":471},[100,19015,19016],{"class":110},"\"请输入圆的半径：\"",[100,19018,2927],{"class":258},[100,19020,19021,19023],{"class":102,"line":11385},[100,19022,16319],{"class":471},[100,19024,19025],{"class":258}," r;\n",[100,19027,19028,19030,19032],{"class":102,"line":11394},[100,19029,3623],{"class":258},[100,19031,3062],{"class":471},[100,19033,19034],{"class":258},"r;\n",[100,19036,19037,19039,19042],{"class":102,"line":11399},[100,19038,18176],{"class":258},[100,19040,19041],{"class":106},"setRadius",[100,19043,19044],{"class":258},"(r);\n",[100,19046,19047,19049,19051,19054],{"class":102,"line":11405},[100,19048,3183],{"class":258},[100,19050,2810],{"class":471},[100,19052,19053],{"class":110},"\"请输入圆心坐标：\"",[100,19055,2927],{"class":258},[100,19057,19058,19060],{"class":102,"line":11426},[100,19059,16319],{"class":471},[100,19061,19062],{"class":258}," x, y;\n",[100,19064,19065,19067,19069,19071,19073],{"class":102,"line":11432},[100,19066,3623],{"class":258},[100,19068,3062],{"class":471},[100,19070,2586],{"class":258},[100,19072,3062],{"class":471},[100,19074,19075],{"class":258},"y;\n",[100,19077,19078,19081,19084],{"class":102,"line":11446},[100,19079,19080],{"class":258},"    p1.",[100,19082,19083],{"class":106},"setPoint",[100,19085,19086],{"class":258},"(x, y);\n",[100,19088,19089,19091,19094],{"class":102,"line":11452},[100,19090,18176],{"class":258},[100,19092,19093],{"class":106},"setCenter",[100,19095,19096],{"class":258},"(p1);\n",[100,19098,19099,19101,19103,19106],{"class":102,"line":11479},[100,19100,3183],{"class":258},[100,19102,2810],{"class":471},[100,19104,19105],{"class":110},"\"请输入测试点坐标：\"",[100,19107,2927],{"class":258},[100,19109,19110,19112],{"class":102,"line":11488},[100,19111,16319],{"class":471},[100,19113,19114],{"class":258}," x1, y1;\n",[100,19116,19117,19119,19121,19124,19126],{"class":102,"line":11494},[100,19118,3623],{"class":258},[100,19120,3062],{"class":471},[100,19122,19123],{"class":258},"x1",[100,19125,3062],{"class":471},[100,19127,19128],{"class":258},"y1;\n",[100,19130,19131],{"class":102,"line":11502},[100,19132,19133],{"class":258},"    Point p2;\n",[100,19135,19136,19139,19141],{"class":102,"line":11507},[100,19137,19138],{"class":258},"    p2.",[100,19140,19083],{"class":106},[100,19142,19143],{"class":258},"(x1, y1);\n",[100,19145,19146,19149],{"class":102,"line":18185},[100,19147,19148],{"class":106},"    isInCircle",[100,19150,19151],{"class":258},"(c1, p2);\n",[100,19153,19154],{"class":102,"line":18191},[100,19155,3197],{"class":258},[19,19157,19158],{},"在类中可以让另一个类作为本来的成员",[19,19160,19161],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,19163,19164],{},"创建point.h",[73,19166,19168],{"className":1770,"code":19167,"language":1772,"meta":79,"style":79},"#pragma once \u002F\u002F防止头文件重复包含\n#include\u003Ciostream>\nusing namespace std;\nclass Point\n{\n\u002F\u002F做好声明与变量定义就可以\npublic:\n    \u002F\u002F赋值\n    void setPoint(double x, double y);\n    \u002F\u002F获取坐标\n    double getX();\n    double getY();\n\nprivate:\n    double m_x;\n    double m_y;\n};\n",[32,19169,19170,19181,19187,19197,19203,19207,19212,19216,19220,19240,19244,19252,19260,19264,19268,19274,19280],{"__ignoreMap":79},[100,19171,19172,19175,19178],{"class":102,"line":103},[100,19173,19174],{"class":471},"#pragma",[100,19176,19177],{"class":106}," once",[100,19179,19180],{"class":1836}," \u002F\u002F防止头文件重复包含\n",[100,19182,19183,19185],{"class":102,"line":188},[100,19184,3562],{"class":471},[100,19186,3565],{"class":110},[100,19188,19189,19191,19193,19195],{"class":102,"line":199},[100,19190,3570],{"class":471},[100,19192,3573],{"class":471},[100,19194,3576],{"class":106},[100,19196,2927],{"class":258},[100,19198,19199,19201],{"class":102,"line":532},[100,19200,16275],{"class":471},[100,19202,18562],{"class":106},[100,19204,19205],{"class":102,"line":577},[100,19206,3178],{"class":258},[100,19208,19209],{"class":102,"line":589},[100,19210,19211],{"class":1836},"\u002F\u002F做好声明与变量定义就可以\n",[100,19213,19214],{"class":102,"line":595},[100,19215,16297],{"class":471},[100,19217,19218],{"class":102,"line":601},[100,19219,18575],{"class":1836},[100,19221,19222,19224,19226,19228,19230,19232,19234,19236,19238],{"class":102,"line":606},[100,19223,16490],{"class":471},[100,19225,18582],{"class":106},[100,19227,713],{"class":258},[100,19229,15618],{"class":471},[100,19231,18589],{"class":6812},[100,19233,14017],{"class":258},[100,19235,15618],{"class":471},[100,19237,18596],{"class":6812},[100,19239,4321],{"class":258},[100,19241,19242],{"class":102,"line":612},[100,19243,18614],{"class":1836},[100,19245,19246,19248,19250],{"class":102,"line":618},[100,19247,16319],{"class":471},[100,19249,18621],{"class":106},[100,19251,7232],{"class":258},[100,19253,19254,19256,19258],{"class":102,"line":623},[100,19255,16319],{"class":471},[100,19257,18637],{"class":106},[100,19259,7232],{"class":258},[100,19261,19262],{"class":102,"line":629},[100,19263,570],{"emptyLinePlaceholder":569},[100,19265,19266],{"class":102,"line":635},[100,19267,16803],{"class":471},[100,19269,19270,19272],{"class":102,"line":641},[100,19271,16319],{"class":471},[100,19273,18659],{"class":258},[100,19275,19276,19278],{"class":102,"line":647},[100,19277,16319],{"class":471},[100,19279,18666],{"class":258},[100,19281,19282],{"class":102,"line":653},[100,19283,5594],{"class":258},[19,19285,19286],{},"创建point.cpp",[73,19288,19290],{"className":1770,"code":19289,"language":1772,"meta":79,"style":79},"#include\u003Cpoint.h>\n\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n    void Point::setPoint(double x, double y) { m_x = x; m_y = y; }\n    \u002F\u002F获取坐标\n    double Point::getX() { return m_x; }\n    double Point::getY() { return m_y; }\n",[32,19291,19292,19299,19304,19338,19342,19358],{"__ignoreMap":79},[100,19293,19294,19296],{"class":102,"line":103},[100,19295,3562],{"class":471},[100,19297,19298],{"class":110},"\u003Cpoint.h>\n",[100,19300,19301],{"class":102,"line":188},[100,19302,19303],{"class":1836},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[100,19305,19306,19308,19311,19314,19316,19318,19320,19322,19324,19326,19328,19330,19332,19334,19336],{"class":102,"line":199},[100,19307,16490],{"class":471},[100,19309,19310],{"class":106}," Point",[100,19312,19313],{"class":258},"::",[100,19315,19083],{"class":106},[100,19317,713],{"class":258},[100,19319,15618],{"class":471},[100,19321,18589],{"class":6812},[100,19323,14017],{"class":258},[100,19325,15618],{"class":471},[100,19327,18596],{"class":6812},[100,19329,18599],{"class":258},[100,19331,472],{"class":471},[100,19333,18604],{"class":258},[100,19335,472],{"class":471},[100,19337,18609],{"class":258},[100,19339,19340],{"class":102,"line":532},[100,19341,18614],{"class":1836},[100,19343,19344,19346,19348,19350,19352,19354,19356],{"class":102,"line":577},[100,19345,16319],{"class":471},[100,19347,19310],{"class":106},[100,19349,19313],{"class":258},[100,19351,18845],{"class":106},[100,19353,18624],{"class":258},[100,19355,18627],{"class":471},[100,19357,18630],{"class":258},[100,19359,19360,19362,19364,19366,19368,19370,19372],{"class":102,"line":589},[100,19361,16319],{"class":471},[100,19363,19310],{"class":106},[100,19365,19313],{"class":258},[100,19367,18873],{"class":106},[100,19369,18624],{"class":258},[100,19371,18627],{"class":471},[100,19373,18644],{"class":258},[19,19375,19376],{},"创建circle.h",[73,19378,19380],{"className":1770,"code":19379,"language":1772,"meta":79,"style":79},"#pragma once\n#include\u003Ciostream>\nusing namespace std;\n#include\u003Cpoint.h>\nclass Circle\n{\npublic:\n    \u002F\u002F赋值\n    void setRadius(double r);\n    void setCenter(Point center);\n    \u002F\u002F获取属性\n    double getRadius();\n    Point getCenter();\n\nprivate:\n    double m_r;\n    \u002F\u002F在类中可以让另一个类作为本来的成员\n    Point m_center;\n};\n",[32,19381,19382,19389,19395,19405,19411,19417,19421,19425,19429,19443,19457,19461,19469,19477,19481,19485,19491,19495,19499],{"__ignoreMap":79},[100,19383,19384,19386],{"class":102,"line":103},[100,19385,19174],{"class":471},[100,19387,19388],{"class":106}," once\n",[100,19390,19391,19393],{"class":102,"line":188},[100,19392,3562],{"class":471},[100,19394,3565],{"class":110},[100,19396,19397,19399,19401,19403],{"class":102,"line":199},[100,19398,3570],{"class":471},[100,19400,3573],{"class":471},[100,19402,3576],{"class":106},[100,19404,2927],{"class":258},[100,19406,19407,19409],{"class":102,"line":532},[100,19408,3562],{"class":471},[100,19410,19298],{"class":110},[100,19412,19413,19415],{"class":102,"line":577},[100,19414,16275],{"class":471},[100,19416,16278],{"class":106},[100,19418,19419],{"class":102,"line":589},[100,19420,3178],{"class":258},[100,19422,19423],{"class":102,"line":595},[100,19424,16297],{"class":471},[100,19426,19427],{"class":102,"line":601},[100,19428,18575],{"class":1836},[100,19430,19431,19433,19435,19437,19439,19441],{"class":102,"line":606},[100,19432,16490],{"class":471},[100,19434,18695],{"class":106},[100,19436,713],{"class":258},[100,19438,15618],{"class":471},[100,19440,18702],{"class":6812},[100,19442,4321],{"class":258},[100,19444,19445,19447,19449,19451,19453,19455],{"class":102,"line":612},[100,19446,16490],{"class":471},[100,19448,18717],{"class":106},[100,19450,713],{"class":258},[100,19452,18722],{"class":106},[100,19454,18725],{"class":6812},[100,19456,4321],{"class":258},[100,19458,19459],{"class":102,"line":618},[100,19460,18738],{"class":1836},[100,19462,19463,19465,19467],{"class":102,"line":623},[100,19464,16319],{"class":471},[100,19466,18745],{"class":106},[100,19468,7232],{"class":258},[100,19470,19471,19473,19475],{"class":102,"line":629},[100,19472,18757],{"class":106},[100,19474,18760],{"class":106},[100,19476,7232],{"class":258},[100,19478,19479],{"class":102,"line":635},[100,19480,570],{"emptyLinePlaceholder":569},[100,19482,19483],{"class":102,"line":641},[100,19484,16803],{"class":471},[100,19486,19487,19489],{"class":102,"line":647},[100,19488,16319],{"class":471},[100,19490,16309],{"class":258},[100,19492,19493],{"class":102,"line":653},[100,19494,18786],{"class":1836},[100,19496,19497],{"class":102,"line":659},[100,19498,18791],{"class":258},[100,19500,19501],{"class":102,"line":665},[100,19502,5594],{"class":258},[19,19504,19505],{},"创建circle.cpp",[73,19507,19509],{"className":1770,"code":19508,"language":1772,"meta":79,"style":79},"#include\u003Ccircle.h>\nvoid Circle::setRadius(double r) { m_r = r; }\nvoid Circle::setCenter(Point center) { m_center = center; }\n\u002F\u002F获取属性\ndouble Circle::getRadius() { return m_r; }\nPoint Circle::getCenter() { return m_center; }\n",[32,19510,19511,19518,19541,19563,19568,19584],{"__ignoreMap":79},[100,19512,19513,19515],{"class":102,"line":103},[100,19514,3562],{"class":471},[100,19516,19517],{"class":110},"\u003Ccircle.h>\n",[100,19519,19520,19522,19525,19527,19529,19531,19533,19535,19537,19539],{"class":102,"line":188},[100,19521,6960],{"class":471},[100,19523,19524],{"class":106}," Circle",[100,19526,19313],{"class":258},[100,19528,19041],{"class":106},[100,19530,713],{"class":258},[100,19532,15618],{"class":471},[100,19534,18702],{"class":6812},[100,19536,18705],{"class":258},[100,19538,472],{"class":471},[100,19540,18710],{"class":258},[100,19542,19543,19545,19547,19549,19551,19553,19555,19557,19559,19561],{"class":102,"line":199},[100,19544,6960],{"class":471},[100,19546,19524],{"class":106},[100,19548,19313],{"class":258},[100,19550,19093],{"class":106},[100,19552,713],{"class":258},[100,19554,18722],{"class":106},[100,19556,18725],{"class":6812},[100,19558,18728],{"class":258},[100,19560,472],{"class":471},[100,19562,18733],{"class":258},[100,19564,19565],{"class":102,"line":532},[100,19566,19567],{"class":1836},"\u002F\u002F获取属性\n",[100,19569,19570,19572,19574,19576,19578,19580,19582],{"class":102,"line":577},[100,19571,15618],{"class":471},[100,19573,19524],{"class":106},[100,19575,19313],{"class":258},[100,19577,18925],{"class":106},[100,19579,18624],{"class":258},[100,19581,18627],{"class":471},[100,19583,18752],{"class":258},[100,19585,19586,19588,19590,19592,19594,19596,19598],{"class":102,"line":589},[100,19587,18722],{"class":106},[100,19589,19524],{"class":106},[100,19591,19313],{"class":258},[100,19593,18839],{"class":106},[100,19595,18624],{"class":258},[100,19597,18627],{"class":471},[100,19599,18767],{"class":258},[19,19601,19602],{},"使用封装的类",[73,19604,19606],{"className":1770,"code":19605,"language":1772,"meta":79,"style":79},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Ccircle.h>\n#include\u003Cpoint.h>\nvoid isInCircle(Circle &c,Point &p)\n{\n    double dx = c.getCenter().getX() - p.getX();\n    double dy = c.getCenter().getY() - p.getY();\n    double distance = sqrt(dx * dx + dy * dy);\n    if (distance \u003C c.getRadius())\n    {\n        cout \u003C\u003C \"点在圆内\" \u003C\u003C endl;\n    }\n    else\n    {\n        cout \u003C\u003C \"点在圆外\" \u003C\u003C endl;\n    }\n}\nint main()\n{\n    \u002F\u002F实例化\n    Circle c1;\n    Point p1;\n    \u002F\u002F赋值\n    cout\u003C\u003C\"请输入圆的半径：\";\n    double r;\n    cin>>r;\n    c1.setRadius(r);\n    cout\u003C\u003C\"请输入圆心坐标：\";\n    double x, y;\n    cin>>x>>y;\n    p1.setPoint(x, y);\n    c1.setCenter(p1);\n    cout\u003C\u003C\"请输入测试点坐标：\";\n    double x1, y1;\n    cin>>x1>>y1;\n    Point p2;\n    p2.setPoint(x1, y1);\n    isInCircle(c1, p2);\n}\n",[32,19607,19608,19614,19624,19630,19636,19660,19664,19690,19716,19740,19754,19758,19770,19774,19778,19782,19794,19798,19802,19810,19814,19818,19822,19826,19830,19840,19846,19854,19862,19872,19878,19890,19898,19906,19916,19922,19934,19938,19946,19952],{"__ignoreMap":79},[100,19609,19610,19612],{"class":102,"line":103},[100,19611,3562],{"class":471},[100,19613,3565],{"class":110},[100,19615,19616,19618,19620,19622],{"class":102,"line":188},[100,19617,3570],{"class":471},[100,19619,3573],{"class":471},[100,19621,3576],{"class":106},[100,19623,2927],{"class":258},[100,19625,19626,19628],{"class":102,"line":199},[100,19627,3562],{"class":471},[100,19629,19517],{"class":110},[100,19631,19632,19634],{"class":102,"line":532},[100,19633,3562],{"class":471},[100,19635,19298],{"class":110},[100,19637,19638,19640,19642,19644,19646,19648,19650,19652,19654,19656,19658],{"class":102,"line":577},[100,19639,6960],{"class":471},[100,19641,18802],{"class":106},[100,19643,713],{"class":258},[100,19645,18807],{"class":106},[100,19647,12166],{"class":471},[100,19649,2056],{"class":6812},[100,19651,2145],{"class":258},[100,19653,18722],{"class":106},[100,19655,12166],{"class":471},[100,19657,19],{"class":6812},[100,19659,809],{"class":258},[100,19661,19662],{"class":102,"line":589},[100,19663,3178],{"class":258},[100,19665,19666,19668,19670,19672,19674,19676,19678,19680,19682,19684,19686,19688],{"class":102,"line":595},[100,19667,16319],{"class":471},[100,19669,18832],{"class":258},[100,19671,472],{"class":471},[100,19673,17923],{"class":258},[100,19675,18839],{"class":106},[100,19677,18842],{"class":258},[100,19679,18845],{"class":106},[100,19681,14632],{"class":258},[100,19683,2299],{"class":471},[100,19685,17469],{"class":258},[100,19687,18845],{"class":106},[100,19689,7232],{"class":258},[100,19691,19692,19694,19696,19698,19700,19702,19704,19706,19708,19710,19712,19714],{"class":102,"line":601},[100,19693,16319],{"class":471},[100,19695,18862],{"class":258},[100,19697,472],{"class":471},[100,19699,17923],{"class":258},[100,19701,18839],{"class":106},[100,19703,18842],{"class":258},[100,19705,18873],{"class":106},[100,19707,14632],{"class":258},[100,19709,2299],{"class":471},[100,19711,17469],{"class":258},[100,19713,18873],{"class":106},[100,19715,7232],{"class":258},[100,19717,19718,19720,19722,19724,19726,19728,19730,19732,19734,19736,19738],{"class":102,"line":606},[100,19719,16319],{"class":471},[100,19721,18890],{"class":258},[100,19723,472],{"class":471},[100,19725,18895],{"class":106},[100,19727,18898],{"class":258},[100,19729,2222],{"class":471},[100,19731,18832],{"class":258},[100,19733,2248],{"class":471},[100,19735,18862],{"class":258},[100,19737,2222],{"class":471},[100,19739,18911],{"class":258},[100,19741,19742,19744,19746,19748,19750,19752],{"class":102,"line":612},[100,19743,4702],{"class":471},[100,19745,18918],{"class":258},[100,19747,2676],{"class":471},[100,19749,17923],{"class":258},[100,19751,18925],{"class":106},[100,19753,18928],{"class":258},[100,19755,19756],{"class":102,"line":618},[100,19757,3641],{"class":258},[100,19759,19760,19762,19764,19766,19768],{"class":102,"line":623},[100,19761,11254],{"class":258},[100,19763,2810],{"class":471},[100,19765,18941],{"class":110},[100,19767,3077],{"class":471},[100,19769,10426],{"class":258},[100,19771,19772],{"class":102,"line":629},[100,19773,3798],{"class":258},[100,19775,19776],{"class":102,"line":635},[100,19777,18404],{"class":471},[100,19779,19780],{"class":102,"line":641},[100,19781,3641],{"class":258},[100,19783,19784,19786,19788,19790,19792],{"class":102,"line":647},[100,19785,11254],{"class":258},[100,19787,2810],{"class":471},[100,19789,18966],{"class":110},[100,19791,3077],{"class":471},[100,19793,10426],{"class":258},[100,19795,19796],{"class":102,"line":653},[100,19797,3798],{"class":258},[100,19799,19800],{"class":102,"line":659},[100,19801,3197],{"class":258},[100,19803,19804,19806,19808],{"class":102,"line":665},[100,19805,1784],{"class":471},[100,19807,786],{"class":106},[100,19809,3587],{"class":258},[100,19811,19812],{"class":102,"line":670},[100,19813,3178],{"class":258},[100,19815,19816],{"class":102,"line":675},[100,19817,16634],{"class":1836},[100,19819,19820],{"class":102,"line":699},[100,19821,16381],{"class":258},[100,19823,19824],{"class":102,"line":708},[100,19825,19003],{"class":258},[100,19827,19828],{"class":102,"line":722},[100,19829,18575],{"class":1836},[100,19831,19832,19834,19836,19838],{"class":102,"line":735},[100,19833,3183],{"class":258},[100,19835,2810],{"class":471},[100,19837,19016],{"class":110},[100,19839,2927],{"class":258},[100,19841,19842,19844],{"class":102,"line":754},[100,19843,16319],{"class":471},[100,19845,19025],{"class":258},[100,19847,19848,19850,19852],{"class":102,"line":771},[100,19849,3623],{"class":258},[100,19851,3062],{"class":471},[100,19853,19034],{"class":258},[100,19855,19856,19858,19860],{"class":102,"line":776},[100,19857,18176],{"class":258},[100,19859,19041],{"class":106},[100,19861,19044],{"class":258},[100,19863,19864,19866,19868,19870],{"class":102,"line":781},[100,19865,3183],{"class":258},[100,19867,2810],{"class":471},[100,19869,19053],{"class":110},[100,19871,2927],{"class":258},[100,19873,19874,19876],{"class":102,"line":796},[100,19875,16319],{"class":471},[100,19877,19062],{"class":258},[100,19879,19880,19882,19884,19886,19888],{"class":102,"line":812},[100,19881,3623],{"class":258},[100,19883,3062],{"class":471},[100,19885,2586],{"class":258},[100,19887,3062],{"class":471},[100,19889,19075],{"class":258},[100,19891,19892,19894,19896],{"class":102,"line":823},[100,19893,19080],{"class":258},[100,19895,19083],{"class":106},[100,19897,19086],{"class":258},[100,19899,19900,19902,19904],{"class":102,"line":828},[100,19901,18176],{"class":258},[100,19903,19093],{"class":106},[100,19905,19096],{"class":258},[100,19907,19908,19910,19912,19914],{"class":102,"line":840},[100,19909,3183],{"class":258},[100,19911,2810],{"class":471},[100,19913,19105],{"class":110},[100,19915,2927],{"class":258},[100,19917,19918,19920],{"class":102,"line":845},[100,19919,16319],{"class":471},[100,19921,19114],{"class":258},[100,19923,19924,19926,19928,19930,19932],{"class":102,"line":868},[100,19925,3623],{"class":258},[100,19927,3062],{"class":471},[100,19929,19123],{"class":258},[100,19931,3062],{"class":471},[100,19933,19128],{"class":258},[100,19935,19936],{"class":102,"line":874},[100,19937,19133],{"class":258},[100,19939,19940,19942,19944],{"class":102,"line":879},[100,19941,19138],{"class":258},[100,19943,19083],{"class":106},[100,19945,19143],{"class":258},[100,19947,19948,19950],{"class":102,"line":889},[100,19949,19148],{"class":106},[100,19951,19151],{"class":258},[100,19953,19954],{"class":102,"line":894},[100,19955,3197],{"class":258},[14,19957,19959],{"id":19958},"_82对象的初始化清理","8.2对象的初始化清理",[2773,19961,19962,19965],{},[29,19963,19964],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[29,19966,19967],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[305,19969,19971],{"id":19970},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,19973,19974,19975,19978],{},"对象的",[1921,19976,19977],{},"初始化和清理","也是两个非常重要的安全问题",[19,19980,19981],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,19983,19984],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,19986,19987,19988,19991,19992,19995],{},"c++利用了",[1921,19989,19990],{},"构造函数","和",[1921,19993,19994],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,19997,19998,19999],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[1921,20000,20001],{},"我们不提供构造和析构，编译器会提供",[19,20003,20004],{},[1921,20005,20006],{},"编译器提供的构造函数和析构函数是空实现。",[2773,20008,20009,20012],{},[29,20010,20011],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[29,20013,20014,20015,20018],{},"析构函数：主要作用在于对象",[1921,20016,20017],{},"销毁前","系统自动调用，执行一些清理工作。",[19,20020,20021,20024],{},[1921,20022,20023],{},"构造函数语法：",[32,20025,20026],{},"类名(){}",[26,20028,20029,20032,20035,20038,20041],{},[29,20030,20031],{},"构造函数，没有返回值也不写void",[29,20033,20034],{},"函数名称与类名相同",[29,20036,20037],{},"构造函数可以有参数，因此可以发生重载",[29,20039,20040],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[29,20042,20043,20044,2196],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[32,20045,20046],{},"Person(){}",[19,20048,20049,15376,20052],{},[1921,20050,20051],{},"析构函数语法：",[32,20053,20054],{},"~类名(){}",[26,20056,20057,20060,20063,20069],{},[29,20058,20059],{},"析构函数，没有返回值也不写void",[29,20061,20062],{},"函数名称与类名相同,在名称前加上符号  ~",[29,20064,20065,20066],{},"析构函数不可以有参数，因此",[1921,20067,20068],{},"不可以发生重载",[29,20070,20071],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[73,20073,20075],{"className":1770,"code":20074,"language":1772,"meta":79,"style":79},"class Person\n{\npublic:\n    \u002F\u002F构造函数\n    Person()\n    {\n        cout \u003C\u003C \"Person的构造函数调用\" \u003C\u003C endl;\n    }\n    \u002F\u002F析构函数\n    ~Person()\n    {\n        cout \u003C\u003C \"Person的析构函数调用\" \u003C\u003C endl;\n    }\n\n};\n\nvoid test01()\n{\n    Person p;\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n}\n\nint main() {\n    \n    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n\n    Person p;\u002F\u002F只有构造函数\n\n    system(\"pause\");\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n\n    return 0;\n}\n",[32,20076,20077,20083,20087,20091,20096,20103,20107,20120,20124,20129,20136,20140,20153,20157,20161,20165,20169,20177,20181,20189,20193,20197,20205,20209,20214,20218,20225,20229,20242,20246,20254],{"__ignoreMap":79},[100,20078,20079,20081],{"class":102,"line":103},[100,20080,16275],{"class":471},[100,20082,16752],{"class":106},[100,20084,20085],{"class":102,"line":188},[100,20086,3178],{"class":258},[100,20088,20089],{"class":102,"line":199},[100,20090,16297],{"class":471},[100,20092,20093],{"class":102,"line":532},[100,20094,20095],{"class":1836},"    \u002F\u002F构造函数\n",[100,20097,20098,20101],{"class":102,"line":577},[100,20099,20100],{"class":106},"    Person",[100,20102,3587],{"class":258},[100,20104,20105],{"class":102,"line":589},[100,20106,3641],{"class":258},[100,20108,20109,20111,20113,20116,20118],{"class":102,"line":595},[100,20110,11254],{"class":258},[100,20112,2810],{"class":471},[100,20114,20115],{"class":110}," \"Person的构造函数调用\"",[100,20117,3077],{"class":471},[100,20119,10426],{"class":258},[100,20121,20122],{"class":102,"line":601},[100,20123,3798],{"class":258},[100,20125,20126],{"class":102,"line":606},[100,20127,20128],{"class":1836},"    \u002F\u002F析构函数\n",[100,20130,20131,20134],{"class":102,"line":612},[100,20132,20133],{"class":106},"    ~Person",[100,20135,3587],{"class":258},[100,20137,20138],{"class":102,"line":618},[100,20139,3641],{"class":258},[100,20141,20142,20144,20146,20149,20151],{"class":102,"line":623},[100,20143,11254],{"class":258},[100,20145,2810],{"class":471},[100,20147,20148],{"class":110}," \"Person的析构函数调用\"",[100,20150,3077],{"class":471},[100,20152,10426],{"class":258},[100,20154,20155],{"class":102,"line":629},[100,20156,3798],{"class":258},[100,20158,20159],{"class":102,"line":635},[100,20160,570],{"emptyLinePlaceholder":569},[100,20162,20163],{"class":102,"line":641},[100,20164,5594],{"class":258},[100,20166,20167],{"class":102,"line":647},[100,20168,570],{"emptyLinePlaceholder":569},[100,20170,20171,20173,20175],{"class":102,"line":653},[100,20172,6960],{"class":471},[100,20174,7184],{"class":106},[100,20176,3587],{"class":258},[100,20178,20179],{"class":102,"line":659},[100,20180,3178],{"class":258},[100,20182,20183,20186],{"class":102,"line":665},[100,20184,20185],{"class":258},"    Person p;",[100,20187,20188],{"class":1836},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[100,20190,20191],{"class":102,"line":670},[100,20192,3197],{"class":258},[100,20194,20195],{"class":102,"line":675},[100,20196,570],{"emptyLinePlaceholder":569},[100,20198,20199,20201,20203],{"class":102,"line":699},[100,20200,1784],{"class":471},[100,20202,786],{"class":106},[100,20204,12435],{"class":258},[100,20206,20207],{"class":102,"line":708},[100,20208,14792],{"class":258},[100,20210,20211],{"class":102,"line":722},[100,20212,20213],{"class":1836},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[100,20215,20216],{"class":102,"line":735},[100,20217,570],{"emptyLinePlaceholder":569},[100,20219,20220,20222],{"class":102,"line":754},[100,20221,20185],{"class":258},[100,20223,20224],{"class":1836},"\u002F\u002F只有构造函数\n",[100,20226,20227],{"class":102,"line":771},[100,20228,570],{"emptyLinePlaceholder":569},[100,20230,20231,20233,20235,20237,20239],{"class":102,"line":776},[100,20232,3914],{"class":106},[100,20234,713],{"class":258},[100,20236,3919],{"class":110},[100,20238,7562],{"class":258},[100,20240,20241],{"class":1836},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[100,20243,20244],{"class":102,"line":781},[100,20245,570],{"emptyLinePlaceholder":569},[100,20247,20248,20250,20252],{"class":102,"line":796},[100,20249,5689],{"class":471},[100,20251,5692],{"class":117},[100,20253,2927],{"class":258},[100,20255,20256],{"class":102,"line":812},[100,20257,3197],{"class":258},[19,20259,20260],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[305,20262,20264],{"id":20263},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,20266,20267],{},"两种分类方式：",[19,20269,20270],{},"​\t按参数分为： 有参构造和无参构造",[19,20272,20273],{},"​\t按类型分为： 普通构造和拷贝构造",[19,20275,20276],{},"三种调用方式：",[19,20278,20279],{},"​\t括号法",[19,20281,20282],{},"​\t显示法",[19,20284,20285],{},"​\t隐式转换法",[73,20287,20289],{"className":1770,"code":20288,"language":1772,"meta":79,"style":79},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F1.构造函数的分类及调用\n\u002F\u002F分类\n\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n\u002F\u002F  按照类型分类 普通构造 拷贝构造\n\nclass Person \n{\npublic:\n    \u002F\u002F构造函数\n    Person()\n    {\n        cout\u003C\u003C\"Person构造函数无参构造\"\u003C\u003Cendl;\n    }\n    Person(int a)\n    {\n        age=a;\n        cout\u003C\u003C\"Person构造函数有参构造\"\u003C\u003Cendl;\n    }\n    \u002F\u002F析构函数\n    ~Person()\n    {\n        cout\u003C\u003C\"Person析构函数被调用\"\u003C\u003Cendl;\n    }\n    \u002F\u002F拷贝构造函数\n    Person(const Person &p)\n    {\n        \u002F\u002F将传入对象的age赋值给当前对象的age\n        age=p.age;\n        cout\u003C\u003C\"Person拷贝构造函数被调用\"\u003C\u003Cendl;\n    }\n    int age;\n};\n\u002F\u002F调用\nvoid test01()\n{\n    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n}\nvoid test02()\n{\n    \u002F\u002F1.括号法\n    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n\n    \u002F\u002F注意事项\n    \u002F\u002F调用默认构造函数时候，不要加()\n    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n    \u002F\u002F Person p4();\n\n    \u002F\u002F2.显示法\n    Person p1;\n    Person p2=Person(10);\n    Person p3=Person(p2);\n    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n\n    \u002F\u002F 注意事项2\n    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n\n    \u002F\u002F3.隐士转换法\n    Person p4=10;  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n    Person p5=p4; \u002F\u002F 这里会调用拷贝构造函数\n}\nint main()\n{\n    test01();\n    test02();\n    return 0;\n}\n",[32,20290,20291,20297,20307,20312,20317,20322,20327,20331,20339,20343,20347,20351,20357,20361,20374,20378,20390,20394,20403,20416,20420,20424,20430,20434,20447,20451,20456,20472,20476,20481,20490,20503,20507,20513,20517,20522,20530,20534,20539,20543,20551,20555,20560,20565,20570,20575,20580,20584,20589,20594,20599,20604,20608,20613,20618,20634,20646,20651,20655,20660,20665,20670,20674,20679,20693,20706,20710,20718,20722,20728,20734,20742],{"__ignoreMap":79},[100,20292,20293,20295],{"class":102,"line":103},[100,20294,3562],{"class":471},[100,20296,3565],{"class":110},[100,20298,20299,20301,20303,20305],{"class":102,"line":188},[100,20300,3570],{"class":471},[100,20302,3573],{"class":471},[100,20304,3576],{"class":106},[100,20306,2927],{"class":258},[100,20308,20309],{"class":102,"line":199},[100,20310,20311],{"class":1836},"\u002F\u002F1.构造函数的分类及调用\n",[100,20313,20314],{"class":102,"line":532},[100,20315,20316],{"class":1836},"\u002F\u002F分类\n",[100,20318,20319],{"class":102,"line":577},[100,20320,20321],{"class":1836},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[100,20323,20324],{"class":102,"line":589},[100,20325,20326],{"class":1836},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[100,20328,20329],{"class":102,"line":595},[100,20330,570],{"emptyLinePlaceholder":569},[100,20332,20333,20335,20337],{"class":102,"line":601},[100,20334,16275],{"class":471},[100,20336,17150],{"class":106},[100,20338,4276],{"class":258},[100,20340,20341],{"class":102,"line":606},[100,20342,3178],{"class":258},[100,20344,20345],{"class":102,"line":612},[100,20346,16297],{"class":471},[100,20348,20349],{"class":102,"line":618},[100,20350,20095],{"class":1836},[100,20352,20353,20355],{"class":102,"line":623},[100,20354,20100],{"class":106},[100,20356,3587],{"class":258},[100,20358,20359],{"class":102,"line":629},[100,20360,3641],{"class":258},[100,20362,20363,20365,20367,20370,20372],{"class":102,"line":635},[100,20364,5051],{"class":258},[100,20366,2810],{"class":471},[100,20368,20369],{"class":110},"\"Person构造函数无参构造\"",[100,20371,2810],{"class":471},[100,20373,2832],{"class":258},[100,20375,20376],{"class":102,"line":641},[100,20377,3798],{"class":258},[100,20379,20380,20382,20384,20386,20388],{"class":102,"line":647},[100,20381,20100],{"class":106},[100,20383,713],{"class":258},[100,20385,1784],{"class":471},[100,20387,3031],{"class":6812},[100,20389,809],{"class":258},[100,20391,20392],{"class":102,"line":653},[100,20393,3641],{"class":258},[100,20395,20396,20399,20401],{"class":102,"line":659},[100,20397,20398],{"class":258},"        age",[100,20400,472],{"class":471},[100,20402,7793],{"class":258},[100,20404,20405,20407,20409,20412,20414],{"class":102,"line":665},[100,20406,5051],{"class":258},[100,20408,2810],{"class":471},[100,20410,20411],{"class":110},"\"Person构造函数有参构造\"",[100,20413,2810],{"class":471},[100,20415,2832],{"class":258},[100,20417,20418],{"class":102,"line":670},[100,20419,3798],{"class":258},[100,20421,20422],{"class":102,"line":675},[100,20423,20128],{"class":1836},[100,20425,20426,20428],{"class":102,"line":699},[100,20427,20133],{"class":106},[100,20429,3587],{"class":258},[100,20431,20432],{"class":102,"line":708},[100,20433,3641],{"class":258},[100,20435,20436,20438,20440,20443,20445],{"class":102,"line":722},[100,20437,5051],{"class":258},[100,20439,2810],{"class":471},[100,20441,20442],{"class":110},"\"Person析构函数被调用\"",[100,20444,2810],{"class":471},[100,20446,2832],{"class":258},[100,20448,20449],{"class":102,"line":735},[100,20450,3798],{"class":258},[100,20452,20453],{"class":102,"line":754},[100,20454,20455],{"class":1836},"    \u002F\u002F拷贝构造函数\n",[100,20457,20458,20460,20462,20464,20466,20468,20470],{"class":102,"line":771},[100,20459,20100],{"class":106},[100,20461,713],{"class":258},[100,20463,8388],{"class":471},[100,20465,17150],{"class":106},[100,20467,12166],{"class":471},[100,20469,19],{"class":6812},[100,20471,809],{"class":258},[100,20473,20474],{"class":102,"line":776},[100,20475,3641],{"class":258},[100,20477,20478],{"class":102,"line":781},[100,20479,20480],{"class":1836},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[100,20482,20483,20485,20487],{"class":102,"line":796},[100,20484,20398],{"class":258},[100,20486,472],{"class":471},[100,20488,20489],{"class":258},"p.age;\n",[100,20491,20492,20494,20496,20499,20501],{"class":102,"line":812},[100,20493,5051],{"class":258},[100,20495,2810],{"class":471},[100,20497,20498],{"class":110},"\"Person拷贝构造函数被调用\"",[100,20500,2810],{"class":471},[100,20502,2832],{"class":258},[100,20504,20505],{"class":102,"line":823},[100,20506,3798],{"class":258},[100,20508,20509,20511],{"class":102,"line":828},[100,20510,3596],{"class":471},[100,20512,9393],{"class":258},[100,20514,20515],{"class":102,"line":840},[100,20516,5594],{"class":258},[100,20518,20519],{"class":102,"line":845},[100,20520,20521],{"class":1836},"\u002F\u002F调用\n",[100,20523,20524,20526,20528],{"class":102,"line":868},[100,20525,6960],{"class":471},[100,20527,7184],{"class":106},[100,20529,3587],{"class":258},[100,20531,20532],{"class":102,"line":874},[100,20533,3178],{"class":258},[100,20535,20536],{"class":102,"line":879},[100,20537,20538],{"class":1836},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[100,20540,20541],{"class":102,"line":889},[100,20542,3197],{"class":258},[100,20544,20545,20547,20549],{"class":102,"line":894},[100,20546,6960],{"class":471},[100,20548,7253],{"class":106},[100,20550,3587],{"class":258},[100,20552,20553],{"class":102,"line":900},[100,20554,3178],{"class":258},[100,20556,20557],{"class":102,"line":910},[100,20558,20559],{"class":1836},"    \u002F\u002F1.括号法\n",[100,20561,20562],{"class":102,"line":915},[100,20563,20564],{"class":1836},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[100,20566,20567],{"class":102,"line":929},[100,20568,20569],{"class":1836},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[100,20571,20572],{"class":102,"line":935},[100,20573,20574],{"class":1836},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[100,20576,20577],{"class":102,"line":945},[100,20578,20579],{"class":1836},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[100,20581,20582],{"class":102,"line":950},[100,20583,570],{"emptyLinePlaceholder":569},[100,20585,20586],{"class":102,"line":955},[100,20587,20588],{"class":1836},"    \u002F\u002F注意事项\n",[100,20590,20591],{"class":102,"line":972},[100,20592,20593],{"class":1836},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[100,20595,20596],{"class":102,"line":11370},[100,20597,20598],{"class":1836},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[100,20600,20601],{"class":102,"line":11375},[100,20602,20603],{"class":1836},"    \u002F\u002F Person p4();\n",[100,20605,20606],{"class":102,"line":11380},[100,20607,570],{"emptyLinePlaceholder":569},[100,20609,20610],{"class":102,"line":11385},[100,20611,20612],{"class":1836},"    \u002F\u002F2.显示法\n",[100,20614,20615],{"class":102,"line":11394},[100,20616,20617],{"class":258},"    Person p1;\n",[100,20619,20620,20623,20625,20628,20630,20632],{"class":102,"line":11399},[100,20621,20622],{"class":258},"    Person p2",[100,20624,472],{"class":471},[100,20626,20627],{"class":106},"Person",[100,20629,713],{"class":258},[100,20631,2213],{"class":117},[100,20633,4321],{"class":258},[100,20635,20636,20639,20641,20643],{"class":102,"line":11405},[100,20637,20638],{"class":258},"    Person p3",[100,20640,472],{"class":471},[100,20642,20627],{"class":106},[100,20644,20645],{"class":258},"(p2);\n",[100,20647,20648],{"class":102,"line":11426},[100,20649,20650],{"class":1836},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[100,20652,20653],{"class":102,"line":11432},[100,20654,570],{"emptyLinePlaceholder":569},[100,20656,20657],{"class":102,"line":11446},[100,20658,20659],{"class":1836},"    \u002F\u002F 注意事项2\n",[100,20661,20662],{"class":102,"line":11452},[100,20663,20664],{"class":1836},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[100,20666,20667],{"class":102,"line":11479},[100,20668,20669],{"class":1836},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[100,20671,20672],{"class":102,"line":11488},[100,20673,570],{"emptyLinePlaceholder":569},[100,20675,20676],{"class":102,"line":11494},[100,20677,20678],{"class":1836},"    \u002F\u002F3.隐士转换法\n",[100,20680,20681,20684,20686,20688,20690],{"class":102,"line":11502},[100,20682,20683],{"class":258},"    Person p4",[100,20685,472],{"class":471},[100,20687,2213],{"class":117},[100,20689,1833],{"class":258},[100,20691,20692],{"class":1836},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[100,20694,20695,20698,20700,20703],{"class":102,"line":11507},[100,20696,20697],{"class":258},"    Person p5",[100,20699,472],{"class":471},[100,20701,20702],{"class":258},"p4;",[100,20704,20705],{"class":1836}," \u002F\u002F 这里会调用拷贝构造函数\n",[100,20707,20708],{"class":102,"line":18185},[100,20709,3197],{"class":258},[100,20711,20712,20714,20716],{"class":102,"line":18191},[100,20713,1784],{"class":471},[100,20715,786],{"class":106},[100,20717,3587],{"class":258},[100,20719,20720],{"class":102,"line":18214},[100,20721,3178],{"class":258},[100,20723,20724,20726],{"class":102,"line":18220},[100,20725,7229],{"class":106},[100,20727,7232],{"class":258},[100,20729,20730,20732],{"class":102,"line":18243},[100,20731,7298],{"class":106},[100,20733,7232],{"class":258},[100,20735,20736,20738,20740],{"class":102,"line":18257},[100,20737,5689],{"class":471},[100,20739,5692],{"class":117},[100,20741,2927],{"class":258},[100,20743,20744],{"class":102,"line":18277},[100,20745,3197],{"class":258},[19,20747,20748,20751],{},[1921,20749,20750],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[305,20753,20755],{"id":20754},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,20757,20758],{},"C++中拷贝构造函数调用时机通常有三种情况",[2773,20760,20761,20764,20767],{},[29,20762,20763],{},"使用一个已经创建完毕的对象来初始化一个新对象",[29,20765,20766],{},"值传递的方式给函数参数传值",[29,20768,20769],{},"以值方式返回局部对象",[73,20771,20773],{"className":1770,"code":20772,"language":1772,"meta":79,"style":79},"#include\u003Ciostream>\nusing namespace std;\n\n\u002F\u002F拷贝构造函数调用时机\n\n\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n\u002F\u002F2.值传递的方式给函数参数传值\n\u002F\u002F3.以值方式返回局部对象\nclass Person\n{\npublic:\n    Person()\n    {\n        cout \u003C\u003C \"Person的默认构造函数调用\" \u003C\u003C endl;\n    }\n    \u002F\u002F有参构造\n    Person(int age)\n    {\n        m_Age = age;\n        cout \u003C\u003C \"Person的有参构造函数调用\" \u003C\u003C endl;\n    }\n    \u002F\u002F拷贝构造函数\n    Person(const Person &p)\n    {\n        m_Age = p.m_Age;\n        cout \u003C\u003C \"Person的拷贝构造函数调用\" \u003C\u003C endl;\n    }\n    ~Person()\n    {\n        cout \u003C\u003C \"Person的析构函数调用\" \u003C\u003C endl;\n    }\n    int m_Age;\n};\n\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\nvoid test01()\n{\n    Person p1(20);\n    Person p2(p1);\n    cout\u003C\u003C\"P2的年龄为：\"\u003C\u003Cp2.m_Age\u003C\u003Cendl;\n}\n\u002F\u002F 2.值传递的方式给函数参数传值\n\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\nvoid doWork(Person p)\n{\n    cout \u003C\u003C \"doWork函数调用\" \u003C\u003C endl;\n}\nvoid test02()\n{\n    Person p;\n    doWork(p);\n}\n\u002F\u002F 3.以值方式返回局部对象\nPerson doWork2()\n{\n    Person p1;\n    cout\u003C\u003C(int *)&p1\u003C\u003Cendl;\u002F\u002F打印p1的地址\n    return p1;\u002F\u002F返回局部对象，调用拷贝构造函数\n}\nvoid test03()\n{\n    Person p = doWork2();\n    cout\u003C\u003C(int *)&p\u003C\u003Cendl;\u002F\u002F打印p的地址\n}\n\n\nint main()\n{\n    \u002F\u002F test01();\n    \u002F\u002F test02();\n    test03();\n\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n\u002F\u002F 输出结果如下：\n\u002F\u002F Person的默认构造函数调用\n\u002F\u002F 0x7fffffffceec\n\u002F\u002F 0x7fffffffceec\n\u002F\u002F Person的析构函数调用\n\n\u002F\u002F 之前的输出结果如下：\n\u002F\u002F Person的默认构造函数调用\n\u002F\u002F 地址\n\u002F\u002F Person的拷贝构造函数调用\n\u002F\u002F Person的析构函数调用\n\u002F\u002F 地址\n\u002F\u002F (这两次输出的地址也是不同的) \n\u002F\u002F Person的析构函数调用     \n    return 0;\n}\n",[32,20774,20775,20781,20791,20795,20800,20804,20809,20814,20819,20825,20829,20833,20839,20843,20856,20860,20865,20877,20881,20889,20902,20906,20910,20926,20930,20939,20952,20956,20962,20966,20978,20982,20988,20992,20996,21004,21008,21021,21029,21047,21051,21056,21061,21076,21080,21093,21097,21105,21109,21113,21121,21125,21130,21139,21143,21147,21172,21182,21186,21194,21198,21209,21234,21238,21242,21246,21254,21258,21263,21268,21275,21280,21285,21290,21295,21299,21304,21308,21313,21317,21322,21327,21331,21335,21340,21345,21353],{"__ignoreMap":79},[100,20776,20777,20779],{"class":102,"line":103},[100,20778,3562],{"class":471},[100,20780,3565],{"class":110},[100,20782,20783,20785,20787,20789],{"class":102,"line":188},[100,20784,3570],{"class":471},[100,20786,3573],{"class":471},[100,20788,3576],{"class":106},[100,20790,2927],{"class":258},[100,20792,20793],{"class":102,"line":199},[100,20794,570],{"emptyLinePlaceholder":569},[100,20796,20797],{"class":102,"line":532},[100,20798,20799],{"class":1836},"\u002F\u002F拷贝构造函数调用时机\n",[100,20801,20802],{"class":102,"line":577},[100,20803,570],{"emptyLinePlaceholder":569},[100,20805,20806],{"class":102,"line":589},[100,20807,20808],{"class":1836},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[100,20810,20811],{"class":102,"line":595},[100,20812,20813],{"class":1836},"\u002F\u002F2.值传递的方式给函数参数传值\n",[100,20815,20816],{"class":102,"line":601},[100,20817,20818],{"class":1836},"\u002F\u002F3.以值方式返回局部对象\n",[100,20820,20821,20823],{"class":102,"line":606},[100,20822,16275],{"class":471},[100,20824,16752],{"class":106},[100,20826,20827],{"class":102,"line":612},[100,20828,3178],{"class":258},[100,20830,20831],{"class":102,"line":618},[100,20832,16297],{"class":471},[100,20834,20835,20837],{"class":102,"line":623},[100,20836,20100],{"class":106},[100,20838,3587],{"class":258},[100,20840,20841],{"class":102,"line":629},[100,20842,3641],{"class":258},[100,20844,20845,20847,20849,20852,20854],{"class":102,"line":635},[100,20846,11254],{"class":258},[100,20848,2810],{"class":471},[100,20850,20851],{"class":110}," \"Person的默认构造函数调用\"",[100,20853,3077],{"class":471},[100,20855,10426],{"class":258},[100,20857,20858],{"class":102,"line":641},[100,20859,3798],{"class":258},[100,20861,20862],{"class":102,"line":647},[100,20863,20864],{"class":1836},"    \u002F\u002F有参构造\n",[100,20866,20867,20869,20871,20873,20875],{"class":102,"line":653},[100,20868,20100],{"class":106},[100,20870,713],{"class":258},[100,20872,1784],{"class":471},[100,20874,17270],{"class":6812},[100,20876,809],{"class":258},[100,20878,20879],{"class":102,"line":659},[100,20880,3641],{"class":258},[100,20882,20883,20885,20887],{"class":102,"line":665},[100,20884,17324],{"class":258},[100,20886,472],{"class":471},[100,20888,9393],{"class":258},[100,20890,20891,20893,20895,20898,20900],{"class":102,"line":670},[100,20892,11254],{"class":258},[100,20894,2810],{"class":471},[100,20896,20897],{"class":110}," \"Person的有参构造函数调用\"",[100,20899,3077],{"class":471},[100,20901,10426],{"class":258},[100,20903,20904],{"class":102,"line":675},[100,20905,3798],{"class":258},[100,20907,20908],{"class":102,"line":699},[100,20909,20455],{"class":1836},[100,20911,20912,20914,20916,20918,20920,20922,20924],{"class":102,"line":708},[100,20913,20100],{"class":106},[100,20915,713],{"class":258},[100,20917,8388],{"class":471},[100,20919,17150],{"class":106},[100,20921,12166],{"class":471},[100,20923,19],{"class":6812},[100,20925,809],{"class":258},[100,20927,20928],{"class":102,"line":722},[100,20929,3641],{"class":258},[100,20931,20932,20934,20936],{"class":102,"line":735},[100,20933,17324],{"class":258},[100,20935,472],{"class":471},[100,20937,20938],{"class":258}," p.m_Age;\n",[100,20940,20941,20943,20945,20948,20950],{"class":102,"line":754},[100,20942,11254],{"class":258},[100,20944,2810],{"class":471},[100,20946,20947],{"class":110}," \"Person的拷贝构造函数调用\"",[100,20949,3077],{"class":471},[100,20951,10426],{"class":258},[100,20953,20954],{"class":102,"line":771},[100,20955,3798],{"class":258},[100,20957,20958,20960],{"class":102,"line":776},[100,20959,20133],{"class":106},[100,20961,3587],{"class":258},[100,20963,20964],{"class":102,"line":781},[100,20965,3641],{"class":258},[100,20967,20968,20970,20972,20974,20976],{"class":102,"line":796},[100,20969,11254],{"class":258},[100,20971,2810],{"class":471},[100,20973,20148],{"class":110},[100,20975,3077],{"class":471},[100,20977,10426],{"class":258},[100,20979,20980],{"class":102,"line":812},[100,20981,3798],{"class":258},[100,20983,20984,20986],{"class":102,"line":823},[100,20985,3596],{"class":471},[100,20987,17247],{"class":258},[100,20989,20990],{"class":102,"line":828},[100,20991,5594],{"class":258},[100,20993,20994],{"class":102,"line":840},[100,20995,20808],{"class":1836},[100,20997,20998,21000,21002],{"class":102,"line":845},[100,20999,6960],{"class":471},[100,21001,7184],{"class":106},[100,21003,3587],{"class":258},[100,21005,21006],{"class":102,"line":868},[100,21007,3178],{"class":258},[100,21009,21010,21013,21015,21017,21019],{"class":102,"line":874},[100,21011,21012],{"class":258},"    Person ",[100,21014,8726],{"class":106},[100,21016,713],{"class":258},[100,21018,2466],{"class":117},[100,21020,4321],{"class":258},[100,21022,21023,21025,21027],{"class":102,"line":879},[100,21024,21012],{"class":258},[100,21026,8629],{"class":106},[100,21028,19096],{"class":258},[100,21030,21031,21033,21035,21038,21040,21043,21045],{"class":102,"line":889},[100,21032,3183],{"class":258},[100,21034,2810],{"class":471},[100,21036,21037],{"class":110},"\"P2的年龄为：\"",[100,21039,2810],{"class":471},[100,21041,21042],{"class":258},"p2.m_Age",[100,21044,2810],{"class":471},[100,21046,2832],{"class":258},[100,21048,21049],{"class":102,"line":894},[100,21050,3197],{"class":258},[100,21052,21053],{"class":102,"line":900},[100,21054,21055],{"class":1836},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[100,21057,21058],{"class":102,"line":910},[100,21059,21060],{"class":1836},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[100,21062,21063,21065,21068,21070,21072,21074],{"class":102,"line":915},[100,21064,6960],{"class":471},[100,21066,21067],{"class":106}," doWork",[100,21069,713],{"class":258},[100,21071,20627],{"class":106},[100,21073,8421],{"class":6812},[100,21075,809],{"class":258},[100,21077,21078],{"class":102,"line":929},[100,21079,3178],{"class":258},[100,21081,21082,21084,21086,21089,21091],{"class":102,"line":935},[100,21083,8125],{"class":258},[100,21085,2810],{"class":471},[100,21087,21088],{"class":110}," \"doWork函数调用\"",[100,21090,3077],{"class":471},[100,21092,10426],{"class":258},[100,21094,21095],{"class":102,"line":945},[100,21096,3197],{"class":258},[100,21098,21099,21101,21103],{"class":102,"line":950},[100,21100,6960],{"class":471},[100,21102,7253],{"class":106},[100,21104,3587],{"class":258},[100,21106,21107],{"class":102,"line":955},[100,21108,3178],{"class":258},[100,21110,21111],{"class":102,"line":972},[100,21112,16894],{"class":258},[100,21114,21115,21118],{"class":102,"line":11370},[100,21116,21117],{"class":106},"    doWork",[100,21119,21120],{"class":258},"(p);\n",[100,21122,21123],{"class":102,"line":11375},[100,21124,3197],{"class":258},[100,21126,21127],{"class":102,"line":11380},[100,21128,21129],{"class":1836},"\u002F\u002F 3.以值方式返回局部对象\n",[100,21131,21132,21134,21137],{"class":102,"line":11385},[100,21133,20627],{"class":106},[100,21135,21136],{"class":106}," doWork2",[100,21138,3587],{"class":258},[100,21140,21141],{"class":102,"line":11394},[100,21142,3178],{"class":258},[100,21144,21145],{"class":102,"line":11399},[100,21146,20617],{"class":258},[100,21148,21149,21151,21153,21155,21157,21159,21161,21163,21165,21167,21169],{"class":102,"line":11405},[100,21150,3183],{"class":258},[100,21152,2810],{"class":471},[100,21154,713],{"class":258},[100,21156,1784],{"class":471},[100,21158,8114],{"class":471},[100,21160,2196],{"class":258},[100,21162,2120],{"class":471},[100,21164,8726],{"class":258},[100,21166,2810],{"class":471},[100,21168,2875],{"class":258},[100,21170,21171],{"class":1836},"\u002F\u002F打印p1的地址\n",[100,21173,21174,21176,21179],{"class":102,"line":11426},[100,21175,5689],{"class":471},[100,21177,21178],{"class":258}," p1;",[100,21180,21181],{"class":1836},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[100,21183,21184],{"class":102,"line":11432},[100,21185,3197],{"class":258},[100,21187,21188,21190,21192],{"class":102,"line":11446},[100,21189,6960],{"class":471},[100,21191,7325],{"class":106},[100,21193,3587],{"class":258},[100,21195,21196],{"class":102,"line":11452},[100,21197,3178],{"class":258},[100,21199,21200,21203,21205,21207],{"class":102,"line":11479},[100,21201,21202],{"class":258},"    Person p ",[100,21204,472],{"class":471},[100,21206,21136],{"class":106},[100,21208,7232],{"class":258},[100,21210,21211,21213,21215,21217,21219,21221,21223,21225,21227,21229,21231],{"class":102,"line":11488},[100,21212,3183],{"class":258},[100,21214,2810],{"class":471},[100,21216,713],{"class":258},[100,21218,1784],{"class":471},[100,21220,8114],{"class":471},[100,21222,2196],{"class":258},[100,21224,2120],{"class":471},[100,21226,19],{"class":258},[100,21228,2810],{"class":471},[100,21230,2875],{"class":258},[100,21232,21233],{"class":1836},"\u002F\u002F打印p的地址\n",[100,21235,21236],{"class":102,"line":11494},[100,21237,3197],{"class":258},[100,21239,21240],{"class":102,"line":11502},[100,21241,570],{"emptyLinePlaceholder":569},[100,21243,21244],{"class":102,"line":11507},[100,21245,570],{"emptyLinePlaceholder":569},[100,21247,21248,21250,21252],{"class":102,"line":18185},[100,21249,1784],{"class":471},[100,21251,786],{"class":106},[100,21253,3587],{"class":258},[100,21255,21256],{"class":102,"line":18191},[100,21257,3178],{"class":258},[100,21259,21260],{"class":102,"line":18214},[100,21261,21262],{"class":1836},"    \u002F\u002F test01();\n",[100,21264,21265],{"class":102,"line":18220},[100,21266,21267],{"class":1836},"    \u002F\u002F test02();\n",[100,21269,21270,21273],{"class":102,"line":18243},[100,21271,21272],{"class":106},"    test03",[100,21274,7232],{"class":258},[100,21276,21277],{"class":102,"line":18257},[100,21278,21279],{"class":1836},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[100,21281,21282],{"class":102,"line":18277},[100,21283,21284],{"class":1836},"\u002F\u002F 输出结果如下：\n",[100,21286,21287],{"class":102,"line":18283},[100,21288,21289],{"class":1836},"\u002F\u002F Person的默认构造函数调用\n",[100,21291,21292],{"class":102,"line":18294},[100,21293,21294],{"class":1836},"\u002F\u002F 0x7fffffffceec\n",[100,21296,21297],{"class":102,"line":18317},[100,21298,21294],{"class":1836},[100,21300,21301],{"class":102,"line":18339},[100,21302,21303],{"class":1836},"\u002F\u002F Person的析构函数调用\n",[100,21305,21306],{"class":102,"line":18344},[100,21307,570],{"emptyLinePlaceholder":569},[100,21309,21310],{"class":102,"line":18350},[100,21311,21312],{"class":1836},"\u002F\u002F 之前的输出结果如下：\n",[100,21314,21315],{"class":102,"line":18364},[100,21316,21289],{"class":1836},[100,21318,21319],{"class":102,"line":18377},[100,21320,21321],{"class":1836},"\u002F\u002F 地址\n",[100,21323,21324],{"class":102,"line":18382},[100,21325,21326],{"class":1836},"\u002F\u002F Person的拷贝构造函数调用\n",[100,21328,21329],{"class":102,"line":18396},[100,21330,21303],{"class":1836},[100,21332,21333],{"class":102,"line":18401},[100,21334,21321],{"class":1836},[100,21336,21337],{"class":102,"line":18407},[100,21338,21339],{"class":1836},"\u002F\u002F (这两次输出的地址也是不同的) \n",[100,21341,21342],{"class":102,"line":18412},[100,21343,21344],{"class":1836},"\u002F\u002F Person的析构函数调用     \n",[100,21346,21347,21349,21351],{"class":102,"line":18426},[100,21348,5689],{"class":471},[100,21350,5692],{"class":117},[100,21352,2927],{"class":258},[100,21354,21355],{"class":102,"line":18431},[100,21356,3197],{"class":258},[19,21358,21359],{},"简化版理解",[73,21361,21363],{"className":1770,"code":21362,"language":1772,"meta":79,"style":79},"class Person {\npublic:\n    Person() {\n        cout \u003C\u003C \"无参构造函数!\" \u003C\u003C endl;\n        mAge = 0;\n    }\n    Person(int age) {\n        cout \u003C\u003C \"有参构造函数!\" \u003C\u003C endl;\n        mAge = age;\n    }\n    Person(const Person& p) {\n        cout \u003C\u003C \"拷贝构造函数!\" \u003C\u003C endl;\n        mAge = p.mAge;\n    }\n    \u002F\u002F析构函数在释放内存之前调用\n    ~Person() {\n        cout \u003C\u003C \"析构函数!\" \u003C\u003C endl;\n    }\npublic:\n    int mAge;\n};\n\n\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\nvoid test01() {\n\n    Person man(100); \u002F\u002Fp对象已经创建完毕\n    Person newman(man); \u002F\u002F调用拷贝构造函数\n    Person newman2 = man; \u002F\u002F拷贝构造\n\n    \u002F\u002FPerson newman3;\n    \u002F\u002Fnewman3 = man; \u002F\u002F不是调用拷贝构造函数，赋值操作\n}\n\n\u002F\u002F2. 值传递的方式给函数参数传值\n\u002F\u002F相当于Person p1 = p;\nvoid doWork(Person p1) {}\nvoid test02() {\n    Person p; \u002F\u002F无参构造函数\n    doWork(p);\n}\n\n\u002F\u002F3. 以值方式返回局部对象\nPerson doWork2()\n{\n    Person p1;\n    cout \u003C\u003C (int *)&p1 \u003C\u003C endl;\n    return p1;\n}\n\nvoid test03()\n{\n    Person p = doWork2();\n    cout \u003C\u003C (int *)&p \u003C\u003C endl;\n}\n\n\nint main() {\n\n    \u002F\u002Ftest01();\n    \u002F\u002Ftest02();\n    test03();\n\n    system(\"pause\");\n\n    return 0;\n}\n",[32,21364,21365,21373,21377,21383,21396,21407,21411,21423,21436,21444,21448,21464,21477,21486,21490,21495,21501,21514,21518,21522,21529,21533,21537,21542,21550,21554,21570,21583,21596,21600,21605,21613,21617,21621,21626,21631,21647,21655,21662,21668,21672,21676,21681,21689,21693,21697,21720,21727,21731,21735,21743,21747,21757,21779,21783,21787,21791,21799,21803,21808,21813,21819,21823,21833,21837,21845],{"__ignoreMap":79},[100,21366,21367,21369,21371],{"class":102,"line":103},[100,21368,16275],{"class":471},[100,21370,17150],{"class":106},[100,21372,17153],{"class":258},[100,21374,21375],{"class":102,"line":188},[100,21376,16297],{"class":471},[100,21378,21379,21381],{"class":102,"line":199},[100,21380,20100],{"class":106},[100,21382,12435],{"class":258},[100,21384,21385,21387,21389,21392,21394],{"class":102,"line":532},[100,21386,11254],{"class":258},[100,21388,2810],{"class":471},[100,21390,21391],{"class":110}," \"无参构造函数!\"",[100,21393,3077],{"class":471},[100,21395,10426],{"class":258},[100,21397,21398,21401,21403,21405],{"class":102,"line":577},[100,21399,21400],{"class":258},"        mAge ",[100,21402,472],{"class":471},[100,21404,5692],{"class":117},[100,21406,2927],{"class":258},[100,21408,21409],{"class":102,"line":589},[100,21410,3798],{"class":258},[100,21412,21413,21415,21417,21419,21421],{"class":102,"line":595},[100,21414,20100],{"class":106},[100,21416,713],{"class":258},[100,21418,1784],{"class":471},[100,21420,17270],{"class":6812},[100,21422,14024],{"class":258},[100,21424,21425,21427,21429,21432,21434],{"class":102,"line":601},[100,21426,11254],{"class":258},[100,21428,2810],{"class":471},[100,21430,21431],{"class":110}," \"有参构造函数!\"",[100,21433,3077],{"class":471},[100,21435,10426],{"class":258},[100,21437,21438,21440,21442],{"class":102,"line":606},[100,21439,21400],{"class":258},[100,21441,472],{"class":471},[100,21443,9393],{"class":258},[100,21445,21446],{"class":102,"line":612},[100,21447,3798],{"class":258},[100,21449,21450,21452,21454,21456,21458,21460,21462],{"class":102,"line":618},[100,21451,20100],{"class":106},[100,21453,713],{"class":258},[100,21455,8388],{"class":471},[100,21457,17150],{"class":106},[100,21459,2120],{"class":471},[100,21461,8421],{"class":6812},[100,21463,14024],{"class":258},[100,21465,21466,21468,21470,21473,21475],{"class":102,"line":623},[100,21467,11254],{"class":258},[100,21469,2810],{"class":471},[100,21471,21472],{"class":110}," \"拷贝构造函数!\"",[100,21474,3077],{"class":471},[100,21476,10426],{"class":258},[100,21478,21479,21481,21483],{"class":102,"line":629},[100,21480,21400],{"class":258},[100,21482,472],{"class":471},[100,21484,21485],{"class":258}," p.mAge;\n",[100,21487,21488],{"class":102,"line":635},[100,21489,3798],{"class":258},[100,21491,21492],{"class":102,"line":641},[100,21493,21494],{"class":1836},"    \u002F\u002F析构函数在释放内存之前调用\n",[100,21496,21497,21499],{"class":102,"line":647},[100,21498,20133],{"class":106},[100,21500,12435],{"class":258},[100,21502,21503,21505,21507,21510,21512],{"class":102,"line":653},[100,21504,11254],{"class":258},[100,21506,2810],{"class":471},[100,21508,21509],{"class":110}," \"析构函数!\"",[100,21511,3077],{"class":471},[100,21513,10426],{"class":258},[100,21515,21516],{"class":102,"line":659},[100,21517,3798],{"class":258},[100,21519,21520],{"class":102,"line":665},[100,21521,16297],{"class":471},[100,21523,21524,21526],{"class":102,"line":670},[100,21525,3596],{"class":471},[100,21527,21528],{"class":258}," mAge;\n",[100,21530,21531],{"class":102,"line":675},[100,21532,5594],{"class":258},[100,21534,21535],{"class":102,"line":699},[100,21536,570],{"emptyLinePlaceholder":569},[100,21538,21539],{"class":102,"line":708},[100,21540,21541],{"class":1836},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[100,21543,21544,21546,21548],{"class":102,"line":722},[100,21545,6960],{"class":471},[100,21547,7184],{"class":106},[100,21549,12435],{"class":258},[100,21551,21552],{"class":102,"line":735},[100,21553,570],{"emptyLinePlaceholder":569},[100,21555,21556,21558,21561,21563,21565,21567],{"class":102,"line":754},[100,21557,21012],{"class":258},[100,21559,21560],{"class":106},"man",[100,21562,713],{"class":258},[100,21564,2078],{"class":117},[100,21566,7562],{"class":258},[100,21568,21569],{"class":1836}," \u002F\u002Fp对象已经创建完毕\n",[100,21571,21572,21574,21577,21580],{"class":102,"line":771},[100,21573,21012],{"class":258},[100,21575,21576],{"class":106},"newman",[100,21578,21579],{"class":258},"(man);",[100,21581,21582],{"class":1836}," \u002F\u002F调用拷贝构造函数\n",[100,21584,21585,21588,21590,21593],{"class":102,"line":776},[100,21586,21587],{"class":258},"    Person newman2 ",[100,21589,472],{"class":471},[100,21591,21592],{"class":258}," man;",[100,21594,21595],{"class":1836}," \u002F\u002F拷贝构造\n",[100,21597,21598],{"class":102,"line":781},[100,21599,570],{"emptyLinePlaceholder":569},[100,21601,21602],{"class":102,"line":796},[100,21603,21604],{"class":1836},"    \u002F\u002FPerson newman3;\n",[100,21606,21607,21610],{"class":102,"line":812},[100,21608,21609],{"class":1836},"    \u002F\u002Fnewman3 = man;",[100,21611,21612],{"class":1836}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[100,21614,21615],{"class":102,"line":823},[100,21616,3197],{"class":258},[100,21618,21619],{"class":102,"line":828},[100,21620,570],{"emptyLinePlaceholder":569},[100,21622,21623],{"class":102,"line":840},[100,21624,21625],{"class":1836},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[100,21627,21628],{"class":102,"line":845},[100,21629,21630],{"class":1836},"\u002F\u002F相当于Person p1 = p;\n",[100,21632,21633,21635,21637,21639,21641,21644],{"class":102,"line":868},[100,21634,6960],{"class":471},[100,21636,21067],{"class":106},[100,21638,713],{"class":258},[100,21640,20627],{"class":106},[100,21642,21643],{"class":6812}," p1",[100,21645,21646],{"class":258},") {}\n",[100,21648,21649,21651,21653],{"class":102,"line":874},[100,21650,6960],{"class":471},[100,21652,7253],{"class":106},[100,21654,12435],{"class":258},[100,21656,21657,21659],{"class":102,"line":879},[100,21658,20185],{"class":258},[100,21660,21661],{"class":1836}," \u002F\u002F无参构造函数\n",[100,21663,21664,21666],{"class":102,"line":889},[100,21665,21117],{"class":106},[100,21667,21120],{"class":258},[100,21669,21670],{"class":102,"line":894},[100,21671,3197],{"class":258},[100,21673,21674],{"class":102,"line":900},[100,21675,570],{"emptyLinePlaceholder":569},[100,21677,21678],{"class":102,"line":910},[100,21679,21680],{"class":1836},"\u002F\u002F3. 以值方式返回局部对象\n",[100,21682,21683,21685,21687],{"class":102,"line":915},[100,21684,20627],{"class":106},[100,21686,21136],{"class":106},[100,21688,3587],{"class":258},[100,21690,21691],{"class":102,"line":929},[100,21692,3178],{"class":258},[100,21694,21695],{"class":102,"line":935},[100,21696,20617],{"class":258},[100,21698,21699,21701,21703,21705,21707,21709,21711,21713,21716,21718],{"class":102,"line":945},[100,21700,8125],{"class":258},[100,21702,2810],{"class":471},[100,21704,3283],{"class":258},[100,21706,1784],{"class":471},[100,21708,8114],{"class":471},[100,21710,2196],{"class":258},[100,21712,2120],{"class":471},[100,21714,21715],{"class":258},"p1 ",[100,21717,2810],{"class":471},[100,21719,10426],{"class":258},[100,21721,21722,21724],{"class":102,"line":950},[100,21723,5689],{"class":471},[100,21725,21726],{"class":258}," p1;\n",[100,21728,21729],{"class":102,"line":955},[100,21730,3197],{"class":258},[100,21732,21733],{"class":102,"line":972},[100,21734,570],{"emptyLinePlaceholder":569},[100,21736,21737,21739,21741],{"class":102,"line":11370},[100,21738,6960],{"class":471},[100,21740,7325],{"class":106},[100,21742,3587],{"class":258},[100,21744,21745],{"class":102,"line":11375},[100,21746,3178],{"class":258},[100,21748,21749,21751,21753,21755],{"class":102,"line":11380},[100,21750,21202],{"class":258},[100,21752,472],{"class":471},[100,21754,21136],{"class":106},[100,21756,7232],{"class":258},[100,21758,21759,21761,21763,21765,21767,21769,21771,21773,21775,21777],{"class":102,"line":11385},[100,21760,8125],{"class":258},[100,21762,2810],{"class":471},[100,21764,3283],{"class":258},[100,21766,1784],{"class":471},[100,21768,8114],{"class":471},[100,21770,2196],{"class":258},[100,21772,2120],{"class":471},[100,21774,13030],{"class":258},[100,21776,2810],{"class":471},[100,21778,10426],{"class":258},[100,21780,21781],{"class":102,"line":11394},[100,21782,3197],{"class":258},[100,21784,21785],{"class":102,"line":11399},[100,21786,570],{"emptyLinePlaceholder":569},[100,21788,21789],{"class":102,"line":11405},[100,21790,570],{"emptyLinePlaceholder":569},[100,21792,21793,21795,21797],{"class":102,"line":11426},[100,21794,1784],{"class":471},[100,21796,786],{"class":106},[100,21798,12435],{"class":258},[100,21800,21801],{"class":102,"line":11432},[100,21802,570],{"emptyLinePlaceholder":569},[100,21804,21805],{"class":102,"line":11446},[100,21806,21807],{"class":1836},"    \u002F\u002Ftest01();\n",[100,21809,21810],{"class":102,"line":11452},[100,21811,21812],{"class":1836},"    \u002F\u002Ftest02();\n",[100,21814,21815,21817],{"class":102,"line":11479},[100,21816,21272],{"class":106},[100,21818,7232],{"class":258},[100,21820,21821],{"class":102,"line":11488},[100,21822,570],{"emptyLinePlaceholder":569},[100,21824,21825,21827,21829,21831],{"class":102,"line":11494},[100,21826,3914],{"class":106},[100,21828,713],{"class":258},[100,21830,3919],{"class":110},[100,21832,4321],{"class":258},[100,21834,21835],{"class":102,"line":11502},[100,21836,570],{"emptyLinePlaceholder":569},[100,21838,21839,21841,21843],{"class":102,"line":11507},[100,21840,5689],{"class":471},[100,21842,5692],{"class":117},[100,21844,2927],{"class":258},[100,21846,21847],{"class":102,"line":18185},[100,21848,3197],{"class":258},[305,21850,21852],{"id":21851},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,21854,21855],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,21857,21858],{},"1．默认构造函数(无参，函数体为空)",[19,21860,21861],{},"2．默认析构函数(无参，函数体为空)",[19,21863,21864],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,21866,21867],{},"构造函数调用规则如下：",[2773,21869,21870,21873],{},[29,21871,21872],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[29,21874,21875],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[73,21877,21879],{"className":1770,"code":21878,"language":1772,"meta":79,"style":79},"class Person {\npublic:\n    \u002F\u002F无参（默认）构造函数\n    Person() {\n        cout \u003C\u003C \"无参构造函数!\" \u003C\u003C endl;\n    }\n    \u002F\u002F有参构造函数\n    Person(int a) {\n        age = a;\n        cout \u003C\u003C \"有参构造函数!\" \u003C\u003C endl;\n    }\n    \u002F\u002F拷贝构造函数\n    Person(const Person& p) {\n        age = p.age;\n        cout \u003C\u003C \"拷贝构造函数!\" \u003C\u003C endl;\n    }\n    \u002F\u002F析构函数\n    ~Person() {\n        cout \u003C\u003C \"析构函数!\" \u003C\u003C endl;\n    }\npublic:\n    int age;\n};\n\nvoid test01()\n{\n    Person p1(18);\n    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n    Person p2(p1);\n\n    cout \u003C\u003C \"p2的年龄为： \" \u003C\u003C p2.age \u003C\u003C endl;\n}\n\nvoid test02()\n{\n    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n    Person p1; \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n    Person p2(10); \u002F\u002F用户提供的有参\n    Person p3(p2); \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n\n    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n    Person p4; \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n    Person p5(10); \u002F\u002F此时如果用户自己没有提供有参，会出错\n    Person p6(p5); \u002F\u002F用户自己提供拷贝构造\n}\n\nint main() {\n\n    test01();\n\n    system(\"pause\");\n\n    return 0;\n}\n",[32,21880,21881,21889,21893,21898,21904,21916,21920,21925,21937,21946,21958,21962,21966,21982,21991,22003,22007,22011,22017,22029,22033,22037,22043,22047,22051,22059,22063,22075,22080,22088,22092,22110,22114,22118,22126,22130,22135,22143,22158,22171,22175,22180,22187,22203,22216,22220,22224,22232,22236,22242,22246,22256,22260,22268],{"__ignoreMap":79},[100,21882,21883,21885,21887],{"class":102,"line":103},[100,21884,16275],{"class":471},[100,21886,17150],{"class":106},[100,21888,17153],{"class":258},[100,21890,21891],{"class":102,"line":188},[100,21892,16297],{"class":471},[100,21894,21895],{"class":102,"line":199},[100,21896,21897],{"class":1836},"    \u002F\u002F无参（默认）构造函数\n",[100,21899,21900,21902],{"class":102,"line":532},[100,21901,20100],{"class":106},[100,21903,12435],{"class":258},[100,21905,21906,21908,21910,21912,21914],{"class":102,"line":577},[100,21907,11254],{"class":258},[100,21909,2810],{"class":471},[100,21911,21391],{"class":110},[100,21913,3077],{"class":471},[100,21915,10426],{"class":258},[100,21917,21918],{"class":102,"line":589},[100,21919,3798],{"class":258},[100,21921,21922],{"class":102,"line":595},[100,21923,21924],{"class":1836},"    \u002F\u002F有参构造函数\n",[100,21926,21927,21929,21931,21933,21935],{"class":102,"line":601},[100,21928,20100],{"class":106},[100,21930,713],{"class":258},[100,21932,1784],{"class":471},[100,21934,3031],{"class":6812},[100,21936,14024],{"class":258},[100,21938,21939,21942,21944],{"class":102,"line":606},[100,21940,21941],{"class":258},"        age ",[100,21943,472],{"class":471},[100,21945,3065],{"class":258},[100,21947,21948,21950,21952,21954,21956],{"class":102,"line":612},[100,21949,11254],{"class":258},[100,21951,2810],{"class":471},[100,21953,21431],{"class":110},[100,21955,3077],{"class":471},[100,21957,10426],{"class":258},[100,21959,21960],{"class":102,"line":618},[100,21961,3798],{"class":258},[100,21963,21964],{"class":102,"line":623},[100,21965,20455],{"class":1836},[100,21967,21968,21970,21972,21974,21976,21978,21980],{"class":102,"line":629},[100,21969,20100],{"class":106},[100,21971,713],{"class":258},[100,21973,8388],{"class":471},[100,21975,17150],{"class":106},[100,21977,2120],{"class":471},[100,21979,8421],{"class":6812},[100,21981,14024],{"class":258},[100,21983,21984,21986,21988],{"class":102,"line":635},[100,21985,21941],{"class":258},[100,21987,472],{"class":471},[100,21989,21990],{"class":258}," p.age;\n",[100,21992,21993,21995,21997,21999,22001],{"class":102,"line":641},[100,21994,11254],{"class":258},[100,21996,2810],{"class":471},[100,21998,21472],{"class":110},[100,22000,3077],{"class":471},[100,22002,10426],{"class":258},[100,22004,22005],{"class":102,"line":647},[100,22006,3798],{"class":258},[100,22008,22009],{"class":102,"line":653},[100,22010,20128],{"class":1836},[100,22012,22013,22015],{"class":102,"line":659},[100,22014,20133],{"class":106},[100,22016,12435],{"class":258},[100,22018,22019,22021,22023,22025,22027],{"class":102,"line":665},[100,22020,11254],{"class":258},[100,22022,2810],{"class":471},[100,22024,21509],{"class":110},[100,22026,3077],{"class":471},[100,22028,10426],{"class":258},[100,22030,22031],{"class":102,"line":670},[100,22032,3798],{"class":258},[100,22034,22035],{"class":102,"line":675},[100,22036,16297],{"class":471},[100,22038,22039,22041],{"class":102,"line":699},[100,22040,3596],{"class":471},[100,22042,9393],{"class":258},[100,22044,22045],{"class":102,"line":708},[100,22046,5594],{"class":258},[100,22048,22049],{"class":102,"line":722},[100,22050,570],{"emptyLinePlaceholder":569},[100,22052,22053,22055,22057],{"class":102,"line":735},[100,22054,6960],{"class":471},[100,22056,7184],{"class":106},[100,22058,3587],{"class":258},[100,22060,22061],{"class":102,"line":754},[100,22062,3178],{"class":258},[100,22064,22065,22067,22069,22071,22073],{"class":102,"line":771},[100,22066,21012],{"class":258},[100,22068,8726],{"class":106},[100,22070,713],{"class":258},[100,22072,2417],{"class":117},[100,22074,4321],{"class":258},[100,22076,22077],{"class":102,"line":776},[100,22078,22079],{"class":1836},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[100,22081,22082,22084,22086],{"class":102,"line":781},[100,22083,21012],{"class":258},[100,22085,8629],{"class":106},[100,22087,19096],{"class":258},[100,22089,22090],{"class":102,"line":796},[100,22091,570],{"emptyLinePlaceholder":569},[100,22093,22094,22096,22098,22101,22103,22106,22108],{"class":102,"line":812},[100,22095,8125],{"class":258},[100,22097,2810],{"class":471},[100,22099,22100],{"class":110}," \"p2的年龄为： \"",[100,22102,3077],{"class":471},[100,22104,22105],{"class":258}," p2.age ",[100,22107,2810],{"class":471},[100,22109,10426],{"class":258},[100,22111,22112],{"class":102,"line":823},[100,22113,3197],{"class":258},[100,22115,22116],{"class":102,"line":828},[100,22117,570],{"emptyLinePlaceholder":569},[100,22119,22120,22122,22124],{"class":102,"line":840},[100,22121,6960],{"class":471},[100,22123,7253],{"class":106},[100,22125,3587],{"class":258},[100,22127,22128],{"class":102,"line":845},[100,22129,3178],{"class":258},[100,22131,22132],{"class":102,"line":868},[100,22133,22134],{"class":1836},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[100,22136,22137,22140],{"class":102,"line":874},[100,22138,22139],{"class":258},"    Person p1;",[100,22141,22142],{"class":1836}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[100,22144,22145,22147,22149,22151,22153,22155],{"class":102,"line":879},[100,22146,21012],{"class":258},[100,22148,8629],{"class":106},[100,22150,713],{"class":258},[100,22152,2213],{"class":117},[100,22154,7562],{"class":258},[100,22156,22157],{"class":1836}," \u002F\u002F用户提供的有参\n",[100,22159,22160,22162,22165,22168],{"class":102,"line":889},[100,22161,21012],{"class":258},[100,22163,22164],{"class":106},"p3",[100,22166,22167],{"class":258},"(p2);",[100,22169,22170],{"class":1836}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[100,22172,22173],{"class":102,"line":894},[100,22174,570],{"emptyLinePlaceholder":569},[100,22176,22177],{"class":102,"line":900},[100,22178,22179],{"class":1836},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[100,22181,22182,22185],{"class":102,"line":910},[100,22183,22184],{"class":258},"    Person p4;",[100,22186,22142],{"class":1836},[100,22188,22189,22191,22194,22196,22198,22200],{"class":102,"line":915},[100,22190,21012],{"class":258},[100,22192,22193],{"class":106},"p5",[100,22195,713],{"class":258},[100,22197,2213],{"class":117},[100,22199,7562],{"class":258},[100,22201,22202],{"class":1836}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[100,22204,22205,22207,22210,22213],{"class":102,"line":929},[100,22206,21012],{"class":258},[100,22208,22209],{"class":106},"p6",[100,22211,22212],{"class":258},"(p5);",[100,22214,22215],{"class":1836}," \u002F\u002F用户自己提供拷贝构造\n",[100,22217,22218],{"class":102,"line":935},[100,22219,3197],{"class":258},[100,22221,22222],{"class":102,"line":945},[100,22223,570],{"emptyLinePlaceholder":569},[100,22225,22226,22228,22230],{"class":102,"line":950},[100,22227,1784],{"class":471},[100,22229,786],{"class":106},[100,22231,12435],{"class":258},[100,22233,22234],{"class":102,"line":955},[100,22235,570],{"emptyLinePlaceholder":569},[100,22237,22238,22240],{"class":102,"line":972},[100,22239,7229],{"class":106},[100,22241,7232],{"class":258},[100,22243,22244],{"class":102,"line":11370},[100,22245,570],{"emptyLinePlaceholder":569},[100,22247,22248,22250,22252,22254],{"class":102,"line":11375},[100,22249,3914],{"class":106},[100,22251,713],{"class":258},[100,22253,3919],{"class":110},[100,22255,4321],{"class":258},[100,22257,22258],{"class":102,"line":11380},[100,22259,570],{"emptyLinePlaceholder":569},[100,22261,22262,22264,22266],{"class":102,"line":11385},[100,22263,5689],{"class":471},[100,22265,5692],{"class":117},[100,22267,2927],{"class":258},[100,22269,22270],{"class":102,"line":11394},[100,22271,3197],{"class":258},[305,22273,22275],{"id":22274},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,22277,22278],{},"浅拷贝：简单的赋值拷贝操作",[19,22280,22281],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[73,22283,22285],{"className":1770,"code":22284,"language":1772,"meta":79,"style":79},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\npublic:\n    \u002F\u002F默认构造函数\n    Person()\n    {\n        cout\u003C\u003C\"默认构造函数\"\u003C\u003Cendl;\n    }\n    \u002F\u002F有参构造函数\n    ~Person(int age,int height)\n    {\n        m_Age=age;\n        m_Height=new int(height);\u002F\u002F放到堆区\n        cout\u003C\u003C\"有参构造函数\"\u003C\u003Cendl;\n    }\n    \u002F\u002F深拷贝解决上述问题\n    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n    Person(const Person &p)\n    {\n        cout\u003C\u003C\"拷贝构造函数\"\u003C\u003Cendl;\n        \u002F\u002F编译器默认的写如下注释部分\n        \u002F\u002Fm_Age=p.m_Age;\n        \u002F\u002Fm_Height=p.m_Height;\n        m_Age=p.m_Age;\n        \u002F\u002F深拷贝操作\n        m_Height=new int(*p.m_Height);\n    }\n\n    \u002F\u002F析构函数\n    ~Person()\n    {\n        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n        if(m_Height != NULL)\n        {\n            delete m_Height; \u002F\u002F释放堆区内存\n            m_Height=NULL; \u002F\u002F防止野指针\n        }\n        cout\u003C\u003C\"Person的析构函数调用\"\n    }\n    int m_Age;\n    int *m_Height; \u002F\u002F定义一个指针，指向身高\n};\nvoid test01()\n{\n    Person p1(18,160);\n    cout\u003C\u003C\"p1的年龄为:\"\u003C\u003Cp1.m_Age\u003C\u003C\"身高为：\"\u003C\u003C*p1.m_Height\u003C\u003Cendl;  \u002F\u002F18\n    Person p2(p1);\n    cout\u003C\u003C\"p2的年龄为：\"\u003C\u003Cp2.m_Age\u003C\u003C\"身高为：\"\u003C\u003C*p2.m_Height\u003C\u003Cendl;  \u002F\u002F18\n    \n}\nint main()\n{\n    test01();\n}\n",[32,22286,22287,22293,22303,22309,22313,22317,22322,22328,22332,22345,22349,22353,22360,22364,22374,22389,22402,22406,22411,22416,22432,22436,22449,22454,22459,22464,22473,22478,22493,22497,22501,22505,22511,22515,22520,22535,22539,22550,22564,22568,22577,22581,22587,22599,22603,22611,22615,22632,22663,22671,22699,22703,22707,22715,22719,22725],{"__ignoreMap":79},[100,22288,22289,22291],{"class":102,"line":103},[100,22290,3562],{"class":471},[100,22292,3565],{"class":110},[100,22294,22295,22297,22299,22301],{"class":102,"line":188},[100,22296,3570],{"class":471},[100,22298,3573],{"class":471},[100,22300,3576],{"class":106},[100,22302,2927],{"class":258},[100,22304,22305,22307],{"class":102,"line":199},[100,22306,16275],{"class":471},[100,22308,16752],{"class":106},[100,22310,22311],{"class":102,"line":532},[100,22312,3178],{"class":258},[100,22314,22315],{"class":102,"line":577},[100,22316,16297],{"class":471},[100,22318,22319],{"class":102,"line":589},[100,22320,22321],{"class":1836},"    \u002F\u002F默认构造函数\n",[100,22323,22324,22326],{"class":102,"line":595},[100,22325,20100],{"class":106},[100,22327,3587],{"class":258},[100,22329,22330],{"class":102,"line":601},[100,22331,3641],{"class":258},[100,22333,22334,22336,22338,22341,22343],{"class":102,"line":606},[100,22335,5051],{"class":258},[100,22337,2810],{"class":471},[100,22339,22340],{"class":110},"\"默认构造函数\"",[100,22342,2810],{"class":471},[100,22344,2832],{"class":258},[100,22346,22347],{"class":102,"line":612},[100,22348,3798],{"class":258},[100,22350,22351],{"class":102,"line":618},[100,22352,21924],{"class":1836},[100,22354,22355,22357],{"class":102,"line":623},[100,22356,20133],{"class":106},[100,22358,22359],{"class":258},"(int age,int height)\n",[100,22361,22362],{"class":102,"line":629},[100,22363,3641],{"class":258},[100,22365,22366,22369,22371],{"class":102,"line":635},[100,22367,22368],{"class":258},"        m_Age",[100,22370,472],{"class":471},[100,22372,22373],{"class":258},"age;\n",[100,22375,22376,22379,22381,22383,22386],{"class":102,"line":641},[100,22377,22378],{"class":258},"        m_Height",[100,22380,13299],{"class":471},[100,22382,3993],{"class":471},[100,22384,22385],{"class":258},"(height);",[100,22387,22388],{"class":1836},"\u002F\u002F放到堆区\n",[100,22390,22391,22393,22395,22398,22400],{"class":102,"line":647},[100,22392,5051],{"class":258},[100,22394,2810],{"class":471},[100,22396,22397],{"class":110},"\"有参构造函数\"",[100,22399,2810],{"class":471},[100,22401,2832],{"class":258},[100,22403,22404],{"class":102,"line":653},[100,22405,3798],{"class":258},[100,22407,22408],{"class":102,"line":659},[100,22409,22410],{"class":1836},"    \u002F\u002F深拷贝解决上述问题\n",[100,22412,22413],{"class":102,"line":665},[100,22414,22415],{"class":1836},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[100,22417,22418,22420,22422,22424,22426,22428,22430],{"class":102,"line":670},[100,22419,20100],{"class":106},[100,22421,713],{"class":258},[100,22423,8388],{"class":471},[100,22425,17150],{"class":106},[100,22427,12166],{"class":471},[100,22429,19],{"class":6812},[100,22431,809],{"class":258},[100,22433,22434],{"class":102,"line":675},[100,22435,3641],{"class":258},[100,22437,22438,22440,22442,22445,22447],{"class":102,"line":699},[100,22439,5051],{"class":258},[100,22441,2810],{"class":471},[100,22443,22444],{"class":110},"\"拷贝构造函数\"",[100,22446,2810],{"class":471},[100,22448,2832],{"class":258},[100,22450,22451],{"class":102,"line":708},[100,22452,22453],{"class":1836},"        \u002F\u002F编译器默认的写如下注释部分\n",[100,22455,22456],{"class":102,"line":722},[100,22457,22458],{"class":1836},"        \u002F\u002Fm_Age=p.m_Age;\n",[100,22460,22461],{"class":102,"line":735},[100,22462,22463],{"class":1836},"        \u002F\u002Fm_Height=p.m_Height;\n",[100,22465,22466,22468,22470],{"class":102,"line":754},[100,22467,22368],{"class":258},[100,22469,472],{"class":471},[100,22471,22472],{"class":258},"p.m_Age;\n",[100,22474,22475],{"class":102,"line":771},[100,22476,22477],{"class":1836},"        \u002F\u002F深拷贝操作\n",[100,22479,22480,22482,22484,22486,22488,22490],{"class":102,"line":776},[100,22481,22378],{"class":258},[100,22483,13299],{"class":471},[100,22485,3993],{"class":471},[100,22487,713],{"class":258},[100,22489,2222],{"class":471},[100,22491,22492],{"class":258},"p.m_Height);\n",[100,22494,22495],{"class":102,"line":781},[100,22496,3798],{"class":258},[100,22498,22499],{"class":102,"line":796},[100,22500,570],{"emptyLinePlaceholder":569},[100,22502,22503],{"class":102,"line":812},[100,22504,20128],{"class":1836},[100,22506,22507,22509],{"class":102,"line":823},[100,22508,20133],{"class":106},[100,22510,3587],{"class":258},[100,22512,22513],{"class":102,"line":828},[100,22514,3641],{"class":258},[100,22516,22517],{"class":102,"line":840},[100,22518,22519],{"class":1836},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[100,22521,22522,22524,22527,22530,22533],{"class":102,"line":845},[100,22523,4106],{"class":471},[100,22525,22526],{"class":258},"(m_Height ",[100,22528,22529],{"class":471},"!=",[100,22531,22532],{"class":117}," NULL",[100,22534,809],{"class":258},[100,22536,22537],{"class":102,"line":868},[100,22538,4119],{"class":258},[100,22540,22541,22544,22547],{"class":102,"line":874},[100,22542,22543],{"class":471},"            delete",[100,22545,22546],{"class":258}," m_Height;",[100,22548,22549],{"class":1836}," \u002F\u002F释放堆区内存\n",[100,22551,22552,22555,22557,22559,22561],{"class":102,"line":879},[100,22553,22554],{"class":258},"            m_Height",[100,22556,472],{"class":471},[100,22558,4002],{"class":117},[100,22560,1833],{"class":258},[100,22562,22563],{"class":1836}," \u002F\u002F防止野指针\n",[100,22565,22566],{"class":102,"line":889},[100,22567,4138],{"class":258},[100,22569,22570,22572,22574],{"class":102,"line":894},[100,22571,5051],{"class":258},[100,22573,2810],{"class":471},[100,22575,22576],{"class":110},"\"Person的析构函数调用\"\n",[100,22578,22579],{"class":102,"line":900},[100,22580,3798],{"class":258},[100,22582,22583,22585],{"class":102,"line":910},[100,22584,3596],{"class":471},[100,22586,17247],{"class":258},[100,22588,22589,22591,22593,22596],{"class":102,"line":915},[100,22590,3596],{"class":471},[100,22592,8114],{"class":471},[100,22594,22595],{"class":258},"m_Height;",[100,22597,22598],{"class":1836}," \u002F\u002F定义一个指针，指向身高\n",[100,22600,22601],{"class":102,"line":929},[100,22602,5594],{"class":258},[100,22604,22605,22607,22609],{"class":102,"line":935},[100,22606,6960],{"class":471},[100,22608,7184],{"class":106},[100,22610,3587],{"class":258},[100,22612,22613],{"class":102,"line":945},[100,22614,3178],{"class":258},[100,22616,22617,22619,22621,22623,22625,22627,22630],{"class":102,"line":950},[100,22618,21012],{"class":258},[100,22620,8726],{"class":106},[100,22622,713],{"class":258},[100,22624,2417],{"class":117},[100,22626,2145],{"class":258},[100,22628,22629],{"class":117},"160",[100,22631,4321],{"class":258},[100,22633,22634,22636,22638,22641,22643,22646,22648,22651,22653,22656,22658,22660],{"class":102,"line":955},[100,22635,3183],{"class":258},[100,22637,2810],{"class":471},[100,22639,22640],{"class":110},"\"p1的年龄为:\"",[100,22642,2810],{"class":471},[100,22644,22645],{"class":258},"p1.m_Age",[100,22647,2810],{"class":471},[100,22649,22650],{"class":110},"\"身高为：\"",[100,22652,8015],{"class":471},[100,22654,22655],{"class":258},"p1.m_Height",[100,22657,2810],{"class":471},[100,22659,2875],{"class":258},[100,22661,22662],{"class":1836},"  \u002F\u002F18\n",[100,22664,22665,22667,22669],{"class":102,"line":972},[100,22666,21012],{"class":258},[100,22668,8629],{"class":106},[100,22670,19096],{"class":258},[100,22672,22673,22675,22677,22680,22682,22684,22686,22688,22690,22693,22695,22697],{"class":102,"line":11370},[100,22674,3183],{"class":258},[100,22676,2810],{"class":471},[100,22678,22679],{"class":110},"\"p2的年龄为：\"",[100,22681,2810],{"class":471},[100,22683,21042],{"class":258},[100,22685,2810],{"class":471},[100,22687,22650],{"class":110},[100,22689,8015],{"class":471},[100,22691,22692],{"class":258},"p2.m_Height",[100,22694,2810],{"class":471},[100,22696,2875],{"class":258},[100,22698,22662],{"class":1836},[100,22700,22701],{"class":102,"line":11375},[100,22702,14792],{"class":258},[100,22704,22705],{"class":102,"line":11380},[100,22706,3197],{"class":258},[100,22708,22709,22711,22713],{"class":102,"line":11385},[100,22710,1784],{"class":471},[100,22712,786],{"class":106},[100,22714,3587],{"class":258},[100,22716,22717],{"class":102,"line":11394},[100,22718,3178],{"class":258},[100,22720,22721,22723],{"class":102,"line":11399},[100,22722,7229],{"class":106},[100,22724,7232],{"class":258},[100,22726,22727],{"class":102,"line":11405},[100,22728,3197],{"class":258},[19,22730,22731],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,22733,22734],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,22736,22737],{},[3095,22738],{"alt":79,"src":22739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,22741,22742],{},"浅拷贝问题要使用深拷贝来解决",[19,22744,22745],{},[3095,22746],{"alt":79,"src":22747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,22749,22750],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[305,22752,22754],{"id":22753},"_826初始化列表","8.2.6初始化列表",[19,22756,22757],{},"作用：初始化属性",[19,22759,6779],{},[73,22761,22764],{"className":22762,"code":22763,"language":78},[76],"构造函数():属性1(值1),属性2(值2).....{}\n",[32,22765,22763],{"__ignoreMap":79},[19,22767,22768],{},"例子",[73,22770,22772],{"className":1770,"code":22771,"language":1772,"meta":79,"style":79},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\n    public:\n\n    \u002F\u002F\u002F\u002F传统方式初始化\n    \u002F\u002FPerson(int a, int b, int c) {\n    \u002F\u002F  m_A = a;\n    \u002F\u002F  m_B = b;\n    \u002F\u002F  m_C = c;\n    \u002F\u002F}\n\n    \u002F\u002F初始化列表方式初始化\n    \u002F\u002F使用有参构造函数\n    Person(int a, int b, int c) :m_A(a), m_B(b), m_C(c) {}\n    void PrintPerson() {\n        cout \u003C\u003C \"mA:\" \u003C\u003C m_A \u003C\u003C endl;\n        cout \u003C\u003C \"mB:\" \u003C\u003C m_B \u003C\u003C endl;\n        cout \u003C\u003C \"mC:\" \u003C\u003C m_C \u003C\u003C endl;\n    }\nprivate:\n    int m_A;\n    int m_B;\n    int m_C;\n};\n\nint main() \n{\n\n    Person p(1, 2, 3);\n    p.PrintPerson();\n\n\n    system(\"pause\");\n\n    return 0;\n}\n",[32,22773,22774,22780,22790,22796,22800,22805,22809,22814,22819,22824,22829,22834,22839,22843,22848,22853,22896,22905,22923,22941,22959,22963,22967,22974,22981,22988,22992,22996,23004,23008,23012,23032,23041,23045,23049,23059,23063,23071],{"__ignoreMap":79},[100,22775,22776,22778],{"class":102,"line":103},[100,22777,3562],{"class":471},[100,22779,3565],{"class":110},[100,22781,22782,22784,22786,22788],{"class":102,"line":188},[100,22783,3570],{"class":471},[100,22785,3573],{"class":471},[100,22787,3576],{"class":106},[100,22789,2927],{"class":258},[100,22791,22792,22794],{"class":102,"line":199},[100,22793,16275],{"class":471},[100,22795,16752],{"class":106},[100,22797,22798],{"class":102,"line":532},[100,22799,3178],{"class":258},[100,22801,22802],{"class":102,"line":577},[100,22803,22804],{"class":471},"    public:\n",[100,22806,22807],{"class":102,"line":589},[100,22808,570],{"emptyLinePlaceholder":569},[100,22810,22811],{"class":102,"line":595},[100,22812,22813],{"class":1836},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[100,22815,22816],{"class":102,"line":601},[100,22817,22818],{"class":1836},"    \u002F\u002FPerson(int a, int b, int c) {\n",[100,22820,22821],{"class":102,"line":606},[100,22822,22823],{"class":1836},"    \u002F\u002F  m_A = a;\n",[100,22825,22826],{"class":102,"line":612},[100,22827,22828],{"class":1836},"    \u002F\u002F  m_B = b;\n",[100,22830,22831],{"class":102,"line":618},[100,22832,22833],{"class":1836},"    \u002F\u002F  m_C = c;\n",[100,22835,22836],{"class":102,"line":623},[100,22837,22838],{"class":1836},"    \u002F\u002F}\n",[100,22840,22841],{"class":102,"line":629},[100,22842,570],{"emptyLinePlaceholder":569},[100,22844,22845],{"class":102,"line":635},[100,22846,22847],{"class":1836},"    \u002F\u002F初始化列表方式初始化\n",[100,22849,22850],{"class":102,"line":641},[100,22851,22852],{"class":1836},"    \u002F\u002F使用有参构造函数\n",[100,22854,22855,22857,22859,22861,22863,22865,22867,22869,22871,22873,22875,22878,22881,22884,22887,22890,22893],{"class":102,"line":647},[100,22856,20100],{"class":106},[100,22858,713],{"class":258},[100,22860,1784],{"class":471},[100,22862,3031],{"class":6812},[100,22864,14017],{"class":258},[100,22866,1784],{"class":471},[100,22868,4435],{"class":6812},[100,22870,14017],{"class":258},[100,22872,1784],{"class":471},[100,22874,4451],{"class":6812},[100,22876,22877],{"class":258},") :",[100,22879,22880],{"class":106},"m_A",[100,22882,22883],{"class":258},"(a), ",[100,22885,22886],{"class":106},"m_B",[100,22888,22889],{"class":258},"(b), ",[100,22891,22892],{"class":106},"m_C",[100,22894,22895],{"class":258},"(c) {}\n",[100,22897,22898,22900,22903],{"class":102,"line":653},[100,22899,16490],{"class":471},[100,22901,22902],{"class":106}," PrintPerson",[100,22904,12435],{"class":258},[100,22906,22907,22909,22911,22914,22916,22919,22921],{"class":102,"line":659},[100,22908,11254],{"class":258},[100,22910,2810],{"class":471},[100,22912,22913],{"class":110}," \"mA:\"",[100,22915,3077],{"class":471},[100,22917,22918],{"class":258}," m_A ",[100,22920,2810],{"class":471},[100,22922,10426],{"class":258},[100,22924,22925,22927,22929,22932,22934,22937,22939],{"class":102,"line":665},[100,22926,11254],{"class":258},[100,22928,2810],{"class":471},[100,22930,22931],{"class":110}," \"mB:\"",[100,22933,3077],{"class":471},[100,22935,22936],{"class":258}," m_B ",[100,22938,2810],{"class":471},[100,22940,10426],{"class":258},[100,22942,22943,22945,22947,22950,22952,22955,22957],{"class":102,"line":670},[100,22944,11254],{"class":258},[100,22946,2810],{"class":471},[100,22948,22949],{"class":110}," \"mC:\"",[100,22951,3077],{"class":471},[100,22953,22954],{"class":258}," m_C ",[100,22956,2810],{"class":471},[100,22958,10426],{"class":258},[100,22960,22961],{"class":102,"line":675},[100,22962,3798],{"class":258},[100,22964,22965],{"class":102,"line":699},[100,22966,16803],{"class":471},[100,22968,22969,22971],{"class":102,"line":708},[100,22970,3596],{"class":471},[100,22972,22973],{"class":258}," m_A;\n",[100,22975,22976,22978],{"class":102,"line":722},[100,22977,3596],{"class":471},[100,22979,22980],{"class":258}," m_B;\n",[100,22982,22983,22985],{"class":102,"line":735},[100,22984,3596],{"class":471},[100,22986,22987],{"class":258}," m_C;\n",[100,22989,22990],{"class":102,"line":754},[100,22991,5594],{"class":258},[100,22993,22994],{"class":102,"line":771},[100,22995,570],{"emptyLinePlaceholder":569},[100,22997,22998,23000,23002],{"class":102,"line":776},[100,22999,1784],{"class":471},[100,23001,786],{"class":106},[100,23003,7574],{"class":258},[100,23005,23006],{"class":102,"line":781},[100,23007,3178],{"class":258},[100,23009,23010],{"class":102,"line":796},[100,23011,570],{"emptyLinePlaceholder":569},[100,23013,23014,23016,23018,23020,23022,23024,23026,23028,23030],{"class":102,"line":812},[100,23015,21012],{"class":258},[100,23017,19],{"class":106},[100,23019,713],{"class":258},[100,23021,1985],{"class":117},[100,23023,14017],{"class":258},[100,23025,465],{"class":117},[100,23027,14017],{"class":258},[100,23029,1849],{"class":117},[100,23031,4321],{"class":258},[100,23033,23034,23036,23039],{"class":102,"line":823},[100,23035,17447],{"class":258},[100,23037,23038],{"class":106},"PrintPerson",[100,23040,7232],{"class":258},[100,23042,23043],{"class":102,"line":828},[100,23044,570],{"emptyLinePlaceholder":569},[100,23046,23047],{"class":102,"line":840},[100,23048,570],{"emptyLinePlaceholder":569},[100,23050,23051,23053,23055,23057],{"class":102,"line":845},[100,23052,3914],{"class":106},[100,23054,713],{"class":258},[100,23056,3919],{"class":110},[100,23058,4321],{"class":258},[100,23060,23061],{"class":102,"line":868},[100,23062,570],{"emptyLinePlaceholder":569},[100,23064,23065,23067,23069],{"class":102,"line":874},[100,23066,5689],{"class":471},[100,23068,5692],{"class":117},[100,23070,2927],{"class":258},[100,23072,23073],{"class":102,"line":879},[100,23074,3197],{"class":258},[19,23076,23077,23078,23081,23082],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[1921,23079,23080],{},"参数名就是定义的对象属性","，",[1921,23083,23084],{},"属性后面的值为有参构造函数的形参",[73,23086,23088],{"className":1770,"code":23087,"language":1772,"meta":79,"style":79},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[32,23089,23090],{"__ignoreMap":79},[100,23091,23092,23094,23096,23098,23101,23103,23106,23108,23111,23113,23116,23118,23121,23123],{"class":102,"line":103},[100,23093,20627],{"class":106},[100,23095,713],{"class":258},[100,23097,1784],{"class":471},[100,23099,23100],{"class":258}," a.",[100,23102,1784],{"class":471},[100,23104,23105],{"class":258}," b,",[100,23107,1784],{"class":471},[100,23109,23110],{"class":258}," b):",[100,23112,22880],{"class":106},[100,23114,23115],{"class":258},"(a),",[100,23117,22886],{"class":106},[100,23119,23120],{"class":258},"(c),",[100,23122,22892],{"class":106},[100,23124,23125],{"class":258},"(b) {}\n",[305,23127,23129],{"id":23128},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,23131,23132],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,23134,16214],{},[73,23136,23138],{"className":1770,"code":23137,"language":1772,"meta":79,"style":79},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[32,23139,23140,23145,23150,23154,23159,23163],{"__ignoreMap":79},[100,23141,23142],{"class":102,"line":103},[100,23143,23144],{"class":258},"A{};\n",[100,23146,23147],{"class":102,"line":188},[100,23148,23149],{"class":258},"B\n",[100,23151,23152],{"class":102,"line":199},[100,23153,3178],{"class":258},[100,23155,23156],{"class":102,"line":532},[100,23157,23158],{"class":258},"    A a;\n",[100,23160,23161],{"class":102,"line":577},[100,23162,3197],{"class":258},[100,23164,23165],{"class":102,"line":589},[100,23166,23167],{"class":1836},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,23169,23170],{},"案例",[73,23172,23174],{"className":1770,"code":23173,"language":1772,"meta":79,"style":79},"\u002F\u002Fphone这个对象作为Person这个类的类成员\nclass Phone\n{\npublic：\n    \u002F\u002F 赋值(构造函数)\n    Phone(string pName)\n    {\n        m_pName=pName;\n        cout\u003C\u003C\"Phone的构造函数调用\";\n    }\n    ~Phone()\n    {\n        cout\u003C\u003C\"Phone析构函数调用\"\u003C\u003Cendl;\n    }\n    \u002F\u002F\n    string m_PName;\n};\nclass Person\n{\npublic:\n    \u002F\u002F赋值\n    Person(string name,string pname):m_name(name),m_phone.m_PName(pname) \n    {\n        cout\u003C\u003C\"Person的构造函数调用\";\n    }\n    ~Person()\n    {\n        cout\u003C\u003C\"Person析构函数调用\"\u003C\u003Cendl;\n    }\n    \u002F\u002F姓名\n    string m_name;\n    \u002F\u002F手机\n    Phone m_Phone;\n};\nvoid test01()\n{\n    Person p(\"张三\",\"安卓\");\n    cout\u003C\u003Cp.Name\u003C\u003C\"拿着：\"\u003C\u003Cp.m_phone.m_PName;\n}\nint main()\n{\n    test01();\n}\n",[32,23175,23176,23181,23188,23192,23197,23202,23216,23220,23230,23241,23245,23252,23256,23269,23273,23278,23283,23287,23293,23297,23301,23305,23336,23340,23351,23355,23361,23365,23378,23382,23386,23390,23395,23400,23404,23412,23416,23433,23452,23456,23464,23468,23474],{"__ignoreMap":79},[100,23177,23178],{"class":102,"line":103},[100,23179,23180],{"class":1836},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[100,23182,23183,23185],{"class":102,"line":188},[100,23184,16275],{"class":471},[100,23186,23187],{"class":106}," Phone\n",[100,23189,23190],{"class":102,"line":199},[100,23191,3178],{"class":258},[100,23193,23194],{"class":102,"line":532},[100,23195,23196],{"class":258},"public：\n",[100,23198,23199],{"class":102,"line":577},[100,23200,23201],{"class":1836},"    \u002F\u002F 赋值(构造函数)\n",[100,23203,23204,23207,23209,23211,23214],{"class":102,"line":589},[100,23205,23206],{"class":106},"    Phone",[100,23208,713],{"class":258},[100,23210,16498],{"class":106},[100,23212,23213],{"class":6812}," pName",[100,23215,809],{"class":258},[100,23217,23218],{"class":102,"line":595},[100,23219,3641],{"class":258},[100,23221,23222,23225,23227],{"class":102,"line":601},[100,23223,23224],{"class":258},"        m_pName",[100,23226,472],{"class":471},[100,23228,23229],{"class":258},"pName;\n",[100,23231,23232,23234,23236,23239],{"class":102,"line":606},[100,23233,5051],{"class":258},[100,23235,2810],{"class":471},[100,23237,23238],{"class":110},"\"Phone的构造函数调用\"",[100,23240,2927],{"class":258},[100,23242,23243],{"class":102,"line":612},[100,23244,3798],{"class":258},[100,23246,23247,23250],{"class":102,"line":618},[100,23248,23249],{"class":106},"    ~Phone",[100,23251,3587],{"class":258},[100,23253,23254],{"class":102,"line":623},[100,23255,3641],{"class":258},[100,23257,23258,23260,23262,23265,23267],{"class":102,"line":629},[100,23259,5051],{"class":258},[100,23261,2810],{"class":471},[100,23263,23264],{"class":110},"\"Phone析构函数调用\"",[100,23266,2810],{"class":471},[100,23268,2832],{"class":258},[100,23270,23271],{"class":102,"line":635},[100,23272,3798],{"class":258},[100,23274,23275],{"class":102,"line":641},[100,23276,23277],{"class":1836},"    \u002F\u002F\n",[100,23279,23280],{"class":102,"line":647},[100,23281,23282],{"class":258},"    string m_PName;\n",[100,23284,23285],{"class":102,"line":653},[100,23286,5594],{"class":258},[100,23288,23289,23291],{"class":102,"line":659},[100,23290,16275],{"class":471},[100,23292,16752],{"class":106},[100,23294,23295],{"class":102,"line":665},[100,23296,3178],{"class":258},[100,23298,23299],{"class":102,"line":670},[100,23300,16297],{"class":471},[100,23302,23303],{"class":102,"line":675},[100,23304,18575],{"class":1836},[100,23306,23307,23309,23311,23313,23315,23317,23319,23322,23325,23327,23330,23333],{"class":102,"line":699},[100,23308,20100],{"class":106},[100,23310,713],{"class":258},[100,23312,16498],{"class":106},[100,23314,16501],{"class":6812},[100,23316,2145],{"class":258},[100,23318,16498],{"class":106},[100,23320,23321],{"class":6812}," pname",[100,23323,23324],{"class":258},"):",[100,23326,16591],{"class":106},[100,23328,23329],{"class":258},"(name),m_phone.",[100,23331,23332],{"class":106},"m_PName",[100,23334,23335],{"class":258},"(pname) \n",[100,23337,23338],{"class":102,"line":708},[100,23339,3641],{"class":258},[100,23341,23342,23344,23346,23349],{"class":102,"line":722},[100,23343,5051],{"class":258},[100,23345,2810],{"class":471},[100,23347,23348],{"class":110},"\"Person的构造函数调用\"",[100,23350,2927],{"class":258},[100,23352,23353],{"class":102,"line":735},[100,23354,3798],{"class":258},[100,23356,23357,23359],{"class":102,"line":754},[100,23358,20133],{"class":106},[100,23360,3587],{"class":258},[100,23362,23363],{"class":102,"line":771},[100,23364,3641],{"class":258},[100,23366,23367,23369,23371,23374,23376],{"class":102,"line":776},[100,23368,5051],{"class":258},[100,23370,2810],{"class":471},[100,23372,23373],{"class":110},"\"Person析构函数调用\"",[100,23375,2810],{"class":471},[100,23377,2832],{"class":258},[100,23379,23380],{"class":102,"line":781},[100,23381,3798],{"class":258},[100,23383,23384],{"class":102,"line":796},[100,23385,9376],{"class":1836},[100,23387,23388],{"class":102,"line":812},[100,23389,16473],{"class":258},[100,23391,23392],{"class":102,"line":823},[100,23393,23394],{"class":1836},"    \u002F\u002F手机\n",[100,23396,23397],{"class":102,"line":828},[100,23398,23399],{"class":258},"    Phone m_Phone;\n",[100,23401,23402],{"class":102,"line":840},[100,23403,5594],{"class":258},[100,23405,23406,23408,23410],{"class":102,"line":845},[100,23407,6960],{"class":471},[100,23409,7184],{"class":106},[100,23411,3587],{"class":258},[100,23413,23414],{"class":102,"line":868},[100,23415,3178],{"class":258},[100,23417,23418,23420,23422,23424,23426,23428,23431],{"class":102,"line":874},[100,23419,21012],{"class":258},[100,23421,19],{"class":106},[100,23423,713],{"class":258},[100,23425,9512],{"class":110},[100,23427,2145],{"class":258},[100,23429,23430],{"class":110},"\"安卓\"",[100,23432,4321],{"class":258},[100,23434,23435,23437,23439,23442,23444,23447,23449],{"class":102,"line":879},[100,23436,3183],{"class":258},[100,23438,2810],{"class":471},[100,23440,23441],{"class":258},"p.Name",[100,23443,2810],{"class":471},[100,23445,23446],{"class":110},"\"拿着：\"",[100,23448,2810],{"class":471},[100,23450,23451],{"class":258},"p.m_phone.m_PName;\n",[100,23453,23454],{"class":102,"line":889},[100,23455,3197],{"class":258},[100,23457,23458,23460,23462],{"class":102,"line":894},[100,23459,1784],{"class":471},[100,23461,786],{"class":106},[100,23463,3587],{"class":258},[100,23465,23466],{"class":102,"line":900},[100,23467,3178],{"class":258},[100,23469,23470,23472],{"class":102,"line":910},[100,23471,7229],{"class":106},[100,23473,7232],{"class":258},[100,23475,23476],{"class":102,"line":915},[100,23477,3197],{"class":258},[19,23479,381],{},[73,23481,23483],{"className":1770,"code":23482,"language":1772,"meta":79,"style":79},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[32,23484,23485,23490],{"__ignoreMap":79},[100,23486,23487],{"class":102,"line":103},[100,23488,23489],{"class":1836},"    \u002F\u002F不需要写这个：\n",[100,23491,23492],{"class":102,"line":188},[100,23493,23494],{"class":1836},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,23496,23497],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[73,23499,23501],{"className":1770,"code":23500,"language":1772,"meta":79,"style":79},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[32,23502,23503],{"__ignoreMap":79},[100,23504,23505,23507,23510,23512,23515,23518],{"class":102,"line":103},[100,23506,20627],{"class":106},[100,23508,23509],{"class":258},"(string name.string pname):",[100,23511,16591],{"class":106},[100,23513,23514],{"class":258},"(name),",[100,23516,23517],{"class":106},"m_phone",[100,23519,23520],{"class":258},"(pname) {}\n",[19,23522,23523,23524,472,23527],{},"采用的是隐式转换法，实际为如下：\n",[32,23525,23526],{},"m_phone(pname)",[32,23528,23529],{},"Phone m_phone=pname",[19,23531,23532,23535],{},[1921,23533,23534],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,23537,23538],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[305,23540,23542],{"id":23541},"_828静态对象","8.2.8静态对象",[19,23544,23545],{},"静态对象在成员对象前static，称为静态对象",[19,23547,23548],{},"静态对象分为两类：",[26,23550,23551],{},[29,23552,23553],{},"静态成员变量",[2773,23555,23556,23559,23562],{},[29,23557,23558],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[29,23560,23561],{},"②在编译阶段分配内存",[29,23563,23564],{},"③类内声明，类外初始化",[26,23566,23567],{"start":188},[29,23568,23569],{},"静态成员函数",[2773,23571,23572,23575],{},[29,23573,23574],{},"①所有对象共享同一个函数",[29,23576,23577],{},"②静态成员函数只能访问静态成员变量",[23579,23580,23582],"h4",{"id":23581},"_8281静态成员变量","8.2.8.1静态成员变量",[73,23584,23586],{"className":1770,"code":23585,"language":1772,"meta":79,"style":79},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\npublic:\n    \u002F\u002F非静态成员变量\n    \u002F\u002F int m_A;\n    \u002F\u002F定义静态成员变量\n    static int m_A;\n\n\n};\nvoid test01()\n{\n    Person p;\n    \u002F\u002F输出类成员变量这块内存\n    cout\u003C\u003Cp.m_A\u003C\u003Cendl;\n}\nint main()\n{\n    test01()\n}\n",[32,23587,23588,23594,23604,23610,23614,23618,23623,23628,23633,23641,23645,23649,23653,23661,23665,23669,23674,23687,23691,23699,23703,23709],{"__ignoreMap":79},[100,23589,23590,23592],{"class":102,"line":103},[100,23591,3562],{"class":471},[100,23593,3565],{"class":110},[100,23595,23596,23598,23600,23602],{"class":102,"line":188},[100,23597,3570],{"class":471},[100,23599,3573],{"class":471},[100,23601,3576],{"class":106},[100,23603,2927],{"class":258},[100,23605,23606,23608],{"class":102,"line":199},[100,23607,16275],{"class":471},[100,23609,16752],{"class":106},[100,23611,23612],{"class":102,"line":532},[100,23613,3178],{"class":258},[100,23615,23616],{"class":102,"line":577},[100,23617,16297],{"class":471},[100,23619,23620],{"class":102,"line":589},[100,23621,23622],{"class":1836},"    \u002F\u002F非静态成员变量\n",[100,23624,23625],{"class":102,"line":595},[100,23626,23627],{"class":1836},"    \u002F\u002F int m_A;\n",[100,23629,23630],{"class":102,"line":601},[100,23631,23632],{"class":1836},"    \u002F\u002F定义静态成员变量\n",[100,23634,23635,23637,23639],{"class":102,"line":606},[100,23636,12602],{"class":471},[100,23638,3993],{"class":471},[100,23640,22973],{"class":258},[100,23642,23643],{"class":102,"line":612},[100,23644,570],{"emptyLinePlaceholder":569},[100,23646,23647],{"class":102,"line":618},[100,23648,570],{"emptyLinePlaceholder":569},[100,23650,23651],{"class":102,"line":623},[100,23652,5594],{"class":258},[100,23654,23655,23657,23659],{"class":102,"line":629},[100,23656,6960],{"class":471},[100,23658,7184],{"class":106},[100,23660,3587],{"class":258},[100,23662,23663],{"class":102,"line":635},[100,23664,3178],{"class":258},[100,23666,23667],{"class":102,"line":641},[100,23668,16894],{"class":258},[100,23670,23671],{"class":102,"line":647},[100,23672,23673],{"class":1836},"    \u002F\u002F输出类成员变量这块内存\n",[100,23675,23676,23678,23680,23683,23685],{"class":102,"line":653},[100,23677,3183],{"class":258},[100,23679,2810],{"class":471},[100,23681,23682],{"class":258},"p.m_A",[100,23684,2810],{"class":471},[100,23686,2832],{"class":258},[100,23688,23689],{"class":102,"line":659},[100,23690,3197],{"class":258},[100,23692,23693,23695,23697],{"class":102,"line":665},[100,23694,1784],{"class":471},[100,23696,786],{"class":106},[100,23698,3587],{"class":258},[100,23700,23701],{"class":102,"line":670},[100,23702,3178],{"class":258},[100,23704,23705,23707],{"class":102,"line":675},[100,23706,7229],{"class":106},[100,23708,3587],{"class":258},[100,23710,23711],{"class":102,"line":699},[100,23712,3197],{"class":258},[19,23714,23715],{},"此时输出是报错的：无法解析外部命令",[19,23717,23718],{},"解决这一问题：必须用到类内声明，类外初始化操作",[73,23720,23722],{"className":1770,"code":23721,"language":1772,"meta":79,"style":79},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\npublic:\n    \u002F\u002F类内声明\n    static int m_A;\n};\n\u002F\u002F类外初始化\nint Person::m_A=10;\nvoid test01()\n{\n    Person p;\n    \u002F\u002F访问变量的原内存空间\n    \u002F\u002F100\n    cout\u003C\u003Cp.m_A\u003C\u003Cendl;\n    Person p2;\n    p2.m_A=200;\n    \u002F\u002F继续访问这片空间\n    \u002F\u002F200\n    cout\u003C\u003Cp2.m_A\u003C\u003Cendl;\n}\nint main()\n{\n    test01();\n}\n",[32,23723,23724,23730,23740,23746,23750,23754,23759,23767,23771,23776,23791,23799,23803,23807,23812,23817,23829,23834,23845,23850,23855,23868,23872,23880,23884,23890],{"__ignoreMap":79},[100,23725,23726,23728],{"class":102,"line":103},[100,23727,3562],{"class":471},[100,23729,3565],{"class":110},[100,23731,23732,23734,23736,23738],{"class":102,"line":188},[100,23733,3570],{"class":471},[100,23735,3573],{"class":471},[100,23737,3576],{"class":106},[100,23739,2927],{"class":258},[100,23741,23742,23744],{"class":102,"line":199},[100,23743,16275],{"class":471},[100,23745,16752],{"class":106},[100,23747,23748],{"class":102,"line":532},[100,23749,3178],{"class":258},[100,23751,23752],{"class":102,"line":577},[100,23753,16297],{"class":471},[100,23755,23756],{"class":102,"line":589},[100,23757,23758],{"class":1836},"    \u002F\u002F类内声明\n",[100,23760,23761,23763,23765],{"class":102,"line":595},[100,23762,12602],{"class":471},[100,23764,3993],{"class":471},[100,23766,22973],{"class":258},[100,23768,23769],{"class":102,"line":601},[100,23770,5594],{"class":258},[100,23772,23773],{"class":102,"line":606},[100,23774,23775],{"class":1836},"\u002F\u002F类外初始化\n",[100,23777,23778,23780,23782,23785,23787,23789],{"class":102,"line":612},[100,23779,1784],{"class":471},[100,23781,17150],{"class":106},[100,23783,23784],{"class":258},"::m_A",[100,23786,472],{"class":471},[100,23788,2213],{"class":117},[100,23790,2927],{"class":258},[100,23792,23793,23795,23797],{"class":102,"line":618},[100,23794,6960],{"class":471},[100,23796,7184],{"class":106},[100,23798,3587],{"class":258},[100,23800,23801],{"class":102,"line":623},[100,23802,3178],{"class":258},[100,23804,23805],{"class":102,"line":629},[100,23806,16894],{"class":258},[100,23808,23809],{"class":102,"line":635},[100,23810,23811],{"class":1836},"    \u002F\u002F访问变量的原内存空间\n",[100,23813,23814],{"class":102,"line":641},[100,23815,23816],{"class":1836},"    \u002F\u002F100\n",[100,23818,23819,23821,23823,23825,23827],{"class":102,"line":647},[100,23820,3183],{"class":258},[100,23822,2810],{"class":471},[100,23824,23682],{"class":258},[100,23826,2810],{"class":471},[100,23828,2832],{"class":258},[100,23830,23831],{"class":102,"line":653},[100,23832,23833],{"class":258},"    Person p2;\n",[100,23835,23836,23839,23841,23843],{"class":102,"line":659},[100,23837,23838],{"class":258},"    p2.m_A",[100,23840,472],{"class":471},[100,23842,3343],{"class":117},[100,23844,2927],{"class":258},[100,23846,23847],{"class":102,"line":665},[100,23848,23849],{"class":1836},"    \u002F\u002F继续访问这片空间\n",[100,23851,23852],{"class":102,"line":670},[100,23853,23854],{"class":1836},"    \u002F\u002F200\n",[100,23856,23857,23859,23861,23864,23866],{"class":102,"line":675},[100,23858,3183],{"class":258},[100,23860,2810],{"class":471},[100,23862,23863],{"class":258},"p2.m_A",[100,23865,2810],{"class":471},[100,23867,2832],{"class":258},[100,23869,23870],{"class":102,"line":699},[100,23871,3197],{"class":258},[100,23873,23874,23876,23878],{"class":102,"line":708},[100,23875,1784],{"class":471},[100,23877,786],{"class":106},[100,23879,3587],{"class":258},[100,23881,23882],{"class":102,"line":722},[100,23883,3178],{"class":258},[100,23885,23886,23888],{"class":102,"line":735},[100,23887,7229],{"class":106},[100,23889,7232],{"class":258},[100,23891,23892],{"class":102,"line":754},[100,23893,3197],{"class":258},[19,23895,23896],{},[1921,23897,23898],{},"静态变量的访问",[73,23900,23902],{"className":1770,"code":23901,"language":1772,"meta":79,"style":79},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\npublic:\n    \u002F\u002F类内声明\n    static int m_A;\nprivate:\n    \u002F\u002F静态成员变量也是有访问权限的\n    static int m_B;\n};\n\u002F\u002F类外初始化\nint Person::m_A=10;\nint Person::m_B=20;\nvoid test02()\n{\n    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n    \u002F\u002F静态成员变量有两种访问方式：\n    \u002F\u002F1.通过对象进行访问\n    Person p;  \n    cout\u003C\u003Cp.m_A\u003C\u003Cendl;\n    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n    \u002F\u002F2.通过类名进行访问\n    cout\u003C\u003CPerson::m_A\u003C\u003Cendl;\n    cout\u003C\u003CPerson::m_B\u003C\u003Cendl; \u002F\u002F没有访问权限，报错\n}\nint main()\n{\n    test02();\n}\n",[32,23903,23904,23910,23920,23926,23930,23934,23938,23946,23950,23955,23963,23967,23971,23985,24000,24008,24012,24017,24022,24027,24032,24044,24049,24054,24068,24085,24089,24097,24101,24107],{"__ignoreMap":79},[100,23905,23906,23908],{"class":102,"line":103},[100,23907,3562],{"class":471},[100,23909,3565],{"class":110},[100,23911,23912,23914,23916,23918],{"class":102,"line":188},[100,23913,3570],{"class":471},[100,23915,3573],{"class":471},[100,23917,3576],{"class":106},[100,23919,2927],{"class":258},[100,23921,23922,23924],{"class":102,"line":199},[100,23923,16275],{"class":471},[100,23925,16752],{"class":106},[100,23927,23928],{"class":102,"line":532},[100,23929,3178],{"class":258},[100,23931,23932],{"class":102,"line":577},[100,23933,16297],{"class":471},[100,23935,23936],{"class":102,"line":589},[100,23937,23758],{"class":1836},[100,23939,23940,23942,23944],{"class":102,"line":595},[100,23941,12602],{"class":471},[100,23943,3993],{"class":471},[100,23945,22973],{"class":258},[100,23947,23948],{"class":102,"line":601},[100,23949,16803],{"class":471},[100,23951,23952],{"class":102,"line":606},[100,23953,23954],{"class":1836},"    \u002F\u002F静态成员变量也是有访问权限的\n",[100,23956,23957,23959,23961],{"class":102,"line":612},[100,23958,12602],{"class":471},[100,23960,3993],{"class":471},[100,23962,22980],{"class":258},[100,23964,23965],{"class":102,"line":618},[100,23966,5594],{"class":258},[100,23968,23969],{"class":102,"line":623},[100,23970,23775],{"class":1836},[100,23972,23973,23975,23977,23979,23981,23983],{"class":102,"line":629},[100,23974,1784],{"class":471},[100,23976,17150],{"class":106},[100,23978,23784],{"class":258},[100,23980,472],{"class":471},[100,23982,2213],{"class":117},[100,23984,2927],{"class":258},[100,23986,23987,23989,23991,23994,23996,23998],{"class":102,"line":635},[100,23988,1784],{"class":471},[100,23990,17150],{"class":106},[100,23992,23993],{"class":258},"::m_B",[100,23995,472],{"class":471},[100,23997,2466],{"class":117},[100,23999,2927],{"class":258},[100,24001,24002,24004,24006],{"class":102,"line":641},[100,24003,6960],{"class":471},[100,24005,7253],{"class":106},[100,24007,3587],{"class":258},[100,24009,24010],{"class":102,"line":647},[100,24011,3178],{"class":258},[100,24013,24014],{"class":102,"line":653},[100,24015,24016],{"class":1836},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[100,24018,24019],{"class":102,"line":659},[100,24020,24021],{"class":1836},"    \u002F\u002F静态成员变量有两种访问方式：\n",[100,24023,24024],{"class":102,"line":665},[100,24025,24026],{"class":1836},"    \u002F\u002F1.通过对象进行访问\n",[100,24028,24029],{"class":102,"line":670},[100,24030,24031],{"class":258},"    Person p;  \n",[100,24033,24034,24036,24038,24040,24042],{"class":102,"line":675},[100,24035,3183],{"class":258},[100,24037,2810],{"class":471},[100,24039,23682],{"class":258},[100,24041,2810],{"class":471},[100,24043,2832],{"class":258},[100,24045,24046],{"class":102,"line":699},[100,24047,24048],{"class":1836},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[100,24050,24051],{"class":102,"line":708},[100,24052,24053],{"class":1836},"    \u002F\u002F2.通过类名进行访问\n",[100,24055,24056,24058,24060,24062,24064,24066],{"class":102,"line":722},[100,24057,3183],{"class":258},[100,24059,2810],{"class":471},[100,24061,20627],{"class":106},[100,24063,23784],{"class":258},[100,24065,2810],{"class":471},[100,24067,2832],{"class":258},[100,24069,24070,24072,24074,24076,24078,24080,24082],{"class":102,"line":735},[100,24071,3183],{"class":258},[100,24073,2810],{"class":471},[100,24075,20627],{"class":106},[100,24077,23993],{"class":258},[100,24079,2810],{"class":471},[100,24081,2875],{"class":258},[100,24083,24084],{"class":1836}," \u002F\u002F没有访问权限，报错\n",[100,24086,24087],{"class":102,"line":754},[100,24088,3197],{"class":258},[100,24090,24091,24093,24095],{"class":102,"line":771},[100,24092,1784],{"class":471},[100,24094,786],{"class":106},[100,24096,3587],{"class":258},[100,24098,24099],{"class":102,"line":776},[100,24100,3178],{"class":258},[100,24102,24103,24105],{"class":102,"line":781},[100,24104,7298],{"class":106},[100,24106,7232],{"class":258},[100,24108,24109],{"class":102,"line":796},[100,24110,3197],{"class":258},[23579,24112,24114],{"id":24113},"_8282静态成员函数","8.2.8.2静态成员函数",[19,24116,24117],{},"1.静态成员函数定义与访问",[73,24119,24121],{"className":1770,"code":24120,"language":1772,"meta":79,"style":79},"class Person\n{\npublic:\n    \u002F\u002F在公共权限下定义静态成员函数\n    static void func()\n    {\n        coout\u003C\u003C\"静态成员函数的调用\"\u003C\u003Cendl;\n    }\n};\nvoid test01()\n{\n    \u002F\u002F静态成员函数的调用方式:\n    \u002F\u002F1.通过对象访问\n    Person p;\n    p.func();\n    \u002F\u002F2.通过类名访问\n    Person::func();\n}\n",[32,24122,24123,24129,24133,24137,24142,24153,24157,24171,24175,24179,24187,24191,24196,24201,24205,24213,24218,24228],{"__ignoreMap":79},[100,24124,24125,24127],{"class":102,"line":103},[100,24126,16275],{"class":471},[100,24128,16752],{"class":106},[100,24130,24131],{"class":102,"line":188},[100,24132,3178],{"class":258},[100,24134,24135],{"class":102,"line":199},[100,24136,16297],{"class":471},[100,24138,24139],{"class":102,"line":532},[100,24140,24141],{"class":1836},"    \u002F\u002F在公共权限下定义静态成员函数\n",[100,24143,24144,24146,24149,24151],{"class":102,"line":577},[100,24145,12602],{"class":471},[100,24147,24148],{"class":471}," void",[100,24150,12967],{"class":106},[100,24152,3587],{"class":258},[100,24154,24155],{"class":102,"line":589},[100,24156,3641],{"class":258},[100,24158,24159,24162,24164,24167,24169],{"class":102,"line":595},[100,24160,24161],{"class":258},"        coout",[100,24163,2810],{"class":471},[100,24165,24166],{"class":110},"\"静态成员函数的调用\"",[100,24168,2810],{"class":471},[100,24170,2832],{"class":258},[100,24172,24173],{"class":102,"line":601},[100,24174,3798],{"class":258},[100,24176,24177],{"class":102,"line":606},[100,24178,5594],{"class":258},[100,24180,24181,24183,24185],{"class":102,"line":612},[100,24182,6960],{"class":471},[100,24184,7184],{"class":106},[100,24186,3587],{"class":258},[100,24188,24189],{"class":102,"line":618},[100,24190,3178],{"class":258},[100,24192,24193],{"class":102,"line":623},[100,24194,24195],{"class":1836},"    \u002F\u002F静态成员函数的调用方式:\n",[100,24197,24198],{"class":102,"line":629},[100,24199,24200],{"class":1836},"    \u002F\u002F1.通过对象访问\n",[100,24202,24203],{"class":102,"line":635},[100,24204,16894],{"class":258},[100,24206,24207,24209,24211],{"class":102,"line":641},[100,24208,17447],{"class":258},[100,24210,13133],{"class":106},[100,24212,7232],{"class":258},[100,24214,24215],{"class":102,"line":647},[100,24216,24217],{"class":1836},"    \u002F\u002F2.通过类名访问\n",[100,24219,24220,24222,24224,24226],{"class":102,"line":653},[100,24221,20100],{"class":106},[100,24223,19313],{"class":258},[100,24225,13133],{"class":106},[100,24227,7232],{"class":258},[100,24229,24230],{"class":102,"line":659},[100,24231,3197],{"class":258},[26,24233,24234],{"start":188},[29,24235,24236],{},"静态成员函数只能访问静态成员变量",[73,24238,24240],{"className":1770,"code":24239,"language":1772,"meta":79,"style":79},"class Person\n{\npublic:\n    \u002F\u002F在公共权限下定义静态成员函数\n    static void func()\n    {\n        m_A=100; \u002F\u002F静态成员函数可以访问 静态成员变量\n        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n        coout\u003C\u003C\"静态成员函数的调用\"\u003C\u003Cendl;\n    }\n    static int m_A; \u002F\u002F静态成员变量\n    int m_B; \u002F\u002F非静态成员变量\n\nprivate:\n    \u002F\u002F静态成员变量也是有访问权限的\n    static void func2()\n    {\n        cout\u003C\u003C\"这是私有权限下的静态函数调用\"\u003C\u003Cendl;\n    }\n\n\n};\nint Person::m_A=0;\nvoid test01()\n{\n    \u002F\u002F静态成员函数的调用方式:\n    \u002F\u002F1.通过对象访问\n    Person p;\n    p.func();\n    \u002F\u002F2.通过类名访问\n    Person::func();\n    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n}\nint main()\n{\n    test01();\n}\n",[32,24241,24242,24248,24252,24256,24260,24270,24274,24288,24293,24305,24309,24320,24330,24334,24338,24342,24352,24356,24369,24373,24377,24381,24385,24399,24407,24411,24415,24419,24423,24431,24435,24445,24450,24454,24462,24466,24472],{"__ignoreMap":79},[100,24243,24244,24246],{"class":102,"line":103},[100,24245,16275],{"class":471},[100,24247,16752],{"class":106},[100,24249,24250],{"class":102,"line":188},[100,24251,3178],{"class":258},[100,24253,24254],{"class":102,"line":199},[100,24255,16297],{"class":471},[100,24257,24258],{"class":102,"line":532},[100,24259,24141],{"class":1836},[100,24261,24262,24264,24266,24268],{"class":102,"line":577},[100,24263,12602],{"class":471},[100,24265,24148],{"class":471},[100,24267,12967],{"class":106},[100,24269,3587],{"class":258},[100,24271,24272],{"class":102,"line":589},[100,24273,3641],{"class":258},[100,24275,24276,24279,24281,24283,24285],{"class":102,"line":595},[100,24277,24278],{"class":258},"        m_A",[100,24280,472],{"class":471},[100,24282,2078],{"class":117},[100,24284,1833],{"class":258},[100,24286,24287],{"class":1836}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[100,24289,24290],{"class":102,"line":601},[100,24291,24292],{"class":1836},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[100,24294,24295,24297,24299,24301,24303],{"class":102,"line":606},[100,24296,24161],{"class":258},[100,24298,2810],{"class":471},[100,24300,24166],{"class":110},[100,24302,2810],{"class":471},[100,24304,2832],{"class":258},[100,24306,24307],{"class":102,"line":612},[100,24308,3798],{"class":258},[100,24310,24311,24313,24315,24317],{"class":102,"line":618},[100,24312,12602],{"class":471},[100,24314,3993],{"class":471},[100,24316,17029],{"class":258},[100,24318,24319],{"class":1836}," \u002F\u002F静态成员变量\n",[100,24321,24322,24324,24327],{"class":102,"line":623},[100,24323,3596],{"class":471},[100,24325,24326],{"class":258}," m_B;",[100,24328,24329],{"class":1836}," \u002F\u002F非静态成员变量\n",[100,24331,24332],{"class":102,"line":629},[100,24333,570],{"emptyLinePlaceholder":569},[100,24335,24336],{"class":102,"line":635},[100,24337,16803],{"class":471},[100,24339,24340],{"class":102,"line":641},[100,24341,23954],{"class":1836},[100,24343,24344,24346,24348,24350],{"class":102,"line":647},[100,24345,12602],{"class":471},[100,24347,24148],{"class":471},[100,24349,15199],{"class":106},[100,24351,3587],{"class":258},[100,24353,24354],{"class":102,"line":653},[100,24355,3641],{"class":258},[100,24357,24358,24360,24362,24365,24367],{"class":102,"line":659},[100,24359,5051],{"class":258},[100,24361,2810],{"class":471},[100,24363,24364],{"class":110},"\"这是私有权限下的静态函数调用\"",[100,24366,2810],{"class":471},[100,24368,2832],{"class":258},[100,24370,24371],{"class":102,"line":665},[100,24372,3798],{"class":258},[100,24374,24375],{"class":102,"line":670},[100,24376,570],{"emptyLinePlaceholder":569},[100,24378,24379],{"class":102,"line":675},[100,24380,570],{"emptyLinePlaceholder":569},[100,24382,24383],{"class":102,"line":699},[100,24384,5594],{"class":258},[100,24386,24387,24389,24391,24393,24395,24397],{"class":102,"line":708},[100,24388,1784],{"class":471},[100,24390,17150],{"class":106},[100,24392,23784],{"class":258},[100,24394,472],{"class":471},[100,24396,1366],{"class":117},[100,24398,2927],{"class":258},[100,24400,24401,24403,24405],{"class":102,"line":722},[100,24402,6960],{"class":471},[100,24404,7184],{"class":106},[100,24406,3587],{"class":258},[100,24408,24409],{"class":102,"line":735},[100,24410,3178],{"class":258},[100,24412,24413],{"class":102,"line":754},[100,24414,24195],{"class":1836},[100,24416,24417],{"class":102,"line":771},[100,24418,24200],{"class":1836},[100,24420,24421],{"class":102,"line":776},[100,24422,16894],{"class":258},[100,24424,24425,24427,24429],{"class":102,"line":781},[100,24426,17447],{"class":258},[100,24428,13133],{"class":106},[100,24430,7232],{"class":258},[100,24432,24433],{"class":102,"line":796},[100,24434,24217],{"class":1836},[100,24436,24437,24439,24441,24443],{"class":102,"line":812},[100,24438,20100],{"class":106},[100,24440,19313],{"class":258},[100,24442,13133],{"class":106},[100,24444,7232],{"class":258},[100,24446,24447],{"class":102,"line":823},[100,24448,24449],{"class":1836},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[100,24451,24452],{"class":102,"line":828},[100,24453,3197],{"class":258},[100,24455,24456,24458,24460],{"class":102,"line":840},[100,24457,1784],{"class":471},[100,24459,786],{"class":106},[100,24461,3587],{"class":258},[100,24463,24464],{"class":102,"line":845},[100,24465,3178],{"class":258},[100,24467,24468,24470],{"class":102,"line":868},[100,24469,7229],{"class":106},[100,24471,7232],{"class":258},[100,24473,24474],{"class":102,"line":874},[100,24475,3197],{"class":258},[305,24477,24479],{"id":24478},"_83c对象模型和this指针","8.3C++对象模型和this指针",[23579,24481,24483],{"id":24482},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,24485,24486],{},"在c++中，类内的成员变量和成员函数分开存储",[19,24488,24489],{},"只有非静态成员变量才属于类的对象上",[24491,24492,24494],"h5",{"id":24493},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[73,24496,24498],{"className":1770,"code":24497,"language":1772,"meta":79,"style":79},"#include\u003Ciostraem>\nusing namespace std;\nclass Person\n{\n\n};\nvoid test01()\n{\n    Person p;\n    cout\u003C\u003C\"size of p=\"\u003C\u003Csizeoif(p)\u003C\u003Cendl; \u002F\u002F查看这个空类的占用的内存空间\n}\nint main()\n{\n    test01();\n}\n",[32,24499,24500,24507,24517,24523,24527,24531,24535,24543,24547,24551,24574,24578,24586,24590,24596],{"__ignoreMap":79},[100,24501,24502,24504],{"class":102,"line":103},[100,24503,3562],{"class":471},[100,24505,24506],{"class":110},"\u003Ciostraem>\n",[100,24508,24509,24511,24513,24515],{"class":102,"line":188},[100,24510,3570],{"class":471},[100,24512,3573],{"class":471},[100,24514,3576],{"class":106},[100,24516,2927],{"class":258},[100,24518,24519,24521],{"class":102,"line":199},[100,24520,16275],{"class":471},[100,24522,16752],{"class":106},[100,24524,24525],{"class":102,"line":532},[100,24526,3178],{"class":258},[100,24528,24529],{"class":102,"line":577},[100,24530,570],{"emptyLinePlaceholder":569},[100,24532,24533],{"class":102,"line":589},[100,24534,5594],{"class":258},[100,24536,24537,24539,24541],{"class":102,"line":595},[100,24538,6960],{"class":471},[100,24540,7184],{"class":106},[100,24542,3587],{"class":258},[100,24544,24545],{"class":102,"line":601},[100,24546,3178],{"class":258},[100,24548,24549],{"class":102,"line":606},[100,24550,16894],{"class":258},[100,24552,24553,24555,24557,24560,24562,24565,24567,24569,24571],{"class":102,"line":612},[100,24554,3183],{"class":258},[100,24556,2810],{"class":471},[100,24558,24559],{"class":110},"\"size of p=\"",[100,24561,2810],{"class":471},[100,24563,24564],{"class":106},"sizeoif",[100,24566,8135],{"class":258},[100,24568,2810],{"class":471},[100,24570,2875],{"class":258},[100,24572,24573],{"class":1836}," \u002F\u002F查看这个空类的占用的内存空间\n",[100,24575,24576],{"class":102,"line":618},[100,24577,3197],{"class":258},[100,24579,24580,24582,24584],{"class":102,"line":623},[100,24581,1784],{"class":471},[100,24583,786],{"class":106},[100,24585,3587],{"class":258},[100,24587,24588],{"class":102,"line":629},[100,24589,3178],{"class":258},[100,24591,24592,24594],{"class":102,"line":635},[100,24593,7229],{"class":106},[100,24595,7232],{"class":258},[100,24597,24598],{"class":102,"line":641},[100,24599,3197],{"class":258},[19,24601,24602],{},"输出结果为：size of p=1",[19,24604,24605],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,24607,24608],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[24491,24610,24612],{"id":24611},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[73,24614,24616],{"className":1770,"code":24615,"language":1772,"meta":79,"style":79},"#include\u003Ciostream>\nusing namespace std;\nclass Person \n{\n    int m_A;\u002F\u002F非静态成员变量\n};\nvoid test01()\n{\n    Person p;\n    cout\u003C\u003C\"size of p=\"\u003C\u003Csizeof(p)\u003C\u003Cendl; \u002F\u002F查看不是空对象时占用多少内存\n\n}\nint main()\n{\n    test01();\n}\n",[32,24617,24618,24624,24634,24642,24646,24655,24659,24667,24671,24675,24694,24698,24702,24710,24714,24720],{"__ignoreMap":79},[100,24619,24620,24622],{"class":102,"line":103},[100,24621,3562],{"class":471},[100,24623,3565],{"class":110},[100,24625,24626,24628,24630,24632],{"class":102,"line":188},[100,24627,3570],{"class":471},[100,24629,3573],{"class":471},[100,24631,3576],{"class":106},[100,24633,2927],{"class":258},[100,24635,24636,24638,24640],{"class":102,"line":199},[100,24637,16275],{"class":471},[100,24639,17150],{"class":106},[100,24641,4276],{"class":258},[100,24643,24644],{"class":102,"line":532},[100,24645,3178],{"class":258},[100,24647,24648,24650,24652],{"class":102,"line":577},[100,24649,3596],{"class":471},[100,24651,17029],{"class":258},[100,24653,24654],{"class":1836},"\u002F\u002F非静态成员变量\n",[100,24656,24657],{"class":102,"line":589},[100,24658,5594],{"class":258},[100,24660,24661,24663,24665],{"class":102,"line":595},[100,24662,6960],{"class":471},[100,24664,7184],{"class":106},[100,24666,3587],{"class":258},[100,24668,24669],{"class":102,"line":601},[100,24670,3178],{"class":258},[100,24672,24673],{"class":102,"line":606},[100,24674,16894],{"class":258},[100,24676,24677,24679,24681,24683,24685,24687,24689,24691],{"class":102,"line":612},[100,24678,3183],{"class":258},[100,24680,2810],{"class":471},[100,24682,24559],{"class":110},[100,24684,3005],{"class":471},[100,24686,8135],{"class":258},[100,24688,2810],{"class":471},[100,24690,2875],{"class":258},[100,24692,24693],{"class":1836}," \u002F\u002F查看不是空对象时占用多少内存\n",[100,24695,24696],{"class":102,"line":618},[100,24697,570],{"emptyLinePlaceholder":569},[100,24699,24700],{"class":102,"line":623},[100,24701,3197],{"class":258},[100,24703,24704,24706,24708],{"class":102,"line":629},[100,24705,1784],{"class":471},[100,24707,786],{"class":106},[100,24709,3587],{"class":258},[100,24711,24712],{"class":102,"line":635},[100,24713,3178],{"class":258},[100,24715,24716,24718],{"class":102,"line":641},[100,24717,7229],{"class":106},[100,24719,7232],{"class":258},[100,24721,24722],{"class":102,"line":647},[100,24723,3197],{"class":258},[19,24725,24726],{},"输出结果：size of p=4",[19,24728,24729],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[26,24731,24732],{},[29,24733,24734],{},"如果加上非静态成员变量，Person类修改如下",[73,24736,24738],{"className":1770,"code":24737,"language":1772,"meta":79,"style":79},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[32,24739,24740,24746,24750,24756,24764,24768,24773],{"__ignoreMap":79},[100,24741,24742,24744],{"class":102,"line":103},[100,24743,16275],{"class":471},[100,24745,16752],{"class":106},[100,24747,24748],{"class":102,"line":188},[100,24749,3178],{"class":258},[100,24751,24752,24754],{"class":102,"line":199},[100,24753,3596],{"class":471},[100,24755,22973],{"class":258},[100,24757,24758,24760,24762],{"class":102,"line":532},[100,24759,12602],{"class":471},[100,24761,3993],{"class":471},[100,24763,22980],{"class":258},[100,24765,24766],{"class":102,"line":577},[100,24767,5594],{"class":258},[100,24769,24770],{"class":102,"line":589},[100,24771,24772],{"class":1836},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[100,24774,24775,24777,24779,24781,24783,24785],{"class":102,"line":595},[100,24776,1784],{"class":471},[100,24778,17150],{"class":106},[100,24780,23993],{"class":258},[100,24782,472],{"class":471},[100,24784,1366],{"class":117},[100,24786,2927],{"class":258},[19,24788,24789],{},"输出结果：4",[19,24791,24792],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[26,24794,24795],{"start":188},[29,24796,24797],{},"加上非静态成员函数",[73,24799,24801],{"className":1770,"code":24800,"language":1772,"meta":79,"style":79},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[32,24802,24803,24810,24814,24820,24828,24832,24836,24840],{"__ignoreMap":79},[100,24804,24805,24807],{"class":102,"line":103},[100,24806,16275],{"class":471},[100,24808,24809],{"class":106},"  Person\n",[100,24811,24812],{"class":102,"line":188},[100,24813,3178],{"class":258},[100,24815,24816,24818],{"class":102,"line":199},[100,24817,3596],{"class":471},[100,24819,22973],{"class":258},[100,24821,24822,24824,24826],{"class":102,"line":532},[100,24823,16490],{"class":471},[100,24825,12967],{"class":106},[100,24827,3587],{"class":258},[100,24829,24830],{"class":102,"line":577},[100,24831,3641],{"class":258},[100,24833,24834],{"class":102,"line":589},[100,24835,570],{"emptyLinePlaceholder":569},[100,24837,24838],{"class":102,"line":595},[100,24839,3798],{"class":258},[100,24841,24842],{"class":102,"line":601},[100,24843,5594],{"class":258},[19,24845,24846],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[26,24848,24849],{"start":199},[29,24850,24851],{},"加上静态成员函数",[73,24853,24855],{"className":1770,"code":24854,"language":1772,"meta":79,"style":79},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[32,24856,24857,24863,24867,24873,24881,24885,24889,24893,24904,24908,24912,24916],{"__ignoreMap":79},[100,24858,24859,24861],{"class":102,"line":103},[100,24860,16275],{"class":471},[100,24862,24809],{"class":106},[100,24864,24865],{"class":102,"line":188},[100,24866,3178],{"class":258},[100,24868,24869,24871],{"class":102,"line":199},[100,24870,3596],{"class":471},[100,24872,22973],{"class":258},[100,24874,24875,24877,24879],{"class":102,"line":532},[100,24876,16490],{"class":471},[100,24878,12967],{"class":106},[100,24880,3587],{"class":258},[100,24882,24883],{"class":102,"line":577},[100,24884,3641],{"class":258},[100,24886,24887],{"class":102,"line":589},[100,24888,570],{"emptyLinePlaceholder":569},[100,24890,24891],{"class":102,"line":595},[100,24892,3798],{"class":258},[100,24894,24895,24897,24899,24902],{"class":102,"line":601},[100,24896,12602],{"class":471},[100,24898,24148],{"class":471},[100,24900,24901],{"class":106}," func1",[100,24903,3587],{"class":258},[100,24905,24906],{"class":102,"line":606},[100,24907,3641],{"class":258},[100,24909,24910],{"class":102,"line":612},[100,24911,570],{"emptyLinePlaceholder":569},[100,24913,24914],{"class":102,"line":618},[100,24915,3798],{"class":258},[100,24917,24918],{"class":102,"line":623},[100,24919,5594],{"class":258},[19,24921,24789],{},[19,24923,24924],{},"解释：静态成员函数也不属于类上",[1677,24926,9270],{},{"title":79,"searchDepth":188,"depth":188,"links":24928},[24929,24935],{"id":16226,"depth":188,"text":16227,"children":24930},[24931,24932,24933,24934],{"id":16230,"depth":199,"text":16231},{"id":16955,"depth":199,"text":16956},{"id":17127,"depth":199,"text":17128},{"id":17586,"depth":199,"text":17587},{"id":19958,"depth":188,"text":19959,"children":24936},[24937,24938,24939,24940,24941,24942,24943,24944,24945],{"id":19970,"depth":199,"text":19971},{"id":20263,"depth":199,"text":20264},{"id":20754,"depth":199,"text":20755},{"id":21851,"depth":199,"text":21852},{"id":22274,"depth":199,"text":22275},{"id":22753,"depth":199,"text":22754},{"id":23128,"depth":199,"text":23129},{"id":23541,"depth":199,"text":23542},{"id":24478,"depth":199,"text":24479},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":16191,"description":24946},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":24953,"title":1772,"body":24954,"description":24958,"extension":1708,"meta":24959,"navigation":569,"path":24961,"seo":24962,"stem":24963,"__hash__":24964},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":24955,"toc":24956},[],{"title":79,"searchDepth":188,"depth":188,"links":24957},[],null,{"category":24960},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":1772,"description":24958},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":24966,"title":24967,"body":24968,"description":79,"extension":1708,"meta":25554,"navigation":569,"path":25555,"seo":25556,"stem":25557,"__hash__":25558},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":24969,"toc":25536},[24970,24973,24977,24980,24983,24986,25004,25009,25012,25015,25018,25021,25026,25029,25034,25037,25040,25044,25047,25050,25056,25059,25077,25081,25085,25088,25093,25096,25100,25103,25116,25119,25123,25126,25129,25132,25157,25160,25169,25180,25195,25227,25231,25238,25246,25250,25253,25256,25261,25265,25268,25271,25276,25279,25283,25286,25289,25294,25297,25301,25306,25310,25376,25380,25383,25386,25389,25392,25395,25401,25418,25421,25435,25444,25448,25451,25454,25459,25462,25467,25472,25475,25478,25483,25488,25491,25496,25501,25504,25509,25514,25517,25520,25525,25528,25533],[10,24971,24967],{"id":24972},"_1强化学习基本认识",[14,24974,24976],{"id":24975},"_11什么是强化学习","1.1.什么是强化学习",[19,24978,24979],{},"强化学习有两部分组成：智能体和环境；",[19,24981,24982],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,24984,24985],{},"强化学习与监督学习的区别:",[26,24987,24988,24991,24994,24997],{},[29,24989,24990],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[29,24992,24993],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[29,24995,24996],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[29,24998,24999,25000,25003],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[1921,25001,25002],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,25005,25006],{},[3095,25007],{"alt":79,"src":25008},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,25010,25011],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,25013,25014],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,25016,25017],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,25019,25020],{},"获取奖励",[19,25022,25023],{},[3095,25024],{"alt":79,"src":25025},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,25027,25028],{},"强化学习可以分成标准强化学习和深度强化学习",[19,25030,25031],{},[3095,25032],{"alt":79,"src":25033},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,25035,25036],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,25038,25039],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,25041,25043],{"id":25042},"_12强化学习应用场景","1.2.强化学习应用场景",[19,25045,25046],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,25048,25049],{},"具身智能中的应用",[19,25051,25052,25055],{},[1921,25053,25054],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,25057,25058],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,25060,25061,25062,25065,25066,25069,25070,25073,25074],{},"机器人是",[1921,25063,25064],{},"躯体","，深度学习是",[1921,25067,25068],{},"神经元****网络","，VLA是",[1921,25071,25072],{},"通用的行为逻辑","，而强化学习是",[1921,25075,25076],{},"教练",[14,25078,25080],{"id":25079},"_13序列决策","1.3.序列决策",[305,25082,25084],{"id":25083},"_131智能体与环境","1.3.1.智能体与环境",[19,25086,25087],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,25089,25090],{},[3095,25091],{"alt":79,"src":25092},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,25094,25095],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[305,25097,25099],{"id":25098},"_132奖励","1.3.2.奖励",[19,25101,25102],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,25104,25105,25106,25115],{},"取某个策略的表现如何。强化学习的目的就是",[1921,25107,25108,25109,25114],{},"最大化",[1921,25110,25111],{},[1921,25112,25113],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,25117,25118],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[305,25120,25122],{"id":25121},"_133序列决策","1.3.3.序列决策",[19,25124,25125],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,25127,25128],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,25130,25131],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,25133,25134,25138,25139,25141,25142,25144,25145,25147,25148,15376,25151,15376,25154],{},[25135,25136,25137],"em",{},"Ht"," = ",[25135,25140,2363],{},"1*, a",[25135,25143,1985],{},", r",[25135,25146,1985],{},", . . . ,* ",[25135,25149,25150],{},"ot",[25135,25152,25153],{},", at ,",[25135,25155,25156],{},"rt",[19,25158,25159],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,25161,25162,25138,25165,3283,25167,2196],{},[25135,25163,25164],{},"st",[25135,25166,1830],{},[25135,25168,25137],{},[19,25170,25171,25172,25175,25176,25179],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[1921,25173,25174],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[1921,25177,25178],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,25181,25182,25183,25186,25187,25190,25191,25194],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[1921,25184,25185],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[1921,25188,25189],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[25135,25192,25193],{},"S, A, T, R, Ω, O, γ",")。",[19,25196,25197,25198,25200,25201,25203,25204,713,25206,25209,25210,25212,25213,713,25216,25219,25220,25222,25223,25226],{},"其中 ",[25135,25199,2455],{}," 表示状态空间，为隐变量，",[25135,25202,2000],{}," 为动作空间，",[25135,25205,2480],{},[25135,25207,25208],{},"s ′ |s, a",") 为状态转移概率，",[25135,25211,2430],{}," 为奖励函数，",[25135,25214,25215],{},"Ω",[25135,25217,25218],{},"o|s, a",") 为观测概率，",[25135,25221,2357],{}," 为观测空间，",[25135,25224,25225],{},"γ"," 为折扣因子。",[14,25228,25230],{"id":25229},"_14动作空间","1.4.动作空间",[19,25232,25233,25234,25237],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[1921,25235,25236],{},"动作空间"," ，动作空间分为:",[26,25239,25240,25243],{},[29,25241,25242],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[29,25244,25245],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,25247,25249],{"id":25248},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,25251,25252],{},"由策略、价值函数、模型三部分组成",[19,25254,25255],{},"这三者组成马尔可夫决策过程",[19,25257,25258],{},[3095,25259],{"alt":79,"src":25260},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[305,25262,25264],{"id":25263},"_151策略","1.5.1.策略",[19,25266,25267],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,25269,25270],{},"策略可分为两种：",[19,25272,25273],{},[3095,25274],{"alt":79,"src":25275},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,25277,25278],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[305,25280,25282],{"id":25281},"_152价值函数","1.5.2.价值函数",[19,25284,25285],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,25287,25288],{},"价值函数中有一个折扣因子，类似于存款利息",[19,25290,25291],{},[3095,25292],{"alt":79,"src":25293},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,25295,25296],{},"进入某个状态采取的最优动作可以通过Q函数得到",[305,25298,25300],{"id":25299},"_153模型","1.5.3.模型",[19,25302,25303],{},[3095,25304],{"alt":79,"src":25305},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,25307,25309],{"id":25308},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[319,25311,25312,25322],{},[322,25313,25314],{},[325,25315,25316,25319],{},[328,25317,25318],{"align":330},"类型",[328,25320,25321],{"align":330},"特点",[339,25323,25324,25334,25344,25354,25366],{},[325,25325,25326,25331],{},[344,25327,25328],{"align":330},[1921,25329,25330],{},"基于价值的智能体",[344,25332,25333],{"align":330},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[325,25335,25336,25341],{},[344,25337,25338],{"align":330},[1921,25339,25340],{},"基于策略的智能体",[344,25342,25343],{"align":330},"直接学习策略，没有学习价值函数",[325,25345,25346,25351],{},[344,25347,25348],{"align":330},[1921,25349,25350],{},"演员-评论员智能体",[344,25352,25353],{"align":330},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[325,25355,25356,25361],{},[344,25357,25358],{"align":330},[1921,25359,25360],{},"有模型强化学习智能体",[344,25362,25363],{"align":330},[3095,25364],{"alt":79,"src":25365},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[325,25367,25368,25373],{},[344,25369,25370],{"align":330},[1921,25371,25372],{},"免模型强化学习智能体",[344,25374,25375],{"align":330},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,25377,25379],{"id":25378},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,25381,25382],{},"学习和规划是序列决策的两个基本问题",[19,25384,25385],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,25387,25388],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,25390,25391],{},"强化学习用到的库：Gym",[19,25393,25394],{},"Gym可以检验强化学习算法的优劣",[19,25396,25397,25400],{},[1921,25398,25399],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[73,25402,25404],{"className":94,"code":25403,"language":96,"meta":79,"style":79},"pip install gym==0.25.2\n",[32,25405,25406],{"__ignoreMap":79},[100,25407,25408,25410,25412,25415],{"class":102,"line":103},[100,25409,146],{"class":106},[100,25411,114],{"class":110},[100,25413,25414],{"class":110}," gym==",[100,25416,25417],{"class":117},"0.25.2\n",[19,25419,25420],{},"显示图形界面需要",[73,25422,25424],{"className":94,"code":25423,"language":96,"meta":79,"style":79},"pip install pygame\n",[32,25425,25426],{"__ignoreMap":79},[100,25427,25428,25430,25432],{"class":102,"line":103},[100,25429,146],{"class":106},[100,25431,114],{"class":110},[100,25433,25434],{"class":110}," pygame\n",[19,25436,25437,25438],{},"有关Gym库的相关文档介绍：",[2006,25439,25443],{"href":25440,"rel":25441},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[25442],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,25445,25447],{"id":25446},"_18一些补充基础概念","1.8.一些补充基础概念",[19,25449,25450],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,25452,25453],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,25455,25456],{},[3095,25457],{"alt":79,"src":25458},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,25460,25461],{},"折扣率需要自己来设定",[19,25463,25464],{},[3095,25465],{"alt":79,"src":25466},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[26,25468,25469],{},[29,25470,25471],{},"状态转移函数：",[19,25473,25474],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,25476,25477],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,25479,25480],{},[3095,25481],{"alt":79,"src":25482},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[26,25484,25485],{"start":188},[29,25486,25487],{},"动作价值函数：",[19,25489,25490],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,25492,25493],{},[3095,25494],{"alt":79,"src":25495},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[26,25497,25498],{"start":199},[29,25499,25500],{},"最优动作价值函数：",[19,25502,25503],{},"这个函数是对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,25505,25506],{},[3095,25507],{"alt":79,"src":25508},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[26,25510,25511],{"start":532},[29,25512,25513],{},"状态价值函数:",[19,25515,25516],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,25518,25519],{},"它衡量的是“一个具体动作”的长期价值",[19,25521,25522],{},[3095,25523],{"alt":79,"src":25524},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,25526,25527],{},"几个价值函数之间的比较：",[19,25529,25530],{},[3095,25531],{"alt":79,"src":25532},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[1677,25534,25535],{},"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":79,"searchDepth":188,"depth":188,"links":25537},[25538,25539,25540,25545,25546,25551,25552,25553],{"id":24975,"depth":188,"text":24976},{"id":25042,"depth":188,"text":25043},{"id":25079,"depth":188,"text":25080,"children":25541},[25542,25543,25544],{"id":25083,"depth":199,"text":25084},{"id":25098,"depth":199,"text":25099},{"id":25121,"depth":199,"text":25122},{"id":25229,"depth":188,"text":25230},{"id":25248,"depth":188,"text":25249,"children":25547},[25548,25549,25550],{"id":25263,"depth":199,"text":25264},{"id":25281,"depth":199,"text":25282},{"id":25299,"depth":199,"text":25300},{"id":25308,"depth":188,"text":25309},{"id":25378,"depth":188,"text":25379},{"id":25446,"depth":188,"text":25447},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":24967,"description":79},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":25560,"title":25561,"body":25562,"description":25569,"extension":1708,"meta":25580,"navigation":569,"path":25581,"seo":25582,"stem":25583,"__hash__":25584},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":25563,"toc":25578},[25564,25567,25570,25575],[10,25565,25561],{"id":25566},"_2马尔可夫决策过程",[19,25568,25569],{},"这是强化学习的基本框架",[19,25571,25572],{},[3095,25573],{"alt":79,"src":25574},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,25576,25577],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":79,"searchDepth":188,"depth":188,"links":25579},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":25561,"description":25569},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":25586,"title":25587,"body":25588,"description":79,"extension":1708,"meta":25704,"navigation":569,"path":25705,"seo":25706,"stem":25707,"__hash__":25708},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":25589,"toc":25699},[25590,25593,25597,25600,25605,25610,25613,25618,25621,25626,25629,25633,25638,25641,25646,25651,25656,25659,25663,25668,25671,25676,25681,25686,25691,25694],[10,25591,25587],{"id":25592},"_3动作价值函数",[14,25594,25596],{"id":25595},"_31dqn","3.1.DQN",[19,25598,25599],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,25601,25602],{},[3095,25603],{"alt":79,"src":25604},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,25606,25607],{},[3095,25608],{"alt":79,"src":25609},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,25611,25612],{},"DQN算法的描述：",[19,25614,25615],{},[3095,25616],{"alt":79,"src":25617},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,25619,25620],{},"这里的Dense指的是全连接层",[19,25622,25623],{},[3095,25624],{"alt":79,"src":25625},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,25627,25628],{},"当前观测的状态为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,25630,25632],{"id":25631},"_32dqn的举例","3.2.DQN的举例",[19,25634,25635],{},[3095,25636],{"alt":79,"src":25637},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,25639,25640],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,25642,25643],{},[3095,25644],{"alt":79,"src":25645},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,25647,25648],{},[3095,25649],{"alt":79,"src":25650},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,25652,25653],{},[3095,25654],{"alt":79,"src":25655},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,25657,25658],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,25660,25662],{"id":25661},"_33td算法","3.3.TD算法",[19,25664,25665],{},[3095,25666],{"alt":79,"src":25667},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,25669,25670],{},"强化学习TD算法公式的粗略解释：",[19,25672,25673],{},[3095,25674],{"alt":79,"src":25675},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,25677,25678],{},[3095,25679],{"alt":79,"src":25680},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,25682,25683],{},[3095,25684],{"alt":79,"src":25685},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,25687,25688],{},[3095,25689],{"alt":79,"src":25690},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,25692,25693],{},"TD算法总结：",[19,25695,25696],{},[3095,25697],{"alt":79,"src":25698},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":79,"searchDepth":188,"depth":188,"links":25700},[25701,25702,25703],{"id":25595,"depth":188,"text":25596},{"id":25631,"depth":188,"text":25632},{"id":25661,"depth":188,"text":25662},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":25587,"description":79},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":25710,"title":25711,"body":25712,"description":79,"extension":1708,"meta":25945,"navigation":569,"path":25946,"seo":25947,"stem":25948,"__hash__":25949},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":25713,"toc":25941},[25714,25717,25721,25724,25727,25732,25737,25740,25745,25750,25753,25758,25761,25766,25769,25774,25777,25782,25785,25790,25795,25798,25803,25806,25809,25814,25817,25822,25827,25831,25834,25837,25842,25847,25850,25855,25860,25863,25868,25871,25874,25879,25882,25887,25890,25895,25900,25903,25908,25913,25916,25921,25924,25929,25932],[10,25715,25711],{"id":25716},"_4策略学习",[14,25718,25720],{"id":25719},"_41概念描述","4.1.概念描述",[19,25722,25723],{},"用神经网络（策略网络）近似策略函数",[19,25725,25726],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,25728,25729],{},[3095,25730],{"alt":79,"src":25731},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,25733,25734],{},[3095,25735],{"alt":79,"src":25736},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,25738,25739],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,25741,25742],{},[3095,25743],{"alt":79,"src":25744},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,25746,25747],{},[3095,25748],{"alt":79,"src":25749},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,25751,25752],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,25754,25755],{},[3095,25756],{"alt":79,"src":25757},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,25759,25760],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,25762,25763],{},[3095,25764],{"alt":79,"src":25765},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,25767,25768],{},"改进theta要用到策略梯度算法",[19,25770,25771],{},[3095,25772],{"alt":79,"src":25773},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,25775,25776],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,25778,25779],{},[3095,25780],{"alt":79,"src":25781},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,25783,25784],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,25786,25787],{},[3095,25788],{"alt":79,"src":25789},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,25791,25792],{},[3095,25793],{"alt":79,"src":25794},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,25796,25797],{},"梯度公式总结：",[19,25799,25800],{},[3095,25801],{"alt":79,"src":25802},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,25804,25805],{},"两个公式的分别应用场景：",[19,25807,25808],{},"对于离散的动作：",[19,25810,25811],{},[3095,25812],{"alt":79,"src":25813},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,25815,25816],{},"对于连续的动作：",[19,25818,25819],{},[3095,25820],{"alt":79,"src":25821},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,25823,25824],{},[3095,25825],{"alt":79,"src":25826},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,25828,25830],{"id":25829},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,25832,25833],{},"使用蒙特卡洛来近似计算策略梯度",[19,25835,25836],{},"蒙特卡洛法的解释如下：",[19,25838,25839],{},[3095,25840],{"alt":79,"src":25841},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,25843,25844],{},[3095,25845],{"alt":79,"src":25846},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,25848,25849],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[26,25851,25852],{},[29,25853,25854],{},"方法一：reinforce算法",[19,25856,25857],{},[3095,25858],{"alt":79,"src":25859},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,25861,25862],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[26,25864,25865],{"start":188},[29,25866,25867],{},"方法二：actor-critic算法",[19,25869,25870],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,25872,25873],{},"两个网络的构建：",[19,25875,25876],{},[3095,25877],{"alt":79,"src":25878},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,25880,25881],{},"actor网路：",[19,25883,25884],{},[3095,25885],{"alt":79,"src":25886},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,25888,25889],{},"critic网络",[19,25891,25892],{},[3095,25893],{"alt":79,"src":25894},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[26,25896,25897],{"start":199},[29,25898,25899],{},"网络的训练",[19,25901,25902],{},"网络描述",[19,25904,25905],{},[3095,25906],{"alt":79,"src":25907},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,25909,25910],{},[3095,25911],{"alt":79,"src":25912},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,25914,25915],{},"TD算法更新梯度：",[19,25917,25918],{},[3095,25919],{"alt":79,"src":25920},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,25922,25923],{},"策略网络更新梯度：",[19,25925,25926],{},[3095,25927],{"alt":79,"src":25928},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,25930,25931],{},"训练整个流程的具体描述：",[19,25933,25934,25937,25938],{},[3095,25935],{"alt":79,"src":25936},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[3095,25939],{"alt":79,"src":25940},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":79,"searchDepth":188,"depth":188,"links":25942},[25943,25944],{"id":25719,"depth":188,"text":25720},{"id":25829,"depth":188,"text":25830},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":25711,"description":79},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":25951,"title":25952,"body":25953,"description":25960,"extension":1708,"meta":26010,"navigation":569,"path":26011,"seo":26012,"stem":26013,"__hash__":26014},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":25954,"toc":26006},[25955,25958,25961,25965,25968,25973,25977,25980,25985,25988,25993,25998,26001],[10,25956,25952],{"id":25957},"_5alphago算法",[19,25959,25960],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,25962,25964],{"id":25963},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,25966,25967],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,25969,25970],{},[3095,25971],{"alt":79,"src":25972},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,25974,25976],{"id":25975},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,25978,25979],{},"采用强化学习的方式训练策略网络",[19,25981,25982],{},[3095,25983],{"alt":79,"src":25984},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,25986,25987],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,25989,25990],{},[3095,25991],{"alt":79,"src":25992},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,25994,25995],{},[3095,25996],{"alt":79,"src":25997},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,25999,26000],{},"强化学习训练策略网络的总结：",[19,26002,26003],{},[3095,26004],{"alt":79,"src":26005},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":79,"searchDepth":188,"depth":188,"links":26007},[26008,26009],{"id":25963,"depth":188,"text":25964},{"id":25975,"depth":188,"text":25976},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":25952,"description":25960},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":26016,"title":26017,"body":26018,"description":26025,"extension":1708,"meta":26028,"navigation":569,"path":26029,"seo":26030,"stem":26031,"__hash__":26032},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":26019,"toc":26026},[26020,26023],[10,26021,26017],{"id":26022},"_6价值网络",[19,26024,26025],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":79,"searchDepth":188,"depth":188,"links":26027},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":26017,"description":26025},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":26034,"title":26035,"body":26036,"description":26040,"extension":1708,"meta":26041,"navigation":569,"path":26042,"seo":26043,"stem":26044,"__hash__":26045},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":26037,"toc":26038},[],{"title":79,"searchDepth":188,"depth":188,"links":26039},[],"记录自己的强化学习笔记。",{"category":24960},"\u002Fwiki\u002F2025-12-04",{"title":26035,"description":26040},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":26047,"title":26048,"body":26049,"description":24958,"extension":1708,"meta":26088,"navigation":569,"path":26089,"seo":26090,"stem":26091,"__hash__":26092},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":26050,"toc":26086},[26051,26054,26057,26063,26066,26072,26075,26080,26083],[10,26052,26048],{"id":26053},"_1-项目概览与官方资源",[19,26055,26056],{},"官方文档：",[19,26058,26059],{},[2006,26060,26061],{"href":26061,"rel":26062},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[25442],[19,26064,26065],{},"官方代码仓库：",[19,26067,26068],{},[2006,26069,26070],{"href":26070,"rel":26071},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[25442],[19,26073,26074],{},"复现大体流程：",[19,26076,26077],{},[3095,26078],{"alt":79,"src":26079},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,26081,26082],{},"本教程的目标是打通这条链路：",[19,26084,26085],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":79,"searchDepth":188,"depth":188,"links":26087},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":26048,"description":24958},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":26094,"title":26095,"body":26096,"description":24958,"extension":1708,"meta":26210,"navigation":569,"path":26211,"seo":26212,"stem":26213,"__hash__":26214},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":26097,"toc":26205},[26098,26101,26105,26108,26115,26119,26122,26131,26141,26145,26174,26177,26202],[10,26099,26095],{"id":26100},"_2-环境准备与设备连接",[14,26102,26104],{"id":26103},"_21-系统与环境","2.1 系统与环境",[19,26106,26107],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,26109,26110,26111,26114],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[32,26112,26113],{},"lerobot"," 依赖。",[14,26116,26118],{"id":26117},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,26120,26121],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[73,26123,26125],{"className":94,"code":26124,"language":96,"meta":79,"style":79},"lerobot-find-out\n",[32,26126,26127],{"__ignoreMap":79},[100,26128,26129],{"class":102,"line":103},[100,26130,26124],{"class":106},[19,26132,26133,26134,56,26137,26140],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[32,26135,26136],{},"\u002Fdev\u002FttyACM0",[32,26138,26139],{},"\u002Fdev\u002FttyACM1","）。",[14,26142,26144],{"id":26143},"_23-串口授权","2.3 串口授权",[73,26146,26148],{"className":94,"code":26147,"language":96,"meta":79,"style":79},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[32,26149,26150,26163],{"__ignoreMap":79},[100,26151,26152,26154,26157,26160],{"class":102,"line":103},[100,26153,107],{"class":106},[100,26155,26156],{"class":110}," chmod",[100,26158,26159],{"class":117}," 666",[100,26161,26162],{"class":110}," \u002Fdev\u002FttyACM0\n",[100,26164,26165,26167,26169,26171],{"class":102,"line":188},[100,26166,107],{"class":106},[100,26168,26156],{"class":110},[100,26170,26159],{"class":117},[100,26172,26173],{"class":110}," \u002Fdev\u002FttyACM1\n",[19,26175,26176],{},"说明：",[2773,26178,26179,26184,26190,26199],{},[29,26180,26181,26183],{},[32,26182,107],{},"：以 root 权限执行命令。",[29,26185,26186,26189],{},[32,26187,26188],{},"chmod","：修改设备节点权限。",[29,26191,26192,1646,26195,26198],{},[32,26193,26194],{},"666",[32,26196,26197],{},"rw-rw-rw-","，所有用户可读写。",[29,26200,26201],{},"串口号必须替换为你机器上的真实端口。",[1677,26203,26204],{},"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":79,"searchDepth":188,"depth":188,"links":26206},[26207,26208,26209],{"id":26103,"depth":188,"text":26104},{"id":26117,"depth":188,"text":26118},{"id":26143,"depth":188,"text":26144},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":26095,"description":24958},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":26216,"title":26217,"body":26218,"description":24958,"extension":1708,"meta":26379,"navigation":569,"path":26380,"seo":26381,"stem":26382,"__hash__":26383},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":26219,"toc":26375},[26220,26224,26228,26234,26237,26294,26297,26301,26304,26372],[10,26221,26223],{"id":26222},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,26225,26227],{"id":26226},"_31-配置电机-id","3.1 配置电机 ID",[19,26229,26230,26231,26233],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[32,26232,1985],{},"，需要改成机械臂链路里不冲突的编号。",[19,26235,26236],{},"方式一：用 LeRobot 命令逐步写入。",[73,26238,26240],{"className":94,"code":26239,"language":96,"meta":79,"style":79},"# 主臂舵机配置 ID\nlerobot-setup-motors \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0\n\n# 从臂舵机配置 ID\nlerobot-setup-motors \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1\n",[32,26241,26242,26247,26255,26262,26267,26271,26276,26282,26289],{"__ignoreMap":79},[100,26243,26244],{"class":102,"line":103},[100,26245,26246],{"class":1836},"# 主臂舵机配置 ID\n",[100,26248,26249,26252],{"class":102,"line":188},[100,26250,26251],{"class":106},"lerobot-setup-motors",[100,26253,26254],{"class":117}," \\\n",[100,26256,26257,26260],{"class":102,"line":199},[100,26258,26259],{"class":117},"  --teleop.type=so101_leader",[100,26261,26254],{"class":117},[100,26263,26264],{"class":102,"line":532},[100,26265,26266],{"class":117},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[100,26268,26269],{"class":102,"line":577},[100,26270,570],{"emptyLinePlaceholder":569},[100,26272,26273],{"class":102,"line":589},[100,26274,26275],{"class":1836},"# 从臂舵机配置 ID\n",[100,26277,26278,26280],{"class":102,"line":595},[100,26279,26251],{"class":106},[100,26281,26254],{"class":117},[100,26283,26284,26287],{"class":102,"line":601},[100,26285,26286],{"class":117},"  --robot.type=so101_follower",[100,26288,26254],{"class":117},[100,26290,26291],{"class":102,"line":606},[100,26292,26293],{"class":117},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,26295,26296],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,26298,26300],{"id":26299},"_32-机械臂校准","3.2 机械臂校准",[19,26302,26303],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[73,26305,26307],{"className":94,"code":26306,"language":96,"meta":79,"style":79},"# 主臂校准\nlerobot-calibrate \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0 \\\n  --teleop.id=my_awesome_leader_arm\n\n# 从臂校准\nlerobot-calibrate \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm\n",[32,26308,26309,26314,26321,26327,26334,26339,26343,26348,26354,26360,26367],{"__ignoreMap":79},[100,26310,26311],{"class":102,"line":103},[100,26312,26313],{"class":1836},"# 主臂校准\n",[100,26315,26316,26319],{"class":102,"line":188},[100,26317,26318],{"class":106},"lerobot-calibrate",[100,26320,26254],{"class":117},[100,26322,26323,26325],{"class":102,"line":199},[100,26324,26259],{"class":117},[100,26326,26254],{"class":117},[100,26328,26329,26332],{"class":102,"line":532},[100,26330,26331],{"class":117},"  --teleop.port=\u002Fdev\u002FttyACM0",[100,26333,26254],{"class":117},[100,26335,26336],{"class":102,"line":577},[100,26337,26338],{"class":117},"  --teleop.id=my_awesome_leader_arm\n",[100,26340,26341],{"class":102,"line":589},[100,26342,570],{"emptyLinePlaceholder":569},[100,26344,26345],{"class":102,"line":595},[100,26346,26347],{"class":1836},"# 从臂校准\n",[100,26349,26350,26352],{"class":102,"line":601},[100,26351,26318],{"class":106},[100,26353,26254],{"class":117},[100,26355,26356,26358],{"class":102,"line":606},[100,26357,26286],{"class":117},[100,26359,26254],{"class":117},[100,26361,26362,26365],{"class":102,"line":612},[100,26363,26364],{"class":117},"  --robot.port=\u002Fdev\u002FttyACM1",[100,26366,26254],{"class":117},[100,26368,26369],{"class":102,"line":618},[100,26370,26371],{"class":117},"  --robot.id=my_awesome_follower_arm\n",[1677,26373,26374],{},"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":79,"searchDepth":188,"depth":188,"links":26376},[26377,26378],{"id":26226,"depth":188,"text":26227},{"id":26299,"depth":188,"text":26300},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":26217,"description":24958},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":26385,"title":26386,"body":26387,"description":24958,"extension":1708,"meta":26578,"navigation":569,"path":26579,"seo":26580,"stem":26581,"__hash__":26582},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":26388,"toc":26574},[26389,26392,26396,26443,26447,26460,26523,26526,26571],[10,26390,26386],{"id":26391},"_4-遥操与相机接入",[14,26393,26395],{"id":26394},"_41-不带相机遥操","4.1 不带相机遥操",[73,26397,26399],{"className":94,"code":26398,"language":96,"meta":79,"style":79},"lerobot-teleoperate \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0 \\\n  --teleop.id=my_awesome_leader_arm\n",[32,26400,26401,26408,26414,26420,26427,26433,26439],{"__ignoreMap":79},[100,26402,26403,26406],{"class":102,"line":103},[100,26404,26405],{"class":106},"lerobot-teleoperate",[100,26407,26254],{"class":117},[100,26409,26410,26412],{"class":102,"line":188},[100,26411,26286],{"class":117},[100,26413,26254],{"class":117},[100,26415,26416,26418],{"class":102,"line":199},[100,26417,26364],{"class":117},[100,26419,26254],{"class":117},[100,26421,26422,26425],{"class":102,"line":532},[100,26423,26424],{"class":117},"  --robot.id=my_awesome_follower_arm",[100,26426,26254],{"class":117},[100,26428,26429,26431],{"class":102,"line":577},[100,26430,26259],{"class":117},[100,26432,26254],{"class":117},[100,26434,26435,26437],{"class":102,"line":589},[100,26436,26331],{"class":117},[100,26438,26254],{"class":117},[100,26440,26441],{"class":102,"line":595},[100,26442,26338],{"class":117},[14,26444,26446],{"id":26445},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[73,26448,26450],{"className":94,"code":26449,"language":96,"meta":79,"style":79},"lerobot-find-cameras opencv\n",[32,26451,26452],{"__ignoreMap":79},[100,26453,26454,26457],{"class":102,"line":103},[100,26455,26456],{"class":106},"lerobot-find-cameras",[100,26458,26459],{"class":110}," opencv\n",[73,26461,26463],{"className":94,"code":26462,"language":96,"meta":79,"style":79},"lerobot-teleoperate \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm \\\n  --robot.cameras=\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\" \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0 \\\n  --teleop.id=my_awesome_leader_arm \\\n  --display_data=true\n",[32,26464,26465,26471,26477,26483,26489,26499,26505,26511,26518],{"__ignoreMap":79},[100,26466,26467,26469],{"class":102,"line":103},[100,26468,26405],{"class":106},[100,26470,26254],{"class":117},[100,26472,26473,26475],{"class":102,"line":188},[100,26474,26286],{"class":117},[100,26476,26254],{"class":117},[100,26478,26479,26481],{"class":102,"line":199},[100,26480,26364],{"class":117},[100,26482,26254],{"class":117},[100,26484,26485,26487],{"class":102,"line":532},[100,26486,26424],{"class":117},[100,26488,26254],{"class":117},[100,26490,26491,26494,26497],{"class":102,"line":577},[100,26492,26493],{"class":117},"  --robot.cameras=",[100,26495,26496],{"class":110},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[100,26498,26254],{"class":117},[100,26500,26501,26503],{"class":102,"line":589},[100,26502,26259],{"class":117},[100,26504,26254],{"class":117},[100,26506,26507,26509],{"class":102,"line":595},[100,26508,26331],{"class":117},[100,26510,26254],{"class":117},[100,26512,26513,26516],{"class":102,"line":601},[100,26514,26515],{"class":117},"  --teleop.id=my_awesome_leader_arm",[100,26517,26254],{"class":117},[100,26519,26520],{"class":102,"line":606},[100,26521,26522],{"class":117},"  --display_data=true\n",[19,26524,26525],{},"相机参数说明：",[2773,26527,26528,26534,26540,26549,26559,26565],{},[29,26529,26530,26533],{},[32,26531,26532],{},"front","：相机名称。",[29,26535,26536,26539],{},[32,26537,26538],{},"type: opencv","：相机驱动类型。",[29,26541,26542,26545,26546,26140],{},[32,26543,26544],{},"index_or_path","：设备编号或设备路径（如 ",[32,26547,26548],{},"\u002Fdev\u002Fvideo4",[29,26550,26551,26554,26555,26558],{},[32,26552,26553],{},"width"," \u002F ",[32,26556,26557],{},"height","：图像分辨率。",[29,26560,26561,26564],{},[32,26562,26563],{},"fps","：采样帧率。",[29,26566,26567,26570],{},[32,26568,26569],{},"--display_data=true","：启用实时可视化。",[1677,26572,26573],{},"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":79,"searchDepth":188,"depth":188,"links":26575},[26576,26577],{"id":26394,"depth":188,"text":26395},{"id":26445,"depth":188,"text":26446},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":26386,"description":24958},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":26584,"title":26585,"body":26586,"description":24958,"extension":1708,"meta":26757,"navigation":569,"path":26758,"seo":26759,"stem":26760,"__hash__":26761},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":26587,"toc":26752},[26588,26592,26596,26601,26606,26609,26651,26657,26661,26709,26714,26718,26721,26729,26734,26739,26744,26749],[10,26589,26591],{"id":26590},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,26593,26595],{"id":26594},"_51-生成访问令牌","5.1 生成访问令牌",[19,26597,26598],{},[3095,26599],{"alt":79,"src":26600},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,26602,26603],{},[3095,26604],{"alt":79,"src":26605},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,26607,26608],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[73,26610,26612],{"className":94,"code":26611,"language":96,"meta":79,"style":79},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[32,26613,26614,26627],{"__ignoreMap":79},[100,26615,26616,26619,26622,26624],{"class":102,"line":103},[100,26617,26618],{"class":471},"export",[100,26620,26621],{"class":258}," HF_TOKEN",[100,26623,472],{"class":471},[100,26625,26626],{"class":110},"\"your_huggingface_token\"\n",[100,26628,26629,26632,26635,26638,26641,26643,26646,26648],{"class":102,"line":188},[100,26630,26631],{"class":106},"hf",[100,26633,26634],{"class":110}," auth",[100,26636,26637],{"class":110}," login",[100,26639,26640],{"class":117}," --token",[100,26642,11308],{"class":110},[100,26644,26645],{"class":258},"$HF_TOKEN",[100,26647,2019],{"class":110},[100,26649,26650],{"class":117}," --add-to-git-credential\n",[19,26652,26653,26656],{},[32,26654,26655],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,26658,26660],{"id":26659},"_52-验证登录","5.2 验证登录",[73,26662,26664],{"className":94,"code":26663,"language":96,"meta":79,"style":79},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[32,26665,26666,26696],{"__ignoreMap":79},[100,26667,26668,26671,26673,26676,26678,26680,26683,26686,26689,26691,26694],{"class":102,"line":103},[100,26669,26670],{"class":258},"HF_USER",[100,26672,472],{"class":471},[100,26674,26675],{"class":258},"$(",[100,26677,26631],{"class":106},[100,26679,26634],{"class":110},[100,26681,26682],{"class":110}," whoami",[100,26684,26685],{"class":471}," |",[100,26687,26688],{"class":106}," head",[100,26690,173],{"class":117},[100,26692,26693],{"class":117}," 1",[100,26695,809],{"class":258},[100,26697,26698,26701,26703,26706],{"class":102,"line":188},[100,26699,26700],{"class":117},"echo",[100,26702,11308],{"class":110},[100,26704,26705],{"class":258},"$HF_USER",[100,26707,26708],{"class":110},"\"\n",[19,26710,26711],{},[3095,26712],{"alt":79,"src":26713},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,26715,26717],{"id":26716},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,26719,26720],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[2773,26722,26723,26726],{},[29,26724,26725],{},"Dataset Repo（用于上传演示数据）",[29,26727,26728],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,26730,26731],{},[3095,26732],{"alt":79,"src":26733},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,26735,26736],{},[3095,26737],{"alt":79,"src":26738},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,26740,26741],{},[3095,26742],{"alt":79,"src":26743},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,26745,26746],{},[3095,26747],{"alt":79,"src":26748},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[1677,26750,26751],{},"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":79,"searchDepth":188,"depth":188,"links":26753},[26754,26755,26756],{"id":26594,"depth":188,"text":26595},{"id":26659,"depth":188,"text":26660},{"id":26716,"depth":188,"text":26717},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":26585,"description":24958},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":26763,"title":26764,"body":26765,"description":24958,"extension":1708,"meta":26962,"navigation":569,"path":26963,"seo":26964,"stem":26965,"__hash__":26966},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":26766,"toc":26957},[26767,26771,26775,26871,26879,26884,26888,26904,26907,26911,26954],[10,26768,26770],{"id":26769},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,26772,26774],{"id":26773},"_61-录制示教数据","6.1 录制示教数据",[73,26776,26778],{"className":94,"code":26777,"language":96,"meta":79,"style":79},"lerobot-record \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm \\\n  --robot.cameras=\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\" \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0 \\\n  --teleop.id=my_awesome_leader_arm \\\n  --display_data=true \\\n  --dataset.repo_id=\"Embodied-AI-6\u002Fso101_test\" \\\n  --dataset.num_episodes=10 \\\n  --dataset.single_task=\"Grab the green cube\" \\\n  --resume=true\n",[32,26779,26780,26787,26793,26799,26805,26814,26820,26826,26832,26839,26849,26856,26866],{"__ignoreMap":79},[100,26781,26782,26785],{"class":102,"line":103},[100,26783,26784],{"class":106},"lerobot-record",[100,26786,26254],{"class":117},[100,26788,26789,26791],{"class":102,"line":188},[100,26790,26286],{"class":117},[100,26792,26254],{"class":117},[100,26794,26795,26797],{"class":102,"line":199},[100,26796,26364],{"class":117},[100,26798,26254],{"class":117},[100,26800,26801,26803],{"class":102,"line":532},[100,26802,26424],{"class":117},[100,26804,26254],{"class":117},[100,26806,26807,26809,26812],{"class":102,"line":577},[100,26808,26493],{"class":117},[100,26810,26811],{"class":110},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[100,26813,26254],{"class":117},[100,26815,26816,26818],{"class":102,"line":589},[100,26817,26259],{"class":117},[100,26819,26254],{"class":117},[100,26821,26822,26824],{"class":102,"line":595},[100,26823,26331],{"class":117},[100,26825,26254],{"class":117},[100,26827,26828,26830],{"class":102,"line":601},[100,26829,26515],{"class":117},[100,26831,26254],{"class":117},[100,26833,26834,26837],{"class":102,"line":606},[100,26835,26836],{"class":117},"  --display_data=true",[100,26838,26254],{"class":117},[100,26840,26841,26844,26847],{"class":102,"line":612},[100,26842,26843],{"class":117},"  --dataset.repo_id=",[100,26845,26846],{"class":110},"\"Embodied-AI-6\u002Fso101_test\"",[100,26848,26254],{"class":117},[100,26850,26851,26854],{"class":102,"line":618},[100,26852,26853],{"class":117},"  --dataset.num_episodes=10",[100,26855,26254],{"class":117},[100,26857,26858,26861,26864],{"class":102,"line":623},[100,26859,26860],{"class":117},"  --dataset.single_task=",[100,26862,26863],{"class":110},"\"Grab the green cube\"",[100,26865,26254],{"class":117},[100,26867,26868],{"class":102,"line":629},[100,26869,26870],{"class":117},"  --resume=true\n",[2773,26872,26873],{},[29,26874,26875,26878],{},[32,26876,26877],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,26880,26881],{},[3095,26882],{"alt":79,"src":26883},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,26885,26887],{"id":26886},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[73,26889,26891],{"className":94,"code":26890,"language":96,"meta":79,"style":79},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[32,26892,26893],{"__ignoreMap":79},[100,26894,26895,26898,26901],{"class":102,"line":103},[100,26896,26897],{"class":106},"rm",[100,26899,26900],{"class":117}," -rf",[100,26902,26903],{"class":110}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,26905,26906],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,26908,26910],{"id":26909},"_63-回放指定-episode","6.3 回放指定 episode",[73,26912,26914],{"className":94,"code":26913,"language":96,"meta":79,"style":79},"lerobot-replay \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm \\\n  --dataset.repo_id=\"Embodied-AI-6\u002Fso101_test\" \\\n  --dataset.episode=0\n",[32,26915,26916,26923,26929,26935,26941,26949],{"__ignoreMap":79},[100,26917,26918,26921],{"class":102,"line":103},[100,26919,26920],{"class":106},"lerobot-replay",[100,26922,26254],{"class":117},[100,26924,26925,26927],{"class":102,"line":188},[100,26926,26286],{"class":117},[100,26928,26254],{"class":117},[100,26930,26931,26933],{"class":102,"line":199},[100,26932,26364],{"class":117},[100,26934,26254],{"class":117},[100,26936,26937,26939],{"class":102,"line":532},[100,26938,26424],{"class":117},[100,26940,26254],{"class":117},[100,26942,26943,26945,26947],{"class":102,"line":577},[100,26944,26843],{"class":117},[100,26946,26846],{"class":110},[100,26948,26254],{"class":117},[100,26950,26951],{"class":102,"line":589},[100,26952,26953],{"class":117},"  --dataset.episode=0\n",[1677,26955,26956],{},"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":79,"searchDepth":188,"depth":188,"links":26958},[26959,26960,26961],{"id":26773,"depth":188,"text":26774},{"id":26886,"depth":188,"text":26887},{"id":26909,"depth":188,"text":26910},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":26764,"description":24958},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":26968,"title":26969,"body":26970,"description":24958,"extension":1708,"meta":27098,"navigation":569,"path":27099,"seo":27100,"stem":27101,"__hash__":27102},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":26971,"toc":27096},[26972,26976,27039,27042,27089,27094],[10,26973,26975],{"id":26974},"_7-act-模型训练","7. ACT 模型训练",[73,26977,26979],{"className":94,"code":26978,"language":96,"meta":79,"style":79},"lerobot-train \\\n  --dataset.repo_id=\"Embodied-AI-6\u002Fso101_test\" \\\n  --policy.type=act \\\n  --output_dir=outputs\u002Ftrain\u002Fact_so101_test \\\n  --job_name=act_so101_test \\\n  --policy.device=cuda \\\n  --wandb.enable=false \\\n  --policy.repo_id=\"Embodied-AI-6\u002Flerobot_new\"\n",[32,26980,26981,26988,26996,27003,27010,27017,27024,27031],{"__ignoreMap":79},[100,26982,26983,26986],{"class":102,"line":103},[100,26984,26985],{"class":106},"lerobot-train",[100,26987,26254],{"class":117},[100,26989,26990,26992,26994],{"class":102,"line":188},[100,26991,26843],{"class":117},[100,26993,26846],{"class":110},[100,26995,26254],{"class":117},[100,26997,26998,27001],{"class":102,"line":199},[100,26999,27000],{"class":117},"  --policy.type=act",[100,27002,26254],{"class":117},[100,27004,27005,27008],{"class":102,"line":532},[100,27006,27007],{"class":117},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[100,27009,26254],{"class":117},[100,27011,27012,27015],{"class":102,"line":577},[100,27013,27014],{"class":117},"  --job_name=act_so101_test",[100,27016,26254],{"class":117},[100,27018,27019,27022],{"class":102,"line":589},[100,27020,27021],{"class":117},"  --policy.device=cuda",[100,27023,26254],{"class":117},[100,27025,27026,27029],{"class":102,"line":595},[100,27027,27028],{"class":117},"  --wandb.enable=false",[100,27030,26254],{"class":117},[100,27032,27033,27036],{"class":102,"line":601},[100,27034,27035],{"class":117},"  --policy.repo_id=",[100,27037,27038],{"class":110},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,27040,27041],{},"参数说明：",[2773,27043,27044,27050,27056,27062,27068,27077,27083],{},[29,27045,27046,27049],{},[32,27047,27048],{},"--dataset.repo_id","：训练数据集仓库。",[29,27051,27052,27055],{},[32,27053,27054],{},"--policy.type=act","：策略模型类型为 ACT。",[29,27057,27058,27061],{},[32,27059,27060],{},"--output_dir","：本地训练输出目录。",[29,27063,27064,27067],{},[32,27065,27066],{},"--job_name","：训练任务名称。",[29,27069,27070,27073,27074,26140],{},[32,27071,27072],{},"--policy.device","：训练设备（如 ",[32,27075,27076],{},"cuda",[29,27078,27079,27082],{},[32,27080,27081],{},"--wandb.enable","：是否启用 WandB 可视化。",[29,27084,27085,27088],{},[32,27086,27087],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,27090,27091],{},[3095,27092],{"alt":79,"src":27093},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[1677,27095,26956],{},{"title":79,"searchDepth":188,"depth":188,"links":27097},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":26969,"description":24958},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":27104,"title":27105,"body":27106,"description":24958,"extension":1708,"meta":27193,"navigation":569,"path":27194,"seo":27195,"stem":27196,"__hash__":27197},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":27107,"toc":27191},[27108,27111,27114,27181,27189],[10,27109,27105],{"id":27110},"_8-策略部署与自动采集",[19,27112,27113],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[73,27115,27117],{"className":94,"code":27116,"language":96,"meta":79,"style":79},"lerobot-record \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.cameras=\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\" \\\n  --robot.id=my_awesome_follower_arm \\\n  --display_data=false \\\n  --dataset.repo_id=\"Embodied-AI-6\u002Fso101_test\" \\\n  --dataset.single_task=\"Grab the green cube\" \\\n  --policy.path=\"Embodied-AI-6\u002Flerobot_new\"\n",[32,27118,27119,27125,27131,27137,27145,27151,27158,27166,27174],{"__ignoreMap":79},[100,27120,27121,27123],{"class":102,"line":103},[100,27122,26784],{"class":106},[100,27124,26254],{"class":117},[100,27126,27127,27129],{"class":102,"line":188},[100,27128,26286],{"class":117},[100,27130,26254],{"class":117},[100,27132,27133,27135],{"class":102,"line":199},[100,27134,26364],{"class":117},[100,27136,26254],{"class":117},[100,27138,27139,27141,27143],{"class":102,"line":532},[100,27140,26493],{"class":117},[100,27142,26811],{"class":110},[100,27144,26254],{"class":117},[100,27146,27147,27149],{"class":102,"line":577},[100,27148,26424],{"class":117},[100,27150,26254],{"class":117},[100,27152,27153,27156],{"class":102,"line":589},[100,27154,27155],{"class":117},"  --display_data=false",[100,27157,26254],{"class":117},[100,27159,27160,27162,27164],{"class":102,"line":595},[100,27161,26843],{"class":117},[100,27163,26846],{"class":110},[100,27165,26254],{"class":117},[100,27167,27168,27170,27172],{"class":102,"line":601},[100,27169,26860],{"class":117},[100,27171,26863],{"class":110},[100,27173,26254],{"class":117},[100,27175,27176,27179],{"class":102,"line":606},[100,27177,27178],{"class":117},"  --policy.path=",[100,27180,27038],{"class":110},[2773,27182,27183],{},[29,27184,27185,27188],{},[32,27186,27187],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[1677,27190,26956],{},{"title":79,"searchDepth":188,"depth":188,"links":27192},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":27105,"description":24958},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":27199,"title":27200,"body":27201,"description":24958,"extension":1708,"meta":27230,"navigation":569,"path":27231,"seo":27232,"stem":27233,"__hash__":27234},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":27202,"toc":27228},[27203,27207,27210,27216,27219,27225],[10,27204,27206],{"id":27205},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,27208,27209],{},"项目地址：",[19,27211,27212],{},[2006,27213,27214],{"href":27214,"rel":27215},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[25442],[19,27217,27218],{},"参考教程：",[19,27220,27221],{},[2006,27222,27223],{"href":27223,"rel":27224},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[25442],[19,27226,27227],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":79,"searchDepth":188,"depth":188,"links":27229},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":27200,"description":24958},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":27236,"title":27237,"body":27238,"description":27242,"extension":1708,"meta":27243,"navigation":569,"path":27244,"seo":27245,"stem":27246,"__hash__":27247},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":27239,"toc":27240},[],{"title":79,"searchDepth":188,"depth":188,"links":27241},[],"act复现",{"category":24960},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":27237,"description":27242},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":27249,"title":27250,"body":27251,"description":79,"extension":1708,"meta":27553,"navigation":569,"path":27554,"seo":27555,"stem":27556,"__hash__":27557},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":27252,"toc":27545},[27253,27256,27260,27270,27277,27284,27287,27294,27297,27300,27304,27316,27320,27366,27369,27372,27375,27378,27381,27385,27423,27429,27433,27487,27492,27495,27498,27503,27506,27511,27514,27517,27521,27524,27527,27531],[10,27254,27250],{"id":27255},"_1简介",[305,27257,27259],{"id":27258},"_11什么是-docker","1.1什么是 Docker？",[19,27261,27262,27263,27266,27267],{},"Docker 是一个开源的 ",[1921,27264,27265],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[1921,27268,27269],{},"一次构建，到处运行。",[19,27271,27272,27273,27276],{},"“ ",[1921,27274,27275],{},"一次构建，到处运行"," ”也就是说：",[26,27278,27279],{},[29,27280,27281],{},[1921,27282,27283],{},"之前：",[19,27285,27286],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[26,27288,27289],{},[29,27290,27291],{},[1921,27292,27293],{},"使用docker后：",[19,27295,27296],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,27298,27299],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[305,27301,27303],{"id":27302},"_12它是怎么工作的","1.2.它是怎么工作的？",[2773,27305,27306,27309],{},[29,27307,27308],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[29,27310,27311,27312,27315],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[1921,27313,27314],{},"无论在哪运行都一样稳定"," 。",[305,27317,27319],{"id":27318},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[319,27321,27322,27332],{},[322,27323,27324],{},[325,27325,27326,27329],{},[328,27327,27328],{"align":330},"概念",[328,27330,27331],{"align":330},"解释",[339,27333,27334,27342,27350,27358],{},[325,27335,27336,27339],{},[344,27337,27338],{"align":330},"镜像",[344,27340,27341],{"align":330},"Image，运行容器的模板，像是一个应用快照",[325,27343,27344,27347],{},[344,27345,27346],{"align":330},"容器",[344,27348,27349],{"align":330},"Container，运行中的镜像实例，有自己的文件系统、网络等",[325,27351,27352,27355],{},[344,27353,27354],{"align":330},"Dockerfile",[344,27356,27357],{"align":330},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[325,27359,27360,27363],{},[344,27361,27362],{"align":330},"仓库",[344,27364,27365],{"align":330},"Registry，存放镜像的地方，比如 Docker Hub",[19,27367,27368],{},"抽象化理解:",[19,27370,27371],{},"Docker镜像≈C++类",[19,27373,27374],{},"Docker容器≈C++类实例(即对象)",[19,27376,27377],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,27379,27380],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[305,27382,27384],{"id":27383},"_14类比理解","1.4.类比理解",[319,27386,27387,27397],{},[322,27388,27389],{},[325,27390,27391,27394],{},[328,27392,27393],{"align":330},"传统部署",[328,27395,27396],{"align":330},"Docker部署",[339,27398,27399,27407,27415],{},[325,27400,27401,27404],{},[344,27402,27403],{"align":330},"手动安装依赖、调试版本不一致问题",[344,27405,27406],{"align":330},"一次打包环境和代码",[325,27408,27409,27412],{},[344,27410,27411],{"align":330},"程序“裸奔”跑在系统上",[344,27413,27414],{"align":330},"程序“穿着容器”隔离运行",[325,27416,27417,27420],{},[344,27418,27419],{"align":330},"容易“在我电脑上能跑”",[344,27421,27422],{"align":330},"保证“无论在哪都能跑”",[19,27424,27425,27426],{},"就像快递包裹： ",[1921,27427,27428],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[305,27430,27432],{"id":27431},"_15docker-的核心优势","1.5.Docker 的核心优势",[319,27434,27435,27445],{},[322,27436,27437],{},[325,27438,27439,27442],{},[328,27440,27441],{"align":330},"优势",[328,27443,27444],{"align":330},"说明",[339,27446,27447,27455,27463,27471,27479],{},[325,27448,27449,27452],{},[344,27450,27451],{"align":330},"轻量级",[344,27453,27454],{"align":330},"基于系统内核共享，启动速度快，占资源少",[325,27456,27457,27460],{},[344,27458,27459],{"align":330},"跨平台",[344,27461,27462],{"align":330},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[325,27464,27465,27468],{},[344,27466,27467],{"align":330},"易于迁移部署",[344,27469,27470],{"align":330},"应用和环境一起封装，不怕依赖不一致",[325,27472,27473,27476],{},[344,27474,27475],{"align":330},"易于版本控制",[344,27477,27478],{"align":330},"镜像版本可控，支持回滚",[325,27480,27481,27484],{},[344,27482,27483],{"align":330},"生态丰富",[344,27485,27486],{"align":330},"Docker Hub 上有成千上万的现成镜像可用",[26,27488,27489],{},[29,27490,27491],{},"在Linux上可以几乎实现无性能损失。",[19,27493,27494],{},"docker里的发行版和本机共用Linux内核。",[19,27496,27497],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[26,27499,27500],{},[29,27501,27502],{},"可以快速部署在绝大多数Linux发行版",[19,27504,27505],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[26,27507,27508],{},[29,27509,27510],{},"配置环境简单",[19,27512,27513],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,27515,27516],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[26,27518,27519],{},[29,27520,27483],{},[19,27522,27523],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,27525,27526],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[305,27528,27530],{"id":27529},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[2773,27532,27533,27536,27539,27542],{},[29,27534,27535],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[29,27537,27538],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[29,27540,27541],{},"微服务架构：每个服务一个容器，灵活组合",[29,27543,27544],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":79,"searchDepth":188,"depth":188,"links":27546},[27547,27548,27549,27550,27551,27552],{"id":27258,"depth":199,"text":27259},{"id":27302,"depth":199,"text":27303},{"id":27318,"depth":199,"text":27319},{"id":27383,"depth":199,"text":27384},{"id":27431,"depth":199,"text":27432},{"id":27529,"depth":199,"text":27530},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":27250,"description":79},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":27559,"title":27560,"body":27561,"description":79,"extension":1708,"meta":28291,"navigation":569,"path":28292,"seo":28293,"stem":28294,"__hash__":28295},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":27562,"toc":28286},[27563,27566,27570,27573,27576,27582,27588,27592,27601,27604,27660,27663,27714,27717,27800,27803,27840,27844,27855,27868,27875,27878,27957,27960,28009,28012,28035,28039,28046,28049,28065,28071,28074,28090,28096,28099,28115,28129,28135,28155,28161,28164,28176,28182,28185,28199,28205,28208,28228,28233,28236,28239,28243,28246,28249,28252,28259,28262,28265,28268,28273,28278,28283],[10,27564,27560],{"id":27565},"_2安装docker",[305,27567,27569],{"id":27568},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,27571,27572],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,27574,27575],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,27577,27578],{},[2006,27579,27580],{"href":27580,"rel":27581},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[25442],[19,27583,27584],{},[2006,27585,27586],{"href":27586,"rel":27587},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[25442],[23579,27589,27591],{"id":27590},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,27593,27594,27595,27600],{},"以下内容根据 ",[2006,27596,27599],{"href":27597,"rel":27598},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[25442],"官方文档"," 修改而来。",[19,27602,27603],{},"如果你过去安装过 docker，先删掉：",[73,27605,27607],{"className":94,"code":27606,"language":96,"meta":79,"style":79},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[32,27608,27609],{"__ignoreMap":79},[100,27610,27611,27613,27616,27618,27621,27624,27627,27630,27633,27636,27639,27642,27645,27648,27651,27654,27657],{"class":102,"line":103},[100,27612,1051],{"class":471},[100,27614,27615],{"class":258}," pkg ",[100,27617,854],{"class":471},[100,27619,27620],{"class":110}," docker.io",[100,27622,27623],{"class":110}," docker-doc",[100,27625,27626],{"class":110}," docker-compose",[100,27628,27629],{"class":110}," docker-compose-v2",[100,27631,27632],{"class":110}," podman-docker",[100,27634,27635],{"class":110}," containerd",[100,27637,27638],{"class":110}," runc",[100,27640,27641],{"class":258},"; ",[100,27643,27644],{"class":471},"do",[100,27646,27647],{"class":106}," sudo",[100,27649,27650],{"class":110}," apt-get",[100,27652,27653],{"class":110}," remove",[100,27655,27656],{"class":258}," $pkg; ",[100,27658,27659],{"class":471},"done\n",[19,27661,27662],{},"首先安装依赖和GPG：",[73,27664,27668],{"className":27665,"code":27666,"language":27667,"meta":79,"style":79},"language-markdown shiki shiki-themes github-light github-dark","# Add Docker's official GPG key:\nsudo apt-get update\nsudo apt-get install ca-certificates curl\nsudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\nsudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\nsudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n\n# 如果上面这行报错就弄下面这行\nsudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n","markdown",[32,27669,27670,27675,27680,27685,27690,27695,27700,27704,27709],{"__ignoreMap":79},[100,27671,27672],{"class":102,"line":103},[100,27673,27674],{},"# Add Docker's official GPG key:\n",[100,27676,27677],{"class":102,"line":188},[100,27678,27679],{},"sudo apt-get update\n",[100,27681,27682],{"class":102,"line":199},[100,27683,27684],{},"sudo apt-get install ca-certificates curl\n",[100,27686,27687],{"class":102,"line":532},[100,27688,27689],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[100,27691,27692],{"class":102,"line":577},[100,27693,27694],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[100,27696,27697],{"class":102,"line":589},[100,27698,27699],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[100,27701,27702],{"class":102,"line":595},[100,27703,570],{"emptyLinePlaceholder":569},[100,27705,27706],{"class":102,"line":601},[100,27707,27708],{},"# 如果上面这行报错就弄下面这行\n",[100,27710,27711],{"class":102,"line":606},[100,27712,27713],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,27715,27716],{},"信任 Docker 的 GPG 公钥并添加仓库：",[73,27718,27720],{"className":94,"code":27719,"language":96,"meta":79,"style":79},"# Add the repository to Apt sources:\necho \\\n  \"deb [arch=$(dpkg --print-architecture) signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu \\\n  \"$(. \u002Fetc\u002Fos-release && echo \"$VERSION_CODENAME\")\" stable\" | \\\n  sudo tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list > \u002Fdev\u002Fnull\n",[32,27721,27722,27727,27733,27750,27783],{"__ignoreMap":79},[100,27723,27724],{"class":102,"line":103},[100,27725,27726],{"class":1836},"# Add the repository to Apt sources:\n",[100,27728,27729,27731],{"class":102,"line":188},[100,27730,26700],{"class":117},[100,27732,26254],{"class":117},[100,27734,27735,27738,27741,27744,27747],{"class":102,"line":199},[100,27736,27737],{"class":110},"  \"deb [arch=$(",[100,27739,27740],{"class":106},"dpkg",[100,27742,27743],{"class":117}," --print-architecture",[100,27745,27746],{"class":110},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[100,27748,27749],{"class":117},"\\\n",[100,27751,27752,27755,27757,27759,27762,27765,27767,27769,27772,27774,27776,27779,27781],{"class":102,"line":532},[100,27753,27754],{"class":110},"  \"",[100,27756,26675],{"class":258},[100,27758,2325],{"class":117},[100,27760,27761],{"class":110}," \u002Fetc\u002Fos-release",[100,27763,27764],{"class":258}," && ",[100,27766,26700],{"class":117},[100,27768,11308],{"class":110},[100,27770,27771],{"class":258},"$VERSION_CODENAME",[100,27773,2019],{"class":110},[100,27775,2196],{"class":258},[100,27777,27778],{"class":110},"\" stable\"",[100,27780,26685],{"class":471},[100,27782,26254],{"class":117},[100,27784,27785,27788,27791,27794,27797],{"class":102,"line":577},[100,27786,27787],{"class":106},"  sudo",[100,27789,27790],{"class":110}," tee",[100,27792,27793],{"class":110}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[100,27795,27796],{"class":471}," >",[100,27798,27799],{"class":110}," \u002Fdev\u002Fnull\n",[19,27801,27802],{},"最后安装",[73,27804,27806],{"className":94,"code":27805,"language":96,"meta":79,"style":79},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[32,27807,27808,27817],{"__ignoreMap":79},[100,27809,27810,27812,27814],{"class":102,"line":103},[100,27811,107],{"class":106},[100,27813,27650],{"class":110},[100,27815,27816],{"class":110}," update\n",[100,27818,27819,27821,27823,27825,27828,27831,27834,27837],{"class":102,"line":188},[100,27820,107],{"class":106},[100,27822,27650],{"class":110},[100,27824,114],{"class":110},[100,27826,27827],{"class":110}," docker-ce",[100,27829,27830],{"class":110}," docker-ce-cli",[100,27832,27833],{"class":110}," containerd.io",[100,27835,27836],{"class":110}," docker-buildx-plugin",[100,27838,27839],{"class":110}," docker-compose-plugin\n",[23579,27841,27843],{"id":27842},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,27845,27846,27847,27850,27851,27854],{},"查看自己自己包管理工具版本（dnf是 ",[1921,27848,27849],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[1921,27852,27853],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[73,27856,27858],{"className":94,"code":27857,"language":96,"meta":79,"style":79},"dnf --version\n",[32,27859,27860],{"__ignoreMap":79},[100,27861,27862,27865],{"class":102,"line":103},[100,27863,27864],{"class":106},"dnf",[100,27866,27867],{"class":117}," --version\n",[19,27869,27594,27870,27874],{},[2006,27871,27599],{"href":27872,"rel":27873},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[25442]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,27876,27877],{},"如果你之前安装过 docker，请先删掉",[73,27879,27881],{"className":94,"code":27880,"language":96,"meta":79,"style":79},"sudo dnf remove docker \\\n                  docker-client \\\n                  docker-client-latest \\\n                  docker-common \\\n                  docker-latest \\\n                  docker-latest-logrotate \\\n                  docker-logrotate \\\n                  docker-selinux \\\n                  docker-engine-selinux \\\n                  docker-engine\n",[32,27882,27883,27896,27903,27910,27917,27924,27931,27938,27945,27952],{"__ignoreMap":79},[100,27884,27885,27887,27889,27891,27894],{"class":102,"line":103},[100,27886,107],{"class":106},[100,27888,111],{"class":110},[100,27890,27653],{"class":110},[100,27892,27893],{"class":110}," docker",[100,27895,26254],{"class":117},[100,27897,27898,27901],{"class":102,"line":188},[100,27899,27900],{"class":110},"                  docker-client",[100,27902,26254],{"class":117},[100,27904,27905,27908],{"class":102,"line":199},[100,27906,27907],{"class":110},"                  docker-client-latest",[100,27909,26254],{"class":117},[100,27911,27912,27915],{"class":102,"line":532},[100,27913,27914],{"class":110},"                  docker-common",[100,27916,26254],{"class":117},[100,27918,27919,27922],{"class":102,"line":577},[100,27920,27921],{"class":110},"                  docker-latest",[100,27923,26254],{"class":117},[100,27925,27926,27929],{"class":102,"line":589},[100,27927,27928],{"class":110},"                  docker-latest-logrotate",[100,27930,26254],{"class":117},[100,27932,27933,27936],{"class":102,"line":595},[100,27934,27935],{"class":110},"                  docker-logrotate",[100,27937,26254],{"class":117},[100,27939,27940,27943],{"class":102,"line":601},[100,27941,27942],{"class":110},"                  docker-selinux",[100,27944,26254],{"class":117},[100,27946,27947,27950],{"class":102,"line":606},[100,27948,27949],{"class":110},"                  docker-engine-selinux",[100,27951,26254],{"class":117},[100,27953,27954],{"class":102,"line":612},[100,27955,27956],{"class":110},"                  docker-engine\n",[19,27958,27959],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[73,27961,27963],{"className":94,"code":27962,"language":96,"meta":79,"style":79},"sudo dnf -y install dnf-plugins-core\nsudo dnf config-manager addrepo --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\nsudo sed -i 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+' \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[32,27964,27965,27978,27993],{"__ignoreMap":79},[100,27966,27967,27969,27971,27973,27975],{"class":102,"line":103},[100,27968,107],{"class":106},[100,27970,111],{"class":110},[100,27972,118],{"class":117},[100,27974,114],{"class":110},[100,27976,27977],{"class":110}," dnf-plugins-core\n",[100,27979,27980,27982,27984,27987,27990],{"class":102,"line":188},[100,27981,107],{"class":106},[100,27983,111],{"class":110},[100,27985,27986],{"class":110}," config-manager",[100,27988,27989],{"class":110}," addrepo",[100,27991,27992],{"class":117}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[100,27994,27995,27997,28000,28003,28006],{"class":102,"line":199},[100,27996,107],{"class":106},[100,27998,27999],{"class":110}," sed",[100,28001,28002],{"class":117}," -i",[100,28004,28005],{"class":110}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[100,28007,28008],{"class":110}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,28010,28011],{},"最后安装：",[73,28013,28015],{"className":94,"code":28014,"language":96,"meta":79,"style":79},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[32,28016,28017],{"__ignoreMap":79},[100,28018,28019,28021,28023,28025,28027,28029,28031,28033],{"class":102,"line":103},[100,28020,107],{"class":106},[100,28022,111],{"class":110},[100,28024,114],{"class":110},[100,28026,27827],{"class":110},[100,28028,27830],{"class":110},[100,28030,27833],{"class":110},[100,28032,27836],{"class":110},[100,28034,27839],{"class":110},[305,28036,28038],{"id":28037},"_22配置环境","2.2.配置环境",[23579,28040,28042,28045],{"id":28041},"_221检查-docker-服务状态",[1921,28043,28044],{},"2.2.1.检查 Docker 服务状态"," ：",[19,28047,28048],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[73,28050,28052],{"className":94,"code":28051,"language":96,"meta":79,"style":79},"systemctl status docker\n",[32,28053,28054],{"__ignoreMap":79},[100,28055,28056,28059,28062],{"class":102,"line":103},[100,28057,28058],{"class":106},"systemctl",[100,28060,28061],{"class":110}," status",[100,28063,28064],{"class":110}," docker\n",[23579,28066,28068,28045],{"id":28067},"_222启动-docker-服务",[1921,28069,28070],{},"2.2.2.启动 Docker 服务",[19,28072,28073],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[73,28075,28077],{"className":94,"code":28076,"language":96,"meta":79,"style":79},"sudo systemctl start docker\n",[32,28078,28079],{"__ignoreMap":79},[100,28080,28081,28083,28086,28088],{"class":102,"line":103},[100,28082,107],{"class":106},[100,28084,28085],{"class":110}," systemctl",[100,28087,5783],{"class":110},[100,28089,28064],{"class":110},[23579,28091,28093,28045],{"id":28092},"_223设置-docker-开机自启",[1921,28094,28095],{},"2.2.3.设置 Docker 开机自启",[19,28097,28098],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[73,28100,28102],{"className":94,"code":28101,"language":96,"meta":79,"style":79},"sudo systemctl enable docker\n",[32,28103,28104],{"__ignoreMap":79},[100,28105,28106,28108,28110,28113],{"class":102,"line":103},[100,28107,107],{"class":106},[100,28109,28085],{"class":110},[100,28111,28112],{"class":110}," enable",[100,28114,28064],{"class":110},[23579,28116,28118,15376,28121,15376,28126,28045],{"id":28117},"_224将用户添加到-docker-组",[1921,28119,28120],{},"2.2.4.将用户添加到",[1921,28122,28123],{},[32,28124,28125],{},"docker",[1921,28127,28128],{},"组",[19,28130,28131,28132,28134],{},"使用以下命令将当前用户添加到 ",[32,28133,28125],{}," 组：",[73,28136,28138],{"className":94,"code":28137,"language":96,"meta":79,"style":79},"sudo usermod -aG docker $USER\n",[32,28139,28140],{"__ignoreMap":79},[100,28141,28142,28144,28147,28150,28152],{"class":102,"line":103},[100,28143,107],{"class":106},[100,28145,28146],{"class":110}," usermod",[100,28148,28149],{"class":117}," -aG",[100,28151,27893],{"class":110},[100,28153,28154],{"class":258}," $USER\n",[23579,28156,28158,28045],{"id":28157},"_225退出并重新登录",[1921,28159,28160],{},"2.2.5.退出并重新登录",[19,28162,28163],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[73,28165,28167],{"className":94,"code":28166,"language":96,"meta":79,"style":79},"newgrp docker\n",[32,28168,28169],{"__ignoreMap":79},[100,28170,28171,28174],{"class":102,"line":103},[100,28172,28173],{"class":106},"newgrp",[100,28175,28064],{"class":110},[23579,28177,28179,28045],{"id":28178},"_226重新启动-docker-服务如果需要",[1921,28180,28181],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,28183,28184],{},"确保 Docker 服务正在运行，可以使用以下命令：",[73,28186,28187],{"className":94,"code":28076,"language":96,"meta":79,"style":79},[32,28188,28189],{"__ignoreMap":79},[100,28190,28191,28193,28195,28197],{"class":102,"line":103},[100,28192,107],{"class":106},[100,28194,28085],{"class":110},[100,28196,5783],{"class":110},[100,28198,28064],{"class":110},[23579,28200,28202,28045],{"id":28201},"_227重启电脑后检查-docker-服务状态",[1921,28203,28204],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,28206,28207],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[73,28209,28211],{"className":94,"code":28210,"language":96,"meta":79,"style":79},"sudo reboot\nsystemctl status docker\n",[32,28212,28213,28220],{"__ignoreMap":79},[100,28214,28215,28217],{"class":102,"line":103},[100,28216,107],{"class":106},[100,28218,28219],{"class":110}," reboot\n",[100,28221,28222,28224,28226],{"class":102,"line":188},[100,28223,28058],{"class":106},[100,28225,28061],{"class":110},[100,28227,28064],{"class":110},[19,28229,28230],{},[3095,28231],{"alt":79,"src":28232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,28234,28235],{},"第三行显示enabled说明开机自启动成功",[19,28237,28238],{},"按q退出",[305,28240,28242],{"id":28241},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,28244,28245],{},"优先使用linux来使用docker是比较好的",[19,28247,28248],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,28250,28251],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,28253,28254,28255],{},"官方下载安装:",[2006,28256,28257],{"href":28257,"rel":28258},"https:\u002F\u002Fwww.docker.com\u002F",[25442],[19,28260,28261],{},"Windows的Docker显卡直通与USB直通:",[19,28263,28264],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,28266,28267],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,28269,28270],{},[3095,28271],{"alt":79,"src":28272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,28274,28275],{},[3095,28276],{"alt":79,"src":28277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,28279,28280],{},[3095,28281],{"alt":79,"src":28282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[1677,28284,28285],{},"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":79,"searchDepth":188,"depth":188,"links":28287},[28288,28289,28290],{"id":27568,"depth":199,"text":27569},{"id":28037,"depth":199,"text":28038},{"id":28241,"depth":199,"text":28242},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":27560,"description":79},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":28297,"title":28298,"body":28299,"description":28306,"extension":1708,"meta":28999,"navigation":569,"path":29000,"seo":29001,"stem":29002,"__hash__":29003},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":28300,"toc":28993},[28301,28304,28307,28311,28316,28321,28324,28352,28357,28366,28369,28374,28378,28385,28390,28396,28400,28403,28407,28412,28504,28509,28527,28532,28553,28558,28574,28578,28583,28612,28617,28663,28668,28712,28720,28737,28742,28758,28763,28777,28780,28783,28786,28789,28818,28821,28826,28830,28833,28836,28842,28845,28848,28851,28913,28920,28925,28928,28946,28950,28953,28970,28973,28976,28990],[10,28302,28298],{"id":28303},"_3docker直通",[19,28305,28306],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[305,28308,28310],{"id":28309},"_31usb直通","3.1.USB直通",[19,28312,28313],{},[3095,28314],{"alt":79,"src":28315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[26,28317,28318],{},[29,28319,28320],{},"方法一(不是很推荐新手)：",[19,28322,28323],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[73,28325,28327],{"className":94,"code":28326,"language":96,"meta":79,"style":79},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[32,28328,28329,28337,28342],{"__ignoreMap":79},[100,28330,28331,28334],{"class":102,"line":103},[100,28332,28333],{"class":106},"ls",[100,28335,28336],{"class":110}," \u002Fdev\n",[100,28338,28339],{"class":102,"line":188},[100,28340,28341],{"class":1836},"#例如\n",[100,28343,28344,28347,28349],{"class":102,"line":199},[100,28345,28346],{"class":258},"--device",[100,28348,472],{"class":471},[100,28350,28351],{"class":110},"\u002Fdev\u002Ftty_USB0\n",[26,28353,28354],{"start":188},[29,28355,28356],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[73,28358,28360],{"className":94,"code":28359,"language":96,"meta":79,"style":79},"--privileged\n",[32,28361,28362],{"__ignoreMap":79},[100,28363,28364],{"class":102,"line":103},[100,28365,28359],{"class":106},[19,28367,28368],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,28370,28371],{},[3095,28372],{"alt":79,"src":28373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[305,28375,28377],{"id":28376},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,28379,28380,28381,28384],{},"NVIDIA Container Toolkit使用户 ",[1921,28382,28383],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,28386,28387],{},[3095,28388],{"alt":79,"src":28389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,28391,28392],{},[2006,28393,28394],{"href":28394,"rel":28395},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[25442],[23579,28397,28399],{"id":28398},"_321安装","3.2.1.安装",[19,28401,28402],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[24491,28404,28406],{"id":28405},"_3211ubuntu","3.2.1.1.Ubuntu",[26,28408,28409],{},[29,28410,28411],{},"配置存储库 并更新",[73,28413,28415],{"className":94,"code":28414,"language":96,"meta":79,"style":79},"curl -fsSL https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey | sudo gpg --dearmor -o \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg \\\n  && curl -s -L https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list | \\\n    sed 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g' | \\\n    sudo tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list \\\n  && \\\n    sudo apt-get update\n",[32,28416,28417,28446,28466,28478,28490,28496],{"__ignoreMap":79},[100,28418,28419,28422,28425,28428,28430,28432,28435,28438,28441,28444],{"class":102,"line":103},[100,28420,28421],{"class":106},"curl",[100,28423,28424],{"class":117}," -fsSL",[100,28426,28427],{"class":110}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[100,28429,26685],{"class":471},[100,28431,27647],{"class":106},[100,28433,28434],{"class":110}," gpg",[100,28436,28437],{"class":117}," --dearmor",[100,28439,28440],{"class":117}," -o",[100,28442,28443],{"class":110}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[100,28445,26254],{"class":117},[100,28447,28448,28451,28453,28456,28459,28462,28464],{"class":102,"line":188},[100,28449,28450],{"class":258},"  && ",[100,28452,28421],{"class":106},[100,28454,28455],{"class":117}," -s",[100,28457,28458],{"class":117}," -L",[100,28460,28461],{"class":110}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[100,28463,26685],{"class":471},[100,28465,26254],{"class":117},[100,28467,28468,28471,28474,28476],{"class":102,"line":199},[100,28469,28470],{"class":106},"    sed",[100,28472,28473],{"class":110}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[100,28475,26685],{"class":471},[100,28477,26254],{"class":117},[100,28479,28480,28483,28485,28488],{"class":102,"line":532},[100,28481,28482],{"class":106},"    sudo",[100,28484,27790],{"class":110},[100,28486,28487],{"class":110}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[100,28489,26254],{"class":117},[100,28491,28492,28494],{"class":102,"line":577},[100,28493,28450],{"class":258},[100,28495,27749],{"class":117},[100,28497,28498,28500,28502],{"class":102,"line":589},[100,28499,28482],{"class":106},[100,28501,27650],{"class":110},[100,28503,27816],{"class":110},[26,28505,28506],{"start":188},[29,28507,28508],{},"安装nvidia-docker2",[73,28510,28512],{"className":94,"code":28511,"language":96,"meta":79,"style":79},"sudo apt-get install -y nvidia-docker2\n",[32,28513,28514],{"__ignoreMap":79},[100,28515,28516,28518,28520,28522,28524],{"class":102,"line":103},[100,28517,107],{"class":106},[100,28519,27650],{"class":110},[100,28521,114],{"class":110},[100,28523,118],{"class":117},[100,28525,28526],{"class":110}," nvidia-docker2\n",[26,28528,28529],{"start":199},[29,28530,28531],{},"使用nvidia-ctk命令配置container runtime",[73,28533,28535],{"className":94,"code":28534,"language":96,"meta":79,"style":79},"sudo nvidia-ctk runtime configure --runtime=docker\n",[32,28536,28537],{"__ignoreMap":79},[100,28538,28539,28541,28544,28547,28550],{"class":102,"line":103},[100,28540,107],{"class":106},[100,28542,28543],{"class":110}," nvidia-ctk",[100,28545,28546],{"class":110}," runtime",[100,28548,28549],{"class":110}," configure",[100,28551,28552],{"class":117}," --runtime=docker\n",[26,28554,28555],{"start":532},[29,28556,28557],{},"重启docker服务:",[73,28559,28561],{"className":94,"code":28560,"language":96,"meta":79,"style":79},"sudo systemctl restart docker\n",[32,28562,28563],{"__ignoreMap":79},[100,28564,28565,28567,28569,28572],{"class":102,"line":103},[100,28566,107],{"class":106},[100,28568,28085],{"class":110},[100,28570,28571],{"class":110}," restart",[100,28573,28064],{"class":110},[24491,28575,28577],{"id":28576},"_3212fedora","3.2.1.2.Fedora",[26,28579,28580],{},[29,28581,28582],{},"配置存储库",[73,28584,28586],{"className":94,"code":28585,"language":96,"meta":79,"style":79},"curl -s -L https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo | \\\nsudo tee \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[32,28587,28588,28603],{"__ignoreMap":79},[100,28589,28590,28592,28594,28596,28599,28601],{"class":102,"line":103},[100,28591,28421],{"class":106},[100,28593,28455],{"class":117},[100,28595,28458],{"class":117},[100,28597,28598],{"class":110}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[100,28600,26685],{"class":471},[100,28602,26254],{"class":117},[100,28604,28605,28607,28609],{"class":102,"line":188},[100,28606,107],{"class":106},[100,28608,27790],{"class":110},[100,28610,28611],{"class":110}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[26,28613,28614],{"start":188},[29,28615,28616],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[73,28618,28620],{"className":94,"code":28619,"language":96,"meta":79,"style":79},"# 如果是RHEL或者Rocky（DNF4）\nsudo dnf config-manager --add-repo https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n\n# 如果是Feodra41+（DNF5）\nsudo dnf config-manager addrepo --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[32,28621,28622,28627,28641,28645,28650],{"__ignoreMap":79},[100,28623,28624],{"class":102,"line":103},[100,28625,28626],{"class":1836},"# 如果是RHEL或者Rocky（DNF4）\n",[100,28628,28629,28631,28633,28635,28638],{"class":102,"line":188},[100,28630,107],{"class":106},[100,28632,111],{"class":110},[100,28634,27986],{"class":110},[100,28636,28637],{"class":117}," --add-repo",[100,28639,28640],{"class":110}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[100,28642,28643],{"class":102,"line":199},[100,28644,570],{"emptyLinePlaceholder":569},[100,28646,28647],{"class":102,"line":532},[100,28648,28649],{"class":1836},"# 如果是Feodra41+（DNF5）\n",[100,28651,28652,28654,28656,28658,28660],{"class":102,"line":577},[100,28653,107],{"class":106},[100,28655,111],{"class":110},[100,28657,27986],{"class":110},[100,28659,27989],{"class":110},[100,28661,28662],{"class":117}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[26,28664,28665],{"start":199},[29,28666,28667],{},"安装NVIDIA Container Toolki包",[73,28669,28671],{"className":94,"code":28670,"language":96,"meta":79,"style":79},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[32,28672,28673,28678,28691,28695,28700],{"__ignoreMap":79},[100,28674,28675],{"class":102,"line":103},[100,28676,28677],{"class":1836},"# 如果是RHEL或者Rocky\n",[100,28679,28680,28682,28684,28686,28688],{"class":102,"line":188},[100,28681,107],{"class":106},[100,28683,111],{"class":110},[100,28685,114],{"class":110},[100,28687,118],{"class":117},[100,28689,28690],{"class":110}," nvidia-container-toolkit\n",[100,28692,28693],{"class":102,"line":199},[100,28694,570],{"emptyLinePlaceholder":569},[100,28696,28697],{"class":102,"line":532},[100,28698,28699],{"class":1836},"# 如果是Fedora\n",[100,28701,28702,28704,28706,28708,28710],{"class":102,"line":577},[100,28703,107],{"class":106},[100,28705,111],{"class":110},[100,28707,114],{"class":110},[100,28709,118],{"class":117},[100,28711,28690],{"class":110},[26,28713,28714],{"start":532},[29,28715,28716,28717,28719],{},"安装nvidia-docker2 ： 在Fedora上使用",[32,28718,27864],{},"进行安装",[73,28721,28723],{"className":94,"code":28722,"language":96,"meta":79,"style":79},"sudo dnf install -y nvidia-docker2\n",[32,28724,28725],{"__ignoreMap":79},[100,28726,28727,28729,28731,28733,28735],{"class":102,"line":103},[100,28728,107],{"class":106},[100,28730,111],{"class":110},[100,28732,114],{"class":110},[100,28734,118],{"class":117},[100,28736,28526],{"class":110},[26,28738,28739],{"start":577},[29,28740,28741],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[73,28743,28744],{"className":94,"code":28534,"language":96,"meta":79,"style":79},[32,28745,28746],{"__ignoreMap":79},[100,28747,28748,28750,28752,28754,28756],{"class":102,"line":103},[100,28749,107],{"class":106},[100,28751,28543],{"class":110},[100,28753,28546],{"class":110},[100,28755,28549],{"class":110},[100,28757,28552],{"class":117},[26,28759,28760],{"start":589},[29,28761,28762],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[73,28764,28765],{"className":94,"code":28560,"language":96,"meta":79,"style":79},[32,28766,28767],{"__ignoreMap":79},[100,28768,28769,28771,28773,28775],{"class":102,"line":103},[100,28770,107],{"class":106},[100,28772,28085],{"class":110},[100,28774,28571],{"class":110},[100,28776,28064],{"class":110},[19,28778,28779],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,28781,28782],{},"方法：",[19,28784,28785],{},"1️⃣nvidia-smi",[19,28787,28788],{},"2️⃣运行nvidia cuda 容器进行测试",[73,28790,28792],{"className":94,"code":28791,"language":96,"meta":79,"style":79},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[32,28793,28794],{"__ignoreMap":79},[100,28795,28796,28798,28800,28803,28806,28809,28812,28815],{"class":102,"line":103},[100,28797,107],{"class":106},[100,28799,27893],{"class":110},[100,28801,28802],{"class":110}," run",[100,28804,28805],{"class":117}," --rm",[100,28807,28808],{"class":117}," --gpus",[100,28810,28811],{"class":110}," all",[100,28813,28814],{"class":110}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[100,28816,28817],{"class":110}," nvidia-smi\n",[19,28819,28820],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,28822,28823],{},[3095,28824],{"alt":79,"src":28825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[305,28827,28829],{"id":28828},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,28831,28832],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,28834,28835],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,28837,28838],{},[2006,28839,28840],{"href":28840,"rel":28841},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[25442],[19,28843,28844],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,28846,28847],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,28849,28850],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[319,28852,28853,28869],{},[322,28854,28855],{},[325,28856,28857,28860,28863,28866],{},[328,28858,28859],{"align":330},"镜像类型",[328,28861,28862],{"align":330},"适用场景",[328,28864,28865],{"align":330},"示例标签",[328,28867,28868],{"align":330},"大小",[339,28870,28871,28885,28899],{},[325,28872,28873,28876,28879,28882],{},[344,28874,28875],{"align":330},"base",[344,28877,28878],{"align":330},"仅需 CUDA 运行时库",[344,28880,28881],{"align":330},"12.4.0-base-ubuntu22.04",[344,28883,28884],{"align":330},"~240MB",[325,28886,28887,28890,28893,28896],{},[344,28888,28889],{"align":330},"runtime",[344,28891,28892],{"align":330},"部署编译后的应用（含数学库）",[344,28894,28895],{"align":330},"12.4.0-runtime-ubuntu22.04",[344,28897,28898],{"align":330},"~2GB",[325,28900,28901,28904,28907,28910],{},[344,28902,28903],{"align":330},"devel",[344,28905,28906],{"align":330},"开发环境（含编译工具）",[344,28908,28909],{"align":330},"12.4.0-devel-ubuntu22.04",[344,28911,28912],{"align":330},"~3GB",[19,28914,28915,28916,28919],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[32,28917,28918],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,28921,28922],{},[3095,28923],{"alt":79,"src":28924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,28926,28927],{},"在dockerfile里就可以开头这么写：",[73,28929,28931],{"className":94,"code":28930,"language":96,"meta":79,"style":79},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[32,28932,28933,28938],{"__ignoreMap":79},[100,28934,28935],{"class":102,"line":103},[100,28936,28937],{"class":1836},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[100,28939,28940,28943],{"class":102,"line":188},[100,28941,28942],{"class":106},"FROM",[100,28944,28945],{"class":110}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[305,28947,28949],{"id":28948},"_34配置以太网","3.4.配置以太网",[19,28951,28952],{},"指定网络模式",[73,28954,28956],{"className":94,"code":28955,"language":96,"meta":79,"style":79},"--net=host \\\n",[32,28957,28958],{"__ignoreMap":79},[100,28959,28960,28963,28965,28968],{"class":102,"line":103},[100,28961,28962],{"class":258},"--net",[100,28964,472],{"class":471},[100,28966,28967],{"class":110},"host",[100,28969,26254],{"class":106},[19,28971,28972],{},"启动参数里加上这行即可。具体在下方",[19,28974,28975],{},"--net选项：指定网络模式，该选项有以下参数可选：",[2773,28977,28978,28981,28984,28987],{},[29,28979,28980],{},"--net=bridge:默认选项，表示连接到默认的网桥",[29,28982,28983],{},"--net=host:容器使用宿主机的网络",[29,28985,28986],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[29,28988,28989],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[1677,28991,28992],{},"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":79,"searchDepth":188,"depth":188,"links":28994},[28995,28996,28997,28998],{"id":28309,"depth":199,"text":28310},{"id":28376,"depth":199,"text":28377},{"id":28828,"depth":199,"text":28829},{"id":28948,"depth":199,"text":28949},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":28298,"description":28306},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":29005,"title":29006,"body":29007,"description":29014,"extension":1708,"meta":29020,"navigation":569,"path":29021,"seo":29022,"stem":29023,"__hash__":29024},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":29008,"toc":29018},[29009,29012,29015],[10,29010,29006],{"id":29011},"_4dockerhub换源",[19,29013,29014],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,29016,29017],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":79,"searchDepth":188,"depth":188,"links":29019},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":29006,"description":29014},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":29026,"title":29027,"body":29028,"description":79,"extension":1708,"meta":30039,"navigation":569,"path":30040,"seo":30041,"stem":30042,"__hash__":30043},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":29029,"toc":30034},[29030,29033,29037,29043,29047,29050,29390,29393,29396,29399,29404,29409,29412,29415,29418,29421,29440,29443,29454,29460,29642,29652,29668,29931,29933,29957,29972,29981,30031],[10,29031,29027],{"id":29032},"_5docker命令学习",[305,29034,29036],{"id":29035},"_51参考文档","5.1.参考文档",[19,29038,29039],{},[2006,29040,29041],{"href":29041,"rel":29042},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[25442],[305,29044,29046],{"id":29045},"_52常用命令","5.2.常用命令",[19,29048,29049],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[319,29051,29052,29065],{},[322,29053,29054],{},[325,29055,29056,29059,29062],{},[328,29057,29058],{"align":330},"命令",[328,29060,29061],{"align":330},"描述",[328,29063,29064],{"align":330},"示例",[339,29066,29067,29078,29089,29100,29111,29122,29133,29144,29154,29165,29176,29187,29197,29208,29219,29230,29240,29250,29260,29270,29281,29292,29303,29314,29325,29336,29346,29357,29368,29379],{},[325,29068,29069,29072,29075],{},[344,29070,29071],{"align":330},"docker run",[344,29073,29074],{"align":330},"创建并启动一个新的容器。",[344,29076,29077],{"align":330},"docker run -it ubuntu bash",[325,29079,29080,29083,29086],{},[344,29081,29082],{"align":330},"docker build",[344,29084,29085],{"align":330},"通过指定的 Dockerfile 创建一个新的镜像。",[344,29087,29088],{"align":330},"docker build -t myimage .",[325,29090,29091,29094,29097],{},[344,29092,29093],{"align":330},"docker pull",[344,29095,29096],{"align":330},"从 Docker 仓库拉取镜像。",[344,29098,29099],{"align":330},"docker pull ubuntu",[325,29101,29102,29105,29108],{},[344,29103,29104],{"align":330},"docker push",[344,29106,29107],{"align":330},"将本地镜像推送到 Docker 仓库。",[344,29109,29110],{"align":330},"docker push myimage",[325,29112,29113,29116,29119],{},[344,29114,29115],{"align":330},"docker stop",[344,29117,29118],{"align":330},"停止一个正在运行的容器。",[344,29120,29121],{"align":330},"docker stop container_id",[325,29123,29124,29127,29130],{},[344,29125,29126],{"align":330},"docker start",[344,29128,29129],{"align":330},"启动一个已经存在的容器。",[344,29131,29132],{"align":330},"docker start container_id",[325,29134,29135,29138,29141],{},[344,29136,29137],{"align":330},"docker restart",[344,29139,29140],{"align":330},"重新启动容器。",[344,29142,29143],{"align":330},"docker restart container_id",[325,29145,29146,29149,29152],{},[344,29147,29148],{"align":330},"docker ps",[344,29150,29151],{"align":330},"列出当前正在运行的容器。",[344,29153,29148],{"align":330},[325,29155,29156,29159,29162],{},[344,29157,29158],{"align":330},"docker rm",[344,29160,29161],{"align":330},"删除一个或多个停止的容器。",[344,29163,29164],{"align":330},"docker rm container_id",[325,29166,29167,29170,29173],{},[344,29168,29169],{"align":330},"docker exec",[344,29171,29172],{"align":330},"在一个正在运行的容器中执行命令。",[344,29174,29175],{"align":330},"docker exec -it container_id bash",[325,29177,29178,29181,29184],{},[344,29179,29180],{"align":330},"docker logs",[344,29182,29183],{"align":330},"查看容器的日志输出。",[344,29185,29186],{"align":330},"docker logs container_id",[325,29188,29189,29192,29195],{},[344,29190,29191],{"align":330},"docker images",[344,29193,29194],{"align":330},"列出本地所有镜像。",[344,29196,29191],{"align":330},[325,29198,29199,29202,29205],{},[344,29200,29201],{"align":330},"docker rmi",[344,29203,29204],{"align":330},"删除一个或多个镜像。",[344,29206,29207],{"align":330},"docker rmi myimage",[325,29209,29210,29213,29216],{},[344,29211,29212],{"align":330},"docker network",[344,29214,29215],{"align":330},"管理 Docker 网络。",[344,29217,29218],{"align":330},"docker network ls",[325,29220,29221,29224,29227],{},[344,29222,29223],{"align":330},"docker volume",[344,29225,29226],{"align":330},"管理 Docker 数据卷。",[344,29228,29229],{"align":330},"docker volume ls",[325,29231,29232,29235,29238],{},[344,29233,29234],{"align":330},"docker-compose up",[344,29236,29237],{"align":330},"启动 docker-compose.yml 中定义的所有服务。",[344,29239,29234],{"align":330},[325,29241,29242,29245,29248],{},[344,29243,29244],{"align":330},"docker-compose down",[344,29246,29247],{"align":330},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[344,29249,29244],{"align":330},[325,29251,29252,29255,29258],{},[344,29253,29254],{"align":330},"docker info",[344,29256,29257],{"align":330},"显示 Docker 系统的详细信息。",[344,29259,29254],{"align":330},[325,29261,29262,29265,29268],{},[344,29263,29264],{"align":330},"docker stats",[344,29266,29267],{"align":330},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[344,29269,29264],{"align":330},[325,29271,29272,29275,29278],{},[344,29273,29274],{"align":330},"docker inspect",[344,29276,29277],{"align":330},"查看容器或镜像的详细信息（JSON 格式）。",[344,29279,29280],{"align":330},"docker inspect container_id",[325,29282,29283,29286,29289],{},[344,29284,29285],{"align":330},"docker save",[344,29287,29288],{"align":330},"将一个镜像保存为 tar 文件。",[344,29290,29291],{"align":330},"docker save -o myimage.tar myimage",[325,29293,29294,29297,29300],{},[344,29295,29296],{"align":330},"docker load",[344,29298,29299],{"align":330},"从 tar 文件中加载镜像。",[344,29301,29302],{"align":330},"docker load -i myimage.tar",[325,29304,29305,29308,29311],{},[344,29306,29307],{"align":330},"docker tag",[344,29309,29310],{"align":330},"为镜像添加标签（tag）。",[344,29312,29313],{"align":330},"docker tag myimage myimage:v1",[325,29315,29316,29319,29322],{},[344,29317,29318],{"align":330},"docker buildx build",[344,29320,29321],{"align":330},"使用 Buildx 构建多架构镜像。",[344,29323,29324],{"align":330},"docker buildx build -t myimage .",[325,29326,29327,29330,29333],{},[344,29328,29329],{"align":330},"docker buildx create",[344,29331,29332],{"align":330},"创建一个新的 Buildx 构建实例。",[344,29334,29335],{"align":330},"docker buildx create –use",[325,29337,29338,29341,29344],{},[344,29339,29340],{"align":330},"docker buildx ls",[344,29342,29343],{"align":330},"列出所有可用的 Buildx 构建实例。",[344,29345,29340],{"align":330},[325,29347,29348,29351,29354],{},[344,29349,29350],{"align":330},"docker buildx use",[344,29352,29353],{"align":330},"设置当前的 Buildx 构建实例。",[344,29355,29356],{"align":330},"docker buildx use mybuilder",[325,29358,29359,29362,29365],{},[344,29360,29361],{"align":330},"docker buildx bake",[344,29363,29364],{"align":330},"使用 Bake 文件批量构建镜像。",[344,29366,29367],{"align":330},"docker buildx bake -f bake.hcl",[325,29369,29370,29373,29376],{},[344,29371,29372],{"align":330},"docker buildx build –push",[344,29374,29375],{"align":330},"构建镜像并推送到镜像仓库。",[344,29377,29378],{"align":330},"docker buildx build –push -t myimage .",[325,29380,29381,29384,29387],{},[344,29382,29383],{"align":330},"docker buildx build –platform",[344,29385,29386],{"align":330},"构建镜像并为多个平台生成支持。",[344,29388,29389],{"align":330},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,29391,29392],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,29394,29395],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,29397,29398],{},"docker images 可以查看已经下载的镜像",[19,29400,29401],{},[3095,29402],{"alt":79,"src":29403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,29405,29406],{},[1921,29407,29408],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,29410,29411],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,29413,29414],{},"docker container logs 查看容器日志",[19,29416,29417],{},"docker top 查看容器里的进程",[19,29419,29420],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[73,29422,29424],{"className":94,"code":29423,"language":96,"meta":79,"style":79},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[32,29425,29426],{"__ignoreMap":79},[100,29427,29428,29431,29434,29437],{"class":102,"line":103},[100,29429,29430],{"class":106},"如：docker",[100,29432,29433],{"class":110}," cp",[100,29435,29436],{"class":110}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[100,29438,29439],{"class":110}," \u002Fmydata\u002Fnginx\n",[19,29441,29442],{},"docker run时在启动容器的时候会有几个常用的选项：",[2773,29444,29445,29448,29451],{},[29,29446,29447],{},"-d选项：表示后台运行",[29,29449,29450],{},"-P选项：随机端口映射",[29,29452,29453],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[305,29455,29457],{"id":29456},"_53run命令的参数非常重要",[1921,29458,29459],{},"5.3.run命令的参数（非常重要）",[319,29461,29462,29475],{},[322,29463,29464],{},[325,29465,29466,29469,29472],{},[328,29467,29468],{"align":330},"参数\u002F配置",[328,29470,29471],{"align":330},"功能说明",[328,29473,29474],{"align":330},"重要性与参考依据",[339,29476,29477,29488,29499,29510,29521,29532,29543,29554,29565,29576,29587,29598,29609,29620,29631],{},[325,29478,29479,29482,29485],{},[344,29480,29481],{"align":330},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[344,29483,29484],{"align":330},"指定容器名称，便于后续管理",[344,29486,29487],{"align":330},"替代随机生成的容器名。",[325,29489,29490,29493,29496],{},[344,29491,29492],{"align":330},"–gpus all",[344,29494,29495],{"align":330},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[344,29497,29498],{"align":330},"用于CUDA加速等GPU依赖任务。",[325,29500,29501,29504,29507],{},[344,29502,29503],{"align":330},"-e NVIDIA_DRIVER_CAPABILITIES=all",[344,29505,29506],{"align":330},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[344,29508,29509],{"align":330},"确保容器内GPU功能完整67。",[325,29511,29512,29515,29518],{},[344,29513,29514],{"align":330},"-dit",[344,29516,29517],{"align":330},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[344,29519,29520],{"align":330},"允许容器在后台运行并支持交互操作。",[325,29522,29523,29526,29529],{},[344,29524,29525],{"align":330},"–privileged",[344,29527,29528],{"align":330},"赋予容器完全主机权限（可访问设备、内核模块等）",[344,29530,29531],{"align":330},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[325,29533,29534,29537,29540],{},[344,29535,29536],{"align":330},"–net=host",[344,29538,29539],{"align":330},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[344,29541,29542],{"align":330},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[325,29544,29545,29548,29551],{},[344,29546,29547],{"align":330},"–group-add audio–group-add video–group-add dialout",[344,29549,29550],{"align":330},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[344,29552,29553],{"align":330},"避免权限问题（如避免无法调用摄像头、麦克风）。",[325,29555,29556,29559,29562],{},[344,29557,29558],{"align":330},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[344,29560,29561],{"align":330},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[344,29563,29564],{"align":330},"支持容器内运行图形界面应用（如OpenCV可视化）。",[325,29566,29567,29570,29573],{},[344,29568,29569],{"align":330},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[344,29571,29572],{"align":330},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[344,29574,29575],{"align":330},"实现容器内图形显示。",[325,29577,29578,29581,29584],{},[344,29579,29580],{"align":330},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[344,29582,29583],{"align":330},"挂载X11认证文件（只读）",[344,29585,29586],{"align":330},"确保容器有权连接宿主机显示服务。",[325,29588,29589,29592,29595],{},[344,29590,29591],{"align":330},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[344,29593,29594],{"align":330},"挂载Wayland显示协议相关目录",[344,29596,29597],{"align":330},"支持Wayland协议的图形显示。",[325,29599,29600,29603,29606],{},[344,29601,29602],{"align":330},"–ulimit nofile=1024:524288",[344,29604,29605],{"align":330},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[344,29607,29608],{"align":330},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[325,29610,29611,29614,29617],{},[344,29612,29613],{"align":330},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[344,29615,29616],{"align":330},"挂载宿主机用户目录到容器内同名路径",[344,29618,29619],{"align":330},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[325,29621,29622,29625,29628],{},[344,29623,29624],{"align":330},"-w \u002Fhome\u002Ftungchiahui",[344,29626,29627],{"align":330},"设置容器启动后的默认工作目录",[344,29629,29630],{"align":330},"直接进入项目路径，方便执行命令2324。",[325,29632,29633,29636,29639],{},[344,29634,29635],{"align":330},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[344,29637,29638],{"align":330},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[344,29640,29641],{"align":330},"提供预配置的深度学习与机器人开发环境。",[19,29643,29644,29645,29647,29648,29651],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[32,29646,107],{},"加不加",[32,29649,29650],{},"sudo -E","都无所谓。",[19,29653,29654,29655,29657,29658,29660,29661,29664,29665,29667],{},"用户已经被加到docker组了，不用",[32,29656,107],{},"也行跑，其次，",[32,29659,107],{},"运行的话，你的",[32,29662,29663],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[32,29666,29663],{},"更不可能变了。",[73,29669,29671],{"className":94,"code":29670,"language":96,"meta":79,"style":79},"sudo docker run --name=ros_opencv_cuda \\\n--gpus all \\\n-e NVIDIA_DRIVER_CAPABILITIES=all \\\n-e DISPLAY=$DISPLAY \\\n-dit \\\n--privileged \\\n--net=host \\\n--group-add audio \\\n--group-add video \\\n--group-add dialout \\\n-e XAUTHORITY=$HOME\u002F.Xauthority \\\n-e WAYLAND_DISPLAY=$WAYLAND_DISPLAY \\\n-e XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \\\n-e QT_QPA_PLATFORM=xcb \\\n-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw \\\n-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri \\\n-v $HOME\u002F.Xauthority:$HOME\u002F.Xauthority:ro \\\n-v \u002Frun\u002Fuser\u002F$(id -u)\u002Fwayland-0:\u002Frun\u002Fuser\u002F$(id -u)\u002Fwayland-0 \\\n-v \u002Frun\u002Fuser\u002F$(id -u):\u002Frun\u002Fuser\u002F$(id -u) \\\n-v $HOME:$HOME \\\n-w $HOME \\\ntungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[32,29672,29673,29686,29696,29706,29718,29725,29732,29739,29749,29758,29767,29781,29793,29805,29814,29824,29833,29848,29881,29908,29919,29926],{"__ignoreMap":79},[100,29674,29675,29677,29679,29681,29684],{"class":102,"line":103},[100,29676,107],{"class":106},[100,29678,27893],{"class":110},[100,29680,28802],{"class":110},[100,29682,29683],{"class":117}," --name=ros_opencv_cuda",[100,29685,26254],{"class":117},[100,29687,29688,29691,29694],{"class":102,"line":188},[100,29689,29690],{"class":258},"--gpus ",[100,29692,29693],{"class":110},"all",[100,29695,26254],{"class":117},[100,29697,29698,29701,29704],{"class":102,"line":199},[100,29699,29700],{"class":258},"-e ",[100,29702,29703],{"class":110},"NVIDIA_DRIVER_CAPABILITIES=all",[100,29705,26254],{"class":117},[100,29707,29708,29710,29713,29716],{"class":102,"line":532},[100,29709,29700],{"class":258},[100,29711,29712],{"class":110},"DISPLAY=",[100,29714,29715],{"class":258},"$DISPLAY ",[100,29717,27749],{"class":117},[100,29719,29720,29723],{"class":102,"line":577},[100,29721,29722],{"class":258},"-dit ",[100,29724,27749],{"class":117},[100,29726,29727,29730],{"class":102,"line":589},[100,29728,29729],{"class":258},"--privileged ",[100,29731,27749],{"class":117},[100,29733,29734,29737],{"class":102,"line":595},[100,29735,29736],{"class":258},"--net=host ",[100,29738,27749],{"class":117},[100,29740,29741,29744,29747],{"class":102,"line":601},[100,29742,29743],{"class":258},"--group-add ",[100,29745,29746],{"class":110},"audio",[100,29748,26254],{"class":117},[100,29750,29751,29753,29756],{"class":102,"line":606},[100,29752,29743],{"class":258},[100,29754,29755],{"class":110},"video",[100,29757,26254],{"class":117},[100,29759,29760,29762,29765],{"class":102,"line":612},[100,29761,29743],{"class":258},[100,29763,29764],{"class":110},"dialout",[100,29766,26254],{"class":117},[100,29768,29769,29771,29774,29776,29779],{"class":102,"line":618},[100,29770,29700],{"class":258},[100,29772,29773],{"class":110},"XAUTHORITY=",[100,29775,29663],{"class":258},[100,29777,29778],{"class":110},"\u002F.Xauthority",[100,29780,26254],{"class":117},[100,29782,29783,29785,29788,29791],{"class":102,"line":623},[100,29784,29700],{"class":258},[100,29786,29787],{"class":110},"WAYLAND_DISPLAY=",[100,29789,29790],{"class":258},"$WAYLAND_DISPLAY ",[100,29792,27749],{"class":117},[100,29794,29795,29797,29800,29803],{"class":102,"line":629},[100,29796,29700],{"class":258},[100,29798,29799],{"class":110},"XDG_RUNTIME_DIR=",[100,29801,29802],{"class":258},"$XDG_RUNTIME_DIR ",[100,29804,27749],{"class":117},[100,29806,29807,29809,29812],{"class":102,"line":635},[100,29808,29700],{"class":258},[100,29810,29811],{"class":110},"QT_QPA_PLATFORM=xcb",[100,29813,26254],{"class":117},[100,29815,29816,29819,29822],{"class":102,"line":641},[100,29817,29818],{"class":258},"-v ",[100,29820,29821],{"class":110},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[100,29823,26254],{"class":117},[100,29825,29826,29828,29831],{"class":102,"line":647},[100,29827,29818],{"class":258},[100,29829,29830],{"class":110},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[100,29832,26254],{"class":117},[100,29834,29835,29838,29841,29843,29846],{"class":102,"line":653},[100,29836,29837],{"class":258},"-v $HOME",[100,29839,29840],{"class":110},"\u002F.Xauthority:",[100,29842,29663],{"class":258},[100,29844,29845],{"class":110},"\u002F.Xauthority:ro",[100,29847,26254],{"class":117},[100,29849,29850,29852,29855,29857,29860,29863,29865,29868,29870,29872,29874,29876,29879],{"class":102,"line":659},[100,29851,29818],{"class":258},[100,29853,29854],{"class":110},"\u002Frun\u002Fuser\u002F",[100,29856,26675],{"class":258},[100,29858,29859],{"class":106},"id",[100,29861,29862],{"class":117}," -u",[100,29864,2196],{"class":258},[100,29866,29867],{"class":110},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[100,29869,26675],{"class":258},[100,29871,29859],{"class":106},[100,29873,29862],{"class":117},[100,29875,2196],{"class":258},[100,29877,29878],{"class":110},"\u002Fwayland-0",[100,29880,26254],{"class":117},[100,29882,29883,29885,29887,29889,29891,29893,29895,29898,29900,29902,29904,29906],{"class":102,"line":665},[100,29884,29818],{"class":258},[100,29886,29854],{"class":110},[100,29888,26675],{"class":258},[100,29890,29859],{"class":106},[100,29892,29862],{"class":117},[100,29894,2196],{"class":258},[100,29896,29897],{"class":110},":\u002Frun\u002Fuser\u002F",[100,29899,26675],{"class":258},[100,29901,29859],{"class":106},[100,29903,29862],{"class":117},[100,29905,15295],{"class":258},[100,29907,27749],{"class":117},[100,29909,29910,29912,29914,29917],{"class":102,"line":670},[100,29911,29837],{"class":258},[100,29913,2625],{"class":110},[100,29915,29916],{"class":258},"$HOME ",[100,29918,27749],{"class":117},[100,29920,29921,29924],{"class":102,"line":675},[100,29922,29923],{"class":258},"-w $HOME ",[100,29925,27749],{"class":117},[100,29927,29928],{"class":102,"line":699},[100,29929,29930],{"class":258},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,29932,381],{},[26,29934,29935,29943,29946,29949],{},[29,29936,29937,15376,29939,29942],{},[32,29938,29703],{},[32,29940,29941],{},"--gpus all","没有英伟达显卡请注释。",[29,29944,29945],{},"--name后面请自己为容器起名。",[29,29947,29948],{},"最后一行仓库名称请你自己找对应的镜像填上。",[29,29950,29951,29952,233],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[25135,29953,29954],{},[1921,29955,29956],{},"请不要加",[73,29958,29960],{"className":94,"code":29959,"language":96,"meta":79,"style":79},"--ulimit nofile=1024:524288 \\\n",[32,29961,29962],{"__ignoreMap":79},[100,29963,29964,29967,29970],{"class":102,"line":103},[100,29965,29966],{"class":106},"--ulimit",[100,29968,29969],{"class":110}," nofile=1024:524288",[100,29971,26254],{"class":117},[19,29973,29974,29975,29980],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[25135,29976,29977],{},[1921,29978,29979],{},"不建议","**.**",[73,29982,29984],{"className":94,"code":29983,"language":96,"meta":79,"style":79},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[32,29985,29986,30013,30022],{"__ignoreMap":79},[100,29987,29988,29991,29994,29996,29998,30000,30002,30004,30006,30009,30011],{"class":102,"line":103},[100,29989,29990],{"class":106},"--user",[100,29992,29993],{"class":258}," $(",[100,29995,29859],{"class":106},[100,29997,29862],{"class":117},[100,29999,2196],{"class":258},[100,30001,2625],{"class":110},[100,30003,26675],{"class":258},[100,30005,29859],{"class":106},[100,30007,30008],{"class":117}," -g",[100,30010,15295],{"class":258},[100,30012,27749],{"class":117},[100,30014,30015,30017,30020],{"class":102,"line":188},[100,30016,29818],{"class":258},[100,30018,30019],{"class":110},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[100,30021,26254],{"class":117},[100,30023,30024,30026,30029],{"class":102,"line":199},[100,30025,29818],{"class":258},[100,30027,30028],{"class":110},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[100,30030,26254],{"class":117},[1677,30032,30033],{},"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":79,"searchDepth":188,"depth":188,"links":30035},[30036,30037,30038],{"id":29035,"depth":199,"text":29036},{"id":29045,"depth":199,"text":29046},{"id":29456,"depth":199,"text":29459},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":29027,"description":79},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":30045,"title":30046,"body":30047,"description":79,"extension":1708,"meta":31669,"navigation":569,"path":31670,"seo":31671,"stem":31672,"__hash__":31673},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":30048,"toc":31664},[30049,30052,30056,30059,30281,30285,30289,30292,30398,30403,30406,30411,30414,30419,30422,30427,30430,30442,30445,30450,30457,30485,30492,30568,30573,30576,30599,30601,30676,30681,30684,30688,30696,30701,30706,30710,30721,30727,30730,30733,30756,30759,30762,30790,30793,30796,31261,31264,31269,31274,31278,31301,31306,31310,31314,31317,31320,31323,31350,31353,31356,31374,31377,31380,31402,31410,31415,31420,31424,31427,31430,31433,31436,31481,31484,31502,31505,31510,31513,31534,31537,31593,31596,31601,31605,31608,31615,31618,31621,31626,31629,31645,31648,31661],[10,30050,30046],{"id":30051},"_6手动创建docker镜像",[305,30053,30055],{"id":30054},"_61dockerfile","6.1.DockerFile",[19,30057,30058],{},"常用命令：",[319,30060,30061,30072],{},[322,30062,30063],{},[325,30064,30065,30068,30070],{},[328,30066,30067],{"align":330},"指令",[328,30069,27444],{"align":330},[328,30071,29064],{"align":330},[339,30073,30074,30084,30100,30111,30122,30133,30144,30155,30166,30180,30194,30205,30219,30230,30241,30255,30270],{},[325,30075,30076,30078,30081],{},[344,30077,28942],{"align":330},[344,30079,30080],{"align":330},"指定基础镜像，是 Dockerfile 的起点",[344,30082,30083],{"align":330},"FROM ubuntu:22.04",[325,30085,30086,30089,30092],{},[344,30087,30088],{"align":330},"LABEL",[344,30090,30091],{"align":330},"添加元数据（如作者、版本等）",[344,30093,30094,30095,30099],{"align":330},"LABEL maintainer=”",[2006,30096,30098],{"href":30097},"mailto:you@example.com","you@example.com","”",[325,30101,30102,30105,30108],{},[344,30103,30104],{"align":330},"ENV",[344,30106,30107],{"align":330},"设置环境变量",[344,30109,30110],{"align":330},"ENV PORT=8080",[325,30112,30113,30116,30119],{},[344,30114,30115],{"align":330},"ARG",[344,30117,30118],{"align":330},"构建参数，只在构建期间可用",[344,30120,30121],{"align":330},"ARG VERSION=1.0",[325,30123,30124,30127,30130],{},[344,30125,30126],{"align":330},"RUN",[344,30128,30129],{"align":330},"构建镜像时运行命令",[344,30131,30132],{"align":330},"RUN apt-get update && apt-get install -y curl",[325,30134,30135,30138,30141],{},[344,30136,30137],{"align":330},"COPY",[344,30139,30140],{"align":330},"复制文件到镜像中",[344,30142,30143],{"align":330},"COPY . \u002Fapp",[325,30145,30146,30149,30152],{},[344,30147,30148],{"align":330},"ADD",[344,30150,30151],{"align":330},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[344,30153,30154],{"align":330},"ADD archive.tar.gz \u002Fdata\u002F",[325,30156,30157,30160,30163],{},[344,30158,30159],{"align":330},"WORKDIR",[344,30161,30162],{"align":330},"设置工作目录",[344,30164,30165],{"align":330},"WORKDIR \u002Fopt",[325,30167,30168,30171,30174],{},[344,30169,30170],{"align":330},"CMD",[344,30172,30173],{"align":330},"设置容器启动时默认命令（可被 docker run 覆盖）",[344,30175,30176,30177],{"align":330},"CMD ",[100,30178,30179],{},"“node”, “index.js”",[325,30181,30182,30185,30188],{},[344,30183,30184],{"align":330},"ENTRYPOINT",[344,30186,30187],{"align":330},"设置容器启动时固定命令（通常用于 CLI 工具等）",[344,30189,30190,30191],{"align":330},"ENTRYPOINT ",[100,30192,30193],{},"“python3”",[325,30195,30196,30199,30202],{},[344,30197,30198],{"align":330},"EXPOSE",[344,30200,30201],{"align":330},"声明镜像内服务监听的端口（不会自动映射）",[344,30203,30204],{"align":330},"EXPOSE 80",[325,30206,30207,30210,30213],{},[344,30208,30209],{"align":330},"VOLUME",[344,30211,30212],{"align":330},"声明数据卷挂载点",[344,30214,30215,30216],{"align":330},"VOLUME ",[100,30217,30218],{},"“\u002Fdata”",[325,30220,30221,30224,30227],{},[344,30222,30223],{"align":330},"USER",[344,30225,30226],{"align":330},"设置后续命令执行的用户",[344,30228,30229],{"align":330},"USER appuser",[325,30231,30232,30235,30238],{},[344,30233,30234],{"align":330},"ONBUILD",[344,30236,30237],{"align":330},"当镜像作为其他镜像基础镜像时触发的构建指令",[344,30239,30240],{"align":330},"ONBUILD COPY . \u002Fsrc",[325,30242,30243,30246,30249],{},[344,30244,30245],{"align":330},"SHELL",[344,30247,30248],{"align":330},"更改默认 shell，比如将 sh -c 改为 bash -c",[344,30250,30251,30252],{"align":330},"SHELL ",[100,30253,30254],{},"“\u002Fbin\u002Fbash”, “-c”",[325,30256,30257,30260,30263],{},[344,30258,30259],{"align":330},"HEALTHCHECK",[344,30261,30262],{"align":330},"定义容器运行时的健康检查命令",[344,30264,30265,30266],{"align":330},"`HEALTHCHECK CMD curl –fail ",[2006,30267,30268],{"href":30268,"rel":30269},"http:\u002F\u002Flocalhost:8080",[25442],[325,30271,30272,30275,30278],{},[344,30273,30274],{"align":330},"STOPSIGNAL",[344,30276,30277],{"align":330},"容器停止时发送的信号",[344,30279,30280],{"align":330},"STOPSIGNAL SIGKILL",[305,30282,30284],{"id":30283},"_62自己创建容器","6.2.自己创建容器",[23579,30286,30288],{"id":30287},"_621手动创建","6.2.1.手动创建",[19,30290,30291],{},"在x86电脑上编译x86的：",[73,30293,30295],{"className":94,"code":30294,"language":96,"meta":79,"style":79},"docker build -t ros-melodic-cuda118-cudnn8-bionic:latest .\n\ndocker build -t ros-noetic-focal:latest .\n\ndocker build -t ros-humble-jammy:latest .\n\ndocker build -t ros-jazzy-noble:latest .\n\ndocker build -t ros-humble-opencv411-cuda128-cudnn970-jammy:latest .\n\ndocker build -t ros-jazzy-opencv411-cuda128-cudnn970-noble:latest .\n",[32,30296,30297,30313,30317,30330,30334,30347,30351,30364,30368,30381,30385],{"__ignoreMap":79},[100,30298,30299,30301,30304,30307,30310],{"class":102,"line":103},[100,30300,28125],{"class":106},[100,30302,30303],{"class":110}," build",[100,30305,30306],{"class":117}," -t",[100,30308,30309],{"class":110}," ros-melodic-cuda118-cudnn8-bionic:latest",[100,30311,30312],{"class":110}," .\n",[100,30314,30315],{"class":102,"line":188},[100,30316,570],{"emptyLinePlaceholder":569},[100,30318,30319,30321,30323,30325,30328],{"class":102,"line":199},[100,30320,28125],{"class":106},[100,30322,30303],{"class":110},[100,30324,30306],{"class":117},[100,30326,30327],{"class":110}," ros-noetic-focal:latest",[100,30329,30312],{"class":110},[100,30331,30332],{"class":102,"line":532},[100,30333,570],{"emptyLinePlaceholder":569},[100,30335,30336,30338,30340,30342,30345],{"class":102,"line":577},[100,30337,28125],{"class":106},[100,30339,30303],{"class":110},[100,30341,30306],{"class":117},[100,30343,30344],{"class":110}," ros-humble-jammy:latest",[100,30346,30312],{"class":110},[100,30348,30349],{"class":102,"line":589},[100,30350,570],{"emptyLinePlaceholder":569},[100,30352,30353,30355,30357,30359,30362],{"class":102,"line":595},[100,30354,28125],{"class":106},[100,30356,30303],{"class":110},[100,30358,30306],{"class":117},[100,30360,30361],{"class":110}," ros-jazzy-noble:latest",[100,30363,30312],{"class":110},[100,30365,30366],{"class":102,"line":601},[100,30367,570],{"emptyLinePlaceholder":569},[100,30369,30370,30372,30374,30376,30379],{"class":102,"line":606},[100,30371,28125],{"class":106},[100,30373,30303],{"class":110},[100,30375,30306],{"class":117},[100,30377,30378],{"class":110}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[100,30380,30312],{"class":110},[100,30382,30383],{"class":102,"line":612},[100,30384,570],{"emptyLinePlaceholder":569},[100,30386,30387,30389,30391,30393,30396],{"class":102,"line":618},[100,30388,28125],{"class":106},[100,30390,30303],{"class":110},[100,30392,30306],{"class":117},[100,30394,30395],{"class":110}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[100,30397,30312],{"class":110},[19,30399,30400],{},[3095,30401],{"alt":79,"src":30402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,30404,30405],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,30407,30408],{},[3095,30409],{"alt":79,"src":30410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,30412,30413],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[26,30415,30416],{},[29,30417,30418],{},"创建 Docker Hub 账户",[19,30420,30421],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[26,30423,30424],{"start":188},[29,30425,30426],{},"登录 Docker Hub",[19,30428,30429],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[73,30431,30433],{"className":94,"code":30432,"language":96,"meta":79,"style":79},"docker login\n",[32,30434,30435],{"__ignoreMap":79},[100,30436,30437,30439],{"class":102,"line":103},[100,30438,28125],{"class":106},[100,30440,30441],{"class":110}," login\n",[19,30443,30444],{},"输入你的 Docker Hub 用户名和密码进行验证。",[26,30446,30447],{},[29,30448,30449],{},"为你的镜像打标签",[19,30451,30452,30453,30456],{},"Docker Hub 使用 ",[32,30454,30455],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[73,30458,30460],{"className":94,"code":30459,"language":96,"meta":79,"style":79},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[32,30461,30462],{"__ignoreMap":79},[100,30463,30464,30466,30469,30471,30474,30477,30480,30482],{"class":102,"line":103},[100,30465,28125],{"class":106},[100,30467,30468],{"class":110}," tag",[100,30470,30361],{"class":110},[100,30472,30473],{"class":471}," \u003C",[100,30475,30476],{"class":110},"你的用户",[100,30478,30479],{"class":258},"名",[100,30481,2726],{"class":471},[100,30483,30484],{"class":110},"\u002Fros-jazzy-noble:latest\n",[19,30486,30487,30488,30491],{},"例如，如果你的 Docker Hub 用户名是 ",[32,30489,30490],{},"tungchiahui","，你应该执行：",[73,30493,30495],{"className":94,"code":30494,"language":96,"meta":79,"style":79},"docker tag ros-noetic-focal:latest tungchiahui\u002Fros-noetic-focal:latest\n\ndocker tag ros-humble-jammy:latest tungchiahui\u002Fros-humble-jammy:latest\n\ndocker tag ros-jazzy-noble:latest tungchiahui\u002Fros-jazzy-noble:latest\n\ndocker tag ros-humble-opencv411-cuda128-cudnn970-jammy:latest \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n\ndocker tag ros-jazzy-opencv411-cuda128-cudnn970-noble:latest tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[32,30496,30497,30508,30512,30523,30527,30538,30542,30553,30557],{"__ignoreMap":79},[100,30498,30499,30501,30503,30505],{"class":102,"line":103},[100,30500,28125],{"class":106},[100,30502,30468],{"class":110},[100,30504,30327],{"class":110},[100,30506,30507],{"class":110}," tungchiahui\u002Fros-noetic-focal:latest\n",[100,30509,30510],{"class":102,"line":188},[100,30511,570],{"emptyLinePlaceholder":569},[100,30513,30514,30516,30518,30520],{"class":102,"line":199},[100,30515,28125],{"class":106},[100,30517,30468],{"class":110},[100,30519,30344],{"class":110},[100,30521,30522],{"class":110}," tungchiahui\u002Fros-humble-jammy:latest\n",[100,30524,30525],{"class":102,"line":532},[100,30526,570],{"emptyLinePlaceholder":569},[100,30528,30529,30531,30533,30535],{"class":102,"line":577},[100,30530,28125],{"class":106},[100,30532,30468],{"class":110},[100,30534,30361],{"class":110},[100,30536,30537],{"class":110}," tungchiahui\u002Fros-jazzy-noble:latest\n",[100,30539,30540],{"class":102,"line":589},[100,30541,570],{"emptyLinePlaceholder":569},[100,30543,30544,30546,30548,30550],{"class":102,"line":595},[100,30545,28125],{"class":106},[100,30547,30468],{"class":110},[100,30549,30378],{"class":110},[100,30551,30552],{"class":110}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[100,30554,30555],{"class":102,"line":601},[100,30556,570],{"emptyLinePlaceholder":569},[100,30558,30559,30561,30563,30565],{"class":102,"line":606},[100,30560,28125],{"class":106},[100,30562,30468],{"class":110},[100,30564,30395],{"class":110},[100,30566,30567],{"class":110}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[26,30569,30570],{"start":188},[29,30571,30572],{},"推送镜像到 Docker Hub",[19,30574,30575],{},"使用以下命令将镜像推送到 Docker Hub：",[73,30577,30579],{"className":94,"code":30578,"language":96,"meta":79,"style":79},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[32,30580,30581],{"__ignoreMap":79},[100,30582,30583,30585,30588,30590,30592,30594,30596],{"class":102,"line":103},[100,30584,28125],{"class":106},[100,30586,30587],{"class":110}," push",[100,30589,30473],{"class":471},[100,30591,30476],{"class":110},[100,30593,30479],{"class":258},[100,30595,2726],{"class":471},[100,30597,30598],{"class":110},"\u002Fros-noetic-jazzy-noble:latest\n",[19,30600,16214],{},[73,30602,30604],{"className":94,"code":30603,"language":96,"meta":79,"style":79},"docker push tungchiahui\u002Fros-noetic-focal:latest\n\ndocker push tungchiahui\u002Fros-humble-jammy:latest\n\ndocker push tungchiahui\u002Fros-jazzy-noble:latest\n\ndocker push tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n\ndocker push tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n\ndocker push tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[32,30605,30606,30614,30618,30626,30630,30638,30642,30651,30655,30663,30667],{"__ignoreMap":79},[100,30607,30608,30610,30612],{"class":102,"line":103},[100,30609,28125],{"class":106},[100,30611,30587],{"class":110},[100,30613,30507],{"class":110},[100,30615,30616],{"class":102,"line":188},[100,30617,570],{"emptyLinePlaceholder":569},[100,30619,30620,30622,30624],{"class":102,"line":199},[100,30621,28125],{"class":106},[100,30623,30587],{"class":110},[100,30625,30522],{"class":110},[100,30627,30628],{"class":102,"line":532},[100,30629,570],{"emptyLinePlaceholder":569},[100,30631,30632,30634,30636],{"class":102,"line":577},[100,30633,28125],{"class":106},[100,30635,30587],{"class":110},[100,30637,30537],{"class":110},[100,30639,30640],{"class":102,"line":589},[100,30641,570],{"emptyLinePlaceholder":569},[100,30643,30644,30646,30648],{"class":102,"line":595},[100,30645,28125],{"class":106},[100,30647,30587],{"class":110},[100,30649,30650],{"class":110}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[100,30652,30653],{"class":102,"line":601},[100,30654,570],{"emptyLinePlaceholder":569},[100,30656,30657,30659,30661],{"class":102,"line":606},[100,30658,28125],{"class":106},[100,30660,30587],{"class":110},[100,30662,30567],{"class":110},[100,30664,30665],{"class":102,"line":612},[100,30666,570],{"emptyLinePlaceholder":569},[100,30668,30669,30671,30673],{"class":102,"line":618},[100,30670,28125],{"class":106},[100,30672,30587],{"class":110},[100,30674,30675],{"class":110}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[26,30677,30678],{"start":199},[29,30679,30680],{},"验证推送成功",[19,30682,30683],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,30685,30686],{},[1921,30687,5383],{},[2773,30689,30690,30693],{},[29,30691,30692],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[29,30694,30695],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,30697,30698],{},[3095,30699],{"alt":79,"src":30700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,30702,30703],{},[3095,30704],{"alt":79,"src":30705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[23579,30707,30709],{"id":30708},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,30711,30712,30713,30716,30717,30720],{},"如果您想在 ",[1921,30714,30715],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[1921,30718,30719],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,30722,30723,30724],{},"1. ",[1921,30725,30726],{},"启用 Docker 跨平台构建",[19,30728,30729],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,30731,30732],{},"第一步：启用 buildx（只需执行一次）",[73,30734,30736],{"className":94,"code":30735,"language":96,"meta":79,"style":79},"docker buildx create --name multiarch_builder --use\n",[32,30737,30738],{"__ignoreMap":79},[100,30739,30740,30742,30745,30747,30750,30753],{"class":102,"line":103},[100,30741,28125],{"class":106},[100,30743,30744],{"class":110}," buildx",[100,30746,170],{"class":110},[100,30748,30749],{"class":117}," --name",[100,30751,30752],{"class":110}," multiarch_builder",[100,30754,30755],{"class":117}," --use\n",[19,30757,30758],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,30760,30761],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[73,30763,30765],{"className":94,"code":30764,"language":96,"meta":79,"style":79},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[32,30766,30767],{"__ignoreMap":79},[100,30768,30769,30771,30773,30775,30778,30781,30784,30787],{"class":102,"line":103},[100,30770,28125],{"class":106},[100,30772,28802],{"class":110},[100,30774,28805],{"class":117},[100,30776,30777],{"class":117}," --privileged",[100,30779,30780],{"class":110}," multiarch\u002Fqemu-user-static",[100,30782,30783],{"class":117}," --reset",[100,30785,30786],{"class":117}," -p",[100,30788,30789],{"class":110}," yes\n",[19,30791,30792],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,30794,30795],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[73,30797,30799],{"className":94,"code":30798,"language":96,"meta":79,"style":79},"docker buildx build --platform linux\u002Famd64,linux\u002Farm64 -t \u003C你的镜像名>:\u003C标签> --push .\n\n# 例子：\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros:noetic-focal \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros:humble-jammy \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros:jazzy-noble \\\n --push \\\n .\n\n docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy \\\n --push \\\n .\n\n docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy \\\n --push \\\n .\n\n docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble \\\n --push \\\n .\n\n  docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy \\\n --push \\\n .\n",[32,30800,30801,30843,30847,30852,30862,30872,30881,30887,30891,30895,30905,30913,30922,30928,30932,30936,30946,30954,30963,30969,30973,30977,30987,30995,31004,31010,31014,31018,31028,31036,31045,31051,31055,31059,31069,31077,31086,31092,31096,31100,31110,31118,31127,31133,31137,31141,31151,31159,31168,31174,31178,31182,31192,31200,31209,31215,31219,31223,31234,31242,31251,31257],{"__ignoreMap":79},[100,30802,30803,30805,30807,30809,30812,30815,30817,30819,30822,30824,30826,30828,30830,30833,30836,30838,30841],{"class":102,"line":103},[100,30804,28125],{"class":106},[100,30806,30744],{"class":110},[100,30808,30303],{"class":110},[100,30810,30811],{"class":117}," --platform",[100,30813,30814],{"class":110}," linux\u002Famd64,linux\u002Farm64",[100,30816,30306],{"class":117},[100,30818,30473],{"class":471},[100,30820,30821],{"class":110},"你的镜像",[100,30823,30479],{"class":258},[100,30825,2726],{"class":471},[100,30827,2625],{"class":110},[100,30829,2676],{"class":471},[100,30831,30832],{"class":110},"标",[100,30834,30835],{"class":258},"签",[100,30837,2726],{"class":471},[100,30839,30840],{"class":117}," --push",[100,30842,30312],{"class":110},[100,30844,30845],{"class":102,"line":188},[100,30846,570],{"emptyLinePlaceholder":569},[100,30848,30849],{"class":102,"line":199},[100,30850,30851],{"class":1836},"# 例子：\n",[100,30853,30854,30856,30858,30860],{"class":102,"line":532},[100,30855,28125],{"class":106},[100,30857,30744],{"class":110},[100,30859,30303],{"class":110},[100,30861,26254],{"class":117},[100,30863,30864,30867,30870],{"class":102,"line":577},[100,30865,30866],{"class":258},"--platform ",[100,30868,30869],{"class":110},"linux\u002Famd64,linux\u002Farm64",[100,30871,26254],{"class":117},[100,30873,30874,30876,30879],{"class":102,"line":589},[100,30875,30306],{"class":117},[100,30877,30878],{"class":110}," tungchiahui\u002Fros:noetic-focal",[100,30880,26254],{"class":117},[100,30882,30883,30885],{"class":102,"line":595},[100,30884,30840],{"class":117},[100,30886,26254],{"class":117},[100,30888,30889],{"class":102,"line":601},[100,30890,30312],{"class":110},[100,30892,30893],{"class":102,"line":606},[100,30894,570],{"emptyLinePlaceholder":569},[100,30896,30897,30899,30901,30903],{"class":102,"line":612},[100,30898,28125],{"class":106},[100,30900,30744],{"class":110},[100,30902,30303],{"class":110},[100,30904,26254],{"class":117},[100,30906,30907,30909,30911],{"class":102,"line":618},[100,30908,30866],{"class":258},[100,30910,30869],{"class":110},[100,30912,26254],{"class":117},[100,30914,30915,30917,30920],{"class":102,"line":623},[100,30916,30306],{"class":117},[100,30918,30919],{"class":110}," tungchiahui\u002Fros:humble-jammy",[100,30921,26254],{"class":117},[100,30923,30924,30926],{"class":102,"line":629},[100,30925,30840],{"class":117},[100,30927,26254],{"class":117},[100,30929,30930],{"class":102,"line":635},[100,30931,30312],{"class":110},[100,30933,30934],{"class":102,"line":641},[100,30935,570],{"emptyLinePlaceholder":569},[100,30937,30938,30940,30942,30944],{"class":102,"line":647},[100,30939,28125],{"class":106},[100,30941,30744],{"class":110},[100,30943,30303],{"class":110},[100,30945,26254],{"class":117},[100,30947,30948,30950,30952],{"class":102,"line":653},[100,30949,30866],{"class":258},[100,30951,30869],{"class":110},[100,30953,26254],{"class":117},[100,30955,30956,30958,30961],{"class":102,"line":659},[100,30957,30306],{"class":117},[100,30959,30960],{"class":110}," tungchiahui\u002Fros:jazzy-noble",[100,30962,26254],{"class":117},[100,30964,30965,30967],{"class":102,"line":665},[100,30966,30840],{"class":117},[100,30968,26254],{"class":117},[100,30970,30971],{"class":102,"line":670},[100,30972,30312],{"class":110},[100,30974,30975],{"class":102,"line":675},[100,30976,570],{"emptyLinePlaceholder":569},[100,30978,30979,30981,30983,30985],{"class":102,"line":699},[100,30980,27893],{"class":106},[100,30982,30744],{"class":110},[100,30984,30303],{"class":110},[100,30986,26254],{"class":117},[100,30988,30989,30991,30993],{"class":102,"line":708},[100,30990,30866],{"class":258},[100,30992,30869],{"class":110},[100,30994,26254],{"class":117},[100,30996,30997,30999,31002],{"class":102,"line":722},[100,30998,30306],{"class":117},[100,31000,31001],{"class":110}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[100,31003,26254],{"class":117},[100,31005,31006,31008],{"class":102,"line":735},[100,31007,30840],{"class":117},[100,31009,26254],{"class":117},[100,31011,31012],{"class":102,"line":754},[100,31013,30312],{"class":110},[100,31015,31016],{"class":102,"line":771},[100,31017,570],{"emptyLinePlaceholder":569},[100,31019,31020,31022,31024,31026],{"class":102,"line":776},[100,31021,28125],{"class":106},[100,31023,30744],{"class":110},[100,31025,30303],{"class":110},[100,31027,26254],{"class":117},[100,31029,31030,31032,31034],{"class":102,"line":781},[100,31031,30866],{"class":258},[100,31033,30869],{"class":110},[100,31035,26254],{"class":117},[100,31037,31038,31040,31043],{"class":102,"line":796},[100,31039,30306],{"class":117},[100,31041,31042],{"class":110}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[100,31044,26254],{"class":117},[100,31046,31047,31049],{"class":102,"line":812},[100,31048,30840],{"class":117},[100,31050,26254],{"class":117},[100,31052,31053],{"class":102,"line":823},[100,31054,30312],{"class":110},[100,31056,31057],{"class":102,"line":828},[100,31058,570],{"emptyLinePlaceholder":569},[100,31060,31061,31063,31065,31067],{"class":102,"line":840},[100,31062,27893],{"class":106},[100,31064,30744],{"class":110},[100,31066,30303],{"class":110},[100,31068,26254],{"class":117},[100,31070,31071,31073,31075],{"class":102,"line":845},[100,31072,30866],{"class":258},[100,31074,30869],{"class":110},[100,31076,26254],{"class":117},[100,31078,31079,31081,31084],{"class":102,"line":868},[100,31080,30306],{"class":117},[100,31082,31083],{"class":110}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[100,31085,26254],{"class":117},[100,31087,31088,31090],{"class":102,"line":874},[100,31089,30840],{"class":117},[100,31091,26254],{"class":117},[100,31093,31094],{"class":102,"line":879},[100,31095,30312],{"class":110},[100,31097,31098],{"class":102,"line":889},[100,31099,570],{"emptyLinePlaceholder":569},[100,31101,31102,31104,31106,31108],{"class":102,"line":894},[100,31103,28125],{"class":106},[100,31105,30744],{"class":110},[100,31107,30303],{"class":110},[100,31109,26254],{"class":117},[100,31111,31112,31114,31116],{"class":102,"line":900},[100,31113,30866],{"class":258},[100,31115,30869],{"class":110},[100,31117,26254],{"class":117},[100,31119,31120,31122,31125],{"class":102,"line":910},[100,31121,30306],{"class":117},[100,31123,31124],{"class":110}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[100,31126,26254],{"class":117},[100,31128,31129,31131],{"class":102,"line":915},[100,31130,30840],{"class":117},[100,31132,26254],{"class":117},[100,31134,31135],{"class":102,"line":929},[100,31136,30312],{"class":110},[100,31138,31139],{"class":102,"line":935},[100,31140,570],{"emptyLinePlaceholder":569},[100,31142,31143,31145,31147,31149],{"class":102,"line":945},[100,31144,28125],{"class":106},[100,31146,30744],{"class":110},[100,31148,30303],{"class":110},[100,31150,26254],{"class":117},[100,31152,31153,31155,31157],{"class":102,"line":950},[100,31154,30866],{"class":258},[100,31156,30869],{"class":110},[100,31158,26254],{"class":117},[100,31160,31161,31163,31166],{"class":102,"line":955},[100,31162,30306],{"class":117},[100,31164,31165],{"class":110}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[100,31167,26254],{"class":117},[100,31169,31170,31172],{"class":102,"line":972},[100,31171,30840],{"class":117},[100,31173,26254],{"class":117},[100,31175,31176],{"class":102,"line":11370},[100,31177,30312],{"class":110},[100,31179,31180],{"class":102,"line":11375},[100,31181,570],{"emptyLinePlaceholder":569},[100,31183,31184,31186,31188,31190],{"class":102,"line":11380},[100,31185,27893],{"class":106},[100,31187,30744],{"class":110},[100,31189,30303],{"class":110},[100,31191,26254],{"class":117},[100,31193,31194,31196,31198],{"class":102,"line":11385},[100,31195,30866],{"class":258},[100,31197,30869],{"class":110},[100,31199,26254],{"class":117},[100,31201,31202,31204,31207],{"class":102,"line":11394},[100,31203,30306],{"class":117},[100,31205,31206],{"class":110}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[100,31208,26254],{"class":117},[100,31210,31211,31213],{"class":102,"line":11399},[100,31212,30840],{"class":117},[100,31214,26254],{"class":117},[100,31216,31217],{"class":102,"line":11405},[100,31218,30312],{"class":110},[100,31220,31221],{"class":102,"line":11426},[100,31222,570],{"emptyLinePlaceholder":569},[100,31224,31225,31228,31230,31232],{"class":102,"line":11432},[100,31226,31227],{"class":106},"  docker",[100,31229,30744],{"class":110},[100,31231,30303],{"class":110},[100,31233,26254],{"class":117},[100,31235,31236,31238,31240],{"class":102,"line":11446},[100,31237,30866],{"class":258},[100,31239,30869],{"class":110},[100,31241,26254],{"class":117},[100,31243,31244,31246,31249],{"class":102,"line":11452},[100,31245,30306],{"class":117},[100,31247,31248],{"class":110}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[100,31250,26254],{"class":117},[100,31252,31253,31255],{"class":102,"line":11479},[100,31254,30840],{"class":117},[100,31256,26254],{"class":117},[100,31258,31259],{"class":102,"line":11488},[100,31260,30312],{"class":110},[19,31262,31263],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,31265,31266],{},[3095,31267],{"alt":79,"src":31268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,31270,31271],{},[3095,31272],{"alt":79,"src":31273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[23579,31275,31277],{"id":31276},"_623清除构建缓存","6.2.3.清除构建缓存",[73,31279,31281],{"className":94,"code":31280,"language":96,"meta":79,"style":79},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[32,31282,31283,31288],{"__ignoreMap":79},[100,31284,31285],{"class":102,"line":103},[100,31286,31287],{"class":1836},"# 清理BuildKit构建缓存\n",[100,31289,31290,31292,31295,31298],{"class":102,"line":188},[100,31291,28125],{"class":106},[100,31293,31294],{"class":110}," builder",[100,31296,31297],{"class":110}," prune",[100,31299,31300],{"class":117}," -f\n",[19,31302,31303],{},[3095,31304],{"alt":79,"src":31305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[305,31307,31309],{"id":31308},"_63补充","6.3.补充",[23579,31311,31313],{"id":31312},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,31315,31316],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,31318,31319],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,31321,31322],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[73,31324,31326],{"className":94,"code":31325,"language":96,"meta":79,"style":79},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[32,31327,31328,31335],{"__ignoreMap":79},[100,31329,31330,31332],{"class":102,"line":103},[100,31331,28942],{"class":106},[100,31333,31334],{"class":110}," nginx\n",[100,31336,31337,31339,31342,31345,31347],{"class":102,"line":188},[100,31338,30126],{"class":106},[100,31340,31341],{"class":110}," echo",[100,31343,31344],{"class":110}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[100,31346,27796],{"class":471},[100,31348,31349],{"class":110}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,31351,31352],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,31354,31355],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[73,31357,31359],{"className":94,"code":31358,"language":96,"meta":79,"style":79},"docker build -t nginx:tuling .\n",[32,31360,31361],{"__ignoreMap":79},[100,31362,31363,31365,31367,31369,31372],{"class":102,"line":103},[100,31364,28125],{"class":106},[100,31366,30303],{"class":110},[100,31368,30306],{"class":117},[100,31370,31371],{"class":110}," nginx:tuling",[100,31373,30312],{"class":110},[19,31375,31376],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,31378,31379],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[73,31381,31383],{"className":94,"code":31382,"language":96,"meta":79,"style":79},"docker run -d -p 92:80 nginx:tuling\n",[32,31384,31385],{"__ignoreMap":79},[100,31386,31387,31389,31391,31394,31396,31399],{"class":102,"line":103},[100,31388,28125],{"class":106},[100,31390,28802],{"class":110},[100,31392,31393],{"class":117}," -d",[100,31395,30786],{"class":117},[100,31397,31398],{"class":110}," 92:80",[100,31400,31401],{"class":110}," nginx:tuling\n",[19,31403,31404,31405],{},"4、访问 ",[2006,31406,31409],{"href":31407,"rel":31408},"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",[25442],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,31411,31412],{},[3095,31413],{"alt":79,"src":31414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,31416,31417],{},[3095,31418],{"alt":79,"src":31419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[23579,31421,31423],{"id":31422},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,31425,31426],{},"只需要知道大体流程即可",[19,31428,31429],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,31431,31432],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,31434,31435],{},"2、在Dockerfile中添加以下内容",[73,31437,31439],{"className":27665,"code":31438,"language":27667,"meta":79,"style":79},"# 基于哪个镜像\nFrom java:8\n# 复制文件到容器\nADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n# 声明需要暴露的端口\nEXPOSE 8877\n# 配置容器启动后执行的命令\nENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[32,31440,31441,31446,31451,31456,31461,31466,31471,31476],{"__ignoreMap":79},[100,31442,31443],{"class":102,"line":103},[100,31444,31445],{},"# 基于哪个镜像\n",[100,31447,31448],{"class":102,"line":188},[100,31449,31450],{},"From java:8\n",[100,31452,31453],{"class":102,"line":199},[100,31454,31455],{},"# 复制文件到容器\n",[100,31457,31458],{"class":102,"line":532},[100,31459,31460],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[100,31462,31463],{"class":102,"line":577},[100,31464,31465],{},"# 声明需要暴露的端口\n",[100,31467,31468],{"class":102,"line":589},[100,31469,31470],{},"EXPOSE 8877\n",[100,31472,31473],{"class":102,"line":595},[100,31474,31475],{},"# 配置容器启动后执行的命令\n",[100,31477,31478],{"class":102,"line":601},[100,31479,31480],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,31482,31483],{},"3、使用docker build命令构建镜像",[73,31485,31487],{"className":94,"code":31486,"language":96,"meta":79,"style":79},"docker build -t tulingmall-member:0.0.5 .\n",[32,31488,31489],{"__ignoreMap":79},[100,31490,31491,31493,31495,31497,31500],{"class":102,"line":103},[100,31492,28125],{"class":106},[100,31494,30303],{"class":110},[100,31496,30306],{"class":117},[100,31498,31499],{"class":110}," tulingmall-member:0.0.5",[100,31501,30312],{"class":110},[19,31503,31504],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,31506,31507],{},[3095,31508],{"alt":79,"src":31509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,31511,31512],{},"4、启动镜像，加-d可在后台启动",[73,31514,31516],{"className":94,"code":31515,"language":96,"meta":79,"style":79},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[32,31517,31518],{"__ignoreMap":79},[100,31519,31520,31522,31524,31526,31528,31531],{"class":102,"line":103},[100,31521,28125],{"class":106},[100,31523,28802],{"class":110},[100,31525,31393],{"class":117},[100,31527,30786],{"class":117},[100,31529,31530],{"class":110}," 8877:8877",[100,31532,31533],{"class":110}," tulingmall-member:0.0.5\n",[19,31535,31536],{},"加上JVM参数：",[73,31538,31540],{"className":94,"code":31539,"language":96,"meta":79,"style":79},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\ndocker run  -d -p 8877:8877 \\\n-e SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848  \\\n-e JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'  \\\n--cap-add=SYS_PTRACE  \\\ntulingmall-member:0.0.5\n",[32,31541,31542,31547,31562,31572,31581,31588],{"__ignoreMap":79},[100,31543,31544],{"class":102,"line":103},[100,31545,31546],{"class":1836},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[100,31548,31549,31551,31553,31556,31558,31560],{"class":102,"line":188},[100,31550,28125],{"class":106},[100,31552,28802],{"class":110},[100,31554,31555],{"class":117},"  -d",[100,31557,30786],{"class":117},[100,31559,31530],{"class":110},[100,31561,26254],{"class":117},[100,31563,31564,31566,31569],{"class":102,"line":199},[100,31565,29700],{"class":258},[100,31567,31568],{"class":110},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[100,31570,31571],{"class":117},"  \\\n",[100,31573,31574,31576,31579],{"class":102,"line":532},[100,31575,29700],{"class":258},[100,31577,31578],{"class":110},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[100,31580,31571],{"class":117},[100,31582,31583,31586],{"class":102,"line":577},[100,31584,31585],{"class":258},"--cap-add=SYS_PTRACE  ",[100,31587,27749],{"class":117},[100,31589,31590],{"class":102,"line":589},[100,31591,31592],{"class":258},"tulingmall-member:0.0.5\n",[19,31594,31595],{},"5、访问会员服务接口",[19,31597,31598],{},[3095,31599],{"alt":79,"src":31600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[23579,31602,31604],{"id":31603},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,31606,31607],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,31609,31610,31611],{},"阿里云docker镜像仓库：",[2006,31612,31613],{"href":31613,"rel":31614},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[25442],[19,31616,31617],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,31619,31620],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,31622,31623],{},[3095,31624],{"alt":79,"src":31625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,31627,31628],{},"要把镜像推送到镜像仓库",[73,31630,31632],{"className":94,"code":31631,"language":96,"meta":79,"style":79},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[32,31633,31634],{"__ignoreMap":79},[100,31635,31636,31638,31640,31642],{"class":102,"line":103},[100,31637,28125],{"class":106},[100,31639,30468],{"class":110},[100,31641,31499],{"class":110},[100,31643,31644],{"class":110}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,31646,31647],{},"最后将镜像推送到远程仓库",[73,31649,31651],{"className":94,"code":31650,"language":96,"meta":79,"style":79},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[32,31652,31653],{"__ignoreMap":79},[100,31654,31655,31657,31659],{"class":102,"line":103},[100,31656,28125],{"class":106},[100,31658,30587],{"class":110},[100,31660,31644],{"class":110},[1677,31662,31663],{},"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":79,"searchDepth":188,"depth":188,"links":31665},[31666,31667,31668],{"id":30054,"depth":199,"text":30055},{"id":30283,"depth":199,"text":30284},{"id":31308,"depth":199,"text":31309},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":30046,"description":79},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":31675,"title":31676,"body":31677,"description":79,"extension":1708,"meta":31820,"navigation":569,"path":31821,"seo":31822,"stem":31823,"__hash__":31824},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":31678,"toc":31818},[31679,31682,31687,31692,31695,31700,31705,31708,31713,31718,31721,31726,31729,31732,31735,31738,31741,31744,31764,31786,31789,31792,31812,31815],[10,31680,31676],{"id":31681},"_7vscode远程开发",[26,31683,31684],{},[29,31685,31686],{},"插件1：微软Docker工具",[19,31688,31689],{},[3095,31690],{"alt":79,"src":31691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,31693,31694],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,31696,31697],{},[3095,31698],{"alt":79,"src":31699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[26,31701,31702],{"start":188},[29,31703,31704],{},"插件2：微软Docker远程开发工具",[19,31706,31707],{},"下面这是远程开发的插件。",[19,31709,31710],{},[3095,31711],{"alt":79,"src":31712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,31714,31715],{},[3095,31716],{"alt":79,"src":31717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,31719,31720],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,31722,31723],{},[3095,31724],{"alt":79,"src":31725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,31727,31728],{},"安装完拓展之后，vscode进行链接：",[19,31730,31731],{},"1.按ctrl+shift+p",[19,31733,31734],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,31736,31737],{},"3.选择目前运行的容器",[19,31739,31740],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,31742,31743],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[73,31745,31747],{"className":94,"code":31746,"language":96,"meta":79,"style":79},"docker run -v 主机目录:容器目录 image-name\n",[32,31748,31749],{"__ignoreMap":79},[100,31750,31751,31753,31755,31758,31761],{"class":102,"line":103},[100,31752,28125],{"class":106},[100,31754,28802],{"class":110},[100,31756,31757],{"class":117}," -v",[100,31759,31760],{"class":110}," 主机目录:容器目录",[100,31762,31763],{"class":110}," image-name\n",[73,31765,31767],{"className":94,"code":31766,"language":96,"meta":79,"style":79},"docker run -it -v \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[32,31768,31769],{"__ignoreMap":79},[100,31770,31771,31773,31775,31778,31780,31783],{"class":102,"line":103},[100,31772,28125],{"class":106},[100,31774,28802],{"class":110},[100,31776,31777],{"class":117}," -it",[100,31779,31757],{"class":117},[100,31781,31782],{"class":110}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[100,31784,31785],{"class":110}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,31787,31788],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,31790,31791],{},"查看挂载情况：",[73,31793,31795],{"className":94,"code":31794,"language":96,"meta":79,"style":79},"mount | grep -i project\n",[32,31796,31797],{"__ignoreMap":79},[100,31798,31799,31802,31804,31807,31809],{"class":102,"line":103},[100,31800,31801],{"class":106},"mount",[100,31803,26685],{"class":471},[100,31805,31806],{"class":106}," grep",[100,31808,28002],{"class":117},[100,31810,31811],{"class":110}," project\n",[19,31813,31814],{},"也可以通过ls来进行查看",[1677,31816,31817],{},"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":79,"searchDepth":188,"depth":188,"links":31819},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":31676,"description":79},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":31826,"title":31827,"body":31828,"description":24958,"extension":1708,"meta":31832,"navigation":569,"path":31834,"seo":31835,"stem":31836,"__hash__":31837},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":31829,"toc":31830},[],{"title":79,"searchDepth":188,"depth":188,"links":31831},[],{"category":31833},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":31827,"description":24958},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":31839,"title":31840,"body":31841,"description":24958,"extension":1708,"meta":31845,"navigation":569,"path":31846,"seo":31847,"stem":31848,"__hash__":31849},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":31842,"toc":31843},[],{"title":79,"searchDepth":188,"depth":188,"links":31844},[],{"category":31833},"\u002Fwiki\u002F2025-11-10-k8s",{"title":31840,"description":24958},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":31851,"title":31852,"body":31853,"description":24958,"extension":1708,"meta":32140,"navigation":569,"path":32141,"seo":32142,"stem":32143,"__hash__":32144},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":31854,"toc":32138},[31855,31858,31866,31881,31886,31936,31939,31945,32127,32132,32135],[10,31856,31852],{"id":31857},"_1验证深度学习环境",[19,31859,31860,31861],{},"关于环境的安装，看",[2006,31862,31865],{"href":31863,"rel":31864},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[25442],"Pytorch-->深度学习",[19,31867,31868,31869,31872,31873,31876,31877,31880],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[32,31870,31871],{},"pytorch-cuda=12.4"," 是一个“ ",[1921,31874,31875],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[1921,31878,31879],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,31882,31883],{},[3095,31884],{"alt":79,"src":31885},"\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",[73,31887,31889],{"className":94,"code":31888,"language":96,"meta":79,"style":79},"# CUDA 12.4\nconda install pytorch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 pytorch-cuda=12.4 -c pytorch -c nvidia\n",[32,31890,31891,31896],{"__ignoreMap":79},[100,31892,31893],{"class":102,"line":103},[100,31894,31895],{"class":1836},"# CUDA 12.4\n",[100,31897,31898,31900,31902,31905,31908,31911,31914,31917,31919,31922,31925,31928,31931,31933],{"class":102,"line":188},[100,31899,167],{"class":106},[100,31901,114],{"class":110},[100,31903,31904],{"class":110}," pytorch==",[100,31906,31907],{"class":117},"2.5.1",[100,31909,31910],{"class":110}," torchvision==",[100,31912,31913],{"class":117},"0.20.1",[100,31915,31916],{"class":110}," torchaudio==",[100,31918,31907],{"class":117},[100,31920,31921],{"class":110}," pytorch-cuda=",[100,31923,31924],{"class":117},"12.4",[100,31926,31927],{"class":117}," -c",[100,31929,31930],{"class":110}," pytorch",[100,31932,31927],{"class":117},[100,31934,31935],{"class":110}," nvidia\n",[19,31937,31938],{},"）：",[19,31940,31941],{},[2006,31942,31943],{"href":31943,"rel":31944},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[25442],[73,31946,31948],{"className":249,"code":31947,"language":251,"meta":79,"style":79},"# 对深度学习环境进行测试\nimport torch\n# 查看cuda是否被激活\nflag=torch.cuda.is_available()\nprint(\"cuda:\", flag)   #返回true的话说明被激活\n# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\nngpu=1\ndevice=torch.device(\"cuda:0\" if(torch.cuda.is_available() and ngpu>0) else \"cpu\")\nprint(device)\nprint(torch.cuda.get_device_name(0))\nprint(torch.rand(3,3).cuda())\n# 查看cuda和cudnn的版本\ncuda_version=torch.version.cuda\nprint(\"cuda version\",cuda_version)\ncudnn_version=torch.backends.cudnn.version()\nprint(\"cudnn version\",cudnn_version)\n",[32,31949,31950,31955,31962,31967,31977,31992,31997,32007,32044,32051,32062,32078,32083,32093,32105,32115],{"__ignoreMap":79},[100,31951,31952],{"class":102,"line":103},[100,31953,31954],{"class":1836},"# 对深度学习环境进行测试\n",[100,31956,31957,31959],{"class":102,"line":188},[100,31958,548],{"class":471},[100,31960,31961],{"class":258}," torch\n",[100,31963,31964],{"class":102,"line":199},[100,31965,31966],{"class":1836},"# 查看cuda是否被激活\n",[100,31968,31969,31972,31974],{"class":102,"line":532},[100,31970,31971],{"class":258},"flag",[100,31973,472],{"class":471},[100,31975,31976],{"class":258},"torch.cuda.is_available()\n",[100,31978,31979,31981,31983,31986,31989],{"class":102,"line":577},[100,31980,1195],{"class":117},[100,31982,713],{"class":258},[100,31984,31985],{"class":110},"\"cuda:\"",[100,31987,31988],{"class":258},", flag)   ",[100,31990,31991],{"class":1836},"#返回true的话说明被激活\n",[100,31993,31994],{"class":102,"line":589},[100,31995,31996],{"class":1836},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[100,31998,31999,32002,32004],{"class":102,"line":595},[100,32000,32001],{"class":258},"ngpu",[100,32003,472],{"class":471},[100,32005,32006],{"class":117},"1\n",[100,32008,32009,32012,32014,32017,32020,32022,32025,32028,32031,32033,32035,32037,32039,32042],{"class":102,"line":601},[100,32010,32011],{"class":258},"device",[100,32013,472],{"class":471},[100,32015,32016],{"class":258},"torch.device(",[100,32018,32019],{"class":110},"\"cuda:0\"",[100,32021,3325],{"class":471},[100,32023,32024],{"class":258},"(torch.cuda.is_available() ",[100,32026,32027],{"class":471},"and",[100,32029,32030],{"class":258}," ngpu",[100,32032,2726],{"class":471},[100,32034,1366],{"class":117},[100,32036,15295],{"class":258},[100,32038,3322],{"class":471},[100,32040,32041],{"class":110}," \"cpu\"",[100,32043,809],{"class":258},[100,32045,32046,32048],{"class":102,"line":606},[100,32047,1195],{"class":117},[100,32049,32050],{"class":258},"(device)\n",[100,32052,32053,32055,32058,32060],{"class":102,"line":612},[100,32054,1195],{"class":117},[100,32056,32057],{"class":258},"(torch.cuda.get_device_name(",[100,32059,1366],{"class":117},[100,32061,751],{"class":258},[100,32063,32064,32066,32069,32071,32073,32075],{"class":102,"line":618},[100,32065,1195],{"class":117},[100,32067,32068],{"class":258},"(torch.rand(",[100,32070,1849],{"class":117},[100,32072,2145],{"class":258},[100,32074,1849],{"class":117},[100,32076,32077],{"class":258},").cuda())\n",[100,32079,32080],{"class":102,"line":623},[100,32081,32082],{"class":1836},"# 查看cuda和cudnn的版本\n",[100,32084,32085,32088,32090],{"class":102,"line":629},[100,32086,32087],{"class":258},"cuda_version",[100,32089,472],{"class":471},[100,32091,32092],{"class":258},"torch.version.cuda\n",[100,32094,32095,32097,32099,32102],{"class":102,"line":635},[100,32096,1195],{"class":117},[100,32098,713],{"class":258},[100,32100,32101],{"class":110},"\"cuda version\"",[100,32103,32104],{"class":258},",cuda_version)\n",[100,32106,32107,32110,32112],{"class":102,"line":641},[100,32108,32109],{"class":258},"cudnn_version",[100,32111,472],{"class":471},[100,32113,32114],{"class":258},"torch.backends.cudnn.version()\n",[100,32116,32117,32119,32121,32124],{"class":102,"line":647},[100,32118,1195],{"class":117},[100,32120,713],{"class":258},[100,32122,32123],{"class":110},"\"cudnn version\"",[100,32125,32126],{"class":258},",cudnn_version)\n",[19,32128,32129],{},[3095,32130],{"alt":79,"src":32131},"\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,32133,32134],{},"cuda:0 指的是一块显卡",[1677,32136,32137],{},"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":79,"searchDepth":188,"depth":188,"links":32139},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":31852,"description":24958},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":32146,"title":32147,"body":32148,"description":24958,"extension":1708,"meta":51942,"navigation":569,"path":51943,"seo":51944,"stem":51945,"__hash__":51946},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":32149,"toc":51936},[32150,32153,32157,32161,32164,32169,32174,32177,32182,32187,32192,32195,32199,32204,32208,32213,32216,32221,32224,32227,32230,32233,32238,32241,32246,32251,32256,32261,32264,32268,32271,32276,32877,32882,32885,32890,32893,32896,33357,33360,33363,33366,33369,35417,35420,35425,35430,36225,36228,36233,37010,37014,38673,38677,39391,39395,39399,39404,39409,39414,39417,39422,39427,39432,39437,39442,39446,39451,40733,40738,40741,40744,40747,40902,40905,40908,42124,42129,42824,42828,42832,42837,42842,42845,42850,42855,42860,42865,42870,42875,42880,42885,42890,42895,42900,42905,42910,42915,42920,42925,42930,42935,42940,42945,42950,42955,42960,42965,42970,42975,42980,42985,42990,42995,42999,43003,43006,44484,44488,46135,46139,46833,46837,46840,46843,47387,47390,47394,47397,48794,48798,48801,49379,51166,51170,51173,51933],[10,32151,32147],{"id":32152},"_2经典神经网络",[305,32154,32156],{"id":32155},"_21lenet与alexnet","2.1.LeNet与AlexNet",[23579,32158,32160],{"id":32159},"_211原理介绍","2.1.1.原理介绍",[19,32162,32163],{},"LeNet-5",[26,32165,32166],{},[29,32167,32168],{},"原理",[19,32170,32171],{},[3095,32172],{"alt":79,"src":32173},"\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,32175,32176],{},"B是batch批次；C是channel通道",[26,32178,32179],{"start":188},[29,32180,32181],{},"网络参数详细",[19,32183,32184],{},[3095,32185],{"alt":79,"src":32186},"\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,32188,32189],{},[3095,32190],{"alt":79,"src":32191},"\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,32193,32194],{},"AlexNet",[26,32196,32197],{},[29,32198,32168],{},[19,32200,32201],{},[3095,32202],{"alt":79,"src":32203},"\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,32205,32206],{"start":188},[29,32207,32181],{},[19,32209,32210],{},[3095,32211],{"alt":79,"src":32212},"\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,32214,32215],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,32217,32218],{},[3095,32219],{"alt":79,"src":32220},"\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,32222,32223],{},"数据处理中的图像增强操作:",[19,32225,32226],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,32228,32229],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,32231,32232],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,32234,32235],{},[3095,32236],{"alt":79,"src":32237},"\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,32239,32240],{},"提升网络精确度的方法：LRN正则化",[19,32242,32243],{},[3095,32244],{"alt":79,"src":32245},"\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,32247,32248],{},[3095,32249],{"alt":79,"src":32250},"\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,32252,32253],{"start":199},[29,32254,32255],{},"AlexNet的总结",[19,32257,32258],{},[3095,32259],{"alt":79,"src":32260},"\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,32262,32263],{},"比LeNet模型要深一丢丢",[23579,32265,32267],{"id":32266},"_212代码实现","2.1.2.代码实现",[19,32269,32270],{},"（1）LeNet",[26,32272,32273],{},[29,32274,32275],{},"模型搭建",[73,32277,32279],{"className":249,"code":32278,"language":251,"meta":79,"style":79},"# 导入库\nimport torch\n# 导入神经网络层\nfrom torch import nn\n# 导入展示神经网络参数的包\nfrom torchsummary import summary\n\nclass LeNet(nn.Module):\n    # 模型初始化:\n    # 定义一些网络层和激活函数\n    def __init__(self):\n        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n        super(LeNet,self).__init__()\n\n        # 定义网络层\n        self.c1=nn.Conv2d(in_channels=1,out_channels=6,kernel_size=5,padding=2)\n        self.sig=nn.Sigmoid()\n        # 定义池化\n        self.s2=nn.AvgPool2d(kernel_size=2,stride=2)\n        self.c3=nn.Conv2d(in_channels=6,out_channels=16,kernel_size=5)\n        self.s4=nn.AvgPool2d(kernel_size=2,stride=2)\n        # 定义平展层\n        self.flatten=nn.Flatten()\n        # 定义全连接层\n        self.f5=nn.Linear(400,120)\n        self.f6=nn.Linear(120,84)\n        self.f7=nn.Linear(84,10)\n\n    # 写工具->写前向传播\n    def forward(self,x):\n        x=self.sig(self.c1(x))\n        x=self.s2(x)\n        x=self.sig(self.c3(x))\n        x=self.s4(x)\n        x=self.flatten(x)\n        x=self.sig(self.f5(x))\n        x=self.sig(self.f6(x))\n        x=self.f7(x)\n        return x\n\nif __name__==\"__main__\":\n    # 判断是否有cuda是否激活,有GPU会返回cuda\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    # 如果就是想指定用cpu用下方代码:\n    # device=\"cpu\"\n    # print(device)\n\n    # 实例化模型\n    # 将模型放到设备中去运行\n    model=LeNet().to(device)\n    print(summary(model,(1,28,28)))\n",[32,32280,32281,32286,32292,32297,32310,32315,32327,32331,32350,32355,32360,32371,32376,32395,32399,32404,32453,32465,32470,32499,32534,32561,32566,32578,32583,32603,32622,32641,32645,32650,32660,32677,32688,32703,32714,32725,32740,32755,32766,32773,32777,32790,32795,32818,32823,32828,32833,32837,32842,32847,32857],{"__ignoreMap":79},[100,32282,32283],{"class":102,"line":103},[100,32284,32285],{"class":1836},"# 导入库\n",[100,32287,32288,32290],{"class":102,"line":188},[100,32289,548],{"class":471},[100,32291,31961],{"class":258},[100,32293,32294],{"class":102,"line":199},[100,32295,32296],{"class":1836},"# 导入神经网络层\n",[100,32298,32299,32302,32305,32307],{"class":102,"line":532},[100,32300,32301],{"class":471},"from",[100,32303,32304],{"class":258}," torch ",[100,32306,548],{"class":471},[100,32308,32309],{"class":258}," nn\n",[100,32311,32312],{"class":102,"line":577},[100,32313,32314],{"class":1836},"# 导入展示神经网络参数的包\n",[100,32316,32317,32319,32322,32324],{"class":102,"line":589},[100,32318,32301],{"class":471},[100,32320,32321],{"class":258}," torchsummary ",[100,32323,548],{"class":471},[100,32325,32326],{"class":258}," summary\n",[100,32328,32329],{"class":102,"line":595},[100,32330,570],{"emptyLinePlaceholder":569},[100,32332,32333,32335,32338,32340,32343,32345,32348],{"class":102,"line":601},[100,32334,16275],{"class":471},[100,32336,32337],{"class":106}," LeNet",[100,32339,713],{"class":258},[100,32341,32342],{"class":106},"nn",[100,32344,2325],{"class":258},[100,32346,32347],{"class":106},"Module",[100,32349,865],{"class":258},[100,32351,32352],{"class":102,"line":606},[100,32353,32354],{"class":1836},"    # 模型初始化:\n",[100,32356,32357],{"class":102,"line":612},[100,32358,32359],{"class":1836},"    # 定义一些网络层和激活函数\n",[100,32361,32362,32365,32368],{"class":102,"line":618},[100,32363,32364],{"class":471},"    def",[100,32366,32367],{"class":117}," __init__",[100,32369,32370],{"class":258},"(self):\n",[100,32372,32373],{"class":102,"line":623},[100,32374,32375],{"class":1836},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[100,32377,32378,32381,32384,32387,32390,32393],{"class":102,"line":629},[100,32379,32380],{"class":117},"        super",[100,32382,32383],{"class":258},"(LeNet,",[100,32385,32386],{"class":117},"self",[100,32388,32389],{"class":258},").",[100,32391,32392],{"class":117},"__init__",[100,32394,3587],{"class":258},[100,32396,32397],{"class":102,"line":635},[100,32398,570],{"emptyLinePlaceholder":569},[100,32400,32401],{"class":102,"line":641},[100,32402,32403],{"class":1836},"        # 定义网络层\n",[100,32405,32406,32409,32412,32414,32417,32420,32422,32424,32426,32429,32431,32433,32435,32438,32440,32442,32444,32447,32449,32451],{"class":102,"line":647},[100,32407,32408],{"class":117},"        self",[100,32410,32411],{"class":258},".c1",[100,32413,472],{"class":471},[100,32415,32416],{"class":258},"nn.Conv2d(",[100,32418,32419],{"class":6812},"in_channels",[100,32421,472],{"class":471},[100,32423,1985],{"class":117},[100,32425,2145],{"class":258},[100,32427,32428],{"class":6812},"out_channels",[100,32430,472],{"class":471},[100,32432,2111],{"class":117},[100,32434,2145],{"class":258},[100,32436,32437],{"class":6812},"kernel_size",[100,32439,472],{"class":471},[100,32441,2086],{"class":117},[100,32443,2145],{"class":258},[100,32445,32446],{"class":6812},"padding",[100,32448,472],{"class":471},[100,32450,465],{"class":117},[100,32452,809],{"class":258},[100,32454,32455,32457,32460,32462],{"class":102,"line":653},[100,32456,32408],{"class":117},[100,32458,32459],{"class":258},".sig",[100,32461,472],{"class":471},[100,32463,32464],{"class":258},"nn.Sigmoid()\n",[100,32466,32467],{"class":102,"line":659},[100,32468,32469],{"class":1836},"        # 定义池化\n",[100,32471,32472,32474,32477,32479,32482,32484,32486,32488,32490,32493,32495,32497],{"class":102,"line":665},[100,32473,32408],{"class":117},[100,32475,32476],{"class":258},".s2",[100,32478,472],{"class":471},[100,32480,32481],{"class":258},"nn.AvgPool2d(",[100,32483,32437],{"class":6812},[100,32485,472],{"class":471},[100,32487,465],{"class":117},[100,32489,2145],{"class":258},[100,32491,32492],{"class":6812},"stride",[100,32494,472],{"class":471},[100,32496,465],{"class":117},[100,32498,809],{"class":258},[100,32500,32501,32503,32506,32508,32510,32512,32514,32516,32518,32520,32522,32524,32526,32528,32530,32532],{"class":102,"line":670},[100,32502,32408],{"class":117},[100,32504,32505],{"class":258},".c3",[100,32507,472],{"class":471},[100,32509,32416],{"class":258},[100,32511,32419],{"class":6812},[100,32513,472],{"class":471},[100,32515,2111],{"class":117},[100,32517,2145],{"class":258},[100,32519,32428],{"class":6812},[100,32521,472],{"class":471},[100,32523,2368],{"class":117},[100,32525,2145],{"class":258},[100,32527,32437],{"class":6812},[100,32529,472],{"class":471},[100,32531,2086],{"class":117},[100,32533,809],{"class":258},[100,32535,32536,32538,32541,32543,32545,32547,32549,32551,32553,32555,32557,32559],{"class":102,"line":675},[100,32537,32408],{"class":117},[100,32539,32540],{"class":258},".s4",[100,32542,472],{"class":471},[100,32544,32481],{"class":258},[100,32546,32437],{"class":6812},[100,32548,472],{"class":471},[100,32550,465],{"class":117},[100,32552,2145],{"class":258},[100,32554,32492],{"class":6812},[100,32556,472],{"class":471},[100,32558,465],{"class":117},[100,32560,809],{"class":258},[100,32562,32563],{"class":102,"line":699},[100,32564,32565],{"class":1836},"        # 定义平展层\n",[100,32567,32568,32570,32573,32575],{"class":102,"line":708},[100,32569,32408],{"class":117},[100,32571,32572],{"class":258},".flatten",[100,32574,472],{"class":471},[100,32576,32577],{"class":258},"nn.Flatten()\n",[100,32579,32580],{"class":102,"line":722},[100,32581,32582],{"class":1836},"        # 定义全连接层\n",[100,32584,32585,32587,32590,32592,32595,32597,32599,32601],{"class":102,"line":735},[100,32586,32408],{"class":117},[100,32588,32589],{"class":258},".f5",[100,32591,472],{"class":471},[100,32593,32594],{"class":258},"nn.Linear(",[100,32596,5586],{"class":117},[100,32598,2145],{"class":258},[100,32600,2583],{"class":117},[100,32602,809],{"class":258},[100,32604,32605,32607,32610,32612,32614,32616,32618,32620],{"class":102,"line":754},[100,32606,32408],{"class":117},[100,32608,32609],{"class":258},".f6",[100,32611,472],{"class":471},[100,32613,32594],{"class":258},[100,32615,2583],{"class":117},[100,32617,2145],{"class":258},[100,32619,2477],{"class":117},[100,32621,809],{"class":258},[100,32623,32624,32626,32629,32631,32633,32635,32637,32639],{"class":102,"line":771},[100,32625,32408],{"class":117},[100,32627,32628],{"class":258},".f7",[100,32630,472],{"class":471},[100,32632,32594],{"class":258},[100,32634,2477],{"class":117},[100,32636,2145],{"class":258},[100,32638,2213],{"class":117},[100,32640,809],{"class":258},[100,32642,32643],{"class":102,"line":776},[100,32644,570],{"emptyLinePlaceholder":569},[100,32646,32647],{"class":102,"line":781},[100,32648,32649],{"class":1836},"    # 写工具->写前向传播\n",[100,32651,32652,32654,32657],{"class":102,"line":796},[100,32653,32364],{"class":471},[100,32655,32656],{"class":106}," forward",[100,32658,32659],{"class":258},"(self,x):\n",[100,32661,32662,32665,32667,32669,32672,32674],{"class":102,"line":812},[100,32663,32664],{"class":258},"        x",[100,32666,472],{"class":471},[100,32668,32386],{"class":117},[100,32670,32671],{"class":258},".sig(",[100,32673,32386],{"class":117},[100,32675,32676],{"class":258},".c1(x))\n",[100,32678,32679,32681,32683,32685],{"class":102,"line":823},[100,32680,32664],{"class":258},[100,32682,472],{"class":471},[100,32684,32386],{"class":117},[100,32686,32687],{"class":258},".s2(x)\n",[100,32689,32690,32692,32694,32696,32698,32700],{"class":102,"line":828},[100,32691,32664],{"class":258},[100,32693,472],{"class":471},[100,32695,32386],{"class":117},[100,32697,32671],{"class":258},[100,32699,32386],{"class":117},[100,32701,32702],{"class":258},".c3(x))\n",[100,32704,32705,32707,32709,32711],{"class":102,"line":840},[100,32706,32664],{"class":258},[100,32708,472],{"class":471},[100,32710,32386],{"class":117},[100,32712,32713],{"class":258},".s4(x)\n",[100,32715,32716,32718,32720,32722],{"class":102,"line":845},[100,32717,32664],{"class":258},[100,32719,472],{"class":471},[100,32721,32386],{"class":117},[100,32723,32724],{"class":258},".flatten(x)\n",[100,32726,32727,32729,32731,32733,32735,32737],{"class":102,"line":868},[100,32728,32664],{"class":258},[100,32730,472],{"class":471},[100,32732,32386],{"class":117},[100,32734,32671],{"class":258},[100,32736,32386],{"class":117},[100,32738,32739],{"class":258},".f5(x))\n",[100,32741,32742,32744,32746,32748,32750,32752],{"class":102,"line":874},[100,32743,32664],{"class":258},[100,32745,472],{"class":471},[100,32747,32386],{"class":117},[100,32749,32671],{"class":258},[100,32751,32386],{"class":117},[100,32753,32754],{"class":258},".f6(x))\n",[100,32756,32757,32759,32761,32763],{"class":102,"line":879},[100,32758,32664],{"class":258},[100,32760,472],{"class":471},[100,32762,32386],{"class":117},[100,32764,32765],{"class":258},".f7(x)\n",[100,32767,32768,32770],{"class":102,"line":889},[100,32769,16333],{"class":471},[100,32771,32772],{"class":258}," x\n",[100,32774,32775],{"class":102,"line":894},[100,32776,570],{"emptyLinePlaceholder":569},[100,32778,32779,32781,32783,32785,32788],{"class":102,"line":900},[100,32780,958],{"class":471},[100,32782,961],{"class":117},[100,32784,4551],{"class":471},[100,32786,32787],{"class":110},"\"__main__\"",[100,32789,696],{"class":258},[100,32791,32792],{"class":102,"line":910},[100,32793,32794],{"class":1836},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[100,32796,32797,32800,32802,32804,32807,32809,32812,32814,32816],{"class":102,"line":915},[100,32798,32799],{"class":258},"    device",[100,32801,472],{"class":471},[100,32803,32016],{"class":258},[100,32805,32806],{"class":110},"\"cuda\"",[100,32808,3325],{"class":471},[100,32810,32811],{"class":258}," torch.cuda.is_available() ",[100,32813,3322],{"class":471},[100,32815,32041],{"class":110},[100,32817,809],{"class":258},[100,32819,32820],{"class":102,"line":929},[100,32821,32822],{"class":1836},"    # 如果就是想指定用cpu用下方代码:\n",[100,32824,32825],{"class":102,"line":935},[100,32826,32827],{"class":1836},"    # device=\"cpu\"\n",[100,32829,32830],{"class":102,"line":945},[100,32831,32832],{"class":1836},"    # print(device)\n",[100,32834,32835],{"class":102,"line":950},[100,32836,570],{"emptyLinePlaceholder":569},[100,32838,32839],{"class":102,"line":955},[100,32840,32841],{"class":1836},"    # 实例化模型\n",[100,32843,32844],{"class":102,"line":972},[100,32845,32846],{"class":1836},"    # 将模型放到设备中去运行\n",[100,32848,32849,32852,32854],{"class":102,"line":11370},[100,32850,32851],{"class":258},"    model",[100,32853,472],{"class":471},[100,32855,32856],{"class":258},"LeNet().to(device)\n",[100,32858,32859,32861,32864,32866,32868,32870,32872,32874],{"class":102,"line":11375},[100,32860,702],{"class":117},[100,32862,32863],{"class":258},"(summary(model,(",[100,32865,1985],{"class":117},[100,32867,2145],{"class":258},[100,32869,2667],{"class":117},[100,32871,2145],{"class":258},[100,32873,2667],{"class":117},[100,32875,32876],{"class":258},")))\n",[19,32878,32879],{},[3095,32880],{"alt":79,"src":32881},"\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,32883,32884],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[26,32886,32887],{"start":188},[29,32888,32889],{},"训练",[19,32891,32892],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,32894,32895],{},"在训练之前可以将数据展示看一下",[73,32897,32899],{"className":249,"code":32898,"language":251,"meta":79,"style":79},"# 建立画图的函数，用于展示数据\n# torchvision中包含很多内置的数据集\nfrom sklearn.externals.array_api_compat.torch import squeeze\nfrom torchvision.datasets import FashionMNIST\nimport numpy as np\n# 引入处理数据集的包\nfrom torchvision import transforms\n# 从torch库中引入数据处理的包\nimport torch.utils.data as Data\n# 导入画图的库\nimport matplotlib.pyplot as plt\n\n\ntrain_data=FashionMNIST(root='.\u002Fdata',\n                        train=True,\n                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n                        transform=transforms.Compose([transforms.Resize(size=224),transforms.ToTensor()]),\n                        download=True)\n\n# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\ntrain_loader=Data.DataLoader(dataset=train_data,\n                             batch_size=64,\n                             # 数据是否打乱\n                             shuffle=True,\n                             # 规定加载数据的进程\n                             num_workers=0)\n\n# 获得一个batch的数据\nfor step,(b_x,b_y) in enumerate(train_loader):\n    if step > 0:\n        break\n# squeeze()这个函数是去除张量中所有大小为1的维度\nbatch_x=b_x.squeeze().numpy()  #将四维张量移除所有维度为1的维度,并转换成numpy数组\nbatch_y=b_y.numpy()   #将张量转换成功numpy数组\nclass_label=train_data.classes  #训练集标签\n# print(class_label)\n\n# 可视化一个batch的图像\nplt.figure(figsize=(12,5))\nfor ii in np.arange(len(batch_y)):\n    plt.subplot(4,16,ii + 1)\n    plt.imshow(batch_x[ii,:,:],cmap=plt.cm.gray)\n    plt.title(class_label[batch_y[ii]],size=10)\n    plt.axis(\"off\")\n    plt.subplots_adjust(wspace=0.05)\nplt.show()\n",[32,32900,32901,32906,32911,32923,32935,32945,32950,32962,32967,32979,32984,32996,33000,33004,33025,33037,33042,33063,33074,33078,33083,33101,33112,33117,33128,33133,33144,33148,33153,33168,33181,33186,33191,33204,33217,33230,33235,33239,33244,33264,33281,33301,33314,33327,33337,33352],{"__ignoreMap":79},[100,32902,32903],{"class":102,"line":103},[100,32904,32905],{"class":1836},"# 建立画图的函数，用于展示数据\n",[100,32907,32908],{"class":102,"line":188},[100,32909,32910],{"class":1836},"# torchvision中包含很多内置的数据集\n",[100,32912,32913,32915,32918,32920],{"class":102,"line":199},[100,32914,32301],{"class":471},[100,32916,32917],{"class":258}," sklearn.externals.array_api_compat.torch ",[100,32919,548],{"class":471},[100,32921,32922],{"class":258}," squeeze\n",[100,32924,32925,32927,32930,32932],{"class":102,"line":532},[100,32926,32301],{"class":471},[100,32928,32929],{"class":258}," torchvision.datasets ",[100,32931,548],{"class":471},[100,32933,32934],{"class":258}," FashionMNIST\n",[100,32936,32937,32939,32941,32943],{"class":102,"line":577},[100,32938,548],{"class":471},[100,32940,558],{"class":258},[100,32942,561],{"class":471},[100,32944,564],{"class":258},[100,32946,32947],{"class":102,"line":589},[100,32948,32949],{"class":1836},"# 引入处理数据集的包\n",[100,32951,32952,32954,32957,32959],{"class":102,"line":595},[100,32953,32301],{"class":471},[100,32955,32956],{"class":258}," torchvision ",[100,32958,548],{"class":471},[100,32960,32961],{"class":258}," transforms\n",[100,32963,32964],{"class":102,"line":601},[100,32965,32966],{"class":1836},"# 从torch库中引入数据处理的包\n",[100,32968,32969,32971,32974,32976],{"class":102,"line":606},[100,32970,548],{"class":471},[100,32972,32973],{"class":258}," torch.utils.data ",[100,32975,561],{"class":471},[100,32977,32978],{"class":258}," Data\n",[100,32980,32981],{"class":102,"line":612},[100,32982,32983],{"class":1836},"# 导入画图的库\n",[100,32985,32986,32988,32991,32993],{"class":102,"line":618},[100,32987,548],{"class":471},[100,32989,32990],{"class":258}," matplotlib.pyplot ",[100,32992,561],{"class":471},[100,32994,32995],{"class":258}," plt\n",[100,32997,32998],{"class":102,"line":623},[100,32999,570],{"emptyLinePlaceholder":569},[100,33001,33002],{"class":102,"line":629},[100,33003,570],{"emptyLinePlaceholder":569},[100,33005,33006,33009,33011,33014,33017,33019,33022],{"class":102,"line":635},[100,33007,33008],{"class":258},"train_data",[100,33010,472],{"class":471},[100,33012,33013],{"class":258},"FashionMNIST(",[100,33015,33016],{"class":6812},"root",[100,33018,472],{"class":471},[100,33020,33021],{"class":110},"'.\u002Fdata'",[100,33023,33024],{"class":258},",\n",[100,33026,33027,33030,33032,33035],{"class":102,"line":641},[100,33028,33029],{"class":6812},"                        train",[100,33031,472],{"class":471},[100,33033,33034],{"class":117},"True",[100,33036,33024],{"class":258},[100,33038,33039],{"class":102,"line":647},[100,33040,33041],{"class":1836},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[100,33043,33044,33047,33049,33052,33055,33057,33060],{"class":102,"line":653},[100,33045,33046],{"class":6812},"                        transform",[100,33048,472],{"class":471},[100,33050,33051],{"class":258},"transforms.Compose([transforms.Resize(",[100,33053,33054],{"class":6812},"size",[100,33056,472],{"class":471},[100,33058,33059],{"class":117},"224",[100,33061,33062],{"class":258},"),transforms.ToTensor()]),\n",[100,33064,33065,33068,33070,33072],{"class":102,"line":659},[100,33066,33067],{"class":6812},"                        download",[100,33069,472],{"class":471},[100,33071,33034],{"class":117},[100,33073,809],{"class":258},[100,33075,33076],{"class":102,"line":665},[100,33077,570],{"emptyLinePlaceholder":569},[100,33079,33080],{"class":102,"line":670},[100,33081,33082],{"class":1836},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[100,33084,33085,33088,33090,33093,33096,33098],{"class":102,"line":675},[100,33086,33087],{"class":258},"train_loader",[100,33089,472],{"class":471},[100,33091,33092],{"class":258},"Data.DataLoader(",[100,33094,33095],{"class":6812},"dataset",[100,33097,472],{"class":471},[100,33099,33100],{"class":258},"train_data,\n",[100,33102,33103,33106,33108,33110],{"class":102,"line":699},[100,33104,33105],{"class":6812},"                             batch_size",[100,33107,472],{"class":471},[100,33109,1972],{"class":117},[100,33111,33024],{"class":258},[100,33113,33114],{"class":102,"line":708},[100,33115,33116],{"class":1836},"                             # 数据是否打乱\n",[100,33118,33119,33122,33124,33126],{"class":102,"line":722},[100,33120,33121],{"class":6812},"                             shuffle",[100,33123,472],{"class":471},[100,33125,33034],{"class":117},[100,33127,33024],{"class":258},[100,33129,33130],{"class":102,"line":735},[100,33131,33132],{"class":1836},"                             # 规定加载数据的进程\n",[100,33134,33135,33138,33140,33142],{"class":102,"line":754},[100,33136,33137],{"class":6812},"                             num_workers",[100,33139,472],{"class":471},[100,33141,1366],{"class":117},[100,33143,809],{"class":258},[100,33145,33146],{"class":102,"line":771},[100,33147,570],{"emptyLinePlaceholder":569},[100,33149,33150],{"class":102,"line":776},[100,33151,33152],{"class":1836},"# 获得一个batch的数据\n",[100,33154,33155,33157,33160,33162,33165],{"class":102,"line":781},[100,33156,1051],{"class":471},[100,33158,33159],{"class":258}," step,(b_x,b_y) ",[100,33161,854],{"class":471},[100,33163,33164],{"class":117}," enumerate",[100,33166,33167],{"class":258},"(train_loader):\n",[100,33169,33170,33172,33175,33177,33179],{"class":102,"line":796},[100,33171,4702],{"class":471},[100,33173,33174],{"class":258}," step ",[100,33176,2726],{"class":471},[100,33178,5692],{"class":117},[100,33180,696],{"class":258},[100,33182,33183],{"class":102,"line":812},[100,33184,33185],{"class":471},"        break\n",[100,33187,33188],{"class":102,"line":823},[100,33189,33190],{"class":1836},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[100,33192,33193,33196,33198,33201],{"class":102,"line":828},[100,33194,33195],{"class":258},"batch_x",[100,33197,472],{"class":471},[100,33199,33200],{"class":258},"b_x.squeeze().numpy()  ",[100,33202,33203],{"class":1836},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[100,33205,33206,33209,33211,33214],{"class":102,"line":840},[100,33207,33208],{"class":258},"batch_y",[100,33210,472],{"class":471},[100,33212,33213],{"class":258},"b_y.numpy()   ",[100,33215,33216],{"class":1836},"#将张量转换成功numpy数组\n",[100,33218,33219,33222,33224,33227],{"class":102,"line":845},[100,33220,33221],{"class":258},"class_label",[100,33223,472],{"class":471},[100,33225,33226],{"class":258},"train_data.classes  ",[100,33228,33229],{"class":1836},"#训练集标签\n",[100,33231,33232],{"class":102,"line":868},[100,33233,33234],{"class":1836},"# print(class_label)\n",[100,33236,33237],{"class":102,"line":874},[100,33238,570],{"emptyLinePlaceholder":569},[100,33240,33241],{"class":102,"line":879},[100,33242,33243],{"class":1836},"# 可视化一个batch的图像\n",[100,33245,33246,33249,33252,33254,33256,33258,33260,33262],{"class":102,"line":889},[100,33247,33248],{"class":258},"plt.figure(",[100,33250,33251],{"class":6812},"figsize",[100,33253,472],{"class":471},[100,33255,713],{"class":258},[100,33257,2265],{"class":117},[100,33259,2145],{"class":258},[100,33261,2086],{"class":117},[100,33263,751],{"class":258},[100,33265,33266,33268,33271,33273,33276,33278],{"class":102,"line":894},[100,33267,1051],{"class":471},[100,33269,33270],{"class":258}," ii ",[100,33272,854],{"class":471},[100,33274,33275],{"class":258}," np.arange(",[100,33277,8954],{"class":117},[100,33279,33280],{"class":258},"(batch_y)):\n",[100,33282,33283,33286,33288,33290,33292,33295,33297,33299],{"class":102,"line":900},[100,33284,33285],{"class":258},"    plt.subplot(",[100,33287,748],{"class":117},[100,33289,2145],{"class":258},[100,33291,2368],{"class":117},[100,33293,33294],{"class":258},",ii ",[100,33296,2248],{"class":471},[100,33298,26693],{"class":117},[100,33300,809],{"class":258},[100,33302,33303,33306,33309,33311],{"class":102,"line":910},[100,33304,33305],{"class":258},"    plt.imshow(batch_x[ii,:,:],",[100,33307,33308],{"class":6812},"cmap",[100,33310,472],{"class":471},[100,33312,33313],{"class":258},"plt.cm.gray)\n",[100,33315,33316,33319,33321,33323,33325],{"class":102,"line":915},[100,33317,33318],{"class":258},"    plt.title(class_label[batch_y[ii]],",[100,33320,33054],{"class":6812},[100,33322,472],{"class":471},[100,33324,2213],{"class":117},[100,33326,809],{"class":258},[100,33328,33329,33332,33335],{"class":102,"line":929},[100,33330,33331],{"class":258},"    plt.axis(",[100,33333,33334],{"class":110},"\"off\"",[100,33336,809],{"class":258},[100,33338,33339,33342,33345,33347,33350],{"class":102,"line":935},[100,33340,33341],{"class":258},"    plt.subplots_adjust(",[100,33343,33344],{"class":6812},"wspace",[100,33346,472],{"class":471},[100,33348,33349],{"class":117},"0.05",[100,33351,809],{"class":258},[100,33353,33354],{"class":102,"line":945},[100,33355,33356],{"class":258},"plt.show()\n",[19,33358,33359],{},"用matplotlib进行展示的过程可以后续再补",[19,33361,33362],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,33364,33365],{},"训练次数就是按照批次过整个训练集数据的次数",[19,33367,33368],{},"模型训练：",[73,33370,33372],{"className":249,"code":33371,"language":251,"meta":79,"style":79},"import copy\nimport time\n\nimport pandas as pd\nimport torch\nfrom torch.utils.data import Dataset\nfrom torchvision.datasets import FashionMNIST\nfrom torchvision import transforms\nimport torch.utils.data as Data\nimport matplotlib.pyplot as plt\n# 导入模型\nfrom model import LeNet\nfrom torch import nn\n\n\n# 处理训练集与验证集函数--->划分数据集\ndef train_val_data_process():\n    train_data=FashionMNIST('.\u002Fdata',\n                            train=True,\n                            transform=transforms.Compose([transforms.Resize(size=28),transforms.ToTensor()]),\n                            download=True)\n    train_data,val_data=Data.random_split(train_data,[round(0.8*len(train_data)),round(0.2*len(train_data))])\n    train_dataloader = Data.DataLoader(dataset=train_data,\n                                       batch_size=128,\n                                       shuffle=True,\n                                       # 规定8个进程\n                                       num_workers=8)\n    val_dataloader=Data.DataLoader(dataset=val_data,\n                                   batch_size=128,\n                                   shuffle=True,\n                                   num_workers=8)\n    return train_dataloader,val_dataloader\n\n# 验证是否出错\n# train_val_data_process()\n\n# 定义模型训练函数\ndef train_model_process(model,train_dataloader,val_dataloader,num_epochs):\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else 'cpu')\n\n\n    # 定义优化器\n    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n    # lr为学习率\n    optimizer=torch.optim.Adam(model.parameters(),lr=0.001)\n\n    # 定义损失函数使用交叉熵损失函数\n    criterion=nn.CrossEntropyLoss()\n\n    # 将模型放到GPU中进行训练\n    model=model.to(device)\n    # 复制当前模型的参数\n    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n    best_model_wts=copy.deepcopy(model.state_dict())\n\n\n    # 初始化参数\n    # 最高准确度\n    best_acc=0.0\n    # 训练集损失列表\n    train_loss_all=[]\n    # 验证集函数列表\n    val_loss_all=[]\n    # 训练集准确度列表\n    train_acc_all=[]\n    # 验证集准确度列表\n    val_acc_all=[]\n\n    # 保存当前时间--->方便看每轮训练的时间\n    since=time.time()\n\n\n    # 准备工作完成--->开始训练模型\n    for epoch in range(num_epochs):\n        print(\"Epoch {}\u002F{}\".format(epoch,num_epochs-1))\n        print(\"-\"*10)\n\n        # 初始化参数\n        # 训练集损失函数\n        train_loss=0.0\n        # 训练集准确度\n        train_corrects=0\n        # 验证集损失函数\n        val_loss=0.0\n        # 验证集准确度\n        val_corrects=0\n        # 训练集样本数量\n        train_num=0\n        # 验证集样本数量\n        val_num=0\n        # 将数据放到设备,并开始训练\n        for step,(b_x,b_y) in enumerate(train_dataloader):\n            # 将特征放入到训练设备\n            b_x=b_x.to(device)\n            # 将标签放入到训练设备当中\n            b_y=b_y.to(device)\n            # 设置模型为训练模式\n            model.train()\n            # 将数据放到模型当中,开始前向传播\n            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n            output=model(b_x)\n            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算每一个batch的损失函数\n            loss=criterion(output,b_y)\n            # 将梯度初始化为0\n            optimizer.zero_grad()\n            # 梯度置为0后再进行反向传播\n            loss.backward()\n            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n            optimizer.step()\n            # loss.item()指的是batch的平均损失\n            train_loss+=loss.item()*b_x.size(0)\n            # 计算每个批次中正确预测的数量\n            train_corrects+=torch.sum(pre_lab==b_y.data)\n            # 计算目前为止一共处理了多少样本\n            train_num+=b_x.size(0)\n        # 验证数据\n        for step ,(b_x,b_y) in enumerate(val_dataloader):\n            # 将特征放到验证设备当中\n            b_x=b_x.to(device)\n            # 将标签放到放到训练设备当中\n            b_y=b_y.to(device)\n            # 开启验证模式，设置模型为评估模式\n            model.eval()\n            with torch.no_grad():\n                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n                output = model(b_x)\n                # 查找每一行中最大值对应的下标\n                pre_lab = torch.argmax(output, dim=1)\n                # 计算验证集上的当前 batch 损失\n                val_batch_loss = criterion(output, b_y)\n                # 对损失函数进行累加（按样本数加权）\n                val_loss += val_batch_loss.item() * b_x.size(0)\n                val_corrects += torch.sum(pre_lab == b_y.data)\n                # 当前用于验证的样本数量\n            val_num += b_x.size(0)\n        # 计算并保存每一次迭代的loss值和准确率\n        # 计算并保存训练集的loss值\n        train_loss_all.append(train_loss\u002Ftrain_num)\n        # 取双精度\n        # 计算并保存训练集的准确率\n        train_acc_all.append(train_corrects.double().item()\u002Ftrain_num)\n        # 计算并保存验证集的loss值\n        val_loss_all.append(val_loss\u002Fval_num)\n        # 计算并保存验证集的准确率\n        val_acc_all.append(val_corrects.double().item()\u002Fval_num)\n\n        # 打印训练一轮的loss值和准确率\n        print('{}train loss:{:.4f} train acc:{:.4f}'.format(epoch,train_loss_all[-1],train_acc_all[-1]))\n        print('{}val loss:{:.4f} val acc:{:.4f}'.format(epoch,val_loss_all[-1],val_acc_all[-1]))\n\n        # 判断准确度--->保存最优模型\n        if val_acc_all[-1]>best_acc:\n            # 保存当前模型准确度\n            best_acc:float=val_acc_all[-1]\n            # 保存当前的准确度\n            # model.state_dict()是当前模型的所有参数（权重和偏置）\n            best_model_wts=copy.deepcopy(model.state_dict())\n\n        # 计算耗时\n        time_use=time.time()-since\n        print('训练和验证耗费的时间{:.0f}m{:.0f}s'.format(time_use\u002F\u002F60,time_use%60))\n    # 选择最优参数\n    # 加载最高准确率下的模型参数\n    # model.load_state_dict(best_model_wts)\n    torch.save(model.state_dict(best_model_wts), '.\u002Fbest_model.pth')\n    # 或者写成\n    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n    train_process=pd.DataFrame(data={\n        \"epoch\":range(num_epochs),\n        \"train_loss_all\":train_loss_all,\n        \"val_loss_all\":val_loss_all,\n        \"train_acc_all\":train_acc_all,\n        \"val_acc_all\":val_acc_all\n    })\n    # 返回训练保存的过程\n    return train_process\n\n# 将loss值和精度按照图片的形式展示出来\ndef matplot_acc_loss(train_process):\n    # 设置图的大小\n    plt.figure(figsize=(12,4))\n    # 设置图中有几张图\n    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n    # ①loss图\n    plt.subplot(1,2,1)\n    # 补充:\n    # plt.subplot(nrows, ncols, index)\n    # nrows：行数\n    # ncols：列数\n    # index：目前选中第几个子图（从1开始）\n    plt.plot(train_process[\"epoch\"],train_process.train_loss_all,'ro-',label='train loss')\n    plt.plot(train_process[\"epoch\"],train_process.val_loss_all,'bs--',label='val loss')\n    # 添加一个图例\n    plt.legend()\n    # 给轴添加标签\n    plt.xlabel('epoch')\n    plt.ylabel('loss')\n    # ②准确度图\n    plt.subplot(1,2,2)\n    plt.plot(train_process[\"epoch\"],train_process.train_acc_all,'ro-',label='train acc')\n    plt.plot(train_process[\"epoch\"],train_process.val_acc_all,'bs--',label='val acc')\n    # 添加图例\n    plt.legend()\n    plt.xlabel(\"epoch\")\n    plt.ylabel(\"acc\")\n    plt.show()\n\n# 正式开始训练:\nif __name__==\"__main__\":\n    # 将模型实例化\n    LeNet=LeNet()\n    train_dataloader,val_dataloader=train_val_data_process()\n    train_process=train_model_process(LeNet,train_dataloader,val_dataloader,num_epochs=20)\n    matplot_acc_loss(train_process)\n",[32,33373,33374,33381,33388,33392,33404,33410,33421,33431,33441,33451,33461,33466,33478,33488,33492,33496,33501,33511,33524,33535,33552,33563,33602,33618,33630,33641,33646,33657,33673,33684,33695,33706,33713,33717,33722,33727,33731,33736,33746,33767,33771,33775,33780,33785,33790,33810,33814,33819,33829,33833,33838,33847,33852,33857,33862,33872,33876,33880,33885,33890,33900,33905,33915,33920,33929,33934,33943,33948,33957,33961,33966,33976,33980,33984,33989,34003,34031,34046,34050,34055,34060,34069,34074,34083,34088,34097,34102,34111,34116,34125,34130,34139,34144,34157,34162,34172,34177,34187,34193,34199,34205,34211,34222,34228,34248,34254,34265,34271,34277,34283,34289,34295,34301,34307,34327,34333,34349,34355,34369,34375,34390,34396,34405,34411,34420,34426,34432,34441,34447,34458,34464,34483,34489,34500,34506,34526,34542,34548,34562,34568,34574,34585,34591,34597,34607,34613,34624,34630,34640,34645,34651,34700,34747,34752,34758,34777,34783,34803,34809,34815,34825,34830,34836,34852,34897,34903,34909,34915,34926,34932,34938,34944,34961,34975,34984,34993,35002,35011,35017,35023,35031,35036,35042,35053,35059,35079,35085,35091,35097,35114,35120,35126,35132,35138,35144,35171,35195,35201,35207,35213,35224,35235,35241,35258,35281,35304,35310,35315,35324,35334,35340,35345,35351,35364,35370,35381,35392,35411],{"__ignoreMap":79},[100,33375,33376,33378],{"class":102,"line":103},[100,33377,548],{"class":471},[100,33379,33380],{"class":258}," copy\n",[100,33382,33383,33385],{"class":102,"line":188},[100,33384,548],{"class":471},[100,33386,33387],{"class":258}," time\n",[100,33389,33390],{"class":102,"line":199},[100,33391,570],{"emptyLinePlaceholder":569},[100,33393,33394,33396,33399,33401],{"class":102,"line":532},[100,33395,548],{"class":471},[100,33397,33398],{"class":258}," pandas ",[100,33400,561],{"class":471},[100,33402,33403],{"class":258}," pd\n",[100,33405,33406,33408],{"class":102,"line":577},[100,33407,548],{"class":471},[100,33409,31961],{"class":258},[100,33411,33412,33414,33416,33418],{"class":102,"line":589},[100,33413,32301],{"class":471},[100,33415,32973],{"class":258},[100,33417,548],{"class":471},[100,33419,33420],{"class":258}," Dataset\n",[100,33422,33423,33425,33427,33429],{"class":102,"line":595},[100,33424,32301],{"class":471},[100,33426,32929],{"class":258},[100,33428,548],{"class":471},[100,33430,32934],{"class":258},[100,33432,33433,33435,33437,33439],{"class":102,"line":601},[100,33434,32301],{"class":471},[100,33436,32956],{"class":258},[100,33438,548],{"class":471},[100,33440,32961],{"class":258},[100,33442,33443,33445,33447,33449],{"class":102,"line":606},[100,33444,548],{"class":471},[100,33446,32973],{"class":258},[100,33448,561],{"class":471},[100,33450,32978],{"class":258},[100,33452,33453,33455,33457,33459],{"class":102,"line":612},[100,33454,548],{"class":471},[100,33456,32990],{"class":258},[100,33458,561],{"class":471},[100,33460,32995],{"class":258},[100,33462,33463],{"class":102,"line":618},[100,33464,33465],{"class":1836},"# 导入模型\n",[100,33467,33468,33470,33473,33475],{"class":102,"line":623},[100,33469,32301],{"class":471},[100,33471,33472],{"class":258}," model ",[100,33474,548],{"class":471},[100,33476,33477],{"class":258}," LeNet\n",[100,33479,33480,33482,33484,33486],{"class":102,"line":629},[100,33481,32301],{"class":471},[100,33483,32304],{"class":258},[100,33485,548],{"class":471},[100,33487,32309],{"class":258},[100,33489,33490],{"class":102,"line":635},[100,33491,570],{"emptyLinePlaceholder":569},[100,33493,33494],{"class":102,"line":641},[100,33495,570],{"emptyLinePlaceholder":569},[100,33497,33498],{"class":102,"line":647},[100,33499,33500],{"class":1836},"# 处理训练集与验证集函数--->划分数据集\n",[100,33502,33503,33505,33508],{"class":102,"line":653},[100,33504,678],{"class":471},[100,33506,33507],{"class":106}," train_val_data_process",[100,33509,33510],{"class":258},"():\n",[100,33512,33513,33516,33518,33520,33522],{"class":102,"line":659},[100,33514,33515],{"class":258},"    train_data",[100,33517,472],{"class":471},[100,33519,33013],{"class":258},[100,33521,33021],{"class":110},[100,33523,33024],{"class":258},[100,33525,33526,33529,33531,33533],{"class":102,"line":665},[100,33527,33528],{"class":6812},"                            train",[100,33530,472],{"class":471},[100,33532,33034],{"class":117},[100,33534,33024],{"class":258},[100,33536,33537,33540,33542,33544,33546,33548,33550],{"class":102,"line":670},[100,33538,33539],{"class":6812},"                            transform",[100,33541,472],{"class":471},[100,33543,33051],{"class":258},[100,33545,33054],{"class":6812},[100,33547,472],{"class":471},[100,33549,2667],{"class":117},[100,33551,33062],{"class":258},[100,33553,33554,33557,33559,33561],{"class":102,"line":675},[100,33555,33556],{"class":6812},"                            download",[100,33558,472],{"class":471},[100,33560,33034],{"class":117},[100,33562,809],{"class":258},[100,33564,33565,33568,33570,33573,33576,33578,33581,33583,33585,33588,33590,33592,33595,33597,33599],{"class":102,"line":699},[100,33566,33567],{"class":258},"    train_data,val_data",[100,33569,472],{"class":471},[100,33571,33572],{"class":258},"Data.random_split(train_data,[",[100,33574,33575],{"class":117},"round",[100,33577,713],{"class":258},[100,33579,33580],{"class":117},"0.8",[100,33582,2222],{"class":471},[100,33584,8954],{"class":117},[100,33586,33587],{"class":258},"(train_data)),",[100,33589,33575],{"class":117},[100,33591,713],{"class":258},[100,33593,33594],{"class":117},"0.2",[100,33596,2222],{"class":471},[100,33598,8954],{"class":117},[100,33600,33601],{"class":258},"(train_data))])\n",[100,33603,33604,33607,33609,33612,33614,33616],{"class":102,"line":708},[100,33605,33606],{"class":258},"    train_dataloader ",[100,33608,472],{"class":471},[100,33610,33611],{"class":258}," Data.DataLoader(",[100,33613,33095],{"class":6812},[100,33615,472],{"class":471},[100,33617,33100],{"class":258},[100,33619,33620,33623,33625,33628],{"class":102,"line":722},[100,33621,33622],{"class":6812},"                                       batch_size",[100,33624,472],{"class":471},[100,33626,33627],{"class":117},"128",[100,33629,33024],{"class":258},[100,33631,33632,33635,33637,33639],{"class":102,"line":735},[100,33633,33634],{"class":6812},"                                       shuffle",[100,33636,472],{"class":471},[100,33638,33034],{"class":117},[100,33640,33024],{"class":258},[100,33642,33643],{"class":102,"line":754},[100,33644,33645],{"class":1836},"                                       # 规定8个进程\n",[100,33647,33648,33651,33653,33655],{"class":102,"line":771},[100,33649,33650],{"class":6812},"                                       num_workers",[100,33652,472],{"class":471},[100,33654,2162],{"class":117},[100,33656,809],{"class":258},[100,33658,33659,33662,33664,33666,33668,33670],{"class":102,"line":776},[100,33660,33661],{"class":258},"    val_dataloader",[100,33663,472],{"class":471},[100,33665,33092],{"class":258},[100,33667,33095],{"class":6812},[100,33669,472],{"class":471},[100,33671,33672],{"class":258},"val_data,\n",[100,33674,33675,33678,33680,33682],{"class":102,"line":781},[100,33676,33677],{"class":6812},"                                   batch_size",[100,33679,472],{"class":471},[100,33681,33627],{"class":117},[100,33683,33024],{"class":258},[100,33685,33686,33689,33691,33693],{"class":102,"line":796},[100,33687,33688],{"class":6812},"                                   shuffle",[100,33690,472],{"class":471},[100,33692,33034],{"class":117},[100,33694,33024],{"class":258},[100,33696,33697,33700,33702,33704],{"class":102,"line":812},[100,33698,33699],{"class":6812},"                                   num_workers",[100,33701,472],{"class":471},[100,33703,2162],{"class":117},[100,33705,809],{"class":258},[100,33707,33708,33710],{"class":102,"line":823},[100,33709,5689],{"class":471},[100,33711,33712],{"class":258}," train_dataloader,val_dataloader\n",[100,33714,33715],{"class":102,"line":828},[100,33716,570],{"emptyLinePlaceholder":569},[100,33718,33719],{"class":102,"line":840},[100,33720,33721],{"class":1836},"# 验证是否出错\n",[100,33723,33724],{"class":102,"line":845},[100,33725,33726],{"class":1836},"# train_val_data_process()\n",[100,33728,33729],{"class":102,"line":868},[100,33730,570],{"emptyLinePlaceholder":569},[100,33732,33733],{"class":102,"line":874},[100,33734,33735],{"class":1836},"# 定义模型训练函数\n",[100,33737,33738,33740,33743],{"class":102,"line":879},[100,33739,678],{"class":471},[100,33741,33742],{"class":106}," train_model_process",[100,33744,33745],{"class":258},"(model,train_dataloader,val_dataloader,num_epochs):\n",[100,33747,33748,33750,33752,33754,33756,33758,33760,33762,33765],{"class":102,"line":889},[100,33749,32799],{"class":258},[100,33751,472],{"class":471},[100,33753,32016],{"class":258},[100,33755,32806],{"class":110},[100,33757,3325],{"class":471},[100,33759,32811],{"class":258},[100,33761,3322],{"class":471},[100,33763,33764],{"class":110}," 'cpu'",[100,33766,809],{"class":258},[100,33768,33769],{"class":102,"line":894},[100,33770,570],{"emptyLinePlaceholder":569},[100,33772,33773],{"class":102,"line":900},[100,33774,570],{"emptyLinePlaceholder":569},[100,33776,33777],{"class":102,"line":910},[100,33778,33779],{"class":1836},"    # 定义优化器\n",[100,33781,33782],{"class":102,"line":915},[100,33783,33784],{"class":1836},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[100,33786,33787],{"class":102,"line":929},[100,33788,33789],{"class":1836},"    # lr为学习率\n",[100,33791,33792,33795,33797,33800,33803,33805,33808],{"class":102,"line":935},[100,33793,33794],{"class":258},"    optimizer",[100,33796,472],{"class":471},[100,33798,33799],{"class":258},"torch.optim.Adam(model.parameters(),",[100,33801,33802],{"class":6812},"lr",[100,33804,472],{"class":471},[100,33806,33807],{"class":117},"0.001",[100,33809,809],{"class":258},[100,33811,33812],{"class":102,"line":945},[100,33813,570],{"emptyLinePlaceholder":569},[100,33815,33816],{"class":102,"line":950},[100,33817,33818],{"class":1836},"    # 定义损失函数使用交叉熵损失函数\n",[100,33820,33821,33824,33826],{"class":102,"line":955},[100,33822,33823],{"class":258},"    criterion",[100,33825,472],{"class":471},[100,33827,33828],{"class":258},"nn.CrossEntropyLoss()\n",[100,33830,33831],{"class":102,"line":972},[100,33832,570],{"emptyLinePlaceholder":569},[100,33834,33835],{"class":102,"line":11370},[100,33836,33837],{"class":1836},"    # 将模型放到GPU中进行训练\n",[100,33839,33840,33842,33844],{"class":102,"line":11375},[100,33841,32851],{"class":258},[100,33843,472],{"class":471},[100,33845,33846],{"class":258},"model.to(device)\n",[100,33848,33849],{"class":102,"line":11380},[100,33850,33851],{"class":1836},"    # 复制当前模型的参数\n",[100,33853,33854],{"class":102,"line":11385},[100,33855,33856],{"class":1836},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[100,33858,33859],{"class":102,"line":11394},[100,33860,33861],{"class":1836},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[100,33863,33864,33867,33869],{"class":102,"line":11399},[100,33865,33866],{"class":258},"    best_model_wts",[100,33868,472],{"class":471},[100,33870,33871],{"class":258},"copy.deepcopy(model.state_dict())\n",[100,33873,33874],{"class":102,"line":11405},[100,33875,570],{"emptyLinePlaceholder":569},[100,33877,33878],{"class":102,"line":11426},[100,33879,570],{"emptyLinePlaceholder":569},[100,33881,33882],{"class":102,"line":11432},[100,33883,33884],{"class":1836},"    # 初始化参数\n",[100,33886,33887],{"class":102,"line":11446},[100,33888,33889],{"class":1836},"    # 最高准确度\n",[100,33891,33892,33895,33897],{"class":102,"line":11452},[100,33893,33894],{"class":258},"    best_acc",[100,33896,472],{"class":471},[100,33898,33899],{"class":117},"0.0\n",[100,33901,33902],{"class":102,"line":11479},[100,33903,33904],{"class":1836},"    # 训练集损失列表\n",[100,33906,33907,33910,33912],{"class":102,"line":11488},[100,33908,33909],{"class":258},"    train_loss_all",[100,33911,472],{"class":471},[100,33913,33914],{"class":258},"[]\n",[100,33916,33917],{"class":102,"line":11494},[100,33918,33919],{"class":1836},"    # 验证集函数列表\n",[100,33921,33922,33925,33927],{"class":102,"line":11502},[100,33923,33924],{"class":258},"    val_loss_all",[100,33926,472],{"class":471},[100,33928,33914],{"class":258},[100,33930,33931],{"class":102,"line":11507},[100,33932,33933],{"class":1836},"    # 训练集准确度列表\n",[100,33935,33936,33939,33941],{"class":102,"line":18185},[100,33937,33938],{"class":258},"    train_acc_all",[100,33940,472],{"class":471},[100,33942,33914],{"class":258},[100,33944,33945],{"class":102,"line":18191},[100,33946,33947],{"class":1836},"    # 验证集准确度列表\n",[100,33949,33950,33953,33955],{"class":102,"line":18214},[100,33951,33952],{"class":258},"    val_acc_all",[100,33954,472],{"class":471},[100,33956,33914],{"class":258},[100,33958,33959],{"class":102,"line":18220},[100,33960,570],{"emptyLinePlaceholder":569},[100,33962,33963],{"class":102,"line":18243},[100,33964,33965],{"class":1836},"    # 保存当前时间--->方便看每轮训练的时间\n",[100,33967,33968,33971,33973],{"class":102,"line":18257},[100,33969,33970],{"class":258},"    since",[100,33972,472],{"class":471},[100,33974,33975],{"class":258},"time.time()\n",[100,33977,33978],{"class":102,"line":18277},[100,33979,570],{"emptyLinePlaceholder":569},[100,33981,33982],{"class":102,"line":18283},[100,33983,570],{"emptyLinePlaceholder":569},[100,33985,33986],{"class":102,"line":18294},[100,33987,33988],{"class":1836},"    # 准备工作完成--->开始训练模型\n",[100,33990,33991,33993,33996,33998,34000],{"class":102,"line":18317},[100,33992,848],{"class":471},[100,33994,33995],{"class":258}," epoch ",[100,33997,854],{"class":471},[100,33999,857],{"class":117},[100,34001,34002],{"class":258},"(num_epochs):\n",[100,34004,34005,34008,34010,34013,34016,34018,34020,34022,34025,34027,34029],{"class":102,"line":18339},[100,34006,34007],{"class":117},"        print",[100,34009,713],{"class":258},[100,34011,34012],{"class":110},"\"Epoch ",[100,34014,34015],{"class":117},"{}",[100,34017,2351],{"class":110},[100,34019,34015],{"class":117},[100,34021,2019],{"class":110},[100,34023,34024],{"class":258},".format(epoch,num_epochs",[100,34026,2299],{"class":471},[100,34028,1985],{"class":117},[100,34030,751],{"class":258},[100,34032,34033,34035,34037,34040,34042,34044],{"class":102,"line":18344},[100,34034,34007],{"class":117},[100,34036,713],{"class":258},[100,34038,34039],{"class":110},"\"-\"",[100,34041,2222],{"class":471},[100,34043,2213],{"class":117},[100,34045,809],{"class":258},[100,34047,34048],{"class":102,"line":18350},[100,34049,570],{"emptyLinePlaceholder":569},[100,34051,34052],{"class":102,"line":18364},[100,34053,34054],{"class":1836},"        # 初始化参数\n",[100,34056,34057],{"class":102,"line":18377},[100,34058,34059],{"class":1836},"        # 训练集损失函数\n",[100,34061,34062,34065,34067],{"class":102,"line":18382},[100,34063,34064],{"class":258},"        train_loss",[100,34066,472],{"class":471},[100,34068,33899],{"class":117},[100,34070,34071],{"class":102,"line":18396},[100,34072,34073],{"class":1836},"        # 训练集准确度\n",[100,34075,34076,34079,34081],{"class":102,"line":18401},[100,34077,34078],{"class":258},"        train_corrects",[100,34080,472],{"class":471},[100,34082,4686],{"class":117},[100,34084,34085],{"class":102,"line":18407},[100,34086,34087],{"class":1836},"        # 验证集损失函数\n",[100,34089,34090,34093,34095],{"class":102,"line":18412},[100,34091,34092],{"class":258},"        val_loss",[100,34094,472],{"class":471},[100,34096,33899],{"class":117},[100,34098,34099],{"class":102,"line":18426},[100,34100,34101],{"class":1836},"        # 验证集准确度\n",[100,34103,34104,34107,34109],{"class":102,"line":18431},[100,34105,34106],{"class":258},"        val_corrects",[100,34108,472],{"class":471},[100,34110,4686],{"class":117},[100,34112,34113],{"class":102,"line":18436},[100,34114,34115],{"class":1836},"        # 训练集样本数量\n",[100,34117,34118,34121,34123],{"class":102,"line":18450},[100,34119,34120],{"class":258},"        train_num",[100,34122,472],{"class":471},[100,34124,4686],{"class":117},[100,34126,34127],{"class":102,"line":18462},[100,34128,34129],{"class":1836},"        # 验证集样本数量\n",[100,34131,34132,34135,34137],{"class":102,"line":18467},[100,34133,34134],{"class":258},"        val_num",[100,34136,472],{"class":471},[100,34138,4686],{"class":117},[100,34140,34141],{"class":102,"line":18480},[100,34142,34143],{"class":1836},"        # 将数据放到设备,并开始训练\n",[100,34145,34146,34148,34150,34152,34154],{"class":102,"line":18485},[100,34147,5003],{"class":471},[100,34149,33159],{"class":258},[100,34151,854],{"class":471},[100,34153,33164],{"class":117},[100,34155,34156],{"class":258},"(train_dataloader):\n",[100,34158,34159],{"class":102,"line":18490},[100,34160,34161],{"class":1836},"            # 将特征放入到训练设备\n",[100,34163,34164,34167,34169],{"class":102,"line":18495},[100,34165,34166],{"class":258},"            b_x",[100,34168,472],{"class":471},[100,34170,34171],{"class":258},"b_x.to(device)\n",[100,34173,34174],{"class":102,"line":18508},[100,34175,34176],{"class":1836},"            # 将标签放入到训练设备当中\n",[100,34178,34179,34182,34184],{"class":102,"line":18513},[100,34180,34181],{"class":258},"            b_y",[100,34183,472],{"class":471},[100,34185,34186],{"class":258},"b_y.to(device)\n",[100,34188,34190],{"class":102,"line":34189},98,[100,34191,34192],{"class":1836},"            # 设置模型为训练模式\n",[100,34194,34196],{"class":102,"line":34195},99,[100,34197,34198],{"class":258},"            model.train()\n",[100,34200,34202],{"class":102,"line":34201},100,[100,34203,34204],{"class":1836},"            # 将数据放到模型当中,开始前向传播\n",[100,34206,34208],{"class":102,"line":34207},101,[100,34209,34210],{"class":1836},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[100,34212,34214,34217,34219],{"class":102,"line":34213},102,[100,34215,34216],{"class":258},"            output",[100,34218,472],{"class":471},[100,34220,34221],{"class":258},"model(b_x)\n",[100,34223,34225],{"class":102,"line":34224},103,[100,34226,34227],{"class":1836},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[100,34229,34231,34234,34236,34239,34242,34244,34246],{"class":102,"line":34230},104,[100,34232,34233],{"class":258},"            pre_lab",[100,34235,472],{"class":471},[100,34237,34238],{"class":258},"torch.argmax(output,",[100,34240,34241],{"class":6812},"dim",[100,34243,472],{"class":471},[100,34245,1985],{"class":117},[100,34247,809],{"class":258},[100,34249,34251],{"class":102,"line":34250},105,[100,34252,34253],{"class":1836},"            # 计算每一个batch的损失函数\n",[100,34255,34257,34260,34262],{"class":102,"line":34256},106,[100,34258,34259],{"class":258},"            loss",[100,34261,472],{"class":471},[100,34263,34264],{"class":258},"criterion(output,b_y)\n",[100,34266,34268],{"class":102,"line":34267},107,[100,34269,34270],{"class":1836},"            # 将梯度初始化为0\n",[100,34272,34274],{"class":102,"line":34273},108,[100,34275,34276],{"class":258},"            optimizer.zero_grad()\n",[100,34278,34280],{"class":102,"line":34279},109,[100,34281,34282],{"class":1836},"            # 梯度置为0后再进行反向传播\n",[100,34284,34286],{"class":102,"line":34285},110,[100,34287,34288],{"class":258},"            loss.backward()\n",[100,34290,34292],{"class":102,"line":34291},111,[100,34293,34294],{"class":1836},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[100,34296,34298],{"class":102,"line":34297},112,[100,34299,34300],{"class":258},"            optimizer.step()\n",[100,34302,34304],{"class":102,"line":34303},113,[100,34305,34306],{"class":1836},"            # loss.item()指的是batch的平均损失\n",[100,34308,34310,34313,34315,34318,34320,34323,34325],{"class":102,"line":34309},114,[100,34311,34312],{"class":258},"            train_loss",[100,34314,11062],{"class":471},[100,34316,34317],{"class":258},"loss.item()",[100,34319,2222],{"class":471},[100,34321,34322],{"class":258},"b_x.size(",[100,34324,1366],{"class":117},[100,34326,809],{"class":258},[100,34328,34330],{"class":102,"line":34329},115,[100,34331,34332],{"class":1836},"            # 计算每个批次中正确预测的数量\n",[100,34334,34336,34339,34341,34344,34346],{"class":102,"line":34335},116,[100,34337,34338],{"class":258},"            train_corrects",[100,34340,11062],{"class":471},[100,34342,34343],{"class":258},"torch.sum(pre_lab",[100,34345,4551],{"class":471},[100,34347,34348],{"class":258},"b_y.data)\n",[100,34350,34352],{"class":102,"line":34351},117,[100,34353,34354],{"class":1836},"            # 计算目前为止一共处理了多少样本\n",[100,34356,34358,34361,34363,34365,34367],{"class":102,"line":34357},118,[100,34359,34360],{"class":258},"            train_num",[100,34362,11062],{"class":471},[100,34364,34322],{"class":258},[100,34366,1366],{"class":117},[100,34368,809],{"class":258},[100,34370,34372],{"class":102,"line":34371},119,[100,34373,34374],{"class":1836},"        # 验证数据\n",[100,34376,34378,34380,34383,34385,34387],{"class":102,"line":34377},120,[100,34379,5003],{"class":471},[100,34381,34382],{"class":258}," step ,(b_x,b_y) ",[100,34384,854],{"class":471},[100,34386,33164],{"class":117},[100,34388,34389],{"class":258},"(val_dataloader):\n",[100,34391,34393],{"class":102,"line":34392},121,[100,34394,34395],{"class":1836},"            # 将特征放到验证设备当中\n",[100,34397,34399,34401,34403],{"class":102,"line":34398},122,[100,34400,34166],{"class":258},[100,34402,472],{"class":471},[100,34404,34171],{"class":258},[100,34406,34408],{"class":102,"line":34407},123,[100,34409,34410],{"class":1836},"            # 将标签放到放到训练设备当中\n",[100,34412,34414,34416,34418],{"class":102,"line":34413},124,[100,34415,34181],{"class":258},[100,34417,472],{"class":471},[100,34419,34186],{"class":258},[100,34421,34423],{"class":102,"line":34422},125,[100,34424,34425],{"class":1836},"            # 开启验证模式，设置模型为评估模式\n",[100,34427,34429],{"class":102,"line":34428},126,[100,34430,34431],{"class":258},"            model.eval()\n",[100,34433,34435,34438],{"class":102,"line":34434},127,[100,34436,34437],{"class":471},"            with",[100,34439,34440],{"class":258}," torch.no_grad():\n",[100,34442,34444],{"class":102,"line":34443},128,[100,34445,34446],{"class":1836},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[100,34448,34450,34453,34455],{"class":102,"line":34449},129,[100,34451,34452],{"class":258},"                output ",[100,34454,472],{"class":471},[100,34456,34457],{"class":258}," model(b_x)\n",[100,34459,34461],{"class":102,"line":34460},130,[100,34462,34463],{"class":1836},"                # 查找每一行中最大值对应的下标\n",[100,34465,34467,34470,34472,34475,34477,34479,34481],{"class":102,"line":34466},131,[100,34468,34469],{"class":258},"                pre_lab ",[100,34471,472],{"class":471},[100,34473,34474],{"class":258}," torch.argmax(output, ",[100,34476,34241],{"class":6812},[100,34478,472],{"class":471},[100,34480,1985],{"class":117},[100,34482,809],{"class":258},[100,34484,34486],{"class":102,"line":34485},132,[100,34487,34488],{"class":1836},"                # 计算验证集上的当前 batch 损失\n",[100,34490,34492,34495,34497],{"class":102,"line":34491},133,[100,34493,34494],{"class":258},"                val_batch_loss ",[100,34496,472],{"class":471},[100,34498,34499],{"class":258}," criterion(output, b_y)\n",[100,34501,34503],{"class":102,"line":34502},134,[100,34504,34505],{"class":1836},"                # 对损失函数进行累加（按样本数加权）\n",[100,34507,34509,34512,34514,34517,34519,34522,34524],{"class":102,"line":34508},135,[100,34510,34511],{"class":258},"                val_loss ",[100,34513,11062],{"class":471},[100,34515,34516],{"class":258}," val_batch_loss.item() ",[100,34518,2222],{"class":471},[100,34520,34521],{"class":258}," b_x.size(",[100,34523,1366],{"class":117},[100,34525,809],{"class":258},[100,34527,34529,34532,34534,34537,34539],{"class":102,"line":34528},136,[100,34530,34531],{"class":258},"                val_corrects ",[100,34533,11062],{"class":471},[100,34535,34536],{"class":258}," torch.sum(pre_lab ",[100,34538,4551],{"class":471},[100,34540,34541],{"class":258}," b_y.data)\n",[100,34543,34545],{"class":102,"line":34544},137,[100,34546,34547],{"class":1836},"                # 当前用于验证的样本数量\n",[100,34549,34551,34554,34556,34558,34560],{"class":102,"line":34550},138,[100,34552,34553],{"class":258},"            val_num ",[100,34555,11062],{"class":471},[100,34557,34521],{"class":258},[100,34559,1366],{"class":117},[100,34561,809],{"class":258},[100,34563,34565],{"class":102,"line":34564},139,[100,34566,34567],{"class":1836},"        # 计算并保存每一次迭代的loss值和准确率\n",[100,34569,34571],{"class":102,"line":34570},140,[100,34572,34573],{"class":1836},"        # 计算并保存训练集的loss值\n",[100,34575,34577,34580,34582],{"class":102,"line":34576},141,[100,34578,34579],{"class":258},"        train_loss_all.append(train_loss",[100,34581,2351],{"class":471},[100,34583,34584],{"class":258},"train_num)\n",[100,34586,34588],{"class":102,"line":34587},142,[100,34589,34590],{"class":1836},"        # 取双精度\n",[100,34592,34594],{"class":102,"line":34593},143,[100,34595,34596],{"class":1836},"        # 计算并保存训练集的准确率\n",[100,34598,34600,34603,34605],{"class":102,"line":34599},144,[100,34601,34602],{"class":258},"        train_acc_all.append(train_corrects.double().item()",[100,34604,2351],{"class":471},[100,34606,34584],{"class":258},[100,34608,34610],{"class":102,"line":34609},145,[100,34611,34612],{"class":1836},"        # 计算并保存验证集的loss值\n",[100,34614,34616,34619,34621],{"class":102,"line":34615},146,[100,34617,34618],{"class":258},"        val_loss_all.append(val_loss",[100,34620,2351],{"class":471},[100,34622,34623],{"class":258},"val_num)\n",[100,34625,34627],{"class":102,"line":34626},147,[100,34628,34629],{"class":1836},"        # 计算并保存验证集的准确率\n",[100,34631,34633,34636,34638],{"class":102,"line":34632},148,[100,34634,34635],{"class":258},"        val_acc_all.append(val_corrects.double().item()",[100,34637,2351],{"class":471},[100,34639,34623],{"class":258},[100,34641,34643],{"class":102,"line":34642},149,[100,34644,570],{"emptyLinePlaceholder":569},[100,34646,34648],{"class":102,"line":34647},150,[100,34649,34650],{"class":1836},"        # 打印训练一轮的loss值和准确率\n",[100,34652,34654,34656,34658,34660,34662,34665,34667,34670,34672,34675,34677,34679,34681,34683,34686,34688,34690,34693,34695,34697],{"class":102,"line":34653},151,[100,34655,34007],{"class":117},[100,34657,713],{"class":258},[100,34659,5192],{"class":110},[100,34661,34015],{"class":117},[100,34663,34664],{"class":110},"train loss:",[100,34666,2662],{"class":117},[100,34668,34669],{"class":471},":.4f",[100,34671,2712],{"class":117},[100,34673,34674],{"class":110}," train acc:",[100,34676,2662],{"class":117},[100,34678,34669],{"class":471},[100,34680,2712],{"class":117},[100,34682,5192],{"class":110},[100,34684,34685],{"class":258},".format(epoch,train_loss_all[",[100,34687,2299],{"class":471},[100,34689,1985],{"class":117},[100,34691,34692],{"class":258},"],train_acc_all[",[100,34694,2299],{"class":471},[100,34696,1985],{"class":117},[100,34698,34699],{"class":258},"]))\n",[100,34701,34703,34705,34707,34709,34711,34714,34716,34718,34720,34723,34725,34727,34729,34731,34734,34736,34738,34741,34743,34745],{"class":102,"line":34702},152,[100,34704,34007],{"class":117},[100,34706,713],{"class":258},[100,34708,5192],{"class":110},[100,34710,34015],{"class":117},[100,34712,34713],{"class":110},"val loss:",[100,34715,2662],{"class":117},[100,34717,34669],{"class":471},[100,34719,2712],{"class":117},[100,34721,34722],{"class":110}," val acc:",[100,34724,2662],{"class":117},[100,34726,34669],{"class":471},[100,34728,2712],{"class":117},[100,34730,5192],{"class":110},[100,34732,34733],{"class":258},".format(epoch,val_loss_all[",[100,34735,2299],{"class":471},[100,34737,1985],{"class":117},[100,34739,34740],{"class":258},"],val_acc_all[",[100,34742,2299],{"class":471},[100,34744,1985],{"class":117},[100,34746,34699],{"class":258},[100,34748,34750],{"class":102,"line":34749},153,[100,34751,570],{"emptyLinePlaceholder":569},[100,34753,34755],{"class":102,"line":34754},154,[100,34756,34757],{"class":1836},"        # 判断准确度--->保存最优模型\n",[100,34759,34761,34763,34766,34768,34770,34772,34774],{"class":102,"line":34760},155,[100,34762,4106],{"class":471},[100,34764,34765],{"class":258}," val_acc_all[",[100,34767,2299],{"class":471},[100,34769,1985],{"class":117},[100,34771,2706],{"class":258},[100,34773,2726],{"class":471},[100,34775,34776],{"class":258},"best_acc:\n",[100,34778,34780],{"class":102,"line":34779},156,[100,34781,34782],{"class":1836},"            # 保存当前模型准确度\n",[100,34784,34786,34789,34791,34793,34796,34798,34800],{"class":102,"line":34785},157,[100,34787,34788],{"class":258},"            best_acc:",[100,34790,1819],{"class":117},[100,34792,472],{"class":471},[100,34794,34795],{"class":258},"val_acc_all[",[100,34797,2299],{"class":471},[100,34799,1985],{"class":117},[100,34801,34802],{"class":258},"]\n",[100,34804,34806],{"class":102,"line":34805},158,[100,34807,34808],{"class":1836},"            # 保存当前的准确度\n",[100,34810,34812],{"class":102,"line":34811},159,[100,34813,34814],{"class":1836},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[100,34816,34818,34821,34823],{"class":102,"line":34817},160,[100,34819,34820],{"class":258},"            best_model_wts",[100,34822,472],{"class":471},[100,34824,33871],{"class":258},[100,34826,34828],{"class":102,"line":34827},161,[100,34829,570],{"emptyLinePlaceholder":569},[100,34831,34833],{"class":102,"line":34832},162,[100,34834,34835],{"class":1836},"        # 计算耗时\n",[100,34837,34839,34842,34844,34847,34849],{"class":102,"line":34838},163,[100,34840,34841],{"class":258},"        time_use",[100,34843,472],{"class":471},[100,34845,34846],{"class":258},"time.time()",[100,34848,2299],{"class":471},[100,34850,34851],{"class":258},"since\n",[100,34853,34855,34857,34859,34862,34864,34867,34869,34871,34873,34875,34877,34880,34883,34886,34888,34891,34893,34895],{"class":102,"line":34854},164,[100,34856,34007],{"class":117},[100,34858,713],{"class":258},[100,34860,34861],{"class":110},"'训练和验证耗费的时间",[100,34863,2662],{"class":117},[100,34865,34866],{"class":471},":.0f",[100,34868,2712],{"class":117},[100,34870,2311],{"class":110},[100,34872,2662],{"class":117},[100,34874,34866],{"class":471},[100,34876,2712],{"class":117},[100,34878,34879],{"class":110},"s'",[100,34881,34882],{"class":258},".format(time_use",[100,34884,34885],{"class":471},"\u002F\u002F",[100,34887,2673],{"class":117},[100,34889,34890],{"class":258},",time_use",[100,34892,2095],{"class":471},[100,34894,2673],{"class":117},[100,34896,751],{"class":258},[100,34898,34900],{"class":102,"line":34899},165,[100,34901,34902],{"class":1836},"    # 选择最优参数\n",[100,34904,34906],{"class":102,"line":34905},166,[100,34907,34908],{"class":1836},"    # 加载最高准确率下的模型参数\n",[100,34910,34912],{"class":102,"line":34911},167,[100,34913,34914],{"class":1836},"    # model.load_state_dict(best_model_wts)\n",[100,34916,34918,34921,34924],{"class":102,"line":34917},168,[100,34919,34920],{"class":258},"    torch.save(model.state_dict(best_model_wts), ",[100,34922,34923],{"class":110},"'.\u002Fbest_model.pth'",[100,34925,809],{"class":258},[100,34927,34929],{"class":102,"line":34928},169,[100,34930,34931],{"class":1836},"    # 或者写成\n",[100,34933,34935],{"class":102,"line":34934},170,[100,34936,34937],{"class":1836},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[100,34939,34941],{"class":102,"line":34940},171,[100,34942,34943],{"class":1836},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[100,34945,34947,34950,34952,34955,34957,34959],{"class":102,"line":34946},172,[100,34948,34949],{"class":258},"    train_process",[100,34951,472],{"class":471},[100,34953,34954],{"class":258},"pd.DataFrame(",[100,34956,499],{"class":6812},[100,34958,472],{"class":471},[100,34960,3178],{"class":258},[100,34962,34964,34967,34969,34972],{"class":102,"line":34963},173,[100,34965,34966],{"class":110},"        \"epoch\"",[100,34968,2625],{"class":258},[100,34970,34971],{"class":117},"range",[100,34973,34974],{"class":258},"(num_epochs),\n",[100,34976,34978,34981],{"class":102,"line":34977},174,[100,34979,34980],{"class":110},"        \"train_loss_all\"",[100,34982,34983],{"class":258},":train_loss_all,\n",[100,34985,34987,34990],{"class":102,"line":34986},175,[100,34988,34989],{"class":110},"        \"val_loss_all\"",[100,34991,34992],{"class":258},":val_loss_all,\n",[100,34994,34996,34999],{"class":102,"line":34995},176,[100,34997,34998],{"class":110},"        \"train_acc_all\"",[100,35000,35001],{"class":258},":train_acc_all,\n",[100,35003,35005,35008],{"class":102,"line":35004},177,[100,35006,35007],{"class":110},"        \"val_acc_all\"",[100,35009,35010],{"class":258},":val_acc_all\n",[100,35012,35014],{"class":102,"line":35013},178,[100,35015,35016],{"class":258},"    })\n",[100,35018,35020],{"class":102,"line":35019},179,[100,35021,35022],{"class":1836},"    # 返回训练保存的过程\n",[100,35024,35026,35028],{"class":102,"line":35025},180,[100,35027,5689],{"class":471},[100,35029,35030],{"class":258}," train_process\n",[100,35032,35034],{"class":102,"line":35033},181,[100,35035,570],{"emptyLinePlaceholder":569},[100,35037,35039],{"class":102,"line":35038},182,[100,35040,35041],{"class":1836},"# 将loss值和精度按照图片的形式展示出来\n",[100,35043,35045,35047,35050],{"class":102,"line":35044},183,[100,35046,678],{"class":471},[100,35048,35049],{"class":106}," matplot_acc_loss",[100,35051,35052],{"class":258},"(train_process):\n",[100,35054,35056],{"class":102,"line":35055},184,[100,35057,35058],{"class":1836},"    # 设置图的大小\n",[100,35060,35062,35065,35067,35069,35071,35073,35075,35077],{"class":102,"line":35061},185,[100,35063,35064],{"class":258},"    plt.figure(",[100,35066,33251],{"class":6812},[100,35068,472],{"class":471},[100,35070,713],{"class":258},[100,35072,2265],{"class":117},[100,35074,2145],{"class":258},[100,35076,748],{"class":117},[100,35078,751],{"class":258},[100,35080,35082],{"class":102,"line":35081},186,[100,35083,35084],{"class":1836},"    # 设置图中有几张图\n",[100,35086,35088],{"class":102,"line":35087},187,[100,35089,35090],{"class":1836},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[100,35092,35094],{"class":102,"line":35093},188,[100,35095,35096],{"class":1836},"    # ①loss图\n",[100,35098,35100,35102,35104,35106,35108,35110,35112],{"class":102,"line":35099},189,[100,35101,33285],{"class":258},[100,35103,1985],{"class":117},[100,35105,2145],{"class":258},[100,35107,465],{"class":117},[100,35109,2145],{"class":258},[100,35111,1985],{"class":117},[100,35113,809],{"class":258},[100,35115,35117],{"class":102,"line":35116},190,[100,35118,35119],{"class":1836},"    # 补充:\n",[100,35121,35123],{"class":102,"line":35122},191,[100,35124,35125],{"class":1836},"    # plt.subplot(nrows, ncols, index)\n",[100,35127,35129],{"class":102,"line":35128},192,[100,35130,35131],{"class":1836},"    # nrows：行数\n",[100,35133,35135],{"class":102,"line":35134},193,[100,35136,35137],{"class":1836},"    # ncols：列数\n",[100,35139,35141],{"class":102,"line":35140},194,[100,35142,35143],{"class":1836},"    # index：目前选中第几个子图（从1开始）\n",[100,35145,35147,35150,35153,35156,35159,35161,35164,35166,35169],{"class":102,"line":35146},195,[100,35148,35149],{"class":258},"    plt.plot(train_process[",[100,35151,35152],{"class":110},"\"epoch\"",[100,35154,35155],{"class":258},"],train_process.train_loss_all,",[100,35157,35158],{"class":110},"'ro-'",[100,35160,2145],{"class":258},[100,35162,35163],{"class":6812},"label",[100,35165,472],{"class":471},[100,35167,35168],{"class":110},"'train loss'",[100,35170,809],{"class":258},[100,35172,35174,35176,35178,35181,35184,35186,35188,35190,35193],{"class":102,"line":35173},196,[100,35175,35149],{"class":258},[100,35177,35152],{"class":110},[100,35179,35180],{"class":258},"],train_process.val_loss_all,",[100,35182,35183],{"class":110},"'bs--'",[100,35185,2145],{"class":258},[100,35187,35163],{"class":6812},[100,35189,472],{"class":471},[100,35191,35192],{"class":110},"'val loss'",[100,35194,809],{"class":258},[100,35196,35198],{"class":102,"line":35197},197,[100,35199,35200],{"class":1836},"    # 添加一个图例\n",[100,35202,35204],{"class":102,"line":35203},198,[100,35205,35206],{"class":258},"    plt.legend()\n",[100,35208,35210],{"class":102,"line":35209},199,[100,35211,35212],{"class":1836},"    # 给轴添加标签\n",[100,35214,35216,35219,35222],{"class":102,"line":35215},200,[100,35217,35218],{"class":258},"    plt.xlabel(",[100,35220,35221],{"class":110},"'epoch'",[100,35223,809],{"class":258},[100,35225,35227,35230,35233],{"class":102,"line":35226},201,[100,35228,35229],{"class":258},"    plt.ylabel(",[100,35231,35232],{"class":110},"'loss'",[100,35234,809],{"class":258},[100,35236,35238],{"class":102,"line":35237},202,[100,35239,35240],{"class":1836},"    # ②准确度图\n",[100,35242,35244,35246,35248,35250,35252,35254,35256],{"class":102,"line":35243},203,[100,35245,33285],{"class":258},[100,35247,1985],{"class":117},[100,35249,2145],{"class":258},[100,35251,465],{"class":117},[100,35253,2145],{"class":258},[100,35255,465],{"class":117},[100,35257,809],{"class":258},[100,35259,35261,35263,35265,35268,35270,35272,35274,35276,35279],{"class":102,"line":35260},204,[100,35262,35149],{"class":258},[100,35264,35152],{"class":110},[100,35266,35267],{"class":258},"],train_process.train_acc_all,",[100,35269,35158],{"class":110},[100,35271,2145],{"class":258},[100,35273,35163],{"class":6812},[100,35275,472],{"class":471},[100,35277,35278],{"class":110},"'train acc'",[100,35280,809],{"class":258},[100,35282,35284,35286,35288,35291,35293,35295,35297,35299,35302],{"class":102,"line":35283},205,[100,35285,35149],{"class":258},[100,35287,35152],{"class":110},[100,35289,35290],{"class":258},"],train_process.val_acc_all,",[100,35292,35183],{"class":110},[100,35294,2145],{"class":258},[100,35296,35163],{"class":6812},[100,35298,472],{"class":471},[100,35300,35301],{"class":110},"'val acc'",[100,35303,809],{"class":258},[100,35305,35307],{"class":102,"line":35306},206,[100,35308,35309],{"class":1836},"    # 添加图例\n",[100,35311,35313],{"class":102,"line":35312},207,[100,35314,35206],{"class":258},[100,35316,35318,35320,35322],{"class":102,"line":35317},208,[100,35319,35218],{"class":258},[100,35321,35152],{"class":110},[100,35323,809],{"class":258},[100,35325,35327,35329,35332],{"class":102,"line":35326},209,[100,35328,35229],{"class":258},[100,35330,35331],{"class":110},"\"acc\"",[100,35333,809],{"class":258},[100,35335,35337],{"class":102,"line":35336},210,[100,35338,35339],{"class":258},"    plt.show()\n",[100,35341,35343],{"class":102,"line":35342},211,[100,35344,570],{"emptyLinePlaceholder":569},[100,35346,35348],{"class":102,"line":35347},212,[100,35349,35350],{"class":1836},"# 正式开始训练:\n",[100,35352,35354,35356,35358,35360,35362],{"class":102,"line":35353},213,[100,35355,958],{"class":471},[100,35357,961],{"class":117},[100,35359,4551],{"class":471},[100,35361,32787],{"class":110},[100,35363,696],{"class":258},[100,35365,35367],{"class":102,"line":35366},214,[100,35368,35369],{"class":1836},"    # 将模型实例化\n",[100,35371,35373,35376,35378],{"class":102,"line":35372},215,[100,35374,35375],{"class":258},"    LeNet",[100,35377,472],{"class":471},[100,35379,35380],{"class":258},"LeNet()\n",[100,35382,35384,35387,35389],{"class":102,"line":35383},216,[100,35385,35386],{"class":258},"    train_dataloader,val_dataloader",[100,35388,472],{"class":471},[100,35390,35391],{"class":258},"train_val_data_process()\n",[100,35393,35395,35397,35399,35402,35405,35407,35409],{"class":102,"line":35394},217,[100,35396,34949],{"class":258},[100,35398,472],{"class":471},[100,35400,35401],{"class":258},"train_model_process(LeNet,train_dataloader,val_dataloader,",[100,35403,35404],{"class":6812},"num_epochs",[100,35406,472],{"class":471},[100,35408,2466],{"class":117},[100,35410,809],{"class":258},[100,35412,35414],{"class":102,"line":35413},218,[100,35415,35416],{"class":258},"    matplot_acc_loss(train_process)\n",[19,35418,35419],{},"画图的补充点学习：",[19,35421,35422],{},[3095,35423],{"alt":79,"src":35424},"\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,35426,35427],{"start":199},[29,35428,35429],{},"测试",[73,35431,35433],{"className":249,"code":35432,"language":251,"meta":79,"style":79},"import torch\nimport torch.utils.data as Data\nfrom jupyter_client.consoleapp import classes\nfrom torchvision import transforms\n# 导入数据集\nfrom torchvision.datasets import FashionMNIST\nfrom model import LeNet\n\n# 测试数据处理\ndef test_data_process():\n    test_data=FashionMNIST(root='.\u002Fdata',\n                           train=False,\n                           transform=transforms.Compose([transforms.Resize(size=28),transforms.ToTensor()]),\n                           download=True)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=LeNet()\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['T-shirt\u002Ftop','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[32,35434,35435,35441,35451,35463,35473,35478,35488,35498,35502,35507,35516,35533,35545,35562,35573,35589,35594,35605,35616,35627,35634,35638,35643,35653,35658,35675,35683,35687,35692,35701,35710,35714,35719,35724,35729,35736,35741,35753,35763,35773,35778,35782,35787,35796,35801,35817,35822,35827,35832,35846,35851,35865,35869,35874,35889,35894,35906,35910,35915,35927,35932,35940,35945,35950,35960,35965,35974,35979,35984,35988,35993,35998,36014,36022,36027,36032,36091,36097,36102,36113,36121,36129,36133,36138,36142,36147,36155,36160,36176,36181,36191,36201],{"__ignoreMap":79},[100,35436,35437,35439],{"class":102,"line":103},[100,35438,548],{"class":471},[100,35440,31961],{"class":258},[100,35442,35443,35445,35447,35449],{"class":102,"line":188},[100,35444,548],{"class":471},[100,35446,32973],{"class":258},[100,35448,561],{"class":471},[100,35450,32978],{"class":258},[100,35452,35453,35455,35458,35460],{"class":102,"line":199},[100,35454,32301],{"class":471},[100,35456,35457],{"class":258}," jupyter_client.consoleapp ",[100,35459,548],{"class":471},[100,35461,35462],{"class":258}," classes\n",[100,35464,35465,35467,35469,35471],{"class":102,"line":532},[100,35466,32301],{"class":471},[100,35468,32956],{"class":258},[100,35470,548],{"class":471},[100,35472,32961],{"class":258},[100,35474,35475],{"class":102,"line":577},[100,35476,35477],{"class":1836},"# 导入数据集\n",[100,35479,35480,35482,35484,35486],{"class":102,"line":589},[100,35481,32301],{"class":471},[100,35483,32929],{"class":258},[100,35485,548],{"class":471},[100,35487,32934],{"class":258},[100,35489,35490,35492,35494,35496],{"class":102,"line":595},[100,35491,32301],{"class":471},[100,35493,33472],{"class":258},[100,35495,548],{"class":471},[100,35497,33477],{"class":258},[100,35499,35500],{"class":102,"line":601},[100,35501,570],{"emptyLinePlaceholder":569},[100,35503,35504],{"class":102,"line":606},[100,35505,35506],{"class":1836},"# 测试数据处理\n",[100,35508,35509,35511,35514],{"class":102,"line":612},[100,35510,678],{"class":471},[100,35512,35513],{"class":106}," test_data_process",[100,35515,33510],{"class":258},[100,35517,35518,35521,35523,35525,35527,35529,35531],{"class":102,"line":618},[100,35519,35520],{"class":258},"    test_data",[100,35522,472],{"class":471},[100,35524,33013],{"class":258},[100,35526,33016],{"class":6812},[100,35528,472],{"class":471},[100,35530,33021],{"class":110},[100,35532,33024],{"class":258},[100,35534,35535,35538,35540,35543],{"class":102,"line":623},[100,35536,35537],{"class":6812},"                           train",[100,35539,472],{"class":471},[100,35541,35542],{"class":117},"False",[100,35544,33024],{"class":258},[100,35546,35547,35550,35552,35554,35556,35558,35560],{"class":102,"line":629},[100,35548,35549],{"class":6812},"                           transform",[100,35551,472],{"class":471},[100,35553,33051],{"class":258},[100,35555,33054],{"class":6812},[100,35557,472],{"class":471},[100,35559,2667],{"class":117},[100,35561,33062],{"class":258},[100,35563,35564,35567,35569,35571],{"class":102,"line":635},[100,35565,35566],{"class":6812},"                           download",[100,35568,472],{"class":471},[100,35570,33034],{"class":117},[100,35572,809],{"class":258},[100,35574,35575,35578,35580,35582,35584,35586],{"class":102,"line":641},[100,35576,35577],{"class":258},"    test_dataloader",[100,35579,472],{"class":471},[100,35581,33092],{"class":258},[100,35583,33095],{"class":6812},[100,35585,472],{"class":471},[100,35587,35588],{"class":258},"test_data,\n",[100,35590,35591],{"class":102,"line":647},[100,35592,35593],{"class":1836},"                                    # 这里是一张一张进行测试\n",[100,35595,35596,35599,35601,35603],{"class":102,"line":653},[100,35597,35598],{"class":6812},"                                    batch_size",[100,35600,472],{"class":471},[100,35602,1985],{"class":117},[100,35604,33024],{"class":258},[100,35606,35607,35610,35612,35614],{"class":102,"line":659},[100,35608,35609],{"class":6812},"                                    shuffle",[100,35611,472],{"class":471},[100,35613,33034],{"class":117},[100,35615,33024],{"class":258},[100,35617,35618,35621,35623,35625],{"class":102,"line":665},[100,35619,35620],{"class":6812},"                                    num_workers",[100,35622,472],{"class":471},[100,35624,1366],{"class":117},[100,35626,809],{"class":258},[100,35628,35629,35631],{"class":102,"line":670},[100,35630,5689],{"class":471},[100,35632,35633],{"class":258}," test_dataloader\n",[100,35635,35636],{"class":102,"line":675},[100,35637,570],{"emptyLinePlaceholder":569},[100,35639,35640],{"class":102,"line":699},[100,35641,35642],{"class":1836},"# 定义模型测试函数\n",[100,35644,35645,35647,35650],{"class":102,"line":708},[100,35646,678],{"class":471},[100,35648,35649],{"class":106}," test_model_process",[100,35651,35652],{"class":258},"(model,test_dataloader):\n",[100,35654,35655],{"class":102,"line":722},[100,35656,35657],{"class":1836},"    # 将模型放到设备当中，先进行判断\n",[100,35659,35660,35662,35664,35666,35668,35670,35672],{"class":102,"line":735},[100,35661,32799],{"class":258},[100,35663,472],{"class":471},[100,35665,32806],{"class":110},[100,35667,3325],{"class":471},[100,35669,32811],{"class":258},[100,35671,3322],{"class":471},[100,35673,35674],{"class":110}," \"cpu\"\n",[100,35676,35677,35679,35681],{"class":102,"line":754},[100,35678,32851],{"class":258},[100,35680,472],{"class":471},[100,35682,33846],{"class":258},[100,35684,35685],{"class":102,"line":771},[100,35686,570],{"emptyLinePlaceholder":569},[100,35688,35689],{"class":102,"line":776},[100,35690,35691],{"class":1836},"    # 设置初始化参数\n",[100,35693,35694,35697,35699],{"class":102,"line":781},[100,35695,35696],{"class":258},"    test_corrects",[100,35698,472],{"class":471},[100,35700,33899],{"class":117},[100,35702,35703,35706,35708],{"class":102,"line":796},[100,35704,35705],{"class":258},"    test_num",[100,35707,472],{"class":471},[100,35709,4686],{"class":117},[100,35711,35712],{"class":102,"line":812},[100,35713,570],{"emptyLinePlaceholder":569},[100,35715,35716],{"class":102,"line":823},[100,35717,35718],{"class":1836},"    # 进行模型测试\n",[100,35720,35721],{"class":102,"line":828},[100,35722,35723],{"class":1836},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[100,35725,35726],{"class":102,"line":840},[100,35727,35728],{"class":1836},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[100,35730,35731,35734],{"class":102,"line":845},[100,35732,35733],{"class":471},"    with",[100,35735,34440],{"class":258},[100,35737,35738],{"class":102,"line":868},[100,35739,35740],{"class":1836},"        # 从数据中进行\n",[100,35742,35743,35745,35748,35750],{"class":102,"line":874},[100,35744,5003],{"class":471},[100,35746,35747],{"class":258}," test_data_x,test_data_y ",[100,35749,854],{"class":471},[100,35751,35752],{"class":258}," test_dataloader:\n",[100,35754,35755,35758,35760],{"class":102,"line":879},[100,35756,35757],{"class":258},"            test_data_x",[100,35759,472],{"class":471},[100,35761,35762],{"class":258},"test_data_x.to(device)\n",[100,35764,35765,35768,35770],{"class":102,"line":889},[100,35766,35767],{"class":258},"            test_data_y",[100,35769,472],{"class":471},[100,35771,35772],{"class":258},"test_data_y.to(device)\n",[100,35774,35775],{"class":102,"line":894},[100,35776,35777],{"class":1836},"            # 设置为验证模式\n",[100,35779,35780],{"class":102,"line":900},[100,35781,34431],{"class":258},[100,35783,35784],{"class":102,"line":910},[100,35785,35786],{"class":1836},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[100,35788,35789,35791,35793],{"class":102,"line":915},[100,35790,34216],{"class":258},[100,35792,472],{"class":471},[100,35794,35795],{"class":258},"model(test_data_x)\n",[100,35797,35798],{"class":102,"line":929},[100,35799,35800],{"class":1836},"            # 查找每一行中最大值对应的下标\n",[100,35802,35803,35805,35807,35809,35811,35813,35815],{"class":102,"line":935},[100,35804,34233],{"class":258},[100,35806,472],{"class":471},[100,35808,34238],{"class":258},[100,35810,34241],{"class":6812},[100,35812,472],{"class":471},[100,35814,1985],{"class":117},[100,35816,809],{"class":258},[100,35818,35819],{"class":102,"line":945},[100,35820,35821],{"class":1836},"            # 计算正确率\n",[100,35823,35824],{"class":102,"line":950},[100,35825,35826],{"class":1836},"            # .data表示是一个不带梯度信息的tensor\n",[100,35828,35829],{"class":102,"line":955},[100,35830,35831],{"class":1836},"            # 如果预测正确，则准确度test_corrects加1\n",[100,35833,35834,35837,35839,35841,35843],{"class":102,"line":972},[100,35835,35836],{"class":258},"            test_corrects",[100,35838,11062],{"class":471},[100,35840,34343],{"class":258},[100,35842,4551],{"class":471},[100,35844,35845],{"class":258},"test_data_y.data)\n",[100,35847,35848],{"class":102,"line":11370},[100,35849,35850],{"class":1836},"            # 将所有的测试样本进行累计\n",[100,35852,35853,35856,35858,35861,35863],{"class":102,"line":11375},[100,35854,35855],{"class":258},"            test_num",[100,35857,11062],{"class":471},[100,35859,35860],{"class":258},"test_data_x.size(",[100,35862,1366],{"class":117},[100,35864,809],{"class":258},[100,35866,35867],{"class":102,"line":11380},[100,35868,570],{"emptyLinePlaceholder":569},[100,35870,35871],{"class":102,"line":11385},[100,35872,35873],{"class":1836},"        # 计算准确度\n",[100,35875,35876,35879,35881,35884,35886],{"class":102,"line":11394},[100,35877,35878],{"class":258},"        test_acc",[100,35880,472],{"class":471},[100,35882,35883],{"class":258},"test_corrects.double().item()",[100,35885,2351],{"class":471},[100,35887,35888],{"class":258},"test_num\n",[100,35890,35891],{"class":102,"line":11399},[100,35892,35893],{"class":1836},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[100,35895,35896,35898,35900,35903],{"class":102,"line":11405},[100,35897,34007],{"class":117},[100,35899,713],{"class":258},[100,35901,35902],{"class":110},"\"测试的准确率：\"",[100,35904,35905],{"class":258},",test_acc)\n",[100,35907,35908],{"class":102,"line":11426},[100,35909,570],{"emptyLinePlaceholder":569},[100,35911,35912],{"class":102,"line":11432},[100,35913,35914],{"class":1836},"# 实现模型的测试功能\n",[100,35916,35917,35919,35921,35923,35925],{"class":102,"line":11446},[100,35918,958],{"class":471},[100,35920,961],{"class":117},[100,35922,4551],{"class":471},[100,35924,32787],{"class":110},[100,35926,696],{"class":258},[100,35928,35929],{"class":102,"line":11452},[100,35930,35931],{"class":1836},"    # 加载模型\n",[100,35933,35934,35936,35938],{"class":102,"line":11479},[100,35935,32851],{"class":258},[100,35937,472],{"class":471},[100,35939,35380],{"class":258},[100,35941,35942],{"class":102,"line":11488},[100,35943,35944],{"class":1836},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[100,35946,35947],{"class":102,"line":11494},[100,35948,35949],{"class":1836},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[100,35951,35952,35955,35958],{"class":102,"line":11502},[100,35953,35954],{"class":258},"    model.load_state_dict(torch.load(",[100,35956,35957],{"class":110},"'best_model.pth'",[100,35959,751],{"class":258},[100,35961,35962],{"class":102,"line":11507},[100,35963,35964],{"class":1836},"    # 数据加载\n",[100,35966,35967,35969,35971],{"class":102,"line":18185},[100,35968,35577],{"class":258},[100,35970,472],{"class":471},[100,35972,35973],{"class":258},"test_data_process()\n",[100,35975,35976],{"class":102,"line":18191},[100,35977,35978],{"class":1836},"    # 加载模型测试的函数\n",[100,35980,35981],{"class":102,"line":18214},[100,35982,35983],{"class":258},"    test_model_process(model,test_dataloader)\n",[100,35985,35986],{"class":102,"line":18220},[100,35987,570],{"emptyLinePlaceholder":569},[100,35989,35990],{"class":102,"line":18243},[100,35991,35992],{"class":1836},"    # 验证集推理实现：\n",[100,35994,35995],{"class":102,"line":18257},[100,35996,35997],{"class":1836},"    # 加载数据加载的更详细一些\n",[100,35999,36000,36002,36004,36006,36008,36010,36012],{"class":102,"line":18277},[100,36001,32799],{"class":258},[100,36003,472],{"class":471},[100,36005,32806],{"class":110},[100,36007,3325],{"class":471},[100,36009,32811],{"class":258},[100,36011,3322],{"class":471},[100,36013,35674],{"class":110},[100,36015,36016,36018,36020],{"class":102,"line":18283},[100,36017,32851],{"class":258},[100,36019,472],{"class":471},[100,36021,33846],{"class":258},[100,36023,36024],{"class":102,"line":18294},[100,36025,36026],{"class":1836},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[100,36028,36029],{"class":102,"line":18317},[100,36030,36031],{"class":1836},"    # 顺序不可改变\n",[100,36033,36034,36037,36039,36041,36044,36046,36049,36051,36054,36056,36059,36061,36064,36066,36069,36071,36074,36076,36079,36081,36084,36086,36089],{"class":102,"line":18339},[100,36035,36036],{"class":258},"    classes",[100,36038,472],{"class":471},[100,36040,2656],{"class":258},[100,36042,36043],{"class":110},"'T-shirt\u002Ftop'",[100,36045,2145],{"class":258},[100,36047,36048],{"class":110},"'Trouser'",[100,36050,2145],{"class":258},[100,36052,36053],{"class":110},"'Pullover'",[100,36055,2145],{"class":258},[100,36057,36058],{"class":110},"'Dress'",[100,36060,2145],{"class":258},[100,36062,36063],{"class":110},"'Coat'",[100,36065,2145],{"class":258},[100,36067,36068],{"class":110},"'Sandal'",[100,36070,2145],{"class":258},[100,36072,36073],{"class":110},"'Shirt'",[100,36075,2145],{"class":258},[100,36077,36078],{"class":110},"'Sneaker'",[100,36080,2145],{"class":258},[100,36082,36083],{"class":110},"'Bag'",[100,36085,2145],{"class":258},[100,36087,36088],{"class":110},"'Ankle boot'",[100,36090,34802],{"class":258},[100,36092,36093,36095],{"class":102,"line":18344},[100,36094,35733],{"class":471},[100,36096,34440],{"class":258},[100,36098,36099],{"class":102,"line":18350},[100,36100,36101],{"class":1836},"        # 将数据和标签都放到设备当中\n",[100,36103,36104,36106,36109,36111],{"class":102,"line":18364},[100,36105,5003],{"class":471},[100,36107,36108],{"class":258}," b_x,b_y ",[100,36110,854],{"class":471},[100,36112,35752],{"class":258},[100,36114,36115,36117,36119],{"class":102,"line":18377},[100,36116,34166],{"class":258},[100,36118,472],{"class":471},[100,36120,34171],{"class":258},[100,36122,36123,36125,36127],{"class":102,"line":18382},[100,36124,34181],{"class":258},[100,36126,472],{"class":471},[100,36128,34186],{"class":258},[100,36130,36131],{"class":102,"line":18396},[100,36132,570],{"emptyLinePlaceholder":569},[100,36134,36135],{"class":102,"line":18401},[100,36136,36137],{"class":1836},"            # 设置模型为验证模式\n",[100,36139,36140],{"class":102,"line":18407},[100,36141,34431],{"class":258},[100,36143,36144],{"class":102,"line":18412},[100,36145,36146],{"class":1836},"            # 模型推理结果\n",[100,36148,36149,36151,36153],{"class":102,"line":18426},[100,36150,34216],{"class":258},[100,36152,472],{"class":471},[100,36154,34221],{"class":258},[100,36156,36157],{"class":102,"line":18431},[100,36158,36159],{"class":1836},"            # 获取最大下标，最大下标就是类别号\n",[100,36161,36162,36164,36166,36168,36170,36172,36174],{"class":102,"line":18436},[100,36163,34233],{"class":258},[100,36165,472],{"class":471},[100,36167,34238],{"class":258},[100,36169,34241],{"class":6812},[100,36171,472],{"class":471},[100,36173,1985],{"class":117},[100,36175,809],{"class":258},[100,36177,36178],{"class":102,"line":18450},[100,36179,36180],{"class":1836},"            # 取出张量中的数值\n",[100,36182,36183,36186,36188],{"class":102,"line":18462},[100,36184,36185],{"class":258},"            result",[100,36187,472],{"class":471},[100,36189,36190],{"class":258},"pre_lab.item()\n",[100,36192,36193,36196,36198],{"class":102,"line":18467},[100,36194,36195],{"class":258},"            label",[100,36197,472],{"class":471},[100,36199,36200],{"class":258},"b_y.item()\n",[100,36202,36203,36206,36208,36211,36214,36217,36219,36222],{"class":102,"line":18480},[100,36204,36205],{"class":117},"            print",[100,36207,713],{"class":258},[100,36209,36210],{"class":110},"\"预测值：\"",[100,36212,36213],{"class":258},",classes[result],",[100,36215,36216],{"class":110},"\"------\"",[100,36218,2145],{"class":258},[100,36220,36221],{"class":110},"\"真实值：\"",[100,36223,36224],{"class":258},",classes[label])\n",[19,36226,36227],{},"（2）AlexNet",[26,36229,36230],{},[29,36231,36232],{},"神经网络构建",[73,36234,36236],{"className":249,"code":36235,"language":251,"meta":79,"style":79},"import torch\nfrom torch import nn\nfrom torchsummary import summary\nimport torch.nn.functional as F\n\nclass AlexNet(nn.Module):\n    def __init__(self):\n        super(AlexNet,self).__init__()\n        self.ReLu=nn.ReLU()\n        self.c1=nn.Conv2d(in_channels=1,out_channels=96,kernel_size=11,stride=4)\n        self.s2=nn.MaxPool2d(kernel_size=3,stride=2)\n        self.c3=nn.Conv2d(in_channels=96,out_channels=256,kernel_size=5,padding=2)\n        self.s4=nn.MaxPool2d(kernel_size=3,stride=2)\n        self.c5=nn.Conv2d(in_channels=256,out_channels=384,kernel_size=3,padding=1)\n        self.c6=nn.Conv2d(in_channels=384,out_channels=384,kernel_size=3,padding=1)\n        self.c7=nn.Conv2d(in_channels=384,out_channels=256,kernel_size=3,padding=1)\n        self.s8=nn.MaxPool2d(kernel_size=3,stride=2)\n        # 定义平展层\n        self.flatten=nn.Flatten()\n       # 定义全连接层\n        self.f1=nn.Linear(6*6*256,4096)\n        self.f2=nn.Linear(4096,4096)\n        self.f3=nn.Linear(4096,10)\n\n    # 定义前向传播\n    def forward(self,x):\n        x=self.ReLu(self.c1(x))\n        x=self.s2(x)\n        x=self.ReLu(self.c3(x))\n        x=self.s4(x)\n        x=self.ReLu(self.c5(x))\n        x=self.ReLu(self.c6(x))\n        x=self.ReLu(self.c7(x))\n        x=self.s8(x)\n\n        # 展平加线性全连接层\n        x=self.flatten(x)\n        x=self.ReLu(self.f1(x))\n        # 还需要dropout对神经元随机进行失活\n        x=F.dropout(x,0.5)\n        x=self.ReLu(self.f2(x))\n        x=F.dropout(x,0.5)\n        # 直接输出\n        x=self.f3(x)\n        # 前向传播输出\n        return x\n# 定义主函数，用于测试神经网络是否可以正常工作\nif __name__==\"__main__\":\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    # 模型实例化，然后将实例化的模型放到设备中\n    model=AlexNet().to(device)\n    print(summary(model,(1,227,227)))\n",[32,36237,36238,36244,36254,36264,36276,36280,36297,36305,36320,36332,36374,36401,36444,36470,36514,36557,36600,36627,36631,36641,36646,36674,36693,36712,36716,36721,36729,36744,36754,36768,36778,36793,36808,36823,36834,36838,36843,36853,36868,36873,36886,36901,36913,36918,36929,36934,36940,36945,36957,36977,36982,36991],{"__ignoreMap":79},[100,36239,36240,36242],{"class":102,"line":103},[100,36241,548],{"class":471},[100,36243,31961],{"class":258},[100,36245,36246,36248,36250,36252],{"class":102,"line":188},[100,36247,32301],{"class":471},[100,36249,32304],{"class":258},[100,36251,548],{"class":471},[100,36253,32309],{"class":258},[100,36255,36256,36258,36260,36262],{"class":102,"line":199},[100,36257,32301],{"class":471},[100,36259,32321],{"class":258},[100,36261,548],{"class":471},[100,36263,32326],{"class":258},[100,36265,36266,36268,36271,36273],{"class":102,"line":532},[100,36267,548],{"class":471},[100,36269,36270],{"class":258}," torch.nn.functional ",[100,36272,561],{"class":471},[100,36274,36275],{"class":258}," F\n",[100,36277,36278],{"class":102,"line":577},[100,36279,570],{"emptyLinePlaceholder":569},[100,36281,36282,36284,36287,36289,36291,36293,36295],{"class":102,"line":589},[100,36283,16275],{"class":471},[100,36285,36286],{"class":106}," AlexNet",[100,36288,713],{"class":258},[100,36290,32342],{"class":106},[100,36292,2325],{"class":258},[100,36294,32347],{"class":106},[100,36296,865],{"class":258},[100,36298,36299,36301,36303],{"class":102,"line":595},[100,36300,32364],{"class":471},[100,36302,32367],{"class":117},[100,36304,32370],{"class":258},[100,36306,36307,36309,36312,36314,36316,36318],{"class":102,"line":601},[100,36308,32380],{"class":117},[100,36310,36311],{"class":258},"(AlexNet,",[100,36313,32386],{"class":117},[100,36315,32389],{"class":258},[100,36317,32392],{"class":117},[100,36319,3587],{"class":258},[100,36321,36322,36324,36327,36329],{"class":102,"line":606},[100,36323,32408],{"class":117},[100,36325,36326],{"class":258},".ReLu",[100,36328,472],{"class":471},[100,36330,36331],{"class":258},"nn.ReLU()\n",[100,36333,36334,36336,36338,36340,36342,36344,36346,36348,36350,36352,36354,36356,36358,36360,36362,36364,36366,36368,36370,36372],{"class":102,"line":612},[100,36335,32408],{"class":117},[100,36337,32411],{"class":258},[100,36339,472],{"class":471},[100,36341,32416],{"class":258},[100,36343,32419],{"class":6812},[100,36345,472],{"class":471},[100,36347,1985],{"class":117},[100,36349,2145],{"class":258},[100,36351,32428],{"class":6812},[100,36353,472],{"class":471},[100,36355,1978],{"class":117},[100,36357,2145],{"class":258},[100,36359,32437],{"class":6812},[100,36361,472],{"class":471},[100,36363,2239],{"class":117},[100,36365,2145],{"class":258},[100,36367,32492],{"class":6812},[100,36369,472],{"class":471},[100,36371,748],{"class":117},[100,36373,809],{"class":258},[100,36375,36376,36378,36380,36382,36385,36387,36389,36391,36393,36395,36397,36399],{"class":102,"line":618},[100,36377,32408],{"class":117},[100,36379,32476],{"class":258},[100,36381,472],{"class":471},[100,36383,36384],{"class":258},"nn.MaxPool2d(",[100,36386,32437],{"class":6812},[100,36388,472],{"class":471},[100,36390,1849],{"class":117},[100,36392,2145],{"class":258},[100,36394,32492],{"class":6812},[100,36396,472],{"class":471},[100,36398,465],{"class":117},[100,36400,809],{"class":258},[100,36402,36403,36405,36407,36409,36411,36413,36415,36417,36419,36421,36423,36426,36428,36430,36432,36434,36436,36438,36440,36442],{"class":102,"line":623},[100,36404,32408],{"class":117},[100,36406,32505],{"class":258},[100,36408,472],{"class":471},[100,36410,32416],{"class":258},[100,36412,32419],{"class":6812},[100,36414,472],{"class":471},[100,36416,1978],{"class":117},[100,36418,2145],{"class":258},[100,36420,32428],{"class":6812},[100,36422,472],{"class":471},[100,36424,36425],{"class":117},"256",[100,36427,2145],{"class":258},[100,36429,32437],{"class":6812},[100,36431,472],{"class":471},[100,36433,2086],{"class":117},[100,36435,2145],{"class":258},[100,36437,32446],{"class":6812},[100,36439,472],{"class":471},[100,36441,465],{"class":117},[100,36443,809],{"class":258},[100,36445,36446,36448,36450,36452,36454,36456,36458,36460,36462,36464,36466,36468],{"class":102,"line":629},[100,36447,32408],{"class":117},[100,36449,32540],{"class":258},[100,36451,472],{"class":471},[100,36453,36384],{"class":258},[100,36455,32437],{"class":6812},[100,36457,472],{"class":471},[100,36459,1849],{"class":117},[100,36461,2145],{"class":258},[100,36463,32492],{"class":6812},[100,36465,472],{"class":471},[100,36467,465],{"class":117},[100,36469,809],{"class":258},[100,36471,36472,36474,36477,36479,36481,36483,36485,36487,36489,36491,36493,36496,36498,36500,36502,36504,36506,36508,36510,36512],{"class":102,"line":635},[100,36473,32408],{"class":117},[100,36475,36476],{"class":258},".c5",[100,36478,472],{"class":471},[100,36480,32416],{"class":258},[100,36482,32419],{"class":6812},[100,36484,472],{"class":471},[100,36486,36425],{"class":117},[100,36488,2145],{"class":258},[100,36490,32428],{"class":6812},[100,36492,472],{"class":471},[100,36494,36495],{"class":117},"384",[100,36497,2145],{"class":258},[100,36499,32437],{"class":6812},[100,36501,472],{"class":471},[100,36503,1849],{"class":117},[100,36505,2145],{"class":258},[100,36507,32446],{"class":6812},[100,36509,472],{"class":471},[100,36511,1985],{"class":117},[100,36513,809],{"class":258},[100,36515,36516,36518,36521,36523,36525,36527,36529,36531,36533,36535,36537,36539,36541,36543,36545,36547,36549,36551,36553,36555],{"class":102,"line":641},[100,36517,32408],{"class":117},[100,36519,36520],{"class":258},".c6",[100,36522,472],{"class":471},[100,36524,32416],{"class":258},[100,36526,32419],{"class":6812},[100,36528,472],{"class":471},[100,36530,36495],{"class":117},[100,36532,2145],{"class":258},[100,36534,32428],{"class":6812},[100,36536,472],{"class":471},[100,36538,36495],{"class":117},[100,36540,2145],{"class":258},[100,36542,32437],{"class":6812},[100,36544,472],{"class":471},[100,36546,1849],{"class":117},[100,36548,2145],{"class":258},[100,36550,32446],{"class":6812},[100,36552,472],{"class":471},[100,36554,1985],{"class":117},[100,36556,809],{"class":258},[100,36558,36559,36561,36564,36566,36568,36570,36572,36574,36576,36578,36580,36582,36584,36586,36588,36590,36592,36594,36596,36598],{"class":102,"line":647},[100,36560,32408],{"class":117},[100,36562,36563],{"class":258},".c7",[100,36565,472],{"class":471},[100,36567,32416],{"class":258},[100,36569,32419],{"class":6812},[100,36571,472],{"class":471},[100,36573,36495],{"class":117},[100,36575,2145],{"class":258},[100,36577,32428],{"class":6812},[100,36579,472],{"class":471},[100,36581,36425],{"class":117},[100,36583,2145],{"class":258},[100,36585,32437],{"class":6812},[100,36587,472],{"class":471},[100,36589,1849],{"class":117},[100,36591,2145],{"class":258},[100,36593,32446],{"class":6812},[100,36595,472],{"class":471},[100,36597,1985],{"class":117},[100,36599,809],{"class":258},[100,36601,36602,36604,36607,36609,36611,36613,36615,36617,36619,36621,36623,36625],{"class":102,"line":653},[100,36603,32408],{"class":117},[100,36605,36606],{"class":258},".s8",[100,36608,472],{"class":471},[100,36610,36384],{"class":258},[100,36612,32437],{"class":6812},[100,36614,472],{"class":471},[100,36616,1849],{"class":117},[100,36618,2145],{"class":258},[100,36620,32492],{"class":6812},[100,36622,472],{"class":471},[100,36624,465],{"class":117},[100,36626,809],{"class":258},[100,36628,36629],{"class":102,"line":659},[100,36630,32565],{"class":1836},[100,36632,36633,36635,36637,36639],{"class":102,"line":665},[100,36634,32408],{"class":117},[100,36636,32572],{"class":258},[100,36638,472],{"class":471},[100,36640,32577],{"class":258},[100,36642,36643],{"class":102,"line":670},[100,36644,36645],{"class":1836},"       # 定义全连接层\n",[100,36647,36648,36650,36653,36655,36657,36659,36661,36663,36665,36667,36669,36672],{"class":102,"line":675},[100,36649,32408],{"class":117},[100,36651,36652],{"class":258},".f1",[100,36654,472],{"class":471},[100,36656,32594],{"class":258},[100,36658,2111],{"class":117},[100,36660,2222],{"class":471},[100,36662,2111],{"class":117},[100,36664,2222],{"class":471},[100,36666,36425],{"class":117},[100,36668,2145],{"class":258},[100,36670,36671],{"class":117},"4096",[100,36673,809],{"class":258},[100,36675,36676,36678,36681,36683,36685,36687,36689,36691],{"class":102,"line":699},[100,36677,32408],{"class":117},[100,36679,36680],{"class":258},".f2",[100,36682,472],{"class":471},[100,36684,32594],{"class":258},[100,36686,36671],{"class":117},[100,36688,2145],{"class":258},[100,36690,36671],{"class":117},[100,36692,809],{"class":258},[100,36694,36695,36697,36700,36702,36704,36706,36708,36710],{"class":102,"line":708},[100,36696,32408],{"class":117},[100,36698,36699],{"class":258},".f3",[100,36701,472],{"class":471},[100,36703,32594],{"class":258},[100,36705,36671],{"class":117},[100,36707,2145],{"class":258},[100,36709,2213],{"class":117},[100,36711,809],{"class":258},[100,36713,36714],{"class":102,"line":722},[100,36715,570],{"emptyLinePlaceholder":569},[100,36717,36718],{"class":102,"line":735},[100,36719,36720],{"class":1836},"    # 定义前向传播\n",[100,36722,36723,36725,36727],{"class":102,"line":754},[100,36724,32364],{"class":471},[100,36726,32656],{"class":106},[100,36728,32659],{"class":258},[100,36730,36731,36733,36735,36737,36740,36742],{"class":102,"line":771},[100,36732,32664],{"class":258},[100,36734,472],{"class":471},[100,36736,32386],{"class":117},[100,36738,36739],{"class":258},".ReLu(",[100,36741,32386],{"class":117},[100,36743,32676],{"class":258},[100,36745,36746,36748,36750,36752],{"class":102,"line":776},[100,36747,32664],{"class":258},[100,36749,472],{"class":471},[100,36751,32386],{"class":117},[100,36753,32687],{"class":258},[100,36755,36756,36758,36760,36762,36764,36766],{"class":102,"line":781},[100,36757,32664],{"class":258},[100,36759,472],{"class":471},[100,36761,32386],{"class":117},[100,36763,36739],{"class":258},[100,36765,32386],{"class":117},[100,36767,32702],{"class":258},[100,36769,36770,36772,36774,36776],{"class":102,"line":796},[100,36771,32664],{"class":258},[100,36773,472],{"class":471},[100,36775,32386],{"class":117},[100,36777,32713],{"class":258},[100,36779,36780,36782,36784,36786,36788,36790],{"class":102,"line":812},[100,36781,32664],{"class":258},[100,36783,472],{"class":471},[100,36785,32386],{"class":117},[100,36787,36739],{"class":258},[100,36789,32386],{"class":117},[100,36791,36792],{"class":258},".c5(x))\n",[100,36794,36795,36797,36799,36801,36803,36805],{"class":102,"line":823},[100,36796,32664],{"class":258},[100,36798,472],{"class":471},[100,36800,32386],{"class":117},[100,36802,36739],{"class":258},[100,36804,32386],{"class":117},[100,36806,36807],{"class":258},".c6(x))\n",[100,36809,36810,36812,36814,36816,36818,36820],{"class":102,"line":828},[100,36811,32664],{"class":258},[100,36813,472],{"class":471},[100,36815,32386],{"class":117},[100,36817,36739],{"class":258},[100,36819,32386],{"class":117},[100,36821,36822],{"class":258},".c7(x))\n",[100,36824,36825,36827,36829,36831],{"class":102,"line":840},[100,36826,32664],{"class":258},[100,36828,472],{"class":471},[100,36830,32386],{"class":117},[100,36832,36833],{"class":258},".s8(x)\n",[100,36835,36836],{"class":102,"line":845},[100,36837,570],{"emptyLinePlaceholder":569},[100,36839,36840],{"class":102,"line":868},[100,36841,36842],{"class":1836},"        # 展平加线性全连接层\n",[100,36844,36845,36847,36849,36851],{"class":102,"line":874},[100,36846,32664],{"class":258},[100,36848,472],{"class":471},[100,36850,32386],{"class":117},[100,36852,32724],{"class":258},[100,36854,36855,36857,36859,36861,36863,36865],{"class":102,"line":879},[100,36856,32664],{"class":258},[100,36858,472],{"class":471},[100,36860,32386],{"class":117},[100,36862,36739],{"class":258},[100,36864,32386],{"class":117},[100,36866,36867],{"class":258},".f1(x))\n",[100,36869,36870],{"class":102,"line":889},[100,36871,36872],{"class":1836},"        # 还需要dropout对神经元随机进行失活\n",[100,36874,36875,36877,36879,36882,36884],{"class":102,"line":894},[100,36876,32664],{"class":258},[100,36878,472],{"class":471},[100,36880,36881],{"class":258},"F.dropout(x,",[100,36883,1078],{"class":117},[100,36885,809],{"class":258},[100,36887,36888,36890,36892,36894,36896,36898],{"class":102,"line":900},[100,36889,32664],{"class":258},[100,36891,472],{"class":471},[100,36893,32386],{"class":117},[100,36895,36739],{"class":258},[100,36897,32386],{"class":117},[100,36899,36900],{"class":258},".f2(x))\n",[100,36902,36903,36905,36907,36909,36911],{"class":102,"line":910},[100,36904,32664],{"class":258},[100,36906,472],{"class":471},[100,36908,36881],{"class":258},[100,36910,1078],{"class":117},[100,36912,809],{"class":258},[100,36914,36915],{"class":102,"line":915},[100,36916,36917],{"class":1836},"        # 直接输出\n",[100,36919,36920,36922,36924,36926],{"class":102,"line":929},[100,36921,32664],{"class":258},[100,36923,472],{"class":471},[100,36925,32386],{"class":117},[100,36927,36928],{"class":258},".f3(x)\n",[100,36930,36931],{"class":102,"line":935},[100,36932,36933],{"class":1836},"        # 前向传播输出\n",[100,36935,36936,36938],{"class":102,"line":945},[100,36937,16333],{"class":471},[100,36939,32772],{"class":258},[100,36941,36942],{"class":102,"line":950},[100,36943,36944],{"class":1836},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[100,36946,36947,36949,36951,36953,36955],{"class":102,"line":955},[100,36948,958],{"class":471},[100,36950,961],{"class":117},[100,36952,4551],{"class":471},[100,36954,32787],{"class":110},[100,36956,696],{"class":258},[100,36958,36959,36961,36963,36965,36967,36969,36971,36973,36975],{"class":102,"line":972},[100,36960,32799],{"class":258},[100,36962,472],{"class":471},[100,36964,32016],{"class":258},[100,36966,32806],{"class":110},[100,36968,3325],{"class":471},[100,36970,32811],{"class":258},[100,36972,3322],{"class":471},[100,36974,32041],{"class":110},[100,36976,809],{"class":258},[100,36978,36979],{"class":102,"line":11370},[100,36980,36981],{"class":1836},"    # 模型实例化，然后将实例化的模型放到设备中\n",[100,36983,36984,36986,36988],{"class":102,"line":11375},[100,36985,32851],{"class":258},[100,36987,472],{"class":471},[100,36989,36990],{"class":258},"AlexNet().to(device)\n",[100,36992,36993,36995,36997,36999,37001,37004,37006,37008],{"class":102,"line":11380},[100,36994,702],{"class":117},[100,36996,32863],{"class":258},[100,36998,1985],{"class":117},[100,37000,2145],{"class":258},[100,37002,37003],{"class":117},"227",[100,37005,2145],{"class":258},[100,37007,37003],{"class":117},[100,37009,32876],{"class":258},[26,37011,37012],{"start":188},[29,37013,32889],{},[73,37015,37017],{"className":249,"code":37016,"language":251,"meta":79,"style":79},"import copy\nimport time\nimport pandas as pd\nimport torch\nfrom torch.utils.data import Dataset\nfrom torchvision.datasets import FashionMNIST\nfrom torchvision import transforms\nimport torch.utils.data as Data\nimport matplotlib.pyplot as plt\n# 导入模型\nfrom model import AlexNet\nfrom torch import nn\n\n\n# 处理训练集与验证集函数--->划分数据集\ndef train_val_data_process():\n    train_data=FashionMNIST('.\u002Fdata',\n                            train=True,\n                            transform=transforms.Compose([transforms.Resize(size=227),transforms.ToTensor()]),\n                            download=True)\n    train_data,val_data=Data.random_split(train_data,[round(0.8*len(train_data)),round(0.2*len(train_data))])\n    train_dataloader = Data.DataLoader(dataset=train_data,\n                                       batch_size=128,\n                                       shuffle=True,\n                                       # 规定8个进程\n                                       num_workers=8)\n    val_dataloader=Data.DataLoader(dataset=val_data,\n                                   batch_size=128,\n                                   shuffle=True,\n                                   num_workers=8)\n    return train_dataloader,val_dataloader\n\n# 验证是否出错\n# train_val_data_process()\n\n# 定义模型训练函数\ndef train_model_process(model,train_dataloader,val_dataloader,num_epochs):\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else 'cpu')\n\n\n    # 定义优化器\n    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n    # lr为学习率\n    optimizer=torch.optim.Adam(model.parameters(),lr=0.001)\n\n    # 定义损失函数使用交叉熵损失函数\n    criterion=nn.CrossEntropyLoss()\n\n    # 将模型放到GPU中进行训练\n    model=model.to(device)\n    # 复制当前模型的参数\n    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n    best_model_wts=copy.deepcopy(model.state_dict())\n\n\n    # 初始化参数\n    # 最高准确度\n    best_acc=0.0\n    # 训练集损失列表\n    train_loss_all=[]\n    # 验证集函数列表\n    val_loss_all=[]\n    # 训练集准确度列表\n    train_acc_all=[]\n    # 验证集准确度列表\n    val_acc_all=[]\n\n    # 保存当前时间--->方便看每轮训练的时间\n    since=time.time()\n\n\n    # 准备工作完成--->开始训练模型\n    for epoch in range(num_epochs):\n        print(\"Epoch {}\u002F{}\".format(epoch,num_epochs-1))\n        print(\"-\"*10)\n\n        # 初始化参数\n        # 训练集损失函数\n        train_loss=0.0\n        # 训练集准确度\n        train_corrects=0\n        # 验证集损失函数\n        val_loss=0.0\n        # 验证集准确度\n        val_corrects=0\n        # 训练集样本数量\n        train_num=0\n        # 验证集样本数量\n        val_num=0\n        # 将数据放到设备,并开始训练\n        for step,(b_x,b_y) in enumerate(train_dataloader):\n            # 将特征放入到训练设备\n            b_x=b_x.to(device)\n            # 将标签放入到训练设备当中\n            b_y=b_y.to(device)\n            # 设置模型为训练模式\n            model.train()\n            # 将数据放到模型当中,开始前向传播\n            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n            output=model(b_x)\n            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算每一个batch的损失函数\n            loss=criterion(output,b_y)\n            # 将梯度初始化为0\n            optimizer.zero_grad()\n            # 梯度置为0后再进行反向传播\n            loss.backward()\n            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n            optimizer.step()\n            # loss.item()指的是batch的平均损失\n            train_loss+=loss.item()*b_x.size(0)\n            # 计算每个批次中正确预测的数量\n            train_corrects+=torch.sum(pre_lab==b_y.data)\n            # 计算目前为止一共处理了多少样本\n            train_num+=b_x.size(0)\n        # 验证数据\n        for step ,(b_x,b_y) in enumerate(val_dataloader):\n            # 将特征放到验证设备当中\n            b_x=b_x.to(device)\n            # 将标签放到放到训练设备当中\n            b_y=b_y.to(device)\n            # 开启验证模式，设置模型为评估模式\n            model.eval()\n            # 验证时不计算梯度以节省内存\u002F计算\n            with torch.no_grad():\n                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n                output=model(b_x)\n                # 查找每一行中最大值对应的下标\n                pre_lab=torch.argmax(output,dim=1)\n                # 计算验证集上的当前 batch 损失\n                val_batch_loss=criterion(output,b_y)\n                # 对损失函数进行累加（按样本数加权）\n                val_loss+=val_batch_loss.item()*b_x.size(0)\n                val_corrects+=torch.sum(pre_lab==b_y.data)\n            # 当前用于验证的样本数量\n            val_num+=b_x.size(0)\n        # 计算并保存每一次迭代的loss值和准确率\n        # 计算并保存训练集的loss值\n        train_loss_all.append(train_loss\u002Ftrain_num)\n        # 取双精度\n        # 计算并保存训练集的准确率\n        train_acc_all.append(train_corrects.double().item()\u002Ftrain_num)\n        # 计算并保存验证集的loss值\n        val_loss_all.append(val_loss\u002Fval_num)\n        # 计算并保存验证集的准确率\n        val_acc_all.append(val_corrects.double().item()\u002Fval_num)\n\n        # 打印训练一轮的loss值和准确率\n        print('{}train loss:{:.4f} train acc:{:.4f}'.format(epoch,train_loss_all[-1],train_acc_all[-1]))\n        print('{}val loss:{:.4f} val acc:{:.4f}'.format(epoch,val_loss_all[-1],val_acc_all[-1]))\n\n        # 判断准确度--->保存最优模型\n        if val_acc_all[-1]>best_acc:\n            # 保存当前模型准确度\n            best_acc:float=val_acc_all[-1]\n            # 保存当前的准确度\n            # model.state_dict()是当前模型的所有参数（权重和偏置）\n            best_model_wts=copy.deepcopy(model.state_dict())\n\n        # 计算耗时\n        time_use=time.time()-since\n        print('训练和验证耗费的时间{:.0f}m{:.0f}s'.format(time_use\u002F\u002F60,time_use%60))\n    # 选择最优参数并保存\n    # 保存最佳模型权重字典\n    torch.save(best_model_wts,'.\u002Fbest_model.pth')\n    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n    train_process=pd.DataFrame(data={\n        \"epoch\":range(num_epochs),\n        \"train_loss_all\":train_loss_all,\n        \"val_loss_all\":val_loss_all,\n        \"train_acc_all\":train_acc_all,\n        \"val_acc_all\":val_acc_all\n    })\n    # 返回训练保存的过程\n    return train_process\n\n# 将loss值和精度按照图片的形式展示出来\ndef matplot_acc_loss(train_process):\n    # 设置图的大小\n    plt.figure(figsize=(12,4))\n    # 设置图中有几张图\n    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n    # ①loss图\n    plt.subplot(1,2,1)\n    # 补充:\n    # plt.subplot(nrows, ncols, index)\n    # nrows：行数\n    # ncols：列数\n    # index：目前选中第几个子图（从1开始）\n    plt.plot(train_process[\"epoch\"],train_process.train_loss_all,'ro-',label='train loss')\n    plt.plot(train_process[\"epoch\"],train_process.val_loss_all,'bs--',label='val loss')\n    # 添加一个图例\n    plt.legend()\n    # 给轴添加标签\n    plt.xlabel('epoch')\n    plt.ylabel('loss')\n    # ②准确度图\n    plt.subplot(1,2,2)\n    plt.plot(train_process[\"epoch\"],train_process.train_acc_all,'ro-',label='train acc')\n    plt.plot(train_process[\"epoch\"],train_process.val_acc_all,'bs--',label='val acc')\n    # 添加图例\n    plt.legend()\n    plt.xlabel(\"epoch\")\n    plt.ylabel(\"acc\")\n    plt.show()\n\n# 正式开始训练:\nif __name__==\"__main__\":\n    # 将模型实例化\n    AlexNet=AlexNet()\n    train_dataloader,val_dataloader=train_val_data_process()\n    train_process=train_model_process(AlexNet,train_dataloader,val_dataloader,num_epochs=20)\n    matplot_acc_loss(train_process)\n",[32,37018,37019,37025,37031,37041,37047,37057,37067,37077,37087,37097,37101,37112,37122,37126,37130,37134,37142,37154,37164,37180,37190,37222,37236,37246,37256,37260,37270,37284,37294,37304,37314,37320,37324,37328,37332,37336,37340,37348,37368,37372,37376,37380,37384,37388,37404,37408,37412,37420,37424,37428,37436,37440,37444,37448,37456,37460,37464,37468,37472,37480,37484,37492,37496,37504,37508,37516,37520,37528,37532,37536,37544,37548,37552,37556,37568,37592,37606,37610,37614,37618,37626,37630,37638,37642,37650,37654,37662,37666,37674,37678,37686,37690,37702,37706,37714,37718,37726,37730,37734,37738,37742,37750,37754,37770,37774,37782,37786,37790,37794,37798,37802,37806,37810,37826,37830,37842,37846,37858,37862,37874,37878,37886,37890,37898,37902,37906,37911,37917,37921,37930,37934,37951,37955,37964,37968,37986,37999,38004,38017,38021,38025,38033,38037,38041,38049,38053,38061,38065,38073,38077,38081,38123,38165,38169,38173,38189,38193,38209,38213,38217,38225,38229,38233,38245,38283,38288,38293,38302,38306,38320,38330,38336,38342,38348,38354,38358,38362,38368,38372,38376,38384,38388,38406,38410,38414,38418,38434,38438,38442,38446,38450,38454,38474,38494,38498,38502,38506,38514,38522,38526,38542,38562,38582,38586,38590,38598,38606,38610,38614,38618,38630,38634,38644,38652,38669],{"__ignoreMap":79},[100,37020,37021,37023],{"class":102,"line":103},[100,37022,548],{"class":471},[100,37024,33380],{"class":258},[100,37026,37027,37029],{"class":102,"line":188},[100,37028,548],{"class":471},[100,37030,33387],{"class":258},[100,37032,37033,37035,37037,37039],{"class":102,"line":199},[100,37034,548],{"class":471},[100,37036,33398],{"class":258},[100,37038,561],{"class":471},[100,37040,33403],{"class":258},[100,37042,37043,37045],{"class":102,"line":532},[100,37044,548],{"class":471},[100,37046,31961],{"class":258},[100,37048,37049,37051,37053,37055],{"class":102,"line":577},[100,37050,32301],{"class":471},[100,37052,32973],{"class":258},[100,37054,548],{"class":471},[100,37056,33420],{"class":258},[100,37058,37059,37061,37063,37065],{"class":102,"line":589},[100,37060,32301],{"class":471},[100,37062,32929],{"class":258},[100,37064,548],{"class":471},[100,37066,32934],{"class":258},[100,37068,37069,37071,37073,37075],{"class":102,"line":595},[100,37070,32301],{"class":471},[100,37072,32956],{"class":258},[100,37074,548],{"class":471},[100,37076,32961],{"class":258},[100,37078,37079,37081,37083,37085],{"class":102,"line":601},[100,37080,548],{"class":471},[100,37082,32973],{"class":258},[100,37084,561],{"class":471},[100,37086,32978],{"class":258},[100,37088,37089,37091,37093,37095],{"class":102,"line":606},[100,37090,548],{"class":471},[100,37092,32990],{"class":258},[100,37094,561],{"class":471},[100,37096,32995],{"class":258},[100,37098,37099],{"class":102,"line":612},[100,37100,33465],{"class":1836},[100,37102,37103,37105,37107,37109],{"class":102,"line":618},[100,37104,32301],{"class":471},[100,37106,33472],{"class":258},[100,37108,548],{"class":471},[100,37110,37111],{"class":258}," AlexNet\n",[100,37113,37114,37116,37118,37120],{"class":102,"line":623},[100,37115,32301],{"class":471},[100,37117,32304],{"class":258},[100,37119,548],{"class":471},[100,37121,32309],{"class":258},[100,37123,37124],{"class":102,"line":629},[100,37125,570],{"emptyLinePlaceholder":569},[100,37127,37128],{"class":102,"line":635},[100,37129,570],{"emptyLinePlaceholder":569},[100,37131,37132],{"class":102,"line":641},[100,37133,33500],{"class":1836},[100,37135,37136,37138,37140],{"class":102,"line":647},[100,37137,678],{"class":471},[100,37139,33507],{"class":106},[100,37141,33510],{"class":258},[100,37143,37144,37146,37148,37150,37152],{"class":102,"line":653},[100,37145,33515],{"class":258},[100,37147,472],{"class":471},[100,37149,33013],{"class":258},[100,37151,33021],{"class":110},[100,37153,33024],{"class":258},[100,37155,37156,37158,37160,37162],{"class":102,"line":659},[100,37157,33528],{"class":6812},[100,37159,472],{"class":471},[100,37161,33034],{"class":117},[100,37163,33024],{"class":258},[100,37165,37166,37168,37170,37172,37174,37176,37178],{"class":102,"line":665},[100,37167,33539],{"class":6812},[100,37169,472],{"class":471},[100,37171,33051],{"class":258},[100,37173,33054],{"class":6812},[100,37175,472],{"class":471},[100,37177,37003],{"class":117},[100,37179,33062],{"class":258},[100,37181,37182,37184,37186,37188],{"class":102,"line":670},[100,37183,33556],{"class":6812},[100,37185,472],{"class":471},[100,37187,33034],{"class":117},[100,37189,809],{"class":258},[100,37191,37192,37194,37196,37198,37200,37202,37204,37206,37208,37210,37212,37214,37216,37218,37220],{"class":102,"line":675},[100,37193,33567],{"class":258},[100,37195,472],{"class":471},[100,37197,33572],{"class":258},[100,37199,33575],{"class":117},[100,37201,713],{"class":258},[100,37203,33580],{"class":117},[100,37205,2222],{"class":471},[100,37207,8954],{"class":117},[100,37209,33587],{"class":258},[100,37211,33575],{"class":117},[100,37213,713],{"class":258},[100,37215,33594],{"class":117},[100,37217,2222],{"class":471},[100,37219,8954],{"class":117},[100,37221,33601],{"class":258},[100,37223,37224,37226,37228,37230,37232,37234],{"class":102,"line":699},[100,37225,33606],{"class":258},[100,37227,472],{"class":471},[100,37229,33611],{"class":258},[100,37231,33095],{"class":6812},[100,37233,472],{"class":471},[100,37235,33100],{"class":258},[100,37237,37238,37240,37242,37244],{"class":102,"line":708},[100,37239,33622],{"class":6812},[100,37241,472],{"class":471},[100,37243,33627],{"class":117},[100,37245,33024],{"class":258},[100,37247,37248,37250,37252,37254],{"class":102,"line":722},[100,37249,33634],{"class":6812},[100,37251,472],{"class":471},[100,37253,33034],{"class":117},[100,37255,33024],{"class":258},[100,37257,37258],{"class":102,"line":735},[100,37259,33645],{"class":1836},[100,37261,37262,37264,37266,37268],{"class":102,"line":754},[100,37263,33650],{"class":6812},[100,37265,472],{"class":471},[100,37267,2162],{"class":117},[100,37269,809],{"class":258},[100,37271,37272,37274,37276,37278,37280,37282],{"class":102,"line":771},[100,37273,33661],{"class":258},[100,37275,472],{"class":471},[100,37277,33092],{"class":258},[100,37279,33095],{"class":6812},[100,37281,472],{"class":471},[100,37283,33672],{"class":258},[100,37285,37286,37288,37290,37292],{"class":102,"line":776},[100,37287,33677],{"class":6812},[100,37289,472],{"class":471},[100,37291,33627],{"class":117},[100,37293,33024],{"class":258},[100,37295,37296,37298,37300,37302],{"class":102,"line":781},[100,37297,33688],{"class":6812},[100,37299,472],{"class":471},[100,37301,33034],{"class":117},[100,37303,33024],{"class":258},[100,37305,37306,37308,37310,37312],{"class":102,"line":796},[100,37307,33699],{"class":6812},[100,37309,472],{"class":471},[100,37311,2162],{"class":117},[100,37313,809],{"class":258},[100,37315,37316,37318],{"class":102,"line":812},[100,37317,5689],{"class":471},[100,37319,33712],{"class":258},[100,37321,37322],{"class":102,"line":823},[100,37323,570],{"emptyLinePlaceholder":569},[100,37325,37326],{"class":102,"line":828},[100,37327,33721],{"class":1836},[100,37329,37330],{"class":102,"line":840},[100,37331,33726],{"class":1836},[100,37333,37334],{"class":102,"line":845},[100,37335,570],{"emptyLinePlaceholder":569},[100,37337,37338],{"class":102,"line":868},[100,37339,33735],{"class":1836},[100,37341,37342,37344,37346],{"class":102,"line":874},[100,37343,678],{"class":471},[100,37345,33742],{"class":106},[100,37347,33745],{"class":258},[100,37349,37350,37352,37354,37356,37358,37360,37362,37364,37366],{"class":102,"line":879},[100,37351,32799],{"class":258},[100,37353,472],{"class":471},[100,37355,32016],{"class":258},[100,37357,32806],{"class":110},[100,37359,3325],{"class":471},[100,37361,32811],{"class":258},[100,37363,3322],{"class":471},[100,37365,33764],{"class":110},[100,37367,809],{"class":258},[100,37369,37370],{"class":102,"line":889},[100,37371,570],{"emptyLinePlaceholder":569},[100,37373,37374],{"class":102,"line":894},[100,37375,570],{"emptyLinePlaceholder":569},[100,37377,37378],{"class":102,"line":900},[100,37379,33779],{"class":1836},[100,37381,37382],{"class":102,"line":910},[100,37383,33784],{"class":1836},[100,37385,37386],{"class":102,"line":915},[100,37387,33789],{"class":1836},[100,37389,37390,37392,37394,37396,37398,37400,37402],{"class":102,"line":929},[100,37391,33794],{"class":258},[100,37393,472],{"class":471},[100,37395,33799],{"class":258},[100,37397,33802],{"class":6812},[100,37399,472],{"class":471},[100,37401,33807],{"class":117},[100,37403,809],{"class":258},[100,37405,37406],{"class":102,"line":935},[100,37407,570],{"emptyLinePlaceholder":569},[100,37409,37410],{"class":102,"line":945},[100,37411,33818],{"class":1836},[100,37413,37414,37416,37418],{"class":102,"line":950},[100,37415,33823],{"class":258},[100,37417,472],{"class":471},[100,37419,33828],{"class":258},[100,37421,37422],{"class":102,"line":955},[100,37423,570],{"emptyLinePlaceholder":569},[100,37425,37426],{"class":102,"line":972},[100,37427,33837],{"class":1836},[100,37429,37430,37432,37434],{"class":102,"line":11370},[100,37431,32851],{"class":258},[100,37433,472],{"class":471},[100,37435,33846],{"class":258},[100,37437,37438],{"class":102,"line":11375},[100,37439,33851],{"class":1836},[100,37441,37442],{"class":102,"line":11380},[100,37443,33856],{"class":1836},[100,37445,37446],{"class":102,"line":11385},[100,37447,33861],{"class":1836},[100,37449,37450,37452,37454],{"class":102,"line":11394},[100,37451,33866],{"class":258},[100,37453,472],{"class":471},[100,37455,33871],{"class":258},[100,37457,37458],{"class":102,"line":11399},[100,37459,570],{"emptyLinePlaceholder":569},[100,37461,37462],{"class":102,"line":11405},[100,37463,570],{"emptyLinePlaceholder":569},[100,37465,37466],{"class":102,"line":11426},[100,37467,33884],{"class":1836},[100,37469,37470],{"class":102,"line":11432},[100,37471,33889],{"class":1836},[100,37473,37474,37476,37478],{"class":102,"line":11446},[100,37475,33894],{"class":258},[100,37477,472],{"class":471},[100,37479,33899],{"class":117},[100,37481,37482],{"class":102,"line":11452},[100,37483,33904],{"class":1836},[100,37485,37486,37488,37490],{"class":102,"line":11479},[100,37487,33909],{"class":258},[100,37489,472],{"class":471},[100,37491,33914],{"class":258},[100,37493,37494],{"class":102,"line":11488},[100,37495,33919],{"class":1836},[100,37497,37498,37500,37502],{"class":102,"line":11494},[100,37499,33924],{"class":258},[100,37501,472],{"class":471},[100,37503,33914],{"class":258},[100,37505,37506],{"class":102,"line":11502},[100,37507,33933],{"class":1836},[100,37509,37510,37512,37514],{"class":102,"line":11507},[100,37511,33938],{"class":258},[100,37513,472],{"class":471},[100,37515,33914],{"class":258},[100,37517,37518],{"class":102,"line":18185},[100,37519,33947],{"class":1836},[100,37521,37522,37524,37526],{"class":102,"line":18191},[100,37523,33952],{"class":258},[100,37525,472],{"class":471},[100,37527,33914],{"class":258},[100,37529,37530],{"class":102,"line":18214},[100,37531,570],{"emptyLinePlaceholder":569},[100,37533,37534],{"class":102,"line":18220},[100,37535,33965],{"class":1836},[100,37537,37538,37540,37542],{"class":102,"line":18243},[100,37539,33970],{"class":258},[100,37541,472],{"class":471},[100,37543,33975],{"class":258},[100,37545,37546],{"class":102,"line":18257},[100,37547,570],{"emptyLinePlaceholder":569},[100,37549,37550],{"class":102,"line":18277},[100,37551,570],{"emptyLinePlaceholder":569},[100,37553,37554],{"class":102,"line":18283},[100,37555,33988],{"class":1836},[100,37557,37558,37560,37562,37564,37566],{"class":102,"line":18294},[100,37559,848],{"class":471},[100,37561,33995],{"class":258},[100,37563,854],{"class":471},[100,37565,857],{"class":117},[100,37567,34002],{"class":258},[100,37569,37570,37572,37574,37576,37578,37580,37582,37584,37586,37588,37590],{"class":102,"line":18317},[100,37571,34007],{"class":117},[100,37573,713],{"class":258},[100,37575,34012],{"class":110},[100,37577,34015],{"class":117},[100,37579,2351],{"class":110},[100,37581,34015],{"class":117},[100,37583,2019],{"class":110},[100,37585,34024],{"class":258},[100,37587,2299],{"class":471},[100,37589,1985],{"class":117},[100,37591,751],{"class":258},[100,37593,37594,37596,37598,37600,37602,37604],{"class":102,"line":18339},[100,37595,34007],{"class":117},[100,37597,713],{"class":258},[100,37599,34039],{"class":110},[100,37601,2222],{"class":471},[100,37603,2213],{"class":117},[100,37605,809],{"class":258},[100,37607,37608],{"class":102,"line":18344},[100,37609,570],{"emptyLinePlaceholder":569},[100,37611,37612],{"class":102,"line":18350},[100,37613,34054],{"class":1836},[100,37615,37616],{"class":102,"line":18364},[100,37617,34059],{"class":1836},[100,37619,37620,37622,37624],{"class":102,"line":18377},[100,37621,34064],{"class":258},[100,37623,472],{"class":471},[100,37625,33899],{"class":117},[100,37627,37628],{"class":102,"line":18382},[100,37629,34073],{"class":1836},[100,37631,37632,37634,37636],{"class":102,"line":18396},[100,37633,34078],{"class":258},[100,37635,472],{"class":471},[100,37637,4686],{"class":117},[100,37639,37640],{"class":102,"line":18401},[100,37641,34087],{"class":1836},[100,37643,37644,37646,37648],{"class":102,"line":18407},[100,37645,34092],{"class":258},[100,37647,472],{"class":471},[100,37649,33899],{"class":117},[100,37651,37652],{"class":102,"line":18412},[100,37653,34101],{"class":1836},[100,37655,37656,37658,37660],{"class":102,"line":18426},[100,37657,34106],{"class":258},[100,37659,472],{"class":471},[100,37661,4686],{"class":117},[100,37663,37664],{"class":102,"line":18431},[100,37665,34115],{"class":1836},[100,37667,37668,37670,37672],{"class":102,"line":18436},[100,37669,34120],{"class":258},[100,37671,472],{"class":471},[100,37673,4686],{"class":117},[100,37675,37676],{"class":102,"line":18450},[100,37677,34129],{"class":1836},[100,37679,37680,37682,37684],{"class":102,"line":18462},[100,37681,34134],{"class":258},[100,37683,472],{"class":471},[100,37685,4686],{"class":117},[100,37687,37688],{"class":102,"line":18467},[100,37689,34143],{"class":1836},[100,37691,37692,37694,37696,37698,37700],{"class":102,"line":18480},[100,37693,5003],{"class":471},[100,37695,33159],{"class":258},[100,37697,854],{"class":471},[100,37699,33164],{"class":117},[100,37701,34156],{"class":258},[100,37703,37704],{"class":102,"line":18485},[100,37705,34161],{"class":1836},[100,37707,37708,37710,37712],{"class":102,"line":18490},[100,37709,34166],{"class":258},[100,37711,472],{"class":471},[100,37713,34171],{"class":258},[100,37715,37716],{"class":102,"line":18495},[100,37717,34176],{"class":1836},[100,37719,37720,37722,37724],{"class":102,"line":18508},[100,37721,34181],{"class":258},[100,37723,472],{"class":471},[100,37725,34186],{"class":258},[100,37727,37728],{"class":102,"line":18513},[100,37729,34192],{"class":1836},[100,37731,37732],{"class":102,"line":34189},[100,37733,34198],{"class":258},[100,37735,37736],{"class":102,"line":34195},[100,37737,34204],{"class":1836},[100,37739,37740],{"class":102,"line":34201},[100,37741,34210],{"class":1836},[100,37743,37744,37746,37748],{"class":102,"line":34207},[100,37745,34216],{"class":258},[100,37747,472],{"class":471},[100,37749,34221],{"class":258},[100,37751,37752],{"class":102,"line":34213},[100,37753,34227],{"class":1836},[100,37755,37756,37758,37760,37762,37764,37766,37768],{"class":102,"line":34224},[100,37757,34233],{"class":258},[100,37759,472],{"class":471},[100,37761,34238],{"class":258},[100,37763,34241],{"class":6812},[100,37765,472],{"class":471},[100,37767,1985],{"class":117},[100,37769,809],{"class":258},[100,37771,37772],{"class":102,"line":34230},[100,37773,34253],{"class":1836},[100,37775,37776,37778,37780],{"class":102,"line":34250},[100,37777,34259],{"class":258},[100,37779,472],{"class":471},[100,37781,34264],{"class":258},[100,37783,37784],{"class":102,"line":34256},[100,37785,34270],{"class":1836},[100,37787,37788],{"class":102,"line":34267},[100,37789,34276],{"class":258},[100,37791,37792],{"class":102,"line":34273},[100,37793,34282],{"class":1836},[100,37795,37796],{"class":102,"line":34279},[100,37797,34288],{"class":258},[100,37799,37800],{"class":102,"line":34285},[100,37801,34294],{"class":1836},[100,37803,37804],{"class":102,"line":34291},[100,37805,34300],{"class":258},[100,37807,37808],{"class":102,"line":34297},[100,37809,34306],{"class":1836},[100,37811,37812,37814,37816,37818,37820,37822,37824],{"class":102,"line":34303},[100,37813,34312],{"class":258},[100,37815,11062],{"class":471},[100,37817,34317],{"class":258},[100,37819,2222],{"class":471},[100,37821,34322],{"class":258},[100,37823,1366],{"class":117},[100,37825,809],{"class":258},[100,37827,37828],{"class":102,"line":34309},[100,37829,34332],{"class":1836},[100,37831,37832,37834,37836,37838,37840],{"class":102,"line":34329},[100,37833,34338],{"class":258},[100,37835,11062],{"class":471},[100,37837,34343],{"class":258},[100,37839,4551],{"class":471},[100,37841,34348],{"class":258},[100,37843,37844],{"class":102,"line":34335},[100,37845,34354],{"class":1836},[100,37847,37848,37850,37852,37854,37856],{"class":102,"line":34351},[100,37849,34360],{"class":258},[100,37851,11062],{"class":471},[100,37853,34322],{"class":258},[100,37855,1366],{"class":117},[100,37857,809],{"class":258},[100,37859,37860],{"class":102,"line":34357},[100,37861,34374],{"class":1836},[100,37863,37864,37866,37868,37870,37872],{"class":102,"line":34371},[100,37865,5003],{"class":471},[100,37867,34382],{"class":258},[100,37869,854],{"class":471},[100,37871,33164],{"class":117},[100,37873,34389],{"class":258},[100,37875,37876],{"class":102,"line":34377},[100,37877,34395],{"class":1836},[100,37879,37880,37882,37884],{"class":102,"line":34392},[100,37881,34166],{"class":258},[100,37883,472],{"class":471},[100,37885,34171],{"class":258},[100,37887,37888],{"class":102,"line":34398},[100,37889,34410],{"class":1836},[100,37891,37892,37894,37896],{"class":102,"line":34407},[100,37893,34181],{"class":258},[100,37895,472],{"class":471},[100,37897,34186],{"class":258},[100,37899,37900],{"class":102,"line":34413},[100,37901,34425],{"class":1836},[100,37903,37904],{"class":102,"line":34422},[100,37905,34431],{"class":258},[100,37907,37908],{"class":102,"line":34428},[100,37909,37910],{"class":1836},"            # 验证时不计算梯度以节省内存\u002F计算\n",[100,37912,37913,37915],{"class":102,"line":34434},[100,37914,34437],{"class":471},[100,37916,34440],{"class":258},[100,37918,37919],{"class":102,"line":34443},[100,37920,34446],{"class":1836},[100,37922,37923,37926,37928],{"class":102,"line":34449},[100,37924,37925],{"class":258},"                output",[100,37927,472],{"class":471},[100,37929,34221],{"class":258},[100,37931,37932],{"class":102,"line":34460},[100,37933,34463],{"class":1836},[100,37935,37936,37939,37941,37943,37945,37947,37949],{"class":102,"line":34466},[100,37937,37938],{"class":258},"                pre_lab",[100,37940,472],{"class":471},[100,37942,34238],{"class":258},[100,37944,34241],{"class":6812},[100,37946,472],{"class":471},[100,37948,1985],{"class":117},[100,37950,809],{"class":258},[100,37952,37953],{"class":102,"line":34485},[100,37954,34488],{"class":1836},[100,37956,37957,37960,37962],{"class":102,"line":34491},[100,37958,37959],{"class":258},"                val_batch_loss",[100,37961,472],{"class":471},[100,37963,34264],{"class":258},[100,37965,37966],{"class":102,"line":34502},[100,37967,34505],{"class":1836},[100,37969,37970,37973,37975,37978,37980,37982,37984],{"class":102,"line":34508},[100,37971,37972],{"class":258},"                val_loss",[100,37974,11062],{"class":471},[100,37976,37977],{"class":258},"val_batch_loss.item()",[100,37979,2222],{"class":471},[100,37981,34322],{"class":258},[100,37983,1366],{"class":117},[100,37985,809],{"class":258},[100,37987,37988,37991,37993,37995,37997],{"class":102,"line":34528},[100,37989,37990],{"class":258},"                val_corrects",[100,37992,11062],{"class":471},[100,37994,34343],{"class":258},[100,37996,4551],{"class":471},[100,37998,34348],{"class":258},[100,38000,38001],{"class":102,"line":34544},[100,38002,38003],{"class":1836},"            # 当前用于验证的样本数量\n",[100,38005,38006,38009,38011,38013,38015],{"class":102,"line":34550},[100,38007,38008],{"class":258},"            val_num",[100,38010,11062],{"class":471},[100,38012,34322],{"class":258},[100,38014,1366],{"class":117},[100,38016,809],{"class":258},[100,38018,38019],{"class":102,"line":34564},[100,38020,34567],{"class":1836},[100,38022,38023],{"class":102,"line":34570},[100,38024,34573],{"class":1836},[100,38026,38027,38029,38031],{"class":102,"line":34576},[100,38028,34579],{"class":258},[100,38030,2351],{"class":471},[100,38032,34584],{"class":258},[100,38034,38035],{"class":102,"line":34587},[100,38036,34590],{"class":1836},[100,38038,38039],{"class":102,"line":34593},[100,38040,34596],{"class":1836},[100,38042,38043,38045,38047],{"class":102,"line":34599},[100,38044,34602],{"class":258},[100,38046,2351],{"class":471},[100,38048,34584],{"class":258},[100,38050,38051],{"class":102,"line":34609},[100,38052,34612],{"class":1836},[100,38054,38055,38057,38059],{"class":102,"line":34615},[100,38056,34618],{"class":258},[100,38058,2351],{"class":471},[100,38060,34623],{"class":258},[100,38062,38063],{"class":102,"line":34626},[100,38064,34629],{"class":1836},[100,38066,38067,38069,38071],{"class":102,"line":34632},[100,38068,34635],{"class":258},[100,38070,2351],{"class":471},[100,38072,34623],{"class":258},[100,38074,38075],{"class":102,"line":34642},[100,38076,570],{"emptyLinePlaceholder":569},[100,38078,38079],{"class":102,"line":34647},[100,38080,34650],{"class":1836},[100,38082,38083,38085,38087,38089,38091,38093,38095,38097,38099,38101,38103,38105,38107,38109,38111,38113,38115,38117,38119,38121],{"class":102,"line":34653},[100,38084,34007],{"class":117},[100,38086,713],{"class":258},[100,38088,5192],{"class":110},[100,38090,34015],{"class":117},[100,38092,34664],{"class":110},[100,38094,2662],{"class":117},[100,38096,34669],{"class":471},[100,38098,2712],{"class":117},[100,38100,34674],{"class":110},[100,38102,2662],{"class":117},[100,38104,34669],{"class":471},[100,38106,2712],{"class":117},[100,38108,5192],{"class":110},[100,38110,34685],{"class":258},[100,38112,2299],{"class":471},[100,38114,1985],{"class":117},[100,38116,34692],{"class":258},[100,38118,2299],{"class":471},[100,38120,1985],{"class":117},[100,38122,34699],{"class":258},[100,38124,38125,38127,38129,38131,38133,38135,38137,38139,38141,38143,38145,38147,38149,38151,38153,38155,38157,38159,38161,38163],{"class":102,"line":34702},[100,38126,34007],{"class":117},[100,38128,713],{"class":258},[100,38130,5192],{"class":110},[100,38132,34015],{"class":117},[100,38134,34713],{"class":110},[100,38136,2662],{"class":117},[100,38138,34669],{"class":471},[100,38140,2712],{"class":117},[100,38142,34722],{"class":110},[100,38144,2662],{"class":117},[100,38146,34669],{"class":471},[100,38148,2712],{"class":117},[100,38150,5192],{"class":110},[100,38152,34733],{"class":258},[100,38154,2299],{"class":471},[100,38156,1985],{"class":117},[100,38158,34740],{"class":258},[100,38160,2299],{"class":471},[100,38162,1985],{"class":117},[100,38164,34699],{"class":258},[100,38166,38167],{"class":102,"line":34749},[100,38168,570],{"emptyLinePlaceholder":569},[100,38170,38171],{"class":102,"line":34754},[100,38172,34757],{"class":1836},[100,38174,38175,38177,38179,38181,38183,38185,38187],{"class":102,"line":34760},[100,38176,4106],{"class":471},[100,38178,34765],{"class":258},[100,38180,2299],{"class":471},[100,38182,1985],{"class":117},[100,38184,2706],{"class":258},[100,38186,2726],{"class":471},[100,38188,34776],{"class":258},[100,38190,38191],{"class":102,"line":34779},[100,38192,34782],{"class":1836},[100,38194,38195,38197,38199,38201,38203,38205,38207],{"class":102,"line":34785},[100,38196,34788],{"class":258},[100,38198,1819],{"class":117},[100,38200,472],{"class":471},[100,38202,34795],{"class":258},[100,38204,2299],{"class":471},[100,38206,1985],{"class":117},[100,38208,34802],{"class":258},[100,38210,38211],{"class":102,"line":34805},[100,38212,34808],{"class":1836},[100,38214,38215],{"class":102,"line":34811},[100,38216,34814],{"class":1836},[100,38218,38219,38221,38223],{"class":102,"line":34817},[100,38220,34820],{"class":258},[100,38222,472],{"class":471},[100,38224,33871],{"class":258},[100,38226,38227],{"class":102,"line":34827},[100,38228,570],{"emptyLinePlaceholder":569},[100,38230,38231],{"class":102,"line":34832},[100,38232,34835],{"class":1836},[100,38234,38235,38237,38239,38241,38243],{"class":102,"line":34838},[100,38236,34841],{"class":258},[100,38238,472],{"class":471},[100,38240,34846],{"class":258},[100,38242,2299],{"class":471},[100,38244,34851],{"class":258},[100,38246,38247,38249,38251,38253,38255,38257,38259,38261,38263,38265,38267,38269,38271,38273,38275,38277,38279,38281],{"class":102,"line":34854},[100,38248,34007],{"class":117},[100,38250,713],{"class":258},[100,38252,34861],{"class":110},[100,38254,2662],{"class":117},[100,38256,34866],{"class":471},[100,38258,2712],{"class":117},[100,38260,2311],{"class":110},[100,38262,2662],{"class":117},[100,38264,34866],{"class":471},[100,38266,2712],{"class":117},[100,38268,34879],{"class":110},[100,38270,34882],{"class":258},[100,38272,34885],{"class":471},[100,38274,2673],{"class":117},[100,38276,34890],{"class":258},[100,38278,2095],{"class":471},[100,38280,2673],{"class":117},[100,38282,751],{"class":258},[100,38284,38285],{"class":102,"line":34899},[100,38286,38287],{"class":1836},"    # 选择最优参数并保存\n",[100,38289,38290],{"class":102,"line":34905},[100,38291,38292],{"class":1836},"    # 保存最佳模型权重字典\n",[100,38294,38295,38298,38300],{"class":102,"line":34911},[100,38296,38297],{"class":258},"    torch.save(best_model_wts,",[100,38299,34923],{"class":110},[100,38301,809],{"class":258},[100,38303,38304],{"class":102,"line":34917},[100,38305,34943],{"class":1836},[100,38307,38308,38310,38312,38314,38316,38318],{"class":102,"line":34928},[100,38309,34949],{"class":258},[100,38311,472],{"class":471},[100,38313,34954],{"class":258},[100,38315,499],{"class":6812},[100,38317,472],{"class":471},[100,38319,3178],{"class":258},[100,38321,38322,38324,38326,38328],{"class":102,"line":34934},[100,38323,34966],{"class":110},[100,38325,2625],{"class":258},[100,38327,34971],{"class":117},[100,38329,34974],{"class":258},[100,38331,38332,38334],{"class":102,"line":34940},[100,38333,34980],{"class":110},[100,38335,34983],{"class":258},[100,38337,38338,38340],{"class":102,"line":34946},[100,38339,34989],{"class":110},[100,38341,34992],{"class":258},[100,38343,38344,38346],{"class":102,"line":34963},[100,38345,34998],{"class":110},[100,38347,35001],{"class":258},[100,38349,38350,38352],{"class":102,"line":34977},[100,38351,35007],{"class":110},[100,38353,35010],{"class":258},[100,38355,38356],{"class":102,"line":34986},[100,38357,35016],{"class":258},[100,38359,38360],{"class":102,"line":34995},[100,38361,35022],{"class":1836},[100,38363,38364,38366],{"class":102,"line":35004},[100,38365,5689],{"class":471},[100,38367,35030],{"class":258},[100,38369,38370],{"class":102,"line":35013},[100,38371,570],{"emptyLinePlaceholder":569},[100,38373,38374],{"class":102,"line":35019},[100,38375,35041],{"class":1836},[100,38377,38378,38380,38382],{"class":102,"line":35025},[100,38379,678],{"class":471},[100,38381,35049],{"class":106},[100,38383,35052],{"class":258},[100,38385,38386],{"class":102,"line":35033},[100,38387,35058],{"class":1836},[100,38389,38390,38392,38394,38396,38398,38400,38402,38404],{"class":102,"line":35038},[100,38391,35064],{"class":258},[100,38393,33251],{"class":6812},[100,38395,472],{"class":471},[100,38397,713],{"class":258},[100,38399,2265],{"class":117},[100,38401,2145],{"class":258},[100,38403,748],{"class":117},[100,38405,751],{"class":258},[100,38407,38408],{"class":102,"line":35044},[100,38409,35084],{"class":1836},[100,38411,38412],{"class":102,"line":35055},[100,38413,35090],{"class":1836},[100,38415,38416],{"class":102,"line":35061},[100,38417,35096],{"class":1836},[100,38419,38420,38422,38424,38426,38428,38430,38432],{"class":102,"line":35081},[100,38421,33285],{"class":258},[100,38423,1985],{"class":117},[100,38425,2145],{"class":258},[100,38427,465],{"class":117},[100,38429,2145],{"class":258},[100,38431,1985],{"class":117},[100,38433,809],{"class":258},[100,38435,38436],{"class":102,"line":35087},[100,38437,35119],{"class":1836},[100,38439,38440],{"class":102,"line":35093},[100,38441,35125],{"class":1836},[100,38443,38444],{"class":102,"line":35099},[100,38445,35131],{"class":1836},[100,38447,38448],{"class":102,"line":35116},[100,38449,35137],{"class":1836},[100,38451,38452],{"class":102,"line":35122},[100,38453,35143],{"class":1836},[100,38455,38456,38458,38460,38462,38464,38466,38468,38470,38472],{"class":102,"line":35128},[100,38457,35149],{"class":258},[100,38459,35152],{"class":110},[100,38461,35155],{"class":258},[100,38463,35158],{"class":110},[100,38465,2145],{"class":258},[100,38467,35163],{"class":6812},[100,38469,472],{"class":471},[100,38471,35168],{"class":110},[100,38473,809],{"class":258},[100,38475,38476,38478,38480,38482,38484,38486,38488,38490,38492],{"class":102,"line":35134},[100,38477,35149],{"class":258},[100,38479,35152],{"class":110},[100,38481,35180],{"class":258},[100,38483,35183],{"class":110},[100,38485,2145],{"class":258},[100,38487,35163],{"class":6812},[100,38489,472],{"class":471},[100,38491,35192],{"class":110},[100,38493,809],{"class":258},[100,38495,38496],{"class":102,"line":35140},[100,38497,35200],{"class":1836},[100,38499,38500],{"class":102,"line":35146},[100,38501,35206],{"class":258},[100,38503,38504],{"class":102,"line":35173},[100,38505,35212],{"class":1836},[100,38507,38508,38510,38512],{"class":102,"line":35197},[100,38509,35218],{"class":258},[100,38511,35221],{"class":110},[100,38513,809],{"class":258},[100,38515,38516,38518,38520],{"class":102,"line":35203},[100,38517,35229],{"class":258},[100,38519,35232],{"class":110},[100,38521,809],{"class":258},[100,38523,38524],{"class":102,"line":35209},[100,38525,35240],{"class":1836},[100,38527,38528,38530,38532,38534,38536,38538,38540],{"class":102,"line":35215},[100,38529,33285],{"class":258},[100,38531,1985],{"class":117},[100,38533,2145],{"class":258},[100,38535,465],{"class":117},[100,38537,2145],{"class":258},[100,38539,465],{"class":117},[100,38541,809],{"class":258},[100,38543,38544,38546,38548,38550,38552,38554,38556,38558,38560],{"class":102,"line":35226},[100,38545,35149],{"class":258},[100,38547,35152],{"class":110},[100,38549,35267],{"class":258},[100,38551,35158],{"class":110},[100,38553,2145],{"class":258},[100,38555,35163],{"class":6812},[100,38557,472],{"class":471},[100,38559,35278],{"class":110},[100,38561,809],{"class":258},[100,38563,38564,38566,38568,38570,38572,38574,38576,38578,38580],{"class":102,"line":35237},[100,38565,35149],{"class":258},[100,38567,35152],{"class":110},[100,38569,35290],{"class":258},[100,38571,35183],{"class":110},[100,38573,2145],{"class":258},[100,38575,35163],{"class":6812},[100,38577,472],{"class":471},[100,38579,35301],{"class":110},[100,38581,809],{"class":258},[100,38583,38584],{"class":102,"line":35243},[100,38585,35309],{"class":1836},[100,38587,38588],{"class":102,"line":35260},[100,38589,35206],{"class":258},[100,38591,38592,38594,38596],{"class":102,"line":35283},[100,38593,35218],{"class":258},[100,38595,35152],{"class":110},[100,38597,809],{"class":258},[100,38599,38600,38602,38604],{"class":102,"line":35306},[100,38601,35229],{"class":258},[100,38603,35331],{"class":110},[100,38605,809],{"class":258},[100,38607,38608],{"class":102,"line":35312},[100,38609,35339],{"class":258},[100,38611,38612],{"class":102,"line":35317},[100,38613,570],{"emptyLinePlaceholder":569},[100,38615,38616],{"class":102,"line":35326},[100,38617,35350],{"class":1836},[100,38619,38620,38622,38624,38626,38628],{"class":102,"line":35336},[100,38621,958],{"class":471},[100,38623,961],{"class":117},[100,38625,4551],{"class":471},[100,38627,32787],{"class":110},[100,38629,696],{"class":258},[100,38631,38632],{"class":102,"line":35342},[100,38633,35369],{"class":1836},[100,38635,38636,38639,38641],{"class":102,"line":35347},[100,38637,38638],{"class":258},"    AlexNet",[100,38640,472],{"class":471},[100,38642,38643],{"class":258},"AlexNet()\n",[100,38645,38646,38648,38650],{"class":102,"line":35353},[100,38647,35386],{"class":258},[100,38649,472],{"class":471},[100,38651,35391],{"class":258},[100,38653,38654,38656,38658,38661,38663,38665,38667],{"class":102,"line":35366},[100,38655,34949],{"class":258},[100,38657,472],{"class":471},[100,38659,38660],{"class":258},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[100,38662,35404],{"class":6812},[100,38664,472],{"class":471},[100,38666,2466],{"class":117},[100,38668,809],{"class":258},[100,38670,38671],{"class":102,"line":35372},[100,38672,35416],{"class":258},[26,38674,38675],{"start":199},[29,38676,35429],{},[73,38678,38680],{"className":249,"code":38679,"language":251,"meta":79,"style":79},"import torch\nimport torch.utils.data as Data\nfrom jupyter_client.consoleapp import classes\nfrom torchvision import transforms\n# 导入数据集\nfrom torchvision.datasets import FashionMNIST\nfrom model import AlexNet\nfrom 练习.AlexNet.model import AlexNet\n\n\n# 测试数据处理\ndef test_data_process():\n    test_data=FashionMNIST(root='.\u002Fdata',\n                           train=False,\n                           transform=transforms.Compose([transforms.Resize(size=227),transforms.ToTensor()]),\n                           download=True)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=AlexNet()\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['T-shirt\u002Ftop','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[32,38681,38682,38688,38698,38708,38718,38722,38732,38742,38753,38757,38761,38765,38773,38789,38799,38815,38825,38839,38843,38853,38863,38873,38879,38883,38887,38895,38899,38915,38923,38927,38931,38939,38947,38951,38955,38959,38963,38969,38973,38983,38991,38999,39003,39007,39011,39019,39023,39039,39043,39047,39051,39063,39067,39079,39083,39087,39099,39103,39113,39117,39121,39133,39137,39145,39149,39153,39161,39165,39173,39177,39181,39185,39189,39193,39209,39217,39221,39225,39273,39279,39283,39293,39301,39309,39313,39317,39321,39325,39333,39337,39353,39357,39365,39373],{"__ignoreMap":79},[100,38683,38684,38686],{"class":102,"line":103},[100,38685,548],{"class":471},[100,38687,31961],{"class":258},[100,38689,38690,38692,38694,38696],{"class":102,"line":188},[100,38691,548],{"class":471},[100,38693,32973],{"class":258},[100,38695,561],{"class":471},[100,38697,32978],{"class":258},[100,38699,38700,38702,38704,38706],{"class":102,"line":199},[100,38701,32301],{"class":471},[100,38703,35457],{"class":258},[100,38705,548],{"class":471},[100,38707,35462],{"class":258},[100,38709,38710,38712,38714,38716],{"class":102,"line":532},[100,38711,32301],{"class":471},[100,38713,32956],{"class":258},[100,38715,548],{"class":471},[100,38717,32961],{"class":258},[100,38719,38720],{"class":102,"line":577},[100,38721,35477],{"class":1836},[100,38723,38724,38726,38728,38730],{"class":102,"line":589},[100,38725,32301],{"class":471},[100,38727,32929],{"class":258},[100,38729,548],{"class":471},[100,38731,32934],{"class":258},[100,38733,38734,38736,38738,38740],{"class":102,"line":595},[100,38735,32301],{"class":471},[100,38737,33472],{"class":258},[100,38739,548],{"class":471},[100,38741,37111],{"class":258},[100,38743,38744,38746,38749,38751],{"class":102,"line":601},[100,38745,32301],{"class":471},[100,38747,38748],{"class":258}," 练习.AlexNet.model ",[100,38750,548],{"class":471},[100,38752,37111],{"class":258},[100,38754,38755],{"class":102,"line":606},[100,38756,570],{"emptyLinePlaceholder":569},[100,38758,38759],{"class":102,"line":612},[100,38760,570],{"emptyLinePlaceholder":569},[100,38762,38763],{"class":102,"line":618},[100,38764,35506],{"class":1836},[100,38766,38767,38769,38771],{"class":102,"line":623},[100,38768,678],{"class":471},[100,38770,35513],{"class":106},[100,38772,33510],{"class":258},[100,38774,38775,38777,38779,38781,38783,38785,38787],{"class":102,"line":629},[100,38776,35520],{"class":258},[100,38778,472],{"class":471},[100,38780,33013],{"class":258},[100,38782,33016],{"class":6812},[100,38784,472],{"class":471},[100,38786,33021],{"class":110},[100,38788,33024],{"class":258},[100,38790,38791,38793,38795,38797],{"class":102,"line":635},[100,38792,35537],{"class":6812},[100,38794,472],{"class":471},[100,38796,35542],{"class":117},[100,38798,33024],{"class":258},[100,38800,38801,38803,38805,38807,38809,38811,38813],{"class":102,"line":641},[100,38802,35549],{"class":6812},[100,38804,472],{"class":471},[100,38806,33051],{"class":258},[100,38808,33054],{"class":6812},[100,38810,472],{"class":471},[100,38812,37003],{"class":117},[100,38814,33062],{"class":258},[100,38816,38817,38819,38821,38823],{"class":102,"line":647},[100,38818,35566],{"class":6812},[100,38820,472],{"class":471},[100,38822,33034],{"class":117},[100,38824,809],{"class":258},[100,38826,38827,38829,38831,38833,38835,38837],{"class":102,"line":653},[100,38828,35577],{"class":258},[100,38830,472],{"class":471},[100,38832,33092],{"class":258},[100,38834,33095],{"class":6812},[100,38836,472],{"class":471},[100,38838,35588],{"class":258},[100,38840,38841],{"class":102,"line":659},[100,38842,35593],{"class":1836},[100,38844,38845,38847,38849,38851],{"class":102,"line":665},[100,38846,35598],{"class":6812},[100,38848,472],{"class":471},[100,38850,1985],{"class":117},[100,38852,33024],{"class":258},[100,38854,38855,38857,38859,38861],{"class":102,"line":670},[100,38856,35609],{"class":6812},[100,38858,472],{"class":471},[100,38860,33034],{"class":117},[100,38862,33024],{"class":258},[100,38864,38865,38867,38869,38871],{"class":102,"line":675},[100,38866,35620],{"class":6812},[100,38868,472],{"class":471},[100,38870,1366],{"class":117},[100,38872,809],{"class":258},[100,38874,38875,38877],{"class":102,"line":699},[100,38876,5689],{"class":471},[100,38878,35633],{"class":258},[100,38880,38881],{"class":102,"line":708},[100,38882,570],{"emptyLinePlaceholder":569},[100,38884,38885],{"class":102,"line":722},[100,38886,35642],{"class":1836},[100,38888,38889,38891,38893],{"class":102,"line":735},[100,38890,678],{"class":471},[100,38892,35649],{"class":106},[100,38894,35652],{"class":258},[100,38896,38897],{"class":102,"line":754},[100,38898,35657],{"class":1836},[100,38900,38901,38903,38905,38907,38909,38911,38913],{"class":102,"line":771},[100,38902,32799],{"class":258},[100,38904,472],{"class":471},[100,38906,32806],{"class":110},[100,38908,3325],{"class":471},[100,38910,32811],{"class":258},[100,38912,3322],{"class":471},[100,38914,35674],{"class":110},[100,38916,38917,38919,38921],{"class":102,"line":776},[100,38918,32851],{"class":258},[100,38920,472],{"class":471},[100,38922,33846],{"class":258},[100,38924,38925],{"class":102,"line":781},[100,38926,570],{"emptyLinePlaceholder":569},[100,38928,38929],{"class":102,"line":796},[100,38930,35691],{"class":1836},[100,38932,38933,38935,38937],{"class":102,"line":812},[100,38934,35696],{"class":258},[100,38936,472],{"class":471},[100,38938,33899],{"class":117},[100,38940,38941,38943,38945],{"class":102,"line":823},[100,38942,35705],{"class":258},[100,38944,472],{"class":471},[100,38946,4686],{"class":117},[100,38948,38949],{"class":102,"line":828},[100,38950,570],{"emptyLinePlaceholder":569},[100,38952,38953],{"class":102,"line":840},[100,38954,35718],{"class":1836},[100,38956,38957],{"class":102,"line":845},[100,38958,35723],{"class":1836},[100,38960,38961],{"class":102,"line":868},[100,38962,35728],{"class":1836},[100,38964,38965,38967],{"class":102,"line":874},[100,38966,35733],{"class":471},[100,38968,34440],{"class":258},[100,38970,38971],{"class":102,"line":879},[100,38972,35740],{"class":1836},[100,38974,38975,38977,38979,38981],{"class":102,"line":889},[100,38976,5003],{"class":471},[100,38978,35747],{"class":258},[100,38980,854],{"class":471},[100,38982,35752],{"class":258},[100,38984,38985,38987,38989],{"class":102,"line":894},[100,38986,35757],{"class":258},[100,38988,472],{"class":471},[100,38990,35762],{"class":258},[100,38992,38993,38995,38997],{"class":102,"line":900},[100,38994,35767],{"class":258},[100,38996,472],{"class":471},[100,38998,35772],{"class":258},[100,39000,39001],{"class":102,"line":910},[100,39002,35777],{"class":1836},[100,39004,39005],{"class":102,"line":915},[100,39006,34431],{"class":258},[100,39008,39009],{"class":102,"line":929},[100,39010,35786],{"class":1836},[100,39012,39013,39015,39017],{"class":102,"line":935},[100,39014,34216],{"class":258},[100,39016,472],{"class":471},[100,39018,35795],{"class":258},[100,39020,39021],{"class":102,"line":945},[100,39022,35800],{"class":1836},[100,39024,39025,39027,39029,39031,39033,39035,39037],{"class":102,"line":950},[100,39026,34233],{"class":258},[100,39028,472],{"class":471},[100,39030,34238],{"class":258},[100,39032,34241],{"class":6812},[100,39034,472],{"class":471},[100,39036,1985],{"class":117},[100,39038,809],{"class":258},[100,39040,39041],{"class":102,"line":955},[100,39042,35821],{"class":1836},[100,39044,39045],{"class":102,"line":972},[100,39046,35826],{"class":1836},[100,39048,39049],{"class":102,"line":11370},[100,39050,35831],{"class":1836},[100,39052,39053,39055,39057,39059,39061],{"class":102,"line":11375},[100,39054,35836],{"class":258},[100,39056,11062],{"class":471},[100,39058,34343],{"class":258},[100,39060,4551],{"class":471},[100,39062,35845],{"class":258},[100,39064,39065],{"class":102,"line":11380},[100,39066,35850],{"class":1836},[100,39068,39069,39071,39073,39075,39077],{"class":102,"line":11385},[100,39070,35855],{"class":258},[100,39072,11062],{"class":471},[100,39074,35860],{"class":258},[100,39076,1366],{"class":117},[100,39078,809],{"class":258},[100,39080,39081],{"class":102,"line":11394},[100,39082,570],{"emptyLinePlaceholder":569},[100,39084,39085],{"class":102,"line":11399},[100,39086,35873],{"class":1836},[100,39088,39089,39091,39093,39095,39097],{"class":102,"line":11405},[100,39090,35878],{"class":258},[100,39092,472],{"class":471},[100,39094,35883],{"class":258},[100,39096,2351],{"class":471},[100,39098,35888],{"class":258},[100,39100,39101],{"class":102,"line":11426},[100,39102,35893],{"class":1836},[100,39104,39105,39107,39109,39111],{"class":102,"line":11432},[100,39106,34007],{"class":117},[100,39108,713],{"class":258},[100,39110,35902],{"class":110},[100,39112,35905],{"class":258},[100,39114,39115],{"class":102,"line":11446},[100,39116,570],{"emptyLinePlaceholder":569},[100,39118,39119],{"class":102,"line":11452},[100,39120,35914],{"class":1836},[100,39122,39123,39125,39127,39129,39131],{"class":102,"line":11479},[100,39124,958],{"class":471},[100,39126,961],{"class":117},[100,39128,4551],{"class":471},[100,39130,32787],{"class":110},[100,39132,696],{"class":258},[100,39134,39135],{"class":102,"line":11488},[100,39136,35931],{"class":1836},[100,39138,39139,39141,39143],{"class":102,"line":11494},[100,39140,32851],{"class":258},[100,39142,472],{"class":471},[100,39144,38643],{"class":258},[100,39146,39147],{"class":102,"line":11502},[100,39148,35944],{"class":1836},[100,39150,39151],{"class":102,"line":11507},[100,39152,35949],{"class":1836},[100,39154,39155,39157,39159],{"class":102,"line":18185},[100,39156,35954],{"class":258},[100,39158,35957],{"class":110},[100,39160,751],{"class":258},[100,39162,39163],{"class":102,"line":18191},[100,39164,35964],{"class":1836},[100,39166,39167,39169,39171],{"class":102,"line":18214},[100,39168,35577],{"class":258},[100,39170,472],{"class":471},[100,39172,35973],{"class":258},[100,39174,39175],{"class":102,"line":18220},[100,39176,35978],{"class":1836},[100,39178,39179],{"class":102,"line":18243},[100,39180,35983],{"class":258},[100,39182,39183],{"class":102,"line":18257},[100,39184,570],{"emptyLinePlaceholder":569},[100,39186,39187],{"class":102,"line":18277},[100,39188,35992],{"class":1836},[100,39190,39191],{"class":102,"line":18283},[100,39192,35997],{"class":1836},[100,39194,39195,39197,39199,39201,39203,39205,39207],{"class":102,"line":18294},[100,39196,32799],{"class":258},[100,39198,472],{"class":471},[100,39200,32806],{"class":110},[100,39202,3325],{"class":471},[100,39204,32811],{"class":258},[100,39206,3322],{"class":471},[100,39208,35674],{"class":110},[100,39210,39211,39213,39215],{"class":102,"line":18317},[100,39212,32851],{"class":258},[100,39214,472],{"class":471},[100,39216,33846],{"class":258},[100,39218,39219],{"class":102,"line":18339},[100,39220,36026],{"class":1836},[100,39222,39223],{"class":102,"line":18344},[100,39224,36031],{"class":1836},[100,39226,39227,39229,39231,39233,39235,39237,39239,39241,39243,39245,39247,39249,39251,39253,39255,39257,39259,39261,39263,39265,39267,39269,39271],{"class":102,"line":18350},[100,39228,36036],{"class":258},[100,39230,472],{"class":471},[100,39232,2656],{"class":258},[100,39234,36043],{"class":110},[100,39236,2145],{"class":258},[100,39238,36048],{"class":110},[100,39240,2145],{"class":258},[100,39242,36053],{"class":110},[100,39244,2145],{"class":258},[100,39246,36058],{"class":110},[100,39248,2145],{"class":258},[100,39250,36063],{"class":110},[100,39252,2145],{"class":258},[100,39254,36068],{"class":110},[100,39256,2145],{"class":258},[100,39258,36073],{"class":110},[100,39260,2145],{"class":258},[100,39262,36078],{"class":110},[100,39264,2145],{"class":258},[100,39266,36083],{"class":110},[100,39268,2145],{"class":258},[100,39270,36088],{"class":110},[100,39272,34802],{"class":258},[100,39274,39275,39277],{"class":102,"line":18364},[100,39276,35733],{"class":471},[100,39278,34440],{"class":258},[100,39280,39281],{"class":102,"line":18377},[100,39282,36101],{"class":1836},[100,39284,39285,39287,39289,39291],{"class":102,"line":18382},[100,39286,5003],{"class":471},[100,39288,36108],{"class":258},[100,39290,854],{"class":471},[100,39292,35752],{"class":258},[100,39294,39295,39297,39299],{"class":102,"line":18396},[100,39296,34166],{"class":258},[100,39298,472],{"class":471},[100,39300,34171],{"class":258},[100,39302,39303,39305,39307],{"class":102,"line":18401},[100,39304,34181],{"class":258},[100,39306,472],{"class":471},[100,39308,34186],{"class":258},[100,39310,39311],{"class":102,"line":18407},[100,39312,570],{"emptyLinePlaceholder":569},[100,39314,39315],{"class":102,"line":18412},[100,39316,36137],{"class":1836},[100,39318,39319],{"class":102,"line":18426},[100,39320,34431],{"class":258},[100,39322,39323],{"class":102,"line":18431},[100,39324,36146],{"class":1836},[100,39326,39327,39329,39331],{"class":102,"line":18436},[100,39328,34216],{"class":258},[100,39330,472],{"class":471},[100,39332,34221],{"class":258},[100,39334,39335],{"class":102,"line":18450},[100,39336,36159],{"class":1836},[100,39338,39339,39341,39343,39345,39347,39349,39351],{"class":102,"line":18462},[100,39340,34233],{"class":258},[100,39342,472],{"class":471},[100,39344,34238],{"class":258},[100,39346,34241],{"class":6812},[100,39348,472],{"class":471},[100,39350,1985],{"class":117},[100,39352,809],{"class":258},[100,39354,39355],{"class":102,"line":18467},[100,39356,36180],{"class":1836},[100,39358,39359,39361,39363],{"class":102,"line":18480},[100,39360,36185],{"class":258},[100,39362,472],{"class":471},[100,39364,36190],{"class":258},[100,39366,39367,39369,39371],{"class":102,"line":18485},[100,39368,36195],{"class":258},[100,39370,472],{"class":471},[100,39372,36200],{"class":258},[100,39374,39375,39377,39379,39381,39383,39385,39387,39389],{"class":102,"line":18490},[100,39376,36205],{"class":117},[100,39378,713],{"class":258},[100,39380,36210],{"class":110},[100,39382,36213],{"class":258},[100,39384,36216],{"class":110},[100,39386,2145],{"class":258},[100,39388,36221],{"class":110},[100,39390,36224],{"class":258},[305,39392,39394],{"id":39393},"_22vgg","2.2.VGG",[23579,39396,39398],{"id":39397},"_221原理","2.2.1.原理",[19,39400,39401],{},[3095,39402],{"alt":79,"src":39403},"\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,39405,39406],{},[3095,39407],{"alt":79,"src":39408},"\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,39410,39411],{},[3095,39412],{"alt":79,"src":39413},"\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,39415,39416],{},"参数详细描述：",[19,39418,39419],{},[3095,39420],{"alt":79,"src":39421},"\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,39423,39424],{},[3095,39425],{"alt":79,"src":39426},"\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,39428,39429],{},[3095,39430],{"alt":79,"src":39431},"\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,39433,39434],{},[3095,39435],{"alt":79,"src":39436},"\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,39438,39439],{},[3095,39440],{"alt":79,"src":39441},"\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",[23579,39443,39445],{"id":39444},"_222代码实现","2.2.2.代码实现",[26,39447,39448],{},[29,39449,39450],{},"网络搭建",[73,39452,39454],{"className":249,"code":39453,"language":251,"meta":79,"style":79},"import torch\nfrom sympy.core.sympify import kernS\nfrom torch import nn\nfrom torchsummary import summary\n\nclass VGG16(nn.Module):\n    def __init__(self):\n        super(VGG16, self).__init__()\n        # 按照块来进行搭建神经网络层,按照序列来写\n        # 这里用的是灰度图\n        self.block1=nn.Sequential(\n            nn.Conv2d(in_channels=1,out_channels=64,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=64,out_channels=64,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 第二层\n        self.block2=nn.Sequential(\n            nn.Conv2d(in_channels=64,out_channels=128,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=128,out_channels=128,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 第三层\n        self.block3=nn.Sequential(\n            nn.Conv2d(in_channels=128,out_channels=256,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=256,out_channels=256,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=256,out_channels=256,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 第四层\n        self.block4=nn.Sequential(\n            nn.Conv2d(in_channels=256,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 第五层\n        self.block5=nn.Sequential(\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 全连接层\n        self.block6=nn.Sequential(\n            # 平展操作\n            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n            nn.Flatten(),\n            nn.Linear(7*7*512,256),\n            nn.ReLU(),\n            nn.Linear(256,128),\n            nn.ReLU(),\n            nn.Linear(128,10)\n        )\n\n        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n        # 循环遍历模型\n        for m in self.modules():\n            # print(m)\n            if isinstance(m,nn.Conv2d):\n                # 凯明初始化,初始化w,对应的激活函数是relu\n                nn.init.kaiming_normal_(m.weight,nonlinearity='relu')\n                # 判断b参数是否存在\n                if m.bias is not None:\n                    # 如果参数不存在的化初始化b=0\n                    nn.init.constant_(m.bias,0)\n            # 全连接层初始化\n            elif isinstance(m,nn.Linear):\n                # 这个初始化方法是利用的是正太分布的方式\n                # 均值为0，方差为0.01\n                nn.init.normal_(m.weight,0,0.01)\n                # 初始化b参数\n                if m.bias is not None:\n                    nn.init.constant_(m.bias,0)\n\n    # 定义前向传播\n    def forward(self,x):\n        x=self.block1(x)\n        x=self.block2(x)\n        x=self.block3(x)\n        x=self.block4(x)\n        x=self.block5(x)\n        x=self.block6(x)\n        return x\n\n# 验证模型\nif __name__=='__main__':\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    print(device)\n    model=VGG16().to(device)\n    print(summary(model,(1,224,224)))\n",[32,39455,39456,39462,39474,39484,39494,39498,39515,39523,39542,39547,39552,39564,39602,39607,39643,39647,39676,39681,39686,39697,39733,39737,39773,39777,39805,39809,39814,39825,39861,39865,39901,39905,39941,39945,39973,39977,39982,39993,40030,40034,40070,40074,40110,40114,40142,40146,40151,40162,40198,40202,40238,40242,40278,40282,40310,40314,40319,40330,40335,40340,40345,40366,40370,40382,40386,40398,40402,40406,40411,40416,40431,40436,40446,40451,40466,40471,40490,40495,40504,40509,40519,40524,40529,40543,40548,40562,40570,40574,40578,40586,40597,40608,40619,40630,40641,40652,40658,40662,40667,40680,40700,40706,40715],{"__ignoreMap":79},[100,39457,39458,39460],{"class":102,"line":103},[100,39459,548],{"class":471},[100,39461,31961],{"class":258},[100,39463,39464,39466,39469,39471],{"class":102,"line":188},[100,39465,32301],{"class":471},[100,39467,39468],{"class":258}," sympy.core.sympify ",[100,39470,548],{"class":471},[100,39472,39473],{"class":258}," kernS\n",[100,39475,39476,39478,39480,39482],{"class":102,"line":199},[100,39477,32301],{"class":471},[100,39479,32304],{"class":258},[100,39481,548],{"class":471},[100,39483,32309],{"class":258},[100,39485,39486,39488,39490,39492],{"class":102,"line":532},[100,39487,32301],{"class":471},[100,39489,32321],{"class":258},[100,39491,548],{"class":471},[100,39493,32326],{"class":258},[100,39495,39496],{"class":102,"line":577},[100,39497,570],{"emptyLinePlaceholder":569},[100,39499,39500,39502,39505,39507,39509,39511,39513],{"class":102,"line":589},[100,39501,16275],{"class":471},[100,39503,39504],{"class":106}," VGG16",[100,39506,713],{"class":258},[100,39508,32342],{"class":106},[100,39510,2325],{"class":258},[100,39512,32347],{"class":106},[100,39514,865],{"class":258},[100,39516,39517,39519,39521],{"class":102,"line":595},[100,39518,32364],{"class":471},[100,39520,32367],{"class":117},[100,39522,32370],{"class":258},[100,39524,39525,39527,39529,39532,39534,39536,39538,39540],{"class":102,"line":601},[100,39526,32380],{"class":117},[100,39528,713],{"class":258},[100,39530,39531],{"class":117},"VGG16",[100,39533,14017],{"class":258},[100,39535,32386],{"class":117},[100,39537,32389],{"class":258},[100,39539,32392],{"class":117},[100,39541,3587],{"class":258},[100,39543,39544],{"class":102,"line":606},[100,39545,39546],{"class":1836},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[100,39548,39549],{"class":102,"line":612},[100,39550,39551],{"class":1836},"        # 这里用的是灰度图\n",[100,39553,39554,39556,39559,39561],{"class":102,"line":618},[100,39555,32408],{"class":117},[100,39557,39558],{"class":258},".block1",[100,39560,472],{"class":471},[100,39562,39563],{"class":258},"nn.Sequential(\n",[100,39565,39566,39569,39571,39573,39575,39577,39579,39581,39583,39585,39587,39589,39591,39593,39595,39597,39599],{"class":102,"line":623},[100,39567,39568],{"class":258},"            nn.Conv2d(",[100,39570,32419],{"class":6812},[100,39572,472],{"class":471},[100,39574,1985],{"class":117},[100,39576,2145],{"class":258},[100,39578,32428],{"class":6812},[100,39580,472],{"class":471},[100,39582,1972],{"class":117},[100,39584,2145],{"class":258},[100,39586,32437],{"class":6812},[100,39588,472],{"class":471},[100,39590,1849],{"class":117},[100,39592,2145],{"class":258},[100,39594,32446],{"class":6812},[100,39596,472],{"class":471},[100,39598,1985],{"class":117},[100,39600,39601],{"class":258},"),\n",[100,39603,39604],{"class":102,"line":629},[100,39605,39606],{"class":258},"            nn.ReLU(),\n",[100,39608,39609,39611,39613,39615,39617,39619,39621,39623,39625,39627,39629,39631,39633,39635,39637,39639,39641],{"class":102,"line":635},[100,39610,39568],{"class":258},[100,39612,32419],{"class":6812},[100,39614,472],{"class":471},[100,39616,1972],{"class":117},[100,39618,2145],{"class":258},[100,39620,32428],{"class":6812},[100,39622,472],{"class":471},[100,39624,1972],{"class":117},[100,39626,2145],{"class":258},[100,39628,32437],{"class":6812},[100,39630,472],{"class":471},[100,39632,1849],{"class":117},[100,39634,2145],{"class":258},[100,39636,32446],{"class":6812},[100,39638,472],{"class":471},[100,39640,1985],{"class":117},[100,39642,39601],{"class":258},[100,39644,39645],{"class":102,"line":641},[100,39646,39606],{"class":258},[100,39648,39649,39652,39654,39656,39658,39660,39662,39664,39666,39668,39670,39672,39674],{"class":102,"line":647},[100,39650,39651],{"class":258},"            nn.MaxPool2d(",[100,39653,32437],{"class":6812},[100,39655,472],{"class":471},[100,39657,465],{"class":117},[100,39659,2145],{"class":258},[100,39661,32492],{"class":6812},[100,39663,472],{"class":471},[100,39665,465],{"class":117},[100,39667,2145],{"class":258},[100,39669,32446],{"class":6812},[100,39671,472],{"class":471},[100,39673,1366],{"class":117},[100,39675,809],{"class":258},[100,39677,39678],{"class":102,"line":653},[100,39679,39680],{"class":258},"        )\n",[100,39682,39683],{"class":102,"line":659},[100,39684,39685],{"class":1836},"        # 第二层\n",[100,39687,39688,39690,39693,39695],{"class":102,"line":665},[100,39689,32408],{"class":117},[100,39691,39692],{"class":258},".block2",[100,39694,472],{"class":471},[100,39696,39563],{"class":258},[100,39698,39699,39701,39703,39705,39707,39709,39711,39713,39715,39717,39719,39721,39723,39725,39727,39729,39731],{"class":102,"line":670},[100,39700,39568],{"class":258},[100,39702,32419],{"class":6812},[100,39704,472],{"class":471},[100,39706,1972],{"class":117},[100,39708,2145],{"class":258},[100,39710,32428],{"class":6812},[100,39712,472],{"class":471},[100,39714,33627],{"class":117},[100,39716,2145],{"class":258},[100,39718,32437],{"class":6812},[100,39720,472],{"class":471},[100,39722,1849],{"class":117},[100,39724,2145],{"class":258},[100,39726,32446],{"class":6812},[100,39728,472],{"class":471},[100,39730,1985],{"class":117},[100,39732,39601],{"class":258},[100,39734,39735],{"class":102,"line":675},[100,39736,39606],{"class":258},[100,39738,39739,39741,39743,39745,39747,39749,39751,39753,39755,39757,39759,39761,39763,39765,39767,39769,39771],{"class":102,"line":699},[100,39740,39568],{"class":258},[100,39742,32419],{"class":6812},[100,39744,472],{"class":471},[100,39746,33627],{"class":117},[100,39748,2145],{"class":258},[100,39750,32428],{"class":6812},[100,39752,472],{"class":471},[100,39754,33627],{"class":117},[100,39756,2145],{"class":258},[100,39758,32437],{"class":6812},[100,39760,472],{"class":471},[100,39762,1849],{"class":117},[100,39764,2145],{"class":258},[100,39766,32446],{"class":6812},[100,39768,472],{"class":471},[100,39770,1985],{"class":117},[100,39772,39601],{"class":258},[100,39774,39775],{"class":102,"line":708},[100,39776,39606],{"class":258},[100,39778,39779,39781,39783,39785,39787,39789,39791,39793,39795,39797,39799,39801,39803],{"class":102,"line":722},[100,39780,39651],{"class":258},[100,39782,32437],{"class":6812},[100,39784,472],{"class":471},[100,39786,465],{"class":117},[100,39788,2145],{"class":258},[100,39790,32492],{"class":6812},[100,39792,472],{"class":471},[100,39794,465],{"class":117},[100,39796,2145],{"class":258},[100,39798,32446],{"class":6812},[100,39800,472],{"class":471},[100,39802,1366],{"class":117},[100,39804,809],{"class":258},[100,39806,39807],{"class":102,"line":735},[100,39808,39680],{"class":258},[100,39810,39811],{"class":102,"line":754},[100,39812,39813],{"class":1836},"        # 第三层\n",[100,39815,39816,39818,39821,39823],{"class":102,"line":771},[100,39817,32408],{"class":117},[100,39819,39820],{"class":258},".block3",[100,39822,472],{"class":471},[100,39824,39563],{"class":258},[100,39826,39827,39829,39831,39833,39835,39837,39839,39841,39843,39845,39847,39849,39851,39853,39855,39857,39859],{"class":102,"line":776},[100,39828,39568],{"class":258},[100,39830,32419],{"class":6812},[100,39832,472],{"class":471},[100,39834,33627],{"class":117},[100,39836,2145],{"class":258},[100,39838,32428],{"class":6812},[100,39840,472],{"class":471},[100,39842,36425],{"class":117},[100,39844,2145],{"class":258},[100,39846,32437],{"class":6812},[100,39848,472],{"class":471},[100,39850,1849],{"class":117},[100,39852,2145],{"class":258},[100,39854,32446],{"class":6812},[100,39856,472],{"class":471},[100,39858,1985],{"class":117},[100,39860,39601],{"class":258},[100,39862,39863],{"class":102,"line":781},[100,39864,39606],{"class":258},[100,39866,39867,39869,39871,39873,39875,39877,39879,39881,39883,39885,39887,39889,39891,39893,39895,39897,39899],{"class":102,"line":796},[100,39868,39568],{"class":258},[100,39870,32419],{"class":6812},[100,39872,472],{"class":471},[100,39874,36425],{"class":117},[100,39876,2145],{"class":258},[100,39878,32428],{"class":6812},[100,39880,472],{"class":471},[100,39882,36425],{"class":117},[100,39884,2145],{"class":258},[100,39886,32437],{"class":6812},[100,39888,472],{"class":471},[100,39890,1849],{"class":117},[100,39892,2145],{"class":258},[100,39894,32446],{"class":6812},[100,39896,472],{"class":471},[100,39898,1985],{"class":117},[100,39900,39601],{"class":258},[100,39902,39903],{"class":102,"line":812},[100,39904,39606],{"class":258},[100,39906,39907,39909,39911,39913,39915,39917,39919,39921,39923,39925,39927,39929,39931,39933,39935,39937,39939],{"class":102,"line":823},[100,39908,39568],{"class":258},[100,39910,32419],{"class":6812},[100,39912,472],{"class":471},[100,39914,36425],{"class":117},[100,39916,2145],{"class":258},[100,39918,32428],{"class":6812},[100,39920,472],{"class":471},[100,39922,36425],{"class":117},[100,39924,2145],{"class":258},[100,39926,32437],{"class":6812},[100,39928,472],{"class":471},[100,39930,1849],{"class":117},[100,39932,2145],{"class":258},[100,39934,32446],{"class":6812},[100,39936,472],{"class":471},[100,39938,1985],{"class":117},[100,39940,39601],{"class":258},[100,39942,39943],{"class":102,"line":828},[100,39944,39606],{"class":258},[100,39946,39947,39949,39951,39953,39955,39957,39959,39961,39963,39965,39967,39969,39971],{"class":102,"line":840},[100,39948,39651],{"class":258},[100,39950,32437],{"class":6812},[100,39952,472],{"class":471},[100,39954,465],{"class":117},[100,39956,2145],{"class":258},[100,39958,32492],{"class":6812},[100,39960,472],{"class":471},[100,39962,465],{"class":117},[100,39964,2145],{"class":258},[100,39966,32446],{"class":6812},[100,39968,472],{"class":471},[100,39970,1366],{"class":117},[100,39972,809],{"class":258},[100,39974,39975],{"class":102,"line":845},[100,39976,39680],{"class":258},[100,39978,39979],{"class":102,"line":868},[100,39980,39981],{"class":1836},"        # 第四层\n",[100,39983,39984,39986,39989,39991],{"class":102,"line":874},[100,39985,32408],{"class":117},[100,39987,39988],{"class":258},".block4",[100,39990,472],{"class":471},[100,39992,39563],{"class":258},[100,39994,39995,39997,39999,40001,40003,40005,40007,40009,40012,40014,40016,40018,40020,40022,40024,40026,40028],{"class":102,"line":879},[100,39996,39568],{"class":258},[100,39998,32419],{"class":6812},[100,40000,472],{"class":471},[100,40002,36425],{"class":117},[100,40004,2145],{"class":258},[100,40006,32428],{"class":6812},[100,40008,472],{"class":471},[100,40010,40011],{"class":117},"512",[100,40013,2145],{"class":258},[100,40015,32437],{"class":6812},[100,40017,472],{"class":471},[100,40019,1849],{"class":117},[100,40021,2145],{"class":258},[100,40023,32446],{"class":6812},[100,40025,472],{"class":471},[100,40027,1985],{"class":117},[100,40029,39601],{"class":258},[100,40031,40032],{"class":102,"line":889},[100,40033,39606],{"class":258},[100,40035,40036,40038,40040,40042,40044,40046,40048,40050,40052,40054,40056,40058,40060,40062,40064,40066,40068],{"class":102,"line":894},[100,40037,39568],{"class":258},[100,40039,32419],{"class":6812},[100,40041,472],{"class":471},[100,40043,40011],{"class":117},[100,40045,2145],{"class":258},[100,40047,32428],{"class":6812},[100,40049,472],{"class":471},[100,40051,40011],{"class":117},[100,40053,2145],{"class":258},[100,40055,32437],{"class":6812},[100,40057,472],{"class":471},[100,40059,1849],{"class":117},[100,40061,2145],{"class":258},[100,40063,32446],{"class":6812},[100,40065,472],{"class":471},[100,40067,1985],{"class":117},[100,40069,39601],{"class":258},[100,40071,40072],{"class":102,"line":900},[100,40073,39606],{"class":258},[100,40075,40076,40078,40080,40082,40084,40086,40088,40090,40092,40094,40096,40098,40100,40102,40104,40106,40108],{"class":102,"line":910},[100,40077,39568],{"class":258},[100,40079,32419],{"class":6812},[100,40081,472],{"class":471},[100,40083,40011],{"class":117},[100,40085,2145],{"class":258},[100,40087,32428],{"class":6812},[100,40089,472],{"class":471},[100,40091,40011],{"class":117},[100,40093,2145],{"class":258},[100,40095,32437],{"class":6812},[100,40097,472],{"class":471},[100,40099,1849],{"class":117},[100,40101,2145],{"class":258},[100,40103,32446],{"class":6812},[100,40105,472],{"class":471},[100,40107,1985],{"class":117},[100,40109,39601],{"class":258},[100,40111,40112],{"class":102,"line":915},[100,40113,39606],{"class":258},[100,40115,40116,40118,40120,40122,40124,40126,40128,40130,40132,40134,40136,40138,40140],{"class":102,"line":929},[100,40117,39651],{"class":258},[100,40119,32437],{"class":6812},[100,40121,472],{"class":471},[100,40123,465],{"class":117},[100,40125,2145],{"class":258},[100,40127,32492],{"class":6812},[100,40129,472],{"class":471},[100,40131,465],{"class":117},[100,40133,2145],{"class":258},[100,40135,32446],{"class":6812},[100,40137,472],{"class":471},[100,40139,1366],{"class":117},[100,40141,809],{"class":258},[100,40143,40144],{"class":102,"line":935},[100,40145,39680],{"class":258},[100,40147,40148],{"class":102,"line":945},[100,40149,40150],{"class":1836},"        # 第五层\n",[100,40152,40153,40155,40158,40160],{"class":102,"line":950},[100,40154,32408],{"class":117},[100,40156,40157],{"class":258},".block5",[100,40159,472],{"class":471},[100,40161,39563],{"class":258},[100,40163,40164,40166,40168,40170,40172,40174,40176,40178,40180,40182,40184,40186,40188,40190,40192,40194,40196],{"class":102,"line":955},[100,40165,39568],{"class":258},[100,40167,32419],{"class":6812},[100,40169,472],{"class":471},[100,40171,40011],{"class":117},[100,40173,2145],{"class":258},[100,40175,32428],{"class":6812},[100,40177,472],{"class":471},[100,40179,40011],{"class":117},[100,40181,2145],{"class":258},[100,40183,32437],{"class":6812},[100,40185,472],{"class":471},[100,40187,1849],{"class":117},[100,40189,2145],{"class":258},[100,40191,32446],{"class":6812},[100,40193,472],{"class":471},[100,40195,1985],{"class":117},[100,40197,39601],{"class":258},[100,40199,40200],{"class":102,"line":972},[100,40201,39606],{"class":258},[100,40203,40204,40206,40208,40210,40212,40214,40216,40218,40220,40222,40224,40226,40228,40230,40232,40234,40236],{"class":102,"line":11370},[100,40205,39568],{"class":258},[100,40207,32419],{"class":6812},[100,40209,472],{"class":471},[100,40211,40011],{"class":117},[100,40213,2145],{"class":258},[100,40215,32428],{"class":6812},[100,40217,472],{"class":471},[100,40219,40011],{"class":117},[100,40221,2145],{"class":258},[100,40223,32437],{"class":6812},[100,40225,472],{"class":471},[100,40227,1849],{"class":117},[100,40229,2145],{"class":258},[100,40231,32446],{"class":6812},[100,40233,472],{"class":471},[100,40235,1985],{"class":117},[100,40237,39601],{"class":258},[100,40239,40240],{"class":102,"line":11375},[100,40241,39606],{"class":258},[100,40243,40244,40246,40248,40250,40252,40254,40256,40258,40260,40262,40264,40266,40268,40270,40272,40274,40276],{"class":102,"line":11380},[100,40245,39568],{"class":258},[100,40247,32419],{"class":6812},[100,40249,472],{"class":471},[100,40251,40011],{"class":117},[100,40253,2145],{"class":258},[100,40255,32428],{"class":6812},[100,40257,472],{"class":471},[100,40259,40011],{"class":117},[100,40261,2145],{"class":258},[100,40263,32437],{"class":6812},[100,40265,472],{"class":471},[100,40267,1849],{"class":117},[100,40269,2145],{"class":258},[100,40271,32446],{"class":6812},[100,40273,472],{"class":471},[100,40275,1985],{"class":117},[100,40277,39601],{"class":258},[100,40279,40280],{"class":102,"line":11385},[100,40281,39606],{"class":258},[100,40283,40284,40286,40288,40290,40292,40294,40296,40298,40300,40302,40304,40306,40308],{"class":102,"line":11394},[100,40285,39651],{"class":258},[100,40287,32437],{"class":6812},[100,40289,472],{"class":471},[100,40291,465],{"class":117},[100,40293,2145],{"class":258},[100,40295,32492],{"class":6812},[100,40297,472],{"class":471},[100,40299,465],{"class":117},[100,40301,2145],{"class":258},[100,40303,32446],{"class":6812},[100,40305,472],{"class":471},[100,40307,1366],{"class":117},[100,40309,809],{"class":258},[100,40311,40312],{"class":102,"line":11399},[100,40313,39680],{"class":258},[100,40315,40316],{"class":102,"line":11405},[100,40317,40318],{"class":1836},"        # 全连接层\n",[100,40320,40321,40323,40326,40328],{"class":102,"line":11426},[100,40322,32408],{"class":117},[100,40324,40325],{"class":258},".block6",[100,40327,472],{"class":471},[100,40329,39563],{"class":258},[100,40331,40332],{"class":102,"line":11432},[100,40333,40334],{"class":1836},"            # 平展操作\n",[100,40336,40337],{"class":102,"line":11446},[100,40338,40339],{"class":1836},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[100,40341,40342],{"class":102,"line":11452},[100,40343,40344],{"class":258},"            nn.Flatten(),\n",[100,40346,40347,40350,40352,40354,40356,40358,40360,40362,40364],{"class":102,"line":11479},[100,40348,40349],{"class":258},"            nn.Linear(",[100,40351,2136],{"class":117},[100,40353,2222],{"class":471},[100,40355,2136],{"class":117},[100,40357,2222],{"class":471},[100,40359,40011],{"class":117},[100,40361,2145],{"class":258},[100,40363,36425],{"class":117},[100,40365,39601],{"class":258},[100,40367,40368],{"class":102,"line":11488},[100,40369,39606],{"class":258},[100,40371,40372,40374,40376,40378,40380],{"class":102,"line":11494},[100,40373,40349],{"class":258},[100,40375,36425],{"class":117},[100,40377,2145],{"class":258},[100,40379,33627],{"class":117},[100,40381,39601],{"class":258},[100,40383,40384],{"class":102,"line":11502},[100,40385,39606],{"class":258},[100,40387,40388,40390,40392,40394,40396],{"class":102,"line":11507},[100,40389,40349],{"class":258},[100,40391,33627],{"class":117},[100,40393,2145],{"class":258},[100,40395,2213],{"class":117},[100,40397,809],{"class":258},[100,40399,40400],{"class":102,"line":18185},[100,40401,39680],{"class":258},[100,40403,40404],{"class":102,"line":18191},[100,40405,570],{"emptyLinePlaceholder":569},[100,40407,40408],{"class":102,"line":18214},[100,40409,40410],{"class":1836},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[100,40412,40413],{"class":102,"line":18220},[100,40414,40415],{"class":1836},"        # 循环遍历模型\n",[100,40417,40418,40420,40423,40425,40428],{"class":102,"line":18243},[100,40419,5003],{"class":471},[100,40421,40422],{"class":258}," m ",[100,40424,854],{"class":471},[100,40426,40427],{"class":117}," self",[100,40429,40430],{"class":258},".modules():\n",[100,40432,40433],{"class":102,"line":18257},[100,40434,40435],{"class":1836},"            # print(m)\n",[100,40437,40438,40440,40443],{"class":102,"line":18277},[100,40439,6240],{"class":471},[100,40441,40442],{"class":117}," isinstance",[100,40444,40445],{"class":258},"(m,nn.Conv2d):\n",[100,40447,40448],{"class":102,"line":18283},[100,40449,40450],{"class":1836},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[100,40452,40453,40456,40459,40461,40464],{"class":102,"line":18294},[100,40454,40455],{"class":258},"                nn.init.kaiming_normal_(m.weight,",[100,40457,40458],{"class":6812},"nonlinearity",[100,40460,472],{"class":471},[100,40462,40463],{"class":110},"'relu'",[100,40465,809],{"class":258},[100,40467,40468],{"class":102,"line":18317},[100,40469,40470],{"class":1836},"                # 判断b参数是否存在\n",[100,40472,40473,40476,40479,40482,40485,40488],{"class":102,"line":18339},[100,40474,40475],{"class":471},"                if",[100,40477,40478],{"class":258}," m.bias ",[100,40480,40481],{"class":471},"is",[100,40483,40484],{"class":471}," not",[100,40486,40487],{"class":117}," None",[100,40489,696],{"class":258},[100,40491,40492],{"class":102,"line":18344},[100,40493,40494],{"class":1836},"                    # 如果参数不存在的化初始化b=0\n",[100,40496,40497,40500,40502],{"class":102,"line":18350},[100,40498,40499],{"class":258},"                    nn.init.constant_(m.bias,",[100,40501,1366],{"class":117},[100,40503,809],{"class":258},[100,40505,40506],{"class":102,"line":18364},[100,40507,40508],{"class":1836},"            # 全连接层初始化\n",[100,40510,40511,40514,40516],{"class":102,"line":18377},[100,40512,40513],{"class":471},"            elif",[100,40515,40442],{"class":117},[100,40517,40518],{"class":258},"(m,nn.Linear):\n",[100,40520,40521],{"class":102,"line":18382},[100,40522,40523],{"class":1836},"                # 这个初始化方法是利用的是正太分布的方式\n",[100,40525,40526],{"class":102,"line":18396},[100,40527,40528],{"class":1836},"                # 均值为0，方差为0.01\n",[100,40530,40531,40534,40536,40538,40541],{"class":102,"line":18401},[100,40532,40533],{"class":258},"                nn.init.normal_(m.weight,",[100,40535,1366],{"class":117},[100,40537,2145],{"class":258},[100,40539,40540],{"class":117},"0.01",[100,40542,809],{"class":258},[100,40544,40545],{"class":102,"line":18407},[100,40546,40547],{"class":1836},"                # 初始化b参数\n",[100,40549,40550,40552,40554,40556,40558,40560],{"class":102,"line":18412},[100,40551,40475],{"class":471},[100,40553,40478],{"class":258},[100,40555,40481],{"class":471},[100,40557,40484],{"class":471},[100,40559,40487],{"class":117},[100,40561,696],{"class":258},[100,40563,40564,40566,40568],{"class":102,"line":18426},[100,40565,40499],{"class":258},[100,40567,1366],{"class":117},[100,40569,809],{"class":258},[100,40571,40572],{"class":102,"line":18431},[100,40573,570],{"emptyLinePlaceholder":569},[100,40575,40576],{"class":102,"line":18436},[100,40577,36720],{"class":1836},[100,40579,40580,40582,40584],{"class":102,"line":18450},[100,40581,32364],{"class":471},[100,40583,32656],{"class":106},[100,40585,32659],{"class":258},[100,40587,40588,40590,40592,40594],{"class":102,"line":18462},[100,40589,32664],{"class":258},[100,40591,472],{"class":471},[100,40593,32386],{"class":117},[100,40595,40596],{"class":258},".block1(x)\n",[100,40598,40599,40601,40603,40605],{"class":102,"line":18467},[100,40600,32664],{"class":258},[100,40602,472],{"class":471},[100,40604,32386],{"class":117},[100,40606,40607],{"class":258},".block2(x)\n",[100,40609,40610,40612,40614,40616],{"class":102,"line":18480},[100,40611,32664],{"class":258},[100,40613,472],{"class":471},[100,40615,32386],{"class":117},[100,40617,40618],{"class":258},".block3(x)\n",[100,40620,40621,40623,40625,40627],{"class":102,"line":18485},[100,40622,32664],{"class":258},[100,40624,472],{"class":471},[100,40626,32386],{"class":117},[100,40628,40629],{"class":258},".block4(x)\n",[100,40631,40632,40634,40636,40638],{"class":102,"line":18490},[100,40633,32664],{"class":258},[100,40635,472],{"class":471},[100,40637,32386],{"class":117},[100,40639,40640],{"class":258},".block5(x)\n",[100,40642,40643,40645,40647,40649],{"class":102,"line":18495},[100,40644,32664],{"class":258},[100,40646,472],{"class":471},[100,40648,32386],{"class":117},[100,40650,40651],{"class":258},".block6(x)\n",[100,40653,40654,40656],{"class":102,"line":18508},[100,40655,16333],{"class":471},[100,40657,32772],{"class":258},[100,40659,40660],{"class":102,"line":18513},[100,40661,570],{"emptyLinePlaceholder":569},[100,40663,40664],{"class":102,"line":34189},[100,40665,40666],{"class":1836},"# 验证模型\n",[100,40668,40669,40671,40673,40675,40678],{"class":102,"line":34195},[100,40670,958],{"class":471},[100,40672,961],{"class":117},[100,40674,4551],{"class":471},[100,40676,40677],{"class":110},"'__main__'",[100,40679,696],{"class":258},[100,40681,40682,40684,40686,40688,40690,40692,40694,40696,40698],{"class":102,"line":34201},[100,40683,32799],{"class":258},[100,40685,472],{"class":471},[100,40687,32016],{"class":258},[100,40689,32806],{"class":110},[100,40691,3325],{"class":471},[100,40693,32811],{"class":258},[100,40695,3322],{"class":471},[100,40697,32041],{"class":110},[100,40699,809],{"class":258},[100,40701,40702,40704],{"class":102,"line":34207},[100,40703,702],{"class":117},[100,40705,32050],{"class":258},[100,40707,40708,40710,40712],{"class":102,"line":34213},[100,40709,32851],{"class":258},[100,40711,472],{"class":471},[100,40713,40714],{"class":258},"VGG16().to(device)\n",[100,40716,40717,40719,40721,40723,40725,40727,40729,40731],{"class":102,"line":34224},[100,40718,702],{"class":117},[100,40720,32863],{"class":258},[100,40722,1985],{"class":117},[100,40724,2145],{"class":258},[100,40726,33059],{"class":117},[100,40728,2145],{"class":258},[100,40730,33059],{"class":117},[100,40732,32876],{"class":258},[26,40734,40735],{"start":188},[29,40736,40737],{},"训练代码",[19,40739,40740],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,40742,40743],{},"解决方式:",[19,40745,40746],{},"①权重初始化",[73,40748,40750],{"className":249,"code":40749,"language":251,"meta":79,"style":79},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n# 循环遍历模型\nfor m in self.modules():\n    # print(m)\n    if isinstance(m,nn.Conv2d):\n        # 凯明初始化,初始化w,对应的激活函数是relu\n        nn.init.kaiming_normal_(m.weight,nonlinearity='relu')\n        # 判断b参数是否存在\n        if m.bias is not None:\n            # 如果参数不存在的化初始化b=0\n            nn.init.constant_(m.bias,0)\n    # 全连接层初始化\n    elif isinstance(m,nn.Linear):\n        # 这个初始化方法是利用的是正太分布的方式\n        # 均值为0，方差为0.01\n        nn.init.normal_(m.weight,0,0.01)\n        # 初始化b参数\n        if m.bias is not None:\n            nn.init.constant_(m.bias,0)\n",[32,40751,40752,40757,40762,40774,40779,40787,40792,40805,40810,40824,40829,40838,40843,40852,40857,40862,40875,40880,40894],{"__ignoreMap":79},[100,40753,40754],{"class":102,"line":103},[100,40755,40756],{"class":1836},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[100,40758,40759],{"class":102,"line":188},[100,40760,40761],{"class":1836},"# 循环遍历模型\n",[100,40763,40764,40766,40768,40770,40772],{"class":102,"line":199},[100,40765,1051],{"class":471},[100,40767,40422],{"class":258},[100,40769,854],{"class":471},[100,40771,40427],{"class":117},[100,40773,40430],{"class":258},[100,40775,40776],{"class":102,"line":532},[100,40777,40778],{"class":1836},"    # print(m)\n",[100,40780,40781,40783,40785],{"class":102,"line":577},[100,40782,4702],{"class":471},[100,40784,40442],{"class":117},[100,40786,40445],{"class":258},[100,40788,40789],{"class":102,"line":589},[100,40790,40791],{"class":1836},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[100,40793,40794,40797,40799,40801,40803],{"class":102,"line":595},[100,40795,40796],{"class":258},"        nn.init.kaiming_normal_(m.weight,",[100,40798,40458],{"class":6812},[100,40800,472],{"class":471},[100,40802,40463],{"class":110},[100,40804,809],{"class":258},[100,40806,40807],{"class":102,"line":601},[100,40808,40809],{"class":1836},"        # 判断b参数是否存在\n",[100,40811,40812,40814,40816,40818,40820,40822],{"class":102,"line":606},[100,40813,4106],{"class":471},[100,40815,40478],{"class":258},[100,40817,40481],{"class":471},[100,40819,40484],{"class":471},[100,40821,40487],{"class":117},[100,40823,696],{"class":258},[100,40825,40826],{"class":102,"line":612},[100,40827,40828],{"class":1836},"            # 如果参数不存在的化初始化b=0\n",[100,40830,40831,40834,40836],{"class":102,"line":618},[100,40832,40833],{"class":258},"            nn.init.constant_(m.bias,",[100,40835,1366],{"class":117},[100,40837,809],{"class":258},[100,40839,40840],{"class":102,"line":623},[100,40841,40842],{"class":1836},"    # 全连接层初始化\n",[100,40844,40845,40848,40850],{"class":102,"line":629},[100,40846,40847],{"class":471},"    elif",[100,40849,40442],{"class":117},[100,40851,40518],{"class":258},[100,40853,40854],{"class":102,"line":635},[100,40855,40856],{"class":1836},"        # 这个初始化方法是利用的是正太分布的方式\n",[100,40858,40859],{"class":102,"line":641},[100,40860,40861],{"class":1836},"        # 均值为0，方差为0.01\n",[100,40863,40864,40867,40869,40871,40873],{"class":102,"line":647},[100,40865,40866],{"class":258},"        nn.init.normal_(m.weight,",[100,40868,1366],{"class":117},[100,40870,2145],{"class":258},[100,40872,40540],{"class":117},[100,40874,809],{"class":258},[100,40876,40877],{"class":102,"line":653},[100,40878,40879],{"class":1836},"        # 初始化b参数\n",[100,40881,40882,40884,40886,40888,40890,40892],{"class":102,"line":659},[100,40883,4106],{"class":471},[100,40885,40478],{"class":258},[100,40887,40481],{"class":471},[100,40889,40484],{"class":471},[100,40891,40487],{"class":117},[100,40893,696],{"class":258},[100,40895,40896,40898,40900],{"class":102,"line":665},[100,40897,40833],{"class":258},[100,40899,1366],{"class":117},[100,40901,809],{"class":258},[19,40903,40904],{},"②尽可能地增加批次",[19,40906,40907],{},"训练完整代码：",[73,40909,40910],{"className":249,"code":39453,"language":251,"meta":79,"style":79},[32,40911,40912,40918,40928,40938,40948,40952,40968,40976,40994,40998,41002,41012,41048,41052,41088,41092,41120,41124,41128,41138,41174,41178,41214,41218,41246,41250,41254,41264,41300,41304,41340,41344,41380,41384,41412,41416,41420,41430,41466,41470,41506,41510,41546,41550,41578,41582,41586,41596,41632,41636,41672,41676,41712,41716,41744,41748,41752,41762,41766,41770,41774,41794,41798,41810,41814,41826,41830,41834,41838,41842,41854,41858,41866,41870,41882,41886,41900,41904,41912,41916,41924,41928,41932,41944,41948,41962,41970,41974,41978,41986,41996,42006,42016,42026,42036,42046,42052,42056,42060,42072,42092,42098,42106],{"__ignoreMap":79},[100,40913,40914,40916],{"class":102,"line":103},[100,40915,548],{"class":471},[100,40917,31961],{"class":258},[100,40919,40920,40922,40924,40926],{"class":102,"line":188},[100,40921,32301],{"class":471},[100,40923,39468],{"class":258},[100,40925,548],{"class":471},[100,40927,39473],{"class":258},[100,40929,40930,40932,40934,40936],{"class":102,"line":199},[100,40931,32301],{"class":471},[100,40933,32304],{"class":258},[100,40935,548],{"class":471},[100,40937,32309],{"class":258},[100,40939,40940,40942,40944,40946],{"class":102,"line":532},[100,40941,32301],{"class":471},[100,40943,32321],{"class":258},[100,40945,548],{"class":471},[100,40947,32326],{"class":258},[100,40949,40950],{"class":102,"line":577},[100,40951,570],{"emptyLinePlaceholder":569},[100,40953,40954,40956,40958,40960,40962,40964,40966],{"class":102,"line":589},[100,40955,16275],{"class":471},[100,40957,39504],{"class":106},[100,40959,713],{"class":258},[100,40961,32342],{"class":106},[100,40963,2325],{"class":258},[100,40965,32347],{"class":106},[100,40967,865],{"class":258},[100,40969,40970,40972,40974],{"class":102,"line":595},[100,40971,32364],{"class":471},[100,40973,32367],{"class":117},[100,40975,32370],{"class":258},[100,40977,40978,40980,40982,40984,40986,40988,40990,40992],{"class":102,"line":601},[100,40979,32380],{"class":117},[100,40981,713],{"class":258},[100,40983,39531],{"class":117},[100,40985,14017],{"class":258},[100,40987,32386],{"class":117},[100,40989,32389],{"class":258},[100,40991,32392],{"class":117},[100,40993,3587],{"class":258},[100,40995,40996],{"class":102,"line":606},[100,40997,39546],{"class":1836},[100,40999,41000],{"class":102,"line":612},[100,41001,39551],{"class":1836},[100,41003,41004,41006,41008,41010],{"class":102,"line":618},[100,41005,32408],{"class":117},[100,41007,39558],{"class":258},[100,41009,472],{"class":471},[100,41011,39563],{"class":258},[100,41013,41014,41016,41018,41020,41022,41024,41026,41028,41030,41032,41034,41036,41038,41040,41042,41044,41046],{"class":102,"line":623},[100,41015,39568],{"class":258},[100,41017,32419],{"class":6812},[100,41019,472],{"class":471},[100,41021,1985],{"class":117},[100,41023,2145],{"class":258},[100,41025,32428],{"class":6812},[100,41027,472],{"class":471},[100,41029,1972],{"class":117},[100,41031,2145],{"class":258},[100,41033,32437],{"class":6812},[100,41035,472],{"class":471},[100,41037,1849],{"class":117},[100,41039,2145],{"class":258},[100,41041,32446],{"class":6812},[100,41043,472],{"class":471},[100,41045,1985],{"class":117},[100,41047,39601],{"class":258},[100,41049,41050],{"class":102,"line":629},[100,41051,39606],{"class":258},[100,41053,41054,41056,41058,41060,41062,41064,41066,41068,41070,41072,41074,41076,41078,41080,41082,41084,41086],{"class":102,"line":635},[100,41055,39568],{"class":258},[100,41057,32419],{"class":6812},[100,41059,472],{"class":471},[100,41061,1972],{"class":117},[100,41063,2145],{"class":258},[100,41065,32428],{"class":6812},[100,41067,472],{"class":471},[100,41069,1972],{"class":117},[100,41071,2145],{"class":258},[100,41073,32437],{"class":6812},[100,41075,472],{"class":471},[100,41077,1849],{"class":117},[100,41079,2145],{"class":258},[100,41081,32446],{"class":6812},[100,41083,472],{"class":471},[100,41085,1985],{"class":117},[100,41087,39601],{"class":258},[100,41089,41090],{"class":102,"line":641},[100,41091,39606],{"class":258},[100,41093,41094,41096,41098,41100,41102,41104,41106,41108,41110,41112,41114,41116,41118],{"class":102,"line":647},[100,41095,39651],{"class":258},[100,41097,32437],{"class":6812},[100,41099,472],{"class":471},[100,41101,465],{"class":117},[100,41103,2145],{"class":258},[100,41105,32492],{"class":6812},[100,41107,472],{"class":471},[100,41109,465],{"class":117},[100,41111,2145],{"class":258},[100,41113,32446],{"class":6812},[100,41115,472],{"class":471},[100,41117,1366],{"class":117},[100,41119,809],{"class":258},[100,41121,41122],{"class":102,"line":653},[100,41123,39680],{"class":258},[100,41125,41126],{"class":102,"line":659},[100,41127,39685],{"class":1836},[100,41129,41130,41132,41134,41136],{"class":102,"line":665},[100,41131,32408],{"class":117},[100,41133,39692],{"class":258},[100,41135,472],{"class":471},[100,41137,39563],{"class":258},[100,41139,41140,41142,41144,41146,41148,41150,41152,41154,41156,41158,41160,41162,41164,41166,41168,41170,41172],{"class":102,"line":670},[100,41141,39568],{"class":258},[100,41143,32419],{"class":6812},[100,41145,472],{"class":471},[100,41147,1972],{"class":117},[100,41149,2145],{"class":258},[100,41151,32428],{"class":6812},[100,41153,472],{"class":471},[100,41155,33627],{"class":117},[100,41157,2145],{"class":258},[100,41159,32437],{"class":6812},[100,41161,472],{"class":471},[100,41163,1849],{"class":117},[100,41165,2145],{"class":258},[100,41167,32446],{"class":6812},[100,41169,472],{"class":471},[100,41171,1985],{"class":117},[100,41173,39601],{"class":258},[100,41175,41176],{"class":102,"line":675},[100,41177,39606],{"class":258},[100,41179,41180,41182,41184,41186,41188,41190,41192,41194,41196,41198,41200,41202,41204,41206,41208,41210,41212],{"class":102,"line":699},[100,41181,39568],{"class":258},[100,41183,32419],{"class":6812},[100,41185,472],{"class":471},[100,41187,33627],{"class":117},[100,41189,2145],{"class":258},[100,41191,32428],{"class":6812},[100,41193,472],{"class":471},[100,41195,33627],{"class":117},[100,41197,2145],{"class":258},[100,41199,32437],{"class":6812},[100,41201,472],{"class":471},[100,41203,1849],{"class":117},[100,41205,2145],{"class":258},[100,41207,32446],{"class":6812},[100,41209,472],{"class":471},[100,41211,1985],{"class":117},[100,41213,39601],{"class":258},[100,41215,41216],{"class":102,"line":708},[100,41217,39606],{"class":258},[100,41219,41220,41222,41224,41226,41228,41230,41232,41234,41236,41238,41240,41242,41244],{"class":102,"line":722},[100,41221,39651],{"class":258},[100,41223,32437],{"class":6812},[100,41225,472],{"class":471},[100,41227,465],{"class":117},[100,41229,2145],{"class":258},[100,41231,32492],{"class":6812},[100,41233,472],{"class":471},[100,41235,465],{"class":117},[100,41237,2145],{"class":258},[100,41239,32446],{"class":6812},[100,41241,472],{"class":471},[100,41243,1366],{"class":117},[100,41245,809],{"class":258},[100,41247,41248],{"class":102,"line":735},[100,41249,39680],{"class":258},[100,41251,41252],{"class":102,"line":754},[100,41253,39813],{"class":1836},[100,41255,41256,41258,41260,41262],{"class":102,"line":771},[100,41257,32408],{"class":117},[100,41259,39820],{"class":258},[100,41261,472],{"class":471},[100,41263,39563],{"class":258},[100,41265,41266,41268,41270,41272,41274,41276,41278,41280,41282,41284,41286,41288,41290,41292,41294,41296,41298],{"class":102,"line":776},[100,41267,39568],{"class":258},[100,41269,32419],{"class":6812},[100,41271,472],{"class":471},[100,41273,33627],{"class":117},[100,41275,2145],{"class":258},[100,41277,32428],{"class":6812},[100,41279,472],{"class":471},[100,41281,36425],{"class":117},[100,41283,2145],{"class":258},[100,41285,32437],{"class":6812},[100,41287,472],{"class":471},[100,41289,1849],{"class":117},[100,41291,2145],{"class":258},[100,41293,32446],{"class":6812},[100,41295,472],{"class":471},[100,41297,1985],{"class":117},[100,41299,39601],{"class":258},[100,41301,41302],{"class":102,"line":781},[100,41303,39606],{"class":258},[100,41305,41306,41308,41310,41312,41314,41316,41318,41320,41322,41324,41326,41328,41330,41332,41334,41336,41338],{"class":102,"line":796},[100,41307,39568],{"class":258},[100,41309,32419],{"class":6812},[100,41311,472],{"class":471},[100,41313,36425],{"class":117},[100,41315,2145],{"class":258},[100,41317,32428],{"class":6812},[100,41319,472],{"class":471},[100,41321,36425],{"class":117},[100,41323,2145],{"class":258},[100,41325,32437],{"class":6812},[100,41327,472],{"class":471},[100,41329,1849],{"class":117},[100,41331,2145],{"class":258},[100,41333,32446],{"class":6812},[100,41335,472],{"class":471},[100,41337,1985],{"class":117},[100,41339,39601],{"class":258},[100,41341,41342],{"class":102,"line":812},[100,41343,39606],{"class":258},[100,41345,41346,41348,41350,41352,41354,41356,41358,41360,41362,41364,41366,41368,41370,41372,41374,41376,41378],{"class":102,"line":823},[100,41347,39568],{"class":258},[100,41349,32419],{"class":6812},[100,41351,472],{"class":471},[100,41353,36425],{"class":117},[100,41355,2145],{"class":258},[100,41357,32428],{"class":6812},[100,41359,472],{"class":471},[100,41361,36425],{"class":117},[100,41363,2145],{"class":258},[100,41365,32437],{"class":6812},[100,41367,472],{"class":471},[100,41369,1849],{"class":117},[100,41371,2145],{"class":258},[100,41373,32446],{"class":6812},[100,41375,472],{"class":471},[100,41377,1985],{"class":117},[100,41379,39601],{"class":258},[100,41381,41382],{"class":102,"line":828},[100,41383,39606],{"class":258},[100,41385,41386,41388,41390,41392,41394,41396,41398,41400,41402,41404,41406,41408,41410],{"class":102,"line":840},[100,41387,39651],{"class":258},[100,41389,32437],{"class":6812},[100,41391,472],{"class":471},[100,41393,465],{"class":117},[100,41395,2145],{"class":258},[100,41397,32492],{"class":6812},[100,41399,472],{"class":471},[100,41401,465],{"class":117},[100,41403,2145],{"class":258},[100,41405,32446],{"class":6812},[100,41407,472],{"class":471},[100,41409,1366],{"class":117},[100,41411,809],{"class":258},[100,41413,41414],{"class":102,"line":845},[100,41415,39680],{"class":258},[100,41417,41418],{"class":102,"line":868},[100,41419,39981],{"class":1836},[100,41421,41422,41424,41426,41428],{"class":102,"line":874},[100,41423,32408],{"class":117},[100,41425,39988],{"class":258},[100,41427,472],{"class":471},[100,41429,39563],{"class":258},[100,41431,41432,41434,41436,41438,41440,41442,41444,41446,41448,41450,41452,41454,41456,41458,41460,41462,41464],{"class":102,"line":879},[100,41433,39568],{"class":258},[100,41435,32419],{"class":6812},[100,41437,472],{"class":471},[100,41439,36425],{"class":117},[100,41441,2145],{"class":258},[100,41443,32428],{"class":6812},[100,41445,472],{"class":471},[100,41447,40011],{"class":117},[100,41449,2145],{"class":258},[100,41451,32437],{"class":6812},[100,41453,472],{"class":471},[100,41455,1849],{"class":117},[100,41457,2145],{"class":258},[100,41459,32446],{"class":6812},[100,41461,472],{"class":471},[100,41463,1985],{"class":117},[100,41465,39601],{"class":258},[100,41467,41468],{"class":102,"line":889},[100,41469,39606],{"class":258},[100,41471,41472,41474,41476,41478,41480,41482,41484,41486,41488,41490,41492,41494,41496,41498,41500,41502,41504],{"class":102,"line":894},[100,41473,39568],{"class":258},[100,41475,32419],{"class":6812},[100,41477,472],{"class":471},[100,41479,40011],{"class":117},[100,41481,2145],{"class":258},[100,41483,32428],{"class":6812},[100,41485,472],{"class":471},[100,41487,40011],{"class":117},[100,41489,2145],{"class":258},[100,41491,32437],{"class":6812},[100,41493,472],{"class":471},[100,41495,1849],{"class":117},[100,41497,2145],{"class":258},[100,41499,32446],{"class":6812},[100,41501,472],{"class":471},[100,41503,1985],{"class":117},[100,41505,39601],{"class":258},[100,41507,41508],{"class":102,"line":900},[100,41509,39606],{"class":258},[100,41511,41512,41514,41516,41518,41520,41522,41524,41526,41528,41530,41532,41534,41536,41538,41540,41542,41544],{"class":102,"line":910},[100,41513,39568],{"class":258},[100,41515,32419],{"class":6812},[100,41517,472],{"class":471},[100,41519,40011],{"class":117},[100,41521,2145],{"class":258},[100,41523,32428],{"class":6812},[100,41525,472],{"class":471},[100,41527,40011],{"class":117},[100,41529,2145],{"class":258},[100,41531,32437],{"class":6812},[100,41533,472],{"class":471},[100,41535,1849],{"class":117},[100,41537,2145],{"class":258},[100,41539,32446],{"class":6812},[100,41541,472],{"class":471},[100,41543,1985],{"class":117},[100,41545,39601],{"class":258},[100,41547,41548],{"class":102,"line":915},[100,41549,39606],{"class":258},[100,41551,41552,41554,41556,41558,41560,41562,41564,41566,41568,41570,41572,41574,41576],{"class":102,"line":929},[100,41553,39651],{"class":258},[100,41555,32437],{"class":6812},[100,41557,472],{"class":471},[100,41559,465],{"class":117},[100,41561,2145],{"class":258},[100,41563,32492],{"class":6812},[100,41565,472],{"class":471},[100,41567,465],{"class":117},[100,41569,2145],{"class":258},[100,41571,32446],{"class":6812},[100,41573,472],{"class":471},[100,41575,1366],{"class":117},[100,41577,809],{"class":258},[100,41579,41580],{"class":102,"line":935},[100,41581,39680],{"class":258},[100,41583,41584],{"class":102,"line":945},[100,41585,40150],{"class":1836},[100,41587,41588,41590,41592,41594],{"class":102,"line":950},[100,41589,32408],{"class":117},[100,41591,40157],{"class":258},[100,41593,472],{"class":471},[100,41595,39563],{"class":258},[100,41597,41598,41600,41602,41604,41606,41608,41610,41612,41614,41616,41618,41620,41622,41624,41626,41628,41630],{"class":102,"line":955},[100,41599,39568],{"class":258},[100,41601,32419],{"class":6812},[100,41603,472],{"class":471},[100,41605,40011],{"class":117},[100,41607,2145],{"class":258},[100,41609,32428],{"class":6812},[100,41611,472],{"class":471},[100,41613,40011],{"class":117},[100,41615,2145],{"class":258},[100,41617,32437],{"class":6812},[100,41619,472],{"class":471},[100,41621,1849],{"class":117},[100,41623,2145],{"class":258},[100,41625,32446],{"class":6812},[100,41627,472],{"class":471},[100,41629,1985],{"class":117},[100,41631,39601],{"class":258},[100,41633,41634],{"class":102,"line":972},[100,41635,39606],{"class":258},[100,41637,41638,41640,41642,41644,41646,41648,41650,41652,41654,41656,41658,41660,41662,41664,41666,41668,41670],{"class":102,"line":11370},[100,41639,39568],{"class":258},[100,41641,32419],{"class":6812},[100,41643,472],{"class":471},[100,41645,40011],{"class":117},[100,41647,2145],{"class":258},[100,41649,32428],{"class":6812},[100,41651,472],{"class":471},[100,41653,40011],{"class":117},[100,41655,2145],{"class":258},[100,41657,32437],{"class":6812},[100,41659,472],{"class":471},[100,41661,1849],{"class":117},[100,41663,2145],{"class":258},[100,41665,32446],{"class":6812},[100,41667,472],{"class":471},[100,41669,1985],{"class":117},[100,41671,39601],{"class":258},[100,41673,41674],{"class":102,"line":11375},[100,41675,39606],{"class":258},[100,41677,41678,41680,41682,41684,41686,41688,41690,41692,41694,41696,41698,41700,41702,41704,41706,41708,41710],{"class":102,"line":11380},[100,41679,39568],{"class":258},[100,41681,32419],{"class":6812},[100,41683,472],{"class":471},[100,41685,40011],{"class":117},[100,41687,2145],{"class":258},[100,41689,32428],{"class":6812},[100,41691,472],{"class":471},[100,41693,40011],{"class":117},[100,41695,2145],{"class":258},[100,41697,32437],{"class":6812},[100,41699,472],{"class":471},[100,41701,1849],{"class":117},[100,41703,2145],{"class":258},[100,41705,32446],{"class":6812},[100,41707,472],{"class":471},[100,41709,1985],{"class":117},[100,41711,39601],{"class":258},[100,41713,41714],{"class":102,"line":11385},[100,41715,39606],{"class":258},[100,41717,41718,41720,41722,41724,41726,41728,41730,41732,41734,41736,41738,41740,41742],{"class":102,"line":11394},[100,41719,39651],{"class":258},[100,41721,32437],{"class":6812},[100,41723,472],{"class":471},[100,41725,465],{"class":117},[100,41727,2145],{"class":258},[100,41729,32492],{"class":6812},[100,41731,472],{"class":471},[100,41733,465],{"class":117},[100,41735,2145],{"class":258},[100,41737,32446],{"class":6812},[100,41739,472],{"class":471},[100,41741,1366],{"class":117},[100,41743,809],{"class":258},[100,41745,41746],{"class":102,"line":11399},[100,41747,39680],{"class":258},[100,41749,41750],{"class":102,"line":11405},[100,41751,40318],{"class":1836},[100,41753,41754,41756,41758,41760],{"class":102,"line":11426},[100,41755,32408],{"class":117},[100,41757,40325],{"class":258},[100,41759,472],{"class":471},[100,41761,39563],{"class":258},[100,41763,41764],{"class":102,"line":11432},[100,41765,40334],{"class":1836},[100,41767,41768],{"class":102,"line":11446},[100,41769,40339],{"class":1836},[100,41771,41772],{"class":102,"line":11452},[100,41773,40344],{"class":258},[100,41775,41776,41778,41780,41782,41784,41786,41788,41790,41792],{"class":102,"line":11479},[100,41777,40349],{"class":258},[100,41779,2136],{"class":117},[100,41781,2222],{"class":471},[100,41783,2136],{"class":117},[100,41785,2222],{"class":471},[100,41787,40011],{"class":117},[100,41789,2145],{"class":258},[100,41791,36425],{"class":117},[100,41793,39601],{"class":258},[100,41795,41796],{"class":102,"line":11488},[100,41797,39606],{"class":258},[100,41799,41800,41802,41804,41806,41808],{"class":102,"line":11494},[100,41801,40349],{"class":258},[100,41803,36425],{"class":117},[100,41805,2145],{"class":258},[100,41807,33627],{"class":117},[100,41809,39601],{"class":258},[100,41811,41812],{"class":102,"line":11502},[100,41813,39606],{"class":258},[100,41815,41816,41818,41820,41822,41824],{"class":102,"line":11507},[100,41817,40349],{"class":258},[100,41819,33627],{"class":117},[100,41821,2145],{"class":258},[100,41823,2213],{"class":117},[100,41825,809],{"class":258},[100,41827,41828],{"class":102,"line":18185},[100,41829,39680],{"class":258},[100,41831,41832],{"class":102,"line":18191},[100,41833,570],{"emptyLinePlaceholder":569},[100,41835,41836],{"class":102,"line":18214},[100,41837,40410],{"class":1836},[100,41839,41840],{"class":102,"line":18220},[100,41841,40415],{"class":1836},[100,41843,41844,41846,41848,41850,41852],{"class":102,"line":18243},[100,41845,5003],{"class":471},[100,41847,40422],{"class":258},[100,41849,854],{"class":471},[100,41851,40427],{"class":117},[100,41853,40430],{"class":258},[100,41855,41856],{"class":102,"line":18257},[100,41857,40435],{"class":1836},[100,41859,41860,41862,41864],{"class":102,"line":18277},[100,41861,6240],{"class":471},[100,41863,40442],{"class":117},[100,41865,40445],{"class":258},[100,41867,41868],{"class":102,"line":18283},[100,41869,40450],{"class":1836},[100,41871,41872,41874,41876,41878,41880],{"class":102,"line":18294},[100,41873,40455],{"class":258},[100,41875,40458],{"class":6812},[100,41877,472],{"class":471},[100,41879,40463],{"class":110},[100,41881,809],{"class":258},[100,41883,41884],{"class":102,"line":18317},[100,41885,40470],{"class":1836},[100,41887,41888,41890,41892,41894,41896,41898],{"class":102,"line":18339},[100,41889,40475],{"class":471},[100,41891,40478],{"class":258},[100,41893,40481],{"class":471},[100,41895,40484],{"class":471},[100,41897,40487],{"class":117},[100,41899,696],{"class":258},[100,41901,41902],{"class":102,"line":18344},[100,41903,40494],{"class":1836},[100,41905,41906,41908,41910],{"class":102,"line":18350},[100,41907,40499],{"class":258},[100,41909,1366],{"class":117},[100,41911,809],{"class":258},[100,41913,41914],{"class":102,"line":18364},[100,41915,40508],{"class":1836},[100,41917,41918,41920,41922],{"class":102,"line":18377},[100,41919,40513],{"class":471},[100,41921,40442],{"class":117},[100,41923,40518],{"class":258},[100,41925,41926],{"class":102,"line":18382},[100,41927,40523],{"class":1836},[100,41929,41930],{"class":102,"line":18396},[100,41931,40528],{"class":1836},[100,41933,41934,41936,41938,41940,41942],{"class":102,"line":18401},[100,41935,40533],{"class":258},[100,41937,1366],{"class":117},[100,41939,2145],{"class":258},[100,41941,40540],{"class":117},[100,41943,809],{"class":258},[100,41945,41946],{"class":102,"line":18407},[100,41947,40547],{"class":1836},[100,41949,41950,41952,41954,41956,41958,41960],{"class":102,"line":18412},[100,41951,40475],{"class":471},[100,41953,40478],{"class":258},[100,41955,40481],{"class":471},[100,41957,40484],{"class":471},[100,41959,40487],{"class":117},[100,41961,696],{"class":258},[100,41963,41964,41966,41968],{"class":102,"line":18426},[100,41965,40499],{"class":258},[100,41967,1366],{"class":117},[100,41969,809],{"class":258},[100,41971,41972],{"class":102,"line":18431},[100,41973,570],{"emptyLinePlaceholder":569},[100,41975,41976],{"class":102,"line":18436},[100,41977,36720],{"class":1836},[100,41979,41980,41982,41984],{"class":102,"line":18450},[100,41981,32364],{"class":471},[100,41983,32656],{"class":106},[100,41985,32659],{"class":258},[100,41987,41988,41990,41992,41994],{"class":102,"line":18462},[100,41989,32664],{"class":258},[100,41991,472],{"class":471},[100,41993,32386],{"class":117},[100,41995,40596],{"class":258},[100,41997,41998,42000,42002,42004],{"class":102,"line":18467},[100,41999,32664],{"class":258},[100,42001,472],{"class":471},[100,42003,32386],{"class":117},[100,42005,40607],{"class":258},[100,42007,42008,42010,42012,42014],{"class":102,"line":18480},[100,42009,32664],{"class":258},[100,42011,472],{"class":471},[100,42013,32386],{"class":117},[100,42015,40618],{"class":258},[100,42017,42018,42020,42022,42024],{"class":102,"line":18485},[100,42019,32664],{"class":258},[100,42021,472],{"class":471},[100,42023,32386],{"class":117},[100,42025,40629],{"class":258},[100,42027,42028,42030,42032,42034],{"class":102,"line":18490},[100,42029,32664],{"class":258},[100,42031,472],{"class":471},[100,42033,32386],{"class":117},[100,42035,40640],{"class":258},[100,42037,42038,42040,42042,42044],{"class":102,"line":18495},[100,42039,32664],{"class":258},[100,42041,472],{"class":471},[100,42043,32386],{"class":117},[100,42045,40651],{"class":258},[100,42047,42048,42050],{"class":102,"line":18508},[100,42049,16333],{"class":471},[100,42051,32772],{"class":258},[100,42053,42054],{"class":102,"line":18513},[100,42055,570],{"emptyLinePlaceholder":569},[100,42057,42058],{"class":102,"line":34189},[100,42059,40666],{"class":1836},[100,42061,42062,42064,42066,42068,42070],{"class":102,"line":34195},[100,42063,958],{"class":471},[100,42065,961],{"class":117},[100,42067,4551],{"class":471},[100,42069,40677],{"class":110},[100,42071,696],{"class":258},[100,42073,42074,42076,42078,42080,42082,42084,42086,42088,42090],{"class":102,"line":34201},[100,42075,32799],{"class":258},[100,42077,472],{"class":471},[100,42079,32016],{"class":258},[100,42081,32806],{"class":110},[100,42083,3325],{"class":471},[100,42085,32811],{"class":258},[100,42087,3322],{"class":471},[100,42089,32041],{"class":110},[100,42091,809],{"class":258},[100,42093,42094,42096],{"class":102,"line":34207},[100,42095,702],{"class":117},[100,42097,32050],{"class":258},[100,42099,42100,42102,42104],{"class":102,"line":34213},[100,42101,32851],{"class":258},[100,42103,472],{"class":471},[100,42105,40714],{"class":258},[100,42107,42108,42110,42112,42114,42116,42118,42120,42122],{"class":102,"line":34224},[100,42109,702],{"class":117},[100,42111,32863],{"class":258},[100,42113,1985],{"class":117},[100,42115,2145],{"class":258},[100,42117,33059],{"class":117},[100,42119,2145],{"class":258},[100,42121,33059],{"class":117},[100,42123,32876],{"class":258},[26,42125,42126],{"start":199},[29,42127,42128],{},"测试代码",[73,42130,42132],{"className":249,"code":42131,"language":251,"meta":79,"style":79},"import torch\nimport torch.utils.data as Data\nfrom torchvision import transforms\n# 导入数据集\nfrom torchvision.datasets import FashionMNIST\nfrom model import VGG16\n\n\n# 测试数据处理\ndef test_data_process():\n    test_data=FashionMNIST(root='.\u002Fdata',\n                           train=False,\n                           transform=transforms.Compose([transforms.Resize(size=224),transforms.ToTensor()]),\n                           download=True)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=VGG16()\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['T-shirt\u002Ftop','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[32,42133,42134,42140,42150,42160,42164,42174,42185,42189,42193,42197,42205,42221,42231,42247,42257,42271,42275,42285,42295,42305,42311,42315,42319,42327,42331,42347,42355,42359,42363,42371,42379,42383,42387,42391,42395,42401,42405,42415,42423,42431,42435,42439,42443,42451,42455,42471,42475,42479,42483,42495,42499,42511,42515,42519,42531,42535,42545,42549,42553,42565,42569,42578,42582,42586,42594,42598,42606,42610,42614,42618,42622,42626,42642,42650,42654,42658,42706,42712,42716,42726,42734,42742,42746,42750,42754,42758,42766,42770,42786,42790,42798,42806],{"__ignoreMap":79},[100,42135,42136,42138],{"class":102,"line":103},[100,42137,548],{"class":471},[100,42139,31961],{"class":258},[100,42141,42142,42144,42146,42148],{"class":102,"line":188},[100,42143,548],{"class":471},[100,42145,32973],{"class":258},[100,42147,561],{"class":471},[100,42149,32978],{"class":258},[100,42151,42152,42154,42156,42158],{"class":102,"line":199},[100,42153,32301],{"class":471},[100,42155,32956],{"class":258},[100,42157,548],{"class":471},[100,42159,32961],{"class":258},[100,42161,42162],{"class":102,"line":532},[100,42163,35477],{"class":1836},[100,42165,42166,42168,42170,42172],{"class":102,"line":577},[100,42167,32301],{"class":471},[100,42169,32929],{"class":258},[100,42171,548],{"class":471},[100,42173,32934],{"class":258},[100,42175,42176,42178,42180,42182],{"class":102,"line":589},[100,42177,32301],{"class":471},[100,42179,33472],{"class":258},[100,42181,548],{"class":471},[100,42183,42184],{"class":117}," VGG16\n",[100,42186,42187],{"class":102,"line":595},[100,42188,570],{"emptyLinePlaceholder":569},[100,42190,42191],{"class":102,"line":601},[100,42192,570],{"emptyLinePlaceholder":569},[100,42194,42195],{"class":102,"line":606},[100,42196,35506],{"class":1836},[100,42198,42199,42201,42203],{"class":102,"line":612},[100,42200,678],{"class":471},[100,42202,35513],{"class":106},[100,42204,33510],{"class":258},[100,42206,42207,42209,42211,42213,42215,42217,42219],{"class":102,"line":618},[100,42208,35520],{"class":258},[100,42210,472],{"class":471},[100,42212,33013],{"class":258},[100,42214,33016],{"class":6812},[100,42216,472],{"class":471},[100,42218,33021],{"class":110},[100,42220,33024],{"class":258},[100,42222,42223,42225,42227,42229],{"class":102,"line":623},[100,42224,35537],{"class":6812},[100,42226,472],{"class":471},[100,42228,35542],{"class":117},[100,42230,33024],{"class":258},[100,42232,42233,42235,42237,42239,42241,42243,42245],{"class":102,"line":629},[100,42234,35549],{"class":6812},[100,42236,472],{"class":471},[100,42238,33051],{"class":258},[100,42240,33054],{"class":6812},[100,42242,472],{"class":471},[100,42244,33059],{"class":117},[100,42246,33062],{"class":258},[100,42248,42249,42251,42253,42255],{"class":102,"line":635},[100,42250,35566],{"class":6812},[100,42252,472],{"class":471},[100,42254,33034],{"class":117},[100,42256,809],{"class":258},[100,42258,42259,42261,42263,42265,42267,42269],{"class":102,"line":641},[100,42260,35577],{"class":258},[100,42262,472],{"class":471},[100,42264,33092],{"class":258},[100,42266,33095],{"class":6812},[100,42268,472],{"class":471},[100,42270,35588],{"class":258},[100,42272,42273],{"class":102,"line":647},[100,42274,35593],{"class":1836},[100,42276,42277,42279,42281,42283],{"class":102,"line":653},[100,42278,35598],{"class":6812},[100,42280,472],{"class":471},[100,42282,1985],{"class":117},[100,42284,33024],{"class":258},[100,42286,42287,42289,42291,42293],{"class":102,"line":659},[100,42288,35609],{"class":6812},[100,42290,472],{"class":471},[100,42292,33034],{"class":117},[100,42294,33024],{"class":258},[100,42296,42297,42299,42301,42303],{"class":102,"line":665},[100,42298,35620],{"class":6812},[100,42300,472],{"class":471},[100,42302,1366],{"class":117},[100,42304,809],{"class":258},[100,42306,42307,42309],{"class":102,"line":670},[100,42308,5689],{"class":471},[100,42310,35633],{"class":258},[100,42312,42313],{"class":102,"line":675},[100,42314,570],{"emptyLinePlaceholder":569},[100,42316,42317],{"class":102,"line":699},[100,42318,35642],{"class":1836},[100,42320,42321,42323,42325],{"class":102,"line":708},[100,42322,678],{"class":471},[100,42324,35649],{"class":106},[100,42326,35652],{"class":258},[100,42328,42329],{"class":102,"line":722},[100,42330,35657],{"class":1836},[100,42332,42333,42335,42337,42339,42341,42343,42345],{"class":102,"line":735},[100,42334,32799],{"class":258},[100,42336,472],{"class":471},[100,42338,32806],{"class":110},[100,42340,3325],{"class":471},[100,42342,32811],{"class":258},[100,42344,3322],{"class":471},[100,42346,35674],{"class":110},[100,42348,42349,42351,42353],{"class":102,"line":754},[100,42350,32851],{"class":258},[100,42352,472],{"class":471},[100,42354,33846],{"class":258},[100,42356,42357],{"class":102,"line":771},[100,42358,570],{"emptyLinePlaceholder":569},[100,42360,42361],{"class":102,"line":776},[100,42362,35691],{"class":1836},[100,42364,42365,42367,42369],{"class":102,"line":781},[100,42366,35696],{"class":258},[100,42368,472],{"class":471},[100,42370,33899],{"class":117},[100,42372,42373,42375,42377],{"class":102,"line":796},[100,42374,35705],{"class":258},[100,42376,472],{"class":471},[100,42378,4686],{"class":117},[100,42380,42381],{"class":102,"line":812},[100,42382,570],{"emptyLinePlaceholder":569},[100,42384,42385],{"class":102,"line":823},[100,42386,35718],{"class":1836},[100,42388,42389],{"class":102,"line":828},[100,42390,35723],{"class":1836},[100,42392,42393],{"class":102,"line":840},[100,42394,35728],{"class":1836},[100,42396,42397,42399],{"class":102,"line":845},[100,42398,35733],{"class":471},[100,42400,34440],{"class":258},[100,42402,42403],{"class":102,"line":868},[100,42404,35740],{"class":1836},[100,42406,42407,42409,42411,42413],{"class":102,"line":874},[100,42408,5003],{"class":471},[100,42410,35747],{"class":258},[100,42412,854],{"class":471},[100,42414,35752],{"class":258},[100,42416,42417,42419,42421],{"class":102,"line":879},[100,42418,35757],{"class":258},[100,42420,472],{"class":471},[100,42422,35762],{"class":258},[100,42424,42425,42427,42429],{"class":102,"line":889},[100,42426,35767],{"class":258},[100,42428,472],{"class":471},[100,42430,35772],{"class":258},[100,42432,42433],{"class":102,"line":894},[100,42434,35777],{"class":1836},[100,42436,42437],{"class":102,"line":900},[100,42438,34431],{"class":258},[100,42440,42441],{"class":102,"line":910},[100,42442,35786],{"class":1836},[100,42444,42445,42447,42449],{"class":102,"line":915},[100,42446,34216],{"class":258},[100,42448,472],{"class":471},[100,42450,35795],{"class":258},[100,42452,42453],{"class":102,"line":929},[100,42454,35800],{"class":1836},[100,42456,42457,42459,42461,42463,42465,42467,42469],{"class":102,"line":935},[100,42458,34233],{"class":258},[100,42460,472],{"class":471},[100,42462,34238],{"class":258},[100,42464,34241],{"class":6812},[100,42466,472],{"class":471},[100,42468,1985],{"class":117},[100,42470,809],{"class":258},[100,42472,42473],{"class":102,"line":945},[100,42474,35821],{"class":1836},[100,42476,42477],{"class":102,"line":950},[100,42478,35826],{"class":1836},[100,42480,42481],{"class":102,"line":955},[100,42482,35831],{"class":1836},[100,42484,42485,42487,42489,42491,42493],{"class":102,"line":972},[100,42486,35836],{"class":258},[100,42488,11062],{"class":471},[100,42490,34343],{"class":258},[100,42492,4551],{"class":471},[100,42494,35845],{"class":258},[100,42496,42497],{"class":102,"line":11370},[100,42498,35850],{"class":1836},[100,42500,42501,42503,42505,42507,42509],{"class":102,"line":11375},[100,42502,35855],{"class":258},[100,42504,11062],{"class":471},[100,42506,35860],{"class":258},[100,42508,1366],{"class":117},[100,42510,809],{"class":258},[100,42512,42513],{"class":102,"line":11380},[100,42514,570],{"emptyLinePlaceholder":569},[100,42516,42517],{"class":102,"line":11385},[100,42518,35873],{"class":1836},[100,42520,42521,42523,42525,42527,42529],{"class":102,"line":11394},[100,42522,35878],{"class":258},[100,42524,472],{"class":471},[100,42526,35883],{"class":258},[100,42528,2351],{"class":471},[100,42530,35888],{"class":258},[100,42532,42533],{"class":102,"line":11399},[100,42534,35893],{"class":1836},[100,42536,42537,42539,42541,42543],{"class":102,"line":11405},[100,42538,34007],{"class":117},[100,42540,713],{"class":258},[100,42542,35902],{"class":110},[100,42544,35905],{"class":258},[100,42546,42547],{"class":102,"line":11426},[100,42548,570],{"emptyLinePlaceholder":569},[100,42550,42551],{"class":102,"line":11432},[100,42552,35914],{"class":1836},[100,42554,42555,42557,42559,42561,42563],{"class":102,"line":11446},[100,42556,958],{"class":471},[100,42558,961],{"class":117},[100,42560,4551],{"class":471},[100,42562,32787],{"class":110},[100,42564,696],{"class":258},[100,42566,42567],{"class":102,"line":11452},[100,42568,35931],{"class":1836},[100,42570,42571,42573,42575],{"class":102,"line":11479},[100,42572,32851],{"class":258},[100,42574,472],{"class":471},[100,42576,42577],{"class":258},"VGG16()\n",[100,42579,42580],{"class":102,"line":11488},[100,42581,35944],{"class":1836},[100,42583,42584],{"class":102,"line":11494},[100,42585,35949],{"class":1836},[100,42587,42588,42590,42592],{"class":102,"line":11502},[100,42589,35954],{"class":258},[100,42591,35957],{"class":110},[100,42593,751],{"class":258},[100,42595,42596],{"class":102,"line":11507},[100,42597,35964],{"class":1836},[100,42599,42600,42602,42604],{"class":102,"line":18185},[100,42601,35577],{"class":258},[100,42603,472],{"class":471},[100,42605,35973],{"class":258},[100,42607,42608],{"class":102,"line":18191},[100,42609,35978],{"class":1836},[100,42611,42612],{"class":102,"line":18214},[100,42613,35983],{"class":258},[100,42615,42616],{"class":102,"line":18220},[100,42617,570],{"emptyLinePlaceholder":569},[100,42619,42620],{"class":102,"line":18243},[100,42621,35992],{"class":1836},[100,42623,42624],{"class":102,"line":18257},[100,42625,35997],{"class":1836},[100,42627,42628,42630,42632,42634,42636,42638,42640],{"class":102,"line":18277},[100,42629,32799],{"class":258},[100,42631,472],{"class":471},[100,42633,32806],{"class":110},[100,42635,3325],{"class":471},[100,42637,32811],{"class":258},[100,42639,3322],{"class":471},[100,42641,35674],{"class":110},[100,42643,42644,42646,42648],{"class":102,"line":18283},[100,42645,32851],{"class":258},[100,42647,472],{"class":471},[100,42649,33846],{"class":258},[100,42651,42652],{"class":102,"line":18294},[100,42653,36026],{"class":1836},[100,42655,42656],{"class":102,"line":18317},[100,42657,36031],{"class":1836},[100,42659,42660,42662,42664,42666,42668,42670,42672,42674,42676,42678,42680,42682,42684,42686,42688,42690,42692,42694,42696,42698,42700,42702,42704],{"class":102,"line":18339},[100,42661,36036],{"class":258},[100,42663,472],{"class":471},[100,42665,2656],{"class":258},[100,42667,36043],{"class":110},[100,42669,2145],{"class":258},[100,42671,36048],{"class":110},[100,42673,2145],{"class":258},[100,42675,36053],{"class":110},[100,42677,2145],{"class":258},[100,42679,36058],{"class":110},[100,42681,2145],{"class":258},[100,42683,36063],{"class":110},[100,42685,2145],{"class":258},[100,42687,36068],{"class":110},[100,42689,2145],{"class":258},[100,42691,36073],{"class":110},[100,42693,2145],{"class":258},[100,42695,36078],{"class":110},[100,42697,2145],{"class":258},[100,42699,36083],{"class":110},[100,42701,2145],{"class":258},[100,42703,36088],{"class":110},[100,42705,34802],{"class":258},[100,42707,42708,42710],{"class":102,"line":18344},[100,42709,35733],{"class":471},[100,42711,34440],{"class":258},[100,42713,42714],{"class":102,"line":18350},[100,42715,36101],{"class":1836},[100,42717,42718,42720,42722,42724],{"class":102,"line":18364},[100,42719,5003],{"class":471},[100,42721,36108],{"class":258},[100,42723,854],{"class":471},[100,42725,35752],{"class":258},[100,42727,42728,42730,42732],{"class":102,"line":18377},[100,42729,34166],{"class":258},[100,42731,472],{"class":471},[100,42733,34171],{"class":258},[100,42735,42736,42738,42740],{"class":102,"line":18382},[100,42737,34181],{"class":258},[100,42739,472],{"class":471},[100,42741,34186],{"class":258},[100,42743,42744],{"class":102,"line":18396},[100,42745,570],{"emptyLinePlaceholder":569},[100,42747,42748],{"class":102,"line":18401},[100,42749,36137],{"class":1836},[100,42751,42752],{"class":102,"line":18407},[100,42753,34431],{"class":258},[100,42755,42756],{"class":102,"line":18412},[100,42757,36146],{"class":1836},[100,42759,42760,42762,42764],{"class":102,"line":18426},[100,42761,34216],{"class":258},[100,42763,472],{"class":471},[100,42765,34221],{"class":258},[100,42767,42768],{"class":102,"line":18431},[100,42769,36159],{"class":1836},[100,42771,42772,42774,42776,42778,42780,42782,42784],{"class":102,"line":18436},[100,42773,34233],{"class":258},[100,42775,472],{"class":471},[100,42777,34238],{"class":258},[100,42779,34241],{"class":6812},[100,42781,472],{"class":471},[100,42783,1985],{"class":117},[100,42785,809],{"class":258},[100,42787,42788],{"class":102,"line":18450},[100,42789,36180],{"class":1836},[100,42791,42792,42794,42796],{"class":102,"line":18462},[100,42793,36185],{"class":258},[100,42795,472],{"class":471},[100,42797,36190],{"class":258},[100,42799,42800,42802,42804],{"class":102,"line":18467},[100,42801,36195],{"class":258},[100,42803,472],{"class":471},[100,42805,36200],{"class":258},[100,42807,42808,42810,42812,42814,42816,42818,42820,42822],{"class":102,"line":18480},[100,42809,36205],{"class":117},[100,42811,713],{"class":258},[100,42813,36210],{"class":110},[100,42815,36213],{"class":258},[100,42817,36216],{"class":110},[100,42819,2145],{"class":258},[100,42821,36221],{"class":110},[100,42823,36224],{"class":258},[305,42825,42827],{"id":42826},"_23googlenet","2.3.GoogLeNet",[23579,42829,42831],{"id":42830},"_231原理","2.3.1.原理",[26,42833,42834],{},[29,42835,42836],{},"网络结构",[19,42838,42839],{},[3095,42840],{"alt":79,"src":42841},"\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,42843,42844],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,42846,42847],{},[3095,42848],{"alt":79,"src":42849},"\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,42851,42852],{},[3095,42853],{"alt":79,"src":42854},"\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,42856,42857],{},[3095,42858],{"alt":79,"src":42859},"\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,42861,42862],{"start":188},[29,42863,42864],{},"1x1卷积的优点",[19,42866,42867],{},[3095,42868],{"alt":79,"src":42869},"\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,42871,42872],{"start":199},[29,42873,42874],{},"全局平均池化层优点",[19,42876,42877],{},[3095,42878],{"alt":79,"src":42879},"\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,42881,42882],{},[3095,42883],{"alt":79,"src":42884},"\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,42886,42887],{"start":532},[29,42888,42889],{},"参数详细描述",[19,42891,42892],{},[3095,42893],{"alt":79,"src":42894},"\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,42896,42897],{},[3095,42898],{"alt":79,"src":42899},"\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,42901,42902],{},[3095,42903],{"alt":79,"src":42904},"\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,42906,42907],{},[3095,42908],{"alt":79,"src":42909},"\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,42911,42912],{},[3095,42913],{"alt":79,"src":42914},"\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,42916,42917],{},[3095,42918],{"alt":79,"src":42919},"\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,42921,42922],{},[3095,42923],{"alt":79,"src":42924},"\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,42926,42927],{},[3095,42928],{"alt":79,"src":42929},"\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,42931,42932],{},[3095,42933],{"alt":79,"src":42934},"\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,42936,42937],{},[3095,42938],{"alt":79,"src":42939},"\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,42941,42942],{},[3095,42943],{"alt":79,"src":42944},"\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,42946,42947],{},[3095,42948],{"alt":79,"src":42949},"\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,42951,42952],{},[3095,42953],{"alt":79,"src":42954},"\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,42956,42957],{},[3095,42958],{"alt":79,"src":42959},"\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,42961,42962],{},[3095,42963],{"alt":79,"src":42964},"\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,42966,42967],{},[3095,42968],{"alt":79,"src":42969},"\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,42971,42972],{},[3095,42973],{"alt":79,"src":42974},"\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,42976,42977],{},[3095,42978],{"alt":79,"src":42979},"\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,42981,42982],{},[3095,42983],{"alt":79,"src":42984},"\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,42986,42987],{},[3095,42988],{"alt":79,"src":42989},"\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,42991,42992],{},[3095,42993],{"alt":79,"src":42994},"\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",[23579,42996,42998],{"id":42997},"_232代码实现","2.3.2.代码实现",[26,43000,43001],{},[29,43002,32275],{},[19,43004,43005],{},"根据原理一步一步搭建即可",[73,43007,43009],{"className":249,"code":43008,"language":251,"meta":79,"style":79},"import torch\nfrom torch import nn\nfrom torchsummary import summary\n\nclass Inception(nn.Module):\n    def __init__(self,in_channels,c1,c2,c3,c4):\n        super(Inception,self).__init__()\n        self.ReLu=nn.ReLU()\n        # 路线1：定义1*1卷积\n        self.p1_1=nn.Conv2d(in_channels=in_channels,out_channels=c1,kernel_size=1)\n        # 路线2：定义1*1卷积和3*3\n        self.p2_1=nn.Conv2d(in_channels=in_channels,out_channels=c2[0],kernel_size=1)\n        self.p2_2=nn.Conv2d(in_channels=c2[0],out_channels=c2[1],kernel_size=3,padding=1)\n        # 路线3：定义1*1卷积和5*5\n        self.p3_1=nn.Conv2d(in_channels=in_channels,out_channels=c3[0],kernel_size=1)\n        self.p3_2=nn.Conv2d(in_channels=c3[0],out_channels=c3[1],kernel_size=5,padding=2)\n        # 路线4：定义3*3最大池化和1*1卷积\n        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n        self.p4_1=nn.MaxPool2d(kernel_size=3,stride=1,padding=1)\n        self.p4_2=nn.Conv2d(in_channels=in_channels,out_channels=c4,kernel_size=1)\n\n    def forward(self,x):\n        p1=self.ReLu(self.p1_1(x))\n        p2=self.ReLu(self.p2_2(self.ReLu(self.p2_1(x))))\n        p3=self.ReLu(self.p3_2(self.ReLu(self.p3_1(x))))\n        p4=self.ReLu(self.p4_2(self.p4_1(x)))\n        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n        return torch.cat((p1,p2,p3,p4),dim=1)\n\n\n# 搭建GoogLeNet网络\nclass GoogLeNet(nn.Module):\n    # 必须把Inception导入到里边\n    def __init__(self,Inception):\n        super(GoogLeNet,self).__init__()\n        self.b1=nn.Sequential(\n            nn.Conv2d(in_channels=1,out_channels=64,kernel_size=7,stride=2,padding=3),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b2=nn.Sequential(\n            nn.Conv2d(in_channels=64,out_channels=64,kernel_size=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=64,out_channels=192,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b3=nn.Sequential(\n            Inception(192,64,(96,128),(16,32),32),\n            Inception(256,128,(128,192),(32,96),64),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b4=nn.Sequential(\n            Inception(480,192,(96,208),(16,48),64),\n            Inception(512,160,(112,224),(24,64),64),\n            Inception(512,128,(128,256),(24,64),64),\n            Inception(512,112,(128,288),(32,64),64),\n            Inception(528,256,(160,320),(32,128),128),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b5=nn.Sequential(\n            Inception(832,256,(160,320),(32,128),128),\n            Inception(832,384,(192,384),(48,128),128),\n            nn.AdaptiveAvgPool2d((1,1)),\n            nn.Flatten(),\n            nn.Linear(1024,10)\n        )\n        # 对模型参数初始化\n        for m in self.modules():\n            if isinstance(m,nn.Conv2d):\n                nn.init.kaiming_normal_(m.weight,mode='fan_out',nonlinearity='relu')\n                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n                # ② mode = 'fan_out'决定使用的fan值：\n                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n                if m.bias is not None:\n                    nn.init.constant_(m.bias,0)\n                elif isinstance(m,nn.Linear):\n                    nn.init.normal_(m.weight,0,0.01)\n                    if m.bias is not None:\n                        nn.init.constant_(m.bias,0)\n    # 定义前向传播\n    def forward(self,x):\n        x=self.b1(x)\n        x=self.b2(x)\n        x=self.b3(x)\n        x=self.b4(x)\n        x=self.b5(x)\n        return x\n\n# 模型展示\nif __name__==\"__main__\":\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    model=GoogLeNet(Inception).to(device)\n    print(summary(model,(1,224,224)))\n",[32,43010,43011,43017,43027,43037,43041,43058,43067,43082,43092,43097,43130,43135,43172,43219,43224,43260,43307,43312,43317,43352,43384,43388,43396,43412,43436,43461,43482,43487,43502,43506,43510,43515,43532,43537,43546,43561,43572,43616,43620,43648,43652,43663,43691,43695,43732,43736,43764,43768,43779,43815,43847,43875,43879,43890,43924,43956,43988,44021,44055,44083,44087,44098,44131,44163,44177,44181,44194,44198,44203,44215,44223,44245,44250,44255,44260,44265,44270,44275,44289,44297,44306,44319,44334,44343,44347,44355,44366,44377,44388,44399,44410,44416,44420,44425,44437,44457,44466],{"__ignoreMap":79},[100,43012,43013,43015],{"class":102,"line":103},[100,43014,548],{"class":471},[100,43016,31961],{"class":258},[100,43018,43019,43021,43023,43025],{"class":102,"line":188},[100,43020,32301],{"class":471},[100,43022,32304],{"class":258},[100,43024,548],{"class":471},[100,43026,32309],{"class":258},[100,43028,43029,43031,43033,43035],{"class":102,"line":199},[100,43030,32301],{"class":471},[100,43032,32321],{"class":258},[100,43034,548],{"class":471},[100,43036,32326],{"class":258},[100,43038,43039],{"class":102,"line":532},[100,43040,570],{"emptyLinePlaceholder":569},[100,43042,43043,43045,43048,43050,43052,43054,43056],{"class":102,"line":577},[100,43044,16275],{"class":471},[100,43046,43047],{"class":106}," Inception",[100,43049,713],{"class":258},[100,43051,32342],{"class":106},[100,43053,2325],{"class":258},[100,43055,32347],{"class":106},[100,43057,865],{"class":258},[100,43059,43060,43062,43064],{"class":102,"line":589},[100,43061,32364],{"class":471},[100,43063,32367],{"class":117},[100,43065,43066],{"class":258},"(self,in_channels,c1,c2,c3,c4):\n",[100,43068,43069,43071,43074,43076,43078,43080],{"class":102,"line":595},[100,43070,32380],{"class":117},[100,43072,43073],{"class":258},"(Inception,",[100,43075,32386],{"class":117},[100,43077,32389],{"class":258},[100,43079,32392],{"class":117},[100,43081,3587],{"class":258},[100,43083,43084,43086,43088,43090],{"class":102,"line":601},[100,43085,32408],{"class":117},[100,43087,36326],{"class":258},[100,43089,472],{"class":471},[100,43091,36331],{"class":258},[100,43093,43094],{"class":102,"line":606},[100,43095,43096],{"class":1836},"        # 路线1：定义1*1卷积\n",[100,43098,43099,43101,43104,43106,43108,43110,43112,43115,43117,43119,43122,43124,43126,43128],{"class":102,"line":612},[100,43100,32408],{"class":117},[100,43102,43103],{"class":258},".p1_1",[100,43105,472],{"class":471},[100,43107,32416],{"class":258},[100,43109,32419],{"class":6812},[100,43111,472],{"class":471},[100,43113,43114],{"class":258},"in_channels,",[100,43116,32428],{"class":6812},[100,43118,472],{"class":471},[100,43120,43121],{"class":258},"c1,",[100,43123,32437],{"class":6812},[100,43125,472],{"class":471},[100,43127,1985],{"class":117},[100,43129,809],{"class":258},[100,43131,43132],{"class":102,"line":618},[100,43133,43134],{"class":1836},"        # 路线2：定义1*1卷积和3*3\n",[100,43136,43137,43139,43142,43144,43146,43148,43150,43152,43154,43156,43159,43161,43164,43166,43168,43170],{"class":102,"line":623},[100,43138,32408],{"class":117},[100,43140,43141],{"class":258},".p2_1",[100,43143,472],{"class":471},[100,43145,32416],{"class":258},[100,43147,32419],{"class":6812},[100,43149,472],{"class":471},[100,43151,43114],{"class":258},[100,43153,32428],{"class":6812},[100,43155,472],{"class":471},[100,43157,43158],{"class":258},"c2[",[100,43160,1366],{"class":117},[100,43162,43163],{"class":258},"],",[100,43165,32437],{"class":6812},[100,43167,472],{"class":471},[100,43169,1985],{"class":117},[100,43171,809],{"class":258},[100,43173,43174,43176,43179,43181,43183,43185,43187,43189,43191,43193,43195,43197,43199,43201,43203,43205,43207,43209,43211,43213,43215,43217],{"class":102,"line":629},[100,43175,32408],{"class":117},[100,43177,43178],{"class":258},".p2_2",[100,43180,472],{"class":471},[100,43182,32416],{"class":258},[100,43184,32419],{"class":6812},[100,43186,472],{"class":471},[100,43188,43158],{"class":258},[100,43190,1366],{"class":117},[100,43192,43163],{"class":258},[100,43194,32428],{"class":6812},[100,43196,472],{"class":471},[100,43198,43158],{"class":258},[100,43200,1985],{"class":117},[100,43202,43163],{"class":258},[100,43204,32437],{"class":6812},[100,43206,472],{"class":471},[100,43208,1849],{"class":117},[100,43210,2145],{"class":258},[100,43212,32446],{"class":6812},[100,43214,472],{"class":471},[100,43216,1985],{"class":117},[100,43218,809],{"class":258},[100,43220,43221],{"class":102,"line":635},[100,43222,43223],{"class":1836},"        # 路线3：定义1*1卷积和5*5\n",[100,43225,43226,43228,43231,43233,43235,43237,43239,43241,43243,43245,43248,43250,43252,43254,43256,43258],{"class":102,"line":641},[100,43227,32408],{"class":117},[100,43229,43230],{"class":258},".p3_1",[100,43232,472],{"class":471},[100,43234,32416],{"class":258},[100,43236,32419],{"class":6812},[100,43238,472],{"class":471},[100,43240,43114],{"class":258},[100,43242,32428],{"class":6812},[100,43244,472],{"class":471},[100,43246,43247],{"class":258},"c3[",[100,43249,1366],{"class":117},[100,43251,43163],{"class":258},[100,43253,32437],{"class":6812},[100,43255,472],{"class":471},[100,43257,1985],{"class":117},[100,43259,809],{"class":258},[100,43261,43262,43264,43267,43269,43271,43273,43275,43277,43279,43281,43283,43285,43287,43289,43291,43293,43295,43297,43299,43301,43303,43305],{"class":102,"line":647},[100,43263,32408],{"class":117},[100,43265,43266],{"class":258},".p3_2",[100,43268,472],{"class":471},[100,43270,32416],{"class":258},[100,43272,32419],{"class":6812},[100,43274,472],{"class":471},[100,43276,43247],{"class":258},[100,43278,1366],{"class":117},[100,43280,43163],{"class":258},[100,43282,32428],{"class":6812},[100,43284,472],{"class":471},[100,43286,43247],{"class":258},[100,43288,1985],{"class":117},[100,43290,43163],{"class":258},[100,43292,32437],{"class":6812},[100,43294,472],{"class":471},[100,43296,2086],{"class":117},[100,43298,2145],{"class":258},[100,43300,32446],{"class":6812},[100,43302,472],{"class":471},[100,43304,465],{"class":117},[100,43306,809],{"class":258},[100,43308,43309],{"class":102,"line":653},[100,43310,43311],{"class":1836},"        # 路线4：定义3*3最大池化和1*1卷积\n",[100,43313,43314],{"class":102,"line":659},[100,43315,43316],{"class":1836},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[100,43318,43319,43321,43324,43326,43328,43330,43332,43334,43336,43338,43340,43342,43344,43346,43348,43350],{"class":102,"line":665},[100,43320,32408],{"class":117},[100,43322,43323],{"class":258},".p4_1",[100,43325,472],{"class":471},[100,43327,36384],{"class":258},[100,43329,32437],{"class":6812},[100,43331,472],{"class":471},[100,43333,1849],{"class":117},[100,43335,2145],{"class":258},[100,43337,32492],{"class":6812},[100,43339,472],{"class":471},[100,43341,1985],{"class":117},[100,43343,2145],{"class":258},[100,43345,32446],{"class":6812},[100,43347,472],{"class":471},[100,43349,1985],{"class":117},[100,43351,809],{"class":258},[100,43353,43354,43356,43359,43361,43363,43365,43367,43369,43371,43373,43376,43378,43380,43382],{"class":102,"line":670},[100,43355,32408],{"class":117},[100,43357,43358],{"class":258},".p4_2",[100,43360,472],{"class":471},[100,43362,32416],{"class":258},[100,43364,32419],{"class":6812},[100,43366,472],{"class":471},[100,43368,43114],{"class":258},[100,43370,32428],{"class":6812},[100,43372,472],{"class":471},[100,43374,43375],{"class":258},"c4,",[100,43377,32437],{"class":6812},[100,43379,472],{"class":471},[100,43381,1985],{"class":117},[100,43383,809],{"class":258},[100,43385,43386],{"class":102,"line":675},[100,43387,570],{"emptyLinePlaceholder":569},[100,43389,43390,43392,43394],{"class":102,"line":699},[100,43391,32364],{"class":471},[100,43393,32656],{"class":106},[100,43395,32659],{"class":258},[100,43397,43398,43401,43403,43405,43407,43409],{"class":102,"line":708},[100,43399,43400],{"class":258},"        p1",[100,43402,472],{"class":471},[100,43404,32386],{"class":117},[100,43406,36739],{"class":258},[100,43408,32386],{"class":117},[100,43410,43411],{"class":258},".p1_1(x))\n",[100,43413,43414,43416,43418,43420,43422,43424,43427,43429,43431,43433],{"class":102,"line":722},[100,43415,8681],{"class":258},[100,43417,472],{"class":471},[100,43419,32386],{"class":117},[100,43421,36739],{"class":258},[100,43423,32386],{"class":117},[100,43425,43426],{"class":258},".p2_2(",[100,43428,32386],{"class":117},[100,43430,36739],{"class":258},[100,43432,32386],{"class":117},[100,43434,43435],{"class":258},".p2_1(x))))\n",[100,43437,43438,43441,43443,43445,43447,43449,43452,43454,43456,43458],{"class":102,"line":735},[100,43439,43440],{"class":258},"        p3",[100,43442,472],{"class":471},[100,43444,32386],{"class":117},[100,43446,36739],{"class":258},[100,43448,32386],{"class":117},[100,43450,43451],{"class":258},".p3_2(",[100,43453,32386],{"class":117},[100,43455,36739],{"class":258},[100,43457,32386],{"class":117},[100,43459,43460],{"class":258},".p3_1(x))))\n",[100,43462,43463,43466,43468,43470,43472,43474,43477,43479],{"class":102,"line":754},[100,43464,43465],{"class":258},"        p4",[100,43467,472],{"class":471},[100,43469,32386],{"class":117},[100,43471,36739],{"class":258},[100,43473,32386],{"class":117},[100,43475,43476],{"class":258},".p4_2(",[100,43478,32386],{"class":117},[100,43480,43481],{"class":258},".p4_1(x)))\n",[100,43483,43484],{"class":102,"line":771},[100,43485,43486],{"class":1836},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[100,43488,43489,43491,43494,43496,43498,43500],{"class":102,"line":776},[100,43490,16333],{"class":471},[100,43492,43493],{"class":258}," torch.cat((p1,p2,p3,p4),",[100,43495,34241],{"class":6812},[100,43497,472],{"class":471},[100,43499,1985],{"class":117},[100,43501,809],{"class":258},[100,43503,43504],{"class":102,"line":781},[100,43505,570],{"emptyLinePlaceholder":569},[100,43507,43508],{"class":102,"line":796},[100,43509,570],{"emptyLinePlaceholder":569},[100,43511,43512],{"class":102,"line":812},[100,43513,43514],{"class":1836},"# 搭建GoogLeNet网络\n",[100,43516,43517,43519,43522,43524,43526,43528,43530],{"class":102,"line":823},[100,43518,16275],{"class":471},[100,43520,43521],{"class":106}," GoogLeNet",[100,43523,713],{"class":258},[100,43525,32342],{"class":106},[100,43527,2325],{"class":258},[100,43529,32347],{"class":106},[100,43531,865],{"class":258},[100,43533,43534],{"class":102,"line":828},[100,43535,43536],{"class":1836},"    # 必须把Inception导入到里边\n",[100,43538,43539,43541,43543],{"class":102,"line":840},[100,43540,32364],{"class":471},[100,43542,32367],{"class":117},[100,43544,43545],{"class":258},"(self,Inception):\n",[100,43547,43548,43550,43553,43555,43557,43559],{"class":102,"line":845},[100,43549,32380],{"class":117},[100,43551,43552],{"class":258},"(GoogLeNet,",[100,43554,32386],{"class":117},[100,43556,32389],{"class":258},[100,43558,32392],{"class":117},[100,43560,3587],{"class":258},[100,43562,43563,43565,43568,43570],{"class":102,"line":868},[100,43564,32408],{"class":117},[100,43566,43567],{"class":258},".b1",[100,43569,472],{"class":471},[100,43571,39563],{"class":258},[100,43573,43574,43576,43578,43580,43582,43584,43586,43588,43590,43592,43594,43596,43598,43600,43602,43604,43606,43608,43610,43612,43614],{"class":102,"line":874},[100,43575,39568],{"class":258},[100,43577,32419],{"class":6812},[100,43579,472],{"class":471},[100,43581,1985],{"class":117},[100,43583,2145],{"class":258},[100,43585,32428],{"class":6812},[100,43587,472],{"class":471},[100,43589,1972],{"class":117},[100,43591,2145],{"class":258},[100,43593,32437],{"class":6812},[100,43595,472],{"class":471},[100,43597,2136],{"class":117},[100,43599,2145],{"class":258},[100,43601,32492],{"class":6812},[100,43603,472],{"class":471},[100,43605,465],{"class":117},[100,43607,2145],{"class":258},[100,43609,32446],{"class":6812},[100,43611,472],{"class":471},[100,43613,1849],{"class":117},[100,43615,39601],{"class":258},[100,43617,43618],{"class":102,"line":879},[100,43619,39606],{"class":258},[100,43621,43622,43624,43626,43628,43630,43632,43634,43636,43638,43640,43642,43644,43646],{"class":102,"line":889},[100,43623,39651],{"class":258},[100,43625,32437],{"class":6812},[100,43627,472],{"class":471},[100,43629,1849],{"class":117},[100,43631,2145],{"class":258},[100,43633,32492],{"class":6812},[100,43635,472],{"class":471},[100,43637,465],{"class":117},[100,43639,2145],{"class":258},[100,43641,32446],{"class":6812},[100,43643,472],{"class":471},[100,43645,1985],{"class":117},[100,43647,809],{"class":258},[100,43649,43650],{"class":102,"line":894},[100,43651,39680],{"class":258},[100,43653,43654,43656,43659,43661],{"class":102,"line":900},[100,43655,32408],{"class":117},[100,43657,43658],{"class":258},".b2",[100,43660,472],{"class":471},[100,43662,39563],{"class":258},[100,43664,43665,43667,43669,43671,43673,43675,43677,43679,43681,43683,43685,43687,43689],{"class":102,"line":910},[100,43666,39568],{"class":258},[100,43668,32419],{"class":6812},[100,43670,472],{"class":471},[100,43672,1972],{"class":117},[100,43674,2145],{"class":258},[100,43676,32428],{"class":6812},[100,43678,472],{"class":471},[100,43680,1972],{"class":117},[100,43682,2145],{"class":258},[100,43684,32437],{"class":6812},[100,43686,472],{"class":471},[100,43688,1985],{"class":117},[100,43690,39601],{"class":258},[100,43692,43693],{"class":102,"line":915},[100,43694,39606],{"class":258},[100,43696,43697,43699,43701,43703,43705,43707,43709,43711,43714,43716,43718,43720,43722,43724,43726,43728,43730],{"class":102,"line":929},[100,43698,39568],{"class":258},[100,43700,32419],{"class":6812},[100,43702,472],{"class":471},[100,43704,1972],{"class":117},[100,43706,2145],{"class":258},[100,43708,32428],{"class":6812},[100,43710,472],{"class":471},[100,43712,43713],{"class":117},"192",[100,43715,2145],{"class":258},[100,43717,32437],{"class":6812},[100,43719,472],{"class":471},[100,43721,1849],{"class":117},[100,43723,2145],{"class":258},[100,43725,32446],{"class":6812},[100,43727,472],{"class":471},[100,43729,1985],{"class":117},[100,43731,39601],{"class":258},[100,43733,43734],{"class":102,"line":935},[100,43735,39606],{"class":258},[100,43737,43738,43740,43742,43744,43746,43748,43750,43752,43754,43756,43758,43760,43762],{"class":102,"line":945},[100,43739,39651],{"class":258},[100,43741,32437],{"class":6812},[100,43743,472],{"class":471},[100,43745,1849],{"class":117},[100,43747,2145],{"class":258},[100,43749,32492],{"class":6812},[100,43751,472],{"class":471},[100,43753,465],{"class":117},[100,43755,2145],{"class":258},[100,43757,32446],{"class":6812},[100,43759,472],{"class":471},[100,43761,1985],{"class":117},[100,43763,809],{"class":258},[100,43765,43766],{"class":102,"line":950},[100,43767,39680],{"class":258},[100,43769,43770,43772,43775,43777],{"class":102,"line":955},[100,43771,32408],{"class":117},[100,43773,43774],{"class":258},".b3",[100,43776,472],{"class":471},[100,43778,39563],{"class":258},[100,43780,43781,43784,43786,43788,43790,43793,43795,43797,43799,43802,43804,43806,43808,43811,43813],{"class":102,"line":972},[100,43782,43783],{"class":258},"            Inception(",[100,43785,43713],{"class":117},[100,43787,2145],{"class":258},[100,43789,1972],{"class":117},[100,43791,43792],{"class":258},",(",[100,43794,1978],{"class":117},[100,43796,2145],{"class":258},[100,43798,33627],{"class":117},[100,43800,43801],{"class":258},"),(",[100,43803,2368],{"class":117},[100,43805,2145],{"class":258},[100,43807,1966],{"class":117},[100,43809,43810],{"class":258},"),",[100,43812,1966],{"class":117},[100,43814,39601],{"class":258},[100,43816,43817,43819,43821,43823,43825,43827,43829,43831,43833,43835,43837,43839,43841,43843,43845],{"class":102,"line":11370},[100,43818,43783],{"class":258},[100,43820,36425],{"class":117},[100,43822,2145],{"class":258},[100,43824,33627],{"class":117},[100,43826,43792],{"class":258},[100,43828,33627],{"class":117},[100,43830,2145],{"class":258},[100,43832,43713],{"class":117},[100,43834,43801],{"class":258},[100,43836,1966],{"class":117},[100,43838,2145],{"class":258},[100,43840,1978],{"class":117},[100,43842,43810],{"class":258},[100,43844,1972],{"class":117},[100,43846,39601],{"class":258},[100,43848,43849,43851,43853,43855,43857,43859,43861,43863,43865,43867,43869,43871,43873],{"class":102,"line":11375},[100,43850,39651],{"class":258},[100,43852,32437],{"class":6812},[100,43854,472],{"class":471},[100,43856,1849],{"class":117},[100,43858,2145],{"class":258},[100,43860,32492],{"class":6812},[100,43862,472],{"class":471},[100,43864,465],{"class":117},[100,43866,2145],{"class":258},[100,43868,32446],{"class":6812},[100,43870,472],{"class":471},[100,43872,1985],{"class":117},[100,43874,809],{"class":258},[100,43876,43877],{"class":102,"line":11380},[100,43878,39680],{"class":258},[100,43880,43881,43883,43886,43888],{"class":102,"line":11385},[100,43882,32408],{"class":117},[100,43884,43885],{"class":258},".b4",[100,43887,472],{"class":471},[100,43889,39563],{"class":258},[100,43891,43892,43894,43897,43899,43901,43903,43905,43907,43910,43912,43914,43916,43918,43920,43922],{"class":102,"line":11394},[100,43893,43783],{"class":258},[100,43895,43896],{"class":117},"480",[100,43898,2145],{"class":258},[100,43900,43713],{"class":117},[100,43902,43792],{"class":258},[100,43904,1978],{"class":117},[100,43906,2145],{"class":258},[100,43908,43909],{"class":117},"208",[100,43911,43801],{"class":258},[100,43913,2368],{"class":117},[100,43915,2145],{"class":258},[100,43917,2374],{"class":117},[100,43919,43810],{"class":258},[100,43921,1972],{"class":117},[100,43923,39601],{"class":258},[100,43925,43926,43928,43930,43932,43934,43936,43938,43940,43942,43944,43946,43948,43950,43952,43954],{"class":102,"line":11399},[100,43927,43783],{"class":258},[100,43929,40011],{"class":117},[100,43931,2145],{"class":258},[100,43933,22629],{"class":117},[100,43935,43792],{"class":258},[100,43937,2385],{"class":117},[100,43939,2145],{"class":258},[100,43941,33059],{"class":117},[100,43943,43801],{"class":258},[100,43945,2566],{"class":117},[100,43947,2145],{"class":258},[100,43949,1972],{"class":117},[100,43951,43810],{"class":258},[100,43953,1972],{"class":117},[100,43955,39601],{"class":258},[100,43957,43958,43960,43962,43964,43966,43968,43970,43972,43974,43976,43978,43980,43982,43984,43986],{"class":102,"line":11405},[100,43959,43783],{"class":258},[100,43961,40011],{"class":117},[100,43963,2145],{"class":258},[100,43965,33627],{"class":117},[100,43967,43792],{"class":258},[100,43969,33627],{"class":117},[100,43971,2145],{"class":258},[100,43973,36425],{"class":117},[100,43975,43801],{"class":258},[100,43977,2566],{"class":117},[100,43979,2145],{"class":258},[100,43981,1972],{"class":117},[100,43983,43810],{"class":258},[100,43985,1972],{"class":117},[100,43987,39601],{"class":258},[100,43989,43990,43992,43994,43996,43998,44000,44002,44004,44007,44009,44011,44013,44015,44017,44019],{"class":102,"line":11426},[100,43991,43783],{"class":258},[100,43993,40011],{"class":117},[100,43995,2145],{"class":258},[100,43997,2385],{"class":117},[100,43999,43792],{"class":258},[100,44001,33627],{"class":117},[100,44003,2145],{"class":258},[100,44005,44006],{"class":117},"288",[100,44008,43801],{"class":258},[100,44010,1966],{"class":117},[100,44012,2145],{"class":258},[100,44014,1972],{"class":117},[100,44016,43810],{"class":258},[100,44018,1972],{"class":117},[100,44020,39601],{"class":258},[100,44022,44023,44025,44028,44030,44032,44034,44036,44038,44041,44043,44045,44047,44049,44051,44053],{"class":102,"line":11432},[100,44024,43783],{"class":258},[100,44026,44027],{"class":117},"528",[100,44029,2145],{"class":258},[100,44031,36425],{"class":117},[100,44033,43792],{"class":258},[100,44035,22629],{"class":117},[100,44037,2145],{"class":258},[100,44039,44040],{"class":117},"320",[100,44042,43801],{"class":258},[100,44044,1966],{"class":117},[100,44046,2145],{"class":258},[100,44048,33627],{"class":117},[100,44050,43810],{"class":258},[100,44052,33627],{"class":117},[100,44054,39601],{"class":258},[100,44056,44057,44059,44061,44063,44065,44067,44069,44071,44073,44075,44077,44079,44081],{"class":102,"line":11446},[100,44058,39651],{"class":258},[100,44060,32437],{"class":6812},[100,44062,472],{"class":471},[100,44064,1849],{"class":117},[100,44066,2145],{"class":258},[100,44068,32492],{"class":6812},[100,44070,472],{"class":471},[100,44072,465],{"class":117},[100,44074,2145],{"class":258},[100,44076,32446],{"class":6812},[100,44078,472],{"class":471},[100,44080,1985],{"class":117},[100,44082,809],{"class":258},[100,44084,44085],{"class":102,"line":11452},[100,44086,39680],{"class":258},[100,44088,44089,44091,44094,44096],{"class":102,"line":11479},[100,44090,32408],{"class":117},[100,44092,44093],{"class":258},".b5",[100,44095,472],{"class":471},[100,44097,39563],{"class":258},[100,44099,44100,44102,44105,44107,44109,44111,44113,44115,44117,44119,44121,44123,44125,44127,44129],{"class":102,"line":11488},[100,44101,43783],{"class":258},[100,44103,44104],{"class":117},"832",[100,44106,2145],{"class":258},[100,44108,36425],{"class":117},[100,44110,43792],{"class":258},[100,44112,22629],{"class":117},[100,44114,2145],{"class":258},[100,44116,44040],{"class":117},[100,44118,43801],{"class":258},[100,44120,1966],{"class":117},[100,44122,2145],{"class":258},[100,44124,33627],{"class":117},[100,44126,43810],{"class":258},[100,44128,33627],{"class":117},[100,44130,39601],{"class":258},[100,44132,44133,44135,44137,44139,44141,44143,44145,44147,44149,44151,44153,44155,44157,44159,44161],{"class":102,"line":11494},[100,44134,43783],{"class":258},[100,44136,44104],{"class":117},[100,44138,2145],{"class":258},[100,44140,36495],{"class":117},[100,44142,43792],{"class":258},[100,44144,43713],{"class":117},[100,44146,2145],{"class":258},[100,44148,36495],{"class":117},[100,44150,43801],{"class":258},[100,44152,2374],{"class":117},[100,44154,2145],{"class":258},[100,44156,33627],{"class":117},[100,44158,43810],{"class":258},[100,44160,33627],{"class":117},[100,44162,39601],{"class":258},[100,44164,44165,44168,44170,44172,44174],{"class":102,"line":11502},[100,44166,44167],{"class":258},"            nn.AdaptiveAvgPool2d((",[100,44169,1985],{"class":117},[100,44171,2145],{"class":258},[100,44173,1985],{"class":117},[100,44175,44176],{"class":258},")),\n",[100,44178,44179],{"class":102,"line":11507},[100,44180,40344],{"class":258},[100,44182,44183,44185,44188,44190,44192],{"class":102,"line":18185},[100,44184,40349],{"class":258},[100,44186,44187],{"class":117},"1024",[100,44189,2145],{"class":258},[100,44191,2213],{"class":117},[100,44193,809],{"class":258},[100,44195,44196],{"class":102,"line":18191},[100,44197,39680],{"class":258},[100,44199,44200],{"class":102,"line":18214},[100,44201,44202],{"class":1836},"        # 对模型参数初始化\n",[100,44204,44205,44207,44209,44211,44213],{"class":102,"line":18220},[100,44206,5003],{"class":471},[100,44208,40422],{"class":258},[100,44210,854],{"class":471},[100,44212,40427],{"class":117},[100,44214,40430],{"class":258},[100,44216,44217,44219,44221],{"class":102,"line":18243},[100,44218,6240],{"class":471},[100,44220,40442],{"class":117},[100,44222,40445],{"class":258},[100,44224,44225,44227,44230,44232,44235,44237,44239,44241,44243],{"class":102,"line":18257},[100,44226,40455],{"class":258},[100,44228,44229],{"class":6812},"mode",[100,44231,472],{"class":471},[100,44233,44234],{"class":110},"'fan_out'",[100,44236,2145],{"class":258},[100,44238,40458],{"class":6812},[100,44240,472],{"class":471},[100,44242,40463],{"class":110},[100,44244,809],{"class":258},[100,44246,44247],{"class":102,"line":18277},[100,44248,44249],{"class":1836},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[100,44251,44252],{"class":102,"line":18283},[100,44253,44254],{"class":1836},"                # ② mode = 'fan_out'决定使用的fan值：\n",[100,44256,44257],{"class":102,"line":18294},[100,44258,44259],{"class":1836},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[100,44261,44262],{"class":102,"line":18317},[100,44263,44264],{"class":1836},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[100,44266,44267],{"class":102,"line":18339},[100,44268,44269],{"class":1836},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[100,44271,44272],{"class":102,"line":18344},[100,44273,44274],{"class":1836},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[100,44276,44277,44279,44281,44283,44285,44287],{"class":102,"line":18350},[100,44278,40475],{"class":471},[100,44280,40478],{"class":258},[100,44282,40481],{"class":471},[100,44284,40484],{"class":471},[100,44286,40487],{"class":117},[100,44288,696],{"class":258},[100,44290,44291,44293,44295],{"class":102,"line":18364},[100,44292,40499],{"class":258},[100,44294,1366],{"class":117},[100,44296,809],{"class":258},[100,44298,44299,44302,44304],{"class":102,"line":18377},[100,44300,44301],{"class":471},"                elif",[100,44303,40442],{"class":117},[100,44305,40518],{"class":258},[100,44307,44308,44311,44313,44315,44317],{"class":102,"line":18382},[100,44309,44310],{"class":258},"                    nn.init.normal_(m.weight,",[100,44312,1366],{"class":117},[100,44314,2145],{"class":258},[100,44316,40540],{"class":117},[100,44318,809],{"class":258},[100,44320,44321,44324,44326,44328,44330,44332],{"class":102,"line":18396},[100,44322,44323],{"class":471},"                    if",[100,44325,40478],{"class":258},[100,44327,40481],{"class":471},[100,44329,40484],{"class":471},[100,44331,40487],{"class":117},[100,44333,696],{"class":258},[100,44335,44336,44339,44341],{"class":102,"line":18401},[100,44337,44338],{"class":258},"                        nn.init.constant_(m.bias,",[100,44340,1366],{"class":117},[100,44342,809],{"class":258},[100,44344,44345],{"class":102,"line":18407},[100,44346,36720],{"class":1836},[100,44348,44349,44351,44353],{"class":102,"line":18412},[100,44350,32364],{"class":471},[100,44352,32656],{"class":106},[100,44354,32659],{"class":258},[100,44356,44357,44359,44361,44363],{"class":102,"line":18426},[100,44358,32664],{"class":258},[100,44360,472],{"class":471},[100,44362,32386],{"class":117},[100,44364,44365],{"class":258},".b1(x)\n",[100,44367,44368,44370,44372,44374],{"class":102,"line":18431},[100,44369,32664],{"class":258},[100,44371,472],{"class":471},[100,44373,32386],{"class":117},[100,44375,44376],{"class":258},".b2(x)\n",[100,44378,44379,44381,44383,44385],{"class":102,"line":18436},[100,44380,32664],{"class":258},[100,44382,472],{"class":471},[100,44384,32386],{"class":117},[100,44386,44387],{"class":258},".b3(x)\n",[100,44389,44390,44392,44394,44396],{"class":102,"line":18450},[100,44391,32664],{"class":258},[100,44393,472],{"class":471},[100,44395,32386],{"class":117},[100,44397,44398],{"class":258},".b4(x)\n",[100,44400,44401,44403,44405,44407],{"class":102,"line":18462},[100,44402,32664],{"class":258},[100,44404,472],{"class":471},[100,44406,32386],{"class":117},[100,44408,44409],{"class":258},".b5(x)\n",[100,44411,44412,44414],{"class":102,"line":18467},[100,44413,16333],{"class":471},[100,44415,32772],{"class":258},[100,44417,44418],{"class":102,"line":18480},[100,44419,570],{"emptyLinePlaceholder":569},[100,44421,44422],{"class":102,"line":18485},[100,44423,44424],{"class":1836},"# 模型展示\n",[100,44426,44427,44429,44431,44433,44435],{"class":102,"line":18490},[100,44428,958],{"class":471},[100,44430,961],{"class":117},[100,44432,4551],{"class":471},[100,44434,32787],{"class":110},[100,44436,696],{"class":258},[100,44438,44439,44441,44443,44445,44447,44449,44451,44453,44455],{"class":102,"line":18495},[100,44440,32799],{"class":258},[100,44442,472],{"class":471},[100,44444,32016],{"class":258},[100,44446,32806],{"class":110},[100,44448,3325],{"class":471},[100,44450,32811],{"class":258},[100,44452,3322],{"class":471},[100,44454,32041],{"class":110},[100,44456,809],{"class":258},[100,44458,44459,44461,44463],{"class":102,"line":18508},[100,44460,32851],{"class":258},[100,44462,472],{"class":471},[100,44464,44465],{"class":258},"GoogLeNet(Inception).to(device)\n",[100,44467,44468,44470,44472,44474,44476,44478,44480,44482],{"class":102,"line":18513},[100,44469,702],{"class":117},[100,44471,32863],{"class":258},[100,44473,1985],{"class":117},[100,44475,2145],{"class":258},[100,44477,33059],{"class":117},[100,44479,2145],{"class":258},[100,44481,33059],{"class":117},[100,44483,32876],{"class":258},[26,44485,44486],{"start":188},[29,44487,40737],{},[73,44489,44491],{"className":249,"code":44490,"language":251,"meta":79,"style":79},"import copy\nimport time\nimport pandas as pd\nimport torch\nfrom torch.utils.data import Dataset\nfrom torchvision.datasets import FashionMNIST\nfrom torchvision import transforms\nimport torch.utils.data as Data\nimport matplotlib.pyplot as plt\n# 导入模型\nfrom model import GoogLeNet, Inception\nfrom torch import nn\n\n\n# 处理训练集与验证集函数--->划分数据集\ndef train_val_data_process():\n    train_data=FashionMNIST('.\u002Fdata',\n                            train=True,\n                            transform=transforms.Compose([transforms.Resize(size=227),transforms.ToTensor()]),\n                            download=True)\n    train_data,val_data=Data.random_split(train_data,[round(0.8*len(train_data)),round(0.2*len(train_data))])\n    train_dataloader = Data.DataLoader(dataset=train_data,\n                                       batch_size=32,\n                                       shuffle=True,\n                                       # 规定8个进程\n                                       num_workers=8)\n    val_dataloader=Data.DataLoader(dataset=val_data,\n                                   batch_size=32,\n                                   shuffle=True,\n                                   num_workers=8)\n    return train_dataloader,val_dataloader\n\n# 验证是否出错\n# train_val_data_process()\n\n# 定义模型训练函数\ndef train_model_process(model,train_dataloader,val_dataloader,num_epochs):\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else 'cpu')\n\n\n    # 定义优化器\n    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n    # lr为学习率\n    optimizer=torch.optim.Adam(model.parameters(),lr=0.001)\n\n    # 定义损失函数使用交叉熵损失函数\n    criterion=nn.CrossEntropyLoss()\n\n    # 将模型放到GPU中进行训练\n    model=model.to(device)\n    # 复制当前模型的参数\n    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n    best_model_wts=copy.deepcopy(model.state_dict())\n\n\n    # 初始化参数\n    # 最高准确度\n    best_acc=0.0\n    # 训练集损失列表\n    train_loss_all=[]\n    # 验证集函数列表\n    val_loss_all=[]\n    # 训练集准确度列表\n    train_acc_all=[]\n    # 验证集准确度列表\n    val_acc_all=[]\n\n    # 保存当前时间--->方便看每轮训练的时间\n    since=time.time()\n\n\n    # 准备工作完成--->开始训练模型\n    for epoch in range(num_epochs):\n        print(\"Epoch {}\u002F{}\".format(epoch,num_epochs-1))\n        print(\"-\"*10)\n\n        # 初始化参数\n        # 训练集损失函数\n        train_loss=0.0\n        # 训练集准确度\n        train_corrects=0\n        # 验证集损失函数\n        val_loss=0.0\n        # 验证集准确度\n        val_corrects=0\n        # 训练集样本数量\n        train_num=0\n        # 验证集样本数量\n        val_num=0\n        # 将数据放到设备,并开始训练\n        for step,(b_x,b_y) in enumerate(train_dataloader):\n            # 将特征放入到训练设备\n            b_x=b_x.to(device)\n            # 将标签放入到训练设备当中\n            b_y=b_y.to(device)\n            # 设置模型为训练模式\n            model.train()\n            # 将数据放到模型当中,开始前向传播\n            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n            output=model(b_x)\n            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算每一个batch的损失函数\n            loss=criterion(output,b_y)\n            # 将梯度初始化为0\n            optimizer.zero_grad()\n            # 梯度置为0后再进行反向传播\n            loss.backward()\n            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n            optimizer.step()\n            # loss.item()指的是batch的平均损失\n            train_loss+=loss.item()*b_x.size(0)\n            # 计算每个批次中正确预测的数量\n            train_corrects+=torch.sum(pre_lab==b_y.data)\n            # 计算目前为止一共处理了多少样本\n            train_num+=b_x.size(0)\n        # 验证数据\n        for step ,(b_x,b_y) in enumerate(val_dataloader):\n            # 将特征放到验证设备当中\n            b_x=b_x.to(device)\n            # 将标签放到放到训练设备当中\n            b_y=b_y.to(device)\n            # 开启验证模式，设置模型为评估模式\n            model.eval()\n            # 验证时不计算梯度以节省内存\u002F计算\n            with torch.no_grad():\n                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n                output=model(b_x)\n                # 查找每一行中最大值对应的下标\n                pre_lab=torch.argmax(output,dim=1)\n                # 计算验证集上的当前 batch 损失\n                val_batch_loss=criterion(output,b_y)\n                # 对损失函数进行累加（按样本数加权）\n                val_loss+=val_batch_loss.item()*b_x.size(0)\n                val_corrects+=torch.sum(pre_lab==b_y.data)\n            # 当前用于验证的样本数量\n            val_num+=b_x.size(0)\n        # 计算并保存每一次迭代的loss值和准确率\n        # 计算并保存训练集的loss值\n        train_loss_all.append(train_loss\u002Ftrain_num)\n        # 取双精度\n        # 计算并保存训练集的准确率\n        train_acc_all.append(train_corrects.double().item()\u002Ftrain_num)\n        # 计算并保存验证集的loss值\n        val_loss_all.append(val_loss\u002Fval_num)\n        # 计算并保存验证集的准确率\n        val_acc_all.append(val_corrects.double().item()\u002Fval_num)\n\n        # 打印训练一轮的loss值和准确率\n        print('{}train loss:{:.4f} train acc:{:.4f}'.format(epoch,train_loss_all[-1],train_acc_all[-1]))\n        print('{}val loss:{:.4f} val acc:{:.4f}'.format(epoch,val_loss_all[-1],val_acc_all[-1]))\n\n        # 判断准确度--->保存最优模型\n        if val_acc_all[-1]>best_acc:\n            # 保存当前模型准确度\n            best_acc:float=val_acc_all[-1]\n            # 保存当前的准确度\n            # model.state_dict()是当前模型的所有参数（权重和偏置）\n            best_model_wts=copy.deepcopy(model.state_dict())\n\n        # 计算耗时\n        time_use=time.time()-since\n        print('训练和验证耗费的时间{:.0f}m{:.0f}s'.format(time_use\u002F\u002F60,time_use%60))\n    # 选择最优参数并保存\n    # 保存最佳模型权重字典\n    torch.save(best_model_wts,'.\u002Fbest_model.pth')\n    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n    train_process=pd.DataFrame(data={\n        \"epoch\":range(num_epochs),\n        \"train_loss_all\":train_loss_all,\n        \"val_loss_all\":val_loss_all,\n        \"train_acc_all\":train_acc_all,\n        \"val_acc_all\":val_acc_all\n    })\n    # 返回训练保存的过程\n    return train_process\n\n# 将loss值和精度按照图片的形式展示出来\ndef matplot_acc_loss(train_process):\n    # 设置图的大小\n    plt.figure(figsize=(12,4))\n    # 设置图中有几张图\n    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n    # ①loss图\n    plt.subplot(1,2,1)\n    # 补充:\n    # plt.subplot(nrows, ncols, index)\n    # nrows：行数\n    # ncols：列数\n    # index：目前选中第几个子图（从1开始）\n    plt.plot(train_process[\"epoch\"],train_process.train_loss_all,'ro-',label='train loss')\n    plt.plot(train_process[\"epoch\"],train_process.val_loss_all,'bs--',label='val loss')\n    # 添加一个图例\n    plt.legend()\n    # 给轴添加标签\n    plt.xlabel('epoch')\n    plt.ylabel('loss')\n    # ②准确度图\n    plt.subplot(1,2,2)\n    plt.plot(train_process[\"epoch\"],train_process.train_acc_all,'ro-',label='train acc')\n    plt.plot(train_process[\"epoch\"],train_process.val_acc_all,'bs--',label='val acc')\n    # 添加图例\n    plt.legend()\n    plt.xlabel(\"epoch\")\n    plt.ylabel(\"acc\")\n    plt.show()\n\n# 正式开始训练:\nif __name__==\"__main__\":\n    # 将模型实例化\n    GoogLeNet=GoogLeNet(Inception)\n    train_dataloader,val_dataloader=train_val_data_process()\n    train_process=train_model_process(GoogLeNet,train_dataloader,val_dataloader,num_epochs=30)\n    matplot_acc_loss(train_process)\n",[32,44492,44493,44499,44505,44515,44521,44531,44541,44551,44561,44571,44575,44586,44596,44600,44604,44608,44616,44628,44638,44654,44664,44696,44710,44720,44730,44734,44744,44758,44768,44778,44788,44794,44798,44802,44806,44810,44814,44822,44842,44846,44850,44854,44858,44862,44878,44882,44886,44894,44898,44902,44910,44914,44918,44922,44930,44934,44938,44942,44946,44954,44958,44966,44970,44978,44982,44990,44994,45002,45006,45010,45018,45022,45026,45030,45042,45066,45080,45084,45088,45092,45100,45104,45112,45116,45124,45128,45136,45140,45148,45152,45160,45164,45176,45180,45188,45192,45200,45204,45208,45212,45216,45224,45228,45244,45248,45256,45260,45264,45268,45272,45276,45280,45284,45300,45304,45316,45320,45332,45336,45348,45352,45360,45364,45372,45376,45380,45384,45390,45394,45402,45406,45422,45426,45434,45438,45454,45466,45470,45482,45486,45490,45498,45502,45506,45514,45518,45526,45530,45538,45542,45546,45588,45630,45634,45638,45654,45658,45674,45678,45682,45690,45694,45698,45710,45748,45752,45756,45764,45768,45782,45792,45798,45804,45810,45816,45820,45824,45830,45834,45838,45846,45850,45868,45872,45876,45880,45896,45900,45904,45908,45912,45916,45936,45956,45960,45964,45968,45976,45984,45988,46004,46024,46044,46048,46052,46060,46068,46072,46076,46080,46092,46096,46106,46114,46131],{"__ignoreMap":79},[100,44494,44495,44497],{"class":102,"line":103},[100,44496,548],{"class":471},[100,44498,33380],{"class":258},[100,44500,44501,44503],{"class":102,"line":188},[100,44502,548],{"class":471},[100,44504,33387],{"class":258},[100,44506,44507,44509,44511,44513],{"class":102,"line":199},[100,44508,548],{"class":471},[100,44510,33398],{"class":258},[100,44512,561],{"class":471},[100,44514,33403],{"class":258},[100,44516,44517,44519],{"class":102,"line":532},[100,44518,548],{"class":471},[100,44520,31961],{"class":258},[100,44522,44523,44525,44527,44529],{"class":102,"line":577},[100,44524,32301],{"class":471},[100,44526,32973],{"class":258},[100,44528,548],{"class":471},[100,44530,33420],{"class":258},[100,44532,44533,44535,44537,44539],{"class":102,"line":589},[100,44534,32301],{"class":471},[100,44536,32929],{"class":258},[100,44538,548],{"class":471},[100,44540,32934],{"class":258},[100,44542,44543,44545,44547,44549],{"class":102,"line":595},[100,44544,32301],{"class":471},[100,44546,32956],{"class":258},[100,44548,548],{"class":471},[100,44550,32961],{"class":258},[100,44552,44553,44555,44557,44559],{"class":102,"line":601},[100,44554,548],{"class":471},[100,44556,32973],{"class":258},[100,44558,561],{"class":471},[100,44560,32978],{"class":258},[100,44562,44563,44565,44567,44569],{"class":102,"line":606},[100,44564,548],{"class":471},[100,44566,32990],{"class":258},[100,44568,561],{"class":471},[100,44570,32995],{"class":258},[100,44572,44573],{"class":102,"line":612},[100,44574,33465],{"class":1836},[100,44576,44577,44579,44581,44583],{"class":102,"line":618},[100,44578,32301],{"class":471},[100,44580,33472],{"class":258},[100,44582,548],{"class":471},[100,44584,44585],{"class":258}," GoogLeNet, Inception\n",[100,44587,44588,44590,44592,44594],{"class":102,"line":623},[100,44589,32301],{"class":471},[100,44591,32304],{"class":258},[100,44593,548],{"class":471},[100,44595,32309],{"class":258},[100,44597,44598],{"class":102,"line":629},[100,44599,570],{"emptyLinePlaceholder":569},[100,44601,44602],{"class":102,"line":635},[100,44603,570],{"emptyLinePlaceholder":569},[100,44605,44606],{"class":102,"line":641},[100,44607,33500],{"class":1836},[100,44609,44610,44612,44614],{"class":102,"line":647},[100,44611,678],{"class":471},[100,44613,33507],{"class":106},[100,44615,33510],{"class":258},[100,44617,44618,44620,44622,44624,44626],{"class":102,"line":653},[100,44619,33515],{"class":258},[100,44621,472],{"class":471},[100,44623,33013],{"class":258},[100,44625,33021],{"class":110},[100,44627,33024],{"class":258},[100,44629,44630,44632,44634,44636],{"class":102,"line":659},[100,44631,33528],{"class":6812},[100,44633,472],{"class":471},[100,44635,33034],{"class":117},[100,44637,33024],{"class":258},[100,44639,44640,44642,44644,44646,44648,44650,44652],{"class":102,"line":665},[100,44641,33539],{"class":6812},[100,44643,472],{"class":471},[100,44645,33051],{"class":258},[100,44647,33054],{"class":6812},[100,44649,472],{"class":471},[100,44651,37003],{"class":117},[100,44653,33062],{"class":258},[100,44655,44656,44658,44660,44662],{"class":102,"line":670},[100,44657,33556],{"class":6812},[100,44659,472],{"class":471},[100,44661,33034],{"class":117},[100,44663,809],{"class":258},[100,44665,44666,44668,44670,44672,44674,44676,44678,44680,44682,44684,44686,44688,44690,44692,44694],{"class":102,"line":675},[100,44667,33567],{"class":258},[100,44669,472],{"class":471},[100,44671,33572],{"class":258},[100,44673,33575],{"class":117},[100,44675,713],{"class":258},[100,44677,33580],{"class":117},[100,44679,2222],{"class":471},[100,44681,8954],{"class":117},[100,44683,33587],{"class":258},[100,44685,33575],{"class":117},[100,44687,713],{"class":258},[100,44689,33594],{"class":117},[100,44691,2222],{"class":471},[100,44693,8954],{"class":117},[100,44695,33601],{"class":258},[100,44697,44698,44700,44702,44704,44706,44708],{"class":102,"line":699},[100,44699,33606],{"class":258},[100,44701,472],{"class":471},[100,44703,33611],{"class":258},[100,44705,33095],{"class":6812},[100,44707,472],{"class":471},[100,44709,33100],{"class":258},[100,44711,44712,44714,44716,44718],{"class":102,"line":708},[100,44713,33622],{"class":6812},[100,44715,472],{"class":471},[100,44717,1966],{"class":117},[100,44719,33024],{"class":258},[100,44721,44722,44724,44726,44728],{"class":102,"line":722},[100,44723,33634],{"class":6812},[100,44725,472],{"class":471},[100,44727,33034],{"class":117},[100,44729,33024],{"class":258},[100,44731,44732],{"class":102,"line":735},[100,44733,33645],{"class":1836},[100,44735,44736,44738,44740,44742],{"class":102,"line":754},[100,44737,33650],{"class":6812},[100,44739,472],{"class":471},[100,44741,2162],{"class":117},[100,44743,809],{"class":258},[100,44745,44746,44748,44750,44752,44754,44756],{"class":102,"line":771},[100,44747,33661],{"class":258},[100,44749,472],{"class":471},[100,44751,33092],{"class":258},[100,44753,33095],{"class":6812},[100,44755,472],{"class":471},[100,44757,33672],{"class":258},[100,44759,44760,44762,44764,44766],{"class":102,"line":776},[100,44761,33677],{"class":6812},[100,44763,472],{"class":471},[100,44765,1966],{"class":117},[100,44767,33024],{"class":258},[100,44769,44770,44772,44774,44776],{"class":102,"line":781},[100,44771,33688],{"class":6812},[100,44773,472],{"class":471},[100,44775,33034],{"class":117},[100,44777,33024],{"class":258},[100,44779,44780,44782,44784,44786],{"class":102,"line":796},[100,44781,33699],{"class":6812},[100,44783,472],{"class":471},[100,44785,2162],{"class":117},[100,44787,809],{"class":258},[100,44789,44790,44792],{"class":102,"line":812},[100,44791,5689],{"class":471},[100,44793,33712],{"class":258},[100,44795,44796],{"class":102,"line":823},[100,44797,570],{"emptyLinePlaceholder":569},[100,44799,44800],{"class":102,"line":828},[100,44801,33721],{"class":1836},[100,44803,44804],{"class":102,"line":840},[100,44805,33726],{"class":1836},[100,44807,44808],{"class":102,"line":845},[100,44809,570],{"emptyLinePlaceholder":569},[100,44811,44812],{"class":102,"line":868},[100,44813,33735],{"class":1836},[100,44815,44816,44818,44820],{"class":102,"line":874},[100,44817,678],{"class":471},[100,44819,33742],{"class":106},[100,44821,33745],{"class":258},[100,44823,44824,44826,44828,44830,44832,44834,44836,44838,44840],{"class":102,"line":879},[100,44825,32799],{"class":258},[100,44827,472],{"class":471},[100,44829,32016],{"class":258},[100,44831,32806],{"class":110},[100,44833,3325],{"class":471},[100,44835,32811],{"class":258},[100,44837,3322],{"class":471},[100,44839,33764],{"class":110},[100,44841,809],{"class":258},[100,44843,44844],{"class":102,"line":889},[100,44845,570],{"emptyLinePlaceholder":569},[100,44847,44848],{"class":102,"line":894},[100,44849,570],{"emptyLinePlaceholder":569},[100,44851,44852],{"class":102,"line":900},[100,44853,33779],{"class":1836},[100,44855,44856],{"class":102,"line":910},[100,44857,33784],{"class":1836},[100,44859,44860],{"class":102,"line":915},[100,44861,33789],{"class":1836},[100,44863,44864,44866,44868,44870,44872,44874,44876],{"class":102,"line":929},[100,44865,33794],{"class":258},[100,44867,472],{"class":471},[100,44869,33799],{"class":258},[100,44871,33802],{"class":6812},[100,44873,472],{"class":471},[100,44875,33807],{"class":117},[100,44877,809],{"class":258},[100,44879,44880],{"class":102,"line":935},[100,44881,570],{"emptyLinePlaceholder":569},[100,44883,44884],{"class":102,"line":945},[100,44885,33818],{"class":1836},[100,44887,44888,44890,44892],{"class":102,"line":950},[100,44889,33823],{"class":258},[100,44891,472],{"class":471},[100,44893,33828],{"class":258},[100,44895,44896],{"class":102,"line":955},[100,44897,570],{"emptyLinePlaceholder":569},[100,44899,44900],{"class":102,"line":972},[100,44901,33837],{"class":1836},[100,44903,44904,44906,44908],{"class":102,"line":11370},[100,44905,32851],{"class":258},[100,44907,472],{"class":471},[100,44909,33846],{"class":258},[100,44911,44912],{"class":102,"line":11375},[100,44913,33851],{"class":1836},[100,44915,44916],{"class":102,"line":11380},[100,44917,33856],{"class":1836},[100,44919,44920],{"class":102,"line":11385},[100,44921,33861],{"class":1836},[100,44923,44924,44926,44928],{"class":102,"line":11394},[100,44925,33866],{"class":258},[100,44927,472],{"class":471},[100,44929,33871],{"class":258},[100,44931,44932],{"class":102,"line":11399},[100,44933,570],{"emptyLinePlaceholder":569},[100,44935,44936],{"class":102,"line":11405},[100,44937,570],{"emptyLinePlaceholder":569},[100,44939,44940],{"class":102,"line":11426},[100,44941,33884],{"class":1836},[100,44943,44944],{"class":102,"line":11432},[100,44945,33889],{"class":1836},[100,44947,44948,44950,44952],{"class":102,"line":11446},[100,44949,33894],{"class":258},[100,44951,472],{"class":471},[100,44953,33899],{"class":117},[100,44955,44956],{"class":102,"line":11452},[100,44957,33904],{"class":1836},[100,44959,44960,44962,44964],{"class":102,"line":11479},[100,44961,33909],{"class":258},[100,44963,472],{"class":471},[100,44965,33914],{"class":258},[100,44967,44968],{"class":102,"line":11488},[100,44969,33919],{"class":1836},[100,44971,44972,44974,44976],{"class":102,"line":11494},[100,44973,33924],{"class":258},[100,44975,472],{"class":471},[100,44977,33914],{"class":258},[100,44979,44980],{"class":102,"line":11502},[100,44981,33933],{"class":1836},[100,44983,44984,44986,44988],{"class":102,"line":11507},[100,44985,33938],{"class":258},[100,44987,472],{"class":471},[100,44989,33914],{"class":258},[100,44991,44992],{"class":102,"line":18185},[100,44993,33947],{"class":1836},[100,44995,44996,44998,45000],{"class":102,"line":18191},[100,44997,33952],{"class":258},[100,44999,472],{"class":471},[100,45001,33914],{"class":258},[100,45003,45004],{"class":102,"line":18214},[100,45005,570],{"emptyLinePlaceholder":569},[100,45007,45008],{"class":102,"line":18220},[100,45009,33965],{"class":1836},[100,45011,45012,45014,45016],{"class":102,"line":18243},[100,45013,33970],{"class":258},[100,45015,472],{"class":471},[100,45017,33975],{"class":258},[100,45019,45020],{"class":102,"line":18257},[100,45021,570],{"emptyLinePlaceholder":569},[100,45023,45024],{"class":102,"line":18277},[100,45025,570],{"emptyLinePlaceholder":569},[100,45027,45028],{"class":102,"line":18283},[100,45029,33988],{"class":1836},[100,45031,45032,45034,45036,45038,45040],{"class":102,"line":18294},[100,45033,848],{"class":471},[100,45035,33995],{"class":258},[100,45037,854],{"class":471},[100,45039,857],{"class":117},[100,45041,34002],{"class":258},[100,45043,45044,45046,45048,45050,45052,45054,45056,45058,45060,45062,45064],{"class":102,"line":18317},[100,45045,34007],{"class":117},[100,45047,713],{"class":258},[100,45049,34012],{"class":110},[100,45051,34015],{"class":117},[100,45053,2351],{"class":110},[100,45055,34015],{"class":117},[100,45057,2019],{"class":110},[100,45059,34024],{"class":258},[100,45061,2299],{"class":471},[100,45063,1985],{"class":117},[100,45065,751],{"class":258},[100,45067,45068,45070,45072,45074,45076,45078],{"class":102,"line":18339},[100,45069,34007],{"class":117},[100,45071,713],{"class":258},[100,45073,34039],{"class":110},[100,45075,2222],{"class":471},[100,45077,2213],{"class":117},[100,45079,809],{"class":258},[100,45081,45082],{"class":102,"line":18344},[100,45083,570],{"emptyLinePlaceholder":569},[100,45085,45086],{"class":102,"line":18350},[100,45087,34054],{"class":1836},[100,45089,45090],{"class":102,"line":18364},[100,45091,34059],{"class":1836},[100,45093,45094,45096,45098],{"class":102,"line":18377},[100,45095,34064],{"class":258},[100,45097,472],{"class":471},[100,45099,33899],{"class":117},[100,45101,45102],{"class":102,"line":18382},[100,45103,34073],{"class":1836},[100,45105,45106,45108,45110],{"class":102,"line":18396},[100,45107,34078],{"class":258},[100,45109,472],{"class":471},[100,45111,4686],{"class":117},[100,45113,45114],{"class":102,"line":18401},[100,45115,34087],{"class":1836},[100,45117,45118,45120,45122],{"class":102,"line":18407},[100,45119,34092],{"class":258},[100,45121,472],{"class":471},[100,45123,33899],{"class":117},[100,45125,45126],{"class":102,"line":18412},[100,45127,34101],{"class":1836},[100,45129,45130,45132,45134],{"class":102,"line":18426},[100,45131,34106],{"class":258},[100,45133,472],{"class":471},[100,45135,4686],{"class":117},[100,45137,45138],{"class":102,"line":18431},[100,45139,34115],{"class":1836},[100,45141,45142,45144,45146],{"class":102,"line":18436},[100,45143,34120],{"class":258},[100,45145,472],{"class":471},[100,45147,4686],{"class":117},[100,45149,45150],{"class":102,"line":18450},[100,45151,34129],{"class":1836},[100,45153,45154,45156,45158],{"class":102,"line":18462},[100,45155,34134],{"class":258},[100,45157,472],{"class":471},[100,45159,4686],{"class":117},[100,45161,45162],{"class":102,"line":18467},[100,45163,34143],{"class":1836},[100,45165,45166,45168,45170,45172,45174],{"class":102,"line":18480},[100,45167,5003],{"class":471},[100,45169,33159],{"class":258},[100,45171,854],{"class":471},[100,45173,33164],{"class":117},[100,45175,34156],{"class":258},[100,45177,45178],{"class":102,"line":18485},[100,45179,34161],{"class":1836},[100,45181,45182,45184,45186],{"class":102,"line":18490},[100,45183,34166],{"class":258},[100,45185,472],{"class":471},[100,45187,34171],{"class":258},[100,45189,45190],{"class":102,"line":18495},[100,45191,34176],{"class":1836},[100,45193,45194,45196,45198],{"class":102,"line":18508},[100,45195,34181],{"class":258},[100,45197,472],{"class":471},[100,45199,34186],{"class":258},[100,45201,45202],{"class":102,"line":18513},[100,45203,34192],{"class":1836},[100,45205,45206],{"class":102,"line":34189},[100,45207,34198],{"class":258},[100,45209,45210],{"class":102,"line":34195},[100,45211,34204],{"class":1836},[100,45213,45214],{"class":102,"line":34201},[100,45215,34210],{"class":1836},[100,45217,45218,45220,45222],{"class":102,"line":34207},[100,45219,34216],{"class":258},[100,45221,472],{"class":471},[100,45223,34221],{"class":258},[100,45225,45226],{"class":102,"line":34213},[100,45227,34227],{"class":1836},[100,45229,45230,45232,45234,45236,45238,45240,45242],{"class":102,"line":34224},[100,45231,34233],{"class":258},[100,45233,472],{"class":471},[100,45235,34238],{"class":258},[100,45237,34241],{"class":6812},[100,45239,472],{"class":471},[100,45241,1985],{"class":117},[100,45243,809],{"class":258},[100,45245,45246],{"class":102,"line":34230},[100,45247,34253],{"class":1836},[100,45249,45250,45252,45254],{"class":102,"line":34250},[100,45251,34259],{"class":258},[100,45253,472],{"class":471},[100,45255,34264],{"class":258},[100,45257,45258],{"class":102,"line":34256},[100,45259,34270],{"class":1836},[100,45261,45262],{"class":102,"line":34267},[100,45263,34276],{"class":258},[100,45265,45266],{"class":102,"line":34273},[100,45267,34282],{"class":1836},[100,45269,45270],{"class":102,"line":34279},[100,45271,34288],{"class":258},[100,45273,45274],{"class":102,"line":34285},[100,45275,34294],{"class":1836},[100,45277,45278],{"class":102,"line":34291},[100,45279,34300],{"class":258},[100,45281,45282],{"class":102,"line":34297},[100,45283,34306],{"class":1836},[100,45285,45286,45288,45290,45292,45294,45296,45298],{"class":102,"line":34303},[100,45287,34312],{"class":258},[100,45289,11062],{"class":471},[100,45291,34317],{"class":258},[100,45293,2222],{"class":471},[100,45295,34322],{"class":258},[100,45297,1366],{"class":117},[100,45299,809],{"class":258},[100,45301,45302],{"class":102,"line":34309},[100,45303,34332],{"class":1836},[100,45305,45306,45308,45310,45312,45314],{"class":102,"line":34329},[100,45307,34338],{"class":258},[100,45309,11062],{"class":471},[100,45311,34343],{"class":258},[100,45313,4551],{"class":471},[100,45315,34348],{"class":258},[100,45317,45318],{"class":102,"line":34335},[100,45319,34354],{"class":1836},[100,45321,45322,45324,45326,45328,45330],{"class":102,"line":34351},[100,45323,34360],{"class":258},[100,45325,11062],{"class":471},[100,45327,34322],{"class":258},[100,45329,1366],{"class":117},[100,45331,809],{"class":258},[100,45333,45334],{"class":102,"line":34357},[100,45335,34374],{"class":1836},[100,45337,45338,45340,45342,45344,45346],{"class":102,"line":34371},[100,45339,5003],{"class":471},[100,45341,34382],{"class":258},[100,45343,854],{"class":471},[100,45345,33164],{"class":117},[100,45347,34389],{"class":258},[100,45349,45350],{"class":102,"line":34377},[100,45351,34395],{"class":1836},[100,45353,45354,45356,45358],{"class":102,"line":34392},[100,45355,34166],{"class":258},[100,45357,472],{"class":471},[100,45359,34171],{"class":258},[100,45361,45362],{"class":102,"line":34398},[100,45363,34410],{"class":1836},[100,45365,45366,45368,45370],{"class":102,"line":34407},[100,45367,34181],{"class":258},[100,45369,472],{"class":471},[100,45371,34186],{"class":258},[100,45373,45374],{"class":102,"line":34413},[100,45375,34425],{"class":1836},[100,45377,45378],{"class":102,"line":34422},[100,45379,34431],{"class":258},[100,45381,45382],{"class":102,"line":34428},[100,45383,37910],{"class":1836},[100,45385,45386,45388],{"class":102,"line":34434},[100,45387,34437],{"class":471},[100,45389,34440],{"class":258},[100,45391,45392],{"class":102,"line":34443},[100,45393,34446],{"class":1836},[100,45395,45396,45398,45400],{"class":102,"line":34449},[100,45397,37925],{"class":258},[100,45399,472],{"class":471},[100,45401,34221],{"class":258},[100,45403,45404],{"class":102,"line":34460},[100,45405,34463],{"class":1836},[100,45407,45408,45410,45412,45414,45416,45418,45420],{"class":102,"line":34466},[100,45409,37938],{"class":258},[100,45411,472],{"class":471},[100,45413,34238],{"class":258},[100,45415,34241],{"class":6812},[100,45417,472],{"class":471},[100,45419,1985],{"class":117},[100,45421,809],{"class":258},[100,45423,45424],{"class":102,"line":34485},[100,45425,34488],{"class":1836},[100,45427,45428,45430,45432],{"class":102,"line":34491},[100,45429,37959],{"class":258},[100,45431,472],{"class":471},[100,45433,34264],{"class":258},[100,45435,45436],{"class":102,"line":34502},[100,45437,34505],{"class":1836},[100,45439,45440,45442,45444,45446,45448,45450,45452],{"class":102,"line":34508},[100,45441,37972],{"class":258},[100,45443,11062],{"class":471},[100,45445,37977],{"class":258},[100,45447,2222],{"class":471},[100,45449,34322],{"class":258},[100,45451,1366],{"class":117},[100,45453,809],{"class":258},[100,45455,45456,45458,45460,45462,45464],{"class":102,"line":34528},[100,45457,37990],{"class":258},[100,45459,11062],{"class":471},[100,45461,34343],{"class":258},[100,45463,4551],{"class":471},[100,45465,34348],{"class":258},[100,45467,45468],{"class":102,"line":34544},[100,45469,38003],{"class":1836},[100,45471,45472,45474,45476,45478,45480],{"class":102,"line":34550},[100,45473,38008],{"class":258},[100,45475,11062],{"class":471},[100,45477,34322],{"class":258},[100,45479,1366],{"class":117},[100,45481,809],{"class":258},[100,45483,45484],{"class":102,"line":34564},[100,45485,34567],{"class":1836},[100,45487,45488],{"class":102,"line":34570},[100,45489,34573],{"class":1836},[100,45491,45492,45494,45496],{"class":102,"line":34576},[100,45493,34579],{"class":258},[100,45495,2351],{"class":471},[100,45497,34584],{"class":258},[100,45499,45500],{"class":102,"line":34587},[100,45501,34590],{"class":1836},[100,45503,45504],{"class":102,"line":34593},[100,45505,34596],{"class":1836},[100,45507,45508,45510,45512],{"class":102,"line":34599},[100,45509,34602],{"class":258},[100,45511,2351],{"class":471},[100,45513,34584],{"class":258},[100,45515,45516],{"class":102,"line":34609},[100,45517,34612],{"class":1836},[100,45519,45520,45522,45524],{"class":102,"line":34615},[100,45521,34618],{"class":258},[100,45523,2351],{"class":471},[100,45525,34623],{"class":258},[100,45527,45528],{"class":102,"line":34626},[100,45529,34629],{"class":1836},[100,45531,45532,45534,45536],{"class":102,"line":34632},[100,45533,34635],{"class":258},[100,45535,2351],{"class":471},[100,45537,34623],{"class":258},[100,45539,45540],{"class":102,"line":34642},[100,45541,570],{"emptyLinePlaceholder":569},[100,45543,45544],{"class":102,"line":34647},[100,45545,34650],{"class":1836},[100,45547,45548,45550,45552,45554,45556,45558,45560,45562,45564,45566,45568,45570,45572,45574,45576,45578,45580,45582,45584,45586],{"class":102,"line":34653},[100,45549,34007],{"class":117},[100,45551,713],{"class":258},[100,45553,5192],{"class":110},[100,45555,34015],{"class":117},[100,45557,34664],{"class":110},[100,45559,2662],{"class":117},[100,45561,34669],{"class":471},[100,45563,2712],{"class":117},[100,45565,34674],{"class":110},[100,45567,2662],{"class":117},[100,45569,34669],{"class":471},[100,45571,2712],{"class":117},[100,45573,5192],{"class":110},[100,45575,34685],{"class":258},[100,45577,2299],{"class":471},[100,45579,1985],{"class":117},[100,45581,34692],{"class":258},[100,45583,2299],{"class":471},[100,45585,1985],{"class":117},[100,45587,34699],{"class":258},[100,45589,45590,45592,45594,45596,45598,45600,45602,45604,45606,45608,45610,45612,45614,45616,45618,45620,45622,45624,45626,45628],{"class":102,"line":34702},[100,45591,34007],{"class":117},[100,45593,713],{"class":258},[100,45595,5192],{"class":110},[100,45597,34015],{"class":117},[100,45599,34713],{"class":110},[100,45601,2662],{"class":117},[100,45603,34669],{"class":471},[100,45605,2712],{"class":117},[100,45607,34722],{"class":110},[100,45609,2662],{"class":117},[100,45611,34669],{"class":471},[100,45613,2712],{"class":117},[100,45615,5192],{"class":110},[100,45617,34733],{"class":258},[100,45619,2299],{"class":471},[100,45621,1985],{"class":117},[100,45623,34740],{"class":258},[100,45625,2299],{"class":471},[100,45627,1985],{"class":117},[100,45629,34699],{"class":258},[100,45631,45632],{"class":102,"line":34749},[100,45633,570],{"emptyLinePlaceholder":569},[100,45635,45636],{"class":102,"line":34754},[100,45637,34757],{"class":1836},[100,45639,45640,45642,45644,45646,45648,45650,45652],{"class":102,"line":34760},[100,45641,4106],{"class":471},[100,45643,34765],{"class":258},[100,45645,2299],{"class":471},[100,45647,1985],{"class":117},[100,45649,2706],{"class":258},[100,45651,2726],{"class":471},[100,45653,34776],{"class":258},[100,45655,45656],{"class":102,"line":34779},[100,45657,34782],{"class":1836},[100,45659,45660,45662,45664,45666,45668,45670,45672],{"class":102,"line":34785},[100,45661,34788],{"class":258},[100,45663,1819],{"class":117},[100,45665,472],{"class":471},[100,45667,34795],{"class":258},[100,45669,2299],{"class":471},[100,45671,1985],{"class":117},[100,45673,34802],{"class":258},[100,45675,45676],{"class":102,"line":34805},[100,45677,34808],{"class":1836},[100,45679,45680],{"class":102,"line":34811},[100,45681,34814],{"class":1836},[100,45683,45684,45686,45688],{"class":102,"line":34817},[100,45685,34820],{"class":258},[100,45687,472],{"class":471},[100,45689,33871],{"class":258},[100,45691,45692],{"class":102,"line":34827},[100,45693,570],{"emptyLinePlaceholder":569},[100,45695,45696],{"class":102,"line":34832},[100,45697,34835],{"class":1836},[100,45699,45700,45702,45704,45706,45708],{"class":102,"line":34838},[100,45701,34841],{"class":258},[100,45703,472],{"class":471},[100,45705,34846],{"class":258},[100,45707,2299],{"class":471},[100,45709,34851],{"class":258},[100,45711,45712,45714,45716,45718,45720,45722,45724,45726,45728,45730,45732,45734,45736,45738,45740,45742,45744,45746],{"class":102,"line":34854},[100,45713,34007],{"class":117},[100,45715,713],{"class":258},[100,45717,34861],{"class":110},[100,45719,2662],{"class":117},[100,45721,34866],{"class":471},[100,45723,2712],{"class":117},[100,45725,2311],{"class":110},[100,45727,2662],{"class":117},[100,45729,34866],{"class":471},[100,45731,2712],{"class":117},[100,45733,34879],{"class":110},[100,45735,34882],{"class":258},[100,45737,34885],{"class":471},[100,45739,2673],{"class":117},[100,45741,34890],{"class":258},[100,45743,2095],{"class":471},[100,45745,2673],{"class":117},[100,45747,751],{"class":258},[100,45749,45750],{"class":102,"line":34899},[100,45751,38287],{"class":1836},[100,45753,45754],{"class":102,"line":34905},[100,45755,38292],{"class":1836},[100,45757,45758,45760,45762],{"class":102,"line":34911},[100,45759,38297],{"class":258},[100,45761,34923],{"class":110},[100,45763,809],{"class":258},[100,45765,45766],{"class":102,"line":34917},[100,45767,34943],{"class":1836},[100,45769,45770,45772,45774,45776,45778,45780],{"class":102,"line":34928},[100,45771,34949],{"class":258},[100,45773,472],{"class":471},[100,45775,34954],{"class":258},[100,45777,499],{"class":6812},[100,45779,472],{"class":471},[100,45781,3178],{"class":258},[100,45783,45784,45786,45788,45790],{"class":102,"line":34934},[100,45785,34966],{"class":110},[100,45787,2625],{"class":258},[100,45789,34971],{"class":117},[100,45791,34974],{"class":258},[100,45793,45794,45796],{"class":102,"line":34940},[100,45795,34980],{"class":110},[100,45797,34983],{"class":258},[100,45799,45800,45802],{"class":102,"line":34946},[100,45801,34989],{"class":110},[100,45803,34992],{"class":258},[100,45805,45806,45808],{"class":102,"line":34963},[100,45807,34998],{"class":110},[100,45809,35001],{"class":258},[100,45811,45812,45814],{"class":102,"line":34977},[100,45813,35007],{"class":110},[100,45815,35010],{"class":258},[100,45817,45818],{"class":102,"line":34986},[100,45819,35016],{"class":258},[100,45821,45822],{"class":102,"line":34995},[100,45823,35022],{"class":1836},[100,45825,45826,45828],{"class":102,"line":35004},[100,45827,5689],{"class":471},[100,45829,35030],{"class":258},[100,45831,45832],{"class":102,"line":35013},[100,45833,570],{"emptyLinePlaceholder":569},[100,45835,45836],{"class":102,"line":35019},[100,45837,35041],{"class":1836},[100,45839,45840,45842,45844],{"class":102,"line":35025},[100,45841,678],{"class":471},[100,45843,35049],{"class":106},[100,45845,35052],{"class":258},[100,45847,45848],{"class":102,"line":35033},[100,45849,35058],{"class":1836},[100,45851,45852,45854,45856,45858,45860,45862,45864,45866],{"class":102,"line":35038},[100,45853,35064],{"class":258},[100,45855,33251],{"class":6812},[100,45857,472],{"class":471},[100,45859,713],{"class":258},[100,45861,2265],{"class":117},[100,45863,2145],{"class":258},[100,45865,748],{"class":117},[100,45867,751],{"class":258},[100,45869,45870],{"class":102,"line":35044},[100,45871,35084],{"class":1836},[100,45873,45874],{"class":102,"line":35055},[100,45875,35090],{"class":1836},[100,45877,45878],{"class":102,"line":35061},[100,45879,35096],{"class":1836},[100,45881,45882,45884,45886,45888,45890,45892,45894],{"class":102,"line":35081},[100,45883,33285],{"class":258},[100,45885,1985],{"class":117},[100,45887,2145],{"class":258},[100,45889,465],{"class":117},[100,45891,2145],{"class":258},[100,45893,1985],{"class":117},[100,45895,809],{"class":258},[100,45897,45898],{"class":102,"line":35087},[100,45899,35119],{"class":1836},[100,45901,45902],{"class":102,"line":35093},[100,45903,35125],{"class":1836},[100,45905,45906],{"class":102,"line":35099},[100,45907,35131],{"class":1836},[100,45909,45910],{"class":102,"line":35116},[100,45911,35137],{"class":1836},[100,45913,45914],{"class":102,"line":35122},[100,45915,35143],{"class":1836},[100,45917,45918,45920,45922,45924,45926,45928,45930,45932,45934],{"class":102,"line":35128},[100,45919,35149],{"class":258},[100,45921,35152],{"class":110},[100,45923,35155],{"class":258},[100,45925,35158],{"class":110},[100,45927,2145],{"class":258},[100,45929,35163],{"class":6812},[100,45931,472],{"class":471},[100,45933,35168],{"class":110},[100,45935,809],{"class":258},[100,45937,45938,45940,45942,45944,45946,45948,45950,45952,45954],{"class":102,"line":35134},[100,45939,35149],{"class":258},[100,45941,35152],{"class":110},[100,45943,35180],{"class":258},[100,45945,35183],{"class":110},[100,45947,2145],{"class":258},[100,45949,35163],{"class":6812},[100,45951,472],{"class":471},[100,45953,35192],{"class":110},[100,45955,809],{"class":258},[100,45957,45958],{"class":102,"line":35140},[100,45959,35200],{"class":1836},[100,45961,45962],{"class":102,"line":35146},[100,45963,35206],{"class":258},[100,45965,45966],{"class":102,"line":35173},[100,45967,35212],{"class":1836},[100,45969,45970,45972,45974],{"class":102,"line":35197},[100,45971,35218],{"class":258},[100,45973,35221],{"class":110},[100,45975,809],{"class":258},[100,45977,45978,45980,45982],{"class":102,"line":35203},[100,45979,35229],{"class":258},[100,45981,35232],{"class":110},[100,45983,809],{"class":258},[100,45985,45986],{"class":102,"line":35209},[100,45987,35240],{"class":1836},[100,45989,45990,45992,45994,45996,45998,46000,46002],{"class":102,"line":35215},[100,45991,33285],{"class":258},[100,45993,1985],{"class":117},[100,45995,2145],{"class":258},[100,45997,465],{"class":117},[100,45999,2145],{"class":258},[100,46001,465],{"class":117},[100,46003,809],{"class":258},[100,46005,46006,46008,46010,46012,46014,46016,46018,46020,46022],{"class":102,"line":35226},[100,46007,35149],{"class":258},[100,46009,35152],{"class":110},[100,46011,35267],{"class":258},[100,46013,35158],{"class":110},[100,46015,2145],{"class":258},[100,46017,35163],{"class":6812},[100,46019,472],{"class":471},[100,46021,35278],{"class":110},[100,46023,809],{"class":258},[100,46025,46026,46028,46030,46032,46034,46036,46038,46040,46042],{"class":102,"line":35237},[100,46027,35149],{"class":258},[100,46029,35152],{"class":110},[100,46031,35290],{"class":258},[100,46033,35183],{"class":110},[100,46035,2145],{"class":258},[100,46037,35163],{"class":6812},[100,46039,472],{"class":471},[100,46041,35301],{"class":110},[100,46043,809],{"class":258},[100,46045,46046],{"class":102,"line":35243},[100,46047,35309],{"class":1836},[100,46049,46050],{"class":102,"line":35260},[100,46051,35206],{"class":258},[100,46053,46054,46056,46058],{"class":102,"line":35283},[100,46055,35218],{"class":258},[100,46057,35152],{"class":110},[100,46059,809],{"class":258},[100,46061,46062,46064,46066],{"class":102,"line":35306},[100,46063,35229],{"class":258},[100,46065,35331],{"class":110},[100,46067,809],{"class":258},[100,46069,46070],{"class":102,"line":35312},[100,46071,35339],{"class":258},[100,46073,46074],{"class":102,"line":35317},[100,46075,570],{"emptyLinePlaceholder":569},[100,46077,46078],{"class":102,"line":35326},[100,46079,35350],{"class":1836},[100,46081,46082,46084,46086,46088,46090],{"class":102,"line":35336},[100,46083,958],{"class":471},[100,46085,961],{"class":117},[100,46087,4551],{"class":471},[100,46089,32787],{"class":110},[100,46091,696],{"class":258},[100,46093,46094],{"class":102,"line":35342},[100,46095,35369],{"class":1836},[100,46097,46098,46101,46103],{"class":102,"line":35347},[100,46099,46100],{"class":258},"    GoogLeNet",[100,46102,472],{"class":471},[100,46104,46105],{"class":258},"GoogLeNet(Inception)\n",[100,46107,46108,46110,46112],{"class":102,"line":35353},[100,46109,35386],{"class":258},[100,46111,472],{"class":471},[100,46113,35391],{"class":258},[100,46115,46116,46118,46120,46123,46125,46127,46129],{"class":102,"line":35366},[100,46117,34949],{"class":258},[100,46119,472],{"class":471},[100,46121,46122],{"class":258},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[100,46124,35404],{"class":6812},[100,46126,472],{"class":471},[100,46128,2717],{"class":117},[100,46130,809],{"class":258},[100,46132,46133],{"class":102,"line":35372},[100,46134,35416],{"class":258},[26,46136,46137],{"start":199},[29,46138,42128],{},[73,46140,46142],{"className":249,"code":46141,"language":251,"meta":79,"style":79},"import torch\nimport torch.utils.data as Data\nfrom torchvision import transforms\n# 导入数据集\nfrom torchvision.datasets import FashionMNIST\nfrom model import GoogLeNet,Inception\n\n\n# 测试数据处理\ndef test_data_process():\n    test_data=FashionMNIST(root='.\u002Fdata',\n                           train=False,\n                           transform=transforms.Compose([transforms.Resize(size=227),transforms.ToTensor()]),\n                           download=True)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=GoogLeNet(Inception)\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['T-shirt\u002Ftop','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[32,46143,46144,46150,46160,46170,46174,46184,46195,46199,46203,46207,46215,46231,46241,46257,46267,46281,46285,46295,46305,46315,46321,46325,46329,46337,46341,46357,46365,46369,46373,46381,46389,46393,46397,46401,46405,46411,46415,46425,46433,46441,46445,46449,46453,46461,46465,46481,46485,46489,46493,46505,46509,46521,46525,46529,46541,46545,46555,46559,46563,46575,46579,46587,46591,46595,46603,46607,46615,46619,46623,46627,46631,46635,46651,46659,46663,46667,46715,46721,46725,46735,46743,46751,46755,46759,46763,46767,46775,46779,46795,46799,46807,46815],{"__ignoreMap":79},[100,46145,46146,46148],{"class":102,"line":103},[100,46147,548],{"class":471},[100,46149,31961],{"class":258},[100,46151,46152,46154,46156,46158],{"class":102,"line":188},[100,46153,548],{"class":471},[100,46155,32973],{"class":258},[100,46157,561],{"class":471},[100,46159,32978],{"class":258},[100,46161,46162,46164,46166,46168],{"class":102,"line":199},[100,46163,32301],{"class":471},[100,46165,32956],{"class":258},[100,46167,548],{"class":471},[100,46169,32961],{"class":258},[100,46171,46172],{"class":102,"line":532},[100,46173,35477],{"class":1836},[100,46175,46176,46178,46180,46182],{"class":102,"line":577},[100,46177,32301],{"class":471},[100,46179,32929],{"class":258},[100,46181,548],{"class":471},[100,46183,32934],{"class":258},[100,46185,46186,46188,46190,46192],{"class":102,"line":589},[100,46187,32301],{"class":471},[100,46189,33472],{"class":258},[100,46191,548],{"class":471},[100,46193,46194],{"class":258}," GoogLeNet,Inception\n",[100,46196,46197],{"class":102,"line":595},[100,46198,570],{"emptyLinePlaceholder":569},[100,46200,46201],{"class":102,"line":601},[100,46202,570],{"emptyLinePlaceholder":569},[100,46204,46205],{"class":102,"line":606},[100,46206,35506],{"class":1836},[100,46208,46209,46211,46213],{"class":102,"line":612},[100,46210,678],{"class":471},[100,46212,35513],{"class":106},[100,46214,33510],{"class":258},[100,46216,46217,46219,46221,46223,46225,46227,46229],{"class":102,"line":618},[100,46218,35520],{"class":258},[100,46220,472],{"class":471},[100,46222,33013],{"class":258},[100,46224,33016],{"class":6812},[100,46226,472],{"class":471},[100,46228,33021],{"class":110},[100,46230,33024],{"class":258},[100,46232,46233,46235,46237,46239],{"class":102,"line":623},[100,46234,35537],{"class":6812},[100,46236,472],{"class":471},[100,46238,35542],{"class":117},[100,46240,33024],{"class":258},[100,46242,46243,46245,46247,46249,46251,46253,46255],{"class":102,"line":629},[100,46244,35549],{"class":6812},[100,46246,472],{"class":471},[100,46248,33051],{"class":258},[100,46250,33054],{"class":6812},[100,46252,472],{"class":471},[100,46254,37003],{"class":117},[100,46256,33062],{"class":258},[100,46258,46259,46261,46263,46265],{"class":102,"line":635},[100,46260,35566],{"class":6812},[100,46262,472],{"class":471},[100,46264,33034],{"class":117},[100,46266,809],{"class":258},[100,46268,46269,46271,46273,46275,46277,46279],{"class":102,"line":641},[100,46270,35577],{"class":258},[100,46272,472],{"class":471},[100,46274,33092],{"class":258},[100,46276,33095],{"class":6812},[100,46278,472],{"class":471},[100,46280,35588],{"class":258},[100,46282,46283],{"class":102,"line":647},[100,46284,35593],{"class":1836},[100,46286,46287,46289,46291,46293],{"class":102,"line":653},[100,46288,35598],{"class":6812},[100,46290,472],{"class":471},[100,46292,1985],{"class":117},[100,46294,33024],{"class":258},[100,46296,46297,46299,46301,46303],{"class":102,"line":659},[100,46298,35609],{"class":6812},[100,46300,472],{"class":471},[100,46302,33034],{"class":117},[100,46304,33024],{"class":258},[100,46306,46307,46309,46311,46313],{"class":102,"line":665},[100,46308,35620],{"class":6812},[100,46310,472],{"class":471},[100,46312,1366],{"class":117},[100,46314,809],{"class":258},[100,46316,46317,46319],{"class":102,"line":670},[100,46318,5689],{"class":471},[100,46320,35633],{"class":258},[100,46322,46323],{"class":102,"line":675},[100,46324,570],{"emptyLinePlaceholder":569},[100,46326,46327],{"class":102,"line":699},[100,46328,35642],{"class":1836},[100,46330,46331,46333,46335],{"class":102,"line":708},[100,46332,678],{"class":471},[100,46334,35649],{"class":106},[100,46336,35652],{"class":258},[100,46338,46339],{"class":102,"line":722},[100,46340,35657],{"class":1836},[100,46342,46343,46345,46347,46349,46351,46353,46355],{"class":102,"line":735},[100,46344,32799],{"class":258},[100,46346,472],{"class":471},[100,46348,32806],{"class":110},[100,46350,3325],{"class":471},[100,46352,32811],{"class":258},[100,46354,3322],{"class":471},[100,46356,35674],{"class":110},[100,46358,46359,46361,46363],{"class":102,"line":754},[100,46360,32851],{"class":258},[100,46362,472],{"class":471},[100,46364,33846],{"class":258},[100,46366,46367],{"class":102,"line":771},[100,46368,570],{"emptyLinePlaceholder":569},[100,46370,46371],{"class":102,"line":776},[100,46372,35691],{"class":1836},[100,46374,46375,46377,46379],{"class":102,"line":781},[100,46376,35696],{"class":258},[100,46378,472],{"class":471},[100,46380,33899],{"class":117},[100,46382,46383,46385,46387],{"class":102,"line":796},[100,46384,35705],{"class":258},[100,46386,472],{"class":471},[100,46388,4686],{"class":117},[100,46390,46391],{"class":102,"line":812},[100,46392,570],{"emptyLinePlaceholder":569},[100,46394,46395],{"class":102,"line":823},[100,46396,35718],{"class":1836},[100,46398,46399],{"class":102,"line":828},[100,46400,35723],{"class":1836},[100,46402,46403],{"class":102,"line":840},[100,46404,35728],{"class":1836},[100,46406,46407,46409],{"class":102,"line":845},[100,46408,35733],{"class":471},[100,46410,34440],{"class":258},[100,46412,46413],{"class":102,"line":868},[100,46414,35740],{"class":1836},[100,46416,46417,46419,46421,46423],{"class":102,"line":874},[100,46418,5003],{"class":471},[100,46420,35747],{"class":258},[100,46422,854],{"class":471},[100,46424,35752],{"class":258},[100,46426,46427,46429,46431],{"class":102,"line":879},[100,46428,35757],{"class":258},[100,46430,472],{"class":471},[100,46432,35762],{"class":258},[100,46434,46435,46437,46439],{"class":102,"line":889},[100,46436,35767],{"class":258},[100,46438,472],{"class":471},[100,46440,35772],{"class":258},[100,46442,46443],{"class":102,"line":894},[100,46444,35777],{"class":1836},[100,46446,46447],{"class":102,"line":900},[100,46448,34431],{"class":258},[100,46450,46451],{"class":102,"line":910},[100,46452,35786],{"class":1836},[100,46454,46455,46457,46459],{"class":102,"line":915},[100,46456,34216],{"class":258},[100,46458,472],{"class":471},[100,46460,35795],{"class":258},[100,46462,46463],{"class":102,"line":929},[100,46464,35800],{"class":1836},[100,46466,46467,46469,46471,46473,46475,46477,46479],{"class":102,"line":935},[100,46468,34233],{"class":258},[100,46470,472],{"class":471},[100,46472,34238],{"class":258},[100,46474,34241],{"class":6812},[100,46476,472],{"class":471},[100,46478,1985],{"class":117},[100,46480,809],{"class":258},[100,46482,46483],{"class":102,"line":945},[100,46484,35821],{"class":1836},[100,46486,46487],{"class":102,"line":950},[100,46488,35826],{"class":1836},[100,46490,46491],{"class":102,"line":955},[100,46492,35831],{"class":1836},[100,46494,46495,46497,46499,46501,46503],{"class":102,"line":972},[100,46496,35836],{"class":258},[100,46498,11062],{"class":471},[100,46500,34343],{"class":258},[100,46502,4551],{"class":471},[100,46504,35845],{"class":258},[100,46506,46507],{"class":102,"line":11370},[100,46508,35850],{"class":1836},[100,46510,46511,46513,46515,46517,46519],{"class":102,"line":11375},[100,46512,35855],{"class":258},[100,46514,11062],{"class":471},[100,46516,35860],{"class":258},[100,46518,1366],{"class":117},[100,46520,809],{"class":258},[100,46522,46523],{"class":102,"line":11380},[100,46524,570],{"emptyLinePlaceholder":569},[100,46526,46527],{"class":102,"line":11385},[100,46528,35873],{"class":1836},[100,46530,46531,46533,46535,46537,46539],{"class":102,"line":11394},[100,46532,35878],{"class":258},[100,46534,472],{"class":471},[100,46536,35883],{"class":258},[100,46538,2351],{"class":471},[100,46540,35888],{"class":258},[100,46542,46543],{"class":102,"line":11399},[100,46544,35893],{"class":1836},[100,46546,46547,46549,46551,46553],{"class":102,"line":11405},[100,46548,34007],{"class":117},[100,46550,713],{"class":258},[100,46552,35902],{"class":110},[100,46554,35905],{"class":258},[100,46556,46557],{"class":102,"line":11426},[100,46558,570],{"emptyLinePlaceholder":569},[100,46560,46561],{"class":102,"line":11432},[100,46562,35914],{"class":1836},[100,46564,46565,46567,46569,46571,46573],{"class":102,"line":11446},[100,46566,958],{"class":471},[100,46568,961],{"class":117},[100,46570,4551],{"class":471},[100,46572,32787],{"class":110},[100,46574,696],{"class":258},[100,46576,46577],{"class":102,"line":11452},[100,46578,35931],{"class":1836},[100,46580,46581,46583,46585],{"class":102,"line":11479},[100,46582,32851],{"class":258},[100,46584,472],{"class":471},[100,46586,46105],{"class":258},[100,46588,46589],{"class":102,"line":11488},[100,46590,35944],{"class":1836},[100,46592,46593],{"class":102,"line":11494},[100,46594,35949],{"class":1836},[100,46596,46597,46599,46601],{"class":102,"line":11502},[100,46598,35954],{"class":258},[100,46600,35957],{"class":110},[100,46602,751],{"class":258},[100,46604,46605],{"class":102,"line":11507},[100,46606,35964],{"class":1836},[100,46608,46609,46611,46613],{"class":102,"line":18185},[100,46610,35577],{"class":258},[100,46612,472],{"class":471},[100,46614,35973],{"class":258},[100,46616,46617],{"class":102,"line":18191},[100,46618,35978],{"class":1836},[100,46620,46621],{"class":102,"line":18214},[100,46622,35983],{"class":258},[100,46624,46625],{"class":102,"line":18220},[100,46626,570],{"emptyLinePlaceholder":569},[100,46628,46629],{"class":102,"line":18243},[100,46630,35992],{"class":1836},[100,46632,46633],{"class":102,"line":18257},[100,46634,35997],{"class":1836},[100,46636,46637,46639,46641,46643,46645,46647,46649],{"class":102,"line":18277},[100,46638,32799],{"class":258},[100,46640,472],{"class":471},[100,46642,32806],{"class":110},[100,46644,3325],{"class":471},[100,46646,32811],{"class":258},[100,46648,3322],{"class":471},[100,46650,35674],{"class":110},[100,46652,46653,46655,46657],{"class":102,"line":18283},[100,46654,32851],{"class":258},[100,46656,472],{"class":471},[100,46658,33846],{"class":258},[100,46660,46661],{"class":102,"line":18294},[100,46662,36026],{"class":1836},[100,46664,46665],{"class":102,"line":18317},[100,46666,36031],{"class":1836},[100,46668,46669,46671,46673,46675,46677,46679,46681,46683,46685,46687,46689,46691,46693,46695,46697,46699,46701,46703,46705,46707,46709,46711,46713],{"class":102,"line":18339},[100,46670,36036],{"class":258},[100,46672,472],{"class":471},[100,46674,2656],{"class":258},[100,46676,36043],{"class":110},[100,46678,2145],{"class":258},[100,46680,36048],{"class":110},[100,46682,2145],{"class":258},[100,46684,36053],{"class":110},[100,46686,2145],{"class":258},[100,46688,36058],{"class":110},[100,46690,2145],{"class":258},[100,46692,36063],{"class":110},[100,46694,2145],{"class":258},[100,46696,36068],{"class":110},[100,46698,2145],{"class":258},[100,46700,36073],{"class":110},[100,46702,2145],{"class":258},[100,46704,36078],{"class":110},[100,46706,2145],{"class":258},[100,46708,36083],{"class":110},[100,46710,2145],{"class":258},[100,46712,36088],{"class":110},[100,46714,34802],{"class":258},[100,46716,46717,46719],{"class":102,"line":18344},[100,46718,35733],{"class":471},[100,46720,34440],{"class":258},[100,46722,46723],{"class":102,"line":18350},[100,46724,36101],{"class":1836},[100,46726,46727,46729,46731,46733],{"class":102,"line":18364},[100,46728,5003],{"class":471},[100,46730,36108],{"class":258},[100,46732,854],{"class":471},[100,46734,35752],{"class":258},[100,46736,46737,46739,46741],{"class":102,"line":18377},[100,46738,34166],{"class":258},[100,46740,472],{"class":471},[100,46742,34171],{"class":258},[100,46744,46745,46747,46749],{"class":102,"line":18382},[100,46746,34181],{"class":258},[100,46748,472],{"class":471},[100,46750,34186],{"class":258},[100,46752,46753],{"class":102,"line":18396},[100,46754,570],{"emptyLinePlaceholder":569},[100,46756,46757],{"class":102,"line":18401},[100,46758,36137],{"class":1836},[100,46760,46761],{"class":102,"line":18407},[100,46762,34431],{"class":258},[100,46764,46765],{"class":102,"line":18412},[100,46766,36146],{"class":1836},[100,46768,46769,46771,46773],{"class":102,"line":18426},[100,46770,34216],{"class":258},[100,46772,472],{"class":471},[100,46774,34221],{"class":258},[100,46776,46777],{"class":102,"line":18431},[100,46778,36159],{"class":1836},[100,46780,46781,46783,46785,46787,46789,46791,46793],{"class":102,"line":18436},[100,46782,34233],{"class":258},[100,46784,472],{"class":471},[100,46786,34238],{"class":258},[100,46788,34241],{"class":6812},[100,46790,472],{"class":471},[100,46792,1985],{"class":117},[100,46794,809],{"class":258},[100,46796,46797],{"class":102,"line":18450},[100,46798,36180],{"class":1836},[100,46800,46801,46803,46805],{"class":102,"line":18462},[100,46802,36185],{"class":258},[100,46804,472],{"class":471},[100,46806,36190],{"class":258},[100,46808,46809,46811,46813],{"class":102,"line":18467},[100,46810,36195],{"class":258},[100,46812,472],{"class":471},[100,46814,36200],{"class":258},[100,46816,46817,46819,46821,46823,46825,46827,46829,46831],{"class":102,"line":18480},[100,46818,36205],{"class":117},[100,46820,713],{"class":258},[100,46822,36210],{"class":110},[100,46824,36213],{"class":258},[100,46826,36216],{"class":110},[100,46828,2145],{"class":258},[100,46830,36221],{"class":110},[100,46832,36224],{"class":258},[305,46834,46836],{"id":46835},"_24训练自己的数据集","2.4.训练自己的数据集",[19,46838,46839],{},"猫狗分类任务",[19,46841,46842],{},"划分数据集和验证集",[73,46844,46846],{"className":249,"code":46845,"language":251,"meta":79,"style":79},"# 创建脚本，用于划分数据集和验证集\nimport os\n# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\nfrom shutil import copy\nimport random\n\ndef mkfile(file):\n    if not os.path.exists(file):\n        os.makedirs(file)\n\n# 获取data文件夹下所有文件夹名（即需要分类的类名）\nfile_path='data_cat_dog'\nflower_class=[cla for cla in os.listdir(file_path)]\n\n# 创建训练集train文件夹\nmkfile('data\u002Ftrain')\nfor cla in flower_class:\n    mkfile('data\u002Ftrain\u002F'+cla)\n\n# 创建验证集val文件夹\nmkfile('data\u002Ftest')\nfor cla in flower_class:\n    mkfile('data\u002Ftest\u002F'+cla)\n\n# 划分比例，训练集：测试集=9：1\nsplit_rate=0.1\n\n# 遍历所有类别的全部图像并按比例分成训练集和验证集\n# cla_path：当前类别的原始图片路径\n# images：当前类别下所有图片的文件名列表\n# num：该类别图片总数\n# eval_index：从 images 随机抽取 10% 的图片作为验证集\n\nfor cla in flower_class:\n    cla_path = file_path + '\u002F' + cla + '\u002F'  # 某一类别的子目录\n    images = os.listdir(cla_path)  # iamges 列表存储了该目录下所有图像的名称\n    num = len(images)\n    eval_index = random.sample(images, k=int(num * split_rate))  # 从images列表中随机抽取 k 个图像名称\n    # 遍历该类别下的所有图片\n    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n    for index, image in enumerate(images):\n        # eval_index 中保存验证集val的图像名称\n        if image in eval_index:\n            image_path = cla_path + image\n            new_path = 'data\u002Ftest\u002F' + cla\n            copy(image_path, new_path)  # 将选中的图像复制到新路径\n\n        # 其余的图像保存在训练集train中\n        else:\n            image_path = cla_path + image\n            new_path = 'data\u002Ftrain\u002F' + cla\n            copy(image_path, new_path)\n            # 打印进度条信息\n            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n        print(\"\\r[{}] processing [{}\u002F{}]\".format(cla, index + 1, num), end=\"\")  # processing bar\n    print()\n\nprint(\"processing done!\")\n",[32,46847,46848,46853,46860,46865,46876,46883,46887,46897,46911,46920,46924,46929,46939,46959,46963,46968,46978,46989,47002,47006,47011,47020,47030,47041,47045,47050,47060,47064,47069,47074,47079,47084,47089,47093,47103,47130,47143,47155,47182,47187,47192,47206,47211,47223,47238,47253,47261,47265,47270,47276,47288,47301,47306,47311,47316,47366,47372,47376],{"__ignoreMap":79},[100,46849,46850],{"class":102,"line":103},[100,46851,46852],{"class":1836},"# 创建脚本，用于划分数据集和验证集\n",[100,46854,46855,46857],{"class":102,"line":188},[100,46856,548],{"class":471},[100,46858,46859],{"class":258}," os\n",[100,46861,46862],{"class":102,"line":199},[100,46863,46864],{"class":1836},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[100,46866,46867,46869,46872,46874],{"class":102,"line":532},[100,46868,32301],{"class":471},[100,46870,46871],{"class":258}," shutil ",[100,46873,548],{"class":471},[100,46875,33380],{"class":258},[100,46877,46878,46880],{"class":102,"line":577},[100,46879,548],{"class":471},[100,46881,46882],{"class":258}," random\n",[100,46884,46885],{"class":102,"line":589},[100,46886,570],{"emptyLinePlaceholder":569},[100,46888,46889,46891,46894],{"class":102,"line":595},[100,46890,678],{"class":471},[100,46892,46893],{"class":106}," mkfile",[100,46895,46896],{"class":258},"(file):\n",[100,46898,46899,46901,46903,46906,46909],{"class":102,"line":601},[100,46900,4702],{"class":471},[100,46902,40484],{"class":471},[100,46904,46905],{"class":258}," os.path.exists(",[100,46907,46908],{"class":6812},"file",[100,46910,865],{"class":258},[100,46912,46913,46916,46918],{"class":102,"line":606},[100,46914,46915],{"class":258},"        os.makedirs(",[100,46917,46908],{"class":6812},[100,46919,809],{"class":258},[100,46921,46922],{"class":102,"line":612},[100,46923,570],{"emptyLinePlaceholder":569},[100,46925,46926],{"class":102,"line":618},[100,46927,46928],{"class":1836},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[100,46930,46931,46934,46936],{"class":102,"line":623},[100,46932,46933],{"class":258},"file_path",[100,46935,472],{"class":471},[100,46937,46938],{"class":110},"'data_cat_dog'\n",[100,46940,46941,46944,46946,46949,46951,46954,46956],{"class":102,"line":629},[100,46942,46943],{"class":258},"flower_class",[100,46945,472],{"class":471},[100,46947,46948],{"class":258},"[cla ",[100,46950,1051],{"class":471},[100,46952,46953],{"class":258}," cla ",[100,46955,854],{"class":471},[100,46957,46958],{"class":258}," os.listdir(file_path)]\n",[100,46960,46961],{"class":102,"line":635},[100,46962,570],{"emptyLinePlaceholder":569},[100,46964,46965],{"class":102,"line":641},[100,46966,46967],{"class":1836},"# 创建训练集train文件夹\n",[100,46969,46970,46973,46976],{"class":102,"line":647},[100,46971,46972],{"class":258},"mkfile(",[100,46974,46975],{"class":110},"'data\u002Ftrain'",[100,46977,809],{"class":258},[100,46979,46980,46982,46984,46986],{"class":102,"line":653},[100,46981,1051],{"class":471},[100,46983,46953],{"class":258},[100,46985,854],{"class":471},[100,46987,46988],{"class":258}," flower_class:\n",[100,46990,46991,46994,46997,46999],{"class":102,"line":659},[100,46992,46993],{"class":258},"    mkfile(",[100,46995,46996],{"class":110},"'data\u002Ftrain\u002F'",[100,46998,2248],{"class":471},[100,47000,47001],{"class":258},"cla)\n",[100,47003,47004],{"class":102,"line":665},[100,47005,570],{"emptyLinePlaceholder":569},[100,47007,47008],{"class":102,"line":670},[100,47009,47010],{"class":1836},"# 创建验证集val文件夹\n",[100,47012,47013,47015,47018],{"class":102,"line":675},[100,47014,46972],{"class":258},[100,47016,47017],{"class":110},"'data\u002Ftest'",[100,47019,809],{"class":258},[100,47021,47022,47024,47026,47028],{"class":102,"line":699},[100,47023,1051],{"class":471},[100,47025,46953],{"class":258},[100,47027,854],{"class":471},[100,47029,46988],{"class":258},[100,47031,47032,47034,47037,47039],{"class":102,"line":708},[100,47033,46993],{"class":258},[100,47035,47036],{"class":110},"'data\u002Ftest\u002F'",[100,47038,2248],{"class":471},[100,47040,47001],{"class":258},[100,47042,47043],{"class":102,"line":722},[100,47044,570],{"emptyLinePlaceholder":569},[100,47046,47047],{"class":102,"line":735},[100,47048,47049],{"class":1836},"# 划分比例，训练集：测试集=9：1\n",[100,47051,47052,47055,47057],{"class":102,"line":754},[100,47053,47054],{"class":258},"split_rate",[100,47056,472],{"class":471},[100,47058,47059],{"class":117},"0.1\n",[100,47061,47062],{"class":102,"line":771},[100,47063,570],{"emptyLinePlaceholder":569},[100,47065,47066],{"class":102,"line":776},[100,47067,47068],{"class":1836},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[100,47070,47071],{"class":102,"line":781},[100,47072,47073],{"class":1836},"# cla_path：当前类别的原始图片路径\n",[100,47075,47076],{"class":102,"line":796},[100,47077,47078],{"class":1836},"# images：当前类别下所有图片的文件名列表\n",[100,47080,47081],{"class":102,"line":812},[100,47082,47083],{"class":1836},"# num：该类别图片总数\n",[100,47085,47086],{"class":102,"line":823},[100,47087,47088],{"class":1836},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[100,47090,47091],{"class":102,"line":828},[100,47092,570],{"emptyLinePlaceholder":569},[100,47094,47095,47097,47099,47101],{"class":102,"line":840},[100,47096,1051],{"class":471},[100,47098,46953],{"class":258},[100,47100,854],{"class":471},[100,47102,46988],{"class":258},[100,47104,47105,47108,47110,47113,47115,47118,47121,47123,47125,47127],{"class":102,"line":845},[100,47106,47107],{"class":258},"    cla_path ",[100,47109,472],{"class":471},[100,47111,47112],{"class":258}," file_path ",[100,47114,2248],{"class":471},[100,47116,47117],{"class":110}," '\u002F'",[100,47119,47120],{"class":471}," +",[100,47122,46953],{"class":258},[100,47124,2248],{"class":471},[100,47126,47117],{"class":110},[100,47128,47129],{"class":1836},"  # 某一类别的子目录\n",[100,47131,47132,47135,47137,47140],{"class":102,"line":868},[100,47133,47134],{"class":258},"    images ",[100,47136,472],{"class":471},[100,47138,47139],{"class":258}," os.listdir(cla_path)  ",[100,47141,47142],{"class":1836},"# iamges 列表存储了该目录下所有图像的名称\n",[100,47144,47145,47148,47150,47152],{"class":102,"line":874},[100,47146,47147],{"class":258},"    num ",[100,47149,472],{"class":471},[100,47151,8927],{"class":117},[100,47153,47154],{"class":258},"(images)\n",[100,47156,47157,47160,47162,47165,47167,47169,47171,47174,47176,47179],{"class":102,"line":879},[100,47158,47159],{"class":258},"    eval_index ",[100,47161,472],{"class":471},[100,47163,47164],{"class":258}," random.sample(images, ",[100,47166,2260],{"class":6812},[100,47168,472],{"class":471},[100,47170,1784],{"class":117},[100,47172,47173],{"class":258},"(num ",[100,47175,2222],{"class":471},[100,47177,47178],{"class":258}," split_rate))  ",[100,47180,47181],{"class":1836},"# 从images列表中随机抽取 k 个图像名称\n",[100,47183,47184],{"class":102,"line":889},[100,47185,47186],{"class":1836},"    # 遍历该类别下的所有图片\n",[100,47188,47189],{"class":102,"line":894},[100,47190,47191],{"class":1836},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[100,47193,47194,47196,47199,47201,47203],{"class":102,"line":900},[100,47195,848],{"class":471},[100,47197,47198],{"class":258}," index, image ",[100,47200,854],{"class":471},[100,47202,33164],{"class":117},[100,47204,47205],{"class":258},"(images):\n",[100,47207,47208],{"class":102,"line":910},[100,47209,47210],{"class":1836},"        # eval_index 中保存验证集val的图像名称\n",[100,47212,47213,47215,47218,47220],{"class":102,"line":915},[100,47214,4106],{"class":471},[100,47216,47217],{"class":258}," image ",[100,47219,854],{"class":471},[100,47221,47222],{"class":258}," eval_index:\n",[100,47224,47225,47228,47230,47233,47235],{"class":102,"line":929},[100,47226,47227],{"class":258},"            image_path ",[100,47229,472],{"class":471},[100,47231,47232],{"class":258}," cla_path ",[100,47234,2248],{"class":471},[100,47236,47237],{"class":258}," image\n",[100,47239,47240,47243,47245,47248,47250],{"class":102,"line":935},[100,47241,47242],{"class":258},"            new_path ",[100,47244,472],{"class":471},[100,47246,47247],{"class":110}," 'data\u002Ftest\u002F'",[100,47249,47120],{"class":471},[100,47251,47252],{"class":258}," cla\n",[100,47254,47255,47258],{"class":102,"line":945},[100,47256,47257],{"class":258},"            copy(image_path, new_path)  ",[100,47259,47260],{"class":1836},"# 将选中的图像复制到新路径\n",[100,47262,47263],{"class":102,"line":950},[100,47264,570],{"emptyLinePlaceholder":569},[100,47266,47267],{"class":102,"line":955},[100,47268,47269],{"class":1836},"        # 其余的图像保存在训练集train中\n",[100,47271,47272,47274],{"class":102,"line":972},[100,47273,4143],{"class":471},[100,47275,696],{"class":258},[100,47277,47278,47280,47282,47284,47286],{"class":102,"line":11370},[100,47279,47227],{"class":258},[100,47281,472],{"class":471},[100,47283,47232],{"class":258},[100,47285,2248],{"class":471},[100,47287,47237],{"class":258},[100,47289,47290,47292,47294,47297,47299],{"class":102,"line":11375},[100,47291,47242],{"class":258},[100,47293,472],{"class":471},[100,47295,47296],{"class":110}," 'data\u002Ftrain\u002F'",[100,47298,47120],{"class":471},[100,47300,47252],{"class":258},[100,47302,47303],{"class":102,"line":11380},[100,47304,47305],{"class":258},"            copy(image_path, new_path)\n",[100,47307,47308],{"class":102,"line":11385},[100,47309,47310],{"class":1836},"            # 打印进度条信息\n",[100,47312,47313],{"class":102,"line":11394},[100,47314,47315],{"class":1836},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[100,47317,47318,47320,47322,47324,47327,47329,47331,47334,47336,47338,47340,47343,47346,47348,47350,47353,47356,47358,47360,47363],{"class":102,"line":11399},[100,47319,34007],{"class":117},[100,47321,713],{"class":258},[100,47323,2019],{"class":110},[100,47325,47326],{"class":117},"\\r",[100,47328,2656],{"class":110},[100,47330,34015],{"class":117},[100,47332,47333],{"class":110},"] processing [",[100,47335,34015],{"class":117},[100,47337,2351],{"class":110},[100,47339,34015],{"class":117},[100,47341,47342],{"class":110},"]\"",[100,47344,47345],{"class":258},".format(cla, index ",[100,47347,2248],{"class":471},[100,47349,26693],{"class":117},[100,47351,47352],{"class":258},", num), ",[100,47354,47355],{"class":6812},"end",[100,47357,472],{"class":471},[100,47359,9248],{"class":110},[100,47361,47362],{"class":258},")  ",[100,47364,47365],{"class":1836},"# processing bar\n",[100,47367,47368,47370],{"class":102,"line":11405},[100,47369,702],{"class":117},[100,47371,3587],{"class":258},[100,47373,47374],{"class":102,"line":11426},[100,47375,570],{"emptyLinePlaceholder":569},[100,47377,47378,47380,47382,47385],{"class":102,"line":11432},[100,47379,1195],{"class":117},[100,47381,713],{"class":258},[100,47383,47384],{"class":110},"\"processing done!\"",[100,47386,809],{"class":258},[19,47388,47389],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[23579,47391,47393],{"id":47392},"_242模型代码","2.4.2.模型代码",[19,47395,47396],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[73,47398,47400],{"className":249,"code":47399,"language":251,"meta":79,"style":79},"import torch\nfrom torch import nn\nfrom torchsummary import summary\n\nclass Inception(nn.Module):\n    def __init__(self,in_channels,c1,c2,c3,c4):\n        super(Inception,self).__init__()\n        self.ReLu=nn.ReLU()\n        # 路线1：定义1*1卷积\n        self.p1_1=nn.Conv2d(in_channels=in_channels,out_channels=c1,kernel_size=1)\n        # 路线2：定义1*1卷积和3*3\n        self.p2_1=nn.Conv2d(in_channels=in_channels,out_channels=c2[0],kernel_size=1)\n        self.p2_2=nn.Conv2d(in_channels=c2[0],out_channels=c2[1],kernel_size=3,padding=1)\n        # 路线3：定义1*1卷积和5*5\n        self.p3_1=nn.Conv2d(in_channels=in_channels,out_channels=c3[0],kernel_size=1)\n        self.p3_2=nn.Conv2d(in_channels=c3[0],out_channels=c3[1],kernel_size=5,padding=2)\n        # 路线4：定义3*3最大池化和1*1卷积\n        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n        self.p4_1=nn.MaxPool2d(kernel_size=3,stride=1,padding=1)\n        self.p4_2=nn.Conv2d(in_channels=in_channels,out_channels=c4,kernel_size=1)\n\n    def forward(self,x):\n        p1=self.ReLu(self.p1_1(x))\n        p2=self.ReLu(self.p2_2(self.ReLu(self.p2_1(x))))\n        p3=self.ReLu(self.p3_2(self.ReLu(self.p3_1(x))))\n        p4=self.ReLu(self.p4_2(self.p4_1(x)))\n        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n        return torch.cat((p1,p2,p3,p4),dim=1)\n\n# 搭建GoogLeNet网络\nclass GoogLeNet(nn.Module):\n    # 必须把Inception导入到里边\n    def __init__(self,Inception):\n        super(GoogLeNet,self).__init__()\n        self.b1=nn.Sequential(\n            nn.Conv2d(in_channels=3,out_channels=64,kernel_size=7,stride=2,padding=3),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b2=nn.Sequential(\n            nn.Conv2d(in_channels=64,out_channels=64,kernel_size=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=64,out_channels=192,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b3=nn.Sequential(\n            Inception(192,64,(96,128),(16,32),32),\n            Inception(256,128,(128,192),(32,96),64),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b4=nn.Sequential(\n            Inception(480,192,(96,208),(16,48),64),\n            Inception(512,160,(112,224),(24,64),64),\n            Inception(512,128,(128,256),(24,64),64),\n            Inception(512,112,(128,288),(32,64),64),\n            Inception(528,256,(160,320),(32,128),128),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b5=nn.Sequential(\n            Inception(832,256,(160,320),(32,128),128),\n            Inception(832,384,(192,384),(48,128),128),\n            nn.AdaptiveAvgPool2d((1,1)),\n            nn.Flatten(),\n            nn.Linear(1024,2)\n        )\n        # 对模型参数初始化\n        for m in self.modules():\n            if isinstance(m,nn.Conv2d):\n                nn.init.kaiming_normal_(m.weight,mode='fan_out',nonlinearity='relu')\n                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n                # ② mode = 'fan_out'决定使用的fan值：\n                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n                if m.bias is not None:\n                    nn.init.constant_(m.bias,0)\n                elif isinstance(m,nn.Linear):\n                    nn.init.normal_(m.weight,0,0.01)\n                    if m.bias is not None:\n                        nn.init.constant_(m.bias,0)\n    # 定义前向传播\n    def forward(self,x):\n        x=self.b1(x)\n        x=self.b2(x)\n        x=self.b3(x)\n        x=self.b4(x)\n        x=self.b5(x)\n        return x\n\n# 模型展示\nif __name__==\"__main__\":\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    model=GoogLeNet(Inception).to(device)\n    print(summary(model,(1,224,224)))\n",[32,47401,47402,47408,47418,47428,47432,47448,47456,47470,47480,47484,47514,47518,47552,47598,47602,47636,47682,47686,47690,47724,47754,47758,47766,47780,47802,47824,47842,47846,47860,47864,47868,47884,47888,47896,47910,47920,47964,47968,47996,48000,48010,48038,48042,48078,48082,48110,48114,48124,48156,48188,48216,48220,48230,48262,48294,48326,48358,48390,48418,48422,48432,48464,48496,48508,48512,48524,48528,48532,48544,48552,48572,48576,48580,48584,48588,48592,48596,48610,48618,48626,48638,48652,48660,48664,48672,48682,48692,48702,48712,48722,48728,48732,48736,48748,48768,48776],{"__ignoreMap":79},[100,47403,47404,47406],{"class":102,"line":103},[100,47405,548],{"class":471},[100,47407,31961],{"class":258},[100,47409,47410,47412,47414,47416],{"class":102,"line":188},[100,47411,32301],{"class":471},[100,47413,32304],{"class":258},[100,47415,548],{"class":471},[100,47417,32309],{"class":258},[100,47419,47420,47422,47424,47426],{"class":102,"line":199},[100,47421,32301],{"class":471},[100,47423,32321],{"class":258},[100,47425,548],{"class":471},[100,47427,32326],{"class":258},[100,47429,47430],{"class":102,"line":532},[100,47431,570],{"emptyLinePlaceholder":569},[100,47433,47434,47436,47438,47440,47442,47444,47446],{"class":102,"line":577},[100,47435,16275],{"class":471},[100,47437,43047],{"class":106},[100,47439,713],{"class":258},[100,47441,32342],{"class":106},[100,47443,2325],{"class":258},[100,47445,32347],{"class":106},[100,47447,865],{"class":258},[100,47449,47450,47452,47454],{"class":102,"line":589},[100,47451,32364],{"class":471},[100,47453,32367],{"class":117},[100,47455,43066],{"class":258},[100,47457,47458,47460,47462,47464,47466,47468],{"class":102,"line":595},[100,47459,32380],{"class":117},[100,47461,43073],{"class":258},[100,47463,32386],{"class":117},[100,47465,32389],{"class":258},[100,47467,32392],{"class":117},[100,47469,3587],{"class":258},[100,47471,47472,47474,47476,47478],{"class":102,"line":601},[100,47473,32408],{"class":117},[100,47475,36326],{"class":258},[100,47477,472],{"class":471},[100,47479,36331],{"class":258},[100,47481,47482],{"class":102,"line":606},[100,47483,43096],{"class":1836},[100,47485,47486,47488,47490,47492,47494,47496,47498,47500,47502,47504,47506,47508,47510,47512],{"class":102,"line":612},[100,47487,32408],{"class":117},[100,47489,43103],{"class":258},[100,47491,472],{"class":471},[100,47493,32416],{"class":258},[100,47495,32419],{"class":6812},[100,47497,472],{"class":471},[100,47499,43114],{"class":258},[100,47501,32428],{"class":6812},[100,47503,472],{"class":471},[100,47505,43121],{"class":258},[100,47507,32437],{"class":6812},[100,47509,472],{"class":471},[100,47511,1985],{"class":117},[100,47513,809],{"class":258},[100,47515,47516],{"class":102,"line":618},[100,47517,43134],{"class":1836},[100,47519,47520,47522,47524,47526,47528,47530,47532,47534,47536,47538,47540,47542,47544,47546,47548,47550],{"class":102,"line":623},[100,47521,32408],{"class":117},[100,47523,43141],{"class":258},[100,47525,472],{"class":471},[100,47527,32416],{"class":258},[100,47529,32419],{"class":6812},[100,47531,472],{"class":471},[100,47533,43114],{"class":258},[100,47535,32428],{"class":6812},[100,47537,472],{"class":471},[100,47539,43158],{"class":258},[100,47541,1366],{"class":117},[100,47543,43163],{"class":258},[100,47545,32437],{"class":6812},[100,47547,472],{"class":471},[100,47549,1985],{"class":117},[100,47551,809],{"class":258},[100,47553,47554,47556,47558,47560,47562,47564,47566,47568,47570,47572,47574,47576,47578,47580,47582,47584,47586,47588,47590,47592,47594,47596],{"class":102,"line":629},[100,47555,32408],{"class":117},[100,47557,43178],{"class":258},[100,47559,472],{"class":471},[100,47561,32416],{"class":258},[100,47563,32419],{"class":6812},[100,47565,472],{"class":471},[100,47567,43158],{"class":258},[100,47569,1366],{"class":117},[100,47571,43163],{"class":258},[100,47573,32428],{"class":6812},[100,47575,472],{"class":471},[100,47577,43158],{"class":258},[100,47579,1985],{"class":117},[100,47581,43163],{"class":258},[100,47583,32437],{"class":6812},[100,47585,472],{"class":471},[100,47587,1849],{"class":117},[100,47589,2145],{"class":258},[100,47591,32446],{"class":6812},[100,47593,472],{"class":471},[100,47595,1985],{"class":117},[100,47597,809],{"class":258},[100,47599,47600],{"class":102,"line":635},[100,47601,43223],{"class":1836},[100,47603,47604,47606,47608,47610,47612,47614,47616,47618,47620,47622,47624,47626,47628,47630,47632,47634],{"class":102,"line":641},[100,47605,32408],{"class":117},[100,47607,43230],{"class":258},[100,47609,472],{"class":471},[100,47611,32416],{"class":258},[100,47613,32419],{"class":6812},[100,47615,472],{"class":471},[100,47617,43114],{"class":258},[100,47619,32428],{"class":6812},[100,47621,472],{"class":471},[100,47623,43247],{"class":258},[100,47625,1366],{"class":117},[100,47627,43163],{"class":258},[100,47629,32437],{"class":6812},[100,47631,472],{"class":471},[100,47633,1985],{"class":117},[100,47635,809],{"class":258},[100,47637,47638,47640,47642,47644,47646,47648,47650,47652,47654,47656,47658,47660,47662,47664,47666,47668,47670,47672,47674,47676,47678,47680],{"class":102,"line":647},[100,47639,32408],{"class":117},[100,47641,43266],{"class":258},[100,47643,472],{"class":471},[100,47645,32416],{"class":258},[100,47647,32419],{"class":6812},[100,47649,472],{"class":471},[100,47651,43247],{"class":258},[100,47653,1366],{"class":117},[100,47655,43163],{"class":258},[100,47657,32428],{"class":6812},[100,47659,472],{"class":471},[100,47661,43247],{"class":258},[100,47663,1985],{"class":117},[100,47665,43163],{"class":258},[100,47667,32437],{"class":6812},[100,47669,472],{"class":471},[100,47671,2086],{"class":117},[100,47673,2145],{"class":258},[100,47675,32446],{"class":6812},[100,47677,472],{"class":471},[100,47679,465],{"class":117},[100,47681,809],{"class":258},[100,47683,47684],{"class":102,"line":653},[100,47685,43311],{"class":1836},[100,47687,47688],{"class":102,"line":659},[100,47689,43316],{"class":1836},[100,47691,47692,47694,47696,47698,47700,47702,47704,47706,47708,47710,47712,47714,47716,47718,47720,47722],{"class":102,"line":665},[100,47693,32408],{"class":117},[100,47695,43323],{"class":258},[100,47697,472],{"class":471},[100,47699,36384],{"class":258},[100,47701,32437],{"class":6812},[100,47703,472],{"class":471},[100,47705,1849],{"class":117},[100,47707,2145],{"class":258},[100,47709,32492],{"class":6812},[100,47711,472],{"class":471},[100,47713,1985],{"class":117},[100,47715,2145],{"class":258},[100,47717,32446],{"class":6812},[100,47719,472],{"class":471},[100,47721,1985],{"class":117},[100,47723,809],{"class":258},[100,47725,47726,47728,47730,47732,47734,47736,47738,47740,47742,47744,47746,47748,47750,47752],{"class":102,"line":670},[100,47727,32408],{"class":117},[100,47729,43358],{"class":258},[100,47731,472],{"class":471},[100,47733,32416],{"class":258},[100,47735,32419],{"class":6812},[100,47737,472],{"class":471},[100,47739,43114],{"class":258},[100,47741,32428],{"class":6812},[100,47743,472],{"class":471},[100,47745,43375],{"class":258},[100,47747,32437],{"class":6812},[100,47749,472],{"class":471},[100,47751,1985],{"class":117},[100,47753,809],{"class":258},[100,47755,47756],{"class":102,"line":675},[100,47757,570],{"emptyLinePlaceholder":569},[100,47759,47760,47762,47764],{"class":102,"line":699},[100,47761,32364],{"class":471},[100,47763,32656],{"class":106},[100,47765,32659],{"class":258},[100,47767,47768,47770,47772,47774,47776,47778],{"class":102,"line":708},[100,47769,43400],{"class":258},[100,47771,472],{"class":471},[100,47773,32386],{"class":117},[100,47775,36739],{"class":258},[100,47777,32386],{"class":117},[100,47779,43411],{"class":258},[100,47781,47782,47784,47786,47788,47790,47792,47794,47796,47798,47800],{"class":102,"line":722},[100,47783,8681],{"class":258},[100,47785,472],{"class":471},[100,47787,32386],{"class":117},[100,47789,36739],{"class":258},[100,47791,32386],{"class":117},[100,47793,43426],{"class":258},[100,47795,32386],{"class":117},[100,47797,36739],{"class":258},[100,47799,32386],{"class":117},[100,47801,43435],{"class":258},[100,47803,47804,47806,47808,47810,47812,47814,47816,47818,47820,47822],{"class":102,"line":735},[100,47805,43440],{"class":258},[100,47807,472],{"class":471},[100,47809,32386],{"class":117},[100,47811,36739],{"class":258},[100,47813,32386],{"class":117},[100,47815,43451],{"class":258},[100,47817,32386],{"class":117},[100,47819,36739],{"class":258},[100,47821,32386],{"class":117},[100,47823,43460],{"class":258},[100,47825,47826,47828,47830,47832,47834,47836,47838,47840],{"class":102,"line":754},[100,47827,43465],{"class":258},[100,47829,472],{"class":471},[100,47831,32386],{"class":117},[100,47833,36739],{"class":258},[100,47835,32386],{"class":117},[100,47837,43476],{"class":258},[100,47839,32386],{"class":117},[100,47841,43481],{"class":258},[100,47843,47844],{"class":102,"line":771},[100,47845,43486],{"class":1836},[100,47847,47848,47850,47852,47854,47856,47858],{"class":102,"line":776},[100,47849,16333],{"class":471},[100,47851,43493],{"class":258},[100,47853,34241],{"class":6812},[100,47855,472],{"class":471},[100,47857,1985],{"class":117},[100,47859,809],{"class":258},[100,47861,47862],{"class":102,"line":781},[100,47863,570],{"emptyLinePlaceholder":569},[100,47865,47866],{"class":102,"line":796},[100,47867,43514],{"class":1836},[100,47869,47870,47872,47874,47876,47878,47880,47882],{"class":102,"line":812},[100,47871,16275],{"class":471},[100,47873,43521],{"class":106},[100,47875,713],{"class":258},[100,47877,32342],{"class":106},[100,47879,2325],{"class":258},[100,47881,32347],{"class":106},[100,47883,865],{"class":258},[100,47885,47886],{"class":102,"line":823},[100,47887,43536],{"class":1836},[100,47889,47890,47892,47894],{"class":102,"line":828},[100,47891,32364],{"class":471},[100,47893,32367],{"class":117},[100,47895,43545],{"class":258},[100,47897,47898,47900,47902,47904,47906,47908],{"class":102,"line":840},[100,47899,32380],{"class":117},[100,47901,43552],{"class":258},[100,47903,32386],{"class":117},[100,47905,32389],{"class":258},[100,47907,32392],{"class":117},[100,47909,3587],{"class":258},[100,47911,47912,47914,47916,47918],{"class":102,"line":845},[100,47913,32408],{"class":117},[100,47915,43567],{"class":258},[100,47917,472],{"class":471},[100,47919,39563],{"class":258},[100,47921,47922,47924,47926,47928,47930,47932,47934,47936,47938,47940,47942,47944,47946,47948,47950,47952,47954,47956,47958,47960,47962],{"class":102,"line":868},[100,47923,39568],{"class":258},[100,47925,32419],{"class":6812},[100,47927,472],{"class":471},[100,47929,1849],{"class":117},[100,47931,2145],{"class":258},[100,47933,32428],{"class":6812},[100,47935,472],{"class":471},[100,47937,1972],{"class":117},[100,47939,2145],{"class":258},[100,47941,32437],{"class":6812},[100,47943,472],{"class":471},[100,47945,2136],{"class":117},[100,47947,2145],{"class":258},[100,47949,32492],{"class":6812},[100,47951,472],{"class":471},[100,47953,465],{"class":117},[100,47955,2145],{"class":258},[100,47957,32446],{"class":6812},[100,47959,472],{"class":471},[100,47961,1849],{"class":117},[100,47963,39601],{"class":258},[100,47965,47966],{"class":102,"line":874},[100,47967,39606],{"class":258},[100,47969,47970,47972,47974,47976,47978,47980,47982,47984,47986,47988,47990,47992,47994],{"class":102,"line":879},[100,47971,39651],{"class":258},[100,47973,32437],{"class":6812},[100,47975,472],{"class":471},[100,47977,1849],{"class":117},[100,47979,2145],{"class":258},[100,47981,32492],{"class":6812},[100,47983,472],{"class":471},[100,47985,465],{"class":117},[100,47987,2145],{"class":258},[100,47989,32446],{"class":6812},[100,47991,472],{"class":471},[100,47993,1985],{"class":117},[100,47995,809],{"class":258},[100,47997,47998],{"class":102,"line":889},[100,47999,39680],{"class":258},[100,48001,48002,48004,48006,48008],{"class":102,"line":894},[100,48003,32408],{"class":117},[100,48005,43658],{"class":258},[100,48007,472],{"class":471},[100,48009,39563],{"class":258},[100,48011,48012,48014,48016,48018,48020,48022,48024,48026,48028,48030,48032,48034,48036],{"class":102,"line":900},[100,48013,39568],{"class":258},[100,48015,32419],{"class":6812},[100,48017,472],{"class":471},[100,48019,1972],{"class":117},[100,48021,2145],{"class":258},[100,48023,32428],{"class":6812},[100,48025,472],{"class":471},[100,48027,1972],{"class":117},[100,48029,2145],{"class":258},[100,48031,32437],{"class":6812},[100,48033,472],{"class":471},[100,48035,1985],{"class":117},[100,48037,39601],{"class":258},[100,48039,48040],{"class":102,"line":910},[100,48041,39606],{"class":258},[100,48043,48044,48046,48048,48050,48052,48054,48056,48058,48060,48062,48064,48066,48068,48070,48072,48074,48076],{"class":102,"line":915},[100,48045,39568],{"class":258},[100,48047,32419],{"class":6812},[100,48049,472],{"class":471},[100,48051,1972],{"class":117},[100,48053,2145],{"class":258},[100,48055,32428],{"class":6812},[100,48057,472],{"class":471},[100,48059,43713],{"class":117},[100,48061,2145],{"class":258},[100,48063,32437],{"class":6812},[100,48065,472],{"class":471},[100,48067,1849],{"class":117},[100,48069,2145],{"class":258},[100,48071,32446],{"class":6812},[100,48073,472],{"class":471},[100,48075,1985],{"class":117},[100,48077,39601],{"class":258},[100,48079,48080],{"class":102,"line":929},[100,48081,39606],{"class":258},[100,48083,48084,48086,48088,48090,48092,48094,48096,48098,48100,48102,48104,48106,48108],{"class":102,"line":935},[100,48085,39651],{"class":258},[100,48087,32437],{"class":6812},[100,48089,472],{"class":471},[100,48091,1849],{"class":117},[100,48093,2145],{"class":258},[100,48095,32492],{"class":6812},[100,48097,472],{"class":471},[100,48099,465],{"class":117},[100,48101,2145],{"class":258},[100,48103,32446],{"class":6812},[100,48105,472],{"class":471},[100,48107,1985],{"class":117},[100,48109,809],{"class":258},[100,48111,48112],{"class":102,"line":945},[100,48113,39680],{"class":258},[100,48115,48116,48118,48120,48122],{"class":102,"line":950},[100,48117,32408],{"class":117},[100,48119,43774],{"class":258},[100,48121,472],{"class":471},[100,48123,39563],{"class":258},[100,48125,48126,48128,48130,48132,48134,48136,48138,48140,48142,48144,48146,48148,48150,48152,48154],{"class":102,"line":955},[100,48127,43783],{"class":258},[100,48129,43713],{"class":117},[100,48131,2145],{"class":258},[100,48133,1972],{"class":117},[100,48135,43792],{"class":258},[100,48137,1978],{"class":117},[100,48139,2145],{"class":258},[100,48141,33627],{"class":117},[100,48143,43801],{"class":258},[100,48145,2368],{"class":117},[100,48147,2145],{"class":258},[100,48149,1966],{"class":117},[100,48151,43810],{"class":258},[100,48153,1966],{"class":117},[100,48155,39601],{"class":258},[100,48157,48158,48160,48162,48164,48166,48168,48170,48172,48174,48176,48178,48180,48182,48184,48186],{"class":102,"line":972},[100,48159,43783],{"class":258},[100,48161,36425],{"class":117},[100,48163,2145],{"class":258},[100,48165,33627],{"class":117},[100,48167,43792],{"class":258},[100,48169,33627],{"class":117},[100,48171,2145],{"class":258},[100,48173,43713],{"class":117},[100,48175,43801],{"class":258},[100,48177,1966],{"class":117},[100,48179,2145],{"class":258},[100,48181,1978],{"class":117},[100,48183,43810],{"class":258},[100,48185,1972],{"class":117},[100,48187,39601],{"class":258},[100,48189,48190,48192,48194,48196,48198,48200,48202,48204,48206,48208,48210,48212,48214],{"class":102,"line":11370},[100,48191,39651],{"class":258},[100,48193,32437],{"class":6812},[100,48195,472],{"class":471},[100,48197,1849],{"class":117},[100,48199,2145],{"class":258},[100,48201,32492],{"class":6812},[100,48203,472],{"class":471},[100,48205,465],{"class":117},[100,48207,2145],{"class":258},[100,48209,32446],{"class":6812},[100,48211,472],{"class":471},[100,48213,1985],{"class":117},[100,48215,809],{"class":258},[100,48217,48218],{"class":102,"line":11375},[100,48219,39680],{"class":258},[100,48221,48222,48224,48226,48228],{"class":102,"line":11380},[100,48223,32408],{"class":117},[100,48225,43885],{"class":258},[100,48227,472],{"class":471},[100,48229,39563],{"class":258},[100,48231,48232,48234,48236,48238,48240,48242,48244,48246,48248,48250,48252,48254,48256,48258,48260],{"class":102,"line":11385},[100,48233,43783],{"class":258},[100,48235,43896],{"class":117},[100,48237,2145],{"class":258},[100,48239,43713],{"class":117},[100,48241,43792],{"class":258},[100,48243,1978],{"class":117},[100,48245,2145],{"class":258},[100,48247,43909],{"class":117},[100,48249,43801],{"class":258},[100,48251,2368],{"class":117},[100,48253,2145],{"class":258},[100,48255,2374],{"class":117},[100,48257,43810],{"class":258},[100,48259,1972],{"class":117},[100,48261,39601],{"class":258},[100,48263,48264,48266,48268,48270,48272,48274,48276,48278,48280,48282,48284,48286,48288,48290,48292],{"class":102,"line":11394},[100,48265,43783],{"class":258},[100,48267,40011],{"class":117},[100,48269,2145],{"class":258},[100,48271,22629],{"class":117},[100,48273,43792],{"class":258},[100,48275,2385],{"class":117},[100,48277,2145],{"class":258},[100,48279,33059],{"class":117},[100,48281,43801],{"class":258},[100,48283,2566],{"class":117},[100,48285,2145],{"class":258},[100,48287,1972],{"class":117},[100,48289,43810],{"class":258},[100,48291,1972],{"class":117},[100,48293,39601],{"class":258},[100,48295,48296,48298,48300,48302,48304,48306,48308,48310,48312,48314,48316,48318,48320,48322,48324],{"class":102,"line":11399},[100,48297,43783],{"class":258},[100,48299,40011],{"class":117},[100,48301,2145],{"class":258},[100,48303,33627],{"class":117},[100,48305,43792],{"class":258},[100,48307,33627],{"class":117},[100,48309,2145],{"class":258},[100,48311,36425],{"class":117},[100,48313,43801],{"class":258},[100,48315,2566],{"class":117},[100,48317,2145],{"class":258},[100,48319,1972],{"class":117},[100,48321,43810],{"class":258},[100,48323,1972],{"class":117},[100,48325,39601],{"class":258},[100,48327,48328,48330,48332,48334,48336,48338,48340,48342,48344,48346,48348,48350,48352,48354,48356],{"class":102,"line":11405},[100,48329,43783],{"class":258},[100,48331,40011],{"class":117},[100,48333,2145],{"class":258},[100,48335,2385],{"class":117},[100,48337,43792],{"class":258},[100,48339,33627],{"class":117},[100,48341,2145],{"class":258},[100,48343,44006],{"class":117},[100,48345,43801],{"class":258},[100,48347,1966],{"class":117},[100,48349,2145],{"class":258},[100,48351,1972],{"class":117},[100,48353,43810],{"class":258},[100,48355,1972],{"class":117},[100,48357,39601],{"class":258},[100,48359,48360,48362,48364,48366,48368,48370,48372,48374,48376,48378,48380,48382,48384,48386,48388],{"class":102,"line":11426},[100,48361,43783],{"class":258},[100,48363,44027],{"class":117},[100,48365,2145],{"class":258},[100,48367,36425],{"class":117},[100,48369,43792],{"class":258},[100,48371,22629],{"class":117},[100,48373,2145],{"class":258},[100,48375,44040],{"class":117},[100,48377,43801],{"class":258},[100,48379,1966],{"class":117},[100,48381,2145],{"class":258},[100,48383,33627],{"class":117},[100,48385,43810],{"class":258},[100,48387,33627],{"class":117},[100,48389,39601],{"class":258},[100,48391,48392,48394,48396,48398,48400,48402,48404,48406,48408,48410,48412,48414,48416],{"class":102,"line":11432},[100,48393,39651],{"class":258},[100,48395,32437],{"class":6812},[100,48397,472],{"class":471},[100,48399,1849],{"class":117},[100,48401,2145],{"class":258},[100,48403,32492],{"class":6812},[100,48405,472],{"class":471},[100,48407,465],{"class":117},[100,48409,2145],{"class":258},[100,48411,32446],{"class":6812},[100,48413,472],{"class":471},[100,48415,1985],{"class":117},[100,48417,809],{"class":258},[100,48419,48420],{"class":102,"line":11446},[100,48421,39680],{"class":258},[100,48423,48424,48426,48428,48430],{"class":102,"line":11452},[100,48425,32408],{"class":117},[100,48427,44093],{"class":258},[100,48429,472],{"class":471},[100,48431,39563],{"class":258},[100,48433,48434,48436,48438,48440,48442,48444,48446,48448,48450,48452,48454,48456,48458,48460,48462],{"class":102,"line":11479},[100,48435,43783],{"class":258},[100,48437,44104],{"class":117},[100,48439,2145],{"class":258},[100,48441,36425],{"class":117},[100,48443,43792],{"class":258},[100,48445,22629],{"class":117},[100,48447,2145],{"class":258},[100,48449,44040],{"class":117},[100,48451,43801],{"class":258},[100,48453,1966],{"class":117},[100,48455,2145],{"class":258},[100,48457,33627],{"class":117},[100,48459,43810],{"class":258},[100,48461,33627],{"class":117},[100,48463,39601],{"class":258},[100,48465,48466,48468,48470,48472,48474,48476,48478,48480,48482,48484,48486,48488,48490,48492,48494],{"class":102,"line":11488},[100,48467,43783],{"class":258},[100,48469,44104],{"class":117},[100,48471,2145],{"class":258},[100,48473,36495],{"class":117},[100,48475,43792],{"class":258},[100,48477,43713],{"class":117},[100,48479,2145],{"class":258},[100,48481,36495],{"class":117},[100,48483,43801],{"class":258},[100,48485,2374],{"class":117},[100,48487,2145],{"class":258},[100,48489,33627],{"class":117},[100,48491,43810],{"class":258},[100,48493,33627],{"class":117},[100,48495,39601],{"class":258},[100,48497,48498,48500,48502,48504,48506],{"class":102,"line":11494},[100,48499,44167],{"class":258},[100,48501,1985],{"class":117},[100,48503,2145],{"class":258},[100,48505,1985],{"class":117},[100,48507,44176],{"class":258},[100,48509,48510],{"class":102,"line":11502},[100,48511,40344],{"class":258},[100,48513,48514,48516,48518,48520,48522],{"class":102,"line":11507},[100,48515,40349],{"class":258},[100,48517,44187],{"class":117},[100,48519,2145],{"class":258},[100,48521,465],{"class":117},[100,48523,809],{"class":258},[100,48525,48526],{"class":102,"line":18185},[100,48527,39680],{"class":258},[100,48529,48530],{"class":102,"line":18191},[100,48531,44202],{"class":1836},[100,48533,48534,48536,48538,48540,48542],{"class":102,"line":18214},[100,48535,5003],{"class":471},[100,48537,40422],{"class":258},[100,48539,854],{"class":471},[100,48541,40427],{"class":117},[100,48543,40430],{"class":258},[100,48545,48546,48548,48550],{"class":102,"line":18220},[100,48547,6240],{"class":471},[100,48549,40442],{"class":117},[100,48551,40445],{"class":258},[100,48553,48554,48556,48558,48560,48562,48564,48566,48568,48570],{"class":102,"line":18243},[100,48555,40455],{"class":258},[100,48557,44229],{"class":6812},[100,48559,472],{"class":471},[100,48561,44234],{"class":110},[100,48563,2145],{"class":258},[100,48565,40458],{"class":6812},[100,48567,472],{"class":471},[100,48569,40463],{"class":110},[100,48571,809],{"class":258},[100,48573,48574],{"class":102,"line":18257},[100,48575,44249],{"class":1836},[100,48577,48578],{"class":102,"line":18277},[100,48579,44254],{"class":1836},[100,48581,48582],{"class":102,"line":18283},[100,48583,44259],{"class":1836},[100,48585,48586],{"class":102,"line":18294},[100,48587,44264],{"class":1836},[100,48589,48590],{"class":102,"line":18317},[100,48591,44269],{"class":1836},[100,48593,48594],{"class":102,"line":18339},[100,48595,44274],{"class":1836},[100,48597,48598,48600,48602,48604,48606,48608],{"class":102,"line":18344},[100,48599,40475],{"class":471},[100,48601,40478],{"class":258},[100,48603,40481],{"class":471},[100,48605,40484],{"class":471},[100,48607,40487],{"class":117},[100,48609,696],{"class":258},[100,48611,48612,48614,48616],{"class":102,"line":18350},[100,48613,40499],{"class":258},[100,48615,1366],{"class":117},[100,48617,809],{"class":258},[100,48619,48620,48622,48624],{"class":102,"line":18364},[100,48621,44301],{"class":471},[100,48623,40442],{"class":117},[100,48625,40518],{"class":258},[100,48627,48628,48630,48632,48634,48636],{"class":102,"line":18377},[100,48629,44310],{"class":258},[100,48631,1366],{"class":117},[100,48633,2145],{"class":258},[100,48635,40540],{"class":117},[100,48637,809],{"class":258},[100,48639,48640,48642,48644,48646,48648,48650],{"class":102,"line":18382},[100,48641,44323],{"class":471},[100,48643,40478],{"class":258},[100,48645,40481],{"class":471},[100,48647,40484],{"class":471},[100,48649,40487],{"class":117},[100,48651,696],{"class":258},[100,48653,48654,48656,48658],{"class":102,"line":18396},[100,48655,44338],{"class":258},[100,48657,1366],{"class":117},[100,48659,809],{"class":258},[100,48661,48662],{"class":102,"line":18401},[100,48663,36720],{"class":1836},[100,48665,48666,48668,48670],{"class":102,"line":18407},[100,48667,32364],{"class":471},[100,48669,32656],{"class":106},[100,48671,32659],{"class":258},[100,48673,48674,48676,48678,48680],{"class":102,"line":18412},[100,48675,32664],{"class":258},[100,48677,472],{"class":471},[100,48679,32386],{"class":117},[100,48681,44365],{"class":258},[100,48683,48684,48686,48688,48690],{"class":102,"line":18426},[100,48685,32664],{"class":258},[100,48687,472],{"class":471},[100,48689,32386],{"class":117},[100,48691,44376],{"class":258},[100,48693,48694,48696,48698,48700],{"class":102,"line":18431},[100,48695,32664],{"class":258},[100,48697,472],{"class":471},[100,48699,32386],{"class":117},[100,48701,44387],{"class":258},[100,48703,48704,48706,48708,48710],{"class":102,"line":18436},[100,48705,32664],{"class":258},[100,48707,472],{"class":471},[100,48709,32386],{"class":117},[100,48711,44398],{"class":258},[100,48713,48714,48716,48718,48720],{"class":102,"line":18450},[100,48715,32664],{"class":258},[100,48717,472],{"class":471},[100,48719,32386],{"class":117},[100,48721,44409],{"class":258},[100,48723,48724,48726],{"class":102,"line":18462},[100,48725,16333],{"class":471},[100,48727,32772],{"class":258},[100,48729,48730],{"class":102,"line":18467},[100,48731,570],{"emptyLinePlaceholder":569},[100,48733,48734],{"class":102,"line":18480},[100,48735,44424],{"class":1836},[100,48737,48738,48740,48742,48744,48746],{"class":102,"line":18485},[100,48739,958],{"class":471},[100,48741,961],{"class":117},[100,48743,4551],{"class":471},[100,48745,32787],{"class":110},[100,48747,696],{"class":258},[100,48749,48750,48752,48754,48756,48758,48760,48762,48764,48766],{"class":102,"line":18490},[100,48751,32799],{"class":258},[100,48753,472],{"class":471},[100,48755,32016],{"class":258},[100,48757,32806],{"class":110},[100,48759,3325],{"class":471},[100,48761,32811],{"class":258},[100,48763,3322],{"class":471},[100,48765,32041],{"class":110},[100,48767,809],{"class":258},[100,48769,48770,48772,48774],{"class":102,"line":18495},[100,48771,32851],{"class":258},[100,48773,472],{"class":471},[100,48775,44465],{"class":258},[100,48777,48778,48780,48782,48784,48786,48788,48790,48792],{"class":102,"line":18508},[100,48779,702],{"class":117},[100,48781,32863],{"class":258},[100,48783,1985],{"class":117},[100,48785,2145],{"class":258},[100,48787,33059],{"class":117},[100,48789,2145],{"class":258},[100,48791,33059],{"class":117},[100,48793,32876],{"class":258},[23579,48795,48797],{"id":48796},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,48799,48800],{},"计算图片的均值与方差，用于训练中归一化处理操作",[73,48802,48804],{"className":249,"code":48803,"language":251,"meta":79,"style":79},"# PIL（Python Imaging Library）里的 Image 用来读取图片\nfrom PIL import Image\n# os 用来处理文件夹和文件路径\nimport os\n# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\nimport numpy as np\n\n# 文件夹路径，包含所有图片文件\nfolder_path = 'data_cat_dog'\n\n# 初始化累积变量\ntotal_pixels = 0\nsum_normalized_pixel_values = np.zeros(3)  # 如果是RGB图像，需要三个通道的均值和方差\n\n# 遍历文件夹中的图片文件\nfor root, dirs, files in os.walk(folder_path):\n    for filename in files:\n        if filename.endswith(('.jpg', '.jpeg', '.png', '.bmp')):  # 可根据实际情况添加其他格式\n            image_path = os.path.join(root, filename)\n            image = Image.open(image_path)\n            image_array = np.array(image)\n\n            # 归一化像素值到0-1之间\n            normalized_image_array = image_array \u002F 255.0\n\n            # print(image_path)\n            # print(normalized_image_array.shape)\n            # 累积归一化后的像素值和像素数量\n            total_pixels += normalized_image_array.size\n            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n            sum_normalized_pixel_values += np.sum(normalized_image_array, axis=(0, 1))\n\n# 用像素总和\u002F像素总数 就得到每个通道的均值\nmean = sum_normalized_pixel_values \u002F total_pixels\n\nsum_squared_diff = np.zeros(3)\n\n# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n# os.path.join(root, filename)：得到每张图片的完整路径\n# Image.open(image_path)：打开图片\n# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\nfor root, dirs, files in os.walk(folder_path):\n    for filename in files:\n        if filename.endswith(('.jpg', '.jpeg', '.png', '.bmp')):\n            image_path = os.path.join(root, filename)\n            image = Image.open(image_path)\n            image_array = np.array(image)\n            # 归一化像素值到0-1之间\n            normalized_image_array = image_array \u002F 255.0\n            # print(normalized_image_array.shape)\n            # print(mean.shape)\n            # print(image_path)\n\n            try:\n                diff = (normalized_image_array - mean) ** 2\n                sum_squared_diff += np.sum(diff, axis=(0, 1))\n            except:\n                print(f\"捕获到自定义异常\")\n            # diff = (normalized_image_array - mean) ** 2\n            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n\nvariance = sum_squared_diff \u002F total_pixels\n\nprint(\"Mean:\", mean)\nprint(\"Variance:\", variance)\n\n",[32,48805,48806,48811,48824,48829,48835,48840,48850,48854,48859,48869,48873,48878,48888,48905,48909,48914,48926,48938,48969,48978,48988,48998,49002,49007,49022,49026,49031,49036,49041,49051,49056,49081,49085,49090,49105,49109,49122,49126,49131,49136,49141,49146,49151,49161,49171,49194,49202,49210,49218,49222,49234,49238,49243,49247,49251,49258,49278,49302,49309,49323,49328,49333,49337,49351,49355,49367],{"__ignoreMap":79},[100,48807,48808],{"class":102,"line":103},[100,48809,48810],{"class":1836},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[100,48812,48813,48815,48818,48821],{"class":102,"line":188},[100,48814,32301],{"class":471},[100,48816,48817],{"class":117}," PIL",[100,48819,48820],{"class":471}," import",[100,48822,48823],{"class":258}," Image\n",[100,48825,48826],{"class":102,"line":199},[100,48827,48828],{"class":1836},"# os 用来处理文件夹和文件路径\n",[100,48830,48831,48833],{"class":102,"line":532},[100,48832,548],{"class":471},[100,48834,46859],{"class":258},[100,48836,48837],{"class":102,"line":577},[100,48838,48839],{"class":1836},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[100,48841,48842,48844,48846,48848],{"class":102,"line":589},[100,48843,548],{"class":471},[100,48845,558],{"class":258},[100,48847,561],{"class":471},[100,48849,564],{"class":258},[100,48851,48852],{"class":102,"line":595},[100,48853,570],{"emptyLinePlaceholder":569},[100,48855,48856],{"class":102,"line":601},[100,48857,48858],{"class":1836},"# 文件夹路径，包含所有图片文件\n",[100,48860,48861,48864,48866],{"class":102,"line":606},[100,48862,48863],{"class":258},"folder_path ",[100,48865,472],{"class":471},[100,48867,48868],{"class":110}," 'data_cat_dog'\n",[100,48870,48871],{"class":102,"line":612},[100,48872,570],{"emptyLinePlaceholder":569},[100,48874,48875],{"class":102,"line":618},[100,48876,48877],{"class":1836},"# 初始化累积变量\n",[100,48879,48880,48883,48885],{"class":102,"line":623},[100,48881,48882],{"class":258},"total_pixels ",[100,48884,472],{"class":471},[100,48886,48887],{"class":117}," 0\n",[100,48889,48890,48893,48895,48898,48900,48902],{"class":102,"line":629},[100,48891,48892],{"class":258},"sum_normalized_pixel_values ",[100,48894,472],{"class":471},[100,48896,48897],{"class":258}," np.zeros(",[100,48899,1849],{"class":117},[100,48901,47362],{"class":258},[100,48903,48904],{"class":1836},"# 如果是RGB图像，需要三个通道的均值和方差\n",[100,48906,48907],{"class":102,"line":635},[100,48908,570],{"emptyLinePlaceholder":569},[100,48910,48911],{"class":102,"line":641},[100,48912,48913],{"class":1836},"# 遍历文件夹中的图片文件\n",[100,48915,48916,48918,48921,48923],{"class":102,"line":647},[100,48917,1051],{"class":471},[100,48919,48920],{"class":258}," root, dirs, files ",[100,48922,854],{"class":471},[100,48924,48925],{"class":258}," os.walk(folder_path):\n",[100,48927,48928,48930,48933,48935],{"class":102,"line":653},[100,48929,848],{"class":471},[100,48931,48932],{"class":258}," filename ",[100,48934,854],{"class":471},[100,48936,48937],{"class":258}," files:\n",[100,48939,48940,48942,48945,48948,48950,48953,48955,48958,48960,48963,48966],{"class":102,"line":659},[100,48941,4106],{"class":471},[100,48943,48944],{"class":258}," filename.endswith((",[100,48946,48947],{"class":110},"'.jpg'",[100,48949,14017],{"class":258},[100,48951,48952],{"class":110},"'.jpeg'",[100,48954,14017],{"class":258},[100,48956,48957],{"class":110},"'.png'",[100,48959,14017],{"class":258},[100,48961,48962],{"class":110},"'.bmp'",[100,48964,48965],{"class":258},")):  ",[100,48967,48968],{"class":1836},"# 可根据实际情况添加其他格式\n",[100,48970,48971,48973,48975],{"class":102,"line":665},[100,48972,47227],{"class":258},[100,48974,472],{"class":471},[100,48976,48977],{"class":258}," os.path.join(root, filename)\n",[100,48979,48980,48983,48985],{"class":102,"line":670},[100,48981,48982],{"class":258},"            image ",[100,48984,472],{"class":471},[100,48986,48987],{"class":258}," Image.open(image_path)\n",[100,48989,48990,48993,48995],{"class":102,"line":675},[100,48991,48992],{"class":258},"            image_array ",[100,48994,472],{"class":471},[100,48996,48997],{"class":258}," np.array(image)\n",[100,48999,49000],{"class":102,"line":699},[100,49001,570],{"emptyLinePlaceholder":569},[100,49003,49004],{"class":102,"line":708},[100,49005,49006],{"class":1836},"            # 归一化像素值到0-1之间\n",[100,49008,49009,49012,49014,49017,49019],{"class":102,"line":722},[100,49010,49011],{"class":258},"            normalized_image_array ",[100,49013,472],{"class":471},[100,49015,49016],{"class":258}," image_array ",[100,49018,2351],{"class":471},[100,49020,49021],{"class":117}," 255.0\n",[100,49023,49024],{"class":102,"line":735},[100,49025,570],{"emptyLinePlaceholder":569},[100,49027,49028],{"class":102,"line":754},[100,49029,49030],{"class":1836},"            # print(image_path)\n",[100,49032,49033],{"class":102,"line":771},[100,49034,49035],{"class":1836},"            # print(normalized_image_array.shape)\n",[100,49037,49038],{"class":102,"line":776},[100,49039,49040],{"class":1836},"            # 累积归一化后的像素值和像素数量\n",[100,49042,49043,49046,49048],{"class":102,"line":781},[100,49044,49045],{"class":258},"            total_pixels ",[100,49047,11062],{"class":471},[100,49049,49050],{"class":258}," normalized_image_array.size\n",[100,49052,49053],{"class":102,"line":796},[100,49054,49055],{"class":1836},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[100,49057,49058,49061,49063,49066,49069,49071,49073,49075,49077,49079],{"class":102,"line":812},[100,49059,49060],{"class":258},"            sum_normalized_pixel_values ",[100,49062,11062],{"class":471},[100,49064,49065],{"class":258}," np.sum(normalized_image_array, ",[100,49067,49068],{"class":6812},"axis",[100,49070,472],{"class":471},[100,49072,713],{"class":258},[100,49074,1366],{"class":117},[100,49076,14017],{"class":258},[100,49078,1985],{"class":117},[100,49080,751],{"class":258},[100,49082,49083],{"class":102,"line":823},[100,49084,570],{"emptyLinePlaceholder":569},[100,49086,49087],{"class":102,"line":828},[100,49088,49089],{"class":1836},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[100,49091,49092,49095,49097,49100,49102],{"class":102,"line":840},[100,49093,49094],{"class":258},"mean ",[100,49096,472],{"class":471},[100,49098,49099],{"class":258}," sum_normalized_pixel_values ",[100,49101,2351],{"class":471},[100,49103,49104],{"class":258}," total_pixels\n",[100,49106,49107],{"class":102,"line":845},[100,49108,570],{"emptyLinePlaceholder":569},[100,49110,49111,49114,49116,49118,49120],{"class":102,"line":868},[100,49112,49113],{"class":258},"sum_squared_diff ",[100,49115,472],{"class":471},[100,49117,48897],{"class":258},[100,49119,1849],{"class":117},[100,49121,809],{"class":258},[100,49123,49124],{"class":102,"line":874},[100,49125,570],{"emptyLinePlaceholder":569},[100,49127,49128],{"class":102,"line":879},[100,49129,49130],{"class":1836},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[100,49132,49133],{"class":102,"line":889},[100,49134,49135],{"class":1836},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[100,49137,49138],{"class":102,"line":894},[100,49139,49140],{"class":1836},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[100,49142,49143],{"class":102,"line":900},[100,49144,49145],{"class":1836},"# Image.open(image_path)：打开图片\n",[100,49147,49148],{"class":102,"line":910},[100,49149,49150],{"class":1836},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[100,49152,49153,49155,49157,49159],{"class":102,"line":915},[100,49154,1051],{"class":471},[100,49156,48920],{"class":258},[100,49158,854],{"class":471},[100,49160,48925],{"class":258},[100,49162,49163,49165,49167,49169],{"class":102,"line":929},[100,49164,848],{"class":471},[100,49166,48932],{"class":258},[100,49168,854],{"class":471},[100,49170,48937],{"class":258},[100,49172,49173,49175,49177,49179,49181,49183,49185,49187,49189,49191],{"class":102,"line":935},[100,49174,4106],{"class":471},[100,49176,48944],{"class":258},[100,49178,48947],{"class":110},[100,49180,14017],{"class":258},[100,49182,48952],{"class":110},[100,49184,14017],{"class":258},[100,49186,48957],{"class":110},[100,49188,14017],{"class":258},[100,49190,48962],{"class":110},[100,49192,49193],{"class":258},")):\n",[100,49195,49196,49198,49200],{"class":102,"line":945},[100,49197,47227],{"class":258},[100,49199,472],{"class":471},[100,49201,48977],{"class":258},[100,49203,49204,49206,49208],{"class":102,"line":950},[100,49205,48982],{"class":258},[100,49207,472],{"class":471},[100,49209,48987],{"class":258},[100,49211,49212,49214,49216],{"class":102,"line":955},[100,49213,48992],{"class":258},[100,49215,472],{"class":471},[100,49217,48997],{"class":258},[100,49219,49220],{"class":102,"line":972},[100,49221,49006],{"class":1836},[100,49223,49224,49226,49228,49230,49232],{"class":102,"line":11370},[100,49225,49011],{"class":258},[100,49227,472],{"class":471},[100,49229,49016],{"class":258},[100,49231,2351],{"class":471},[100,49233,49021],{"class":117},[100,49235,49236],{"class":102,"line":11375},[100,49237,49035],{"class":1836},[100,49239,49240],{"class":102,"line":11380},[100,49241,49242],{"class":1836},"            # print(mean.shape)\n",[100,49244,49245],{"class":102,"line":11385},[100,49246,49030],{"class":1836},[100,49248,49249],{"class":102,"line":11394},[100,49250,570],{"emptyLinePlaceholder":569},[100,49252,49253,49256],{"class":102,"line":11399},[100,49254,49255],{"class":471},"            try",[100,49257,696],{"class":258},[100,49259,49260,49263,49265,49268,49270,49273,49275],{"class":102,"line":11405},[100,49261,49262],{"class":258},"                diff ",[100,49264,472],{"class":471},[100,49266,49267],{"class":258}," (normalized_image_array ",[100,49269,2299],{"class":471},[100,49271,49272],{"class":258}," mean) ",[100,49274,12243],{"class":471},[100,49276,49277],{"class":117}," 2\n",[100,49279,49280,49283,49285,49288,49290,49292,49294,49296,49298,49300],{"class":102,"line":11426},[100,49281,49282],{"class":258},"                sum_squared_diff ",[100,49284,11062],{"class":471},[100,49286,49287],{"class":258}," np.sum(diff, ",[100,49289,49068],{"class":6812},[100,49291,472],{"class":471},[100,49293,713],{"class":258},[100,49295,1366],{"class":117},[100,49297,14017],{"class":258},[100,49299,1985],{"class":117},[100,49301,751],{"class":258},[100,49303,49304,49307],{"class":102,"line":11432},[100,49305,49306],{"class":471},"            except",[100,49308,696],{"class":258},[100,49310,49311,49314,49316,49318,49321],{"class":102,"line":11446},[100,49312,49313],{"class":117},"                print",[100,49315,713],{"class":258},[100,49317,1830],{"class":471},[100,49319,49320],{"class":110},"\"捕获到自定义异常\"",[100,49322,809],{"class":258},[100,49324,49325],{"class":102,"line":11452},[100,49326,49327],{"class":1836},"            # diff = (normalized_image_array - mean) ** 2\n",[100,49329,49330],{"class":102,"line":11479},[100,49331,49332],{"class":1836},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[100,49334,49335],{"class":102,"line":11488},[100,49336,570],{"emptyLinePlaceholder":569},[100,49338,49339,49342,49344,49347,49349],{"class":102,"line":11494},[100,49340,49341],{"class":258},"variance ",[100,49343,472],{"class":471},[100,49345,49346],{"class":258}," sum_squared_diff ",[100,49348,2351],{"class":471},[100,49350,49104],{"class":258},[100,49352,49353],{"class":102,"line":11502},[100,49354,570],{"emptyLinePlaceholder":569},[100,49356,49357,49359,49361,49364],{"class":102,"line":11507},[100,49358,1195],{"class":117},[100,49360,713],{"class":258},[100,49362,49363],{"class":110},"\"Mean:\"",[100,49365,49366],{"class":258},", mean)\n",[100,49368,49369,49371,49373,49376],{"class":102,"line":18185},[100,49370,1195],{"class":117},[100,49372,713],{"class":258},[100,49374,49375],{"class":110},"\"Variance:\"",[100,49377,49378],{"class":258},", variance)\n",[73,49380,49382],{"className":249,"code":49381,"language":251,"meta":79,"style":79},"import copy\nimport time\nimport pandas as pd\nimport torch\nfrom torch.utils.data import Dataset\nfrom torchvision.datasets import ImageFolder # 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \nfrom torchvision import transforms\nimport torch.utils.data as Data\nimport matplotlib.pyplot as plt\n# 导入模型\nfrom model import GoogLeNet, Inception\nfrom torch import nn\n\n# 处理训练集与验证集函数--->划分数据集\ndef train_val_data_process():\n    # 导入自己的数据集，并进行数据处理\n    # 定义数据集的路径\n    ROOT_PATH=r\".\u002Fdata\u002Ftrain\"\n\n    # 定义归一化方法\n    # 这里需要先计算一下数据集的均值和方差\n    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n    # 第一个参数是均值，第二个参数是方差\n    normalize=transforms.Normalize([0.162,0.151,0.138],[0.058,0.052,0.048])\n    # 定义数据集处理方法变量\n    train_transform=transforms.Compose([\n        # 调整图像大小为224*224\n        transforms.Resize((224,224)),\n        # 将图像转换为张量\n        transforms.ToTensor(),\n        normalize])\n    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n\n    # 加载数据集\n    # 传入数据集路径与处理方法\n    train_data=ImageFolder(ROOT_PATH,transform=train_transform)\n\n    train_data,val_data=Data.random_split(train_data,[round(0.8*len(train_data)),round(0.2*len(train_data))])\n    train_dataloader = Data.DataLoader(dataset=train_data,\n                                       batch_size=32,\n                                       shuffle=True,\n                                       # 规定8个进程\n                                       num_workers=8)\n    val_dataloader=Data.DataLoader(dataset=val_data,\n                                   batch_size=32,\n                                   shuffle=True,\n                                   num_workers=8)\n    return train_dataloader,val_dataloader\n\n# 验证是否出错\n# train_val_data_process()\n\n# 定义模型训练函数\ndef train_model_process(model,train_dataloader,val_dataloader,num_epochs):\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else 'cpu')\n\n    # 定义优化器\n    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n    # lr为学习率\n    optimizer=torch.optim.Adam(model.parameters(),lr=0.001)\n\n    # 定义损失函数使用交叉熵损失函数\n    criterion=nn.CrossEntropyLoss()\n\n    # 将模型放到GPU中进行训练\n    model=model.to(device)\n    # 复制当前模型的参数\n    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n    best_model_wts=copy.deepcopy(model.state_dict())\n\n    # 初始化参数\n    # 最高准确度\n    best_acc=0.0\n    # 训练集损失列表\n    train_loss_all=[]\n    # 验证集函数列表\n    val_loss_all=[]\n    # 训练集准确度列表\n    train_acc_all=[]\n    # 验证集准确度列表\n    val_acc_all=[]\n\n    # 保存当前时间--->方便看每轮训练的时间\n    since=time.time()\n\n    # 准备工作完成--->开始训练模型\n    for epoch in range(num_epochs):\n        print(\"Epoch {}\u002F{}\".format(epoch,num_epochs-1))\n        print(\"-\"*10)\n\n        # 初始化参数\n        # 训练集损失函数\n        train_loss=0.0\n        # 训练集准确度\n        train_corrects=0\n        # 验证集损失函数\n        val_loss=0.0\n        # 验证集准确度\n        val_corrects=0\n        # 训练集样本数量\n        train_num=0\n        # 验证集样本数量\n        val_num=0\n        # 将数据放到设备,并开始训练\n        for step,(b_x,b_y) in enumerate(train_dataloader):\n            # 将特征放入到训练设备\n            b_x=b_x.to(device)\n            # 将标签放入到训练设备当中\n            b_y=b_y.to(device)\n            # 设置模型为训练模式\n            model.train()\n            # 将数据放到模型当中,开始前向传播\n            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n            output=model(b_x)\n            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算每一个batch的损失函数\n            loss=criterion(output,b_y)\n            # 将梯度初始化为0\n            optimizer.zero_grad()\n            # 梯度置为0后再进行反向传播\n            loss.backward()\n            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n            optimizer.step()\n            # loss.item()指的是batch的平均损失\n            train_loss+=loss.item()*b_x.size(0)\n            # 计算每个批次中正确预测的数量\n            train_corrects+=torch.sum(pre_lab==b_y.data)\n            # 计算目前为止一共处理了多少样本\n            train_num+=b_x.size(0)\n        # 验证数据\n        for step ,(b_x,b_y) in enumerate(val_dataloader):\n            # 将特征放到验证设备当中\n            b_x=b_x.to(device)\n            # 将标签放到放到训练设备当中\n            b_y=b_y.to(device)\n            # 开启验证模式，设置模型为评估模式\n            model.eval()\n            # 验证时不计算梯度以节省内存\u002F计算\n            with torch.no_grad():\n                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n                output=model(b_x)\n                # 查找每一行中最大值对应的下标\n                pre_lab=torch.argmax(output,dim=1)\n                # 计算验证集上的当前 batch 损失\n                val_batch_loss=criterion(output,b_y)\n                # 对损失函数进行累加（按样本数加权）\n                val_loss+=val_batch_loss.item()*b_x.size(0)\n                val_corrects+=torch.sum(pre_lab==b_y.data)\n            # 当前用于验证的样本数量\n            val_num+=b_x.size(0)\n        # 计算并保存每一次迭代的loss值和准确率\n        # 计算并保存训练集的loss值\n        train_loss_all.append(train_loss\u002Ftrain_num)\n        # 取双精度\n        # 计算并保存训练集的准确率\n        train_acc_all.append(train_corrects.double().item()\u002Ftrain_num)\n        # 计算并保存验证集的loss值\n        val_loss_all.append(val_loss\u002Fval_num)\n        # 计算并保存验证集的准确率\n        val_acc_all.append(val_corrects.double().item()\u002Fval_num)\n\n        # 打印训练一轮的loss值和准确率\n        print('{}train loss:{:.4f} train acc:{:.4f}'.format(epoch,train_loss_all[-1],train_acc_all[-1]))\n        print('{}val loss:{:.4f} val acc:{:.4f}'.format(epoch,val_loss_all[-1],val_acc_all[-1]))\n\n        # 判断准确度--->保存最优模型\n        if val_acc_all[-1]>best_acc:\n            # 保存当前模型准确度\n            best_acc:float=val_acc_all[-1]\n            # 保存当前的准确度\n            # model.state_dict()是当前模型的所有参数（权重和偏置）\n            best_model_wts=copy.deepcopy(model.state_dict())\n\n        # 计算耗时\n        time_use=time.time()-since\n        print('训练和验证耗费的时间{:.0f}m{:.0f}s'.format(time_use\u002F\u002F60,time_use%60))\n    # 选择最优参数并保存\n    # 保存最佳模型权重字典\n    torch.save(best_model_wts,'.\u002Fbest_model.pth')\n    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n    train_process=pd.DataFrame(data={\n        \"epoch\":range(num_epochs),\n        \"train_loss_all\":train_loss_all,\n        \"val_loss_all\":val_loss_all,\n        \"train_acc_all\":train_acc_all,\n        \"val_acc_all\":val_acc_all\n    })\n    # 返回训练保存的过程\n    return train_process\n\n# 将loss值和精度按照图片的形式展示出来\ndef matplot_acc_loss(train_process):\n    # 设置图的大小\n    plt.figure(figsize=(12,4))\n    # 设置图中有几张图\n    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n    # ①loss图\n    plt.subplot(1,2,1)\n    # 补充:\n    # plt.subplot(nrows, ncols, index)\n    # nrows：行数\n    # ncols：列数\n    # index：目前选中第几个子图（从1开始）\n    plt.plot(train_process[\"epoch\"],train_process.train_loss_all,'ro-',label='train loss')\n    plt.plot(train_process[\"epoch\"],train_process.val_loss_all,'bs--',label='val loss')\n    # 添加一个图例\n    plt.legend()\n    # 给轴添加标签\n    plt.xlabel('epoch')\n    plt.ylabel('loss')\n    # ②准确度图\n    plt.subplot(1,2,2)\n    plt.plot(train_process[\"epoch\"],train_process.train_acc_all,'ro-',label='train acc')\n    plt.plot(train_process[\"epoch\"],train_process.val_acc_all,'bs--',label='val acc')\n    # 添加图例\n    plt.legend()\n    plt.xlabel(\"epoch\")\n    plt.ylabel(\"acc\")\n    plt.show()\n\n# 正式开始训练:\nif __name__==\"__main__\":\n    # 将模型实例化\n    GoogLeNet=GoogLeNet(Inception)\n    train_dataloader,val_dataloader=train_val_data_process()\n    train_process=train_model_process(GoogLeNet,train_dataloader,val_dataloader,num_epochs=60)\n    matplot_acc_loss(train_process)\n",[32,49383,49384,49390,49396,49406,49412,49422,49436,49446,49456,49466,49470,49480,49490,49494,49498,49506,49511,49516,49535,49539,49544,49549,49554,49559,49600,49605,49615,49620,49633,49638,49643,49648,49653,49658,49662,49667,49672,49694,49698,49730,49744,49754,49764,49768,49778,49792,49802,49812,49822,49828,49832,49836,49840,49844,49848,49856,49876,49880,49884,49888,49892,49908,49912,49916,49924,49928,49932,49940,49944,49948,49952,49960,49964,49968,49972,49980,49984,49992,49996,50004,50008,50016,50020,50028,50032,50036,50044,50048,50052,50064,50088,50102,50106,50110,50114,50122,50126,50134,50138,50146,50150,50158,50162,50170,50174,50182,50186,50198,50202,50210,50214,50222,50226,50230,50234,50238,50246,50250,50266,50270,50278,50282,50286,50290,50294,50298,50302,50306,50322,50326,50338,50342,50354,50358,50370,50374,50382,50386,50394,50398,50402,50406,50412,50416,50424,50428,50444,50448,50456,50460,50476,50488,50492,50504,50508,50512,50520,50524,50528,50536,50540,50548,50552,50560,50564,50568,50610,50652,50656,50660,50676,50680,50696,50700,50704,50712,50716,50720,50732,50770,50774,50778,50786,50790,50804,50814,50820,50826,50832,50838,50842,50846,50852,50856,50860,50868,50872,50890,50894,50898,50902,50918,50922,50926,50930,50934,50938,50958,50978,50982,50986,50990,50998,51006,51010,51026,51046,51066,51070,51075,51084,51093,51098,51103,51108,51121,51126,51135,51144,51161],{"__ignoreMap":79},[100,49385,49386,49388],{"class":102,"line":103},[100,49387,548],{"class":471},[100,49389,33380],{"class":258},[100,49391,49392,49394],{"class":102,"line":188},[100,49393,548],{"class":471},[100,49395,33387],{"class":258},[100,49397,49398,49400,49402,49404],{"class":102,"line":199},[100,49399,548],{"class":471},[100,49401,33398],{"class":258},[100,49403,561],{"class":471},[100,49405,33403],{"class":258},[100,49407,49408,49410],{"class":102,"line":532},[100,49409,548],{"class":471},[100,49411,31961],{"class":258},[100,49413,49414,49416,49418,49420],{"class":102,"line":577},[100,49415,32301],{"class":471},[100,49417,32973],{"class":258},[100,49419,548],{"class":471},[100,49421,33420],{"class":258},[100,49423,49424,49426,49428,49430,49433],{"class":102,"line":589},[100,49425,32301],{"class":471},[100,49427,32929],{"class":258},[100,49429,548],{"class":471},[100,49431,49432],{"class":258}," ImageFolder ",[100,49434,49435],{"class":1836},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[100,49437,49438,49440,49442,49444],{"class":102,"line":595},[100,49439,32301],{"class":471},[100,49441,32956],{"class":258},[100,49443,548],{"class":471},[100,49445,32961],{"class":258},[100,49447,49448,49450,49452,49454],{"class":102,"line":601},[100,49449,548],{"class":471},[100,49451,32973],{"class":258},[100,49453,561],{"class":471},[100,49455,32978],{"class":258},[100,49457,49458,49460,49462,49464],{"class":102,"line":606},[100,49459,548],{"class":471},[100,49461,32990],{"class":258},[100,49463,561],{"class":471},[100,49465,32995],{"class":258},[100,49467,49468],{"class":102,"line":612},[100,49469,33465],{"class":1836},[100,49471,49472,49474,49476,49478],{"class":102,"line":618},[100,49473,32301],{"class":471},[100,49475,33472],{"class":258},[100,49477,548],{"class":471},[100,49479,44585],{"class":258},[100,49481,49482,49484,49486,49488],{"class":102,"line":623},[100,49483,32301],{"class":471},[100,49485,32304],{"class":258},[100,49487,548],{"class":471},[100,49489,32309],{"class":258},[100,49491,49492],{"class":102,"line":629},[100,49493,570],{"emptyLinePlaceholder":569},[100,49495,49496],{"class":102,"line":635},[100,49497,33500],{"class":1836},[100,49499,49500,49502,49504],{"class":102,"line":641},[100,49501,678],{"class":471},[100,49503,33507],{"class":106},[100,49505,33510],{"class":258},[100,49507,49508],{"class":102,"line":647},[100,49509,49510],{"class":1836},"    # 导入自己的数据集，并进行数据处理\n",[100,49512,49513],{"class":102,"line":653},[100,49514,49515],{"class":1836},"    # 定义数据集的路径\n",[100,49517,49518,49521,49523,49525,49527,49529,49533],{"class":102,"line":659},[100,49519,49520],{"class":117},"    ROOT_PATH",[100,49522,472],{"class":471},[100,49524,2436],{"class":471},[100,49526,2019],{"class":110},[100,49528,2325],{"class":117},[100,49530,49532],{"class":49531},"sA_wV","\u002Fdata\u002Ftrain",[100,49534,26708],{"class":110},[100,49536,49537],{"class":102,"line":665},[100,49538,570],{"emptyLinePlaceholder":569},[100,49540,49541],{"class":102,"line":670},[100,49542,49543],{"class":1836},"    # 定义归一化方法\n",[100,49545,49546],{"class":102,"line":675},[100,49547,49548],{"class":1836},"    # 这里需要先计算一下数据集的均值和方差\n",[100,49550,49551],{"class":102,"line":699},[100,49552,49553],{"class":1836},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[100,49555,49556],{"class":102,"line":708},[100,49557,49558],{"class":1836},"    # 第一个参数是均值，第二个参数是方差\n",[100,49560,49561,49564,49566,49569,49572,49574,49577,49579,49582,49585,49588,49590,49593,49595,49598],{"class":102,"line":722},[100,49562,49563],{"class":258},"    normalize",[100,49565,472],{"class":471},[100,49567,49568],{"class":258},"transforms.Normalize([",[100,49570,49571],{"class":117},"0.162",[100,49573,2145],{"class":258},[100,49575,49576],{"class":117},"0.151",[100,49578,2145],{"class":258},[100,49580,49581],{"class":117},"0.138",[100,49583,49584],{"class":258},"],[",[100,49586,49587],{"class":117},"0.058",[100,49589,2145],{"class":258},[100,49591,49592],{"class":117},"0.052",[100,49594,2145],{"class":258},[100,49596,49597],{"class":117},"0.048",[100,49599,6255],{"class":258},[100,49601,49602],{"class":102,"line":735},[100,49603,49604],{"class":1836},"    # 定义数据集处理方法变量\n",[100,49606,49607,49610,49612],{"class":102,"line":754},[100,49608,49609],{"class":258},"    train_transform",[100,49611,472],{"class":471},[100,49613,49614],{"class":258},"transforms.Compose([\n",[100,49616,49617],{"class":102,"line":771},[100,49618,49619],{"class":1836},"        # 调整图像大小为224*224\n",[100,49621,49622,49625,49627,49629,49631],{"class":102,"line":776},[100,49623,49624],{"class":258},"        transforms.Resize((",[100,49626,33059],{"class":117},[100,49628,2145],{"class":258},[100,49630,33059],{"class":117},[100,49632,44176],{"class":258},[100,49634,49635],{"class":102,"line":781},[100,49636,49637],{"class":1836},"        # 将图像转换为张量\n",[100,49639,49640],{"class":102,"line":796},[100,49641,49642],{"class":258},"        transforms.ToTensor(),\n",[100,49644,49645],{"class":102,"line":812},[100,49646,49647],{"class":258},"        normalize])\n",[100,49649,49650],{"class":102,"line":823},[100,49651,49652],{"class":1836},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[100,49654,49655],{"class":102,"line":828},[100,49656,49657],{"class":1836},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[100,49659,49660],{"class":102,"line":840},[100,49661,570],{"emptyLinePlaceholder":569},[100,49663,49664],{"class":102,"line":845},[100,49665,49666],{"class":1836},"    # 加载数据集\n",[100,49668,49669],{"class":102,"line":868},[100,49670,49671],{"class":1836},"    # 传入数据集路径与处理方法\n",[100,49673,49674,49676,49678,49681,49684,49686,49689,49691],{"class":102,"line":874},[100,49675,33515],{"class":258},[100,49677,472],{"class":471},[100,49679,49680],{"class":258},"ImageFolder(",[100,49682,49683],{"class":117},"ROOT_PATH",[100,49685,2145],{"class":258},[100,49687,49688],{"class":6812},"transform",[100,49690,472],{"class":471},[100,49692,49693],{"class":258},"train_transform)\n",[100,49695,49696],{"class":102,"line":879},[100,49697,570],{"emptyLinePlaceholder":569},[100,49699,49700,49702,49704,49706,49708,49710,49712,49714,49716,49718,49720,49722,49724,49726,49728],{"class":102,"line":889},[100,49701,33567],{"class":258},[100,49703,472],{"class":471},[100,49705,33572],{"class":258},[100,49707,33575],{"class":117},[100,49709,713],{"class":258},[100,49711,33580],{"class":117},[100,49713,2222],{"class":471},[100,49715,8954],{"class":117},[100,49717,33587],{"class":258},[100,49719,33575],{"class":117},[100,49721,713],{"class":258},[100,49723,33594],{"class":117},[100,49725,2222],{"class":471},[100,49727,8954],{"class":117},[100,49729,33601],{"class":258},[100,49731,49732,49734,49736,49738,49740,49742],{"class":102,"line":894},[100,49733,33606],{"class":258},[100,49735,472],{"class":471},[100,49737,33611],{"class":258},[100,49739,33095],{"class":6812},[100,49741,472],{"class":471},[100,49743,33100],{"class":258},[100,49745,49746,49748,49750,49752],{"class":102,"line":900},[100,49747,33622],{"class":6812},[100,49749,472],{"class":471},[100,49751,1966],{"class":117},[100,49753,33024],{"class":258},[100,49755,49756,49758,49760,49762],{"class":102,"line":910},[100,49757,33634],{"class":6812},[100,49759,472],{"class":471},[100,49761,33034],{"class":117},[100,49763,33024],{"class":258},[100,49765,49766],{"class":102,"line":915},[100,49767,33645],{"class":1836},[100,49769,49770,49772,49774,49776],{"class":102,"line":929},[100,49771,33650],{"class":6812},[100,49773,472],{"class":471},[100,49775,2162],{"class":117},[100,49777,809],{"class":258},[100,49779,49780,49782,49784,49786,49788,49790],{"class":102,"line":935},[100,49781,33661],{"class":258},[100,49783,472],{"class":471},[100,49785,33092],{"class":258},[100,49787,33095],{"class":6812},[100,49789,472],{"class":471},[100,49791,33672],{"class":258},[100,49793,49794,49796,49798,49800],{"class":102,"line":945},[100,49795,33677],{"class":6812},[100,49797,472],{"class":471},[100,49799,1966],{"class":117},[100,49801,33024],{"class":258},[100,49803,49804,49806,49808,49810],{"class":102,"line":950},[100,49805,33688],{"class":6812},[100,49807,472],{"class":471},[100,49809,33034],{"class":117},[100,49811,33024],{"class":258},[100,49813,49814,49816,49818,49820],{"class":102,"line":955},[100,49815,33699],{"class":6812},[100,49817,472],{"class":471},[100,49819,2162],{"class":117},[100,49821,809],{"class":258},[100,49823,49824,49826],{"class":102,"line":972},[100,49825,5689],{"class":471},[100,49827,33712],{"class":258},[100,49829,49830],{"class":102,"line":11370},[100,49831,570],{"emptyLinePlaceholder":569},[100,49833,49834],{"class":102,"line":11375},[100,49835,33721],{"class":1836},[100,49837,49838],{"class":102,"line":11380},[100,49839,33726],{"class":1836},[100,49841,49842],{"class":102,"line":11385},[100,49843,570],{"emptyLinePlaceholder":569},[100,49845,49846],{"class":102,"line":11394},[100,49847,33735],{"class":1836},[100,49849,49850,49852,49854],{"class":102,"line":11399},[100,49851,678],{"class":471},[100,49853,33742],{"class":106},[100,49855,33745],{"class":258},[100,49857,49858,49860,49862,49864,49866,49868,49870,49872,49874],{"class":102,"line":11405},[100,49859,32799],{"class":258},[100,49861,472],{"class":471},[100,49863,32016],{"class":258},[100,49865,32806],{"class":110},[100,49867,3325],{"class":471},[100,49869,32811],{"class":258},[100,49871,3322],{"class":471},[100,49873,33764],{"class":110},[100,49875,809],{"class":258},[100,49877,49878],{"class":102,"line":11426},[100,49879,570],{"emptyLinePlaceholder":569},[100,49881,49882],{"class":102,"line":11432},[100,49883,33779],{"class":1836},[100,49885,49886],{"class":102,"line":11446},[100,49887,33784],{"class":1836},[100,49889,49890],{"class":102,"line":11452},[100,49891,33789],{"class":1836},[100,49893,49894,49896,49898,49900,49902,49904,49906],{"class":102,"line":11479},[100,49895,33794],{"class":258},[100,49897,472],{"class":471},[100,49899,33799],{"class":258},[100,49901,33802],{"class":6812},[100,49903,472],{"class":471},[100,49905,33807],{"class":117},[100,49907,809],{"class":258},[100,49909,49910],{"class":102,"line":11488},[100,49911,570],{"emptyLinePlaceholder":569},[100,49913,49914],{"class":102,"line":11494},[100,49915,33818],{"class":1836},[100,49917,49918,49920,49922],{"class":102,"line":11502},[100,49919,33823],{"class":258},[100,49921,472],{"class":471},[100,49923,33828],{"class":258},[100,49925,49926],{"class":102,"line":11507},[100,49927,570],{"emptyLinePlaceholder":569},[100,49929,49930],{"class":102,"line":18185},[100,49931,33837],{"class":1836},[100,49933,49934,49936,49938],{"class":102,"line":18191},[100,49935,32851],{"class":258},[100,49937,472],{"class":471},[100,49939,33846],{"class":258},[100,49941,49942],{"class":102,"line":18214},[100,49943,33851],{"class":1836},[100,49945,49946],{"class":102,"line":18220},[100,49947,33856],{"class":1836},[100,49949,49950],{"class":102,"line":18243},[100,49951,33861],{"class":1836},[100,49953,49954,49956,49958],{"class":102,"line":18257},[100,49955,33866],{"class":258},[100,49957,472],{"class":471},[100,49959,33871],{"class":258},[100,49961,49962],{"class":102,"line":18277},[100,49963,570],{"emptyLinePlaceholder":569},[100,49965,49966],{"class":102,"line":18283},[100,49967,33884],{"class":1836},[100,49969,49970],{"class":102,"line":18294},[100,49971,33889],{"class":1836},[100,49973,49974,49976,49978],{"class":102,"line":18317},[100,49975,33894],{"class":258},[100,49977,472],{"class":471},[100,49979,33899],{"class":117},[100,49981,49982],{"class":102,"line":18339},[100,49983,33904],{"class":1836},[100,49985,49986,49988,49990],{"class":102,"line":18344},[100,49987,33909],{"class":258},[100,49989,472],{"class":471},[100,49991,33914],{"class":258},[100,49993,49994],{"class":102,"line":18350},[100,49995,33919],{"class":1836},[100,49997,49998,50000,50002],{"class":102,"line":18364},[100,49999,33924],{"class":258},[100,50001,472],{"class":471},[100,50003,33914],{"class":258},[100,50005,50006],{"class":102,"line":18377},[100,50007,33933],{"class":1836},[100,50009,50010,50012,50014],{"class":102,"line":18382},[100,50011,33938],{"class":258},[100,50013,472],{"class":471},[100,50015,33914],{"class":258},[100,50017,50018],{"class":102,"line":18396},[100,50019,33947],{"class":1836},[100,50021,50022,50024,50026],{"class":102,"line":18401},[100,50023,33952],{"class":258},[100,50025,472],{"class":471},[100,50027,33914],{"class":258},[100,50029,50030],{"class":102,"line":18407},[100,50031,570],{"emptyLinePlaceholder":569},[100,50033,50034],{"class":102,"line":18412},[100,50035,33965],{"class":1836},[100,50037,50038,50040,50042],{"class":102,"line":18426},[100,50039,33970],{"class":258},[100,50041,472],{"class":471},[100,50043,33975],{"class":258},[100,50045,50046],{"class":102,"line":18431},[100,50047,570],{"emptyLinePlaceholder":569},[100,50049,50050],{"class":102,"line":18436},[100,50051,33988],{"class":1836},[100,50053,50054,50056,50058,50060,50062],{"class":102,"line":18450},[100,50055,848],{"class":471},[100,50057,33995],{"class":258},[100,50059,854],{"class":471},[100,50061,857],{"class":117},[100,50063,34002],{"class":258},[100,50065,50066,50068,50070,50072,50074,50076,50078,50080,50082,50084,50086],{"class":102,"line":18462},[100,50067,34007],{"class":117},[100,50069,713],{"class":258},[100,50071,34012],{"class":110},[100,50073,34015],{"class":117},[100,50075,2351],{"class":110},[100,50077,34015],{"class":117},[100,50079,2019],{"class":110},[100,50081,34024],{"class":258},[100,50083,2299],{"class":471},[100,50085,1985],{"class":117},[100,50087,751],{"class":258},[100,50089,50090,50092,50094,50096,50098,50100],{"class":102,"line":18467},[100,50091,34007],{"class":117},[100,50093,713],{"class":258},[100,50095,34039],{"class":110},[100,50097,2222],{"class":471},[100,50099,2213],{"class":117},[100,50101,809],{"class":258},[100,50103,50104],{"class":102,"line":18480},[100,50105,570],{"emptyLinePlaceholder":569},[100,50107,50108],{"class":102,"line":18485},[100,50109,34054],{"class":1836},[100,50111,50112],{"class":102,"line":18490},[100,50113,34059],{"class":1836},[100,50115,50116,50118,50120],{"class":102,"line":18495},[100,50117,34064],{"class":258},[100,50119,472],{"class":471},[100,50121,33899],{"class":117},[100,50123,50124],{"class":102,"line":18508},[100,50125,34073],{"class":1836},[100,50127,50128,50130,50132],{"class":102,"line":18513},[100,50129,34078],{"class":258},[100,50131,472],{"class":471},[100,50133,4686],{"class":117},[100,50135,50136],{"class":102,"line":34189},[100,50137,34087],{"class":1836},[100,50139,50140,50142,50144],{"class":102,"line":34195},[100,50141,34092],{"class":258},[100,50143,472],{"class":471},[100,50145,33899],{"class":117},[100,50147,50148],{"class":102,"line":34201},[100,50149,34101],{"class":1836},[100,50151,50152,50154,50156],{"class":102,"line":34207},[100,50153,34106],{"class":258},[100,50155,472],{"class":471},[100,50157,4686],{"class":117},[100,50159,50160],{"class":102,"line":34213},[100,50161,34115],{"class":1836},[100,50163,50164,50166,50168],{"class":102,"line":34224},[100,50165,34120],{"class":258},[100,50167,472],{"class":471},[100,50169,4686],{"class":117},[100,50171,50172],{"class":102,"line":34230},[100,50173,34129],{"class":1836},[100,50175,50176,50178,50180],{"class":102,"line":34250},[100,50177,34134],{"class":258},[100,50179,472],{"class":471},[100,50181,4686],{"class":117},[100,50183,50184],{"class":102,"line":34256},[100,50185,34143],{"class":1836},[100,50187,50188,50190,50192,50194,50196],{"class":102,"line":34267},[100,50189,5003],{"class":471},[100,50191,33159],{"class":258},[100,50193,854],{"class":471},[100,50195,33164],{"class":117},[100,50197,34156],{"class":258},[100,50199,50200],{"class":102,"line":34273},[100,50201,34161],{"class":1836},[100,50203,50204,50206,50208],{"class":102,"line":34279},[100,50205,34166],{"class":258},[100,50207,472],{"class":471},[100,50209,34171],{"class":258},[100,50211,50212],{"class":102,"line":34285},[100,50213,34176],{"class":1836},[100,50215,50216,50218,50220],{"class":102,"line":34291},[100,50217,34181],{"class":258},[100,50219,472],{"class":471},[100,50221,34186],{"class":258},[100,50223,50224],{"class":102,"line":34297},[100,50225,34192],{"class":1836},[100,50227,50228],{"class":102,"line":34303},[100,50229,34198],{"class":258},[100,50231,50232],{"class":102,"line":34309},[100,50233,34204],{"class":1836},[100,50235,50236],{"class":102,"line":34329},[100,50237,34210],{"class":1836},[100,50239,50240,50242,50244],{"class":102,"line":34335},[100,50241,34216],{"class":258},[100,50243,472],{"class":471},[100,50245,34221],{"class":258},[100,50247,50248],{"class":102,"line":34351},[100,50249,34227],{"class":1836},[100,50251,50252,50254,50256,50258,50260,50262,50264],{"class":102,"line":34357},[100,50253,34233],{"class":258},[100,50255,472],{"class":471},[100,50257,34238],{"class":258},[100,50259,34241],{"class":6812},[100,50261,472],{"class":471},[100,50263,1985],{"class":117},[100,50265,809],{"class":258},[100,50267,50268],{"class":102,"line":34371},[100,50269,34253],{"class":1836},[100,50271,50272,50274,50276],{"class":102,"line":34377},[100,50273,34259],{"class":258},[100,50275,472],{"class":471},[100,50277,34264],{"class":258},[100,50279,50280],{"class":102,"line":34392},[100,50281,34270],{"class":1836},[100,50283,50284],{"class":102,"line":34398},[100,50285,34276],{"class":258},[100,50287,50288],{"class":102,"line":34407},[100,50289,34282],{"class":1836},[100,50291,50292],{"class":102,"line":34413},[100,50293,34288],{"class":258},[100,50295,50296],{"class":102,"line":34422},[100,50297,34294],{"class":1836},[100,50299,50300],{"class":102,"line":34428},[100,50301,34300],{"class":258},[100,50303,50304],{"class":102,"line":34434},[100,50305,34306],{"class":1836},[100,50307,50308,50310,50312,50314,50316,50318,50320],{"class":102,"line":34443},[100,50309,34312],{"class":258},[100,50311,11062],{"class":471},[100,50313,34317],{"class":258},[100,50315,2222],{"class":471},[100,50317,34322],{"class":258},[100,50319,1366],{"class":117},[100,50321,809],{"class":258},[100,50323,50324],{"class":102,"line":34449},[100,50325,34332],{"class":1836},[100,50327,50328,50330,50332,50334,50336],{"class":102,"line":34460},[100,50329,34338],{"class":258},[100,50331,11062],{"class":471},[100,50333,34343],{"class":258},[100,50335,4551],{"class":471},[100,50337,34348],{"class":258},[100,50339,50340],{"class":102,"line":34466},[100,50341,34354],{"class":1836},[100,50343,50344,50346,50348,50350,50352],{"class":102,"line":34485},[100,50345,34360],{"class":258},[100,50347,11062],{"class":471},[100,50349,34322],{"class":258},[100,50351,1366],{"class":117},[100,50353,809],{"class":258},[100,50355,50356],{"class":102,"line":34491},[100,50357,34374],{"class":1836},[100,50359,50360,50362,50364,50366,50368],{"class":102,"line":34502},[100,50361,5003],{"class":471},[100,50363,34382],{"class":258},[100,50365,854],{"class":471},[100,50367,33164],{"class":117},[100,50369,34389],{"class":258},[100,50371,50372],{"class":102,"line":34508},[100,50373,34395],{"class":1836},[100,50375,50376,50378,50380],{"class":102,"line":34528},[100,50377,34166],{"class":258},[100,50379,472],{"class":471},[100,50381,34171],{"class":258},[100,50383,50384],{"class":102,"line":34544},[100,50385,34410],{"class":1836},[100,50387,50388,50390,50392],{"class":102,"line":34550},[100,50389,34181],{"class":258},[100,50391,472],{"class":471},[100,50393,34186],{"class":258},[100,50395,50396],{"class":102,"line":34564},[100,50397,34425],{"class":1836},[100,50399,50400],{"class":102,"line":34570},[100,50401,34431],{"class":258},[100,50403,50404],{"class":102,"line":34576},[100,50405,37910],{"class":1836},[100,50407,50408,50410],{"class":102,"line":34587},[100,50409,34437],{"class":471},[100,50411,34440],{"class":258},[100,50413,50414],{"class":102,"line":34593},[100,50415,34446],{"class":1836},[100,50417,50418,50420,50422],{"class":102,"line":34599},[100,50419,37925],{"class":258},[100,50421,472],{"class":471},[100,50423,34221],{"class":258},[100,50425,50426],{"class":102,"line":34609},[100,50427,34463],{"class":1836},[100,50429,50430,50432,50434,50436,50438,50440,50442],{"class":102,"line":34615},[100,50431,37938],{"class":258},[100,50433,472],{"class":471},[100,50435,34238],{"class":258},[100,50437,34241],{"class":6812},[100,50439,472],{"class":471},[100,50441,1985],{"class":117},[100,50443,809],{"class":258},[100,50445,50446],{"class":102,"line":34626},[100,50447,34488],{"class":1836},[100,50449,50450,50452,50454],{"class":102,"line":34632},[100,50451,37959],{"class":258},[100,50453,472],{"class":471},[100,50455,34264],{"class":258},[100,50457,50458],{"class":102,"line":34642},[100,50459,34505],{"class":1836},[100,50461,50462,50464,50466,50468,50470,50472,50474],{"class":102,"line":34647},[100,50463,37972],{"class":258},[100,50465,11062],{"class":471},[100,50467,37977],{"class":258},[100,50469,2222],{"class":471},[100,50471,34322],{"class":258},[100,50473,1366],{"class":117},[100,50475,809],{"class":258},[100,50477,50478,50480,50482,50484,50486],{"class":102,"line":34653},[100,50479,37990],{"class":258},[100,50481,11062],{"class":471},[100,50483,34343],{"class":258},[100,50485,4551],{"class":471},[100,50487,34348],{"class":258},[100,50489,50490],{"class":102,"line":34702},[100,50491,38003],{"class":1836},[100,50493,50494,50496,50498,50500,50502],{"class":102,"line":34749},[100,50495,38008],{"class":258},[100,50497,11062],{"class":471},[100,50499,34322],{"class":258},[100,50501,1366],{"class":117},[100,50503,809],{"class":258},[100,50505,50506],{"class":102,"line":34754},[100,50507,34567],{"class":1836},[100,50509,50510],{"class":102,"line":34760},[100,50511,34573],{"class":1836},[100,50513,50514,50516,50518],{"class":102,"line":34779},[100,50515,34579],{"class":258},[100,50517,2351],{"class":471},[100,50519,34584],{"class":258},[100,50521,50522],{"class":102,"line":34785},[100,50523,34590],{"class":1836},[100,50525,50526],{"class":102,"line":34805},[100,50527,34596],{"class":1836},[100,50529,50530,50532,50534],{"class":102,"line":34811},[100,50531,34602],{"class":258},[100,50533,2351],{"class":471},[100,50535,34584],{"class":258},[100,50537,50538],{"class":102,"line":34817},[100,50539,34612],{"class":1836},[100,50541,50542,50544,50546],{"class":102,"line":34827},[100,50543,34618],{"class":258},[100,50545,2351],{"class":471},[100,50547,34623],{"class":258},[100,50549,50550],{"class":102,"line":34832},[100,50551,34629],{"class":1836},[100,50553,50554,50556,50558],{"class":102,"line":34838},[100,50555,34635],{"class":258},[100,50557,2351],{"class":471},[100,50559,34623],{"class":258},[100,50561,50562],{"class":102,"line":34854},[100,50563,570],{"emptyLinePlaceholder":569},[100,50565,50566],{"class":102,"line":34899},[100,50567,34650],{"class":1836},[100,50569,50570,50572,50574,50576,50578,50580,50582,50584,50586,50588,50590,50592,50594,50596,50598,50600,50602,50604,50606,50608],{"class":102,"line":34905},[100,50571,34007],{"class":117},[100,50573,713],{"class":258},[100,50575,5192],{"class":110},[100,50577,34015],{"class":117},[100,50579,34664],{"class":110},[100,50581,2662],{"class":117},[100,50583,34669],{"class":471},[100,50585,2712],{"class":117},[100,50587,34674],{"class":110},[100,50589,2662],{"class":117},[100,50591,34669],{"class":471},[100,50593,2712],{"class":117},[100,50595,5192],{"class":110},[100,50597,34685],{"class":258},[100,50599,2299],{"class":471},[100,50601,1985],{"class":117},[100,50603,34692],{"class":258},[100,50605,2299],{"class":471},[100,50607,1985],{"class":117},[100,50609,34699],{"class":258},[100,50611,50612,50614,50616,50618,50620,50622,50624,50626,50628,50630,50632,50634,50636,50638,50640,50642,50644,50646,50648,50650],{"class":102,"line":34911},[100,50613,34007],{"class":117},[100,50615,713],{"class":258},[100,50617,5192],{"class":110},[100,50619,34015],{"class":117},[100,50621,34713],{"class":110},[100,50623,2662],{"class":117},[100,50625,34669],{"class":471},[100,50627,2712],{"class":117},[100,50629,34722],{"class":110},[100,50631,2662],{"class":117},[100,50633,34669],{"class":471},[100,50635,2712],{"class":117},[100,50637,5192],{"class":110},[100,50639,34733],{"class":258},[100,50641,2299],{"class":471},[100,50643,1985],{"class":117},[100,50645,34740],{"class":258},[100,50647,2299],{"class":471},[100,50649,1985],{"class":117},[100,50651,34699],{"class":258},[100,50653,50654],{"class":102,"line":34917},[100,50655,570],{"emptyLinePlaceholder":569},[100,50657,50658],{"class":102,"line":34928},[100,50659,34757],{"class":1836},[100,50661,50662,50664,50666,50668,50670,50672,50674],{"class":102,"line":34934},[100,50663,4106],{"class":471},[100,50665,34765],{"class":258},[100,50667,2299],{"class":471},[100,50669,1985],{"class":117},[100,50671,2706],{"class":258},[100,50673,2726],{"class":471},[100,50675,34776],{"class":258},[100,50677,50678],{"class":102,"line":34940},[100,50679,34782],{"class":1836},[100,50681,50682,50684,50686,50688,50690,50692,50694],{"class":102,"line":34946},[100,50683,34788],{"class":258},[100,50685,1819],{"class":117},[100,50687,472],{"class":471},[100,50689,34795],{"class":258},[100,50691,2299],{"class":471},[100,50693,1985],{"class":117},[100,50695,34802],{"class":258},[100,50697,50698],{"class":102,"line":34963},[100,50699,34808],{"class":1836},[100,50701,50702],{"class":102,"line":34977},[100,50703,34814],{"class":1836},[100,50705,50706,50708,50710],{"class":102,"line":34986},[100,50707,34820],{"class":258},[100,50709,472],{"class":471},[100,50711,33871],{"class":258},[100,50713,50714],{"class":102,"line":34995},[100,50715,570],{"emptyLinePlaceholder":569},[100,50717,50718],{"class":102,"line":35004},[100,50719,34835],{"class":1836},[100,50721,50722,50724,50726,50728,50730],{"class":102,"line":35013},[100,50723,34841],{"class":258},[100,50725,472],{"class":471},[100,50727,34846],{"class":258},[100,50729,2299],{"class":471},[100,50731,34851],{"class":258},[100,50733,50734,50736,50738,50740,50742,50744,50746,50748,50750,50752,50754,50756,50758,50760,50762,50764,50766,50768],{"class":102,"line":35019},[100,50735,34007],{"class":117},[100,50737,713],{"class":258},[100,50739,34861],{"class":110},[100,50741,2662],{"class":117},[100,50743,34866],{"class":471},[100,50745,2712],{"class":117},[100,50747,2311],{"class":110},[100,50749,2662],{"class":117},[100,50751,34866],{"class":471},[100,50753,2712],{"class":117},[100,50755,34879],{"class":110},[100,50757,34882],{"class":258},[100,50759,34885],{"class":471},[100,50761,2673],{"class":117},[100,50763,34890],{"class":258},[100,50765,2095],{"class":471},[100,50767,2673],{"class":117},[100,50769,751],{"class":258},[100,50771,50772],{"class":102,"line":35025},[100,50773,38287],{"class":1836},[100,50775,50776],{"class":102,"line":35033},[100,50777,38292],{"class":1836},[100,50779,50780,50782,50784],{"class":102,"line":35038},[100,50781,38297],{"class":258},[100,50783,34923],{"class":110},[100,50785,809],{"class":258},[100,50787,50788],{"class":102,"line":35044},[100,50789,34943],{"class":1836},[100,50791,50792,50794,50796,50798,50800,50802],{"class":102,"line":35055},[100,50793,34949],{"class":258},[100,50795,472],{"class":471},[100,50797,34954],{"class":258},[100,50799,499],{"class":6812},[100,50801,472],{"class":471},[100,50803,3178],{"class":258},[100,50805,50806,50808,50810,50812],{"class":102,"line":35061},[100,50807,34966],{"class":110},[100,50809,2625],{"class":258},[100,50811,34971],{"class":117},[100,50813,34974],{"class":258},[100,50815,50816,50818],{"class":102,"line":35081},[100,50817,34980],{"class":110},[100,50819,34983],{"class":258},[100,50821,50822,50824],{"class":102,"line":35087},[100,50823,34989],{"class":110},[100,50825,34992],{"class":258},[100,50827,50828,50830],{"class":102,"line":35093},[100,50829,34998],{"class":110},[100,50831,35001],{"class":258},[100,50833,50834,50836],{"class":102,"line":35099},[100,50835,35007],{"class":110},[100,50837,35010],{"class":258},[100,50839,50840],{"class":102,"line":35116},[100,50841,35016],{"class":258},[100,50843,50844],{"class":102,"line":35122},[100,50845,35022],{"class":1836},[100,50847,50848,50850],{"class":102,"line":35128},[100,50849,5689],{"class":471},[100,50851,35030],{"class":258},[100,50853,50854],{"class":102,"line":35134},[100,50855,570],{"emptyLinePlaceholder":569},[100,50857,50858],{"class":102,"line":35140},[100,50859,35041],{"class":1836},[100,50861,50862,50864,50866],{"class":102,"line":35146},[100,50863,678],{"class":471},[100,50865,35049],{"class":106},[100,50867,35052],{"class":258},[100,50869,50870],{"class":102,"line":35173},[100,50871,35058],{"class":1836},[100,50873,50874,50876,50878,50880,50882,50884,50886,50888],{"class":102,"line":35197},[100,50875,35064],{"class":258},[100,50877,33251],{"class":6812},[100,50879,472],{"class":471},[100,50881,713],{"class":258},[100,50883,2265],{"class":117},[100,50885,2145],{"class":258},[100,50887,748],{"class":117},[100,50889,751],{"class":258},[100,50891,50892],{"class":102,"line":35203},[100,50893,35084],{"class":1836},[100,50895,50896],{"class":102,"line":35209},[100,50897,35090],{"class":1836},[100,50899,50900],{"class":102,"line":35215},[100,50901,35096],{"class":1836},[100,50903,50904,50906,50908,50910,50912,50914,50916],{"class":102,"line":35226},[100,50905,33285],{"class":258},[100,50907,1985],{"class":117},[100,50909,2145],{"class":258},[100,50911,465],{"class":117},[100,50913,2145],{"class":258},[100,50915,1985],{"class":117},[100,50917,809],{"class":258},[100,50919,50920],{"class":102,"line":35237},[100,50921,35119],{"class":1836},[100,50923,50924],{"class":102,"line":35243},[100,50925,35125],{"class":1836},[100,50927,50928],{"class":102,"line":35260},[100,50929,35131],{"class":1836},[100,50931,50932],{"class":102,"line":35283},[100,50933,35137],{"class":1836},[100,50935,50936],{"class":102,"line":35306},[100,50937,35143],{"class":1836},[100,50939,50940,50942,50944,50946,50948,50950,50952,50954,50956],{"class":102,"line":35312},[100,50941,35149],{"class":258},[100,50943,35152],{"class":110},[100,50945,35155],{"class":258},[100,50947,35158],{"class":110},[100,50949,2145],{"class":258},[100,50951,35163],{"class":6812},[100,50953,472],{"class":471},[100,50955,35168],{"class":110},[100,50957,809],{"class":258},[100,50959,50960,50962,50964,50966,50968,50970,50972,50974,50976],{"class":102,"line":35317},[100,50961,35149],{"class":258},[100,50963,35152],{"class":110},[100,50965,35180],{"class":258},[100,50967,35183],{"class":110},[100,50969,2145],{"class":258},[100,50971,35163],{"class":6812},[100,50973,472],{"class":471},[100,50975,35192],{"class":110},[100,50977,809],{"class":258},[100,50979,50980],{"class":102,"line":35326},[100,50981,35200],{"class":1836},[100,50983,50984],{"class":102,"line":35336},[100,50985,35206],{"class":258},[100,50987,50988],{"class":102,"line":35342},[100,50989,35212],{"class":1836},[100,50991,50992,50994,50996],{"class":102,"line":35347},[100,50993,35218],{"class":258},[100,50995,35221],{"class":110},[100,50997,809],{"class":258},[100,50999,51000,51002,51004],{"class":102,"line":35353},[100,51001,35229],{"class":258},[100,51003,35232],{"class":110},[100,51005,809],{"class":258},[100,51007,51008],{"class":102,"line":35366},[100,51009,35240],{"class":1836},[100,51011,51012,51014,51016,51018,51020,51022,51024],{"class":102,"line":35372},[100,51013,33285],{"class":258},[100,51015,1985],{"class":117},[100,51017,2145],{"class":258},[100,51019,465],{"class":117},[100,51021,2145],{"class":258},[100,51023,465],{"class":117},[100,51025,809],{"class":258},[100,51027,51028,51030,51032,51034,51036,51038,51040,51042,51044],{"class":102,"line":35383},[100,51029,35149],{"class":258},[100,51031,35152],{"class":110},[100,51033,35267],{"class":258},[100,51035,35158],{"class":110},[100,51037,2145],{"class":258},[100,51039,35163],{"class":6812},[100,51041,472],{"class":471},[100,51043,35278],{"class":110},[100,51045,809],{"class":258},[100,51047,51048,51050,51052,51054,51056,51058,51060,51062,51064],{"class":102,"line":35394},[100,51049,35149],{"class":258},[100,51051,35152],{"class":110},[100,51053,35290],{"class":258},[100,51055,35183],{"class":110},[100,51057,2145],{"class":258},[100,51059,35163],{"class":6812},[100,51061,472],{"class":471},[100,51063,35301],{"class":110},[100,51065,809],{"class":258},[100,51067,51068],{"class":102,"line":35413},[100,51069,35309],{"class":1836},[100,51071,51073],{"class":102,"line":51072},219,[100,51074,35206],{"class":258},[100,51076,51078,51080,51082],{"class":102,"line":51077},220,[100,51079,35218],{"class":258},[100,51081,35152],{"class":110},[100,51083,809],{"class":258},[100,51085,51087,51089,51091],{"class":102,"line":51086},221,[100,51088,35229],{"class":258},[100,51090,35331],{"class":110},[100,51092,809],{"class":258},[100,51094,51096],{"class":102,"line":51095},222,[100,51097,35339],{"class":258},[100,51099,51101],{"class":102,"line":51100},223,[100,51102,570],{"emptyLinePlaceholder":569},[100,51104,51106],{"class":102,"line":51105},224,[100,51107,35350],{"class":1836},[100,51109,51111,51113,51115,51117,51119],{"class":102,"line":51110},225,[100,51112,958],{"class":471},[100,51114,961],{"class":117},[100,51116,4551],{"class":471},[100,51118,32787],{"class":110},[100,51120,696],{"class":258},[100,51122,51124],{"class":102,"line":51123},226,[100,51125,35369],{"class":1836},[100,51127,51129,51131,51133],{"class":102,"line":51128},227,[100,51130,46100],{"class":258},[100,51132,472],{"class":471},[100,51134,46105],{"class":258},[100,51136,51138,51140,51142],{"class":102,"line":51137},228,[100,51139,35386],{"class":258},[100,51141,472],{"class":471},[100,51143,35391],{"class":258},[100,51145,51147,51149,51151,51153,51155,51157,51159],{"class":102,"line":51146},229,[100,51148,34949],{"class":258},[100,51150,472],{"class":471},[100,51152,46122],{"class":258},[100,51154,35404],{"class":6812},[100,51156,472],{"class":471},[100,51158,2673],{"class":117},[100,51160,809],{"class":258},[100,51162,51164],{"class":102,"line":51163},230,[100,51165,35416],{"class":258},[23579,51167,51169],{"id":51168},"_242测试代码","2.4.2.测试代码",[19,51171,51172],{},"使用测试集进行测试与推理",[73,51174,51176],{"className":249,"code":51175,"language":251,"meta":79,"style":79},"import torch\nimport torch.utils.data as Data\nfrom torchvision import transforms\nfrom torchvision.datasets import ImageFolder\nfrom model import GoogLeNet,Inception\n\n# 测试数据处理\ndef test_data_process():\n   # 导入自己的数据集，并进行数据处理\n    # 定义数据集的路径\n    ROOT_PATH=r\".\u002Fdata\u002Ftest\"\n\n    # 定义归一化方法\n    # 这里需要先计算一下数据集的均值和方差\n    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n    # 第一个参数是均值，第二个参数是方差\n    normalize=transforms.Normalize([0.162,0.151,0.138],[0.058,0.052,0.048])\n    # 定义数据集处理方法变量\n    train_transform=transforms.Compose([\n        # 调整图像大小为224*224\n        transforms.Resize((224,224)),\n        # 将图像转换为张量\n        transforms.ToTensor(),\n        normalize])\n    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n\n    # 加载数据集\n    # 传入数据集路径与处理方法\n    test_data=ImageFolder(ROOT_PATH,transform=train_transform)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=GoogLeNet(Inception)\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['猫','狗']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[32,51177,51178,51184,51194,51204,51215,51225,51229,51233,51241,51246,51250,51267,51271,51275,51279,51283,51287,51319,51323,51331,51335,51347,51351,51355,51359,51363,51367,51371,51375,51379,51397,51411,51415,51425,51435,51445,51451,51455,51459,51467,51471,51487,51495,51499,51503,51511,51519,51523,51527,51531,51535,51541,51545,51555,51563,51571,51575,51579,51583,51591,51595,51611,51615,51619,51623,51635,51639,51651,51655,51659,51671,51675,51685,51689,51693,51705,51709,51717,51721,51725,51733,51737,51745,51749,51753,51757,51761,51765,51781,51789,51793,51797,51815,51821,51825,51835,51843,51851,51855,51859,51863,51867,51875,51879,51895,51899,51907,51915],{"__ignoreMap":79},[100,51179,51180,51182],{"class":102,"line":103},[100,51181,548],{"class":471},[100,51183,31961],{"class":258},[100,51185,51186,51188,51190,51192],{"class":102,"line":188},[100,51187,548],{"class":471},[100,51189,32973],{"class":258},[100,51191,561],{"class":471},[100,51193,32978],{"class":258},[100,51195,51196,51198,51200,51202],{"class":102,"line":199},[100,51197,32301],{"class":471},[100,51199,32956],{"class":258},[100,51201,548],{"class":471},[100,51203,32961],{"class":258},[100,51205,51206,51208,51210,51212],{"class":102,"line":532},[100,51207,32301],{"class":471},[100,51209,32929],{"class":258},[100,51211,548],{"class":471},[100,51213,51214],{"class":258}," ImageFolder\n",[100,51216,51217,51219,51221,51223],{"class":102,"line":577},[100,51218,32301],{"class":471},[100,51220,33472],{"class":258},[100,51222,548],{"class":471},[100,51224,46194],{"class":258},[100,51226,51227],{"class":102,"line":589},[100,51228,570],{"emptyLinePlaceholder":569},[100,51230,51231],{"class":102,"line":595},[100,51232,35506],{"class":1836},[100,51234,51235,51237,51239],{"class":102,"line":601},[100,51236,678],{"class":471},[100,51238,35513],{"class":106},[100,51240,33510],{"class":258},[100,51242,51243],{"class":102,"line":606},[100,51244,51245],{"class":1836},"   # 导入自己的数据集，并进行数据处理\n",[100,51247,51248],{"class":102,"line":612},[100,51249,49515],{"class":1836},[100,51251,51252,51254,51256,51258,51260,51262,51265],{"class":102,"line":618},[100,51253,49520],{"class":117},[100,51255,472],{"class":471},[100,51257,2436],{"class":471},[100,51259,2019],{"class":110},[100,51261,2325],{"class":117},[100,51263,51264],{"class":49531},"\u002Fdata\u002Ftest",[100,51266,26708],{"class":110},[100,51268,51269],{"class":102,"line":623},[100,51270,570],{"emptyLinePlaceholder":569},[100,51272,51273],{"class":102,"line":629},[100,51274,49543],{"class":1836},[100,51276,51277],{"class":102,"line":635},[100,51278,49548],{"class":1836},[100,51280,51281],{"class":102,"line":641},[100,51282,49553],{"class":1836},[100,51284,51285],{"class":102,"line":647},[100,51286,49558],{"class":1836},[100,51288,51289,51291,51293,51295,51297,51299,51301,51303,51305,51307,51309,51311,51313,51315,51317],{"class":102,"line":653},[100,51290,49563],{"class":258},[100,51292,472],{"class":471},[100,51294,49568],{"class":258},[100,51296,49571],{"class":117},[100,51298,2145],{"class":258},[100,51300,49576],{"class":117},[100,51302,2145],{"class":258},[100,51304,49581],{"class":117},[100,51306,49584],{"class":258},[100,51308,49587],{"class":117},[100,51310,2145],{"class":258},[100,51312,49592],{"class":117},[100,51314,2145],{"class":258},[100,51316,49597],{"class":117},[100,51318,6255],{"class":258},[100,51320,51321],{"class":102,"line":659},[100,51322,49604],{"class":1836},[100,51324,51325,51327,51329],{"class":102,"line":665},[100,51326,49609],{"class":258},[100,51328,472],{"class":471},[100,51330,49614],{"class":258},[100,51332,51333],{"class":102,"line":670},[100,51334,49619],{"class":1836},[100,51336,51337,51339,51341,51343,51345],{"class":102,"line":675},[100,51338,49624],{"class":258},[100,51340,33059],{"class":117},[100,51342,2145],{"class":258},[100,51344,33059],{"class":117},[100,51346,44176],{"class":258},[100,51348,51349],{"class":102,"line":699},[100,51350,49637],{"class":1836},[100,51352,51353],{"class":102,"line":708},[100,51354,49642],{"class":258},[100,51356,51357],{"class":102,"line":722},[100,51358,49647],{"class":258},[100,51360,51361],{"class":102,"line":735},[100,51362,49652],{"class":1836},[100,51364,51365],{"class":102,"line":754},[100,51366,49657],{"class":1836},[100,51368,51369],{"class":102,"line":771},[100,51370,570],{"emptyLinePlaceholder":569},[100,51372,51373],{"class":102,"line":776},[100,51374,49666],{"class":1836},[100,51376,51377],{"class":102,"line":781},[100,51378,49671],{"class":1836},[100,51380,51381,51383,51385,51387,51389,51391,51393,51395],{"class":102,"line":796},[100,51382,35520],{"class":258},[100,51384,472],{"class":471},[100,51386,49680],{"class":258},[100,51388,49683],{"class":117},[100,51390,2145],{"class":258},[100,51392,49688],{"class":6812},[100,51394,472],{"class":471},[100,51396,49693],{"class":258},[100,51398,51399,51401,51403,51405,51407,51409],{"class":102,"line":812},[100,51400,35577],{"class":258},[100,51402,472],{"class":471},[100,51404,33092],{"class":258},[100,51406,33095],{"class":6812},[100,51408,472],{"class":471},[100,51410,35588],{"class":258},[100,51412,51413],{"class":102,"line":823},[100,51414,35593],{"class":1836},[100,51416,51417,51419,51421,51423],{"class":102,"line":828},[100,51418,35598],{"class":6812},[100,51420,472],{"class":471},[100,51422,1985],{"class":117},[100,51424,33024],{"class":258},[100,51426,51427,51429,51431,51433],{"class":102,"line":840},[100,51428,35609],{"class":6812},[100,51430,472],{"class":471},[100,51432,33034],{"class":117},[100,51434,33024],{"class":258},[100,51436,51437,51439,51441,51443],{"class":102,"line":845},[100,51438,35620],{"class":6812},[100,51440,472],{"class":471},[100,51442,1366],{"class":117},[100,51444,809],{"class":258},[100,51446,51447,51449],{"class":102,"line":868},[100,51448,5689],{"class":471},[100,51450,35633],{"class":258},[100,51452,51453],{"class":102,"line":874},[100,51454,570],{"emptyLinePlaceholder":569},[100,51456,51457],{"class":102,"line":879},[100,51458,35642],{"class":1836},[100,51460,51461,51463,51465],{"class":102,"line":889},[100,51462,678],{"class":471},[100,51464,35649],{"class":106},[100,51466,35652],{"class":258},[100,51468,51469],{"class":102,"line":894},[100,51470,35657],{"class":1836},[100,51472,51473,51475,51477,51479,51481,51483,51485],{"class":102,"line":900},[100,51474,32799],{"class":258},[100,51476,472],{"class":471},[100,51478,32806],{"class":110},[100,51480,3325],{"class":471},[100,51482,32811],{"class":258},[100,51484,3322],{"class":471},[100,51486,35674],{"class":110},[100,51488,51489,51491,51493],{"class":102,"line":910},[100,51490,32851],{"class":258},[100,51492,472],{"class":471},[100,51494,33846],{"class":258},[100,51496,51497],{"class":102,"line":915},[100,51498,570],{"emptyLinePlaceholder":569},[100,51500,51501],{"class":102,"line":929},[100,51502,35691],{"class":1836},[100,51504,51505,51507,51509],{"class":102,"line":935},[100,51506,35696],{"class":258},[100,51508,472],{"class":471},[100,51510,33899],{"class":117},[100,51512,51513,51515,51517],{"class":102,"line":945},[100,51514,35705],{"class":258},[100,51516,472],{"class":471},[100,51518,4686],{"class":117},[100,51520,51521],{"class":102,"line":950},[100,51522,570],{"emptyLinePlaceholder":569},[100,51524,51525],{"class":102,"line":955},[100,51526,35718],{"class":1836},[100,51528,51529],{"class":102,"line":972},[100,51530,35723],{"class":1836},[100,51532,51533],{"class":102,"line":11370},[100,51534,35728],{"class":1836},[100,51536,51537,51539],{"class":102,"line":11375},[100,51538,35733],{"class":471},[100,51540,34440],{"class":258},[100,51542,51543],{"class":102,"line":11380},[100,51544,35740],{"class":1836},[100,51546,51547,51549,51551,51553],{"class":102,"line":11385},[100,51548,5003],{"class":471},[100,51550,35747],{"class":258},[100,51552,854],{"class":471},[100,51554,35752],{"class":258},[100,51556,51557,51559,51561],{"class":102,"line":11394},[100,51558,35757],{"class":258},[100,51560,472],{"class":471},[100,51562,35762],{"class":258},[100,51564,51565,51567,51569],{"class":102,"line":11399},[100,51566,35767],{"class":258},[100,51568,472],{"class":471},[100,51570,35772],{"class":258},[100,51572,51573],{"class":102,"line":11405},[100,51574,35777],{"class":1836},[100,51576,51577],{"class":102,"line":11426},[100,51578,34431],{"class":258},[100,51580,51581],{"class":102,"line":11432},[100,51582,35786],{"class":1836},[100,51584,51585,51587,51589],{"class":102,"line":11446},[100,51586,34216],{"class":258},[100,51588,472],{"class":471},[100,51590,35795],{"class":258},[100,51592,51593],{"class":102,"line":11452},[100,51594,35800],{"class":1836},[100,51596,51597,51599,51601,51603,51605,51607,51609],{"class":102,"line":11479},[100,51598,34233],{"class":258},[100,51600,472],{"class":471},[100,51602,34238],{"class":258},[100,51604,34241],{"class":6812},[100,51606,472],{"class":471},[100,51608,1985],{"class":117},[100,51610,809],{"class":258},[100,51612,51613],{"class":102,"line":11488},[100,51614,35821],{"class":1836},[100,51616,51617],{"class":102,"line":11494},[100,51618,35826],{"class":1836},[100,51620,51621],{"class":102,"line":11502},[100,51622,35831],{"class":1836},[100,51624,51625,51627,51629,51631,51633],{"class":102,"line":11507},[100,51626,35836],{"class":258},[100,51628,11062],{"class":471},[100,51630,34343],{"class":258},[100,51632,4551],{"class":471},[100,51634,35845],{"class":258},[100,51636,51637],{"class":102,"line":18185},[100,51638,35850],{"class":1836},[100,51640,51641,51643,51645,51647,51649],{"class":102,"line":18191},[100,51642,35855],{"class":258},[100,51644,11062],{"class":471},[100,51646,35860],{"class":258},[100,51648,1366],{"class":117},[100,51650,809],{"class":258},[100,51652,51653],{"class":102,"line":18214},[100,51654,570],{"emptyLinePlaceholder":569},[100,51656,51657],{"class":102,"line":18220},[100,51658,35873],{"class":1836},[100,51660,51661,51663,51665,51667,51669],{"class":102,"line":18243},[100,51662,35878],{"class":258},[100,51664,472],{"class":471},[100,51666,35883],{"class":258},[100,51668,2351],{"class":471},[100,51670,35888],{"class":258},[100,51672,51673],{"class":102,"line":18257},[100,51674,35893],{"class":1836},[100,51676,51677,51679,51681,51683],{"class":102,"line":18277},[100,51678,34007],{"class":117},[100,51680,713],{"class":258},[100,51682,35902],{"class":110},[100,51684,35905],{"class":258},[100,51686,51687],{"class":102,"line":18283},[100,51688,570],{"emptyLinePlaceholder":569},[100,51690,51691],{"class":102,"line":18294},[100,51692,35914],{"class":1836},[100,51694,51695,51697,51699,51701,51703],{"class":102,"line":18317},[100,51696,958],{"class":471},[100,51698,961],{"class":117},[100,51700,4551],{"class":471},[100,51702,32787],{"class":110},[100,51704,696],{"class":258},[100,51706,51707],{"class":102,"line":18339},[100,51708,35931],{"class":1836},[100,51710,51711,51713,51715],{"class":102,"line":18344},[100,51712,32851],{"class":258},[100,51714,472],{"class":471},[100,51716,46105],{"class":258},[100,51718,51719],{"class":102,"line":18350},[100,51720,35944],{"class":1836},[100,51722,51723],{"class":102,"line":18364},[100,51724,35949],{"class":1836},[100,51726,51727,51729,51731],{"class":102,"line":18377},[100,51728,35954],{"class":258},[100,51730,35957],{"class":110},[100,51732,751],{"class":258},[100,51734,51735],{"class":102,"line":18382},[100,51736,35964],{"class":1836},[100,51738,51739,51741,51743],{"class":102,"line":18396},[100,51740,35577],{"class":258},[100,51742,472],{"class":471},[100,51744,35973],{"class":258},[100,51746,51747],{"class":102,"line":18401},[100,51748,35978],{"class":1836},[100,51750,51751],{"class":102,"line":18407},[100,51752,35983],{"class":258},[100,51754,51755],{"class":102,"line":18412},[100,51756,570],{"emptyLinePlaceholder":569},[100,51758,51759],{"class":102,"line":18426},[100,51760,35992],{"class":1836},[100,51762,51763],{"class":102,"line":18431},[100,51764,35997],{"class":1836},[100,51766,51767,51769,51771,51773,51775,51777,51779],{"class":102,"line":18436},[100,51768,32799],{"class":258},[100,51770,472],{"class":471},[100,51772,32806],{"class":110},[100,51774,3325],{"class":471},[100,51776,32811],{"class":258},[100,51778,3322],{"class":471},[100,51780,35674],{"class":110},[100,51782,51783,51785,51787],{"class":102,"line":18450},[100,51784,32851],{"class":258},[100,51786,472],{"class":471},[100,51788,33846],{"class":258},[100,51790,51791],{"class":102,"line":18462},[100,51792,36026],{"class":1836},[100,51794,51795],{"class":102,"line":18467},[100,51796,36031],{"class":1836},[100,51798,51799,51801,51803,51805,51808,51810,51813],{"class":102,"line":18480},[100,51800,36036],{"class":258},[100,51802,472],{"class":471},[100,51804,2656],{"class":258},[100,51806,51807],{"class":110},"'猫'",[100,51809,2145],{"class":258},[100,51811,51812],{"class":110},"'狗'",[100,51814,34802],{"class":258},[100,51816,51817,51819],{"class":102,"line":18485},[100,51818,35733],{"class":471},[100,51820,34440],{"class":258},[100,51822,51823],{"class":102,"line":18490},[100,51824,36101],{"class":1836},[100,51826,51827,51829,51831,51833],{"class":102,"line":18495},[100,51828,5003],{"class":471},[100,51830,36108],{"class":258},[100,51832,854],{"class":471},[100,51834,35752],{"class":258},[100,51836,51837,51839,51841],{"class":102,"line":18508},[100,51838,34166],{"class":258},[100,51840,472],{"class":471},[100,51842,34171],{"class":258},[100,51844,51845,51847,51849],{"class":102,"line":18513},[100,51846,34181],{"class":258},[100,51848,472],{"class":471},[100,51850,34186],{"class":258},[100,51852,51853],{"class":102,"line":34189},[100,51854,570],{"emptyLinePlaceholder":569},[100,51856,51857],{"class":102,"line":34195},[100,51858,36137],{"class":1836},[100,51860,51861],{"class":102,"line":34201},[100,51862,34431],{"class":258},[100,51864,51865],{"class":102,"line":34207},[100,51866,36146],{"class":1836},[100,51868,51869,51871,51873],{"class":102,"line":34213},[100,51870,34216],{"class":258},[100,51872,472],{"class":471},[100,51874,34221],{"class":258},[100,51876,51877],{"class":102,"line":34224},[100,51878,36159],{"class":1836},[100,51880,51881,51883,51885,51887,51889,51891,51893],{"class":102,"line":34230},[100,51882,34233],{"class":258},[100,51884,472],{"class":471},[100,51886,34238],{"class":258},[100,51888,34241],{"class":6812},[100,51890,472],{"class":471},[100,51892,1985],{"class":117},[100,51894,809],{"class":258},[100,51896,51897],{"class":102,"line":34250},[100,51898,36180],{"class":1836},[100,51900,51901,51903,51905],{"class":102,"line":34256},[100,51902,36185],{"class":258},[100,51904,472],{"class":471},[100,51906,36190],{"class":258},[100,51908,51909,51911,51913],{"class":102,"line":34267},[100,51910,36195],{"class":258},[100,51912,472],{"class":471},[100,51914,36200],{"class":258},[100,51916,51917,51919,51921,51923,51925,51927,51929,51931],{"class":102,"line":34273},[100,51918,36205],{"class":117},[100,51920,713],{"class":258},[100,51922,36210],{"class":110},[100,51924,36213],{"class":258},[100,51926,36216],{"class":110},[100,51928,2145],{"class":258},[100,51930,36221],{"class":110},[100,51932,36224],{"class":258},[1677,51934,51935],{},"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":79,"searchDepth":188,"depth":188,"links":51937},[51938,51939,51940,51941],{"id":32155,"depth":199,"text":32156},{"id":39393,"depth":199,"text":39394},{"id":42826,"depth":199,"text":42827},{"id":46835,"depth":199,"text":46836},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":32147,"description":24958},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":51948,"title":51949,"body":51950,"description":24958,"extension":1708,"meta":51957,"navigation":569,"path":51958,"seo":51959,"stem":51960,"__hash__":51961},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":51951,"toc":51955},[51952],[10,51953,51949],{"id":51954},"_3yolo模型学习",{"title":79,"searchDepth":188,"depth":188,"links":51956},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":51949,"description":24958},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":51963,"title":51964,"body":51965,"description":51972,"extension":1708,"meta":51973,"navigation":569,"path":51975,"seo":51976,"stem":51977,"__hash__":51978},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":51966,"toc":51970},[51967],[19,51968,51969],{},"yolo模型还未补充",{"title":79,"searchDepth":188,"depth":188,"links":51971},[],"深度学习学习",{"category":51974},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":51964,"description":51972},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":51980,"title":51981,"body":51982,"description":24958,"extension":1708,"meta":52007,"navigation":569,"path":52008,"seo":52009,"stem":52010,"__hash__":52011},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":51983,"toc":52005},[51984,51987,51990,51995,52002],[10,51985,51981],{"id":51986},"_1工具",[19,51988,51989],{},"提示错误插件：有问题会提前报错",[19,51991,51992],{},[3095,51993],{"alt":79,"src":51994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,51996,51997],{},[2006,51998,52001],{"href":51999,"rel":52000},"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",[25442],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,52003,52004],{},"alt键加上下箭头可以实现语句的移动",{"title":79,"searchDepth":188,"depth":188,"links":52006},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":51981,"description":24958},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":52013,"title":52014,"body":52015,"description":24958,"extension":1708,"meta":54879,"navigation":569,"path":54880,"seo":54881,"stem":54882,"__hash__":54883},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":52016,"toc":54830},[52017,52020,52024,52028,52033,52036,52041,52045,52052,52057,52064,52069,52076,52081,52085,52090,52093,52097,52102,52106,52111,52114,52117,52120,52123,52126,52129,52132,52135,52140,52145,52150,52154,52157,52160,52164,52169,52172,52180,52185,52202,52210,52215,52220,52225,52230,52235,52238,52243,52248,52252,52261,52266,52271,52275,52280,52283,52287,52292,52300,52305,52310,52313,52318,52323,52328,52331,52334,52337,52342,52347,52350,52355,52358,52363,52366,52369,52372,52377,52380,52383,52398,52403,52408,52413,52416,52419,52422,52436,52439,52444,52449,52452,52455,52458,52461,52464,52467,52470,52474,52478,52483,52487,52490,52495,52500,52503,52508,52511,52515,52520,52523,52526,52529,52532,52535,52538,52541,52544,52547,52551,52556,52561,52566,52569,52572,52576,52581,52584,52588,52591,52594,52599,52602,52605,52609,52613,52616,52621,52626,52629,52658,52663,52668,52673,52678,52682,52687,52691,52696,52699,52703,52707,52712,52716,52721,52726,52730,52735,52738,52740,52743,52748,52752,52757,52761,52765,52770,52775,52780,52785,52789,52794,52799,52804,52807,52810,52815,52818,52823,52828,52833,52838,52842,53649,53653,53996,54001,54004,54007,54010,54013,54016,54019,54022,54025,54027,54030,54032,54035,54039,54044,54047,54050,54053,54057,54062,54067,54087,54090,54094,54099,54104,54121,54125,54154,54158,54180,54182,54221,54229,54235,54239,54242,54245,54250,54255,54258,54261,54264,54269,54274,54277,54280,54283,54286,54289,54292,54295,54298,54301,54304,54307,54309,54312,54315,54318,54321,54324,54327,54330,54333,54337,54342,54345,54350,54353,54356,54359,54362,54365,54368,54371,54373,54376,54379,54382,54385,54388,54391,54395,54398,54407,54410,54415,54418,54423,54426,54429,54432,54435,54438,54441,54444,54448,54452,54455,54458,54463,54468,54473,54477,54482,54487,54490,54493,54496,54499,54502,54507,54510,54515,54517,54522,54525,54529,54534,54537,54540,54545,54549,54552,54557,54560,54563,54592,54597,54600,54603,54606,54609,54612,54616,54619,54705,54709,54712,54717,54722,54729,54732,54735,54738,54741,54744,54749,54754,54757,54760,54763,54766,54769,54772,54775,54778,54781,54783,54786,54790,54795,54800,54805,54808,54813,54818,54821,54824,54827],[10,52018,52014],{"id":52019},"_2基础语法",[14,52021,52023],{"id":52022},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[305,52025,52027],{"id":52026},"_211-js组成","2.1.1 js组成",[26,52029,52030],{},[29,52031,52032],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,52034,52035],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[26,52037,52038],{"start":188},[29,52039,52040],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[305,52042,52044],{"id":52043},"_212-js书写位置","2.1.2 js书写位置",[26,52046,52047],{},[29,52048,52049],{},[1921,52050,52051],{},"内部 JavaScript",[19,52053,52054],{},[3095,52055],{"alt":79,"src":52056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[26,52058,52059],{"start":188},[29,52060,52061],{},[1921,52062,52063],{},"外部 JavaScript",[19,52065,52066],{},[3095,52067],{"alt":79,"src":52068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[26,52070,52071],{"start":199},[29,52072,52073],{},[1921,52074,52075],{},"内联 JavaScript",[19,52077,52078],{},[3095,52079],{"alt":79,"src":52080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[305,52082,52084],{"id":52083},"_213-javascript注释","2.1.3 JavaScript注释",[19,52086,52087],{},[3095,52088],{"alt":79,"src":52089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,52091,52092],{},"alt+shift+a一定要记住！",[305,52094,52096],{"id":52095},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,52098,52099],{},[3095,52100],{"alt":79,"src":52101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[305,52103,52105],{"id":52104},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[26,52107,52108],{},[29,52109,52110],{},"输出语法：",[19,52112,52113],{},"①document.write('要出的内容')",[19,52115,52116],{},"向body内输出内容；",[19,52118,52119],{},"如果输出的内容写的是标签，也会被解析cheng",[19,52121,52122],{},"②alert('要出的内容')",[19,52124,52125],{},"页面弹出警告对话框",[19,52127,52128],{},"③console.log('控制台打印')",[19,52130,52131],{},"控制台输出语法，程序员调试使用",[19,52133,52134],{},"输入log就行，自动生成：",[19,52136,52137],{},[3095,52138],{"alt":79,"src":52139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[26,52141,52142],{"start":188},[29,52143,52144],{},"输入语法：",[19,52146,52147],{},[3095,52148],{"alt":79,"src":52149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[305,52151,52153],{"id":52152},"_2116-字面量","21.1.6 字面量",[19,52155,52156],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,52158,52159],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,52161,52163],{"id":52162},"_22-变量","2.2 变量",[26,52165,52166],{},[29,52167,52168],{},"变量声明",[19,52170,52171],{},"let 变量名",[2773,52173,52174,52177],{},[29,52175,52176],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[29,52178,52179],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[26,52181,52182],{"start":188},[29,52183,52184],{},"变量赋值",[73,52186,52190],{"className":52187,"code":52188,"language":52189,"meta":79,"style":79},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[32,52191,52192,52197],{"__ignoreMap":79},[100,52193,52194],{"class":102,"line":103},[100,52195,52196],{"class":258},"let age\n",[100,52198,52199],{"class":102,"line":188},[100,52200,52201],{"class":258},"age=18\n",[26,52203,52204,52207],{"start":199},[29,52205,52206],{},"连这些（变量的初始化）：let age=18",[29,52208,52209],{},"更新变量",[19,52211,52212],{},[3095,52213],{"alt":79,"src":52214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[26,52216,52217],{"start":577},[29,52218,52219],{},"声明多个变量",[19,52221,52222],{},[3095,52223],{"alt":79,"src":52224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[26,52226,52227],{"start":589},[29,52228,52229],{},"变量命名规则与规范",[19,52231,52232],{},[3095,52233],{"alt":79,"src":52234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,52236,52237],{},"遵守小驼峰！",[26,52239,52240],{"start":595},[29,52241,52242],{},"变量拓展-let和var的区别",[19,52244,52245],{},[3095,52246],{"alt":79,"src":52247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,52249,52251],{"id":52250},"_23-数组","2.3 数组",[73,52253,52255],{"className":52187,"code":52254,"language":52189,"meta":79,"style":79},"let arr = []\n",[32,52256,52257],{"__ignoreMap":79},[100,52258,52259],{"class":102,"line":103},[100,52260,52254],{"class":258},[19,52262,52263],{},[3095,52264],{"alt":79,"src":52265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,52267,52268],{},[3095,52269],{"alt":79,"src":52270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,52272,52274],{"id":52273},"_24-常量","2.4 常量",[19,52276,52277],{},[3095,52278],{"alt":79,"src":52279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,52281,52282],{},"const — 类似于 let ，但是变量的值无法被修改",[14,52284,52286],{"id":52285},"_25-数据类型","2.5 数据类型",[19,52288,52289],{},[3095,52290],{"alt":79,"src":52291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[26,52293,52294,52297],{},[29,52295,52296],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[29,52298,52299],{},"算数运算符：",[19,52301,52302],{},[3095,52303],{"alt":79,"src":52304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[26,52306,52307],{"start":199},[29,52308,52309],{},"数字类型（Number）",[19,52311,52312],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,52314,52315],{},[3095,52316],{"alt":79,"src":52317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[26,52319,52320],{"start":532},[29,52321,52322],{},"字符串类型（string）",[19,52324,52325],{},[3095,52326],{"alt":79,"src":52327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,52329,52330],{},"反引号也是可以使用的",[19,52332,52333],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,52335,52336],{},"例如：document.write(\"我今年\"+age+\"岁\")",[26,52338,52339],{"start":577},[29,52340,52341],{},"模板字符串",[19,52343,52344],{},[3095,52345],{"alt":79,"src":52346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,52348,52349],{},"类似于python的字符串格式化",[26,52351,52352],{"start":589},[29,52353,52354],{},"布尔类型",[19,52356,52357],{},"true 和 false",[26,52359,52360],{"start":595},[29,52361,52362],{},"未定义类型（underfined）",[19,52364,52365],{},"表示没有赋值",[19,52367,52368],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,52370,52371],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[26,52373,52374],{"start":601},[29,52375,52376],{},"null（空类型）",[19,52378,52379],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,52381,52382],{},"赋值了，但是内容为空",[73,52384,52386],{"className":52187,"code":52385,"language":52189,"meta":79,"style":79},"typeof null\n输出的是'object'，是一个对象数据类型\n",[32,52387,52388,52393],{"__ignoreMap":79},[100,52389,52390],{"class":102,"line":103},[100,52391,52392],{"class":258},"typeof null\n",[100,52394,52395],{"class":102,"line":188},[100,52396,52397],{"class":258},"输出的是'object'，是一个对象数据类型\n",[26,52399,52400],{"start":606},[29,52401,52402],{},"控制台检测数据类型",[19,52404,52405],{},[3095,52406],{"alt":79,"src":52407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[26,52409,52410],{"start":612},[29,52411,52412],{},"类型转换",[19,52414,52415],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,52417,52418],{},"转换方式：隐式转换和显示转换",[19,52420,52421],{},"①隐式转换",[2773,52423,52424,52427,52430,52433],{},[29,52425,52426],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[29,52428,52429],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[29,52431,52432],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[29,52434,52435],{},"任何数据和字符串相加结果都是字符串",[19,52437,52438],{},"②显示转换",[19,52440,52441],{},[3095,52442],{"alt":79,"src":52443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,52445,52446],{},[3095,52447],{"alt":79,"src":52448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,52450,52451],{},"在输入的时候要用好隐式转换，简单写起来",[19,52453,52454],{},"let num = +prompt(’请输入数字：‘)",[19,52456,52457],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,52459,52460],{},"console.log(parseInt('12.333px'))",[19,52462,52463],{},"输出为：12",[19,52465,52466],{},"console.log(parseInt('a'a'a12.333px'))",[19,52468,52469],{},"输出：NaN",[14,52471,52473],{"id":52472},"_26-运算符","2.6 运算符",[305,52475,52477],{"id":52476},"_261-赋值运算符","2.6.1 赋值运算符",[19,52479,52480],{},[3095,52481],{"alt":79,"src":52482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[305,52484,52486],{"id":52485},"_262-一元运算符","2.6.2 一元运算符",[19,52488,52489],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,52491,52492],{},[3095,52493],{"alt":79,"src":52494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,52496,52497],{},[3095,52498],{"alt":79,"src":52499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,52501,52502],{},"两者的区别：",[19,52504,52505],{},[3095,52506],{"alt":79,"src":52507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,52509,52510],{},"前置先自加；后置后加，代码执行完之后再加",[305,52512,52514],{"id":52513},"_263-比较运算符","2.6.3 比较运算符",[19,52516,52517],{},[3095,52518],{"alt":79,"src":52519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,52521,52522],{},"比较运算符也有隐式转换",[19,52524,52525],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,52527,52528],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,52530,52531],{},"要使用三等，开发的时候",[19,52533,52534],{},"NaN不等于任何人，包括它自己",[19,52536,52537],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,52539,52540],{},"7\u002F10=0.7",[19,52542,52543],{},"最后：0.5+0.2=0.7",[19,52545,52546],{},"字符串比较，比较的是字符对应的ASCII码",[305,52548,52550],{"id":52549},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,52552,52553],{},[3095,52554],{"alt":79,"src":52555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,52557,52558],{},[3095,52559],{"alt":79,"src":52560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,52562,52563],{},[3095,52564],{"alt":79,"src":52565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,52567,52568],{},"上述题目选D",[19,52570,52571],{},"与真2假1；或真1假2",[305,52573,52575],{"id":52574},"_265-运算符优先级","2.6.5 运算符优先级",[19,52577,52578],{},[3095,52579],{"alt":79,"src":52580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,52582,52583],{},"先算逻辑与，后算逻辑或",[14,52585,52587],{"id":52586},"_27-语句","2.7 语句",[19,52589,52590],{},"表达式：是可以被求值的代码，会有结果给我们",[19,52592,52593],{},"语句：语句是可以被执行的代码，例如prompt()",[19,52595,52596],{},[3095,52597],{"alt":79,"src":52598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,52600,52601],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,52603,52604],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[305,52606,52608],{"id":52607},"_271-分支语句","2.7.1 分支语句",[23579,52610,52612],{"id":52611},"_2711-if分支语句","2.7.1.1 if分支语句",[19,52614,52615],{},"if语句单行简单的话，可以不写{}，写在一行就行",[26,52617,52618],{},[29,52619,52620],{},"单分支语句",[19,52622,52623],{},[3095,52624],{"alt":79,"src":52625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,52627,52628],{},"除了0，所有数字都为真",[73,52630,52632],{"className":52187,"code":52631,"language":52189,"meta":79,"style":79},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[32,52633,52634,52639,52644,52649,52653],{"__ignoreMap":79},[100,52635,52636],{"class":102,"line":103},[100,52637,52638],{"class":258},"if（0) {\n",[100,52640,52641],{"class":102,"line":188},[100,52642,52643],{"class":258},"    let a=1\n",[100,52645,52646],{"class":102,"line":199},[100,52647,52648],{"class":258},"    alert(typeof a)\n",[100,52650,52651],{"class":102,"line":532},[100,52652,3197],{"class":258},[100,52654,52655],{"class":102,"line":577},[100,52656,52657],{"class":258},"不输出，括号为假\n",[26,52659,52660],{"start":188},[29,52661,52662],{},"双分支语句",[19,52664,52665],{},[3095,52666],{"alt":79,"src":52667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[26,52669,52670],{"start":199},[29,52671,52672],{},"多分支语句",[19,52674,52675],{},[3095,52676],{"alt":79,"src":52677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[23579,52679,52681],{"id":52680},"_2712-三元运算符","2.7.1.2 三元运算符",[19,52683,52684],{},[3095,52685],{"alt":79,"src":52686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[23579,52688,52690],{"id":52689},"_2713-switch语句","2.7.1.3 switch语句",[19,52692,52693],{},[3095,52694],{"alt":79,"src":52695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,52697,52698],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[305,52700,52702],{"id":52701},"_272-循环语句","2.7.2 循环语句",[23579,52704,52706],{"id":52705},"_2721-断点演示","2.7.2.1 断点演示",[19,52708,52709],{},[3095,52710],{"alt":79,"src":52711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[23579,52713,52715],{"id":52714},"_2722-while循环","2.7.2.2 while循环",[19,52717,52718],{},[3095,52719],{"alt":79,"src":52720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,52722,52723],{},[3095,52724],{"alt":79,"src":52725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[23579,52727,52729],{"id":52728},"_2723-for循环","2.7.2.3 for循环",[19,52731,52732],{},[3095,52733],{"alt":79,"src":52734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,52736,52737],{},"for(;;) {",[19,52739,2712],{},[19,52741,52742],{},"表示无限循环",[19,52744,52745],{},[3095,52746],{"alt":79,"src":52747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[23579,52749,52751],{"id":52750},"_2724-循环的退出","2.7.2.4 循环的退出",[19,52753,52754],{},[3095,52755],{"alt":79,"src":52756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,52758,52760],{"id":52759},"_28-数组","2.8 数组",[305,52762,52764],{"id":52763},"_281-基础认识","2.8.1 基础认识",[19,52766,52767],{},[3095,52768],{"alt":79,"src":52769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,52771,52772],{},[3095,52773],{"alt":79,"src":52774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,52776,52777],{},[3095,52778],{"alt":79,"src":52779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,52781,52782],{},[3095,52783],{"alt":79,"src":52784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[305,52786,52788],{"id":52787},"_282-操作数组","2.8.2 操作数组",[19,52790,52791],{},[3095,52792],{"alt":79,"src":52793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[26,52795,52796],{},[29,52797,52798],{},"添加元素",[19,52800,52801],{},[3095,52802],{"alt":79,"src":52803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,52805,52806],{},"console.log(arr.push('green'))",[19,52808,52809],{},"输出结果：为新数组的长度",[19,52811,52812],{},[3095,52813],{"alt":79,"src":52814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,52816,52817],{},"push用的非常多，一定要记住",[26,52819,52820],{},[29,52821,52822],{},"删除元素",[19,52824,52825],{},[3095,52826],{"alt":79,"src":52827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,52829,52830],{},[3095,52831],{"alt":79,"src":52832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,52834,52835],{},[3095,52836],{"alt":79,"src":52837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[305,52839,52841],{"id":52840},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[73,52843,52845],{"className":52187,"code":52844,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n    \u003Cmeta charset=\"UTF-8\">\n    \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    \u003Ctitle>Document\u003C\u002Ftitle>\n    \u003Cstyle>\n        * {\n            margin: 0;\n            padding: 0;\n        }\n\n        .box {\n            display: flex;\n            width: 700px;\n            height: 300px;\n            border-left: 1px solid pink;\n            border-bottom: 1px solid pink;\n            margin: 50px auto;\n            justify-content: space-around;\n            align-items: flex-end;\n            text-align: center;\n        }\n\n        .box>div {\n            display: flex;\n            width: 50px;\n            background-color: pink;\n            flex-direction: column;\n            justify-content: space-between;\n        }\n\n        .box div span {\n\n            margin-top: -20px;\n        }\n\n        .box div h4 {\n            margin-bottom: -35px;\n            width: 70px;\n            margin-left: -10px;\n        }\n    \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n\n    \u003Cscript>\n        \u002F\u002F 1. 四次弹框效果\n        \u002F\u002F 声明一个新的数组\n        let arr = []\n        for (let i = 1; i \u003C= 4; i++) {\n            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n            \u002F\u002F arr.push(num)\n            arr.push(prompt(`请输入第${i}季度的数据:`))\n            \u002F\u002F push记得加小括号，不是等号赋值的形式\n        }\n        \u002F\u002F console.log(arr)  ['123','135','345','234']\n        \u002F\u002F 盒子开头\n        document.write(` \u003Cdiv class=\"box\">`)\n\n        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n        for (let i = 0; i \u003C arr.length; i++) {\n            document.write(`\n              \u003Cdiv style=\"height: ${arr[i]}px;\">\n                \u003Cspan>${arr[i]}\u003C\u002Fspan>\n                \u003Ch4>第${i + 1}季度\u003C\u002Fh4>\n              \u003C\u002Fdiv>          \n            `)\n        }\n        \u002F\u002F 盒子结尾\n        document.write(` \u003C\u002Fdiv>`)\n    \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,52846,52847,52862,52878,52882,52891,52909,52933,52955,52969,52977,52984,52996,53007,53011,53015,53022,53034,53049,53062,53081,53098,53113,53125,53137,53149,53153,53157,53168,53178,53190,53202,53214,53225,53229,53233,53245,53249,53263,53267,53271,53282,53296,53308,53322,53326,53335,53344,53348,53357,53361,53370,53375,53380,53393,53421,53426,53431,53456,53461,53465,53470,53475,53490,53494,53499,53529,53541,53557,53573,53587,53592,53599,53603,53608,53621,53629,53637,53641],{"__ignoreMap":79},[100,52848,52849,52852,52856,52859],{"class":102,"line":103},[100,52850,52851],{"class":258},"\u003C!",[100,52853,52855],{"class":52854},"s9eBZ","DOCTYPE",[100,52857,52858],{"class":106}," html",[100,52860,52861],{"class":258},">\n",[100,52863,52864,52866,52868,52871,52873,52876],{"class":102,"line":188},[100,52865,2676],{"class":258},[100,52867,52189],{"class":52854},[100,52869,52870],{"class":106}," lang",[100,52872,472],{"class":258},[100,52874,52875],{"class":110},"\"en\"",[100,52877,52861],{"class":258},[100,52879,52880],{"class":102,"line":199},[100,52881,570],{"emptyLinePlaceholder":569},[100,52883,52884,52886,52889],{"class":102,"line":532},[100,52885,2676],{"class":258},[100,52887,52888],{"class":52854},"head",[100,52890,52861],{"class":258},[100,52892,52893,52896,52899,52902,52904,52907],{"class":102,"line":577},[100,52894,52895],{"class":258},"    \u003C",[100,52897,52898],{"class":52854},"meta",[100,52900,52901],{"class":106}," charset",[100,52903,472],{"class":258},[100,52905,52906],{"class":110},"\"UTF-8\"",[100,52908,52861],{"class":258},[100,52910,52911,52913,52915,52918,52920,52923,52926,52928,52931],{"class":102,"line":589},[100,52912,52895],{"class":258},[100,52914,52898],{"class":52854},[100,52916,52917],{"class":106}," http-equiv",[100,52919,472],{"class":258},[100,52921,52922],{"class":110},"\"X-UA-Compatible\"",[100,52924,52925],{"class":106}," content",[100,52927,472],{"class":258},[100,52929,52930],{"class":110},"\"IE=edge\"",[100,52932,52861],{"class":258},[100,52934,52935,52937,52939,52941,52943,52946,52948,52950,52953],{"class":102,"line":595},[100,52936,52895],{"class":258},[100,52938,52898],{"class":52854},[100,52940,16501],{"class":106},[100,52942,472],{"class":258},[100,52944,52945],{"class":110},"\"viewport\"",[100,52947,52925],{"class":106},[100,52949,472],{"class":258},[100,52951,52952],{"class":110},"\"width=device-width, initial-scale=1.0\"",[100,52954,52861],{"class":258},[100,52956,52957,52959,52962,52965,52967],{"class":102,"line":601},[100,52958,52895],{"class":258},[100,52960,52961],{"class":52854},"title",[100,52963,52964],{"class":258},">Document\u003C\u002F",[100,52966,52961],{"class":52854},[100,52968,52861],{"class":258},[100,52970,52971,52973,52975],{"class":102,"line":606},[100,52972,52895],{"class":258},[100,52974,1677],{"class":52854},[100,52976,52861],{"class":258},[100,52978,52979,52982],{"class":102,"line":612},[100,52980,52981],{"class":52854},"        *",[100,52983,17153],{"class":258},[100,52985,52986,52989,52992,52994],{"class":102,"line":618},[100,52987,52988],{"class":117},"            margin",[100,52990,52991],{"class":258},": ",[100,52993,1366],{"class":117},[100,52995,2927],{"class":258},[100,52997,52998,53001,53003,53005],{"class":102,"line":623},[100,52999,53000],{"class":117},"            padding",[100,53002,52991],{"class":258},[100,53004,1366],{"class":117},[100,53006,2927],{"class":258},[100,53008,53009],{"class":102,"line":629},[100,53010,4138],{"class":258},[100,53012,53013],{"class":102,"line":635},[100,53014,570],{"emptyLinePlaceholder":569},[100,53016,53017,53020],{"class":102,"line":641},[100,53018,53019],{"class":106},"        .box",[100,53021,17153],{"class":258},[100,53023,53024,53027,53029,53032],{"class":102,"line":647},[100,53025,53026],{"class":117},"            display",[100,53028,52991],{"class":258},[100,53030,53031],{"class":117},"flex",[100,53033,2927],{"class":258},[100,53035,53036,53039,53041,53044,53047],{"class":102,"line":653},[100,53037,53038],{"class":117},"            width",[100,53040,52991],{"class":258},[100,53042,53043],{"class":117},"700",[100,53045,53046],{"class":471},"px",[100,53048,2927],{"class":258},[100,53050,53051,53054,53056,53058,53060],{"class":102,"line":659},[100,53052,53053],{"class":117},"            height",[100,53055,52991],{"class":258},[100,53057,5572],{"class":117},[100,53059,53046],{"class":471},[100,53061,2927],{"class":258},[100,53063,53064,53067,53069,53071,53073,53076,53079],{"class":102,"line":665},[100,53065,53066],{"class":117},"            border-left",[100,53068,52991],{"class":258},[100,53070,1985],{"class":117},[100,53072,53046],{"class":471},[100,53074,53075],{"class":117}," solid",[100,53077,53078],{"class":117}," pink",[100,53080,2927],{"class":258},[100,53082,53083,53086,53088,53090,53092,53094,53096],{"class":102,"line":670},[100,53084,53085],{"class":117},"            border-bottom",[100,53087,52991],{"class":258},[100,53089,1985],{"class":117},[100,53091,53046],{"class":471},[100,53093,53075],{"class":117},[100,53095,53078],{"class":117},[100,53097,2927],{"class":258},[100,53099,53100,53102,53104,53106,53108,53111],{"class":102,"line":675},[100,53101,52988],{"class":117},[100,53103,52991],{"class":258},[100,53105,862],{"class":117},[100,53107,53046],{"class":471},[100,53109,53110],{"class":117}," auto",[100,53112,2927],{"class":258},[100,53114,53115,53118,53120,53123],{"class":102,"line":699},[100,53116,53117],{"class":117},"            justify-content",[100,53119,52991],{"class":258},[100,53121,53122],{"class":117},"space-around",[100,53124,2927],{"class":258},[100,53126,53127,53130,53132,53135],{"class":102,"line":708},[100,53128,53129],{"class":117},"            align-items",[100,53131,52991],{"class":258},[100,53133,53134],{"class":117},"flex-end",[100,53136,2927],{"class":258},[100,53138,53139,53142,53144,53147],{"class":102,"line":722},[100,53140,53141],{"class":117},"            text-align",[100,53143,52991],{"class":258},[100,53145,53146],{"class":117},"center",[100,53148,2927],{"class":258},[100,53150,53151],{"class":102,"line":735},[100,53152,4138],{"class":258},[100,53154,53155],{"class":102,"line":754},[100,53156,570],{"emptyLinePlaceholder":569},[100,53158,53159,53161,53163,53166],{"class":102,"line":771},[100,53160,53019],{"class":106},[100,53162,2726],{"class":471},[100,53164,53165],{"class":52854},"div",[100,53167,17153],{"class":258},[100,53169,53170,53172,53174,53176],{"class":102,"line":776},[100,53171,53026],{"class":117},[100,53173,52991],{"class":258},[100,53175,53031],{"class":117},[100,53177,2927],{"class":258},[100,53179,53180,53182,53184,53186,53188],{"class":102,"line":781},[100,53181,53038],{"class":117},[100,53183,52991],{"class":258},[100,53185,862],{"class":117},[100,53187,53046],{"class":471},[100,53189,2927],{"class":258},[100,53191,53192,53195,53197,53200],{"class":102,"line":796},[100,53193,53194],{"class":117},"            background-color",[100,53196,52991],{"class":258},[100,53198,53199],{"class":117},"pink",[100,53201,2927],{"class":258},[100,53203,53204,53207,53209,53212],{"class":102,"line":812},[100,53205,53206],{"class":117},"            flex-direction",[100,53208,52991],{"class":258},[100,53210,53211],{"class":117},"column",[100,53213,2927],{"class":258},[100,53215,53216,53218,53220,53223],{"class":102,"line":823},[100,53217,53117],{"class":117},[100,53219,52991],{"class":258},[100,53221,53222],{"class":117},"space-between",[100,53224,2927],{"class":258},[100,53226,53227],{"class":102,"line":828},[100,53228,4138],{"class":258},[100,53230,53231],{"class":102,"line":840},[100,53232,570],{"emptyLinePlaceholder":569},[100,53234,53235,53237,53240,53243],{"class":102,"line":845},[100,53236,53019],{"class":106},[100,53238,53239],{"class":52854}," div",[100,53241,53242],{"class":52854}," span",[100,53244,17153],{"class":258},[100,53246,53247],{"class":102,"line":868},[100,53248,570],{"emptyLinePlaceholder":569},[100,53250,53251,53254,53256,53259,53261],{"class":102,"line":874},[100,53252,53253],{"class":117},"            margin-top",[100,53255,52991],{"class":258},[100,53257,53258],{"class":117},"-20",[100,53260,53046],{"class":471},[100,53262,2927],{"class":258},[100,53264,53265],{"class":102,"line":879},[100,53266,4138],{"class":258},[100,53268,53269],{"class":102,"line":889},[100,53270,570],{"emptyLinePlaceholder":569},[100,53272,53273,53275,53277,53280],{"class":102,"line":894},[100,53274,53019],{"class":106},[100,53276,53239],{"class":52854},[100,53278,53279],{"class":52854}," h4",[100,53281,17153],{"class":258},[100,53283,53284,53287,53289,53292,53294],{"class":102,"line":900},[100,53285,53286],{"class":117},"            margin-bottom",[100,53288,52991],{"class":258},[100,53290,53291],{"class":117},"-35",[100,53293,53046],{"class":471},[100,53295,2927],{"class":258},[100,53297,53298,53300,53302,53304,53306],{"class":102,"line":910},[100,53299,53038],{"class":117},[100,53301,52991],{"class":258},[100,53303,2123],{"class":117},[100,53305,53046],{"class":471},[100,53307,2927],{"class":258},[100,53309,53310,53313,53315,53318,53320],{"class":102,"line":915},[100,53311,53312],{"class":117},"            margin-left",[100,53314,52991],{"class":258},[100,53316,53317],{"class":117},"-10",[100,53319,53046],{"class":471},[100,53321,2927],{"class":258},[100,53323,53324],{"class":102,"line":929},[100,53325,4138],{"class":258},[100,53327,53328,53331,53333],{"class":102,"line":935},[100,53329,53330],{"class":258},"    \u003C\u002F",[100,53332,1677],{"class":52854},[100,53334,52861],{"class":258},[100,53336,53337,53340,53342],{"class":102,"line":945},[100,53338,53339],{"class":258},"\u003C\u002F",[100,53341,52888],{"class":52854},[100,53343,52861],{"class":258},[100,53345,53346],{"class":102,"line":950},[100,53347,570],{"emptyLinePlaceholder":569},[100,53349,53350,53352,53355],{"class":102,"line":955},[100,53351,2676],{"class":258},[100,53353,53354],{"class":52854},"body",[100,53356,52861],{"class":258},[100,53358,53359],{"class":102,"line":972},[100,53360,570],{"emptyLinePlaceholder":569},[100,53362,53363,53365,53368],{"class":102,"line":11370},[100,53364,52895],{"class":258},[100,53366,53367],{"class":52854},"script",[100,53369,52861],{"class":258},[100,53371,53372],{"class":102,"line":11375},[100,53373,53374],{"class":1836},"        \u002F\u002F 1. 四次弹框效果\n",[100,53376,53377],{"class":102,"line":11380},[100,53378,53379],{"class":1836},"        \u002F\u002F 声明一个新的数组\n",[100,53381,53382,53385,53388,53390],{"class":102,"line":11385},[100,53383,53384],{"class":471},"        let",[100,53386,53387],{"class":258}," arr ",[100,53389,472],{"class":471},[100,53391,53392],{"class":258}," []\n",[100,53394,53395,53397,53399,53402,53404,53406,53408,53410,53412,53415,53417,53419],{"class":102,"line":11394},[100,53396,5003],{"class":471},[100,53398,3283],{"class":258},[100,53400,53401],{"class":471},"let",[100,53403,11023],{"class":258},[100,53405,472],{"class":471},[100,53407,26693],{"class":117},[100,53409,11030],{"class":258},[100,53411,3220],{"class":471},[100,53413,53414],{"class":117}," 4",[100,53416,4814],{"class":258},[100,53418,3903],{"class":471},[100,53420,14024],{"class":258},[100,53422,53423],{"class":102,"line":11399},[100,53424,53425],{"class":1836},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[100,53427,53428],{"class":102,"line":11405},[100,53429,53430],{"class":1836},"            \u002F\u002F arr.push(num)\n",[100,53432,53433,53436,53439,53441,53444,53446,53449,53451,53454],{"class":102,"line":11426},[100,53434,53435],{"class":258},"            arr.",[100,53437,53438],{"class":106},"push",[100,53440,713],{"class":258},[100,53442,53443],{"class":106},"prompt",[100,53445,713],{"class":258},[100,53447,53448],{"class":110},"`请输入第${",[100,53450,2208],{"class":258},[100,53452,53453],{"class":110},"}季度的数据:`",[100,53455,751],{"class":258},[100,53457,53458],{"class":102,"line":11432},[100,53459,53460],{"class":1836},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[100,53462,53463],{"class":102,"line":11446},[100,53464,4138],{"class":258},[100,53466,53467],{"class":102,"line":11452},[100,53468,53469],{"class":1836},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[100,53471,53472],{"class":102,"line":11479},[100,53473,53474],{"class":1836},"        \u002F\u002F 盒子开头\n",[100,53476,53477,53480,53483,53485,53488],{"class":102,"line":11488},[100,53478,53479],{"class":258},"        document.",[100,53481,53482],{"class":106},"write",[100,53484,713],{"class":258},[100,53486,53487],{"class":110},"` \u003Cdiv class=\"box\">`",[100,53489,809],{"class":258},[100,53491,53492],{"class":102,"line":11494},[100,53493,570],{"emptyLinePlaceholder":569},[100,53495,53496],{"class":102,"line":11502},[100,53497,53498],{"class":1836},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[100,53500,53501,53503,53505,53507,53509,53511,53513,53515,53517,53520,53523,53525,53527],{"class":102,"line":11507},[100,53502,5003],{"class":471},[100,53504,3283],{"class":258},[100,53506,53401],{"class":471},[100,53508,11023],{"class":258},[100,53510,472],{"class":471},[100,53512,5692],{"class":117},[100,53514,11030],{"class":258},[100,53516,2676],{"class":471},[100,53518,53519],{"class":258}," arr.",[100,53521,53522],{"class":117},"length",[100,53524,4814],{"class":258},[100,53526,3903],{"class":471},[100,53528,14024],{"class":258},[100,53530,53531,53534,53536,53538],{"class":102,"line":18185},[100,53532,53533],{"class":258},"            document.",[100,53535,53482],{"class":106},[100,53537,713],{"class":258},[100,53539,53540],{"class":110},"`\n",[100,53542,53543,53546,53548,53550,53552,53554],{"class":102,"line":18191},[100,53544,53545],{"class":110},"              \u003Cdiv style=\"height: ${",[100,53547,5479],{"class":258},[100,53549,2656],{"class":110},[100,53551,2208],{"class":258},[100,53553,2706],{"class":110},[100,53555,53556],{"class":110},"}px;\">\n",[100,53558,53559,53562,53564,53566,53568,53570],{"class":102,"line":18214},[100,53560,53561],{"class":110},"                \u003Cspan>${",[100,53563,5479],{"class":258},[100,53565,2656],{"class":110},[100,53567,2208],{"class":258},[100,53569,2706],{"class":110},[100,53571,53572],{"class":110},"}\u003C\u002Fspan>\n",[100,53574,53575,53578,53580,53582,53584],{"class":102,"line":18220},[100,53576,53577],{"class":110},"                \u003Ch4>第${",[100,53579,2208],{"class":258},[100,53581,47120],{"class":471},[100,53583,26693],{"class":117},[100,53585,53586],{"class":110},"}季度\u003C\u002Fh4>\n",[100,53588,53589],{"class":102,"line":18243},[100,53590,53591],{"class":110},"              \u003C\u002Fdiv>          \n",[100,53593,53594,53597],{"class":102,"line":18257},[100,53595,53596],{"class":110},"            `",[100,53598,809],{"class":258},[100,53600,53601],{"class":102,"line":18277},[100,53602,4138],{"class":258},[100,53604,53605],{"class":102,"line":18283},[100,53606,53607],{"class":1836},"        \u002F\u002F 盒子结尾\n",[100,53609,53610,53612,53614,53616,53619],{"class":102,"line":18294},[100,53611,53479],{"class":258},[100,53613,53482],{"class":106},[100,53615,713],{"class":258},[100,53617,53618],{"class":110},"` \u003C\u002Fdiv>`",[100,53620,809],{"class":258},[100,53622,53623,53625,53627],{"class":102,"line":18317},[100,53624,53330],{"class":258},[100,53626,53367],{"class":52854},[100,53628,52861],{"class":258},[100,53630,53631,53633,53635],{"class":102,"line":18339},[100,53632,53339],{"class":258},[100,53634,53354],{"class":52854},[100,53636,52861],{"class":258},[100,53638,53639],{"class":102,"line":18344},[100,53640,570],{"emptyLinePlaceholder":569},[100,53642,53643,53645,53647],{"class":102,"line":18350},[100,53644,53339],{"class":258},[100,53646,52189],{"class":52854},[100,53648,52861],{"class":258},[305,53650,53652],{"id":53651},"_284-冒泡排序","2.8.4 冒泡排序",[73,53654,53656],{"className":52187,"code":53655,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    let arr = [5, 4, 3, 2, 1]\n    for (let i = 0; i \u003C arr.length - 1; i++) {\n      for (let j = 0; j \u003C arr.length - i - 1; j++) {\n        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n        if (arr[j] > arr[j + 1]) {\n          \u002F\u002F 交换两个变量\n          let tmp = arr[j]\n          arr[j] = arr[j + 1]\n          arr[j + 1] = tmp\n        }\n      }\n    }\n    document.write(arr)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,53657,53658,53668,53682,53686,53694,53709,53729,53741,53749,53753,53761,53769,53801,53834,53871,53876,53895,53900,53913,53928,53944,53948,53953,53957,53967,53976,53984,53988],{"__ignoreMap":79},[100,53659,53660,53662,53664,53666],{"class":102,"line":103},[100,53661,52851],{"class":258},[100,53663,52855],{"class":52854},[100,53665,52858],{"class":106},[100,53667,52861],{"class":258},[100,53669,53670,53672,53674,53676,53678,53680],{"class":102,"line":188},[100,53671,2676],{"class":258},[100,53673,52189],{"class":52854},[100,53675,52870],{"class":106},[100,53677,472],{"class":258},[100,53679,52875],{"class":110},[100,53681,52861],{"class":258},[100,53683,53684],{"class":102,"line":199},[100,53685,570],{"emptyLinePlaceholder":569},[100,53687,53688,53690,53692],{"class":102,"line":532},[100,53689,2676],{"class":258},[100,53691,52888],{"class":52854},[100,53693,52861],{"class":258},[100,53695,53696,53699,53701,53703,53705,53707],{"class":102,"line":577},[100,53697,53698],{"class":258},"  \u003C",[100,53700,52898],{"class":52854},[100,53702,52901],{"class":106},[100,53704,472],{"class":258},[100,53706,52906],{"class":110},[100,53708,52861],{"class":258},[100,53710,53711,53713,53715,53717,53719,53721,53723,53725,53727],{"class":102,"line":589},[100,53712,53698],{"class":258},[100,53714,52898],{"class":52854},[100,53716,16501],{"class":106},[100,53718,472],{"class":258},[100,53720,52945],{"class":110},[100,53722,52925],{"class":106},[100,53724,472],{"class":258},[100,53726,52952],{"class":110},[100,53728,52861],{"class":258},[100,53730,53731,53733,53735,53737,53739],{"class":102,"line":595},[100,53732,53698],{"class":258},[100,53734,52961],{"class":52854},[100,53736,52964],{"class":258},[100,53738,52961],{"class":52854},[100,53740,52861],{"class":258},[100,53742,53743,53745,53747],{"class":102,"line":601},[100,53744,53339],{"class":258},[100,53746,52888],{"class":52854},[100,53748,52861],{"class":258},[100,53750,53751],{"class":102,"line":606},[100,53752,570],{"emptyLinePlaceholder":569},[100,53754,53755,53757,53759],{"class":102,"line":612},[100,53756,2676],{"class":258},[100,53758,53354],{"class":52854},[100,53760,52861],{"class":258},[100,53762,53763,53765,53767],{"class":102,"line":618},[100,53764,53698],{"class":258},[100,53766,53367],{"class":52854},[100,53768,52861],{"class":258},[100,53770,53771,53774,53776,53778,53781,53783,53785,53787,53789,53791,53793,53795,53797,53799],{"class":102,"line":623},[100,53772,53773],{"class":471},"    let",[100,53775,53387],{"class":258},[100,53777,472],{"class":471},[100,53779,53780],{"class":258}," [",[100,53782,2086],{"class":117},[100,53784,14017],{"class":258},[100,53786,748],{"class":117},[100,53788,14017],{"class":258},[100,53790,1849],{"class":117},[100,53792,14017],{"class":258},[100,53794,465],{"class":117},[100,53796,14017],{"class":258},[100,53798,1985],{"class":117},[100,53800,34802],{"class":258},[100,53802,53803,53805,53807,53809,53811,53813,53815,53817,53819,53821,53823,53826,53828,53830,53832],{"class":102,"line":629},[100,53804,848],{"class":471},[100,53806,3283],{"class":258},[100,53808,53401],{"class":471},[100,53810,11023],{"class":258},[100,53812,472],{"class":471},[100,53814,5692],{"class":117},[100,53816,11030],{"class":258},[100,53818,2676],{"class":471},[100,53820,53519],{"class":258},[100,53822,53522],{"class":117},[100,53824,53825],{"class":471}," -",[100,53827,26693],{"class":117},[100,53829,4814],{"class":258},[100,53831,3903],{"class":471},[100,53833,14024],{"class":258},[100,53835,53836,53839,53841,53843,53845,53847,53849,53851,53853,53855,53857,53859,53861,53863,53865,53867,53869],{"class":102,"line":635},[100,53837,53838],{"class":471},"      for",[100,53840,3283],{"class":258},[100,53842,53401],{"class":471},[100,53844,11085],{"class":258},[100,53846,472],{"class":471},[100,53848,5692],{"class":117},[100,53850,11092],{"class":258},[100,53852,2676],{"class":471},[100,53854,53519],{"class":258},[100,53856,53522],{"class":117},[100,53858,53825],{"class":471},[100,53860,11023],{"class":258},[100,53862,2299],{"class":471},[100,53864,26693],{"class":117},[100,53866,11099],{"class":258},[100,53868,3903],{"class":471},[100,53870,14024],{"class":258},[100,53872,53873],{"class":102,"line":641},[100,53874,53875],{"class":1836},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[100,53877,53878,53880,53883,53885,53888,53890,53892],{"class":102,"line":647},[100,53879,4106],{"class":471},[100,53881,53882],{"class":258}," (arr[j] ",[100,53884,2726],{"class":471},[100,53886,53887],{"class":258}," arr[j ",[100,53889,2248],{"class":471},[100,53891,26693],{"class":117},[100,53893,53894],{"class":258},"]) {\n",[100,53896,53897],{"class":102,"line":653},[100,53898,53899],{"class":1836},"          \u002F\u002F 交换两个变量\n",[100,53901,53902,53905,53908,53910],{"class":102,"line":659},[100,53903,53904],{"class":471},"          let",[100,53906,53907],{"class":258}," tmp ",[100,53909,472],{"class":471},[100,53911,53912],{"class":258}," arr[j]\n",[100,53914,53915,53918,53920,53922,53924,53926],{"class":102,"line":665},[100,53916,53917],{"class":258},"          arr[j] ",[100,53919,472],{"class":471},[100,53921,53887],{"class":258},[100,53923,2248],{"class":471},[100,53925,26693],{"class":117},[100,53927,34802],{"class":258},[100,53929,53930,53933,53935,53937,53939,53941],{"class":102,"line":670},[100,53931,53932],{"class":258},"          arr[j ",[100,53934,2248],{"class":471},[100,53936,26693],{"class":117},[100,53938,468],{"class":258},[100,53940,472],{"class":471},[100,53942,53943],{"class":258}," tmp\n",[100,53945,53946],{"class":102,"line":675},[100,53947,4138],{"class":258},[100,53949,53950],{"class":102,"line":699},[100,53951,53952],{"class":258},"      }\n",[100,53954,53955],{"class":102,"line":708},[100,53956,3798],{"class":258},[100,53958,53959,53962,53964],{"class":102,"line":722},[100,53960,53961],{"class":258},"    document.",[100,53963,53482],{"class":106},[100,53965,53966],{"class":258},"(arr)\n",[100,53968,53969,53972,53974],{"class":102,"line":735},[100,53970,53971],{"class":258},"  \u003C\u002F",[100,53973,53367],{"class":52854},[100,53975,52861],{"class":258},[100,53977,53978,53980,53982],{"class":102,"line":754},[100,53979,53339],{"class":258},[100,53981,53354],{"class":52854},[100,53983,52861],{"class":258},[100,53985,53986],{"class":102,"line":771},[100,53987,570],{"emptyLinePlaceholder":569},[100,53989,53990,53992,53994],{"class":102,"line":776},[100,53991,53339],{"class":258},[100,53993,52189],{"class":52854},[100,53995,52861],{"class":258},[19,53997,53998],{},[3095,53999],{"alt":79,"src":54000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,54002,54003],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,54005,54006],{},"let arr = [4, 2, 5, 1, 3]",[19,54008,54009],{},"\u002F\u002F 1.升序排列写法",[19,54011,54012],{},"arr.sort(function (a, b) {",[19,54014,54015],{},"return a - b",[19,54017,54018],{},"})",[19,54020,54021],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,54023,54024],{},"\u002F\u002F 降序排列写法",[19,54026,54012],{},[19,54028,54029],{},"return b - a",[19,54031,54018],{},[19,54033,54034],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,54036,54038],{"id":54037},"_29-函数","2.9 函数",[19,54040,54041],{},[3095,54042],{"alt":79,"src":54043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,54045,54046],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,54048,54049],{},"函数的声明用function",[19,54051,54052],{},"函数里边可以嵌套函数",[305,54054,54056],{"id":54055},"_291-函数传参","2.9.1 函数传参",[19,54058,54059],{},[3095,54060],{"alt":79,"src":54061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,54063,54064],{},[3095,54065],{"alt":79,"src":54066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[2773,54068,54069,54072,54075,54078,54081,54084],{},[29,54070,54071],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[29,54073,54074],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[29,54076,54077],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[29,54079,54080],{},"开发中尽量保持形参和实参个数一致",[29,54082,54083],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[29,54085,54086],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,54088,54089],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[305,54091,54093],{"id":54092},"_292-函数的返回值","2.9.2 函数的返回值",[19,54095,54096],{},[3095,54097],{"alt":79,"src":54098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,54100,54101],{},[3095,54102],{"alt":79,"src":54103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[2773,54105,54106,54109,54112,54115,54118],{},[29,54107,54108],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[29,54110,54111],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[29,54113,54114],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[29,54116,54117],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[29,54119,54120],{},"断点调试:进入函数内部看执行过程F11",[305,54122,54124],{"id":54123},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[73,54126,54128],{"className":52187,"code":54127,"language":52189,"meta":79,"style":79},"    function fn(a, b) {\n      console.log(a + b);\n    }\n    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[32,54129,54130,54135,54140,54144,54149],{"__ignoreMap":79},[100,54131,54132],{"class":102,"line":103},[100,54133,54134],{"class":258},"    function fn(a, b) {\n",[100,54136,54137],{"class":102,"line":188},[100,54138,54139],{"class":258},"      console.log(a + b);\n",[100,54141,54142],{"class":102,"line":199},[100,54143,3798],{"class":258},[100,54145,54146],{"class":102,"line":532},[100,54147,54148],{"class":258},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[100,54150,54151],{"class":102,"line":577},[100,54152,54153],{"class":258},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[305,54155,54157],{"id":54156},"_294-作用域","2.9.4 作用域",[2773,54159,54160,54166,54171,54174,54177],{},[29,54161,54162,54163],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[1921,54164,54165],{},"作用域",[29,54167,54168],{},[1921,54169,54170],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[29,54172,54173],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[29,54175,54176],{},"函数内部可以直接所使用全局变量",[29,54178,54179],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,54181,16214],{},[73,54183,54185],{"className":52187,"code":54184,"language":52189,"meta":79,"style":79},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[32,54186,54187,54192,54197,54201,54206,54211,54216],{"__ignoreMap":79},[100,54188,54189],{"class":102,"line":103},[100,54190,54191],{"class":258},"    function fun() {\n",[100,54193,54194],{"class":102,"line":188},[100,54195,54196],{"class":258},"      num = 10\n",[100,54198,54199],{"class":102,"line":199},[100,54200,3798],{"class":258},[100,54202,54203],{"class":102,"line":532},[100,54204,54205],{"class":258},"    fun()\n",[100,54207,54208],{"class":102,"line":577},[100,54209,54210],{"class":258},"    console.log(num)\n",[100,54212,54213],{"class":102,"line":589},[100,54214,54215],{"class":258},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[100,54217,54218],{"class":102,"line":595},[100,54219,54220],{"class":258},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[2773,54222,54223,54226],{},[29,54224,54225],{},"函数内部的形参可以看做是局部变量",[29,54227,54228],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,54230,54231,54232],{},"变量访问原则： ",[1921,54233,54234],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[305,54236,54238],{"id":54237},"_295-匿名函数","2.9.5 匿名函数",[19,54240,54241],{},"函数可以分为具名函数和匿名函数",[19,54243,54244],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[26,54246,54247],{},[29,54248,54249],{},"函数表达式",[19,54251,54252],{},[3095,54253],{"alt":79,"src":54254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,54256,54257],{},"里边也可以写参数",[19,54259,54260],{},"具名函数调用位置可以随意调整；",[19,54262,54263],{},"匿名函数函数表达式形式只能在声明后才可以使用",[26,54265,54266],{"start":188},[29,54267,54268],{},"立即执行函数",[19,54270,54271],{},[3095,54272],{"alt":79,"src":54273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,54275,54276],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,54278,54279],{},"写法：两个小括号，然后在第一个小括号中写function",[19,54281,54282],{},"(function () {})();",[19,54284,54285],{},"不要落下最后的;",[19,54287,54288],{},"立即执行函数必须要加;",[19,54290,54291],{},"分号写前写后都没问题",[19,54293,54294],{},"写前：",[19,54296,54297],{},"(function() {})()",[19,54299,54300],{},";(function () {})();",[19,54302,54303],{},"写后:",[19,54305,54306],{},"(function() {})();",[19,54308,54282],{},[19,54310,54311],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,54313,54314],{},"还有一种写法：",[19,54316,54317],{},"(function(){}());",[19,54319,54320],{},"或者:",[19,54322,54323],{},"!function(){}();",[19,54325,54326],{},"立即执行函数有时候也是可以加名字的：",[19,54328,54329],{},"(function flexible(window,document) {}(window,document));",[19,54331,54332],{},"省一些调用方法",[305,54334,54336],{"id":54335},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,54338,54339],{},[3095,54340],{"alt":79,"src":54341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,54343,54344],{},"这样就不用非得给x,y初始化了",[19,54346,54347],{},[3095,54348],{"alt":79,"src":54349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,54351,54352],{},"代码执行时先看左边",[19,54354,54355],{},"例如：console.log(false && 3+5)",[19,54357,54358],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,54360,54361],{},"&&都是真时，就返回最后一个真值",[19,54363,54364],{},"console.log(11 && 22)",[19,54366,54367],{},"输出22",[19,54369,54370],{},"逻辑与：遇真则真",[19,54372,16214],{},[19,54374,54375],{},"let age=1",[19,54377,54378],{},"console.log(11 || age++)",[19,54380,54381],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,54383,54384],{},"console.log(11 || 22)",[19,54386,54387],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,54389,54390],{},"||如果都是假的话，就取最后一个假的值了",[305,54392,54394],{"id":54393},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,54396,54397],{},"显示转换：",[19,54399,54400,54403,54404],{},[1921,54401,54402],{},"记忆","： ",[1921,54405,54406],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,54408,54409],{},"空字符串为假，其他字符串全为真",[19,54411,54412],{},[3095,54413],{"alt":79,"src":54414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,54416,54417],{},"隐式转换：",[19,54419,54420],{},[3095,54421],{"alt":79,"src":54422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,54424,54425],{},"隐式转换:",[19,54427,54428],{},"null+3=3",[19,54430,54431],{},"undefined+3=NaN",[19,54433,54434],{},"null==undefined 输出true,他两个都当0看",[19,54436,54437],{},"null===undefined 输出false",[19,54439,54440],{},"undefined做任何操作都是NaN",[19,54442,54443],{},"NaN不等于NaN，NaN表示计算错误",[14,54445,54447],{"id":54446},"_210-对象","2.10 对象",[305,54449,54451],{"id":54450},"_2101-对象的介绍","2.10.1 对象的介绍",[19,54453,54454],{},"对象也是一种数据类型，里边的数据是无序的",[19,54456,54457],{},"对象由属性和方法组成",[19,54459,54460],{},[3095,54461],{"alt":79,"src":54462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,54464,54465],{},[3095,54466],{"alt":79,"src":54467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,54469,54470],{},[3095,54471],{"alt":79,"src":54472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[305,54474,54476],{"id":54475},"_2102-对象属性","2.10.2 对象属性",[19,54478,54479],{},[3095,54480],{"alt":79,"src":54481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[26,54483,54484],{},[29,54485,54486],{},"查询对象",[19,54488,54489],{},"对象名.属性 goods.uname",[19,54491,54492],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,54494,54495],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,54497,54498],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,54500,54501],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[26,54503,54504],{"start":188},[29,54505,54506],{},"重新赋值",[19,54508,54509],{},"对象名.属性=新值",[26,54511,54512],{"start":199},[29,54513,54514],{},"增加新数据",[19,54516,54509],{},[26,54518,54519],{"start":532},[29,54520,54521],{},"删除对象中的属性",[19,54523,54524],{},"delete 对象名.属性",[305,54526,54528],{"id":54527},"_2103-对象方法","2.10.3 对象方法",[19,54530,54531],{},[3095,54532],{"alt":79,"src":54533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,54535,54536],{},"后边跟的是匿名函数",[19,54538,54539],{},"对象外面的叫函数；对象内部的叫方法",[19,54541,54542],{},[3095,54543],{"alt":79,"src":54544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[305,54546,54548],{"id":54547},"_2104-遍历对象","2.10.4 遍历对象",[19,54550,54551],{},"理解为加括号的python字典遍历",[19,54553,54554],{},[3095,54555],{"alt":79,"src":54556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,54558,54559],{},"k是字符串类型",[19,54561,54562],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[73,54564,54566],{"className":52187,"code":54565,"language":52189,"meta":79,"style":79},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[32,54567,54568,54573,54578,54583,54588],{"__ignoreMap":79},[100,54569,54570],{"class":102,"line":103},[100,54571,54572],{"class":258},"   let arr = [1, 2, 3]\n",[100,54574,54575],{"class":102,"line":188},[100,54576,54577],{"class":258},"    for (let k in arr) {\n",[100,54579,54580],{"class":102,"line":199},[100,54581,54582],{"class":258},"      console.log(k)\n",[100,54584,54585],{"class":102,"line":532},[100,54586,54587],{"class":258},"      console.log(arr[k])\n",[100,54589,54590],{"class":102,"line":577},[100,54591,3798],{"class":258},[19,54593,54594],{},[3095,54595],{"alt":79,"src":54596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,54598,54599],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,54601,54602],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,54604,54605],{},"for in 得到的k是属性名",[53367,54607,54608],{},"\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,54610,54611],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[305,54613,54615],{"id":54614},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,54617,54618],{},"数组中放对象信息",[73,54620,54624],{"className":54621,"code":54622,"language":54623,"meta":79,"style":79},"language-xml shiki shiki-themes github-light github-dark","\u003Cscript>\n    let students = [\n      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n    ]\n    for (let i = 0; i \u003C students.length; i++) {\n      for (let k in students[i]) {\n        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n        \u002F\u002F输出每个人的名字：\n        \u002F\u002Fconsole.log(students[i].name)\n      }\n    }\n  \u003C\u002Fscript>\n","xml",[32,54625,54626,54634,54639,54644,54649,54654,54659,54664,54669,54674,54679,54684,54689,54693,54697],{"__ignoreMap":79},[100,54627,54628,54630,54632],{"class":102,"line":103},[100,54629,2676],{"class":258},[100,54631,53367],{"class":52854},[100,54633,52861],{"class":258},[100,54635,54636],{"class":102,"line":188},[100,54637,54638],{"class":258},"    let students = [\n",[100,54640,54641],{"class":102,"line":199},[100,54642,54643],{"class":258},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[100,54645,54646],{"class":102,"line":532},[100,54647,54648],{"class":258},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[100,54650,54651],{"class":102,"line":577},[100,54652,54653],{"class":258},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[100,54655,54656],{"class":102,"line":589},[100,54657,54658],{"class":258},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[100,54660,54661],{"class":102,"line":595},[100,54662,54663],{"class":258},"    ]\n",[100,54665,54666],{"class":102,"line":601},[100,54667,54668],{"class":258},"    for (let i = 0; i \u003C students.length; i++) {\n",[100,54670,54671],{"class":102,"line":606},[100,54672,54673],{"class":258},"      for (let k in students[i]) {\n",[100,54675,54676],{"class":102,"line":612},[100,54677,54678],{"class":258},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[100,54680,54681],{"class":102,"line":618},[100,54682,54683],{"class":258},"        \u002F\u002F输出每个人的名字：\n",[100,54685,54686],{"class":102,"line":623},[100,54687,54688],{"class":258},"        \u002F\u002Fconsole.log(students[i].name)\n",[100,54690,54691],{"class":102,"line":629},[100,54692,53952],{"class":258},[100,54694,54695],{"class":102,"line":635},[100,54696,3798],{"class":258},[100,54698,54699,54701,54703],{"class":102,"line":641},[100,54700,53971],{"class":258},[100,54702,53367],{"class":52854},[100,54704,52861],{"class":258},[305,54706,54708],{"id":54707},"_2106-内置对象","2.10.6 内置对象",[19,54710,54711],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[26,54713,54714],{},[29,54715,54716],{},"数学对象Math",[19,54718,54719],{},[3095,54720],{"alt":79,"src":54721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,54723,54724],{},[2006,54725,54728],{"href":54726,"rel":54727},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[25442],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,54730,54731],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,54733,54734],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,54736,54737],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,54739,54740],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,54742,54743],{},"null属于对象数据类型",[26,54745,54746],{"start":188},[29,54747,54748],{},"生成任意范围随机数",[19,54750,54751],{},[3095,54752],{"alt":79,"src":54753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,54755,54756],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,54758,54759],{},"乘以几就取不到几",[19,54761,54762],{},"取数组中的随机元素：",[19,54764,54765],{},"let arr = ['red', 'green', 'blue']",[19,54767,54768],{},"let random = Math.floor(Math.random() * arr.length)",[19,54770,54771],{},"console.log(arr[random])",[19,54773,54774],{},"这个函数得到的是全闭区间",[19,54776,54777],{},"function getRandom(N, M) {",[19,54779,54780],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,54782,2712],{},[19,54784,54785],{},"console.log(getRandom(4, 8))",[305,54787,54789],{"id":54788},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,54791,54792],{},[3095,54793],{"alt":79,"src":54794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,54796,54797],{},[3095,54798],{"alt":79,"src":54799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,54801,54802],{},[3095,54803],{"alt":79,"src":54804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,54806,54807],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,54809,54810],{},[3095,54811],{"alt":79,"src":54812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,54814,54815],{},[3095,54816],{"alt":79,"src":54817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,54819,54820],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,54822,54823],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,54825,54826],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[1677,54828,54829],{},"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":79,"searchDepth":188,"depth":188,"links":54831},[54832,54840,54841,54842,54843,54844,54851,54855,54861,54870],{"id":52022,"depth":188,"text":52023,"children":54833},[54834,54835,54836,54837,54838,54839],{"id":52026,"depth":199,"text":52027},{"id":52043,"depth":199,"text":52044},{"id":52083,"depth":199,"text":52084},{"id":52095,"depth":199,"text":52096},{"id":52104,"depth":199,"text":52105},{"id":52152,"depth":199,"text":52153},{"id":52162,"depth":188,"text":52163},{"id":52250,"depth":188,"text":52251},{"id":52273,"depth":188,"text":52274},{"id":52285,"depth":188,"text":52286},{"id":52472,"depth":188,"text":52473,"children":54845},[54846,54847,54848,54849,54850],{"id":52476,"depth":199,"text":52477},{"id":52485,"depth":199,"text":52486},{"id":52513,"depth":199,"text":52514},{"id":52549,"depth":199,"text":52550},{"id":52574,"depth":199,"text":52575},{"id":52586,"depth":188,"text":52587,"children":54852},[54853,54854],{"id":52607,"depth":199,"text":52608},{"id":52701,"depth":199,"text":52702},{"id":52759,"depth":188,"text":52760,"children":54856},[54857,54858,54859,54860],{"id":52763,"depth":199,"text":52764},{"id":52787,"depth":199,"text":52788},{"id":52840,"depth":199,"text":52841},{"id":53651,"depth":199,"text":53652},{"id":54037,"depth":188,"text":54038,"children":54862},[54863,54864,54865,54866,54867,54868,54869],{"id":54055,"depth":199,"text":54056},{"id":54092,"depth":199,"text":54093},{"id":54123,"depth":199,"text":54124},{"id":54156,"depth":199,"text":54157},{"id":54237,"depth":199,"text":54238},{"id":54335,"depth":199,"text":54336},{"id":54393,"depth":199,"text":54394},{"id":54446,"depth":188,"text":54447,"children":54871},[54872,54873,54874,54875,54876,54877,54878],{"id":54450,"depth":199,"text":54451},{"id":54475,"depth":199,"text":54476},{"id":54527,"depth":199,"text":54528},{"id":54547,"depth":199,"text":54548},{"id":54614,"depth":199,"text":54615},{"id":54707,"depth":199,"text":54708},{"id":54788,"depth":199,"text":54789},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":52014,"description":24958},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":54885,"title":54886,"body":54887,"description":24958,"extension":1708,"meta":78227,"navigation":569,"path":78228,"seo":78229,"stem":78230,"__hash__":78231},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":54888,"toc":78167},[54889,54892,54895,54898,54903,54906,54909,54912,54916,54920,54926,54931,54939,54946,54949,54953,54958,54963,54968,54971,54974,54985,54988,54992,54995,54998,55003,55008,55013,55016,55019,55111,55114,55119,55122,55127,55130,55133,55138,55141,55146,55150,55153,55167,55171,55176,55179,55182,55186,55191,55194,55198,55202,55207,55211,55216,55219,55222,55225,55228,55231,55234,55239,55244,55272,55275,55278,55281,55286,55289,55292,55295,55298,55302,55331,55335,55340,55345,55348,55351,55354,55359,55474,55479,55484,55645,55650,55653,55657,55662,55667,55670,55673,55676,55679,55682,55685,55688,55691,55694,55697,55700,55703,55706,55709,55711,55714,55717,55720,55725,55729,56126,56129,56135,56139,56144,57426,57431,57434,57437,57440,57445,58641,58645,58651,58656,58659,58664,58669,58673,58677,58682,58685,58690,58693,58696,58700,59608,59611,59615,59836,59839,59842,59845,60071,60074,60298,60301,60305,60310,60313,60316,60544,60547,60580,60583,60587,60592,60596,60599,60602,60605,60608,60611,60614,60617,60622,61902,61906,61909,63002,63006,63009,63012,63015,63018,63022,63025,63028,63030,63038,64519,64523,64526,64529,64532,64741,64744,64748,64752,64757,64762,64765,64768,64773,64777,64782,64785,64894,64898,64903,64908,64911,64914,64918,64923,64928,64933,64936,64939,64950,64953,64958,64963,64966,64969,65042,65046,65051,65054,65056,65067,65071,65076,66402,66405,66408,66411,66413,66416,66419,66422,66425,66428,66431,66434,66437,66440,66443,66446,66449,66451,66453,66456,66460,67554,67557,67560,67576,67590,67593,67598,67604,67609,67613,67617,67622,67626,67631,68073,68078,68081,68085,68090,68093,68096,68100,68105,68109,68114,68119,68123,68128,68133,68136,68141,68146,68150,68155,68160,68264,68267,68271,68276,68642,68645,68648,68651,68654,68657,68660,68663,68666,69962,69966,69971,69976,69979,69982,69985,69988,69990,69995,70000,70003,70007,70012,70017,70022,70025,70028,70031,70034,70037,70042,70045,70049,70054,70059,70063,70068,70071,70076,70079,70082,70085,70088,70091,70096,70099,70102,70105,70108,70112,70117,70120,70124,70129,70132,70135,70139,70168,70171,70175,70179,70184,70188,70193,70196,70199,70202,70205,70208,70211,70214,70217,70220,70223,70226,70229,70232,70235,70239,70244,70249,70252,70256,70260,70265,70268,70272,70275,70278,70283,70288,70293,70298,70303,70306,70309,70314,70319,70323,70328,70331,70336,70339,70342,70345,70348,70353,70356,70365,70369,70374,70377,70380,70384,70387,70392,70396,70399,70405,70411,70415,70441,70444,72005,72008,72504,72507,72512,72517,72522,72526,72531,72536,72541,72545,72550,72553,72556,72559,72562,72566,72569,72574,72577,72582,72586,72591,72594,72599,72604,72609,72612,72615,72620,72625,72628,72631,72635,72638,72643,72646,72651,72654,72659,72664,72669,72672,72677,72742,72745,72756,72760,72765,72937,72941,72946,72949,72952,72955,72959,72970,72974,72977,72982,72987,72990,72993,72996,72999,73002,73004,73007,73010,73013,73018,73021,73026,73029,73033,73036,73039,73053,73057,73060,73115,73120,73123,73126,73131,73134,73138,73143,73273,73277,73282,73287,73368,73373,73377,73380,73385,73390,73396,73399,73402,73405,73409,73414,73417,73428,73432,73449,76496,76500,76503,76506,76509,76530,76534,76537,76545,76548,76553,76556,76559,76564,76569,76573,76594,76598,76603,76606,76609,76612,76615,76619,76624,76627,76631,76636,76639,76644,76647,76652,76655,76660,77863,77867,77872,77875,77880,78164],[10,54890,54886],{"id":54891},"_3web-apis",[19,54893,54894],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,54896,54897],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,54899,54900],{},[3095,54901],{"alt":79,"src":54902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,54904,54905],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,54907,54908],{},"建议数组和对象使用 const 来声明",[19,54910,54911],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,54913,54915],{"id":54914},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[305,54917,54919],{"id":54918},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,54921,54922,54925],{},[32,54923,54924],{},"document"," = HTML 文件解析后的对象化表示；",[19,54927,54928,54930],{},[32,54929,54924],{}," ≠ HTML 文件本身",[19,54932,54933,54938],{},[1921,54934,54935],{},[32,54936,54937],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,54940,54941,54945],{},[1921,54942,54943],{},[32,54944,54924],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,54947,54948],{},"document实际上为window.document的简写",[305,54950,54952],{"id":54951},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,54954,54955],{},[3095,54956],{"alt":79,"src":54957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,54959,54960],{},[3095,54961],{"alt":79,"src":54962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,54964,54965],{},[3095,54966],{"alt":79,"src":54967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,54969,54970],{},"console.dir()",[19,54972,54973],{},"dir用来打印对象",[2773,54975,54976,54979,54982],{},[29,54977,54978],{},"任何一个标签，都是一个对象",[29,54980,54981],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[29,54983,54984],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,54986,54987],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[305,54989,54991],{"id":54990},"_312-获取dom对象","3.1.2 获取DoM对象",[19,54993,54994],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,54996,54997],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,54999,55000],{},[1921,55001,55002],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[26,55004,55005],{},[29,55006,55007],{},"利用CSS选择器来获取标签元素",[19,55009,55010],{},[3095,55011],{"alt":79,"src":55012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,55014,55015],{},"里边的选择器必须必须加引号！！！",[19,55017,55018],{},"只选择第一个元素",[73,55020,55022],{"className":54621,"code":55021,"language":54623,"meta":79,"style":79},"\u003Cbody>\n  \u003Cdiv class=\"box\">123\u003C\u002Fdiv>\n  \u003Cdiv class=\"box\">456\u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 1.获取匹配的第一个元素\n    const box = document.querySelector('div')\n    console.dir(box)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[32,55023,55024,55032,55053,55072,55080,55085,55090,55095,55103],{"__ignoreMap":79},[100,55025,55026,55028,55030],{"class":102,"line":103},[100,55027,2676],{"class":258},[100,55029,53354],{"class":52854},[100,55031,52861],{"class":258},[100,55033,55034,55036,55038,55041,55043,55046,55049,55051],{"class":102,"line":188},[100,55035,53698],{"class":258},[100,55037,53165],{"class":52854},[100,55039,55040],{"class":106}," class",[100,55042,472],{"class":258},[100,55044,55045],{"class":110},"\"box\"",[100,55047,55048],{"class":258},">123\u003C\u002F",[100,55050,53165],{"class":52854},[100,55052,52861],{"class":258},[100,55054,55055,55057,55059,55061,55063,55065,55068,55070],{"class":102,"line":199},[100,55056,53698],{"class":258},[100,55058,53165],{"class":52854},[100,55060,55040],{"class":106},[100,55062,472],{"class":258},[100,55064,55045],{"class":110},[100,55066,55067],{"class":258},">456\u003C\u002F",[100,55069,53165],{"class":52854},[100,55071,52861],{"class":258},[100,55073,55074,55076,55078],{"class":102,"line":532},[100,55075,53698],{"class":258},[100,55077,53367],{"class":52854},[100,55079,52861],{"class":258},[100,55081,55082],{"class":102,"line":577},[100,55083,55084],{"class":258},"    \u002F\u002F 1.获取匹配的第一个元素\n",[100,55086,55087],{"class":102,"line":589},[100,55088,55089],{"class":258},"    const box = document.querySelector('div')\n",[100,55091,55092],{"class":102,"line":595},[100,55093,55094],{"class":258},"    console.dir(box)\n",[100,55096,55097,55099,55101],{"class":102,"line":601},[100,55098,53971],{"class":258},[100,55100,53367],{"class":52854},[100,55102,52861],{"class":258},[100,55104,55105,55107,55109],{"class":102,"line":606},[100,55106,53339],{"class":258},[100,55108,53354],{"class":52854},[100,55110,52861],{"class":258},[19,55112,55113],{},"只选123，不选456",[19,55115,55116],{},[3095,55117],{"alt":79,"src":55118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,55120,55121],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,55123,55124],{},[3095,55125],{"alt":79,"src":55126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,55128,55129],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,55131,55132],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[26,55134,55135],{"start":188},[29,55136,55137],{},"其他方法来获取标签元素",[19,55139,55140],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,55142,55143],{},[3095,55144],{"alt":79,"src":55145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[305,55147,55149],{"id":55148},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,55151,55152],{},"设置修改DOM元素内容有两种方式：",[2773,55154,55155,55158,55161,55164],{},[29,55156,55157],{},"元素.innerText=''",[29,55159,55160],{},"元素.innerHTML=''",[29,55162,55163],{},"不写字符串输出数字也是可以的",[29,55165,55166],{},"元素.innerHtml=1",[23579,55168,55170],{"id":55169},"_3131-innertext","3.1.3.1 innerText",[19,55172,55173],{},[3095,55174],{"alt":79,"src":55175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,55177,55178],{},"思路：实现了修改盒子中的内容！",[19,55180,55181],{},"它只显示纯文本，不解析标签",[23579,55183,55185],{"id":55184},"_3132-innerhtml","3.1.3.2 innerHTML",[19,55187,55188],{},[3095,55189],{"alt":79,"src":55190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,55192,55193],{},"相比于innerText，他的强大之处在于可以解析标签",[305,55195,55197],{"id":55196},"_314-操作元素属性","3.1.4 操作元素属性",[23579,55199,55201],{"id":55200},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,55203,55204],{},[3095,55205],{"alt":79,"src":55206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[23579,55208,55210],{"id":55209},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,55212,55213],{},[3095,55214],{"alt":79,"src":55215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,55217,55218],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,55220,55221],{},"div.style.backgroundColor = 'hotpink'",[19,55223,55224],{},"如果按照css的写法，-表示减，就会出错",[19,55226,55227],{},"body元素不需要再获取，直接用就行！！！！！！",[19,55229,55230],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,55232,55233],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,55235,55236],{},[3095,55237],{"alt":79,"src":55238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,55240,55241],{},[3095,55242],{"alt":79,"src":55243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[26,55245,55246,55249,55252,55255,55258,55261],{},[29,55247,55248],{},"className这个方式就是修改很多样式的时候来使用的！",[29,55250,55251],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[29,55253,55254],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[29,55256,55257],{},"className为属性名，如果还用class的话就导致与关键字冲突",[29,55259,55260],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[29,55262,55263,55264,55269],{},"解析标签的时候就变为了",[53165,55265],{"className":55266},[55267,55268],"nav","box",[55270,55271],"br",{},[19,55273,55274],{},"例子：",[53165,55276],{"className":55277},[55267],[53367,55279,55280],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,55282,55283],{},[3095,55284],{"alt":79,"src":55285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,55287,55288],{},"追加和删除类名用classList",[19,55290,55291],{},"常用于类似于开关的操作",[19,55293,55294],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,55296,55297],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[23579,55299,55301],{"id":55300},"_3143-牢记点","3.1.4.3 牢记点",[26,55303,55304,55307,55310,55313,55316,55319,55322,55325,55328],{},[29,55305,55306],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[29,55308,55309],{},"使用style属性操作css时不要忘记引号",[29,55311,55312],{},"使用className或者classList时也不要忘记引号",[29,55314,55315],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[29,55317,55318],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[29,55320,55321],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[29,55323,55324],{},"若： let arr=['1','2',3] arr[0]=1",[29,55326,55327],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[29,55329,55330],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[305,55332,55334],{"id":55333},"_315-操作表单元素","3.1.5 操作表单元素",[26,55336,55337],{},[29,55338,55339],{},"天生的属性",[19,55341,55342],{},[3095,55343],{"alt":79,"src":55344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,55346,55347],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,55349,55350],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,55352,55353],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,55355,55356],{},[3095,55357],{"alt":79,"src":55358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[73,55360,55362],{"className":52187,"code":55361,"language":52189,"meta":79,"style":79},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n\u003Cinput type=\"checkbox\" name=\"\" id=\"\" checked>\n不选的话：\nconst input = document.querySelector('input')\ninput.checked=false\n这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n\n禁用按钮：\n它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n\u003Cbutton disabled>点击\u003C\u002Fbutton>\n\u003Cbutton>点击\u003C\u002Fbutton>\nconst bt = document.querySelector('button')\nbt.disabled = false\n",[32,55363,55364,55369,55401,55406,55411,55416,55421,55425,55430,55435,55452,55464,55469],{"__ignoreMap":79},[100,55365,55366],{"class":102,"line":103},[100,55367,55368],{"class":258},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[100,55370,55371,55373,55376,55379,55381,55384,55386,55388,55390,55392,55394,55396,55399],{"class":102,"line":188},[100,55372,2676],{"class":258},[100,55374,55375],{"class":52854},"input",[100,55377,55378],{"class":106}," type",[100,55380,472],{"class":258},[100,55382,55383],{"class":110},"\"checkbox\"",[100,55385,16501],{"class":106},[100,55387,472],{"class":258},[100,55389,9248],{"class":110},[100,55391,16540],{"class":106},[100,55393,472],{"class":258},[100,55395,9248],{"class":110},[100,55397,55398],{"class":106}," checked",[100,55400,52861],{"class":258},[100,55402,55403],{"class":102,"line":199},[100,55404,55405],{"class":258},"不选的话：\n",[100,55407,55408],{"class":102,"line":532},[100,55409,55410],{"class":258},"const input = document.querySelector('input')\n",[100,55412,55413],{"class":102,"line":577},[100,55414,55415],{"class":258},"input.checked=false\n",[100,55417,55418],{"class":102,"line":589},[100,55419,55420],{"class":258},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[100,55422,55423],{"class":102,"line":595},[100,55424,570],{"emptyLinePlaceholder":569},[100,55426,55427],{"class":102,"line":601},[100,55428,55429],{"class":258},"禁用按钮：\n",[100,55431,55432],{"class":102,"line":606},[100,55433,55434],{"class":258},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[100,55436,55437,55439,55442,55445,55448,55450],{"class":102,"line":612},[100,55438,2676],{"class":258},[100,55440,55441],{"class":52854},"button",[100,55443,55444],{"class":106}," disabled",[100,55446,55447],{"class":258},">点击\u003C\u002F",[100,55449,55441],{"class":52854},[100,55451,52861],{"class":258},[100,55453,55454,55456,55458,55460,55462],{"class":102,"line":618},[100,55455,2676],{"class":258},[100,55457,55441],{"class":52854},[100,55459,55447],{"class":258},[100,55461,55441],{"class":52854},[100,55463,52861],{"class":258},[100,55465,55466],{"class":102,"line":623},[100,55467,55468],{"class":258},"const bt = document.querySelector('button')\n",[100,55470,55471],{"class":102,"line":629},[100,55472,55473],{"class":258},"bt.disabled = false\n",[26,55475,55476],{"start":188},[29,55477,55478],{},"自定义属性",[19,55480,55481],{},[3095,55482],{"alt":79,"src":55483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[73,55485,55487],{"className":54621,"code":55486,"language":54623,"meta":79,"style":79},"\u003Cbody>\n  \u003Cdiv data-id=\"1\" data-spm=\"我不知道\">1\u003C\u002Fdiv>\n  \u003Cdiv data-id=\"2\">2\u003C\u002Fdiv>\n  \u003Cdiv data-id=\"3\">3\u003C\u002Fdiv>\n  \u003Cdiv data-id=\"4\">4\u003C\u002Fdiv>\n  \u003Cdiv data-id=\"5\">5\u003C\u002Fdiv>\n  \u003Cscript>\n    const one = document.querySelector('div')\n    console.log(one.dataset)\n    console.log(one.dataset.id)\n    console.log(one.dataset.spm)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[32,55488,55489,55497,55525,55544,55563,55582,55601,55609,55614,55619,55624,55629,55637],{"__ignoreMap":79},[100,55490,55491,55493,55495],{"class":102,"line":103},[100,55492,2676],{"class":258},[100,55494,53354],{"class":52854},[100,55496,52861],{"class":258},[100,55498,55499,55501,55503,55506,55508,55510,55513,55515,55518,55521,55523],{"class":102,"line":188},[100,55500,53698],{"class":258},[100,55502,53165],{"class":52854},[100,55504,55505],{"class":106}," data-id",[100,55507,472],{"class":258},[100,55509,5278],{"class":110},[100,55511,55512],{"class":106}," data-spm",[100,55514,472],{"class":258},[100,55516,55517],{"class":110},"\"我不知道\"",[100,55519,55520],{"class":258},">1\u003C\u002F",[100,55522,53165],{"class":52854},[100,55524,52861],{"class":258},[100,55526,55527,55529,55531,55533,55535,55537,55540,55542],{"class":102,"line":199},[100,55528,53698],{"class":258},[100,55530,53165],{"class":52854},[100,55532,55505],{"class":106},[100,55534,472],{"class":258},[100,55536,5301],{"class":110},[100,55538,55539],{"class":258},">2\u003C\u002F",[100,55541,53165],{"class":52854},[100,55543,52861],{"class":258},[100,55545,55546,55548,55550,55552,55554,55556,55559,55561],{"class":102,"line":532},[100,55547,53698],{"class":258},[100,55549,53165],{"class":52854},[100,55551,55505],{"class":106},[100,55553,472],{"class":258},[100,55555,5314],{"class":110},[100,55557,55558],{"class":258},">3\u003C\u002F",[100,55560,53165],{"class":52854},[100,55562,52861],{"class":258},[100,55564,55565,55567,55569,55571,55573,55575,55578,55580],{"class":102,"line":577},[100,55566,53698],{"class":258},[100,55568,53165],{"class":52854},[100,55570,55505],{"class":106},[100,55572,472],{"class":258},[100,55574,5327],{"class":110},[100,55576,55577],{"class":258},">4\u003C\u002F",[100,55579,53165],{"class":52854},[100,55581,52861],{"class":258},[100,55583,55584,55586,55588,55590,55592,55594,55597,55599],{"class":102,"line":589},[100,55585,53698],{"class":258},[100,55587,53165],{"class":52854},[100,55589,55505],{"class":106},[100,55591,472],{"class":258},[100,55593,5347],{"class":110},[100,55595,55596],{"class":258},">5\u003C\u002F",[100,55598,53165],{"class":52854},[100,55600,52861],{"class":258},[100,55602,55603,55605,55607],{"class":102,"line":595},[100,55604,53698],{"class":258},[100,55606,53367],{"class":52854},[100,55608,52861],{"class":258},[100,55610,55611],{"class":102,"line":601},[100,55612,55613],{"class":258},"    const one = document.querySelector('div')\n",[100,55615,55616],{"class":102,"line":606},[100,55617,55618],{"class":258},"    console.log(one.dataset)\n",[100,55620,55621],{"class":102,"line":612},[100,55622,55623],{"class":258},"    console.log(one.dataset.id)\n",[100,55625,55626],{"class":102,"line":618},[100,55627,55628],{"class":258},"    console.log(one.dataset.spm)\n",[100,55630,55631,55633,55635],{"class":102,"line":623},[100,55632,53971],{"class":258},[100,55634,53367],{"class":52854},[100,55636,52861],{"class":258},[100,55638,55639,55641,55643],{"class":102,"line":629},[100,55640,53339],{"class":258},[100,55642,53354],{"class":52854},[100,55644,52861],{"class":258},[19,55646,55647],{},[3095,55648],{"alt":79,"src":55649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,55651,55652],{},"document.querySelector选择的是第一个对象（元素）",[305,55654,55656],{"id":55655},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,55658,55659],{},[3095,55660],{"alt":79,"src":55661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,55663,55664],{},[3095,55665],{"alt":79,"src":55666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,55668,55669],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[53367,55671,55672],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,55674,55675],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[53367,55677,55678],{},"\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,55680,55681],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,55683,55684],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,55686,55687],{},"单位为毫秒！！！",[19,55689,55690],{},"可以搭配匿名函数来用！！！",[19,55692,55693],{},"setInterval(function () {",[19,55695,55696],{},"alert('两秒执行一次')",[19,55698,55699],{},"}, 2000)",[19,55701,55702],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,55704,55705],{},"function fn() {",[19,55707,55708],{},"document.write(1)",[19,55710,2712],{},[19,55712,55713],{},"setInterval(fn, 1000)",[19,55715,55716],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,55718,55719],{},"setInterval('fn()', 1000)",[19,55721,55722],{},[3095,55723],{"alt":79,"src":55724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[23579,55726,55728],{"id":55727},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[73,55730,55732],{"className":52187,"code":55731,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ctextarea name=\"\" id=\"\" cols=\"30\" rows=\"10\">\n        用户注册协议\n        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n    \u003C\u002Ftextarea>\n  \u003Cbr>\n  \u003Cbutton class=\"btn\" disabled>我已经阅读用户协议(5)\u003C\u002Fbutton>\n  \u003Cscript>\n    \u002F\u002F 1. 获取元素\n    const btn = document.querySelector('.btn')\n    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n    \u002F\u002F 2. 倒计时\n    let i = 5\n    \u002F\u002F 2.1 开启定时器\n    let n = setInterval(function () {\n      i--\n      btn.innerHTML = `我已经阅读用户协议(${i})`\n      if (i === 0) {\n        clearInterval(n)  \u002F\u002F 关闭定时器\n        \u002F\u002F 定时器停了，我就可以开按钮\n        btn.disabled = false\n        btn.innerHTML = '同意'\n      }\n    }, 1000)\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,55733,55734,55744,55758,55762,55770,55784,55804,55816,55824,55828,55836,55873,55878,55883,55888,55896,55904,55926,55934,55939,55961,55966,55971,55982,55987,56007,56015,56030,56045,56056,56061,56071,56081,56085,56094,56098,56106,56114,56118],{"__ignoreMap":79},[100,55735,55736,55738,55740,55742],{"class":102,"line":103},[100,55737,52851],{"class":258},[100,55739,52855],{"class":52854},[100,55741,52858],{"class":106},[100,55743,52861],{"class":258},[100,55745,55746,55748,55750,55752,55754,55756],{"class":102,"line":188},[100,55747,2676],{"class":258},[100,55749,52189],{"class":52854},[100,55751,52870],{"class":106},[100,55753,472],{"class":258},[100,55755,52875],{"class":110},[100,55757,52861],{"class":258},[100,55759,55760],{"class":102,"line":199},[100,55761,570],{"emptyLinePlaceholder":569},[100,55763,55764,55766,55768],{"class":102,"line":532},[100,55765,2676],{"class":258},[100,55767,52888],{"class":52854},[100,55769,52861],{"class":258},[100,55771,55772,55774,55776,55778,55780,55782],{"class":102,"line":577},[100,55773,53698],{"class":258},[100,55775,52898],{"class":52854},[100,55777,52901],{"class":106},[100,55779,472],{"class":258},[100,55781,52906],{"class":110},[100,55783,52861],{"class":258},[100,55785,55786,55788,55790,55792,55794,55796,55798,55800,55802],{"class":102,"line":589},[100,55787,53698],{"class":258},[100,55789,52898],{"class":52854},[100,55791,16501],{"class":106},[100,55793,472],{"class":258},[100,55795,52945],{"class":110},[100,55797,52925],{"class":106},[100,55799,472],{"class":258},[100,55801,52952],{"class":110},[100,55803,52861],{"class":258},[100,55805,55806,55808,55810,55812,55814],{"class":102,"line":595},[100,55807,53698],{"class":258},[100,55809,52961],{"class":52854},[100,55811,52964],{"class":258},[100,55813,52961],{"class":52854},[100,55815,52861],{"class":258},[100,55817,55818,55820,55822],{"class":102,"line":601},[100,55819,53339],{"class":258},[100,55821,52888],{"class":52854},[100,55823,52861],{"class":258},[100,55825,55826],{"class":102,"line":606},[100,55827,570],{"emptyLinePlaceholder":569},[100,55829,55830,55832,55834],{"class":102,"line":612},[100,55831,2676],{"class":258},[100,55833,53354],{"class":52854},[100,55835,52861],{"class":258},[100,55837,55838,55840,55843,55845,55847,55849,55851,55853,55855,55858,55860,55863,55866,55868,55871],{"class":102,"line":618},[100,55839,53698],{"class":258},[100,55841,55842],{"class":52854},"textarea",[100,55844,16501],{"class":106},[100,55846,472],{"class":258},[100,55848,9248],{"class":110},[100,55850,16540],{"class":106},[100,55852,472],{"class":258},[100,55854,9248],{"class":110},[100,55856,55857],{"class":106}," cols",[100,55859,472],{"class":258},[100,55861,55862],{"class":110},"\"30\"",[100,55864,55865],{"class":106}," rows",[100,55867,472],{"class":258},[100,55869,55870],{"class":110},"\"10\"",[100,55872,52861],{"class":258},[100,55874,55875],{"class":102,"line":623},[100,55876,55877],{"class":258},"        用户注册协议\n",[100,55879,55880],{"class":102,"line":629},[100,55881,55882],{"class":258},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[100,55884,55885],{"class":102,"line":635},[100,55886,55887],{"class":258},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[100,55889,55890,55892,55894],{"class":102,"line":641},[100,55891,53330],{"class":258},[100,55893,55842],{"class":52854},[100,55895,52861],{"class":258},[100,55897,55898,55900,55902],{"class":102,"line":647},[100,55899,53698],{"class":258},[100,55901,55270],{"class":52854},[100,55903,52861],{"class":258},[100,55905,55906,55908,55910,55912,55914,55917,55919,55922,55924],{"class":102,"line":653},[100,55907,53698],{"class":258},[100,55909,55441],{"class":52854},[100,55911,55040],{"class":106},[100,55913,472],{"class":258},[100,55915,55916],{"class":110},"\"btn\"",[100,55918,55444],{"class":106},[100,55920,55921],{"class":258},">我已经阅读用户协议(5)\u003C\u002F",[100,55923,55441],{"class":52854},[100,55925,52861],{"class":258},[100,55927,55928,55930,55932],{"class":102,"line":659},[100,55929,53698],{"class":258},[100,55931,53367],{"class":52854},[100,55933,52861],{"class":258},[100,55935,55936],{"class":102,"line":665},[100,55937,55938],{"class":1836},"    \u002F\u002F 1. 获取元素\n",[100,55940,55941,55943,55946,55948,55951,55954,55956,55959],{"class":102,"line":670},[100,55942,12803],{"class":471},[100,55944,55945],{"class":117}," btn",[100,55947,583],{"class":471},[100,55949,55950],{"class":258}," document.",[100,55952,55953],{"class":106},"querySelector",[100,55955,713],{"class":258},[100,55957,55958],{"class":110},"'.btn'",[100,55960,809],{"class":258},[100,55962,55963],{"class":102,"line":675},[100,55964,55965],{"class":1836},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[100,55967,55968],{"class":102,"line":699},[100,55969,55970],{"class":1836},"    \u002F\u002F 2. 倒计时\n",[100,55972,55973,55975,55977,55979],{"class":102,"line":708},[100,55974,53773],{"class":471},[100,55976,11023],{"class":258},[100,55978,472],{"class":471},[100,55980,55981],{"class":117}," 5\n",[100,55983,55984],{"class":102,"line":722},[100,55985,55986],{"class":1836},"    \u002F\u002F 2.1 开启定时器\n",[100,55988,55989,55991,55994,55996,55999,56001,56004],{"class":102,"line":735},[100,55990,53773],{"class":471},[100,55992,55993],{"class":258}," n ",[100,55995,472],{"class":471},[100,55997,55998],{"class":106}," setInterval",[100,56000,713],{"class":258},[100,56002,56003],{"class":471},"function",[100,56005,56006],{"class":258}," () {\n",[100,56008,56009,56012],{"class":102,"line":754},[100,56010,56011],{"class":258},"      i",[100,56013,56014],{"class":471},"--\n",[100,56016,56017,56020,56022,56025,56027],{"class":102,"line":771},[100,56018,56019],{"class":258},"      btn.innerHTML ",[100,56021,472],{"class":471},[100,56023,56024],{"class":110}," `我已经阅读用户协议(${",[100,56026,2208],{"class":258},[100,56028,56029],{"class":110},"})`\n",[100,56031,56032,56035,56038,56041,56043],{"class":102,"line":776},[100,56033,56034],{"class":471},"      if",[100,56036,56037],{"class":258}," (i ",[100,56039,56040],{"class":471},"===",[100,56042,5692],{"class":117},[100,56044,14024],{"class":258},[100,56046,56047,56050,56053],{"class":102,"line":781},[100,56048,56049],{"class":106},"        clearInterval",[100,56051,56052],{"class":258},"(n)  ",[100,56054,56055],{"class":1836},"\u002F\u002F 关闭定时器\n",[100,56057,56058],{"class":102,"line":796},[100,56059,56060],{"class":1836},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[100,56062,56063,56066,56068],{"class":102,"line":812},[100,56064,56065],{"class":258},"        btn.disabled ",[100,56067,472],{"class":471},[100,56069,56070],{"class":117}," false\n",[100,56072,56073,56076,56078],{"class":102,"line":823},[100,56074,56075],{"class":258},"        btn.innerHTML ",[100,56077,472],{"class":471},[100,56079,56080],{"class":110}," '同意'\n",[100,56082,56083],{"class":102,"line":828},[100,56084,53952],{"class":258},[100,56086,56087,56090,56092],{"class":102,"line":840},[100,56088,56089],{"class":258},"    }, ",[100,56091,8006],{"class":117},[100,56093,809],{"class":258},[100,56095,56096],{"class":102,"line":845},[100,56097,570],{"emptyLinePlaceholder":569},[100,56099,56100,56102,56104],{"class":102,"line":868},[100,56101,53971],{"class":258},[100,56103,53367],{"class":52854},[100,56105,52861],{"class":258},[100,56107,56108,56110,56112],{"class":102,"line":874},[100,56109,53339],{"class":258},[100,56111,53354],{"class":52854},[100,56113,52861],{"class":258},[100,56115,56116],{"class":102,"line":879},[100,56117,570],{"emptyLinePlaceholder":569},[100,56119,56120,56122,56124],{"class":102,"line":889},[100,56121,53339],{"class":258},[100,56123,52189],{"class":52854},[100,56125,52861],{"class":258},[19,56127,56128],{},"不要一直想着用死循环,避免死循环",[19,56130,56131,56134],{},[32,56132,56133],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[23579,56136,56138],{"id":56137},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[26,56140,56141],{},[29,56142,56143],{},"法1",[73,56145,56147],{"className":52187,"code":56146,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n    }\n\n    li {\n      list-style: none;\n    }\n\n    .box {\n      position: relative;\n      width: 976px;\n      height: 600px;\n      margin: 100px auto;\n    }\n\n    .slider-footer {\n      position: absolute;\n      left: 0;\n      bottom: 0;\n      width: 100%;\n      height: 15%;\n      background-color: skyblue;\n    }\n\n    .slider-footer p {\n      position: absolute;\n      font-size: 28px;\n      left: 20px;\n      top: 5px;\n    }\n\n    ul {\n      position: absolute;\n      top: 55px;\n      left: 20px;\n      display: flex;\n      justify-content: space-between;\n      position: absolute;\n      width: 250px;\n      height: 20px;\n    }\n\n    ul li {\n      width: 20px;\n      height: 20px;\n      background-color: rgba(0, 0, 0, .4);\n      border-radius: 10px;\n    }\n\n    .activate {\n      background-color: #f7f7f7;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\n    \u003Cdiv class=\"slider-wrapper\">\n      \u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\" alt=\"\">\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"slider-footer\">\n      \u003Cp>对人类来说会不会太超前了?\u003C\u002Fp>\n      \u003Cul>\n        \u003Cli class=\"activate\">\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const arrImage = [\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了?', color: 'rgba(100,67,68)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说!', color: 'rgba(43,35,26)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了!', color: 'rgba(36,31,33)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚:让世界通过b站看到东方大国文化', color: 'rgba(139,98,66)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧', color: 'rgba(67,90,92)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAR', color: 'rgba(166,131,143)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题', color: 'rgba(53,29,25)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢?', color: 'rgba(99,72,114)' }\n    ]\n    const img = document.querySelector('.slider-wrapper img')\n    const p = document.querySelector('.slider-footer p')\n    const color = document.querySelector('.slider-footer')\n    const lis = document.querySelectorAll('.slider-footer ul li')\n    let i = 1\n    let timer = setInterval(function () {\n      img.src = arrImage[i].url\n      p.innerHTML = arrImage[i].title\n      color.style.backgroundColor = arrImage[i].color\n      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n      \u002F\u002F li.classList.add('activate')\n      \u002F\u002F lis[i + 1].classList.add('activate')\n      \u002F\u002F lis[i].classList.remove('activate')\n      document.querySelector('.activate')?.classList.toggle('activate')\n      lis[i].classList.add('activate')\n\n      i = (i + 1) % arrImage.length\n\n    }, 1000)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,56148,56149,56159,56173,56177,56185,56199,56219,56231,56239,56245,56256,56267,56271,56275,56282,56294,56298,56302,56309,56321,56335,56348,56362,56366,56370,56377,56388,56399,56410,56422,56434,56446,56450,56454,56462,56472,56485,56497,56510,56514,56518,56525,56535,56547,56559,56570,56581,56591,56603,56615,56619,56623,56632,56644,56656,56684,56697,56701,56705,56712,56723,56727,56735,56743,56747,56755,56769,56784,56808,56816,56831,56844,56852,56873,56885,56897,56909,56921,56933,56945,56957,56966,56974,56982,56990,57002,57025,57044,57063,57082,57101,57120,57139,57159,57163,57183,57202,57222,57243,57254,57271,57281,57291,57301,57306,57311,57316,57321,57346,57359,57363,57386,57390,57398,57406,57414,57418],{"__ignoreMap":79},[100,56150,56151,56153,56155,56157],{"class":102,"line":103},[100,56152,52851],{"class":258},[100,56154,52855],{"class":52854},[100,56156,52858],{"class":106},[100,56158,52861],{"class":258},[100,56160,56161,56163,56165,56167,56169,56171],{"class":102,"line":188},[100,56162,2676],{"class":258},[100,56164,52189],{"class":52854},[100,56166,52870],{"class":106},[100,56168,472],{"class":258},[100,56170,52875],{"class":110},[100,56172,52861],{"class":258},[100,56174,56175],{"class":102,"line":199},[100,56176,570],{"emptyLinePlaceholder":569},[100,56178,56179,56181,56183],{"class":102,"line":532},[100,56180,2676],{"class":258},[100,56182,52888],{"class":52854},[100,56184,52861],{"class":258},[100,56186,56187,56189,56191,56193,56195,56197],{"class":102,"line":577},[100,56188,53698],{"class":258},[100,56190,52898],{"class":52854},[100,56192,52901],{"class":106},[100,56194,472],{"class":258},[100,56196,52906],{"class":110},[100,56198,52861],{"class":258},[100,56200,56201,56203,56205,56207,56209,56211,56213,56215,56217],{"class":102,"line":589},[100,56202,53698],{"class":258},[100,56204,52898],{"class":52854},[100,56206,16501],{"class":106},[100,56208,472],{"class":258},[100,56210,52945],{"class":110},[100,56212,52925],{"class":106},[100,56214,472],{"class":258},[100,56216,52952],{"class":110},[100,56218,52861],{"class":258},[100,56220,56221,56223,56225,56227,56229],{"class":102,"line":595},[100,56222,53698],{"class":258},[100,56224,52961],{"class":52854},[100,56226,52964],{"class":258},[100,56228,52961],{"class":52854},[100,56230,52861],{"class":258},[100,56232,56233,56235,56237],{"class":102,"line":601},[100,56234,53698],{"class":258},[100,56236,1677],{"class":52854},[100,56238,52861],{"class":258},[100,56240,56241,56243],{"class":102,"line":606},[100,56242,7999],{"class":52854},[100,56244,17153],{"class":258},[100,56246,56247,56250,56252,56254],{"class":102,"line":612},[100,56248,56249],{"class":117},"      padding",[100,56251,52991],{"class":258},[100,56253,1366],{"class":117},[100,56255,2927],{"class":258},[100,56257,56258,56261,56263,56265],{"class":102,"line":618},[100,56259,56260],{"class":117},"      margin",[100,56262,52991],{"class":258},[100,56264,1366],{"class":117},[100,56266,2927],{"class":258},[100,56268,56269],{"class":102,"line":623},[100,56270,3798],{"class":258},[100,56272,56273],{"class":102,"line":629},[100,56274,570],{"emptyLinePlaceholder":569},[100,56276,56277,56280],{"class":102,"line":635},[100,56278,56279],{"class":52854},"    li",[100,56281,17153],{"class":258},[100,56283,56284,56287,56289,56292],{"class":102,"line":641},[100,56285,56286],{"class":117},"      list-style",[100,56288,52991],{"class":258},[100,56290,56291],{"class":117},"none",[100,56293,2927],{"class":258},[100,56295,56296],{"class":102,"line":647},[100,56297,3798],{"class":258},[100,56299,56300],{"class":102,"line":653},[100,56301,570],{"emptyLinePlaceholder":569},[100,56303,56304,56307],{"class":102,"line":659},[100,56305,56306],{"class":106},"    .box",[100,56308,17153],{"class":258},[100,56310,56311,56314,56316,56319],{"class":102,"line":665},[100,56312,56313],{"class":117},"      position",[100,56315,52991],{"class":258},[100,56317,56318],{"class":117},"relative",[100,56320,2927],{"class":258},[100,56322,56323,56326,56328,56331,56333],{"class":102,"line":670},[100,56324,56325],{"class":117},"      width",[100,56327,52991],{"class":258},[100,56329,56330],{"class":117},"976",[100,56332,53046],{"class":471},[100,56334,2927],{"class":258},[100,56336,56337,56340,56342,56344,56346],{"class":102,"line":675},[100,56338,56339],{"class":117},"      height",[100,56341,52991],{"class":258},[100,56343,3171],{"class":117},[100,56345,53046],{"class":471},[100,56347,2927],{"class":258},[100,56349,56350,56352,56354,56356,56358,56360],{"class":102,"line":699},[100,56351,56260],{"class":117},[100,56353,52991],{"class":258},[100,56355,2078],{"class":117},[100,56357,53046],{"class":471},[100,56359,53110],{"class":117},[100,56361,2927],{"class":258},[100,56363,56364],{"class":102,"line":708},[100,56365,3798],{"class":258},[100,56367,56368],{"class":102,"line":722},[100,56369,570],{"emptyLinePlaceholder":569},[100,56371,56372,56375],{"class":102,"line":735},[100,56373,56374],{"class":106},"    .slider-footer",[100,56376,17153],{"class":258},[100,56378,56379,56381,56383,56386],{"class":102,"line":754},[100,56380,56313],{"class":117},[100,56382,52991],{"class":258},[100,56384,56385],{"class":117},"absolute",[100,56387,2927],{"class":258},[100,56389,56390,56393,56395,56397],{"class":102,"line":771},[100,56391,56392],{"class":117},"      left",[100,56394,52991],{"class":258},[100,56396,1366],{"class":117},[100,56398,2927],{"class":258},[100,56400,56401,56404,56406,56408],{"class":102,"line":776},[100,56402,56403],{"class":117},"      bottom",[100,56405,52991],{"class":258},[100,56407,1366],{"class":117},[100,56409,2927],{"class":258},[100,56411,56412,56414,56416,56418,56420],{"class":102,"line":781},[100,56413,56325],{"class":117},[100,56415,52991],{"class":258},[100,56417,2078],{"class":117},[100,56419,2095],{"class":471},[100,56421,2927],{"class":258},[100,56423,56424,56426,56428,56430,56432],{"class":102,"line":796},[100,56425,56339],{"class":117},[100,56427,52991],{"class":258},[100,56429,2342],{"class":117},[100,56431,2095],{"class":471},[100,56433,2927],{"class":258},[100,56435,56436,56439,56441,56444],{"class":102,"line":812},[100,56437,56438],{"class":117},"      background-color",[100,56440,52991],{"class":258},[100,56442,56443],{"class":117},"skyblue",[100,56445,2927],{"class":258},[100,56447,56448],{"class":102,"line":823},[100,56449,3798],{"class":258},[100,56451,56452],{"class":102,"line":828},[100,56453,570],{"emptyLinePlaceholder":569},[100,56455,56456,56458,56460],{"class":102,"line":840},[100,56457,56374],{"class":106},[100,56459,8421],{"class":52854},[100,56461,17153],{"class":258},[100,56463,56464,56466,56468,56470],{"class":102,"line":845},[100,56465,56313],{"class":117},[100,56467,52991],{"class":258},[100,56469,56385],{"class":117},[100,56471,2927],{"class":258},[100,56473,56474,56477,56479,56481,56483],{"class":102,"line":868},[100,56475,56476],{"class":117},"      font-size",[100,56478,52991],{"class":258},[100,56480,2667],{"class":117},[100,56482,53046],{"class":471},[100,56484,2927],{"class":258},[100,56486,56487,56489,56491,56493,56495],{"class":102,"line":874},[100,56488,56392],{"class":117},[100,56490,52991],{"class":258},[100,56492,2466],{"class":117},[100,56494,53046],{"class":471},[100,56496,2927],{"class":258},[100,56498,56499,56502,56504,56506,56508],{"class":102,"line":879},[100,56500,56501],{"class":117},"      top",[100,56503,52991],{"class":258},[100,56505,2086],{"class":117},[100,56507,53046],{"class":471},[100,56509,2927],{"class":258},[100,56511,56512],{"class":102,"line":889},[100,56513,3798],{"class":258},[100,56515,56516],{"class":102,"line":894},[100,56517,570],{"emptyLinePlaceholder":569},[100,56519,56520,56523],{"class":102,"line":900},[100,56521,56522],{"class":52854},"    ul",[100,56524,17153],{"class":258},[100,56526,56527,56529,56531,56533],{"class":102,"line":910},[100,56528,56313],{"class":117},[100,56530,52991],{"class":258},[100,56532,56385],{"class":117},[100,56534,2927],{"class":258},[100,56536,56537,56539,56541,56543,56545],{"class":102,"line":915},[100,56538,56501],{"class":117},[100,56540,52991],{"class":258},[100,56542,2547],{"class":117},[100,56544,53046],{"class":471},[100,56546,2927],{"class":258},[100,56548,56549,56551,56553,56555,56557],{"class":102,"line":929},[100,56550,56392],{"class":117},[100,56552,52991],{"class":258},[100,56554,2466],{"class":117},[100,56556,53046],{"class":471},[100,56558,2927],{"class":258},[100,56560,56561,56564,56566,56568],{"class":102,"line":935},[100,56562,56563],{"class":117},"      display",[100,56565,52991],{"class":258},[100,56567,53031],{"class":117},[100,56569,2927],{"class":258},[100,56571,56572,56575,56577,56579],{"class":102,"line":945},[100,56573,56574],{"class":117},"      justify-content",[100,56576,52991],{"class":258},[100,56578,53222],{"class":117},[100,56580,2927],{"class":258},[100,56582,56583,56585,56587,56589],{"class":102,"line":950},[100,56584,56313],{"class":117},[100,56586,52991],{"class":258},[100,56588,56385],{"class":117},[100,56590,2927],{"class":258},[100,56592,56593,56595,56597,56599,56601],{"class":102,"line":955},[100,56594,56325],{"class":117},[100,56596,52991],{"class":258},[100,56598,5591],{"class":117},[100,56600,53046],{"class":471},[100,56602,2927],{"class":258},[100,56604,56605,56607,56609,56611,56613],{"class":102,"line":972},[100,56606,56339],{"class":117},[100,56608,52991],{"class":258},[100,56610,2466],{"class":117},[100,56612,53046],{"class":471},[100,56614,2927],{"class":258},[100,56616,56617],{"class":102,"line":11370},[100,56618,3798],{"class":258},[100,56620,56621],{"class":102,"line":11375},[100,56622,570],{"emptyLinePlaceholder":569},[100,56624,56625,56627,56630],{"class":102,"line":11380},[100,56626,56522],{"class":52854},[100,56628,56629],{"class":52854}," li",[100,56631,17153],{"class":258},[100,56633,56634,56636,56638,56640,56642],{"class":102,"line":11385},[100,56635,56325],{"class":117},[100,56637,52991],{"class":258},[100,56639,2466],{"class":117},[100,56641,53046],{"class":471},[100,56643,2927],{"class":258},[100,56645,56646,56648,56650,56652,56654],{"class":102,"line":11394},[100,56647,56339],{"class":117},[100,56649,52991],{"class":258},[100,56651,2466],{"class":117},[100,56653,53046],{"class":471},[100,56655,2927],{"class":258},[100,56657,56658,56660,56662,56665,56667,56669,56671,56673,56675,56677,56679,56682],{"class":102,"line":11399},[100,56659,56438],{"class":117},[100,56661,52991],{"class":258},[100,56663,56664],{"class":117},"rgba",[100,56666,713],{"class":258},[100,56668,1366],{"class":117},[100,56670,14017],{"class":258},[100,56672,1366],{"class":117},[100,56674,14017],{"class":258},[100,56676,1366],{"class":117},[100,56678,14017],{"class":258},[100,56680,56681],{"class":117},".4",[100,56683,4321],{"class":258},[100,56685,56686,56689,56691,56693,56695],{"class":102,"line":11405},[100,56687,56688],{"class":117},"      border-radius",[100,56690,52991],{"class":258},[100,56692,2213],{"class":117},[100,56694,53046],{"class":471},[100,56696,2927],{"class":258},[100,56698,56699],{"class":102,"line":11426},[100,56700,3798],{"class":258},[100,56702,56703],{"class":102,"line":11432},[100,56704,570],{"emptyLinePlaceholder":569},[100,56706,56707,56710],{"class":102,"line":11446},[100,56708,56709],{"class":106},"    .activate",[100,56711,17153],{"class":258},[100,56713,56714,56716,56718,56721],{"class":102,"line":11452},[100,56715,56438],{"class":117},[100,56717,52991],{"class":258},[100,56719,56720],{"class":117},"#f7f7f7",[100,56722,2927],{"class":258},[100,56724,56725],{"class":102,"line":11479},[100,56726,3798],{"class":258},[100,56728,56729,56731,56733],{"class":102,"line":11488},[100,56730,53971],{"class":258},[100,56732,1677],{"class":52854},[100,56734,52861],{"class":258},[100,56736,56737,56739,56741],{"class":102,"line":11494},[100,56738,53339],{"class":258},[100,56740,52888],{"class":52854},[100,56742,52861],{"class":258},[100,56744,56745],{"class":102,"line":11502},[100,56746,570],{"emptyLinePlaceholder":569},[100,56748,56749,56751,56753],{"class":102,"line":11507},[100,56750,2676],{"class":258},[100,56752,53354],{"class":52854},[100,56754,52861],{"class":258},[100,56756,56757,56759,56761,56763,56765,56767],{"class":102,"line":18185},[100,56758,53698],{"class":258},[100,56760,53165],{"class":52854},[100,56762,55040],{"class":106},[100,56764,472],{"class":258},[100,56766,55045],{"class":110},[100,56768,52861],{"class":258},[100,56770,56771,56773,56775,56777,56779,56782],{"class":102,"line":18191},[100,56772,52895],{"class":258},[100,56774,53165],{"class":52854},[100,56776,55040],{"class":106},[100,56778,472],{"class":258},[100,56780,56781],{"class":110},"\"slider-wrapper\"",[100,56783,52861],{"class":258},[100,56785,56786,56789,56791,56794,56796,56799,56802,56804,56806],{"class":102,"line":18214},[100,56787,56788],{"class":258},"      \u003C",[100,56790,3095],{"class":52854},[100,56792,56793],{"class":106}," src",[100,56795,472],{"class":258},[100,56797,56798],{"class":110},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[100,56800,56801],{"class":106}," alt",[100,56803,472],{"class":258},[100,56805,9248],{"class":110},[100,56807,52861],{"class":258},[100,56809,56810,56812,56814],{"class":102,"line":18220},[100,56811,53330],{"class":258},[100,56813,53165],{"class":52854},[100,56815,52861],{"class":258},[100,56817,56818,56820,56822,56824,56826,56829],{"class":102,"line":18243},[100,56819,52895],{"class":258},[100,56821,53165],{"class":52854},[100,56823,55040],{"class":106},[100,56825,472],{"class":258},[100,56827,56828],{"class":110},"\"slider-footer\"",[100,56830,52861],{"class":258},[100,56832,56833,56835,56837,56840,56842],{"class":102,"line":18257},[100,56834,56788],{"class":258},[100,56836,19],{"class":52854},[100,56838,56839],{"class":258},">对人类来说会不会太超前了?\u003C\u002F",[100,56841,19],{"class":52854},[100,56843,52861],{"class":258},[100,56845,56846,56848,56850],{"class":102,"line":18277},[100,56847,56788],{"class":258},[100,56849,2773],{"class":52854},[100,56851,52861],{"class":258},[100,56853,56854,56857,56859,56861,56863,56866,56869,56871],{"class":102,"line":18283},[100,56855,56856],{"class":258},"        \u003C",[100,56858,29],{"class":52854},[100,56860,55040],{"class":106},[100,56862,472],{"class":258},[100,56864,56865],{"class":110},"\"activate\"",[100,56867,56868],{"class":258},">\u003C\u002F",[100,56870,29],{"class":52854},[100,56872,52861],{"class":258},[100,56874,56875,56877,56879,56881,56883],{"class":102,"line":18294},[100,56876,56856],{"class":258},[100,56878,29],{"class":52854},[100,56880,56868],{"class":258},[100,56882,29],{"class":52854},[100,56884,52861],{"class":258},[100,56886,56887,56889,56891,56893,56895],{"class":102,"line":18317},[100,56888,56856],{"class":258},[100,56890,29],{"class":52854},[100,56892,56868],{"class":258},[100,56894,29],{"class":52854},[100,56896,52861],{"class":258},[100,56898,56899,56901,56903,56905,56907],{"class":102,"line":18339},[100,56900,56856],{"class":258},[100,56902,29],{"class":52854},[100,56904,56868],{"class":258},[100,56906,29],{"class":52854},[100,56908,52861],{"class":258},[100,56910,56911,56913,56915,56917,56919],{"class":102,"line":18344},[100,56912,56856],{"class":258},[100,56914,29],{"class":52854},[100,56916,56868],{"class":258},[100,56918,29],{"class":52854},[100,56920,52861],{"class":258},[100,56922,56923,56925,56927,56929,56931],{"class":102,"line":18350},[100,56924,56856],{"class":258},[100,56926,29],{"class":52854},[100,56928,56868],{"class":258},[100,56930,29],{"class":52854},[100,56932,52861],{"class":258},[100,56934,56935,56937,56939,56941,56943],{"class":102,"line":18364},[100,56936,56856],{"class":258},[100,56938,29],{"class":52854},[100,56940,56868],{"class":258},[100,56942,29],{"class":52854},[100,56944,52861],{"class":258},[100,56946,56947,56949,56951,56953,56955],{"class":102,"line":18377},[100,56948,56856],{"class":258},[100,56950,29],{"class":52854},[100,56952,56868],{"class":258},[100,56954,29],{"class":52854},[100,56956,52861],{"class":258},[100,56958,56959,56962,56964],{"class":102,"line":18382},[100,56960,56961],{"class":258},"      \u003C\u002F",[100,56963,2773],{"class":52854},[100,56965,52861],{"class":258},[100,56967,56968,56970,56972],{"class":102,"line":18396},[100,56969,53330],{"class":258},[100,56971,53165],{"class":52854},[100,56973,52861],{"class":258},[100,56975,56976,56978,56980],{"class":102,"line":18401},[100,56977,53971],{"class":258},[100,56979,53165],{"class":52854},[100,56981,52861],{"class":258},[100,56983,56984,56986,56988],{"class":102,"line":18407},[100,56985,53698],{"class":258},[100,56987,53367],{"class":52854},[100,56989,52861],{"class":258},[100,56991,56992,56994,56997,56999],{"class":102,"line":18412},[100,56993,12803],{"class":471},[100,56995,56996],{"class":117}," arrImage",[100,56998,583],{"class":471},[100,57000,57001],{"class":258}," [\n",[100,57003,57004,57007,57010,57013,57016,57019,57022],{"class":102,"line":18426},[100,57005,57006],{"class":258},"      { url: ",[100,57008,57009],{"class":110},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[100,57011,57012],{"class":258},", title: ",[100,57014,57015],{"class":110},"'对人类来说会不会太超前了?'",[100,57017,57018],{"class":258},", color: ",[100,57020,57021],{"class":110},"'rgba(100,67,68)'",[100,57023,57024],{"class":258}," },\n",[100,57026,57027,57029,57032,57034,57037,57039,57042],{"class":102,"line":18431},[100,57028,57006],{"class":258},[100,57030,57031],{"class":110},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[100,57033,57012],{"class":258},[100,57035,57036],{"class":110},"'开启剑与雪的黑暗传说!'",[100,57038,57018],{"class":258},[100,57040,57041],{"class":110},"'rgba(43,35,26)'",[100,57043,57024],{"class":258},[100,57045,57046,57048,57051,57053,57056,57058,57061],{"class":102,"line":18436},[100,57047,57006],{"class":258},[100,57049,57050],{"class":110},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[100,57052,57012],{"class":258},[100,57054,57055],{"class":110},"'真正的jo厨出现了!'",[100,57057,57018],{"class":258},[100,57059,57060],{"class":110},"'rgba(36,31,33)'",[100,57062,57024],{"class":258},[100,57064,57065,57067,57070,57072,57075,57077,57080],{"class":102,"line":18450},[100,57066,57006],{"class":258},[100,57068,57069],{"class":110},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[100,57071,57012],{"class":258},[100,57073,57074],{"class":110},"'李玉刚:让世界通过b站看到东方大国文化'",[100,57076,57018],{"class":258},[100,57078,57079],{"class":110},"'rgba(139,98,66)'",[100,57081,57024],{"class":258},[100,57083,57084,57086,57089,57091,57094,57096,57099],{"class":102,"line":18462},[100,57085,57006],{"class":258},[100,57087,57088],{"class":110},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[100,57090,57012],{"class":258},[100,57092,57093],{"class":110},"'快来分享你的寒假日常吧'",[100,57095,57018],{"class":258},[100,57097,57098],{"class":110},"'rgba(67,90,92)'",[100,57100,57024],{"class":258},[100,57102,57103,57105,57108,57110,57113,57115,57118],{"class":102,"line":18467},[100,57104,57006],{"class":258},[100,57106,57107],{"class":110},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[100,57109,57012],{"class":258},[100,57111,57112],{"class":110},"'哔哩哔哩小年YEAR'",[100,57114,57018],{"class":258},[100,57116,57117],{"class":110},"'rgba(166,131,143)'",[100,57119,57024],{"class":258},[100,57121,57122,57124,57127,57129,57132,57134,57137],{"class":102,"line":18480},[100,57123,57006],{"class":258},[100,57125,57126],{"class":110},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[100,57128,57012],{"class":258},[100,57130,57131],{"class":110},"'一站式解决你的电脑配置问题'",[100,57133,57018],{"class":258},[100,57135,57136],{"class":110},"'rgba(53,29,25)'",[100,57138,57024],{"class":258},[100,57140,57141,57143,57146,57148,57151,57153,57156],{"class":102,"line":18485},[100,57142,57006],{"class":258},[100,57144,57145],{"class":110},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[100,57147,57012],{"class":258},[100,57149,57150],{"class":110},"'谁不想和小猫咪贴贴呢?'",[100,57152,57018],{"class":258},[100,57154,57155],{"class":110},"'rgba(99,72,114)'",[100,57157,57158],{"class":258}," }\n",[100,57160,57161],{"class":102,"line":18490},[100,57162,54663],{"class":258},[100,57164,57165,57167,57170,57172,57174,57176,57178,57181],{"class":102,"line":18495},[100,57166,12803],{"class":471},[100,57168,57169],{"class":117}," img",[100,57171,583],{"class":471},[100,57173,55950],{"class":258},[100,57175,55953],{"class":106},[100,57177,713],{"class":258},[100,57179,57180],{"class":110},"'.slider-wrapper img'",[100,57182,809],{"class":258},[100,57184,57185,57187,57189,57191,57193,57195,57197,57200],{"class":102,"line":18508},[100,57186,12803],{"class":471},[100,57188,8421],{"class":117},[100,57190,583],{"class":471},[100,57192,55950],{"class":258},[100,57194,55953],{"class":106},[100,57196,713],{"class":258},[100,57198,57199],{"class":110},"'.slider-footer p'",[100,57201,809],{"class":258},[100,57203,57204,57206,57209,57211,57213,57215,57217,57220],{"class":102,"line":18513},[100,57205,12803],{"class":471},[100,57207,57208],{"class":117}," color",[100,57210,583],{"class":471},[100,57212,55950],{"class":258},[100,57214,55953],{"class":106},[100,57216,713],{"class":258},[100,57218,57219],{"class":110},"'.slider-footer'",[100,57221,809],{"class":258},[100,57223,57224,57226,57229,57231,57233,57236,57238,57241],{"class":102,"line":34189},[100,57225,12803],{"class":471},[100,57227,57228],{"class":117}," lis",[100,57230,583],{"class":471},[100,57232,55950],{"class":258},[100,57234,57235],{"class":106},"querySelectorAll",[100,57237,713],{"class":258},[100,57239,57240],{"class":110},"'.slider-footer ul li'",[100,57242,809],{"class":258},[100,57244,57245,57247,57249,57251],{"class":102,"line":34195},[100,57246,53773],{"class":471},[100,57248,11023],{"class":258},[100,57250,472],{"class":471},[100,57252,57253],{"class":117}," 1\n",[100,57255,57256,57258,57261,57263,57265,57267,57269],{"class":102,"line":34201},[100,57257,53773],{"class":471},[100,57259,57260],{"class":258}," timer ",[100,57262,472],{"class":471},[100,57264,55998],{"class":106},[100,57266,713],{"class":258},[100,57268,56003],{"class":471},[100,57270,56006],{"class":258},[100,57272,57273,57276,57278],{"class":102,"line":34207},[100,57274,57275],{"class":258},"      img.src ",[100,57277,472],{"class":471},[100,57279,57280],{"class":258}," arrImage[i].url\n",[100,57282,57283,57286,57288],{"class":102,"line":34213},[100,57284,57285],{"class":258},"      p.innerHTML ",[100,57287,472],{"class":471},[100,57289,57290],{"class":258}," arrImage[i].title\n",[100,57292,57293,57296,57298],{"class":102,"line":34224},[100,57294,57295],{"class":258},"      color.style.backgroundColor ",[100,57297,472],{"class":471},[100,57299,57300],{"class":258}," arrImage[i].color\n",[100,57302,57303],{"class":102,"line":34230},[100,57304,57305],{"class":1836},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[100,57307,57308],{"class":102,"line":34250},[100,57309,57310],{"class":1836},"      \u002F\u002F li.classList.add('activate')\n",[100,57312,57313],{"class":102,"line":34256},[100,57314,57315],{"class":1836},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[100,57317,57318],{"class":102,"line":34267},[100,57319,57320],{"class":1836},"      \u002F\u002F lis[i].classList.remove('activate')\n",[100,57322,57323,57326,57328,57330,57333,57336,57339,57341,57344],{"class":102,"line":34273},[100,57324,57325],{"class":258},"      document.",[100,57327,55953],{"class":106},[100,57329,713],{"class":258},[100,57331,57332],{"class":110},"'.activate'",[100,57334,57335],{"class":258},")?.classList.",[100,57337,57338],{"class":106},"toggle",[100,57340,713],{"class":258},[100,57342,57343],{"class":110},"'activate'",[100,57345,809],{"class":258},[100,57347,57348,57351,57353,57355,57357],{"class":102,"line":34279},[100,57349,57350],{"class":258},"      lis[i].classList.",[100,57352,6930],{"class":106},[100,57354,713],{"class":258},[100,57356,57343],{"class":110},[100,57358,809],{"class":258},[100,57360,57361],{"class":102,"line":34285},[100,57362,570],{"emptyLinePlaceholder":569},[100,57364,57365,57368,57370,57372,57374,57376,57378,57380,57383],{"class":102,"line":34291},[100,57366,57367],{"class":258},"      i ",[100,57369,472],{"class":471},[100,57371,56037],{"class":258},[100,57373,2248],{"class":471},[100,57375,26693],{"class":117},[100,57377,15295],{"class":258},[100,57379,2095],{"class":471},[100,57381,57382],{"class":258}," arrImage.",[100,57384,57385],{"class":117},"length\n",[100,57387,57388],{"class":102,"line":34297},[100,57389,570],{"emptyLinePlaceholder":569},[100,57391,57392,57394,57396],{"class":102,"line":34303},[100,57393,56089],{"class":258},[100,57395,8006],{"class":117},[100,57397,809],{"class":258},[100,57399,57400,57402,57404],{"class":102,"line":34309},[100,57401,53971],{"class":258},[100,57403,53367],{"class":52854},[100,57405,52861],{"class":258},[100,57407,57408,57410,57412],{"class":102,"line":34329},[100,57409,53339],{"class":258},[100,57411,53354],{"class":52854},[100,57413,52861],{"class":258},[100,57415,57416],{"class":102,"line":34335},[100,57417,570],{"emptyLinePlaceholder":569},[100,57419,57420,57422,57424],{"class":102,"line":34351},[100,57421,53339],{"class":258},[100,57423,52189],{"class":52854},[100,57425,52861],{"class":258},[19,57427,57428],{},[3095,57429],{"alt":79,"src":57430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,57432,57433],{},"?.就是短路保护,确保输出正常进行",[19,57435,57436],{},"不要忘记取余%,有时候可以用",[19,57438,57439],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[26,57441,57442],{"start":188},[29,57443,57444],{},"法2",[73,57446,57448],{"className":52187,"code":57447,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n    }\n\n    li {\n      list-style: none;\n    }\n\n    .box {\n      position: relative;\n      width: 976px;\n      height: 600px;\n      margin: 100px auto;\n    }\n\n    .slider-footer {\n      position: absolute;\n      left: 0;\n      bottom: 0;\n      width: 100%;\n      height: 15%;\n      background-color: skyblue;\n    }\n\n    .slider-footer p {\n      position: absolute;\n      font-size: 28px;\n      left: 20px;\n      top: 5px;\n    }\n\n    ul {\n      position: absolute;\n      top: 55px;\n      left: 20px;\n      display: flex;\n      justify-content: space-between;\n      position: absolute;\n      width: 250px;\n      height: 20px;\n    }\n\n    ul li {\n      width: 20px;\n      height: 20px;\n      background-color: rgba(0, 0, 0, .4);\n      border-radius: 10px;\n    }\n\n    .activate {\n      background-color: #f7f7f7;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\n    \u003Cdiv class=\"slider-wrapper\">\n      \u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\" alt=\"\">\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"slider-footer\">\n      \u003Cp>对人类来说会不会太超前了?\u003C\u002Fp>\n      \u003Cul>\n        \u003Cli class=\"activate\">\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const sliderData = [\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了?', color: 'rgba(100,67,68)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说!', color: 'rgba(43,35,26)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了!', color: 'rgba(36,31,33)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚:让世界通过b站看到东方大国文化', color: 'rgba(139,98,66)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧', color: 'rgba(67,90,92)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAR', color: 'rgba(166,131,143)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题', color: 'rgba(53,29,25)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢?', color: 'rgba(99,72,114)' }\n    ]\n    \u002F\u002F 1.获取元素\n    const img = document.querySelector('.slider-wrapper img')\n    const p = document.querySelector('.slider-footer p')\n    let i = 0\n    \u002F\u002F 2.开启定时器\n    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n    setInterval(function () {\n      i++\n      if (i >= sliderData.length) {\n        i = 0\n      }\n      \u002F\u002F 更换图片路径\n      img.src = sliderData[i].url\n      \u002F\u002F 把文字写到p里面\n      p.innerHTML = sliderData[i].title\n      \u002F\u002F 小圆点\n      \u002F\u002F 先删除以前的active\n      \u002F\u002F 只让当前li添加active\n      document.querySelector('.slider-footer .activate').classList.remove('activate')\n      document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`).classList.add('activate')\n\n    }, 1000)\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,57449,57450,57460,57474,57478,57486,57500,57520,57532,57540,57546,57556,57566,57570,57574,57580,57590,57594,57598,57604,57614,57626,57638,57652,57656,57660,57666,57676,57686,57696,57708,57720,57730,57734,57738,57746,57756,57768,57780,57792,57796,57800,57806,57816,57828,57840,57850,57860,57870,57882,57894,57898,57902,57910,57922,57934,57960,57972,57976,57980,57986,57996,58000,58008,58016,58020,58028,58042,58056,58076,58084,58098,58110,58118,58136,58148,58160,58172,58184,58196,58208,58220,58228,58236,58244,58252,58263,58279,58295,58311,58327,58343,58359,58375,58391,58395,58400,58418,58436,58446,58451,58456,58467,58473,58488,58497,58501,58506,58515,58520,58529,58534,58539,58544,58567,58597,58601,58609,58613,58621,58629,58633],{"__ignoreMap":79},[100,57451,57452,57454,57456,57458],{"class":102,"line":103},[100,57453,52851],{"class":258},[100,57455,52855],{"class":52854},[100,57457,52858],{"class":106},[100,57459,52861],{"class":258},[100,57461,57462,57464,57466,57468,57470,57472],{"class":102,"line":188},[100,57463,2676],{"class":258},[100,57465,52189],{"class":52854},[100,57467,52870],{"class":106},[100,57469,472],{"class":258},[100,57471,52875],{"class":110},[100,57473,52861],{"class":258},[100,57475,57476],{"class":102,"line":199},[100,57477,570],{"emptyLinePlaceholder":569},[100,57479,57480,57482,57484],{"class":102,"line":532},[100,57481,2676],{"class":258},[100,57483,52888],{"class":52854},[100,57485,52861],{"class":258},[100,57487,57488,57490,57492,57494,57496,57498],{"class":102,"line":577},[100,57489,53698],{"class":258},[100,57491,52898],{"class":52854},[100,57493,52901],{"class":106},[100,57495,472],{"class":258},[100,57497,52906],{"class":110},[100,57499,52861],{"class":258},[100,57501,57502,57504,57506,57508,57510,57512,57514,57516,57518],{"class":102,"line":589},[100,57503,53698],{"class":258},[100,57505,52898],{"class":52854},[100,57507,16501],{"class":106},[100,57509,472],{"class":258},[100,57511,52945],{"class":110},[100,57513,52925],{"class":106},[100,57515,472],{"class":258},[100,57517,52952],{"class":110},[100,57519,52861],{"class":258},[100,57521,57522,57524,57526,57528,57530],{"class":102,"line":595},[100,57523,53698],{"class":258},[100,57525,52961],{"class":52854},[100,57527,52964],{"class":258},[100,57529,52961],{"class":52854},[100,57531,52861],{"class":258},[100,57533,57534,57536,57538],{"class":102,"line":601},[100,57535,53698],{"class":258},[100,57537,1677],{"class":52854},[100,57539,52861],{"class":258},[100,57541,57542,57544],{"class":102,"line":606},[100,57543,7999],{"class":52854},[100,57545,17153],{"class":258},[100,57547,57548,57550,57552,57554],{"class":102,"line":612},[100,57549,56249],{"class":117},[100,57551,52991],{"class":258},[100,57553,1366],{"class":117},[100,57555,2927],{"class":258},[100,57557,57558,57560,57562,57564],{"class":102,"line":618},[100,57559,56260],{"class":117},[100,57561,52991],{"class":258},[100,57563,1366],{"class":117},[100,57565,2927],{"class":258},[100,57567,57568],{"class":102,"line":623},[100,57569,3798],{"class":258},[100,57571,57572],{"class":102,"line":629},[100,57573,570],{"emptyLinePlaceholder":569},[100,57575,57576,57578],{"class":102,"line":635},[100,57577,56279],{"class":52854},[100,57579,17153],{"class":258},[100,57581,57582,57584,57586,57588],{"class":102,"line":641},[100,57583,56286],{"class":117},[100,57585,52991],{"class":258},[100,57587,56291],{"class":117},[100,57589,2927],{"class":258},[100,57591,57592],{"class":102,"line":647},[100,57593,3798],{"class":258},[100,57595,57596],{"class":102,"line":653},[100,57597,570],{"emptyLinePlaceholder":569},[100,57599,57600,57602],{"class":102,"line":659},[100,57601,56306],{"class":106},[100,57603,17153],{"class":258},[100,57605,57606,57608,57610,57612],{"class":102,"line":665},[100,57607,56313],{"class":117},[100,57609,52991],{"class":258},[100,57611,56318],{"class":117},[100,57613,2927],{"class":258},[100,57615,57616,57618,57620,57622,57624],{"class":102,"line":670},[100,57617,56325],{"class":117},[100,57619,52991],{"class":258},[100,57621,56330],{"class":117},[100,57623,53046],{"class":471},[100,57625,2927],{"class":258},[100,57627,57628,57630,57632,57634,57636],{"class":102,"line":675},[100,57629,56339],{"class":117},[100,57631,52991],{"class":258},[100,57633,3171],{"class":117},[100,57635,53046],{"class":471},[100,57637,2927],{"class":258},[100,57639,57640,57642,57644,57646,57648,57650],{"class":102,"line":699},[100,57641,56260],{"class":117},[100,57643,52991],{"class":258},[100,57645,2078],{"class":117},[100,57647,53046],{"class":471},[100,57649,53110],{"class":117},[100,57651,2927],{"class":258},[100,57653,57654],{"class":102,"line":708},[100,57655,3798],{"class":258},[100,57657,57658],{"class":102,"line":722},[100,57659,570],{"emptyLinePlaceholder":569},[100,57661,57662,57664],{"class":102,"line":735},[100,57663,56374],{"class":106},[100,57665,17153],{"class":258},[100,57667,57668,57670,57672,57674],{"class":102,"line":754},[100,57669,56313],{"class":117},[100,57671,52991],{"class":258},[100,57673,56385],{"class":117},[100,57675,2927],{"class":258},[100,57677,57678,57680,57682,57684],{"class":102,"line":771},[100,57679,56392],{"class":117},[100,57681,52991],{"class":258},[100,57683,1366],{"class":117},[100,57685,2927],{"class":258},[100,57687,57688,57690,57692,57694],{"class":102,"line":776},[100,57689,56403],{"class":117},[100,57691,52991],{"class":258},[100,57693,1366],{"class":117},[100,57695,2927],{"class":258},[100,57697,57698,57700,57702,57704,57706],{"class":102,"line":781},[100,57699,56325],{"class":117},[100,57701,52991],{"class":258},[100,57703,2078],{"class":117},[100,57705,2095],{"class":471},[100,57707,2927],{"class":258},[100,57709,57710,57712,57714,57716,57718],{"class":102,"line":796},[100,57711,56339],{"class":117},[100,57713,52991],{"class":258},[100,57715,2342],{"class":117},[100,57717,2095],{"class":471},[100,57719,2927],{"class":258},[100,57721,57722,57724,57726,57728],{"class":102,"line":812},[100,57723,56438],{"class":117},[100,57725,52991],{"class":258},[100,57727,56443],{"class":117},[100,57729,2927],{"class":258},[100,57731,57732],{"class":102,"line":823},[100,57733,3798],{"class":258},[100,57735,57736],{"class":102,"line":828},[100,57737,570],{"emptyLinePlaceholder":569},[100,57739,57740,57742,57744],{"class":102,"line":840},[100,57741,56374],{"class":106},[100,57743,8421],{"class":52854},[100,57745,17153],{"class":258},[100,57747,57748,57750,57752,57754],{"class":102,"line":845},[100,57749,56313],{"class":117},[100,57751,52991],{"class":258},[100,57753,56385],{"class":117},[100,57755,2927],{"class":258},[100,57757,57758,57760,57762,57764,57766],{"class":102,"line":868},[100,57759,56476],{"class":117},[100,57761,52991],{"class":258},[100,57763,2667],{"class":117},[100,57765,53046],{"class":471},[100,57767,2927],{"class":258},[100,57769,57770,57772,57774,57776,57778],{"class":102,"line":874},[100,57771,56392],{"class":117},[100,57773,52991],{"class":258},[100,57775,2466],{"class":117},[100,57777,53046],{"class":471},[100,57779,2927],{"class":258},[100,57781,57782,57784,57786,57788,57790],{"class":102,"line":879},[100,57783,56501],{"class":117},[100,57785,52991],{"class":258},[100,57787,2086],{"class":117},[100,57789,53046],{"class":471},[100,57791,2927],{"class":258},[100,57793,57794],{"class":102,"line":889},[100,57795,3798],{"class":258},[100,57797,57798],{"class":102,"line":894},[100,57799,570],{"emptyLinePlaceholder":569},[100,57801,57802,57804],{"class":102,"line":900},[100,57803,56522],{"class":52854},[100,57805,17153],{"class":258},[100,57807,57808,57810,57812,57814],{"class":102,"line":910},[100,57809,56313],{"class":117},[100,57811,52991],{"class":258},[100,57813,56385],{"class":117},[100,57815,2927],{"class":258},[100,57817,57818,57820,57822,57824,57826],{"class":102,"line":915},[100,57819,56501],{"class":117},[100,57821,52991],{"class":258},[100,57823,2547],{"class":117},[100,57825,53046],{"class":471},[100,57827,2927],{"class":258},[100,57829,57830,57832,57834,57836,57838],{"class":102,"line":929},[100,57831,56392],{"class":117},[100,57833,52991],{"class":258},[100,57835,2466],{"class":117},[100,57837,53046],{"class":471},[100,57839,2927],{"class":258},[100,57841,57842,57844,57846,57848],{"class":102,"line":935},[100,57843,56563],{"class":117},[100,57845,52991],{"class":258},[100,57847,53031],{"class":117},[100,57849,2927],{"class":258},[100,57851,57852,57854,57856,57858],{"class":102,"line":945},[100,57853,56574],{"class":117},[100,57855,52991],{"class":258},[100,57857,53222],{"class":117},[100,57859,2927],{"class":258},[100,57861,57862,57864,57866,57868],{"class":102,"line":950},[100,57863,56313],{"class":117},[100,57865,52991],{"class":258},[100,57867,56385],{"class":117},[100,57869,2927],{"class":258},[100,57871,57872,57874,57876,57878,57880],{"class":102,"line":955},[100,57873,56325],{"class":117},[100,57875,52991],{"class":258},[100,57877,5591],{"class":117},[100,57879,53046],{"class":471},[100,57881,2927],{"class":258},[100,57883,57884,57886,57888,57890,57892],{"class":102,"line":972},[100,57885,56339],{"class":117},[100,57887,52991],{"class":258},[100,57889,2466],{"class":117},[100,57891,53046],{"class":471},[100,57893,2927],{"class":258},[100,57895,57896],{"class":102,"line":11370},[100,57897,3798],{"class":258},[100,57899,57900],{"class":102,"line":11375},[100,57901,570],{"emptyLinePlaceholder":569},[100,57903,57904,57906,57908],{"class":102,"line":11380},[100,57905,56522],{"class":52854},[100,57907,56629],{"class":52854},[100,57909,17153],{"class":258},[100,57911,57912,57914,57916,57918,57920],{"class":102,"line":11385},[100,57913,56325],{"class":117},[100,57915,52991],{"class":258},[100,57917,2466],{"class":117},[100,57919,53046],{"class":471},[100,57921,2927],{"class":258},[100,57923,57924,57926,57928,57930,57932],{"class":102,"line":11394},[100,57925,56339],{"class":117},[100,57927,52991],{"class":258},[100,57929,2466],{"class":117},[100,57931,53046],{"class":471},[100,57933,2927],{"class":258},[100,57935,57936,57938,57940,57942,57944,57946,57948,57950,57952,57954,57956,57958],{"class":102,"line":11399},[100,57937,56438],{"class":117},[100,57939,52991],{"class":258},[100,57941,56664],{"class":117},[100,57943,713],{"class":258},[100,57945,1366],{"class":117},[100,57947,14017],{"class":258},[100,57949,1366],{"class":117},[100,57951,14017],{"class":258},[100,57953,1366],{"class":117},[100,57955,14017],{"class":258},[100,57957,56681],{"class":117},[100,57959,4321],{"class":258},[100,57961,57962,57964,57966,57968,57970],{"class":102,"line":11405},[100,57963,56688],{"class":117},[100,57965,52991],{"class":258},[100,57967,2213],{"class":117},[100,57969,53046],{"class":471},[100,57971,2927],{"class":258},[100,57973,57974],{"class":102,"line":11426},[100,57975,3798],{"class":258},[100,57977,57978],{"class":102,"line":11432},[100,57979,570],{"emptyLinePlaceholder":569},[100,57981,57982,57984],{"class":102,"line":11446},[100,57983,56709],{"class":106},[100,57985,17153],{"class":258},[100,57987,57988,57990,57992,57994],{"class":102,"line":11452},[100,57989,56438],{"class":117},[100,57991,52991],{"class":258},[100,57993,56720],{"class":117},[100,57995,2927],{"class":258},[100,57997,57998],{"class":102,"line":11479},[100,57999,3798],{"class":258},[100,58001,58002,58004,58006],{"class":102,"line":11488},[100,58003,53971],{"class":258},[100,58005,1677],{"class":52854},[100,58007,52861],{"class":258},[100,58009,58010,58012,58014],{"class":102,"line":11494},[100,58011,53339],{"class":258},[100,58013,52888],{"class":52854},[100,58015,52861],{"class":258},[100,58017,58018],{"class":102,"line":11502},[100,58019,570],{"emptyLinePlaceholder":569},[100,58021,58022,58024,58026],{"class":102,"line":11507},[100,58023,2676],{"class":258},[100,58025,53354],{"class":52854},[100,58027,52861],{"class":258},[100,58029,58030,58032,58034,58036,58038,58040],{"class":102,"line":18185},[100,58031,53698],{"class":258},[100,58033,53165],{"class":52854},[100,58035,55040],{"class":106},[100,58037,472],{"class":258},[100,58039,55045],{"class":110},[100,58041,52861],{"class":258},[100,58043,58044,58046,58048,58050,58052,58054],{"class":102,"line":18191},[100,58045,52895],{"class":258},[100,58047,53165],{"class":52854},[100,58049,55040],{"class":106},[100,58051,472],{"class":258},[100,58053,56781],{"class":110},[100,58055,52861],{"class":258},[100,58057,58058,58060,58062,58064,58066,58068,58070,58072,58074],{"class":102,"line":18214},[100,58059,56788],{"class":258},[100,58061,3095],{"class":52854},[100,58063,56793],{"class":106},[100,58065,472],{"class":258},[100,58067,56798],{"class":110},[100,58069,56801],{"class":106},[100,58071,472],{"class":258},[100,58073,9248],{"class":110},[100,58075,52861],{"class":258},[100,58077,58078,58080,58082],{"class":102,"line":18220},[100,58079,53330],{"class":258},[100,58081,53165],{"class":52854},[100,58083,52861],{"class":258},[100,58085,58086,58088,58090,58092,58094,58096],{"class":102,"line":18243},[100,58087,52895],{"class":258},[100,58089,53165],{"class":52854},[100,58091,55040],{"class":106},[100,58093,472],{"class":258},[100,58095,56828],{"class":110},[100,58097,52861],{"class":258},[100,58099,58100,58102,58104,58106,58108],{"class":102,"line":18257},[100,58101,56788],{"class":258},[100,58103,19],{"class":52854},[100,58105,56839],{"class":258},[100,58107,19],{"class":52854},[100,58109,52861],{"class":258},[100,58111,58112,58114,58116],{"class":102,"line":18277},[100,58113,56788],{"class":258},[100,58115,2773],{"class":52854},[100,58117,52861],{"class":258},[100,58119,58120,58122,58124,58126,58128,58130,58132,58134],{"class":102,"line":18283},[100,58121,56856],{"class":258},[100,58123,29],{"class":52854},[100,58125,55040],{"class":106},[100,58127,472],{"class":258},[100,58129,56865],{"class":110},[100,58131,56868],{"class":258},[100,58133,29],{"class":52854},[100,58135,52861],{"class":258},[100,58137,58138,58140,58142,58144,58146],{"class":102,"line":18294},[100,58139,56856],{"class":258},[100,58141,29],{"class":52854},[100,58143,56868],{"class":258},[100,58145,29],{"class":52854},[100,58147,52861],{"class":258},[100,58149,58150,58152,58154,58156,58158],{"class":102,"line":18317},[100,58151,56856],{"class":258},[100,58153,29],{"class":52854},[100,58155,56868],{"class":258},[100,58157,29],{"class":52854},[100,58159,52861],{"class":258},[100,58161,58162,58164,58166,58168,58170],{"class":102,"line":18339},[100,58163,56856],{"class":258},[100,58165,29],{"class":52854},[100,58167,56868],{"class":258},[100,58169,29],{"class":52854},[100,58171,52861],{"class":258},[100,58173,58174,58176,58178,58180,58182],{"class":102,"line":18344},[100,58175,56856],{"class":258},[100,58177,29],{"class":52854},[100,58179,56868],{"class":258},[100,58181,29],{"class":52854},[100,58183,52861],{"class":258},[100,58185,58186,58188,58190,58192,58194],{"class":102,"line":18350},[100,58187,56856],{"class":258},[100,58189,29],{"class":52854},[100,58191,56868],{"class":258},[100,58193,29],{"class":52854},[100,58195,52861],{"class":258},[100,58197,58198,58200,58202,58204,58206],{"class":102,"line":18364},[100,58199,56856],{"class":258},[100,58201,29],{"class":52854},[100,58203,56868],{"class":258},[100,58205,29],{"class":52854},[100,58207,52861],{"class":258},[100,58209,58210,58212,58214,58216,58218],{"class":102,"line":18377},[100,58211,56856],{"class":258},[100,58213,29],{"class":52854},[100,58215,56868],{"class":258},[100,58217,29],{"class":52854},[100,58219,52861],{"class":258},[100,58221,58222,58224,58226],{"class":102,"line":18382},[100,58223,56961],{"class":258},[100,58225,2773],{"class":52854},[100,58227,52861],{"class":258},[100,58229,58230,58232,58234],{"class":102,"line":18396},[100,58231,53330],{"class":258},[100,58233,53165],{"class":52854},[100,58235,52861],{"class":258},[100,58237,58238,58240,58242],{"class":102,"line":18401},[100,58239,53971],{"class":258},[100,58241,53165],{"class":52854},[100,58243,52861],{"class":258},[100,58245,58246,58248,58250],{"class":102,"line":18407},[100,58247,53698],{"class":258},[100,58249,53367],{"class":52854},[100,58251,52861],{"class":258},[100,58253,58254,58256,58259,58261],{"class":102,"line":18412},[100,58255,12803],{"class":471},[100,58257,58258],{"class":117}," sliderData",[100,58260,583],{"class":471},[100,58262,57001],{"class":258},[100,58264,58265,58267,58269,58271,58273,58275,58277],{"class":102,"line":18426},[100,58266,57006],{"class":258},[100,58268,57009],{"class":110},[100,58270,57012],{"class":258},[100,58272,57015],{"class":110},[100,58274,57018],{"class":258},[100,58276,57021],{"class":110},[100,58278,57024],{"class":258},[100,58280,58281,58283,58285,58287,58289,58291,58293],{"class":102,"line":18431},[100,58282,57006],{"class":258},[100,58284,57031],{"class":110},[100,58286,57012],{"class":258},[100,58288,57036],{"class":110},[100,58290,57018],{"class":258},[100,58292,57041],{"class":110},[100,58294,57024],{"class":258},[100,58296,58297,58299,58301,58303,58305,58307,58309],{"class":102,"line":18436},[100,58298,57006],{"class":258},[100,58300,57050],{"class":110},[100,58302,57012],{"class":258},[100,58304,57055],{"class":110},[100,58306,57018],{"class":258},[100,58308,57060],{"class":110},[100,58310,57024],{"class":258},[100,58312,58313,58315,58317,58319,58321,58323,58325],{"class":102,"line":18450},[100,58314,57006],{"class":258},[100,58316,57069],{"class":110},[100,58318,57012],{"class":258},[100,58320,57074],{"class":110},[100,58322,57018],{"class":258},[100,58324,57079],{"class":110},[100,58326,57024],{"class":258},[100,58328,58329,58331,58333,58335,58337,58339,58341],{"class":102,"line":18462},[100,58330,57006],{"class":258},[100,58332,57088],{"class":110},[100,58334,57012],{"class":258},[100,58336,57093],{"class":110},[100,58338,57018],{"class":258},[100,58340,57098],{"class":110},[100,58342,57024],{"class":258},[100,58344,58345,58347,58349,58351,58353,58355,58357],{"class":102,"line":18467},[100,58346,57006],{"class":258},[100,58348,57107],{"class":110},[100,58350,57012],{"class":258},[100,58352,57112],{"class":110},[100,58354,57018],{"class":258},[100,58356,57117],{"class":110},[100,58358,57024],{"class":258},[100,58360,58361,58363,58365,58367,58369,58371,58373],{"class":102,"line":18480},[100,58362,57006],{"class":258},[100,58364,57126],{"class":110},[100,58366,57012],{"class":258},[100,58368,57131],{"class":110},[100,58370,57018],{"class":258},[100,58372,57136],{"class":110},[100,58374,57024],{"class":258},[100,58376,58377,58379,58381,58383,58385,58387,58389],{"class":102,"line":18485},[100,58378,57006],{"class":258},[100,58380,57145],{"class":110},[100,58382,57012],{"class":258},[100,58384,57150],{"class":110},[100,58386,57018],{"class":258},[100,58388,57155],{"class":110},[100,58390,57158],{"class":258},[100,58392,58393],{"class":102,"line":18490},[100,58394,54663],{"class":258},[100,58396,58397],{"class":102,"line":18495},[100,58398,58399],{"class":1836},"    \u002F\u002F 1.获取元素\n",[100,58401,58402,58404,58406,58408,58410,58412,58414,58416],{"class":102,"line":18508},[100,58403,12803],{"class":471},[100,58405,57169],{"class":117},[100,58407,583],{"class":471},[100,58409,55950],{"class":258},[100,58411,55953],{"class":106},[100,58413,713],{"class":258},[100,58415,57180],{"class":110},[100,58417,809],{"class":258},[100,58419,58420,58422,58424,58426,58428,58430,58432,58434],{"class":102,"line":18513},[100,58421,12803],{"class":471},[100,58423,8421],{"class":117},[100,58425,583],{"class":471},[100,58427,55950],{"class":258},[100,58429,55953],{"class":106},[100,58431,713],{"class":258},[100,58433,57199],{"class":110},[100,58435,809],{"class":258},[100,58437,58438,58440,58442,58444],{"class":102,"line":34189},[100,58439,53773],{"class":471},[100,58441,11023],{"class":258},[100,58443,472],{"class":471},[100,58445,48887],{"class":117},[100,58447,58448],{"class":102,"line":34195},[100,58449,58450],{"class":1836},"    \u002F\u002F 2.开启定时器\n",[100,58452,58453],{"class":102,"line":34201},[100,58454,58455],{"class":1836},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[100,58457,58458,58461,58463,58465],{"class":102,"line":34207},[100,58459,58460],{"class":106},"    setInterval",[100,58462,713],{"class":258},[100,58464,56003],{"class":471},[100,58466,56006],{"class":258},[100,58468,58469,58471],{"class":102,"line":34213},[100,58470,56011],{"class":258},[100,58472,4304],{"class":471},[100,58474,58475,58477,58479,58481,58484,58486],{"class":102,"line":34224},[100,58476,56034],{"class":471},[100,58478,56037],{"class":258},[100,58480,3331],{"class":471},[100,58482,58483],{"class":258}," sliderData.",[100,58485,53522],{"class":117},[100,58487,14024],{"class":258},[100,58489,58490,58493,58495],{"class":102,"line":34230},[100,58491,58492],{"class":258},"        i ",[100,58494,472],{"class":471},[100,58496,48887],{"class":117},[100,58498,58499],{"class":102,"line":34250},[100,58500,53952],{"class":258},[100,58502,58503],{"class":102,"line":34256},[100,58504,58505],{"class":1836},"      \u002F\u002F 更换图片路径\n",[100,58507,58508,58510,58512],{"class":102,"line":34267},[100,58509,57275],{"class":258},[100,58511,472],{"class":471},[100,58513,58514],{"class":258}," sliderData[i].url\n",[100,58516,58517],{"class":102,"line":34273},[100,58518,58519],{"class":1836},"      \u002F\u002F 把文字写到p里面\n",[100,58521,58522,58524,58526],{"class":102,"line":34279},[100,58523,57285],{"class":258},[100,58525,472],{"class":471},[100,58527,58528],{"class":258}," sliderData[i].title\n",[100,58530,58531],{"class":102,"line":34285},[100,58532,58533],{"class":1836},"      \u002F\u002F 小圆点\n",[100,58535,58536],{"class":102,"line":34291},[100,58537,58538],{"class":1836},"      \u002F\u002F 先删除以前的active\n",[100,58540,58541],{"class":102,"line":34297},[100,58542,58543],{"class":1836},"      \u002F\u002F 只让当前li添加active\n",[100,58545,58546,58548,58550,58552,58555,58558,58561,58563,58565],{"class":102,"line":34303},[100,58547,57325],{"class":258},[100,58549,55953],{"class":106},[100,58551,713],{"class":258},[100,58553,58554],{"class":110},"'.slider-footer .activate'",[100,58556,58557],{"class":258},").classList.",[100,58559,58560],{"class":106},"remove",[100,58562,713],{"class":258},[100,58564,57343],{"class":110},[100,58566,809],{"class":258},[100,58568,58569,58571,58573,58575,58578,58580,58582,58584,58587,58589,58591,58593,58595],{"class":102,"line":34309},[100,58570,57325],{"class":258},[100,58572,55953],{"class":106},[100,58574,713],{"class":258},[100,58576,58577],{"class":110},"`.slider-footer ul li:nth-child(${",[100,58579,2208],{"class":258},[100,58581,47120],{"class":471},[100,58583,26693],{"class":117},[100,58585,58586],{"class":110},"})`",[100,58588,58557],{"class":258},[100,58590,6930],{"class":106},[100,58592,713],{"class":258},[100,58594,57343],{"class":110},[100,58596,809],{"class":258},[100,58598,58599],{"class":102,"line":34329},[100,58600,570],{"emptyLinePlaceholder":569},[100,58602,58603,58605,58607],{"class":102,"line":34335},[100,58604,56089],{"class":258},[100,58606,8006],{"class":117},[100,58608,809],{"class":258},[100,58610,58611],{"class":102,"line":34351},[100,58612,570],{"emptyLinePlaceholder":569},[100,58614,58615,58617,58619],{"class":102,"line":34357},[100,58616,53971],{"class":258},[100,58618,53367],{"class":52854},[100,58620,52861],{"class":258},[100,58622,58623,58625,58627],{"class":102,"line":34371},[100,58624,53339],{"class":258},[100,58626,53354],{"class":52854},[100,58628,52861],{"class":258},[100,58630,58631],{"class":102,"line":34377},[100,58632,570],{"emptyLinePlaceholder":569},[100,58634,58635,58637,58639],{"class":102,"line":34392},[100,58636,53339],{"class":258},[100,58638,52189],{"class":52854},[100,58640,52861],{"class":258},[305,58642,58644],{"id":58643},"_317-重要知识点","3.1.7 重要知识点",[19,58646,58647,58648],{},"浏览器在渲染文本时， ",[1921,58649,58650],{},"没有空格或换行符就没有“断行点”",[19,58652,58653],{},[3095,58654],{"alt":79,"src":58655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,58657,58658],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,58660,58661],{},[3095,58662],{"alt":79,"src":58663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,58665,58666],{},[3095,58667],{"alt":79,"src":58668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,58670,58672],{"id":58671},"_32-dom事件基础","3.2 DOM事件基础",[305,58674,58676],{"id":58675},"_321-事件监听","3.2.1 事件监听",[19,58678,58679],{},[3095,58680],{"alt":79,"src":58681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,58683,58684],{},"事件监听有响应的发生",[19,58686,58687],{},[3095,58688],{"alt":79,"src":58689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,58691,58692],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,58694,58695],{},"对于有名函数,要执行的函数名后边不要加()",[305,58697,58699],{"id":58698},"_322-随机点名案例","3.2.2 随机点名案例",[73,58701,58703],{"className":52187,"code":58702,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      margin: 0;\n      padding: 0;\n    }\n\n    h2 {\n      text-align: center;\n    }\n\n    .box {\n      width: 600px;\n      margin: 50px auto;\n      display: flex;\n      font-size: 25px;\n      line-height: 40px;\n    }\n\n    .qs {\n\n      width: 450px;\n      height: 40px;\n      color: red;\n\n    }\n\n    .btns {\n      text-align: center;\n    }\n\n    .btns button {\n      width: 120px;\n      height: 35px;\n      margin: 0 50px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ch2>随机点名\u003C\u002Fh2>\n  \u003Cdiv class=\"box\">\n    \u003Cspan>名字是：\u003C\u002Fspan>\n    \u003Cdiv class=\"qs\">这里显示姓名\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"btns\">\n    \u003Cbutton class=\"start\">开始\u003C\u002Fbutton>\n    \u003Cbutton class=\"end\">结束\u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n\n  \u003Cscript>\n    \u002F\u002F 数据数组\n    const arr = ['马超', '黄忠', '赵云', '关羽', '张飞']\n    const qs = document.querySelector('.qs')\n    \u002F\u002F 1.业务1.开始按钮模块\n    const start = document.querySelector('.start')\n    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n    let timerId = 0\n    \u002F\u002F 随机号要全局变量\n    let random = 0\n    \u002F\u002F 1.1 添加点击事件\n    start.addEventListener('click', function () {\n      timerId = setInterval(function () {\n        \u002F\u002F 随机数\n        random = parseInt(Math.random() * arr.length)\n        qs.innerHTML = arr[random]\n      }, 35)\n      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n      if (arr.length === 1) {\n        \u002F\u002F start.disabled = true\n        \u002F\u002F end.disabled = true\n        \u002F\u002F 可以合起来写\n        start.disabled = end.disabled = true\n      }\n    })\n    \u002F\u002F 1.2 关闭按钮模块\n    const end = document.querySelector('.end')\n    end.addEventListener('click', function () {\n      clearInterval(timerId)\n      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n      arr.splice(random, 1)\n    })\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,58704,58705,58715,58729,58733,58741,58755,58775,58787,58795,58801,58811,58821,58825,58829,58836,58847,58851,58855,58861,58873,58887,58897,58909,58922,58926,58930,58937,58941,58954,58966,58978,58982,58986,58990,58997,59007,59011,59015,59024,59036,59048,59063,59067,59075,59083,59087,59095,59108,59122,59135,59155,59163,59178,59198,59218,59226,59230,59238,59243,59279,59299,59304,59323,59328,59339,59344,59355,59360,59379,59394,59399,59425,59435,59444,59449,59465,59470,59475,59480,59495,59499,59503,59508,59527,59544,59552,59557,59572,59576,59580,59588,59596,59600],{"__ignoreMap":79},[100,58706,58707,58709,58711,58713],{"class":102,"line":103},[100,58708,52851],{"class":258},[100,58710,52855],{"class":52854},[100,58712,52858],{"class":106},[100,58714,52861],{"class":258},[100,58716,58717,58719,58721,58723,58725,58727],{"class":102,"line":188},[100,58718,2676],{"class":258},[100,58720,52189],{"class":52854},[100,58722,52870],{"class":106},[100,58724,472],{"class":258},[100,58726,52875],{"class":110},[100,58728,52861],{"class":258},[100,58730,58731],{"class":102,"line":199},[100,58732,570],{"emptyLinePlaceholder":569},[100,58734,58735,58737,58739],{"class":102,"line":532},[100,58736,2676],{"class":258},[100,58738,52888],{"class":52854},[100,58740,52861],{"class":258},[100,58742,58743,58745,58747,58749,58751,58753],{"class":102,"line":577},[100,58744,53698],{"class":258},[100,58746,52898],{"class":52854},[100,58748,52901],{"class":106},[100,58750,472],{"class":258},[100,58752,52906],{"class":110},[100,58754,52861],{"class":258},[100,58756,58757,58759,58761,58763,58765,58767,58769,58771,58773],{"class":102,"line":589},[100,58758,53698],{"class":258},[100,58760,52898],{"class":52854},[100,58762,16501],{"class":106},[100,58764,472],{"class":258},[100,58766,52945],{"class":110},[100,58768,52925],{"class":106},[100,58770,472],{"class":258},[100,58772,52952],{"class":110},[100,58774,52861],{"class":258},[100,58776,58777,58779,58781,58783,58785],{"class":102,"line":595},[100,58778,53698],{"class":258},[100,58780,52961],{"class":52854},[100,58782,52964],{"class":258},[100,58784,52961],{"class":52854},[100,58786,52861],{"class":258},[100,58788,58789,58791,58793],{"class":102,"line":601},[100,58790,53698],{"class":258},[100,58792,1677],{"class":52854},[100,58794,52861],{"class":258},[100,58796,58797,58799],{"class":102,"line":606},[100,58798,7999],{"class":52854},[100,58800,17153],{"class":258},[100,58802,58803,58805,58807,58809],{"class":102,"line":612},[100,58804,56260],{"class":117},[100,58806,52991],{"class":258},[100,58808,1366],{"class":117},[100,58810,2927],{"class":258},[100,58812,58813,58815,58817,58819],{"class":102,"line":618},[100,58814,56249],{"class":117},[100,58816,52991],{"class":258},[100,58818,1366],{"class":117},[100,58820,2927],{"class":258},[100,58822,58823],{"class":102,"line":623},[100,58824,3798],{"class":258},[100,58826,58827],{"class":102,"line":629},[100,58828,570],{"emptyLinePlaceholder":569},[100,58830,58831,58834],{"class":102,"line":635},[100,58832,58833],{"class":52854},"    h2",[100,58835,17153],{"class":258},[100,58837,58838,58841,58843,58845],{"class":102,"line":641},[100,58839,58840],{"class":117},"      text-align",[100,58842,52991],{"class":258},[100,58844,53146],{"class":117},[100,58846,2927],{"class":258},[100,58848,58849],{"class":102,"line":647},[100,58850,3798],{"class":258},[100,58852,58853],{"class":102,"line":653},[100,58854,570],{"emptyLinePlaceholder":569},[100,58856,58857,58859],{"class":102,"line":659},[100,58858,56306],{"class":106},[100,58860,17153],{"class":258},[100,58862,58863,58865,58867,58869,58871],{"class":102,"line":665},[100,58864,56325],{"class":117},[100,58866,52991],{"class":258},[100,58868,3171],{"class":117},[100,58870,53046],{"class":471},[100,58872,2927],{"class":258},[100,58874,58875,58877,58879,58881,58883,58885],{"class":102,"line":670},[100,58876,56260],{"class":117},[100,58878,52991],{"class":258},[100,58880,862],{"class":117},[100,58882,53046],{"class":471},[100,58884,53110],{"class":117},[100,58886,2927],{"class":258},[100,58888,58889,58891,58893,58895],{"class":102,"line":675},[100,58890,56563],{"class":117},[100,58892,52991],{"class":258},[100,58894,53031],{"class":117},[100,58896,2927],{"class":258},[100,58898,58899,58901,58903,58905,58907],{"class":102,"line":699},[100,58900,56476],{"class":117},[100,58902,52991],{"class":258},[100,58904,2591],{"class":117},[100,58906,53046],{"class":471},[100,58908,2927],{"class":258},[100,58910,58911,58914,58916,58918,58920],{"class":102,"line":708},[100,58912,58913],{"class":117},"      line-height",[100,58915,52991],{"class":258},[100,58917,2168],{"class":117},[100,58919,53046],{"class":471},[100,58921,2927],{"class":258},[100,58923,58924],{"class":102,"line":722},[100,58925,3798],{"class":258},[100,58927,58928],{"class":102,"line":735},[100,58929,570],{"emptyLinePlaceholder":569},[100,58931,58932,58935],{"class":102,"line":754},[100,58933,58934],{"class":106},"    .qs",[100,58936,17153],{"class":258},[100,58938,58939],{"class":102,"line":771},[100,58940,570],{"emptyLinePlaceholder":569},[100,58942,58943,58945,58947,58950,58952],{"class":102,"line":776},[100,58944,56325],{"class":117},[100,58946,52991],{"class":258},[100,58948,58949],{"class":117},"450",[100,58951,53046],{"class":471},[100,58953,2927],{"class":258},[100,58955,58956,58958,58960,58962,58964],{"class":102,"line":781},[100,58957,56339],{"class":117},[100,58959,52991],{"class":258},[100,58961,2168],{"class":117},[100,58963,53046],{"class":471},[100,58965,2927],{"class":258},[100,58967,58968,58971,58973,58976],{"class":102,"line":796},[100,58969,58970],{"class":117},"      color",[100,58972,52991],{"class":258},[100,58974,58975],{"class":117},"red",[100,58977,2927],{"class":258},[100,58979,58980],{"class":102,"line":812},[100,58981,570],{"emptyLinePlaceholder":569},[100,58983,58984],{"class":102,"line":823},[100,58985,3798],{"class":258},[100,58987,58988],{"class":102,"line":828},[100,58989,570],{"emptyLinePlaceholder":569},[100,58991,58992,58995],{"class":102,"line":840},[100,58993,58994],{"class":106},"    .btns",[100,58996,17153],{"class":258},[100,58998,58999,59001,59003,59005],{"class":102,"line":845},[100,59000,58840],{"class":117},[100,59002,52991],{"class":258},[100,59004,53146],{"class":117},[100,59006,2927],{"class":258},[100,59008,59009],{"class":102,"line":868},[100,59010,3798],{"class":258},[100,59012,59013],{"class":102,"line":874},[100,59014,570],{"emptyLinePlaceholder":569},[100,59016,59017,59019,59022],{"class":102,"line":879},[100,59018,58994],{"class":106},[100,59020,59021],{"class":52854}," button",[100,59023,17153],{"class":258},[100,59025,59026,59028,59030,59032,59034],{"class":102,"line":889},[100,59027,56325],{"class":117},[100,59029,52991],{"class":258},[100,59031,2583],{"class":117},[100,59033,53046],{"class":471},[100,59035,2927],{"class":258},[100,59037,59038,59040,59042,59044,59046],{"class":102,"line":894},[100,59039,56339],{"class":117},[100,59041,52991],{"class":258},[100,59043,2041],{"class":117},[100,59045,53046],{"class":471},[100,59047,2927],{"class":258},[100,59049,59050,59052,59054,59056,59059,59061],{"class":102,"line":900},[100,59051,56260],{"class":117},[100,59053,52991],{"class":258},[100,59055,1366],{"class":117},[100,59057,59058],{"class":117}," 50",[100,59060,53046],{"class":471},[100,59062,2927],{"class":258},[100,59064,59065],{"class":102,"line":910},[100,59066,3798],{"class":258},[100,59068,59069,59071,59073],{"class":102,"line":915},[100,59070,53971],{"class":258},[100,59072,1677],{"class":52854},[100,59074,52861],{"class":258},[100,59076,59077,59079,59081],{"class":102,"line":929},[100,59078,53339],{"class":258},[100,59080,52888],{"class":52854},[100,59082,52861],{"class":258},[100,59084,59085],{"class":102,"line":935},[100,59086,570],{"emptyLinePlaceholder":569},[100,59088,59089,59091,59093],{"class":102,"line":945},[100,59090,2676],{"class":258},[100,59092,53354],{"class":52854},[100,59094,52861],{"class":258},[100,59096,59097,59099,59101,59104,59106],{"class":102,"line":950},[100,59098,53698],{"class":258},[100,59100,14],{"class":52854},[100,59102,59103],{"class":258},">随机点名\u003C\u002F",[100,59105,14],{"class":52854},[100,59107,52861],{"class":258},[100,59109,59110,59112,59114,59116,59118,59120],{"class":102,"line":955},[100,59111,53698],{"class":258},[100,59113,53165],{"class":52854},[100,59115,55040],{"class":106},[100,59117,472],{"class":258},[100,59119,55045],{"class":110},[100,59121,52861],{"class":258},[100,59123,59124,59126,59128,59131,59133],{"class":102,"line":972},[100,59125,52895],{"class":258},[100,59127,100],{"class":52854},[100,59129,59130],{"class":258},">名字是：\u003C\u002F",[100,59132,100],{"class":52854},[100,59134,52861],{"class":258},[100,59136,59137,59139,59141,59143,59145,59148,59151,59153],{"class":102,"line":11370},[100,59138,52895],{"class":258},[100,59140,53165],{"class":52854},[100,59142,55040],{"class":106},[100,59144,472],{"class":258},[100,59146,59147],{"class":110},"\"qs\"",[100,59149,59150],{"class":258},">这里显示姓名\u003C\u002F",[100,59152,53165],{"class":52854},[100,59154,52861],{"class":258},[100,59156,59157,59159,59161],{"class":102,"line":11375},[100,59158,53971],{"class":258},[100,59160,53165],{"class":52854},[100,59162,52861],{"class":258},[100,59164,59165,59167,59169,59171,59173,59176],{"class":102,"line":11380},[100,59166,53698],{"class":258},[100,59168,53165],{"class":52854},[100,59170,55040],{"class":106},[100,59172,472],{"class":258},[100,59174,59175],{"class":110},"\"btns\"",[100,59177,52861],{"class":258},[100,59179,59180,59182,59184,59186,59188,59191,59194,59196],{"class":102,"line":11385},[100,59181,52895],{"class":258},[100,59183,55441],{"class":52854},[100,59185,55040],{"class":106},[100,59187,472],{"class":258},[100,59189,59190],{"class":110},"\"start\"",[100,59192,59193],{"class":258},">开始\u003C\u002F",[100,59195,55441],{"class":52854},[100,59197,52861],{"class":258},[100,59199,59200,59202,59204,59206,59208,59211,59214,59216],{"class":102,"line":11394},[100,59201,52895],{"class":258},[100,59203,55441],{"class":52854},[100,59205,55040],{"class":106},[100,59207,472],{"class":258},[100,59209,59210],{"class":110},"\"end\"",[100,59212,59213],{"class":258},">结束\u003C\u002F",[100,59215,55441],{"class":52854},[100,59217,52861],{"class":258},[100,59219,59220,59222,59224],{"class":102,"line":11399},[100,59221,53971],{"class":258},[100,59223,53165],{"class":52854},[100,59225,52861],{"class":258},[100,59227,59228],{"class":102,"line":11405},[100,59229,570],{"emptyLinePlaceholder":569},[100,59231,59232,59234,59236],{"class":102,"line":11426},[100,59233,53698],{"class":258},[100,59235,53367],{"class":52854},[100,59237,52861],{"class":258},[100,59239,59240],{"class":102,"line":11432},[100,59241,59242],{"class":1836},"    \u002F\u002F 数据数组\n",[100,59244,59245,59247,59250,59252,59254,59257,59259,59262,59264,59267,59269,59272,59274,59277],{"class":102,"line":11446},[100,59246,12803],{"class":471},[100,59248,59249],{"class":117}," arr",[100,59251,583],{"class":471},[100,59253,53780],{"class":258},[100,59255,59256],{"class":110},"'马超'",[100,59258,14017],{"class":258},[100,59260,59261],{"class":110},"'黄忠'",[100,59263,14017],{"class":258},[100,59265,59266],{"class":110},"'赵云'",[100,59268,14017],{"class":258},[100,59270,59271],{"class":110},"'关羽'",[100,59273,14017],{"class":258},[100,59275,59276],{"class":110},"'张飞'",[100,59278,34802],{"class":258},[100,59280,59281,59283,59286,59288,59290,59292,59294,59297],{"class":102,"line":11452},[100,59282,12803],{"class":471},[100,59284,59285],{"class":117}," qs",[100,59287,583],{"class":471},[100,59289,55950],{"class":258},[100,59291,55953],{"class":106},[100,59293,713],{"class":258},[100,59295,59296],{"class":110},"'.qs'",[100,59298,809],{"class":258},[100,59300,59301],{"class":102,"line":11479},[100,59302,59303],{"class":1836},"    \u002F\u002F 1.业务1.开始按钮模块\n",[100,59305,59306,59308,59310,59312,59314,59316,59318,59321],{"class":102,"line":11488},[100,59307,12803],{"class":471},[100,59309,5783],{"class":117},[100,59311,583],{"class":471},[100,59313,55950],{"class":258},[100,59315,55953],{"class":106},[100,59317,713],{"class":258},[100,59319,59320],{"class":110},"'.start'",[100,59322,809],{"class":258},[100,59324,59325],{"class":102,"line":11494},[100,59326,59327],{"class":1836},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[100,59329,59330,59332,59335,59337],{"class":102,"line":11502},[100,59331,53773],{"class":471},[100,59333,59334],{"class":258}," timerId ",[100,59336,472],{"class":471},[100,59338,48887],{"class":117},[100,59340,59341],{"class":102,"line":11507},[100,59342,59343],{"class":1836},"    \u002F\u002F 随机号要全局变量\n",[100,59345,59346,59348,59351,59353],{"class":102,"line":18185},[100,59347,53773],{"class":471},[100,59349,59350],{"class":258}," random ",[100,59352,472],{"class":471},[100,59354,48887],{"class":117},[100,59356,59357],{"class":102,"line":18191},[100,59358,59359],{"class":1836},"    \u002F\u002F 1.1 添加点击事件\n",[100,59361,59362,59365,59368,59370,59373,59375,59377],{"class":102,"line":18214},[100,59363,59364],{"class":258},"    start.",[100,59366,59367],{"class":106},"addEventListener",[100,59369,713],{"class":258},[100,59371,59372],{"class":110},"'click'",[100,59374,14017],{"class":258},[100,59376,56003],{"class":471},[100,59378,56006],{"class":258},[100,59380,59381,59384,59386,59388,59390,59392],{"class":102,"line":18220},[100,59382,59383],{"class":258},"      timerId ",[100,59385,472],{"class":471},[100,59387,55998],{"class":106},[100,59389,713],{"class":258},[100,59391,56003],{"class":471},[100,59393,56006],{"class":258},[100,59395,59396],{"class":102,"line":18243},[100,59397,59398],{"class":1836},"        \u002F\u002F 随机数\n",[100,59400,59401,59404,59406,59409,59412,59415,59417,59419,59421,59423],{"class":102,"line":18257},[100,59402,59403],{"class":258},"        random ",[100,59405,472],{"class":471},[100,59407,59408],{"class":106}," parseInt",[100,59410,59411],{"class":258},"(Math.",[100,59413,59414],{"class":106},"random",[100,59416,14632],{"class":258},[100,59418,2222],{"class":471},[100,59420,53519],{"class":258},[100,59422,53522],{"class":117},[100,59424,809],{"class":258},[100,59426,59427,59430,59432],{"class":102,"line":18277},[100,59428,59429],{"class":258},"        qs.innerHTML ",[100,59431,472],{"class":471},[100,59433,59434],{"class":258}," arr[random]\n",[100,59436,59437,59440,59442],{"class":102,"line":18283},[100,59438,59439],{"class":258},"      }, ",[100,59441,2041],{"class":117},[100,59443,809],{"class":258},[100,59445,59446],{"class":102,"line":18294},[100,59447,59448],{"class":1836},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[100,59450,59451,59453,59456,59458,59461,59463],{"class":102,"line":18317},[100,59452,56034],{"class":471},[100,59454,59455],{"class":258}," (arr.",[100,59457,53522],{"class":117},[100,59459,59460],{"class":471}," ===",[100,59462,26693],{"class":117},[100,59464,14024],{"class":258},[100,59466,59467],{"class":102,"line":18339},[100,59468,59469],{"class":1836},"        \u002F\u002F start.disabled = true\n",[100,59471,59472],{"class":102,"line":18344},[100,59473,59474],{"class":1836},"        \u002F\u002F end.disabled = true\n",[100,59476,59477],{"class":102,"line":18350},[100,59478,59479],{"class":1836},"        \u002F\u002F 可以合起来写\n",[100,59481,59482,59485,59487,59490,59492],{"class":102,"line":18364},[100,59483,59484],{"class":258},"        start.disabled ",[100,59486,472],{"class":471},[100,59488,59489],{"class":258}," end.disabled ",[100,59491,472],{"class":471},[100,59493,59494],{"class":117}," true\n",[100,59496,59497],{"class":102,"line":18377},[100,59498,53952],{"class":258},[100,59500,59501],{"class":102,"line":18382},[100,59502,35016],{"class":258},[100,59504,59505],{"class":102,"line":18396},[100,59506,59507],{"class":1836},"    \u002F\u002F 1.2 关闭按钮模块\n",[100,59509,59510,59512,59514,59516,59518,59520,59522,59525],{"class":102,"line":18401},[100,59511,12803],{"class":471},[100,59513,5799],{"class":117},[100,59515,583],{"class":471},[100,59517,55950],{"class":258},[100,59519,55953],{"class":106},[100,59521,713],{"class":258},[100,59523,59524],{"class":110},"'.end'",[100,59526,809],{"class":258},[100,59528,59529,59532,59534,59536,59538,59540,59542],{"class":102,"line":18407},[100,59530,59531],{"class":258},"    end.",[100,59533,59367],{"class":106},[100,59535,713],{"class":258},[100,59537,59372],{"class":110},[100,59539,14017],{"class":258},[100,59541,56003],{"class":471},[100,59543,56006],{"class":258},[100,59545,59546,59549],{"class":102,"line":18412},[100,59547,59548],{"class":106},"      clearInterval",[100,59550,59551],{"class":258},"(timerId)\n",[100,59553,59554],{"class":102,"line":18426},[100,59555,59556],{"class":1836},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[100,59558,59559,59562,59565,59568,59570],{"class":102,"line":18431},[100,59560,59561],{"class":258},"      arr.",[100,59563,59564],{"class":106},"splice",[100,59566,59567],{"class":258},"(random, ",[100,59569,1985],{"class":117},[100,59571,809],{"class":258},[100,59573,59574],{"class":102,"line":18436},[100,59575,35016],{"class":258},[100,59577,59578],{"class":102,"line":18450},[100,59579,570],{"emptyLinePlaceholder":569},[100,59581,59582,59584,59586],{"class":102,"line":18462},[100,59583,53971],{"class":258},[100,59585,53367],{"class":52854},[100,59587,52861],{"class":258},[100,59589,59590,59592,59594],{"class":102,"line":18467},[100,59591,53339],{"class":258},[100,59593,53354],{"class":52854},[100,59595,52861],{"class":258},[100,59597,59598],{"class":102,"line":18480},[100,59599,570],{"emptyLinePlaceholder":569},[100,59601,59602,59604,59606],{"class":102,"line":18485},[100,59603,53339],{"class":258},[100,59605,52189],{"class":52854},[100,59607,52861],{"class":258},[19,59609,59610],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[305,59612,59614],{"id":59613},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[73,59616,59618],{"className":52187,"code":59617,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const btn = document.querySelector('button')\n    btn.addEventListener('click', function () {\n      const num = Math.random()\n      console.log(num)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,59619,59620,59630,59644,59648,59656,59670,59690,59702,59710,59714,59722,59734,59742,59761,59778,59794,59804,59808,59816,59824,59828],{"__ignoreMap":79},[100,59621,59622,59624,59626,59628],{"class":102,"line":103},[100,59623,52851],{"class":258},[100,59625,52855],{"class":52854},[100,59627,52858],{"class":106},[100,59629,52861],{"class":258},[100,59631,59632,59634,59636,59638,59640,59642],{"class":102,"line":188},[100,59633,2676],{"class":258},[100,59635,52189],{"class":52854},[100,59637,52870],{"class":106},[100,59639,472],{"class":258},[100,59641,52875],{"class":110},[100,59643,52861],{"class":258},[100,59645,59646],{"class":102,"line":199},[100,59647,570],{"emptyLinePlaceholder":569},[100,59649,59650,59652,59654],{"class":102,"line":532},[100,59651,2676],{"class":258},[100,59653,52888],{"class":52854},[100,59655,52861],{"class":258},[100,59657,59658,59660,59662,59664,59666,59668],{"class":102,"line":577},[100,59659,53698],{"class":258},[100,59661,52898],{"class":52854},[100,59663,52901],{"class":106},[100,59665,472],{"class":258},[100,59667,52906],{"class":110},[100,59669,52861],{"class":258},[100,59671,59672,59674,59676,59678,59680,59682,59684,59686,59688],{"class":102,"line":589},[100,59673,53698],{"class":258},[100,59675,52898],{"class":52854},[100,59677,16501],{"class":106},[100,59679,472],{"class":258},[100,59681,52945],{"class":110},[100,59683,52925],{"class":106},[100,59685,472],{"class":258},[100,59687,52952],{"class":110},[100,59689,52861],{"class":258},[100,59691,59692,59694,59696,59698,59700],{"class":102,"line":595},[100,59693,53698],{"class":258},[100,59695,52961],{"class":52854},[100,59697,52964],{"class":258},[100,59699,52961],{"class":52854},[100,59701,52861],{"class":258},[100,59703,59704,59706,59708],{"class":102,"line":601},[100,59705,53339],{"class":258},[100,59707,52888],{"class":52854},[100,59709,52861],{"class":258},[100,59711,59712],{"class":102,"line":606},[100,59713,570],{"emptyLinePlaceholder":569},[100,59715,59716,59718,59720],{"class":102,"line":612},[100,59717,2676],{"class":258},[100,59719,53354],{"class":52854},[100,59721,52861],{"class":258},[100,59723,59724,59726,59728,59730,59732],{"class":102,"line":618},[100,59725,53698],{"class":258},[100,59727,55441],{"class":52854},[100,59729,55447],{"class":258},[100,59731,55441],{"class":52854},[100,59733,52861],{"class":258},[100,59735,59736,59738,59740],{"class":102,"line":623},[100,59737,53698],{"class":258},[100,59739,53367],{"class":52854},[100,59741,52861],{"class":258},[100,59743,59744,59746,59748,59750,59752,59754,59756,59759],{"class":102,"line":629},[100,59745,12803],{"class":471},[100,59747,55945],{"class":117},[100,59749,583],{"class":471},[100,59751,55950],{"class":258},[100,59753,55953],{"class":106},[100,59755,713],{"class":258},[100,59757,59758],{"class":110},"'button'",[100,59760,809],{"class":258},[100,59762,59763,59766,59768,59770,59772,59774,59776],{"class":102,"line":635},[100,59764,59765],{"class":258},"    btn.",[100,59767,59367],{"class":106},[100,59769,713],{"class":258},[100,59771,59372],{"class":110},[100,59773,14017],{"class":258},[100,59775,56003],{"class":471},[100,59777,56006],{"class":258},[100,59779,59780,59783,59785,59787,59790,59792],{"class":102,"line":641},[100,59781,59782],{"class":471},"      const",[100,59784,3851],{"class":117},[100,59786,583],{"class":471},[100,59788,59789],{"class":258}," Math.",[100,59791,59414],{"class":106},[100,59793,3587],{"class":258},[100,59795,59796,59799,59802],{"class":102,"line":647},[100,59797,59798],{"class":258},"      console.",[100,59800,59801],{"class":106},"log",[100,59803,1793],{"class":258},[100,59805,59806],{"class":102,"line":653},[100,59807,35016],{"class":258},[100,59809,59810,59812,59814],{"class":102,"line":659},[100,59811,53971],{"class":258},[100,59813,53367],{"class":52854},[100,59815,52861],{"class":258},[100,59817,59818,59820,59822],{"class":102,"line":665},[100,59819,53339],{"class":258},[100,59821,53354],{"class":52854},[100,59823,52861],{"class":258},[100,59825,59826],{"class":102,"line":670},[100,59827,570],{"emptyLinePlaceholder":569},[100,59829,59830,59832,59834],{"class":102,"line":675},[100,59831,53339],{"class":258},[100,59833,52189],{"class":52854},[100,59835,52861],{"class":258},[19,59837,59838],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,59840,59841],{},"常量不可以重新赋值",[19,59843,59844],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[73,59846,59848],{"className":52187,"code":59847,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const num = 10\n    const btn = document.querySelector('button')\n    btn.addEventListener('click', function () {\n      const num = Math.random()\n      console.log(num)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,59849,59850,59860,59874,59878,59886,59900,59920,59932,59940,59944,59952,59964,59972,59983,60001,60017,60031,60039,60043,60051,60059,60063],{"__ignoreMap":79},[100,59851,59852,59854,59856,59858],{"class":102,"line":103},[100,59853,52851],{"class":258},[100,59855,52855],{"class":52854},[100,59857,52858],{"class":106},[100,59859,52861],{"class":258},[100,59861,59862,59864,59866,59868,59870,59872],{"class":102,"line":188},[100,59863,2676],{"class":258},[100,59865,52189],{"class":52854},[100,59867,52870],{"class":106},[100,59869,472],{"class":258},[100,59871,52875],{"class":110},[100,59873,52861],{"class":258},[100,59875,59876],{"class":102,"line":199},[100,59877,570],{"emptyLinePlaceholder":569},[100,59879,59880,59882,59884],{"class":102,"line":532},[100,59881,2676],{"class":258},[100,59883,52888],{"class":52854},[100,59885,52861],{"class":258},[100,59887,59888,59890,59892,59894,59896,59898],{"class":102,"line":577},[100,59889,53698],{"class":258},[100,59891,52898],{"class":52854},[100,59893,52901],{"class":106},[100,59895,472],{"class":258},[100,59897,52906],{"class":110},[100,59899,52861],{"class":258},[100,59901,59902,59904,59906,59908,59910,59912,59914,59916,59918],{"class":102,"line":589},[100,59903,53698],{"class":258},[100,59905,52898],{"class":52854},[100,59907,16501],{"class":106},[100,59909,472],{"class":258},[100,59911,52945],{"class":110},[100,59913,52925],{"class":106},[100,59915,472],{"class":258},[100,59917,52952],{"class":110},[100,59919,52861],{"class":258},[100,59921,59922,59924,59926,59928,59930],{"class":102,"line":595},[100,59923,53698],{"class":258},[100,59925,52961],{"class":52854},[100,59927,52964],{"class":258},[100,59929,52961],{"class":52854},[100,59931,52861],{"class":258},[100,59933,59934,59936,59938],{"class":102,"line":601},[100,59935,53339],{"class":258},[100,59937,52888],{"class":52854},[100,59939,52861],{"class":258},[100,59941,59942],{"class":102,"line":606},[100,59943,570],{"emptyLinePlaceholder":569},[100,59945,59946,59948,59950],{"class":102,"line":612},[100,59947,2676],{"class":258},[100,59949,53354],{"class":52854},[100,59951,52861],{"class":258},[100,59953,59954,59956,59958,59960,59962],{"class":102,"line":618},[100,59955,53698],{"class":258},[100,59957,55441],{"class":52854},[100,59959,55447],{"class":258},[100,59961,55441],{"class":52854},[100,59963,52861],{"class":258},[100,59965,59966,59968,59970],{"class":102,"line":623},[100,59967,53698],{"class":258},[100,59969,53367],{"class":52854},[100,59971,52861],{"class":258},[100,59973,59974,59976,59978,59980],{"class":102,"line":629},[100,59975,12803],{"class":471},[100,59977,3851],{"class":117},[100,59979,583],{"class":471},[100,59981,59982],{"class":117}," 10\n",[100,59984,59985,59987,59989,59991,59993,59995,59997,59999],{"class":102,"line":635},[100,59986,12803],{"class":471},[100,59988,55945],{"class":117},[100,59990,583],{"class":471},[100,59992,55950],{"class":258},[100,59994,55953],{"class":106},[100,59996,713],{"class":258},[100,59998,59758],{"class":110},[100,60000,809],{"class":258},[100,60002,60003,60005,60007,60009,60011,60013,60015],{"class":102,"line":641},[100,60004,59765],{"class":258},[100,60006,59367],{"class":106},[100,60008,713],{"class":258},[100,60010,59372],{"class":110},[100,60012,14017],{"class":258},[100,60014,56003],{"class":471},[100,60016,56006],{"class":258},[100,60018,60019,60021,60023,60025,60027,60029],{"class":102,"line":647},[100,60020,59782],{"class":471},[100,60022,3851],{"class":117},[100,60024,583],{"class":471},[100,60026,59789],{"class":258},[100,60028,59414],{"class":106},[100,60030,3587],{"class":258},[100,60032,60033,60035,60037],{"class":102,"line":653},[100,60034,59798],{"class":258},[100,60036,59801],{"class":106},[100,60038,1793],{"class":258},[100,60040,60041],{"class":102,"line":659},[100,60042,35016],{"class":258},[100,60044,60045,60047,60049],{"class":102,"line":665},[100,60046,53971],{"class":258},[100,60048,53367],{"class":52854},[100,60050,52861],{"class":258},[100,60052,60053,60055,60057],{"class":102,"line":670},[100,60054,53339],{"class":258},[100,60056,53354],{"class":52854},[100,60058,52861],{"class":258},[100,60060,60061],{"class":102,"line":675},[100,60062,570],{"emptyLinePlaceholder":569},[100,60064,60065,60067,60069],{"class":102,"line":699},[100,60066,53339],{"class":258},[100,60068,52189],{"class":52854},[100,60070,52861],{"class":258},[19,60072,60073],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[73,60075,60077],{"className":52187,"code":60076,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const num = 10\n    const btn = document.querySelector('button')\n    btn.addEventListener('click', function () {\n      num = Math.random()\n      console.log(num)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,60078,60079,60089,60103,60107,60115,60129,60149,60161,60169,60173,60181,60193,60201,60211,60229,60245,60258,60266,60270,60278,60286,60290],{"__ignoreMap":79},[100,60080,60081,60083,60085,60087],{"class":102,"line":103},[100,60082,52851],{"class":258},[100,60084,52855],{"class":52854},[100,60086,52858],{"class":106},[100,60088,52861],{"class":258},[100,60090,60091,60093,60095,60097,60099,60101],{"class":102,"line":188},[100,60092,2676],{"class":258},[100,60094,52189],{"class":52854},[100,60096,52870],{"class":106},[100,60098,472],{"class":258},[100,60100,52875],{"class":110},[100,60102,52861],{"class":258},[100,60104,60105],{"class":102,"line":199},[100,60106,570],{"emptyLinePlaceholder":569},[100,60108,60109,60111,60113],{"class":102,"line":532},[100,60110,2676],{"class":258},[100,60112,52888],{"class":52854},[100,60114,52861],{"class":258},[100,60116,60117,60119,60121,60123,60125,60127],{"class":102,"line":577},[100,60118,53698],{"class":258},[100,60120,52898],{"class":52854},[100,60122,52901],{"class":106},[100,60124,472],{"class":258},[100,60126,52906],{"class":110},[100,60128,52861],{"class":258},[100,60130,60131,60133,60135,60137,60139,60141,60143,60145,60147],{"class":102,"line":589},[100,60132,53698],{"class":258},[100,60134,52898],{"class":52854},[100,60136,16501],{"class":106},[100,60138,472],{"class":258},[100,60140,52945],{"class":110},[100,60142,52925],{"class":106},[100,60144,472],{"class":258},[100,60146,52952],{"class":110},[100,60148,52861],{"class":258},[100,60150,60151,60153,60155,60157,60159],{"class":102,"line":595},[100,60152,53698],{"class":258},[100,60154,52961],{"class":52854},[100,60156,52964],{"class":258},[100,60158,52961],{"class":52854},[100,60160,52861],{"class":258},[100,60162,60163,60165,60167],{"class":102,"line":601},[100,60164,53339],{"class":258},[100,60166,52888],{"class":52854},[100,60168,52861],{"class":258},[100,60170,60171],{"class":102,"line":606},[100,60172,570],{"emptyLinePlaceholder":569},[100,60174,60175,60177,60179],{"class":102,"line":612},[100,60176,2676],{"class":258},[100,60178,53354],{"class":52854},[100,60180,52861],{"class":258},[100,60182,60183,60185,60187,60189,60191],{"class":102,"line":618},[100,60184,53698],{"class":258},[100,60186,55441],{"class":52854},[100,60188,55447],{"class":258},[100,60190,55441],{"class":52854},[100,60192,52861],{"class":258},[100,60194,60195,60197,60199],{"class":102,"line":623},[100,60196,53698],{"class":258},[100,60198,53367],{"class":52854},[100,60200,52861],{"class":258},[100,60202,60203,60205,60207,60209],{"class":102,"line":629},[100,60204,12803],{"class":471},[100,60206,3851],{"class":117},[100,60208,583],{"class":471},[100,60210,59982],{"class":117},[100,60212,60213,60215,60217,60219,60221,60223,60225,60227],{"class":102,"line":635},[100,60214,12803],{"class":471},[100,60216,55945],{"class":117},[100,60218,583],{"class":471},[100,60220,55950],{"class":258},[100,60222,55953],{"class":106},[100,60224,713],{"class":258},[100,60226,59758],{"class":110},[100,60228,809],{"class":258},[100,60230,60231,60233,60235,60237,60239,60241,60243],{"class":102,"line":641},[100,60232,59765],{"class":258},[100,60234,59367],{"class":106},[100,60236,713],{"class":258},[100,60238,59372],{"class":110},[100,60240,14017],{"class":258},[100,60242,56003],{"class":471},[100,60244,56006],{"class":258},[100,60246,60247,60250,60252,60254,60256],{"class":102,"line":647},[100,60248,60249],{"class":258},"      num ",[100,60251,472],{"class":471},[100,60253,59789],{"class":258},[100,60255,59414],{"class":106},[100,60257,3587],{"class":258},[100,60259,60260,60262,60264],{"class":102,"line":653},[100,60261,59798],{"class":258},[100,60263,59801],{"class":106},[100,60265,1793],{"class":258},[100,60267,60268],{"class":102,"line":659},[100,60269,35016],{"class":258},[100,60271,60272,60274,60276],{"class":102,"line":665},[100,60273,53971],{"class":258},[100,60275,53367],{"class":52854},[100,60277,52861],{"class":258},[100,60279,60280,60282,60284],{"class":102,"line":670},[100,60281,53339],{"class":258},[100,60283,53354],{"class":52854},[100,60285,52861],{"class":258},[100,60287,60288],{"class":102,"line":675},[100,60289,570],{"emptyLinePlaceholder":569},[100,60291,60292,60294,60296],{"class":102,"line":699},[100,60293,53339],{"class":258},[100,60295,52189],{"class":52854},[100,60297,52861],{"class":258},[19,60299,60300],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[305,60302,60304],{"id":60303},"_324-事件监听版本","3.2.4 事件监听版本",[19,60306,60307],{},[3095,60308],{"alt":79,"src":60309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,60311,60312],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,60314,60315],{},"这种方式会覆盖前边的事件监听:",[73,60317,60319],{"className":52187,"code":60318,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const btn = document.querySelector('button')\n    btn.onclick = function () {\n      alert(11)\n    }\n    btn.onclick = function () {\n      alert(22)\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,60320,60321,60331,60345,60349,60357,60371,60391,60403,60411,60415,60423,60435,60443,60461,60475,60486,60490,60502,60512,60516,60524,60532,60536],{"__ignoreMap":79},[100,60322,60323,60325,60327,60329],{"class":102,"line":103},[100,60324,52851],{"class":258},[100,60326,52855],{"class":52854},[100,60328,52858],{"class":106},[100,60330,52861],{"class":258},[100,60332,60333,60335,60337,60339,60341,60343],{"class":102,"line":188},[100,60334,2676],{"class":258},[100,60336,52189],{"class":52854},[100,60338,52870],{"class":106},[100,60340,472],{"class":258},[100,60342,52875],{"class":110},[100,60344,52861],{"class":258},[100,60346,60347],{"class":102,"line":199},[100,60348,570],{"emptyLinePlaceholder":569},[100,60350,60351,60353,60355],{"class":102,"line":532},[100,60352,2676],{"class":258},[100,60354,52888],{"class":52854},[100,60356,52861],{"class":258},[100,60358,60359,60361,60363,60365,60367,60369],{"class":102,"line":577},[100,60360,53698],{"class":258},[100,60362,52898],{"class":52854},[100,60364,52901],{"class":106},[100,60366,472],{"class":258},[100,60368,52906],{"class":110},[100,60370,52861],{"class":258},[100,60372,60373,60375,60377,60379,60381,60383,60385,60387,60389],{"class":102,"line":589},[100,60374,53698],{"class":258},[100,60376,52898],{"class":52854},[100,60378,16501],{"class":106},[100,60380,472],{"class":258},[100,60382,52945],{"class":110},[100,60384,52925],{"class":106},[100,60386,472],{"class":258},[100,60388,52952],{"class":110},[100,60390,52861],{"class":258},[100,60392,60393,60395,60397,60399,60401],{"class":102,"line":595},[100,60394,53698],{"class":258},[100,60396,52961],{"class":52854},[100,60398,52964],{"class":258},[100,60400,52961],{"class":52854},[100,60402,52861],{"class":258},[100,60404,60405,60407,60409],{"class":102,"line":601},[100,60406,53339],{"class":258},[100,60408,52888],{"class":52854},[100,60410,52861],{"class":258},[100,60412,60413],{"class":102,"line":606},[100,60414,570],{"emptyLinePlaceholder":569},[100,60416,60417,60419,60421],{"class":102,"line":612},[100,60418,2676],{"class":258},[100,60420,53354],{"class":52854},[100,60422,52861],{"class":258},[100,60424,60425,60427,60429,60431,60433],{"class":102,"line":618},[100,60426,53698],{"class":258},[100,60428,55441],{"class":52854},[100,60430,55447],{"class":258},[100,60432,55441],{"class":52854},[100,60434,52861],{"class":258},[100,60436,60437,60439,60441],{"class":102,"line":623},[100,60438,53698],{"class":258},[100,60440,53367],{"class":52854},[100,60442,52861],{"class":258},[100,60444,60445,60447,60449,60451,60453,60455,60457,60459],{"class":102,"line":629},[100,60446,12803],{"class":471},[100,60448,55945],{"class":117},[100,60450,583],{"class":471},[100,60452,55950],{"class":258},[100,60454,55953],{"class":106},[100,60456,713],{"class":258},[100,60458,59758],{"class":110},[100,60460,809],{"class":258},[100,60462,60463,60465,60468,60470,60473],{"class":102,"line":635},[100,60464,59765],{"class":258},[100,60466,60467],{"class":106},"onclick",[100,60469,583],{"class":471},[100,60471,60472],{"class":471}," function",[100,60474,56006],{"class":258},[100,60476,60477,60480,60482,60484],{"class":102,"line":641},[100,60478,60479],{"class":106},"      alert",[100,60481,713],{"class":258},[100,60483,2239],{"class":117},[100,60485,809],{"class":258},[100,60487,60488],{"class":102,"line":647},[100,60489,3798],{"class":258},[100,60491,60492,60494,60496,60498,60500],{"class":102,"line":653},[100,60493,59765],{"class":258},[100,60495,60467],{"class":106},[100,60497,583],{"class":471},[100,60499,60472],{"class":471},[100,60501,56006],{"class":258},[100,60503,60504,60506,60508,60510],{"class":102,"line":659},[100,60505,60479],{"class":106},[100,60507,713],{"class":258},[100,60509,2516],{"class":117},[100,60511,809],{"class":258},[100,60513,60514],{"class":102,"line":665},[100,60515,3798],{"class":258},[100,60517,60518,60520,60522],{"class":102,"line":670},[100,60519,53971],{"class":258},[100,60521,53367],{"class":52854},[100,60523,52861],{"class":258},[100,60525,60526,60528,60530],{"class":102,"line":675},[100,60527,53339],{"class":258},[100,60529,53354],{"class":52854},[100,60531,52861],{"class":258},[100,60533,60534],{"class":102,"line":699},[100,60535,570],{"emptyLinePlaceholder":569},[100,60537,60538,60540,60542],{"class":102,"line":708},[100,60539,53339],{"class":258},[100,60541,52189],{"class":52854},[100,60543,52861],{"class":258},[19,60545,60546],{},"只要点击就输出结果为22,前边11被覆盖了",[73,60548,60550],{"className":52187,"code":60549,"language":52189,"meta":79,"style":79},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[32,60551,60552,60557,60562,60566,60571,60576],{"__ignoreMap":79},[100,60553,60554],{"class":102,"line":103},[100,60555,60556],{"class":258},"  btn.addEventListener('click', function () {\n",[100,60558,60559],{"class":102,"line":188},[100,60560,60561],{"class":258},"      alert(11)\n",[100,60563,60564],{"class":102,"line":199},[100,60565,35016],{"class":258},[100,60567,60568],{"class":102,"line":532},[100,60569,60570],{"class":258},"    btn.addEventListener('click', function () {\n",[100,60572,60573],{"class":102,"line":577},[100,60574,60575],{"class":258},"      alert(22)\n",[100,60577,60578],{"class":102,"line":589},[100,60579,35016],{"class":258},[19,60581,60582],{},"点击第一次输出11,第二次点击为22",[305,60584,60586],{"id":60585},"_325-事件类型","3.2.5 事件类型",[19,60588,60589],{},[3095,60590],{"alt":79,"src":60591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[23579,60593,60595],{"id":60594},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,60597,60598],{},"补充知识:",[19,60600,60601],{},"轮播图自动播放模块,可以使用",[19,60603,60604],{},"let timerId = setInterval(function () {",[19,60606,60607],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,60609,60610],{},"用js方法模拟进行点击事件,click必须加()",[19,60612,60613],{},"next.click()",[19,60615,60616],{},"}, 1000)",[19,60618,60619],{},[3095,60620],{"alt":79,"src":60621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[73,60623,60625],{"className":54621,"code":60624,"language":54623,"meta":79,"style":79},"\n\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Ctitle>轮播图点击切换\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      box-sizing: border-box;\n    }\n\n    .slider {\n      width: 560px;\n      height: 400px;\n      overflow: hidden;\n    }\n\n    .slider-wrapper {\n      width: 100%;\n      height: 320px;\n    }\n\n    .slider-wrapper img {\n      width: 100%;\n      height: 100%;\n      display: block;\n    }\n\n    .slider-footer {\n      height: 80px;\n      background-color: rgb(100, 67, 68);\n      padding: 12px 12px 0 12px;\n      position: relative;\n    }\n\n    .slider-footer .toggle {\n      position: absolute;\n      right: 0;\n      top: 12px;\n      display: flex;\n    }\n\n    .slider-footer .toggle button {\n      margin-right: 12px;\n      width: 28px;\n      height: 28px;\n      appearance: none;\n      border: none;\n      background: rgba(255, 255, 255, 0.1);\n      color: #fff;\n      border-radius: 4px;\n      cursor: pointer;\n    }\n\n    .slider-footer .toggle button:hover {\n      background: rgba(255, 255, 255, 0.2);\n    }\n\n    .slider-footer p {\n      margin: 0;\n      color: #fff;\n      font-size: 18px;\n      margin-bottom: 10px;\n    }\n\n    .slider-indicator {\n      margin: 0;\n      padding: 0;\n      list-style: none;\n      display: flex;\n      align-items: center;\n    }\n\n    .slider-indicator li {\n      width: 8px;\n      height: 8px;\n      margin: 4px;\n      border-radius: 50%;\n      background: #fff;\n      opacity: 0.4;\n      cursor: pointer;\n    }\n\n    .slider-indicator li.active {\n      width: 12px;\n      height: 12px;\n      opacity: 1;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"slider\">\n    \u003Cdiv class=\"slider-wrapper\">\n      \u003Cimg src=\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\" alt=\"\" \u002F>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"slider-footer\">\n      \u003Cp>对人类来说会不会太超前了？\u003C\u002Fp>\n      \u003Cul class=\"slider-indicator\">\n        \u003Cli class=\"active\">\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n      \u003C\u002Ful>\n      \u003Cdiv class=\"toggle\">\n        \u003Cbutton class=\"prev\">&lt;\u003C\u002Fbutton>\n        \u003Cbutton class=\"next\">&gt;\u003C\u002Fbutton>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 1. 初始数据\n    const data = [\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n    ]\n    \u002F\u002F 获取元素\n    const img = document.querySelector('.slider-wrapper img')\n    const p = document.querySelector('.slider-footer p')\n    const footer = document.querySelector('.slider-footer')\n    \u002F\u002F 1. 右按钮业务\n    \u002F\u002F 1.1 获取右侧按钮 \n    const next = document.querySelector('.next')\n    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n    \u002F\u002F 1.2 注册点击事件\n\n    next.addEventListener('click', function () {\n      \u002F\u002F console.log(11)\n      i++\n      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n      \u002F\u002F if (i >= 8) {\n      \u002F\u002F   i = 0\n      \u002F\u002F }\n      i = i >= data.length ? 0 : i\n      \u002F\u002F 1.3 得到对应的对象\n      \u002F\u002F console.log(data[i])\n      \u002F\u002F 调用函数\n      toggle()\n    })\n\n    \u002F\u002F 2. 左侧按钮业务\n    \u002F\u002F 2.1 获取左侧按钮 \n    const prev = document.querySelector('.prev')\n    \u002F\u002F 1.2 注册点击事件\n    prev.addEventListener('click', function () {\n      i--\n      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n      \u002F\u002F if (i \u003C 0) {\n      \u002F\u002F   i = 7\n      \u002F\u002F }\n      i = i \u003C 0 ? data.length - 1 : i\n      \u002F\u002F 1.3 得到对应的对象\n      \u002F\u002F console.log(data[i])\n      \u002F\u002F 调用函数\n      toggle()\n    })\n\n    \u002F\u002F 声明一个渲染的函数作为复用\n    function toggle() {\n      \u002F\u002F 1.4 渲染对应的数据\n      img.src = data[i].url\n      p.innerHTML = data[i].title\n      footer.style.backgroundColor = data[i].color\n      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n      document.querySelector('.slider-indicator .active').classList.remove('active')\n      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n    }\n\n    \u002F\u002F 3. 自动播放模块\n    let timerId = setInterval(function () {\n      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n      next.click()\n    }, 1000)\n\n    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n    const slider = document.querySelector('.slider')\n    \u002F\u002F 注册事件\n    slider.addEventListener('mouseenter', function () {\n      \u002F\u002F 停止定时器\n      clearInterval(timerId)\n    })\n\n    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n    \u002F\u002F 注册事件\n    slider.addEventListener('mouseleave', function () {\n      \u002F\u002F 停止定时器\n      if (timerId) clearInterval(timerId)\n      \u002F\u002F 开启定时器\n      timerId = setInterval(function () {\n        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n        next.click()\n      }, 1000)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,60626,60627,60631,60641,60655,60659,60667,60682,60702,60722,60735,60743,60748,60753,60757,60761,60766,60771,60776,60781,60785,60789,60794,60799,60804,60808,60812,60817,60821,60826,60831,60835,60839,60844,60849,60854,60859,60864,60868,60872,60877,60882,60887,60892,60897,60901,60905,60910,60915,60920,60925,60930,60935,60940,60945,60950,60955,60959,60963,60968,60973,60977,60981,60986,60991,60995,61000,61005,61009,61013,61018,61022,61027,61032,61036,61041,61045,61049,61054,61059,61064,61069,61074,61079,61084,61088,61092,61096,61101,61106,61111,61116,61120,61128,61136,61140,61148,61163,61177,61198,61206,61220,61233,61248,61267,61279,61291,61303,61315,61327,61339,61351,61359,61374,61398,61422,61430,61438,61446,61454,61459,61464,61469,61474,61479,61484,61489,61494,61499,61504,61508,61513,61518,61523,61528,61533,61538,61543,61548,61553,61557,61562,61567,61572,61577,61582,61587,61592,61597,61602,61607,61612,61617,61621,61625,61630,61635,61640,61644,61649,61654,61659,61664,61669,61673,61678,61682,61686,61690,61694,61698,61702,61707,61712,61717,61722,61727,61732,61737,61742,61747,61751,61755,61760,61765,61770,61775,61780,61784,61789,61794,61799,61804,61809,61814,61818,61822,61827,61831,61836,61840,61845,61850,61855,61860,61865,61870,61874,61882,61890,61894],{"__ignoreMap":79},[100,60628,60629],{"class":102,"line":103},[100,60630,570],{"emptyLinePlaceholder":569},[100,60632,60633,60635,60637,60639],{"class":102,"line":188},[100,60634,52851],{"class":258},[100,60636,52855],{"class":471},[100,60638,52858],{"class":117},[100,60640,52861],{"class":258},[100,60642,60643,60645,60647,60649,60651,60653],{"class":102,"line":199},[100,60644,2676],{"class":258},[100,60646,52189],{"class":52854},[100,60648,52870],{"class":106},[100,60650,472],{"class":258},[100,60652,52875],{"class":110},[100,60654,52861],{"class":258},[100,60656,60657],{"class":102,"line":532},[100,60658,570],{"emptyLinePlaceholder":569},[100,60660,60661,60663,60665],{"class":102,"line":577},[100,60662,2676],{"class":258},[100,60664,52888],{"class":52854},[100,60666,52861],{"class":258},[100,60668,60669,60671,60673,60675,60677,60679],{"class":102,"line":589},[100,60670,53698],{"class":258},[100,60672,52898],{"class":52854},[100,60674,52901],{"class":106},[100,60676,472],{"class":258},[100,60678,52906],{"class":110},[100,60680,60681],{"class":258}," \u002F>\n",[100,60683,60684,60686,60688,60690,60692,60694,60696,60698,60700],{"class":102,"line":595},[100,60685,53698],{"class":258},[100,60687,52898],{"class":52854},[100,60689,52917],{"class":106},[100,60691,472],{"class":258},[100,60693,52922],{"class":110},[100,60695,52925],{"class":106},[100,60697,472],{"class":258},[100,60699,52930],{"class":110},[100,60701,60681],{"class":258},[100,60703,60704,60706,60708,60710,60712,60714,60716,60718,60720],{"class":102,"line":601},[100,60705,53698],{"class":258},[100,60707,52898],{"class":52854},[100,60709,16501],{"class":106},[100,60711,472],{"class":258},[100,60713,52945],{"class":110},[100,60715,52925],{"class":106},[100,60717,472],{"class":258},[100,60719,52952],{"class":110},[100,60721,60681],{"class":258},[100,60723,60724,60726,60728,60731,60733],{"class":102,"line":606},[100,60725,53698],{"class":258},[100,60727,52961],{"class":52854},[100,60729,60730],{"class":258},">轮播图点击切换\u003C\u002F",[100,60732,52961],{"class":52854},[100,60734,52861],{"class":258},[100,60736,60737,60739,60741],{"class":102,"line":612},[100,60738,53698],{"class":258},[100,60740,1677],{"class":52854},[100,60742,52861],{"class":258},[100,60744,60745],{"class":102,"line":618},[100,60746,60747],{"class":258},"    * {\n",[100,60749,60750],{"class":102,"line":623},[100,60751,60752],{"class":258},"      box-sizing: border-box;\n",[100,60754,60755],{"class":102,"line":629},[100,60756,3798],{"class":258},[100,60758,60759],{"class":102,"line":635},[100,60760,570],{"emptyLinePlaceholder":569},[100,60762,60763],{"class":102,"line":641},[100,60764,60765],{"class":258},"    .slider {\n",[100,60767,60768],{"class":102,"line":647},[100,60769,60770],{"class":258},"      width: 560px;\n",[100,60772,60773],{"class":102,"line":653},[100,60774,60775],{"class":258},"      height: 400px;\n",[100,60777,60778],{"class":102,"line":659},[100,60779,60780],{"class":258},"      overflow: hidden;\n",[100,60782,60783],{"class":102,"line":665},[100,60784,3798],{"class":258},[100,60786,60787],{"class":102,"line":670},[100,60788,570],{"emptyLinePlaceholder":569},[100,60790,60791],{"class":102,"line":675},[100,60792,60793],{"class":258},"    .slider-wrapper {\n",[100,60795,60796],{"class":102,"line":699},[100,60797,60798],{"class":258},"      width: 100%;\n",[100,60800,60801],{"class":102,"line":708},[100,60802,60803],{"class":258},"      height: 320px;\n",[100,60805,60806],{"class":102,"line":722},[100,60807,3798],{"class":258},[100,60809,60810],{"class":102,"line":735},[100,60811,570],{"emptyLinePlaceholder":569},[100,60813,60814],{"class":102,"line":754},[100,60815,60816],{"class":258},"    .slider-wrapper img {\n",[100,60818,60819],{"class":102,"line":771},[100,60820,60798],{"class":258},[100,60822,60823],{"class":102,"line":776},[100,60824,60825],{"class":258},"      height: 100%;\n",[100,60827,60828],{"class":102,"line":781},[100,60829,60830],{"class":258},"      display: block;\n",[100,60832,60833],{"class":102,"line":796},[100,60834,3798],{"class":258},[100,60836,60837],{"class":102,"line":812},[100,60838,570],{"emptyLinePlaceholder":569},[100,60840,60841],{"class":102,"line":823},[100,60842,60843],{"class":258},"    .slider-footer {\n",[100,60845,60846],{"class":102,"line":828},[100,60847,60848],{"class":258},"      height: 80px;\n",[100,60850,60851],{"class":102,"line":840},[100,60852,60853],{"class":258},"      background-color: rgb(100, 67, 68);\n",[100,60855,60856],{"class":102,"line":845},[100,60857,60858],{"class":258},"      padding: 12px 12px 0 12px;\n",[100,60860,60861],{"class":102,"line":868},[100,60862,60863],{"class":258},"      position: relative;\n",[100,60865,60866],{"class":102,"line":874},[100,60867,3798],{"class":258},[100,60869,60870],{"class":102,"line":879},[100,60871,570],{"emptyLinePlaceholder":569},[100,60873,60874],{"class":102,"line":889},[100,60875,60876],{"class":258},"    .slider-footer .toggle {\n",[100,60878,60879],{"class":102,"line":894},[100,60880,60881],{"class":258},"      position: absolute;\n",[100,60883,60884],{"class":102,"line":900},[100,60885,60886],{"class":258},"      right: 0;\n",[100,60888,60889],{"class":102,"line":910},[100,60890,60891],{"class":258},"      top: 12px;\n",[100,60893,60894],{"class":102,"line":915},[100,60895,60896],{"class":258},"      display: flex;\n",[100,60898,60899],{"class":102,"line":929},[100,60900,3798],{"class":258},[100,60902,60903],{"class":102,"line":935},[100,60904,570],{"emptyLinePlaceholder":569},[100,60906,60907],{"class":102,"line":945},[100,60908,60909],{"class":258},"    .slider-footer .toggle button {\n",[100,60911,60912],{"class":102,"line":950},[100,60913,60914],{"class":258},"      margin-right: 12px;\n",[100,60916,60917],{"class":102,"line":955},[100,60918,60919],{"class":258},"      width: 28px;\n",[100,60921,60922],{"class":102,"line":972},[100,60923,60924],{"class":258},"      height: 28px;\n",[100,60926,60927],{"class":102,"line":11370},[100,60928,60929],{"class":258},"      appearance: none;\n",[100,60931,60932],{"class":102,"line":11375},[100,60933,60934],{"class":258},"      border: none;\n",[100,60936,60937],{"class":102,"line":11380},[100,60938,60939],{"class":258},"      background: rgba(255, 255, 255, 0.1);\n",[100,60941,60942],{"class":102,"line":11385},[100,60943,60944],{"class":258},"      color: #fff;\n",[100,60946,60947],{"class":102,"line":11394},[100,60948,60949],{"class":258},"      border-radius: 4px;\n",[100,60951,60952],{"class":102,"line":11399},[100,60953,60954],{"class":258},"      cursor: pointer;\n",[100,60956,60957],{"class":102,"line":11405},[100,60958,3798],{"class":258},[100,60960,60961],{"class":102,"line":11426},[100,60962,570],{"emptyLinePlaceholder":569},[100,60964,60965],{"class":102,"line":11432},[100,60966,60967],{"class":258},"    .slider-footer .toggle button:hover {\n",[100,60969,60970],{"class":102,"line":11446},[100,60971,60972],{"class":258},"      background: rgba(255, 255, 255, 0.2);\n",[100,60974,60975],{"class":102,"line":11452},[100,60976,3798],{"class":258},[100,60978,60979],{"class":102,"line":11479},[100,60980,570],{"emptyLinePlaceholder":569},[100,60982,60983],{"class":102,"line":11488},[100,60984,60985],{"class":258},"    .slider-footer p {\n",[100,60987,60988],{"class":102,"line":11494},[100,60989,60990],{"class":258},"      margin: 0;\n",[100,60992,60993],{"class":102,"line":11502},[100,60994,60944],{"class":258},[100,60996,60997],{"class":102,"line":11507},[100,60998,60999],{"class":258},"      font-size: 18px;\n",[100,61001,61002],{"class":102,"line":18185},[100,61003,61004],{"class":258},"      margin-bottom: 10px;\n",[100,61006,61007],{"class":102,"line":18191},[100,61008,3798],{"class":258},[100,61010,61011],{"class":102,"line":18214},[100,61012,570],{"emptyLinePlaceholder":569},[100,61014,61015],{"class":102,"line":18220},[100,61016,61017],{"class":258},"    .slider-indicator {\n",[100,61019,61020],{"class":102,"line":18243},[100,61021,60990],{"class":258},[100,61023,61024],{"class":102,"line":18257},[100,61025,61026],{"class":258},"      padding: 0;\n",[100,61028,61029],{"class":102,"line":18277},[100,61030,61031],{"class":258},"      list-style: none;\n",[100,61033,61034],{"class":102,"line":18283},[100,61035,60896],{"class":258},[100,61037,61038],{"class":102,"line":18294},[100,61039,61040],{"class":258},"      align-items: center;\n",[100,61042,61043],{"class":102,"line":18317},[100,61044,3798],{"class":258},[100,61046,61047],{"class":102,"line":18339},[100,61048,570],{"emptyLinePlaceholder":569},[100,61050,61051],{"class":102,"line":18344},[100,61052,61053],{"class":258},"    .slider-indicator li {\n",[100,61055,61056],{"class":102,"line":18350},[100,61057,61058],{"class":258},"      width: 8px;\n",[100,61060,61061],{"class":102,"line":18364},[100,61062,61063],{"class":258},"      height: 8px;\n",[100,61065,61066],{"class":102,"line":18377},[100,61067,61068],{"class":258},"      margin: 4px;\n",[100,61070,61071],{"class":102,"line":18382},[100,61072,61073],{"class":258},"      border-radius: 50%;\n",[100,61075,61076],{"class":102,"line":18396},[100,61077,61078],{"class":258},"      background: #fff;\n",[100,61080,61081],{"class":102,"line":18401},[100,61082,61083],{"class":258},"      opacity: 0.4;\n",[100,61085,61086],{"class":102,"line":18407},[100,61087,60954],{"class":258},[100,61089,61090],{"class":102,"line":18412},[100,61091,3798],{"class":258},[100,61093,61094],{"class":102,"line":18426},[100,61095,570],{"emptyLinePlaceholder":569},[100,61097,61098],{"class":102,"line":18431},[100,61099,61100],{"class":258},"    .slider-indicator li.active {\n",[100,61102,61103],{"class":102,"line":18436},[100,61104,61105],{"class":258},"      width: 12px;\n",[100,61107,61108],{"class":102,"line":18450},[100,61109,61110],{"class":258},"      height: 12px;\n",[100,61112,61113],{"class":102,"line":18462},[100,61114,61115],{"class":258},"      opacity: 1;\n",[100,61117,61118],{"class":102,"line":18467},[100,61119,3798],{"class":258},[100,61121,61122,61124,61126],{"class":102,"line":18480},[100,61123,53971],{"class":258},[100,61125,1677],{"class":52854},[100,61127,52861],{"class":258},[100,61129,61130,61132,61134],{"class":102,"line":18485},[100,61131,53339],{"class":258},[100,61133,52888],{"class":52854},[100,61135,52861],{"class":258},[100,61137,61138],{"class":102,"line":18490},[100,61139,570],{"emptyLinePlaceholder":569},[100,61141,61142,61144,61146],{"class":102,"line":18495},[100,61143,2676],{"class":258},[100,61145,53354],{"class":52854},[100,61147,52861],{"class":258},[100,61149,61150,61152,61154,61156,61158,61161],{"class":102,"line":18508},[100,61151,53698],{"class":258},[100,61153,53165],{"class":52854},[100,61155,55040],{"class":106},[100,61157,472],{"class":258},[100,61159,61160],{"class":110},"\"slider\"",[100,61162,52861],{"class":258},[100,61164,61165,61167,61169,61171,61173,61175],{"class":102,"line":18513},[100,61166,52895],{"class":258},[100,61168,53165],{"class":52854},[100,61170,55040],{"class":106},[100,61172,472],{"class":258},[100,61174,56781],{"class":110},[100,61176,52861],{"class":258},[100,61178,61179,61181,61183,61185,61187,61190,61192,61194,61196],{"class":102,"line":34189},[100,61180,56788],{"class":258},[100,61182,3095],{"class":52854},[100,61184,56793],{"class":106},[100,61186,472],{"class":258},[100,61188,61189],{"class":110},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[100,61191,56801],{"class":106},[100,61193,472],{"class":258},[100,61195,9248],{"class":110},[100,61197,60681],{"class":258},[100,61199,61200,61202,61204],{"class":102,"line":34195},[100,61201,53330],{"class":258},[100,61203,53165],{"class":52854},[100,61205,52861],{"class":258},[100,61207,61208,61210,61212,61214,61216,61218],{"class":102,"line":34201},[100,61209,52895],{"class":258},[100,61211,53165],{"class":52854},[100,61213,55040],{"class":106},[100,61215,472],{"class":258},[100,61217,56828],{"class":110},[100,61219,52861],{"class":258},[100,61221,61222,61224,61226,61229,61231],{"class":102,"line":34207},[100,61223,56788],{"class":258},[100,61225,19],{"class":52854},[100,61227,61228],{"class":258},">对人类来说会不会太超前了？\u003C\u002F",[100,61230,19],{"class":52854},[100,61232,52861],{"class":258},[100,61234,61235,61237,61239,61241,61243,61246],{"class":102,"line":34213},[100,61236,56788],{"class":258},[100,61238,2773],{"class":52854},[100,61240,55040],{"class":106},[100,61242,472],{"class":258},[100,61244,61245],{"class":110},"\"slider-indicator\"",[100,61247,52861],{"class":258},[100,61249,61250,61252,61254,61256,61258,61261,61263,61265],{"class":102,"line":34224},[100,61251,56856],{"class":258},[100,61253,29],{"class":52854},[100,61255,55040],{"class":106},[100,61257,472],{"class":258},[100,61259,61260],{"class":110},"\"active\"",[100,61262,56868],{"class":258},[100,61264,29],{"class":52854},[100,61266,52861],{"class":258},[100,61268,61269,61271,61273,61275,61277],{"class":102,"line":34230},[100,61270,56856],{"class":258},[100,61272,29],{"class":52854},[100,61274,56868],{"class":258},[100,61276,29],{"class":52854},[100,61278,52861],{"class":258},[100,61280,61281,61283,61285,61287,61289],{"class":102,"line":34250},[100,61282,56856],{"class":258},[100,61284,29],{"class":52854},[100,61286,56868],{"class":258},[100,61288,29],{"class":52854},[100,61290,52861],{"class":258},[100,61292,61293,61295,61297,61299,61301],{"class":102,"line":34256},[100,61294,56856],{"class":258},[100,61296,29],{"class":52854},[100,61298,56868],{"class":258},[100,61300,29],{"class":52854},[100,61302,52861],{"class":258},[100,61304,61305,61307,61309,61311,61313],{"class":102,"line":34267},[100,61306,56856],{"class":258},[100,61308,29],{"class":52854},[100,61310,56868],{"class":258},[100,61312,29],{"class":52854},[100,61314,52861],{"class":258},[100,61316,61317,61319,61321,61323,61325],{"class":102,"line":34273},[100,61318,56856],{"class":258},[100,61320,29],{"class":52854},[100,61322,56868],{"class":258},[100,61324,29],{"class":52854},[100,61326,52861],{"class":258},[100,61328,61329,61331,61333,61335,61337],{"class":102,"line":34279},[100,61330,56856],{"class":258},[100,61332,29],{"class":52854},[100,61334,56868],{"class":258},[100,61336,29],{"class":52854},[100,61338,52861],{"class":258},[100,61340,61341,61343,61345,61347,61349],{"class":102,"line":34285},[100,61342,56856],{"class":258},[100,61344,29],{"class":52854},[100,61346,56868],{"class":258},[100,61348,29],{"class":52854},[100,61350,52861],{"class":258},[100,61352,61353,61355,61357],{"class":102,"line":34291},[100,61354,56961],{"class":258},[100,61356,2773],{"class":52854},[100,61358,52861],{"class":258},[100,61360,61361,61363,61365,61367,61369,61372],{"class":102,"line":34297},[100,61362,56788],{"class":258},[100,61364,53165],{"class":52854},[100,61366,55040],{"class":106},[100,61368,472],{"class":258},[100,61370,61371],{"class":110},"\"toggle\"",[100,61373,52861],{"class":258},[100,61375,61376,61378,61380,61382,61384,61387,61389,61392,61394,61396],{"class":102,"line":34303},[100,61377,56856],{"class":258},[100,61379,55441],{"class":52854},[100,61381,55040],{"class":106},[100,61383,472],{"class":258},[100,61385,61386],{"class":110},"\"prev\"",[100,61388,2726],{"class":258},[100,61390,61391],{"class":117},"&lt;",[100,61393,53339],{"class":258},[100,61395,55441],{"class":52854},[100,61397,52861],{"class":258},[100,61399,61400,61402,61404,61406,61408,61411,61413,61416,61418,61420],{"class":102,"line":34309},[100,61401,56856],{"class":258},[100,61403,55441],{"class":52854},[100,61405,55040],{"class":106},[100,61407,472],{"class":258},[100,61409,61410],{"class":110},"\"next\"",[100,61412,2726],{"class":258},[100,61414,61415],{"class":117},"&gt;",[100,61417,53339],{"class":258},[100,61419,55441],{"class":52854},[100,61421,52861],{"class":258},[100,61423,61424,61426,61428],{"class":102,"line":34329},[100,61425,56961],{"class":258},[100,61427,53165],{"class":52854},[100,61429,52861],{"class":258},[100,61431,61432,61434,61436],{"class":102,"line":34335},[100,61433,53330],{"class":258},[100,61435,53165],{"class":52854},[100,61437,52861],{"class":258},[100,61439,61440,61442,61444],{"class":102,"line":34351},[100,61441,53971],{"class":258},[100,61443,53165],{"class":52854},[100,61445,52861],{"class":258},[100,61447,61448,61450,61452],{"class":102,"line":34357},[100,61449,53698],{"class":258},[100,61451,53367],{"class":52854},[100,61453,52861],{"class":258},[100,61455,61456],{"class":102,"line":34371},[100,61457,61458],{"class":258},"    \u002F\u002F 1. 初始数据\n",[100,61460,61461],{"class":102,"line":34377},[100,61462,61463],{"class":258},"    const data = [\n",[100,61465,61466],{"class":102,"line":34392},[100,61467,61468],{"class":258},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[100,61470,61471],{"class":102,"line":34398},[100,61472,61473],{"class":258},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[100,61475,61476],{"class":102,"line":34407},[100,61477,61478],{"class":258},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[100,61480,61481],{"class":102,"line":34413},[100,61482,61483],{"class":258},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[100,61485,61486],{"class":102,"line":34422},[100,61487,61488],{"class":258},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[100,61490,61491],{"class":102,"line":34428},[100,61492,61493],{"class":258},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[100,61495,61496],{"class":102,"line":34434},[100,61497,61498],{"class":258},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[100,61500,61501],{"class":102,"line":34443},[100,61502,61503],{"class":258},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[100,61505,61506],{"class":102,"line":34449},[100,61507,54663],{"class":258},[100,61509,61510],{"class":102,"line":34460},[100,61511,61512],{"class":258},"    \u002F\u002F 获取元素\n",[100,61514,61515],{"class":102,"line":34466},[100,61516,61517],{"class":258},"    const img = document.querySelector('.slider-wrapper img')\n",[100,61519,61520],{"class":102,"line":34485},[100,61521,61522],{"class":258},"    const p = document.querySelector('.slider-footer p')\n",[100,61524,61525],{"class":102,"line":34491},[100,61526,61527],{"class":258},"    const footer = document.querySelector('.slider-footer')\n",[100,61529,61530],{"class":102,"line":34502},[100,61531,61532],{"class":258},"    \u002F\u002F 1. 右按钮业务\n",[100,61534,61535],{"class":102,"line":34508},[100,61536,61537],{"class":258},"    \u002F\u002F 1.1 获取右侧按钮 \n",[100,61539,61540],{"class":102,"line":34528},[100,61541,61542],{"class":258},"    const next = document.querySelector('.next')\n",[100,61544,61545],{"class":102,"line":34544},[100,61546,61547],{"class":258},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[100,61549,61550],{"class":102,"line":34550},[100,61551,61552],{"class":258},"    \u002F\u002F 1.2 注册点击事件\n",[100,61554,61555],{"class":102,"line":34564},[100,61556,570],{"emptyLinePlaceholder":569},[100,61558,61559],{"class":102,"line":34570},[100,61560,61561],{"class":258},"    next.addEventListener('click', function () {\n",[100,61563,61564],{"class":102,"line":34576},[100,61565,61566],{"class":258},"      \u002F\u002F console.log(11)\n",[100,61568,61569],{"class":102,"line":34587},[100,61570,61571],{"class":258},"      i++\n",[100,61573,61574],{"class":102,"line":34593},[100,61575,61576],{"class":258},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[100,61578,61579],{"class":102,"line":34599},[100,61580,61581],{"class":258},"      \u002F\u002F if (i >= 8) {\n",[100,61583,61584],{"class":102,"line":34609},[100,61585,61586],{"class":258},"      \u002F\u002F   i = 0\n",[100,61588,61589],{"class":102,"line":34615},[100,61590,61591],{"class":258},"      \u002F\u002F }\n",[100,61593,61594],{"class":102,"line":34626},[100,61595,61596],{"class":258},"      i = i >= data.length ? 0 : i\n",[100,61598,61599],{"class":102,"line":34632},[100,61600,61601],{"class":258},"      \u002F\u002F 1.3 得到对应的对象\n",[100,61603,61604],{"class":102,"line":34642},[100,61605,61606],{"class":258},"      \u002F\u002F console.log(data[i])\n",[100,61608,61609],{"class":102,"line":34647},[100,61610,61611],{"class":258},"      \u002F\u002F 调用函数\n",[100,61613,61614],{"class":102,"line":34653},[100,61615,61616],{"class":258},"      toggle()\n",[100,61618,61619],{"class":102,"line":34702},[100,61620,35016],{"class":258},[100,61622,61623],{"class":102,"line":34749},[100,61624,570],{"emptyLinePlaceholder":569},[100,61626,61627],{"class":102,"line":34754},[100,61628,61629],{"class":258},"    \u002F\u002F 2. 左侧按钮业务\n",[100,61631,61632],{"class":102,"line":34760},[100,61633,61634],{"class":258},"    \u002F\u002F 2.1 获取左侧按钮 \n",[100,61636,61637],{"class":102,"line":34779},[100,61638,61639],{"class":258},"    const prev = document.querySelector('.prev')\n",[100,61641,61642],{"class":102,"line":34785},[100,61643,61552],{"class":258},[100,61645,61646],{"class":102,"line":34805},[100,61647,61648],{"class":258},"    prev.addEventListener('click', function () {\n",[100,61650,61651],{"class":102,"line":34811},[100,61652,61653],{"class":258},"      i--\n",[100,61655,61656],{"class":102,"line":34817},[100,61657,61658],{"class":258},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[100,61660,61661],{"class":102,"line":34827},[100,61662,61663],{"class":258},"      \u002F\u002F if (i \u003C 0) {\n",[100,61665,61666],{"class":102,"line":34832},[100,61667,61668],{"class":258},"      \u002F\u002F   i = 7\n",[100,61670,61671],{"class":102,"line":34838},[100,61672,61591],{"class":258},[100,61674,61675],{"class":102,"line":34854},[100,61676,61677],{"class":258},"      i = i \u003C 0 ? data.length - 1 : i\n",[100,61679,61680],{"class":102,"line":34899},[100,61681,61601],{"class":258},[100,61683,61684],{"class":102,"line":34905},[100,61685,61606],{"class":258},[100,61687,61688],{"class":102,"line":34911},[100,61689,61611],{"class":258},[100,61691,61692],{"class":102,"line":34917},[100,61693,61616],{"class":258},[100,61695,61696],{"class":102,"line":34928},[100,61697,35016],{"class":258},[100,61699,61700],{"class":102,"line":34934},[100,61701,570],{"emptyLinePlaceholder":569},[100,61703,61704],{"class":102,"line":34940},[100,61705,61706],{"class":258},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[100,61708,61709],{"class":102,"line":34946},[100,61710,61711],{"class":258},"    function toggle() {\n",[100,61713,61714],{"class":102,"line":34963},[100,61715,61716],{"class":258},"      \u002F\u002F 1.4 渲染对应的数据\n",[100,61718,61719],{"class":102,"line":34977},[100,61720,61721],{"class":258},"      img.src = data[i].url\n",[100,61723,61724],{"class":102,"line":34986},[100,61725,61726],{"class":258},"      p.innerHTML = data[i].title\n",[100,61728,61729],{"class":102,"line":34995},[100,61730,61731],{"class":258},"      footer.style.backgroundColor = data[i].color\n",[100,61733,61734],{"class":102,"line":35004},[100,61735,61736],{"class":258},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[100,61738,61739],{"class":102,"line":35013},[100,61740,61741],{"class":258},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[100,61743,61744],{"class":102,"line":35019},[100,61745,61746],{"class":258},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[100,61748,61749],{"class":102,"line":35025},[100,61750,3798],{"class":258},[100,61752,61753],{"class":102,"line":35033},[100,61754,570],{"emptyLinePlaceholder":569},[100,61756,61757],{"class":102,"line":35038},[100,61758,61759],{"class":258},"    \u002F\u002F 3. 自动播放模块\n",[100,61761,61762],{"class":102,"line":35044},[100,61763,61764],{"class":258},"    let timerId = setInterval(function () {\n",[100,61766,61767],{"class":102,"line":35055},[100,61768,61769],{"class":258},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[100,61771,61772],{"class":102,"line":35061},[100,61773,61774],{"class":258},"      next.click()\n",[100,61776,61777],{"class":102,"line":35081},[100,61778,61779],{"class":258},"    }, 1000)\n",[100,61781,61782],{"class":102,"line":35087},[100,61783,570],{"emptyLinePlaceholder":569},[100,61785,61786],{"class":102,"line":35093},[100,61787,61788],{"class":258},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[100,61790,61791],{"class":102,"line":35099},[100,61792,61793],{"class":258},"    const slider = document.querySelector('.slider')\n",[100,61795,61796],{"class":102,"line":35116},[100,61797,61798],{"class":258},"    \u002F\u002F 注册事件\n",[100,61800,61801],{"class":102,"line":35122},[100,61802,61803],{"class":258},"    slider.addEventListener('mouseenter', function () {\n",[100,61805,61806],{"class":102,"line":35128},[100,61807,61808],{"class":258},"      \u002F\u002F 停止定时器\n",[100,61810,61811],{"class":102,"line":35134},[100,61812,61813],{"class":258},"      clearInterval(timerId)\n",[100,61815,61816],{"class":102,"line":35140},[100,61817,35016],{"class":258},[100,61819,61820],{"class":102,"line":35146},[100,61821,570],{"emptyLinePlaceholder":569},[100,61823,61824],{"class":102,"line":35173},[100,61825,61826],{"class":258},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[100,61828,61829],{"class":102,"line":35197},[100,61830,61798],{"class":258},[100,61832,61833],{"class":102,"line":35203},[100,61834,61835],{"class":258},"    slider.addEventListener('mouseleave', function () {\n",[100,61837,61838],{"class":102,"line":35209},[100,61839,61808],{"class":258},[100,61841,61842],{"class":102,"line":35215},[100,61843,61844],{"class":258},"      if (timerId) clearInterval(timerId)\n",[100,61846,61847],{"class":102,"line":35226},[100,61848,61849],{"class":258},"      \u002F\u002F 开启定时器\n",[100,61851,61852],{"class":102,"line":35237},[100,61853,61854],{"class":258},"      timerId = setInterval(function () {\n",[100,61856,61857],{"class":102,"line":35243},[100,61858,61859],{"class":258},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[100,61861,61862],{"class":102,"line":35260},[100,61863,61864],{"class":258},"        next.click()\n",[100,61866,61867],{"class":102,"line":35283},[100,61868,61869],{"class":258},"      }, 1000)\n",[100,61871,61872],{"class":102,"line":35306},[100,61873,35016],{"class":258},[100,61875,61876,61878,61880],{"class":102,"line":35312},[100,61877,53971],{"class":258},[100,61879,53367],{"class":52854},[100,61881,52861],{"class":258},[100,61883,61884,61886,61888],{"class":102,"line":35317},[100,61885,53339],{"class":258},[100,61887,53354],{"class":52854},[100,61889,52861],{"class":258},[100,61891,61892],{"class":102,"line":35326},[100,61893,570],{"emptyLinePlaceholder":569},[100,61895,61896,61898,61900],{"class":102,"line":35336},[100,61897,53339],{"class":258},[100,61899,52189],{"class":52854},[100,61901,52861],{"class":258},[23579,61903,61905],{"id":61904},"_3252-焦点事件","3.2.5.2 焦点事件",[19,61907,61908],{},"小米搜索框案例：",[73,61910,61912],{"className":52187,"code":61911,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n    \u003Cmeta charset=\"UTF-8\">\n    \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    \u003Ctitle>Document\u003C\u002Ftitle>\n    \u003Cstyle>\n        * {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n        }\n\n        ul {\n\n            list-style: none;\n        }\n\n        .mi {\n            position: relative;\n            width: 223px;\n            margin: 100px auto;\n        }\n\n        .mi input {\n            width: 223px;\n            height: 48px;\n            padding: 0 10px;\n            font-size: 14px;\n            line-height: 48px;\n            border: 1px solid #e0e0e0;\n            outline: none;\n        }\n\n        .mi .search {\n            border: 1px solid #ff6700;\n        }\n\n        .result-list {\n            display: none;\n            position: absolute;\n            left: 0;\n            top: 48px;\n            width: 223px;\n            border: 1px solid #ff6700;\n            border-top: 0;\n            background: #fff;\n        }\n\n        .result-list a {\n            display: block;\n            padding: 6px 15px;\n            font-size: 12px;\n            color: #424242;\n            text-decoration: none;\n        }\n\n        .result-list a:hover {\n            background-color: #eee;\n        }\n    \u003C\u002Fstyle>\n\n\u003C\u002Fhead>\n\n\u003Cbody>\n    \u003Cdiv class=\"mi\">\n        \u003Cinput type=\"search\" placeholder=\"小米笔记本\">\n        \u003Cul class=\"result-list\">\n            \u003Cli>\u003Ca href=\"#\">全部商品\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">小米11\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">小米10S\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">小米笔记本\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">小米手机\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">黑鲨4\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">空调\u003C\u002Fa>\u003C\u002Fli>\n        \u003C\u002Ful>\n    \u003C\u002Fdiv>\n    \u003Cscript>\n        \u002F\u002F 1. 获取元素\n        const input = document.querySelector('[type=search]')\n        const ul = document.querySelector('.result-list')\n        \u002F\u002F console.log(input)\n        \u002F\u002F 2. 监听事件 获得焦点\n        input.addEventListener('focus', function () {\n            \u002F\u002F ul显示\n            ul.style.display = 'block'\n            \u002F\u002F 添加一个带有颜色边框的类名\n            input.classList.add('search')\n        })\n        \u002F\u002F 3. 监听事件 失去焦点\n        input.addEventListener('blur', function () {\n            ul.style.display = 'none'\n            input.classList.remove('search')\n        })\n    \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,61913,61914,61924,61938,61942,61950,61964,61984,62004,62016,62024,62030,62040,62050,62062,62066,62070,62077,62081,62092,62096,62100,62107,62118,62131,62145,62149,62153,62162,62174,62186,62200,62213,62226,62244,62255,62259,62263,62272,62289,62293,62297,62304,62314,62324,62335,62348,62360,62376,62387,62399,62403,62407,62415,62426,62443,62455,62467,62478,62482,62486,62497,62508,62512,62520,62524,62532,62536,62544,62559,62582,62597,62628,62655,62682,62709,62736,62763,62790,62799,62807,62815,62820,62840,62860,62865,62870,62888,62893,62903,62908,62922,62927,62932,62949,62958,62970,62974,62982,62990,62994],{"__ignoreMap":79},[100,61915,61916,61918,61920,61922],{"class":102,"line":103},[100,61917,52851],{"class":258},[100,61919,52855],{"class":52854},[100,61921,52858],{"class":106},[100,61923,52861],{"class":258},[100,61925,61926,61928,61930,61932,61934,61936],{"class":102,"line":188},[100,61927,2676],{"class":258},[100,61929,52189],{"class":52854},[100,61931,52870],{"class":106},[100,61933,472],{"class":258},[100,61935,52875],{"class":110},[100,61937,52861],{"class":258},[100,61939,61940],{"class":102,"line":199},[100,61941,570],{"emptyLinePlaceholder":569},[100,61943,61944,61946,61948],{"class":102,"line":532},[100,61945,2676],{"class":258},[100,61947,52888],{"class":52854},[100,61949,52861],{"class":258},[100,61951,61952,61954,61956,61958,61960,61962],{"class":102,"line":577},[100,61953,52895],{"class":258},[100,61955,52898],{"class":52854},[100,61957,52901],{"class":106},[100,61959,472],{"class":258},[100,61961,52906],{"class":110},[100,61963,52861],{"class":258},[100,61965,61966,61968,61970,61972,61974,61976,61978,61980,61982],{"class":102,"line":589},[100,61967,52895],{"class":258},[100,61969,52898],{"class":52854},[100,61971,52917],{"class":106},[100,61973,472],{"class":258},[100,61975,52922],{"class":110},[100,61977,52925],{"class":106},[100,61979,472],{"class":258},[100,61981,52930],{"class":110},[100,61983,52861],{"class":258},[100,61985,61986,61988,61990,61992,61994,61996,61998,62000,62002],{"class":102,"line":595},[100,61987,52895],{"class":258},[100,61989,52898],{"class":52854},[100,61991,16501],{"class":106},[100,61993,472],{"class":258},[100,61995,52945],{"class":110},[100,61997,52925],{"class":106},[100,61999,472],{"class":258},[100,62001,52952],{"class":110},[100,62003,52861],{"class":258},[100,62005,62006,62008,62010,62012,62014],{"class":102,"line":601},[100,62007,52895],{"class":258},[100,62009,52961],{"class":52854},[100,62011,52964],{"class":258},[100,62013,52961],{"class":52854},[100,62015,52861],{"class":258},[100,62017,62018,62020,62022],{"class":102,"line":606},[100,62019,52895],{"class":258},[100,62021,1677],{"class":52854},[100,62023,52861],{"class":258},[100,62025,62026,62028],{"class":102,"line":612},[100,62027,52981],{"class":52854},[100,62029,17153],{"class":258},[100,62031,62032,62034,62036,62038],{"class":102,"line":618},[100,62033,52988],{"class":117},[100,62035,52991],{"class":258},[100,62037,1366],{"class":117},[100,62039,2927],{"class":258},[100,62041,62042,62044,62046,62048],{"class":102,"line":623},[100,62043,53000],{"class":117},[100,62045,52991],{"class":258},[100,62047,1366],{"class":117},[100,62049,2927],{"class":258},[100,62051,62052,62055,62057,62060],{"class":102,"line":629},[100,62053,62054],{"class":117},"            box-sizing",[100,62056,52991],{"class":258},[100,62058,62059],{"class":117},"border-box",[100,62061,2927],{"class":258},[100,62063,62064],{"class":102,"line":635},[100,62065,4138],{"class":258},[100,62067,62068],{"class":102,"line":641},[100,62069,570],{"emptyLinePlaceholder":569},[100,62071,62072,62075],{"class":102,"line":647},[100,62073,62074],{"class":52854},"        ul",[100,62076,17153],{"class":258},[100,62078,62079],{"class":102,"line":653},[100,62080,570],{"emptyLinePlaceholder":569},[100,62082,62083,62086,62088,62090],{"class":102,"line":659},[100,62084,62085],{"class":117},"            list-style",[100,62087,52991],{"class":258},[100,62089,56291],{"class":117},[100,62091,2927],{"class":258},[100,62093,62094],{"class":102,"line":665},[100,62095,4138],{"class":258},[100,62097,62098],{"class":102,"line":670},[100,62099,570],{"emptyLinePlaceholder":569},[100,62101,62102,62105],{"class":102,"line":675},[100,62103,62104],{"class":106},"        .mi",[100,62106,17153],{"class":258},[100,62108,62109,62112,62114,62116],{"class":102,"line":699},[100,62110,62111],{"class":117},"            position",[100,62113,52991],{"class":258},[100,62115,56318],{"class":117},[100,62117,2927],{"class":258},[100,62119,62120,62122,62124,62127,62129],{"class":102,"line":708},[100,62121,53038],{"class":117},[100,62123,52991],{"class":258},[100,62125,62126],{"class":117},"223",[100,62128,53046],{"class":471},[100,62130,2927],{"class":258},[100,62132,62133,62135,62137,62139,62141,62143],{"class":102,"line":722},[100,62134,52988],{"class":117},[100,62136,52991],{"class":258},[100,62138,2078],{"class":117},[100,62140,53046],{"class":471},[100,62142,53110],{"class":117},[100,62144,2927],{"class":258},[100,62146,62147],{"class":102,"line":735},[100,62148,4138],{"class":258},[100,62150,62151],{"class":102,"line":754},[100,62152,570],{"emptyLinePlaceholder":569},[100,62154,62155,62157,62160],{"class":102,"line":771},[100,62156,62104],{"class":106},[100,62158,62159],{"class":52854}," input",[100,62161,17153],{"class":258},[100,62163,62164,62166,62168,62170,62172],{"class":102,"line":776},[100,62165,53038],{"class":117},[100,62167,52991],{"class":258},[100,62169,62126],{"class":117},[100,62171,53046],{"class":471},[100,62173,2927],{"class":258},[100,62175,62176,62178,62180,62182,62184],{"class":102,"line":781},[100,62177,53053],{"class":117},[100,62179,52991],{"class":258},[100,62181,2374],{"class":117},[100,62183,53046],{"class":471},[100,62185,2927],{"class":258},[100,62187,62188,62190,62192,62194,62196,62198],{"class":102,"line":796},[100,62189,53000],{"class":117},[100,62191,52991],{"class":258},[100,62193,1366],{"class":117},[100,62195,3649],{"class":117},[100,62197,53046],{"class":471},[100,62199,2927],{"class":258},[100,62201,62202,62205,62207,62209,62211],{"class":102,"line":812},[100,62203,62204],{"class":117},"            font-size",[100,62206,52991],{"class":258},[100,62208,2316],{"class":117},[100,62210,53046],{"class":471},[100,62212,2927],{"class":258},[100,62214,62215,62218,62220,62222,62224],{"class":102,"line":823},[100,62216,62217],{"class":117},"            line-height",[100,62219,52991],{"class":258},[100,62221,2374],{"class":117},[100,62223,53046],{"class":471},[100,62225,2927],{"class":258},[100,62227,62228,62231,62233,62235,62237,62239,62242],{"class":102,"line":828},[100,62229,62230],{"class":117},"            border",[100,62232,52991],{"class":258},[100,62234,1985],{"class":117},[100,62236,53046],{"class":471},[100,62238,53075],{"class":117},[100,62240,62241],{"class":117}," #e0e0e0",[100,62243,2927],{"class":258},[100,62245,62246,62249,62251,62253],{"class":102,"line":840},[100,62247,62248],{"class":117},"            outline",[100,62250,52991],{"class":258},[100,62252,56291],{"class":117},[100,62254,2927],{"class":258},[100,62256,62257],{"class":102,"line":845},[100,62258,4138],{"class":258},[100,62260,62261],{"class":102,"line":868},[100,62262,570],{"emptyLinePlaceholder":569},[100,62264,62265,62267,62270],{"class":102,"line":874},[100,62266,62104],{"class":106},[100,62268,62269],{"class":106}," .search",[100,62271,17153],{"class":258},[100,62273,62274,62276,62278,62280,62282,62284,62287],{"class":102,"line":879},[100,62275,62230],{"class":117},[100,62277,52991],{"class":258},[100,62279,1985],{"class":117},[100,62281,53046],{"class":471},[100,62283,53075],{"class":117},[100,62285,62286],{"class":117}," #ff6700",[100,62288,2927],{"class":258},[100,62290,62291],{"class":102,"line":889},[100,62292,4138],{"class":258},[100,62294,62295],{"class":102,"line":894},[100,62296,570],{"emptyLinePlaceholder":569},[100,62298,62299,62302],{"class":102,"line":900},[100,62300,62301],{"class":106},"        .result-list",[100,62303,17153],{"class":258},[100,62305,62306,62308,62310,62312],{"class":102,"line":910},[100,62307,53026],{"class":117},[100,62309,52991],{"class":258},[100,62311,56291],{"class":117},[100,62313,2927],{"class":258},[100,62315,62316,62318,62320,62322],{"class":102,"line":915},[100,62317,62111],{"class":117},[100,62319,52991],{"class":258},[100,62321,56385],{"class":117},[100,62323,2927],{"class":258},[100,62325,62326,62329,62331,62333],{"class":102,"line":929},[100,62327,62328],{"class":117},"            left",[100,62330,52991],{"class":258},[100,62332,1366],{"class":117},[100,62334,2927],{"class":258},[100,62336,62337,62340,62342,62344,62346],{"class":102,"line":935},[100,62338,62339],{"class":117},"            top",[100,62341,52991],{"class":258},[100,62343,2374],{"class":117},[100,62345,53046],{"class":471},[100,62347,2927],{"class":258},[100,62349,62350,62352,62354,62356,62358],{"class":102,"line":945},[100,62351,53038],{"class":117},[100,62353,52991],{"class":258},[100,62355,62126],{"class":117},[100,62357,53046],{"class":471},[100,62359,2927],{"class":258},[100,62361,62362,62364,62366,62368,62370,62372,62374],{"class":102,"line":950},[100,62363,62230],{"class":117},[100,62365,52991],{"class":258},[100,62367,1985],{"class":117},[100,62369,53046],{"class":471},[100,62371,53075],{"class":117},[100,62373,62286],{"class":117},[100,62375,2927],{"class":258},[100,62377,62378,62381,62383,62385],{"class":102,"line":955},[100,62379,62380],{"class":117},"            border-top",[100,62382,52991],{"class":258},[100,62384,1366],{"class":117},[100,62386,2927],{"class":258},[100,62388,62389,62392,62394,62397],{"class":102,"line":972},[100,62390,62391],{"class":117},"            background",[100,62393,52991],{"class":258},[100,62395,62396],{"class":117},"#fff",[100,62398,2927],{"class":258},[100,62400,62401],{"class":102,"line":11370},[100,62402,4138],{"class":258},[100,62404,62405],{"class":102,"line":11375},[100,62406,570],{"emptyLinePlaceholder":569},[100,62408,62409,62411,62413],{"class":102,"line":11380},[100,62410,62301],{"class":106},[100,62412,3031],{"class":52854},[100,62414,17153],{"class":258},[100,62416,62417,62419,62421,62424],{"class":102,"line":11385},[100,62418,53026],{"class":117},[100,62420,52991],{"class":258},[100,62422,62423],{"class":117},"block",[100,62425,2927],{"class":258},[100,62427,62428,62430,62432,62434,62436,62439,62441],{"class":102,"line":11394},[100,62429,53000],{"class":117},[100,62431,52991],{"class":258},[100,62433,2111],{"class":117},[100,62435,53046],{"class":471},[100,62437,62438],{"class":117}," 15",[100,62440,53046],{"class":471},[100,62442,2927],{"class":258},[100,62444,62445,62447,62449,62451,62453],{"class":102,"line":11399},[100,62446,62204],{"class":117},[100,62448,52991],{"class":258},[100,62450,2265],{"class":117},[100,62452,53046],{"class":471},[100,62454,2927],{"class":258},[100,62456,62457,62460,62462,62465],{"class":102,"line":11405},[100,62458,62459],{"class":117},"            color",[100,62461,52991],{"class":258},[100,62463,62464],{"class":117},"#424242",[100,62466,2927],{"class":258},[100,62468,62469,62472,62474,62476],{"class":102,"line":11426},[100,62470,62471],{"class":117},"            text-decoration",[100,62473,52991],{"class":258},[100,62475,56291],{"class":117},[100,62477,2927],{"class":258},[100,62479,62480],{"class":102,"line":11432},[100,62481,4138],{"class":258},[100,62483,62484],{"class":102,"line":11446},[100,62485,570],{"emptyLinePlaceholder":569},[100,62487,62488,62490,62492,62495],{"class":102,"line":11452},[100,62489,62301],{"class":106},[100,62491,3031],{"class":52854},[100,62493,62494],{"class":106},":hover",[100,62496,17153],{"class":258},[100,62498,62499,62501,62503,62506],{"class":102,"line":11479},[100,62500,53194],{"class":117},[100,62502,52991],{"class":258},[100,62504,62505],{"class":117},"#eee",[100,62507,2927],{"class":258},[100,62509,62510],{"class":102,"line":11488},[100,62511,4138],{"class":258},[100,62513,62514,62516,62518],{"class":102,"line":11494},[100,62515,53330],{"class":258},[100,62517,1677],{"class":52854},[100,62519,52861],{"class":258},[100,62521,62522],{"class":102,"line":11502},[100,62523,570],{"emptyLinePlaceholder":569},[100,62525,62526,62528,62530],{"class":102,"line":11507},[100,62527,53339],{"class":258},[100,62529,52888],{"class":52854},[100,62531,52861],{"class":258},[100,62533,62534],{"class":102,"line":18185},[100,62535,570],{"emptyLinePlaceholder":569},[100,62537,62538,62540,62542],{"class":102,"line":18191},[100,62539,2676],{"class":258},[100,62541,53354],{"class":52854},[100,62543,52861],{"class":258},[100,62545,62546,62548,62550,62552,62554,62557],{"class":102,"line":18214},[100,62547,52895],{"class":258},[100,62549,53165],{"class":52854},[100,62551,55040],{"class":106},[100,62553,472],{"class":258},[100,62555,62556],{"class":110},"\"mi\"",[100,62558,52861],{"class":258},[100,62560,62561,62563,62565,62567,62569,62572,62575,62577,62580],{"class":102,"line":18220},[100,62562,56856],{"class":258},[100,62564,55375],{"class":52854},[100,62566,55378],{"class":106},[100,62568,472],{"class":258},[100,62570,62571],{"class":110},"\"search\"",[100,62573,62574],{"class":106}," placeholder",[100,62576,472],{"class":258},[100,62578,62579],{"class":110},"\"小米笔记本\"",[100,62581,52861],{"class":258},[100,62583,62584,62586,62588,62590,62592,62595],{"class":102,"line":18243},[100,62585,56856],{"class":258},[100,62587,2773],{"class":52854},[100,62589,55040],{"class":106},[100,62591,472],{"class":258},[100,62593,62594],{"class":110},"\"result-list\"",[100,62596,52861],{"class":258},[100,62598,62599,62602,62604,62607,62609,62612,62614,62617,62620,62622,62624,62626],{"class":102,"line":18257},[100,62600,62601],{"class":258},"            \u003C",[100,62603,29],{"class":52854},[100,62605,62606],{"class":258},">\u003C",[100,62608,2006],{"class":52854},[100,62610,62611],{"class":106}," href",[100,62613,472],{"class":258},[100,62615,62616],{"class":110},"\"#\"",[100,62618,62619],{"class":258},">全部商品\u003C\u002F",[100,62621,2006],{"class":52854},[100,62623,56868],{"class":258},[100,62625,29],{"class":52854},[100,62627,52861],{"class":258},[100,62629,62630,62632,62634,62636,62638,62640,62642,62644,62647,62649,62651,62653],{"class":102,"line":18277},[100,62631,62601],{"class":258},[100,62633,29],{"class":52854},[100,62635,62606],{"class":258},[100,62637,2006],{"class":52854},[100,62639,62611],{"class":106},[100,62641,472],{"class":258},[100,62643,62616],{"class":110},[100,62645,62646],{"class":258},">小米11\u003C\u002F",[100,62648,2006],{"class":52854},[100,62650,56868],{"class":258},[100,62652,29],{"class":52854},[100,62654,52861],{"class":258},[100,62656,62657,62659,62661,62663,62665,62667,62669,62671,62674,62676,62678,62680],{"class":102,"line":18283},[100,62658,62601],{"class":258},[100,62660,29],{"class":52854},[100,62662,62606],{"class":258},[100,62664,2006],{"class":52854},[100,62666,62611],{"class":106},[100,62668,472],{"class":258},[100,62670,62616],{"class":110},[100,62672,62673],{"class":258},">小米10S\u003C\u002F",[100,62675,2006],{"class":52854},[100,62677,56868],{"class":258},[100,62679,29],{"class":52854},[100,62681,52861],{"class":258},[100,62683,62684,62686,62688,62690,62692,62694,62696,62698,62701,62703,62705,62707],{"class":102,"line":18294},[100,62685,62601],{"class":258},[100,62687,29],{"class":52854},[100,62689,62606],{"class":258},[100,62691,2006],{"class":52854},[100,62693,62611],{"class":106},[100,62695,472],{"class":258},[100,62697,62616],{"class":110},[100,62699,62700],{"class":258},">小米笔记本\u003C\u002F",[100,62702,2006],{"class":52854},[100,62704,56868],{"class":258},[100,62706,29],{"class":52854},[100,62708,52861],{"class":258},[100,62710,62711,62713,62715,62717,62719,62721,62723,62725,62728,62730,62732,62734],{"class":102,"line":18317},[100,62712,62601],{"class":258},[100,62714,29],{"class":52854},[100,62716,62606],{"class":258},[100,62718,2006],{"class":52854},[100,62720,62611],{"class":106},[100,62722,472],{"class":258},[100,62724,62616],{"class":110},[100,62726,62727],{"class":258},">小米手机\u003C\u002F",[100,62729,2006],{"class":52854},[100,62731,56868],{"class":258},[100,62733,29],{"class":52854},[100,62735,52861],{"class":258},[100,62737,62738,62740,62742,62744,62746,62748,62750,62752,62755,62757,62759,62761],{"class":102,"line":18339},[100,62739,62601],{"class":258},[100,62741,29],{"class":52854},[100,62743,62606],{"class":258},[100,62745,2006],{"class":52854},[100,62747,62611],{"class":106},[100,62749,472],{"class":258},[100,62751,62616],{"class":110},[100,62753,62754],{"class":258},">黑鲨4\u003C\u002F",[100,62756,2006],{"class":52854},[100,62758,56868],{"class":258},[100,62760,29],{"class":52854},[100,62762,52861],{"class":258},[100,62764,62765,62767,62769,62771,62773,62775,62777,62779,62782,62784,62786,62788],{"class":102,"line":18344},[100,62766,62601],{"class":258},[100,62768,29],{"class":52854},[100,62770,62606],{"class":258},[100,62772,2006],{"class":52854},[100,62774,62611],{"class":106},[100,62776,472],{"class":258},[100,62778,62616],{"class":110},[100,62780,62781],{"class":258},">空调\u003C\u002F",[100,62783,2006],{"class":52854},[100,62785,56868],{"class":258},[100,62787,29],{"class":52854},[100,62789,52861],{"class":258},[100,62791,62792,62795,62797],{"class":102,"line":18350},[100,62793,62794],{"class":258},"        \u003C\u002F",[100,62796,2773],{"class":52854},[100,62798,52861],{"class":258},[100,62800,62801,62803,62805],{"class":102,"line":18364},[100,62802,53330],{"class":258},[100,62804,53165],{"class":52854},[100,62806,52861],{"class":258},[100,62808,62809,62811,62813],{"class":102,"line":18377},[100,62810,52895],{"class":258},[100,62812,53367],{"class":52854},[100,62814,52861],{"class":258},[100,62816,62817],{"class":102,"line":18382},[100,62818,62819],{"class":1836},"        \u002F\u002F 1. 获取元素\n",[100,62821,62822,62825,62827,62829,62831,62833,62835,62838],{"class":102,"line":18396},[100,62823,62824],{"class":471},"        const",[100,62826,62159],{"class":117},[100,62828,583],{"class":471},[100,62830,55950],{"class":258},[100,62832,55953],{"class":106},[100,62834,713],{"class":258},[100,62836,62837],{"class":110},"'[type=search]'",[100,62839,809],{"class":258},[100,62841,62842,62844,62847,62849,62851,62853,62855,62858],{"class":102,"line":18401},[100,62843,62824],{"class":471},[100,62845,62846],{"class":117}," ul",[100,62848,583],{"class":471},[100,62850,55950],{"class":258},[100,62852,55953],{"class":106},[100,62854,713],{"class":258},[100,62856,62857],{"class":110},"'.result-list'",[100,62859,809],{"class":258},[100,62861,62862],{"class":102,"line":18407},[100,62863,62864],{"class":1836},"        \u002F\u002F console.log(input)\n",[100,62866,62867],{"class":102,"line":18412},[100,62868,62869],{"class":1836},"        \u002F\u002F 2. 监听事件 获得焦点\n",[100,62871,62872,62875,62877,62879,62882,62884,62886],{"class":102,"line":18426},[100,62873,62874],{"class":258},"        input.",[100,62876,59367],{"class":106},[100,62878,713],{"class":258},[100,62880,62881],{"class":110},"'focus'",[100,62883,14017],{"class":258},[100,62885,56003],{"class":471},[100,62887,56006],{"class":258},[100,62889,62890],{"class":102,"line":18431},[100,62891,62892],{"class":1836},"            \u002F\u002F ul显示\n",[100,62894,62895,62898,62900],{"class":102,"line":18436},[100,62896,62897],{"class":258},"            ul.style.display ",[100,62899,472],{"class":471},[100,62901,62902],{"class":110}," 'block'\n",[100,62904,62905],{"class":102,"line":18450},[100,62906,62907],{"class":1836},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[100,62909,62910,62913,62915,62917,62920],{"class":102,"line":18462},[100,62911,62912],{"class":258},"            input.classList.",[100,62914,6930],{"class":106},[100,62916,713],{"class":258},[100,62918,62919],{"class":110},"'search'",[100,62921,809],{"class":258},[100,62923,62924],{"class":102,"line":18467},[100,62925,62926],{"class":258},"        })\n",[100,62928,62929],{"class":102,"line":18480},[100,62930,62931],{"class":1836},"        \u002F\u002F 3. 监听事件 失去焦点\n",[100,62933,62934,62936,62938,62940,62943,62945,62947],{"class":102,"line":18485},[100,62935,62874],{"class":258},[100,62937,59367],{"class":106},[100,62939,713],{"class":258},[100,62941,62942],{"class":110},"'blur'",[100,62944,14017],{"class":258},[100,62946,56003],{"class":471},[100,62948,56006],{"class":258},[100,62950,62951,62953,62955],{"class":102,"line":18490},[100,62952,62897],{"class":258},[100,62954,472],{"class":471},[100,62956,62957],{"class":110}," 'none'\n",[100,62959,62960,62962,62964,62966,62968],{"class":102,"line":18495},[100,62961,62912],{"class":258},[100,62963,58560],{"class":106},[100,62965,713],{"class":258},[100,62967,62919],{"class":110},[100,62969,809],{"class":258},[100,62971,62972],{"class":102,"line":18508},[100,62973,62926],{"class":258},[100,62975,62976,62978,62980],{"class":102,"line":18513},[100,62977,53330],{"class":258},[100,62979,53367],{"class":52854},[100,62981,52861],{"class":258},[100,62983,62984,62986,62988],{"class":102,"line":34189},[100,62985,53339],{"class":258},[100,62987,53354],{"class":52854},[100,62989,52861],{"class":258},[100,62991,62992],{"class":102,"line":34195},[100,62993,570],{"emptyLinePlaceholder":569},[100,62995,62996,62998,63000],{"class":102,"line":34201},[100,62997,53339],{"class":258},[100,62999,52189],{"class":52854},[100,63001,52861],{"class":258},[23579,63003,63005],{"id":63004},"_3253-键盘事件","3.2.5.3 键盘事件",[19,63007,63008],{},"评论字数统计案例",[19,63010,63011],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,63013,63014],{},"牢记focus伪类选择器",[52898,63016],{"charSet":63017},"UTF-8",[52898,63019],{"name":63020,"content":63021},"viewport","width=device-width, initial-scale=1.0",[52961,63023,63024],{},"Document",[1677,63026,63027],{},"\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",[55375,63029],{"type":78},[2773,63031,63032,63035],{},[29,63033,63034],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[29,63036,63037],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[73,63039,63041],{"className":52187,"code":63040,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>评论回车发布\u003C\u002Ftitle>\n  \u003Cstyle>\n    .wrapper {\n      min-width: 400px;\n      max-width: 800px;\n      display: flex;\n      justify-content: flex-end;\n    }\n\n    .avatar {\n      width: 48px;\n      height: 48px;\n      border-radius: 50%;\n      overflow: hidden;\n      background: url(...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg) no-repeat center \u002F cover;\n      margin-right: 20px;\n    }\n\n    .wrapper textarea {\n      outline: none;\n      border-color: transparent;\n      resize: none;\n      background: #f5f5f5;\n      border-radius: 4px;\n      flex: 1;\n      padding: 10px;\n      transition: all 0.5s;\n      height: 30px;\n    }\n\n    .wrapper textarea:focus {\n      border-color: #e4e4e4;\n      background: #fff;\n      height: 50px;\n    }\n\n    .wrapper button {\n      background: #00aeec;\n      color: #fff;\n      border: none;\n      border-radius: 4px;\n      margin-left: 10px;\n      width: 70px;\n      cursor: pointer;\n    }\n\n    .wrapper .total {\n      margin-right: 80px;\n      color: #999;\n      margin-top: 5px;\n      opacity: 0;\n      transition: all 0.5s;\n    }\n\n    .list {\n      min-width: 400px;\n      max-width: 800px;\n      display: flex;\n    }\n\n    .list .item {\n      width: 100%;\n      display: flex;\n    }\n\n    .list .item .info {\n      flex: 1;\n      border-bottom: 1px dashed #e4e4e4;\n      padding-bottom: 10px;\n    }\n\n    .list .item p {\n      margin: 0;\n    }\n\n    .list .item .name {\n      color: #FB7299;\n      font-size: 14px;\n      font-weight: bold;\n    }\n\n    .list .item .text {\n      color: #333;\n      padding: 10px 0;\n    }\n\n    .list .item .time {\n      color: #999;\n      font-size: 12px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"wrapper\">\n    \u003Ci class=\"avatar\">\u003C\u002Fi>\n    \u003Ctextarea id=\"tx\" placeholder=\"发一条友善的评论\" rows=\"2\" maxlength=\"200\">\u003C\u002Ftextarea>\n    \u003Cbutton>发布\u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"wrapper\">\n    \u003Cspan class=\"total\">0\u002F200字\u003C\u002Fspan>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"list\">\n    \u003Cdiv class=\"item\" style=\"display: none;\">\n      \u003Ci class=\"avatar\">\u003C\u002Fi>\n      \u003Cdiv class=\"info\">\n        \u003Cp class=\"name\">清风徐来\u003C\u002Fp>\n        \u003Cp class=\"text\">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002Fp>\n        \u003Cp class=\"time\">2022-10-10 20:29:21\u003C\u002Fp>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const tx = document.querySelector('#tx')\n    const total = document.querySelector('.total')\n    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n    tx.addEventListener('focus', function () {\n      total.style.opacity = 1\n    })\n    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n    tx.addEventListener('blur', function () {\n      total.style.opacity = 0\n    })\n    \u002F\u002F 3. 检测用户输入\n    tx.addEventListener('input', function () {\n      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n      total.innerHTML = `${tx.value.length}\u002F200字`\n    })\n\n    \u002F\u002F const str = 'andy'\n    \u002F\u002F console.log(str.length)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,63042,63043,63053,63067,63071,63079,63093,63113,63133,63146,63154,63161,63174,63188,63198,63208,63212,63216,63223,63235,63247,63259,63271,63300,63313,63317,63321,63330,63341,63353,63364,63375,63387,63398,63410,63426,63438,63442,63446,63457,63468,63478,63490,63494,63498,63506,63517,63527,63538,63550,63563,63575,63587,63591,63595,63604,63616,63627,63640,63651,63665,63669,63673,63680,63692,63704,63714,63718,63722,63731,63743,63753,63757,63761,63772,63782,63801,63814,63818,63822,63832,63842,63846,63850,63861,63872,63884,63896,63900,63904,63915,63926,63940,63944,63948,63959,63969,63981,63985,63993,64001,64005,64013,64028,64047,64087,64100,64108,64122,64142,64150,64165,64188,64206,64221,64241,64261,64281,64289,64297,64305,64313,64333,64353,64358,64375,64384,64388,64393,64409,64417,64421,64426,64443,64448,64473,64477,64481,64486,64491,64499,64507,64511],{"__ignoreMap":79},[100,63044,63045,63047,63049,63051],{"class":102,"line":103},[100,63046,52851],{"class":258},[100,63048,52855],{"class":52854},[100,63050,52858],{"class":106},[100,63052,52861],{"class":258},[100,63054,63055,63057,63059,63061,63063,63065],{"class":102,"line":188},[100,63056,2676],{"class":258},[100,63058,52189],{"class":52854},[100,63060,52870],{"class":106},[100,63062,472],{"class":258},[100,63064,52875],{"class":110},[100,63066,52861],{"class":258},[100,63068,63069],{"class":102,"line":199},[100,63070,570],{"emptyLinePlaceholder":569},[100,63072,63073,63075,63077],{"class":102,"line":532},[100,63074,2676],{"class":258},[100,63076,52888],{"class":52854},[100,63078,52861],{"class":258},[100,63080,63081,63083,63085,63087,63089,63091],{"class":102,"line":577},[100,63082,53698],{"class":258},[100,63084,52898],{"class":52854},[100,63086,52901],{"class":106},[100,63088,472],{"class":258},[100,63090,52906],{"class":110},[100,63092,52861],{"class":258},[100,63094,63095,63097,63099,63101,63103,63105,63107,63109,63111],{"class":102,"line":589},[100,63096,53698],{"class":258},[100,63098,52898],{"class":52854},[100,63100,52917],{"class":106},[100,63102,472],{"class":258},[100,63104,52922],{"class":110},[100,63106,52925],{"class":106},[100,63108,472],{"class":258},[100,63110,52930],{"class":110},[100,63112,52861],{"class":258},[100,63114,63115,63117,63119,63121,63123,63125,63127,63129,63131],{"class":102,"line":595},[100,63116,53698],{"class":258},[100,63118,52898],{"class":52854},[100,63120,16501],{"class":106},[100,63122,472],{"class":258},[100,63124,52945],{"class":110},[100,63126,52925],{"class":106},[100,63128,472],{"class":258},[100,63130,52952],{"class":110},[100,63132,52861],{"class":258},[100,63134,63135,63137,63139,63142,63144],{"class":102,"line":601},[100,63136,53698],{"class":258},[100,63138,52961],{"class":52854},[100,63140,63141],{"class":258},">评论回车发布\u003C\u002F",[100,63143,52961],{"class":52854},[100,63145,52861],{"class":258},[100,63147,63148,63150,63152],{"class":102,"line":606},[100,63149,53698],{"class":258},[100,63151,1677],{"class":52854},[100,63153,52861],{"class":258},[100,63155,63156,63159],{"class":102,"line":612},[100,63157,63158],{"class":106},"    .wrapper",[100,63160,17153],{"class":258},[100,63162,63163,63166,63168,63170,63172],{"class":102,"line":618},[100,63164,63165],{"class":117},"      min-width",[100,63167,52991],{"class":258},[100,63169,5586],{"class":117},[100,63171,53046],{"class":471},[100,63173,2927],{"class":258},[100,63175,63176,63179,63181,63184,63186],{"class":102,"line":623},[100,63177,63178],{"class":117},"      max-width",[100,63180,52991],{"class":258},[100,63182,63183],{"class":117},"800",[100,63185,53046],{"class":471},[100,63187,2927],{"class":258},[100,63189,63190,63192,63194,63196],{"class":102,"line":629},[100,63191,56563],{"class":117},[100,63193,52991],{"class":258},[100,63195,53031],{"class":117},[100,63197,2927],{"class":258},[100,63199,63200,63202,63204,63206],{"class":102,"line":635},[100,63201,56574],{"class":117},[100,63203,52991],{"class":258},[100,63205,53134],{"class":117},[100,63207,2927],{"class":258},[100,63209,63210],{"class":102,"line":641},[100,63211,3798],{"class":258},[100,63213,63214],{"class":102,"line":647},[100,63215,570],{"emptyLinePlaceholder":569},[100,63217,63218,63221],{"class":102,"line":653},[100,63219,63220],{"class":106},"    .avatar",[100,63222,17153],{"class":258},[100,63224,63225,63227,63229,63231,63233],{"class":102,"line":659},[100,63226,56325],{"class":117},[100,63228,52991],{"class":258},[100,63230,2374],{"class":117},[100,63232,53046],{"class":471},[100,63234,2927],{"class":258},[100,63236,63237,63239,63241,63243,63245],{"class":102,"line":665},[100,63238,56339],{"class":117},[100,63240,52991],{"class":258},[100,63242,2374],{"class":117},[100,63244,53046],{"class":471},[100,63246,2927],{"class":258},[100,63248,63249,63251,63253,63255,63257],{"class":102,"line":670},[100,63250,56688],{"class":117},[100,63252,52991],{"class":258},[100,63254,862],{"class":117},[100,63256,2095],{"class":471},[100,63258,2927],{"class":258},[100,63260,63261,63264,63266,63269],{"class":102,"line":675},[100,63262,63263],{"class":117},"      overflow",[100,63265,52991],{"class":258},[100,63267,63268],{"class":117},"hidden",[100,63270,2927],{"class":258},[100,63272,63273,63276,63278,63281,63283,63286,63288,63291,63293,63295,63298],{"class":102,"line":699},[100,63274,63275],{"class":117},"      background",[100,63277,52991],{"class":258},[100,63279,63280],{"class":117},"url",[100,63282,713],{"class":258},[100,63284,63285],{"class":6812},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[100,63287,15295],{"class":258},[100,63289,63290],{"class":117},"no-repeat",[100,63292,18725],{"class":117},[100,63294,26554],{"class":258},[100,63296,63297],{"class":117},"cover",[100,63299,2927],{"class":258},[100,63301,63302,63305,63307,63309,63311],{"class":102,"line":708},[100,63303,63304],{"class":117},"      margin-right",[100,63306,52991],{"class":258},[100,63308,2466],{"class":117},[100,63310,53046],{"class":471},[100,63312,2927],{"class":258},[100,63314,63315],{"class":102,"line":722},[100,63316,3798],{"class":258},[100,63318,63319],{"class":102,"line":735},[100,63320,570],{"emptyLinePlaceholder":569},[100,63322,63323,63325,63328],{"class":102,"line":754},[100,63324,63158],{"class":106},[100,63326,63327],{"class":52854}," textarea",[100,63329,17153],{"class":258},[100,63331,63332,63335,63337,63339],{"class":102,"line":771},[100,63333,63334],{"class":117},"      outline",[100,63336,52991],{"class":258},[100,63338,56291],{"class":117},[100,63340,2927],{"class":258},[100,63342,63343,63346,63348,63351],{"class":102,"line":776},[100,63344,63345],{"class":117},"      border-color",[100,63347,52991],{"class":258},[100,63349,63350],{"class":117},"transparent",[100,63352,2927],{"class":258},[100,63354,63355,63358,63360,63362],{"class":102,"line":781},[100,63356,63357],{"class":117},"      resize",[100,63359,52991],{"class":258},[100,63361,56291],{"class":117},[100,63363,2927],{"class":258},[100,63365,63366,63368,63370,63373],{"class":102,"line":796},[100,63367,63275],{"class":117},[100,63369,52991],{"class":258},[100,63371,63372],{"class":117},"#f5f5f5",[100,63374,2927],{"class":258},[100,63376,63377,63379,63381,63383,63385],{"class":102,"line":812},[100,63378,56688],{"class":117},[100,63380,52991],{"class":258},[100,63382,748],{"class":117},[100,63384,53046],{"class":471},[100,63386,2927],{"class":258},[100,63388,63389,63392,63394,63396],{"class":102,"line":823},[100,63390,63391],{"class":117},"      flex",[100,63393,52991],{"class":258},[100,63395,1985],{"class":117},[100,63397,2927],{"class":258},[100,63399,63400,63402,63404,63406,63408],{"class":102,"line":828},[100,63401,56249],{"class":117},[100,63403,52991],{"class":258},[100,63405,2213],{"class":117},[100,63407,53046],{"class":471},[100,63409,2927],{"class":258},[100,63411,63412,63415,63417,63419,63422,63424],{"class":102,"line":840},[100,63413,63414],{"class":117},"      transition",[100,63416,52991],{"class":258},[100,63418,29693],{"class":117},[100,63420,63421],{"class":117}," 0.5",[100,63423,2461],{"class":471},[100,63425,2927],{"class":258},[100,63427,63428,63430,63432,63434,63436],{"class":102,"line":845},[100,63429,56339],{"class":117},[100,63431,52991],{"class":258},[100,63433,2717],{"class":117},[100,63435,53046],{"class":471},[100,63437,2927],{"class":258},[100,63439,63440],{"class":102,"line":868},[100,63441,3798],{"class":258},[100,63443,63444],{"class":102,"line":874},[100,63445,570],{"emptyLinePlaceholder":569},[100,63447,63448,63450,63452,63455],{"class":102,"line":879},[100,63449,63158],{"class":106},[100,63451,63327],{"class":52854},[100,63453,63454],{"class":106},":focus",[100,63456,17153],{"class":258},[100,63458,63459,63461,63463,63466],{"class":102,"line":889},[100,63460,63345],{"class":117},[100,63462,52991],{"class":258},[100,63464,63465],{"class":117},"#e4e4e4",[100,63467,2927],{"class":258},[100,63469,63470,63472,63474,63476],{"class":102,"line":894},[100,63471,63275],{"class":117},[100,63473,52991],{"class":258},[100,63475,62396],{"class":117},[100,63477,2927],{"class":258},[100,63479,63480,63482,63484,63486,63488],{"class":102,"line":900},[100,63481,56339],{"class":117},[100,63483,52991],{"class":258},[100,63485,862],{"class":117},[100,63487,53046],{"class":471},[100,63489,2927],{"class":258},[100,63491,63492],{"class":102,"line":910},[100,63493,3798],{"class":258},[100,63495,63496],{"class":102,"line":915},[100,63497,570],{"emptyLinePlaceholder":569},[100,63499,63500,63502,63504],{"class":102,"line":929},[100,63501,63158],{"class":106},[100,63503,59021],{"class":52854},[100,63505,17153],{"class":258},[100,63507,63508,63510,63512,63515],{"class":102,"line":935},[100,63509,63275],{"class":117},[100,63511,52991],{"class":258},[100,63513,63514],{"class":117},"#00aeec",[100,63516,2927],{"class":258},[100,63518,63519,63521,63523,63525],{"class":102,"line":945},[100,63520,58970],{"class":117},[100,63522,52991],{"class":258},[100,63524,62396],{"class":117},[100,63526,2927],{"class":258},[100,63528,63529,63532,63534,63536],{"class":102,"line":950},[100,63530,63531],{"class":117},"      border",[100,63533,52991],{"class":258},[100,63535,56291],{"class":117},[100,63537,2927],{"class":258},[100,63539,63540,63542,63544,63546,63548],{"class":102,"line":955},[100,63541,56688],{"class":117},[100,63543,52991],{"class":258},[100,63545,748],{"class":117},[100,63547,53046],{"class":471},[100,63549,2927],{"class":258},[100,63551,63552,63555,63557,63559,63561],{"class":102,"line":972},[100,63553,63554],{"class":117},"      margin-left",[100,63556,52991],{"class":258},[100,63558,2213],{"class":117},[100,63560,53046],{"class":471},[100,63562,2927],{"class":258},[100,63564,63565,63567,63569,63571,63573],{"class":102,"line":11370},[100,63566,56325],{"class":117},[100,63568,52991],{"class":258},[100,63570,2123],{"class":117},[100,63572,53046],{"class":471},[100,63574,2927],{"class":258},[100,63576,63577,63580,63582,63585],{"class":102,"line":11375},[100,63578,63579],{"class":117},"      cursor",[100,63581,52991],{"class":258},[100,63583,63584],{"class":117},"pointer",[100,63586,2927],{"class":258},[100,63588,63589],{"class":102,"line":11380},[100,63590,3798],{"class":258},[100,63592,63593],{"class":102,"line":11385},[100,63594,570],{"emptyLinePlaceholder":569},[100,63596,63597,63599,63602],{"class":102,"line":11394},[100,63598,63158],{"class":106},[100,63600,63601],{"class":106}," .total",[100,63603,17153],{"class":258},[100,63605,63606,63608,63610,63612,63614],{"class":102,"line":11399},[100,63607,63304],{"class":117},[100,63609,52991],{"class":258},[100,63611,2379],{"class":117},[100,63613,53046],{"class":471},[100,63615,2927],{"class":258},[100,63617,63618,63620,63622,63625],{"class":102,"line":11405},[100,63619,58970],{"class":117},[100,63621,52991],{"class":258},[100,63623,63624],{"class":117},"#999",[100,63626,2927],{"class":258},[100,63628,63629,63632,63634,63636,63638],{"class":102,"line":11426},[100,63630,63631],{"class":117},"      margin-top",[100,63633,52991],{"class":258},[100,63635,2086],{"class":117},[100,63637,53046],{"class":471},[100,63639,2927],{"class":258},[100,63641,63642,63645,63647,63649],{"class":102,"line":11432},[100,63643,63644],{"class":117},"      opacity",[100,63646,52991],{"class":258},[100,63648,1366],{"class":117},[100,63650,2927],{"class":258},[100,63652,63653,63655,63657,63659,63661,63663],{"class":102,"line":11446},[100,63654,63414],{"class":117},[100,63656,52991],{"class":258},[100,63658,29693],{"class":117},[100,63660,63421],{"class":117},[100,63662,2461],{"class":471},[100,63664,2927],{"class":258},[100,63666,63667],{"class":102,"line":11452},[100,63668,3798],{"class":258},[100,63670,63671],{"class":102,"line":11479},[100,63672,570],{"emptyLinePlaceholder":569},[100,63674,63675,63678],{"class":102,"line":11488},[100,63676,63677],{"class":106},"    .list",[100,63679,17153],{"class":258},[100,63681,63682,63684,63686,63688,63690],{"class":102,"line":11494},[100,63683,63165],{"class":117},[100,63685,52991],{"class":258},[100,63687,5586],{"class":117},[100,63689,53046],{"class":471},[100,63691,2927],{"class":258},[100,63693,63694,63696,63698,63700,63702],{"class":102,"line":11502},[100,63695,63178],{"class":117},[100,63697,52991],{"class":258},[100,63699,63183],{"class":117},[100,63701,53046],{"class":471},[100,63703,2927],{"class":258},[100,63705,63706,63708,63710,63712],{"class":102,"line":11507},[100,63707,56563],{"class":117},[100,63709,52991],{"class":258},[100,63711,53031],{"class":117},[100,63713,2927],{"class":258},[100,63715,63716],{"class":102,"line":18185},[100,63717,3798],{"class":258},[100,63719,63720],{"class":102,"line":18191},[100,63721,570],{"emptyLinePlaceholder":569},[100,63723,63724,63726,63729],{"class":102,"line":18214},[100,63725,63677],{"class":106},[100,63727,63728],{"class":106}," .item",[100,63730,17153],{"class":258},[100,63732,63733,63735,63737,63739,63741],{"class":102,"line":18220},[100,63734,56325],{"class":117},[100,63736,52991],{"class":258},[100,63738,2078],{"class":117},[100,63740,2095],{"class":471},[100,63742,2927],{"class":258},[100,63744,63745,63747,63749,63751],{"class":102,"line":18243},[100,63746,56563],{"class":117},[100,63748,52991],{"class":258},[100,63750,53031],{"class":117},[100,63752,2927],{"class":258},[100,63754,63755],{"class":102,"line":18257},[100,63756,3798],{"class":258},[100,63758,63759],{"class":102,"line":18277},[100,63760,570],{"emptyLinePlaceholder":569},[100,63762,63763,63765,63767,63770],{"class":102,"line":18283},[100,63764,63677],{"class":106},[100,63766,63728],{"class":106},[100,63768,63769],{"class":106}," .info",[100,63771,17153],{"class":258},[100,63773,63774,63776,63778,63780],{"class":102,"line":18294},[100,63775,63391],{"class":117},[100,63777,52991],{"class":258},[100,63779,1985],{"class":117},[100,63781,2927],{"class":258},[100,63783,63784,63787,63789,63791,63793,63796,63799],{"class":102,"line":18317},[100,63785,63786],{"class":117},"      border-bottom",[100,63788,52991],{"class":258},[100,63790,1985],{"class":117},[100,63792,53046],{"class":471},[100,63794,63795],{"class":117}," dashed",[100,63797,63798],{"class":117}," #e4e4e4",[100,63800,2927],{"class":258},[100,63802,63803,63806,63808,63810,63812],{"class":102,"line":18339},[100,63804,63805],{"class":117},"      padding-bottom",[100,63807,52991],{"class":258},[100,63809,2213],{"class":117},[100,63811,53046],{"class":471},[100,63813,2927],{"class":258},[100,63815,63816],{"class":102,"line":18344},[100,63817,3798],{"class":258},[100,63819,63820],{"class":102,"line":18350},[100,63821,570],{"emptyLinePlaceholder":569},[100,63823,63824,63826,63828,63830],{"class":102,"line":18364},[100,63825,63677],{"class":106},[100,63827,63728],{"class":106},[100,63829,8421],{"class":52854},[100,63831,17153],{"class":258},[100,63833,63834,63836,63838,63840],{"class":102,"line":18377},[100,63835,56260],{"class":117},[100,63837,52991],{"class":258},[100,63839,1366],{"class":117},[100,63841,2927],{"class":258},[100,63843,63844],{"class":102,"line":18382},[100,63845,3798],{"class":258},[100,63847,63848],{"class":102,"line":18396},[100,63849,570],{"emptyLinePlaceholder":569},[100,63851,63852,63854,63856,63859],{"class":102,"line":18401},[100,63853,63677],{"class":106},[100,63855,63728],{"class":106},[100,63857,63858],{"class":106}," .name",[100,63860,17153],{"class":258},[100,63862,63863,63865,63867,63870],{"class":102,"line":18407},[100,63864,58970],{"class":117},[100,63866,52991],{"class":258},[100,63868,63869],{"class":117},"#FB7299",[100,63871,2927],{"class":258},[100,63873,63874,63876,63878,63880,63882],{"class":102,"line":18412},[100,63875,56476],{"class":117},[100,63877,52991],{"class":258},[100,63879,2316],{"class":117},[100,63881,53046],{"class":471},[100,63883,2927],{"class":258},[100,63885,63886,63889,63891,63894],{"class":102,"line":18426},[100,63887,63888],{"class":117},"      font-weight",[100,63890,52991],{"class":258},[100,63892,63893],{"class":117},"bold",[100,63895,2927],{"class":258},[100,63897,63898],{"class":102,"line":18431},[100,63899,3798],{"class":258},[100,63901,63902],{"class":102,"line":18436},[100,63903,570],{"emptyLinePlaceholder":569},[100,63905,63906,63908,63910,63913],{"class":102,"line":18450},[100,63907,63677],{"class":106},[100,63909,63728],{"class":106},[100,63911,63912],{"class":106}," .text",[100,63914,17153],{"class":258},[100,63916,63917,63919,63921,63924],{"class":102,"line":18462},[100,63918,58970],{"class":117},[100,63920,52991],{"class":258},[100,63922,63923],{"class":117},"#333",[100,63925,2927],{"class":258},[100,63927,63928,63930,63932,63934,63936,63938],{"class":102,"line":18467},[100,63929,56249],{"class":117},[100,63931,52991],{"class":258},[100,63933,2213],{"class":117},[100,63935,53046],{"class":471},[100,63937,5692],{"class":117},[100,63939,2927],{"class":258},[100,63941,63942],{"class":102,"line":18480},[100,63943,3798],{"class":258},[100,63945,63946],{"class":102,"line":18485},[100,63947,570],{"emptyLinePlaceholder":569},[100,63949,63950,63952,63954,63957],{"class":102,"line":18490},[100,63951,63677],{"class":106},[100,63953,63728],{"class":106},[100,63955,63956],{"class":106}," .time",[100,63958,17153],{"class":258},[100,63960,63961,63963,63965,63967],{"class":102,"line":18495},[100,63962,58970],{"class":117},[100,63964,52991],{"class":258},[100,63966,63624],{"class":117},[100,63968,2927],{"class":258},[100,63970,63971,63973,63975,63977,63979],{"class":102,"line":18508},[100,63972,56476],{"class":117},[100,63974,52991],{"class":258},[100,63976,2265],{"class":117},[100,63978,53046],{"class":471},[100,63980,2927],{"class":258},[100,63982,63983],{"class":102,"line":18513},[100,63984,3798],{"class":258},[100,63986,63987,63989,63991],{"class":102,"line":34189},[100,63988,53971],{"class":258},[100,63990,1677],{"class":52854},[100,63992,52861],{"class":258},[100,63994,63995,63997,63999],{"class":102,"line":34195},[100,63996,53339],{"class":258},[100,63998,52888],{"class":52854},[100,64000,52861],{"class":258},[100,64002,64003],{"class":102,"line":34201},[100,64004,570],{"emptyLinePlaceholder":569},[100,64006,64007,64009,64011],{"class":102,"line":34207},[100,64008,2676],{"class":258},[100,64010,53354],{"class":52854},[100,64012,52861],{"class":258},[100,64014,64015,64017,64019,64021,64023,64026],{"class":102,"line":34213},[100,64016,53698],{"class":258},[100,64018,53165],{"class":52854},[100,64020,55040],{"class":106},[100,64022,472],{"class":258},[100,64024,64025],{"class":110},"\"wrapper\"",[100,64027,52861],{"class":258},[100,64029,64030,64032,64034,64036,64038,64041,64043,64045],{"class":102,"line":34224},[100,64031,52895],{"class":258},[100,64033,2208],{"class":52854},[100,64035,55040],{"class":106},[100,64037,472],{"class":258},[100,64039,64040],{"class":110},"\"avatar\"",[100,64042,56868],{"class":258},[100,64044,2208],{"class":52854},[100,64046,52861],{"class":258},[100,64048,64049,64051,64053,64055,64057,64060,64062,64064,64067,64069,64071,64073,64076,64078,64081,64083,64085],{"class":102,"line":34230},[100,64050,52895],{"class":258},[100,64052,55842],{"class":52854},[100,64054,16540],{"class":106},[100,64056,472],{"class":258},[100,64058,64059],{"class":110},"\"tx\"",[100,64061,62574],{"class":106},[100,64063,472],{"class":258},[100,64065,64066],{"class":110},"\"发一条友善的评论\"",[100,64068,55865],{"class":106},[100,64070,472],{"class":258},[100,64072,5301],{"class":110},[100,64074,64075],{"class":106}," maxlength",[100,64077,472],{"class":258},[100,64079,64080],{"class":110},"\"200\"",[100,64082,56868],{"class":258},[100,64084,55842],{"class":52854},[100,64086,52861],{"class":258},[100,64088,64089,64091,64093,64096,64098],{"class":102,"line":34250},[100,64090,52895],{"class":258},[100,64092,55441],{"class":52854},[100,64094,64095],{"class":258},">发布\u003C\u002F",[100,64097,55441],{"class":52854},[100,64099,52861],{"class":258},[100,64101,64102,64104,64106],{"class":102,"line":34256},[100,64103,53971],{"class":258},[100,64105,53165],{"class":52854},[100,64107,52861],{"class":258},[100,64109,64110,64112,64114,64116,64118,64120],{"class":102,"line":34267},[100,64111,53698],{"class":258},[100,64113,53165],{"class":52854},[100,64115,55040],{"class":106},[100,64117,472],{"class":258},[100,64119,64025],{"class":110},[100,64121,52861],{"class":258},[100,64123,64124,64126,64128,64130,64132,64135,64138,64140],{"class":102,"line":34273},[100,64125,52895],{"class":258},[100,64127,100],{"class":52854},[100,64129,55040],{"class":106},[100,64131,472],{"class":258},[100,64133,64134],{"class":110},"\"total\"",[100,64136,64137],{"class":258},">0\u002F200字\u003C\u002F",[100,64139,100],{"class":52854},[100,64141,52861],{"class":258},[100,64143,64144,64146,64148],{"class":102,"line":34279},[100,64145,53971],{"class":258},[100,64147,53165],{"class":52854},[100,64149,52861],{"class":258},[100,64151,64152,64154,64156,64158,64160,64163],{"class":102,"line":34285},[100,64153,53698],{"class":258},[100,64155,53165],{"class":52854},[100,64157,55040],{"class":106},[100,64159,472],{"class":258},[100,64161,64162],{"class":110},"\"list\"",[100,64164,52861],{"class":258},[100,64166,64167,64169,64171,64173,64175,64178,64181,64183,64186],{"class":102,"line":34291},[100,64168,52895],{"class":258},[100,64170,53165],{"class":52854},[100,64172,55040],{"class":106},[100,64174,472],{"class":258},[100,64176,64177],{"class":110},"\"item\"",[100,64179,64180],{"class":106}," style",[100,64182,472],{"class":258},[100,64184,64185],{"class":110},"\"display: none;\"",[100,64187,52861],{"class":258},[100,64189,64190,64192,64194,64196,64198,64200,64202,64204],{"class":102,"line":34297},[100,64191,56788],{"class":258},[100,64193,2208],{"class":52854},[100,64195,55040],{"class":106},[100,64197,472],{"class":258},[100,64199,64040],{"class":110},[100,64201,56868],{"class":258},[100,64203,2208],{"class":52854},[100,64205,52861],{"class":258},[100,64207,64208,64210,64212,64214,64216,64219],{"class":102,"line":34303},[100,64209,56788],{"class":258},[100,64211,53165],{"class":52854},[100,64213,55040],{"class":106},[100,64215,472],{"class":258},[100,64217,64218],{"class":110},"\"info\"",[100,64220,52861],{"class":258},[100,64222,64223,64225,64227,64229,64231,64234,64237,64239],{"class":102,"line":34309},[100,64224,56856],{"class":258},[100,64226,19],{"class":52854},[100,64228,55040],{"class":106},[100,64230,472],{"class":258},[100,64232,64233],{"class":110},"\"name\"",[100,64235,64236],{"class":258},">清风徐来\u003C\u002F",[100,64238,19],{"class":52854},[100,64240,52861],{"class":258},[100,64242,64243,64245,64247,64249,64251,64254,64257,64259],{"class":102,"line":34329},[100,64244,56856],{"class":258},[100,64246,19],{"class":52854},[100,64248,55040],{"class":106},[100,64250,472],{"class":258},[100,64252,64253],{"class":110},"\"text\"",[100,64255,64256],{"class":258},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[100,64258,19],{"class":52854},[100,64260,52861],{"class":258},[100,64262,64263,64265,64267,64269,64271,64274,64277,64279],{"class":102,"line":34335},[100,64264,56856],{"class":258},[100,64266,19],{"class":52854},[100,64268,55040],{"class":106},[100,64270,472],{"class":258},[100,64272,64273],{"class":110},"\"time\"",[100,64275,64276],{"class":258},">2022-10-10 20:29:21\u003C\u002F",[100,64278,19],{"class":52854},[100,64280,52861],{"class":258},[100,64282,64283,64285,64287],{"class":102,"line":34351},[100,64284,56961],{"class":258},[100,64286,53165],{"class":52854},[100,64288,52861],{"class":258},[100,64290,64291,64293,64295],{"class":102,"line":34357},[100,64292,53330],{"class":258},[100,64294,53165],{"class":52854},[100,64296,52861],{"class":258},[100,64298,64299,64301,64303],{"class":102,"line":34371},[100,64300,53971],{"class":258},[100,64302,53165],{"class":52854},[100,64304,52861],{"class":258},[100,64306,64307,64309,64311],{"class":102,"line":34377},[100,64308,53698],{"class":258},[100,64310,53367],{"class":52854},[100,64312,52861],{"class":258},[100,64314,64315,64317,64320,64322,64324,64326,64328,64331],{"class":102,"line":34392},[100,64316,12803],{"class":471},[100,64318,64319],{"class":117}," tx",[100,64321,583],{"class":471},[100,64323,55950],{"class":258},[100,64325,55953],{"class":106},[100,64327,713],{"class":258},[100,64329,64330],{"class":110},"'#tx'",[100,64332,809],{"class":258},[100,64334,64335,64337,64340,64342,64344,64346,64348,64351],{"class":102,"line":34398},[100,64336,12803],{"class":471},[100,64338,64339],{"class":117}," total",[100,64341,583],{"class":471},[100,64343,55950],{"class":258},[100,64345,55953],{"class":106},[100,64347,713],{"class":258},[100,64349,64350],{"class":110},"'.total'",[100,64352,809],{"class":258},[100,64354,64355],{"class":102,"line":34407},[100,64356,64357],{"class":1836},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[100,64359,64360,64363,64365,64367,64369,64371,64373],{"class":102,"line":34413},[100,64361,64362],{"class":258},"    tx.",[100,64364,59367],{"class":106},[100,64366,713],{"class":258},[100,64368,62881],{"class":110},[100,64370,14017],{"class":258},[100,64372,56003],{"class":471},[100,64374,56006],{"class":258},[100,64376,64377,64380,64382],{"class":102,"line":34422},[100,64378,64379],{"class":258},"      total.style.opacity ",[100,64381,472],{"class":471},[100,64383,57253],{"class":117},[100,64385,64386],{"class":102,"line":34428},[100,64387,35016],{"class":258},[100,64389,64390],{"class":102,"line":34434},[100,64391,64392],{"class":1836},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[100,64394,64395,64397,64399,64401,64403,64405,64407],{"class":102,"line":34443},[100,64396,64362],{"class":258},[100,64398,59367],{"class":106},[100,64400,713],{"class":258},[100,64402,62942],{"class":110},[100,64404,14017],{"class":258},[100,64406,56003],{"class":471},[100,64408,56006],{"class":258},[100,64410,64411,64413,64415],{"class":102,"line":34449},[100,64412,64379],{"class":258},[100,64414,472],{"class":471},[100,64416,48887],{"class":117},[100,64418,64419],{"class":102,"line":34460},[100,64420,35016],{"class":258},[100,64422,64423],{"class":102,"line":34466},[100,64424,64425],{"class":1836},"    \u002F\u002F 3. 检测用户输入\n",[100,64427,64428,64430,64432,64434,64437,64439,64441],{"class":102,"line":34485},[100,64429,64362],{"class":258},[100,64431,59367],{"class":106},[100,64433,713],{"class":258},[100,64435,64436],{"class":110},"'input'",[100,64438,14017],{"class":258},[100,64440,56003],{"class":471},[100,64442,56006],{"class":258},[100,64444,64445],{"class":102,"line":34491},[100,64446,64447],{"class":1836},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[100,64449,64450,64453,64455,64458,64461,64463,64466,64468,64470],{"class":102,"line":34502},[100,64451,64452],{"class":258},"      total.innerHTML ",[100,64454,472],{"class":471},[100,64456,64457],{"class":110}," `${",[100,64459,64460],{"class":258},"tx",[100,64462,2325],{"class":110},[100,64464,64465],{"class":258},"value",[100,64467,2325],{"class":110},[100,64469,53522],{"class":117},[100,64471,64472],{"class":110},"}\u002F200字`\n",[100,64474,64475],{"class":102,"line":34508},[100,64476,35016],{"class":258},[100,64478,64479],{"class":102,"line":34528},[100,64480,570],{"emptyLinePlaceholder":569},[100,64482,64483],{"class":102,"line":34544},[100,64484,64485],{"class":1836},"    \u002F\u002F const str = 'andy'\n",[100,64487,64488],{"class":102,"line":34550},[100,64489,64490],{"class":1836},"    \u002F\u002F console.log(str.length)\n",[100,64492,64493,64495,64497],{"class":102,"line":34564},[100,64494,53971],{"class":258},[100,64496,53367],{"class":52854},[100,64498,52861],{"class":258},[100,64500,64501,64503,64505],{"class":102,"line":34570},[100,64502,53339],{"class":258},[100,64504,53354],{"class":52854},[100,64506,52861],{"class":258},[100,64508,64509],{"class":102,"line":34576},[100,64510,570],{"emptyLinePlaceholder":569},[100,64512,64513,64515,64517],{"class":102,"line":34587},[100,64514,53339],{"class":258},[100,64516,52189],{"class":52854},[100,64518,52861],{"class":258},[23579,64520,64522],{"id":64521},"_3254-change事件","3.2.5.4 change事件",[19,64524,64525],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,64527,64528],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,64530,64531],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[73,64533,64535],{"className":52187,"code":64534,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cinput type=\"text\">\n  \u003Cscript>\n    const input = document.querySelector('input')\n    input.addEventListener('change', function () {\n      console.log(111)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,64536,64537,64547,64561,64565,64573,64587,64607,64619,64627,64631,64639,64653,64661,64679,64697,64709,64713,64721,64729,64733],{"__ignoreMap":79},[100,64538,64539,64541,64543,64545],{"class":102,"line":103},[100,64540,52851],{"class":258},[100,64542,52855],{"class":52854},[100,64544,52858],{"class":106},[100,64546,52861],{"class":258},[100,64548,64549,64551,64553,64555,64557,64559],{"class":102,"line":188},[100,64550,2676],{"class":258},[100,64552,52189],{"class":52854},[100,64554,52870],{"class":106},[100,64556,472],{"class":258},[100,64558,52875],{"class":110},[100,64560,52861],{"class":258},[100,64562,64563],{"class":102,"line":199},[100,64564,570],{"emptyLinePlaceholder":569},[100,64566,64567,64569,64571],{"class":102,"line":532},[100,64568,2676],{"class":258},[100,64570,52888],{"class":52854},[100,64572,52861],{"class":258},[100,64574,64575,64577,64579,64581,64583,64585],{"class":102,"line":577},[100,64576,53698],{"class":258},[100,64578,52898],{"class":52854},[100,64580,52901],{"class":106},[100,64582,472],{"class":258},[100,64584,52906],{"class":110},[100,64586,52861],{"class":258},[100,64588,64589,64591,64593,64595,64597,64599,64601,64603,64605],{"class":102,"line":589},[100,64590,53698],{"class":258},[100,64592,52898],{"class":52854},[100,64594,16501],{"class":106},[100,64596,472],{"class":258},[100,64598,52945],{"class":110},[100,64600,52925],{"class":106},[100,64602,472],{"class":258},[100,64604,52952],{"class":110},[100,64606,52861],{"class":258},[100,64608,64609,64611,64613,64615,64617],{"class":102,"line":595},[100,64610,53698],{"class":258},[100,64612,52961],{"class":52854},[100,64614,52964],{"class":258},[100,64616,52961],{"class":52854},[100,64618,52861],{"class":258},[100,64620,64621,64623,64625],{"class":102,"line":601},[100,64622,53339],{"class":258},[100,64624,52888],{"class":52854},[100,64626,52861],{"class":258},[100,64628,64629],{"class":102,"line":606},[100,64630,570],{"emptyLinePlaceholder":569},[100,64632,64633,64635,64637],{"class":102,"line":612},[100,64634,2676],{"class":258},[100,64636,53354],{"class":52854},[100,64638,52861],{"class":258},[100,64640,64641,64643,64645,64647,64649,64651],{"class":102,"line":618},[100,64642,53698],{"class":258},[100,64644,55375],{"class":52854},[100,64646,55378],{"class":106},[100,64648,472],{"class":258},[100,64650,64253],{"class":110},[100,64652,52861],{"class":258},[100,64654,64655,64657,64659],{"class":102,"line":623},[100,64656,53698],{"class":258},[100,64658,53367],{"class":52854},[100,64660,52861],{"class":258},[100,64662,64663,64665,64667,64669,64671,64673,64675,64677],{"class":102,"line":629},[100,64664,12803],{"class":471},[100,64666,62159],{"class":117},[100,64668,583],{"class":471},[100,64670,55950],{"class":258},[100,64672,55953],{"class":106},[100,64674,713],{"class":258},[100,64676,64436],{"class":110},[100,64678,809],{"class":258},[100,64680,64681,64684,64686,64688,64691,64693,64695],{"class":102,"line":635},[100,64682,64683],{"class":258},"    input.",[100,64685,59367],{"class":106},[100,64687,713],{"class":258},[100,64689,64690],{"class":110},"'change'",[100,64692,14017],{"class":258},[100,64694,56003],{"class":471},[100,64696,56006],{"class":258},[100,64698,64699,64701,64703,64705,64707],{"class":102,"line":641},[100,64700,59798],{"class":258},[100,64702,59801],{"class":106},[100,64704,713],{"class":258},[100,64706,2360],{"class":117},[100,64708,809],{"class":258},[100,64710,64711],{"class":102,"line":647},[100,64712,35016],{"class":258},[100,64714,64715,64717,64719],{"class":102,"line":653},[100,64716,53971],{"class":258},[100,64718,53367],{"class":52854},[100,64720,52861],{"class":258},[100,64722,64723,64725,64727],{"class":102,"line":659},[100,64724,53339],{"class":258},[100,64726,53354],{"class":52854},[100,64728,52861],{"class":258},[100,64730,64731],{"class":102,"line":665},[100,64732,570],{"emptyLinePlaceholder":569},[100,64734,64735,64737,64739],{"class":102,"line":670},[100,64736,53339],{"class":258},[100,64738,52189],{"class":52854},[100,64740,52861],{"class":258},[19,64742,64743],{},"总结：内容发生改变才回去触发",[305,64745,64747],{"id":64746},"_326-事件对象","3.2.6 事件对象",[23579,64749,64751],{"id":64750},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,64753,64754],{},[3095,64755],{"alt":79,"src":64756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,64758,64759],{},[3095,64760],{"alt":79,"src":64761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,64763,64764],{},"点击一次，就输出了事件对象，它是个对象",[19,64766,64767],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,64769,64770],{},[3095,64771],{"alt":79,"src":64772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[23579,64774,64776],{"id":64775},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,64778,64779],{},[3095,64780],{"alt":79,"src":64781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,64783,64784],{},"实现按特殊字符才是实现打印输出效果：",[73,64786,64788],{"className":54621,"code":64787,"language":54623,"meta":79,"style":79},"\u003Cbody>\n  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n  \u003Cinput type=\"text\">\n  \u003Cscript>\n    \u002F\u002F const btn = document.querySelector('button')\n    \u002F\u002F btn.addEventListener('click', function (e) {\n    \u002F\u002F   console.log(e);\n    \u002F\u002F })\n    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n    const input = document.querySelector('input')\n    input.addEventListener('keyup', function (e) {\n      if (e.key === 'Enter') {\n        console.log('我按下了回车键')\n      }\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[32,64789,64790,64798,64803,64817,64825,64830,64835,64840,64845,64850,64855,64860,64865,64870,64874,64878,64886],{"__ignoreMap":79},[100,64791,64792,64794,64796],{"class":102,"line":103},[100,64793,2676],{"class":258},[100,64795,53354],{"class":52854},[100,64797,52861],{"class":258},[100,64799,64800],{"class":102,"line":188},[100,64801,64802],{"class":1836},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[100,64804,64805,64807,64809,64811,64813,64815],{"class":102,"line":199},[100,64806,53698],{"class":258},[100,64808,55375],{"class":52854},[100,64810,55378],{"class":106},[100,64812,472],{"class":258},[100,64814,64253],{"class":110},[100,64816,52861],{"class":258},[100,64818,64819,64821,64823],{"class":102,"line":532},[100,64820,53698],{"class":258},[100,64822,53367],{"class":52854},[100,64824,52861],{"class":258},[100,64826,64827],{"class":102,"line":577},[100,64828,64829],{"class":258},"    \u002F\u002F const btn = document.querySelector('button')\n",[100,64831,64832],{"class":102,"line":589},[100,64833,64834],{"class":258},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[100,64836,64837],{"class":102,"line":595},[100,64838,64839],{"class":258},"    \u002F\u002F   console.log(e);\n",[100,64841,64842],{"class":102,"line":601},[100,64843,64844],{"class":258},"    \u002F\u002F })\n",[100,64846,64847],{"class":102,"line":606},[100,64848,64849],{"class":258},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[100,64851,64852],{"class":102,"line":612},[100,64853,64854],{"class":258},"    const input = document.querySelector('input')\n",[100,64856,64857],{"class":102,"line":618},[100,64858,64859],{"class":258},"    input.addEventListener('keyup', function (e) {\n",[100,64861,64862],{"class":102,"line":623},[100,64863,64864],{"class":258},"      if (e.key === 'Enter') {\n",[100,64866,64867],{"class":102,"line":629},[100,64868,64869],{"class":258},"        console.log('我按下了回车键')\n",[100,64871,64872],{"class":102,"line":635},[100,64873,53952],{"class":258},[100,64875,64876],{"class":102,"line":641},[100,64877,35016],{"class":258},[100,64879,64880,64882,64884],{"class":102,"line":647},[100,64881,53971],{"class":258},[100,64883,53367],{"class":52854},[100,64885,52861],{"class":258},[100,64887,64888,64890,64892],{"class":102,"line":653},[100,64889,53339],{"class":258},[100,64891,53354],{"class":52854},[100,64893,52861],{"class":258},[23579,64895,64897],{"id":64896},"_3263-trim方法","3.2.6.3 trim方法",[19,64899,64900],{},[3095,64901],{"alt":79,"src":64902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,64904,64905],{},[3095,64906],{"alt":79,"src":64907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,64909,64910],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,64912,64913],{},"str.trim()",[305,64915,64917],{"id":64916},"_327-环境对象","3.2.7 环境对象",[19,64919,64920],{},[3095,64921],{"alt":79,"src":64922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,64924,64925],{},[3095,64926],{"alt":79,"src":64927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,64929,64930],{},[3095,64931],{"alt":79,"src":64932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,64934,64935],{},"实际函数调用是window.fn()",[19,64937,64938],{},"普通函数里面this指向的是window",[2773,64940,64941,64944,64947],{},[29,64942,64943],{},"在普通函数下，this指向的是window",[29,64945,64946],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[29,64948,64949],{},"箭头函数没有this",[19,64951,64952],{},"粗略记法就是：谁调用，this就指向谁",[19,64954,64955],{},[3095,64956],{"alt":79,"src":64957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,64959,64960],{},[3095,64961],{"alt":79,"src":64962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,64964,64965],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,64967,64968],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[73,64970,64972],{"className":54621,"code":64971,"language":54623,"meta":79,"style":79},"\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const button = document.querySelector('button')\n    button.addEventListener('click', function () {\n      \u002F\u002F console.log(this);\n      this.style.color = 'pink'\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[32,64973,64974,64982,64994,65002,65007,65012,65017,65022,65026,65034],{"__ignoreMap":79},[100,64975,64976,64978,64980],{"class":102,"line":103},[100,64977,2676],{"class":258},[100,64979,53354],{"class":52854},[100,64981,52861],{"class":258},[100,64983,64984,64986,64988,64990,64992],{"class":102,"line":188},[100,64985,53698],{"class":258},[100,64987,55441],{"class":52854},[100,64989,55447],{"class":258},[100,64991,55441],{"class":52854},[100,64993,52861],{"class":258},[100,64995,64996,64998,65000],{"class":102,"line":199},[100,64997,53698],{"class":258},[100,64999,53367],{"class":52854},[100,65001,52861],{"class":258},[100,65003,65004],{"class":102,"line":532},[100,65005,65006],{"class":258},"    const button = document.querySelector('button')\n",[100,65008,65009],{"class":102,"line":577},[100,65010,65011],{"class":258},"    button.addEventListener('click', function () {\n",[100,65013,65014],{"class":102,"line":589},[100,65015,65016],{"class":258},"      \u002F\u002F console.log(this);\n",[100,65018,65019],{"class":102,"line":595},[100,65020,65021],{"class":258},"      this.style.color = 'pink'\n",[100,65023,65024],{"class":102,"line":601},[100,65025,35016],{"class":258},[100,65027,65028,65030,65032],{"class":102,"line":606},[100,65029,53971],{"class":258},[100,65031,53367],{"class":52854},[100,65033,52861],{"class":258},[100,65035,65036,65038,65040],{"class":102,"line":612},[100,65037,53339],{"class":258},[100,65039,53354],{"class":52854},[100,65041,52861],{"class":258},[305,65043,65045],{"id":65044},"_328-回调函数","3.2.8 回调函数",[19,65047,65048],{},[3095,65049],{"alt":79,"src":65050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,65052,65053],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,65055,12914],{},[2773,65057,65058,65061,65064],{},[29,65059,65060],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[29,65062,65063],{},"回调函数本质还是函数，只不过把它当成参数使用",[29,65065,65066],{},"使用匿名函数做为回调函数比较常见",[305,65068,65070],{"id":65069},"_329-tab栏切换","3.2.9 tab栏切换",[19,65072,65073],{},[3095,65074],{"alt":79,"src":65075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[73,65077,65079],{"className":52187,"code":65078,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Ctitle>tab栏切换\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      margin: 0;\n      padding: 0;\n    }\n\n    .tab {\n      width: 590px;\n      height: 340px;\n      margin: 20px;\n      border: 1px solid #e4e4e4;\n    }\n\n    .tab-nav {\n      width: 100%;\n      height: 60px;\n      line-height: 60px;\n      display: flex;\n      justify-content: space-between;\n    }\n\n    .tab-nav h3 {\n      font-size: 24px;\n      font-weight: normal;\n      margin-left: 20px;\n    }\n\n    .tab-nav ul {\n      list-style: none;\n      display: flex;\n      justify-content: flex-end;\n    }\n\n    .tab-nav ul li {\n      margin: 0 20px;\n      font-size: 14px;\n    }\n\n    .tab-nav ul li a {\n      text-decoration: none;\n      border-bottom: 2px solid transparent;\n      color: #333;\n    }\n\n    .tab-nav ul li a.active {\n      border-color: #e1251b;\n      color: #e1251b;\n    }\n\n    .tab-content {\n      padding: 0 16px;\n    }\n\n    .tab-content .item {\n      display: none;\n    }\n\n    .tab-content .item.active {\n      display: block;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"tab\">\n    \u003Cdiv class=\"tab-nav\">\n      \u003Ch3>每日特价\u003C\u002Fh3>\n      \u003Cul>\n        \u003Cli>\u003Ca class=\"active\" href=\"javascript:;\">精选\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\">美食\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\">百货\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\">个护\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\">预告\u003C\u002Fa>\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"tab-content\">\n      \u003Cdiv class=\"item active\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n    \u002F\u002F 1.1 获取 a 元素 \n    const as = document.querySelectorAll('.tab-nav a')\n    \u002F\u002F console.log(as) \n    for (let i = 0; i \u003C as.length; i++) {\n      \u002F\u002F console.log(as[i])\n      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n      as[i].addEventListener('mouseenter', function () {\n        \u002F\u002F console.log('鼠标经过')\n        \u002F\u002F 排他思想  \n        \u002F\u002F 干掉别人 移除类active\n        document.querySelector('.tab-nav .active').classList.remove('active')\n        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n        this.classList.add('active')\n\n        \u002F\u002F 下面5个大盒子 一一对应  .item \n        \u002F\u002F 干掉别人\n        document.querySelector('.tab-content .active').classList.remove('active')\n        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n        document.querySelector(`.tab-content .item:nth-child(${i + 1})`).classList.add('active')\n\n      })\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,65080,65081,65091,65105,65109,65117,65131,65151,65171,65184,65192,65198,65208,65218,65222,65226,65233,65246,65259,65271,65287,65291,65295,65302,65314,65326,65338,65348,65358,65362,65366,65375,65387,65398,65410,65414,65418,65426,65436,65446,65456,65460,65464,65474,65488,65500,65504,65508,65520,65531,65548,65558,65562,65566,65581,65592,65602,65606,65610,65617,65632,65636,65640,65648,65658,65662,65666,65675,65685,65689,65697,65705,65709,65717,65732,65747,65760,65768,65802,65829,65856,65883,65910,65918,65926,65941,65978,66013,66048,66083,66118,66126,66134,66142,66147,66152,66172,66177,66206,66211,66216,66234,66239,66244,66249,66271,66276,66292,66296,66301,66306,66327,66332,66361,66365,66370,66374,66382,66390,66394],{"__ignoreMap":79},[100,65082,65083,65085,65087,65089],{"class":102,"line":103},[100,65084,52851],{"class":258},[100,65086,52855],{"class":52854},[100,65088,52858],{"class":106},[100,65090,52861],{"class":258},[100,65092,65093,65095,65097,65099,65101,65103],{"class":102,"line":188},[100,65094,2676],{"class":258},[100,65096,52189],{"class":52854},[100,65098,52870],{"class":106},[100,65100,472],{"class":258},[100,65102,52875],{"class":110},[100,65104,52861],{"class":258},[100,65106,65107],{"class":102,"line":199},[100,65108,570],{"emptyLinePlaceholder":569},[100,65110,65111,65113,65115],{"class":102,"line":532},[100,65112,2676],{"class":258},[100,65114,52888],{"class":52854},[100,65116,52861],{"class":258},[100,65118,65119,65121,65123,65125,65127,65129],{"class":102,"line":577},[100,65120,53698],{"class":258},[100,65122,52898],{"class":52854},[100,65124,52901],{"class":106},[100,65126,472],{"class":258},[100,65128,52906],{"class":110},[100,65130,60681],{"class":258},[100,65132,65133,65135,65137,65139,65141,65143,65145,65147,65149],{"class":102,"line":589},[100,65134,53698],{"class":258},[100,65136,52898],{"class":52854},[100,65138,52917],{"class":106},[100,65140,472],{"class":258},[100,65142,52922],{"class":110},[100,65144,52925],{"class":106},[100,65146,472],{"class":258},[100,65148,52930],{"class":110},[100,65150,60681],{"class":258},[100,65152,65153,65155,65157,65159,65161,65163,65165,65167,65169],{"class":102,"line":595},[100,65154,53698],{"class":258},[100,65156,52898],{"class":52854},[100,65158,16501],{"class":106},[100,65160,472],{"class":258},[100,65162,52945],{"class":110},[100,65164,52925],{"class":106},[100,65166,472],{"class":258},[100,65168,52952],{"class":110},[100,65170,60681],{"class":258},[100,65172,65173,65175,65177,65180,65182],{"class":102,"line":601},[100,65174,53698],{"class":258},[100,65176,52961],{"class":52854},[100,65178,65179],{"class":258},">tab栏切换\u003C\u002F",[100,65181,52961],{"class":52854},[100,65183,52861],{"class":258},[100,65185,65186,65188,65190],{"class":102,"line":606},[100,65187,53698],{"class":258},[100,65189,1677],{"class":52854},[100,65191,52861],{"class":258},[100,65193,65194,65196],{"class":102,"line":612},[100,65195,7999],{"class":52854},[100,65197,17153],{"class":258},[100,65199,65200,65202,65204,65206],{"class":102,"line":618},[100,65201,56260],{"class":117},[100,65203,52991],{"class":258},[100,65205,1366],{"class":117},[100,65207,2927],{"class":258},[100,65209,65210,65212,65214,65216],{"class":102,"line":623},[100,65211,56249],{"class":117},[100,65213,52991],{"class":258},[100,65215,1366],{"class":117},[100,65217,2927],{"class":258},[100,65219,65220],{"class":102,"line":629},[100,65221,3798],{"class":258},[100,65223,65224],{"class":102,"line":635},[100,65225,570],{"emptyLinePlaceholder":569},[100,65227,65228,65231],{"class":102,"line":641},[100,65229,65230],{"class":106},"    .tab",[100,65232,17153],{"class":258},[100,65234,65235,65237,65239,65242,65244],{"class":102,"line":647},[100,65236,56325],{"class":117},[100,65238,52991],{"class":258},[100,65240,65241],{"class":117},"590",[100,65243,53046],{"class":471},[100,65245,2927],{"class":258},[100,65247,65248,65250,65252,65255,65257],{"class":102,"line":653},[100,65249,56339],{"class":117},[100,65251,52991],{"class":258},[100,65253,65254],{"class":117},"340",[100,65256,53046],{"class":471},[100,65258,2927],{"class":258},[100,65260,65261,65263,65265,65267,65269],{"class":102,"line":659},[100,65262,56260],{"class":117},[100,65264,52991],{"class":258},[100,65266,2466],{"class":117},[100,65268,53046],{"class":471},[100,65270,2927],{"class":258},[100,65272,65273,65275,65277,65279,65281,65283,65285],{"class":102,"line":665},[100,65274,63531],{"class":117},[100,65276,52991],{"class":258},[100,65278,1985],{"class":117},[100,65280,53046],{"class":471},[100,65282,53075],{"class":117},[100,65284,63798],{"class":117},[100,65286,2927],{"class":258},[100,65288,65289],{"class":102,"line":670},[100,65290,3798],{"class":258},[100,65292,65293],{"class":102,"line":675},[100,65294,570],{"emptyLinePlaceholder":569},[100,65296,65297,65300],{"class":102,"line":699},[100,65298,65299],{"class":106},"    .tab-nav",[100,65301,17153],{"class":258},[100,65303,65304,65306,65308,65310,65312],{"class":102,"line":708},[100,65305,56325],{"class":117},[100,65307,52991],{"class":258},[100,65309,2078],{"class":117},[100,65311,2095],{"class":471},[100,65313,2927],{"class":258},[100,65315,65316,65318,65320,65322,65324],{"class":102,"line":722},[100,65317,56339],{"class":117},[100,65319,52991],{"class":258},[100,65321,2673],{"class":117},[100,65323,53046],{"class":471},[100,65325,2927],{"class":258},[100,65327,65328,65330,65332,65334,65336],{"class":102,"line":735},[100,65329,58913],{"class":117},[100,65331,52991],{"class":258},[100,65333,2673],{"class":117},[100,65335,53046],{"class":471},[100,65337,2927],{"class":258},[100,65339,65340,65342,65344,65346],{"class":102,"line":754},[100,65341,56563],{"class":117},[100,65343,52991],{"class":258},[100,65345,53031],{"class":117},[100,65347,2927],{"class":258},[100,65349,65350,65352,65354,65356],{"class":102,"line":771},[100,65351,56574],{"class":117},[100,65353,52991],{"class":258},[100,65355,53222],{"class":117},[100,65357,2927],{"class":258},[100,65359,65360],{"class":102,"line":776},[100,65361,3798],{"class":258},[100,65363,65364],{"class":102,"line":781},[100,65365,570],{"emptyLinePlaceholder":569},[100,65367,65368,65370,65373],{"class":102,"line":796},[100,65369,65299],{"class":106},[100,65371,65372],{"class":52854}," h3",[100,65374,17153],{"class":258},[100,65376,65377,65379,65381,65383,65385],{"class":102,"line":812},[100,65378,56476],{"class":117},[100,65380,52991],{"class":258},[100,65382,2566],{"class":117},[100,65384,53046],{"class":471},[100,65386,2927],{"class":258},[100,65388,65389,65391,65393,65396],{"class":102,"line":823},[100,65390,63888],{"class":117},[100,65392,52991],{"class":258},[100,65394,65395],{"class":117},"normal",[100,65397,2927],{"class":258},[100,65399,65400,65402,65404,65406,65408],{"class":102,"line":828},[100,65401,63554],{"class":117},[100,65403,52991],{"class":258},[100,65405,2466],{"class":117},[100,65407,53046],{"class":471},[100,65409,2927],{"class":258},[100,65411,65412],{"class":102,"line":840},[100,65413,3798],{"class":258},[100,65415,65416],{"class":102,"line":845},[100,65417,570],{"emptyLinePlaceholder":569},[100,65419,65420,65422,65424],{"class":102,"line":868},[100,65421,65299],{"class":106},[100,65423,62846],{"class":52854},[100,65425,17153],{"class":258},[100,65427,65428,65430,65432,65434],{"class":102,"line":874},[100,65429,56286],{"class":117},[100,65431,52991],{"class":258},[100,65433,56291],{"class":117},[100,65435,2927],{"class":258},[100,65437,65438,65440,65442,65444],{"class":102,"line":879},[100,65439,56563],{"class":117},[100,65441,52991],{"class":258},[100,65443,53031],{"class":117},[100,65445,2927],{"class":258},[100,65447,65448,65450,65452,65454],{"class":102,"line":889},[100,65449,56574],{"class":117},[100,65451,52991],{"class":258},[100,65453,53134],{"class":117},[100,65455,2927],{"class":258},[100,65457,65458],{"class":102,"line":894},[100,65459,3798],{"class":258},[100,65461,65462],{"class":102,"line":900},[100,65463,570],{"emptyLinePlaceholder":569},[100,65465,65466,65468,65470,65472],{"class":102,"line":910},[100,65467,65299],{"class":106},[100,65469,62846],{"class":52854},[100,65471,56629],{"class":52854},[100,65473,17153],{"class":258},[100,65475,65476,65478,65480,65482,65484,65486],{"class":102,"line":915},[100,65477,56260],{"class":117},[100,65479,52991],{"class":258},[100,65481,1366],{"class":117},[100,65483,10536],{"class":117},[100,65485,53046],{"class":471},[100,65487,2927],{"class":258},[100,65489,65490,65492,65494,65496,65498],{"class":102,"line":929},[100,65491,56476],{"class":117},[100,65493,52991],{"class":258},[100,65495,2316],{"class":117},[100,65497,53046],{"class":471},[100,65499,2927],{"class":258},[100,65501,65502],{"class":102,"line":935},[100,65503,3798],{"class":258},[100,65505,65506],{"class":102,"line":945},[100,65507,570],{"emptyLinePlaceholder":569},[100,65509,65510,65512,65514,65516,65518],{"class":102,"line":950},[100,65511,65299],{"class":106},[100,65513,62846],{"class":52854},[100,65515,56629],{"class":52854},[100,65517,3031],{"class":52854},[100,65519,17153],{"class":258},[100,65521,65522,65525,65527,65529],{"class":102,"line":955},[100,65523,65524],{"class":117},"      text-decoration",[100,65526,52991],{"class":258},[100,65528,56291],{"class":117},[100,65530,2927],{"class":258},[100,65532,65533,65535,65537,65539,65541,65543,65546],{"class":102,"line":972},[100,65534,63786],{"class":117},[100,65536,52991],{"class":258},[100,65538,465],{"class":117},[100,65540,53046],{"class":471},[100,65542,53075],{"class":117},[100,65544,65545],{"class":117}," transparent",[100,65547,2927],{"class":258},[100,65549,65550,65552,65554,65556],{"class":102,"line":11370},[100,65551,58970],{"class":117},[100,65553,52991],{"class":258},[100,65555,63923],{"class":117},[100,65557,2927],{"class":258},[100,65559,65560],{"class":102,"line":11375},[100,65561,3798],{"class":258},[100,65563,65564],{"class":102,"line":11380},[100,65565,570],{"emptyLinePlaceholder":569},[100,65567,65568,65570,65572,65574,65576,65579],{"class":102,"line":11385},[100,65569,65299],{"class":106},[100,65571,62846],{"class":52854},[100,65573,56629],{"class":52854},[100,65575,3031],{"class":52854},[100,65577,65578],{"class":106},".active",[100,65580,17153],{"class":258},[100,65582,65583,65585,65587,65590],{"class":102,"line":11394},[100,65584,63345],{"class":117},[100,65586,52991],{"class":258},[100,65588,65589],{"class":117},"#e1251b",[100,65591,2927],{"class":258},[100,65593,65594,65596,65598,65600],{"class":102,"line":11399},[100,65595,58970],{"class":117},[100,65597,52991],{"class":258},[100,65599,65589],{"class":117},[100,65601,2927],{"class":258},[100,65603,65604],{"class":102,"line":11405},[100,65605,3798],{"class":258},[100,65607,65608],{"class":102,"line":11426},[100,65609,570],{"emptyLinePlaceholder":569},[100,65611,65612,65615],{"class":102,"line":11432},[100,65613,65614],{"class":106},"    .tab-content",[100,65616,17153],{"class":258},[100,65618,65619,65621,65623,65625,65628,65630],{"class":102,"line":11446},[100,65620,56249],{"class":117},[100,65622,52991],{"class":258},[100,65624,1366],{"class":117},[100,65626,65627],{"class":117}," 16",[100,65629,53046],{"class":471},[100,65631,2927],{"class":258},[100,65633,65634],{"class":102,"line":11452},[100,65635,3798],{"class":258},[100,65637,65638],{"class":102,"line":11479},[100,65639,570],{"emptyLinePlaceholder":569},[100,65641,65642,65644,65646],{"class":102,"line":11488},[100,65643,65614],{"class":106},[100,65645,63728],{"class":106},[100,65647,17153],{"class":258},[100,65649,65650,65652,65654,65656],{"class":102,"line":11494},[100,65651,56563],{"class":117},[100,65653,52991],{"class":258},[100,65655,56291],{"class":117},[100,65657,2927],{"class":258},[100,65659,65660],{"class":102,"line":11502},[100,65661,3798],{"class":258},[100,65663,65664],{"class":102,"line":11507},[100,65665,570],{"emptyLinePlaceholder":569},[100,65667,65668,65670,65673],{"class":102,"line":18185},[100,65669,65614],{"class":106},[100,65671,65672],{"class":106}," .item.active",[100,65674,17153],{"class":258},[100,65676,65677,65679,65681,65683],{"class":102,"line":18191},[100,65678,56563],{"class":117},[100,65680,52991],{"class":258},[100,65682,62423],{"class":117},[100,65684,2927],{"class":258},[100,65686,65687],{"class":102,"line":18214},[100,65688,3798],{"class":258},[100,65690,65691,65693,65695],{"class":102,"line":18220},[100,65692,53971],{"class":258},[100,65694,1677],{"class":52854},[100,65696,52861],{"class":258},[100,65698,65699,65701,65703],{"class":102,"line":18243},[100,65700,53339],{"class":258},[100,65702,52888],{"class":52854},[100,65704,52861],{"class":258},[100,65706,65707],{"class":102,"line":18257},[100,65708,570],{"emptyLinePlaceholder":569},[100,65710,65711,65713,65715],{"class":102,"line":18277},[100,65712,2676],{"class":258},[100,65714,53354],{"class":52854},[100,65716,52861],{"class":258},[100,65718,65719,65721,65723,65725,65727,65730],{"class":102,"line":18283},[100,65720,53698],{"class":258},[100,65722,53165],{"class":52854},[100,65724,55040],{"class":106},[100,65726,472],{"class":258},[100,65728,65729],{"class":110},"\"tab\"",[100,65731,52861],{"class":258},[100,65733,65734,65736,65738,65740,65742,65745],{"class":102,"line":18294},[100,65735,52895],{"class":258},[100,65737,53165],{"class":52854},[100,65739,55040],{"class":106},[100,65741,472],{"class":258},[100,65743,65744],{"class":110},"\"tab-nav\"",[100,65746,52861],{"class":258},[100,65748,65749,65751,65753,65756,65758],{"class":102,"line":18317},[100,65750,56788],{"class":258},[100,65752,305],{"class":52854},[100,65754,65755],{"class":258},">每日特价\u003C\u002F",[100,65757,305],{"class":52854},[100,65759,52861],{"class":258},[100,65761,65762,65764,65766],{"class":102,"line":18339},[100,65763,56788],{"class":258},[100,65765,2773],{"class":52854},[100,65767,52861],{"class":258},[100,65769,65770,65772,65774,65776,65778,65780,65782,65784,65786,65788,65791,65794,65796,65798,65800],{"class":102,"line":18344},[100,65771,56856],{"class":258},[100,65773,29],{"class":52854},[100,65775,62606],{"class":258},[100,65777,2006],{"class":52854},[100,65779,55040],{"class":106},[100,65781,472],{"class":258},[100,65783,61260],{"class":110},[100,65785,62611],{"class":106},[100,65787,472],{"class":258},[100,65789,65790],{"class":110},"\"javascript:;\"",[100,65792,65793],{"class":258},">精选\u003C\u002F",[100,65795,2006],{"class":52854},[100,65797,56868],{"class":258},[100,65799,29],{"class":52854},[100,65801,52861],{"class":258},[100,65803,65804,65806,65808,65810,65812,65814,65816,65818,65821,65823,65825,65827],{"class":102,"line":18350},[100,65805,56856],{"class":258},[100,65807,29],{"class":52854},[100,65809,62606],{"class":258},[100,65811,2006],{"class":52854},[100,65813,62611],{"class":106},[100,65815,472],{"class":258},[100,65817,65790],{"class":110},[100,65819,65820],{"class":258},">美食\u003C\u002F",[100,65822,2006],{"class":52854},[100,65824,56868],{"class":258},[100,65826,29],{"class":52854},[100,65828,52861],{"class":258},[100,65830,65831,65833,65835,65837,65839,65841,65843,65845,65848,65850,65852,65854],{"class":102,"line":18364},[100,65832,56856],{"class":258},[100,65834,29],{"class":52854},[100,65836,62606],{"class":258},[100,65838,2006],{"class":52854},[100,65840,62611],{"class":106},[100,65842,472],{"class":258},[100,65844,65790],{"class":110},[100,65846,65847],{"class":258},">百货\u003C\u002F",[100,65849,2006],{"class":52854},[100,65851,56868],{"class":258},[100,65853,29],{"class":52854},[100,65855,52861],{"class":258},[100,65857,65858,65860,65862,65864,65866,65868,65870,65872,65875,65877,65879,65881],{"class":102,"line":18377},[100,65859,56856],{"class":258},[100,65861,29],{"class":52854},[100,65863,62606],{"class":258},[100,65865,2006],{"class":52854},[100,65867,62611],{"class":106},[100,65869,472],{"class":258},[100,65871,65790],{"class":110},[100,65873,65874],{"class":258},">个护\u003C\u002F",[100,65876,2006],{"class":52854},[100,65878,56868],{"class":258},[100,65880,29],{"class":52854},[100,65882,52861],{"class":258},[100,65884,65885,65887,65889,65891,65893,65895,65897,65899,65902,65904,65906,65908],{"class":102,"line":18382},[100,65886,56856],{"class":258},[100,65888,29],{"class":52854},[100,65890,62606],{"class":258},[100,65892,2006],{"class":52854},[100,65894,62611],{"class":106},[100,65896,472],{"class":258},[100,65898,65790],{"class":110},[100,65900,65901],{"class":258},">预告\u003C\u002F",[100,65903,2006],{"class":52854},[100,65905,56868],{"class":258},[100,65907,29],{"class":52854},[100,65909,52861],{"class":258},[100,65911,65912,65914,65916],{"class":102,"line":18396},[100,65913,56961],{"class":258},[100,65915,2773],{"class":52854},[100,65917,52861],{"class":258},[100,65919,65920,65922,65924],{"class":102,"line":18401},[100,65921,53330],{"class":258},[100,65923,53165],{"class":52854},[100,65925,52861],{"class":258},[100,65927,65928,65930,65932,65934,65936,65939],{"class":102,"line":18407},[100,65929,52895],{"class":258},[100,65931,53165],{"class":52854},[100,65933,55040],{"class":106},[100,65935,472],{"class":258},[100,65937,65938],{"class":110},"\"tab-content\"",[100,65940,52861],{"class":258},[100,65942,65943,65945,65947,65949,65951,65954,65956,65958,65960,65962,65965,65967,65969,65971,65974,65976],{"class":102,"line":18412},[100,65944,56788],{"class":258},[100,65946,53165],{"class":52854},[100,65948,55040],{"class":106},[100,65950,472],{"class":258},[100,65952,65953],{"class":110},"\"item active\"",[100,65955,62606],{"class":258},[100,65957,3095],{"class":52854},[100,65959,56793],{"class":106},[100,65961,472],{"class":258},[100,65963,65964],{"class":110},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[100,65966,56801],{"class":106},[100,65968,472],{"class":258},[100,65970,9248],{"class":110},[100,65972,65973],{"class":258}," \u002F>\u003C\u002F",[100,65975,53165],{"class":52854},[100,65977,52861],{"class":258},[100,65979,65980,65982,65984,65986,65988,65990,65992,65994,65996,65998,66001,66003,66005,66007,66009,66011],{"class":102,"line":18426},[100,65981,56788],{"class":258},[100,65983,53165],{"class":52854},[100,65985,55040],{"class":106},[100,65987,472],{"class":258},[100,65989,64177],{"class":110},[100,65991,62606],{"class":258},[100,65993,3095],{"class":52854},[100,65995,56793],{"class":106},[100,65997,472],{"class":258},[100,65999,66000],{"class":110},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[100,66002,56801],{"class":106},[100,66004,472],{"class":258},[100,66006,9248],{"class":110},[100,66008,65973],{"class":258},[100,66010,53165],{"class":52854},[100,66012,52861],{"class":258},[100,66014,66015,66017,66019,66021,66023,66025,66027,66029,66031,66033,66036,66038,66040,66042,66044,66046],{"class":102,"line":18431},[100,66016,56788],{"class":258},[100,66018,53165],{"class":52854},[100,66020,55040],{"class":106},[100,66022,472],{"class":258},[100,66024,64177],{"class":110},[100,66026,62606],{"class":258},[100,66028,3095],{"class":52854},[100,66030,56793],{"class":106},[100,66032,472],{"class":258},[100,66034,66035],{"class":110},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[100,66037,56801],{"class":106},[100,66039,472],{"class":258},[100,66041,9248],{"class":110},[100,66043,65973],{"class":258},[100,66045,53165],{"class":52854},[100,66047,52861],{"class":258},[100,66049,66050,66052,66054,66056,66058,66060,66062,66064,66066,66068,66071,66073,66075,66077,66079,66081],{"class":102,"line":18436},[100,66051,56788],{"class":258},[100,66053,53165],{"class":52854},[100,66055,55040],{"class":106},[100,66057,472],{"class":258},[100,66059,64177],{"class":110},[100,66061,62606],{"class":258},[100,66063,3095],{"class":52854},[100,66065,56793],{"class":106},[100,66067,472],{"class":258},[100,66069,66070],{"class":110},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[100,66072,56801],{"class":106},[100,66074,472],{"class":258},[100,66076,9248],{"class":110},[100,66078,65973],{"class":258},[100,66080,53165],{"class":52854},[100,66082,52861],{"class":258},[100,66084,66085,66087,66089,66091,66093,66095,66097,66099,66101,66103,66106,66108,66110,66112,66114,66116],{"class":102,"line":18450},[100,66086,56788],{"class":258},[100,66088,53165],{"class":52854},[100,66090,55040],{"class":106},[100,66092,472],{"class":258},[100,66094,64177],{"class":110},[100,66096,62606],{"class":258},[100,66098,3095],{"class":52854},[100,66100,56793],{"class":106},[100,66102,472],{"class":258},[100,66104,66105],{"class":110},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[100,66107,56801],{"class":106},[100,66109,472],{"class":258},[100,66111,9248],{"class":110},[100,66113,65973],{"class":258},[100,66115,53165],{"class":52854},[100,66117,52861],{"class":258},[100,66119,66120,66122,66124],{"class":102,"line":18462},[100,66121,53330],{"class":258},[100,66123,53165],{"class":52854},[100,66125,52861],{"class":258},[100,66127,66128,66130,66132],{"class":102,"line":18467},[100,66129,53971],{"class":258},[100,66131,53165],{"class":52854},[100,66133,52861],{"class":258},[100,66135,66136,66138,66140],{"class":102,"line":18480},[100,66137,53698],{"class":258},[100,66139,53367],{"class":52854},[100,66141,52861],{"class":258},[100,66143,66144],{"class":102,"line":18485},[100,66145,66146],{"class":1836},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[100,66148,66149],{"class":102,"line":18490},[100,66150,66151],{"class":1836},"    \u002F\u002F 1.1 获取 a 元素 \n",[100,66153,66154,66156,66159,66161,66163,66165,66167,66170],{"class":102,"line":18495},[100,66155,12803],{"class":471},[100,66157,66158],{"class":117}," as",[100,66160,583],{"class":471},[100,66162,55950],{"class":258},[100,66164,57235],{"class":106},[100,66166,713],{"class":258},[100,66168,66169],{"class":110},"'.tab-nav a'",[100,66171,809],{"class":258},[100,66173,66174],{"class":102,"line":18508},[100,66175,66176],{"class":1836},"    \u002F\u002F console.log(as) \n",[100,66178,66179,66181,66183,66185,66187,66189,66191,66193,66195,66198,66200,66202,66204],{"class":102,"line":18513},[100,66180,848],{"class":471},[100,66182,3283],{"class":258},[100,66184,53401],{"class":471},[100,66186,11023],{"class":258},[100,66188,472],{"class":471},[100,66190,5692],{"class":117},[100,66192,11030],{"class":258},[100,66194,2676],{"class":471},[100,66196,66197],{"class":258}," as.",[100,66199,53522],{"class":117},[100,66201,4814],{"class":258},[100,66203,3903],{"class":471},[100,66205,14024],{"class":258},[100,66207,66208],{"class":102,"line":34189},[100,66209,66210],{"class":1836},"      \u002F\u002F console.log(as[i])\n",[100,66212,66213],{"class":102,"line":34195},[100,66214,66215],{"class":1836},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[100,66217,66218,66221,66223,66225,66228,66230,66232],{"class":102,"line":34201},[100,66219,66220],{"class":258},"      as[i].",[100,66222,59367],{"class":106},[100,66224,713],{"class":258},[100,66226,66227],{"class":110},"'mouseenter'",[100,66229,14017],{"class":258},[100,66231,56003],{"class":471},[100,66233,56006],{"class":258},[100,66235,66236],{"class":102,"line":34207},[100,66237,66238],{"class":1836},"        \u002F\u002F console.log('鼠标经过')\n",[100,66240,66241],{"class":102,"line":34213},[100,66242,66243],{"class":1836},"        \u002F\u002F 排他思想  \n",[100,66245,66246],{"class":102,"line":34224},[100,66247,66248],{"class":1836},"        \u002F\u002F 干掉别人 移除类active\n",[100,66250,66251,66253,66255,66257,66260,66262,66264,66266,66269],{"class":102,"line":34230},[100,66252,53479],{"class":258},[100,66254,55953],{"class":106},[100,66256,713],{"class":258},[100,66258,66259],{"class":110},"'.tab-nav .active'",[100,66261,58557],{"class":258},[100,66263,58560],{"class":106},[100,66265,713],{"class":258},[100,66267,66268],{"class":110},"'active'",[100,66270,809],{"class":258},[100,66272,66273],{"class":102,"line":34250},[100,66274,66275],{"class":1836},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[100,66277,66278,66281,66284,66286,66288,66290],{"class":102,"line":34256},[100,66279,66280],{"class":117},"        this",[100,66282,66283],{"class":258},".classList.",[100,66285,6930],{"class":106},[100,66287,713],{"class":258},[100,66289,66268],{"class":110},[100,66291,809],{"class":258},[100,66293,66294],{"class":102,"line":34267},[100,66295,570],{"emptyLinePlaceholder":569},[100,66297,66298],{"class":102,"line":34273},[100,66299,66300],{"class":1836},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[100,66302,66303],{"class":102,"line":34279},[100,66304,66305],{"class":1836},"        \u002F\u002F 干掉别人\n",[100,66307,66308,66310,66312,66314,66317,66319,66321,66323,66325],{"class":102,"line":34285},[100,66309,53479],{"class":258},[100,66311,55953],{"class":106},[100,66313,713],{"class":258},[100,66315,66316],{"class":110},"'.tab-content .active'",[100,66318,58557],{"class":258},[100,66320,58560],{"class":106},[100,66322,713],{"class":258},[100,66324,66268],{"class":110},[100,66326,809],{"class":258},[100,66328,66329],{"class":102,"line":34291},[100,66330,66331],{"class":1836},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[100,66333,66334,66336,66338,66340,66343,66345,66347,66349,66351,66353,66355,66357,66359],{"class":102,"line":34297},[100,66335,53479],{"class":258},[100,66337,55953],{"class":106},[100,66339,713],{"class":258},[100,66341,66342],{"class":110},"`.tab-content .item:nth-child(${",[100,66344,2208],{"class":258},[100,66346,47120],{"class":471},[100,66348,26693],{"class":117},[100,66350,58586],{"class":110},[100,66352,58557],{"class":258},[100,66354,6930],{"class":106},[100,66356,713],{"class":258},[100,66358,66268],{"class":110},[100,66360,809],{"class":258},[100,66362,66363],{"class":102,"line":34303},[100,66364,570],{"emptyLinePlaceholder":569},[100,66366,66367],{"class":102,"line":34309},[100,66368,66369],{"class":258},"      })\n",[100,66371,66372],{"class":102,"line":34329},[100,66373,3798],{"class":258},[100,66375,66376,66378,66380],{"class":102,"line":34335},[100,66377,53971],{"class":258},[100,66379,53367],{"class":52854},[100,66381,52861],{"class":258},[100,66383,66384,66386,66388],{"class":102,"line":34351},[100,66385,53339],{"class":258},[100,66387,53354],{"class":52854},[100,66389,52861],{"class":258},[100,66391,66392],{"class":102,"line":34357},[100,66393,570],{"emptyLinePlaceholder":569},[100,66395,66396,66398,66400],{"class":102,"line":34371},[100,66397,53339],{"class":258},[100,66399,52189],{"class":52854},[100,66401,52861],{"class":258},[19,66403,66404],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,66406,66407],{},"在监听事件中，this指向的就是他的调用者",[19,66409,66410],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,66412,55274],{},[19,66414,66415],{},"(function () {",[19,66417,66418],{},"const list = document.querySelector('.xtx-elevator-list')",[19,66420,66421],{},"list.addEventListener('click', function (e) {",[19,66423,66424],{},"if (e.target.tagName === 'A') {",[19,66426,66427],{},"\u002F\u002F 排他思想",[19,66429,66430],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,66432,66433],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,66435,66436],{},"\u002F\u002F console.log(old);",[19,66438,66439],{},"\u002F\u002F 判断",[19,66441,66442],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,66444,66445],{},"if (old) old.classList.remove('active')",[19,66447,66448],{},"e.target.classList.add('active')",[19,66450,2712],{},[19,66452,54018],{},[19,66454,66455],{},"})();",[305,66457,66459],{"id":66458},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[73,66461,66463],{"className":52187,"code":66462,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\n\u003Chtml>\n\n\u003Chead lang=\"en\">\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Ctitle>\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      margin: 0;\n      padding: 0;\n    }\n\n    table {\n      border-collapse: collapse;\n      border-spacing: 0;\n      border: 1px solid #c0c0c0;\n      width: 500px;\n      margin: 100px auto;\n      text-align: center;\n    }\n\n    th {\n      background-color: #09c;\n      font: bold 16px \"微软雅黑\";\n      color: #fff;\n      height: 24px;\n    }\n\n    td {\n      border: 1px solid #d0d0d0;\n      color: #404060;\n      padding: 10px;\n    }\n\n    .allCheck {\n      width: 80px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ctable>\n    \u003Ctr>\n      \u003Cth class=\"allCheck\">\n        \u003Cinput type=\"checkbox\" name=\"\" id=\"checkAll\"> \u003Cspan class=\"all\">全选\u003C\u002Fspan>\n      \u003C\u002Fth>\n      \u003Cth>商品\u003C\u002Fth>\n      \u003Cth>商家\u003C\u002Fth>\n      \u003Cth>价格\u003C\u002Fth>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>\n        \u003Cinput type=\"checkbox\" name=\"check\" class=\"ck\">\n      \u003C\u002Ftd>\n      \u003Ctd>小米手机\u003C\u002Ftd>\n      \u003Ctd>小米\u003C\u002Ftd>\n      \u003Ctd>￥1999\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>\n        \u003Cinput type=\"checkbox\" name=\"check\" class=\"ck\">\n      \u003C\u002Ftd>\n      \u003Ctd>小米净水器\u003C\u002Ftd>\n      \u003Ctd>小米\u003C\u002Ftd>\n      \u003Ctd>￥4999\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>\n        \u003Cinput type=\"checkbox\" name=\"check\" class=\"ck\">\n      \u003C\u002Ftd>\n      \u003Ctd>小米电视\u003C\u002Ftd>\n      \u003Ctd>小米\u003C\u002Ftd>\n      \u003Ctd>￥5999\u003C\u002Ftd>\n    \u003C\u002Ftr>\n  \u003C\u002Ftable>\n  \u003Cscript>\n    \u002F\u002F 1. 获取大复选框\n    const checkAll = document.querySelector('#checkAll')\n    \u002F\u002F 2. 获取所有的小复选框\n    const cks = document.querySelectorAll('.ck')\n    \u002F\u002F 3. 点击大复选框  注册事件\n    checkAll.addEventListener('click', function () {\n      \u002F\u002F 得到当前大复选框的选中状态\n      \u002F\u002F console.log(checkAll.checked)  \u002F\u002F 得到 是 true 或者是 false\n      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n      for (let i = 0; i \u003C cks.length; i++) {\n        cks[i].checked = this.checked\n      }\n    })\n    \u002F\u002F 5. 小复选框控制大复选框\n\n    for (let i = 0; i \u003C cks.length; i++) {\n      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n      cks[i].addEventListener('click', function () {\n        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n        checkAll.checked = document.querySelectorAll('.ck:checked').length === cks.length\n      })\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,66464,66465,66475,66479,66487,66491,66505,66519,66531,66539,66545,66555,66565,66569,66573,66580,66592,66603,66620,66633,66647,66657,66661,66665,66672,66683,66701,66711,66723,66727,66731,66738,66755,66766,66778,66782,66786,66793,66805,66809,66817,66825,66829,66837,66845,66853,66868,66912,66920,66933,66946,66959,66967,66975,66983,67011,67019,67031,67044,67057,67065,67073,67081,67107,67115,67128,67140,67153,67161,67169,67177,67203,67211,67224,67236,67249,67257,67265,67273,67278,67298,67303,67323,67328,67345,67350,67358,67363,67392,67405,67409,67413,67418,67422,67450,67455,67472,67477,67482,67487,67492,67518,67522,67526,67534,67542,67546],{"__ignoreMap":79},[100,66466,66467,66469,66471,66473],{"class":102,"line":103},[100,66468,52851],{"class":258},[100,66470,52855],{"class":52854},[100,66472,52858],{"class":106},[100,66474,52861],{"class":258},[100,66476,66477],{"class":102,"line":188},[100,66478,570],{"emptyLinePlaceholder":569},[100,66480,66481,66483,66485],{"class":102,"line":199},[100,66482,2676],{"class":258},[100,66484,52189],{"class":52854},[100,66486,52861],{"class":258},[100,66488,66489],{"class":102,"line":532},[100,66490,570],{"emptyLinePlaceholder":569},[100,66492,66493,66495,66497,66499,66501,66503],{"class":102,"line":577},[100,66494,2676],{"class":258},[100,66496,52888],{"class":52854},[100,66498,52870],{"class":106},[100,66500,472],{"class":258},[100,66502,52875],{"class":110},[100,66504,52861],{"class":258},[100,66506,66507,66509,66511,66513,66515,66517],{"class":102,"line":589},[100,66508,53698],{"class":258},[100,66510,52898],{"class":52854},[100,66512,52901],{"class":106},[100,66514,472],{"class":258},[100,66516,52906],{"class":110},[100,66518,52861],{"class":258},[100,66520,66521,66523,66525,66527,66529],{"class":102,"line":595},[100,66522,53698],{"class":258},[100,66524,52961],{"class":52854},[100,66526,56868],{"class":258},[100,66528,52961],{"class":52854},[100,66530,52861],{"class":258},[100,66532,66533,66535,66537],{"class":102,"line":601},[100,66534,53698],{"class":258},[100,66536,1677],{"class":52854},[100,66538,52861],{"class":258},[100,66540,66541,66543],{"class":102,"line":606},[100,66542,7999],{"class":52854},[100,66544,17153],{"class":258},[100,66546,66547,66549,66551,66553],{"class":102,"line":612},[100,66548,56260],{"class":117},[100,66550,52991],{"class":258},[100,66552,1366],{"class":117},[100,66554,2927],{"class":258},[100,66556,66557,66559,66561,66563],{"class":102,"line":618},[100,66558,56249],{"class":117},[100,66560,52991],{"class":258},[100,66562,1366],{"class":117},[100,66564,2927],{"class":258},[100,66566,66567],{"class":102,"line":623},[100,66568,3798],{"class":258},[100,66570,66571],{"class":102,"line":629},[100,66572,570],{"emptyLinePlaceholder":569},[100,66574,66575,66578],{"class":102,"line":635},[100,66576,66577],{"class":52854},"    table",[100,66579,17153],{"class":258},[100,66581,66582,66585,66587,66590],{"class":102,"line":641},[100,66583,66584],{"class":117},"      border-collapse",[100,66586,52991],{"class":258},[100,66588,66589],{"class":117},"collapse",[100,66591,2927],{"class":258},[100,66593,66594,66597,66599,66601],{"class":102,"line":647},[100,66595,66596],{"class":117},"      border-spacing",[100,66598,52991],{"class":258},[100,66600,1366],{"class":117},[100,66602,2927],{"class":258},[100,66604,66605,66607,66609,66611,66613,66615,66618],{"class":102,"line":653},[100,66606,63531],{"class":117},[100,66608,52991],{"class":258},[100,66610,1985],{"class":117},[100,66612,53046],{"class":471},[100,66614,53075],{"class":117},[100,66616,66617],{"class":117}," #c0c0c0",[100,66619,2927],{"class":258},[100,66621,66622,66624,66626,66629,66631],{"class":102,"line":659},[100,66623,56325],{"class":117},[100,66625,52991],{"class":258},[100,66627,66628],{"class":117},"500",[100,66630,53046],{"class":471},[100,66632,2927],{"class":258},[100,66634,66635,66637,66639,66641,66643,66645],{"class":102,"line":665},[100,66636,56260],{"class":117},[100,66638,52991],{"class":258},[100,66640,2078],{"class":117},[100,66642,53046],{"class":471},[100,66644,53110],{"class":117},[100,66646,2927],{"class":258},[100,66648,66649,66651,66653,66655],{"class":102,"line":670},[100,66650,58840],{"class":117},[100,66652,52991],{"class":258},[100,66654,53146],{"class":117},[100,66656,2927],{"class":258},[100,66658,66659],{"class":102,"line":675},[100,66660,3798],{"class":258},[100,66662,66663],{"class":102,"line":699},[100,66664,570],{"emptyLinePlaceholder":569},[100,66666,66667,66670],{"class":102,"line":708},[100,66668,66669],{"class":52854},"    th",[100,66671,17153],{"class":258},[100,66673,66674,66676,66678,66681],{"class":102,"line":722},[100,66675,56438],{"class":117},[100,66677,52991],{"class":258},[100,66679,66680],{"class":117},"#09c",[100,66682,2927],{"class":258},[100,66684,66685,66688,66690,66692,66694,66696,66699],{"class":102,"line":735},[100,66686,66687],{"class":117},"      font",[100,66689,52991],{"class":258},[100,66691,63893],{"class":117},[100,66693,65627],{"class":117},[100,66695,53046],{"class":471},[100,66697,66698],{"class":110}," \"微软雅黑\"",[100,66700,2927],{"class":258},[100,66702,66703,66705,66707,66709],{"class":102,"line":754},[100,66704,58970],{"class":117},[100,66706,52991],{"class":258},[100,66708,62396],{"class":117},[100,66710,2927],{"class":258},[100,66712,66713,66715,66717,66719,66721],{"class":102,"line":771},[100,66714,56339],{"class":117},[100,66716,52991],{"class":258},[100,66718,2566],{"class":117},[100,66720,53046],{"class":471},[100,66722,2927],{"class":258},[100,66724,66725],{"class":102,"line":776},[100,66726,3798],{"class":258},[100,66728,66729],{"class":102,"line":781},[100,66730,570],{"emptyLinePlaceholder":569},[100,66732,66733,66736],{"class":102,"line":796},[100,66734,66735],{"class":52854},"    td",[100,66737,17153],{"class":258},[100,66739,66740,66742,66744,66746,66748,66750,66753],{"class":102,"line":812},[100,66741,63531],{"class":117},[100,66743,52991],{"class":258},[100,66745,1985],{"class":117},[100,66747,53046],{"class":471},[100,66749,53075],{"class":117},[100,66751,66752],{"class":117}," #d0d0d0",[100,66754,2927],{"class":258},[100,66756,66757,66759,66761,66764],{"class":102,"line":823},[100,66758,58970],{"class":117},[100,66760,52991],{"class":258},[100,66762,66763],{"class":117},"#404060",[100,66765,2927],{"class":258},[100,66767,66768,66770,66772,66774,66776],{"class":102,"line":828},[100,66769,56249],{"class":117},[100,66771,52991],{"class":258},[100,66773,2213],{"class":117},[100,66775,53046],{"class":471},[100,66777,2927],{"class":258},[100,66779,66780],{"class":102,"line":840},[100,66781,3798],{"class":258},[100,66783,66784],{"class":102,"line":845},[100,66785,570],{"emptyLinePlaceholder":569},[100,66787,66788,66791],{"class":102,"line":868},[100,66789,66790],{"class":106},"    .allCheck",[100,66792,17153],{"class":258},[100,66794,66795,66797,66799,66801,66803],{"class":102,"line":874},[100,66796,56325],{"class":117},[100,66798,52991],{"class":258},[100,66800,2379],{"class":117},[100,66802,53046],{"class":471},[100,66804,2927],{"class":258},[100,66806,66807],{"class":102,"line":879},[100,66808,3798],{"class":258},[100,66810,66811,66813,66815],{"class":102,"line":889},[100,66812,53971],{"class":258},[100,66814,1677],{"class":52854},[100,66816,52861],{"class":258},[100,66818,66819,66821,66823],{"class":102,"line":894},[100,66820,53339],{"class":258},[100,66822,52888],{"class":52854},[100,66824,52861],{"class":258},[100,66826,66827],{"class":102,"line":900},[100,66828,570],{"emptyLinePlaceholder":569},[100,66830,66831,66833,66835],{"class":102,"line":910},[100,66832,2676],{"class":258},[100,66834,53354],{"class":52854},[100,66836,52861],{"class":258},[100,66838,66839,66841,66843],{"class":102,"line":915},[100,66840,53698],{"class":258},[100,66842,319],{"class":52854},[100,66844,52861],{"class":258},[100,66846,66847,66849,66851],{"class":102,"line":929},[100,66848,52895],{"class":258},[100,66850,325],{"class":52854},[100,66852,52861],{"class":258},[100,66854,66855,66857,66859,66861,66863,66866],{"class":102,"line":935},[100,66856,56788],{"class":258},[100,66858,328],{"class":52854},[100,66860,55040],{"class":106},[100,66862,472],{"class":258},[100,66864,66865],{"class":110},"\"allCheck\"",[100,66867,52861],{"class":258},[100,66869,66870,66872,66874,66876,66878,66880,66882,66884,66886,66888,66890,66893,66896,66898,66900,66902,66905,66908,66910],{"class":102,"line":945},[100,66871,56856],{"class":258},[100,66873,55375],{"class":52854},[100,66875,55378],{"class":106},[100,66877,472],{"class":258},[100,66879,55383],{"class":110},[100,66881,16501],{"class":106},[100,66883,472],{"class":258},[100,66885,9248],{"class":110},[100,66887,16540],{"class":106},[100,66889,472],{"class":258},[100,66891,66892],{"class":110},"\"checkAll\"",[100,66894,66895],{"class":258},"> \u003C",[100,66897,100],{"class":52854},[100,66899,55040],{"class":106},[100,66901,472],{"class":258},[100,66903,66904],{"class":110},"\"all\"",[100,66906,66907],{"class":258},">全选\u003C\u002F",[100,66909,100],{"class":52854},[100,66911,52861],{"class":258},[100,66913,66914,66916,66918],{"class":102,"line":950},[100,66915,56961],{"class":258},[100,66917,328],{"class":52854},[100,66919,52861],{"class":258},[100,66921,66922,66924,66926,66929,66931],{"class":102,"line":955},[100,66923,56788],{"class":258},[100,66925,328],{"class":52854},[100,66927,66928],{"class":258},">商品\u003C\u002F",[100,66930,328],{"class":52854},[100,66932,52861],{"class":258},[100,66934,66935,66937,66939,66942,66944],{"class":102,"line":972},[100,66936,56788],{"class":258},[100,66938,328],{"class":52854},[100,66940,66941],{"class":258},">商家\u003C\u002F",[100,66943,328],{"class":52854},[100,66945,52861],{"class":258},[100,66947,66948,66950,66952,66955,66957],{"class":102,"line":11370},[100,66949,56788],{"class":258},[100,66951,328],{"class":52854},[100,66953,66954],{"class":258},">价格\u003C\u002F",[100,66956,328],{"class":52854},[100,66958,52861],{"class":258},[100,66960,66961,66963,66965],{"class":102,"line":11375},[100,66962,53330],{"class":258},[100,66964,325],{"class":52854},[100,66966,52861],{"class":258},[100,66968,66969,66971,66973],{"class":102,"line":11380},[100,66970,52895],{"class":258},[100,66972,325],{"class":52854},[100,66974,52861],{"class":258},[100,66976,66977,66979,66981],{"class":102,"line":11385},[100,66978,56788],{"class":258},[100,66980,344],{"class":52854},[100,66982,52861],{"class":258},[100,66984,66985,66987,66989,66991,66993,66995,66997,66999,67002,67004,67006,67009],{"class":102,"line":11394},[100,66986,56856],{"class":258},[100,66988,55375],{"class":52854},[100,66990,55378],{"class":106},[100,66992,472],{"class":258},[100,66994,55383],{"class":110},[100,66996,16501],{"class":106},[100,66998,472],{"class":258},[100,67000,67001],{"class":110},"\"check\"",[100,67003,55040],{"class":106},[100,67005,472],{"class":258},[100,67007,67008],{"class":110},"\"ck\"",[100,67010,52861],{"class":258},[100,67012,67013,67015,67017],{"class":102,"line":11399},[100,67014,56961],{"class":258},[100,67016,344],{"class":52854},[100,67018,52861],{"class":258},[100,67020,67021,67023,67025,67027,67029],{"class":102,"line":11405},[100,67022,56788],{"class":258},[100,67024,344],{"class":52854},[100,67026,62727],{"class":258},[100,67028,344],{"class":52854},[100,67030,52861],{"class":258},[100,67032,67033,67035,67037,67040,67042],{"class":102,"line":11426},[100,67034,56788],{"class":258},[100,67036,344],{"class":52854},[100,67038,67039],{"class":258},">小米\u003C\u002F",[100,67041,344],{"class":52854},[100,67043,52861],{"class":258},[100,67045,67046,67048,67050,67053,67055],{"class":102,"line":11432},[100,67047,56788],{"class":258},[100,67049,344],{"class":52854},[100,67051,67052],{"class":258},">￥1999\u003C\u002F",[100,67054,344],{"class":52854},[100,67056,52861],{"class":258},[100,67058,67059,67061,67063],{"class":102,"line":11446},[100,67060,53330],{"class":258},[100,67062,325],{"class":52854},[100,67064,52861],{"class":258},[100,67066,67067,67069,67071],{"class":102,"line":11452},[100,67068,52895],{"class":258},[100,67070,325],{"class":52854},[100,67072,52861],{"class":258},[100,67074,67075,67077,67079],{"class":102,"line":11479},[100,67076,56788],{"class":258},[100,67078,344],{"class":52854},[100,67080,52861],{"class":258},[100,67082,67083,67085,67087,67089,67091,67093,67095,67097,67099,67101,67103,67105],{"class":102,"line":11488},[100,67084,56856],{"class":258},[100,67086,55375],{"class":52854},[100,67088,55378],{"class":106},[100,67090,472],{"class":258},[100,67092,55383],{"class":110},[100,67094,16501],{"class":106},[100,67096,472],{"class":258},[100,67098,67001],{"class":110},[100,67100,55040],{"class":106},[100,67102,472],{"class":258},[100,67104,67008],{"class":110},[100,67106,52861],{"class":258},[100,67108,67109,67111,67113],{"class":102,"line":11494},[100,67110,56961],{"class":258},[100,67112,344],{"class":52854},[100,67114,52861],{"class":258},[100,67116,67117,67119,67121,67124,67126],{"class":102,"line":11502},[100,67118,56788],{"class":258},[100,67120,344],{"class":52854},[100,67122,67123],{"class":258},">小米净水器\u003C\u002F",[100,67125,344],{"class":52854},[100,67127,52861],{"class":258},[100,67129,67130,67132,67134,67136,67138],{"class":102,"line":11507},[100,67131,56788],{"class":258},[100,67133,344],{"class":52854},[100,67135,67039],{"class":258},[100,67137,344],{"class":52854},[100,67139,52861],{"class":258},[100,67141,67142,67144,67146,67149,67151],{"class":102,"line":18185},[100,67143,56788],{"class":258},[100,67145,344],{"class":52854},[100,67147,67148],{"class":258},">￥4999\u003C\u002F",[100,67150,344],{"class":52854},[100,67152,52861],{"class":258},[100,67154,67155,67157,67159],{"class":102,"line":18191},[100,67156,53330],{"class":258},[100,67158,325],{"class":52854},[100,67160,52861],{"class":258},[100,67162,67163,67165,67167],{"class":102,"line":18214},[100,67164,52895],{"class":258},[100,67166,325],{"class":52854},[100,67168,52861],{"class":258},[100,67170,67171,67173,67175],{"class":102,"line":18220},[100,67172,56788],{"class":258},[100,67174,344],{"class":52854},[100,67176,52861],{"class":258},[100,67178,67179,67181,67183,67185,67187,67189,67191,67193,67195,67197,67199,67201],{"class":102,"line":18243},[100,67180,56856],{"class":258},[100,67182,55375],{"class":52854},[100,67184,55378],{"class":106},[100,67186,472],{"class":258},[100,67188,55383],{"class":110},[100,67190,16501],{"class":106},[100,67192,472],{"class":258},[100,67194,67001],{"class":110},[100,67196,55040],{"class":106},[100,67198,472],{"class":258},[100,67200,67008],{"class":110},[100,67202,52861],{"class":258},[100,67204,67205,67207,67209],{"class":102,"line":18257},[100,67206,56961],{"class":258},[100,67208,344],{"class":52854},[100,67210,52861],{"class":258},[100,67212,67213,67215,67217,67220,67222],{"class":102,"line":18277},[100,67214,56788],{"class":258},[100,67216,344],{"class":52854},[100,67218,67219],{"class":258},">小米电视\u003C\u002F",[100,67221,344],{"class":52854},[100,67223,52861],{"class":258},[100,67225,67226,67228,67230,67232,67234],{"class":102,"line":18283},[100,67227,56788],{"class":258},[100,67229,344],{"class":52854},[100,67231,67039],{"class":258},[100,67233,344],{"class":52854},[100,67235,52861],{"class":258},[100,67237,67238,67240,67242,67245,67247],{"class":102,"line":18294},[100,67239,56788],{"class":258},[100,67241,344],{"class":52854},[100,67243,67244],{"class":258},">￥5999\u003C\u002F",[100,67246,344],{"class":52854},[100,67248,52861],{"class":258},[100,67250,67251,67253,67255],{"class":102,"line":18317},[100,67252,53330],{"class":258},[100,67254,325],{"class":52854},[100,67256,52861],{"class":258},[100,67258,67259,67261,67263],{"class":102,"line":18339},[100,67260,53971],{"class":258},[100,67262,319],{"class":52854},[100,67264,52861],{"class":258},[100,67266,67267,67269,67271],{"class":102,"line":18344},[100,67268,53698],{"class":258},[100,67270,53367],{"class":52854},[100,67272,52861],{"class":258},[100,67274,67275],{"class":102,"line":18350},[100,67276,67277],{"class":1836},"    \u002F\u002F 1. 获取大复选框\n",[100,67279,67280,67282,67285,67287,67289,67291,67293,67296],{"class":102,"line":18364},[100,67281,12803],{"class":471},[100,67283,67284],{"class":117}," checkAll",[100,67286,583],{"class":471},[100,67288,55950],{"class":258},[100,67290,55953],{"class":106},[100,67292,713],{"class":258},[100,67294,67295],{"class":110},"'#checkAll'",[100,67297,809],{"class":258},[100,67299,67300],{"class":102,"line":18377},[100,67301,67302],{"class":1836},"    \u002F\u002F 2. 获取所有的小复选框\n",[100,67304,67305,67307,67310,67312,67314,67316,67318,67321],{"class":102,"line":18382},[100,67306,12803],{"class":471},[100,67308,67309],{"class":117}," cks",[100,67311,583],{"class":471},[100,67313,55950],{"class":258},[100,67315,57235],{"class":106},[100,67317,713],{"class":258},[100,67319,67320],{"class":110},"'.ck'",[100,67322,809],{"class":258},[100,67324,67325],{"class":102,"line":18396},[100,67326,67327],{"class":1836},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[100,67329,67330,67333,67335,67337,67339,67341,67343],{"class":102,"line":18401},[100,67331,67332],{"class":258},"    checkAll.",[100,67334,59367],{"class":106},[100,67336,713],{"class":258},[100,67338,59372],{"class":110},[100,67340,14017],{"class":258},[100,67342,56003],{"class":471},[100,67344,56006],{"class":258},[100,67346,67347],{"class":102,"line":18407},[100,67348,67349],{"class":1836},"      \u002F\u002F 得到当前大复选框的选中状态\n",[100,67351,67352,67355],{"class":102,"line":18412},[100,67353,67354],{"class":1836},"      \u002F\u002F console.log(checkAll.checked)",[100,67356,67357],{"class":1836},"  \u002F\u002F 得到 是 true 或者是 false\n",[100,67359,67360],{"class":102,"line":18426},[100,67361,67362],{"class":1836},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[100,67364,67365,67367,67369,67371,67373,67375,67377,67379,67381,67384,67386,67388,67390],{"class":102,"line":18431},[100,67366,53838],{"class":471},[100,67368,3283],{"class":258},[100,67370,53401],{"class":471},[100,67372,11023],{"class":258},[100,67374,472],{"class":471},[100,67376,5692],{"class":117},[100,67378,11030],{"class":258},[100,67380,2676],{"class":471},[100,67382,67383],{"class":258}," cks.",[100,67385,53522],{"class":117},[100,67387,4814],{"class":258},[100,67389,3903],{"class":471},[100,67391,14024],{"class":258},[100,67393,67394,67397,67399,67402],{"class":102,"line":18436},[100,67395,67396],{"class":258},"        cks[i].checked ",[100,67398,472],{"class":471},[100,67400,67401],{"class":117}," this",[100,67403,67404],{"class":258},".checked\n",[100,67406,67407],{"class":102,"line":18450},[100,67408,53952],{"class":258},[100,67410,67411],{"class":102,"line":18462},[100,67412,35016],{"class":258},[100,67414,67415],{"class":102,"line":18467},[100,67416,67417],{"class":1836},"    \u002F\u002F 5. 小复选框控制大复选框\n",[100,67419,67420],{"class":102,"line":18480},[100,67421,570],{"emptyLinePlaceholder":569},[100,67423,67424,67426,67428,67430,67432,67434,67436,67438,67440,67442,67444,67446,67448],{"class":102,"line":18485},[100,67425,848],{"class":471},[100,67427,3283],{"class":258},[100,67429,53401],{"class":471},[100,67431,11023],{"class":258},[100,67433,472],{"class":471},[100,67435,5692],{"class":117},[100,67437,11030],{"class":258},[100,67439,2676],{"class":471},[100,67441,67383],{"class":258},[100,67443,53522],{"class":117},[100,67445,4814],{"class":258},[100,67447,3903],{"class":471},[100,67449,14024],{"class":258},[100,67451,67452],{"class":102,"line":18490},[100,67453,67454],{"class":1836},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[100,67456,67457,67460,67462,67464,67466,67468,67470],{"class":102,"line":18495},[100,67458,67459],{"class":258},"      cks[i].",[100,67461,59367],{"class":106},[100,67463,713],{"class":258},[100,67465,59372],{"class":110},[100,67467,14017],{"class":258},[100,67469,56003],{"class":471},[100,67471,56006],{"class":258},[100,67473,67474],{"class":102,"line":18508},[100,67475,67476],{"class":1836},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[100,67478,67479],{"class":102,"line":18513},[100,67480,67481],{"class":1836},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[100,67483,67484],{"class":102,"line":34189},[100,67485,67486],{"class":1836},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[100,67488,67489],{"class":102,"line":34195},[100,67490,67491],{"class":1836},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[100,67493,67494,67497,67499,67501,67503,67505,67508,67510,67512,67514,67516],{"class":102,"line":34201},[100,67495,67496],{"class":258},"        checkAll.checked ",[100,67498,472],{"class":471},[100,67500,55950],{"class":258},[100,67502,57235],{"class":106},[100,67504,713],{"class":258},[100,67506,67507],{"class":110},"'.ck:checked'",[100,67509,32389],{"class":258},[100,67511,53522],{"class":117},[100,67513,59460],{"class":471},[100,67515,67383],{"class":258},[100,67517,57385],{"class":117},[100,67519,67520],{"class":102,"line":34207},[100,67521,66369],{"class":258},[100,67523,67524],{"class":102,"line":34213},[100,67525,3798],{"class":258},[100,67527,67528,67530,67532],{"class":102,"line":34224},[100,67529,53971],{"class":258},[100,67531,53367],{"class":52854},[100,67533,52861],{"class":258},[100,67535,67536,67538,67540],{"class":102,"line":34230},[100,67537,53339],{"class":258},[100,67539,53354],{"class":52854},[100,67541,52861],{"class":258},[100,67543,67544],{"class":102,"line":34250},[100,67545,570],{"emptyLinePlaceholder":569},[100,67547,67548,67550,67552],{"class":102,"line":34256},[100,67549,53339],{"class":258},[100,67551,52189],{"class":52854},[100,67553,52861],{"class":258},[19,67555,67556],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,67558,67559],{},"用好之间比较得到的布尔值！！！",[19,67561,67562,67563,67566,67567,3283,67570,2351,67572,67575],{},"在 JS 里访问的时候，",[32,67564,67565],{},"checkbox.checked"," 是一个 ",[1921,67568,67569],{},"布尔值",[32,67571,2995],{},[32,67573,67574],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,67577,67578,67579,67582,67583],{},"HTML 的 ",[32,67580,67581],{},"checked=\"checked\""," 只是 ",[1921,67584,67585,67586,67589],{},"初始值；JS 的 ",[32,67587,67588],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,67591,67592],{},"：checked是一个伪类选择器",[19,67594,67595],{},[3095,67596],{"alt":79,"src":67597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,67599,67600,67603],{},[67601,67602],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,67605,67606],{},[3095,67607],{"alt":79,"src":67608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,67610,67612],{"id":67611},"_33-dom事件进阶","3.3 DOM事件进阶",[305,67614,67616],{"id":67615},"_331-事件流","3.3.1 事件流",[19,67618,67619],{},[3095,67620],{"alt":79,"src":67621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[23579,67623,67625],{"id":67624},"_3311-事件捕获","3.3.1.1 事件捕获",[19,67627,67628],{},[3095,67629],{"alt":79,"src":67630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[73,67632,67634],{"className":52187,"code":67633,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .father {\n      width: 500px;\n      height: 500px;\n      background-color: pink;\n    }\n\n    .son {\n      width: 200px;\n      height: 200px;\n      background-color: skyblue;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"father\">\n    \u003Cdiv class=\"son\">\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const fa = document.querySelector('.father')\n    const son = document.querySelector('.son')\n    document.addEventListener('click', function () {\n      alert('woshiu1')\n    }, true)\n    fa.addEventListener('click', function () {\n      alert('1')\n    }, true)\n    son.addEventListener('click', function () {\n      alert('2')\n    }, true)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,67635,67636,67646,67660,67664,67672,67686,67706,67718,67726,67733,67745,67757,67767,67771,67775,67782,67794,67806,67816,67820,67828,67836,67840,67848,67863,67882,67890,67898,67918,67938,67954,67965,67973,67990,68001,68009,68026,68037,68045,68053,68061,68065],{"__ignoreMap":79},[100,67637,67638,67640,67642,67644],{"class":102,"line":103},[100,67639,52851],{"class":258},[100,67641,52855],{"class":52854},[100,67643,52858],{"class":106},[100,67645,52861],{"class":258},[100,67647,67648,67650,67652,67654,67656,67658],{"class":102,"line":188},[100,67649,2676],{"class":258},[100,67651,52189],{"class":52854},[100,67653,52870],{"class":106},[100,67655,472],{"class":258},[100,67657,52875],{"class":110},[100,67659,52861],{"class":258},[100,67661,67662],{"class":102,"line":199},[100,67663,570],{"emptyLinePlaceholder":569},[100,67665,67666,67668,67670],{"class":102,"line":532},[100,67667,2676],{"class":258},[100,67669,52888],{"class":52854},[100,67671,52861],{"class":258},[100,67673,67674,67676,67678,67680,67682,67684],{"class":102,"line":577},[100,67675,53698],{"class":258},[100,67677,52898],{"class":52854},[100,67679,52901],{"class":106},[100,67681,472],{"class":258},[100,67683,52906],{"class":110},[100,67685,52861],{"class":258},[100,67687,67688,67690,67692,67694,67696,67698,67700,67702,67704],{"class":102,"line":589},[100,67689,53698],{"class":258},[100,67691,52898],{"class":52854},[100,67693,16501],{"class":106},[100,67695,472],{"class":258},[100,67697,52945],{"class":110},[100,67699,52925],{"class":106},[100,67701,472],{"class":258},[100,67703,52952],{"class":110},[100,67705,52861],{"class":258},[100,67707,67708,67710,67712,67714,67716],{"class":102,"line":595},[100,67709,53698],{"class":258},[100,67711,52961],{"class":52854},[100,67713,52964],{"class":258},[100,67715,52961],{"class":52854},[100,67717,52861],{"class":258},[100,67719,67720,67722,67724],{"class":102,"line":601},[100,67721,53698],{"class":258},[100,67723,1677],{"class":52854},[100,67725,52861],{"class":258},[100,67727,67728,67731],{"class":102,"line":606},[100,67729,67730],{"class":106},"    .father",[100,67732,17153],{"class":258},[100,67734,67735,67737,67739,67741,67743],{"class":102,"line":612},[100,67736,56325],{"class":117},[100,67738,52991],{"class":258},[100,67740,66628],{"class":117},[100,67742,53046],{"class":471},[100,67744,2927],{"class":258},[100,67746,67747,67749,67751,67753,67755],{"class":102,"line":618},[100,67748,56339],{"class":117},[100,67750,52991],{"class":258},[100,67752,66628],{"class":117},[100,67754,53046],{"class":471},[100,67756,2927],{"class":258},[100,67758,67759,67761,67763,67765],{"class":102,"line":623},[100,67760,56438],{"class":117},[100,67762,52991],{"class":258},[100,67764,53199],{"class":117},[100,67766,2927],{"class":258},[100,67768,67769],{"class":102,"line":629},[100,67770,3798],{"class":258},[100,67772,67773],{"class":102,"line":635},[100,67774,570],{"emptyLinePlaceholder":569},[100,67776,67777,67780],{"class":102,"line":641},[100,67778,67779],{"class":106},"    .son",[100,67781,17153],{"class":258},[100,67783,67784,67786,67788,67790,67792],{"class":102,"line":647},[100,67785,56325],{"class":117},[100,67787,52991],{"class":258},[100,67789,3343],{"class":117},[100,67791,53046],{"class":471},[100,67793,2927],{"class":258},[100,67795,67796,67798,67800,67802,67804],{"class":102,"line":653},[100,67797,56339],{"class":117},[100,67799,52991],{"class":258},[100,67801,3343],{"class":117},[100,67803,53046],{"class":471},[100,67805,2927],{"class":258},[100,67807,67808,67810,67812,67814],{"class":102,"line":659},[100,67809,56438],{"class":117},[100,67811,52991],{"class":258},[100,67813,56443],{"class":117},[100,67815,2927],{"class":258},[100,67817,67818],{"class":102,"line":665},[100,67819,3798],{"class":258},[100,67821,67822,67824,67826],{"class":102,"line":670},[100,67823,53971],{"class":258},[100,67825,1677],{"class":52854},[100,67827,52861],{"class":258},[100,67829,67830,67832,67834],{"class":102,"line":675},[100,67831,53339],{"class":258},[100,67833,52888],{"class":52854},[100,67835,52861],{"class":258},[100,67837,67838],{"class":102,"line":699},[100,67839,570],{"emptyLinePlaceholder":569},[100,67841,67842,67844,67846],{"class":102,"line":708},[100,67843,2676],{"class":258},[100,67845,53354],{"class":52854},[100,67847,52861],{"class":258},[100,67849,67850,67852,67854,67856,67858,67861],{"class":102,"line":722},[100,67851,53698],{"class":258},[100,67853,53165],{"class":52854},[100,67855,55040],{"class":106},[100,67857,472],{"class":258},[100,67859,67860],{"class":110},"\"father\"",[100,67862,52861],{"class":258},[100,67864,67865,67867,67869,67871,67873,67876,67878,67880],{"class":102,"line":735},[100,67866,52895],{"class":258},[100,67868,53165],{"class":52854},[100,67870,55040],{"class":106},[100,67872,472],{"class":258},[100,67874,67875],{"class":110},"\"son\"",[100,67877,56868],{"class":258},[100,67879,53165],{"class":52854},[100,67881,52861],{"class":258},[100,67883,67884,67886,67888],{"class":102,"line":754},[100,67885,53971],{"class":258},[100,67887,53165],{"class":52854},[100,67889,52861],{"class":258},[100,67891,67892,67894,67896],{"class":102,"line":771},[100,67893,53698],{"class":258},[100,67895,53367],{"class":52854},[100,67897,52861],{"class":258},[100,67899,67900,67902,67905,67907,67909,67911,67913,67916],{"class":102,"line":776},[100,67901,12803],{"class":471},[100,67903,67904],{"class":117}," fa",[100,67906,583],{"class":471},[100,67908,55950],{"class":258},[100,67910,55953],{"class":106},[100,67912,713],{"class":258},[100,67914,67915],{"class":110},"'.father'",[100,67917,809],{"class":258},[100,67919,67920,67922,67925,67927,67929,67931,67933,67936],{"class":102,"line":781},[100,67921,12803],{"class":471},[100,67923,67924],{"class":117}," son",[100,67926,583],{"class":471},[100,67928,55950],{"class":258},[100,67930,55953],{"class":106},[100,67932,713],{"class":258},[100,67934,67935],{"class":110},"'.son'",[100,67937,809],{"class":258},[100,67939,67940,67942,67944,67946,67948,67950,67952],{"class":102,"line":796},[100,67941,53961],{"class":258},[100,67943,59367],{"class":106},[100,67945,713],{"class":258},[100,67947,59372],{"class":110},[100,67949,14017],{"class":258},[100,67951,56003],{"class":471},[100,67953,56006],{"class":258},[100,67955,67956,67958,67960,67963],{"class":102,"line":812},[100,67957,60479],{"class":106},[100,67959,713],{"class":258},[100,67961,67962],{"class":110},"'woshiu1'",[100,67964,809],{"class":258},[100,67966,67967,67969,67971],{"class":102,"line":823},[100,67968,56089],{"class":258},[100,67970,2995],{"class":117},[100,67972,809],{"class":258},[100,67974,67975,67978,67980,67982,67984,67986,67988],{"class":102,"line":828},[100,67976,67977],{"class":258},"    fa.",[100,67979,59367],{"class":106},[100,67981,713],{"class":258},[100,67983,59372],{"class":110},[100,67985,14017],{"class":258},[100,67987,56003],{"class":471},[100,67989,56006],{"class":258},[100,67991,67992,67994,67996,67999],{"class":102,"line":840},[100,67993,60479],{"class":106},[100,67995,713],{"class":258},[100,67997,67998],{"class":110},"'1'",[100,68000,809],{"class":258},[100,68002,68003,68005,68007],{"class":102,"line":845},[100,68004,56089],{"class":258},[100,68006,2995],{"class":117},[100,68008,809],{"class":258},[100,68010,68011,68014,68016,68018,68020,68022,68024],{"class":102,"line":868},[100,68012,68013],{"class":258},"    son.",[100,68015,59367],{"class":106},[100,68017,713],{"class":258},[100,68019,59372],{"class":110},[100,68021,14017],{"class":258},[100,68023,56003],{"class":471},[100,68025,56006],{"class":258},[100,68027,68028,68030,68032,68035],{"class":102,"line":874},[100,68029,60479],{"class":106},[100,68031,713],{"class":258},[100,68033,68034],{"class":110},"'2'",[100,68036,809],{"class":258},[100,68038,68039,68041,68043],{"class":102,"line":879},[100,68040,56089],{"class":258},[100,68042,2995],{"class":117},[100,68044,809],{"class":258},[100,68046,68047,68049,68051],{"class":102,"line":889},[100,68048,53971],{"class":258},[100,68050,53367],{"class":52854},[100,68052,52861],{"class":258},[100,68054,68055,68057,68059],{"class":102,"line":894},[100,68056,53339],{"class":258},[100,68058,53354],{"class":52854},[100,68060,52861],{"class":258},[100,68062,68063],{"class":102,"line":900},[100,68064,570],{"emptyLinePlaceholder":569},[100,68066,68067,68069,68071],{"class":102,"line":910},[100,68068,53339],{"class":258},[100,68070,52189],{"class":52854},[100,68072,52861],{"class":258},[19,68074,68075],{},[3095,68076],{"alt":79,"src":68077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,68079,68080],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[23579,68082,68084],{"id":68083},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,68086,68087],{},[3095,68088],{"alt":79,"src":68089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,68091,68092],{},"反着来",[19,68094,68095],{},"注意是同名事件，比如都是‘click’",[23579,68097,68099],{"id":68098},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,68101,68102],{},[3095,68103],{"alt":79,"src":68104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[23579,68106,68108],{"id":68107},"_3314-解绑事件","3.3.1.4 解绑事件",[19,68110,68111],{},[3095,68112],{"alt":79,"src":68113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,68115,68116],{},[3095,68117],{"alt":79,"src":68118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[23579,68120,68122],{"id":68121},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[26,68124,68125],{},[29,68126,68127],{},"事件类型的区别",[19,68129,68130],{},[3095,68131],{"alt":79,"src":68132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,68134,68135],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[26,68137,68138],{"start":188},[29,68139,68140],{},"注册事件的区别",[19,68142,68143],{},[3095,68144],{"alt":79,"src":68145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[23579,68147,68149],{"id":68148},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,68151,68152],{},[3095,68153],{"alt":79,"src":68154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,68156,68157],{},[3095,68158],{"alt":79,"src":68159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[73,68161,68163],{"className":54621,"code":68162,"language":54623,"meta":79,"style":79},"\u003Cbody>\n  \u003Cform action=\"http:\u002F\u002Fwww.itcast.cn\">\n    \u003Cinput type=\"submit\" value=\"免费注册\">\n    \u003Cscript>\n      const form = document.querySelector('form')\n      form.addEventListener('submit', function (e) {\n        e.preventDefault()\n      })\n    \u003C\u002Fscript>\n  \u003C\u002Fform>\n\u003C\u002Fbody>\n",[32,68164,68165,68173,68190,68213,68221,68226,68231,68236,68240,68248,68256],{"__ignoreMap":79},[100,68166,68167,68169,68171],{"class":102,"line":103},[100,68168,2676],{"class":258},[100,68170,53354],{"class":52854},[100,68172,52861],{"class":258},[100,68174,68175,68177,68180,68183,68185,68188],{"class":102,"line":188},[100,68176,53698],{"class":258},[100,68178,68179],{"class":52854},"form",[100,68181,68182],{"class":106}," action",[100,68184,472],{"class":258},[100,68186,68187],{"class":110},"\"http:\u002F\u002Fwww.itcast.cn\"",[100,68189,52861],{"class":258},[100,68191,68192,68194,68196,68198,68200,68203,68206,68208,68211],{"class":102,"line":199},[100,68193,52895],{"class":258},[100,68195,55375],{"class":52854},[100,68197,55378],{"class":106},[100,68199,472],{"class":258},[100,68201,68202],{"class":110},"\"submit\"",[100,68204,68205],{"class":106}," value",[100,68207,472],{"class":258},[100,68209,68210],{"class":110},"\"免费注册\"",[100,68212,52861],{"class":258},[100,68214,68215,68217,68219],{"class":102,"line":532},[100,68216,52895],{"class":258},[100,68218,53367],{"class":52854},[100,68220,52861],{"class":258},[100,68222,68223],{"class":102,"line":577},[100,68224,68225],{"class":258},"      const form = document.querySelector('form')\n",[100,68227,68228],{"class":102,"line":589},[100,68229,68230],{"class":258},"      form.addEventListener('submit', function (e) {\n",[100,68232,68233],{"class":102,"line":595},[100,68234,68235],{"class":258},"        e.preventDefault()\n",[100,68237,68238],{"class":102,"line":601},[100,68239,66369],{"class":258},[100,68241,68242,68244,68246],{"class":102,"line":606},[100,68243,53330],{"class":258},[100,68245,53367],{"class":52854},[100,68247,52861],{"class":258},[100,68249,68250,68252,68254],{"class":102,"line":612},[100,68251,53971],{"class":258},[100,68253,68179],{"class":52854},[100,68255,52861],{"class":258},[100,68257,68258,68260,68262],{"class":102,"line":618},[100,68259,53339],{"class":258},[100,68261,53354],{"class":52854},[100,68263,52861],{"class":258},[19,68265,68266],{},"点击不在跳转！！！",[305,68268,68270],{"id":68269},"_332-事件委托","3.3.2 事件委托",[19,68272,68273],{},[3095,68274],{"alt":79,"src":68275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[73,68277,68279],{"className":52187,"code":68278,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cul>\n    \u003Cli>1\u003C\u002Fli>\n    \u003Cli>2\u003C\u002Fli>\n    \u003Cli>3\u003C\u002Fli>\n    \u003Cli>4\u003C\u002Fli>\n    \u003Cli>5\u003C\u002Fli>\n    \u003Cp>我不需要变色\u003C\u002Fp>\n  \u003C\u002Ful>\n  \u003Cscript>\n    \u002F\u002F 点击每个li，当前文字变为红色\n    const ul = document.querySelector('ul')\n    ul.addEventListener('click', function (e) {\n      \u002F\u002F alert(1)\n      \u002F\u002F e.target就是我们点击的对象\n      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n      \u002F\u002F e.target.style.color = 'red'\n      console.log(e)\n\n      console.dir(e.target)\n\n      \u002F\u002F 我们需求，我们只有点击li才会变色\n      \u002F\u002F 通过tagName来进行判断\n      if (e.target.tagName === 'LI') {\n        e.target.style.color = 'red'\n      }\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,68280,68281,68291,68305,68309,68317,68331,68351,68363,68371,68375,68383,68391,68403,68415,68427,68439,68451,68464,68472,68480,68485,68504,68525,68530,68535,68540,68545,68554,68558,68568,68572,68577,68582,68596,68606,68610,68614,68622,68630,68634],{"__ignoreMap":79},[100,68282,68283,68285,68287,68289],{"class":102,"line":103},[100,68284,52851],{"class":258},[100,68286,52855],{"class":52854},[100,68288,52858],{"class":106},[100,68290,52861],{"class":258},[100,68292,68293,68295,68297,68299,68301,68303],{"class":102,"line":188},[100,68294,2676],{"class":258},[100,68296,52189],{"class":52854},[100,68298,52870],{"class":106},[100,68300,472],{"class":258},[100,68302,52875],{"class":110},[100,68304,52861],{"class":258},[100,68306,68307],{"class":102,"line":199},[100,68308,570],{"emptyLinePlaceholder":569},[100,68310,68311,68313,68315],{"class":102,"line":532},[100,68312,2676],{"class":258},[100,68314,52888],{"class":52854},[100,68316,52861],{"class":258},[100,68318,68319,68321,68323,68325,68327,68329],{"class":102,"line":577},[100,68320,53698],{"class":258},[100,68322,52898],{"class":52854},[100,68324,52901],{"class":106},[100,68326,472],{"class":258},[100,68328,52906],{"class":110},[100,68330,52861],{"class":258},[100,68332,68333,68335,68337,68339,68341,68343,68345,68347,68349],{"class":102,"line":589},[100,68334,53698],{"class":258},[100,68336,52898],{"class":52854},[100,68338,16501],{"class":106},[100,68340,472],{"class":258},[100,68342,52945],{"class":110},[100,68344,52925],{"class":106},[100,68346,472],{"class":258},[100,68348,52952],{"class":110},[100,68350,52861],{"class":258},[100,68352,68353,68355,68357,68359,68361],{"class":102,"line":595},[100,68354,53698],{"class":258},[100,68356,52961],{"class":52854},[100,68358,52964],{"class":258},[100,68360,52961],{"class":52854},[100,68362,52861],{"class":258},[100,68364,68365,68367,68369],{"class":102,"line":601},[100,68366,53339],{"class":258},[100,68368,52888],{"class":52854},[100,68370,52861],{"class":258},[100,68372,68373],{"class":102,"line":606},[100,68374,570],{"emptyLinePlaceholder":569},[100,68376,68377,68379,68381],{"class":102,"line":612},[100,68378,2676],{"class":258},[100,68380,53354],{"class":52854},[100,68382,52861],{"class":258},[100,68384,68385,68387,68389],{"class":102,"line":618},[100,68386,53698],{"class":258},[100,68388,2773],{"class":52854},[100,68390,52861],{"class":258},[100,68392,68393,68395,68397,68399,68401],{"class":102,"line":623},[100,68394,52895],{"class":258},[100,68396,29],{"class":52854},[100,68398,55520],{"class":258},[100,68400,29],{"class":52854},[100,68402,52861],{"class":258},[100,68404,68405,68407,68409,68411,68413],{"class":102,"line":629},[100,68406,52895],{"class":258},[100,68408,29],{"class":52854},[100,68410,55539],{"class":258},[100,68412,29],{"class":52854},[100,68414,52861],{"class":258},[100,68416,68417,68419,68421,68423,68425],{"class":102,"line":635},[100,68418,52895],{"class":258},[100,68420,29],{"class":52854},[100,68422,55558],{"class":258},[100,68424,29],{"class":52854},[100,68426,52861],{"class":258},[100,68428,68429,68431,68433,68435,68437],{"class":102,"line":641},[100,68430,52895],{"class":258},[100,68432,29],{"class":52854},[100,68434,55577],{"class":258},[100,68436,29],{"class":52854},[100,68438,52861],{"class":258},[100,68440,68441,68443,68445,68447,68449],{"class":102,"line":647},[100,68442,52895],{"class":258},[100,68444,29],{"class":52854},[100,68446,55596],{"class":258},[100,68448,29],{"class":52854},[100,68450,52861],{"class":258},[100,68452,68453,68455,68457,68460,68462],{"class":102,"line":653},[100,68454,52895],{"class":258},[100,68456,19],{"class":52854},[100,68458,68459],{"class":258},">我不需要变色\u003C\u002F",[100,68461,19],{"class":52854},[100,68463,52861],{"class":258},[100,68465,68466,68468,68470],{"class":102,"line":659},[100,68467,53971],{"class":258},[100,68469,2773],{"class":52854},[100,68471,52861],{"class":258},[100,68473,68474,68476,68478],{"class":102,"line":665},[100,68475,53698],{"class":258},[100,68477,53367],{"class":52854},[100,68479,52861],{"class":258},[100,68481,68482],{"class":102,"line":670},[100,68483,68484],{"class":1836},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[100,68486,68487,68489,68491,68493,68495,68497,68499,68502],{"class":102,"line":675},[100,68488,12803],{"class":471},[100,68490,62846],{"class":117},[100,68492,583],{"class":471},[100,68494,55950],{"class":258},[100,68496,55953],{"class":106},[100,68498,713],{"class":258},[100,68500,68501],{"class":110},"'ul'",[100,68503,809],{"class":258},[100,68505,68506,68509,68511,68513,68515,68517,68519,68521,68523],{"class":102,"line":699},[100,68507,68508],{"class":258},"    ul.",[100,68510,59367],{"class":106},[100,68512,713],{"class":258},[100,68514,59372],{"class":110},[100,68516,14017],{"class":258},[100,68518,56003],{"class":471},[100,68520,3283],{"class":258},[100,68522,1852],{"class":6812},[100,68524,14024],{"class":258},[100,68526,68527],{"class":102,"line":708},[100,68528,68529],{"class":1836},"      \u002F\u002F alert(1)\n",[100,68531,68532],{"class":102,"line":722},[100,68533,68534],{"class":1836},"      \u002F\u002F e.target就是我们点击的对象\n",[100,68536,68537],{"class":102,"line":735},[100,68538,68539],{"class":1836},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[100,68541,68542],{"class":102,"line":754},[100,68543,68544],{"class":1836},"      \u002F\u002F e.target.style.color = 'red'\n",[100,68546,68547,68549,68551],{"class":102,"line":771},[100,68548,59798],{"class":258},[100,68550,59801],{"class":106},[100,68552,68553],{"class":258},"(e)\n",[100,68555,68556],{"class":102,"line":776},[100,68557,570],{"emptyLinePlaceholder":569},[100,68559,68560,68562,68565],{"class":102,"line":781},[100,68561,59798],{"class":258},[100,68563,68564],{"class":106},"dir",[100,68566,68567],{"class":258},"(e.target)\n",[100,68569,68570],{"class":102,"line":796},[100,68571,570],{"emptyLinePlaceholder":569},[100,68573,68574],{"class":102,"line":812},[100,68575,68576],{"class":1836},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[100,68578,68579],{"class":102,"line":823},[100,68580,68581],{"class":1836},"      \u002F\u002F 通过tagName来进行判断\n",[100,68583,68584,68586,68589,68591,68594],{"class":102,"line":828},[100,68585,56034],{"class":471},[100,68587,68588],{"class":258}," (e.target.tagName ",[100,68590,56040],{"class":471},[100,68592,68593],{"class":110}," 'LI'",[100,68595,14024],{"class":258},[100,68597,68598,68601,68603],{"class":102,"line":840},[100,68599,68600],{"class":258},"        e.target.style.color ",[100,68602,472],{"class":471},[100,68604,68605],{"class":110}," 'red'\n",[100,68607,68608],{"class":102,"line":845},[100,68609,53952],{"class":258},[100,68611,68612],{"class":102,"line":868},[100,68613,35016],{"class":258},[100,68615,68616,68618,68620],{"class":102,"line":874},[100,68617,53971],{"class":258},[100,68619,53367],{"class":52854},[100,68621,52861],{"class":258},[100,68623,68624,68626,68628],{"class":102,"line":879},[100,68625,53339],{"class":258},[100,68627,53354],{"class":52854},[100,68629,52861],{"class":258},[100,68631,68632],{"class":102,"line":889},[100,68633,570],{"emptyLinePlaceholder":569},[100,68635,68636,68638,68640],{"class":102,"line":894},[100,68637,53339],{"class":258},[100,68639,52189],{"class":52854},[100,68641,52861],{"class":258},[19,68643,68644],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,68646,68647],{},"if(e.target.ragName==='P') {}",[19,68649,68650],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,68652,68653],{},"通过事件委托的方式实现tab栏切换改造：",[19,68655,68656],{},"一定要记住自定义属性！！！！！！",[19,68658,68659],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,68661,68662],{},"id是自定义的属性名",[19,68664,68665],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[73,68667,68669],{"className":52187,"code":68668,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Ctitle>tab栏切换\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      margin: 0;\n      padding: 0;\n    }\n\n    .tab {\n      width: 590px;\n      height: 340px;\n      margin: 20px;\n      border: 1px solid #e4e4e4;\n    }\n\n    .tab-nav {\n      width: 100%;\n      height: 60px;\n      line-height: 60px;\n      display: flex;\n      justify-content: space-between;\n    }\n\n    .tab-nav h3 {\n      font-size: 24px;\n      font-weight: normal;\n      margin-left: 20px;\n    }\n\n    .tab-nav ul {\n      list-style: none;\n      display: flex;\n      justify-content: flex-end;\n    }\n\n    .tab-nav ul li {\n      margin: 0 20px;\n      font-size: 14px;\n    }\n\n    .tab-nav ul li a {\n      text-decoration: none;\n      border-bottom: 2px solid transparent;\n      color: #333;\n    }\n\n    .tab-nav ul li a.active {\n      border-color: #e1251b;\n      color: #e1251b;\n    }\n\n    .tab-content {\n      padding: 0 16px;\n    }\n\n    .tab-content .item {\n      display: none;\n    }\n\n    .tab-content .active {\n      display: block;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"tab\">\n    \u003Cdiv class=\"tab-nav\">\n      \u003Ch3>每日特价\u003C\u002Fh3>\n      \u003Cul>\n        \u003Cli>\u003Ca class=\"active\" href=\"javascript:;\" data-id=\"0\">精选\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\" data-id=\"1\">美食\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\" data-id=\"2\">百货\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\" data-id=\"3\">个护\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\" data-id=\"4\">预告\u003C\u002Fa>\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"tab-content\">\n      \u003Cdiv class=\"item active\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 采取事件委托的形式，tab栏切换\n    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n    const ul = document.querySelector('.tab-nav ul')\n    \u002F\u002F 2.添加事件\n    ul.addEventListener('click', function (e) {\n      console.dir(e.target)\n      \u002F\u002Fe.targer是我们点击的对象\n      if (e.target.tagName === 'A') {\n        document.querySelector('.active').classList.remove('active')\n        e.target.classList.add('active')\n\n        \u002F\u002F 下面大盒子模块\n        \u002F\u002F console.log(e.target.dataset.id)\n        const i = +e.target.dataset.id\n        document.querySelector('.tab-content .active').classList.remove('active')\n        document.querySelector(`.tab-content .item:nth-child(${i + 1})`).classList.add('active')\n\n      }\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,68670,68671,68681,68695,68699,68707,68721,68741,68761,68773,68781,68787,68797,68807,68811,68815,68821,68833,68845,68857,68873,68877,68881,68887,68899,68911,68923,68933,68943,68947,68951,68959,68971,68981,68993,68997,69001,69009,69019,69029,69039,69043,69047,69057,69071,69083,69087,69091,69103,69113,69129,69139,69143,69147,69161,69171,69181,69185,69189,69195,69209,69213,69217,69225,69235,69239,69243,69252,69262,69266,69274,69282,69286,69294,69308,69322,69334,69342,69381,69413,69445,69477,69509,69517,69525,69539,69573,69607,69641,69675,69709,69717,69725,69733,69738,69743,69762,69767,69787,69795,69800,69813,69834,69847,69851,69856,69861,69874,69894,69922,69926,69930,69934,69942,69950,69954],{"__ignoreMap":79},[100,68672,68673,68675,68677,68679],{"class":102,"line":103},[100,68674,52851],{"class":258},[100,68676,52855],{"class":52854},[100,68678,52858],{"class":106},[100,68680,52861],{"class":258},[100,68682,68683,68685,68687,68689,68691,68693],{"class":102,"line":188},[100,68684,2676],{"class":258},[100,68686,52189],{"class":52854},[100,68688,52870],{"class":106},[100,68690,472],{"class":258},[100,68692,52875],{"class":110},[100,68694,52861],{"class":258},[100,68696,68697],{"class":102,"line":199},[100,68698,570],{"emptyLinePlaceholder":569},[100,68700,68701,68703,68705],{"class":102,"line":532},[100,68702,2676],{"class":258},[100,68704,52888],{"class":52854},[100,68706,52861],{"class":258},[100,68708,68709,68711,68713,68715,68717,68719],{"class":102,"line":577},[100,68710,53698],{"class":258},[100,68712,52898],{"class":52854},[100,68714,52901],{"class":106},[100,68716,472],{"class":258},[100,68718,52906],{"class":110},[100,68720,60681],{"class":258},[100,68722,68723,68725,68727,68729,68731,68733,68735,68737,68739],{"class":102,"line":589},[100,68724,53698],{"class":258},[100,68726,52898],{"class":52854},[100,68728,52917],{"class":106},[100,68730,472],{"class":258},[100,68732,52922],{"class":110},[100,68734,52925],{"class":106},[100,68736,472],{"class":258},[100,68738,52930],{"class":110},[100,68740,60681],{"class":258},[100,68742,68743,68745,68747,68749,68751,68753,68755,68757,68759],{"class":102,"line":595},[100,68744,53698],{"class":258},[100,68746,52898],{"class":52854},[100,68748,16501],{"class":106},[100,68750,472],{"class":258},[100,68752,52945],{"class":110},[100,68754,52925],{"class":106},[100,68756,472],{"class":258},[100,68758,52952],{"class":110},[100,68760,60681],{"class":258},[100,68762,68763,68765,68767,68769,68771],{"class":102,"line":601},[100,68764,53698],{"class":258},[100,68766,52961],{"class":52854},[100,68768,65179],{"class":258},[100,68770,52961],{"class":52854},[100,68772,52861],{"class":258},[100,68774,68775,68777,68779],{"class":102,"line":606},[100,68776,53698],{"class":258},[100,68778,1677],{"class":52854},[100,68780,52861],{"class":258},[100,68782,68783,68785],{"class":102,"line":612},[100,68784,7999],{"class":52854},[100,68786,17153],{"class":258},[100,68788,68789,68791,68793,68795],{"class":102,"line":618},[100,68790,56260],{"class":117},[100,68792,52991],{"class":258},[100,68794,1366],{"class":117},[100,68796,2927],{"class":258},[100,68798,68799,68801,68803,68805],{"class":102,"line":623},[100,68800,56249],{"class":117},[100,68802,52991],{"class":258},[100,68804,1366],{"class":117},[100,68806,2927],{"class":258},[100,68808,68809],{"class":102,"line":629},[100,68810,3798],{"class":258},[100,68812,68813],{"class":102,"line":635},[100,68814,570],{"emptyLinePlaceholder":569},[100,68816,68817,68819],{"class":102,"line":641},[100,68818,65230],{"class":106},[100,68820,17153],{"class":258},[100,68822,68823,68825,68827,68829,68831],{"class":102,"line":647},[100,68824,56325],{"class":117},[100,68826,52991],{"class":258},[100,68828,65241],{"class":117},[100,68830,53046],{"class":471},[100,68832,2927],{"class":258},[100,68834,68835,68837,68839,68841,68843],{"class":102,"line":653},[100,68836,56339],{"class":117},[100,68838,52991],{"class":258},[100,68840,65254],{"class":117},[100,68842,53046],{"class":471},[100,68844,2927],{"class":258},[100,68846,68847,68849,68851,68853,68855],{"class":102,"line":659},[100,68848,56260],{"class":117},[100,68850,52991],{"class":258},[100,68852,2466],{"class":117},[100,68854,53046],{"class":471},[100,68856,2927],{"class":258},[100,68858,68859,68861,68863,68865,68867,68869,68871],{"class":102,"line":665},[100,68860,63531],{"class":117},[100,68862,52991],{"class":258},[100,68864,1985],{"class":117},[100,68866,53046],{"class":471},[100,68868,53075],{"class":117},[100,68870,63798],{"class":117},[100,68872,2927],{"class":258},[100,68874,68875],{"class":102,"line":670},[100,68876,3798],{"class":258},[100,68878,68879],{"class":102,"line":675},[100,68880,570],{"emptyLinePlaceholder":569},[100,68882,68883,68885],{"class":102,"line":699},[100,68884,65299],{"class":106},[100,68886,17153],{"class":258},[100,68888,68889,68891,68893,68895,68897],{"class":102,"line":708},[100,68890,56325],{"class":117},[100,68892,52991],{"class":258},[100,68894,2078],{"class":117},[100,68896,2095],{"class":471},[100,68898,2927],{"class":258},[100,68900,68901,68903,68905,68907,68909],{"class":102,"line":722},[100,68902,56339],{"class":117},[100,68904,52991],{"class":258},[100,68906,2673],{"class":117},[100,68908,53046],{"class":471},[100,68910,2927],{"class":258},[100,68912,68913,68915,68917,68919,68921],{"class":102,"line":735},[100,68914,58913],{"class":117},[100,68916,52991],{"class":258},[100,68918,2673],{"class":117},[100,68920,53046],{"class":471},[100,68922,2927],{"class":258},[100,68924,68925,68927,68929,68931],{"class":102,"line":754},[100,68926,56563],{"class":117},[100,68928,52991],{"class":258},[100,68930,53031],{"class":117},[100,68932,2927],{"class":258},[100,68934,68935,68937,68939,68941],{"class":102,"line":771},[100,68936,56574],{"class":117},[100,68938,52991],{"class":258},[100,68940,53222],{"class":117},[100,68942,2927],{"class":258},[100,68944,68945],{"class":102,"line":776},[100,68946,3798],{"class":258},[100,68948,68949],{"class":102,"line":781},[100,68950,570],{"emptyLinePlaceholder":569},[100,68952,68953,68955,68957],{"class":102,"line":796},[100,68954,65299],{"class":106},[100,68956,65372],{"class":52854},[100,68958,17153],{"class":258},[100,68960,68961,68963,68965,68967,68969],{"class":102,"line":812},[100,68962,56476],{"class":117},[100,68964,52991],{"class":258},[100,68966,2566],{"class":117},[100,68968,53046],{"class":471},[100,68970,2927],{"class":258},[100,68972,68973,68975,68977,68979],{"class":102,"line":823},[100,68974,63888],{"class":117},[100,68976,52991],{"class":258},[100,68978,65395],{"class":117},[100,68980,2927],{"class":258},[100,68982,68983,68985,68987,68989,68991],{"class":102,"line":828},[100,68984,63554],{"class":117},[100,68986,52991],{"class":258},[100,68988,2466],{"class":117},[100,68990,53046],{"class":471},[100,68992,2927],{"class":258},[100,68994,68995],{"class":102,"line":840},[100,68996,3798],{"class":258},[100,68998,68999],{"class":102,"line":845},[100,69000,570],{"emptyLinePlaceholder":569},[100,69002,69003,69005,69007],{"class":102,"line":868},[100,69004,65299],{"class":106},[100,69006,62846],{"class":52854},[100,69008,17153],{"class":258},[100,69010,69011,69013,69015,69017],{"class":102,"line":874},[100,69012,56286],{"class":117},[100,69014,52991],{"class":258},[100,69016,56291],{"class":117},[100,69018,2927],{"class":258},[100,69020,69021,69023,69025,69027],{"class":102,"line":879},[100,69022,56563],{"class":117},[100,69024,52991],{"class":258},[100,69026,53031],{"class":117},[100,69028,2927],{"class":258},[100,69030,69031,69033,69035,69037],{"class":102,"line":889},[100,69032,56574],{"class":117},[100,69034,52991],{"class":258},[100,69036,53134],{"class":117},[100,69038,2927],{"class":258},[100,69040,69041],{"class":102,"line":894},[100,69042,3798],{"class":258},[100,69044,69045],{"class":102,"line":900},[100,69046,570],{"emptyLinePlaceholder":569},[100,69048,69049,69051,69053,69055],{"class":102,"line":910},[100,69050,65299],{"class":106},[100,69052,62846],{"class":52854},[100,69054,56629],{"class":52854},[100,69056,17153],{"class":258},[100,69058,69059,69061,69063,69065,69067,69069],{"class":102,"line":915},[100,69060,56260],{"class":117},[100,69062,52991],{"class":258},[100,69064,1366],{"class":117},[100,69066,10536],{"class":117},[100,69068,53046],{"class":471},[100,69070,2927],{"class":258},[100,69072,69073,69075,69077,69079,69081],{"class":102,"line":929},[100,69074,56476],{"class":117},[100,69076,52991],{"class":258},[100,69078,2316],{"class":117},[100,69080,53046],{"class":471},[100,69082,2927],{"class":258},[100,69084,69085],{"class":102,"line":935},[100,69086,3798],{"class":258},[100,69088,69089],{"class":102,"line":945},[100,69090,570],{"emptyLinePlaceholder":569},[100,69092,69093,69095,69097,69099,69101],{"class":102,"line":950},[100,69094,65299],{"class":106},[100,69096,62846],{"class":52854},[100,69098,56629],{"class":52854},[100,69100,3031],{"class":52854},[100,69102,17153],{"class":258},[100,69104,69105,69107,69109,69111],{"class":102,"line":955},[100,69106,65524],{"class":117},[100,69108,52991],{"class":258},[100,69110,56291],{"class":117},[100,69112,2927],{"class":258},[100,69114,69115,69117,69119,69121,69123,69125,69127],{"class":102,"line":972},[100,69116,63786],{"class":117},[100,69118,52991],{"class":258},[100,69120,465],{"class":117},[100,69122,53046],{"class":471},[100,69124,53075],{"class":117},[100,69126,65545],{"class":117},[100,69128,2927],{"class":258},[100,69130,69131,69133,69135,69137],{"class":102,"line":11370},[100,69132,58970],{"class":117},[100,69134,52991],{"class":258},[100,69136,63923],{"class":117},[100,69138,2927],{"class":258},[100,69140,69141],{"class":102,"line":11375},[100,69142,3798],{"class":258},[100,69144,69145],{"class":102,"line":11380},[100,69146,570],{"emptyLinePlaceholder":569},[100,69148,69149,69151,69153,69155,69157,69159],{"class":102,"line":11385},[100,69150,65299],{"class":106},[100,69152,62846],{"class":52854},[100,69154,56629],{"class":52854},[100,69156,3031],{"class":52854},[100,69158,65578],{"class":106},[100,69160,17153],{"class":258},[100,69162,69163,69165,69167,69169],{"class":102,"line":11394},[100,69164,63345],{"class":117},[100,69166,52991],{"class":258},[100,69168,65589],{"class":117},[100,69170,2927],{"class":258},[100,69172,69173,69175,69177,69179],{"class":102,"line":11399},[100,69174,58970],{"class":117},[100,69176,52991],{"class":258},[100,69178,65589],{"class":117},[100,69180,2927],{"class":258},[100,69182,69183],{"class":102,"line":11405},[100,69184,3798],{"class":258},[100,69186,69187],{"class":102,"line":11426},[100,69188,570],{"emptyLinePlaceholder":569},[100,69190,69191,69193],{"class":102,"line":11432},[100,69192,65614],{"class":106},[100,69194,17153],{"class":258},[100,69196,69197,69199,69201,69203,69205,69207],{"class":102,"line":11446},[100,69198,56249],{"class":117},[100,69200,52991],{"class":258},[100,69202,1366],{"class":117},[100,69204,65627],{"class":117},[100,69206,53046],{"class":471},[100,69208,2927],{"class":258},[100,69210,69211],{"class":102,"line":11452},[100,69212,3798],{"class":258},[100,69214,69215],{"class":102,"line":11479},[100,69216,570],{"emptyLinePlaceholder":569},[100,69218,69219,69221,69223],{"class":102,"line":11488},[100,69220,65614],{"class":106},[100,69222,63728],{"class":106},[100,69224,17153],{"class":258},[100,69226,69227,69229,69231,69233],{"class":102,"line":11494},[100,69228,56563],{"class":117},[100,69230,52991],{"class":258},[100,69232,56291],{"class":117},[100,69234,2927],{"class":258},[100,69236,69237],{"class":102,"line":11502},[100,69238,3798],{"class":258},[100,69240,69241],{"class":102,"line":11507},[100,69242,570],{"emptyLinePlaceholder":569},[100,69244,69245,69247,69250],{"class":102,"line":18185},[100,69246,65614],{"class":106},[100,69248,69249],{"class":106}," .active",[100,69251,17153],{"class":258},[100,69253,69254,69256,69258,69260],{"class":102,"line":18191},[100,69255,56563],{"class":117},[100,69257,52991],{"class":258},[100,69259,62423],{"class":117},[100,69261,2927],{"class":258},[100,69263,69264],{"class":102,"line":18214},[100,69265,3798],{"class":258},[100,69267,69268,69270,69272],{"class":102,"line":18220},[100,69269,53971],{"class":258},[100,69271,1677],{"class":52854},[100,69273,52861],{"class":258},[100,69275,69276,69278,69280],{"class":102,"line":18243},[100,69277,53339],{"class":258},[100,69279,52888],{"class":52854},[100,69281,52861],{"class":258},[100,69283,69284],{"class":102,"line":18257},[100,69285,570],{"emptyLinePlaceholder":569},[100,69287,69288,69290,69292],{"class":102,"line":18277},[100,69289,2676],{"class":258},[100,69291,53354],{"class":52854},[100,69293,52861],{"class":258},[100,69295,69296,69298,69300,69302,69304,69306],{"class":102,"line":18283},[100,69297,53698],{"class":258},[100,69299,53165],{"class":52854},[100,69301,55040],{"class":106},[100,69303,472],{"class":258},[100,69305,65729],{"class":110},[100,69307,52861],{"class":258},[100,69309,69310,69312,69314,69316,69318,69320],{"class":102,"line":18294},[100,69311,52895],{"class":258},[100,69313,53165],{"class":52854},[100,69315,55040],{"class":106},[100,69317,472],{"class":258},[100,69319,65744],{"class":110},[100,69321,52861],{"class":258},[100,69323,69324,69326,69328,69330,69332],{"class":102,"line":18317},[100,69325,56788],{"class":258},[100,69327,305],{"class":52854},[100,69329,65755],{"class":258},[100,69331,305],{"class":52854},[100,69333,52861],{"class":258},[100,69335,69336,69338,69340],{"class":102,"line":18339},[100,69337,56788],{"class":258},[100,69339,2773],{"class":52854},[100,69341,52861],{"class":258},[100,69343,69344,69346,69348,69350,69352,69354,69356,69358,69360,69362,69364,69366,69368,69371,69373,69375,69377,69379],{"class":102,"line":18344},[100,69345,56856],{"class":258},[100,69347,29],{"class":52854},[100,69349,62606],{"class":258},[100,69351,2006],{"class":52854},[100,69353,55040],{"class":106},[100,69355,472],{"class":258},[100,69357,61260],{"class":110},[100,69359,62611],{"class":106},[100,69361,472],{"class":258},[100,69363,65790],{"class":110},[100,69365,55505],{"class":106},[100,69367,472],{"class":258},[100,69369,69370],{"class":110},"\"0\"",[100,69372,65793],{"class":258},[100,69374,2006],{"class":52854},[100,69376,56868],{"class":258},[100,69378,29],{"class":52854},[100,69380,52861],{"class":258},[100,69382,69383,69385,69387,69389,69391,69393,69395,69397,69399,69401,69403,69405,69407,69409,69411],{"class":102,"line":18350},[100,69384,56856],{"class":258},[100,69386,29],{"class":52854},[100,69388,62606],{"class":258},[100,69390,2006],{"class":52854},[100,69392,62611],{"class":106},[100,69394,472],{"class":258},[100,69396,65790],{"class":110},[100,69398,55505],{"class":106},[100,69400,472],{"class":258},[100,69402,5278],{"class":110},[100,69404,65820],{"class":258},[100,69406,2006],{"class":52854},[100,69408,56868],{"class":258},[100,69410,29],{"class":52854},[100,69412,52861],{"class":258},[100,69414,69415,69417,69419,69421,69423,69425,69427,69429,69431,69433,69435,69437,69439,69441,69443],{"class":102,"line":18364},[100,69416,56856],{"class":258},[100,69418,29],{"class":52854},[100,69420,62606],{"class":258},[100,69422,2006],{"class":52854},[100,69424,62611],{"class":106},[100,69426,472],{"class":258},[100,69428,65790],{"class":110},[100,69430,55505],{"class":106},[100,69432,472],{"class":258},[100,69434,5301],{"class":110},[100,69436,65847],{"class":258},[100,69438,2006],{"class":52854},[100,69440,56868],{"class":258},[100,69442,29],{"class":52854},[100,69444,52861],{"class":258},[100,69446,69447,69449,69451,69453,69455,69457,69459,69461,69463,69465,69467,69469,69471,69473,69475],{"class":102,"line":18377},[100,69448,56856],{"class":258},[100,69450,29],{"class":52854},[100,69452,62606],{"class":258},[100,69454,2006],{"class":52854},[100,69456,62611],{"class":106},[100,69458,472],{"class":258},[100,69460,65790],{"class":110},[100,69462,55505],{"class":106},[100,69464,472],{"class":258},[100,69466,5314],{"class":110},[100,69468,65874],{"class":258},[100,69470,2006],{"class":52854},[100,69472,56868],{"class":258},[100,69474,29],{"class":52854},[100,69476,52861],{"class":258},[100,69478,69479,69481,69483,69485,69487,69489,69491,69493,69495,69497,69499,69501,69503,69505,69507],{"class":102,"line":18382},[100,69480,56856],{"class":258},[100,69482,29],{"class":52854},[100,69484,62606],{"class":258},[100,69486,2006],{"class":52854},[100,69488,62611],{"class":106},[100,69490,472],{"class":258},[100,69492,65790],{"class":110},[100,69494,55505],{"class":106},[100,69496,472],{"class":258},[100,69498,5327],{"class":110},[100,69500,65901],{"class":258},[100,69502,2006],{"class":52854},[100,69504,56868],{"class":258},[100,69506,29],{"class":52854},[100,69508,52861],{"class":258},[100,69510,69511,69513,69515],{"class":102,"line":18396},[100,69512,56961],{"class":258},[100,69514,2773],{"class":52854},[100,69516,52861],{"class":258},[100,69518,69519,69521,69523],{"class":102,"line":18401},[100,69520,53330],{"class":258},[100,69522,53165],{"class":52854},[100,69524,52861],{"class":258},[100,69526,69527,69529,69531,69533,69535,69537],{"class":102,"line":18407},[100,69528,52895],{"class":258},[100,69530,53165],{"class":52854},[100,69532,55040],{"class":106},[100,69534,472],{"class":258},[100,69536,65938],{"class":110},[100,69538,52861],{"class":258},[100,69540,69541,69543,69545,69547,69549,69551,69553,69555,69557,69559,69561,69563,69565,69567,69569,69571],{"class":102,"line":18412},[100,69542,56788],{"class":258},[100,69544,53165],{"class":52854},[100,69546,55040],{"class":106},[100,69548,472],{"class":258},[100,69550,65953],{"class":110},[100,69552,62606],{"class":258},[100,69554,3095],{"class":52854},[100,69556,56793],{"class":106},[100,69558,472],{"class":258},[100,69560,65964],{"class":110},[100,69562,56801],{"class":106},[100,69564,472],{"class":258},[100,69566,9248],{"class":110},[100,69568,65973],{"class":258},[100,69570,53165],{"class":52854},[100,69572,52861],{"class":258},[100,69574,69575,69577,69579,69581,69583,69585,69587,69589,69591,69593,69595,69597,69599,69601,69603,69605],{"class":102,"line":18426},[100,69576,56788],{"class":258},[100,69578,53165],{"class":52854},[100,69580,55040],{"class":106},[100,69582,472],{"class":258},[100,69584,64177],{"class":110},[100,69586,62606],{"class":258},[100,69588,3095],{"class":52854},[100,69590,56793],{"class":106},[100,69592,472],{"class":258},[100,69594,66000],{"class":110},[100,69596,56801],{"class":106},[100,69598,472],{"class":258},[100,69600,9248],{"class":110},[100,69602,65973],{"class":258},[100,69604,53165],{"class":52854},[100,69606,52861],{"class":258},[100,69608,69609,69611,69613,69615,69617,69619,69621,69623,69625,69627,69629,69631,69633,69635,69637,69639],{"class":102,"line":18431},[100,69610,56788],{"class":258},[100,69612,53165],{"class":52854},[100,69614,55040],{"class":106},[100,69616,472],{"class":258},[100,69618,64177],{"class":110},[100,69620,62606],{"class":258},[100,69622,3095],{"class":52854},[100,69624,56793],{"class":106},[100,69626,472],{"class":258},[100,69628,66035],{"class":110},[100,69630,56801],{"class":106},[100,69632,472],{"class":258},[100,69634,9248],{"class":110},[100,69636,65973],{"class":258},[100,69638,53165],{"class":52854},[100,69640,52861],{"class":258},[100,69642,69643,69645,69647,69649,69651,69653,69655,69657,69659,69661,69663,69665,69667,69669,69671,69673],{"class":102,"line":18436},[100,69644,56788],{"class":258},[100,69646,53165],{"class":52854},[100,69648,55040],{"class":106},[100,69650,472],{"class":258},[100,69652,64177],{"class":110},[100,69654,62606],{"class":258},[100,69656,3095],{"class":52854},[100,69658,56793],{"class":106},[100,69660,472],{"class":258},[100,69662,66070],{"class":110},[100,69664,56801],{"class":106},[100,69666,472],{"class":258},[100,69668,9248],{"class":110},[100,69670,65973],{"class":258},[100,69672,53165],{"class":52854},[100,69674,52861],{"class":258},[100,69676,69677,69679,69681,69683,69685,69687,69689,69691,69693,69695,69697,69699,69701,69703,69705,69707],{"class":102,"line":18450},[100,69678,56788],{"class":258},[100,69680,53165],{"class":52854},[100,69682,55040],{"class":106},[100,69684,472],{"class":258},[100,69686,64177],{"class":110},[100,69688,62606],{"class":258},[100,69690,3095],{"class":52854},[100,69692,56793],{"class":106},[100,69694,472],{"class":258},[100,69696,66105],{"class":110},[100,69698,56801],{"class":106},[100,69700,472],{"class":258},[100,69702,9248],{"class":110},[100,69704,65973],{"class":258},[100,69706,53165],{"class":52854},[100,69708,52861],{"class":258},[100,69710,69711,69713,69715],{"class":102,"line":18462},[100,69712,53330],{"class":258},[100,69714,53165],{"class":52854},[100,69716,52861],{"class":258},[100,69718,69719,69721,69723],{"class":102,"line":18467},[100,69720,53971],{"class":258},[100,69722,53165],{"class":52854},[100,69724,52861],{"class":258},[100,69726,69727,69729,69731],{"class":102,"line":18480},[100,69728,53698],{"class":258},[100,69730,53367],{"class":52854},[100,69732,52861],{"class":258},[100,69734,69735],{"class":102,"line":18485},[100,69736,69737],{"class":1836},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[100,69739,69740],{"class":102,"line":18490},[100,69741,69742],{"class":1836},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[100,69744,69745,69747,69749,69751,69753,69755,69757,69760],{"class":102,"line":18495},[100,69746,12803],{"class":471},[100,69748,62846],{"class":117},[100,69750,583],{"class":471},[100,69752,55950],{"class":258},[100,69754,55953],{"class":106},[100,69756,713],{"class":258},[100,69758,69759],{"class":110},"'.tab-nav ul'",[100,69761,809],{"class":258},[100,69763,69764],{"class":102,"line":18508},[100,69765,69766],{"class":1836},"    \u002F\u002F 2.添加事件\n",[100,69768,69769,69771,69773,69775,69777,69779,69781,69783,69785],{"class":102,"line":18513},[100,69770,68508],{"class":258},[100,69772,59367],{"class":106},[100,69774,713],{"class":258},[100,69776,59372],{"class":110},[100,69778,14017],{"class":258},[100,69780,56003],{"class":471},[100,69782,3283],{"class":258},[100,69784,1852],{"class":6812},[100,69786,14024],{"class":258},[100,69788,69789,69791,69793],{"class":102,"line":34189},[100,69790,59798],{"class":258},[100,69792,68564],{"class":106},[100,69794,68567],{"class":258},[100,69796,69797],{"class":102,"line":34195},[100,69798,69799],{"class":1836},"      \u002F\u002Fe.targer是我们点击的对象\n",[100,69801,69802,69804,69806,69808,69811],{"class":102,"line":34201},[100,69803,56034],{"class":471},[100,69805,68588],{"class":258},[100,69807,56040],{"class":471},[100,69809,69810],{"class":110}," 'A'",[100,69812,14024],{"class":258},[100,69814,69815,69817,69819,69821,69824,69826,69828,69830,69832],{"class":102,"line":34207},[100,69816,53479],{"class":258},[100,69818,55953],{"class":106},[100,69820,713],{"class":258},[100,69822,69823],{"class":110},"'.active'",[100,69825,58557],{"class":258},[100,69827,58560],{"class":106},[100,69829,713],{"class":258},[100,69831,66268],{"class":110},[100,69833,809],{"class":258},[100,69835,69836,69839,69841,69843,69845],{"class":102,"line":34213},[100,69837,69838],{"class":258},"        e.target.classList.",[100,69840,6930],{"class":106},[100,69842,713],{"class":258},[100,69844,66268],{"class":110},[100,69846,809],{"class":258},[100,69848,69849],{"class":102,"line":34224},[100,69850,570],{"emptyLinePlaceholder":569},[100,69852,69853],{"class":102,"line":34230},[100,69854,69855],{"class":1836},"        \u002F\u002F 下面大盒子模块\n",[100,69857,69858],{"class":102,"line":34250},[100,69859,69860],{"class":1836},"        \u002F\u002F console.log(e.target.dataset.id)\n",[100,69862,69863,69865,69867,69869,69871],{"class":102,"line":34256},[100,69864,62824],{"class":471},[100,69866,4633],{"class":117},[100,69868,583],{"class":471},[100,69870,47120],{"class":471},[100,69872,69873],{"class":258},"e.target.dataset.id\n",[100,69875,69876,69878,69880,69882,69884,69886,69888,69890,69892],{"class":102,"line":34267},[100,69877,53479],{"class":258},[100,69879,55953],{"class":106},[100,69881,713],{"class":258},[100,69883,66316],{"class":110},[100,69885,58557],{"class":258},[100,69887,58560],{"class":106},[100,69889,713],{"class":258},[100,69891,66268],{"class":110},[100,69893,809],{"class":258},[100,69895,69896,69898,69900,69902,69904,69906,69908,69910,69912,69914,69916,69918,69920],{"class":102,"line":34273},[100,69897,53479],{"class":258},[100,69899,55953],{"class":106},[100,69901,713],{"class":258},[100,69903,66342],{"class":110},[100,69905,2208],{"class":258},[100,69907,47120],{"class":471},[100,69909,26693],{"class":117},[100,69911,58586],{"class":110},[100,69913,58557],{"class":258},[100,69915,6930],{"class":106},[100,69917,713],{"class":258},[100,69919,66268],{"class":110},[100,69921,809],{"class":258},[100,69923,69924],{"class":102,"line":34279},[100,69925,570],{"emptyLinePlaceholder":569},[100,69927,69928],{"class":102,"line":34285},[100,69929,53952],{"class":258},[100,69931,69932],{"class":102,"line":34291},[100,69933,35016],{"class":258},[100,69935,69936,69938,69940],{"class":102,"line":34297},[100,69937,53971],{"class":258},[100,69939,53367],{"class":52854},[100,69941,52861],{"class":258},[100,69943,69944,69946,69948],{"class":102,"line":34303},[100,69945,53339],{"class":258},[100,69947,53354],{"class":52854},[100,69949,52861],{"class":258},[100,69951,69952],{"class":102,"line":34309},[100,69953,570],{"emptyLinePlaceholder":569},[100,69955,69956,69958,69960],{"class":102,"line":34329},[100,69957,53339],{"class":258},[100,69959,52189],{"class":52854},[100,69961,52861],{"class":258},[305,69963,69965],{"id":69964},"_333-页面加载事件","3.3.3 页面加载事件",[26,69967,69968],{},[29,69969,69970],{},"load",[19,69972,69973],{},[3095,69974],{"alt":79,"src":69975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,69977,69978],{},"window代表整个窗口，比document还要大",[19,69980,69981],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,69983,69984],{},"img.addEventListener('load', function () {",[19,69986,69987],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,69989,54018],{},[26,69991,69992],{"start":188},[29,69993,69994],{},"DOMContentLoaded",[19,69996,69997],{},[3095,69998],{"alt":79,"src":69999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,70001,70002],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[305,70004,70006],{"id":70005},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,70008,70009],{},[3095,70010],{"alt":79,"src":70011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,70013,70014],{},[3095,70015],{"alt":79,"src":70016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,70018,70019],{},[3095,70020],{"alt":79,"src":70021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,70023,70024],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,70026,70027],{},"获得的是数字型数据，不带单位",[19,70029,70030],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,70032,70033],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,70035,70036],{},"它是通过document.documentElement来获取",[19,70038,70039],{},[3095,70040],{"alt":79,"src":70041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,70043,70044],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[305,70046,70048],{"id":70047},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,70050,70051],{},[3095,70052],{"alt":79,"src":70053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,70055,70056],{},[3095,70057],{"alt":79,"src":70058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[305,70060,70062],{"id":70061},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,70064,70065],{},[3095,70066],{"alt":79,"src":70067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,70069,70070],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,70072,70073],{},[3095,70074],{"alt":79,"src":70075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,70077,70078],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,70080,70081],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,70083,70084],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,70086,70087],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,70089,70090],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,70092,70093],{},[3095,70094],{"alt":79,"src":70095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,70097,70098],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,70100,70101],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,70103,70104],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,70106,70107],{},"e.pageX-box.getBoundingClientRect()",[305,70109,70111],{"id":70110},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,70113,70114],{},[3095,70115],{"alt":79,"src":70116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,70118,70119],{},"这个是相对于视口来说的，它是个方法，不是属性值",[305,70121,70123],{"id":70122},"_338-总结","3.3.8 总结",[19,70125,70126],{},[3095,70127],{"alt":79,"src":70128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,70130,70131],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,70133,70134],{},"修改盒子的宽高只能通过width和height来实现",[305,70136,70138],{"id":70137},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[73,70140,70142],{"className":52187,"code":70141,"language":52189,"meta":79,"style":79},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[32,70143,70144,70149,70154,70159,70164],{"__ignoreMap":79},[100,70145,70146],{"class":102,"line":103},[100,70147,70148],{"class":258},"\u002F* 页面滑动 *\u002F\n",[100,70150,70151],{"class":102,"line":188},[100,70152,70153],{"class":258},"html {\n",[100,70155,70156],{"class":102,"line":199},[100,70157,70158],{"class":258},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[100,70160,70161],{"class":102,"line":532},[100,70162,70163],{"class":258},"  scroll-behavior: smooth;\n",[100,70165,70166],{"class":102,"line":577},[100,70167,3197],{"class":258},[19,70169,70170],{},"默认是auto",[305,70172,70174],{"id":70173},"_3310-日期对象","3.3.10 日期对象",[23579,70176,70178],{"id":70177},"_33101-实例化","3.3.10.1 实例化",[19,70180,70181],{},[3095,70182],{"alt":79,"src":70183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[23579,70185,70187],{"id":70186},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,70189,70190],{},[3095,70191],{"alt":79,"src":70192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,70194,70195],{},"月份+1",[19,70197,70198],{},"老外认为第一天为0，星期天",[19,70200,70201],{},"方法使用的时候必须要跟括号",[19,70203,70204],{},"快速获得日期",[19,70206,70207],{},"\u002F\u002F 得到年月日",[19,70209,70210],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,70212,70213],{},"\u002F\u002F 得到当地日期",[19,70215,70216],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,70218,70219],{},"\u002F\u002F 得到当地时间",[19,70221,70222],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,70224,70225],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,70227,70228],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[53367,70230,70231],{},"\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,70233,70234],{},"学会去封装函数！",[23579,70236,70238],{"id":70237},"_33103-时间戳","3.3.10.3 时间戳",[19,70240,70241],{},[3095,70242],{"alt":79,"src":70243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,70245,70246],{},[3095,70247],{"alt":79,"src":70248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,70250,70251],{},"三种方法记住一个就可以",[305,70253,70255],{"id":70254},"_3311-节点操作","3.3.11 节点操作",[23579,70257,70259],{"id":70258},"_33111-dom节点","3.3.11.1 DOM节点",[19,70261,70262],{},[3095,70263],{"alt":79,"src":70264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,70266,70267],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[23579,70269,70271],{"id":70270},"_33112-查找节点","3.3.11.2 查找节点",[19,70273,70274],{},"前边的document.querySelector()是获取的元素",[19,70276,70277],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,70279,70280],{},[3095,70281],{"alt":79,"src":70282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[26,70284,70285],{},[29,70286,70287],{},"父节点",[19,70289,70290],{},[3095,70291],{"alt":79,"src":70292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[26,70294,70295],{"start":188},[29,70296,70297],{},"子节点",[19,70299,70300],{},[3095,70301],{"alt":79,"src":70302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,70304,70305],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,70307,70308],{},"children获得的是伪数组，是亲儿子",[26,70310,70311],{"start":199},[29,70312,70313],{},"兄弟节点",[19,70315,70316],{},[3095,70317],{"alt":79,"src":70318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[23579,70320,70322],{"id":70321},"_33113-增加节点","3.3.11.3 增加节点",[19,70324,70325],{},[3095,70326],{"alt":79,"src":70327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,70329,70330],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,70332,70333],{},[3095,70334],{"alt":79,"src":70335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,70337,70338],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,70340,70341],{},"下面是写法的部分展示，就按照下边的格式来写",[19,70343,70344],{},"例：",[53367,70346,70347],{},"\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,70349,70350],{},[3095,70351],{"alt":79,"src":70352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,70354,70355],{},"false只克隆标签，里边的内容不会克隆过来",[73,70357,70359],{"className":52187,"code":70358,"language":52189,"meta":79,"style":79},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[32,70360,70361],{"__ignoreMap":79},[100,70362,70363],{"class":102,"line":103},[100,70364,70358],{"class":258},[23579,70366,70368],{"id":70367},"_33114-删除节点","3.3.11.4 删除节点",[19,70370,70371],{},[3095,70372],{"alt":79,"src":70373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,70375,70376],{},"父亲删儿子",[19,70378,70379],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[305,70381,70383],{"id":70382},"_3312-m端事件","3.3.12 M端事件",[19,70385,70386],{},"M端就是移动端",[19,70388,70389],{},[3095,70390],{"alt":79,"src":70391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[305,70393,70395],{"id":70394},"_3313-插件","3.3.13 插件",[19,70397,70398],{},"要熟悉官网！！！",[19,70400,70401],{},[2006,70402,70403],{"href":70403,"rel":70404},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[25442],[19,70406,70407],{},[2006,70408,70409],{"href":70409,"rel":70410},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[25442],[305,70412,70414],{"id":70413},"_3314-学生信息表","3.3.14 学生信息表",[26,70416,70417,70420,70423,70426,70429,70432,70435,70438],{},[29,70418,70419],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[29,70421,70422],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[29,70424,70425],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[29,70427,70428],{},"用好表单元素自带的属性，value,name等",[29,70430,70431],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[29,70433,70434],{},"不要忘记事件对象",[29,70436,70437],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[29,70439,70440],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,70442,70443],{},"结构：",[73,70445,70447],{"className":52187,"code":70446,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\" \u002F>\n  \u003Ctitle>学生信息管理\u003C\u002Ftitle>\n  \u003Clink rel=\"stylesheet\" href=\"css\u002Findex.css\" \u002F>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ch1>新增学员\u003C\u002Fh1>\n  \u003Cform class=\"info\" autocomplete=\"off\">\n    姓名：\u003Cinput type=\"text\" class=\"uname\" name=\"uname\" \u002F>\n    年龄：\u003Cinput type=\"text\" class=\"age\" name=\"age\" \u002F>\n    性别:\n    \u003Cselect name=\"gender\" class=\"gender\">\n      \u003Coption value=\"男\">男\u003C\u002Foption>\n      \u003Coption value=\"女\">女\u003C\u002Foption>\n    \u003C\u002Fselect>\n    薪资：\u003Cinput type=\"text\" class=\"salary\" name=\"salary\" \u002F>\n    就业城市：\u003Cselect name=\"city\" class=\"city\">\n      \u003Coption value=\"北京\">北京\u003C\u002Foption>\n      \u003Coption value=\"上海\">上海\u003C\u002Foption>\n      \u003Coption value=\"广州\">广州\u003C\u002Foption>\n      \u003Coption value=\"深圳\">深圳\u003C\u002Foption>\n      \u003Coption value=\"曹县\">曹县\u003C\u002Foption>\n    \u003C\u002Fselect>\n    \u003Cbutton class=\"add\">录入\u003C\u002Fbutton>\n  \u003C\u002Fform>\n\n  \u003Ch1>就业榜\u003C\u002Fh1>\n  \u003Ctable>\n    \u003Cthead>\n      \u003Ctr>\n        \u003Cth>序号\u003C\u002Fth>\n        \u003Cth>姓名\u003C\u002Fth>\n        \u003Cth>年龄\u003C\u002Fth>\n        \u003Cth>性别\u003C\u002Fth>\n        \u003Cth>薪资\u003C\u002Fth>\n        \u003Cth>就业城市\u003C\u002Fth>\n        \u003Cth>操作\u003C\u002Fth>\n      \u003C\u002Ftr>\n    \u003C\u002Fthead>\n    \u003Ctbody>\n      \u003C!-- \n        \u003Ctr>\n          \u003Ctd>1001\u003C\u002Ftd>\n          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n          \u003Ctd>19\u003C\u002Ftd>\n          \u003Ctd>男\u003C\u002Ftd>\n          \u003Ctd>15000\u003C\u002Ftd>\n          \u003Ctd>上海\u003C\u002Ftd>\n          \u003Ctd>\n            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n          \u003C\u002Ftd>\n        \u003C\u002Ftr> \n        -->\n    \u003C\u002Ftbody>\n  \u003C\u002Ftable>\n  \u003Cscript>\n    \u002F\u002F 获取元素\n    const uname = document.querySelector('.uname')\n    const age = document.querySelector('.age')\n    const gender = document.querySelector('.gender')\n    const salary = document.querySelector('.salary')\n    const city = document.querySelector('.city')\n    const tbody = document.querySelector('tbody')\n\n    \u002F\u002F 获取所有带有name属性的元素\n    const items = document.querySelectorAll('[name]')\n    \u002F\u002F 声明一个空的数组\n    const arr = []\n    \u002F\u002F 1.录入模块\n    \u002F\u002F 1.1这是一个表单提交事件\n    const info = document.querySelector('.info')\n    info.addEventListener('submit', function (e) {\n      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n      e.preventDefault()\n      \u002F\u002F console.log(11)\n\n      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n      \u002F\u002F 先遍历循环\n      for (let i = 0; i \u003C items.length; i++) {\n        if (items[i].value === '') {\n          return alert('输入内容不能为空')\n        }\n      }\n\n      \u002F\u002F 创建新的对象\n      const obj = {\n        stuID: arr.length + 1,\n        uname: uname.value,\n        age: age.value,\n        gender: gender.value,\n        salary: salary.value,\n        city: city.value\n      }\n      \u002F\u002F console.log(obj);\n      \u002F\u002F 追加到数组里面\n      arr.push(obj)\n      \u002F\u002F console.log(arr);\n      \u002F\u002F 清空表单  reset重置表单\n      this.reset()\n      \u002F\u002F 调用渲染函数\n      render()\n    })\n    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n    function render() {\n      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n      tbody.innerHTML = ''\n      \u002F\u002F 遍历数组\n      for (let i = 0; i \u003C arr.length; i++) {\n        const tr = document.createElement('tr')\n        tr.innerHTML = `\n        \u003Ctd>${arr[i].stuID}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].uname}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].age}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].gender}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].salary}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].city}\u003C\u002Ftd>\n          \u003Ctd>\n            \u003Ca href=\"javascript:\" data-id=${i}>删除\u003C\u002Fa>\n          \u003C\u002Ftd> \n          `\n        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n        tbody.appendChild(tr)\n      }\n    }\n\n    \u002F\u002F 3.删除委托\n    \u002F\u002F 3.1 事件委托 tbody\n    tbody.addEventListener('click', function (e) {\n      if (e.target.tagName === 'A') {\n        \u002F\u002F 得到当前元素的自定义属性 data-id\n        \u002F\u002F console.log(e.target.dataset.id);\n        \u002F\u002F 删除arr 数组里面对应的数据\n        arr.splice(e.target.dataset.id, 1)\n        \u002F\u002F 重新渲染一次\n        render()\n      }\n    })\n  \u003C\u002Fscript>\n\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,70448,70449,70459,70473,70477,70485,70499,70519,70540,70553,70577,70585,70589,70597,70610,70631,70659,70687,70692,70714,70734,70753,70761,70789,70811,70831,70851,70871,70891,70911,70919,70939,70947,70951,70964,70972,70980,70988,71001,71014,71027,71040,71053,71066,71079,71087,71095,71103,71108,71113,71118,71123,71128,71133,71138,71143,71148,71153,71158,71163,71168,71176,71184,71192,71196,71216,71235,71255,71275,71295,71315,71319,71324,71344,71349,71359,71364,71369,71389,71411,71416,71426,71430,71434,71439,71444,71473,71487,71502,71506,71510,71514,71519,71530,71543,71548,71553,71558,71563,71568,71572,71577,71582,71591,71596,71601,71613,71618,71625,71629,71634,71644,71649,71659,71664,71692,71713,71723,71743,71761,71778,71795,71812,71829,71833,71843,71848,71853,71858,71869,71873,71877,71881,71886,71891,71912,71924,71929,71934,71939,71953,71958,71965,71969,71973,71981,71985,71993,71997],{"__ignoreMap":79},[100,70450,70451,70453,70455,70457],{"class":102,"line":103},[100,70452,52851],{"class":258},[100,70454,52855],{"class":52854},[100,70456,52858],{"class":106},[100,70458,52861],{"class":258},[100,70460,70461,70463,70465,70467,70469,70471],{"class":102,"line":188},[100,70462,2676],{"class":258},[100,70464,52189],{"class":52854},[100,70466,52870],{"class":106},[100,70468,472],{"class":258},[100,70470,52875],{"class":110},[100,70472,52861],{"class":258},[100,70474,70475],{"class":102,"line":199},[100,70476,570],{"emptyLinePlaceholder":569},[100,70478,70479,70481,70483],{"class":102,"line":532},[100,70480,2676],{"class":258},[100,70482,52888],{"class":52854},[100,70484,52861],{"class":258},[100,70486,70487,70489,70491,70493,70495,70497],{"class":102,"line":577},[100,70488,53698],{"class":258},[100,70490,52898],{"class":52854},[100,70492,52901],{"class":106},[100,70494,472],{"class":258},[100,70496,52906],{"class":110},[100,70498,60681],{"class":258},[100,70500,70501,70503,70505,70507,70509,70511,70513,70515,70517],{"class":102,"line":589},[100,70502,53698],{"class":258},[100,70504,52898],{"class":52854},[100,70506,16501],{"class":106},[100,70508,472],{"class":258},[100,70510,52945],{"class":110},[100,70512,52925],{"class":106},[100,70514,472],{"class":258},[100,70516,52952],{"class":110},[100,70518,60681],{"class":258},[100,70520,70521,70523,70525,70527,70529,70531,70533,70535,70538],{"class":102,"line":595},[100,70522,53698],{"class":258},[100,70524,52898],{"class":52854},[100,70526,52917],{"class":106},[100,70528,472],{"class":258},[100,70530,52922],{"class":110},[100,70532,52925],{"class":106},[100,70534,472],{"class":258},[100,70536,70537],{"class":110},"\"ie=edge\"",[100,70539,60681],{"class":258},[100,70541,70542,70544,70546,70549,70551],{"class":102,"line":601},[100,70543,53698],{"class":258},[100,70545,52961],{"class":52854},[100,70547,70548],{"class":258},">学生信息管理\u003C\u002F",[100,70550,52961],{"class":52854},[100,70552,52861],{"class":258},[100,70554,70555,70557,70560,70563,70565,70568,70570,70572,70575],{"class":102,"line":606},[100,70556,53698],{"class":258},[100,70558,70559],{"class":52854},"link",[100,70561,70562],{"class":106}," rel",[100,70564,472],{"class":258},[100,70566,70567],{"class":110},"\"stylesheet\"",[100,70569,62611],{"class":106},[100,70571,472],{"class":258},[100,70573,70574],{"class":110},"\"css\u002Findex.css\"",[100,70576,60681],{"class":258},[100,70578,70579,70581,70583],{"class":102,"line":612},[100,70580,53339],{"class":258},[100,70582,52888],{"class":52854},[100,70584,52861],{"class":258},[100,70586,70587],{"class":102,"line":618},[100,70588,570],{"emptyLinePlaceholder":569},[100,70590,70591,70593,70595],{"class":102,"line":623},[100,70592,2676],{"class":258},[100,70594,53354],{"class":52854},[100,70596,52861],{"class":258},[100,70598,70599,70601,70603,70606,70608],{"class":102,"line":629},[100,70600,53698],{"class":258},[100,70602,10],{"class":52854},[100,70604,70605],{"class":258},">新增学员\u003C\u002F",[100,70607,10],{"class":52854},[100,70609,52861],{"class":258},[100,70611,70612,70614,70616,70618,70620,70622,70625,70627,70629],{"class":102,"line":635},[100,70613,53698],{"class":258},[100,70615,68179],{"class":52854},[100,70617,55040],{"class":106},[100,70619,472],{"class":258},[100,70621,64218],{"class":110},[100,70623,70624],{"class":106}," autocomplete",[100,70626,472],{"class":258},[100,70628,33334],{"class":110},[100,70630,52861],{"class":258},[100,70632,70633,70636,70638,70640,70642,70644,70646,70648,70651,70653,70655,70657],{"class":102,"line":641},[100,70634,70635],{"class":258},"    姓名：\u003C",[100,70637,55375],{"class":52854},[100,70639,55378],{"class":106},[100,70641,472],{"class":258},[100,70643,64253],{"class":110},[100,70645,55040],{"class":106},[100,70647,472],{"class":258},[100,70649,70650],{"class":110},"\"uname\"",[100,70652,16501],{"class":106},[100,70654,472],{"class":258},[100,70656,70650],{"class":110},[100,70658,60681],{"class":258},[100,70660,70661,70664,70666,70668,70670,70672,70674,70676,70679,70681,70683,70685],{"class":102,"line":647},[100,70662,70663],{"class":258},"    年龄：\u003C",[100,70665,55375],{"class":52854},[100,70667,55378],{"class":106},[100,70669,472],{"class":258},[100,70671,64253],{"class":110},[100,70673,55040],{"class":106},[100,70675,472],{"class":258},[100,70677,70678],{"class":110},"\"age\"",[100,70680,16501],{"class":106},[100,70682,472],{"class":258},[100,70684,70678],{"class":110},[100,70686,60681],{"class":258},[100,70688,70689],{"class":102,"line":653},[100,70690,70691],{"class":258},"    性别:\n",[100,70693,70694,70696,70699,70701,70703,70706,70708,70710,70712],{"class":102,"line":659},[100,70695,52895],{"class":258},[100,70697,70698],{"class":52854},"select",[100,70700,16501],{"class":106},[100,70702,472],{"class":258},[100,70704,70705],{"class":110},"\"gender\"",[100,70707,55040],{"class":106},[100,70709,472],{"class":258},[100,70711,70705],{"class":110},[100,70713,52861],{"class":258},[100,70715,70716,70718,70721,70723,70725,70727,70730,70732],{"class":102,"line":665},[100,70717,56788],{"class":258},[100,70719,70720],{"class":52854},"option",[100,70722,68205],{"class":106},[100,70724,472],{"class":258},[100,70726,11543],{"class":110},[100,70728,70729],{"class":258},">男\u003C\u002F",[100,70731,70720],{"class":52854},[100,70733,52861],{"class":258},[100,70735,70736,70738,70740,70742,70744,70746,70749,70751],{"class":102,"line":670},[100,70737,56788],{"class":258},[100,70739,70720],{"class":52854},[100,70741,68205],{"class":106},[100,70743,472],{"class":258},[100,70745,11612],{"class":110},[100,70747,70748],{"class":258},">女\u003C\u002F",[100,70750,70720],{"class":52854},[100,70752,52861],{"class":258},[100,70754,70755,70757,70759],{"class":102,"line":675},[100,70756,53330],{"class":258},[100,70758,70698],{"class":52854},[100,70760,52861],{"class":258},[100,70762,70763,70766,70768,70770,70772,70774,70776,70778,70781,70783,70785,70787],{"class":102,"line":699},[100,70764,70765],{"class":258},"    薪资：\u003C",[100,70767,55375],{"class":52854},[100,70769,55378],{"class":106},[100,70771,472],{"class":258},[100,70773,64253],{"class":110},[100,70775,55040],{"class":106},[100,70777,472],{"class":258},[100,70779,70780],{"class":110},"\"salary\"",[100,70782,16501],{"class":106},[100,70784,472],{"class":258},[100,70786,70780],{"class":110},[100,70788,60681],{"class":258},[100,70790,70791,70794,70796,70798,70800,70803,70805,70807,70809],{"class":102,"line":708},[100,70792,70793],{"class":258},"    就业城市：\u003C",[100,70795,70698],{"class":52854},[100,70797,16501],{"class":106},[100,70799,472],{"class":258},[100,70801,70802],{"class":110},"\"city\"",[100,70804,55040],{"class":106},[100,70806,472],{"class":258},[100,70808,70802],{"class":110},[100,70810,52861],{"class":258},[100,70812,70813,70815,70817,70819,70821,70824,70827,70829],{"class":102,"line":722},[100,70814,56788],{"class":258},[100,70816,70720],{"class":52854},[100,70818,68205],{"class":106},[100,70820,472],{"class":258},[100,70822,70823],{"class":110},"\"北京\"",[100,70825,70826],{"class":258},">北京\u003C\u002F",[100,70828,70720],{"class":52854},[100,70830,52861],{"class":258},[100,70832,70833,70835,70837,70839,70841,70844,70847,70849],{"class":102,"line":735},[100,70834,56788],{"class":258},[100,70836,70720],{"class":52854},[100,70838,68205],{"class":106},[100,70840,472],{"class":258},[100,70842,70843],{"class":110},"\"上海\"",[100,70845,70846],{"class":258},">上海\u003C\u002F",[100,70848,70720],{"class":52854},[100,70850,52861],{"class":258},[100,70852,70853,70855,70857,70859,70861,70864,70867,70869],{"class":102,"line":754},[100,70854,56788],{"class":258},[100,70856,70720],{"class":52854},[100,70858,68205],{"class":106},[100,70860,472],{"class":258},[100,70862,70863],{"class":110},"\"广州\"",[100,70865,70866],{"class":258},">广州\u003C\u002F",[100,70868,70720],{"class":52854},[100,70870,52861],{"class":258},[100,70872,70873,70875,70877,70879,70881,70884,70887,70889],{"class":102,"line":771},[100,70874,56788],{"class":258},[100,70876,70720],{"class":52854},[100,70878,68205],{"class":106},[100,70880,472],{"class":258},[100,70882,70883],{"class":110},"\"深圳\"",[100,70885,70886],{"class":258},">深圳\u003C\u002F",[100,70888,70720],{"class":52854},[100,70890,52861],{"class":258},[100,70892,70893,70895,70897,70899,70901,70904,70907,70909],{"class":102,"line":776},[100,70894,56788],{"class":258},[100,70896,70720],{"class":52854},[100,70898,68205],{"class":106},[100,70900,472],{"class":258},[100,70902,70903],{"class":110},"\"曹县\"",[100,70905,70906],{"class":258},">曹县\u003C\u002F",[100,70908,70720],{"class":52854},[100,70910,52861],{"class":258},[100,70912,70913,70915,70917],{"class":102,"line":781},[100,70914,53330],{"class":258},[100,70916,70698],{"class":52854},[100,70918,52861],{"class":258},[100,70920,70921,70923,70925,70927,70929,70932,70935,70937],{"class":102,"line":796},[100,70922,52895],{"class":258},[100,70924,55441],{"class":52854},[100,70926,55040],{"class":106},[100,70928,472],{"class":258},[100,70930,70931],{"class":110},"\"add\"",[100,70933,70934],{"class":258},">录入\u003C\u002F",[100,70936,55441],{"class":52854},[100,70938,52861],{"class":258},[100,70940,70941,70943,70945],{"class":102,"line":812},[100,70942,53971],{"class":258},[100,70944,68179],{"class":52854},[100,70946,52861],{"class":258},[100,70948,70949],{"class":102,"line":823},[100,70950,570],{"emptyLinePlaceholder":569},[100,70952,70953,70955,70957,70960,70962],{"class":102,"line":828},[100,70954,53698],{"class":258},[100,70956,10],{"class":52854},[100,70958,70959],{"class":258},">就业榜\u003C\u002F",[100,70961,10],{"class":52854},[100,70963,52861],{"class":258},[100,70965,70966,70968,70970],{"class":102,"line":840},[100,70967,53698],{"class":258},[100,70969,319],{"class":52854},[100,70971,52861],{"class":258},[100,70973,70974,70976,70978],{"class":102,"line":845},[100,70975,52895],{"class":258},[100,70977,322],{"class":52854},[100,70979,52861],{"class":258},[100,70981,70982,70984,70986],{"class":102,"line":868},[100,70983,56788],{"class":258},[100,70985,325],{"class":52854},[100,70987,52861],{"class":258},[100,70989,70990,70992,70994,70997,70999],{"class":102,"line":874},[100,70991,56856],{"class":258},[100,70993,328],{"class":52854},[100,70995,70996],{"class":258},">序号\u003C\u002F",[100,70998,328],{"class":52854},[100,71000,52861],{"class":258},[100,71002,71003,71005,71007,71010,71012],{"class":102,"line":879},[100,71004,56856],{"class":258},[100,71006,328],{"class":52854},[100,71008,71009],{"class":258},">姓名\u003C\u002F",[100,71011,328],{"class":52854},[100,71013,52861],{"class":258},[100,71015,71016,71018,71020,71023,71025],{"class":102,"line":889},[100,71017,56856],{"class":258},[100,71019,328],{"class":52854},[100,71021,71022],{"class":258},">年龄\u003C\u002F",[100,71024,328],{"class":52854},[100,71026,52861],{"class":258},[100,71028,71029,71031,71033,71036,71038],{"class":102,"line":894},[100,71030,56856],{"class":258},[100,71032,328],{"class":52854},[100,71034,71035],{"class":258},">性别\u003C\u002F",[100,71037,328],{"class":52854},[100,71039,52861],{"class":258},[100,71041,71042,71044,71046,71049,71051],{"class":102,"line":900},[100,71043,56856],{"class":258},[100,71045,328],{"class":52854},[100,71047,71048],{"class":258},">薪资\u003C\u002F",[100,71050,328],{"class":52854},[100,71052,52861],{"class":258},[100,71054,71055,71057,71059,71062,71064],{"class":102,"line":910},[100,71056,56856],{"class":258},[100,71058,328],{"class":52854},[100,71060,71061],{"class":258},">就业城市\u003C\u002F",[100,71063,328],{"class":52854},[100,71065,52861],{"class":258},[100,71067,71068,71070,71072,71075,71077],{"class":102,"line":915},[100,71069,56856],{"class":258},[100,71071,328],{"class":52854},[100,71073,71074],{"class":258},">操作\u003C\u002F",[100,71076,328],{"class":52854},[100,71078,52861],{"class":258},[100,71080,71081,71083,71085],{"class":102,"line":929},[100,71082,56961],{"class":258},[100,71084,325],{"class":52854},[100,71086,52861],{"class":258},[100,71088,71089,71091,71093],{"class":102,"line":935},[100,71090,53330],{"class":258},[100,71092,322],{"class":52854},[100,71094,52861],{"class":258},[100,71096,71097,71099,71101],{"class":102,"line":945},[100,71098,52895],{"class":258},[100,71100,339],{"class":52854},[100,71102,52861],{"class":258},[100,71104,71105],{"class":102,"line":950},[100,71106,71107],{"class":1836},"      \u003C!-- \n",[100,71109,71110],{"class":102,"line":955},[100,71111,71112],{"class":1836},"        \u003Ctr>\n",[100,71114,71115],{"class":102,"line":972},[100,71116,71117],{"class":1836},"          \u003Ctd>1001\u003C\u002Ftd>\n",[100,71119,71120],{"class":102,"line":11370},[100,71121,71122],{"class":1836},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[100,71124,71125],{"class":102,"line":11375},[100,71126,71127],{"class":1836},"          \u003Ctd>19\u003C\u002Ftd>\n",[100,71129,71130],{"class":102,"line":11380},[100,71131,71132],{"class":1836},"          \u003Ctd>男\u003C\u002Ftd>\n",[100,71134,71135],{"class":102,"line":11385},[100,71136,71137],{"class":1836},"          \u003Ctd>15000\u003C\u002Ftd>\n",[100,71139,71140],{"class":102,"line":11394},[100,71141,71142],{"class":1836},"          \u003Ctd>上海\u003C\u002Ftd>\n",[100,71144,71145],{"class":102,"line":11399},[100,71146,71147],{"class":1836},"          \u003Ctd>\n",[100,71149,71150],{"class":102,"line":11405},[100,71151,71152],{"class":1836},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[100,71154,71155],{"class":102,"line":11426},[100,71156,71157],{"class":1836},"          \u003C\u002Ftd>\n",[100,71159,71160],{"class":102,"line":11432},[100,71161,71162],{"class":1836},"        \u003C\u002Ftr> \n",[100,71164,71165],{"class":102,"line":11446},[100,71166,71167],{"class":1836},"        -->\n",[100,71169,71170,71172,71174],{"class":102,"line":11452},[100,71171,53330],{"class":258},[100,71173,339],{"class":52854},[100,71175,52861],{"class":258},[100,71177,71178,71180,71182],{"class":102,"line":11479},[100,71179,53971],{"class":258},[100,71181,319],{"class":52854},[100,71183,52861],{"class":258},[100,71185,71186,71188,71190],{"class":102,"line":11488},[100,71187,53698],{"class":258},[100,71189,53367],{"class":52854},[100,71191,52861],{"class":258},[100,71193,71194],{"class":102,"line":11494},[100,71195,61512],{"class":1836},[100,71197,71198,71200,71203,71205,71207,71209,71211,71214],{"class":102,"line":11502},[100,71199,12803],{"class":471},[100,71201,71202],{"class":117}," uname",[100,71204,583],{"class":471},[100,71206,55950],{"class":258},[100,71208,55953],{"class":106},[100,71210,713],{"class":258},[100,71212,71213],{"class":110},"'.uname'",[100,71215,809],{"class":258},[100,71217,71218,71220,71222,71224,71226,71228,71230,71233],{"class":102,"line":11507},[100,71219,12803],{"class":471},[100,71221,17270],{"class":117},[100,71223,583],{"class":471},[100,71225,55950],{"class":258},[100,71227,55953],{"class":106},[100,71229,713],{"class":258},[100,71231,71232],{"class":110},"'.age'",[100,71234,809],{"class":258},[100,71236,71237,71239,71242,71244,71246,71248,71250,71253],{"class":102,"line":18185},[100,71238,12803],{"class":471},[100,71240,71241],{"class":117}," gender",[100,71243,583],{"class":471},[100,71245,55950],{"class":258},[100,71247,55953],{"class":106},[100,71249,713],{"class":258},[100,71251,71252],{"class":110},"'.gender'",[100,71254,809],{"class":258},[100,71256,71257,71259,71262,71264,71266,71268,71270,71273],{"class":102,"line":18191},[100,71258,12803],{"class":471},[100,71260,71261],{"class":117}," salary",[100,71263,583],{"class":471},[100,71265,55950],{"class":258},[100,71267,55953],{"class":106},[100,71269,713],{"class":258},[100,71271,71272],{"class":110},"'.salary'",[100,71274,809],{"class":258},[100,71276,71277,71279,71282,71284,71286,71288,71290,71293],{"class":102,"line":18214},[100,71278,12803],{"class":471},[100,71280,71281],{"class":117}," city",[100,71283,583],{"class":471},[100,71285,55950],{"class":258},[100,71287,55953],{"class":106},[100,71289,713],{"class":258},[100,71291,71292],{"class":110},"'.city'",[100,71294,809],{"class":258},[100,71296,71297,71299,71302,71304,71306,71308,71310,71313],{"class":102,"line":18220},[100,71298,12803],{"class":471},[100,71300,71301],{"class":117}," tbody",[100,71303,583],{"class":471},[100,71305,55950],{"class":258},[100,71307,55953],{"class":106},[100,71309,713],{"class":258},[100,71311,71312],{"class":110},"'tbody'",[100,71314,809],{"class":258},[100,71316,71317],{"class":102,"line":18243},[100,71318,570],{"emptyLinePlaceholder":569},[100,71320,71321],{"class":102,"line":18257},[100,71322,71323],{"class":1836},"    \u002F\u002F 获取所有带有name属性的元素\n",[100,71325,71326,71328,71331,71333,71335,71337,71339,71342],{"class":102,"line":18277},[100,71327,12803],{"class":471},[100,71329,71330],{"class":117}," items",[100,71332,583],{"class":471},[100,71334,55950],{"class":258},[100,71336,57235],{"class":106},[100,71338,713],{"class":258},[100,71340,71341],{"class":110},"'[name]'",[100,71343,809],{"class":258},[100,71345,71346],{"class":102,"line":18283},[100,71347,71348],{"class":1836},"    \u002F\u002F 声明一个空的数组\n",[100,71350,71351,71353,71355,71357],{"class":102,"line":18294},[100,71352,12803],{"class":471},[100,71354,59249],{"class":117},[100,71356,583],{"class":471},[100,71358,53392],{"class":258},[100,71360,71361],{"class":102,"line":18317},[100,71362,71363],{"class":1836},"    \u002F\u002F 1.录入模块\n",[100,71365,71366],{"class":102,"line":18339},[100,71367,71368],{"class":1836},"    \u002F\u002F 1.1这是一个表单提交事件\n",[100,71370,71371,71373,71376,71378,71380,71382,71384,71387],{"class":102,"line":18344},[100,71372,12803],{"class":471},[100,71374,71375],{"class":117}," info",[100,71377,583],{"class":471},[100,71379,55950],{"class":258},[100,71381,55953],{"class":106},[100,71383,713],{"class":258},[100,71385,71386],{"class":110},"'.info'",[100,71388,809],{"class":258},[100,71390,71391,71394,71396,71398,71401,71403,71405,71407,71409],{"class":102,"line":18350},[100,71392,71393],{"class":258},"    info.",[100,71395,59367],{"class":106},[100,71397,713],{"class":258},[100,71399,71400],{"class":110},"'submit'",[100,71402,14017],{"class":258},[100,71404,56003],{"class":471},[100,71406,3283],{"class":258},[100,71408,1852],{"class":6812},[100,71410,14024],{"class":258},[100,71412,71413],{"class":102,"line":18364},[100,71414,71415],{"class":1836},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[100,71417,71418,71421,71424],{"class":102,"line":18377},[100,71419,71420],{"class":258},"      e.",[100,71422,71423],{"class":106},"preventDefault",[100,71425,3587],{"class":258},[100,71427,71428],{"class":102,"line":18382},[100,71429,61566],{"class":1836},[100,71431,71432],{"class":102,"line":18396},[100,71433,570],{"emptyLinePlaceholder":569},[100,71435,71436],{"class":102,"line":18401},[100,71437,71438],{"class":1836},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[100,71440,71441],{"class":102,"line":18407},[100,71442,71443],{"class":1836},"      \u002F\u002F 先遍历循环\n",[100,71445,71446,71448,71450,71452,71454,71456,71458,71460,71462,71465,71467,71469,71471],{"class":102,"line":18412},[100,71447,53838],{"class":471},[100,71449,3283],{"class":258},[100,71451,53401],{"class":471},[100,71453,11023],{"class":258},[100,71455,472],{"class":471},[100,71457,5692],{"class":117},[100,71459,11030],{"class":258},[100,71461,2676],{"class":471},[100,71463,71464],{"class":258}," items.",[100,71466,53522],{"class":117},[100,71468,4814],{"class":258},[100,71470,3903],{"class":471},[100,71472,14024],{"class":258},[100,71474,71475,71477,71480,71482,71485],{"class":102,"line":18426},[100,71476,4106],{"class":471},[100,71478,71479],{"class":258}," (items[i].value ",[100,71481,56040],{"class":471},[100,71483,71484],{"class":110}," ''",[100,71486,14024],{"class":258},[100,71488,71489,71492,71495,71497,71500],{"class":102,"line":18431},[100,71490,71491],{"class":471},"          return",[100,71493,71494],{"class":106}," alert",[100,71496,713],{"class":258},[100,71498,71499],{"class":110},"'输入内容不能为空'",[100,71501,809],{"class":258},[100,71503,71504],{"class":102,"line":18436},[100,71505,4138],{"class":258},[100,71507,71508],{"class":102,"line":18450},[100,71509,53952],{"class":258},[100,71511,71512],{"class":102,"line":18462},[100,71513,570],{"emptyLinePlaceholder":569},[100,71515,71516],{"class":102,"line":18467},[100,71517,71518],{"class":1836},"      \u002F\u002F 创建新的对象\n",[100,71520,71521,71523,71526,71528],{"class":102,"line":18480},[100,71522,59782],{"class":471},[100,71524,71525],{"class":117}," obj",[100,71527,583],{"class":471},[100,71529,17153],{"class":258},[100,71531,71532,71535,71537,71539,71541],{"class":102,"line":18485},[100,71533,71534],{"class":258},"        stuID: arr.",[100,71536,53522],{"class":117},[100,71538,47120],{"class":471},[100,71540,26693],{"class":117},[100,71542,33024],{"class":258},[100,71544,71545],{"class":102,"line":18490},[100,71546,71547],{"class":258},"        uname: uname.value,\n",[100,71549,71550],{"class":102,"line":18495},[100,71551,71552],{"class":258},"        age: age.value,\n",[100,71554,71555],{"class":102,"line":18508},[100,71556,71557],{"class":258},"        gender: gender.value,\n",[100,71559,71560],{"class":102,"line":18513},[100,71561,71562],{"class":258},"        salary: salary.value,\n",[100,71564,71565],{"class":102,"line":34189},[100,71566,71567],{"class":258},"        city: city.value\n",[100,71569,71570],{"class":102,"line":34195},[100,71571,53952],{"class":258},[100,71573,71574],{"class":102,"line":34201},[100,71575,71576],{"class":1836},"      \u002F\u002F console.log(obj);\n",[100,71578,71579],{"class":102,"line":34207},[100,71580,71581],{"class":1836},"      \u002F\u002F 追加到数组里面\n",[100,71583,71584,71586,71588],{"class":102,"line":34213},[100,71585,59561],{"class":258},[100,71587,53438],{"class":106},[100,71589,71590],{"class":258},"(obj)\n",[100,71592,71593],{"class":102,"line":34224},[100,71594,71595],{"class":1836},"      \u002F\u002F console.log(arr);\n",[100,71597,71598],{"class":102,"line":34230},[100,71599,71600],{"class":1836},"      \u002F\u002F 清空表单  reset重置表单\n",[100,71602,71603,71606,71608,71611],{"class":102,"line":34250},[100,71604,71605],{"class":117},"      this",[100,71607,2325],{"class":258},[100,71609,71610],{"class":106},"reset",[100,71612,3587],{"class":258},[100,71614,71615],{"class":102,"line":34256},[100,71616,71617],{"class":1836},"      \u002F\u002F 调用渲染函数\n",[100,71619,71620,71623],{"class":102,"line":34267},[100,71621,71622],{"class":106},"      render",[100,71624,3587],{"class":258},[100,71626,71627],{"class":102,"line":34273},[100,71628,35016],{"class":258},[100,71630,71631],{"class":102,"line":34279},[100,71632,71633],{"class":1836},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[100,71635,71636,71639,71642],{"class":102,"line":34285},[100,71637,71638],{"class":471},"    function",[100,71640,71641],{"class":106}," render",[100,71643,12435],{"class":258},[100,71645,71646],{"class":102,"line":34291},[100,71647,71648],{"class":1836},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[100,71650,71651,71654,71656],{"class":102,"line":34297},[100,71652,71653],{"class":258},"      tbody.innerHTML ",[100,71655,472],{"class":471},[100,71657,71658],{"class":110}," ''\n",[100,71660,71661],{"class":102,"line":34303},[100,71662,71663],{"class":1836},"      \u002F\u002F 遍历数组\n",[100,71665,71666,71668,71670,71672,71674,71676,71678,71680,71682,71684,71686,71688,71690],{"class":102,"line":34309},[100,71667,53838],{"class":471},[100,71669,3283],{"class":258},[100,71671,53401],{"class":471},[100,71673,11023],{"class":258},[100,71675,472],{"class":471},[100,71677,5692],{"class":117},[100,71679,11030],{"class":258},[100,71681,2676],{"class":471},[100,71683,53519],{"class":258},[100,71685,53522],{"class":117},[100,71687,4814],{"class":258},[100,71689,3903],{"class":471},[100,71691,14024],{"class":258},[100,71693,71694,71696,71699,71701,71703,71706,71708,71711],{"class":102,"line":34329},[100,71695,62824],{"class":471},[100,71697,71698],{"class":117}," tr",[100,71700,583],{"class":471},[100,71702,55950],{"class":258},[100,71704,71705],{"class":106},"createElement",[100,71707,713],{"class":258},[100,71709,71710],{"class":110},"'tr'",[100,71712,809],{"class":258},[100,71714,71715,71718,71720],{"class":102,"line":34335},[100,71716,71717],{"class":258},"        tr.innerHTML ",[100,71719,472],{"class":471},[100,71721,71722],{"class":110}," `\n",[100,71724,71725,71728,71730,71732,71734,71737,71740],{"class":102,"line":34351},[100,71726,71727],{"class":110},"        \u003Ctd>${",[100,71729,5479],{"class":258},[100,71731,2656],{"class":110},[100,71733,2208],{"class":258},[100,71735,71736],{"class":110},"].",[100,71738,71739],{"class":258},"stuID",[100,71741,71742],{"class":110},"}\u003C\u002Ftd>\n",[100,71744,71745,71748,71750,71752,71754,71756,71759],{"class":102,"line":34357},[100,71746,71747],{"class":110},"          \u003Ctd>${",[100,71749,5479],{"class":258},[100,71751,2656],{"class":110},[100,71753,2208],{"class":258},[100,71755,71736],{"class":110},[100,71757,71758],{"class":258},"uname",[100,71760,71742],{"class":110},[100,71762,71763,71765,71767,71769,71771,71773,71776],{"class":102,"line":34371},[100,71764,71747],{"class":110},[100,71766,5479],{"class":258},[100,71768,2656],{"class":110},[100,71770,2208],{"class":258},[100,71772,71736],{"class":110},[100,71774,71775],{"class":258},"age",[100,71777,71742],{"class":110},[100,71779,71780,71782,71784,71786,71788,71790,71793],{"class":102,"line":34377},[100,71781,71747],{"class":110},[100,71783,5479],{"class":258},[100,71785,2656],{"class":110},[100,71787,2208],{"class":258},[100,71789,71736],{"class":110},[100,71791,71792],{"class":258},"gender",[100,71794,71742],{"class":110},[100,71796,71797,71799,71801,71803,71805,71807,71810],{"class":102,"line":34392},[100,71798,71747],{"class":110},[100,71800,5479],{"class":258},[100,71802,2656],{"class":110},[100,71804,2208],{"class":258},[100,71806,71736],{"class":110},[100,71808,71809],{"class":258},"salary",[100,71811,71742],{"class":110},[100,71813,71814,71816,71818,71820,71822,71824,71827],{"class":102,"line":34398},[100,71815,71747],{"class":110},[100,71817,5479],{"class":258},[100,71819,2656],{"class":110},[100,71821,2208],{"class":258},[100,71823,71736],{"class":110},[100,71825,71826],{"class":258},"city",[100,71828,71742],{"class":110},[100,71830,71831],{"class":102,"line":34407},[100,71832,71147],{"class":110},[100,71834,71835,71838,71840],{"class":102,"line":34413},[100,71836,71837],{"class":110},"            \u003Ca href=\"javascript:\" data-id=${",[100,71839,2208],{"class":258},[100,71841,71842],{"class":110},"}>删除\u003C\u002Fa>\n",[100,71844,71845],{"class":102,"line":34422},[100,71846,71847],{"class":110},"          \u003C\u002Ftd> \n",[100,71849,71850],{"class":102,"line":34428},[100,71851,71852],{"class":110},"          `\n",[100,71854,71855],{"class":102,"line":34434},[100,71856,71857],{"class":1836},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[100,71859,71860,71863,71866],{"class":102,"line":34443},[100,71861,71862],{"class":258},"        tbody.",[100,71864,71865],{"class":106},"appendChild",[100,71867,71868],{"class":258},"(tr)\n",[100,71870,71871],{"class":102,"line":34449},[100,71872,53952],{"class":258},[100,71874,71875],{"class":102,"line":34460},[100,71876,3798],{"class":258},[100,71878,71879],{"class":102,"line":34466},[100,71880,570],{"emptyLinePlaceholder":569},[100,71882,71883],{"class":102,"line":34485},[100,71884,71885],{"class":1836},"    \u002F\u002F 3.删除委托\n",[100,71887,71888],{"class":102,"line":34491},[100,71889,71890],{"class":1836},"    \u002F\u002F 3.1 事件委托 tbody\n",[100,71892,71893,71896,71898,71900,71902,71904,71906,71908,71910],{"class":102,"line":34502},[100,71894,71895],{"class":258},"    tbody.",[100,71897,59367],{"class":106},[100,71899,713],{"class":258},[100,71901,59372],{"class":110},[100,71903,14017],{"class":258},[100,71905,56003],{"class":471},[100,71907,3283],{"class":258},[100,71909,1852],{"class":6812},[100,71911,14024],{"class":258},[100,71913,71914,71916,71918,71920,71922],{"class":102,"line":34508},[100,71915,56034],{"class":471},[100,71917,68588],{"class":258},[100,71919,56040],{"class":471},[100,71921,69810],{"class":110},[100,71923,14024],{"class":258},[100,71925,71926],{"class":102,"line":34528},[100,71927,71928],{"class":1836},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[100,71930,71931],{"class":102,"line":34544},[100,71932,71933],{"class":1836},"        \u002F\u002F console.log(e.target.dataset.id);\n",[100,71935,71936],{"class":102,"line":34550},[100,71937,71938],{"class":1836},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[100,71940,71941,71944,71946,71949,71951],{"class":102,"line":34564},[100,71942,71943],{"class":258},"        arr.",[100,71945,59564],{"class":106},[100,71947,71948],{"class":258},"(e.target.dataset.id, ",[100,71950,1985],{"class":117},[100,71952,809],{"class":258},[100,71954,71955],{"class":102,"line":34570},[100,71956,71957],{"class":1836},"        \u002F\u002F 重新渲染一次\n",[100,71959,71960,71963],{"class":102,"line":34576},[100,71961,71962],{"class":106},"        render",[100,71964,3587],{"class":258},[100,71966,71967],{"class":102,"line":34587},[100,71968,53952],{"class":258},[100,71970,71971],{"class":102,"line":34593},[100,71972,35016],{"class":258},[100,71974,71975,71977,71979],{"class":102,"line":34599},[100,71976,53971],{"class":258},[100,71978,53367],{"class":52854},[100,71980,52861],{"class":258},[100,71982,71983],{"class":102,"line":34609},[100,71984,570],{"emptyLinePlaceholder":569},[100,71986,71987,71989,71991],{"class":102,"line":34615},[100,71988,53339],{"class":258},[100,71990,53354],{"class":52854},[100,71992,52861],{"class":258},[100,71994,71995],{"class":102,"line":34626},[100,71996,570],{"emptyLinePlaceholder":569},[100,71998,71999,72001,72003],{"class":102,"line":34632},[100,72000,53339],{"class":258},[100,72002,52189],{"class":52854},[100,72004,52861],{"class":258},[19,72006,72007],{},"样式：",[73,72009,72013],{"className":72010,"code":72011,"language":72012,"meta":79,"style":79},"language-yaml shiki shiki-themes github-light github-dark","* {\n  margin: 0;\n  padding: 0;\n}\n\na {\n  text-decoration: none;\n  color:#721c24;\n}\nh1 {\n  text-align: center;\n  color:#333;\n  margin: 20px 0;\n \n}\ntable {\n  margin:0 auto;\n  width: 800px;\n  border-collapse: collapse;\n  color:#004085;\n}\nth {\n  padding: 10px;\n  background: #cfe5ff;\n  \n  font-size: 20px;\n  font-weight: 400;\n}\ntd,th {\n  border:1px solid #b8daff;\n}\ntd {\n  padding:10px;\n  color:#666;\n  text-align: center;\n  font-size: 16px;\n}\ntbody tr {\n  background: #fff;\n}\ntbody tr:hover {\n  background: #e1ecf8;\n}\n.info {\n  width: 900px;\n  margin: 50px auto;\n  text-align: center;\n}\n.info  input, .info select {\n  width: 80px;\n  height: 27px;\n  outline: none;\n  border-radius: 5px;\n  border:1px solid #b8daff;\n  padding-left: 5px;\n  box-sizing: border-box;\n  margin-right: 15px;\n}\n.info button {\n  width: 60px;\n  height: 27px;\n  background-color: #004085;\n  outline: none;\n  border: 0;\n  color: #fff;\n  cursor: pointer;\n  border-radius: 5px;\n}\n.info .age {\n  width: 50px;\n}\n","yaml",[32,72014,72015,72020,72030,72039,72043,72047,72052,72062,72067,72071,72076,72086,72091,72100,72104,72108,72113,72118,72128,72138,72143,72147,72152,72161,72171,72176,72186,72196,72200,72205,72213,72217,72222,72227,72232,72240,72249,72253,72258,72267,72271,72276,72285,72289,72294,72303,72312,72320,72324,72329,72338,72348,72357,72367,72373,72382,72392,72402,72406,72411,72420,72428,72438,72446,72455,72464,72474,72482,72486,72491,72500],{"__ignoreMap":79},[100,72016,72017],{"class":102,"line":103},[100,72018,72019],{"class":258},"* {\n",[100,72021,72022,72025,72027],{"class":102,"line":188},[100,72023,72024],{"class":52854},"  margin",[100,72026,52991],{"class":258},[100,72028,72029],{"class":110},"0;\n",[100,72031,72032,72035,72037],{"class":102,"line":199},[100,72033,72034],{"class":110},"  padding",[100,72036,52991],{"class":258},[100,72038,72029],{"class":110},[100,72040,72041],{"class":102,"line":532},[100,72042,3197],{"class":258},[100,72044,72045],{"class":102,"line":577},[100,72046,570],{"emptyLinePlaceholder":569},[100,72048,72049],{"class":102,"line":589},[100,72050,72051],{"class":110},"a {\n",[100,72053,72054,72057,72059],{"class":102,"line":595},[100,72055,72056],{"class":52854},"  text-decoration",[100,72058,52991],{"class":258},[100,72060,72061],{"class":110},"none;\n",[100,72063,72064],{"class":102,"line":601},[100,72065,72066],{"class":110},"  color:#721c24;\n",[100,72068,72069],{"class":102,"line":606},[100,72070,3197],{"class":258},[100,72072,72073],{"class":102,"line":612},[100,72074,72075],{"class":110},"h1 {\n",[100,72077,72078,72081,72083],{"class":102,"line":618},[100,72079,72080],{"class":52854},"  text-align",[100,72082,52991],{"class":258},[100,72084,72085],{"class":110},"center;\n",[100,72087,72088],{"class":102,"line":623},[100,72089,72090],{"class":110},"  color:#333;\n",[100,72092,72093,72095,72097],{"class":102,"line":629},[100,72094,72024],{"class":52854},[100,72096,52991],{"class":258},[100,72098,72099],{"class":110},"20px 0;\n",[100,72101,72102],{"class":102,"line":635},[100,72103,4276],{"class":258},[100,72105,72106],{"class":102,"line":641},[100,72107,3197],{"class":258},[100,72109,72110],{"class":102,"line":647},[100,72111,72112],{"class":110},"table {\n",[100,72114,72115],{"class":102,"line":653},[100,72116,72117],{"class":110},"  margin:0 auto;\n",[100,72119,72120,72123,72125],{"class":102,"line":659},[100,72121,72122],{"class":52854},"  width",[100,72124,52991],{"class":258},[100,72126,72127],{"class":110},"800px;\n",[100,72129,72130,72133,72135],{"class":102,"line":665},[100,72131,72132],{"class":52854},"  border-collapse",[100,72134,52991],{"class":258},[100,72136,72137],{"class":110},"collapse;\n",[100,72139,72140],{"class":102,"line":670},[100,72141,72142],{"class":110},"  color:#004085;\n",[100,72144,72145],{"class":102,"line":675},[100,72146,3197],{"class":258},[100,72148,72149],{"class":102,"line":699},[100,72150,72151],{"class":110},"th {\n",[100,72153,72154,72156,72158],{"class":102,"line":708},[100,72155,72034],{"class":52854},[100,72157,52991],{"class":258},[100,72159,72160],{"class":110},"10px;\n",[100,72162,72163,72166,72168],{"class":102,"line":722},[100,72164,72165],{"class":52854},"  background",[100,72167,52991],{"class":258},[100,72169,72170],{"class":1836},"#cfe5ff;\n",[100,72172,72173],{"class":102,"line":735},[100,72174,72175],{"class":258},"  \n",[100,72177,72178,72181,72183],{"class":102,"line":754},[100,72179,72180],{"class":52854},"  font-size",[100,72182,52991],{"class":258},[100,72184,72185],{"class":110},"20px;\n",[100,72187,72188,72191,72193],{"class":102,"line":771},[100,72189,72190],{"class":52854},"  font-weight",[100,72192,52991],{"class":258},[100,72194,72195],{"class":110},"400;\n",[100,72197,72198],{"class":102,"line":776},[100,72199,3197],{"class":258},[100,72201,72202],{"class":102,"line":781},[100,72203,72204],{"class":110},"td,th {\n",[100,72206,72207,72210],{"class":102,"line":796},[100,72208,72209],{"class":110},"  border:1px solid",[100,72211,72212],{"class":1836}," #b8daff;\n",[100,72214,72215],{"class":102,"line":812},[100,72216,3197],{"class":258},[100,72218,72219],{"class":102,"line":823},[100,72220,72221],{"class":110},"td {\n",[100,72223,72224],{"class":102,"line":828},[100,72225,72226],{"class":110},"  padding:10px;\n",[100,72228,72229],{"class":102,"line":840},[100,72230,72231],{"class":110},"  color:#666;\n",[100,72233,72234,72236,72238],{"class":102,"line":845},[100,72235,72080],{"class":52854},[100,72237,52991],{"class":258},[100,72239,72085],{"class":110},[100,72241,72242,72244,72246],{"class":102,"line":868},[100,72243,72180],{"class":52854},[100,72245,52991],{"class":258},[100,72247,72248],{"class":110},"16px;\n",[100,72250,72251],{"class":102,"line":874},[100,72252,3197],{"class":258},[100,72254,72255],{"class":102,"line":879},[100,72256,72257],{"class":110},"tbody tr {\n",[100,72259,72260,72262,72264],{"class":102,"line":889},[100,72261,72165],{"class":52854},[100,72263,52991],{"class":258},[100,72265,72266],{"class":1836},"#fff;\n",[100,72268,72269],{"class":102,"line":894},[100,72270,3197],{"class":258},[100,72272,72273],{"class":102,"line":900},[100,72274,72275],{"class":110},"tbody tr:hover {\n",[100,72277,72278,72280,72282],{"class":102,"line":910},[100,72279,72165],{"class":52854},[100,72281,52991],{"class":258},[100,72283,72284],{"class":1836},"#e1ecf8;\n",[100,72286,72287],{"class":102,"line":915},[100,72288,3197],{"class":258},[100,72290,72291],{"class":102,"line":929},[100,72292,72293],{"class":110},".info {\n",[100,72295,72296,72298,72300],{"class":102,"line":935},[100,72297,72122],{"class":52854},[100,72299,52991],{"class":258},[100,72301,72302],{"class":110},"900px;\n",[100,72304,72305,72307,72309],{"class":102,"line":945},[100,72306,72024],{"class":52854},[100,72308,52991],{"class":258},[100,72310,72311],{"class":110},"50px auto;\n",[100,72313,72314,72316,72318],{"class":102,"line":950},[100,72315,72080],{"class":52854},[100,72317,52991],{"class":258},[100,72319,72085],{"class":110},[100,72321,72322],{"class":102,"line":955},[100,72323,3197],{"class":258},[100,72325,72326],{"class":102,"line":972},[100,72327,72328],{"class":110},".info  input, .info select {\n",[100,72330,72331,72333,72335],{"class":102,"line":11370},[100,72332,72122],{"class":52854},[100,72334,52991],{"class":258},[100,72336,72337],{"class":110},"80px;\n",[100,72339,72340,72343,72345],{"class":102,"line":11375},[100,72341,72342],{"class":52854},"  height",[100,72344,52991],{"class":258},[100,72346,72347],{"class":110},"27px;\n",[100,72349,72350,72353,72355],{"class":102,"line":11380},[100,72351,72352],{"class":52854},"  outline",[100,72354,52991],{"class":258},[100,72356,72061],{"class":110},[100,72358,72359,72362,72364],{"class":102,"line":11385},[100,72360,72361],{"class":52854},"  border-radius",[100,72363,52991],{"class":258},[100,72365,72366],{"class":110},"5px;\n",[100,72368,72369,72371],{"class":102,"line":11394},[100,72370,72209],{"class":110},[100,72372,72212],{"class":1836},[100,72374,72375,72378,72380],{"class":102,"line":11399},[100,72376,72377],{"class":52854},"  padding-left",[100,72379,52991],{"class":258},[100,72381,72366],{"class":110},[100,72383,72384,72387,72389],{"class":102,"line":11405},[100,72385,72386],{"class":52854},"  box-sizing",[100,72388,52991],{"class":258},[100,72390,72391],{"class":110},"border-box;\n",[100,72393,72394,72397,72399],{"class":102,"line":11426},[100,72395,72396],{"class":52854},"  margin-right",[100,72398,52991],{"class":258},[100,72400,72401],{"class":110},"15px;\n",[100,72403,72404],{"class":102,"line":11432},[100,72405,3197],{"class":258},[100,72407,72408],{"class":102,"line":11446},[100,72409,72410],{"class":110},".info button {\n",[100,72412,72413,72415,72417],{"class":102,"line":11452},[100,72414,72122],{"class":52854},[100,72416,52991],{"class":258},[100,72418,72419],{"class":110},"60px;\n",[100,72421,72422,72424,72426],{"class":102,"line":11479},[100,72423,72342],{"class":52854},[100,72425,52991],{"class":258},[100,72427,72347],{"class":110},[100,72429,72430,72433,72435],{"class":102,"line":11488},[100,72431,72432],{"class":52854},"  background-color",[100,72434,52991],{"class":258},[100,72436,72437],{"class":1836},"#004085;\n",[100,72439,72440,72442,72444],{"class":102,"line":11494},[100,72441,72352],{"class":52854},[100,72443,52991],{"class":258},[100,72445,72061],{"class":110},[100,72447,72448,72451,72453],{"class":102,"line":11502},[100,72449,72450],{"class":52854},"  border",[100,72452,52991],{"class":258},[100,72454,72029],{"class":110},[100,72456,72457,72460,72462],{"class":102,"line":11507},[100,72458,72459],{"class":52854},"  color",[100,72461,52991],{"class":258},[100,72463,72266],{"class":1836},[100,72465,72466,72469,72471],{"class":102,"line":18185},[100,72467,72468],{"class":52854},"  cursor",[100,72470,52991],{"class":258},[100,72472,72473],{"class":110},"pointer;\n",[100,72475,72476,72478,72480],{"class":102,"line":18191},[100,72477,72361],{"class":52854},[100,72479,52991],{"class":258},[100,72481,72366],{"class":110},[100,72483,72484],{"class":102,"line":18214},[100,72485,3197],{"class":258},[100,72487,72488],{"class":102,"line":18220},[100,72489,72490],{"class":110},".info .age {\n",[100,72492,72493,72495,72497],{"class":102,"line":18243},[100,72494,72122],{"class":52854},[100,72496,52991],{"class":258},[100,72498,72499],{"class":110},"50px;\n",[100,72501,72502],{"class":102,"line":18257},[100,72503,3197],{"class":258},[19,72505,72506],{},"思路：",[19,72508,72509],{},[3095,72510],{"alt":79,"src":72511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,72513,72514],{},[3095,72515],{"alt":79,"src":72516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,72518,72519],{},[3095,72520],{"alt":79,"src":72521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[305,72523,72525],{"id":72524},"_3315-重绘回流","3.3.15 重绘回流",[19,72527,72528],{},[3095,72529],{"alt":79,"src":72530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,72532,72533],{},[3095,72534],{"alt":79,"src":72535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,72537,72538],{},[3095,72539],{"alt":79,"src":72540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,72542,72544],{"id":72543},"_34-bom","3.4 BOM",[19,72546,72547],{},[3095,72548],{"alt":79,"src":72549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,72551,72552],{},"平时写的document省略了window而已，实际上是window.document",[19,72554,72555],{},"函数也是这样，调用的时候实际为window.fn()",[19,72557,72558],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,72560,72561],{},"window大部分情况下可以省略",[305,72563,72565],{"id":72564},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,72567,72568],{},"只执行一次",[19,72570,72571],{},[3095,72572],{"alt":79,"src":72573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,72575,72576],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,72578,72579],{},[3095,72580],{"alt":79,"src":72581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[305,72583,72585],{"id":72584},"_342-js执行机制","3.4.2 JS执行机制",[19,72587,72588],{},[3095,72589],{"alt":79,"src":72590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,72592,72593],{},"两个的结果都是1111 3333 2222",[19,72595,72596],{},[3095,72597],{"alt":79,"src":72598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,72600,72601],{},[3095,72602],{"alt":79,"src":72603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,72605,72606],{},[3095,72607],{"alt":79,"src":72608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,72610,72611],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,72613,72614],{},"工作流程：",[19,72616,72617],{},[3095,72618],{"alt":79,"src":72619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,72621,72622],{},[3095,72623],{"alt":79,"src":72624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,72626,72627],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,72629,72630],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[305,72632,72634],{"id":72633},"_343-location对象","3.4.3 location对象",[19,72636,72637],{},"location对象属于window这个全局对象下的，可以 省略window",[19,72639,72640],{},[3095,72641],{"alt":79,"src":72642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,72644,72645],{},"href可以跳转页面",[26,72647,72648],{},[29,72649,72650],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,72652,72653],{},"search得到提交信息之后网站后边的地址",[19,72655,72656],{},[3095,72657],{"alt":79,"src":72658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,72660,72661],{},[3095,72662],{"alt":79,"src":72663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[26,72665,72666],{"start":188},[29,72667,72668],{},"hash:这个获取单页面应用#后边的地址",[19,72670,72671],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,72673,72674],{},[3095,72675],{"alt":79,"src":72676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[73,72678,72680],{"className":54621,"code":72679,"language":54623,"meta":79,"style":79},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[32,72681,72682,72702,72722],{"__ignoreMap":79},[100,72683,72684,72686,72688,72690,72692,72695,72698,72700],{"class":102,"line":103},[100,72685,53698],{"class":258},[100,72687,2006],{"class":52854},[100,72689,62611],{"class":106},[100,72691,472],{"class":258},[100,72693,72694],{"class":110},"\"#\u002Fmy\"",[100,72696,72697],{"class":258},">我的\u003C\u002F",[100,72699,2006],{"class":52854},[100,72701,52861],{"class":258},[100,72703,72704,72706,72708,72710,72712,72715,72718,72720],{"class":102,"line":188},[100,72705,53698],{"class":258},[100,72707,2006],{"class":52854},[100,72709,62611],{"class":106},[100,72711,472],{"class":258},[100,72713,72714],{"class":110},"\"#\u002Ffriend\"",[100,72716,72717],{"class":258},">关注\u003C\u002F",[100,72719,2006],{"class":52854},[100,72721,52861],{"class":258},[100,72723,72724,72726,72728,72730,72732,72735,72738,72740],{"class":102,"line":199},[100,72725,53698],{"class":258},[100,72727,2006],{"class":52854},[100,72729,62611],{"class":106},[100,72731,472],{"class":258},[100,72733,72734],{"class":110},"\"#\u002Fdownload\"",[100,72736,72737],{"class":258},">下载\u003C\u002F",[100,72739,2006],{"class":52854},[100,72741,52861],{"class":258},[19,72743,72744],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[26,72746,72747],{"start":199},[29,72748,72749,72750,72752,72753,72755],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[55270,72751],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[55270,72754],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[305,72757,72759],{"id":72758},"_345-navigator对象","3.4.5 navigator对象",[19,72761,72762],{},[3095,72763],{"alt":79,"src":72764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[73,72766,72770],{"className":72767,"code":72768,"language":72769,"meta":79,"style":79},"language-javascript shiki shiki-themes github-light github-dark","\u002F\u002F 检测 userAgent（浏览器信息） \n!(function () { \nconst userAgent = navigator.userAgent \n\u002F\u002F 验证是否为Android或iPhone \nconst android = userAgent.match(\u002F(Android);?[\\s\\\u002F]+([\\d.]+)?\u002F) \nconst iphone = userAgent.match(\u002F(iPhone\\sOS)\\s([\\d_]+)\u002F) \n\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \nif (android || iphone) { \nlocation.href = 'http:\u002F\u002Fm.itcast.cn' \n} \n})()\n","javascript",[32,72771,72772,72777,72788,72800,72805,72856,72897,72902,72915,72927,72932],{"__ignoreMap":79},[100,72773,72774],{"class":102,"line":103},[100,72775,72776],{"class":1836},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[100,72778,72779,72781,72783,72785],{"class":102,"line":188},[100,72780,1994],{"class":471},[100,72782,713],{"class":258},[100,72784,56003],{"class":471},[100,72786,72787],{"class":258}," () { \n",[100,72789,72790,72792,72795,72797],{"class":102,"line":199},[100,72791,8388],{"class":471},[100,72793,72794],{"class":117}," userAgent",[100,72796,583],{"class":471},[100,72798,72799],{"class":258}," navigator.userAgent \n",[100,72801,72802],{"class":102,"line":532},[100,72803,72804],{"class":1836},"\u002F\u002F 验证是否为Android或iPhone \n",[100,72806,72807,72809,72812,72814,72817,72820,72822,72824,72827,72829,72832,72836,72838,72840,72842,72845,72847,72849,72851,72853],{"class":102,"line":577},[100,72808,8388],{"class":471},[100,72810,72811],{"class":117}," android",[100,72813,583],{"class":471},[100,72815,72816],{"class":258}," userAgent.",[100,72818,72819],{"class":106},"match",[100,72821,713],{"class":258},[100,72823,2351],{"class":110},[100,72825,72826],{"class":49531},"(Android);",[100,72828,2752],{"class":471},[100,72830,72831],{"class":117},"[\\s",[100,72833,72835],{"class":72834},"snhLl","\\\u002F",[100,72837,2706],{"class":117},[100,72839,2248],{"class":471},[100,72841,713],{"class":49531},[100,72843,72844],{"class":117},"[\\d.]",[100,72846,2248],{"class":471},[100,72848,2196],{"class":49531},[100,72850,2752],{"class":471},[100,72852,2351],{"class":110},[100,72854,72855],{"class":258},") \n",[100,72857,72858,72860,72863,72865,72867,72869,72871,72873,72876,72879,72882,72884,72886,72889,72891,72893,72895],{"class":102,"line":589},[100,72859,8388],{"class":471},[100,72861,72862],{"class":117}," iphone",[100,72864,583],{"class":471},[100,72866,72816],{"class":258},[100,72868,72819],{"class":106},[100,72870,713],{"class":258},[100,72872,2351],{"class":110},[100,72874,72875],{"class":49531},"(iPhone",[100,72877,72878],{"class":117},"\\s",[100,72880,72881],{"class":49531},"OS)",[100,72883,72878],{"class":117},[100,72885,713],{"class":49531},[100,72887,72888],{"class":117},"[\\d_]",[100,72890,2248],{"class":471},[100,72892,2196],{"class":49531},[100,72894,2351],{"class":110},[100,72896,72855],{"class":258},[100,72898,72899],{"class":102,"line":595},[100,72900,72901],{"class":1836},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[100,72903,72904,72906,72909,72912],{"class":102,"line":601},[100,72905,958],{"class":471},[100,72907,72908],{"class":258}," (android ",[100,72910,72911],{"class":471},"||",[100,72913,72914],{"class":258}," iphone) { \n",[100,72916,72917,72920,72922,72925],{"class":102,"line":606},[100,72918,72919],{"class":258},"location.href ",[100,72921,472],{"class":471},[100,72923,72924],{"class":110}," 'http:\u002F\u002Fm.itcast.cn'",[100,72926,4276],{"class":258},[100,72928,72929],{"class":102,"line":612},[100,72930,72931],{"class":258},"} \n",[100,72933,72934],{"class":102,"line":618},[100,72935,72936],{"class":258},"})()\n",[305,72938,72940],{"id":72939},"_346-histroy对象","3.4.6 histroy对象",[19,72942,72943],{},[3095,72944],{"alt":79,"src":72945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,72947,72948],{},"浏览器地址的前进与后退!!!",[19,72950,72951],{},"history.back() 等效于 history.go(-1)",[19,72953,72954],{},"history.forward() 等效于 history.go(1)",[14,72956,72958],{"id":72957},"_35-本地存储","3.5 本地存储",[26,72960,72961,72964,72967],{},[29,72962,72963],{},"数据存储在用户浏览器中",[29,72965,72966],{},"设置、读取方便、甚至页面刷新不丢失数据",[29,72968,72969],{},"容量较大，sessionStorage和localStorage约 5M 左右",[305,72971,72973],{"id":72972},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,72975,72976],{},"只能存储字符串",[19,72978,72979],{},[3095,72980],{"alt":79,"src":72981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,72983,72984],{},[3095,72985],{"alt":79,"src":72986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,72988,72989],{},"键值对要加引号,不然就会当变量来看了",[19,72991,72992],{},"localStorage.setItem('uname', 'pink')",[19,72994,72995],{},"刷新之后信息不再丢失",[19,72997,72998],{},"操作key,value会跟着变",[19,73000,73001],{},"删除只删除键就可以,即名字",[19,73003,72992],{},[19,73005,73006],{},"改:",[19,73008,73009],{},"localStorage.setItem('uname','red')",[19,73011,73012],{},"有这个键就是改,没有这个键就是改",[19,73014,73015],{},[3095,73016],{"alt":79,"src":73017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,73019,73020],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,73022,73023],{},[3095,73024],{"alt":79,"src":73025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,73027,73028],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[305,73030,73032],{"id":73031},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,73034,73035],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,73037,73038],{},"特性:",[26,73040,73041,73044,73047,73050],{},[29,73042,73043],{},"生命周期为关闭浏览器窗口",[29,73045,73046],{},"在同一个窗口(页面)下数据可以共享",[29,73048,73049],{},"以键值对的形式存储使用",[29,73051,73052],{},"用法跟localStorage 基本相同",[305,73054,73056],{"id":73055},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,73058,73059],{},"本地只能存储字符串,无法直接存储复杂数据类型",[73,73061,73063],{"className":54621,"code":73062,"language":54623,"meta":79,"style":79},"\u003Cscript>\n    const obj = {\n      uname: 'pink老师',\n      age: 18,\n      gender: '女'\n    }\n    \u002F\u002F 存储复杂数据类型\n    localStorage.setItem('obj', obj)\n  \u003C\u002Fscript>\n",[32,73064,73065,73073,73078,73083,73088,73093,73097,73102,73107],{"__ignoreMap":79},[100,73066,73067,73069,73071],{"class":102,"line":103},[100,73068,2676],{"class":258},[100,73070,53367],{"class":52854},[100,73072,52861],{"class":258},[100,73074,73075],{"class":102,"line":188},[100,73076,73077],{"class":258},"    const obj = {\n",[100,73079,73080],{"class":102,"line":199},[100,73081,73082],{"class":258},"      uname: 'pink老师',\n",[100,73084,73085],{"class":102,"line":532},[100,73086,73087],{"class":258},"      age: 18,\n",[100,73089,73090],{"class":102,"line":577},[100,73091,73092],{"class":258},"      gender: '女'\n",[100,73094,73095],{"class":102,"line":589},[100,73096,3798],{"class":258},[100,73098,73099],{"class":102,"line":595},[100,73100,73101],{"class":258},"    \u002F\u002F 存储复杂数据类型\n",[100,73103,73104],{"class":102,"line":601},[100,73105,73106],{"class":258},"    localStorage.setItem('obj', obj)\n",[100,73108,73109,73111,73113],{"class":102,"line":606},[100,73110,53971],{"class":258},[100,73112,53367],{"class":52854},[100,73114,52861],{"class":258},[19,73116,73117],{},[3095,73118],{"alt":79,"src":73119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,73121,73122],{},"如果获取一下数据:",[19,73124,73125],{},"log(localStorage.getItem('obj'))",[19,73127,73128],{},[3095,73129],{"alt":79,"src":73130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,73132,73133],{},"发现直接存对象是使用不了的!!!",[23579,73135,73137],{"id":73136},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,73139,73140],{},[3095,73141],{"alt":79,"src":73142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[73,73144,73146],{"className":52187,"code":73145,"language":52189,"meta":79,"style":79},"\u003Cscript>\n    const obj = {\n      uname: 'pink老师',\n      age: 18,\n      gender: '女'\n    }\n    \u002F\u002F 存储复杂数据类型\n  localStorage.setItem('obj', JSON.stringify(obj))\n  console.log(localStorage.getItem('obj'))\n  \u003C\u002Fscript>\n  \n  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n  类型是字符串的\n  JSON对象 属性和值有引号,而且引号统一是双引号\n",[32,73147,73148,73156,73166,73176,73185,73193,73197,73201,73227,73246,73254,73258,73263,73268],{"__ignoreMap":79},[100,73149,73150,73152,73154],{"class":102,"line":103},[100,73151,2676],{"class":258},[100,73153,53367],{"class":52854},[100,73155,52861],{"class":258},[100,73157,73158,73160,73162,73164],{"class":102,"line":188},[100,73159,12803],{"class":471},[100,73161,71525],{"class":117},[100,73163,583],{"class":471},[100,73165,17153],{"class":258},[100,73167,73168,73171,73174],{"class":102,"line":199},[100,73169,73170],{"class":258},"      uname: ",[100,73172,73173],{"class":110},"'pink老师'",[100,73175,33024],{"class":258},[100,73177,73178,73181,73183],{"class":102,"line":532},[100,73179,73180],{"class":258},"      age: ",[100,73182,2417],{"class":117},[100,73184,33024],{"class":258},[100,73186,73187,73190],{"class":102,"line":577},[100,73188,73189],{"class":258},"      gender: ",[100,73191,73192],{"class":110},"'女'\n",[100,73194,73195],{"class":102,"line":589},[100,73196,3798],{"class":258},[100,73198,73199],{"class":102,"line":595},[100,73200,73101],{"class":1836},[100,73202,73203,73206,73209,73211,73214,73216,73219,73221,73224],{"class":102,"line":601},[100,73204,73205],{"class":258},"  localStorage.",[100,73207,73208],{"class":106},"setItem",[100,73210,713],{"class":258},[100,73212,73213],{"class":110},"'obj'",[100,73215,14017],{"class":258},[100,73217,73218],{"class":117},"JSON",[100,73220,2325],{"class":258},[100,73222,73223],{"class":106},"stringify",[100,73225,73226],{"class":258},"(obj))\n",[100,73228,73229,73232,73234,73237,73240,73242,73244],{"class":102,"line":606},[100,73230,73231],{"class":258},"  console.",[100,73233,59801],{"class":106},[100,73235,73236],{"class":258},"(localStorage.",[100,73238,73239],{"class":106},"getItem",[100,73241,713],{"class":258},[100,73243,73213],{"class":110},[100,73245,751],{"class":258},[100,73247,73248,73250,73252],{"class":102,"line":612},[100,73249,53971],{"class":258},[100,73251,53367],{"class":52854},[100,73253,52861],{"class":258},[100,73255,73256],{"class":102,"line":618},[100,73257,72175],{"class":258},[100,73259,73260],{"class":102,"line":623},[100,73261,73262],{"class":258},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[100,73264,73265],{"class":102,"line":629},[100,73266,73267],{"class":258},"  类型是字符串的\n",[100,73269,73270],{"class":102,"line":635},[100,73271,73272],{"class":258},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[23579,73274,73276],{"id":73275},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,73278,73279],{},[3095,73280],{"alt":79,"src":73281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,73283,73284],{},[3095,73285],{"alt":79,"src":73286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[73,73288,73290],{"className":54621,"code":73289,"language":54623,"meta":79,"style":79},"  \u003Cscript>\n    const obj = {\n      uname: 'pink老师',\n      age: 18,\n      gender: '女'\n    }\n    \u002F\u002F 1.存储复杂数据类型\n    \u002F\u002F localStorage.setItem('obj', obj)\n    \u002F\u002F console.log(localStorage.getItem('obj'))\n    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n    localStorage.setItem('obj', JSON.stringify(obj))\n    \u002F\u002F 取\n    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n    console.log(JSON.parse(localStorage.getItem('obj')))\n  \u003C\u002Fscript>\n",[32,73291,73292,73300,73304,73308,73312,73316,73320,73325,73330,73335,73340,73345,73350,73355,73360],{"__ignoreMap":79},[100,73293,73294,73296,73298],{"class":102,"line":103},[100,73295,53698],{"class":258},[100,73297,53367],{"class":52854},[100,73299,52861],{"class":258},[100,73301,73302],{"class":102,"line":188},[100,73303,73077],{"class":258},[100,73305,73306],{"class":102,"line":199},[100,73307,73082],{"class":258},[100,73309,73310],{"class":102,"line":532},[100,73311,73087],{"class":258},[100,73313,73314],{"class":102,"line":577},[100,73315,73092],{"class":258},[100,73317,73318],{"class":102,"line":589},[100,73319,3798],{"class":258},[100,73321,73322],{"class":102,"line":595},[100,73323,73324],{"class":258},"    \u002F\u002F 1.存储复杂数据类型\n",[100,73326,73327],{"class":102,"line":601},[100,73328,73329],{"class":258},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[100,73331,73332],{"class":102,"line":606},[100,73333,73334],{"class":258},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[100,73336,73337],{"class":102,"line":612},[100,73338,73339],{"class":258},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[100,73341,73342],{"class":102,"line":618},[100,73343,73344],{"class":258},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[100,73346,73347],{"class":102,"line":623},[100,73348,73349],{"class":258},"    \u002F\u002F 取\n",[100,73351,73352],{"class":102,"line":629},[100,73353,73354],{"class":258},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[100,73356,73357],{"class":102,"line":635},[100,73358,73359],{"class":258},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[100,73361,73362,73364,73366],{"class":102,"line":641},[100,73363,53971],{"class":258},[100,73365,53367],{"class":52854},[100,73367,52861],{"class":258},[19,73369,73370],{},[3095,73371],{"alt":79,"src":73372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[305,73374,73376],{"id":73375},"_356-数组map方法","3.5.6 数组map方法",[19,73378,73379],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,73381,73382],{},[3095,73383],{"alt":79,"src":73384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,73386,73387],{},[3095,73388],{"alt":79,"src":73389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,73391,73392,73395],{},[1921,73393,73394],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,73397,73398],{},"map有返回值，但是forEach没有返回值",[19,73400,73401],{},"map是个方法。用的时候要加 ()",[19,73403,73404],{},"map返回的是一个数组",[305,73406,73408],{"id":73407},"_357-数组中join方法","3.5.7 数组中join方法",[19,73410,73411],{},[3095,73412],{"alt":79,"src":73413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,73415,73416],{},"类似于python中拼接字符串一样！",[26,73418,73419,73422,73425],{},[29,73420,73421],{},"小括号为空则逗号分开",[29,73423,73424],{},"小括号为空字符串 ''，则元素之间没有分隔符",[29,73426,73427],{},"小括号用啥符号就用进行分割",[305,73429,73431],{"id":73430},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[26,73433,73434,73437,73440,73443,73446],{},[29,73435,73436],{},"记住本地时间获取快速方式：new Date().toDateString()",[29,73438,73439],{},"尽量减少DOM操作，用好map+join的渲染方式",[29,73441,73442],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[29,73444,73445],{},"return可以实现函数的结束",[29,73447,73448],{},"禁止跳转是 preventDefault() 不要忘记",[73,73450,73452],{"className":52187,"code":73451,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n    }\n\n    h2 {\n      text-align: center;\n      margin-top: 20px;\n    }\n\n    .info {\n      width: 700px;\n      margin: 10px auto;\n      text-align: center;\n    }\n\n    .uname,\n    .age,\n    .salary {\n      width: 100px;\n      height: 20px;\n      outline: none;\n      margin-right: 15px;\n    }\n\n    .gender,\n    .city {\n      width: 100px;\n      height: 25px;\n      outline: none;\n      margin-right: 15px;\n      border: 1px solid rgb(200, 197, 197);\n    }\n\n    button {\n      height: 25px;\n      width: 75px;\n      background-color: rgb(126, 187, 36);\n      color: #fff;\n      border: 0;\n    }\n\n    button span {\n      display: inline-block;\n      width: 10px;\n      height: 10px;\n      line-height: 11px;\n      border: 1px solid #fff;\n      border-radius: 5px;\n      margin-right: 1px;\n    }\n\n    .total {\n      width: 800px;\n      height: 40px;\n      line-height: 40px;\n      text-align: right;\n      margin: 40px auto 10px;\n      padding-right: 10px;\n      font-size: 13px;\n      background-color: rgb(237, 235, 235);\n      box-sizing: border-box;\n    }\n\n    .total span {\n      color: red;\n    }\n\n    table {\n      width: 800px;\n      margin: auto;\n      border-collapse: collapse;\n    }\n\n    th {\n      background-color: rgb(237, 235, 235);\n    }\n\n    th,\n    td {\n      height: 35px;\n      text-align: left;\n      font-size: 14px;\n      border: 1px solid rgb(228, 225, 225);\n      padding-left: 5px;\n      transition: all linear 0.5s;\n    }\n\n    tbody tr:hover {\n      background-color: rgb(237, 235, 235);\n      cursor: pointer;\n    }\n\n    tbody tr td a {\n      display: block;\n      width: 60px;\n      height: 25px;\n      line-height: 25px;\n      margin-top: 2px;\n      color: #fff;\n      text-align: center;\n      text-decoration: none;\n      background-color: orange;\n      border-radius: 12.5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ch2>学生就业统计表\u003C\u002Fh2>\n  \u003Cform class=\"info\" autocomplete=\"off\">\n    \u003Cinput type=\"text\" name=\"uname\" placeholder=\"姓名\" class=\"uname\">\n    \u003Cinput type=\"text\" name=\"age\" placeholder=\"年龄\" class=\"age\">\n    \u003Cinput type=\"text\" name=\"salary\" placeholder=\"薪资\" class=\"salary\">\n    \u003Cselect name=\"gender\" id=\"\" class=\"gender\">\n      \u003Coption value=\"男\">男\u003C\u002Foption>\n      \u003Coption value=\"女\">女\u003C\u002Foption>\n    \u003C\u002Fselect>\n    \u003Cselect name=\"city\" id=\"\" class=\"city\">\n      \u003Coption value=\"北京\">北京\u003C\u002Foption>\n      \u003Coption value=\"上海\">上海\u003C\u002Foption>\n      \u003Coption value=\"广州\">广州\u003C\u002Foption>\n      \u003Coption value=\"深圳\">深圳\u003C\u002Foption>\n      \u003Coption value=\"曹县\">曹县\u003C\u002Foption>\n    \u003C\u002Fselect>\n    \u003Cbutton>\n      \u003Cspan>+\u003C\u002Fspan>添加\u003C\u002Fbutton>\n  \u003C\u002Fform>\n  \u003Cdiv class=\"total\">共有数据 \u003Cspan>0\u003C\u002Fspan> 条\u003C\u002Fdiv>\n  \u003Ctable>\n    \u003Cthead>\n      \u003Ctr>\n        \u003Cth>ID\u003C\u002Fth>\n        \u003Cth>姓名\u003C\u002Fth>\n        \u003Cth>年龄\u003C\u002Fth>\n        \u003Cth>性别\u003C\u002Fth>\n        \u003Cth>薪资\u003C\u002Fth>\n        \u003Cth>就业城市\u003C\u002Fth>\n        \u003Cth>录入时间\u003C\u002Fth>\n        \u003Cth>操作\u003C\u002Fth>\n      \u003C\u002Ftr>\n    \u003C\u002Fthead>\n    \u003Ctbody>\n      \u003C!-- \u003Ctr>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>\n          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n        \u003C\u002Ftd>\n      \u003C\u002Ftr> -->\n    \u003C\u002Ftbody>\n  \u003C\u002Ftable>\n  \u003Cscript>\n    \u002F\u002F const initData = [{\n    \u002F\u002F   unameId: 1,\n    \u002F\u002F   uname: '华晨宇',\n    \u002F\u002F   age: 22,\n    \u002F\u002F   salary: 12000,\n    \u002F\u002F   gender: '男',\n    \u002F\u002F   city: '北京',\n    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n    \u002F\u002F }]\n    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n    \u002F\u002F 1.渲染业务\n    \u002F\u002F 1.1 先读取本地存储的数据\n    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n\n    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n    const arr = []\n    console.log(arr)\n\n    \u002F\u002F 时间函数\n    function getTime() {\n      const date = new Date()\n      const h = date.getHours() \u003C 10 ? '0' + date.getHours() : date.getHours()\n      const m = date.getMinutes() \u003C 10 ? '0' + date.getMinutes() : date.getMinutes()\n      const s = date.getSeconds() \u003C 10 ? '0' + date.getSeconds() : date.getSeconds()\n      const str = `${date.getFullYear()}\u002F${date.getMonth() + 1}\u002F${date.getDate()} ${h}:${m}:${s}`\n      return str\n    }\n    \u002F\u002F 渲染函数\n    const tbody = document.querySelector('tbody')\n    function render() {\n      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n      const trArr = arr.map(function (ele, index) {\n        return `\n      \u003Ctr>\n        \u003Ctd>${ele.unameId}\u003C\u002Ftd>\n        \u003Ctd>${ele.uname}\u003C\u002Ftd>\n        \u003Ctd>${ele.age}\u003C\u002Ftd>\n        \u003Ctd>${ele.gender}\u003C\u002Ftd>\n        \u003Ctd>${ele.salary}\u003C\u002Ftd>\n        \u003Ctd>${ele.city}\u003C\u002Ftd>\n        \u003Ctd>${ele.time}\u003C\u002Ftd>\n        \u003Ctd>\n          \u003Ca href=\"#\" data-id=\"${index}\">删除\u003C\u002Fa>\n        \u003C\u002Ftd>\n      \u003C\u002Ftr>\n  `\n      })\n      console.log(trArr)\n\n      \u002F\u002F (2) 把数组转换为字符串join\n      \u002F\u002F (3) 把生成的字符串追加给tobody\n      tbody.innerHTML = trArr.join('')\n      \u002F\u002F 显示共有几条\n      document.querySelector('.total span').innerHTML = arr.length\n    }\n    \u002F\u002F render()\n\n    \u002F\u002F 获取DOM对象\n    const info = document.querySelector('.info')\n    const uname = document.querySelector('.uname')\n    const age = document.querySelector('.age')\n    const salary = document.querySelector('.salary')\n    const gender = document.querySelector('.gender')\n    const city = document.querySelector('.city')\n\n    \u002F\u002F form表单注册提交事件，阻止默认行为\n    info.addEventListener('submit', function (e) {\n      \u002F\u002F 禁止浏览器跳转\n      e.preventDefault()\n      \u002F\u002F 非空判断\n      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n      if (!uname.value || !age.value || !salary.value) {\n        return alert('输入内容不能为空')\n      }\n      arr.push({\n        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n        \u002F\u002F 对象的序号应为数组长度+1\n        \u002F\u002F unameId: arr.length + 1,\n\n        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n        \u002F\u002F 0当假看\n        unameId: arr.length ? arr[arr.length - 1].unameId + 1 : 1,\n        uname: uname.value,\n        age: age.value,\n        salary: salary.value,\n        gender: gender.value,\n        city: city.value,\n        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n        \u002F\u002F time: new Date().toDateString()\n        time: getTime()\n      })\n      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n      render()\n      this.reset() \u002F\u002F重置表单\n      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n      localStorage.setItem('data', JSON.stringify(arr))\n    })\n\n    \u002F\u002F 3.删除业务\n    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n    tbody.addEventListener('click', function (e) {\n      \u002F\u002F 判断是否点击的是删除按钮\n      if (e.target.tagName === 'A') {\n        \u002F\u002F alert(1)\n        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n        \u002F\u002F console.log(e.target)\n        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n\n        \u002F\u002F 确认框，确然是否真的要删除\n        \u002F\u002F confirm()为确认框\n        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n        if (confirm('您确定要删除这条数据吗？')) {\n          arr.splice(e.target.dataset.id, 1)\n          \u002F\u002F 3.4 重新渲染页面\n          render()\n          \u002F\u002F 3.5 把最新arr数组存到本地存储\n          localStorage.setItem('data', JSON.stringify(arr))\n        }\n      }\n\n    })\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,73453,73454,73464,73478,73482,73490,73504,73524,73536,73544,73550,73560,73570,73574,73578,73584,73594,73606,73610,73614,73621,73633,73647,73657,73661,73665,73672,73679,73686,73698,73710,73720,73732,73736,73740,73747,73754,73766,73778,73788,73800,73830,73834,73838,73845,73857,73869,73893,73903,73913,73917,73921,73929,73940,73952,73964,73976,73993,74005,74017,74021,74025,74032,74044,74056,74068,74079,74097,74110,74122,74146,74157,74161,74165,74173,74183,74187,74191,74197,74209,74220,74230,74234,74238,74244,74266,74270,74274,74280,74286,74298,74308,74320,74350,74363,74380,74384,74388,74399,74421,74431,74435,74439,74452,74462,74474,74486,74498,74510,74520,74530,74540,74551,74564,74568,74576,74584,74588,74596,74609,74629,74662,74695,74728,74754,74772,74790,74798,74824,74842,74860,74878,74896,74914,74922,74930,74948,74956,74985,74993,75001,75009,75022,75034,75046,75058,75070,75082,75095,75107,75115,75123,75131,75136,75141,75145,75149,75153,75157,75161,75165,75170,75175,75180,75185,75193,75201,75209,75214,75219,75224,75229,75234,75239,75244,75249,75254,75259,75264,75269,75274,75279,75283,75288,75293,75303,75312,75316,75321,75330,75346,75388,75428,75467,75532,75540,75544,75549,75567,75575,75580,75585,75615,75621,75626,75639,75651,75663,75675,75687,75699,75711,75715,75725,75729,75734,75739,75743,75752,75756,75761,75766,75785,75790,75810,75814,75819,75823,75828,75846,75864,75882,75901,75920,75939,75944,75950,75971,75977,75986,75992,75998,76004,76031,76044,76049,76059,76065,76071,76077,76083,76088,76094,76100,76106,76112,76145,76150,76155,76160,76165,76171,76177,76183,76194,76199,76205,76212,76226,76232,76256,76261,76266,76272,76278,76299,76305,76318,76324,76330,76336,76342,76347,76353,76359,76365,76383,76397,76403,76411,76417,76439,76444,76449,76454,76459,76464,76473,76482,76487],{"__ignoreMap":79},[100,73455,73456,73458,73460,73462],{"class":102,"line":103},[100,73457,52851],{"class":258},[100,73459,52855],{"class":52854},[100,73461,52858],{"class":106},[100,73463,52861],{"class":258},[100,73465,73466,73468,73470,73472,73474,73476],{"class":102,"line":188},[100,73467,2676],{"class":258},[100,73469,52189],{"class":52854},[100,73471,52870],{"class":106},[100,73473,472],{"class":258},[100,73475,52875],{"class":110},[100,73477,52861],{"class":258},[100,73479,73480],{"class":102,"line":199},[100,73481,570],{"emptyLinePlaceholder":569},[100,73483,73484,73486,73488],{"class":102,"line":532},[100,73485,2676],{"class":258},[100,73487,52888],{"class":52854},[100,73489,52861],{"class":258},[100,73491,73492,73494,73496,73498,73500,73502],{"class":102,"line":577},[100,73493,53698],{"class":258},[100,73495,52898],{"class":52854},[100,73497,52901],{"class":106},[100,73499,472],{"class":258},[100,73501,52906],{"class":110},[100,73503,52861],{"class":258},[100,73505,73506,73508,73510,73512,73514,73516,73518,73520,73522],{"class":102,"line":589},[100,73507,53698],{"class":258},[100,73509,52898],{"class":52854},[100,73511,16501],{"class":106},[100,73513,472],{"class":258},[100,73515,52945],{"class":110},[100,73517,52925],{"class":106},[100,73519,472],{"class":258},[100,73521,52952],{"class":110},[100,73523,52861],{"class":258},[100,73525,73526,73528,73530,73532,73534],{"class":102,"line":595},[100,73527,53698],{"class":258},[100,73529,52961],{"class":52854},[100,73531,52964],{"class":258},[100,73533,52961],{"class":52854},[100,73535,52861],{"class":258},[100,73537,73538,73540,73542],{"class":102,"line":601},[100,73539,53698],{"class":258},[100,73541,1677],{"class":52854},[100,73543,52861],{"class":258},[100,73545,73546,73548],{"class":102,"line":606},[100,73547,7999],{"class":52854},[100,73549,17153],{"class":258},[100,73551,73552,73554,73556,73558],{"class":102,"line":612},[100,73553,56249],{"class":117},[100,73555,52991],{"class":258},[100,73557,1366],{"class":117},[100,73559,2927],{"class":258},[100,73561,73562,73564,73566,73568],{"class":102,"line":618},[100,73563,56260],{"class":117},[100,73565,52991],{"class":258},[100,73567,1366],{"class":117},[100,73569,2927],{"class":258},[100,73571,73572],{"class":102,"line":623},[100,73573,3798],{"class":258},[100,73575,73576],{"class":102,"line":629},[100,73577,570],{"emptyLinePlaceholder":569},[100,73579,73580,73582],{"class":102,"line":635},[100,73581,58833],{"class":52854},[100,73583,17153],{"class":258},[100,73585,73586,73588,73590,73592],{"class":102,"line":641},[100,73587,58840],{"class":117},[100,73589,52991],{"class":258},[100,73591,53146],{"class":117},[100,73593,2927],{"class":258},[100,73595,73596,73598,73600,73602,73604],{"class":102,"line":647},[100,73597,63631],{"class":117},[100,73599,52991],{"class":258},[100,73601,2466],{"class":117},[100,73603,53046],{"class":471},[100,73605,2927],{"class":258},[100,73607,73608],{"class":102,"line":653},[100,73609,3798],{"class":258},[100,73611,73612],{"class":102,"line":659},[100,73613,570],{"emptyLinePlaceholder":569},[100,73615,73616,73619],{"class":102,"line":665},[100,73617,73618],{"class":106},"    .info",[100,73620,17153],{"class":258},[100,73622,73623,73625,73627,73629,73631],{"class":102,"line":670},[100,73624,56325],{"class":117},[100,73626,52991],{"class":258},[100,73628,53043],{"class":117},[100,73630,53046],{"class":471},[100,73632,2927],{"class":258},[100,73634,73635,73637,73639,73641,73643,73645],{"class":102,"line":675},[100,73636,56260],{"class":117},[100,73638,52991],{"class":258},[100,73640,2213],{"class":117},[100,73642,53046],{"class":471},[100,73644,53110],{"class":117},[100,73646,2927],{"class":258},[100,73648,73649,73651,73653,73655],{"class":102,"line":699},[100,73650,58840],{"class":117},[100,73652,52991],{"class":258},[100,73654,53146],{"class":117},[100,73656,2927],{"class":258},[100,73658,73659],{"class":102,"line":708},[100,73660,3798],{"class":258},[100,73662,73663],{"class":102,"line":722},[100,73664,570],{"emptyLinePlaceholder":569},[100,73666,73667,73670],{"class":102,"line":735},[100,73668,73669],{"class":106},"    .uname",[100,73671,33024],{"class":258},[100,73673,73674,73677],{"class":102,"line":754},[100,73675,73676],{"class":106},"    .age",[100,73678,33024],{"class":258},[100,73680,73681,73684],{"class":102,"line":771},[100,73682,73683],{"class":106},"    .salary",[100,73685,17153],{"class":258},[100,73687,73688,73690,73692,73694,73696],{"class":102,"line":776},[100,73689,56325],{"class":117},[100,73691,52991],{"class":258},[100,73693,2078],{"class":117},[100,73695,53046],{"class":471},[100,73697,2927],{"class":258},[100,73699,73700,73702,73704,73706,73708],{"class":102,"line":781},[100,73701,56339],{"class":117},[100,73703,52991],{"class":258},[100,73705,2466],{"class":117},[100,73707,53046],{"class":471},[100,73709,2927],{"class":258},[100,73711,73712,73714,73716,73718],{"class":102,"line":796},[100,73713,63334],{"class":117},[100,73715,52991],{"class":258},[100,73717,56291],{"class":117},[100,73719,2927],{"class":258},[100,73721,73722,73724,73726,73728,73730],{"class":102,"line":812},[100,73723,63304],{"class":117},[100,73725,52991],{"class":258},[100,73727,2342],{"class":117},[100,73729,53046],{"class":471},[100,73731,2927],{"class":258},[100,73733,73734],{"class":102,"line":823},[100,73735,3798],{"class":258},[100,73737,73738],{"class":102,"line":828},[100,73739,570],{"emptyLinePlaceholder":569},[100,73741,73742,73745],{"class":102,"line":840},[100,73743,73744],{"class":106},"    .gender",[100,73746,33024],{"class":258},[100,73748,73749,73752],{"class":102,"line":845},[100,73750,73751],{"class":106},"    .city",[100,73753,17153],{"class":258},[100,73755,73756,73758,73760,73762,73764],{"class":102,"line":868},[100,73757,56325],{"class":117},[100,73759,52991],{"class":258},[100,73761,2078],{"class":117},[100,73763,53046],{"class":471},[100,73765,2927],{"class":258},[100,73767,73768,73770,73772,73774,73776],{"class":102,"line":874},[100,73769,56339],{"class":117},[100,73771,52991],{"class":258},[100,73773,2591],{"class":117},[100,73775,53046],{"class":471},[100,73777,2927],{"class":258},[100,73779,73780,73782,73784,73786],{"class":102,"line":879},[100,73781,63334],{"class":117},[100,73783,52991],{"class":258},[100,73785,56291],{"class":117},[100,73787,2927],{"class":258},[100,73789,73790,73792,73794,73796,73798],{"class":102,"line":889},[100,73791,63304],{"class":117},[100,73793,52991],{"class":258},[100,73795,2342],{"class":117},[100,73797,53046],{"class":471},[100,73799,2927],{"class":258},[100,73801,73802,73804,73806,73808,73810,73812,73815,73817,73819,73821,73824,73826,73828],{"class":102,"line":894},[100,73803,63531],{"class":117},[100,73805,52991],{"class":258},[100,73807,1985],{"class":117},[100,73809,53046],{"class":471},[100,73811,53075],{"class":117},[100,73813,73814],{"class":117}," rgb",[100,73816,713],{"class":258},[100,73818,3343],{"class":117},[100,73820,14017],{"class":258},[100,73822,73823],{"class":117},"197",[100,73825,14017],{"class":258},[100,73827,73823],{"class":117},[100,73829,4321],{"class":258},[100,73831,73832],{"class":102,"line":900},[100,73833,3798],{"class":258},[100,73835,73836],{"class":102,"line":910},[100,73837,570],{"emptyLinePlaceholder":569},[100,73839,73840,73843],{"class":102,"line":915},[100,73841,73842],{"class":52854},"    button",[100,73844,17153],{"class":258},[100,73846,73847,73849,73851,73853,73855],{"class":102,"line":929},[100,73848,56339],{"class":117},[100,73850,52991],{"class":258},[100,73852,2591],{"class":117},[100,73854,53046],{"class":471},[100,73856,2927],{"class":258},[100,73858,73859,73861,73863,73865,73867],{"class":102,"line":935},[100,73860,56325],{"class":117},[100,73862,52991],{"class":258},[100,73864,2251],{"class":117},[100,73866,53046],{"class":471},[100,73868,2927],{"class":258},[100,73870,73871,73873,73875,73878,73880,73882,73884,73887,73889,73891],{"class":102,"line":945},[100,73872,56438],{"class":117},[100,73874,52991],{"class":258},[100,73876,73877],{"class":117},"rgb",[100,73879,713],{"class":258},[100,73881,2735],{"class":117},[100,73883,14017],{"class":258},[100,73885,73886],{"class":117},"187",[100,73888,14017],{"class":258},[100,73890,2066],{"class":117},[100,73892,4321],{"class":258},[100,73894,73895,73897,73899,73901],{"class":102,"line":950},[100,73896,58970],{"class":117},[100,73898,52991],{"class":258},[100,73900,62396],{"class":117},[100,73902,2927],{"class":258},[100,73904,73905,73907,73909,73911],{"class":102,"line":955},[100,73906,63531],{"class":117},[100,73908,52991],{"class":258},[100,73910,1366],{"class":117},[100,73912,2927],{"class":258},[100,73914,73915],{"class":102,"line":972},[100,73916,3798],{"class":258},[100,73918,73919],{"class":102,"line":11370},[100,73920,570],{"emptyLinePlaceholder":569},[100,73922,73923,73925,73927],{"class":102,"line":11375},[100,73924,73842],{"class":52854},[100,73926,53242],{"class":52854},[100,73928,17153],{"class":258},[100,73930,73931,73933,73935,73938],{"class":102,"line":11380},[100,73932,56563],{"class":117},[100,73934,52991],{"class":258},[100,73936,73937],{"class":117},"inline-block",[100,73939,2927],{"class":258},[100,73941,73942,73944,73946,73948,73950],{"class":102,"line":11385},[100,73943,56325],{"class":117},[100,73945,52991],{"class":258},[100,73947,2213],{"class":117},[100,73949,53046],{"class":471},[100,73951,2927],{"class":258},[100,73953,73954,73956,73958,73960,73962],{"class":102,"line":11394},[100,73955,56339],{"class":117},[100,73957,52991],{"class":258},[100,73959,2213],{"class":117},[100,73961,53046],{"class":471},[100,73963,2927],{"class":258},[100,73965,73966,73968,73970,73972,73974],{"class":102,"line":11399},[100,73967,58913],{"class":117},[100,73969,52991],{"class":258},[100,73971,2239],{"class":117},[100,73973,53046],{"class":471},[100,73975,2927],{"class":258},[100,73977,73978,73980,73982,73984,73986,73988,73991],{"class":102,"line":11405},[100,73979,63531],{"class":117},[100,73981,52991],{"class":258},[100,73983,1985],{"class":117},[100,73985,53046],{"class":471},[100,73987,53075],{"class":117},[100,73989,73990],{"class":117}," #fff",[100,73992,2927],{"class":258},[100,73994,73995,73997,73999,74001,74003],{"class":102,"line":11426},[100,73996,56688],{"class":117},[100,73998,52991],{"class":258},[100,74000,2086],{"class":117},[100,74002,53046],{"class":471},[100,74004,2927],{"class":258},[100,74006,74007,74009,74011,74013,74015],{"class":102,"line":11432},[100,74008,63304],{"class":117},[100,74010,52991],{"class":258},[100,74012,1985],{"class":117},[100,74014,53046],{"class":471},[100,74016,2927],{"class":258},[100,74018,74019],{"class":102,"line":11446},[100,74020,3798],{"class":258},[100,74022,74023],{"class":102,"line":11452},[100,74024,570],{"emptyLinePlaceholder":569},[100,74026,74027,74030],{"class":102,"line":11479},[100,74028,74029],{"class":106},"    .total",[100,74031,17153],{"class":258},[100,74033,74034,74036,74038,74040,74042],{"class":102,"line":11488},[100,74035,56325],{"class":117},[100,74037,52991],{"class":258},[100,74039,63183],{"class":117},[100,74041,53046],{"class":471},[100,74043,2927],{"class":258},[100,74045,74046,74048,74050,74052,74054],{"class":102,"line":11494},[100,74047,56339],{"class":117},[100,74049,52991],{"class":258},[100,74051,2168],{"class":117},[100,74053,53046],{"class":471},[100,74055,2927],{"class":258},[100,74057,74058,74060,74062,74064,74066],{"class":102,"line":11502},[100,74059,58913],{"class":117},[100,74061,52991],{"class":258},[100,74063,2168],{"class":117},[100,74065,53046],{"class":471},[100,74067,2927],{"class":258},[100,74069,74070,74072,74074,74077],{"class":102,"line":11507},[100,74071,58840],{"class":117},[100,74073,52991],{"class":258},[100,74075,74076],{"class":117},"right",[100,74078,2927],{"class":258},[100,74080,74081,74083,74085,74087,74089,74091,74093,74095],{"class":102,"line":18185},[100,74082,56260],{"class":117},[100,74084,52991],{"class":258},[100,74086,2168],{"class":117},[100,74088,53046],{"class":471},[100,74090,53110],{"class":117},[100,74092,3649],{"class":117},[100,74094,53046],{"class":471},[100,74096,2927],{"class":258},[100,74098,74099,74102,74104,74106,74108],{"class":102,"line":18191},[100,74100,74101],{"class":117},"      padding-right",[100,74103,52991],{"class":258},[100,74105,2213],{"class":117},[100,74107,53046],{"class":471},[100,74109,2927],{"class":258},[100,74111,74112,74114,74116,74118,74120],{"class":102,"line":18214},[100,74113,56476],{"class":117},[100,74115,52991],{"class":258},[100,74117,2290],{"class":117},[100,74119,53046],{"class":471},[100,74121,2927],{"class":258},[100,74123,74124,74126,74128,74130,74132,74135,74137,74140,74142,74144],{"class":102,"line":18220},[100,74125,56438],{"class":117},[100,74127,52991],{"class":258},[100,74129,73877],{"class":117},[100,74131,713],{"class":258},[100,74133,74134],{"class":117},"237",[100,74136,14017],{"class":258},[100,74138,74139],{"class":117},"235",[100,74141,14017],{"class":258},[100,74143,74139],{"class":117},[100,74145,4321],{"class":258},[100,74147,74148,74151,74153,74155],{"class":102,"line":18243},[100,74149,74150],{"class":117},"      box-sizing",[100,74152,52991],{"class":258},[100,74154,62059],{"class":117},[100,74156,2927],{"class":258},[100,74158,74159],{"class":102,"line":18257},[100,74160,3798],{"class":258},[100,74162,74163],{"class":102,"line":18277},[100,74164,570],{"emptyLinePlaceholder":569},[100,74166,74167,74169,74171],{"class":102,"line":18283},[100,74168,74029],{"class":106},[100,74170,53242],{"class":52854},[100,74172,17153],{"class":258},[100,74174,74175,74177,74179,74181],{"class":102,"line":18294},[100,74176,58970],{"class":117},[100,74178,52991],{"class":258},[100,74180,58975],{"class":117},[100,74182,2927],{"class":258},[100,74184,74185],{"class":102,"line":18317},[100,74186,3798],{"class":258},[100,74188,74189],{"class":102,"line":18339},[100,74190,570],{"emptyLinePlaceholder":569},[100,74192,74193,74195],{"class":102,"line":18344},[100,74194,66577],{"class":52854},[100,74196,17153],{"class":258},[100,74198,74199,74201,74203,74205,74207],{"class":102,"line":18350},[100,74200,56325],{"class":117},[100,74202,52991],{"class":258},[100,74204,63183],{"class":117},[100,74206,53046],{"class":471},[100,74208,2927],{"class":258},[100,74210,74211,74213,74215,74218],{"class":102,"line":18364},[100,74212,56260],{"class":117},[100,74214,52991],{"class":258},[100,74216,74217],{"class":117},"auto",[100,74219,2927],{"class":258},[100,74221,74222,74224,74226,74228],{"class":102,"line":18377},[100,74223,66584],{"class":117},[100,74225,52991],{"class":258},[100,74227,66589],{"class":117},[100,74229,2927],{"class":258},[100,74231,74232],{"class":102,"line":18382},[100,74233,3798],{"class":258},[100,74235,74236],{"class":102,"line":18396},[100,74237,570],{"emptyLinePlaceholder":569},[100,74239,74240,74242],{"class":102,"line":18401},[100,74241,66669],{"class":52854},[100,74243,17153],{"class":258},[100,74245,74246,74248,74250,74252,74254,74256,74258,74260,74262,74264],{"class":102,"line":18407},[100,74247,56438],{"class":117},[100,74249,52991],{"class":258},[100,74251,73877],{"class":117},[100,74253,713],{"class":258},[100,74255,74134],{"class":117},[100,74257,14017],{"class":258},[100,74259,74139],{"class":117},[100,74261,14017],{"class":258},[100,74263,74139],{"class":117},[100,74265,4321],{"class":258},[100,74267,74268],{"class":102,"line":18412},[100,74269,3798],{"class":258},[100,74271,74272],{"class":102,"line":18426},[100,74273,570],{"emptyLinePlaceholder":569},[100,74275,74276,74278],{"class":102,"line":18431},[100,74277,66669],{"class":52854},[100,74279,33024],{"class":258},[100,74281,74282,74284],{"class":102,"line":18436},[100,74283,66735],{"class":52854},[100,74285,17153],{"class":258},[100,74287,74288,74290,74292,74294,74296],{"class":102,"line":18450},[100,74289,56339],{"class":117},[100,74291,52991],{"class":258},[100,74293,2041],{"class":117},[100,74295,53046],{"class":471},[100,74297,2927],{"class":258},[100,74299,74300,74302,74304,74306],{"class":102,"line":18462},[100,74301,58840],{"class":117},[100,74303,52991],{"class":258},[100,74305,330],{"class":117},[100,74307,2927],{"class":258},[100,74309,74310,74312,74314,74316,74318],{"class":102,"line":18467},[100,74311,56476],{"class":117},[100,74313,52991],{"class":258},[100,74315,2316],{"class":117},[100,74317,53046],{"class":471},[100,74319,2927],{"class":258},[100,74321,74322,74324,74326,74328,74330,74332,74334,74336,74339,74341,74344,74346,74348],{"class":102,"line":18480},[100,74323,63531],{"class":117},[100,74325,52991],{"class":258},[100,74327,1985],{"class":117},[100,74329,53046],{"class":471},[100,74331,53075],{"class":117},[100,74333,73814],{"class":117},[100,74335,713],{"class":258},[100,74337,74338],{"class":117},"228",[100,74340,14017],{"class":258},[100,74342,74343],{"class":117},"225",[100,74345,14017],{"class":258},[100,74347,74343],{"class":117},[100,74349,4321],{"class":258},[100,74351,74352,74355,74357,74359,74361],{"class":102,"line":18485},[100,74353,74354],{"class":117},"      padding-left",[100,74356,52991],{"class":258},[100,74358,2086],{"class":117},[100,74360,53046],{"class":471},[100,74362,2927],{"class":258},[100,74364,74365,74367,74369,74371,74374,74376,74378],{"class":102,"line":18490},[100,74366,63414],{"class":117},[100,74368,52991],{"class":258},[100,74370,29693],{"class":117},[100,74372,74373],{"class":117}," linear",[100,74375,63421],{"class":117},[100,74377,2461],{"class":471},[100,74379,2927],{"class":258},[100,74381,74382],{"class":102,"line":18495},[100,74383,3798],{"class":258},[100,74385,74386],{"class":102,"line":18508},[100,74387,570],{"emptyLinePlaceholder":569},[100,74389,74390,74393,74395,74397],{"class":102,"line":18513},[100,74391,74392],{"class":52854},"    tbody",[100,74394,71698],{"class":52854},[100,74396,62494],{"class":106},[100,74398,17153],{"class":258},[100,74400,74401,74403,74405,74407,74409,74411,74413,74415,74417,74419],{"class":102,"line":34189},[100,74402,56438],{"class":117},[100,74404,52991],{"class":258},[100,74406,73877],{"class":117},[100,74408,713],{"class":258},[100,74410,74134],{"class":117},[100,74412,14017],{"class":258},[100,74414,74139],{"class":117},[100,74416,14017],{"class":258},[100,74418,74139],{"class":117},[100,74420,4321],{"class":258},[100,74422,74423,74425,74427,74429],{"class":102,"line":34195},[100,74424,63579],{"class":117},[100,74426,52991],{"class":258},[100,74428,63584],{"class":117},[100,74430,2927],{"class":258},[100,74432,74433],{"class":102,"line":34201},[100,74434,3798],{"class":258},[100,74436,74437],{"class":102,"line":34207},[100,74438,570],{"emptyLinePlaceholder":569},[100,74440,74441,74443,74445,74448,74450],{"class":102,"line":34213},[100,74442,74392],{"class":52854},[100,74444,71698],{"class":52854},[100,74446,74447],{"class":52854}," td",[100,74449,3031],{"class":52854},[100,74451,17153],{"class":258},[100,74453,74454,74456,74458,74460],{"class":102,"line":34224},[100,74455,56563],{"class":117},[100,74457,52991],{"class":258},[100,74459,62423],{"class":117},[100,74461,2927],{"class":258},[100,74463,74464,74466,74468,74470,74472],{"class":102,"line":34230},[100,74465,56325],{"class":117},[100,74467,52991],{"class":258},[100,74469,2673],{"class":117},[100,74471,53046],{"class":471},[100,74473,2927],{"class":258},[100,74475,74476,74478,74480,74482,74484],{"class":102,"line":34250},[100,74477,56339],{"class":117},[100,74479,52991],{"class":258},[100,74481,2591],{"class":117},[100,74483,53046],{"class":471},[100,74485,2927],{"class":258},[100,74487,74488,74490,74492,74494,74496],{"class":102,"line":34256},[100,74489,58913],{"class":117},[100,74491,52991],{"class":258},[100,74493,2591],{"class":117},[100,74495,53046],{"class":471},[100,74497,2927],{"class":258},[100,74499,74500,74502,74504,74506,74508],{"class":102,"line":34267},[100,74501,63631],{"class":117},[100,74503,52991],{"class":258},[100,74505,465],{"class":117},[100,74507,53046],{"class":471},[100,74509,2927],{"class":258},[100,74511,74512,74514,74516,74518],{"class":102,"line":34273},[100,74513,58970],{"class":117},[100,74515,52991],{"class":258},[100,74517,62396],{"class":117},[100,74519,2927],{"class":258},[100,74521,74522,74524,74526,74528],{"class":102,"line":34279},[100,74523,58840],{"class":117},[100,74525,52991],{"class":258},[100,74527,53146],{"class":117},[100,74529,2927],{"class":258},[100,74531,74532,74534,74536,74538],{"class":102,"line":34285},[100,74533,65524],{"class":117},[100,74535,52991],{"class":258},[100,74537,56291],{"class":117},[100,74539,2927],{"class":258},[100,74541,74542,74544,74546,74549],{"class":102,"line":34291},[100,74543,56438],{"class":117},[100,74545,52991],{"class":258},[100,74547,74548],{"class":117},"orange",[100,74550,2927],{"class":258},[100,74552,74553,74555,74557,74560,74562],{"class":102,"line":34297},[100,74554,56688],{"class":117},[100,74556,52991],{"class":258},[100,74558,74559],{"class":117},"12.5",[100,74561,53046],{"class":471},[100,74563,2927],{"class":258},[100,74565,74566],{"class":102,"line":34303},[100,74567,3798],{"class":258},[100,74569,74570,74572,74574],{"class":102,"line":34309},[100,74571,53971],{"class":258},[100,74573,1677],{"class":52854},[100,74575,52861],{"class":258},[100,74577,74578,74580,74582],{"class":102,"line":34329},[100,74579,53339],{"class":258},[100,74581,52888],{"class":52854},[100,74583,52861],{"class":258},[100,74585,74586],{"class":102,"line":34335},[100,74587,570],{"emptyLinePlaceholder":569},[100,74589,74590,74592,74594],{"class":102,"line":34351},[100,74591,2676],{"class":258},[100,74593,53354],{"class":52854},[100,74595,52861],{"class":258},[100,74597,74598,74600,74602,74605,74607],{"class":102,"line":34357},[100,74599,53698],{"class":258},[100,74601,14],{"class":52854},[100,74603,74604],{"class":258},">学生就业统计表\u003C\u002F",[100,74606,14],{"class":52854},[100,74608,52861],{"class":258},[100,74610,74611,74613,74615,74617,74619,74621,74623,74625,74627],{"class":102,"line":34371},[100,74612,53698],{"class":258},[100,74614,68179],{"class":52854},[100,74616,55040],{"class":106},[100,74618,472],{"class":258},[100,74620,64218],{"class":110},[100,74622,70624],{"class":106},[100,74624,472],{"class":258},[100,74626,33334],{"class":110},[100,74628,52861],{"class":258},[100,74630,74631,74633,74635,74637,74639,74641,74643,74645,74647,74649,74651,74654,74656,74658,74660],{"class":102,"line":34377},[100,74632,52895],{"class":258},[100,74634,55375],{"class":52854},[100,74636,55378],{"class":106},[100,74638,472],{"class":258},[100,74640,64253],{"class":110},[100,74642,16501],{"class":106},[100,74644,472],{"class":258},[100,74646,70650],{"class":110},[100,74648,62574],{"class":106},[100,74650,472],{"class":258},[100,74652,74653],{"class":110},"\"姓名\"",[100,74655,55040],{"class":106},[100,74657,472],{"class":258},[100,74659,70650],{"class":110},[100,74661,52861],{"class":258},[100,74663,74664,74666,74668,74670,74672,74674,74676,74678,74680,74682,74684,74687,74689,74691,74693],{"class":102,"line":34392},[100,74665,52895],{"class":258},[100,74667,55375],{"class":52854},[100,74669,55378],{"class":106},[100,74671,472],{"class":258},[100,74673,64253],{"class":110},[100,74675,16501],{"class":106},[100,74677,472],{"class":258},[100,74679,70678],{"class":110},[100,74681,62574],{"class":106},[100,74683,472],{"class":258},[100,74685,74686],{"class":110},"\"年龄\"",[100,74688,55040],{"class":106},[100,74690,472],{"class":258},[100,74692,70678],{"class":110},[100,74694,52861],{"class":258},[100,74696,74697,74699,74701,74703,74705,74707,74709,74711,74713,74715,74717,74720,74722,74724,74726],{"class":102,"line":34398},[100,74698,52895],{"class":258},[100,74700,55375],{"class":52854},[100,74702,55378],{"class":106},[100,74704,472],{"class":258},[100,74706,64253],{"class":110},[100,74708,16501],{"class":106},[100,74710,472],{"class":258},[100,74712,70780],{"class":110},[100,74714,62574],{"class":106},[100,74716,472],{"class":258},[100,74718,74719],{"class":110},"\"薪资\"",[100,74721,55040],{"class":106},[100,74723,472],{"class":258},[100,74725,70780],{"class":110},[100,74727,52861],{"class":258},[100,74729,74730,74732,74734,74736,74738,74740,74742,74744,74746,74748,74750,74752],{"class":102,"line":34407},[100,74731,52895],{"class":258},[100,74733,70698],{"class":52854},[100,74735,16501],{"class":106},[100,74737,472],{"class":258},[100,74739,70705],{"class":110},[100,74741,16540],{"class":106},[100,74743,472],{"class":258},[100,74745,9248],{"class":110},[100,74747,55040],{"class":106},[100,74749,472],{"class":258},[100,74751,70705],{"class":110},[100,74753,52861],{"class":258},[100,74755,74756,74758,74760,74762,74764,74766,74768,74770],{"class":102,"line":34413},[100,74757,56788],{"class":258},[100,74759,70720],{"class":52854},[100,74761,68205],{"class":106},[100,74763,472],{"class":258},[100,74765,11543],{"class":110},[100,74767,70729],{"class":258},[100,74769,70720],{"class":52854},[100,74771,52861],{"class":258},[100,74773,74774,74776,74778,74780,74782,74784,74786,74788],{"class":102,"line":34422},[100,74775,56788],{"class":258},[100,74777,70720],{"class":52854},[100,74779,68205],{"class":106},[100,74781,472],{"class":258},[100,74783,11612],{"class":110},[100,74785,70748],{"class":258},[100,74787,70720],{"class":52854},[100,74789,52861],{"class":258},[100,74791,74792,74794,74796],{"class":102,"line":34428},[100,74793,53330],{"class":258},[100,74795,70698],{"class":52854},[100,74797,52861],{"class":258},[100,74799,74800,74802,74804,74806,74808,74810,74812,74814,74816,74818,74820,74822],{"class":102,"line":34434},[100,74801,52895],{"class":258},[100,74803,70698],{"class":52854},[100,74805,16501],{"class":106},[100,74807,472],{"class":258},[100,74809,70802],{"class":110},[100,74811,16540],{"class":106},[100,74813,472],{"class":258},[100,74815,9248],{"class":110},[100,74817,55040],{"class":106},[100,74819,472],{"class":258},[100,74821,70802],{"class":110},[100,74823,52861],{"class":258},[100,74825,74826,74828,74830,74832,74834,74836,74838,74840],{"class":102,"line":34443},[100,74827,56788],{"class":258},[100,74829,70720],{"class":52854},[100,74831,68205],{"class":106},[100,74833,472],{"class":258},[100,74835,70823],{"class":110},[100,74837,70826],{"class":258},[100,74839,70720],{"class":52854},[100,74841,52861],{"class":258},[100,74843,74844,74846,74848,74850,74852,74854,74856,74858],{"class":102,"line":34449},[100,74845,56788],{"class":258},[100,74847,70720],{"class":52854},[100,74849,68205],{"class":106},[100,74851,472],{"class":258},[100,74853,70843],{"class":110},[100,74855,70846],{"class":258},[100,74857,70720],{"class":52854},[100,74859,52861],{"class":258},[100,74861,74862,74864,74866,74868,74870,74872,74874,74876],{"class":102,"line":34460},[100,74863,56788],{"class":258},[100,74865,70720],{"class":52854},[100,74867,68205],{"class":106},[100,74869,472],{"class":258},[100,74871,70863],{"class":110},[100,74873,70866],{"class":258},[100,74875,70720],{"class":52854},[100,74877,52861],{"class":258},[100,74879,74880,74882,74884,74886,74888,74890,74892,74894],{"class":102,"line":34466},[100,74881,56788],{"class":258},[100,74883,70720],{"class":52854},[100,74885,68205],{"class":106},[100,74887,472],{"class":258},[100,74889,70883],{"class":110},[100,74891,70886],{"class":258},[100,74893,70720],{"class":52854},[100,74895,52861],{"class":258},[100,74897,74898,74900,74902,74904,74906,74908,74910,74912],{"class":102,"line":34485},[100,74899,56788],{"class":258},[100,74901,70720],{"class":52854},[100,74903,68205],{"class":106},[100,74905,472],{"class":258},[100,74907,70903],{"class":110},[100,74909,70906],{"class":258},[100,74911,70720],{"class":52854},[100,74913,52861],{"class":258},[100,74915,74916,74918,74920],{"class":102,"line":34491},[100,74917,53330],{"class":258},[100,74919,70698],{"class":52854},[100,74921,52861],{"class":258},[100,74923,74924,74926,74928],{"class":102,"line":34502},[100,74925,52895],{"class":258},[100,74927,55441],{"class":52854},[100,74929,52861],{"class":258},[100,74931,74932,74934,74936,74939,74941,74944,74946],{"class":102,"line":34508},[100,74933,56788],{"class":258},[100,74935,100],{"class":52854},[100,74937,74938],{"class":258},">+\u003C\u002F",[100,74940,100],{"class":52854},[100,74942,74943],{"class":258},">添加\u003C\u002F",[100,74945,55441],{"class":52854},[100,74947,52861],{"class":258},[100,74949,74950,74952,74954],{"class":102,"line":34528},[100,74951,53971],{"class":258},[100,74953,68179],{"class":52854},[100,74955,52861],{"class":258},[100,74957,74958,74960,74962,74964,74966,74968,74971,74973,74976,74978,74981,74983],{"class":102,"line":34544},[100,74959,53698],{"class":258},[100,74961,53165],{"class":52854},[100,74963,55040],{"class":106},[100,74965,472],{"class":258},[100,74967,64134],{"class":110},[100,74969,74970],{"class":258},">共有数据 \u003C",[100,74972,100],{"class":52854},[100,74974,74975],{"class":258},">0\u003C\u002F",[100,74977,100],{"class":52854},[100,74979,74980],{"class":258},"> 条\u003C\u002F",[100,74982,53165],{"class":52854},[100,74984,52861],{"class":258},[100,74986,74987,74989,74991],{"class":102,"line":34550},[100,74988,53698],{"class":258},[100,74990,319],{"class":52854},[100,74992,52861],{"class":258},[100,74994,74995,74997,74999],{"class":102,"line":34564},[100,74996,52895],{"class":258},[100,74998,322],{"class":52854},[100,75000,52861],{"class":258},[100,75002,75003,75005,75007],{"class":102,"line":34570},[100,75004,56788],{"class":258},[100,75006,325],{"class":52854},[100,75008,52861],{"class":258},[100,75010,75011,75013,75015,75018,75020],{"class":102,"line":34576},[100,75012,56856],{"class":258},[100,75014,328],{"class":52854},[100,75016,75017],{"class":258},">ID\u003C\u002F",[100,75019,328],{"class":52854},[100,75021,52861],{"class":258},[100,75023,75024,75026,75028,75030,75032],{"class":102,"line":34587},[100,75025,56856],{"class":258},[100,75027,328],{"class":52854},[100,75029,71009],{"class":258},[100,75031,328],{"class":52854},[100,75033,52861],{"class":258},[100,75035,75036,75038,75040,75042,75044],{"class":102,"line":34593},[100,75037,56856],{"class":258},[100,75039,328],{"class":52854},[100,75041,71022],{"class":258},[100,75043,328],{"class":52854},[100,75045,52861],{"class":258},[100,75047,75048,75050,75052,75054,75056],{"class":102,"line":34599},[100,75049,56856],{"class":258},[100,75051,328],{"class":52854},[100,75053,71035],{"class":258},[100,75055,328],{"class":52854},[100,75057,52861],{"class":258},[100,75059,75060,75062,75064,75066,75068],{"class":102,"line":34609},[100,75061,56856],{"class":258},[100,75063,328],{"class":52854},[100,75065,71048],{"class":258},[100,75067,328],{"class":52854},[100,75069,52861],{"class":258},[100,75071,75072,75074,75076,75078,75080],{"class":102,"line":34615},[100,75073,56856],{"class":258},[100,75075,328],{"class":52854},[100,75077,71061],{"class":258},[100,75079,328],{"class":52854},[100,75081,52861],{"class":258},[100,75083,75084,75086,75088,75091,75093],{"class":102,"line":34626},[100,75085,56856],{"class":258},[100,75087,328],{"class":52854},[100,75089,75090],{"class":258},">录入时间\u003C\u002F",[100,75092,328],{"class":52854},[100,75094,52861],{"class":258},[100,75096,75097,75099,75101,75103,75105],{"class":102,"line":34632},[100,75098,56856],{"class":258},[100,75100,328],{"class":52854},[100,75102,71074],{"class":258},[100,75104,328],{"class":52854},[100,75106,52861],{"class":258},[100,75108,75109,75111,75113],{"class":102,"line":34642},[100,75110,56961],{"class":258},[100,75112,325],{"class":52854},[100,75114,52861],{"class":258},[100,75116,75117,75119,75121],{"class":102,"line":34647},[100,75118,53330],{"class":258},[100,75120,322],{"class":52854},[100,75122,52861],{"class":258},[100,75124,75125,75127,75129],{"class":102,"line":34653},[100,75126,52895],{"class":258},[100,75128,339],{"class":52854},[100,75130,52861],{"class":258},[100,75132,75133],{"class":102,"line":34702},[100,75134,75135],{"class":1836},"      \u003C!-- \u003Ctr>\n",[100,75137,75138],{"class":102,"line":34749},[100,75139,75140],{"class":1836},"        \u003Ctd>1\u003C\u002Ftd>\n",[100,75142,75143],{"class":102,"line":34754},[100,75144,75140],{"class":1836},[100,75146,75147],{"class":102,"line":34760},[100,75148,75140],{"class":1836},[100,75150,75151],{"class":102,"line":34779},[100,75152,75140],{"class":1836},[100,75154,75155],{"class":102,"line":34785},[100,75156,75140],{"class":1836},[100,75158,75159],{"class":102,"line":34805},[100,75160,75140],{"class":1836},[100,75162,75163],{"class":102,"line":34811},[100,75164,75140],{"class":1836},[100,75166,75167],{"class":102,"line":34817},[100,75168,75169],{"class":1836},"        \u003Ctd>\n",[100,75171,75172],{"class":102,"line":34827},[100,75173,75174],{"class":1836},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[100,75176,75177],{"class":102,"line":34832},[100,75178,75179],{"class":1836},"        \u003C\u002Ftd>\n",[100,75181,75182],{"class":102,"line":34838},[100,75183,75184],{"class":1836},"      \u003C\u002Ftr> -->\n",[100,75186,75187,75189,75191],{"class":102,"line":34854},[100,75188,53330],{"class":258},[100,75190,339],{"class":52854},[100,75192,52861],{"class":258},[100,75194,75195,75197,75199],{"class":102,"line":34899},[100,75196,53971],{"class":258},[100,75198,319],{"class":52854},[100,75200,52861],{"class":258},[100,75202,75203,75205,75207],{"class":102,"line":34905},[100,75204,53698],{"class":258},[100,75206,53367],{"class":52854},[100,75208,52861],{"class":258},[100,75210,75211],{"class":102,"line":34911},[100,75212,75213],{"class":1836},"    \u002F\u002F const initData = [{\n",[100,75215,75216],{"class":102,"line":34917},[100,75217,75218],{"class":1836},"    \u002F\u002F   unameId: 1,\n",[100,75220,75221],{"class":102,"line":34928},[100,75222,75223],{"class":1836},"    \u002F\u002F   uname: '华晨宇',\n",[100,75225,75226],{"class":102,"line":34934},[100,75227,75228],{"class":1836},"    \u002F\u002F   age: 22,\n",[100,75230,75231],{"class":102,"line":34940},[100,75232,75233],{"class":1836},"    \u002F\u002F   salary: 12000,\n",[100,75235,75236],{"class":102,"line":34946},[100,75237,75238],{"class":1836},"    \u002F\u002F   gender: '男',\n",[100,75240,75241],{"class":102,"line":34963},[100,75242,75243],{"class":1836},"    \u002F\u002F   city: '北京',\n",[100,75245,75246],{"class":102,"line":34977},[100,75247,75248],{"class":1836},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[100,75250,75251],{"class":102,"line":34986},[100,75252,75253],{"class":1836},"    \u002F\u002F }]\n",[100,75255,75256],{"class":102,"line":34995},[100,75257,75258],{"class":1836},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[100,75260,75261],{"class":102,"line":35004},[100,75262,75263],{"class":1836},"    \u002F\u002F 1.渲染业务\n",[100,75265,75266],{"class":102,"line":35013},[100,75267,75268],{"class":1836},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[100,75270,75271],{"class":102,"line":35019},[100,75272,75273],{"class":1836},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[100,75275,75276],{"class":102,"line":35025},[100,75277,75278],{"class":1836},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[100,75280,75281],{"class":102,"line":35033},[100,75282,570],{"emptyLinePlaceholder":569},[100,75284,75285],{"class":102,"line":35038},[100,75286,75287],{"class":1836},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[100,75289,75290],{"class":102,"line":35044},[100,75291,75292],{"class":1836},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[100,75294,75295,75297,75299,75301],{"class":102,"line":35055},[100,75296,12803],{"class":471},[100,75298,59249],{"class":117},[100,75300,583],{"class":471},[100,75302,53392],{"class":258},[100,75304,75305,75308,75310],{"class":102,"line":35061},[100,75306,75307],{"class":258},"    console.",[100,75309,59801],{"class":106},[100,75311,53966],{"class":258},[100,75313,75314],{"class":102,"line":35081},[100,75315,570],{"emptyLinePlaceholder":569},[100,75317,75318],{"class":102,"line":35087},[100,75319,75320],{"class":1836},"    \u002F\u002F 时间函数\n",[100,75322,75323,75325,75328],{"class":102,"line":35093},[100,75324,71638],{"class":471},[100,75326,75327],{"class":106}," getTime",[100,75329,12435],{"class":258},[100,75331,75332,75334,75337,75339,75341,75344],{"class":102,"line":35099},[100,75333,59782],{"class":471},[100,75335,75336],{"class":117}," date",[100,75338,583],{"class":471},[100,75340,13160],{"class":471},[100,75342,75343],{"class":106}," Date",[100,75345,3587],{"class":258},[100,75347,75348,75350,75352,75354,75357,75360,75362,75364,75366,75369,75372,75374,75376,75378,75380,75382,75384,75386],{"class":102,"line":35116},[100,75349,59782],{"class":471},[100,75351,17672],{"class":117},[100,75353,583],{"class":471},[100,75355,75356],{"class":258}," date.",[100,75358,75359],{"class":106},"getHours",[100,75361,14632],{"class":258},[100,75363,2676],{"class":471},[100,75365,3649],{"class":117},[100,75367,75368],{"class":471}," ?",[100,75370,75371],{"class":110}," '0'",[100,75373,47120],{"class":471},[100,75375,75356],{"class":258},[100,75377,75359],{"class":106},[100,75379,14632],{"class":258},[100,75381,2625],{"class":471},[100,75383,75356],{"class":258},[100,75385,75359],{"class":106},[100,75387,3587],{"class":258},[100,75389,75390,75392,75395,75397,75399,75402,75404,75406,75408,75410,75412,75414,75416,75418,75420,75422,75424,75426],{"class":102,"line":35122},[100,75391,59782],{"class":471},[100,75393,75394],{"class":117}," m",[100,75396,583],{"class":471},[100,75398,75356],{"class":258},[100,75400,75401],{"class":106},"getMinutes",[100,75403,14632],{"class":258},[100,75405,2676],{"class":471},[100,75407,3649],{"class":117},[100,75409,75368],{"class":471},[100,75411,75371],{"class":110},[100,75413,47120],{"class":471},[100,75415,75356],{"class":258},[100,75417,75401],{"class":106},[100,75419,14632],{"class":258},[100,75421,2625],{"class":471},[100,75423,75356],{"class":258},[100,75425,75401],{"class":106},[100,75427,3587],{"class":258},[100,75429,75430,75432,75434,75436,75438,75441,75443,75445,75447,75449,75451,75453,75455,75457,75459,75461,75463,75465],{"class":102,"line":35128},[100,75431,59782],{"class":471},[100,75433,10014],{"class":117},[100,75435,583],{"class":471},[100,75437,75356],{"class":258},[100,75439,75440],{"class":106},"getSeconds",[100,75442,14632],{"class":258},[100,75444,2676],{"class":471},[100,75446,3649],{"class":117},[100,75448,75368],{"class":471},[100,75450,75371],{"class":110},[100,75452,47120],{"class":471},[100,75454,75356],{"class":258},[100,75456,75440],{"class":106},[100,75458,14632],{"class":258},[100,75460,2625],{"class":471},[100,75462,75356],{"class":258},[100,75464,75440],{"class":106},[100,75466,3587],{"class":258},[100,75468,75469,75471,75474,75476,75478,75481,75483,75486,75488,75491,75493,75495,75498,75500,75502,75504,75506,75508,75510,75513,75515,75518,75520,75523,75525,75527,75529],{"class":102,"line":35134},[100,75470,59782],{"class":471},[100,75472,75473],{"class":117}," str",[100,75475,583],{"class":471},[100,75477,64457],{"class":110},[100,75479,75480],{"class":258},"date",[100,75482,2325],{"class":110},[100,75484,75485],{"class":106},"getFullYear",[100,75487,4036],{"class":110},[100,75489,75490],{"class":110},"}\u002F${",[100,75492,75480],{"class":258},[100,75494,2325],{"class":110},[100,75496,75497],{"class":106},"getMonth",[100,75499,14632],{"class":110},[100,75501,2248],{"class":471},[100,75503,26693],{"class":117},[100,75505,75490],{"class":110},[100,75507,75480],{"class":258},[100,75509,2325],{"class":110},[100,75511,75512],{"class":106},"getDate",[100,75514,4036],{"class":110},[100,75516,75517],{"class":110},"} ${",[100,75519,2182],{"class":258},[100,75521,75522],{"class":110},"}:${",[100,75524,2311],{"class":258},[100,75526,75522],{"class":110},[100,75528,2461],{"class":258},[100,75530,75531],{"class":110},"}`\n",[100,75533,75534,75537],{"class":102,"line":35140},[100,75535,75536],{"class":471},"      return",[100,75538,75539],{"class":258}," str\n",[100,75541,75542],{"class":102,"line":35146},[100,75543,3798],{"class":258},[100,75545,75546],{"class":102,"line":35173},[100,75547,75548],{"class":1836},"    \u002F\u002F 渲染函数\n",[100,75550,75551,75553,75555,75557,75559,75561,75563,75565],{"class":102,"line":35197},[100,75552,12803],{"class":471},[100,75554,71301],{"class":117},[100,75556,583],{"class":471},[100,75558,55950],{"class":258},[100,75560,55953],{"class":106},[100,75562,713],{"class":258},[100,75564,71312],{"class":110},[100,75566,809],{"class":258},[100,75568,75569,75571,75573],{"class":102,"line":35203},[100,75570,71638],{"class":471},[100,75572,71641],{"class":106},[100,75574,12435],{"class":258},[100,75576,75577],{"class":102,"line":35209},[100,75578,75579],{"class":1836},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[100,75581,75582],{"class":102,"line":35215},[100,75583,75584],{"class":1836},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[100,75586,75587,75589,75592,75594,75596,75599,75601,75603,75605,75608,75610,75613],{"class":102,"line":35226},[100,75588,59782],{"class":471},[100,75590,75591],{"class":117}," trArr",[100,75593,583],{"class":471},[100,75595,53519],{"class":258},[100,75597,75598],{"class":106},"map",[100,75600,713],{"class":258},[100,75602,56003],{"class":471},[100,75604,3283],{"class":258},[100,75606,75607],{"class":6812},"ele",[100,75609,14017],{"class":258},[100,75611,75612],{"class":6812},"index",[100,75614,14024],{"class":258},[100,75616,75617,75619],{"class":102,"line":35237},[100,75618,16333],{"class":471},[100,75620,71722],{"class":110},[100,75622,75623],{"class":102,"line":35243},[100,75624,75625],{"class":110},"      \u003Ctr>\n",[100,75627,75628,75630,75632,75634,75637],{"class":102,"line":35260},[100,75629,71727],{"class":110},[100,75631,75607],{"class":258},[100,75633,2325],{"class":110},[100,75635,75636],{"class":258},"unameId",[100,75638,71742],{"class":110},[100,75640,75641,75643,75645,75647,75649],{"class":102,"line":35283},[100,75642,71727],{"class":110},[100,75644,75607],{"class":258},[100,75646,2325],{"class":110},[100,75648,71758],{"class":258},[100,75650,71742],{"class":110},[100,75652,75653,75655,75657,75659,75661],{"class":102,"line":35306},[100,75654,71727],{"class":110},[100,75656,75607],{"class":258},[100,75658,2325],{"class":110},[100,75660,71775],{"class":258},[100,75662,71742],{"class":110},[100,75664,75665,75667,75669,75671,75673],{"class":102,"line":35312},[100,75666,71727],{"class":110},[100,75668,75607],{"class":258},[100,75670,2325],{"class":110},[100,75672,71792],{"class":258},[100,75674,71742],{"class":110},[100,75676,75677,75679,75681,75683,75685],{"class":102,"line":35317},[100,75678,71727],{"class":110},[100,75680,75607],{"class":258},[100,75682,2325],{"class":110},[100,75684,71809],{"class":258},[100,75686,71742],{"class":110},[100,75688,75689,75691,75693,75695,75697],{"class":102,"line":35326},[100,75690,71727],{"class":110},[100,75692,75607],{"class":258},[100,75694,2325],{"class":110},[100,75696,71826],{"class":258},[100,75698,71742],{"class":110},[100,75700,75701,75703,75705,75707,75709],{"class":102,"line":35336},[100,75702,71727],{"class":110},[100,75704,75607],{"class":258},[100,75706,2325],{"class":110},[100,75708,1398],{"class":258},[100,75710,71742],{"class":110},[100,75712,75713],{"class":102,"line":35342},[100,75714,75169],{"class":110},[100,75716,75717,75720,75722],{"class":102,"line":35347},[100,75718,75719],{"class":110},"          \u003Ca href=\"#\" data-id=\"${",[100,75721,75612],{"class":258},[100,75723,75724],{"class":110},"}\">删除\u003C\u002Fa>\n",[100,75726,75727],{"class":102,"line":35353},[100,75728,75179],{"class":110},[100,75730,75731],{"class":102,"line":35366},[100,75732,75733],{"class":110},"      \u003C\u002Ftr>\n",[100,75735,75736],{"class":102,"line":35372},[100,75737,75738],{"class":110},"  `\n",[100,75740,75741],{"class":102,"line":35383},[100,75742,66369],{"class":258},[100,75744,75745,75747,75749],{"class":102,"line":35394},[100,75746,59798],{"class":258},[100,75748,59801],{"class":106},[100,75750,75751],{"class":258},"(trArr)\n",[100,75753,75754],{"class":102,"line":35413},[100,75755,570],{"emptyLinePlaceholder":569},[100,75757,75758],{"class":102,"line":51072},[100,75759,75760],{"class":1836},"      \u002F\u002F (2) 把数组转换为字符串join\n",[100,75762,75763],{"class":102,"line":51077},[100,75764,75765],{"class":1836},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[100,75767,75768,75770,75772,75775,75778,75780,75783],{"class":102,"line":51086},[100,75769,71653],{"class":258},[100,75771,472],{"class":471},[100,75773,75774],{"class":258}," trArr.",[100,75776,75777],{"class":106},"join",[100,75779,713],{"class":258},[100,75781,75782],{"class":110},"''",[100,75784,809],{"class":258},[100,75786,75787],{"class":102,"line":51095},[100,75788,75789],{"class":1836},"      \u002F\u002F 显示共有几条\n",[100,75791,75792,75794,75796,75798,75801,75804,75806,75808],{"class":102,"line":51100},[100,75793,57325],{"class":258},[100,75795,55953],{"class":106},[100,75797,713],{"class":258},[100,75799,75800],{"class":110},"'.total span'",[100,75802,75803],{"class":258},").innerHTML ",[100,75805,472],{"class":471},[100,75807,53519],{"class":258},[100,75809,57385],{"class":117},[100,75811,75812],{"class":102,"line":51105},[100,75813,3798],{"class":258},[100,75815,75816],{"class":102,"line":51110},[100,75817,75818],{"class":1836},"    \u002F\u002F render()\n",[100,75820,75821],{"class":102,"line":51123},[100,75822,570],{"emptyLinePlaceholder":569},[100,75824,75825],{"class":102,"line":51128},[100,75826,75827],{"class":1836},"    \u002F\u002F 获取DOM对象\n",[100,75829,75830,75832,75834,75836,75838,75840,75842,75844],{"class":102,"line":51137},[100,75831,12803],{"class":471},[100,75833,71375],{"class":117},[100,75835,583],{"class":471},[100,75837,55950],{"class":258},[100,75839,55953],{"class":106},[100,75841,713],{"class":258},[100,75843,71386],{"class":110},[100,75845,809],{"class":258},[100,75847,75848,75850,75852,75854,75856,75858,75860,75862],{"class":102,"line":51146},[100,75849,12803],{"class":471},[100,75851,71202],{"class":117},[100,75853,583],{"class":471},[100,75855,55950],{"class":258},[100,75857,55953],{"class":106},[100,75859,713],{"class":258},[100,75861,71213],{"class":110},[100,75863,809],{"class":258},[100,75865,75866,75868,75870,75872,75874,75876,75878,75880],{"class":102,"line":51163},[100,75867,12803],{"class":471},[100,75869,17270],{"class":117},[100,75871,583],{"class":471},[100,75873,55950],{"class":258},[100,75875,55953],{"class":106},[100,75877,713],{"class":258},[100,75879,71232],{"class":110},[100,75881,809],{"class":258},[100,75883,75885,75887,75889,75891,75893,75895,75897,75899],{"class":102,"line":75884},231,[100,75886,12803],{"class":471},[100,75888,71261],{"class":117},[100,75890,583],{"class":471},[100,75892,55950],{"class":258},[100,75894,55953],{"class":106},[100,75896,713],{"class":258},[100,75898,71272],{"class":110},[100,75900,809],{"class":258},[100,75902,75904,75906,75908,75910,75912,75914,75916,75918],{"class":102,"line":75903},232,[100,75905,12803],{"class":471},[100,75907,71241],{"class":117},[100,75909,583],{"class":471},[100,75911,55950],{"class":258},[100,75913,55953],{"class":106},[100,75915,713],{"class":258},[100,75917,71252],{"class":110},[100,75919,809],{"class":258},[100,75921,75923,75925,75927,75929,75931,75933,75935,75937],{"class":102,"line":75922},233,[100,75924,12803],{"class":471},[100,75926,71281],{"class":117},[100,75928,583],{"class":471},[100,75930,55950],{"class":258},[100,75932,55953],{"class":106},[100,75934,713],{"class":258},[100,75936,71292],{"class":110},[100,75938,809],{"class":258},[100,75940,75942],{"class":102,"line":75941},234,[100,75943,570],{"emptyLinePlaceholder":569},[100,75945,75947],{"class":102,"line":75946},235,[100,75948,75949],{"class":1836},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[100,75951,75953,75955,75957,75959,75961,75963,75965,75967,75969],{"class":102,"line":75952},236,[100,75954,71393],{"class":258},[100,75956,59367],{"class":106},[100,75958,713],{"class":258},[100,75960,71400],{"class":110},[100,75962,14017],{"class":258},[100,75964,56003],{"class":471},[100,75966,3283],{"class":258},[100,75968,1852],{"class":6812},[100,75970,14024],{"class":258},[100,75972,75974],{"class":102,"line":75973},237,[100,75975,75976],{"class":1836},"      \u002F\u002F 禁止浏览器跳转\n",[100,75978,75980,75982,75984],{"class":102,"line":75979},238,[100,75981,71420],{"class":258},[100,75983,71423],{"class":106},[100,75985,3587],{"class":258},[100,75987,75989],{"class":102,"line":75988},239,[100,75990,75991],{"class":1836},"      \u002F\u002F 非空判断\n",[100,75993,75995],{"class":102,"line":75994},240,[100,75996,75997],{"class":1836},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[100,75999,76001],{"class":102,"line":76000},241,[100,76002,76003],{"class":1836},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[100,76005,76007,76009,76011,76013,76016,76018,76021,76024,76026,76028],{"class":102,"line":76006},242,[100,76008,56034],{"class":471},[100,76010,3283],{"class":258},[100,76012,1994],{"class":471},[100,76014,76015],{"class":258},"uname.value ",[100,76017,72911],{"class":471},[100,76019,76020],{"class":471}," !",[100,76022,76023],{"class":258},"age.value ",[100,76025,72911],{"class":471},[100,76027,76020],{"class":471},[100,76029,76030],{"class":258},"salary.value) {\n",[100,76032,76034,76036,76038,76040,76042],{"class":102,"line":76033},243,[100,76035,16333],{"class":471},[100,76037,71494],{"class":106},[100,76039,713],{"class":258},[100,76041,71499],{"class":110},[100,76043,809],{"class":258},[100,76045,76047],{"class":102,"line":76046},244,[100,76048,53952],{"class":258},[100,76050,76052,76054,76056],{"class":102,"line":76051},245,[100,76053,59561],{"class":258},[100,76055,53438],{"class":106},[100,76057,76058],{"class":258},"({\n",[100,76060,76062],{"class":102,"line":76061},246,[100,76063,76064],{"class":1836},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[100,76066,76068],{"class":102,"line":76067},247,[100,76069,76070],{"class":1836},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[100,76072,76074],{"class":102,"line":76073},248,[100,76075,76076],{"class":1836},"        \u002F\u002F 对象的序号应为数组长度+1\n",[100,76078,76080],{"class":102,"line":76079},249,[100,76081,76082],{"class":1836},"        \u002F\u002F unameId: arr.length + 1,\n",[100,76084,76086],{"class":102,"line":76085},250,[100,76087,570],{"emptyLinePlaceholder":569},[100,76089,76091],{"class":102,"line":76090},251,[100,76092,76093],{"class":1836},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[100,76095,76097],{"class":102,"line":76096},252,[100,76098,76099],{"class":1836},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[100,76101,76103],{"class":102,"line":76102},253,[100,76104,76105],{"class":1836},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[100,76107,76109],{"class":102,"line":76108},254,[100,76110,76111],{"class":1836},"        \u002F\u002F 0当假看\n",[100,76113,76115,76118,76120,76122,76125,76127,76129,76131,76134,76136,76138,76141,76143],{"class":102,"line":76114},255,[100,76116,76117],{"class":258},"        unameId: arr.",[100,76119,53522],{"class":117},[100,76121,75368],{"class":471},[100,76123,76124],{"class":258}," arr[arr.",[100,76126,53522],{"class":117},[100,76128,53825],{"class":471},[100,76130,26693],{"class":117},[100,76132,76133],{"class":258},"].unameId ",[100,76135,2248],{"class":471},[100,76137,26693],{"class":117},[100,76139,76140],{"class":471}," :",[100,76142,26693],{"class":117},[100,76144,33024],{"class":258},[100,76146,76148],{"class":102,"line":76147},256,[100,76149,71547],{"class":258},[100,76151,76153],{"class":102,"line":76152},257,[100,76154,71552],{"class":258},[100,76156,76158],{"class":102,"line":76157},258,[100,76159,71562],{"class":258},[100,76161,76163],{"class":102,"line":76162},259,[100,76164,71557],{"class":258},[100,76166,76168],{"class":102,"line":76167},260,[100,76169,76170],{"class":258},"        city: city.value,\n",[100,76172,76174],{"class":102,"line":76173},261,[100,76175,76176],{"class":1836},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[100,76178,76180],{"class":102,"line":76179},262,[100,76181,76182],{"class":1836},"        \u002F\u002F time: new Date().toDateString()\n",[100,76184,76186,76189,76192],{"class":102,"line":76185},263,[100,76187,76188],{"class":258},"        time: ",[100,76190,76191],{"class":106},"getTime",[100,76193,3587],{"class":258},[100,76195,76197],{"class":102,"line":76196},264,[100,76198,66369],{"class":258},[100,76200,76202],{"class":102,"line":76201},265,[100,76203,76204],{"class":1836},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[100,76206,76208,76210],{"class":102,"line":76207},266,[100,76209,71622],{"class":106},[100,76211,3587],{"class":258},[100,76213,76215,76217,76219,76221,76223],{"class":102,"line":76214},267,[100,76216,71605],{"class":117},[100,76218,2325],{"class":258},[100,76220,71610],{"class":106},[100,76222,14632],{"class":258},[100,76224,76225],{"class":1836},"\u002F\u002F重置表单\n",[100,76227,76229],{"class":102,"line":76228},268,[100,76230,76231],{"class":1836},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[100,76233,76235,76238,76240,76242,76245,76247,76249,76251,76253],{"class":102,"line":76234},269,[100,76236,76237],{"class":258},"      localStorage.",[100,76239,73208],{"class":106},[100,76241,713],{"class":258},[100,76243,76244],{"class":110},"'data'",[100,76246,14017],{"class":258},[100,76248,73218],{"class":117},[100,76250,2325],{"class":258},[100,76252,73223],{"class":106},[100,76254,76255],{"class":258},"(arr))\n",[100,76257,76259],{"class":102,"line":76258},270,[100,76260,35016],{"class":258},[100,76262,76264],{"class":102,"line":76263},271,[100,76265,570],{"emptyLinePlaceholder":569},[100,76267,76269],{"class":102,"line":76268},272,[100,76270,76271],{"class":1836},"    \u002F\u002F 3.删除业务\n",[100,76273,76275],{"class":102,"line":76274},273,[100,76276,76277],{"class":1836},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[100,76279,76281,76283,76285,76287,76289,76291,76293,76295,76297],{"class":102,"line":76280},274,[100,76282,71895],{"class":258},[100,76284,59367],{"class":106},[100,76286,713],{"class":258},[100,76288,59372],{"class":110},[100,76290,14017],{"class":258},[100,76292,56003],{"class":471},[100,76294,3283],{"class":258},[100,76296,1852],{"class":6812},[100,76298,14024],{"class":258},[100,76300,76302],{"class":102,"line":76301},275,[100,76303,76304],{"class":1836},"      \u002F\u002F 判断是否点击的是删除按钮\n",[100,76306,76308,76310,76312,76314,76316],{"class":102,"line":76307},276,[100,76309,56034],{"class":471},[100,76311,68588],{"class":258},[100,76313,56040],{"class":471},[100,76315,69810],{"class":110},[100,76317,14024],{"class":258},[100,76319,76321],{"class":102,"line":76320},277,[100,76322,76323],{"class":1836},"        \u002F\u002F alert(1)\n",[100,76325,76327],{"class":102,"line":76326},278,[100,76328,76329],{"class":1836},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[100,76331,76333],{"class":102,"line":76332},279,[100,76334,76335],{"class":1836},"        \u002F\u002F console.log(e.target)\n",[100,76337,76339],{"class":102,"line":76338},280,[100,76340,76341],{"class":1836},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[100,76343,76345],{"class":102,"line":76344},281,[100,76346,570],{"emptyLinePlaceholder":569},[100,76348,76350],{"class":102,"line":76349},282,[100,76351,76352],{"class":1836},"        \u002F\u002F 确认框，确然是否真的要删除\n",[100,76354,76356],{"class":102,"line":76355},283,[100,76357,76358],{"class":1836},"        \u002F\u002F confirm()为确认框\n",[100,76360,76362],{"class":102,"line":76361},284,[100,76363,76364],{"class":1836},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[100,76366,76368,76370,76372,76375,76377,76380],{"class":102,"line":76367},285,[100,76369,4106],{"class":471},[100,76371,3283],{"class":258},[100,76373,76374],{"class":106},"confirm",[100,76376,713],{"class":258},[100,76378,76379],{"class":110},"'您确定要删除这条数据吗？'",[100,76381,76382],{"class":258},")) {\n",[100,76384,76386,76389,76391,76393,76395],{"class":102,"line":76385},286,[100,76387,76388],{"class":258},"          arr.",[100,76390,59564],{"class":106},[100,76392,71948],{"class":258},[100,76394,1985],{"class":117},[100,76396,809],{"class":258},[100,76398,76400],{"class":102,"line":76399},287,[100,76401,76402],{"class":1836},"          \u002F\u002F 3.4 重新渲染页面\n",[100,76404,76406,76409],{"class":102,"line":76405},288,[100,76407,76408],{"class":106},"          render",[100,76410,3587],{"class":258},[100,76412,76414],{"class":102,"line":76413},289,[100,76415,76416],{"class":1836},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[100,76418,76420,76423,76425,76427,76429,76431,76433,76435,76437],{"class":102,"line":76419},290,[100,76421,76422],{"class":258},"          localStorage.",[100,76424,73208],{"class":106},[100,76426,713],{"class":258},[100,76428,76244],{"class":110},[100,76430,14017],{"class":258},[100,76432,73218],{"class":117},[100,76434,2325],{"class":258},[100,76436,73223],{"class":106},[100,76438,76255],{"class":258},[100,76440,76442],{"class":102,"line":76441},291,[100,76443,4138],{"class":258},[100,76445,76447],{"class":102,"line":76446},292,[100,76448,53952],{"class":258},[100,76450,76452],{"class":102,"line":76451},293,[100,76453,570],{"emptyLinePlaceholder":569},[100,76455,76457],{"class":102,"line":76456},294,[100,76458,35016],{"class":258},[100,76460,76462],{"class":102,"line":76461},295,[100,76463,570],{"emptyLinePlaceholder":569},[100,76465,76467,76469,76471],{"class":102,"line":76466},296,[100,76468,53971],{"class":258},[100,76470,53367],{"class":52854},[100,76472,52861],{"class":258},[100,76474,76476,76478,76480],{"class":102,"line":76475},297,[100,76477,53339],{"class":258},[100,76479,53354],{"class":52854},[100,76481,52861],{"class":258},[100,76483,76485],{"class":102,"line":76484},298,[100,76486,570],{"emptyLinePlaceholder":569},[100,76488,76490,76492,76494],{"class":102,"line":76489},299,[100,76491,53339],{"class":258},[100,76493,52189],{"class":52854},[100,76495,52861],{"class":258},[14,76497,76499],{"id":76498},"_36-正则表达式","3.6 正则表达式",[19,76501,76502],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,76504,76505],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,76507,76508],{},"正则表达式的作用：",[2773,76510,76511,76518,76524],{},[29,76512,76513,76514,76517],{},"表单验证（ ",[1921,76515,76516],{},"匹配"," ）",[29,76519,76520,76521,76517],{},"过滤敏感词（ ",[1921,76522,76523],{},"替换",[29,76525,76526,76527,76517],{},"字符串中提取我们想要的部分（ ",[1921,76528,76529],{},"提取",[305,76531,76533],{"id":76532},"_361-语法","3.6.1 语法",[19,76535,76536],{},"正则表达式使用步骤：",[26,76538,76539,76542],{},[29,76540,76541],{},"定义规则",[29,76543,76544],{},"查找是否匹配",[19,76546,76547],{},"正则表达式里边不需要写引号",[19,76549,76550],{},[3095,76551],{"alt":79,"src":76552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,76554,76555],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,76557,76558],{},"reg.test(str)",[19,76560,76561],{},[3095,76562],{"alt":79,"src":76563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,76565,76566],{},[3095,76567],{"alt":79,"src":76568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[305,76570,76572],{"id":76571},"_362-元字符","3.6.2 元字符",[26,76574,76575,76578,76581,76584,76591],{},[29,76576,76577],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[29,76579,76580],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[29,76582,76583],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[29,76585,76586,76587],{},"正则验证工具：",[2006,76588,76589],{"href":76589,"rel":76590},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[25442],[29,76592,76593],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[23579,76595,76597],{"id":76596},"_3621-边界符","3.6.2.1 边界符",[19,76599,76600],{},[3095,76601],{"alt":79,"src":76602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,76604,76605],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,76607,76608],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,76610,76611],{},"只匹配一次",[19,76613,76614],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[23579,76616,76618],{"id":76617},"_3622-量词","3.6.2.2 量词",[19,76620,76621],{},[3095,76622],{"alt":79,"src":76623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,76625,76626],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[23579,76628,76630],{"id":76629},"_3623-元字符","3.6.2.3 元字符",[19,76632,76633],{},[3095,76634],{"alt":79,"src":76635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,76637,76638],{},"匹配的是a或b或c []只选一个",[19,76640,76641],{},[3095,76642],{"alt":79,"src":76643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,76645,76646],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,76648,76649],{},[3095,76650],{"alt":79,"src":76651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,76653,76654],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,76656,76657],{},[3095,76658],{"alt":79,"src":76659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[73,76661,76663],{"className":52187,"code":76662,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F 元字符中\n    console.log(\u002F哈\u002F.test('哈'))  \u002F\u002Ftrue\n    console.log(\u002F哈\u002F.test('哈哈'))  \u002F\u002Ftrue\n    console.log(\u002F哈\u002F.test('二哈'))   \u002F\u002Ftrue\n\n    \u002F\u002F 1.边界符\n    console.log(\u002F^哈\u002F.test('哈'))  \u002F\u002Ftrue\n    console.log(\u002F^哈$\u002F.test('哈哈'))  \u002F\u002Ffalse\n    \u002F\u002F 2.量词\n    \u002F\u002F 量词 * 类似于 >= 0\n    console.log(\u002F^哈*$\u002F.test('哈哈'))  \u002F\u002Ftrue\n    console.log(\u002F^哈*$\u002F.test('二哈好傻'))  \u002F\u002Ffalse 必须以哈开头或结尾\n    console.log(\u002F^哈*$\u002F.test('哈好哈'))   \u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n\n    \u002F\u002F +类似于>=1\n    console.log(\u002F^哈+$\u002F.test('哈哈'))  \u002F\u002Ftrue\n    console.log(\u002F^哈+$\u002F.test('二哈好傻'))  \u002F\u002Ffalse 必须以哈开头或结尾\n    console.log(\u002F^哈+$\u002F.test('哈好哈'))   \u002F\u002Ffalse\n\n    \u002F\u002F ?类似于0次或一次\n    console.log(\u002F^哈？$\u002F.test(''))   \u002F\u002Ftrue\n    console.log(\u002F^哈?$\u002F.test('哈哈'))  \u002F\u002Ffalse\n    console.log(\u002F^哈?$\u002F.test('二哈好傻'))  \u002F\u002Ffalse 必须以哈开头或结尾\n    console.log(\u002F^哈?$\u002F.test('哈好哈'))  \u002F\u002Ffalse\n\n    \u002F\u002F {n}写几，就必须出现几次\n    console.log(\u002F^哈{4}$\u002F.test('哈哈哈哈')) \u002F\u002Ftrue\n\n    \u002F\u002F {n,}大于等于n次\n    console.log(\u002F^哈{4,}$\u002F.test('哈哈哈哈')) \u002F\u002Ftrue\n    console.log(\u002F^哈{4,}$\u002F.test('哈哈哈哈哈')) \u002F\u002Ftrue\n\n    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n    console.log(\u002F^哈{4,6}$\u002F.test('哈哈哈哈')) \u002F\u002Ftrue\n    console.log(\u002F^哈{4,6}$\u002F.test('哈哈哈哈哈')) \u002F\u002Ftrue\n    console.log(\u002F^哈{4,6}$\u002F.test('哈哈哈哈哈哈哈')) \u002F\u002Ffalse\n\n    \u002F\u002F 3.字符类 [abc] 只选一个字符\n    console.log(\u002F^[abc]$\u002F.test('a'))  \u002F\u002Ftrue\n    console.log(\u002F^[abc]$\u002F.test('b'))  \u002F\u002Ftrue\n    console.log(\u002F^[abc]$\u002F.test('c'))  \u002F\u002Ftrue\n    console.log(\u002F[abc]\u002F.test('ab'))  \u002F\u002Ftrue\n    console.log(\u002F^[abc]$\u002F.test('ab'))  \u002F\u002Ffalse     不加精确匹配，就是true\n    console.log(\u002F^[abc]{2}$\u002F.test('ab'))  \u002F\u002Ftrue   可以选两个\n    console.log(\u002F^[a-z]$\u002F.test('p'))   \u002F\u002Ftrue   依然只能选一个\n    console.log(\u002F^[A-Z]$\u002F.test('p'))   \u002F\u002Ffalse\n    console.log(\u002F^[A-Z]$\u002F.test('P'))   \u002F\u002Ftrue\n    console.log(\u002F^[0-9]$\u002F.test('0'))   \u002F\u002Ftrue\n    console.log(\u002F^[a-zA-Z0-9]$\u002F.test('p'))  \u002F\u002Ftrue\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,76664,76665,76675,76689,76693,76701,76715,76735,76747,76755,76759,76767,76775,76780,76811,76838,76866,76870,76875,76903,76934,76939,76944,76975,77007,77039,77043,77048,77079,77109,77139,77143,77148,77179,77210,77240,77270,77274,77279,77312,77316,77321,77352,77383,77387,77392,77423,77453,77484,77488,77493,77525,77556,77587,77614,77645,77677,77710,77741,77772,77804,77835,77843,77851,77855],{"__ignoreMap":79},[100,76666,76667,76669,76671,76673],{"class":102,"line":103},[100,76668,52851],{"class":258},[100,76670,52855],{"class":52854},[100,76672,52858],{"class":106},[100,76674,52861],{"class":258},[100,76676,76677,76679,76681,76683,76685,76687],{"class":102,"line":188},[100,76678,2676],{"class":258},[100,76680,52189],{"class":52854},[100,76682,52870],{"class":106},[100,76684,472],{"class":258},[100,76686,52875],{"class":110},[100,76688,52861],{"class":258},[100,76690,76691],{"class":102,"line":199},[100,76692,570],{"emptyLinePlaceholder":569},[100,76694,76695,76697,76699],{"class":102,"line":532},[100,76696,2676],{"class":258},[100,76698,52888],{"class":52854},[100,76700,52861],{"class":258},[100,76702,76703,76705,76707,76709,76711,76713],{"class":102,"line":577},[100,76704,53698],{"class":258},[100,76706,52898],{"class":52854},[100,76708,52901],{"class":106},[100,76710,472],{"class":258},[100,76712,52906],{"class":110},[100,76714,52861],{"class":258},[100,76716,76717,76719,76721,76723,76725,76727,76729,76731,76733],{"class":102,"line":589},[100,76718,53698],{"class":258},[100,76720,52898],{"class":52854},[100,76722,16501],{"class":106},[100,76724,472],{"class":258},[100,76726,52945],{"class":110},[100,76728,52925],{"class":106},[100,76730,472],{"class":258},[100,76732,52952],{"class":110},[100,76734,52861],{"class":258},[100,76736,76737,76739,76741,76743,76745],{"class":102,"line":595},[100,76738,53698],{"class":258},[100,76740,52961],{"class":52854},[100,76742,52964],{"class":258},[100,76744,52961],{"class":52854},[100,76746,52861],{"class":258},[100,76748,76749,76751,76753],{"class":102,"line":601},[100,76750,53339],{"class":258},[100,76752,52888],{"class":52854},[100,76754,52861],{"class":258},[100,76756,76757],{"class":102,"line":606},[100,76758,570],{"emptyLinePlaceholder":569},[100,76760,76761,76763,76765],{"class":102,"line":612},[100,76762,2676],{"class":258},[100,76764,53354],{"class":52854},[100,76766,52861],{"class":258},[100,76768,76769,76771,76773],{"class":102,"line":618},[100,76770,53698],{"class":258},[100,76772,53367],{"class":52854},[100,76774,52861],{"class":258},[100,76776,76777],{"class":102,"line":623},[100,76778,76779],{"class":1836},"    \u002F\u002F 元字符中\n",[100,76781,76782,76784,76786,76788,76790,76793,76795,76797,76800,76802,76805,76808],{"class":102,"line":629},[100,76783,75307],{"class":258},[100,76785,59801],{"class":106},[100,76787,713],{"class":258},[100,76789,2351],{"class":110},[100,76791,76792],{"class":49531},"哈",[100,76794,2351],{"class":110},[100,76796,2325],{"class":258},[100,76798,76799],{"class":106},"test",[100,76801,713],{"class":258},[100,76803,76804],{"class":110},"'哈'",[100,76806,76807],{"class":258},"))  ",[100,76809,76810],{"class":1836},"\u002F\u002Ftrue\n",[100,76812,76813,76815,76817,76819,76821,76823,76825,76827,76829,76831,76834,76836],{"class":102,"line":635},[100,76814,75307],{"class":258},[100,76816,59801],{"class":106},[100,76818,713],{"class":258},[100,76820,2351],{"class":110},[100,76822,76792],{"class":49531},[100,76824,2351],{"class":110},[100,76826,2325],{"class":258},[100,76828,76799],{"class":106},[100,76830,713],{"class":258},[100,76832,76833],{"class":110},"'哈哈'",[100,76835,76807],{"class":258},[100,76837,76810],{"class":1836},[100,76839,76840,76842,76844,76846,76848,76850,76852,76854,76856,76858,76861,76864],{"class":102,"line":641},[100,76841,75307],{"class":258},[100,76843,59801],{"class":106},[100,76845,713],{"class":258},[100,76847,2351],{"class":110},[100,76849,76792],{"class":49531},[100,76851,2351],{"class":110},[100,76853,2325],{"class":258},[100,76855,76799],{"class":106},[100,76857,713],{"class":258},[100,76859,76860],{"class":110},"'二哈'",[100,76862,76863],{"class":258},"))   ",[100,76865,76810],{"class":1836},[100,76867,76868],{"class":102,"line":647},[100,76869,570],{"emptyLinePlaceholder":569},[100,76871,76872],{"class":102,"line":653},[100,76873,76874],{"class":1836},"    \u002F\u002F 1.边界符\n",[100,76876,76877,76879,76881,76883,76885,76887,76889,76891,76893,76895,76897,76899,76901],{"class":102,"line":659},[100,76878,75307],{"class":258},[100,76880,59801],{"class":106},[100,76882,713],{"class":258},[100,76884,2351],{"class":110},[100,76886,2732],{"class":471},[100,76888,76792],{"class":49531},[100,76890,2351],{"class":110},[100,76892,2325],{"class":258},[100,76894,76799],{"class":106},[100,76896,713],{"class":258},[100,76898,76804],{"class":110},[100,76900,76807],{"class":258},[100,76902,76810],{"class":1836},[100,76904,76905,76907,76909,76911,76913,76915,76917,76919,76921,76923,76925,76927,76929,76931],{"class":102,"line":665},[100,76906,75307],{"class":258},[100,76908,59801],{"class":106},[100,76910,713],{"class":258},[100,76912,2351],{"class":110},[100,76914,2732],{"class":471},[100,76916,76792],{"class":49531},[100,76918,2069],{"class":471},[100,76920,2351],{"class":110},[100,76922,2325],{"class":258},[100,76924,76799],{"class":106},[100,76926,713],{"class":258},[100,76928,76833],{"class":110},[100,76930,76807],{"class":258},[100,76932,76933],{"class":1836},"\u002F\u002Ffalse\n",[100,76935,76936],{"class":102,"line":670},[100,76937,76938],{"class":1836},"    \u002F\u002F 2.量词\n",[100,76940,76941],{"class":102,"line":675},[100,76942,76943],{"class":1836},"    \u002F\u002F 量词 * 类似于 >= 0\n",[100,76945,76946,76948,76950,76952,76954,76956,76958,76961,76963,76965,76967,76969,76971,76973],{"class":102,"line":699},[100,76947,75307],{"class":258},[100,76949,59801],{"class":106},[100,76951,713],{"class":258},[100,76953,2351],{"class":110},[100,76955,2732],{"class":471},[100,76957,76792],{"class":49531},[100,76959,76960],{"class":471},"*$",[100,76962,2351],{"class":110},[100,76964,2325],{"class":258},[100,76966,76799],{"class":106},[100,76968,713],{"class":258},[100,76970,76833],{"class":110},[100,76972,76807],{"class":258},[100,76974,76810],{"class":1836},[100,76976,76977,76979,76981,76983,76985,76987,76989,76991,76993,76995,76997,76999,77002,77004],{"class":102,"line":708},[100,76978,75307],{"class":258},[100,76980,59801],{"class":106},[100,76982,713],{"class":258},[100,76984,2351],{"class":110},[100,76986,2732],{"class":471},[100,76988,76792],{"class":49531},[100,76990,76960],{"class":471},[100,76992,2351],{"class":110},[100,76994,2325],{"class":258},[100,76996,76799],{"class":106},[100,76998,713],{"class":258},[100,77000,77001],{"class":110},"'二哈好傻'",[100,77003,76807],{"class":258},[100,77005,77006],{"class":1836},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[100,77008,77009,77011,77013,77015,77017,77019,77021,77023,77025,77027,77029,77031,77034,77036],{"class":102,"line":722},[100,77010,75307],{"class":258},[100,77012,59801],{"class":106},[100,77014,713],{"class":258},[100,77016,2351],{"class":110},[100,77018,2732],{"class":471},[100,77020,76792],{"class":49531},[100,77022,76960],{"class":471},[100,77024,2351],{"class":110},[100,77026,2325],{"class":258},[100,77028,76799],{"class":106},[100,77030,713],{"class":258},[100,77032,77033],{"class":110},"'哈好哈'",[100,77035,76863],{"class":258},[100,77037,77038],{"class":1836},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[100,77040,77041],{"class":102,"line":735},[100,77042,570],{"emptyLinePlaceholder":569},[100,77044,77045],{"class":102,"line":754},[100,77046,77047],{"class":1836},"    \u002F\u002F +类似于>=1\n",[100,77049,77050,77052,77054,77056,77058,77060,77062,77065,77067,77069,77071,77073,77075,77077],{"class":102,"line":771},[100,77051,75307],{"class":258},[100,77053,59801],{"class":106},[100,77055,713],{"class":258},[100,77057,2351],{"class":110},[100,77059,2732],{"class":471},[100,77061,76792],{"class":49531},[100,77063,77064],{"class":471},"+$",[100,77066,2351],{"class":110},[100,77068,2325],{"class":258},[100,77070,76799],{"class":106},[100,77072,713],{"class":258},[100,77074,76833],{"class":110},[100,77076,76807],{"class":258},[100,77078,76810],{"class":1836},[100,77080,77081,77083,77085,77087,77089,77091,77093,77095,77097,77099,77101,77103,77105,77107],{"class":102,"line":776},[100,77082,75307],{"class":258},[100,77084,59801],{"class":106},[100,77086,713],{"class":258},[100,77088,2351],{"class":110},[100,77090,2732],{"class":471},[100,77092,76792],{"class":49531},[100,77094,77064],{"class":471},[100,77096,2351],{"class":110},[100,77098,2325],{"class":258},[100,77100,76799],{"class":106},[100,77102,713],{"class":258},[100,77104,77001],{"class":110},[100,77106,76807],{"class":258},[100,77108,77006],{"class":1836},[100,77110,77111,77113,77115,77117,77119,77121,77123,77125,77127,77129,77131,77133,77135,77137],{"class":102,"line":781},[100,77112,75307],{"class":258},[100,77114,59801],{"class":106},[100,77116,713],{"class":258},[100,77118,2351],{"class":110},[100,77120,2732],{"class":471},[100,77122,76792],{"class":49531},[100,77124,77064],{"class":471},[100,77126,2351],{"class":110},[100,77128,2325],{"class":258},[100,77130,76799],{"class":106},[100,77132,713],{"class":258},[100,77134,77033],{"class":110},[100,77136,76863],{"class":258},[100,77138,76933],{"class":1836},[100,77140,77141],{"class":102,"line":796},[100,77142,570],{"emptyLinePlaceholder":569},[100,77144,77145],{"class":102,"line":812},[100,77146,77147],{"class":1836},"    \u002F\u002F ?类似于0次或一次\n",[100,77149,77150,77152,77154,77156,77158,77160,77163,77165,77167,77169,77171,77173,77175,77177],{"class":102,"line":823},[100,77151,75307],{"class":258},[100,77153,59801],{"class":106},[100,77155,713],{"class":258},[100,77157,2351],{"class":110},[100,77159,2732],{"class":471},[100,77161,77162],{"class":49531},"哈？",[100,77164,2069],{"class":471},[100,77166,2351],{"class":110},[100,77168,2325],{"class":258},[100,77170,76799],{"class":106},[100,77172,713],{"class":258},[100,77174,75782],{"class":110},[100,77176,76863],{"class":258},[100,77178,76810],{"class":1836},[100,77180,77181,77183,77185,77187,77189,77191,77193,77196,77198,77200,77202,77204,77206,77208],{"class":102,"line":828},[100,77182,75307],{"class":258},[100,77184,59801],{"class":106},[100,77186,713],{"class":258},[100,77188,2351],{"class":110},[100,77190,2732],{"class":471},[100,77192,76792],{"class":49531},[100,77194,77195],{"class":471},"?$",[100,77197,2351],{"class":110},[100,77199,2325],{"class":258},[100,77201,76799],{"class":106},[100,77203,713],{"class":258},[100,77205,76833],{"class":110},[100,77207,76807],{"class":258},[100,77209,76933],{"class":1836},[100,77211,77212,77214,77216,77218,77220,77222,77224,77226,77228,77230,77232,77234,77236,77238],{"class":102,"line":840},[100,77213,75307],{"class":258},[100,77215,59801],{"class":106},[100,77217,713],{"class":258},[100,77219,2351],{"class":110},[100,77221,2732],{"class":471},[100,77223,76792],{"class":49531},[100,77225,77195],{"class":471},[100,77227,2351],{"class":110},[100,77229,2325],{"class":258},[100,77231,76799],{"class":106},[100,77233,713],{"class":258},[100,77235,77001],{"class":110},[100,77237,76807],{"class":258},[100,77239,77006],{"class":1836},[100,77241,77242,77244,77246,77248,77250,77252,77254,77256,77258,77260,77262,77264,77266,77268],{"class":102,"line":845},[100,77243,75307],{"class":258},[100,77245,59801],{"class":106},[100,77247,713],{"class":258},[100,77249,2351],{"class":110},[100,77251,2732],{"class":471},[100,77253,76792],{"class":49531},[100,77255,77195],{"class":471},[100,77257,2351],{"class":110},[100,77259,2325],{"class":258},[100,77261,76799],{"class":106},[100,77263,713],{"class":258},[100,77265,77033],{"class":110},[100,77267,76807],{"class":258},[100,77269,76933],{"class":1836},[100,77271,77272],{"class":102,"line":868},[100,77273,570],{"emptyLinePlaceholder":569},[100,77275,77276],{"class":102,"line":874},[100,77277,77278],{"class":1836},"    \u002F\u002F {n}写几，就必须出现几次\n",[100,77280,77281,77283,77285,77287,77289,77291,77293,77296,77298,77300,77302,77304,77307,77310],{"class":102,"line":879},[100,77282,75307],{"class":258},[100,77284,59801],{"class":106},[100,77286,713],{"class":258},[100,77288,2351],{"class":110},[100,77290,2732],{"class":471},[100,77292,76792],{"class":49531},[100,77294,77295],{"class":471},"{4}$",[100,77297,2351],{"class":110},[100,77299,2325],{"class":258},[100,77301,76799],{"class":106},[100,77303,713],{"class":258},[100,77305,77306],{"class":110},"'哈哈哈哈'",[100,77308,77309],{"class":258},")) ",[100,77311,76810],{"class":1836},[100,77313,77314],{"class":102,"line":889},[100,77315,570],{"emptyLinePlaceholder":569},[100,77317,77318],{"class":102,"line":894},[100,77319,77320],{"class":1836},"    \u002F\u002F {n,}大于等于n次\n",[100,77322,77323,77325,77327,77329,77331,77333,77335,77338,77340,77342,77344,77346,77348,77350],{"class":102,"line":900},[100,77324,75307],{"class":258},[100,77326,59801],{"class":106},[100,77328,713],{"class":258},[100,77330,2351],{"class":110},[100,77332,2732],{"class":471},[100,77334,76792],{"class":49531},[100,77336,77337],{"class":471},"{4,}$",[100,77339,2351],{"class":110},[100,77341,2325],{"class":258},[100,77343,76799],{"class":106},[100,77345,713],{"class":258},[100,77347,77306],{"class":110},[100,77349,77309],{"class":258},[100,77351,76810],{"class":1836},[100,77353,77354,77356,77358,77360,77362,77364,77366,77368,77370,77372,77374,77376,77379,77381],{"class":102,"line":910},[100,77355,75307],{"class":258},[100,77357,59801],{"class":106},[100,77359,713],{"class":258},[100,77361,2351],{"class":110},[100,77363,2732],{"class":471},[100,77365,76792],{"class":49531},[100,77367,77337],{"class":471},[100,77369,2351],{"class":110},[100,77371,2325],{"class":258},[100,77373,76799],{"class":106},[100,77375,713],{"class":258},[100,77377,77378],{"class":110},"'哈哈哈哈哈'",[100,77380,77309],{"class":258},[100,77382,76810],{"class":1836},[100,77384,77385],{"class":102,"line":915},[100,77386,570],{"emptyLinePlaceholder":569},[100,77388,77389],{"class":102,"line":929},[100,77390,77391],{"class":1836},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[100,77393,77394,77396,77398,77400,77402,77404,77406,77409,77411,77413,77415,77417,77419,77421],{"class":102,"line":935},[100,77395,75307],{"class":258},[100,77397,59801],{"class":106},[100,77399,713],{"class":258},[100,77401,2351],{"class":110},[100,77403,2732],{"class":471},[100,77405,76792],{"class":49531},[100,77407,77408],{"class":471},"{4,6}$",[100,77410,2351],{"class":110},[100,77412,2325],{"class":258},[100,77414,76799],{"class":106},[100,77416,713],{"class":258},[100,77418,77306],{"class":110},[100,77420,77309],{"class":258},[100,77422,76810],{"class":1836},[100,77424,77425,77427,77429,77431,77433,77435,77437,77439,77441,77443,77445,77447,77449,77451],{"class":102,"line":945},[100,77426,75307],{"class":258},[100,77428,59801],{"class":106},[100,77430,713],{"class":258},[100,77432,2351],{"class":110},[100,77434,2732],{"class":471},[100,77436,76792],{"class":49531},[100,77438,77408],{"class":471},[100,77440,2351],{"class":110},[100,77442,2325],{"class":258},[100,77444,76799],{"class":106},[100,77446,713],{"class":258},[100,77448,77378],{"class":110},[100,77450,77309],{"class":258},[100,77452,76810],{"class":1836},[100,77454,77455,77457,77459,77461,77463,77465,77467,77469,77471,77473,77475,77477,77480,77482],{"class":102,"line":950},[100,77456,75307],{"class":258},[100,77458,59801],{"class":106},[100,77460,713],{"class":258},[100,77462,2351],{"class":110},[100,77464,2732],{"class":471},[100,77466,76792],{"class":49531},[100,77468,77408],{"class":471},[100,77470,2351],{"class":110},[100,77472,2325],{"class":258},[100,77474,76799],{"class":106},[100,77476,713],{"class":258},[100,77478,77479],{"class":110},"'哈哈哈哈哈哈哈'",[100,77481,77309],{"class":258},[100,77483,76933],{"class":1836},[100,77485,77486],{"class":102,"line":955},[100,77487,570],{"emptyLinePlaceholder":569},[100,77489,77490],{"class":102,"line":972},[100,77491,77492],{"class":1836},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[100,77494,77495,77497,77499,77501,77503,77505,77508,77510,77512,77514,77516,77518,77521,77523],{"class":102,"line":11370},[100,77496,75307],{"class":258},[100,77498,59801],{"class":106},[100,77500,713],{"class":258},[100,77502,2351],{"class":110},[100,77504,2732],{"class":471},[100,77506,77507],{"class":117},"[abc]",[100,77509,2069],{"class":471},[100,77511,2351],{"class":110},[100,77513,2325],{"class":258},[100,77515,76799],{"class":106},[100,77517,713],{"class":258},[100,77519,77520],{"class":110},"'a'",[100,77522,76807],{"class":258},[100,77524,76810],{"class":1836},[100,77526,77527,77529,77531,77533,77535,77537,77539,77541,77543,77545,77547,77549,77552,77554],{"class":102,"line":11375},[100,77528,75307],{"class":258},[100,77530,59801],{"class":106},[100,77532,713],{"class":258},[100,77534,2351],{"class":110},[100,77536,2732],{"class":471},[100,77538,77507],{"class":117},[100,77540,2069],{"class":471},[100,77542,2351],{"class":110},[100,77544,2325],{"class":258},[100,77546,76799],{"class":106},[100,77548,713],{"class":258},[100,77550,77551],{"class":110},"'b'",[100,77553,76807],{"class":258},[100,77555,76810],{"class":1836},[100,77557,77558,77560,77562,77564,77566,77568,77570,77572,77574,77576,77578,77580,77583,77585],{"class":102,"line":11380},[100,77559,75307],{"class":258},[100,77561,59801],{"class":106},[100,77563,713],{"class":258},[100,77565,2351],{"class":110},[100,77567,2732],{"class":471},[100,77569,77507],{"class":117},[100,77571,2069],{"class":471},[100,77573,2351],{"class":110},[100,77575,2325],{"class":258},[100,77577,76799],{"class":106},[100,77579,713],{"class":258},[100,77581,77582],{"class":110},"'c'",[100,77584,76807],{"class":258},[100,77586,76810],{"class":1836},[100,77588,77589,77591,77593,77595,77597,77599,77601,77603,77605,77607,77610,77612],{"class":102,"line":11385},[100,77590,75307],{"class":258},[100,77592,59801],{"class":106},[100,77594,713],{"class":258},[100,77596,2351],{"class":110},[100,77598,77507],{"class":117},[100,77600,2351],{"class":110},[100,77602,2325],{"class":258},[100,77604,76799],{"class":106},[100,77606,713],{"class":258},[100,77608,77609],{"class":110},"'ab'",[100,77611,76807],{"class":258},[100,77613,76810],{"class":1836},[100,77615,77616,77618,77620,77622,77624,77626,77628,77630,77632,77634,77636,77638,77640,77642],{"class":102,"line":11394},[100,77617,75307],{"class":258},[100,77619,59801],{"class":106},[100,77621,713],{"class":258},[100,77623,2351],{"class":110},[100,77625,2732],{"class":471},[100,77627,77507],{"class":117},[100,77629,2069],{"class":471},[100,77631,2351],{"class":110},[100,77633,2325],{"class":258},[100,77635,76799],{"class":106},[100,77637,713],{"class":258},[100,77639,77609],{"class":110},[100,77641,76807],{"class":258},[100,77643,77644],{"class":1836},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[100,77646,77647,77649,77651,77653,77655,77657,77659,77662,77664,77666,77668,77670,77672,77674],{"class":102,"line":11399},[100,77648,75307],{"class":258},[100,77650,59801],{"class":106},[100,77652,713],{"class":258},[100,77654,2351],{"class":110},[100,77656,2732],{"class":471},[100,77658,77507],{"class":117},[100,77660,77661],{"class":471},"{2}$",[100,77663,2351],{"class":110},[100,77665,2325],{"class":258},[100,77667,76799],{"class":106},[100,77669,713],{"class":258},[100,77671,77609],{"class":110},[100,77673,76807],{"class":258},[100,77675,77676],{"class":1836},"\u002F\u002Ftrue   可以选两个\n",[100,77678,77679,77681,77683,77685,77687,77689,77692,77694,77696,77698,77700,77702,77705,77707],{"class":102,"line":11405},[100,77680,75307],{"class":258},[100,77682,59801],{"class":106},[100,77684,713],{"class":258},[100,77686,2351],{"class":110},[100,77688,2732],{"class":471},[100,77690,77691],{"class":117},"[a-z]",[100,77693,2069],{"class":471},[100,77695,2351],{"class":110},[100,77697,2325],{"class":258},[100,77699,76799],{"class":106},[100,77701,713],{"class":258},[100,77703,77704],{"class":110},"'p'",[100,77706,76863],{"class":258},[100,77708,77709],{"class":1836},"\u002F\u002Ftrue   依然只能选一个\n",[100,77711,77712,77714,77716,77718,77720,77722,77725,77727,77729,77731,77733,77735,77737,77739],{"class":102,"line":11426},[100,77713,75307],{"class":258},[100,77715,59801],{"class":106},[100,77717,713],{"class":258},[100,77719,2351],{"class":110},[100,77721,2732],{"class":471},[100,77723,77724],{"class":117},"[A-Z]",[100,77726,2069],{"class":471},[100,77728,2351],{"class":110},[100,77730,2325],{"class":258},[100,77732,76799],{"class":106},[100,77734,713],{"class":258},[100,77736,77704],{"class":110},[100,77738,76863],{"class":258},[100,77740,76933],{"class":1836},[100,77742,77743,77745,77747,77749,77751,77753,77755,77757,77759,77761,77763,77765,77768,77770],{"class":102,"line":11432},[100,77744,75307],{"class":258},[100,77746,59801],{"class":106},[100,77748,713],{"class":258},[100,77750,2351],{"class":110},[100,77752,2732],{"class":471},[100,77754,77724],{"class":117},[100,77756,2069],{"class":471},[100,77758,2351],{"class":110},[100,77760,2325],{"class":258},[100,77762,76799],{"class":106},[100,77764,713],{"class":258},[100,77766,77767],{"class":110},"'P'",[100,77769,76863],{"class":258},[100,77771,76810],{"class":1836},[100,77773,77774,77776,77778,77780,77782,77784,77787,77789,77791,77793,77795,77797,77800,77802],{"class":102,"line":11446},[100,77775,75307],{"class":258},[100,77777,59801],{"class":106},[100,77779,713],{"class":258},[100,77781,2351],{"class":110},[100,77783,2732],{"class":471},[100,77785,77786],{"class":117},"[0-9]",[100,77788,2069],{"class":471},[100,77790,2351],{"class":110},[100,77792,2325],{"class":258},[100,77794,76799],{"class":106},[100,77796,713],{"class":258},[100,77798,77799],{"class":110},"'0'",[100,77801,76863],{"class":258},[100,77803,76810],{"class":1836},[100,77805,77806,77808,77810,77812,77814,77816,77819,77821,77823,77825,77827,77829,77831,77833],{"class":102,"line":11452},[100,77807,75307],{"class":258},[100,77809,59801],{"class":106},[100,77811,713],{"class":258},[100,77813,2351],{"class":110},[100,77815,2732],{"class":471},[100,77817,77818],{"class":117},"[a-zA-Z0-9]",[100,77820,2069],{"class":471},[100,77822,2351],{"class":110},[100,77824,2325],{"class":258},[100,77826,76799],{"class":106},[100,77828,713],{"class":258},[100,77830,77704],{"class":110},[100,77832,76807],{"class":258},[100,77834,76810],{"class":1836},[100,77836,77837,77839,77841],{"class":102,"line":11479},[100,77838,53971],{"class":258},[100,77840,53367],{"class":52854},[100,77842,52861],{"class":258},[100,77844,77845,77847,77849],{"class":102,"line":11488},[100,77846,53339],{"class":258},[100,77848,53354],{"class":52854},[100,77850,52861],{"class":258},[100,77852,77853],{"class":102,"line":11494},[100,77854,570],{"emptyLinePlaceholder":569},[100,77856,77857,77859,77861],{"class":102,"line":11502},[100,77858,53339],{"class":258},[100,77860,52189],{"class":52854},[100,77862,52861],{"class":258},[23579,77864,77866],{"id":77865},"_3624-修饰符","3.6.2.4 修饰符",[19,77868,77869],{},[3095,77870],{"alt":79,"src":77871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,77873,77874],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,77876,77877],{},[3095,77878],{"alt":79,"src":77879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[73,77881,77883],{"className":52187,"code":77882,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\u003Cbody>\n  \u003Cscript>\n    console.log(\u002F^java$\u002F.test('java')) \u002F\u002Ftrue\n    console.log(\u002F^java$\u002F.test('Java')) \u002F\u002Ffalse\n    \u002F\u002F 不区分大小写、\n    console.log(\u002F^java$\u002Fi.test('Java')) \u002F\u002Ftrue\n    const str = 'java是一门编程语言，学完java工资很高'\n    const result = str.replace(\u002Fjava\u002Fig, '前端')\n    console.log(result)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n",[32,77884,77885,77895,77909,77917,77931,77951,77963,77971,77979,77987,78019,78050,78055,78087,78098,78131,78140,78148,78156],{"__ignoreMap":79},[100,77886,77887,77889,77891,77893],{"class":102,"line":103},[100,77888,52851],{"class":258},[100,77890,52855],{"class":52854},[100,77892,52858],{"class":106},[100,77894,52861],{"class":258},[100,77896,77897,77899,77901,77903,77905,77907],{"class":102,"line":188},[100,77898,2676],{"class":258},[100,77900,52189],{"class":52854},[100,77902,52870],{"class":106},[100,77904,472],{"class":258},[100,77906,52875],{"class":110},[100,77908,52861],{"class":258},[100,77910,77911,77913,77915],{"class":102,"line":199},[100,77912,2676],{"class":258},[100,77914,52888],{"class":52854},[100,77916,52861],{"class":258},[100,77918,77919,77921,77923,77925,77927,77929],{"class":102,"line":532},[100,77920,53698],{"class":258},[100,77922,52898],{"class":52854},[100,77924,52901],{"class":106},[100,77926,472],{"class":258},[100,77928,52906],{"class":110},[100,77930,52861],{"class":258},[100,77932,77933,77935,77937,77939,77941,77943,77945,77947,77949],{"class":102,"line":577},[100,77934,53698],{"class":258},[100,77936,52898],{"class":52854},[100,77938,16501],{"class":106},[100,77940,472],{"class":258},[100,77942,52945],{"class":110},[100,77944,52925],{"class":106},[100,77946,472],{"class":258},[100,77948,52952],{"class":110},[100,77950,52861],{"class":258},[100,77952,77953,77955,77957,77959,77961],{"class":102,"line":589},[100,77954,53698],{"class":258},[100,77956,52961],{"class":52854},[100,77958,52964],{"class":258},[100,77960,52961],{"class":52854},[100,77962,52861],{"class":258},[100,77964,77965,77967,77969],{"class":102,"line":595},[100,77966,53339],{"class":258},[100,77968,52888],{"class":52854},[100,77970,52861],{"class":258},[100,77972,77973,77975,77977],{"class":102,"line":601},[100,77974,2676],{"class":258},[100,77976,53354],{"class":52854},[100,77978,52861],{"class":258},[100,77980,77981,77983,77985],{"class":102,"line":606},[100,77982,53698],{"class":258},[100,77984,53367],{"class":52854},[100,77986,52861],{"class":258},[100,77988,77989,77991,77993,77995,77997,77999,78002,78004,78006,78008,78010,78012,78015,78017],{"class":102,"line":612},[100,77990,75307],{"class":258},[100,77992,59801],{"class":106},[100,77994,713],{"class":258},[100,77996,2351],{"class":110},[100,77998,2732],{"class":471},[100,78000,78001],{"class":49531},"java",[100,78003,2069],{"class":471},[100,78005,2351],{"class":110},[100,78007,2325],{"class":258},[100,78009,76799],{"class":106},[100,78011,713],{"class":258},[100,78013,78014],{"class":110},"'java'",[100,78016,77309],{"class":258},[100,78018,76810],{"class":1836},[100,78020,78021,78023,78025,78027,78029,78031,78033,78035,78037,78039,78041,78043,78046,78048],{"class":102,"line":618},[100,78022,75307],{"class":258},[100,78024,59801],{"class":106},[100,78026,713],{"class":258},[100,78028,2351],{"class":110},[100,78030,2732],{"class":471},[100,78032,78001],{"class":49531},[100,78034,2069],{"class":471},[100,78036,2351],{"class":110},[100,78038,2325],{"class":258},[100,78040,76799],{"class":106},[100,78042,713],{"class":258},[100,78044,78045],{"class":110},"'Java'",[100,78047,77309],{"class":258},[100,78049,76933],{"class":1836},[100,78051,78052],{"class":102,"line":623},[100,78053,78054],{"class":1836},"    \u002F\u002F 不区分大小写、\n",[100,78056,78057,78059,78061,78063,78065,78067,78069,78071,78073,78075,78077,78079,78081,78083,78085],{"class":102,"line":629},[100,78058,75307],{"class":258},[100,78060,59801],{"class":106},[100,78062,713],{"class":258},[100,78064,2351],{"class":110},[100,78066,2732],{"class":471},[100,78068,78001],{"class":49531},[100,78070,2069],{"class":471},[100,78072,2351],{"class":110},[100,78074,2208],{"class":471},[100,78076,2325],{"class":258},[100,78078,76799],{"class":106},[100,78080,713],{"class":258},[100,78082,78045],{"class":110},[100,78084,77309],{"class":258},[100,78086,76810],{"class":1836},[100,78088,78089,78091,78093,78095],{"class":102,"line":635},[100,78090,12803],{"class":471},[100,78092,75473],{"class":117},[100,78094,583],{"class":471},[100,78096,78097],{"class":110}," 'java是一门编程语言，学完java工资很高'\n",[100,78099,78100,78102,78105,78107,78110,78113,78115,78117,78119,78121,78124,78126,78129],{"class":102,"line":641},[100,78101,12803],{"class":471},[100,78103,78104],{"class":117}," result",[100,78106,583],{"class":471},[100,78108,78109],{"class":258}," str.",[100,78111,78112],{"class":106},"replace",[100,78114,713],{"class":258},[100,78116,2351],{"class":110},[100,78118,78001],{"class":49531},[100,78120,2351],{"class":110},[100,78122,78123],{"class":471},"ig",[100,78125,14017],{"class":258},[100,78127,78128],{"class":110},"'前端'",[100,78130,809],{"class":258},[100,78132,78133,78135,78137],{"class":102,"line":647},[100,78134,75307],{"class":258},[100,78136,59801],{"class":106},[100,78138,78139],{"class":258},"(result)\n",[100,78141,78142,78144,78146],{"class":102,"line":653},[100,78143,53971],{"class":258},[100,78145,53367],{"class":52854},[100,78147,52861],{"class":258},[100,78149,78150,78152,78154],{"class":102,"line":659},[100,78151,53339],{"class":258},[100,78153,53354],{"class":52854},[100,78155,52861],{"class":258},[100,78157,78158,78160,78162],{"class":102,"line":665},[100,78159,53339],{"class":258},[100,78161,52189],{"class":52854},[100,78163,52861],{"class":258},[1677,78165,78166],{},"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":79,"searchDepth":188,"depth":188,"links":78168},[78169,78179,78191,78208,78215,78223],{"id":54914,"depth":188,"text":54915,"children":78170},[78171,78172,78173,78174,78175,78176,78177,78178],{"id":54918,"depth":199,"text":54919},{"id":54951,"depth":199,"text":54952},{"id":54990,"depth":199,"text":54991},{"id":55148,"depth":199,"text":55149},{"id":55196,"depth":199,"text":55197},{"id":55333,"depth":199,"text":55334},{"id":55655,"depth":199,"text":55656},{"id":58643,"depth":199,"text":58644},{"id":58671,"depth":188,"text":58672,"children":78180},[78181,78182,78183,78184,78185,78186,78187,78188,78189,78190],{"id":58675,"depth":199,"text":58676},{"id":58698,"depth":199,"text":58699},{"id":59613,"depth":199,"text":59614},{"id":60303,"depth":199,"text":60304},{"id":60585,"depth":199,"text":60586},{"id":64746,"depth":199,"text":64747},{"id":64916,"depth":199,"text":64917},{"id":65044,"depth":199,"text":65045},{"id":65069,"depth":199,"text":65070},{"id":66458,"depth":199,"text":66459},{"id":67611,"depth":188,"text":67612,"children":78192},[78193,78194,78195,78196,78197,78198,78199,78200,78201,78202,78203,78204,78205,78206,78207],{"id":67615,"depth":199,"text":67616},{"id":68269,"depth":199,"text":68270},{"id":69964,"depth":199,"text":69965},{"id":70005,"depth":199,"text":70006},{"id":70047,"depth":199,"text":70048},{"id":70061,"depth":199,"text":70062},{"id":70110,"depth":199,"text":70111},{"id":70122,"depth":199,"text":70123},{"id":70137,"depth":199,"text":70138},{"id":70173,"depth":199,"text":70174},{"id":70254,"depth":199,"text":70255},{"id":70382,"depth":199,"text":70383},{"id":70394,"depth":199,"text":70395},{"id":70413,"depth":199,"text":70414},{"id":72524,"depth":199,"text":72525},{"id":72543,"depth":188,"text":72544,"children":78209},[78210,78211,78212,78213,78214],{"id":72564,"depth":199,"text":72565},{"id":72584,"depth":199,"text":72585},{"id":72633,"depth":199,"text":72634},{"id":72758,"depth":199,"text":72759},{"id":72939,"depth":199,"text":72940},{"id":72957,"depth":188,"text":72958,"children":78216},[78217,78218,78219,78220,78221,78222],{"id":72972,"depth":199,"text":72973},{"id":73031,"depth":199,"text":73032},{"id":73055,"depth":199,"text":73056},{"id":73375,"depth":199,"text":73376},{"id":73407,"depth":199,"text":73408},{"id":73430,"depth":199,"text":73431},{"id":76498,"depth":188,"text":76499,"children":78224},[78225,78226],{"id":76532,"depth":199,"text":76533},{"id":76571,"depth":199,"text":76572},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":54886,"description":24958},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":78233,"title":78234,"body":78235,"description":24958,"extension":1708,"meta":94370,"navigation":569,"path":94371,"seo":94372,"stem":94373,"__hash__":94374},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":78236,"toc":94306},[78237,78240,78243,78247,78251,78256,78261,78272,78276,78281,78284,78288,78291,78296,78300,78304,78307,78312,78315,78319,78322,78330,78333,78337,78342,78347,78350,78354,78359,78364,78367,78371,78376,78379,78384,78387,78392,78395,78400,78405,78408,78411,78415,78420,78425,78428,78432,78436,78439,78442,78445,78449,78453,78458,78463,78466,78470,78475,78480,78483,78486,78489,78492,78495,78498,78501,78504,78507,78512,78516,78521,78526,78529,78532,78535,78538,78541,78544,78547,78550,78554,78558,78561,78564,78567,78572,78574,78577,78580,78583,78586,78589,78592,78595,78598,78601,78604,78607,78610,78613,78618,78623,78628,78631,78635,78638,78643,78647,78649,78660,78665,78766,78769,78772,78775,78778,78781,78784,78787,78790,78792,78795,78798,78801,78804,78807,78809,78812,78815,78818,78821,78824,78827,78829,78832,78834,78836,78839,78843,78847,78850,78853,78856,78859,78862,78865,78868,78871,78874,78879,78999,79002,79005,79010,79013,79016,79019,79022,79027,79030,79033,79036,79039,79044,79047,79147,79212,79286,79290,79293,79296,79300,79303,79317,79346,79349,79352,79355,79358,79361,79364,79367,79369,79372,79375,79378,79381,79385,79390,79394,79399,79474,79477,79660,79663,79666,79669,79672,79675,79677,79680,79683,79686,79689,79692,79695,79697,79701,79704,79709,79712,79715,79718,79721,79723,79728,79731,79734,79737,79740,79742,79747,79750,79753,79755,79757,79760,79764,79767,79770,79775,79778,79781,79784,79834,79839,79843,79848,79851,79920,79923,79932,79936,79941,79944,79947,79955,79958,79975,81777,81781,81785,81790,81793,81797,81803,81809,81961,81966,81971,81974,81977,81980,81983,81986,81989,81992,81995,81998,82001,82004,82007,82012,82016,82019,82030,82034,82039,82042,82045,82048,82051,82054,82056,82059,82062,82065,82068,82070,82087,82090,82094,82097,82102,82107,82110,82113,82117,82120,82123,82132,82135,82139,82142,82147,82152,82219,82223,82226,82229,82234,82239,82325,82330,82334,82337,82340,82355,82358,82363,82367,82372,82481,82484,82495,82645,82649,82654,82763,82767,82772,82777,82782,82785,82792,82812,82848,83012,83017,83020,83025,83032,83035,83038,83041,83100,83156,83212,83216,83221,83536,83539,83543,83546,83551,83660,83665,83669,83674,83678,83749,83753,83755,83758,83761,83799,84075,84079,84094,84160,84194,84198,84201,84206,84235,84242,84251,84256,84271,84276,84285,84288,84425,84429,84491,84495,84500,84745,84749,84754,84757,84760,84763,84766,84770,84775,86356,86360,86364,86370,86373,86378,86382,86385,86390,86393,86404,86408,86413,86417,86422,86427,86430,86435,86439,86443,86446,86451,86456,86459,86462,86465,86587,86592,86694,86697,86700,86704,86709,86881,86886,86890,86893,86898,86964,86969,86972,87103,87106,87111,87114,87117,87208,87213,87216,87219,87222,87225,87230,87235,87238,87243,87248,87253,87257,87260,87263,87268,87273,87278,87283,87337,87340,87343,87348,87351,87354,87359,87364,87369,87373,87378,87392,87397,87400,87405,87409,87414,87419,87424,87429,87434,87439,87444,87449,87452,87456,87461,87464,87467,87470,87475,87480,87483,87486,87490,87493,87496,87501,87506,87511,87516,87519,87524,87529,87590,87595,87598,87603,88844,88849,88853,88857,88862,88865,88870,88875,88878,88883,88885,88890,88894,88897,88900,88911,88915,88920,88925,88980,88985,88990,88995,89206,89211,89215,89220,89223,89225,89228,89231,89678,89683,89690,89696,89699,89702,89966,89971,89975,90240,90245,90249,90254,90259,90264,90269,90600,90603,90608,90613,90616,90620,90624,90629,90634,90639,90644,90649,90654,90658,90661,90666,90671,90674,90748,90753,90758,90763,90765,90768,91138,91143,91148,91153,91156,91159,91261,91266,91271,91374,91378,91383,91387,91391,91396,91401,91404,91409,91412,91415,91808,91813,91816,91819,91822,91825,92345,92349,92354,92359,92364,92367,92372,92375,92378,92760,92765,92767,92769,92772,92775,93287,93291,93352,93355,93358,93361,93365,93368,93373,93378,94303],[10,78238,78234],{"id":78239},"_4js进阶",[19,78241,78242],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,78244,78246],{"id":78245},"_41-作用域","4.1 作用域",[305,78248,78250],{"id":78249},"_411-局部作用域","4.1.1 局部作用域",[19,78252,78253],{},[3095,78254],{"alt":79,"src":78255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,78257,78258],{},[3095,78259],{"alt":79,"src":78260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[2773,78262,78263,78266,78269],{},[29,78264,78265],{},"函数作用域在函数内部",[29,78267,78268],{},"块级作用域在{}",[29,78270,78271],{},"对象的那个{}不是作用域，不是块作用域",[305,78273,78275],{"id":78274},"_412-全局作用域","4.1.2 全局作用域",[19,78277,78278],{},[3095,78279],{"alt":79,"src":78280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,78282,78283],{},"window.a=10不要这样写",[305,78285,78287],{"id":78286},"_413-作用域链","4.1.3 作用域链",[19,78289,78290],{},"变量查找机制",[19,78292,78293],{},[3095,78294],{"alt":79,"src":78295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,78297,78299],{"id":78298},"_42-垃圾回收机制","4.2 垃圾回收机制",[305,78301,78303],{"id":78302},"_421-大体介绍","4.2.1 大体介绍",[19,78305,78306],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,78308,78309],{},[3095,78310],{"alt":79,"src":78311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,78313,78314],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[305,78316,78318],{"id":78317},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,78320,78321],{},"堆栈空间分配区别：",[26,78323,78324,78327],{},[29,78325,78326],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[29,78328,78329],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,78331,78332],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[23579,78334,78336],{"id":78335},"_4221-引用计数","4.2.2.1 引用计数",[19,78338,78339],{},[3095,78340],{"alt":79,"src":78341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,78343,78344],{},[3095,78345],{"alt":79,"src":78346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,78348,78349],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[23579,78351,78353],{"id":78352},"_4222-标记清除法","4.2.2.2 标记清除法",[19,78355,78356],{},[3095,78357],{"alt":79,"src":78358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,78360,78361],{},[3095,78362],{"alt":79,"src":78363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,78365,78366],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,78368,78370],{"id":78369},"_43-闭包","4.3 闭包",[19,78372,78373],{},[3095,78374],{"alt":79,"src":78375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,78377,78378],{},"闭包：内层函数+外层函数的变量",[19,78380,78381],{},[3095,78382],{"alt":79,"src":78383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,78385,78386],{},"closure就是闭包",[19,78388,78389],{},[3095,78390],{"alt":79,"src":78391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,78393,78394],{},"内层函数必须包含外层函数的变量才是闭包",[19,78396,78397],{},[3095,78398],{"alt":79,"src":78399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,78401,78402],{},[3095,78403],{"alt":79,"src":78404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,78406,78407],{},"闭包可能会引起内存泄漏",[19,78409,78410],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,78412,78414],{"id":78413},"_44-变量提升","4.4 变量提升",[19,78416,78417],{},[3095,78418],{"alt":79,"src":78419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,78421,78422],{},[3095,78423],{"alt":79,"src":78424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,78426,78427],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,78429,78431],{"id":78430},"_45-函数进阶","4.5 函数进阶",[305,78433,78435],{"id":78434},"_451-函数提升","4.5.1 函数提升",[19,78437,78438],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,78440,78441],{},"只提升函数声明，不提升函数调用",[53367,78443,78444],{},"\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",[305,78446,78448],{"id":78447},"_452-函数参数","4.5.2 函数参数",[23579,78450,78452],{"id":78451},"_4521-动态参数","4.5.2.1 动态参数",[19,78454,78455],{},[3095,78456],{"alt":79,"src":78457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,78459,78460],{},[3095,78461],{"alt":79,"src":78462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,78464,78465],{},"箭头函数里边没有arguments",[23579,78467,78469],{"id":78468},"_4522-剩余参数","4.5.2.2 剩余参数",[19,78471,78472],{},[3095,78473],{"alt":79,"src":78474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,78476,78477],{},[3095,78478],{"alt":79,"src":78479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,78481,78482],{},"剩余参数使用的时候不需要写...",[19,78484,78485],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,78487,78488],{},"  function getSum(a,b,...arr) {",[19,78490,78491],{},"  console.log(11)",[19,78493,78494],{},"  }",[19,78496,78497],{},"  getSum(1,2,3,4)",[19,78499,78500],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,78502,78503],{},"  getSum(1,2)",[19,78505,78506],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,78508,78509],{},[3095,78510],{"alt":79,"src":78511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[23579,78513,78515],{"id":78514},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,78517,78518],{},[3095,78519],{"alt":79,"src":78520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,78522,78523],{},[3095,78524],{"alt":79,"src":78525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,78527,78528],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,78530,78531],{},"展开运算符可以用于数组之间的合并：",[19,78533,78534],{},"const arr1 = [1, 2, 3]",[19,78536,78537],{},"const arr2 = [3, 4, 5]",[19,78539,78540],{},"const arr = [...arr1, ...arr2]",[19,78542,78543],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,78545,78546],{},"剩余参数：函数参数使用，得到真数组",[19,78548,78549],{},"展开运算符：数组中使用，数组展开",[305,78551,78553],{"id":78552},"_453-箭头函数","4.5.3 箭头函数",[23579,78555,78557],{"id":78556},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,78559,78560],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,78562,78563],{},"它不是万能的！！！",[19,78565,78566],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,78568,78569],{},[3095,78570],{"alt":79,"src":78571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,78573,1809],{},[19,78575,78576],{},"① 只有一个形参的时候，可以省略小括号：",[19,78578,78579],{},"const fn=x=>{console.log(x)}",[19,78581,78582],{},"② 只有一行代码时可以省略大括号：",[19,78584,78585],{},"const fn=x=>console.log(11)",[19,78587,78588],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,78590,78591],{},"const fn=x=>x+x",[19,78593,78594],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,78596,78597],{},"⑤ 阻止表单默认提交：",[19,78599,78600],{},"const form = document.querySelector('form')",[19,78602,78603],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,78605,78606],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,78608,78609],{},"const fn=uname=>({uname:uname})",[19,78611,78612],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,78614,78615],{},[3095,78616],{"alt":79,"src":78617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,78619,78620],{},[3095,78621],{"alt":79,"src":78622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,78624,78625],{},[3095,78626],{"alt":79,"src":78627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,78629,78630],{},"一定不要忘记用()，有()就理解为自带return",[23579,78632,78634],{"id":78633},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,78636,78637],{},"箭头函数是没有动态参数的arguments",[19,78639,78640],{},[3095,78641],{"alt":79,"src":78642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[23579,78644,78646],{"id":78645},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,78648,12914],{},[26,78650,78651,78654,78657],{},[29,78652,78653],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[29,78655,78656],{},"事件回调函数使用箭头函数时，this 为全局的 window",[29,78658,78659],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,78661,78662],{},[3095,78663],{"alt":79,"src":78664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[73,78666,78668],{"className":54621,"code":78667,"language":54623,"meta":79,"style":79},"  \u003Cscript>\n    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n    console.log(this) \u002F\u002F指向window\n    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n    function fn() {\n      console.log(this)  \u002F\u002F指向window\n    }\n    window.fn()\u002F\u002F实际写法，调用时可以省略window\n\n    const obj = {\n      name: 'andy',\n      sayHai: function () {\n        console.log(this)\n      }\n    }\n    obj.sayHai() \u002F\u002Fthis指向obj\n    \u002F\u002F 2.箭头函数的this\n    const fn = () => console.log(this)\n  \u003C\u002Fscript>\n",[32,78669,78670,78678,78683,78688,78693,78698,78703,78707,78712,78716,78720,78725,78730,78735,78739,78743,78748,78753,78758],{"__ignoreMap":79},[100,78671,78672,78674,78676],{"class":102,"line":103},[100,78673,53698],{"class":258},[100,78675,53367],{"class":52854},[100,78677,52861],{"class":258},[100,78679,78680],{"class":102,"line":188},[100,78681,78682],{"class":258},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[100,78684,78685],{"class":102,"line":199},[100,78686,78687],{"class":258},"    console.log(this) \u002F\u002F指向window\n",[100,78689,78690],{"class":102,"line":532},[100,78691,78692],{"class":258},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[100,78694,78695],{"class":102,"line":577},[100,78696,78697],{"class":258},"    function fn() {\n",[100,78699,78700],{"class":102,"line":589},[100,78701,78702],{"class":258},"      console.log(this)  \u002F\u002F指向window\n",[100,78704,78705],{"class":102,"line":595},[100,78706,3798],{"class":258},[100,78708,78709],{"class":102,"line":601},[100,78710,78711],{"class":258},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[100,78713,78714],{"class":102,"line":606},[100,78715,570],{"emptyLinePlaceholder":569},[100,78717,78718],{"class":102,"line":612},[100,78719,73077],{"class":258},[100,78721,78722],{"class":102,"line":618},[100,78723,78724],{"class":258},"      name: 'andy',\n",[100,78726,78727],{"class":102,"line":623},[100,78728,78729],{"class":258},"      sayHai: function () {\n",[100,78731,78732],{"class":102,"line":629},[100,78733,78734],{"class":258},"        console.log(this)\n",[100,78736,78737],{"class":102,"line":635},[100,78738,53952],{"class":258},[100,78740,78741],{"class":102,"line":641},[100,78742,3798],{"class":258},[100,78744,78745],{"class":102,"line":647},[100,78746,78747],{"class":258},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[100,78749,78750],{"class":102,"line":653},[100,78751,78752],{"class":258},"    \u002F\u002F 2.箭头函数的this\n",[100,78754,78755],{"class":102,"line":659},[100,78756,78757],{"class":258},"    const fn = () => console.log(this)\n",[100,78759,78760,78762,78764],{"class":102,"line":665},[100,78761,53971],{"class":258},[100,78763,53367],{"class":52854},[100,78765,52861],{"class":258},[19,78767,78768],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,78770,78771],{},"const fn = () => console.log(this)",[19,78773,78774],{},"fn() \u002F\u002F指向window",[19,78776,78777],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,78779,78780],{},"①",[19,78782,78783],{},"const obj = {",[19,78785,78786],{},"uname: 'pink老师',",[19,78788,78789],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,78791,2712],{},[19,78793,78794],{},"调用对象里边的函数",[19,78796,78797],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,78799,78800],{},"obj.sayHai()",[19,78802,78803],{},"②",[19,78805,78806],{},"const obj1 = {",[19,78808,78786],{},[19,78810,78811],{},"sayHai: function () {",[19,78813,78814],{},"let i = 10",[19,78816,78817],{},"const count = () => {",[19,78819,78820],{},"console.log(this)",[19,78822,78823],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,78825,78826],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,78828,2712],{},[19,78830,78831],{},"count()",[19,78833,2712],{},[19,78835,2712],{},[19,78837,78838],{},"obj1.sayHai()",[14,78840,78842],{"id":78841},"_46-解构赋值","4.6 解构赋值",[305,78844,78846],{"id":78845},"_461-数组解构","4.6.1 数组解构",[19,78848,78849],{},"以前要是使用数组中的值的话：",[19,78851,78852],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,78854,78855],{},"const arr=[100,60,80]",[19,78857,78858],{},"const max=arr[0]",[19,78860,78861],{},"const min=arr[1]",[19,78863,78864],{},"const avg=arr[2]",[19,78866,78867],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,78869,78870],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,78872,78873],{},"这个写法就类似于上边的那种用很多const的方法",[19,78875,78876],{},[3095,78877],{"alt":79,"src":78878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[73,78880,78882],{"className":52187,"code":78881,"language":52189,"meta":79,"style":79},"①变量之间交换值:\nlet a=1\nlet b=2;\n必须加这行代码，不然就会报错\n[b,a]=[a,b]\n\n\n可以写成下面的方式：\nlet a=1\nlet b=2\n;[b,a]=[a,b]\n\n②排序\nconst arr1 = [2, 6, 4, 3, 5, 1]\nfor (let i = 0; i \u003C arr1.length; i++) {\n   for (let j = 0; j \u003C arr1.length - 1; j++) {\n      if (arr1[j] > arr1[j + 1]) {\n         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n       }\n   }\n}\nconsole.log(arr1)\n",[32,78883,78884,78889,78894,78899,78904,78909,78913,78917,78922,78926,78931,78936,78940,78945,78950,78961,78971,78976,78981,78986,78990,78994],{"__ignoreMap":79},[100,78885,78886],{"class":102,"line":103},[100,78887,78888],{"class":258},"①变量之间交换值:\n",[100,78890,78891],{"class":102,"line":188},[100,78892,78893],{"class":258},"let a=1\n",[100,78895,78896],{"class":102,"line":199},[100,78897,78898],{"class":258},"let b=2;\n",[100,78900,78901],{"class":102,"line":532},[100,78902,78903],{"class":258},"必须加这行代码，不然就会报错\n",[100,78905,78906],{"class":102,"line":577},[100,78907,78908],{"class":258},"[b,a]=[a,b]\n",[100,78910,78911],{"class":102,"line":589},[100,78912,570],{"emptyLinePlaceholder":569},[100,78914,78915],{"class":102,"line":595},[100,78916,570],{"emptyLinePlaceholder":569},[100,78918,78919],{"class":102,"line":601},[100,78920,78921],{"class":258},"可以写成下面的方式：\n",[100,78923,78924],{"class":102,"line":606},[100,78925,78893],{"class":258},[100,78927,78928],{"class":102,"line":612},[100,78929,78930],{"class":258},"let b=2\n",[100,78932,78933],{"class":102,"line":618},[100,78934,78935],{"class":258},";[b,a]=[a,b]\n",[100,78937,78938],{"class":102,"line":623},[100,78939,570],{"emptyLinePlaceholder":569},[100,78941,78942],{"class":102,"line":629},[100,78943,78944],{"class":258},"②排序\n",[100,78946,78947],{"class":102,"line":635},[100,78948,78949],{"class":258},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[100,78951,78952,78955,78958],{"class":102,"line":641},[100,78953,78954],{"class":258},"for (let i = 0; i ",[100,78956,2676],{"class":78957},"s7hpK",[100,78959,78960],{"class":258}," arr1.length; i++) {\n",[100,78962,78963,78966,78968],{"class":102,"line":647},[100,78964,78965],{"class":258},"   for (let j = 0; j ",[100,78967,2676],{"class":78957},[100,78969,78970],{"class":258}," arr1.length - 1; j++) {\n",[100,78972,78973],{"class":102,"line":653},[100,78974,78975],{"class":258},"      if (arr1[j] > arr1[j + 1]) {\n",[100,78977,78978],{"class":102,"line":659},[100,78979,78980],{"class":258},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[100,78982,78983],{"class":102,"line":665},[100,78984,78985],{"class":258},"       }\n",[100,78987,78988],{"class":102,"line":670},[100,78989,5908],{"class":258},[100,78991,78992],{"class":102,"line":675},[100,78993,3197],{"class":258},[100,78995,78996],{"class":102,"line":699},[100,78997,78998],{"class":258},"console.log(arr1)\n",[19,79000,79001],{},"数组解构的细节：",[19,79003,79004],{},"①变量多，单元值少",[19,79006,79007],{},[3095,79008],{"alt":79,"src":79009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,79011,79012],{},"防止出现undefined的方法：",[19,79014,79015],{},"const [a=0,b=0] =[1]",[19,79017,79018],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,79020,79021],{},"②变量少，单元值多",[19,79023,79024],{},[3095,79025],{"alt":79,"src":79026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,79028,79029],{},"此时可以使用剩余参数来接收多余的值",[19,79031,79032],{},"const [a,b,...c]=[1,2,3,4]",[19,79034,79035],{},"console.log(c) 输出[3,4]",[19,79037,79038],{},"③可以按需导入，忽略某些返回值",[19,79040,79041],{},[3095,79042],{"alt":79,"src":79043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,79045,79046],{},"④支持多维数组的结构",[73,79048,79052],{"className":79049,"code":79050,"language":79051,"meta":79,"style":79},"language-cpp shiki shiki-themes github-light github-dark","const arr = [1, 2, [3, 4]]\nconsole.log(arr[0])  \u002F\u002F1\nconsole.log(arr[1])  \u002F\u002F2\nconsole.log(arr[2])  \u002F\u002F[3,4]\nconsole.log(arr[2][0])  \u002F\u002F3\n","cpp",[32,79053,79054,79082,79098,79113,79128],{"__ignoreMap":79},[100,79055,79056,79058,79060,79062,79064,79066,79068,79070,79073,79075,79077,79079],{"class":102,"line":103},[100,79057,8388],{"class":471},[100,79059,53387],{"class":258},[100,79061,472],{"class":471},[100,79063,53780],{"class":258},[100,79065,1985],{"class":117},[100,79067,14017],{"class":258},[100,79069,465],{"class":117},[100,79071,79072],{"class":258},", [",[100,79074,1849],{"class":117},[100,79076,14017],{"class":258},[100,79078,748],{"class":117},[100,79080,79081],{"class":258},"]]\n",[100,79083,79084,79087,79089,79091,79093,79095],{"class":102,"line":188},[100,79085,79086],{"class":258},"console.",[100,79088,59801],{"class":106},[100,79090,5450],{"class":258},[100,79092,1366],{"class":117},[100,79094,5815],{"class":258},[100,79096,79097],{"class":1836},"  \u002F\u002F1\n",[100,79099,79100,79102,79104,79106,79108,79110],{"class":102,"line":199},[100,79101,79086],{"class":258},[100,79103,59801],{"class":106},[100,79105,5450],{"class":258},[100,79107,1985],{"class":117},[100,79109,5815],{"class":258},[100,79111,79112],{"class":1836},"  \u002F\u002F2\n",[100,79114,79115,79117,79119,79121,79123,79125],{"class":102,"line":532},[100,79116,79086],{"class":258},[100,79118,59801],{"class":106},[100,79120,5450],{"class":258},[100,79122,465],{"class":117},[100,79124,5815],{"class":258},[100,79126,79127],{"class":1836},"  \u002F\u002F[3,4]\n",[100,79129,79130,79132,79134,79136,79138,79140,79142,79144],{"class":102,"line":577},[100,79131,79086],{"class":258},[100,79133,59801],{"class":106},[100,79135,5450],{"class":258},[100,79137,465],{"class":117},[100,79139,6499],{"class":258},[100,79141,1366],{"class":117},[100,79143,5815],{"class":258},[100,79145,79146],{"class":1836},"  \u002F\u002F3\n",[73,79148,79150],{"className":79049,"code":79149,"language":79051,"meta":79,"style":79},"const [a, b, c] = [1, 2, [3, 4]]\nconsole.log(a)  \u002F\u002F1\nconsole.log(b)  \u002F\u002F2\nconsole.log(c)  \u002F\u002F[3,4]\n",[32,79151,79152,79179,79190,79201],{"__ignoreMap":79},[100,79153,79154,79156,79159,79161,79163,79165,79167,79169,79171,79173,79175,79177],{"class":102,"line":103},[100,79155,8388],{"class":471},[100,79157,79158],{"class":258}," [a, b, c] ",[100,79160,472],{"class":471},[100,79162,53780],{"class":258},[100,79164,1985],{"class":117},[100,79166,14017],{"class":258},[100,79168,465],{"class":117},[100,79170,79072],{"class":258},[100,79172,1849],{"class":117},[100,79174,14017],{"class":258},[100,79176,748],{"class":117},[100,79178,79081],{"class":258},[100,79180,79181,79183,79185,79188],{"class":102,"line":188},[100,79182,79086],{"class":258},[100,79184,59801],{"class":106},[100,79186,79187],{"class":258},"(a)",[100,79189,79097],{"class":1836},[100,79191,79192,79194,79196,79199],{"class":102,"line":199},[100,79193,79086],{"class":258},[100,79195,59801],{"class":106},[100,79197,79198],{"class":258},"(b)",[100,79200,79112],{"class":1836},[100,79202,79203,79205,79207,79210],{"class":102,"line":532},[100,79204,79086],{"class":258},[100,79206,59801],{"class":106},[100,79208,79209],{"class":258},"(c)",[100,79211,79127],{"class":1836},[73,79213,79215],{"className":79049,"code":79214,"language":79051,"meta":79,"style":79},"const [a, b, [c, d]] = [1, 2, [3, 4]]\nconsole.log(a)  \u002F\u002F1\nconsole.log(b)  \u002F\u002F2\nconsole.log(c)  \u002F\u002F3\nconsole.log(d)  \u002F\u002F4\n",[32,79216,79217,79244,79254,79264,79274],{"__ignoreMap":79},[100,79218,79219,79221,79224,79226,79228,79230,79232,79234,79236,79238,79240,79242],{"class":102,"line":103},[100,79220,8388],{"class":471},[100,79222,79223],{"class":258}," [a, b, [c, d]] ",[100,79225,472],{"class":471},[100,79227,53780],{"class":258},[100,79229,1985],{"class":117},[100,79231,14017],{"class":258},[100,79233,465],{"class":117},[100,79235,79072],{"class":258},[100,79237,1849],{"class":117},[100,79239,14017],{"class":258},[100,79241,748],{"class":117},[100,79243,79081],{"class":258},[100,79245,79246,79248,79250,79252],{"class":102,"line":188},[100,79247,79086],{"class":258},[100,79249,59801],{"class":106},[100,79251,79187],{"class":258},[100,79253,79097],{"class":1836},[100,79255,79256,79258,79260,79262],{"class":102,"line":199},[100,79257,79086],{"class":258},[100,79259,59801],{"class":106},[100,79261,79198],{"class":258},[100,79263,79112],{"class":1836},[100,79265,79266,79268,79270,79272],{"class":102,"line":532},[100,79267,79086],{"class":258},[100,79269,59801],{"class":106},[100,79271,79209],{"class":258},[100,79273,79146],{"class":1836},[100,79275,79276,79278,79280,79283],{"class":102,"line":577},[100,79277,79086],{"class":258},[100,79279,59801],{"class":106},[100,79281,79282],{"class":258},"(d)",[100,79284,79285],{"class":1836},"  \u002F\u002F4\n",[305,79287,79289],{"id":79288},"_462-对象解构","4.6.2 对象解构",[19,79291,79292],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,79294,79295],{},"用的非常非常多！！！！！！",[23579,79297,79299],{"id":79298},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,79301,79302],{},"基本语法：",[26,79304,79305,79308,79311,79314],{},[29,79306,79307],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[29,79309,79310],{},"对象属性的值将被赋值给与属性名相同的变量",[29,79312,79313],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[29,79315,79316],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[73,79318,79320],{"className":52187,"code":79319,"language":52189,"meta":79,"style":79},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[32,79321,79322,79327,79332,79337,79341],{"__ignoreMap":79},[100,79323,79324],{"class":102,"line":103},[100,79325,79326],{"class":258},"const obj = {\n",[100,79328,79329],{"class":102,"line":188},[100,79330,79331],{"class":258},"   uname: 'pink老师',\n",[100,79333,79334],{"class":102,"line":199},[100,79335,79336],{"class":258},"   age: 18,\n",[100,79338,79339],{"class":102,"line":532},[100,79340,3197],{"class":258},[100,79342,79343],{"class":102,"line":577},[100,79344,79345],{"class":258},"const { uname, age } = obj\n",[19,79347,79348],{},"上方代码这样写等价于：",[19,79350,79351],{},"const uname等价于obj.uname",[19,79353,79354],{},"变量名可以重新改名：",[19,79356,79357],{},"const uname='red老师'",[19,79359,79360],{},"const user={",[19,79362,79363],{},"  uname:'pink老师',",[19,79365,79366],{},"  age:18",[19,79368,2712],{},[19,79370,79371],{},"const {uname,age}=user",[19,79373,79374],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,79376,79377],{},"const {旧变量名：新变量名}=对象",[19,79379,79380],{},"const {uname:username,age}=user",[23579,79382,79384],{"id":79383},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,79386,79387],{},[3095,79388],{"alt":79,"src":79389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[23579,79391,79393],{"id":79392},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,79395,79396],{},[3095,79397],{"alt":79,"src":79398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[73,79400,79402],{"className":54621,"code":79401,"language":54623,"meta":79,"style":79},"  \u003Cscript>\n    const pig = {\n      name: '佩奇',\n      family: {\n        mother: '猪妈妈',\n        father: '猪爸爸',\n        sister: '乔治'\n      },\n      age: 6\n    }\n    \u002F\u002F 多级对象解构\n    const { name, family: { mother, father, sister }, age } = pig\n  \u003C\u002Fscript>\n",[32,79403,79404,79412,79417,79422,79427,79432,79437,79442,79447,79452,79456,79461,79466],{"__ignoreMap":79},[100,79405,79406,79408,79410],{"class":102,"line":103},[100,79407,53698],{"class":258},[100,79409,53367],{"class":52854},[100,79411,52861],{"class":258},[100,79413,79414],{"class":102,"line":188},[100,79415,79416],{"class":258},"    const pig = {\n",[100,79418,79419],{"class":102,"line":199},[100,79420,79421],{"class":258},"      name: '佩奇',\n",[100,79423,79424],{"class":102,"line":532},[100,79425,79426],{"class":258},"      family: {\n",[100,79428,79429],{"class":102,"line":577},[100,79430,79431],{"class":258},"        mother: '猪妈妈',\n",[100,79433,79434],{"class":102,"line":589},[100,79435,79436],{"class":258},"        father: '猪爸爸',\n",[100,79438,79439],{"class":102,"line":595},[100,79440,79441],{"class":258},"        sister: '乔治'\n",[100,79443,79444],{"class":102,"line":601},[100,79445,79446],{"class":258},"      },\n",[100,79448,79449],{"class":102,"line":606},[100,79450,79451],{"class":258},"      age: 6\n",[100,79453,79454],{"class":102,"line":612},[100,79455,3798],{"class":258},[100,79457,79458],{"class":102,"line":618},[100,79459,79460],{"class":258},"    \u002F\u002F 多级对象解构\n",[100,79462,79463],{"class":102,"line":623},[100,79464,79465],{"class":258},"    const { name, family: { mother, father, sister }, age } = pig\n",[100,79467,79468,79470,79472],{"class":102,"line":629},[100,79469,53971],{"class":258},[100,79471,53367],{"class":52854},[100,79473,52861],{"class":258},[19,79475,79476],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[73,79478,79481],{"className":79479,"code":79480,"language":78001,"meta":79,"style":79},"language-java shiki shiki-themes github-light github-dark","    \u002F\u002F 这是后台传递过来的数据\n    const msg = {\n      \"code\": 200,\n      \"msg\": \"获取新闻列表成功\",\n      \"data\": [\n        {\n          \"id\": 1,\n          \"title\": \"5G商用自己，三大运用商收入下降\",\n          \"count\": 58\n        },\n        {\n          \"id\": 2,\n          \"title\": \"国际媒体头条速览\",\n          \"count\": 56\n        },\n        {\n          \"id\": 3,\n          \"title\": \"乌克兰和俄罗斯持续冲突\",\n          \"count\": 1669\n        },\n      ]\n    }\n",[32,79482,79483,79488,79499,79511,79523,79532,79536,79547,79559,79569,79574,79578,79588,79599,79608,79612,79616,79627,79638,79647,79651,79656],{"__ignoreMap":79},[100,79484,79485],{"class":102,"line":103},[100,79486,79487],{"class":1836},"    \u002F\u002F 这是后台传递过来的数据\n",[100,79489,79490,79492,79495,79497],{"class":102,"line":188},[100,79491,12803],{"class":471},[100,79493,79494],{"class":258}," msg ",[100,79496,472],{"class":471},[100,79498,17153],{"class":258},[100,79500,79501,79504,79506,79509],{"class":102,"line":199},[100,79502,79503],{"class":110},"      \"code\"",[100,79505,2625],{"class":471},[100,79507,79508],{"class":117}," 200",[100,79510,33024],{"class":258},[100,79512,79513,79516,79518,79521],{"class":102,"line":532},[100,79514,79515],{"class":110},"      \"msg\"",[100,79517,2625],{"class":471},[100,79519,79520],{"class":110}," \"获取新闻列表成功\"",[100,79522,33024],{"class":258},[100,79524,79525,79528,79530],{"class":102,"line":577},[100,79526,79527],{"class":110},"      \"data\"",[100,79529,2625],{"class":471},[100,79531,57001],{"class":258},[100,79533,79534],{"class":102,"line":589},[100,79535,4119],{"class":258},[100,79537,79538,79541,79543,79545],{"class":102,"line":595},[100,79539,79540],{"class":110},"          \"id\"",[100,79542,2625],{"class":471},[100,79544,26693],{"class":117},[100,79546,33024],{"class":258},[100,79548,79549,79552,79554,79557],{"class":102,"line":601},[100,79550,79551],{"class":110},"          \"title\"",[100,79553,2625],{"class":471},[100,79555,79556],{"class":110}," \"5G商用自己，三大运用商收入下降\"",[100,79558,33024],{"class":258},[100,79560,79561,79564,79566],{"class":102,"line":606},[100,79562,79563],{"class":110},"          \"count\"",[100,79565,2625],{"class":471},[100,79567,79568],{"class":117}," 58\n",[100,79570,79571],{"class":102,"line":612},[100,79572,79573],{"class":258},"        },\n",[100,79575,79576],{"class":102,"line":618},[100,79577,4119],{"class":258},[100,79579,79580,79582,79584,79586],{"class":102,"line":623},[100,79581,79540],{"class":110},[100,79583,2625],{"class":471},[100,79585,16336],{"class":117},[100,79587,33024],{"class":258},[100,79589,79590,79592,79594,79597],{"class":102,"line":629},[100,79591,79551],{"class":110},[100,79593,2625],{"class":471},[100,79595,79596],{"class":110}," \"国际媒体头条速览\"",[100,79598,33024],{"class":258},[100,79600,79601,79603,79605],{"class":102,"line":635},[100,79602,79563],{"class":110},[100,79604,2625],{"class":471},[100,79606,79607],{"class":117}," 56\n",[100,79609,79610],{"class":102,"line":641},[100,79611,79573],{"class":258},[100,79613,79614],{"class":102,"line":647},[100,79615,4119],{"class":258},[100,79617,79618,79620,79622,79625],{"class":102,"line":653},[100,79619,79540],{"class":110},[100,79621,2625],{"class":471},[100,79623,79624],{"class":117}," 3",[100,79626,33024],{"class":258},[100,79628,79629,79631,79633,79636],{"class":102,"line":659},[100,79630,79551],{"class":110},[100,79632,2625],{"class":471},[100,79634,79635],{"class":110}," \"乌克兰和俄罗斯持续冲突\"",[100,79637,33024],{"class":258},[100,79639,79640,79642,79644],{"class":102,"line":665},[100,79641,79563],{"class":110},[100,79643,2625],{"class":471},[100,79645,79646],{"class":117}," 1669\n",[100,79648,79649],{"class":102,"line":670},[100,79650,79573],{"class":258},[100,79652,79653],{"class":102,"line":675},[100,79654,79655],{"class":258},"      ]\n",[100,79657,79658],{"class":102,"line":699},[100,79659,3798],{"class":258},[19,79661,79662],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,79664,79665],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,79667,79668],{},"\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,79670,79671],{},"function({data}) {",[19,79673,79674],{},"console.log(data)",[19,79676,2712],{},[19,79678,79679],{},"render(msg)",[19,79681,79682],{},"实参传递给形参的时候解构了",[19,79684,79685],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,79687,79688],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,79690,79691],{},"function render({data:mydata}) {",[19,79693,79694],{},"  console.log(data)",[19,79696,2712],{},[305,79698,79700],{"id":79699},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,79702,79703],{},"有两种情况：一个是数组结构，一个是立即执行函数",[26,79705,79706],{},[29,79707,79708],{},"如果对一个数组进行遍历，有两种方式：",[19,79710,79711],{},"①法1",[19,79713,79714],{},"const arr=[1,2,3]",[19,79716,79717],{},"arr.map(function(item,index) {",[19,79719,79720],{},"  console.log(item)",[19,79722,54018],{},[19,79724,79725],{},[3095,79726],{"alt":79,"src":79727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,79729,79730],{},"②法2",[19,79732,79733],{},"const str='pink'",[19,79735,79736],{},"[1,2,3].map(function(item,index) {",[19,79738,79739],{},"console.log(item)",[19,79741,54018],{},[19,79743,79744],{},[3095,79745],{"alt":79,"src":79746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,79748,79749],{},"此时会报错",[19,79751,79752],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,79754,79739],{},[19,79756,54018],{},[19,79758,79759],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,79761,79763],{"id":79762},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,79765,79766],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,79768,79769],{},"可以理解为加强版的for循环",[19,79771,79772],{},[3095,79773],{"alt":79,"src":79774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,79776,79777],{},"里边不写return，不返回数组，只遍历不返回",[19,79779,79780],{},"map是返回数组",[19,79782,79783],{},"forEach主要用于遍历数组对象",[73,79785,79787],{"className":54621,"code":79786,"language":54623,"meta":79,"style":79},"  \u003Cscript>\n    const arr = ['red', 'green', 'pink']\n    const result = arr.forEach(function (item, index) {\n      console.log(item)\n      console.log(index)\n    })\n    console.log(result)\n  \u003C\u002Fscript>\n",[32,79788,79789,79797,79802,79807,79812,79817,79821,79826],{"__ignoreMap":79},[100,79790,79791,79793,79795],{"class":102,"line":103},[100,79792,53698],{"class":258},[100,79794,53367],{"class":52854},[100,79796,52861],{"class":258},[100,79798,79799],{"class":102,"line":188},[100,79800,79801],{"class":258},"    const arr = ['red', 'green', 'pink']\n",[100,79803,79804],{"class":102,"line":199},[100,79805,79806],{"class":258},"    const result = arr.forEach(function (item, index) {\n",[100,79808,79809],{"class":102,"line":532},[100,79810,79811],{"class":258},"      console.log(item)\n",[100,79813,79814],{"class":102,"line":577},[100,79815,79816],{"class":258},"      console.log(index)\n",[100,79818,79819],{"class":102,"line":589},[100,79820,35016],{"class":258},[100,79822,79823],{"class":102,"line":595},[100,79824,79825],{"class":258},"    console.log(result)\n",[100,79827,79828,79830,79832],{"class":102,"line":601},[100,79829,53971],{"class":258},[100,79831,53367],{"class":52854},[100,79833,52861],{"class":258},[19,79835,79836],{},[3095,79837],{"alt":79,"src":79838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,79840,79842],{"id":79841},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,79844,79845],{},[3095,79846],{"alt":79,"src":79847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,79849,79850],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[73,79852,79854],{"className":54621,"code":79853,"language":54623,"meta":79,"style":79},"\u003Cbody>\n  \u003Cscript>\n    const arr = [10, 20, 30]\n    const newArr = arr.filter(function (item, index) {\n      console.log(item)\n      console.log(index)\n      return item >= 20\n    })\n    console.log(newArr)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[32,79855,79856,79864,79872,79877,79882,79886,79890,79895,79899,79904,79912],{"__ignoreMap":79},[100,79857,79858,79860,79862],{"class":102,"line":103},[100,79859,2676],{"class":258},[100,79861,53354],{"class":52854},[100,79863,52861],{"class":258},[100,79865,79866,79868,79870],{"class":102,"line":188},[100,79867,53698],{"class":258},[100,79869,53367],{"class":52854},[100,79871,52861],{"class":258},[100,79873,79874],{"class":102,"line":199},[100,79875,79876],{"class":258},"    const arr = [10, 20, 30]\n",[100,79878,79879],{"class":102,"line":532},[100,79880,79881],{"class":258},"    const newArr = arr.filter(function (item, index) {\n",[100,79883,79884],{"class":102,"line":577},[100,79885,79811],{"class":258},[100,79887,79888],{"class":102,"line":589},[100,79889,79816],{"class":258},[100,79891,79892],{"class":102,"line":595},[100,79893,79894],{"class":258},"      return item >= 20\n",[100,79896,79897],{"class":102,"line":601},[100,79898,35016],{"class":258},[100,79900,79901],{"class":102,"line":606},[100,79902,79903],{"class":258},"    console.log(newArr)\n",[100,79905,79906,79908,79910],{"class":102,"line":612},[100,79907,53971],{"class":258},[100,79909,53367],{"class":52854},[100,79911,52861],{"class":258},[100,79913,79914,79916,79918],{"class":102,"line":618},[100,79915,53339],{"class":258},[100,79917,53354],{"class":52854},[100,79919,52861],{"class":258},[19,79921,79922],{},"这个也可以写成箭头函数：",[73,79924,79926],{"className":52187,"code":79925,"language":52189,"meta":79,"style":79},"const newArr = arr.filter(item => item >= 20)\n",[32,79927,79928],{"__ignoreMap":79},[100,79929,79930],{"class":102,"line":103},[100,79931,79925],{"class":258},[14,79933,79935],{"id":79934},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,79937,79938],{},[3095,79939],{"alt":79,"src":79940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,79942,79943],{},"步骤：",[19,79945,79946],{},"①：渲染页面模块",[2773,79948,79949,79952],{},[29,79950,79951],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[29,79953,79954],{},"用forEach+字符串的形式",[19,79956,79957],{},"②：点击不同需求，显示不同页面内容",[2773,79959,79960,79963,79966,79969,79972],{},[29,79961,79962],{},"点击采取事件委托方式 .filter",[29,79964,79965],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[29,79967,79968],{},"筛选条件是根据点击的 data-index 来判断",[29,79970,79971],{},"可以使用对象解构，把事件对象解构",[29,79973,79974],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[73,79976,79978],{"className":52187,"code":79977,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n      box-sizing: border-box;\n    }\n\n    .list {\n      width: 990px;\n      margin: 0 auto;\n      display: flex;\n      flex-wrap: wrap;\n    }\n\n    .item {\n      width: 240px;\n      margin-left: 10px;\n      padding: 20px 30px;\n      transition: all ease .5s;\n      margin-bottom: 20px;\n    }\n\n    .item:nth-child(4n) {\n      margin-left: 0;\n    }\n\n    .item:hover {\n      box-shadow: 0px 0px 5px rgba(0, 0, 0, .2);\n      transform: translate3d(0, -4px, 0);\n      cursor: pointer;\n    }\n\n    .item img {\n      width: 100%;\n    }\n\n    .item .name {\n      font-size: 18px;\n      margin-bottom: 10px;\n      color: #666;\n    }\n\n    .item .price {\n      font-size: 22px;\n      color: firebrick;\n    }\n\n    .item .price::before {\n      content: '￥';\n      font-size: 14px;\n    }\n\n    .filter {\n      display: flex;\n      width: 990px;\n      margin: 0 auto;\n      padding: 50px 30px\n    }\n\n    .filter a {\n      padding: 10px 20px;\n      background: #f5f5f5;\n      color: #666;\n      text-decoration: none;\n      margin-right: 20px;\n    }\n\n    .filter a:focus {\n      background-color: #05943c;\n      color: #fff;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"filter\">\n    \u003Ca href=\"#\" data-index=\"1\">0-100元\u003C\u002Fa>\n    \u003Ca href=\"#\" data-index=\"2\">100-300元\u003C\u002Fa>\n    \u003Ca href=\"#\" data-index=\"3\">300元以上\u003C\u002Fa>\n    \u003Ca href=\"#\">全部区间\u003C\u002Fa>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"list\">\n    \u003C!-- \u003Cdiv class=\"item\">\n      \u003Cimg src=\"\" alt=\"\">\n      \u003Cp class=\"name\">\u003C\u002Fp>\n      \u003Cp class=\"price\">\u003C\u002Fp>\n    \u003C\u002Fdiv> -->\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 2. 初始化数据\n    const goodsList = [\n      {\n        id: '4001172',\n        name: '称心如意手摇咖啡磨豆机咖啡豆研磨机',\n        price: '289.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg',\n      },\n      {\n        id: '4001594',\n        name: '日式黑陶功夫茶组双侧把茶具礼盒装',\n        price: '288.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg',\n      },\n      {\n        id: '4001009',\n        name: '竹制干泡茶盘正方形沥水茶台品茶盘',\n        price: '109.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png',\n      },\n      {\n        id: '4001874',\n        name: '古法温酒汝瓷酒具套装白酒杯莲花温酒器',\n        price: '488.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png',\n      },\n      {\n        id: '4001649',\n        name: '大师监制龙泉青瓷茶叶罐',\n        price: '139.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png',\n      },\n      {\n        id: '3997185',\n        name: '与众不同的口感汝瓷白酒杯套组1壶4杯',\n        price: '108.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg',\n      },\n      {\n        id: '3997403',\n        name: '手工吹制更厚实白酒杯壶套装6壶6杯',\n        price: '100.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg',\n      },\n      {\n        id: '3998274',\n        name: '德国百年工艺高端水晶玻璃红酒杯2支装',\n        price: '139.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg',\n      },\n    ]\n\n    \u002F\u002F 1.渲染函数\n    function render(arr) {\n      \u002F\u002F 声明空字符串\n      let str = ''\n      \u002F\u002F 遍历数组\n      arr.forEach(item => {\n        const { name, price, picture } = item\n        str += `\n          \u003Cdiv class=\"item\">\n            \u003Cimg src=\"${picture}\" alt=\"\">\n            \u003Cp class=\"name\">${name}\u003C\u002Fp>\n            \u003Cp class=\"price\">${price}\u003C\u002Fp>\n          \u003C\u002Fdiv>\n        `\n      })\n      \u002F\u002F 追加给List\n      document.querySelector('.list').innerHTML = str\n    }\n    \u002F\u002F 页面一打开就需要渲染\n    render(goodsList)\n    \u002F\u002F 2.过滤筛选\n    document.querySelector('.filter').addEventListener('click', e => {\n      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n      const { tagName, dataset } = e.target\n      \u002F\u002F 判断\n      if (e.target.tagName === 'A') {\n        \u002F\u002F console.log(11)\n        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n        let arr = goodsList\n        if (dataset.index === '1') {\n          arr = goodsList.filter(item => item.price >= 0 && item.price \u003C= 100)\n        } else if (dataset.index === '2') {\n          arr = goodsList.filter(item => item.price >= 100 && item.price \u003C= 300)\n        } else if (dataset.index === '3') {\n          arr = goodsList.filter(item => item.price >= 300)\n        }\n        \u002F\u002F 渲染函数\n        render(arr)\n      }\n\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,79979,79980,79990,80004,80008,80016,80030,80050,80062,80070,80076,80086,80096,80106,80110,80114,80120,80133,80145,80155,80167,80171,80175,80182,80195,80207,80224,80242,80255,80259,80263,80275,80285,80289,80293,80300,80341,80368,80378,80382,80386,80394,80406,80410,80414,80422,80434,80446,80457,80461,80465,80474,80486,80497,80501,80505,80514,80526,80538,80542,80546,80553,80563,80575,80587,80602,80606,80610,80618,80634,80644,80654,80664,80676,80680,80684,80694,80705,80715,80719,80727,80735,80739,80747,80762,80788,80813,80838,80857,80865,80879,80884,80889,80894,80899,80904,80912,80920,80925,80936,80941,80951,80961,80971,80981,80985,80989,80998,81007,81016,81025,81029,81033,81042,81051,81060,81069,81073,81077,81086,81095,81104,81113,81117,81121,81130,81139,81148,81157,81161,81165,81174,81183,81192,81201,81205,81209,81218,81227,81236,81245,81249,81253,81262,81271,81279,81288,81292,81296,81300,81305,81317,81322,81334,81338,81355,81383,81392,81397,81407,81417,81426,81431,81436,81440,81445,81462,81466,81471,81479,81484,81511,81516,81536,81541,81553,81558,81563,81568,81579,81593,81630,81648,81681,81698,81722,81726,81731,81737,81741,81745,81749,81757,81765,81769],{"__ignoreMap":79},[100,79981,79982,79984,79986,79988],{"class":102,"line":103},[100,79983,52851],{"class":258},[100,79985,52855],{"class":52854},[100,79987,52858],{"class":106},[100,79989,52861],{"class":258},[100,79991,79992,79994,79996,79998,80000,80002],{"class":102,"line":188},[100,79993,2676],{"class":258},[100,79995,52189],{"class":52854},[100,79997,52870],{"class":106},[100,79999,472],{"class":258},[100,80001,52875],{"class":110},[100,80003,52861],{"class":258},[100,80005,80006],{"class":102,"line":199},[100,80007,570],{"emptyLinePlaceholder":569},[100,80009,80010,80012,80014],{"class":102,"line":532},[100,80011,2676],{"class":258},[100,80013,52888],{"class":52854},[100,80015,52861],{"class":258},[100,80017,80018,80020,80022,80024,80026,80028],{"class":102,"line":577},[100,80019,53698],{"class":258},[100,80021,52898],{"class":52854},[100,80023,52901],{"class":106},[100,80025,472],{"class":258},[100,80027,52906],{"class":110},[100,80029,52861],{"class":258},[100,80031,80032,80034,80036,80038,80040,80042,80044,80046,80048],{"class":102,"line":589},[100,80033,53698],{"class":258},[100,80035,52898],{"class":52854},[100,80037,16501],{"class":106},[100,80039,472],{"class":258},[100,80041,52945],{"class":110},[100,80043,52925],{"class":106},[100,80045,472],{"class":258},[100,80047,52952],{"class":110},[100,80049,52861],{"class":258},[100,80051,80052,80054,80056,80058,80060],{"class":102,"line":595},[100,80053,53698],{"class":258},[100,80055,52961],{"class":52854},[100,80057,52964],{"class":258},[100,80059,52961],{"class":52854},[100,80061,52861],{"class":258},[100,80063,80064,80066,80068],{"class":102,"line":601},[100,80065,53698],{"class":258},[100,80067,1677],{"class":52854},[100,80069,52861],{"class":258},[100,80071,80072,80074],{"class":102,"line":606},[100,80073,7999],{"class":52854},[100,80075,17153],{"class":258},[100,80077,80078,80080,80082,80084],{"class":102,"line":612},[100,80079,56249],{"class":117},[100,80081,52991],{"class":258},[100,80083,1366],{"class":117},[100,80085,2927],{"class":258},[100,80087,80088,80090,80092,80094],{"class":102,"line":618},[100,80089,56260],{"class":117},[100,80091,52991],{"class":258},[100,80093,1366],{"class":117},[100,80095,2927],{"class":258},[100,80097,80098,80100,80102,80104],{"class":102,"line":623},[100,80099,74150],{"class":117},[100,80101,52991],{"class":258},[100,80103,62059],{"class":117},[100,80105,2927],{"class":258},[100,80107,80108],{"class":102,"line":629},[100,80109,3798],{"class":258},[100,80111,80112],{"class":102,"line":635},[100,80113,570],{"emptyLinePlaceholder":569},[100,80115,80116,80118],{"class":102,"line":641},[100,80117,63677],{"class":106},[100,80119,17153],{"class":258},[100,80121,80122,80124,80126,80129,80131],{"class":102,"line":647},[100,80123,56325],{"class":117},[100,80125,52991],{"class":258},[100,80127,80128],{"class":117},"990",[100,80130,53046],{"class":471},[100,80132,2927],{"class":258},[100,80134,80135,80137,80139,80141,80143],{"class":102,"line":653},[100,80136,56260],{"class":117},[100,80138,52991],{"class":258},[100,80140,1366],{"class":117},[100,80142,53110],{"class":117},[100,80144,2927],{"class":258},[100,80146,80147,80149,80151,80153],{"class":102,"line":659},[100,80148,56563],{"class":117},[100,80150,52991],{"class":258},[100,80152,53031],{"class":117},[100,80154,2927],{"class":258},[100,80156,80157,80160,80162,80165],{"class":102,"line":665},[100,80158,80159],{"class":117},"      flex-wrap",[100,80161,52991],{"class":258},[100,80163,80164],{"class":117},"wrap",[100,80166,2927],{"class":258},[100,80168,80169],{"class":102,"line":670},[100,80170,3798],{"class":258},[100,80172,80173],{"class":102,"line":675},[100,80174,570],{"emptyLinePlaceholder":569},[100,80176,80177,80180],{"class":102,"line":699},[100,80178,80179],{"class":106},"    .item",[100,80181,17153],{"class":258},[100,80183,80184,80186,80188,80191,80193],{"class":102,"line":708},[100,80185,56325],{"class":117},[100,80187,52991],{"class":258},[100,80189,80190],{"class":117},"240",[100,80192,53046],{"class":471},[100,80194,2927],{"class":258},[100,80196,80197,80199,80201,80203,80205],{"class":102,"line":722},[100,80198,63554],{"class":117},[100,80200,52991],{"class":258},[100,80202,2213],{"class":117},[100,80204,53046],{"class":471},[100,80206,2927],{"class":258},[100,80208,80209,80211,80213,80215,80217,80220,80222],{"class":102,"line":735},[100,80210,56249],{"class":117},[100,80212,52991],{"class":258},[100,80214,2466],{"class":117},[100,80216,53046],{"class":471},[100,80218,80219],{"class":117}," 30",[100,80221,53046],{"class":471},[100,80223,2927],{"class":258},[100,80225,80226,80228,80230,80232,80235,80238,80240],{"class":102,"line":754},[100,80227,63414],{"class":117},[100,80229,52991],{"class":258},[100,80231,29693],{"class":117},[100,80233,80234],{"class":117}," ease",[100,80236,80237],{"class":117}," .5",[100,80239,2461],{"class":471},[100,80241,2927],{"class":258},[100,80243,80244,80247,80249,80251,80253],{"class":102,"line":771},[100,80245,80246],{"class":117},"      margin-bottom",[100,80248,52991],{"class":258},[100,80250,2466],{"class":117},[100,80252,53046],{"class":471},[100,80254,2927],{"class":258},[100,80256,80257],{"class":102,"line":776},[100,80258,3798],{"class":258},[100,80260,80261],{"class":102,"line":781},[100,80262,570],{"emptyLinePlaceholder":569},[100,80264,80265,80268,80270,80273],{"class":102,"line":796},[100,80266,80267],{"class":106},"    .item:nth-child",[100,80269,713],{"class":258},[100,80271,80272],{"class":117},"4n",[100,80274,14024],{"class":258},[100,80276,80277,80279,80281,80283],{"class":102,"line":812},[100,80278,63554],{"class":117},[100,80280,52991],{"class":258},[100,80282,1366],{"class":117},[100,80284,2927],{"class":258},[100,80286,80287],{"class":102,"line":823},[100,80288,3798],{"class":258},[100,80290,80291],{"class":102,"line":828},[100,80292,570],{"emptyLinePlaceholder":569},[100,80294,80295,80298],{"class":102,"line":840},[100,80296,80297],{"class":106},"    .item:hover",[100,80299,17153],{"class":258},[100,80301,80302,80305,80307,80309,80311,80313,80315,80317,80319,80322,80324,80326,80328,80330,80332,80334,80336,80339],{"class":102,"line":845},[100,80303,80304],{"class":117},"      box-shadow",[100,80306,52991],{"class":258},[100,80308,1366],{"class":117},[100,80310,53046],{"class":471},[100,80312,5692],{"class":117},[100,80314,53046],{"class":471},[100,80316,3759],{"class":117},[100,80318,53046],{"class":471},[100,80320,80321],{"class":117}," rgba",[100,80323,713],{"class":258},[100,80325,1366],{"class":117},[100,80327,14017],{"class":258},[100,80329,1366],{"class":117},[100,80331,14017],{"class":258},[100,80333,1366],{"class":117},[100,80335,14017],{"class":258},[100,80337,80338],{"class":117},".2",[100,80340,4321],{"class":258},[100,80342,80343,80346,80348,80351,80353,80355,80357,80360,80362,80364,80366],{"class":102,"line":868},[100,80344,80345],{"class":117},"      transform",[100,80347,52991],{"class":258},[100,80349,80350],{"class":117},"translate3d",[100,80352,713],{"class":258},[100,80354,1366],{"class":117},[100,80356,14017],{"class":258},[100,80358,80359],{"class":117},"-4",[100,80361,53046],{"class":471},[100,80363,14017],{"class":258},[100,80365,1366],{"class":117},[100,80367,4321],{"class":258},[100,80369,80370,80372,80374,80376],{"class":102,"line":874},[100,80371,63579],{"class":117},[100,80373,52991],{"class":258},[100,80375,63584],{"class":117},[100,80377,2927],{"class":258},[100,80379,80380],{"class":102,"line":879},[100,80381,3798],{"class":258},[100,80383,80384],{"class":102,"line":889},[100,80385,570],{"emptyLinePlaceholder":569},[100,80387,80388,80390,80392],{"class":102,"line":894},[100,80389,80179],{"class":106},[100,80391,57169],{"class":52854},[100,80393,17153],{"class":258},[100,80395,80396,80398,80400,80402,80404],{"class":102,"line":900},[100,80397,56325],{"class":117},[100,80399,52991],{"class":258},[100,80401,2078],{"class":117},[100,80403,2095],{"class":471},[100,80405,2927],{"class":258},[100,80407,80408],{"class":102,"line":910},[100,80409,3798],{"class":258},[100,80411,80412],{"class":102,"line":915},[100,80413,570],{"emptyLinePlaceholder":569},[100,80415,80416,80418,80420],{"class":102,"line":929},[100,80417,80179],{"class":106},[100,80419,63858],{"class":106},[100,80421,17153],{"class":258},[100,80423,80424,80426,80428,80430,80432],{"class":102,"line":935},[100,80425,56476],{"class":117},[100,80427,52991],{"class":258},[100,80429,2417],{"class":117},[100,80431,53046],{"class":471},[100,80433,2927],{"class":258},[100,80435,80436,80438,80440,80442,80444],{"class":102,"line":945},[100,80437,80246],{"class":117},[100,80439,52991],{"class":258},[100,80441,2213],{"class":117},[100,80443,53046],{"class":471},[100,80445,2927],{"class":258},[100,80447,80448,80450,80452,80455],{"class":102,"line":950},[100,80449,58970],{"class":117},[100,80451,52991],{"class":258},[100,80453,80454],{"class":117},"#666",[100,80456,2927],{"class":258},[100,80458,80459],{"class":102,"line":955},[100,80460,3798],{"class":258},[100,80462,80463],{"class":102,"line":972},[100,80464,570],{"emptyLinePlaceholder":569},[100,80466,80467,80469,80472],{"class":102,"line":11370},[100,80468,80179],{"class":106},[100,80470,80471],{"class":106}," .price",[100,80473,17153],{"class":258},[100,80475,80476,80478,80480,80482,80484],{"class":102,"line":11375},[100,80477,56476],{"class":117},[100,80479,52991],{"class":258},[100,80481,2516],{"class":117},[100,80483,53046],{"class":471},[100,80485,2927],{"class":258},[100,80487,80488,80490,80492,80495],{"class":102,"line":11380},[100,80489,58970],{"class":117},[100,80491,52991],{"class":258},[100,80493,80494],{"class":117},"firebrick",[100,80496,2927],{"class":258},[100,80498,80499],{"class":102,"line":11385},[100,80500,3798],{"class":258},[100,80502,80503],{"class":102,"line":11394},[100,80504,570],{"emptyLinePlaceholder":569},[100,80506,80507,80509,80512],{"class":102,"line":11399},[100,80508,80179],{"class":106},[100,80510,80511],{"class":106}," .price::before",[100,80513,17153],{"class":258},[100,80515,80516,80519,80521,80524],{"class":102,"line":11405},[100,80517,80518],{"class":117},"      content",[100,80520,52991],{"class":258},[100,80522,80523],{"class":110},"'￥'",[100,80525,2927],{"class":258},[100,80527,80528,80530,80532,80534,80536],{"class":102,"line":11426},[100,80529,56476],{"class":117},[100,80531,52991],{"class":258},[100,80533,2316],{"class":117},[100,80535,53046],{"class":471},[100,80537,2927],{"class":258},[100,80539,80540],{"class":102,"line":11432},[100,80541,3798],{"class":258},[100,80543,80544],{"class":102,"line":11446},[100,80545,570],{"emptyLinePlaceholder":569},[100,80547,80548,80551],{"class":102,"line":11452},[100,80549,80550],{"class":106},"    .filter",[100,80552,17153],{"class":258},[100,80554,80555,80557,80559,80561],{"class":102,"line":11479},[100,80556,56563],{"class":117},[100,80558,52991],{"class":258},[100,80560,53031],{"class":117},[100,80562,2927],{"class":258},[100,80564,80565,80567,80569,80571,80573],{"class":102,"line":11488},[100,80566,56325],{"class":117},[100,80568,52991],{"class":258},[100,80570,80128],{"class":117},[100,80572,53046],{"class":471},[100,80574,2927],{"class":258},[100,80576,80577,80579,80581,80583,80585],{"class":102,"line":11494},[100,80578,56260],{"class":117},[100,80580,52991],{"class":258},[100,80582,1366],{"class":117},[100,80584,53110],{"class":117},[100,80586,2927],{"class":258},[100,80588,80589,80591,80593,80595,80597,80599],{"class":102,"line":11502},[100,80590,56249],{"class":117},[100,80592,52991],{"class":258},[100,80594,862],{"class":117},[100,80596,53046],{"class":471},[100,80598,80219],{"class":117},[100,80600,80601],{"class":471},"px\n",[100,80603,80604],{"class":102,"line":11507},[100,80605,3798],{"class":258},[100,80607,80608],{"class":102,"line":18185},[100,80609,570],{"emptyLinePlaceholder":569},[100,80611,80612,80614,80616],{"class":102,"line":18191},[100,80613,80550],{"class":106},[100,80615,3031],{"class":52854},[100,80617,17153],{"class":258},[100,80619,80620,80622,80624,80626,80628,80630,80632],{"class":102,"line":18214},[100,80621,56249],{"class":117},[100,80623,52991],{"class":258},[100,80625,2213],{"class":117},[100,80627,53046],{"class":471},[100,80629,10536],{"class":117},[100,80631,53046],{"class":471},[100,80633,2927],{"class":258},[100,80635,80636,80638,80640,80642],{"class":102,"line":18220},[100,80637,63275],{"class":117},[100,80639,52991],{"class":258},[100,80641,63372],{"class":117},[100,80643,2927],{"class":258},[100,80645,80646,80648,80650,80652],{"class":102,"line":18243},[100,80647,58970],{"class":117},[100,80649,52991],{"class":258},[100,80651,80454],{"class":117},[100,80653,2927],{"class":258},[100,80655,80656,80658,80660,80662],{"class":102,"line":18257},[100,80657,65524],{"class":117},[100,80659,52991],{"class":258},[100,80661,56291],{"class":117},[100,80663,2927],{"class":258},[100,80665,80666,80668,80670,80672,80674],{"class":102,"line":18277},[100,80667,63304],{"class":117},[100,80669,52991],{"class":258},[100,80671,2466],{"class":117},[100,80673,53046],{"class":471},[100,80675,2927],{"class":258},[100,80677,80678],{"class":102,"line":18283},[100,80679,3798],{"class":258},[100,80681,80682],{"class":102,"line":18294},[100,80683,570],{"emptyLinePlaceholder":569},[100,80685,80686,80688,80690,80692],{"class":102,"line":18317},[100,80687,80550],{"class":106},[100,80689,3031],{"class":52854},[100,80691,63454],{"class":106},[100,80693,17153],{"class":258},[100,80695,80696,80698,80700,80703],{"class":102,"line":18339},[100,80697,56438],{"class":117},[100,80699,52991],{"class":258},[100,80701,80702],{"class":117},"#05943c",[100,80704,2927],{"class":258},[100,80706,80707,80709,80711,80713],{"class":102,"line":18344},[100,80708,58970],{"class":117},[100,80710,52991],{"class":258},[100,80712,62396],{"class":117},[100,80714,2927],{"class":258},[100,80716,80717],{"class":102,"line":18350},[100,80718,3798],{"class":258},[100,80720,80721,80723,80725],{"class":102,"line":18364},[100,80722,53971],{"class":258},[100,80724,1677],{"class":52854},[100,80726,52861],{"class":258},[100,80728,80729,80731,80733],{"class":102,"line":18377},[100,80730,53339],{"class":258},[100,80732,52888],{"class":52854},[100,80734,52861],{"class":258},[100,80736,80737],{"class":102,"line":18382},[100,80738,570],{"emptyLinePlaceholder":569},[100,80740,80741,80743,80745],{"class":102,"line":18396},[100,80742,2676],{"class":258},[100,80744,53354],{"class":52854},[100,80746,52861],{"class":258},[100,80748,80749,80751,80753,80755,80757,80760],{"class":102,"line":18401},[100,80750,53698],{"class":258},[100,80752,53165],{"class":52854},[100,80754,55040],{"class":106},[100,80756,472],{"class":258},[100,80758,80759],{"class":110},"\"filter\"",[100,80761,52861],{"class":258},[100,80763,80764,80766,80768,80770,80772,80774,80777,80779,80781,80784,80786],{"class":102,"line":18407},[100,80765,52895],{"class":258},[100,80767,2006],{"class":52854},[100,80769,62611],{"class":106},[100,80771,472],{"class":258},[100,80773,62616],{"class":110},[100,80775,80776],{"class":106}," data-index",[100,80778,472],{"class":258},[100,80780,5278],{"class":110},[100,80782,80783],{"class":258},">0-100元\u003C\u002F",[100,80785,2006],{"class":52854},[100,80787,52861],{"class":258},[100,80789,80790,80792,80794,80796,80798,80800,80802,80804,80806,80809,80811],{"class":102,"line":18412},[100,80791,52895],{"class":258},[100,80793,2006],{"class":52854},[100,80795,62611],{"class":106},[100,80797,472],{"class":258},[100,80799,62616],{"class":110},[100,80801,80776],{"class":106},[100,80803,472],{"class":258},[100,80805,5301],{"class":110},[100,80807,80808],{"class":258},">100-300元\u003C\u002F",[100,80810,2006],{"class":52854},[100,80812,52861],{"class":258},[100,80814,80815,80817,80819,80821,80823,80825,80827,80829,80831,80834,80836],{"class":102,"line":18426},[100,80816,52895],{"class":258},[100,80818,2006],{"class":52854},[100,80820,62611],{"class":106},[100,80822,472],{"class":258},[100,80824,62616],{"class":110},[100,80826,80776],{"class":106},[100,80828,472],{"class":258},[100,80830,5314],{"class":110},[100,80832,80833],{"class":258},">300元以上\u003C\u002F",[100,80835,2006],{"class":52854},[100,80837,52861],{"class":258},[100,80839,80840,80842,80844,80846,80848,80850,80853,80855],{"class":102,"line":18431},[100,80841,52895],{"class":258},[100,80843,2006],{"class":52854},[100,80845,62611],{"class":106},[100,80847,472],{"class":258},[100,80849,62616],{"class":110},[100,80851,80852],{"class":258},">全部区间\u003C\u002F",[100,80854,2006],{"class":52854},[100,80856,52861],{"class":258},[100,80858,80859,80861,80863],{"class":102,"line":18436},[100,80860,53971],{"class":258},[100,80862,53165],{"class":52854},[100,80864,52861],{"class":258},[100,80866,80867,80869,80871,80873,80875,80877],{"class":102,"line":18450},[100,80868,53698],{"class":258},[100,80870,53165],{"class":52854},[100,80872,55040],{"class":106},[100,80874,472],{"class":258},[100,80876,64162],{"class":110},[100,80878,52861],{"class":258},[100,80880,80881],{"class":102,"line":18462},[100,80882,80883],{"class":1836},"    \u003C!-- \u003Cdiv class=\"item\">\n",[100,80885,80886],{"class":102,"line":18467},[100,80887,80888],{"class":1836},"      \u003Cimg src=\"\" alt=\"\">\n",[100,80890,80891],{"class":102,"line":18480},[100,80892,80893],{"class":1836},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[100,80895,80896],{"class":102,"line":18485},[100,80897,80898],{"class":1836},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[100,80900,80901],{"class":102,"line":18490},[100,80902,80903],{"class":1836},"    \u003C\u002Fdiv> -->\n",[100,80905,80906,80908,80910],{"class":102,"line":18495},[100,80907,53971],{"class":258},[100,80909,53165],{"class":52854},[100,80911,52861],{"class":258},[100,80913,80914,80916,80918],{"class":102,"line":18508},[100,80915,53698],{"class":258},[100,80917,53367],{"class":52854},[100,80919,52861],{"class":258},[100,80921,80922],{"class":102,"line":18513},[100,80923,80924],{"class":1836},"    \u002F\u002F 2. 初始化数据\n",[100,80926,80927,80929,80932,80934],{"class":102,"line":34189},[100,80928,12803],{"class":471},[100,80930,80931],{"class":117}," goodsList",[100,80933,583],{"class":471},[100,80935,57001],{"class":258},[100,80937,80938],{"class":102,"line":34195},[100,80939,80940],{"class":258},"      {\n",[100,80942,80943,80946,80949],{"class":102,"line":34201},[100,80944,80945],{"class":258},"        id: ",[100,80947,80948],{"class":110},"'4001172'",[100,80950,33024],{"class":258},[100,80952,80953,80956,80959],{"class":102,"line":34207},[100,80954,80955],{"class":258},"        name: ",[100,80957,80958],{"class":110},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[100,80960,33024],{"class":258},[100,80962,80963,80966,80969],{"class":102,"line":34213},[100,80964,80965],{"class":258},"        price: ",[100,80967,80968],{"class":110},"'289.00'",[100,80970,33024],{"class":258},[100,80972,80973,80976,80979],{"class":102,"line":34224},[100,80974,80975],{"class":258},"        picture: ",[100,80977,80978],{"class":110},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[100,80980,33024],{"class":258},[100,80982,80983],{"class":102,"line":34230},[100,80984,79446],{"class":258},[100,80986,80987],{"class":102,"line":34250},[100,80988,80940],{"class":258},[100,80990,80991,80993,80996],{"class":102,"line":34256},[100,80992,80945],{"class":258},[100,80994,80995],{"class":110},"'4001594'",[100,80997,33024],{"class":258},[100,80999,81000,81002,81005],{"class":102,"line":34267},[100,81001,80955],{"class":258},[100,81003,81004],{"class":110},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[100,81006,33024],{"class":258},[100,81008,81009,81011,81014],{"class":102,"line":34273},[100,81010,80965],{"class":258},[100,81012,81013],{"class":110},"'288.00'",[100,81015,33024],{"class":258},[100,81017,81018,81020,81023],{"class":102,"line":34279},[100,81019,80975],{"class":258},[100,81021,81022],{"class":110},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[100,81024,33024],{"class":258},[100,81026,81027],{"class":102,"line":34285},[100,81028,79446],{"class":258},[100,81030,81031],{"class":102,"line":34291},[100,81032,80940],{"class":258},[100,81034,81035,81037,81040],{"class":102,"line":34297},[100,81036,80945],{"class":258},[100,81038,81039],{"class":110},"'4001009'",[100,81041,33024],{"class":258},[100,81043,81044,81046,81049],{"class":102,"line":34303},[100,81045,80955],{"class":258},[100,81047,81048],{"class":110},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[100,81050,33024],{"class":258},[100,81052,81053,81055,81058],{"class":102,"line":34309},[100,81054,80965],{"class":258},[100,81056,81057],{"class":110},"'109.00'",[100,81059,33024],{"class":258},[100,81061,81062,81064,81067],{"class":102,"line":34329},[100,81063,80975],{"class":258},[100,81065,81066],{"class":110},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[100,81068,33024],{"class":258},[100,81070,81071],{"class":102,"line":34335},[100,81072,79446],{"class":258},[100,81074,81075],{"class":102,"line":34351},[100,81076,80940],{"class":258},[100,81078,81079,81081,81084],{"class":102,"line":34357},[100,81080,80945],{"class":258},[100,81082,81083],{"class":110},"'4001874'",[100,81085,33024],{"class":258},[100,81087,81088,81090,81093],{"class":102,"line":34371},[100,81089,80955],{"class":258},[100,81091,81092],{"class":110},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[100,81094,33024],{"class":258},[100,81096,81097,81099,81102],{"class":102,"line":34377},[100,81098,80965],{"class":258},[100,81100,81101],{"class":110},"'488.00'",[100,81103,33024],{"class":258},[100,81105,81106,81108,81111],{"class":102,"line":34392},[100,81107,80975],{"class":258},[100,81109,81110],{"class":110},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[100,81112,33024],{"class":258},[100,81114,81115],{"class":102,"line":34398},[100,81116,79446],{"class":258},[100,81118,81119],{"class":102,"line":34407},[100,81120,80940],{"class":258},[100,81122,81123,81125,81128],{"class":102,"line":34413},[100,81124,80945],{"class":258},[100,81126,81127],{"class":110},"'4001649'",[100,81129,33024],{"class":258},[100,81131,81132,81134,81137],{"class":102,"line":34422},[100,81133,80955],{"class":258},[100,81135,81136],{"class":110},"'大师监制龙泉青瓷茶叶罐'",[100,81138,33024],{"class":258},[100,81140,81141,81143,81146],{"class":102,"line":34428},[100,81142,80965],{"class":258},[100,81144,81145],{"class":110},"'139.00'",[100,81147,33024],{"class":258},[100,81149,81150,81152,81155],{"class":102,"line":34434},[100,81151,80975],{"class":258},[100,81153,81154],{"class":110},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[100,81156,33024],{"class":258},[100,81158,81159],{"class":102,"line":34443},[100,81160,79446],{"class":258},[100,81162,81163],{"class":102,"line":34449},[100,81164,80940],{"class":258},[100,81166,81167,81169,81172],{"class":102,"line":34460},[100,81168,80945],{"class":258},[100,81170,81171],{"class":110},"'3997185'",[100,81173,33024],{"class":258},[100,81175,81176,81178,81181],{"class":102,"line":34466},[100,81177,80955],{"class":258},[100,81179,81180],{"class":110},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[100,81182,33024],{"class":258},[100,81184,81185,81187,81190],{"class":102,"line":34485},[100,81186,80965],{"class":258},[100,81188,81189],{"class":110},"'108.00'",[100,81191,33024],{"class":258},[100,81193,81194,81196,81199],{"class":102,"line":34491},[100,81195,80975],{"class":258},[100,81197,81198],{"class":110},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[100,81200,33024],{"class":258},[100,81202,81203],{"class":102,"line":34502},[100,81204,79446],{"class":258},[100,81206,81207],{"class":102,"line":34508},[100,81208,80940],{"class":258},[100,81210,81211,81213,81216],{"class":102,"line":34528},[100,81212,80945],{"class":258},[100,81214,81215],{"class":110},"'3997403'",[100,81217,33024],{"class":258},[100,81219,81220,81222,81225],{"class":102,"line":34544},[100,81221,80955],{"class":258},[100,81223,81224],{"class":110},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[100,81226,33024],{"class":258},[100,81228,81229,81231,81234],{"class":102,"line":34550},[100,81230,80965],{"class":258},[100,81232,81233],{"class":110},"'100.00'",[100,81235,33024],{"class":258},[100,81237,81238,81240,81243],{"class":102,"line":34564},[100,81239,80975],{"class":258},[100,81241,81242],{"class":110},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[100,81244,33024],{"class":258},[100,81246,81247],{"class":102,"line":34570},[100,81248,79446],{"class":258},[100,81250,81251],{"class":102,"line":34576},[100,81252,80940],{"class":258},[100,81254,81255,81257,81260],{"class":102,"line":34587},[100,81256,80945],{"class":258},[100,81258,81259],{"class":110},"'3998274'",[100,81261,33024],{"class":258},[100,81263,81264,81266,81269],{"class":102,"line":34593},[100,81265,80955],{"class":258},[100,81267,81268],{"class":110},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[100,81270,33024],{"class":258},[100,81272,81273,81275,81277],{"class":102,"line":34599},[100,81274,80965],{"class":258},[100,81276,81145],{"class":110},[100,81278,33024],{"class":258},[100,81280,81281,81283,81286],{"class":102,"line":34609},[100,81282,80975],{"class":258},[100,81284,81285],{"class":110},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[100,81287,33024],{"class":258},[100,81289,81290],{"class":102,"line":34615},[100,81291,79446],{"class":258},[100,81293,81294],{"class":102,"line":34626},[100,81295,54663],{"class":258},[100,81297,81298],{"class":102,"line":34632},[100,81299,570],{"emptyLinePlaceholder":569},[100,81301,81302],{"class":102,"line":34642},[100,81303,81304],{"class":1836},"    \u002F\u002F 1.渲染函数\n",[100,81306,81307,81309,81311,81313,81315],{"class":102,"line":34647},[100,81308,71638],{"class":471},[100,81310,71641],{"class":106},[100,81312,713],{"class":258},[100,81314,5479],{"class":6812},[100,81316,14024],{"class":258},[100,81318,81319],{"class":102,"line":34653},[100,81320,81321],{"class":1836},"      \u002F\u002F 声明空字符串\n",[100,81323,81324,81327,81330,81332],{"class":102,"line":34702},[100,81325,81326],{"class":471},"      let",[100,81328,81329],{"class":258}," str ",[100,81331,472],{"class":471},[100,81333,71658],{"class":110},[100,81335,81336],{"class":102,"line":34749},[100,81337,71663],{"class":1836},[100,81339,81340,81342,81345,81347,81350,81353],{"class":102,"line":34754},[100,81341,59561],{"class":258},[100,81343,81344],{"class":106},"forEach",[100,81346,713],{"class":258},[100,81348,81349],{"class":6812},"item",[100,81351,81352],{"class":471}," =>",[100,81354,17153],{"class":258},[100,81356,81357,81359,81362,81365,81367,81370,81372,81375,81378,81380],{"class":102,"line":34760},[100,81358,62824],{"class":471},[100,81360,81361],{"class":258}," { ",[100,81363,81364],{"class":117},"name",[100,81366,14017],{"class":258},[100,81368,81369],{"class":117},"price",[100,81371,14017],{"class":258},[100,81373,81374],{"class":117},"picture",[100,81376,81377],{"class":258}," } ",[100,81379,472],{"class":471},[100,81381,81382],{"class":258}," item\n",[100,81384,81385,81388,81390],{"class":102,"line":34779},[100,81386,81387],{"class":258},"        str ",[100,81389,11062],{"class":471},[100,81391,71722],{"class":110},[100,81393,81394],{"class":102,"line":34785},[100,81395,81396],{"class":110},"          \u003Cdiv class=\"item\">\n",[100,81398,81399,81402,81404],{"class":102,"line":34805},[100,81400,81401],{"class":110},"            \u003Cimg src=\"${",[100,81403,81374],{"class":258},[100,81405,81406],{"class":110},"}\" alt=\"\">\n",[100,81408,81409,81412,81414],{"class":102,"line":34811},[100,81410,81411],{"class":110},"            \u003Cp class=\"name\">${",[100,81413,81364],{"class":258},[100,81415,81416],{"class":110},"}\u003C\u002Fp>\n",[100,81418,81419,81422,81424],{"class":102,"line":34817},[100,81420,81421],{"class":110},"            \u003Cp class=\"price\">${",[100,81423,81369],{"class":258},[100,81425,81416],{"class":110},[100,81427,81428],{"class":102,"line":34827},[100,81429,81430],{"class":110},"          \u003C\u002Fdiv>\n",[100,81432,81433],{"class":102,"line":34832},[100,81434,81435],{"class":110},"        `\n",[100,81437,81438],{"class":102,"line":34838},[100,81439,66369],{"class":258},[100,81441,81442],{"class":102,"line":34854},[100,81443,81444],{"class":1836},"      \u002F\u002F 追加给List\n",[100,81446,81447,81449,81451,81453,81456,81458,81460],{"class":102,"line":34899},[100,81448,57325],{"class":258},[100,81450,55953],{"class":106},[100,81452,713],{"class":258},[100,81454,81455],{"class":110},"'.list'",[100,81457,75803],{"class":258},[100,81459,472],{"class":471},[100,81461,75539],{"class":258},[100,81463,81464],{"class":102,"line":34905},[100,81465,3798],{"class":258},[100,81467,81468],{"class":102,"line":34911},[100,81469,81470],{"class":1836},"    \u002F\u002F 页面一打开就需要渲染\n",[100,81472,81473,81476],{"class":102,"line":34917},[100,81474,81475],{"class":106},"    render",[100,81477,81478],{"class":258},"(goodsList)\n",[100,81480,81481],{"class":102,"line":34928},[100,81482,81483],{"class":1836},"    \u002F\u002F 2.过滤筛选\n",[100,81485,81486,81488,81490,81492,81495,81497,81499,81501,81503,81505,81507,81509],{"class":102,"line":34934},[100,81487,53961],{"class":258},[100,81489,55953],{"class":106},[100,81491,713],{"class":258},[100,81493,81494],{"class":110},"'.filter'",[100,81496,32389],{"class":258},[100,81498,59367],{"class":106},[100,81500,713],{"class":258},[100,81502,59372],{"class":110},[100,81504,14017],{"class":258},[100,81506,1852],{"class":6812},[100,81508,81352],{"class":471},[100,81510,17153],{"class":258},[100,81512,81513],{"class":102,"line":34940},[100,81514,81515],{"class":1836},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[100,81517,81518,81520,81522,81525,81527,81529,81531,81533],{"class":102,"line":34946},[100,81519,59782],{"class":471},[100,81521,81361],{"class":258},[100,81523,81524],{"class":117},"tagName",[100,81526,14017],{"class":258},[100,81528,33095],{"class":117},[100,81530,81377],{"class":258},[100,81532,472],{"class":471},[100,81534,81535],{"class":258}," e.target\n",[100,81537,81538],{"class":102,"line":34963},[100,81539,81540],{"class":1836},"      \u002F\u002F 判断\n",[100,81542,81543,81545,81547,81549,81551],{"class":102,"line":34977},[100,81544,56034],{"class":471},[100,81546,68588],{"class":258},[100,81548,56040],{"class":471},[100,81550,69810],{"class":110},[100,81552,14024],{"class":258},[100,81554,81555],{"class":102,"line":34986},[100,81556,81557],{"class":1836},"        \u002F\u002F console.log(11)\n",[100,81559,81560],{"class":102,"line":34995},[100,81561,81562],{"class":1836},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[100,81564,81565],{"class":102,"line":35004},[100,81566,81567],{"class":1836},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[100,81569,81570,81572,81574,81576],{"class":102,"line":35013},[100,81571,53384],{"class":471},[100,81573,53387],{"class":258},[100,81575,472],{"class":471},[100,81577,81578],{"class":258}," goodsList\n",[100,81580,81581,81583,81586,81588,81591],{"class":102,"line":35019},[100,81582,4106],{"class":471},[100,81584,81585],{"class":258}," (dataset.index ",[100,81587,56040],{"class":471},[100,81589,81590],{"class":110}," '1'",[100,81592,14024],{"class":258},[100,81594,81595,81598,81600,81603,81606,81608,81610,81612,81615,81617,81619,81622,81624,81626,81628],{"class":102,"line":35025},[100,81596,81597],{"class":258},"          arr ",[100,81599,472],{"class":471},[100,81601,81602],{"class":258}," goodsList.",[100,81604,81605],{"class":106},"filter",[100,81607,713],{"class":258},[100,81609,81349],{"class":6812},[100,81611,81352],{"class":471},[100,81613,81614],{"class":258}," item.price ",[100,81616,3331],{"class":471},[100,81618,5692],{"class":117},[100,81620,81621],{"class":471}," &&",[100,81623,81614],{"class":258},[100,81625,3220],{"class":471},[100,81627,7350],{"class":117},[100,81629,809],{"class":258},[100,81631,81632,81635,81637,81639,81641,81643,81646],{"class":102,"line":35033},[100,81633,81634],{"class":258},"        } ",[100,81636,3322],{"class":471},[100,81638,3325],{"class":471},[100,81640,81585],{"class":258},[100,81642,56040],{"class":471},[100,81644,81645],{"class":110}," '2'",[100,81647,14024],{"class":258},[100,81649,81650,81652,81654,81656,81658,81660,81662,81664,81666,81668,81670,81672,81674,81676,81679],{"class":102,"line":35038},[100,81651,81597],{"class":258},[100,81653,472],{"class":471},[100,81655,81602],{"class":258},[100,81657,81605],{"class":106},[100,81659,713],{"class":258},[100,81661,81349],{"class":6812},[100,81663,81352],{"class":471},[100,81665,81614],{"class":258},[100,81667,3331],{"class":471},[100,81669,7350],{"class":117},[100,81671,81621],{"class":471},[100,81673,81614],{"class":258},[100,81675,3220],{"class":471},[100,81677,81678],{"class":117}," 300",[100,81680,809],{"class":258},[100,81682,81683,81685,81687,81689,81691,81693,81696],{"class":102,"line":35044},[100,81684,81634],{"class":258},[100,81686,3322],{"class":471},[100,81688,3325],{"class":471},[100,81690,81585],{"class":258},[100,81692,56040],{"class":471},[100,81694,81695],{"class":110}," '3'",[100,81697,14024],{"class":258},[100,81699,81700,81702,81704,81706,81708,81710,81712,81714,81716,81718,81720],{"class":102,"line":35055},[100,81701,81597],{"class":258},[100,81703,472],{"class":471},[100,81705,81602],{"class":258},[100,81707,81605],{"class":106},[100,81709,713],{"class":258},[100,81711,81349],{"class":6812},[100,81713,81352],{"class":471},[100,81715,81614],{"class":258},[100,81717,3331],{"class":471},[100,81719,81678],{"class":117},[100,81721,809],{"class":258},[100,81723,81724],{"class":102,"line":35061},[100,81725,4138],{"class":258},[100,81727,81728],{"class":102,"line":35081},[100,81729,81730],{"class":1836},"        \u002F\u002F 渲染函数\n",[100,81732,81733,81735],{"class":102,"line":35087},[100,81734,71962],{"class":106},[100,81736,53966],{"class":258},[100,81738,81739],{"class":102,"line":35093},[100,81740,53952],{"class":258},[100,81742,81743],{"class":102,"line":35099},[100,81744,570],{"emptyLinePlaceholder":569},[100,81746,81747],{"class":102,"line":35116},[100,81748,35016],{"class":258},[100,81750,81751,81753,81755],{"class":102,"line":35122},[100,81752,53971],{"class":258},[100,81754,53367],{"class":52854},[100,81756,52861],{"class":258},[100,81758,81759,81761,81763],{"class":102,"line":35128},[100,81760,53339],{"class":258},[100,81762,53354],{"class":52854},[100,81764,52861],{"class":258},[100,81766,81767],{"class":102,"line":35134},[100,81768,570],{"emptyLinePlaceholder":569},[100,81770,81771,81773,81775],{"class":102,"line":35140},[100,81772,53339],{"class":258},[100,81774,52189],{"class":52854},[100,81776,52861],{"class":258},[14,81778,81780],{"id":81779},"_410-深入了解对象","4.10 深入了解对象",[305,81782,81784],{"id":81783},"_4101-创建对象","4.10.1 创建对象",[19,81786,81787],{},[3095,81788],{"alt":79,"src":81789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,81791,81792],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[305,81794,81796],{"id":81795},"_4102-构造函数","4.10.2 构造函数",[19,81798,81799,81802],{},[1921,81800,81801],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,81804,81805,81808],{},[1921,81806,81807],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[73,81810,81812],{"className":52187,"code":81811,"language":52189,"meta":79,"style":79},"\u003Cscript>\n\u002F\u002F例：\nfunction Pig(name,age,gender) {\n    this.name=name\n    this.age=age\n    this.gender=gender    \n}\n\u002F\u002F创建佩奇对象\nconst Peppa=new Pig('佩奇',6,'女')\n\u002F\u002F创建乔治对象\nconst George=new Pig('乔治',3,'男')\n\u003C\u002Fscript>\n",[32,81813,81814,81822,81827,81848,81861,81873,81885,81889,81894,81921,81926,81953],{"__ignoreMap":79},[100,81815,81816,81818,81820],{"class":102,"line":103},[100,81817,2676],{"class":258},[100,81819,53367],{"class":52854},[100,81821,52861],{"class":258},[100,81823,81824],{"class":102,"line":188},[100,81825,81826],{"class":1836},"\u002F\u002F例：\n",[100,81828,81829,81831,81834,81836,81838,81840,81842,81844,81846],{"class":102,"line":199},[100,81830,56003],{"class":471},[100,81832,81833],{"class":106}," Pig",[100,81835,713],{"class":258},[100,81837,81364],{"class":6812},[100,81839,2145],{"class":258},[100,81841,71775],{"class":6812},[100,81843,2145],{"class":258},[100,81845,71792],{"class":6812},[100,81847,14024],{"class":258},[100,81849,81850,81853,81856,81858],{"class":102,"line":532},[100,81851,81852],{"class":117},"    this",[100,81854,81855],{"class":258},".name",[100,81857,472],{"class":471},[100,81859,81860],{"class":258},"name\n",[100,81862,81863,81865,81868,81870],{"class":102,"line":577},[100,81864,81852],{"class":117},[100,81866,81867],{"class":258},".age",[100,81869,472],{"class":471},[100,81871,81872],{"class":258},"age\n",[100,81874,81875,81877,81880,81882],{"class":102,"line":589},[100,81876,81852],{"class":117},[100,81878,81879],{"class":258},".gender",[100,81881,472],{"class":471},[100,81883,81884],{"class":258},"gender    \n",[100,81886,81887],{"class":102,"line":595},[100,81888,3197],{"class":258},[100,81890,81891],{"class":102,"line":601},[100,81892,81893],{"class":1836},"\u002F\u002F创建佩奇对象\n",[100,81895,81896,81898,81901,81903,81905,81907,81910,81912,81914,81916,81919],{"class":102,"line":606},[100,81897,8388],{"class":471},[100,81899,81900],{"class":117}," Peppa",[100,81902,13299],{"class":471},[100,81904,81833],{"class":106},[100,81906,713],{"class":258},[100,81908,81909],{"class":110},"'佩奇'",[100,81911,2145],{"class":258},[100,81913,2111],{"class":117},[100,81915,2145],{"class":258},[100,81917,81918],{"class":110},"'女'",[100,81920,809],{"class":258},[100,81922,81923],{"class":102,"line":612},[100,81924,81925],{"class":1836},"\u002F\u002F创建乔治对象\n",[100,81927,81928,81930,81933,81935,81937,81939,81942,81944,81946,81948,81951],{"class":102,"line":618},[100,81929,8388],{"class":471},[100,81931,81932],{"class":117}," George",[100,81934,13299],{"class":471},[100,81936,81833],{"class":106},[100,81938,713],{"class":258},[100,81940,81941],{"class":110},"'乔治'",[100,81943,2145],{"class":258},[100,81945,1849],{"class":117},[100,81947,2145],{"class":258},[100,81949,81950],{"class":110},"'男'",[100,81952,809],{"class":258},[100,81954,81955,81957,81959],{"class":102,"line":623},[100,81956,53339],{"class":258},[100,81958,53367],{"class":52854},[100,81960,52861],{"class":258},[19,81962,81963],{},[3095,81964],{"alt":79,"src":81965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,81967,81968],{},[3095,81969],{"alt":79,"src":81970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,81972,81973],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,81975,81976],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,81978,81979],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,81981,81982],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,81984,81985],{},"这里用等号是因为：对象.属性=值",[19,81987,81988],{},"①利用对象字面量创建对象",[19,81990,81991],{},"const o={",[19,81993,81994],{},"name:'pink'",[19,81996,81997],{},"} ②利用new Object创建对象",[19,81999,82000],{},"const o=new Object({name:'pink'})",[19,82002,82003],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,82005,82006],{},"构造函数创建对象的执行过程：",[19,82008,82009],{},[3095,82010],{"alt":79,"src":82011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[305,82013,82015],{"id":82014},"_4103-实例成员","4.10.3 实例成员",[19,82017,82018],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[26,82020,82021,82024,82027],{},[29,82022,82023],{},"实例对象的属性和方法即为实例成员",[29,82025,82026],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[29,82028,82029],{},"构造函数创建的实例对象彼此独立互不影响",[305,82031,82033],{"id":82032},"_4104-静态成员","4.10.4 静态成员",[19,82035,82036],{},[3095,82037],{"alt":79,"src":82038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,82040,82041],{},"静态成员有Date.now() Math.PI Math.random()",[19,82043,82044],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,82046,82047],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,82049,82050],{},"function Pig(name) n {",[19,82052,82053],{},"this.name=name",[19,82055,2712],{},[19,82057,82058],{},"Pig.eyes=2",[19,82060,82061],{},"Pig.sayHai=function () { console.log(this) }",[19,82063,82064],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,82066,82067],{},"console.log(Pig.eyes) \u002F\u002F2",[19,82069,12914],{},[26,82071,82072,82075,82078,82081,82084],{},[29,82073,82074],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[29,82076,82077],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[29,82079,82080],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[29,82082,82083],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[29,82085,82086],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,82088,82089],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[305,82091,82093],{"id":82092},"_4105-内置构造函数","4.10.5 内置构造函数",[19,82095,82096],{},"内置构造函数包含：",[19,82098,82099],{},[3095,82100],{"alt":79,"src":82101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,82103,82104],{},[3095,82105],{"alt":79,"src":82106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,82108,82109],{},"这些基本数据类型，js对他们进行了包装",[53367,82111,82112],{},"\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",[23579,82114,82116],{"id":82115},"_41051-object","4.10.5.1 Object",[19,82118,82119],{},"Object 是内置的构造函数，用于创建普通对象",[19,82121,82122],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[73,82124,82126],{"className":52187,"code":82125,"language":52189,"meta":79,"style":79},"const user=new Object({name:'小明',age:15})\n",[32,82127,82128],{"__ignoreMap":79},[100,82129,82130],{"class":102,"line":103},[100,82131,82125],{"class":258},[19,82133,82134],{},"三个常用的静态方法：",[24491,82136,82138],{"id":82137},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,82140,82141],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,82143,82144],{},[3095,82145],{"alt":79,"src":82146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,82148,82149],{},[3095,82150],{"alt":79,"src":82151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[73,82153,82155],{"className":54621,"code":82154,"language":54623,"meta":79,"style":79},"\u003Cbody>\n  \u003Cscript>\n    const o = { name: 'pink', age: 6 }\n    \u002F\u002F 获得所有属性名\n    const arr = Object.keys(o)\n    console.log(arr)\n    \u002F\u002F 获得所有属性值\n    console.log(Object.values(o))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[32,82156,82157,82165,82173,82178,82183,82188,82193,82198,82203,82211],{"__ignoreMap":79},[100,82158,82159,82161,82163],{"class":102,"line":103},[100,82160,2676],{"class":258},[100,82162,53354],{"class":52854},[100,82164,52861],{"class":258},[100,82166,82167,82169,82171],{"class":102,"line":188},[100,82168,53698],{"class":258},[100,82170,53367],{"class":52854},[100,82172,52861],{"class":258},[100,82174,82175],{"class":102,"line":199},[100,82176,82177],{"class":258},"    const o = { name: 'pink', age: 6 }\n",[100,82179,82180],{"class":102,"line":532},[100,82181,82182],{"class":258},"    \u002F\u002F 获得所有属性名\n",[100,82184,82185],{"class":102,"line":577},[100,82186,82187],{"class":258},"    const arr = Object.keys(o)\n",[100,82189,82190],{"class":102,"line":589},[100,82191,82192],{"class":258},"    console.log(arr)\n",[100,82194,82195],{"class":102,"line":595},[100,82196,82197],{"class":258},"    \u002F\u002F 获得所有属性值\n",[100,82199,82200],{"class":102,"line":601},[100,82201,82202],{"class":258},"    console.log(Object.values(o))\n",[100,82204,82205,82207,82209],{"class":102,"line":606},[100,82206,53971],{"class":258},[100,82208,53367],{"class":52854},[100,82210,52861],{"class":258},[100,82212,82213,82215,82217],{"class":102,"line":612},[100,82214,53339],{"class":258},[100,82216,53354],{"class":52854},[100,82218,52861],{"class":258},[24491,82220,82222],{"id":82221},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,82224,82225],{},"Object.assign(oo,o)",[19,82227,82228],{},"后的东西添加给前 是追加",[19,82230,82231],{},[3095,82232],{"alt":79,"src":82233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,82235,82236],{},[3095,82237],{"alt":79,"src":82238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[73,82240,82242],{"className":54621,"code":82241,"language":54623,"meta":79,"style":79},"\u003Cbody>\n  \u003Cscript>\n    const o = { name: 'pink', age: 6 }\n    \u002F\u002F 获得所有属性名\n    const arr = Object.keys(o)\n    console.log(arr)\n    \u002F\u002F 获得所有属性值\n    console.log(Object.values(o))\n    const oo = {}\n    Object.assign(oo, o)\n    console.log(oo)\n    Object.assign(o, { gender: '女' })\n    console.log(o)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[32,82243,82244,82252,82260,82264,82268,82272,82276,82280,82284,82289,82294,82299,82304,82309,82317],{"__ignoreMap":79},[100,82245,82246,82248,82250],{"class":102,"line":103},[100,82247,2676],{"class":258},[100,82249,53354],{"class":52854},[100,82251,52861],{"class":258},[100,82253,82254,82256,82258],{"class":102,"line":188},[100,82255,53698],{"class":258},[100,82257,53367],{"class":52854},[100,82259,52861],{"class":258},[100,82261,82262],{"class":102,"line":199},[100,82263,82177],{"class":258},[100,82265,82266],{"class":102,"line":532},[100,82267,82182],{"class":258},[100,82269,82270],{"class":102,"line":577},[100,82271,82187],{"class":258},[100,82273,82274],{"class":102,"line":589},[100,82275,82192],{"class":258},[100,82277,82278],{"class":102,"line":595},[100,82279,82197],{"class":258},[100,82281,82282],{"class":102,"line":601},[100,82283,82202],{"class":258},[100,82285,82286],{"class":102,"line":606},[100,82287,82288],{"class":258},"    const oo = {}\n",[100,82290,82291],{"class":102,"line":612},[100,82292,82293],{"class":258},"    Object.assign(oo, o)\n",[100,82295,82296],{"class":102,"line":618},[100,82297,82298],{"class":258},"    console.log(oo)\n",[100,82300,82301],{"class":102,"line":623},[100,82302,82303],{"class":258},"    Object.assign(o, { gender: '女' })\n",[100,82305,82306],{"class":102,"line":629},[100,82307,82308],{"class":258},"    console.log(o)\n",[100,82310,82311,82313,82315],{"class":102,"line":635},[100,82312,53971],{"class":258},[100,82314,53367],{"class":52854},[100,82316,52861],{"class":258},[100,82318,82319,82321,82323],{"class":102,"line":641},[100,82320,53339],{"class":258},[100,82322,53354],{"class":52854},[100,82324,52861],{"class":258},[19,82326,82327],{},[3095,82328],{"alt":79,"src":82329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[23579,82331,82333],{"id":82332},"_41052-array","4.10.5.2 Array",[19,82335,82336],{},"Array 是内置的构造函数，用于创建数组",[19,82338,82339],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[73,82341,82343],{"className":52187,"code":82342,"language":52189,"meta":79,"style":79},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[32,82344,82345,82350],{"__ignoreMap":79},[100,82346,82347],{"class":102,"line":103},[100,82348,82349],{"class":258},"const arr=new Array(3,5)\n",[100,82351,82352],{"class":102,"line":188},[100,82353,82354],{"class":258},"console.log(arr)  \u002F\u002F[3,5]\n",[19,82356,82357],{},"Array的实例方法，这个方法是实例成员",[19,82359,82360],{},[3095,82361],{"alt":79,"src":82362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[24491,82364,82366],{"id":82365},"_410521-reduce","4.10.5.2.1 reduce",[19,82368,82369],{},[3095,82370],{"alt":79,"src":82371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[73,82373,82375],{"className":54621,"code":82374,"language":54623,"meta":79,"style":79},"\u003Cbody>\n  \u003Cscript>\n    const arr = [1, 5, 8]\n    \u002F\u002F 1.没有初始值\n    const total = arr.reduce(function (prev, current) {\n      return prev + current\n    })\n    console.log(total)   \u002F\u002F14\n    \u002F\u002F 2.有初始值\n    const total1 = arr.reduce(function (prev, current) {\n      return prev + current\n    }, 10)\n    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n\n    \u002F\u002F 3.箭头函数写法\n    const total2 = arr.reduce((prev, current) => prev + current, 10)\n    console.log(total2)   \u002F\u002F24\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[32,82376,82377,82385,82393,82398,82403,82408,82413,82417,82422,82427,82432,82436,82441,82446,82450,82455,82460,82465,82473],{"__ignoreMap":79},[100,82378,82379,82381,82383],{"class":102,"line":103},[100,82380,2676],{"class":258},[100,82382,53354],{"class":52854},[100,82384,52861],{"class":258},[100,82386,82387,82389,82391],{"class":102,"line":188},[100,82388,53698],{"class":258},[100,82390,53367],{"class":52854},[100,82392,52861],{"class":258},[100,82394,82395],{"class":102,"line":199},[100,82396,82397],{"class":258},"    const arr = [1, 5, 8]\n",[100,82399,82400],{"class":102,"line":532},[100,82401,82402],{"class":258},"    \u002F\u002F 1.没有初始值\n",[100,82404,82405],{"class":102,"line":577},[100,82406,82407],{"class":258},"    const total = arr.reduce(function (prev, current) {\n",[100,82409,82410],{"class":102,"line":589},[100,82411,82412],{"class":258},"      return prev + current\n",[100,82414,82415],{"class":102,"line":595},[100,82416,35016],{"class":258},[100,82418,82419],{"class":102,"line":601},[100,82420,82421],{"class":258},"    console.log(total)   \u002F\u002F14\n",[100,82423,82424],{"class":102,"line":606},[100,82425,82426],{"class":258},"    \u002F\u002F 2.有初始值\n",[100,82428,82429],{"class":102,"line":612},[100,82430,82431],{"class":258},"    const total1 = arr.reduce(function (prev, current) {\n",[100,82433,82434],{"class":102,"line":618},[100,82435,82412],{"class":258},[100,82437,82438],{"class":102,"line":623},[100,82439,82440],{"class":258},"    }, 10)\n",[100,82442,82443],{"class":102,"line":629},[100,82444,82445],{"class":258},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[100,82447,82448],{"class":102,"line":635},[100,82449,570],{"emptyLinePlaceholder":569},[100,82451,82452],{"class":102,"line":641},[100,82453,82454],{"class":258},"    \u002F\u002F 3.箭头函数写法\n",[100,82456,82457],{"class":102,"line":647},[100,82458,82459],{"class":258},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[100,82461,82462],{"class":102,"line":653},[100,82463,82464],{"class":258},"    console.log(total2)   \u002F\u002F24\n",[100,82466,82467,82469,82471],{"class":102,"line":659},[100,82468,53971],{"class":258},[100,82470,53367],{"class":52854},[100,82472,52861],{"class":258},[100,82474,82475,82477,82479],{"class":102,"line":665},[100,82476,53339],{"class":258},[100,82478,53354],{"class":52854},[100,82480,52861],{"class":258},[19,82482,82483],{},"执行过程：",[26,82485,82486,82489,82492],{},[29,82487,82488],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[29,82490,82491],{},"每一次循环，把返回值给作为下一次循环的上一次值",[29,82493,82494],{},"如果有起始值，则起始值作为上一次值",[73,82496,82498],{"className":54621,"code":82497,"language":54623,"meta":79,"style":79},"\u003Cbody>\n  \u003Cscript>\n    const arr = [1, 5, 8]\n    \u002F\u002F 1.没有初始值\n    const total = arr.reduce(function (prev, current) {\n      return prev + current\n    })\n    console.log(total)   \u002F\u002F14\n    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n    \u002F\u002F     1              5                    6\n    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n    \u002F\u002F     6              8                    14\n    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n    \u002F\u002F 2.有初始值\n    const total1 = arr.reduce(function (prev, current) {\n      return prev + current\n    }, 10)\n    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n    \u002F\u002F     10             1                     11\n    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n    \u002F\u002F     11             5                    16\n    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n    \u002F\u002F     16             8                    24\n    \u002F\u002F 有初始值时循环次数就是数组的长度\n    \u002F\u002F 3.箭头函数写法\n    const total2 = arr.reduce((prev, current) => prev + current, 10)\n    console.log(total2)   \u002F\u002F24\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[32,82499,82500,82508,82516,82520,82524,82528,82532,82536,82540,82545,82550,82555,82560,82565,82569,82573,82577,82581,82585,82589,82594,82598,82603,82607,82612,82617,82621,82625,82629,82637],{"__ignoreMap":79},[100,82501,82502,82504,82506],{"class":102,"line":103},[100,82503,2676],{"class":258},[100,82505,53354],{"class":52854},[100,82507,52861],{"class":258},[100,82509,82510,82512,82514],{"class":102,"line":188},[100,82511,53698],{"class":258},[100,82513,53367],{"class":52854},[100,82515,52861],{"class":258},[100,82517,82518],{"class":102,"line":199},[100,82519,82397],{"class":258},[100,82521,82522],{"class":102,"line":532},[100,82523,82402],{"class":258},[100,82525,82526],{"class":102,"line":577},[100,82527,82407],{"class":258},[100,82529,82530],{"class":102,"line":589},[100,82531,82412],{"class":258},[100,82533,82534],{"class":102,"line":595},[100,82535,35016],{"class":258},[100,82537,82538],{"class":102,"line":601},[100,82539,82421],{"class":258},[100,82541,82542],{"class":102,"line":606},[100,82543,82544],{"class":258},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[100,82546,82547],{"class":102,"line":612},[100,82548,82549],{"class":258},"    \u002F\u002F     1              5                    6\n",[100,82551,82552],{"class":102,"line":618},[100,82553,82554],{"class":258},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[100,82556,82557],{"class":102,"line":623},[100,82558,82559],{"class":258},"    \u002F\u002F     6              8                    14\n",[100,82561,82562],{"class":102,"line":629},[100,82563,82564],{"class":258},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[100,82566,82567],{"class":102,"line":635},[100,82568,82426],{"class":258},[100,82570,82571],{"class":102,"line":641},[100,82572,82431],{"class":258},[100,82574,82575],{"class":102,"line":647},[100,82576,82412],{"class":258},[100,82578,82579],{"class":102,"line":653},[100,82580,82440],{"class":258},[100,82582,82583],{"class":102,"line":659},[100,82584,82445],{"class":258},[100,82586,82587],{"class":102,"line":665},[100,82588,82544],{"class":258},[100,82590,82591],{"class":102,"line":670},[100,82592,82593],{"class":258},"    \u002F\u002F     10             1                     11\n",[100,82595,82596],{"class":102,"line":675},[100,82597,82554],{"class":258},[100,82599,82600],{"class":102,"line":699},[100,82601,82602],{"class":258},"    \u002F\u002F     11             5                    16\n",[100,82604,82605],{"class":102,"line":708},[100,82606,82554],{"class":258},[100,82608,82609],{"class":102,"line":722},[100,82610,82611],{"class":258},"    \u002F\u002F     16             8                    24\n",[100,82613,82614],{"class":102,"line":735},[100,82615,82616],{"class":258},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[100,82618,82619],{"class":102,"line":754},[100,82620,82454],{"class":258},[100,82622,82623],{"class":102,"line":771},[100,82624,82459],{"class":258},[100,82626,82627],{"class":102,"line":776},[100,82628,82464],{"class":258},[100,82630,82631,82633,82635],{"class":102,"line":781},[100,82632,53971],{"class":258},[100,82634,53367],{"class":52854},[100,82636,52861],{"class":258},[100,82638,82639,82641,82643],{"class":102,"line":796},[100,82640,53339],{"class":258},[100,82642,53354],{"class":52854},[100,82644,52861],{"class":258},[24491,82646,82648],{"id":82647},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,82650,82651],{},[3095,82652],{"alt":79,"src":82653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[73,82655,82657],{"className":54621,"code":82656,"language":54623,"meta":79,"style":79},"\u003Cbody>\n  \u003Cscript>\n    const arr = [\n      { name: '张三', salary: 10000 },\n      { name: '李四', salary: 10000 },\n      { name: '王五', salary: 10000 }\n    ]\n    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n    \u002F\u002F prev是累计值\n    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n    console.log(total)\n    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n    \u002F\u002F    0       10000*1.3=13000       13000\n    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n    \u002F\u002F  13000     10000*1.3=13000       26000\n    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n    \u002F\u002F  26000     10000*1.3=13000       39000\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[32,82658,82659,82667,82675,82680,82685,82690,82695,82699,82704,82709,82714,82719,82724,82729,82733,82738,82742,82747,82755],{"__ignoreMap":79},[100,82660,82661,82663,82665],{"class":102,"line":103},[100,82662,2676],{"class":258},[100,82664,53354],{"class":52854},[100,82666,52861],{"class":258},[100,82668,82669,82671,82673],{"class":102,"line":188},[100,82670,53698],{"class":258},[100,82672,53367],{"class":52854},[100,82674,52861],{"class":258},[100,82676,82677],{"class":102,"line":199},[100,82678,82679],{"class":258},"    const arr = [\n",[100,82681,82682],{"class":102,"line":532},[100,82683,82684],{"class":258},"      { name: '张三', salary: 10000 },\n",[100,82686,82687],{"class":102,"line":577},[100,82688,82689],{"class":258},"      { name: '李四', salary: 10000 },\n",[100,82691,82692],{"class":102,"line":589},[100,82693,82694],{"class":258},"      { name: '王五', salary: 10000 }\n",[100,82696,82697],{"class":102,"line":595},[100,82698,54663],{"class":258},[100,82700,82701],{"class":102,"line":601},[100,82702,82703],{"class":258},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[100,82705,82706],{"class":102,"line":606},[100,82707,82708],{"class":258},"    \u002F\u002F prev是累计值\n",[100,82710,82711],{"class":102,"line":612},[100,82712,82713],{"class":258},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[100,82715,82716],{"class":102,"line":618},[100,82717,82718],{"class":258},"    console.log(total)\n",[100,82720,82721],{"class":102,"line":623},[100,82722,82723],{"class":258},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[100,82725,82726],{"class":102,"line":629},[100,82727,82728],{"class":258},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[100,82730,82731],{"class":102,"line":635},[100,82732,82723],{"class":258},[100,82734,82735],{"class":102,"line":641},[100,82736,82737],{"class":258},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[100,82739,82740],{"class":102,"line":647},[100,82741,82723],{"class":258},[100,82743,82744],{"class":102,"line":653},[100,82745,82746],{"class":258},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[100,82748,82749,82751,82753],{"class":102,"line":659},[100,82750,53971],{"class":258},[100,82752,53367],{"class":52854},[100,82754,52861],{"class":258},[100,82756,82757,82759,82761],{"class":102,"line":665},[100,82758,53339],{"class":258},[100,82760,53354],{"class":52854},[100,82762,52861],{"class":258},[24491,82764,82766],{"id":82765},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,82768,82769],{},[3095,82770],{"alt":79,"src":82771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,82773,82774],{},[3095,82775],{"alt":79,"src":82776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[26,82778,82779],{},[29,82780,82781],{},"find()",[19,82783,82784],{},"循环查找，找到第一个就ok",[19,82786,82787],{},[2006,82788,82791],{"href":82789,"rel":82790},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[25442],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[73,82793,82795],{"className":52187,"code":82794,"language":52189,"meta":79,"style":79},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[32,82796,82797,82802,82807],{"__ignoreMap":79},[100,82798,82799],{"class":102,"line":103},[100,82800,82801],{"class":258},"const array1 = [5, 12, 8, 130, 44]\n",[100,82803,82804],{"class":102,"line":188},[100,82805,82806],{"class":258},"const found = array1.find((element) => element > 10)\n",[100,82808,82809],{"class":102,"line":199},[100,82810,82811],{"class":258},"console.log(found)  \u002F\u002F12\n",[19,82813,82814,82816,82817,82822,82823,82826,82827,82829,82830,82835,82836,82838,82839,82841,82842,82844,82845],{},[32,82815,82781],{}," 方法是一个",[2006,82818,82821],{"href":82819,"rel":82820},"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",[25442],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[32,82824,82825],{},"callbackFn"," 函数，直到 ",[32,82828,82825],{}," 返回一个",[2006,82831,82834],{"href":82832,"rel":82833},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[25442],"真值","。然后 ",[32,82837,82781],{}," 返回该元素并停止迭代数组。如果 ",[32,82840,82825],{}," 从未返回真值，则 ",[32,82843,82781],{}," 返回 ",[32,82846,82847],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[73,82849,82851],{"className":54621,"code":82850,"language":54623,"meta":79,"style":79},"\u003Cbody>\n  \u003Cscript>\n    const arr = ['red', 'blue', 'green']\n    const found = arr.find(item => item === 'pink')\n    console.log(found)   \u002F\u002F没有，输出undefined\n\n    \u002F\u002F 使用场景，用于查找数据\n    const arr1 = [\n      {\n        name: '小米',\n        price: 1999\n      },\n      {\n        name: '华为',\n        price: 3999\n      }\n    ]\n    \u002F\u002F 这小米这个对象，并且返回这个对象\n    \u002F\u002F const found1 = arr1.find(item => {\n    \u002F\u002F   if (item.name === '小米') {\n    \u002F\u002F     return item\n    \u002F\u002F   }\n    \u002F\u002F })\n    \u002F\u002F 另一种写法\n    const found1 = arr1.find(item => {\n      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n      return item.name = '小米'\n    })\n    console.log(found1)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n",[32,82852,82853,82861,82869,82874,82879,82884,82888,82893,82898,82902,82907,82912,82916,82920,82925,82930,82934,82938,82943,82948,82953,82958,82963,82967,82972,82977,82982,82987,82991,82996,83004],{"__ignoreMap":79},[100,82854,82855,82857,82859],{"class":102,"line":103},[100,82856,2676],{"class":258},[100,82858,53354],{"class":52854},[100,82860,52861],{"class":258},[100,82862,82863,82865,82867],{"class":102,"line":188},[100,82864,53698],{"class":258},[100,82866,53367],{"class":52854},[100,82868,52861],{"class":258},[100,82870,82871],{"class":102,"line":199},[100,82872,82873],{"class":258},"    const arr = ['red', 'blue', 'green']\n",[100,82875,82876],{"class":102,"line":532},[100,82877,82878],{"class":258},"    const found = arr.find(item => item === 'pink')\n",[100,82880,82881],{"class":102,"line":577},[100,82882,82883],{"class":258},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[100,82885,82886],{"class":102,"line":589},[100,82887,570],{"emptyLinePlaceholder":569},[100,82889,82890],{"class":102,"line":595},[100,82891,82892],{"class":258},"    \u002F\u002F 使用场景，用于查找数据\n",[100,82894,82895],{"class":102,"line":601},[100,82896,82897],{"class":258},"    const arr1 = [\n",[100,82899,82900],{"class":102,"line":606},[100,82901,80940],{"class":258},[100,82903,82904],{"class":102,"line":612},[100,82905,82906],{"class":258},"        name: '小米',\n",[100,82908,82909],{"class":102,"line":618},[100,82910,82911],{"class":258},"        price: 1999\n",[100,82913,82914],{"class":102,"line":623},[100,82915,79446],{"class":258},[100,82917,82918],{"class":102,"line":629},[100,82919,80940],{"class":258},[100,82921,82922],{"class":102,"line":635},[100,82923,82924],{"class":258},"        name: '华为',\n",[100,82926,82927],{"class":102,"line":641},[100,82928,82929],{"class":258},"        price: 3999\n",[100,82931,82932],{"class":102,"line":647},[100,82933,53952],{"class":258},[100,82935,82936],{"class":102,"line":653},[100,82937,54663],{"class":258},[100,82939,82940],{"class":102,"line":659},[100,82941,82942],{"class":258},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[100,82944,82945],{"class":102,"line":665},[100,82946,82947],{"class":258},"    \u002F\u002F const found1 = arr1.find(item => {\n",[100,82949,82950],{"class":102,"line":670},[100,82951,82952],{"class":258},"    \u002F\u002F   if (item.name === '小米') {\n",[100,82954,82955],{"class":102,"line":675},[100,82956,82957],{"class":258},"    \u002F\u002F     return item\n",[100,82959,82960],{"class":102,"line":699},[100,82961,82962],{"class":258},"    \u002F\u002F   }\n",[100,82964,82965],{"class":102,"line":708},[100,82966,64844],{"class":258},[100,82968,82969],{"class":102,"line":722},[100,82970,82971],{"class":258},"    \u002F\u002F 另一种写法\n",[100,82973,82974],{"class":102,"line":735},[100,82975,82976],{"class":258},"    const found1 = arr1.find(item => {\n",[100,82978,82979],{"class":102,"line":754},[100,82980,82981],{"class":258},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[100,82983,82984],{"class":102,"line":771},[100,82985,82986],{"class":258},"      return item.name = '小米'\n",[100,82988,82989],{"class":102,"line":776},[100,82990,35016],{"class":258},[100,82992,82993],{"class":102,"line":781},[100,82994,82995],{"class":258},"    console.log(found1)\n",[100,82997,82998,83000,83002],{"class":102,"line":796},[100,82999,53971],{"class":258},[100,83001,53367],{"class":52854},[100,83003,52861],{"class":258},[100,83005,83006,83008,83010],{"class":102,"line":812},[100,83007,53339],{"class":258},[100,83009,53354],{"class":52854},[100,83011,52861],{"class":258},[19,83013,83014],{},[3095,83015],{"alt":79,"src":83016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,83018,83019],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[26,83021,83022],{"start":188},[29,83023,83024],{},"every()返回的是布尔值",[19,83026,83027],{},[2006,83028,83031],{"href":83029,"rel":83030},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[25442],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,83033,83034],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,83036,83037],{},"some是只有有一个就没问题",[19,83039,83040],{},"every是必须全是才行",[73,83042,83046],{"className":83043,"code":83044,"language":83045,"meta":79,"style":79},"language-sql shiki shiki-themes github-light github-dark","function isBigEnough(element, index, array) {\n  return element >= 10;\n}\n[12, 5, 8, 130, 44].every(isBigEnough); \u002F\u002F false\n[12, 54, 18, 130, 44].every(isBigEnough); \u002F\u002F true\n","sql",[32,83047,83048,83064,83078,83082,83091],{"__ignoreMap":79},[100,83049,83050,83052,83055,83057,83059,83062],{"class":102,"line":103},[100,83051,56003],{"class":471},[100,83053,83054],{"class":258}," isBigEnough(element, ",[100,83056,75612],{"class":471},[100,83058,14017],{"class":258},[100,83060,83061],{"class":471},"array",[100,83063,14024],{"class":258},[100,83065,83066,83069,83072,83074,83076],{"class":102,"line":188},[100,83067,83068],{"class":471},"  return",[100,83070,83071],{"class":258}," element ",[100,83073,3331],{"class":471},[100,83075,3649],{"class":117},[100,83077,2927],{"class":258},[100,83079,83080],{"class":102,"line":199},[100,83081,3197],{"class":258},[100,83083,83084,83087,83089],{"class":102,"line":532},[100,83085,83086],{"class":258},"[12, 5, 8, 130, 44].every(isBigEnough); ",[100,83088,34885],{"class":471},[100,83090,56070],{"class":258},[100,83092,83093,83096,83098],{"class":102,"line":577},[100,83094,83095],{"class":258},"[12, 54, 18, 130, 44].every(isBigEnough); ",[100,83097,34885],{"class":471},[100,83099,59494],{"class":258},[73,83101,83103],{"className":54621,"code":83102,"language":54623,"meta":79,"style":79},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n    const arr = [10, 20, 30]\n    const flag = arr.every(item => item >= 10)\n    console.log(flag)    \u002F\u002Ftrue\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[32,83104,83105,83113,83121,83126,83130,83135,83140,83148],{"__ignoreMap":79},[100,83106,83107,83109,83111],{"class":102,"line":103},[100,83108,2676],{"class":258},[100,83110,53354],{"class":52854},[100,83112,52861],{"class":258},[100,83114,83115,83117,83119],{"class":102,"line":188},[100,83116,53698],{"class":258},[100,83118,53367],{"class":52854},[100,83120,52861],{"class":258},[100,83122,83123],{"class":102,"line":199},[100,83124,83125],{"class":258},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[100,83127,83128],{"class":102,"line":532},[100,83129,79876],{"class":258},[100,83131,83132],{"class":102,"line":577},[100,83133,83134],{"class":258},"    const flag = arr.every(item => item >= 10)\n",[100,83136,83137],{"class":102,"line":589},[100,83138,83139],{"class":258},"    console.log(flag)    \u002F\u002Ftrue\n",[100,83141,83142,83144,83146],{"class":102,"line":595},[100,83143,53971],{"class":258},[100,83145,53367],{"class":52854},[100,83147,52861],{"class":258},[100,83149,83150,83152,83154],{"class":102,"line":601},[100,83151,53339],{"class":258},[100,83153,53354],{"class":52854},[100,83155,52861],{"class":258},[73,83157,83159],{"className":54621,"code":83158,"language":54623,"meta":79,"style":79},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n    const arr = [10, 0, 5]\n    const flag = arr.some(item => item >= 10)\n    console.log(flag)   \u002F\u002Ftrue\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[32,83160,83161,83169,83177,83181,83186,83191,83196,83204],{"__ignoreMap":79},[100,83162,83163,83165,83167],{"class":102,"line":103},[100,83164,2676],{"class":258},[100,83166,53354],{"class":52854},[100,83168,52861],{"class":258},[100,83170,83171,83173,83175],{"class":102,"line":188},[100,83172,53698],{"class":258},[100,83174,53367],{"class":52854},[100,83176,52861],{"class":258},[100,83178,83179],{"class":102,"line":199},[100,83180,83125],{"class":258},[100,83182,83183],{"class":102,"line":532},[100,83184,83185],{"class":258},"    const arr = [10, 0, 5]\n",[100,83187,83188],{"class":102,"line":577},[100,83189,83190],{"class":258},"    const flag = arr.some(item => item >= 10)\n",[100,83192,83193],{"class":102,"line":589},[100,83194,83195],{"class":258},"    console.log(flag)   \u002F\u002Ftrue\n",[100,83197,83198,83200,83202],{"class":102,"line":595},[100,83199,53971],{"class":258},[100,83201,53367],{"class":52854},[100,83203,52861],{"class":258},[100,83205,83206,83208,83210],{"class":102,"line":601},[100,83207,53339],{"class":258},[100,83209,53354],{"class":52854},[100,83211,52861],{"class":258},[24491,83213,83215],{"id":83214},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,83217,83218],{},[3095,83219],{"alt":79,"src":83220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[73,83222,83224],{"className":52187,"code":83223,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    div {\n      width: 200px;\n      height: 40px;\n      line-height: 40px;\n      font: 12px;\n      text-align: center;\n      background-color: pink;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv>\u003C\u002Fdiv>\n  \u003Cscript>\n    const spec = { size: '40cm*40cm', color: '黑色' }\n    \u002F\u002F const arr = Object.values(spec)\n    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n    document.querySelector('div').innerHTML = Object.values(spec).join('\u002F')\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,83225,83226,83236,83250,83254,83262,83276,83296,83308,83316,83323,83335,83347,83359,83371,83381,83391,83395,83403,83411,83415,83423,83435,83443,83465,83470,83475,83508,83516,83524,83528],{"__ignoreMap":79},[100,83227,83228,83230,83232,83234],{"class":102,"line":103},[100,83229,52851],{"class":258},[100,83231,52855],{"class":52854},[100,83233,52858],{"class":106},[100,83235,52861],{"class":258},[100,83237,83238,83240,83242,83244,83246,83248],{"class":102,"line":188},[100,83239,2676],{"class":258},[100,83241,52189],{"class":52854},[100,83243,52870],{"class":106},[100,83245,472],{"class":258},[100,83247,52875],{"class":110},[100,83249,52861],{"class":258},[100,83251,83252],{"class":102,"line":199},[100,83253,570],{"emptyLinePlaceholder":569},[100,83255,83256,83258,83260],{"class":102,"line":532},[100,83257,2676],{"class":258},[100,83259,52888],{"class":52854},[100,83261,52861],{"class":258},[100,83263,83264,83266,83268,83270,83272,83274],{"class":102,"line":577},[100,83265,53698],{"class":258},[100,83267,52898],{"class":52854},[100,83269,52901],{"class":106},[100,83271,472],{"class":258},[100,83273,52906],{"class":110},[100,83275,52861],{"class":258},[100,83277,83278,83280,83282,83284,83286,83288,83290,83292,83294],{"class":102,"line":589},[100,83279,53698],{"class":258},[100,83281,52898],{"class":52854},[100,83283,16501],{"class":106},[100,83285,472],{"class":258},[100,83287,52945],{"class":110},[100,83289,52925],{"class":106},[100,83291,472],{"class":258},[100,83293,52952],{"class":110},[100,83295,52861],{"class":258},[100,83297,83298,83300,83302,83304,83306],{"class":102,"line":595},[100,83299,53698],{"class":258},[100,83301,52961],{"class":52854},[100,83303,52964],{"class":258},[100,83305,52961],{"class":52854},[100,83307,52861],{"class":258},[100,83309,83310,83312,83314],{"class":102,"line":601},[100,83311,53698],{"class":258},[100,83313,1677],{"class":52854},[100,83315,52861],{"class":258},[100,83317,83318,83321],{"class":102,"line":606},[100,83319,83320],{"class":52854},"    div",[100,83322,17153],{"class":258},[100,83324,83325,83327,83329,83331,83333],{"class":102,"line":612},[100,83326,56325],{"class":117},[100,83328,52991],{"class":258},[100,83330,3343],{"class":117},[100,83332,53046],{"class":471},[100,83334,2927],{"class":258},[100,83336,83337,83339,83341,83343,83345],{"class":102,"line":618},[100,83338,56339],{"class":117},[100,83340,52991],{"class":258},[100,83342,2168],{"class":117},[100,83344,53046],{"class":471},[100,83346,2927],{"class":258},[100,83348,83349,83351,83353,83355,83357],{"class":102,"line":623},[100,83350,58913],{"class":117},[100,83352,52991],{"class":258},[100,83354,2168],{"class":117},[100,83356,53046],{"class":471},[100,83358,2927],{"class":258},[100,83360,83361,83363,83365,83367,83369],{"class":102,"line":629},[100,83362,66687],{"class":117},[100,83364,52991],{"class":258},[100,83366,2265],{"class":117},[100,83368,53046],{"class":471},[100,83370,2927],{"class":258},[100,83372,83373,83375,83377,83379],{"class":102,"line":635},[100,83374,58840],{"class":117},[100,83376,52991],{"class":258},[100,83378,53146],{"class":117},[100,83380,2927],{"class":258},[100,83382,83383,83385,83387,83389],{"class":102,"line":641},[100,83384,56438],{"class":117},[100,83386,52991],{"class":258},[100,83388,53199],{"class":117},[100,83390,2927],{"class":258},[100,83392,83393],{"class":102,"line":647},[100,83394,3798],{"class":258},[100,83396,83397,83399,83401],{"class":102,"line":653},[100,83398,53971],{"class":258},[100,83400,1677],{"class":52854},[100,83402,52861],{"class":258},[100,83404,83405,83407,83409],{"class":102,"line":659},[100,83406,53339],{"class":258},[100,83408,52888],{"class":52854},[100,83410,52861],{"class":258},[100,83412,83413],{"class":102,"line":665},[100,83414,570],{"emptyLinePlaceholder":569},[100,83416,83417,83419,83421],{"class":102,"line":670},[100,83418,2676],{"class":258},[100,83420,53354],{"class":52854},[100,83422,52861],{"class":258},[100,83424,83425,83427,83429,83431,83433],{"class":102,"line":675},[100,83426,53698],{"class":258},[100,83428,53165],{"class":52854},[100,83430,56868],{"class":258},[100,83432,53165],{"class":52854},[100,83434,52861],{"class":258},[100,83436,83437,83439,83441],{"class":102,"line":699},[100,83438,53698],{"class":258},[100,83440,53367],{"class":52854},[100,83442,52861],{"class":258},[100,83444,83445,83447,83450,83452,83455,83458,83460,83463],{"class":102,"line":708},[100,83446,12803],{"class":471},[100,83448,83449],{"class":117}," spec",[100,83451,583],{"class":471},[100,83453,83454],{"class":258}," { size: ",[100,83456,83457],{"class":110},"'40cm*40cm'",[100,83459,57018],{"class":258},[100,83461,83462],{"class":110},"'黑色'",[100,83464,57158],{"class":258},[100,83466,83467],{"class":102,"line":722},[100,83468,83469],{"class":1836},"    \u002F\u002F const arr = Object.values(spec)\n",[100,83471,83472],{"class":102,"line":735},[100,83473,83474],{"class":1836},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[100,83476,83477,83479,83481,83483,83486,83488,83490,83493,83496,83499,83501,83503,83506],{"class":102,"line":754},[100,83478,53961],{"class":258},[100,83480,55953],{"class":106},[100,83482,713],{"class":258},[100,83484,83485],{"class":110},"'div'",[100,83487,75803],{"class":258},[100,83489,472],{"class":471},[100,83491,83492],{"class":258}," Object.",[100,83494,83495],{"class":106},"values",[100,83497,83498],{"class":258},"(spec).",[100,83500,75777],{"class":106},[100,83502,713],{"class":258},[100,83504,83505],{"class":110},"'\u002F'",[100,83507,809],{"class":258},[100,83509,83510,83512,83514],{"class":102,"line":771},[100,83511,53971],{"class":258},[100,83513,53367],{"class":52854},[100,83515,52861],{"class":258},[100,83517,83518,83520,83522],{"class":102,"line":776},[100,83519,53339],{"class":258},[100,83521,53354],{"class":52854},[100,83523,52861],{"class":258},[100,83525,83526],{"class":102,"line":781},[100,83527,570],{"emptyLinePlaceholder":569},[100,83529,83530,83532,83534],{"class":102,"line":796},[100,83531,53339],{"class":258},[100,83533,52189],{"class":52854},[100,83535,52861],{"class":258},[19,83537,83538],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[24491,83540,83542],{"id":83541},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,83544,83545],{},"静态方法，将伪数组转换为真数组",[19,83547,83548],{},[3095,83549],{"alt":79,"src":83550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[73,83552,83554],{"className":54621,"code":83553,"language":54623,"meta":79,"style":79},"\u003Cbody>\n  \u003Cul>\n    \u003Cli>\u003C\u002Fli>\n    \u003Cli>\u003C\u002Fli>\n    \u003Cli>\u003C\u002Fli>\n  \u003C\u002Ful>\n  \u003Cscript>\n    const lis = document.querySelectorAll('li')\n    const liss = Array.from(lis)\n    liss.pop()\n    console.log(liss)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[32,83555,83556,83564,83572,83584,83596,83608,83616,83624,83629,83634,83639,83644,83652],{"__ignoreMap":79},[100,83557,83558,83560,83562],{"class":102,"line":103},[100,83559,2676],{"class":258},[100,83561,53354],{"class":52854},[100,83563,52861],{"class":258},[100,83565,83566,83568,83570],{"class":102,"line":188},[100,83567,53698],{"class":258},[100,83569,2773],{"class":52854},[100,83571,52861],{"class":258},[100,83573,83574,83576,83578,83580,83582],{"class":102,"line":199},[100,83575,52895],{"class":258},[100,83577,29],{"class":52854},[100,83579,56868],{"class":258},[100,83581,29],{"class":52854},[100,83583,52861],{"class":258},[100,83585,83586,83588,83590,83592,83594],{"class":102,"line":532},[100,83587,52895],{"class":258},[100,83589,29],{"class":52854},[100,83591,56868],{"class":258},[100,83593,29],{"class":52854},[100,83595,52861],{"class":258},[100,83597,83598,83600,83602,83604,83606],{"class":102,"line":577},[100,83599,52895],{"class":258},[100,83601,29],{"class":52854},[100,83603,56868],{"class":258},[100,83605,29],{"class":52854},[100,83607,52861],{"class":258},[100,83609,83610,83612,83614],{"class":102,"line":589},[100,83611,53971],{"class":258},[100,83613,2773],{"class":52854},[100,83615,52861],{"class":258},[100,83617,83618,83620,83622],{"class":102,"line":595},[100,83619,53698],{"class":258},[100,83621,53367],{"class":52854},[100,83623,52861],{"class":258},[100,83625,83626],{"class":102,"line":601},[100,83627,83628],{"class":258},"    const lis = document.querySelectorAll('li')\n",[100,83630,83631],{"class":102,"line":606},[100,83632,83633],{"class":258},"    const liss = Array.from(lis)\n",[100,83635,83636],{"class":102,"line":612},[100,83637,83638],{"class":258},"    liss.pop()\n",[100,83640,83641],{"class":102,"line":618},[100,83642,83643],{"class":258},"    console.log(liss)\n",[100,83645,83646,83648,83650],{"class":102,"line":623},[100,83647,53971],{"class":258},[100,83649,53367],{"class":52854},[100,83651,52861],{"class":258},[100,83653,83654,83656,83658],{"class":102,"line":629},[100,83655,53339],{"class":258},[100,83657,53354],{"class":52854},[100,83659,52861],{"class":258},[19,83661,83662],{},[3095,83663],{"alt":79,"src":83664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[23579,83666,83668],{"id":83667},"_41053-string","4.10.5.3 String",[19,83670,83671],{},[3095,83672],{"alt":79,"src":83673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[24491,83675,83677],{"id":83676},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[73,83679,83681],{"className":54621,"code":83680,"language":54623,"meta":79,"style":79},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F 把字符串转化为数组\n    const str = 'pink,red'\n    const arr = str.split(',')\n    console.log(arr)\n    const str1 = '2025-8-25'\n    const arr1 = str1.split('-')\n    console.log(arr1)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[32,83682,83683,83691,83699,83704,83709,83714,83718,83723,83728,83733,83741],{"__ignoreMap":79},[100,83684,83685,83687,83689],{"class":102,"line":103},[100,83686,2676],{"class":258},[100,83688,53354],{"class":52854},[100,83690,52861],{"class":258},[100,83692,83693,83695,83697],{"class":102,"line":188},[100,83694,53698],{"class":258},[100,83696,53367],{"class":52854},[100,83698,52861],{"class":258},[100,83700,83701],{"class":102,"line":199},[100,83702,83703],{"class":258},"    \u002F\u002F 把字符串转化为数组\n",[100,83705,83706],{"class":102,"line":532},[100,83707,83708],{"class":258},"    const str = 'pink,red'\n",[100,83710,83711],{"class":102,"line":577},[100,83712,83713],{"class":258},"    const arr = str.split(',')\n",[100,83715,83716],{"class":102,"line":589},[100,83717,82192],{"class":258},[100,83719,83720],{"class":102,"line":595},[100,83721,83722],{"class":258},"    const str1 = '2025-8-25'\n",[100,83724,83725],{"class":102,"line":601},[100,83726,83727],{"class":258},"    const arr1 = str1.split('-')\n",[100,83729,83730],{"class":102,"line":606},[100,83731,83732],{"class":258},"    console.log(arr1)\n",[100,83734,83735,83737,83739],{"class":102,"line":612},[100,83736,53971],{"class":258},[100,83738,53367],{"class":52854},[100,83740,52861],{"class":258},[100,83742,83743,83745,83747],{"class":102,"line":618},[100,83744,53339],{"class":258},[100,83746,53354],{"class":52854},[100,83748,52861],{"class":258},[24491,83750,83752],{"id":83751},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,83754,6779],{},[19,83756,83757],{},"substring(indexStart)",[19,83759,83760],{},"substring(indexStart, indexEnd)",[2773,83762,83763,83774,83786,83796],{},[29,83764,83765,83766,83769,83770,83773],{},"如果省略了 ",[32,83767,83768],{},"indexEnd","，则 ",[32,83771,83772],{},"substring()"," 提取字符直到字符串的末尾",[29,83775,83776,83777,83780,83781,83769,83783,83785],{},"如果 ",[32,83778,83779],{},"indexStart"," 等于 ",[32,83782,83768],{},[32,83784,83772],{}," 返回一个空字符串",[29,83787,83776,83788,83790,83791,83769,83793,83795],{},[32,83789,83779],{}," 大于 ",[32,83792,83768],{},[32,83794,83772],{}," 的效果就像交换了这两个参数一样",[29,83797,83798],{},"结束的索引号不包含想要截取的部分",[73,83800,83802],{"className":83043,"code":83801,"language":83045,"meta":79,"style":79},"const anyString = \"Mozilla\";\n\nconsole.log(anyString.substring(0, 1))  \u002F\u002F 'M'\nconsole.log(anyString.substring(1, 0))  \u002F\u002F 'M'\n\nconsole.log(anyString.substring(0, 6))  \u002F\u002F 'Mozill'\n\nconsole.log(anyString.substring(4))  \u002F\u002F 'lla'\nconsole.log(anyString.substring(4, 7))   \u002F\u002F 'lla'\nconsole.log(anyString.substring(7, 4))  \u002F\u002F 'lla'\n\nconsole.log(anyString.substring(0, 7))  \u002F\u002F 'Mozilla'\nconsole.log(anyString.substring(0, 10))  \u002F\u002F 'Mozilla'\n",[32,83803,83804,83816,83820,83854,83884,83888,83919,83923,83950,83980,84010,84014,84045],{"__ignoreMap":79},[100,83805,83806,83809,83811,83814],{"class":102,"line":103},[100,83807,83808],{"class":258},"const anyString ",[100,83810,472],{"class":471},[100,83812,83813],{"class":110}," \"Mozilla\"",[100,83815,2927],{"class":258},[100,83817,83818],{"class":102,"line":188},[100,83819,570],{"emptyLinePlaceholder":569},[100,83821,83822,83825,83827,83829,83831,83834,83836,83839,83841,83843,83845,83847,83849,83851],{"class":102,"line":199},[100,83823,83824],{"class":117},"console",[100,83826,2325],{"class":258},[100,83828,59801],{"class":117},[100,83830,713],{"class":258},[100,83832,83833],{"class":117},"anyString",[100,83835,2325],{"class":258},[100,83837,83838],{"class":117},"substring",[100,83840,713],{"class":258},[100,83842,1366],{"class":117},[100,83844,14017],{"class":258},[100,83846,1985],{"class":117},[100,83848,76807],{"class":258},[100,83850,34885],{"class":471},[100,83852,83853],{"class":110}," 'M'\n",[100,83855,83856,83858,83860,83862,83864,83866,83868,83870,83872,83874,83876,83878,83880,83882],{"class":102,"line":532},[100,83857,83824],{"class":117},[100,83859,2325],{"class":258},[100,83861,59801],{"class":117},[100,83863,713],{"class":258},[100,83865,83833],{"class":117},[100,83867,2325],{"class":258},[100,83869,83838],{"class":117},[100,83871,713],{"class":258},[100,83873,1985],{"class":117},[100,83875,14017],{"class":258},[100,83877,1366],{"class":117},[100,83879,76807],{"class":258},[100,83881,34885],{"class":471},[100,83883,83853],{"class":110},[100,83885,83886],{"class":102,"line":577},[100,83887,570],{"emptyLinePlaceholder":569},[100,83889,83890,83892,83894,83896,83898,83900,83902,83904,83906,83908,83910,83912,83914,83916],{"class":102,"line":589},[100,83891,83824],{"class":117},[100,83893,2325],{"class":258},[100,83895,59801],{"class":117},[100,83897,713],{"class":258},[100,83899,83833],{"class":117},[100,83901,2325],{"class":258},[100,83903,83838],{"class":117},[100,83905,713],{"class":258},[100,83907,1366],{"class":117},[100,83909,14017],{"class":258},[100,83911,2111],{"class":117},[100,83913,76807],{"class":258},[100,83915,34885],{"class":471},[100,83917,83918],{"class":110}," 'Mozill'\n",[100,83920,83921],{"class":102,"line":595},[100,83922,570],{"emptyLinePlaceholder":569},[100,83924,83925,83927,83929,83931,83933,83935,83937,83939,83941,83943,83945,83947],{"class":102,"line":601},[100,83926,83824],{"class":117},[100,83928,2325],{"class":258},[100,83930,59801],{"class":117},[100,83932,713],{"class":258},[100,83934,83833],{"class":117},[100,83936,2325],{"class":258},[100,83938,83838],{"class":117},[100,83940,713],{"class":258},[100,83942,748],{"class":117},[100,83944,76807],{"class":258},[100,83946,34885],{"class":471},[100,83948,83949],{"class":110}," 'lla'\n",[100,83951,83952,83954,83956,83958,83960,83962,83964,83966,83968,83970,83972,83974,83976,83978],{"class":102,"line":606},[100,83953,83824],{"class":117},[100,83955,2325],{"class":258},[100,83957,59801],{"class":117},[100,83959,713],{"class":258},[100,83961,83833],{"class":117},[100,83963,2325],{"class":258},[100,83965,83838],{"class":117},[100,83967,713],{"class":258},[100,83969,748],{"class":117},[100,83971,14017],{"class":258},[100,83973,2136],{"class":117},[100,83975,76863],{"class":258},[100,83977,34885],{"class":471},[100,83979,83949],{"class":110},[100,83981,83982,83984,83986,83988,83990,83992,83994,83996,83998,84000,84002,84004,84006,84008],{"class":102,"line":612},[100,83983,83824],{"class":117},[100,83985,2325],{"class":258},[100,83987,59801],{"class":117},[100,83989,713],{"class":258},[100,83991,83833],{"class":117},[100,83993,2325],{"class":258},[100,83995,83838],{"class":117},[100,83997,713],{"class":258},[100,83999,2136],{"class":117},[100,84001,14017],{"class":258},[100,84003,748],{"class":117},[100,84005,76807],{"class":258},[100,84007,34885],{"class":471},[100,84009,83949],{"class":110},[100,84011,84012],{"class":102,"line":618},[100,84013,570],{"emptyLinePlaceholder":569},[100,84015,84016,84018,84020,84022,84024,84026,84028,84030,84032,84034,84036,84038,84040,84042],{"class":102,"line":623},[100,84017,83824],{"class":117},[100,84019,2325],{"class":258},[100,84021,59801],{"class":117},[100,84023,713],{"class":258},[100,84025,83833],{"class":117},[100,84027,2325],{"class":258},[100,84029,83838],{"class":117},[100,84031,713],{"class":258},[100,84033,1366],{"class":117},[100,84035,14017],{"class":258},[100,84037,2136],{"class":117},[100,84039,76807],{"class":258},[100,84041,34885],{"class":471},[100,84043,84044],{"class":110}," 'Mozilla'\n",[100,84046,84047,84049,84051,84053,84055,84057,84059,84061,84063,84065,84067,84069,84071,84073],{"class":102,"line":629},[100,84048,83824],{"class":117},[100,84050,2325],{"class":258},[100,84052,59801],{"class":117},[100,84054,713],{"class":258},[100,84056,83833],{"class":117},[100,84058,2325],{"class":258},[100,84060,83838],{"class":117},[100,84062,713],{"class":258},[100,84064,1366],{"class":117},[100,84066,14017],{"class":258},[100,84068,2213],{"class":117},[100,84070,76807],{"class":258},[100,84072,34885],{"class":471},[100,84074,84044],{"class":110},[24491,84076,84078],{"id":84077},"_410533-startswith","4.10.5.3.3 startsWith",[19,84080,84081,1555,84084,84089,84090,288,84092],{},[32,84082,84083],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)",[1921,84085,84086],{},[32,84087,84088],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[32,84091,2995],{},[32,84093,67574],{},[73,84095,84097],{"className":79049,"code":84096,"language":79051,"meta":79,"style":79},"const str1 = \"Saturday night plans\"\nconsole.log(str1.startsWith(\"Sat\"))\n\u002F\u002F Expected output: true\nconsole.log(str1.startsWith(\"Sat\", 3))\n\u002F\u002F Expected output: false\n",[32,84098,84099,84111,84130,84135,84155],{"__ignoreMap":79},[100,84100,84101,84103,84106,84108],{"class":102,"line":103},[100,84102,8388],{"class":471},[100,84104,84105],{"class":258}," str1 ",[100,84107,472],{"class":471},[100,84109,84110],{"class":110}," \"Saturday night plans\"\n",[100,84112,84113,84115,84117,84120,84123,84125,84128],{"class":102,"line":188},[100,84114,79086],{"class":258},[100,84116,59801],{"class":106},[100,84118,84119],{"class":258},"(str1.",[100,84121,84122],{"class":106},"startsWith",[100,84124,713],{"class":258},[100,84126,84127],{"class":110},"\"Sat\"",[100,84129,751],{"class":258},[100,84131,84132],{"class":102,"line":199},[100,84133,84134],{"class":1836},"\u002F\u002F Expected output: true\n",[100,84136,84137,84139,84141,84143,84145,84147,84149,84151,84153],{"class":102,"line":532},[100,84138,79086],{"class":258},[100,84140,59801],{"class":106},[100,84142,84119],{"class":258},[100,84144,84122],{"class":106},[100,84146,713],{"class":258},[100,84148,84127],{"class":110},[100,84150,14017],{"class":258},[100,84152,1849],{"class":117},[100,84154,751],{"class":258},[100,84156,84157],{"class":102,"line":577},[100,84158,84159],{"class":1836},"\u002F\u002F Expected output: false\n",[73,84161,84163],{"className":52187,"code":84162,"language":52189,"meta":79,"style":79},"startsWith(searchString)\nstartsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n\nconst str3 = 'pink老师上课中'\nconsole.log(str3.startsWith('pink'))   \u002F\u002Ftrue\nconsole.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[32,84164,84165,84170,84175,84179,84184,84189],{"__ignoreMap":79},[100,84166,84167],{"class":102,"line":103},[100,84168,84169],{"class":258},"startsWith(searchString)\n",[100,84171,84172],{"class":102,"line":188},[100,84173,84174],{"class":258},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[100,84176,84177],{"class":102,"line":199},[100,84178,570],{"emptyLinePlaceholder":569},[100,84180,84181],{"class":102,"line":532},[100,84182,84183],{"class":258},"const str3 = 'pink老师上课中'\n",[100,84185,84186],{"class":102,"line":577},[100,84187,84188],{"class":258},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[100,84190,84191],{"class":102,"line":589},[100,84192,84193],{"class":258},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[24491,84195,84197],{"id":84196},"_410534-includes","4.10.5.3.4 includes",[19,84199,84200],{},"includes(searchString) includes(searchString, position)",[26,84202,84203],{},[29,84204,84205],{},"searchString:",[19,84207,84208,84209,84211,84212,84217,84218,84223,84224,23081,84227,84230,84231,84234],{},"一个要在 ",[32,84210,687],{}," 中查找的字符串。",[2006,84213,84216],{"href":84214,"rel":84215},"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",[25442],"不能是正则表达式","。所有非正则表达式的值都会被",[2006,84219,84222],{"href":84220,"rel":84221},"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",[25442],"强制转换为字符串","，因此如果该参数被省略或传入 ",[32,84225,84226],{},"undefined",[32,84228,84229],{},"includes()"," 方法会在字符串中搜索 ",[32,84232,84233],{},"\"undefined\"","，这通常不是你想要的",[26,84236,84237],{"start":188},[29,84238,84239,2625],{},[32,84240,84241],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,84243,84244,84245,84248,84249],{},"在字符串中开始搜索 ",[32,84246,84247],{},"searchString"," 的位置。默认值为 ",[32,84250,1366],{},[26,84252,84253],{"start":199},[29,84254,84255],{},"返回值：",[19,84257,84258,84259,84261,84262,84266,84267],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[32,84260,84247],{}," 为空字符串的情况），则返回 ",[1921,84263,84264],{},[32,84265,2995],{}," ，否则返回 ",[1921,84268,84269],{},[32,84270,67574],{},[26,84272,84273],{"start":532},[29,84274,84275],{},"异常：",[19,84277,83776,84278,15376,84280,84284],{},[32,84279,84247],{},[2006,84281,84283],{"href":84214,"rel":84282},[25442],"是一个正则表达式","，则会抛出",[19,84286,84287],{},"只要是有就是true，不需要非得以谁开头结尾",[73,84289,84291],{"className":79049,"code":84290,"language":79051,"meta":79,"style":79},"const str = \"To be, or not to be, that is the question.\"\nconsole.log(str.includes(\"To be\"))  \u002F\u002F true\nconsole.log(str.includes(\"question\"))  \u002F\u002F true\nconsole.log(str.includes(\"nonexistent\"))  \u002F\u002F false\nconsole.log(str.includes(\"To be\", 1))  \u002F\u002F false\nconsole.log(str.includes(\"TO BE\"))  \u002F\u002F false\nconsole.log(str.includes(\"\"))  \u002F\u002F true\n",[32,84292,84293,84304,84327,84346,84366,84388,84407],{"__ignoreMap":79},[100,84294,84295,84297,84299,84301],{"class":102,"line":103},[100,84296,8388],{"class":471},[100,84298,81329],{"class":258},[100,84300,472],{"class":471},[100,84302,84303],{"class":110}," \"To be, or not to be, that is the question.\"\n",[100,84305,84306,84308,84310,84313,84316,84318,84321,84324],{"class":102,"line":188},[100,84307,79086],{"class":258},[100,84309,59801],{"class":106},[100,84311,84312],{"class":258},"(str.",[100,84314,84315],{"class":106},"includes",[100,84317,713],{"class":258},[100,84319,84320],{"class":110},"\"To be\"",[100,84322,84323],{"class":258},"))",[100,84325,84326],{"class":1836},"  \u002F\u002F true\n",[100,84328,84329,84331,84333,84335,84337,84339,84342,84344],{"class":102,"line":199},[100,84330,79086],{"class":258},[100,84332,59801],{"class":106},[100,84334,84312],{"class":258},[100,84336,84315],{"class":106},[100,84338,713],{"class":258},[100,84340,84341],{"class":110},"\"question\"",[100,84343,84323],{"class":258},[100,84345,84326],{"class":1836},[100,84347,84348,84350,84352,84354,84356,84358,84361,84363],{"class":102,"line":532},[100,84349,79086],{"class":258},[100,84351,59801],{"class":106},[100,84353,84312],{"class":258},[100,84355,84315],{"class":106},[100,84357,713],{"class":258},[100,84359,84360],{"class":110},"\"nonexistent\"",[100,84362,84323],{"class":258},[100,84364,84365],{"class":1836},"  \u002F\u002F false\n",[100,84367,84368,84370,84372,84374,84376,84378,84380,84382,84384,84386],{"class":102,"line":577},[100,84369,79086],{"class":258},[100,84371,59801],{"class":106},[100,84373,84312],{"class":258},[100,84375,84315],{"class":106},[100,84377,713],{"class":258},[100,84379,84320],{"class":110},[100,84381,14017],{"class":258},[100,84383,1985],{"class":117},[100,84385,84323],{"class":258},[100,84387,84365],{"class":1836},[100,84389,84390,84392,84394,84396,84398,84400,84403,84405],{"class":102,"line":589},[100,84391,79086],{"class":258},[100,84393,59801],{"class":106},[100,84395,84312],{"class":258},[100,84397,84315],{"class":106},[100,84399,713],{"class":258},[100,84401,84402],{"class":110},"\"TO BE\"",[100,84404,84323],{"class":258},[100,84406,84365],{"class":1836},[100,84408,84409,84411,84413,84415,84417,84419,84421,84423],{"class":102,"line":595},[100,84410,79086],{"class":258},[100,84412,59801],{"class":106},[100,84414,84312],{"class":258},[100,84416,84315],{"class":106},[100,84418,713],{"class":258},[100,84420,9248],{"class":110},[100,84422,84323],{"class":258},[100,84424,84326],{"class":1836},[24491,84426,84428],{"id":84427},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[73,84430,84432],{"className":54621,"code":84431,"language":54623,"meta":79,"style":79},"\u003Cbody>\n  \u003Cscript>\n    const num = 10\n    \u002F\u002F 强制转换\n    console.log(String(num))\n    \u002F\u002F toString()方法转换\n    console.log(num.toString())\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[32,84433,84434,84442,84450,84455,84460,84465,84470,84475,84483],{"__ignoreMap":79},[100,84435,84436,84438,84440],{"class":102,"line":103},[100,84437,2676],{"class":258},[100,84439,53354],{"class":52854},[100,84441,52861],{"class":258},[100,84443,84444,84446,84448],{"class":102,"line":188},[100,84445,53698],{"class":258},[100,84447,53367],{"class":52854},[100,84449,52861],{"class":258},[100,84451,84452],{"class":102,"line":199},[100,84453,84454],{"class":258},"    const num = 10\n",[100,84456,84457],{"class":102,"line":532},[100,84458,84459],{"class":258},"    \u002F\u002F 强制转换\n",[100,84461,84462],{"class":102,"line":577},[100,84463,84464],{"class":258},"    console.log(String(num))\n",[100,84466,84467],{"class":102,"line":589},[100,84468,84469],{"class":258},"    \u002F\u002F toString()方法转换\n",[100,84471,84472],{"class":102,"line":595},[100,84473,84474],{"class":258},"    console.log(num.toString())\n",[100,84476,84477,84479,84481],{"class":102,"line":601},[100,84478,53971],{"class":258},[100,84480,53367],{"class":52854},[100,84482,52861],{"class":258},[100,84484,84485,84487,84489],{"class":102,"line":606},[100,84486,53339],{"class":258},[100,84488,53354],{"class":52854},[100,84490,52861],{"class":258},[24491,84492,84494],{"id":84493},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,84496,84497],{},[3095,84498],{"alt":79,"src":84499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[73,84501,84503],{"className":52187,"code":84502,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv>\u003C\u002Fdiv>\n  \u003Cscript>\n    const gift = '50g的茶叶，清洗球'\n    \u002F\u002F 1.把字符串拆分为数组\n    \u002F\u002F console.log(gift.split(','))\n    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n    const str = gift.split('，').map(item => `\u003Cspan>【赠品】${item}\u003C\u002Fspan>\u003Cbr>`).join('')\n    document.querySelector('div').innerHTML = str\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,84504,84505,84515,84529,84533,84541,84555,84575,84587,84595,84599,84607,84619,84627,84639,84644,84649,84654,84701,84717,84725,84733,84737],{"__ignoreMap":79},[100,84506,84507,84509,84511,84513],{"class":102,"line":103},[100,84508,52851],{"class":258},[100,84510,52855],{"class":52854},[100,84512,52858],{"class":106},[100,84514,52861],{"class":258},[100,84516,84517,84519,84521,84523,84525,84527],{"class":102,"line":188},[100,84518,2676],{"class":258},[100,84520,52189],{"class":52854},[100,84522,52870],{"class":106},[100,84524,472],{"class":258},[100,84526,52875],{"class":110},[100,84528,52861],{"class":258},[100,84530,84531],{"class":102,"line":199},[100,84532,570],{"emptyLinePlaceholder":569},[100,84534,84535,84537,84539],{"class":102,"line":532},[100,84536,2676],{"class":258},[100,84538,52888],{"class":52854},[100,84540,52861],{"class":258},[100,84542,84543,84545,84547,84549,84551,84553],{"class":102,"line":577},[100,84544,53698],{"class":258},[100,84546,52898],{"class":52854},[100,84548,52901],{"class":106},[100,84550,472],{"class":258},[100,84552,52906],{"class":110},[100,84554,52861],{"class":258},[100,84556,84557,84559,84561,84563,84565,84567,84569,84571,84573],{"class":102,"line":589},[100,84558,53698],{"class":258},[100,84560,52898],{"class":52854},[100,84562,16501],{"class":106},[100,84564,472],{"class":258},[100,84566,52945],{"class":110},[100,84568,52925],{"class":106},[100,84570,472],{"class":258},[100,84572,52952],{"class":110},[100,84574,52861],{"class":258},[100,84576,84577,84579,84581,84583,84585],{"class":102,"line":595},[100,84578,53698],{"class":258},[100,84580,52961],{"class":52854},[100,84582,52964],{"class":258},[100,84584,52961],{"class":52854},[100,84586,52861],{"class":258},[100,84588,84589,84591,84593],{"class":102,"line":601},[100,84590,53339],{"class":258},[100,84592,52888],{"class":52854},[100,84594,52861],{"class":258},[100,84596,84597],{"class":102,"line":606},[100,84598,570],{"emptyLinePlaceholder":569},[100,84600,84601,84603,84605],{"class":102,"line":612},[100,84602,2676],{"class":258},[100,84604,53354],{"class":52854},[100,84606,52861],{"class":258},[100,84608,84609,84611,84613,84615,84617],{"class":102,"line":618},[100,84610,53698],{"class":258},[100,84612,53165],{"class":52854},[100,84614,56868],{"class":258},[100,84616,53165],{"class":52854},[100,84618,52861],{"class":258},[100,84620,84621,84623,84625],{"class":102,"line":623},[100,84622,53698],{"class":258},[100,84624,53367],{"class":52854},[100,84626,52861],{"class":258},[100,84628,84629,84631,84634,84636],{"class":102,"line":629},[100,84630,12803],{"class":471},[100,84632,84633],{"class":117}," gift",[100,84635,583],{"class":471},[100,84637,84638],{"class":110}," '50g的茶叶，清洗球'\n",[100,84640,84641],{"class":102,"line":635},[100,84642,84643],{"class":1836},"    \u002F\u002F 1.把字符串拆分为数组\n",[100,84645,84646],{"class":102,"line":641},[100,84647,84648],{"class":1836},"    \u002F\u002F console.log(gift.split(','))\n",[100,84650,84651],{"class":102,"line":647},[100,84652,84653],{"class":1836},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[100,84655,84656,84658,84660,84662,84665,84668,84670,84673,84675,84677,84679,84681,84683,84686,84688,84691,84693,84695,84697,84699],{"class":102,"line":653},[100,84657,12803],{"class":471},[100,84659,75473],{"class":117},[100,84661,583],{"class":471},[100,84663,84664],{"class":258}," gift.",[100,84666,84667],{"class":106},"split",[100,84669,713],{"class":258},[100,84671,84672],{"class":110},"'，'",[100,84674,32389],{"class":258},[100,84676,75598],{"class":106},[100,84678,713],{"class":258},[100,84680,81349],{"class":6812},[100,84682,81352],{"class":471},[100,84684,84685],{"class":110}," `\u003Cspan>【赠品】${",[100,84687,81349],{"class":258},[100,84689,84690],{"class":110},"}\u003C\u002Fspan>\u003Cbr>`",[100,84692,32389],{"class":258},[100,84694,75777],{"class":106},[100,84696,713],{"class":258},[100,84698,75782],{"class":110},[100,84700,809],{"class":258},[100,84702,84703,84705,84707,84709,84711,84713,84715],{"class":102,"line":659},[100,84704,53961],{"class":258},[100,84706,55953],{"class":106},[100,84708,713],{"class":258},[100,84710,83485],{"class":110},[100,84712,75803],{"class":258},[100,84714,472],{"class":471},[100,84716,75539],{"class":258},[100,84718,84719,84721,84723],{"class":102,"line":665},[100,84720,53971],{"class":258},[100,84722,53367],{"class":52854},[100,84724,52861],{"class":258},[100,84726,84727,84729,84731],{"class":102,"line":670},[100,84728,53339],{"class":258},[100,84730,53354],{"class":52854},[100,84732,52861],{"class":258},[100,84734,84735],{"class":102,"line":675},[100,84736,570],{"emptyLinePlaceholder":569},[100,84738,84739,84741,84743],{"class":102,"line":699},[100,84740,53339],{"class":258},[100,84742,52189],{"class":52854},[100,84744,52861],{"class":258},[23579,84746,84748],{"id":84747},"_41054-number","4.10.5.4 Number",[19,84750,84751],{},[3095,84752],{"alt":79,"src":84753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,84755,84756],{},"整数也可以进行toFixed来保留小数",[19,84758,84759],{},"比如：",[19,84761,84762],{},"const price=10",[19,84764,84765],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[23579,84767,84769],{"id":84768},"_41055-购物车展示","4.10.5.5 购物车展示",[19,84771,84772],{},[3095,84773],{"alt":79,"src":84774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[73,84776,84778],{"className":52187,"code":84777,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n      box-sizing: border-box;\n    }\n\n    .list {\n      width: 990px;\n      margin: 100px auto;\n    }\n\n    .item {\n      padding: 15px;\n      transition: all ease .5s;\n      display: flex;\n      border: 1px solid #e4e4e4;\n    }\n\n    .item:hover {\n      cursor: pointer;\n      background-color: #f5f5f5;\n    }\n\n    .item img {\n      width: 80px;\n      height: 80px;\n      margin-right: 5px;\n    }\n\n    .item .name {\n      width: 200px;\n    }\n\n    .item .name .tag {\n      display: block;\n      padding: 2px;\n      font-size: 12px;\n      color: #999;\n    }\n\n    .item .price,\n    .item .sub-total {\n      font-size: 18px;\n      color: firebrick;\n      flex: 1;\n    }\n\n    .item .price::before,\n    .item .sub-total::before,\n    .amount::before {\n      content: '￥';\n      font-size: 12px;\n    }\n\n    .item .spec {\n      flex: 2;\n      color: #888;\n      font-size: 14px;\n      margin-left: 20px;\n    }\n\n    .item .count {\n      flex: 1;\n      color: #aaa;\n    }\n\n    .total {\n      width: 990px;\n      margin: 0 auto;\n      display: flex;\n      justify-content: flex-end;\n      border-top: 1px solid #4e4e4e;\n      padding: 20px;\n    }\n\n    .total .amount {\n      font-size: 18px;\n      color: firebrick;\n      font-weight: 700;\n      margin-right: 50px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"list\">\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"total\">\n    \u003Cdiv>合计：\u003Cspan class=\"amount\">\u003C\u002Fspan>\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const goodsList = [\n      {\n        id: '4001172',\n        name: '称心如意手摇咖啡磨豆机咖啡豆研磨机',\n        price: 289.9,\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg',\n        count: 2,\n        spec: { color: '白色' }\n      },\n      {\n        id: '4001009',\n        name: '竹制干泡茶盘正方形沥水茶台品茶盘',\n        price: 109.8,\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png',\n        count: 3,\n        spec: { size: '40cm*40cm', color: '黑色' }\n      },\n      {\n        id: '4001874',\n        name: '古法温酒汝瓷酒具套装白酒杯莲花温酒器',\n        price: 488,\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png',\n        count: 1,\n        spec: { color: '青色', sum: '一大四小' }\n      },\n      {\n        id: '4001649',\n        name: '大师监制龙泉青瓷茶叶罐',\n        price: 139,\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png',\n        count: 1,\n        spec: { size: '小号', color: '紫色' },\n        gift: '50g茶叶,清洗球'\n      }\n    ]\n    \u002F\u002F  1.根据数据渲染页面\n    document.querySelector('.list').innerHTML = goodsList.map(item => {\n      \u002F\u002F 对象解构\n      const { picture, name, count, price, spec, gift } = item\n      \u002F\u002F 规格文字模块处理\n      const text = Object.values(spec).join('\u002F')\n      \u002F\u002F 处理赠品模块\n      const str = gift ? gift.split(',').map(item => `\u003Cspan class=\"tag\">【赠品】${item}\u003C\u002Fspan>`).join('') : ''\n      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n      const subtotal = ((price * 100 * count) \u002F 100).toFixed(2)\n\n      return `\n        \u003Cdiv class=\"item\">\n          \u003Cimg src=\"${picture}\" alt=\"\">\n          \u003Cp class=\"name\">${name}${str}\u003C\u002Fp>\n          \u003Cp class=\"spec\">${text}\u003C\u002Fp>\n          \u003Cp class=\"price\">${price.toFixed(2)}\u003C\u002Fp>\n          \u003Cp class=\"count\">x${count}\u003C\u002Fp>\n          \u003Cp class=\"sub-total\">${subtotal}\u003C\u002Fp>\n        \u003C\u002Fdiv> \n             `\n    }).join('')\n    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n    const total = goodsList.reduce((prev, item) => prev + (item.price * 100 * item.count) \u002F 100, 0)\n    document.querySelector('.amount').innerHTML = total.toFixed(2)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,84779,84780,84790,84804,84808,84816,84830,84850,84862,84870,84876,84886,84896,84906,84910,84914,84920,84932,84946,84950,84954,84960,84972,84988,84998,85014,85018,85022,85028,85038,85048,85052,85056,85064,85076,85088,85100,85104,85108,85116,85128,85132,85136,85147,85157,85169,85181,85191,85195,85199,85207,85216,85228,85238,85248,85252,85256,85264,85273,85280,85290,85302,85306,85310,85319,85329,85340,85352,85364,85368,85372,85381,85391,85402,85406,85410,85416,85428,85440,85450,85460,85478,85490,85494,85498,85507,85519,85529,85539,85551,85555,85563,85571,85575,85583,85597,85605,85619,85647,85655,85663,85673,85677,85685,85693,85702,85710,85719,85729,85733,85737,85745,85753,85762,85770,85778,85791,85795,85799,85807,85815,85824,85832,85840,85855,85859,85863,85871,85879,85888,85896,85904,85918,85926,85930,85934,85939,85965,85970,86007,86012,86035,86040,86094,86099,86135,86139,86145,86150,86159,86173,86182,86201,86210,86220,86225,86230,86243,86248,86302,86328,86336,86344,86348],{"__ignoreMap":79},[100,84781,84782,84784,84786,84788],{"class":102,"line":103},[100,84783,52851],{"class":258},[100,84785,52855],{"class":52854},[100,84787,52858],{"class":106},[100,84789,52861],{"class":258},[100,84791,84792,84794,84796,84798,84800,84802],{"class":102,"line":188},[100,84793,2676],{"class":258},[100,84795,52189],{"class":52854},[100,84797,52870],{"class":106},[100,84799,472],{"class":258},[100,84801,52875],{"class":110},[100,84803,52861],{"class":258},[100,84805,84806],{"class":102,"line":199},[100,84807,570],{"emptyLinePlaceholder":569},[100,84809,84810,84812,84814],{"class":102,"line":532},[100,84811,2676],{"class":258},[100,84813,52888],{"class":52854},[100,84815,52861],{"class":258},[100,84817,84818,84820,84822,84824,84826,84828],{"class":102,"line":577},[100,84819,53698],{"class":258},[100,84821,52898],{"class":52854},[100,84823,52901],{"class":106},[100,84825,472],{"class":258},[100,84827,52906],{"class":110},[100,84829,52861],{"class":258},[100,84831,84832,84834,84836,84838,84840,84842,84844,84846,84848],{"class":102,"line":589},[100,84833,53698],{"class":258},[100,84835,52898],{"class":52854},[100,84837,16501],{"class":106},[100,84839,472],{"class":258},[100,84841,52945],{"class":110},[100,84843,52925],{"class":106},[100,84845,472],{"class":258},[100,84847,52952],{"class":110},[100,84849,52861],{"class":258},[100,84851,84852,84854,84856,84858,84860],{"class":102,"line":595},[100,84853,53698],{"class":258},[100,84855,52961],{"class":52854},[100,84857,52964],{"class":258},[100,84859,52961],{"class":52854},[100,84861,52861],{"class":258},[100,84863,84864,84866,84868],{"class":102,"line":601},[100,84865,53698],{"class":258},[100,84867,1677],{"class":52854},[100,84869,52861],{"class":258},[100,84871,84872,84874],{"class":102,"line":606},[100,84873,7999],{"class":52854},[100,84875,17153],{"class":258},[100,84877,84878,84880,84882,84884],{"class":102,"line":612},[100,84879,56249],{"class":117},[100,84881,52991],{"class":258},[100,84883,1366],{"class":117},[100,84885,2927],{"class":258},[100,84887,84888,84890,84892,84894],{"class":102,"line":618},[100,84889,56260],{"class":117},[100,84891,52991],{"class":258},[100,84893,1366],{"class":117},[100,84895,2927],{"class":258},[100,84897,84898,84900,84902,84904],{"class":102,"line":623},[100,84899,74150],{"class":117},[100,84901,52991],{"class":258},[100,84903,62059],{"class":117},[100,84905,2927],{"class":258},[100,84907,84908],{"class":102,"line":629},[100,84909,3798],{"class":258},[100,84911,84912],{"class":102,"line":635},[100,84913,570],{"emptyLinePlaceholder":569},[100,84915,84916,84918],{"class":102,"line":641},[100,84917,63677],{"class":106},[100,84919,17153],{"class":258},[100,84921,84922,84924,84926,84928,84930],{"class":102,"line":647},[100,84923,56325],{"class":117},[100,84925,52991],{"class":258},[100,84927,80128],{"class":117},[100,84929,53046],{"class":471},[100,84931,2927],{"class":258},[100,84933,84934,84936,84938,84940,84942,84944],{"class":102,"line":653},[100,84935,56260],{"class":117},[100,84937,52991],{"class":258},[100,84939,2078],{"class":117},[100,84941,53046],{"class":471},[100,84943,53110],{"class":117},[100,84945,2927],{"class":258},[100,84947,84948],{"class":102,"line":659},[100,84949,3798],{"class":258},[100,84951,84952],{"class":102,"line":665},[100,84953,570],{"emptyLinePlaceholder":569},[100,84955,84956,84958],{"class":102,"line":670},[100,84957,80179],{"class":106},[100,84959,17153],{"class":258},[100,84961,84962,84964,84966,84968,84970],{"class":102,"line":675},[100,84963,56249],{"class":117},[100,84965,52991],{"class":258},[100,84967,2342],{"class":117},[100,84969,53046],{"class":471},[100,84971,2927],{"class":258},[100,84973,84974,84976,84978,84980,84982,84984,84986],{"class":102,"line":699},[100,84975,63414],{"class":117},[100,84977,52991],{"class":258},[100,84979,29693],{"class":117},[100,84981,80234],{"class":117},[100,84983,80237],{"class":117},[100,84985,2461],{"class":471},[100,84987,2927],{"class":258},[100,84989,84990,84992,84994,84996],{"class":102,"line":708},[100,84991,56563],{"class":117},[100,84993,52991],{"class":258},[100,84995,53031],{"class":117},[100,84997,2927],{"class":258},[100,84999,85000,85002,85004,85006,85008,85010,85012],{"class":102,"line":722},[100,85001,63531],{"class":117},[100,85003,52991],{"class":258},[100,85005,1985],{"class":117},[100,85007,53046],{"class":471},[100,85009,53075],{"class":117},[100,85011,63798],{"class":117},[100,85013,2927],{"class":258},[100,85015,85016],{"class":102,"line":735},[100,85017,3798],{"class":258},[100,85019,85020],{"class":102,"line":754},[100,85021,570],{"emptyLinePlaceholder":569},[100,85023,85024,85026],{"class":102,"line":771},[100,85025,80297],{"class":106},[100,85027,17153],{"class":258},[100,85029,85030,85032,85034,85036],{"class":102,"line":776},[100,85031,63579],{"class":117},[100,85033,52991],{"class":258},[100,85035,63584],{"class":117},[100,85037,2927],{"class":258},[100,85039,85040,85042,85044,85046],{"class":102,"line":781},[100,85041,56438],{"class":117},[100,85043,52991],{"class":258},[100,85045,63372],{"class":117},[100,85047,2927],{"class":258},[100,85049,85050],{"class":102,"line":796},[100,85051,3798],{"class":258},[100,85053,85054],{"class":102,"line":812},[100,85055,570],{"emptyLinePlaceholder":569},[100,85057,85058,85060,85062],{"class":102,"line":823},[100,85059,80179],{"class":106},[100,85061,57169],{"class":52854},[100,85063,17153],{"class":258},[100,85065,85066,85068,85070,85072,85074],{"class":102,"line":828},[100,85067,56325],{"class":117},[100,85069,52991],{"class":258},[100,85071,2379],{"class":117},[100,85073,53046],{"class":471},[100,85075,2927],{"class":258},[100,85077,85078,85080,85082,85084,85086],{"class":102,"line":840},[100,85079,56339],{"class":117},[100,85081,52991],{"class":258},[100,85083,2379],{"class":117},[100,85085,53046],{"class":471},[100,85087,2927],{"class":258},[100,85089,85090,85092,85094,85096,85098],{"class":102,"line":845},[100,85091,63304],{"class":117},[100,85093,52991],{"class":258},[100,85095,2086],{"class":117},[100,85097,53046],{"class":471},[100,85099,2927],{"class":258},[100,85101,85102],{"class":102,"line":868},[100,85103,3798],{"class":258},[100,85105,85106],{"class":102,"line":874},[100,85107,570],{"emptyLinePlaceholder":569},[100,85109,85110,85112,85114],{"class":102,"line":879},[100,85111,80179],{"class":106},[100,85113,63858],{"class":106},[100,85115,17153],{"class":258},[100,85117,85118,85120,85122,85124,85126],{"class":102,"line":889},[100,85119,56325],{"class":117},[100,85121,52991],{"class":258},[100,85123,3343],{"class":117},[100,85125,53046],{"class":471},[100,85127,2927],{"class":258},[100,85129,85130],{"class":102,"line":894},[100,85131,3798],{"class":258},[100,85133,85134],{"class":102,"line":900},[100,85135,570],{"emptyLinePlaceholder":569},[100,85137,85138,85140,85142,85145],{"class":102,"line":910},[100,85139,80179],{"class":106},[100,85141,63858],{"class":106},[100,85143,85144],{"class":106}," .tag",[100,85146,17153],{"class":258},[100,85148,85149,85151,85153,85155],{"class":102,"line":915},[100,85150,56563],{"class":117},[100,85152,52991],{"class":258},[100,85154,62423],{"class":117},[100,85156,2927],{"class":258},[100,85158,85159,85161,85163,85165,85167],{"class":102,"line":929},[100,85160,56249],{"class":117},[100,85162,52991],{"class":258},[100,85164,465],{"class":117},[100,85166,53046],{"class":471},[100,85168,2927],{"class":258},[100,85170,85171,85173,85175,85177,85179],{"class":102,"line":935},[100,85172,56476],{"class":117},[100,85174,52991],{"class":258},[100,85176,2265],{"class":117},[100,85178,53046],{"class":471},[100,85180,2927],{"class":258},[100,85182,85183,85185,85187,85189],{"class":102,"line":945},[100,85184,58970],{"class":117},[100,85186,52991],{"class":258},[100,85188,63624],{"class":117},[100,85190,2927],{"class":258},[100,85192,85193],{"class":102,"line":950},[100,85194,3798],{"class":258},[100,85196,85197],{"class":102,"line":955},[100,85198,570],{"emptyLinePlaceholder":569},[100,85200,85201,85203,85205],{"class":102,"line":972},[100,85202,80179],{"class":106},[100,85204,80471],{"class":106},[100,85206,33024],{"class":258},[100,85208,85209,85211,85214],{"class":102,"line":11370},[100,85210,80179],{"class":106},[100,85212,85213],{"class":106}," .sub-total",[100,85215,17153],{"class":258},[100,85217,85218,85220,85222,85224,85226],{"class":102,"line":11375},[100,85219,56476],{"class":117},[100,85221,52991],{"class":258},[100,85223,2417],{"class":117},[100,85225,53046],{"class":471},[100,85227,2927],{"class":258},[100,85229,85230,85232,85234,85236],{"class":102,"line":11380},[100,85231,58970],{"class":117},[100,85233,52991],{"class":258},[100,85235,80494],{"class":117},[100,85237,2927],{"class":258},[100,85239,85240,85242,85244,85246],{"class":102,"line":11385},[100,85241,63391],{"class":117},[100,85243,52991],{"class":258},[100,85245,1985],{"class":117},[100,85247,2927],{"class":258},[100,85249,85250],{"class":102,"line":11394},[100,85251,3798],{"class":258},[100,85253,85254],{"class":102,"line":11399},[100,85255,570],{"emptyLinePlaceholder":569},[100,85257,85258,85260,85262],{"class":102,"line":11405},[100,85259,80179],{"class":106},[100,85261,80511],{"class":106},[100,85263,33024],{"class":258},[100,85265,85266,85268,85271],{"class":102,"line":11426},[100,85267,80179],{"class":106},[100,85269,85270],{"class":106}," .sub-total::before",[100,85272,33024],{"class":258},[100,85274,85275,85278],{"class":102,"line":11432},[100,85276,85277],{"class":106},"    .amount::before",[100,85279,17153],{"class":258},[100,85281,85282,85284,85286,85288],{"class":102,"line":11446},[100,85283,80518],{"class":117},[100,85285,52991],{"class":258},[100,85287,80523],{"class":110},[100,85289,2927],{"class":258},[100,85291,85292,85294,85296,85298,85300],{"class":102,"line":11452},[100,85293,56476],{"class":117},[100,85295,52991],{"class":258},[100,85297,2265],{"class":117},[100,85299,53046],{"class":471},[100,85301,2927],{"class":258},[100,85303,85304],{"class":102,"line":11479},[100,85305,3798],{"class":258},[100,85307,85308],{"class":102,"line":11488},[100,85309,570],{"emptyLinePlaceholder":569},[100,85311,85312,85314,85317],{"class":102,"line":11494},[100,85313,80179],{"class":106},[100,85315,85316],{"class":106}," .spec",[100,85318,17153],{"class":258},[100,85320,85321,85323,85325,85327],{"class":102,"line":11502},[100,85322,63391],{"class":117},[100,85324,52991],{"class":258},[100,85326,465],{"class":117},[100,85328,2927],{"class":258},[100,85330,85331,85333,85335,85338],{"class":102,"line":11507},[100,85332,58970],{"class":117},[100,85334,52991],{"class":258},[100,85336,85337],{"class":117},"#888",[100,85339,2927],{"class":258},[100,85341,85342,85344,85346,85348,85350],{"class":102,"line":18185},[100,85343,56476],{"class":117},[100,85345,52991],{"class":258},[100,85347,2316],{"class":117},[100,85349,53046],{"class":471},[100,85351,2927],{"class":258},[100,85353,85354,85356,85358,85360,85362],{"class":102,"line":18191},[100,85355,63554],{"class":117},[100,85357,52991],{"class":258},[100,85359,2466],{"class":117},[100,85361,53046],{"class":471},[100,85363,2927],{"class":258},[100,85365,85366],{"class":102,"line":18214},[100,85367,3798],{"class":258},[100,85369,85370],{"class":102,"line":18220},[100,85371,570],{"emptyLinePlaceholder":569},[100,85373,85374,85376,85379],{"class":102,"line":18243},[100,85375,80179],{"class":106},[100,85377,85378],{"class":106}," .count",[100,85380,17153],{"class":258},[100,85382,85383,85385,85387,85389],{"class":102,"line":18257},[100,85384,63391],{"class":117},[100,85386,52991],{"class":258},[100,85388,1985],{"class":117},[100,85390,2927],{"class":258},[100,85392,85393,85395,85397,85400],{"class":102,"line":18277},[100,85394,58970],{"class":117},[100,85396,52991],{"class":258},[100,85398,85399],{"class":117},"#aaa",[100,85401,2927],{"class":258},[100,85403,85404],{"class":102,"line":18283},[100,85405,3798],{"class":258},[100,85407,85408],{"class":102,"line":18294},[100,85409,570],{"emptyLinePlaceholder":569},[100,85411,85412,85414],{"class":102,"line":18317},[100,85413,74029],{"class":106},[100,85415,17153],{"class":258},[100,85417,85418,85420,85422,85424,85426],{"class":102,"line":18339},[100,85419,56325],{"class":117},[100,85421,52991],{"class":258},[100,85423,80128],{"class":117},[100,85425,53046],{"class":471},[100,85427,2927],{"class":258},[100,85429,85430,85432,85434,85436,85438],{"class":102,"line":18344},[100,85431,56260],{"class":117},[100,85433,52991],{"class":258},[100,85435,1366],{"class":117},[100,85437,53110],{"class":117},[100,85439,2927],{"class":258},[100,85441,85442,85444,85446,85448],{"class":102,"line":18350},[100,85443,56563],{"class":117},[100,85445,52991],{"class":258},[100,85447,53031],{"class":117},[100,85449,2927],{"class":258},[100,85451,85452,85454,85456,85458],{"class":102,"line":18364},[100,85453,56574],{"class":117},[100,85455,52991],{"class":258},[100,85457,53134],{"class":117},[100,85459,2927],{"class":258},[100,85461,85462,85465,85467,85469,85471,85473,85476],{"class":102,"line":18377},[100,85463,85464],{"class":117},"      border-top",[100,85466,52991],{"class":258},[100,85468,1985],{"class":117},[100,85470,53046],{"class":471},[100,85472,53075],{"class":117},[100,85474,85475],{"class":117}," #4e4e4e",[100,85477,2927],{"class":258},[100,85479,85480,85482,85484,85486,85488],{"class":102,"line":18382},[100,85481,56249],{"class":117},[100,85483,52991],{"class":258},[100,85485,2466],{"class":117},[100,85487,53046],{"class":471},[100,85489,2927],{"class":258},[100,85491,85492],{"class":102,"line":18396},[100,85493,3798],{"class":258},[100,85495,85496],{"class":102,"line":18401},[100,85497,570],{"emptyLinePlaceholder":569},[100,85499,85500,85502,85505],{"class":102,"line":18407},[100,85501,74029],{"class":106},[100,85503,85504],{"class":106}," .amount",[100,85506,17153],{"class":258},[100,85508,85509,85511,85513,85515,85517],{"class":102,"line":18412},[100,85510,56476],{"class":117},[100,85512,52991],{"class":258},[100,85514,2417],{"class":117},[100,85516,53046],{"class":471},[100,85518,2927],{"class":258},[100,85520,85521,85523,85525,85527],{"class":102,"line":18426},[100,85522,58970],{"class":117},[100,85524,52991],{"class":258},[100,85526,80494],{"class":117},[100,85528,2927],{"class":258},[100,85530,85531,85533,85535,85537],{"class":102,"line":18431},[100,85532,63888],{"class":117},[100,85534,52991],{"class":258},[100,85536,53043],{"class":117},[100,85538,2927],{"class":258},[100,85540,85541,85543,85545,85547,85549],{"class":102,"line":18436},[100,85542,63304],{"class":117},[100,85544,52991],{"class":258},[100,85546,862],{"class":117},[100,85548,53046],{"class":471},[100,85550,2927],{"class":258},[100,85552,85553],{"class":102,"line":18450},[100,85554,3798],{"class":258},[100,85556,85557,85559,85561],{"class":102,"line":18462},[100,85558,53971],{"class":258},[100,85560,1677],{"class":52854},[100,85562,52861],{"class":258},[100,85564,85565,85567,85569],{"class":102,"line":18467},[100,85566,53339],{"class":258},[100,85568,52888],{"class":52854},[100,85570,52861],{"class":258},[100,85572,85573],{"class":102,"line":18480},[100,85574,570],{"emptyLinePlaceholder":569},[100,85576,85577,85579,85581],{"class":102,"line":18485},[100,85578,2676],{"class":258},[100,85580,53354],{"class":52854},[100,85582,52861],{"class":258},[100,85584,85585,85587,85589,85591,85593,85595],{"class":102,"line":18490},[100,85586,53698],{"class":258},[100,85588,53165],{"class":52854},[100,85590,55040],{"class":106},[100,85592,472],{"class":258},[100,85594,64162],{"class":110},[100,85596,52861],{"class":258},[100,85598,85599,85601,85603],{"class":102,"line":18495},[100,85600,53971],{"class":258},[100,85602,53165],{"class":52854},[100,85604,52861],{"class":258},[100,85606,85607,85609,85611,85613,85615,85617],{"class":102,"line":18508},[100,85608,53698],{"class":258},[100,85610,53165],{"class":52854},[100,85612,55040],{"class":106},[100,85614,472],{"class":258},[100,85616,64134],{"class":110},[100,85618,52861],{"class":258},[100,85620,85621,85623,85625,85628,85630,85632,85634,85637,85639,85641,85643,85645],{"class":102,"line":18513},[100,85622,52895],{"class":258},[100,85624,53165],{"class":52854},[100,85626,85627],{"class":258},">合计：\u003C",[100,85629,100],{"class":52854},[100,85631,55040],{"class":106},[100,85633,472],{"class":258},[100,85635,85636],{"class":110},"\"amount\"",[100,85638,56868],{"class":258},[100,85640,100],{"class":52854},[100,85642,56868],{"class":258},[100,85644,53165],{"class":52854},[100,85646,52861],{"class":258},[100,85648,85649,85651,85653],{"class":102,"line":34189},[100,85650,53971],{"class":258},[100,85652,53165],{"class":52854},[100,85654,52861],{"class":258},[100,85656,85657,85659,85661],{"class":102,"line":34195},[100,85658,53698],{"class":258},[100,85660,53367],{"class":52854},[100,85662,52861],{"class":258},[100,85664,85665,85667,85669,85671],{"class":102,"line":34201},[100,85666,12803],{"class":471},[100,85668,80931],{"class":117},[100,85670,583],{"class":471},[100,85672,57001],{"class":258},[100,85674,85675],{"class":102,"line":34207},[100,85676,80940],{"class":258},[100,85678,85679,85681,85683],{"class":102,"line":34213},[100,85680,80945],{"class":258},[100,85682,80948],{"class":110},[100,85684,33024],{"class":258},[100,85686,85687,85689,85691],{"class":102,"line":34224},[100,85688,80955],{"class":258},[100,85690,80958],{"class":110},[100,85692,33024],{"class":258},[100,85694,85695,85697,85700],{"class":102,"line":34230},[100,85696,80965],{"class":258},[100,85698,85699],{"class":117},"289.9",[100,85701,33024],{"class":258},[100,85703,85704,85706,85708],{"class":102,"line":34250},[100,85705,80975],{"class":258},[100,85707,80978],{"class":110},[100,85709,33024],{"class":258},[100,85711,85712,85715,85717],{"class":102,"line":34256},[100,85713,85714],{"class":258},"        count: ",[100,85716,465],{"class":117},[100,85718,33024],{"class":258},[100,85720,85721,85724,85727],{"class":102,"line":34267},[100,85722,85723],{"class":258},"        spec: { color: ",[100,85725,85726],{"class":110},"'白色'",[100,85728,57158],{"class":258},[100,85730,85731],{"class":102,"line":34273},[100,85732,79446],{"class":258},[100,85734,85735],{"class":102,"line":34279},[100,85736,80940],{"class":258},[100,85738,85739,85741,85743],{"class":102,"line":34285},[100,85740,80945],{"class":258},[100,85742,81039],{"class":110},[100,85744,33024],{"class":258},[100,85746,85747,85749,85751],{"class":102,"line":34291},[100,85748,80955],{"class":258},[100,85750,81048],{"class":110},[100,85752,33024],{"class":258},[100,85754,85755,85757,85760],{"class":102,"line":34297},[100,85756,80965],{"class":258},[100,85758,85759],{"class":117},"109.8",[100,85761,33024],{"class":258},[100,85763,85764,85766,85768],{"class":102,"line":34303},[100,85765,80975],{"class":258},[100,85767,81066],{"class":110},[100,85769,33024],{"class":258},[100,85771,85772,85774,85776],{"class":102,"line":34309},[100,85773,85714],{"class":258},[100,85775,1849],{"class":117},[100,85777,33024],{"class":258},[100,85779,85780,85783,85785,85787,85789],{"class":102,"line":34329},[100,85781,85782],{"class":258},"        spec: { size: ",[100,85784,83457],{"class":110},[100,85786,57018],{"class":258},[100,85788,83462],{"class":110},[100,85790,57158],{"class":258},[100,85792,85793],{"class":102,"line":34335},[100,85794,79446],{"class":258},[100,85796,85797],{"class":102,"line":34351},[100,85798,80940],{"class":258},[100,85800,85801,85803,85805],{"class":102,"line":34357},[100,85802,80945],{"class":258},[100,85804,81083],{"class":110},[100,85806,33024],{"class":258},[100,85808,85809,85811,85813],{"class":102,"line":34371},[100,85810,80955],{"class":258},[100,85812,81092],{"class":110},[100,85814,33024],{"class":258},[100,85816,85817,85819,85822],{"class":102,"line":34377},[100,85818,80965],{"class":258},[100,85820,85821],{"class":117},"488",[100,85823,33024],{"class":258},[100,85825,85826,85828,85830],{"class":102,"line":34392},[100,85827,80975],{"class":258},[100,85829,81110],{"class":110},[100,85831,33024],{"class":258},[100,85833,85834,85836,85838],{"class":102,"line":34398},[100,85835,85714],{"class":258},[100,85837,1985],{"class":117},[100,85839,33024],{"class":258},[100,85841,85842,85844,85847,85850,85853],{"class":102,"line":34407},[100,85843,85723],{"class":258},[100,85845,85846],{"class":110},"'青色'",[100,85848,85849],{"class":258},", sum: ",[100,85851,85852],{"class":110},"'一大四小'",[100,85854,57158],{"class":258},[100,85856,85857],{"class":102,"line":34413},[100,85858,79446],{"class":258},[100,85860,85861],{"class":102,"line":34422},[100,85862,80940],{"class":258},[100,85864,85865,85867,85869],{"class":102,"line":34428},[100,85866,80945],{"class":258},[100,85868,81127],{"class":110},[100,85870,33024],{"class":258},[100,85872,85873,85875,85877],{"class":102,"line":34434},[100,85874,80955],{"class":258},[100,85876,81136],{"class":110},[100,85878,33024],{"class":258},[100,85880,85881,85883,85886],{"class":102,"line":34443},[100,85882,80965],{"class":258},[100,85884,85885],{"class":117},"139",[100,85887,33024],{"class":258},[100,85889,85890,85892,85894],{"class":102,"line":34449},[100,85891,80975],{"class":258},[100,85893,81154],{"class":110},[100,85895,33024],{"class":258},[100,85897,85898,85900,85902],{"class":102,"line":34460},[100,85899,85714],{"class":258},[100,85901,1985],{"class":117},[100,85903,33024],{"class":258},[100,85905,85906,85908,85911,85913,85916],{"class":102,"line":34466},[100,85907,85782],{"class":258},[100,85909,85910],{"class":110},"'小号'",[100,85912,57018],{"class":258},[100,85914,85915],{"class":110},"'紫色'",[100,85917,57024],{"class":258},[100,85919,85920,85923],{"class":102,"line":34485},[100,85921,85922],{"class":258},"        gift: ",[100,85924,85925],{"class":110},"'50g茶叶,清洗球'\n",[100,85927,85928],{"class":102,"line":34491},[100,85929,53952],{"class":258},[100,85931,85932],{"class":102,"line":34502},[100,85933,54663],{"class":258},[100,85935,85936],{"class":102,"line":34508},[100,85937,85938],{"class":1836},"    \u002F\u002F  1.根据数据渲染页面\n",[100,85940,85941,85943,85945,85947,85949,85951,85953,85955,85957,85959,85961,85963],{"class":102,"line":34528},[100,85942,53961],{"class":258},[100,85944,55953],{"class":106},[100,85946,713],{"class":258},[100,85948,81455],{"class":110},[100,85950,75803],{"class":258},[100,85952,472],{"class":471},[100,85954,81602],{"class":258},[100,85956,75598],{"class":106},[100,85958,713],{"class":258},[100,85960,81349],{"class":6812},[100,85962,81352],{"class":471},[100,85964,17153],{"class":258},[100,85966,85967],{"class":102,"line":34544},[100,85968,85969],{"class":1836},"      \u002F\u002F 对象解构\n",[100,85971,85972,85974,85976,85978,85980,85982,85984,85987,85989,85991,85993,85996,85998,86001,86003,86005],{"class":102,"line":34550},[100,85973,59782],{"class":471},[100,85975,81361],{"class":258},[100,85977,81374],{"class":117},[100,85979,14017],{"class":258},[100,85981,81364],{"class":117},[100,85983,14017],{"class":258},[100,85985,85986],{"class":117},"count",[100,85988,14017],{"class":258},[100,85990,81369],{"class":117},[100,85992,14017],{"class":258},[100,85994,85995],{"class":117},"spec",[100,85997,14017],{"class":258},[100,85999,86000],{"class":117},"gift",[100,86002,81377],{"class":258},[100,86004,472],{"class":471},[100,86006,81382],{"class":258},[100,86008,86009],{"class":102,"line":34564},[100,86010,86011],{"class":1836},"      \u002F\u002F 规格文字模块处理\n",[100,86013,86014,86016,86019,86021,86023,86025,86027,86029,86031,86033],{"class":102,"line":34570},[100,86015,59782],{"class":471},[100,86017,86018],{"class":117}," text",[100,86020,583],{"class":471},[100,86022,83492],{"class":258},[100,86024,83495],{"class":106},[100,86026,83498],{"class":258},[100,86028,75777],{"class":106},[100,86030,713],{"class":258},[100,86032,83505],{"class":110},[100,86034,809],{"class":258},[100,86036,86037],{"class":102,"line":34576},[100,86038,86039],{"class":1836},"      \u002F\u002F 处理赠品模块\n",[100,86041,86042,86044,86046,86048,86051,86053,86055,86057,86059,86062,86064,86066,86068,86070,86072,86075,86077,86080,86082,86084,86086,86088,86090,86092],{"class":102,"line":34587},[100,86043,59782],{"class":471},[100,86045,75473],{"class":117},[100,86047,583],{"class":471},[100,86049,86050],{"class":258}," gift ",[100,86052,2752],{"class":471},[100,86054,84664],{"class":258},[100,86056,84667],{"class":106},[100,86058,713],{"class":258},[100,86060,86061],{"class":110},"','",[100,86063,32389],{"class":258},[100,86065,75598],{"class":106},[100,86067,713],{"class":258},[100,86069,81349],{"class":6812},[100,86071,81352],{"class":471},[100,86073,86074],{"class":110}," `\u003Cspan class=\"tag\">【赠品】${",[100,86076,81349],{"class":258},[100,86078,86079],{"class":110},"}\u003C\u002Fspan>`",[100,86081,32389],{"class":258},[100,86083,75777],{"class":106},[100,86085,713],{"class":258},[100,86087,75782],{"class":110},[100,86089,15295],{"class":258},[100,86091,2625],{"class":471},[100,86093,71658],{"class":110},[100,86095,86096],{"class":102,"line":34593},[100,86097,86098],{"class":1836},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[100,86100,86101,86103,86106,86108,86111,86113,86115,86117,86120,86122,86124,86126,86129,86131,86133],{"class":102,"line":34599},[100,86102,59782],{"class":471},[100,86104,86105],{"class":117}," subtotal",[100,86107,583],{"class":471},[100,86109,86110],{"class":258}," ((price ",[100,86112,2222],{"class":471},[100,86114,7350],{"class":117},[100,86116,8114],{"class":471},[100,86118,86119],{"class":258}," count) ",[100,86121,2351],{"class":471},[100,86123,7350],{"class":117},[100,86125,32389],{"class":258},[100,86127,86128],{"class":106},"toFixed",[100,86130,713],{"class":258},[100,86132,465],{"class":117},[100,86134,809],{"class":258},[100,86136,86137],{"class":102,"line":34609},[100,86138,570],{"emptyLinePlaceholder":569},[100,86140,86141,86143],{"class":102,"line":34615},[100,86142,75536],{"class":471},[100,86144,71722],{"class":110},[100,86146,86147],{"class":102,"line":34626},[100,86148,86149],{"class":110},"        \u003Cdiv class=\"item\">\n",[100,86151,86152,86155,86157],{"class":102,"line":34632},[100,86153,86154],{"class":110},"          \u003Cimg src=\"${",[100,86156,81374],{"class":258},[100,86158,81406],{"class":110},[100,86160,86161,86164,86166,86169,86171],{"class":102,"line":34642},[100,86162,86163],{"class":110},"          \u003Cp class=\"name\">${",[100,86165,81364],{"class":258},[100,86167,86168],{"class":110},"}${",[100,86170,687],{"class":258},[100,86172,81416],{"class":110},[100,86174,86175,86178,86180],{"class":102,"line":34647},[100,86176,86177],{"class":110},"          \u003Cp class=\"spec\">${",[100,86179,78],{"class":258},[100,86181,81416],{"class":110},[100,86183,86184,86187,86189,86191,86193,86195,86197,86199],{"class":102,"line":34653},[100,86185,86186],{"class":110},"          \u003Cp class=\"price\">${",[100,86188,81369],{"class":258},[100,86190,2325],{"class":110},[100,86192,86128],{"class":106},[100,86194,713],{"class":110},[100,86196,465],{"class":117},[100,86198,2196],{"class":110},[100,86200,81416],{"class":110},[100,86202,86203,86206,86208],{"class":102,"line":34702},[100,86204,86205],{"class":110},"          \u003Cp class=\"count\">x${",[100,86207,85986],{"class":258},[100,86209,81416],{"class":110},[100,86211,86212,86215,86218],{"class":102,"line":34749},[100,86213,86214],{"class":110},"          \u003Cp class=\"sub-total\">${",[100,86216,86217],{"class":258},"subtotal",[100,86219,81416],{"class":110},[100,86221,86222],{"class":102,"line":34754},[100,86223,86224],{"class":110},"        \u003C\u002Fdiv> \n",[100,86226,86227],{"class":102,"line":34760},[100,86228,86229],{"class":110},"             `\n",[100,86231,86232,86235,86237,86239,86241],{"class":102,"line":34779},[100,86233,86234],{"class":258},"    }).",[100,86236,75777],{"class":106},[100,86238,713],{"class":258},[100,86240,75782],{"class":110},[100,86242,809],{"class":258},[100,86244,86245],{"class":102,"line":34785},[100,86246,86247],{"class":1836},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[100,86249,86250,86252,86254,86256,86258,86261,86263,86266,86268,86270,86272,86275,86278,86280,86283,86285,86287,86289,86292,86294,86296,86298,86300],{"class":102,"line":34805},[100,86251,12803],{"class":471},[100,86253,64339],{"class":117},[100,86255,583],{"class":471},[100,86257,81602],{"class":258},[100,86259,86260],{"class":106},"reduce",[100,86262,3987],{"class":258},[100,86264,86265],{"class":6812},"prev",[100,86267,14017],{"class":258},[100,86269,81349],{"class":6812},[100,86271,15295],{"class":258},[100,86273,86274],{"class":471},"=>",[100,86276,86277],{"class":258}," prev ",[100,86279,2248],{"class":471},[100,86281,86282],{"class":258}," (item.price ",[100,86284,2222],{"class":471},[100,86286,7350],{"class":117},[100,86288,8114],{"class":471},[100,86290,86291],{"class":258}," item.count) ",[100,86293,2351],{"class":471},[100,86295,7350],{"class":117},[100,86297,14017],{"class":258},[100,86299,1366],{"class":117},[100,86301,809],{"class":258},[100,86303,86304,86306,86308,86310,86313,86315,86317,86320,86322,86324,86326],{"class":102,"line":34811},[100,86305,53961],{"class":258},[100,86307,55953],{"class":106},[100,86309,713],{"class":258},[100,86311,86312],{"class":110},"'.amount'",[100,86314,75803],{"class":258},[100,86316,472],{"class":471},[100,86318,86319],{"class":258}," total.",[100,86321,86128],{"class":106},[100,86323,713],{"class":258},[100,86325,465],{"class":117},[100,86327,809],{"class":258},[100,86329,86330,86332,86334],{"class":102,"line":34817},[100,86331,53971],{"class":258},[100,86333,53367],{"class":52854},[100,86335,52861],{"class":258},[100,86337,86338,86340,86342],{"class":102,"line":34827},[100,86339,53339],{"class":258},[100,86341,53354],{"class":52854},[100,86343,52861],{"class":258},[100,86345,86346],{"class":102,"line":34832},[100,86347,570],{"emptyLinePlaceholder":569},[100,86349,86350,86352,86354],{"class":102,"line":34838},[100,86351,53339],{"class":258},[100,86353,52189],{"class":52854},[100,86355,52861],{"class":258},[14,86357,86359],{"id":86358},"_411-编程思想","4.11 编程思想",[305,86361,86363],{"id":86362},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,86365,86366,86369],{},[1921,86367,86368],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,86371,86372],{},"调用就可以了",[19,86374,86375],{},[3095,86376],{"alt":79,"src":86377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[305,86379,86381],{"id":86380},"_4112-面向对象","4.11.2 面向对象",[19,86383,86384],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,86386,86387],{},[3095,86388],{"alt":79,"src":86389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,86391,86392],{},"面向对象的特性：",[2773,86394,86395,86398,86401],{},[29,86396,86397],{},"封装性",[29,86399,86400],{},"继承性",[29,86402,86403],{},"多态性",[305,86405,86407],{"id":86406},"_4113-两者比较","4.11.3 两者比较",[19,86409,86410],{},[3095,86411],{"alt":79,"src":86412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,86414,86416],{"id":86415},"_412-构造函数回顾","4.12 构造函数回顾",[19,86418,86419],{},[3095,86420],{"alt":79,"src":86421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,86423,86424],{},[3095,86425],{"alt":79,"src":86426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,86428,86429],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,86431,86432],{},[3095,86433],{"alt":79,"src":86434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,86436,86438],{"id":86437},"_413-原型","4.13 原型",[305,86440,86442],{"id":86441},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,86444,86445],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,86447,86448],{},[3095,86449],{"alt":79,"src":86450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,86452,86453],{},[3095,86454],{"alt":79,"src":86455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,86457,86458],{},"原型是构造函数的属性，它也是一个对象",[19,86460,86461],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,86463,86464],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[73,86466,86468],{"className":54621,"code":86467,"language":54623,"meta":79,"style":79},"\u003Cbody>\n  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n  \u003Cscript>\n    function Star(uname, age) {\n      this.uname = uname,\n        this.age = age\n      \u002F\u002F this.sing = function () {\n      \u002F\u002F   console.log('唱歌')\n\n      \u002F\u002F }\n    }\n    Star.prototype.sing = function () {\n      console.log('唱歌')\n    }\n    \u002F\u002F console.dir(Star.prototype)\n    const pink = new Star('pink', 18)\n    const red = new Star('red', 20)\n    pink.sing()\n    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[32,86469,86470,86478,86483,86491,86496,86501,86506,86511,86516,86520,86524,86528,86533,86538,86542,86547,86552,86557,86562,86567,86571,86579],{"__ignoreMap":79},[100,86471,86472,86474,86476],{"class":102,"line":103},[100,86473,2676],{"class":258},[100,86475,53354],{"class":52854},[100,86477,52861],{"class":258},[100,86479,86480],{"class":102,"line":188},[100,86481,86482],{"class":1836},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[100,86484,86485,86487,86489],{"class":102,"line":199},[100,86486,53698],{"class":258},[100,86488,53367],{"class":52854},[100,86490,52861],{"class":258},[100,86492,86493],{"class":102,"line":532},[100,86494,86495],{"class":258},"    function Star(uname, age) {\n",[100,86497,86498],{"class":102,"line":577},[100,86499,86500],{"class":258},"      this.uname = uname,\n",[100,86502,86503],{"class":102,"line":589},[100,86504,86505],{"class":258},"        this.age = age\n",[100,86507,86508],{"class":102,"line":595},[100,86509,86510],{"class":258},"      \u002F\u002F this.sing = function () {\n",[100,86512,86513],{"class":102,"line":601},[100,86514,86515],{"class":258},"      \u002F\u002F   console.log('唱歌')\n",[100,86517,86518],{"class":102,"line":606},[100,86519,570],{"emptyLinePlaceholder":569},[100,86521,86522],{"class":102,"line":612},[100,86523,61591],{"class":258},[100,86525,86526],{"class":102,"line":618},[100,86527,3798],{"class":258},[100,86529,86530],{"class":102,"line":623},[100,86531,86532],{"class":258},"    Star.prototype.sing = function () {\n",[100,86534,86535],{"class":102,"line":629},[100,86536,86537],{"class":258},"      console.log('唱歌')\n",[100,86539,86540],{"class":102,"line":635},[100,86541,3798],{"class":258},[100,86543,86544],{"class":102,"line":641},[100,86545,86546],{"class":258},"    \u002F\u002F console.dir(Star.prototype)\n",[100,86548,86549],{"class":102,"line":647},[100,86550,86551],{"class":258},"    const pink = new Star('pink', 18)\n",[100,86553,86554],{"class":102,"line":653},[100,86555,86556],{"class":258},"    const red = new Star('red', 20)\n",[100,86558,86559],{"class":102,"line":659},[100,86560,86561],{"class":258},"    pink.sing()\n",[100,86563,86564],{"class":102,"line":665},[100,86565,86566],{"class":258},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[100,86568,86569],{"class":102,"line":670},[100,86570,570],{"emptyLinePlaceholder":569},[100,86572,86573,86575,86577],{"class":102,"line":675},[100,86574,53971],{"class":258},[100,86576,53367],{"class":52854},[100,86578,52861],{"class":258},[100,86580,86581,86583,86585],{"class":102,"line":699},[100,86582,53339],{"class":258},[100,86584,53354],{"class":52854},[100,86586,52861],{"class":258},[19,86588,86589],{},[3095,86590],{"alt":79,"src":86591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[73,86593,86595],{"className":54621,"code":86594,"language":54623,"meta":79,"style":79},"\u003Cbody>\n  \u003Cscript>\n    let that\n    function Star(uname) {\n      this.uname = uname\n      that = this\n    }\n    \u002F\u002F 实例对象是 ldh\n    const ldh = new Star('刘德华')\n    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n\n    Star.sing = function () {\n      console.log('唱歌')\n    }\n    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[32,86596,86597,86605,86613,86618,86623,86628,86633,86637,86642,86647,86652,86656,86661,86665,86669,86674,86678,86686],{"__ignoreMap":79},[100,86598,86599,86601,86603],{"class":102,"line":103},[100,86600,2676],{"class":258},[100,86602,53354],{"class":52854},[100,86604,52861],{"class":258},[100,86606,86607,86609,86611],{"class":102,"line":188},[100,86608,53698],{"class":258},[100,86610,53367],{"class":52854},[100,86612,52861],{"class":258},[100,86614,86615],{"class":102,"line":199},[100,86616,86617],{"class":258},"    let that\n",[100,86619,86620],{"class":102,"line":532},[100,86621,86622],{"class":258},"    function Star(uname) {\n",[100,86624,86625],{"class":102,"line":577},[100,86626,86627],{"class":258},"      this.uname = uname\n",[100,86629,86630],{"class":102,"line":589},[100,86631,86632],{"class":258},"      that = this\n",[100,86634,86635],{"class":102,"line":595},[100,86636,3798],{"class":258},[100,86638,86639],{"class":102,"line":601},[100,86640,86641],{"class":258},"    \u002F\u002F 实例对象是 ldh\n",[100,86643,86644],{"class":102,"line":606},[100,86645,86646],{"class":258},"    const ldh = new Star('刘德华')\n",[100,86648,86649],{"class":102,"line":612},[100,86650,86651],{"class":258},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[100,86653,86654],{"class":102,"line":618},[100,86655,570],{"emptyLinePlaceholder":569},[100,86657,86658],{"class":102,"line":623},[100,86659,86660],{"class":258},"    Star.sing = function () {\n",[100,86662,86663],{"class":102,"line":629},[100,86664,86537],{"class":258},[100,86666,86667],{"class":102,"line":635},[100,86668,3798],{"class":258},[100,86670,86671],{"class":102,"line":641},[100,86672,86673],{"class":258},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[100,86675,86676],{"class":102,"line":647},[100,86677,570],{"emptyLinePlaceholder":569},[100,86679,86680,86682,86684],{"class":102,"line":653},[100,86681,53971],{"class":258},[100,86683,53367],{"class":52854},[100,86685,52861],{"class":258},[100,86687,86688,86690,86692],{"class":102,"line":659},[100,86689,53339],{"class":258},[100,86691,53354],{"class":52854},[100,86693,52861],{"class":258},[19,86695,86696],{},"构造函数的this指向的是实例对象；",[19,86698,86699],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[305,86701,86703],{"id":86702},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,86705,86706],{},[3095,86707],{"alt":79,"src":86708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[73,86710,86712],{"className":54621,"code":86711,"language":54623,"meta":79,"style":79},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F 注意数组不可以直接用min和max求最值\n    const arr = [1, 2, 3]\n    \u002F\u002F 自己定义数组的扩展方法\n    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n    \u002F\u002F 2.自定义的方法写到prototype身上\n    \u002F\u002F ①.最大值\n    Array.prototype.max = function () {\n      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n      return Math.max(...this)\n      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n    }\n    console.log(arr.max())\n    \u002F\u002F ②最小值\n    Array.prototype.min = function () {\n      return Math.min(...this)\n    }\n    console.log(arr.min())\n    \u002F\u002F③求和\n    Array.prototype.sum = function () {\n      return this.reduce((prev, current) => prev + current, 0)\n    }\n    console.log(arr.sum())\n    \u002F\u002F ③排序\n    Array.prototype.rever = function () {\n      return this.reverse()\n    }\n    console.log(arr.rever())\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[32,86713,86714,86722,86730,86735,86740,86745,86750,86755,86760,86765,86770,86775,86780,86784,86789,86794,86799,86804,86808,86813,86818,86823,86828,86832,86837,86842,86847,86852,86856,86861,86865,86873],{"__ignoreMap":79},[100,86715,86716,86718,86720],{"class":102,"line":103},[100,86717,2676],{"class":258},[100,86719,53354],{"class":52854},[100,86721,52861],{"class":258},[100,86723,86724,86726,86728],{"class":102,"line":188},[100,86725,53698],{"class":258},[100,86727,53367],{"class":52854},[100,86729,52861],{"class":258},[100,86731,86732],{"class":102,"line":199},[100,86733,86734],{"class":258},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[100,86736,86737],{"class":102,"line":532},[100,86738,86739],{"class":258},"    const arr = [1, 2, 3]\n",[100,86741,86742],{"class":102,"line":577},[100,86743,86744],{"class":258},"    \u002F\u002F 自己定义数组的扩展方法\n",[100,86746,86747],{"class":102,"line":589},[100,86748,86749],{"class":258},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[100,86751,86752],{"class":102,"line":595},[100,86753,86754],{"class":258},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[100,86756,86757],{"class":102,"line":601},[100,86758,86759],{"class":258},"    \u002F\u002F ①.最大值\n",[100,86761,86762],{"class":102,"line":606},[100,86763,86764],{"class":258},"    Array.prototype.max = function () {\n",[100,86766,86767],{"class":102,"line":612},[100,86768,86769],{"class":258},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[100,86771,86772],{"class":102,"line":618},[100,86773,86774],{"class":258},"      return Math.max(...this)\n",[100,86776,86777],{"class":102,"line":623},[100,86778,86779],{"class":258},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[100,86781,86782],{"class":102,"line":629},[100,86783,3798],{"class":258},[100,86785,86786],{"class":102,"line":635},[100,86787,86788],{"class":258},"    console.log(arr.max())\n",[100,86790,86791],{"class":102,"line":641},[100,86792,86793],{"class":258},"    \u002F\u002F ②最小值\n",[100,86795,86796],{"class":102,"line":647},[100,86797,86798],{"class":258},"    Array.prototype.min = function () {\n",[100,86800,86801],{"class":102,"line":653},[100,86802,86803],{"class":258},"      return Math.min(...this)\n",[100,86805,86806],{"class":102,"line":659},[100,86807,3798],{"class":258},[100,86809,86810],{"class":102,"line":665},[100,86811,86812],{"class":258},"    console.log(arr.min())\n",[100,86814,86815],{"class":102,"line":670},[100,86816,86817],{"class":258},"    \u002F\u002F③求和\n",[100,86819,86820],{"class":102,"line":675},[100,86821,86822],{"class":258},"    Array.prototype.sum = function () {\n",[100,86824,86825],{"class":102,"line":699},[100,86826,86827],{"class":258},"      return this.reduce((prev, current) => prev + current, 0)\n",[100,86829,86830],{"class":102,"line":708},[100,86831,3798],{"class":258},[100,86833,86834],{"class":102,"line":722},[100,86835,86836],{"class":258},"    console.log(arr.sum())\n",[100,86838,86839],{"class":102,"line":735},[100,86840,86841],{"class":258},"    \u002F\u002F ③排序\n",[100,86843,86844],{"class":102,"line":754},[100,86845,86846],{"class":258},"    Array.prototype.rever = function () {\n",[100,86848,86849],{"class":102,"line":771},[100,86850,86851],{"class":258},"      return this.reverse()\n",[100,86853,86854],{"class":102,"line":776},[100,86855,3798],{"class":258},[100,86857,86858],{"class":102,"line":781},[100,86859,86860],{"class":258},"    console.log(arr.rever())\n",[100,86862,86863],{"class":102,"line":796},[100,86864,570],{"emptyLinePlaceholder":569},[100,86866,86867,86869,86871],{"class":102,"line":812},[100,86868,53971],{"class":258},[100,86870,53367],{"class":52854},[100,86872,52861],{"class":258},[100,86874,86875,86877,86879],{"class":102,"line":823},[100,86876,53339],{"class":258},[100,86878,53354],{"class":52854},[100,86880,52861],{"class":258},[19,86882,86883],{},[3095,86884],{"alt":79,"src":86885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[305,86887,86889],{"id":86888},"_4133-constructor-属性","4.13.3 constructor 属性",[19,86891,86892],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,86894,86895],{},[3095,86896],{"alt":79,"src":86897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[73,86899,86901],{"className":54621,"code":86900,"language":54623,"meta":79,"style":79},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002Fconstructor   单词是构造函数的意思\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(Star.prototype)\n    console.log(Star.prototype.constructor === Star)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[32,86902,86903,86911,86919,86924,86929,86933,86938,86943,86948,86956],{"__ignoreMap":79},[100,86904,86905,86907,86909],{"class":102,"line":103},[100,86906,2676],{"class":258},[100,86908,53354],{"class":52854},[100,86910,52861],{"class":258},[100,86912,86913,86915,86917],{"class":102,"line":188},[100,86914,53698],{"class":258},[100,86916,53367],{"class":52854},[100,86918,52861],{"class":258},[100,86920,86921],{"class":102,"line":199},[100,86922,86923],{"class":258},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[100,86925,86926],{"class":102,"line":532},[100,86927,86928],{"class":258},"    function Star() {\n",[100,86930,86931],{"class":102,"line":577},[100,86932,3798],{"class":258},[100,86934,86935],{"class":102,"line":589},[100,86936,86937],{"class":258},"    const ldh = new Star()\n",[100,86939,86940],{"class":102,"line":595},[100,86941,86942],{"class":258},"    console.log(Star.prototype)\n",[100,86944,86945],{"class":102,"line":601},[100,86946,86947],{"class":258},"    console.log(Star.prototype.constructor === Star)\n",[100,86949,86950,86952,86954],{"class":102,"line":606},[100,86951,53971],{"class":258},[100,86953,53367],{"class":52854},[100,86955,52861],{"class":258},[100,86957,86958,86960,86962],{"class":102,"line":612},[100,86959,53339],{"class":258},[100,86961,53354],{"class":52854},[100,86963,52861],{"class":258},[19,86965,86966],{},[3095,86967],{"alt":79,"src":86968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,86970,86971],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[73,86973,86975],{"className":54621,"code":86974,"language":54623,"meta":79,"style":79},"  \u003Cscript>\n    \u002F\u002Fconstructor   单词是构造函数的意思\n    function Star() {\n    }\n    \u002F\u002F const ldh = new Star()\n    \u002F\u002F console.log(Star.prototype)\n    \u002F\u002F console.log(Star.prototype.constructor === Star)\n\n    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n    \u002F\u002F Star.prototype.sing = function () {\n    \u002F\u002F   console.log('唱歌')\n    \u002F\u002F }\n    \u002F\u002F Star.prototype.dance = function () {\n    \u002F\u002F   console.log('跳舞')\n    \u002F\u002F }\n    console.log(Star.prototype)\n    Star.prototype = {\n      sing: function () {\n        console.log('唱歌')\n      },\n      dance: function () {\n        console.log('跳舞')\n      }\n    }\n    console.log(Star.prototype)\n  \u003C\u002Fscript>\n",[32,86976,86977,86985,86989,86993,86997,87002,87007,87012,87016,87021,87026,87031,87036,87041,87046,87050,87054,87059,87064,87069,87073,87078,87083,87087,87091,87095],{"__ignoreMap":79},[100,86978,86979,86981,86983],{"class":102,"line":103},[100,86980,53698],{"class":258},[100,86982,53367],{"class":52854},[100,86984,52861],{"class":258},[100,86986,86987],{"class":102,"line":188},[100,86988,86923],{"class":258},[100,86990,86991],{"class":102,"line":199},[100,86992,86928],{"class":258},[100,86994,86995],{"class":102,"line":532},[100,86996,3798],{"class":258},[100,86998,86999],{"class":102,"line":577},[100,87000,87001],{"class":258},"    \u002F\u002F const ldh = new Star()\n",[100,87003,87004],{"class":102,"line":589},[100,87005,87006],{"class":258},"    \u002F\u002F console.log(Star.prototype)\n",[100,87008,87009],{"class":102,"line":595},[100,87010,87011],{"class":258},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[100,87013,87014],{"class":102,"line":601},[100,87015,570],{"emptyLinePlaceholder":569},[100,87017,87018],{"class":102,"line":606},[100,87019,87020],{"class":258},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[100,87022,87023],{"class":102,"line":612},[100,87024,87025],{"class":258},"    \u002F\u002F Star.prototype.sing = function () {\n",[100,87027,87028],{"class":102,"line":618},[100,87029,87030],{"class":258},"    \u002F\u002F   console.log('唱歌')\n",[100,87032,87033],{"class":102,"line":623},[100,87034,87035],{"class":258},"    \u002F\u002F }\n",[100,87037,87038],{"class":102,"line":629},[100,87039,87040],{"class":258},"    \u002F\u002F Star.prototype.dance = function () {\n",[100,87042,87043],{"class":102,"line":635},[100,87044,87045],{"class":258},"    \u002F\u002F   console.log('跳舞')\n",[100,87047,87048],{"class":102,"line":641},[100,87049,87035],{"class":258},[100,87051,87052],{"class":102,"line":647},[100,87053,86942],{"class":258},[100,87055,87056],{"class":102,"line":653},[100,87057,87058],{"class":258},"    Star.prototype = {\n",[100,87060,87061],{"class":102,"line":659},[100,87062,87063],{"class":258},"      sing: function () {\n",[100,87065,87066],{"class":102,"line":665},[100,87067,87068],{"class":258},"        console.log('唱歌')\n",[100,87070,87071],{"class":102,"line":670},[100,87072,79446],{"class":258},[100,87074,87075],{"class":102,"line":675},[100,87076,87077],{"class":258},"      dance: function () {\n",[100,87079,87080],{"class":102,"line":699},[100,87081,87082],{"class":258},"        console.log('跳舞')\n",[100,87084,87085],{"class":102,"line":708},[100,87086,53952],{"class":258},[100,87088,87089],{"class":102,"line":722},[100,87090,3798],{"class":258},[100,87092,87093],{"class":102,"line":735},[100,87094,86942],{"class":258},[100,87096,87097,87099,87101],{"class":102,"line":754},[100,87098,53971],{"class":258},[100,87100,53367],{"class":52854},[100,87102,52861],{"class":258},[19,87104,87105],{},"进行输出结果后会发现：",[19,87107,87108],{},[3095,87109],{"alt":79,"src":87110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,87112,87113],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,87115,87116],{},"所以，要重新指回创造这个原型对象的构造函数",[73,87118,87120],{"className":72767,"code":87119,"language":72769,"meta":79,"style":79},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[32,87121,87122,87136,87141,87146,87157,87170,87175,87186,87200,87204],{"__ignoreMap":79},[100,87123,87124,87127,87129,87132,87134],{"class":102,"line":103},[100,87125,87126],{"class":117},"Star",[100,87128,2325],{"class":258},[100,87130,87131],{"class":117},"prototype",[100,87133,583],{"class":471},[100,87135,17153],{"class":258},[100,87137,87138],{"class":102,"line":188},[100,87139,87140],{"class":1836},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[100,87142,87143],{"class":102,"line":199},[100,87144,87145],{"class":258},"  constructor: Star,\n",[100,87147,87148,87151,87153,87155],{"class":102,"line":532},[100,87149,87150],{"class":106},"  sing",[100,87152,52991],{"class":258},[100,87154,56003],{"class":471},[100,87156,56006],{"class":258},[100,87158,87159,87161,87163,87165,87168],{"class":102,"line":577},[100,87160,75307],{"class":258},[100,87162,59801],{"class":106},[100,87164,713],{"class":258},[100,87166,87167],{"class":110},"'唱歌'",[100,87169,809],{"class":258},[100,87171,87172],{"class":102,"line":589},[100,87173,87174],{"class":258},"   },\n",[100,87176,87177,87180,87182,87184],{"class":102,"line":595},[100,87178,87179],{"class":106},"   dance",[100,87181,52991],{"class":258},[100,87183,56003],{"class":471},[100,87185,56006],{"class":258},[100,87187,87188,87191,87193,87195,87198],{"class":102,"line":601},[100,87189,87190],{"class":258},"     console.",[100,87192,59801],{"class":106},[100,87194,713],{"class":258},[100,87196,87197],{"class":110},"'跳舞'",[100,87199,809],{"class":258},[100,87201,87202],{"class":102,"line":606},[100,87203,5908],{"class":258},[100,87205,87206],{"class":102,"line":612},[100,87207,3197],{"class":258},[19,87209,87210],{},[3095,87211],{"alt":79,"src":87212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,87214,87215],{},"总结1：",[19,87217,87218],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,87220,87221],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,87223,87224],{},"constructor指的是他的来源",[19,87226,87227],{},[3095,87228],{"alt":79,"src":87229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,87231,87232],{},[3095,87233],{"alt":79,"src":87234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,87236,87237],{},"总结2：",[19,87239,87240],{},[3095,87241],{"alt":79,"src":87242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,87244,87245],{},[3095,87246],{"alt":79,"src":87247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,87249,87250],{},[3095,87251],{"alt":79,"src":87252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[305,87254,87256],{"id":87255},"_4134-对象原型","4.13.4 对象原型",[19,87258,87259],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,87261,87262],{},"对象原型就是__proto__这个属性",[19,87264,87265],{},[3095,87266],{"alt":79,"src":87267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,87269,87270],{},[3095,87271],{"alt":79,"src":87272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,87274,87275],{},[3095,87276],{"alt":79,"src":87277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,87279,87280],{},[3095,87281],{"alt":79,"src":87282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[73,87284,87286],{"className":54621,"code":87285,"language":54623,"meta":79,"style":79},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[32,87287,87288,87296,87304,87308,87312,87316,87321,87329],{"__ignoreMap":79},[100,87289,87290,87292,87294],{"class":102,"line":103},[100,87291,2676],{"class":258},[100,87293,53354],{"class":52854},[100,87295,52861],{"class":258},[100,87297,87298,87300,87302],{"class":102,"line":188},[100,87299,53698],{"class":258},[100,87301,53367],{"class":52854},[100,87303,52861],{"class":258},[100,87305,87306],{"class":102,"line":199},[100,87307,86928],{"class":258},[100,87309,87310],{"class":102,"line":532},[100,87311,3798],{"class":258},[100,87313,87314],{"class":102,"line":577},[100,87315,86937],{"class":258},[100,87317,87318],{"class":102,"line":589},[100,87319,87320],{"class":258},"    console.log(ldh)\n",[100,87322,87323,87325,87327],{"class":102,"line":595},[100,87324,53971],{"class":258},[100,87326,53367],{"class":52854},[100,87328,52861],{"class":258},[100,87330,87331,87333,87335],{"class":102,"line":601},[100,87332,53339],{"class":258},[100,87334,53354],{"class":52854},[100,87336,52861],{"class":258},[19,87338,87339],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,87341,87342],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,87344,87345],{},[3095,87346],{"alt":79,"src":87347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,87349,87350],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,87352,87353],{},"对象原型指向原型对象",[19,87355,87356],{},[3095,87357],{"alt":79,"src":87358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,87360,87361],{},[3095,87362],{"alt":79,"src":87363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,87365,87366],{},[3095,87367],{"alt":79,"src":87368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[305,87370,87372],{"id":87371},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,87374,87375],{},[3095,87376],{"alt":79,"src":87377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[26,87379,87380,87383,87386,87389],{},[29,87381,87382],{},"构造函数通过new的形式实例化得到实例对象",[29,87384,87385],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[29,87387,87388],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[29,87390,87391],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,87393,87394],{},[3095,87395],{"alt":79,"src":87396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,87398,87399],{},"题目梳理：",[19,87401,87402],{},[3095,87403],{"alt":79,"src":87404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[305,87406,87408],{"id":87407},"_4136-原型继承","4.13.6 原型继承",[19,87410,87411],{},[3095,87412],{"alt":79,"src":87413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,87415,87416],{},[3095,87417],{"alt":79,"src":87418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,87420,87421],{},[3095,87422],{"alt":79,"src":87423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,87425,87426],{},[3095,87427],{"alt":79,"src":87428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,87430,87431],{},[3095,87432],{"alt":79,"src":87433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,87435,87436],{},[3095,87437],{"alt":79,"src":87438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,87440,87441],{},[3095,87442],{"alt":79,"src":87443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,87445,87446],{},[3095,87447],{"alt":79,"src":87448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,87450,87451],{},"回顾：构造函数每次new得到对象都是不同的",[305,87453,87455],{"id":87454},"_4137-原型链","4.13.7 原型链",[19,87457,87458],{},[3095,87459],{"alt":79,"src":87460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,87462,87463],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,87465,87466],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,87468,87469],{},"大哥是Object",[19,87471,87472],{},[3095,87473],{"alt":79,"src":87474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,87476,87477],{},[3095,87478],{"alt":79,"src":87479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,87481,87482],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,87484,87485],{},"万物皆对象",[305,87487,87489],{"id":87488},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,87491,87492],{},"模态框",[19,87494,87495],{},"以后遇见这个效果直接使用这个就行",[19,87497,87498],{},[3095,87499],{"alt":79,"src":87500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,87502,87503],{},[3095,87504],{"alt":79,"src":87505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,87507,87508],{},[3095,87509],{"alt":79,"src":87510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,87512,87513],{},[3095,87514],{"alt":79,"src":87515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,87517,87518],{},"补充知识点：",[26,87520,87521],{},[29,87522,87523],{},"append()",[19,87525,87526],{},[3095,87527],{"alt":79,"src":87528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[73,87530,87532],{"className":52187,"code":87531,"language":52189,"meta":79,"style":79},"append(param1)\nappend(param1, param2)\nappend(param1, param2, \u002F* …, *\u002F paramN)\n\n\n\nlet div = document.createElement(\"div\");\nlet p = document.createElement(\"p\");\ndiv.append(p);\n\nconsole.log(div.childNodes); \u002F\u002F NodeList [ \u003Cp> ]\n",[32,87533,87534,87539,87544,87549,87553,87557,87561,87566,87571,87576,87580],{"__ignoreMap":79},[100,87535,87536],{"class":102,"line":103},[100,87537,87538],{"class":258},"append(param1)\n",[100,87540,87541],{"class":102,"line":188},[100,87542,87543],{"class":258},"append(param1, param2)\n",[100,87545,87546],{"class":102,"line":199},[100,87547,87548],{"class":258},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[100,87550,87551],{"class":102,"line":532},[100,87552,570],{"emptyLinePlaceholder":569},[100,87554,87555],{"class":102,"line":577},[100,87556,570],{"emptyLinePlaceholder":569},[100,87558,87559],{"class":102,"line":589},[100,87560,570],{"emptyLinePlaceholder":569},[100,87562,87563],{"class":102,"line":595},[100,87564,87565],{"class":258},"let div = document.createElement(\"div\");\n",[100,87567,87568],{"class":102,"line":601},[100,87569,87570],{"class":258},"let p = document.createElement(\"p\");\n",[100,87572,87573],{"class":102,"line":606},[100,87574,87575],{"class":258},"div.append(p);\n",[100,87577,87578],{"class":102,"line":612},[100,87579,570],{"emptyLinePlaceholder":569},[100,87581,87582,87585,87587],{"class":102,"line":618},[100,87583,87584],{"class":258},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[100,87586,19],{"class":52854},[100,87588,87589],{"class":258},"> ]\n",[26,87591,87592],{"start":188},[29,87593,87594],{},"remove()",[19,87596,87597],{},"自己删自己",[19,87599,87600],{},[3095,87601],{"alt":79,"src":87602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[73,87604,87606],{"className":52187,"code":87605,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .modal {\n      width: 300px;\n      min-height: 100px;\n      box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);\n      border-radius: 4px;\n      position: fixed;\n      z-index: 999;\n      left: 50%;\n      top: 50%;\n      transform: translate3d(-50%, -50%, 0);\n      background-color: #fff;\n    }\n\n    .modal .header {\n      line-height: 40px;\n      padding: 0 10px;\n      position: relative;\n      font-size: 20px;\n    }\n\n    .modal .header i {\n      font-style: normal;\n      color: #999;\n      position: absolute;\n      right: 15px;\n      top: -2px;\n      cursor: pointer;\n    }\n\n    .modal .body {\n      text-align: center;\n      padding: 10px;\n    }\n\n    .modal .footer {\n      display: flex;\n      justify-content: flex-end;\n      padding: 10px;\n    }\n\n    .modal .footer a {\n      padding: 3px 8px;\n      background: #ccc;\n      text-decoration: none;\n      color: #fff;\n      border-radius: 2px;\n      margin-right: 10px;\n      font-size: 14px;\n    }\n\n    .modal .footer a.submit {\n      background-color: #369;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton id=\"delete\">删除\u003C\u002Fbutton>\n  \u003Cbutton id=\"login\">登录\u003C\u002Fbutton>\n  \u003Cscript>\n    \u002F\u002F 1.Model 构造函数的封装  模态框\n    function Modal(title = '', message = '') {\n      \u002F\u002F 创建Model 模态框盒子\n      \u002F\u002F 1.1 创建div标签\n      this.modalBox = document.createElement('div')\n      \u002F\u002F 1.2 给div 添加类名为model\n      this.modalBox.className = 'modal'\n      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n      this.modalBox.innerHTML = `\n        \u003Cdiv class=\"header\">${title}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n        \u003Cdiv class=\"body\">${message}\u003C\u002Fdiv>\n      `\n      \u002F\u002F console.log(this.modalBox)\n    }\n    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n    \u002F\u002F 2.给构造函数原型对象挂载open方法\n    Modal.prototype.open = function () {\n      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n      const box = document.querySelector('.modal')\n      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n      box && box.remove()\n      \u002F\u002F 主要这个方法不要用箭头函数\n      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n      \u002F\u002F append可以增加对象\n      document.body.append(this.modalBox)\n\n      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n      this.modalBox.querySelector('i').addEventListener('click', () => {\n        \u002F\u002F 这个地方需要用到箭头函数\n        \u002F\u002F 这个this是指向的是上上级 是实例对象\n        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n        this.close()\n      })\n    }\n\n    \u002F\u002F 测试一下 点击 删除按钮\n    document.querySelector('#delete').addEventListener('click', () => {\n      \u002F\u002F 先调用Model构造函数\n      const del = new Modal('温馨的提示', '您没有删除权限操作')\n      \u002F\u002F 实例对象调用open方法\n      del.open()\n    })\n    \u002F\u002F 测试一下 点击 登录按钮\n    document.querySelector('#login').addEventListener('click', () => {\n      \u002F\u002F 先调用Model构造函数\n      const log = new Modal('友情提示', '您还没有登录呢')\n      \u002F\u002F 实例对象调用open方法\n      log.open()\n    })\n    \u002F\u002F 3.给构造函数原型对象挂载close方法\n    Modal.prototype.close = function () {\n      this.modalBox.remove()\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,87607,87608,87618,87632,87636,87644,87658,87678,87690,87698,87705,87717,87730,87765,87777,87788,87800,87812,87824,87851,87861,87865,87869,87878,87890,87904,87914,87926,87930,87934,87944,87955,87965,87975,87988,88001,88011,88015,88019,88028,88038,88050,88054,88058,88067,88077,88087,88099,88103,88107,88117,88133,88144,88154,88164,88176,88188,88200,88204,88208,88221,88232,88236,88244,88252,88256,88264,88284,88304,88312,88317,88343,88348,88353,88372,88377,88389,88394,88405,88415,88425,88430,88435,88439,88444,88449,88454,88474,88479,88499,88504,88518,88523,88528,88533,88549,88553,88558,88587,88592,88597,88602,88613,88617,88621,88625,88630,88655,88660,88685,88690,88699,88703,88708,88733,88737,88762,88766,88775,88779,88784,88802,88812,88816,88824,88832,88836],{"__ignoreMap":79},[100,87609,87610,87612,87614,87616],{"class":102,"line":103},[100,87611,52851],{"class":258},[100,87613,52855],{"class":52854},[100,87615,52858],{"class":106},[100,87617,52861],{"class":258},[100,87619,87620,87622,87624,87626,87628,87630],{"class":102,"line":188},[100,87621,2676],{"class":258},[100,87623,52189],{"class":52854},[100,87625,52870],{"class":106},[100,87627,472],{"class":258},[100,87629,52875],{"class":110},[100,87631,52861],{"class":258},[100,87633,87634],{"class":102,"line":199},[100,87635,570],{"emptyLinePlaceholder":569},[100,87637,87638,87640,87642],{"class":102,"line":532},[100,87639,2676],{"class":258},[100,87641,52888],{"class":52854},[100,87643,52861],{"class":258},[100,87645,87646,87648,87650,87652,87654,87656],{"class":102,"line":577},[100,87647,53698],{"class":258},[100,87649,52898],{"class":52854},[100,87651,52901],{"class":106},[100,87653,472],{"class":258},[100,87655,52906],{"class":110},[100,87657,52861],{"class":258},[100,87659,87660,87662,87664,87666,87668,87670,87672,87674,87676],{"class":102,"line":589},[100,87661,53698],{"class":258},[100,87663,52898],{"class":52854},[100,87665,16501],{"class":106},[100,87667,472],{"class":258},[100,87669,52945],{"class":110},[100,87671,52925],{"class":106},[100,87673,472],{"class":258},[100,87675,52952],{"class":110},[100,87677,52861],{"class":258},[100,87679,87680,87682,87684,87686,87688],{"class":102,"line":595},[100,87681,53698],{"class":258},[100,87683,52961],{"class":52854},[100,87685,52964],{"class":258},[100,87687,52961],{"class":52854},[100,87689,52861],{"class":258},[100,87691,87692,87694,87696],{"class":102,"line":601},[100,87693,53698],{"class":258},[100,87695,1677],{"class":52854},[100,87697,52861],{"class":258},[100,87699,87700,87703],{"class":102,"line":606},[100,87701,87702],{"class":106},"    .modal",[100,87704,17153],{"class":258},[100,87706,87707,87709,87711,87713,87715],{"class":102,"line":612},[100,87708,56325],{"class":117},[100,87710,52991],{"class":258},[100,87712,5572],{"class":117},[100,87714,53046],{"class":471},[100,87716,2927],{"class":258},[100,87718,87719,87722,87724,87726,87728],{"class":102,"line":618},[100,87720,87721],{"class":117},"      min-height",[100,87723,52991],{"class":258},[100,87725,2078],{"class":117},[100,87727,53046],{"class":471},[100,87729,2927],{"class":258},[100,87731,87732,87734,87736,87738,87740,87742,87744,87746,87748,87750,87752,87754,87756,87758,87760,87763],{"class":102,"line":623},[100,87733,80304],{"class":117},[100,87735,52991],{"class":258},[100,87737,1366],{"class":117},[100,87739,5692],{"class":117},[100,87741,3649],{"class":117},[100,87743,53046],{"class":471},[100,87745,80321],{"class":117},[100,87747,713],{"class":258},[100,87749,1366],{"class":117},[100,87751,14017],{"class":258},[100,87753,1366],{"class":117},[100,87755,14017],{"class":258},[100,87757,1366],{"class":117},[100,87759,14017],{"class":258},[100,87761,87762],{"class":117},"0.1",[100,87764,4321],{"class":258},[100,87766,87767,87769,87771,87773,87775],{"class":102,"line":629},[100,87768,56688],{"class":117},[100,87770,52991],{"class":258},[100,87772,748],{"class":117},[100,87774,53046],{"class":471},[100,87776,2927],{"class":258},[100,87778,87779,87781,87783,87786],{"class":102,"line":635},[100,87780,56313],{"class":117},[100,87782,52991],{"class":258},[100,87784,87785],{"class":117},"fixed",[100,87787,2927],{"class":258},[100,87789,87790,87793,87795,87798],{"class":102,"line":641},[100,87791,87792],{"class":117},"      z-index",[100,87794,52991],{"class":258},[100,87796,87797],{"class":117},"999",[100,87799,2927],{"class":258},[100,87801,87802,87804,87806,87808,87810],{"class":102,"line":647},[100,87803,56392],{"class":117},[100,87805,52991],{"class":258},[100,87807,862],{"class":117},[100,87809,2095],{"class":471},[100,87811,2927],{"class":258},[100,87813,87814,87816,87818,87820,87822],{"class":102,"line":653},[100,87815,56501],{"class":117},[100,87817,52991],{"class":258},[100,87819,862],{"class":117},[100,87821,2095],{"class":471},[100,87823,2927],{"class":258},[100,87825,87826,87828,87830,87832,87834,87837,87839,87841,87843,87845,87847,87849],{"class":102,"line":659},[100,87827,80345],{"class":117},[100,87829,52991],{"class":258},[100,87831,80350],{"class":117},[100,87833,713],{"class":258},[100,87835,87836],{"class":117},"-50",[100,87838,2095],{"class":471},[100,87840,14017],{"class":258},[100,87842,87836],{"class":117},[100,87844,2095],{"class":471},[100,87846,14017],{"class":258},[100,87848,1366],{"class":117},[100,87850,4321],{"class":258},[100,87852,87853,87855,87857,87859],{"class":102,"line":665},[100,87854,56438],{"class":117},[100,87856,52991],{"class":258},[100,87858,62396],{"class":117},[100,87860,2927],{"class":258},[100,87862,87863],{"class":102,"line":670},[100,87864,3798],{"class":258},[100,87866,87867],{"class":102,"line":675},[100,87868,570],{"emptyLinePlaceholder":569},[100,87870,87871,87873,87876],{"class":102,"line":699},[100,87872,87702],{"class":106},[100,87874,87875],{"class":106}," .header",[100,87877,17153],{"class":258},[100,87879,87880,87882,87884,87886,87888],{"class":102,"line":708},[100,87881,58913],{"class":117},[100,87883,52991],{"class":258},[100,87885,2168],{"class":117},[100,87887,53046],{"class":471},[100,87889,2927],{"class":258},[100,87891,87892,87894,87896,87898,87900,87902],{"class":102,"line":722},[100,87893,56249],{"class":117},[100,87895,52991],{"class":258},[100,87897,1366],{"class":117},[100,87899,3649],{"class":117},[100,87901,53046],{"class":471},[100,87903,2927],{"class":258},[100,87905,87906,87908,87910,87912],{"class":102,"line":735},[100,87907,56313],{"class":117},[100,87909,52991],{"class":258},[100,87911,56318],{"class":117},[100,87913,2927],{"class":258},[100,87915,87916,87918,87920,87922,87924],{"class":102,"line":754},[100,87917,56476],{"class":117},[100,87919,52991],{"class":258},[100,87921,2466],{"class":117},[100,87923,53046],{"class":471},[100,87925,2927],{"class":258},[100,87927,87928],{"class":102,"line":771},[100,87929,3798],{"class":258},[100,87931,87932],{"class":102,"line":776},[100,87933,570],{"emptyLinePlaceholder":569},[100,87935,87936,87938,87940,87942],{"class":102,"line":781},[100,87937,87702],{"class":106},[100,87939,87875],{"class":106},[100,87941,4633],{"class":52854},[100,87943,17153],{"class":258},[100,87945,87946,87949,87951,87953],{"class":102,"line":796},[100,87947,87948],{"class":117},"      font-style",[100,87950,52991],{"class":258},[100,87952,65395],{"class":117},[100,87954,2927],{"class":258},[100,87956,87957,87959,87961,87963],{"class":102,"line":812},[100,87958,58970],{"class":117},[100,87960,52991],{"class":258},[100,87962,63624],{"class":117},[100,87964,2927],{"class":258},[100,87966,87967,87969,87971,87973],{"class":102,"line":823},[100,87968,56313],{"class":117},[100,87970,52991],{"class":258},[100,87972,56385],{"class":117},[100,87974,2927],{"class":258},[100,87976,87977,87980,87982,87984,87986],{"class":102,"line":828},[100,87978,87979],{"class":117},"      right",[100,87981,52991],{"class":258},[100,87983,2342],{"class":117},[100,87985,53046],{"class":471},[100,87987,2927],{"class":258},[100,87989,87990,87992,87994,87997,87999],{"class":102,"line":840},[100,87991,56501],{"class":117},[100,87993,52991],{"class":258},[100,87995,87996],{"class":117},"-2",[100,87998,53046],{"class":471},[100,88000,2927],{"class":258},[100,88002,88003,88005,88007,88009],{"class":102,"line":845},[100,88004,63579],{"class":117},[100,88006,52991],{"class":258},[100,88008,63584],{"class":117},[100,88010,2927],{"class":258},[100,88012,88013],{"class":102,"line":868},[100,88014,3798],{"class":258},[100,88016,88017],{"class":102,"line":874},[100,88018,570],{"emptyLinePlaceholder":569},[100,88020,88021,88023,88026],{"class":102,"line":879},[100,88022,87702],{"class":106},[100,88024,88025],{"class":106}," .body",[100,88027,17153],{"class":258},[100,88029,88030,88032,88034,88036],{"class":102,"line":889},[100,88031,58840],{"class":117},[100,88033,52991],{"class":258},[100,88035,53146],{"class":117},[100,88037,2927],{"class":258},[100,88039,88040,88042,88044,88046,88048],{"class":102,"line":894},[100,88041,56249],{"class":117},[100,88043,52991],{"class":258},[100,88045,2213],{"class":117},[100,88047,53046],{"class":471},[100,88049,2927],{"class":258},[100,88051,88052],{"class":102,"line":900},[100,88053,3798],{"class":258},[100,88055,88056],{"class":102,"line":910},[100,88057,570],{"emptyLinePlaceholder":569},[100,88059,88060,88062,88065],{"class":102,"line":915},[100,88061,87702],{"class":106},[100,88063,88064],{"class":106}," .footer",[100,88066,17153],{"class":258},[100,88068,88069,88071,88073,88075],{"class":102,"line":929},[100,88070,56563],{"class":117},[100,88072,52991],{"class":258},[100,88074,53031],{"class":117},[100,88076,2927],{"class":258},[100,88078,88079,88081,88083,88085],{"class":102,"line":935},[100,88080,56574],{"class":117},[100,88082,52991],{"class":258},[100,88084,53134],{"class":117},[100,88086,2927],{"class":258},[100,88088,88089,88091,88093,88095,88097],{"class":102,"line":945},[100,88090,56249],{"class":117},[100,88092,52991],{"class":258},[100,88094,2213],{"class":117},[100,88096,53046],{"class":471},[100,88098,2927],{"class":258},[100,88100,88101],{"class":102,"line":950},[100,88102,3798],{"class":258},[100,88104,88105],{"class":102,"line":955},[100,88106,570],{"emptyLinePlaceholder":569},[100,88108,88109,88111,88113,88115],{"class":102,"line":972},[100,88110,87702],{"class":106},[100,88112,88064],{"class":106},[100,88114,3031],{"class":52854},[100,88116,17153],{"class":258},[100,88118,88119,88121,88123,88125,88127,88129,88131],{"class":102,"line":11370},[100,88120,56249],{"class":117},[100,88122,52991],{"class":258},[100,88124,1849],{"class":117},[100,88126,53046],{"class":471},[100,88128,3694],{"class":117},[100,88130,53046],{"class":471},[100,88132,2927],{"class":258},[100,88134,88135,88137,88139,88142],{"class":102,"line":11375},[100,88136,63275],{"class":117},[100,88138,52991],{"class":258},[100,88140,88141],{"class":117},"#ccc",[100,88143,2927],{"class":258},[100,88145,88146,88148,88150,88152],{"class":102,"line":11380},[100,88147,65524],{"class":117},[100,88149,52991],{"class":258},[100,88151,56291],{"class":117},[100,88153,2927],{"class":258},[100,88155,88156,88158,88160,88162],{"class":102,"line":11385},[100,88157,58970],{"class":117},[100,88159,52991],{"class":258},[100,88161,62396],{"class":117},[100,88163,2927],{"class":258},[100,88165,88166,88168,88170,88172,88174],{"class":102,"line":11394},[100,88167,56688],{"class":117},[100,88169,52991],{"class":258},[100,88171,465],{"class":117},[100,88173,53046],{"class":471},[100,88175,2927],{"class":258},[100,88177,88178,88180,88182,88184,88186],{"class":102,"line":11399},[100,88179,63304],{"class":117},[100,88181,52991],{"class":258},[100,88183,2213],{"class":117},[100,88185,53046],{"class":471},[100,88187,2927],{"class":258},[100,88189,88190,88192,88194,88196,88198],{"class":102,"line":11405},[100,88191,56476],{"class":117},[100,88193,52991],{"class":258},[100,88195,2316],{"class":117},[100,88197,53046],{"class":471},[100,88199,2927],{"class":258},[100,88201,88202],{"class":102,"line":11426},[100,88203,3798],{"class":258},[100,88205,88206],{"class":102,"line":11432},[100,88207,570],{"emptyLinePlaceholder":569},[100,88209,88210,88212,88214,88216,88219],{"class":102,"line":11446},[100,88211,87702],{"class":106},[100,88213,88064],{"class":106},[100,88215,3031],{"class":52854},[100,88217,88218],{"class":106},".submit",[100,88220,17153],{"class":258},[100,88222,88223,88225,88227,88230],{"class":102,"line":11452},[100,88224,56438],{"class":117},[100,88226,52991],{"class":258},[100,88228,88229],{"class":117},"#369",[100,88231,2927],{"class":258},[100,88233,88234],{"class":102,"line":11479},[100,88235,3798],{"class":258},[100,88237,88238,88240,88242],{"class":102,"line":11488},[100,88239,53971],{"class":258},[100,88241,1677],{"class":52854},[100,88243,52861],{"class":258},[100,88245,88246,88248,88250],{"class":102,"line":11494},[100,88247,53339],{"class":258},[100,88249,52888],{"class":52854},[100,88251,52861],{"class":258},[100,88253,88254],{"class":102,"line":11502},[100,88255,570],{"emptyLinePlaceholder":569},[100,88257,88258,88260,88262],{"class":102,"line":11507},[100,88259,2676],{"class":258},[100,88261,53354],{"class":52854},[100,88263,52861],{"class":258},[100,88265,88266,88268,88270,88272,88274,88277,88280,88282],{"class":102,"line":18185},[100,88267,53698],{"class":258},[100,88269,55441],{"class":52854},[100,88271,16540],{"class":106},[100,88273,472],{"class":258},[100,88275,88276],{"class":110},"\"delete\"",[100,88278,88279],{"class":258},">删除\u003C\u002F",[100,88281,55441],{"class":52854},[100,88283,52861],{"class":258},[100,88285,88286,88288,88290,88292,88294,88297,88300,88302],{"class":102,"line":18191},[100,88287,53698],{"class":258},[100,88289,55441],{"class":52854},[100,88291,16540],{"class":106},[100,88293,472],{"class":258},[100,88295,88296],{"class":110},"\"login\"",[100,88298,88299],{"class":258},">登录\u003C\u002F",[100,88301,55441],{"class":52854},[100,88303,52861],{"class":258},[100,88305,88306,88308,88310],{"class":102,"line":18214},[100,88307,53698],{"class":258},[100,88309,53367],{"class":52854},[100,88311,52861],{"class":258},[100,88313,88314],{"class":102,"line":18220},[100,88315,88316],{"class":1836},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[100,88318,88319,88321,88324,88326,88328,88330,88332,88334,88337,88339,88341],{"class":102,"line":18243},[100,88320,71638],{"class":471},[100,88322,88323],{"class":106}," Modal",[100,88325,713],{"class":258},[100,88327,52961],{"class":6812},[100,88329,583],{"class":471},[100,88331,71484],{"class":110},[100,88333,14017],{"class":258},[100,88335,88336],{"class":6812},"message",[100,88338,583],{"class":471},[100,88340,71484],{"class":110},[100,88342,14024],{"class":258},[100,88344,88345],{"class":102,"line":18257},[100,88346,88347],{"class":1836},"      \u002F\u002F 创建Model 模态框盒子\n",[100,88349,88350],{"class":102,"line":18277},[100,88351,88352],{"class":1836},"      \u002F\u002F 1.1 创建div标签\n",[100,88354,88355,88357,88360,88362,88364,88366,88368,88370],{"class":102,"line":18283},[100,88356,71605],{"class":117},[100,88358,88359],{"class":258},".modalBox ",[100,88361,472],{"class":471},[100,88363,55950],{"class":258},[100,88365,71705],{"class":106},[100,88367,713],{"class":258},[100,88369,83485],{"class":110},[100,88371,809],{"class":258},[100,88373,88374],{"class":102,"line":18294},[100,88375,88376],{"class":1836},"      \u002F\u002F 1.2 给div 添加类名为model\n",[100,88378,88379,88381,88384,88386],{"class":102,"line":18317},[100,88380,71605],{"class":117},[100,88382,88383],{"class":258},".modalBox.className ",[100,88385,472],{"class":471},[100,88387,88388],{"class":110}," 'modal'\n",[100,88390,88391],{"class":102,"line":18339},[100,88392,88393],{"class":1836},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[100,88395,88396,88398,88401,88403],{"class":102,"line":18344},[100,88397,71605],{"class":117},[100,88399,88400],{"class":258},".modalBox.innerHTML ",[100,88402,472],{"class":471},[100,88404,71722],{"class":110},[100,88406,88407,88410,88412],{"class":102,"line":18350},[100,88408,88409],{"class":110},"        \u003Cdiv class=\"header\">${",[100,88411,52961],{"class":258},[100,88413,88414],{"class":110},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[100,88416,88417,88420,88422],{"class":102,"line":18364},[100,88418,88419],{"class":110},"        \u003Cdiv class=\"body\">${",[100,88421,88336],{"class":258},[100,88423,88424],{"class":110},"}\u003C\u002Fdiv>\n",[100,88426,88427],{"class":102,"line":18377},[100,88428,88429],{"class":110},"      `\n",[100,88431,88432],{"class":102,"line":18382},[100,88433,88434],{"class":1836},"      \u002F\u002F console.log(this.modalBox)\n",[100,88436,88437],{"class":102,"line":18396},[100,88438,3798],{"class":258},[100,88440,88441],{"class":102,"line":18401},[100,88442,88443],{"class":1836},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[100,88445,88446],{"class":102,"line":18407},[100,88447,88448],{"class":1836},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[100,88450,88451],{"class":102,"line":18412},[100,88452,88453],{"class":1836},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[100,88455,88456,88459,88461,88463,88465,88468,88470,88472],{"class":102,"line":18426},[100,88457,88458],{"class":117},"    Modal",[100,88460,2325],{"class":258},[100,88462,87131],{"class":117},[100,88464,2325],{"class":258},[100,88466,88467],{"class":106},"open",[100,88469,583],{"class":471},[100,88471,60472],{"class":471},[100,88473,56006],{"class":258},[100,88475,88476],{"class":102,"line":18431},[100,88477,88478],{"class":1836},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[100,88480,88481,88483,88486,88488,88490,88492,88494,88497],{"class":102,"line":18436},[100,88482,59782],{"class":471},[100,88484,88485],{"class":117}," box",[100,88487,583],{"class":471},[100,88489,55950],{"class":258},[100,88491,55953],{"class":106},[100,88493,713],{"class":258},[100,88495,88496],{"class":110},"'.modal'",[100,88498,809],{"class":258},[100,88500,88501],{"class":102,"line":18450},[100,88502,88503],{"class":1836},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[100,88505,88506,88509,88511,88514,88516],{"class":102,"line":18462},[100,88507,88508],{"class":258},"      box ",[100,88510,3336],{"class":471},[100,88512,88513],{"class":258}," box.",[100,88515,58560],{"class":106},[100,88517,3587],{"class":258},[100,88519,88520],{"class":102,"line":18467},[100,88521,88522],{"class":1836},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[100,88524,88525],{"class":102,"line":18480},[100,88526,88527],{"class":1836},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[100,88529,88530],{"class":102,"line":18485},[100,88531,88532],{"class":1836},"      \u002F\u002F append可以增加对象\n",[100,88534,88535,88538,88541,88543,88546],{"class":102,"line":18490},[100,88536,88537],{"class":258},"      document.body.",[100,88539,88540],{"class":106},"append",[100,88542,713],{"class":258},[100,88544,88545],{"class":117},"this",[100,88547,88548],{"class":258},".modalBox)\n",[100,88550,88551],{"class":102,"line":18495},[100,88552,570],{"emptyLinePlaceholder":569},[100,88554,88555],{"class":102,"line":18508},[100,88556,88557],{"class":1836},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[100,88559,88560,88562,88565,88567,88569,88572,88574,88576,88578,88580,88583,88585],{"class":102,"line":18513},[100,88561,71605],{"class":117},[100,88563,88564],{"class":258},".modalBox.",[100,88566,55953],{"class":106},[100,88568,713],{"class":258},[100,88570,88571],{"class":110},"'i'",[100,88573,32389],{"class":258},[100,88575,59367],{"class":106},[100,88577,713],{"class":258},[100,88579,59372],{"class":110},[100,88581,88582],{"class":258},", () ",[100,88584,86274],{"class":471},[100,88586,17153],{"class":258},[100,88588,88589],{"class":102,"line":34189},[100,88590,88591],{"class":1836},"        \u002F\u002F 这个地方需要用到箭头函数\n",[100,88593,88594],{"class":102,"line":34195},[100,88595,88596],{"class":1836},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[100,88598,88599],{"class":102,"line":34201},[100,88600,88601],{"class":1836},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[100,88603,88604,88606,88608,88611],{"class":102,"line":34207},[100,88605,66280],{"class":117},[100,88607,2325],{"class":258},[100,88609,88610],{"class":106},"close",[100,88612,3587],{"class":258},[100,88614,88615],{"class":102,"line":34213},[100,88616,66369],{"class":258},[100,88618,88619],{"class":102,"line":34224},[100,88620,3798],{"class":258},[100,88622,88623],{"class":102,"line":34230},[100,88624,570],{"emptyLinePlaceholder":569},[100,88626,88627],{"class":102,"line":34250},[100,88628,88629],{"class":1836},"    \u002F\u002F 测试一下 点击 删除按钮\n",[100,88631,88632,88634,88636,88638,88641,88643,88645,88647,88649,88651,88653],{"class":102,"line":34256},[100,88633,53961],{"class":258},[100,88635,55953],{"class":106},[100,88637,713],{"class":258},[100,88639,88640],{"class":110},"'#delete'",[100,88642,32389],{"class":258},[100,88644,59367],{"class":106},[100,88646,713],{"class":258},[100,88648,59372],{"class":110},[100,88650,88582],{"class":258},[100,88652,86274],{"class":471},[100,88654,17153],{"class":258},[100,88656,88657],{"class":102,"line":34267},[100,88658,88659],{"class":1836},"      \u002F\u002F 先调用Model构造函数\n",[100,88661,88662,88664,88667,88669,88671,88673,88675,88678,88680,88683],{"class":102,"line":34273},[100,88663,59782],{"class":471},[100,88665,88666],{"class":117}," del",[100,88668,583],{"class":471},[100,88670,13160],{"class":471},[100,88672,88323],{"class":106},[100,88674,713],{"class":258},[100,88676,88677],{"class":110},"'温馨的提示'",[100,88679,14017],{"class":258},[100,88681,88682],{"class":110},"'您没有删除权限操作'",[100,88684,809],{"class":258},[100,88686,88687],{"class":102,"line":34279},[100,88688,88689],{"class":1836},"      \u002F\u002F 实例对象调用open方法\n",[100,88691,88692,88695,88697],{"class":102,"line":34285},[100,88693,88694],{"class":258},"      del.",[100,88696,88467],{"class":106},[100,88698,3587],{"class":258},[100,88700,88701],{"class":102,"line":34291},[100,88702,35016],{"class":258},[100,88704,88705],{"class":102,"line":34297},[100,88706,88707],{"class":1836},"    \u002F\u002F 测试一下 点击 登录按钮\n",[100,88709,88710,88712,88714,88716,88719,88721,88723,88725,88727,88729,88731],{"class":102,"line":34303},[100,88711,53961],{"class":258},[100,88713,55953],{"class":106},[100,88715,713],{"class":258},[100,88717,88718],{"class":110},"'#login'",[100,88720,32389],{"class":258},[100,88722,59367],{"class":106},[100,88724,713],{"class":258},[100,88726,59372],{"class":110},[100,88728,88582],{"class":258},[100,88730,86274],{"class":471},[100,88732,17153],{"class":258},[100,88734,88735],{"class":102,"line":34309},[100,88736,88659],{"class":1836},[100,88738,88739,88741,88744,88746,88748,88750,88752,88755,88757,88760],{"class":102,"line":34329},[100,88740,59782],{"class":471},[100,88742,88743],{"class":117}," log",[100,88745,583],{"class":471},[100,88747,13160],{"class":471},[100,88749,88323],{"class":106},[100,88751,713],{"class":258},[100,88753,88754],{"class":110},"'友情提示'",[100,88756,14017],{"class":258},[100,88758,88759],{"class":110},"'您还没有登录呢'",[100,88761,809],{"class":258},[100,88763,88764],{"class":102,"line":34335},[100,88765,88689],{"class":1836},[100,88767,88768,88771,88773],{"class":102,"line":34351},[100,88769,88770],{"class":258},"      log.",[100,88772,88467],{"class":106},[100,88774,3587],{"class":258},[100,88776,88777],{"class":102,"line":34357},[100,88778,35016],{"class":258},[100,88780,88781],{"class":102,"line":34371},[100,88782,88783],{"class":1836},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[100,88785,88786,88788,88790,88792,88794,88796,88798,88800],{"class":102,"line":34377},[100,88787,88458],{"class":117},[100,88789,2325],{"class":258},[100,88791,87131],{"class":117},[100,88793,2325],{"class":258},[100,88795,88610],{"class":106},[100,88797,583],{"class":471},[100,88799,60472],{"class":471},[100,88801,56006],{"class":258},[100,88803,88804,88806,88808,88810],{"class":102,"line":34392},[100,88805,71605],{"class":117},[100,88807,88564],{"class":258},[100,88809,58560],{"class":106},[100,88811,3587],{"class":258},[100,88813,88814],{"class":102,"line":34398},[100,88815,3798],{"class":258},[100,88817,88818,88820,88822],{"class":102,"line":34407},[100,88819,53971],{"class":258},[100,88821,53367],{"class":52854},[100,88823,52861],{"class":258},[100,88825,88826,88828,88830],{"class":102,"line":34413},[100,88827,53339],{"class":258},[100,88829,53354],{"class":52854},[100,88831,52861],{"class":258},[100,88833,88834],{"class":102,"line":34422},[100,88835,570],{"emptyLinePlaceholder":569},[100,88837,88838,88840,88842],{"class":102,"line":34428},[100,88839,53339],{"class":258},[100,88841,52189],{"class":52854},[100,88843,52861],{"class":258},[19,88845,88846],{},[3095,88847],{"alt":79,"src":88848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,88850,88852],{"id":88851},"_414-深浅拷贝","4.14 深浅拷贝",[305,88854,88856],{"id":88855},"_4141-浅拷贝","4.14.1 浅拷贝",[19,88858,88859],{},[3095,88860],{"alt":79,"src":88861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,88863,88864],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,88866,88867],{},[3095,88868],{"alt":79,"src":88869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,88871,88872],{},[3095,88873],{"alt":79,"src":88874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,88876,88877],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,88879,88880],{},[3095,88881],{"alt":79,"src":88882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,88884,12914],{},[19,88886,88887],{},[3095,88888],{"alt":79,"src":88889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[305,88891,88893],{"id":88892},"_4142-深拷贝","4.14.2 深拷贝",[19,88895,88896],{},"深拷贝：拷贝的是对象，不是地址",[19,88898,88899],{},"常用的三种方法：",[26,88901,88902,88905,88908],{},[29,88903,88904],{},"通过递归实现深拷贝",[29,88906,88907],{},"lodash\u002FcloneDeep",[29,88909,88910],{},"通过JSON.stringify()实现",[23579,88912,88914],{"id":88913},"_41421-递归函数","4.14.2.1 递归函数",[19,88916,88917],{},[3095,88918],{"alt":79,"src":88919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[26,88921,88922],{},[29,88923,88924],{},"死递归占溢出：",[73,88926,88928],{"className":54621,"code":88927,"language":54623,"meta":79,"style":79},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[32,88929,88930,88938,88946,88950,88955,88959,88964,88972],{"__ignoreMap":79},[100,88931,88932,88934,88936],{"class":102,"line":103},[100,88933,2676],{"class":258},[100,88935,53354],{"class":52854},[100,88937,52861],{"class":258},[100,88939,88940,88942,88944],{"class":102,"line":188},[100,88941,53698],{"class":258},[100,88943,53367],{"class":52854},[100,88945,52861],{"class":258},[100,88947,88948],{"class":102,"line":199},[100,88949,78697],{"class":258},[100,88951,88952],{"class":102,"line":532},[100,88953,88954],{"class":258},"      fn()\n",[100,88956,88957],{"class":102,"line":577},[100,88958,3798],{"class":258},[100,88960,88961],{"class":102,"line":589},[100,88962,88963],{"class":258},"    fn()\n",[100,88965,88966,88968,88970],{"class":102,"line":595},[100,88967,53971],{"class":258},[100,88969,53367],{"class":52854},[100,88971,52861],{"class":258},[100,88973,88974,88976,88978],{"class":102,"line":601},[100,88975,53339],{"class":258},[100,88977,53354],{"class":52854},[100,88979,52861],{"class":258},[26,88981,88982],{"start":188},[29,88983,88984],{},"递归函数要加判断条件：",[19,88986,88987],{},[3095,88988],{"alt":79,"src":88989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[26,88991,88992],{"start":199},[29,88993,88994],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[73,88996,88998],{"className":52187,"code":88997,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv>\u003C\u002Fdiv>\n  \u003Cscript>\n    function getTime() {\n      document.querySelector('div').innerHTML = new Date().toLocaleString()\n      setTimeout(getTime, 1000)\n    }\n    getTime()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,88999,89000,89010,89024,89028,89036,89050,89070,89082,89090,89094,89102,89114,89122,89130,89155,89167,89171,89178,89186,89194,89198],{"__ignoreMap":79},[100,89001,89002,89004,89006,89008],{"class":102,"line":103},[100,89003,52851],{"class":258},[100,89005,52855],{"class":52854},[100,89007,52858],{"class":106},[100,89009,52861],{"class":258},[100,89011,89012,89014,89016,89018,89020,89022],{"class":102,"line":188},[100,89013,2676],{"class":258},[100,89015,52189],{"class":52854},[100,89017,52870],{"class":106},[100,89019,472],{"class":258},[100,89021,52875],{"class":110},[100,89023,52861],{"class":258},[100,89025,89026],{"class":102,"line":199},[100,89027,570],{"emptyLinePlaceholder":569},[100,89029,89030,89032,89034],{"class":102,"line":532},[100,89031,2676],{"class":258},[100,89033,52888],{"class":52854},[100,89035,52861],{"class":258},[100,89037,89038,89040,89042,89044,89046,89048],{"class":102,"line":577},[100,89039,53698],{"class":258},[100,89041,52898],{"class":52854},[100,89043,52901],{"class":106},[100,89045,472],{"class":258},[100,89047,52906],{"class":110},[100,89049,52861],{"class":258},[100,89051,89052,89054,89056,89058,89060,89062,89064,89066,89068],{"class":102,"line":589},[100,89053,53698],{"class":258},[100,89055,52898],{"class":52854},[100,89057,16501],{"class":106},[100,89059,472],{"class":258},[100,89061,52945],{"class":110},[100,89063,52925],{"class":106},[100,89065,472],{"class":258},[100,89067,52952],{"class":110},[100,89069,52861],{"class":258},[100,89071,89072,89074,89076,89078,89080],{"class":102,"line":595},[100,89073,53698],{"class":258},[100,89075,52961],{"class":52854},[100,89077,52964],{"class":258},[100,89079,52961],{"class":52854},[100,89081,52861],{"class":258},[100,89083,89084,89086,89088],{"class":102,"line":601},[100,89085,53339],{"class":258},[100,89087,52888],{"class":52854},[100,89089,52861],{"class":258},[100,89091,89092],{"class":102,"line":606},[100,89093,570],{"emptyLinePlaceholder":569},[100,89095,89096,89098,89100],{"class":102,"line":612},[100,89097,2676],{"class":258},[100,89099,53354],{"class":52854},[100,89101,52861],{"class":258},[100,89103,89104,89106,89108,89110,89112],{"class":102,"line":618},[100,89105,53698],{"class":258},[100,89107,53165],{"class":52854},[100,89109,56868],{"class":258},[100,89111,53165],{"class":52854},[100,89113,52861],{"class":258},[100,89115,89116,89118,89120],{"class":102,"line":623},[100,89117,53698],{"class":258},[100,89119,53367],{"class":52854},[100,89121,52861],{"class":258},[100,89123,89124,89126,89128],{"class":102,"line":629},[100,89125,71638],{"class":471},[100,89127,75327],{"class":106},[100,89129,12435],{"class":258},[100,89131,89132,89134,89136,89138,89140,89142,89144,89146,89148,89150,89153],{"class":102,"line":635},[100,89133,57325],{"class":258},[100,89135,55953],{"class":106},[100,89137,713],{"class":258},[100,89139,83485],{"class":110},[100,89141,75803],{"class":258},[100,89143,472],{"class":471},[100,89145,13160],{"class":471},[100,89147,75343],{"class":106},[100,89149,18842],{"class":258},[100,89151,89152],{"class":106},"toLocaleString",[100,89154,3587],{"class":258},[100,89156,89157,89160,89163,89165],{"class":102,"line":641},[100,89158,89159],{"class":106},"      setTimeout",[100,89161,89162],{"class":258},"(getTime, ",[100,89164,8006],{"class":117},[100,89166,809],{"class":258},[100,89168,89169],{"class":102,"line":647},[100,89170,3798],{"class":258},[100,89172,89173,89176],{"class":102,"line":653},[100,89174,89175],{"class":106},"    getTime",[100,89177,3587],{"class":258},[100,89179,89180,89182,89184],{"class":102,"line":659},[100,89181,53971],{"class":258},[100,89183,53367],{"class":52854},[100,89185,52861],{"class":258},[100,89187,89188,89190,89192],{"class":102,"line":665},[100,89189,53339],{"class":258},[100,89191,53354],{"class":52854},[100,89193,52861],{"class":258},[100,89195,89196],{"class":102,"line":670},[100,89197,570],{"emptyLinePlaceholder":569},[100,89199,89200,89202,89204],{"class":102,"line":675},[100,89201,53339],{"class":258},[100,89203,52189],{"class":52854},[100,89205,52861],{"class":258},[19,89207,89208],{},[3095,89209],{"alt":79,"src":89210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[26,89212,89213],{"start":532},[29,89214,88904],{},[19,89216,89217],{},[3095,89218],{"alt":79,"src":89219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,89221,89222],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,89224,40743],{},[19,89226,89227],{},"这个是简易版的递归函数深拷贝",[19,89229,89230],{},"一定要注意先数组再对象，因为万物皆可对象",[73,89232,89234],{"className":52187,"code":89233,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      uname: 'pink',\n      age: 18,\n      hobby: ['乒乓球', '足球'],\n      family: {\n        baby: '小pink'\n      }\n    }\n    const o = {}\n    \u002F\u002F 拷贝函数\n    function deepCopy(newObj, oldObj) {\n      for (let k in oldObj) {\n        \u002F\u002F 处理数组的问题\n        \u002F\u002F 判断是否属于数组\n        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n        if (oldObj[k] instanceof Array) {\n          \u002F\u002F newObj[k]  接收的内容放到[]\n          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n          newObj[k] = []\n          deepCopy(newObj[k], oldObj[k])\n        } else if (oldObj[k] instanceof Object) {\n          newObj[k] = {}\n          deepCopy(newObj[k], oldObj[k])\n        } else {\n          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n          \u002F\u002F newObj[k]与newObj写法是等价的\n          newObj[k] = oldObj[k]\n        }\n      }\n    }\n    deepCopy(o, obj) \u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n    console.log(o)\n    o.age = 20\n    o.hobby[0] = '篮球'\n    o.family = '老pink'\n    console.log(obj)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,89235,89236,89246,89260,89264,89272,89286,89306,89318,89326,89330,89338,89346,89356,89365,89373,89389,89393,89401,89405,89409,89421,89426,89445,89461,89466,89471,89476,89491,89496,89501,89510,89518,89535,89543,89549,89557,89562,89567,89576,89580,89584,89588,89599,89608,89618,89632,89642,89650,89658,89666,89670],{"__ignoreMap":79},[100,89237,89238,89240,89242,89244],{"class":102,"line":103},[100,89239,52851],{"class":258},[100,89241,52855],{"class":52854},[100,89243,52858],{"class":106},[100,89245,52861],{"class":258},[100,89247,89248,89250,89252,89254,89256,89258],{"class":102,"line":188},[100,89249,2676],{"class":258},[100,89251,52189],{"class":52854},[100,89253,52870],{"class":106},[100,89255,472],{"class":258},[100,89257,52875],{"class":110},[100,89259,52861],{"class":258},[100,89261,89262],{"class":102,"line":199},[100,89263,570],{"emptyLinePlaceholder":569},[100,89265,89266,89268,89270],{"class":102,"line":532},[100,89267,2676],{"class":258},[100,89269,52888],{"class":52854},[100,89271,52861],{"class":258},[100,89273,89274,89276,89278,89280,89282,89284],{"class":102,"line":577},[100,89275,53698],{"class":258},[100,89277,52898],{"class":52854},[100,89279,52901],{"class":106},[100,89281,472],{"class":258},[100,89283,52906],{"class":110},[100,89285,52861],{"class":258},[100,89287,89288,89290,89292,89294,89296,89298,89300,89302,89304],{"class":102,"line":589},[100,89289,53698],{"class":258},[100,89291,52898],{"class":52854},[100,89293,16501],{"class":106},[100,89295,472],{"class":258},[100,89297,52945],{"class":110},[100,89299,52925],{"class":106},[100,89301,472],{"class":258},[100,89303,52952],{"class":110},[100,89305,52861],{"class":258},[100,89307,89308,89310,89312,89314,89316],{"class":102,"line":595},[100,89309,53698],{"class":258},[100,89311,52961],{"class":52854},[100,89313,52964],{"class":258},[100,89315,52961],{"class":52854},[100,89317,52861],{"class":258},[100,89319,89320,89322,89324],{"class":102,"line":601},[100,89321,53339],{"class":258},[100,89323,52888],{"class":52854},[100,89325,52861],{"class":258},[100,89327,89328],{"class":102,"line":606},[100,89329,570],{"emptyLinePlaceholder":569},[100,89331,89332,89334,89336],{"class":102,"line":612},[100,89333,2676],{"class":258},[100,89335,53354],{"class":52854},[100,89337,52861],{"class":258},[100,89339,89340,89342,89344],{"class":102,"line":618},[100,89341,53698],{"class":258},[100,89343,53367],{"class":52854},[100,89345,52861],{"class":258},[100,89347,89348,89350,89352,89354],{"class":102,"line":623},[100,89349,12803],{"class":471},[100,89351,71525],{"class":117},[100,89353,583],{"class":471},[100,89355,17153],{"class":258},[100,89357,89358,89360,89363],{"class":102,"line":629},[100,89359,73170],{"class":258},[100,89361,89362],{"class":110},"'pink'",[100,89364,33024],{"class":258},[100,89366,89367,89369,89371],{"class":102,"line":635},[100,89368,73180],{"class":258},[100,89370,2417],{"class":117},[100,89372,33024],{"class":258},[100,89374,89375,89378,89381,89383,89386],{"class":102,"line":641},[100,89376,89377],{"class":258},"      hobby: [",[100,89379,89380],{"class":110},"'乒乓球'",[100,89382,14017],{"class":258},[100,89384,89385],{"class":110},"'足球'",[100,89387,89388],{"class":258},"],\n",[100,89390,89391],{"class":102,"line":647},[100,89392,79426],{"class":258},[100,89394,89395,89398],{"class":102,"line":653},[100,89396,89397],{"class":258},"        baby: ",[100,89399,89400],{"class":110},"'小pink'\n",[100,89402,89403],{"class":102,"line":659},[100,89404,53952],{"class":258},[100,89406,89407],{"class":102,"line":665},[100,89408,3798],{"class":258},[100,89410,89411,89413,89416,89418],{"class":102,"line":670},[100,89412,12803],{"class":471},[100,89414,89415],{"class":117}," o",[100,89417,583],{"class":471},[100,89419,89420],{"class":258}," {}\n",[100,89422,89423],{"class":102,"line":675},[100,89424,89425],{"class":1836},"    \u002F\u002F 拷贝函数\n",[100,89427,89428,89430,89433,89435,89438,89440,89443],{"class":102,"line":699},[100,89429,71638],{"class":471},[100,89431,89432],{"class":106}," deepCopy",[100,89434,713],{"class":258},[100,89436,89437],{"class":6812},"newObj",[100,89439,14017],{"class":258},[100,89441,89442],{"class":6812},"oldObj",[100,89444,14024],{"class":258},[100,89446,89447,89449,89451,89453,89456,89458],{"class":102,"line":708},[100,89448,53838],{"class":471},[100,89450,3283],{"class":258},[100,89452,53401],{"class":471},[100,89454,89455],{"class":258}," k ",[100,89457,854],{"class":471},[100,89459,89460],{"class":258}," oldObj) {\n",[100,89462,89463],{"class":102,"line":722},[100,89464,89465],{"class":1836},"        \u002F\u002F 处理数组的问题\n",[100,89467,89468],{"class":102,"line":735},[100,89469,89470],{"class":1836},"        \u002F\u002F 判断是否属于数组\n",[100,89472,89473],{"class":102,"line":754},[100,89474,89475],{"class":1836},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[100,89477,89478,89480,89483,89486,89489],{"class":102,"line":771},[100,89479,4106],{"class":471},[100,89481,89482],{"class":258}," (oldObj[k] ",[100,89484,89485],{"class":471},"instanceof",[100,89487,89488],{"class":106}," Array",[100,89490,14024],{"class":258},[100,89492,89493],{"class":102,"line":776},[100,89494,89495],{"class":1836},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[100,89497,89498],{"class":102,"line":781},[100,89499,89500],{"class":1836},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[100,89502,89503,89506,89508],{"class":102,"line":796},[100,89504,89505],{"class":258},"          newObj[k] ",[100,89507,472],{"class":471},[100,89509,53392],{"class":258},[100,89511,89512,89515],{"class":102,"line":812},[100,89513,89514],{"class":106},"          deepCopy",[100,89516,89517],{"class":258},"(newObj[k], oldObj[k])\n",[100,89519,89520,89522,89524,89526,89528,89530,89533],{"class":102,"line":823},[100,89521,81634],{"class":258},[100,89523,3322],{"class":471},[100,89525,3325],{"class":471},[100,89527,89482],{"class":258},[100,89529,89485],{"class":471},[100,89531,89532],{"class":106}," Object",[100,89534,14024],{"class":258},[100,89536,89537,89539,89541],{"class":102,"line":828},[100,89538,89505],{"class":258},[100,89540,472],{"class":471},[100,89542,89420],{"class":258},[100,89544,89545,89547],{"class":102,"line":840},[100,89546,89514],{"class":106},[100,89548,89517],{"class":258},[100,89550,89551,89553,89555],{"class":102,"line":845},[100,89552,81634],{"class":258},[100,89554,3322],{"class":471},[100,89556,17153],{"class":258},[100,89558,89559],{"class":102,"line":868},[100,89560,89561],{"class":1836},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[100,89563,89564],{"class":102,"line":874},[100,89565,89566],{"class":1836},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[100,89568,89569,89571,89573],{"class":102,"line":879},[100,89570,89505],{"class":258},[100,89572,472],{"class":471},[100,89574,89575],{"class":258}," oldObj[k]\n",[100,89577,89578],{"class":102,"line":889},[100,89579,4138],{"class":258},[100,89581,89582],{"class":102,"line":894},[100,89583,53952],{"class":258},[100,89585,89586],{"class":102,"line":900},[100,89587,3798],{"class":258},[100,89589,89590,89593,89596],{"class":102,"line":910},[100,89591,89592],{"class":106},"    deepCopy",[100,89594,89595],{"class":258},"(o, obj) ",[100,89597,89598],{"class":1836},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[100,89600,89601,89603,89605],{"class":102,"line":915},[100,89602,75307],{"class":258},[100,89604,59801],{"class":106},[100,89606,89607],{"class":258},"(o)\n",[100,89609,89610,89613,89615],{"class":102,"line":929},[100,89611,89612],{"class":258},"    o.age ",[100,89614,472],{"class":471},[100,89616,89617],{"class":117}," 20\n",[100,89619,89620,89623,89625,89627,89629],{"class":102,"line":935},[100,89621,89622],{"class":258},"    o.hobby[",[100,89624,1366],{"class":117},[100,89626,468],{"class":258},[100,89628,472],{"class":471},[100,89630,89631],{"class":110}," '篮球'\n",[100,89633,89634,89637,89639],{"class":102,"line":945},[100,89635,89636],{"class":258},"    o.family ",[100,89638,472],{"class":471},[100,89640,89641],{"class":110}," '老pink'\n",[100,89643,89644,89646,89648],{"class":102,"line":950},[100,89645,75307],{"class":258},[100,89647,59801],{"class":106},[100,89649,71590],{"class":258},[100,89651,89652,89654,89656],{"class":102,"line":955},[100,89653,53971],{"class":258},[100,89655,53367],{"class":52854},[100,89657,52861],{"class":258},[100,89659,89660,89662,89664],{"class":102,"line":972},[100,89661,53339],{"class":258},[100,89663,53354],{"class":52854},[100,89665,52861],{"class":258},[100,89667,89668],{"class":102,"line":11370},[100,89669,570],{"emptyLinePlaceholder":569},[100,89671,89672,89674,89676],{"class":102,"line":11375},[100,89673,53339],{"class":258},[100,89675,52189],{"class":52854},[100,89677,52861],{"class":258},[19,89679,89680],{},[3095,89681],{"alt":79,"src":89682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[23579,89684,89686,89687],{"id":89685},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[1921,89688,89689],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,89691,89692],{},[2006,89693,89694],{"href":89694,"rel":89695},"https:\u002F\u002Fwww.lodashjs.com\u002F",[25442],[19,89697,89698],{},"lodash里边的方法都要加上一个下划线_",[19,89700,89701],{},"_.cloneDeep()",[73,89703,89705],{"className":52187,"code":89704,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003C!-- 先引用这个库 -->\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const obj = {\n      uname: 'pink',\n      age: 18,\n      hobby: ['乒乓球', '足球'],\n      family: {\n        baby: '小pink'\n      }\n    }\n    const o = _.cloneDeep(obj)\n    console.log(o)\n    o.family.baby = '老pink'\n    console.log(obj)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,89706,89707,89717,89731,89735,89743,89757,89777,89789,89797,89801,89809,89814,89833,89841,89851,89859,89867,89879,89883,89889,89893,89897,89913,89921,89930,89938,89946,89954,89958],{"__ignoreMap":79},[100,89708,89709,89711,89713,89715],{"class":102,"line":103},[100,89710,52851],{"class":258},[100,89712,52855],{"class":52854},[100,89714,52858],{"class":106},[100,89716,52861],{"class":258},[100,89718,89719,89721,89723,89725,89727,89729],{"class":102,"line":188},[100,89720,2676],{"class":258},[100,89722,52189],{"class":52854},[100,89724,52870],{"class":106},[100,89726,472],{"class":258},[100,89728,52875],{"class":110},[100,89730,52861],{"class":258},[100,89732,89733],{"class":102,"line":199},[100,89734,570],{"emptyLinePlaceholder":569},[100,89736,89737,89739,89741],{"class":102,"line":532},[100,89738,2676],{"class":258},[100,89740,52888],{"class":52854},[100,89742,52861],{"class":258},[100,89744,89745,89747,89749,89751,89753,89755],{"class":102,"line":577},[100,89746,53698],{"class":258},[100,89748,52898],{"class":52854},[100,89750,52901],{"class":106},[100,89752,472],{"class":258},[100,89754,52906],{"class":110},[100,89756,52861],{"class":258},[100,89758,89759,89761,89763,89765,89767,89769,89771,89773,89775],{"class":102,"line":589},[100,89760,53698],{"class":258},[100,89762,52898],{"class":52854},[100,89764,16501],{"class":106},[100,89766,472],{"class":258},[100,89768,52945],{"class":110},[100,89770,52925],{"class":106},[100,89772,472],{"class":258},[100,89774,52952],{"class":110},[100,89776,52861],{"class":258},[100,89778,89779,89781,89783,89785,89787],{"class":102,"line":595},[100,89780,53698],{"class":258},[100,89782,52961],{"class":52854},[100,89784,52964],{"class":258},[100,89786,52961],{"class":52854},[100,89788,52861],{"class":258},[100,89790,89791,89793,89795],{"class":102,"line":601},[100,89792,53339],{"class":258},[100,89794,52888],{"class":52854},[100,89796,52861],{"class":258},[100,89798,89799],{"class":102,"line":606},[100,89800,570],{"emptyLinePlaceholder":569},[100,89802,89803,89805,89807],{"class":102,"line":612},[100,89804,2676],{"class":258},[100,89806,53354],{"class":52854},[100,89808,52861],{"class":258},[100,89810,89811],{"class":102,"line":618},[100,89812,89813],{"class":1836},"  \u003C!-- 先引用这个库 -->\n",[100,89815,89816,89818,89820,89822,89824,89827,89829,89831],{"class":102,"line":623},[100,89817,53698],{"class":258},[100,89819,53367],{"class":52854},[100,89821,56793],{"class":106},[100,89823,472],{"class":258},[100,89825,89826],{"class":110},"\"lodash.min.js\"",[100,89828,56868],{"class":258},[100,89830,53367],{"class":52854},[100,89832,52861],{"class":258},[100,89834,89835,89837,89839],{"class":102,"line":629},[100,89836,53698],{"class":258},[100,89838,53367],{"class":52854},[100,89840,52861],{"class":258},[100,89842,89843,89845,89847,89849],{"class":102,"line":635},[100,89844,12803],{"class":471},[100,89846,71525],{"class":117},[100,89848,583],{"class":471},[100,89850,17153],{"class":258},[100,89852,89853,89855,89857],{"class":102,"line":641},[100,89854,73170],{"class":258},[100,89856,89362],{"class":110},[100,89858,33024],{"class":258},[100,89860,89861,89863,89865],{"class":102,"line":647},[100,89862,73180],{"class":258},[100,89864,2417],{"class":117},[100,89866,33024],{"class":258},[100,89868,89869,89871,89873,89875,89877],{"class":102,"line":653},[100,89870,89377],{"class":258},[100,89872,89380],{"class":110},[100,89874,14017],{"class":258},[100,89876,89385],{"class":110},[100,89878,89388],{"class":258},[100,89880,89881],{"class":102,"line":659},[100,89882,79426],{"class":258},[100,89884,89885,89887],{"class":102,"line":665},[100,89886,89397],{"class":258},[100,89888,89400],{"class":110},[100,89890,89891],{"class":102,"line":670},[100,89892,53952],{"class":258},[100,89894,89895],{"class":102,"line":675},[100,89896,3798],{"class":258},[100,89898,89899,89901,89903,89905,89908,89911],{"class":102,"line":699},[100,89900,12803],{"class":471},[100,89902,89415],{"class":117},[100,89904,583],{"class":471},[100,89906,89907],{"class":258}," _.",[100,89909,89910],{"class":106},"cloneDeep",[100,89912,71590],{"class":258},[100,89914,89915,89917,89919],{"class":102,"line":708},[100,89916,75307],{"class":258},[100,89918,59801],{"class":106},[100,89920,89607],{"class":258},[100,89922,89923,89926,89928],{"class":102,"line":722},[100,89924,89925],{"class":258},"    o.family.baby ",[100,89927,472],{"class":471},[100,89929,89641],{"class":110},[100,89931,89932,89934,89936],{"class":102,"line":735},[100,89933,75307],{"class":258},[100,89935,59801],{"class":106},[100,89937,71590],{"class":258},[100,89939,89940,89942,89944],{"class":102,"line":754},[100,89941,53971],{"class":258},[100,89943,53367],{"class":52854},[100,89945,52861],{"class":258},[100,89947,89948,89950,89952],{"class":102,"line":771},[100,89949,53339],{"class":258},[100,89951,53354],{"class":52854},[100,89953,52861],{"class":258},[100,89955,89956],{"class":102,"line":776},[100,89957,570],{"emptyLinePlaceholder":569},[100,89959,89960,89962,89964],{"class":102,"line":781},[100,89961,53339],{"class":258},[100,89963,52189],{"class":52854},[100,89965,52861],{"class":258},[19,89967,89968],{},[3095,89969],{"alt":79,"src":89970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[23579,89972,89974],{"id":89973},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[73,89976,89978],{"className":52187,"code":89977,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      uname: 'pink',\n      age: 18,\n      hobby: ['乒乓球', '足球'],\n      family: {\n        baby: '小pink'\n      }\n    }\n    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n    const o = JSON.parse(JSON.stringify(obj))\n    console.log(o)\n    o.family.baby = '123'\n    console.log(obj)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,89979,89980,89990,90004,90008,90016,90030,90050,90062,90070,90074,90082,90090,90100,90108,90116,90128,90132,90138,90142,90146,90151,90156,90161,90187,90195,90204,90212,90220,90228,90232],{"__ignoreMap":79},[100,89981,89982,89984,89986,89988],{"class":102,"line":103},[100,89983,52851],{"class":258},[100,89985,52855],{"class":52854},[100,89987,52858],{"class":106},[100,89989,52861],{"class":258},[100,89991,89992,89994,89996,89998,90000,90002],{"class":102,"line":188},[100,89993,2676],{"class":258},[100,89995,52189],{"class":52854},[100,89997,52870],{"class":106},[100,89999,472],{"class":258},[100,90001,52875],{"class":110},[100,90003,52861],{"class":258},[100,90005,90006],{"class":102,"line":199},[100,90007,570],{"emptyLinePlaceholder":569},[100,90009,90010,90012,90014],{"class":102,"line":532},[100,90011,2676],{"class":258},[100,90013,52888],{"class":52854},[100,90015,52861],{"class":258},[100,90017,90018,90020,90022,90024,90026,90028],{"class":102,"line":577},[100,90019,53698],{"class":258},[100,90021,52898],{"class":52854},[100,90023,52901],{"class":106},[100,90025,472],{"class":258},[100,90027,52906],{"class":110},[100,90029,52861],{"class":258},[100,90031,90032,90034,90036,90038,90040,90042,90044,90046,90048],{"class":102,"line":589},[100,90033,53698],{"class":258},[100,90035,52898],{"class":52854},[100,90037,16501],{"class":106},[100,90039,472],{"class":258},[100,90041,52945],{"class":110},[100,90043,52925],{"class":106},[100,90045,472],{"class":258},[100,90047,52952],{"class":110},[100,90049,52861],{"class":258},[100,90051,90052,90054,90056,90058,90060],{"class":102,"line":595},[100,90053,53698],{"class":258},[100,90055,52961],{"class":52854},[100,90057,52964],{"class":258},[100,90059,52961],{"class":52854},[100,90061,52861],{"class":258},[100,90063,90064,90066,90068],{"class":102,"line":601},[100,90065,53339],{"class":258},[100,90067,52888],{"class":52854},[100,90069,52861],{"class":258},[100,90071,90072],{"class":102,"line":606},[100,90073,570],{"emptyLinePlaceholder":569},[100,90075,90076,90078,90080],{"class":102,"line":612},[100,90077,2676],{"class":258},[100,90079,53354],{"class":52854},[100,90081,52861],{"class":258},[100,90083,90084,90086,90088],{"class":102,"line":618},[100,90085,53698],{"class":258},[100,90087,53367],{"class":52854},[100,90089,52861],{"class":258},[100,90091,90092,90094,90096,90098],{"class":102,"line":623},[100,90093,12803],{"class":471},[100,90095,71525],{"class":117},[100,90097,583],{"class":471},[100,90099,17153],{"class":258},[100,90101,90102,90104,90106],{"class":102,"line":629},[100,90103,73170],{"class":258},[100,90105,89362],{"class":110},[100,90107,33024],{"class":258},[100,90109,90110,90112,90114],{"class":102,"line":635},[100,90111,73180],{"class":258},[100,90113,2417],{"class":117},[100,90115,33024],{"class":258},[100,90117,90118,90120,90122,90124,90126],{"class":102,"line":641},[100,90119,89377],{"class":258},[100,90121,89380],{"class":110},[100,90123,14017],{"class":258},[100,90125,89385],{"class":110},[100,90127,89388],{"class":258},[100,90129,90130],{"class":102,"line":647},[100,90131,79426],{"class":258},[100,90133,90134,90136],{"class":102,"line":653},[100,90135,89397],{"class":258},[100,90137,89400],{"class":110},[100,90139,90140],{"class":102,"line":659},[100,90141,53952],{"class":258},[100,90143,90144],{"class":102,"line":665},[100,90145,3798],{"class":258},[100,90147,90148],{"class":102,"line":670},[100,90149,90150],{"class":1836},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[100,90152,90153],{"class":102,"line":675},[100,90154,90155],{"class":1836},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[100,90157,90158],{"class":102,"line":699},[100,90159,90160],{"class":1836},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[100,90162,90163,90165,90167,90169,90172,90174,90177,90179,90181,90183,90185],{"class":102,"line":708},[100,90164,12803],{"class":471},[100,90166,89415],{"class":117},[100,90168,583],{"class":471},[100,90170,90171],{"class":117}," JSON",[100,90173,2325],{"class":258},[100,90175,90176],{"class":106},"parse",[100,90178,713],{"class":258},[100,90180,73218],{"class":117},[100,90182,2325],{"class":258},[100,90184,73223],{"class":106},[100,90186,73226],{"class":258},[100,90188,90189,90191,90193],{"class":102,"line":722},[100,90190,75307],{"class":258},[100,90192,59801],{"class":106},[100,90194,89607],{"class":258},[100,90196,90197,90199,90201],{"class":102,"line":735},[100,90198,89925],{"class":258},[100,90200,472],{"class":471},[100,90202,90203],{"class":110}," '123'\n",[100,90205,90206,90208,90210],{"class":102,"line":754},[100,90207,75307],{"class":258},[100,90209,59801],{"class":106},[100,90211,71590],{"class":258},[100,90213,90214,90216,90218],{"class":102,"line":771},[100,90215,53971],{"class":258},[100,90217,53367],{"class":52854},[100,90219,52861],{"class":258},[100,90221,90222,90224,90226],{"class":102,"line":776},[100,90223,53339],{"class":258},[100,90225,53354],{"class":52854},[100,90227,52861],{"class":258},[100,90229,90230],{"class":102,"line":781},[100,90231,570],{"emptyLinePlaceholder":569},[100,90233,90234,90236,90238],{"class":102,"line":796},[100,90235,53339],{"class":258},[100,90237,52189],{"class":52854},[100,90239,52861],{"class":258},[19,90241,90242],{},[3095,90243],{"alt":79,"src":90244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,90246,90248],{"id":90247},"_415-异常处理","4.15 异常处理",[26,90250,90251],{},[29,90252,90253],{},"throw抛异常",[19,90255,90256],{},[3095,90257],{"alt":79,"src":90258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[26,90260,90261],{"start":188},[29,90262,90263],{},"try\u002Fcatch 捕获错误信息",[19,90265,90266],{},[3095,90267],{"alt":79,"src":90268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[73,90270,90272],{"className":52187,"code":90271,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cp>123\u003C\u002Fp>\n  \u003Cscript>\n    function fn() {\n      try {\n        \u002F\u002F 可能发生错误的代码  要写到try中\n        const p = document.querySelector('.p')\n        p.style.color = 'red'\n      } catch (err) {\n        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n        console.log(err.message)\n        \u002F\u002F 想要中断程序，需要加return\n        \u002F\u002F return\n        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n        throw new Error('你看看，选择器错误了吧')\n      }\n      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n      finally {\n        alert('弹出对话框')\n      }\n      console.log(11)\n\n    }\n    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,90273,90274,90284,90298,90302,90310,90324,90344,90356,90364,90368,90376,90388,90396,90405,90412,90417,90436,90445,90456,90461,90471,90476,90481,90486,90503,90507,90512,90519,90531,90535,90547,90551,90555,90560,90565,90572,90580,90588,90592],{"__ignoreMap":79},[100,90275,90276,90278,90280,90282],{"class":102,"line":103},[100,90277,52851],{"class":258},[100,90279,52855],{"class":52854},[100,90281,52858],{"class":106},[100,90283,52861],{"class":258},[100,90285,90286,90288,90290,90292,90294,90296],{"class":102,"line":188},[100,90287,2676],{"class":258},[100,90289,52189],{"class":52854},[100,90291,52870],{"class":106},[100,90293,472],{"class":258},[100,90295,52875],{"class":110},[100,90297,52861],{"class":258},[100,90299,90300],{"class":102,"line":199},[100,90301,570],{"emptyLinePlaceholder":569},[100,90303,90304,90306,90308],{"class":102,"line":532},[100,90305,2676],{"class":258},[100,90307,52888],{"class":52854},[100,90309,52861],{"class":258},[100,90311,90312,90314,90316,90318,90320,90322],{"class":102,"line":577},[100,90313,53698],{"class":258},[100,90315,52898],{"class":52854},[100,90317,52901],{"class":106},[100,90319,472],{"class":258},[100,90321,52906],{"class":110},[100,90323,52861],{"class":258},[100,90325,90326,90328,90330,90332,90334,90336,90338,90340,90342],{"class":102,"line":589},[100,90327,53698],{"class":258},[100,90329,52898],{"class":52854},[100,90331,16501],{"class":106},[100,90333,472],{"class":258},[100,90335,52945],{"class":110},[100,90337,52925],{"class":106},[100,90339,472],{"class":258},[100,90341,52952],{"class":110},[100,90343,52861],{"class":258},[100,90345,90346,90348,90350,90352,90354],{"class":102,"line":595},[100,90347,53698],{"class":258},[100,90349,52961],{"class":52854},[100,90351,52964],{"class":258},[100,90353,52961],{"class":52854},[100,90355,52861],{"class":258},[100,90357,90358,90360,90362],{"class":102,"line":601},[100,90359,53339],{"class":258},[100,90361,52888],{"class":52854},[100,90363,52861],{"class":258},[100,90365,90366],{"class":102,"line":606},[100,90367,570],{"emptyLinePlaceholder":569},[100,90369,90370,90372,90374],{"class":102,"line":612},[100,90371,2676],{"class":258},[100,90373,53354],{"class":52854},[100,90375,52861],{"class":258},[100,90377,90378,90380,90382,90384,90386],{"class":102,"line":618},[100,90379,53698],{"class":258},[100,90381,19],{"class":52854},[100,90383,55048],{"class":258},[100,90385,19],{"class":52854},[100,90387,52861],{"class":258},[100,90389,90390,90392,90394],{"class":102,"line":623},[100,90391,53698],{"class":258},[100,90393,53367],{"class":52854},[100,90395,52861],{"class":258},[100,90397,90398,90400,90403],{"class":102,"line":629},[100,90399,71638],{"class":471},[100,90401,90402],{"class":106}," fn",[100,90404,12435],{"class":258},[100,90406,90407,90410],{"class":102,"line":635},[100,90408,90409],{"class":471},"      try",[100,90411,17153],{"class":258},[100,90413,90414],{"class":102,"line":641},[100,90415,90416],{"class":1836},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[100,90418,90419,90421,90423,90425,90427,90429,90431,90434],{"class":102,"line":647},[100,90420,62824],{"class":471},[100,90422,8421],{"class":117},[100,90424,583],{"class":471},[100,90426,55950],{"class":258},[100,90428,55953],{"class":106},[100,90430,713],{"class":258},[100,90432,90433],{"class":110},"'.p'",[100,90435,809],{"class":258},[100,90437,90438,90441,90443],{"class":102,"line":653},[100,90439,90440],{"class":258},"        p.style.color ",[100,90442,472],{"class":471},[100,90444,68605],{"class":110},[100,90446,90447,90450,90453],{"class":102,"line":659},[100,90448,90449],{"class":258},"      } ",[100,90451,90452],{"class":471},"catch",[100,90454,90455],{"class":258}," (err) {\n",[100,90457,90458],{"class":102,"line":665},[100,90459,90460],{"class":1836},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[100,90462,90463,90466,90468],{"class":102,"line":670},[100,90464,90465],{"class":258},"        console.",[100,90467,59801],{"class":106},[100,90469,90470],{"class":258},"(err.message)\n",[100,90472,90473],{"class":102,"line":675},[100,90474,90475],{"class":1836},"        \u002F\u002F 想要中断程序，需要加return\n",[100,90477,90478],{"class":102,"line":699},[100,90479,90480],{"class":1836},"        \u002F\u002F return\n",[100,90482,90483],{"class":102,"line":708},[100,90484,90485],{"class":1836},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[100,90487,90488,90491,90493,90496,90498,90501],{"class":102,"line":722},[100,90489,90490],{"class":471},"        throw",[100,90492,13160],{"class":471},[100,90494,90495],{"class":106}," Error",[100,90497,713],{"class":258},[100,90499,90500],{"class":110},"'你看看，选择器错误了吧'",[100,90502,809],{"class":258},[100,90504,90505],{"class":102,"line":735},[100,90506,53952],{"class":258},[100,90508,90509],{"class":102,"line":754},[100,90510,90511],{"class":1836},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[100,90513,90514,90517],{"class":102,"line":771},[100,90515,90516],{"class":471},"      finally",[100,90518,17153],{"class":258},[100,90520,90521,90524,90526,90529],{"class":102,"line":776},[100,90522,90523],{"class":106},"        alert",[100,90525,713],{"class":258},[100,90527,90528],{"class":110},"'弹出对话框'",[100,90530,809],{"class":258},[100,90532,90533],{"class":102,"line":781},[100,90534,53952],{"class":258},[100,90536,90537,90539,90541,90543,90545],{"class":102,"line":796},[100,90538,59798],{"class":258},[100,90540,59801],{"class":106},[100,90542,713],{"class":258},[100,90544,2239],{"class":117},[100,90546,809],{"class":258},[100,90548,90549],{"class":102,"line":812},[100,90550,570],{"emptyLinePlaceholder":569},[100,90552,90553],{"class":102,"line":823},[100,90554,3798],{"class":258},[100,90556,90557],{"class":102,"line":828},[100,90558,90559],{"class":1836},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[100,90561,90562],{"class":102,"line":840},[100,90563,90564],{"class":1836},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[100,90566,90567,90570],{"class":102,"line":845},[100,90568,90569],{"class":106},"    fn",[100,90571,3587],{"class":258},[100,90573,90574,90576,90578],{"class":102,"line":868},[100,90575,53971],{"class":258},[100,90577,53367],{"class":52854},[100,90579,52861],{"class":258},[100,90581,90582,90584,90586],{"class":102,"line":874},[100,90583,53339],{"class":258},[100,90585,53354],{"class":52854},[100,90587,52861],{"class":258},[100,90589,90590],{"class":102,"line":879},[100,90591,570],{"emptyLinePlaceholder":569},[100,90593,90594,90596,90598],{"class":102,"line":889},[100,90595,53339],{"class":258},[100,90597,52189],{"class":52854},[100,90599,52861],{"class":258},[19,90601,90602],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[26,90604,90605],{"start":199},[29,90606,90607],{},"debugger",[19,90609,90610],{},[3095,90611],{"alt":79,"src":90612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,90614,90615],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,90617,90619],{"id":90618},"_416-处理this","4.16 处理this",[305,90621,90623],{"id":90622},"_4161-this的指向","4.16.1 this的指向",[26,90625,90626],{},[29,90627,90628],{},"普通函数的this",[19,90630,90631],{},[3095,90632],{"alt":79,"src":90633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[26,90635,90636],{"start":188},[29,90637,90638],{},"箭头函数的this",[19,90640,90641],{},[3095,90642],{"alt":79,"src":90643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,90645,90646],{},[3095,90647],{"alt":79,"src":90648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,90650,90651],{},[3095,90652],{"alt":79,"src":90653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[305,90655,90657],{"id":90656},"_4162-this的改变","4.16.2 this的改变",[19,90659,90660],{},"call() apply() bind()",[26,90662,90663],{},[29,90664,90665],{},"call()",[19,90667,90668],{},[3095,90669],{"alt":79,"src":90670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,90672,90673],{},"两个作用：①调用函数；②改变this指向",[73,90675,90677],{"className":54621,"code":90676,"language":54623,"meta":79,"style":79},"\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      uname: 'pink'\n    }\n    function fn(x, y) {\n      console.log(this)  \u002F\u002Fwindow\n      console.log(x + y)\n    }\n    fn.call(obj, 1, 2)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[32,90678,90679,90687,90695,90699,90704,90708,90713,90718,90723,90727,90732,90740],{"__ignoreMap":79},[100,90680,90681,90683,90685],{"class":102,"line":103},[100,90682,2676],{"class":258},[100,90684,53354],{"class":52854},[100,90686,52861],{"class":258},[100,90688,90689,90691,90693],{"class":102,"line":188},[100,90690,53698],{"class":258},[100,90692,53367],{"class":52854},[100,90694,52861],{"class":258},[100,90696,90697],{"class":102,"line":199},[100,90698,73077],{"class":258},[100,90700,90701],{"class":102,"line":532},[100,90702,90703],{"class":258},"      uname: 'pink'\n",[100,90705,90706],{"class":102,"line":577},[100,90707,3798],{"class":258},[100,90709,90710],{"class":102,"line":589},[100,90711,90712],{"class":258},"    function fn(x, y) {\n",[100,90714,90715],{"class":102,"line":595},[100,90716,90717],{"class":258},"      console.log(this)  \u002F\u002Fwindow\n",[100,90719,90720],{"class":102,"line":601},[100,90721,90722],{"class":258},"      console.log(x + y)\n",[100,90724,90725],{"class":102,"line":606},[100,90726,3798],{"class":258},[100,90728,90729],{"class":102,"line":612},[100,90730,90731],{"class":258},"    fn.call(obj, 1, 2)\n",[100,90733,90734,90736,90738],{"class":102,"line":618},[100,90735,53971],{"class":258},[100,90737,53367],{"class":52854},[100,90739,52861],{"class":258},[100,90741,90742,90744,90746],{"class":102,"line":623},[100,90743,53339],{"class":258},[100,90745,53354],{"class":52854},[100,90747,52861],{"class":258},[19,90749,90750],{},[3095,90751],{"alt":79,"src":90752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[26,90754,90755],{"start":188},[29,90756,90757],{},"apply()",[19,90759,90760],{},[3095,90761],{"alt":79,"src":90762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,90764,90673],{},[19,90766,90767],{},"call传递的是普通参数，而apply必须传递的是数组",[73,90769,90771],{"className":52187,"code":90770,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      age: 18\n    }\n    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n    function fn(x, y) {\n      console.log(this)\n      console.log(x + y)\n    }\n    \u002F\u002F fn.apply(this指向谁, 数组参数)\n    fn.apply(obj, [1, 2])\n    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n\n    \u002F\u002F 使用场景：求数组最大值\n    \u002F\u002F const max = Math.max(1, 2, 3)\n    \u002F\u002F console.log(max)   \u002F\u002F3\n    \u002F\u002F 指向空或者Math都是可以的\n    const arr = [100, 44, 77]\n    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n    const max = Math.max.apply(Math, arr)\n    const min = Math.min.apply(Math, arr)\n    console.log(max, min)     \u002F\u002F100,4\n\n    \u002F\u002F 求最大值的另一种方式:展开运算符\n    console.log(Max.max(...arr))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,90772,90773,90783,90797,90801,90809,90823,90843,90855,90863,90867,90875,90883,90893,90900,90904,90909,90925,90937,90951,90955,90960,90979,90984,90988,90993,90998,91006,91011,91033,91038,91054,91070,91082,91086,91091,91110,91118,91126,91130],{"__ignoreMap":79},[100,90774,90775,90777,90779,90781],{"class":102,"line":103},[100,90776,52851],{"class":258},[100,90778,52855],{"class":52854},[100,90780,52858],{"class":106},[100,90782,52861],{"class":258},[100,90784,90785,90787,90789,90791,90793,90795],{"class":102,"line":188},[100,90786,2676],{"class":258},[100,90788,52189],{"class":52854},[100,90790,52870],{"class":106},[100,90792,472],{"class":258},[100,90794,52875],{"class":110},[100,90796,52861],{"class":258},[100,90798,90799],{"class":102,"line":199},[100,90800,570],{"emptyLinePlaceholder":569},[100,90802,90803,90805,90807],{"class":102,"line":532},[100,90804,2676],{"class":258},[100,90806,52888],{"class":52854},[100,90808,52861],{"class":258},[100,90810,90811,90813,90815,90817,90819,90821],{"class":102,"line":577},[100,90812,53698],{"class":258},[100,90814,52898],{"class":52854},[100,90816,52901],{"class":106},[100,90818,472],{"class":258},[100,90820,52906],{"class":110},[100,90822,52861],{"class":258},[100,90824,90825,90827,90829,90831,90833,90835,90837,90839,90841],{"class":102,"line":589},[100,90826,53698],{"class":258},[100,90828,52898],{"class":52854},[100,90830,16501],{"class":106},[100,90832,472],{"class":258},[100,90834,52945],{"class":110},[100,90836,52925],{"class":106},[100,90838,472],{"class":258},[100,90840,52952],{"class":110},[100,90842,52861],{"class":258},[100,90844,90845,90847,90849,90851,90853],{"class":102,"line":595},[100,90846,53698],{"class":258},[100,90848,52961],{"class":52854},[100,90850,52964],{"class":258},[100,90852,52961],{"class":52854},[100,90854,52861],{"class":258},[100,90856,90857,90859,90861],{"class":102,"line":601},[100,90858,53339],{"class":258},[100,90860,52888],{"class":52854},[100,90862,52861],{"class":258},[100,90864,90865],{"class":102,"line":606},[100,90866,570],{"emptyLinePlaceholder":569},[100,90868,90869,90871,90873],{"class":102,"line":612},[100,90870,2676],{"class":258},[100,90872,53354],{"class":52854},[100,90874,52861],{"class":258},[100,90876,90877,90879,90881],{"class":102,"line":618},[100,90878,53698],{"class":258},[100,90880,53367],{"class":52854},[100,90882,52861],{"class":258},[100,90884,90885,90887,90889,90891],{"class":102,"line":623},[100,90886,12803],{"class":471},[100,90888,71525],{"class":117},[100,90890,583],{"class":471},[100,90892,17153],{"class":258},[100,90894,90895,90897],{"class":102,"line":629},[100,90896,73180],{"class":258},[100,90898,90899],{"class":117},"18\n",[100,90901,90902],{"class":102,"line":635},[100,90903,3798],{"class":258},[100,90905,90906],{"class":102,"line":641},[100,90907,90908],{"class":1836},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[100,90910,90911,90913,90915,90917,90919,90921,90923],{"class":102,"line":647},[100,90912,71638],{"class":471},[100,90914,90402],{"class":106},[100,90916,713],{"class":258},[100,90918,2586],{"class":6812},[100,90920,14017],{"class":258},[100,90922,2611],{"class":6812},[100,90924,14024],{"class":258},[100,90926,90927,90929,90931,90933,90935],{"class":102,"line":653},[100,90928,59798],{"class":258},[100,90930,59801],{"class":106},[100,90932,713],{"class":258},[100,90934,88545],{"class":117},[100,90936,809],{"class":258},[100,90938,90939,90941,90943,90946,90948],{"class":102,"line":659},[100,90940,59798],{"class":258},[100,90942,59801],{"class":106},[100,90944,90945],{"class":258},"(x ",[100,90947,2248],{"class":471},[100,90949,90950],{"class":258}," y)\n",[100,90952,90953],{"class":102,"line":665},[100,90954,3798],{"class":258},[100,90956,90957],{"class":102,"line":670},[100,90958,90959],{"class":1836},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[100,90961,90962,90965,90968,90971,90973,90975,90977],{"class":102,"line":675},[100,90963,90964],{"class":258},"    fn.",[100,90966,90967],{"class":106},"apply",[100,90969,90970],{"class":258},"(obj, [",[100,90972,1985],{"class":117},[100,90974,14017],{"class":258},[100,90976,465],{"class":117},[100,90978,6255],{"class":258},[100,90980,90981],{"class":102,"line":699},[100,90982,90983],{"class":1836},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[100,90985,90986],{"class":102,"line":708},[100,90987,570],{"emptyLinePlaceholder":569},[100,90989,90990],{"class":102,"line":722},[100,90991,90992],{"class":1836},"    \u002F\u002F 使用场景：求数组最大值\n",[100,90994,90995],{"class":102,"line":735},[100,90996,90997],{"class":1836},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[100,90999,91000,91003],{"class":102,"line":754},[100,91001,91002],{"class":1836},"    \u002F\u002F console.log(max)",[100,91004,91005],{"class":1836},"   \u002F\u002F3\n",[100,91007,91008],{"class":102,"line":771},[100,91009,91010],{"class":1836},"    \u002F\u002F 指向空或者Math都是可以的\n",[100,91012,91013,91015,91017,91019,91021,91023,91025,91027,91029,91031],{"class":102,"line":776},[100,91014,12803],{"class":471},[100,91016,59249],{"class":117},[100,91018,583],{"class":471},[100,91020,53780],{"class":258},[100,91022,2078],{"class":117},[100,91024,14017],{"class":258},[100,91026,2271],{"class":117},[100,91028,14017],{"class":258},[100,91030,2302],{"class":117},[100,91032,34802],{"class":258},[100,91034,91035],{"class":102,"line":781},[100,91036,91037],{"class":1836},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[100,91039,91040,91042,91044,91046,91049,91051],{"class":102,"line":796},[100,91041,12803],{"class":471},[100,91043,7547],{"class":117},[100,91045,583],{"class":471},[100,91047,91048],{"class":258}," Math.max.",[100,91050,90967],{"class":106},[100,91052,91053],{"class":258},"(Math, arr)\n",[100,91055,91056,91058,91061,91063,91066,91068],{"class":102,"line":812},[100,91057,12803],{"class":471},[100,91059,91060],{"class":117}," min",[100,91062,583],{"class":471},[100,91064,91065],{"class":258}," Math.min.",[100,91067,90967],{"class":106},[100,91069,91053],{"class":258},[100,91071,91072,91074,91076,91079],{"class":102,"line":823},[100,91073,75307],{"class":258},[100,91075,59801],{"class":106},[100,91077,91078],{"class":258},"(max, min)     ",[100,91080,91081],{"class":1836},"\u002F\u002F100,4\n",[100,91083,91084],{"class":102,"line":828},[100,91085,570],{"emptyLinePlaceholder":569},[100,91087,91088],{"class":102,"line":840},[100,91089,91090],{"class":1836},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[100,91092,91093,91095,91097,91100,91102,91104,91107],{"class":102,"line":845},[100,91094,75307],{"class":258},[100,91096,59801],{"class":106},[100,91098,91099],{"class":258},"(Max.",[100,91101,7611],{"class":106},[100,91103,713],{"class":258},[100,91105,91106],{"class":471},"...",[100,91108,91109],{"class":258},"arr))\n",[100,91111,91112,91114,91116],{"class":102,"line":868},[100,91113,53971],{"class":258},[100,91115,53367],{"class":52854},[100,91117,52861],{"class":258},[100,91119,91120,91122,91124],{"class":102,"line":874},[100,91121,53339],{"class":258},[100,91123,53354],{"class":52854},[100,91125,52861],{"class":258},[100,91127,91128],{"class":102,"line":879},[100,91129,570],{"emptyLinePlaceholder":569},[100,91131,91132,91134,91136],{"class":102,"line":889},[100,91133,53339],{"class":258},[100,91135,52189],{"class":52854},[100,91137,52861],{"class":258},[19,91139,91140],{},[3095,91141],{"alt":79,"src":91142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[26,91144,91145],{"start":199},[29,91146,91147],{},"bind()",[19,91149,91150],{},[3095,91151],{"alt":79,"src":91152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,91154,91155],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,91157,91158],{},"bind的语法跟call很相似",[73,91160,91162],{"className":54621,"code":91161,"language":54623,"meta":79,"style":79},"\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      age: 18\n    }\n    function fn() {\n      console.log(this)\n    }\n    \u002F\u002F 1.bind 不会调用函数\n    \u002F\u002F 2.bind能改变this的指向\n    fn.bind()\n    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n    const fun = fn.bind(obj)\n    \u002F\u002F console.log(fun)\n    \u002F\u002F 调用,查看this的指向\n    fun()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[32,91163,91164,91172,91180,91184,91189,91193,91197,91202,91206,91211,91216,91221,91226,91231,91236,91241,91245,91253],{"__ignoreMap":79},[100,91165,91166,91168,91170],{"class":102,"line":103},[100,91167,2676],{"class":258},[100,91169,53354],{"class":52854},[100,91171,52861],{"class":258},[100,91173,91174,91176,91178],{"class":102,"line":188},[100,91175,53698],{"class":258},[100,91177,53367],{"class":52854},[100,91179,52861],{"class":258},[100,91181,91182],{"class":102,"line":199},[100,91183,73077],{"class":258},[100,91185,91186],{"class":102,"line":532},[100,91187,91188],{"class":258},"      age: 18\n",[100,91190,91191],{"class":102,"line":577},[100,91192,3798],{"class":258},[100,91194,91195],{"class":102,"line":589},[100,91196,78697],{"class":258},[100,91198,91199],{"class":102,"line":595},[100,91200,91201],{"class":258},"      console.log(this)\n",[100,91203,91204],{"class":102,"line":601},[100,91205,3798],{"class":258},[100,91207,91208],{"class":102,"line":606},[100,91209,91210],{"class":258},"    \u002F\u002F 1.bind 不会调用函数\n",[100,91212,91213],{"class":102,"line":612},[100,91214,91215],{"class":258},"    \u002F\u002F 2.bind能改变this的指向\n",[100,91217,91218],{"class":102,"line":618},[100,91219,91220],{"class":258},"    fn.bind()\n",[100,91222,91223],{"class":102,"line":623},[100,91224,91225],{"class":258},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[100,91227,91228],{"class":102,"line":629},[100,91229,91230],{"class":258},"    const fun = fn.bind(obj)\n",[100,91232,91233],{"class":102,"line":635},[100,91234,91235],{"class":258},"    \u002F\u002F console.log(fun)\n",[100,91237,91238],{"class":102,"line":641},[100,91239,91240],{"class":258},"    \u002F\u002F 调用,查看this的指向\n",[100,91242,91243],{"class":102,"line":647},[100,91244,54205],{"class":258},[100,91246,91247,91249,91251],{"class":102,"line":653},[100,91248,53971],{"class":258},[100,91250,53367],{"class":52854},[100,91252,52861],{"class":258},[100,91254,91255,91257,91259],{"class":102,"line":659},[100,91256,53339],{"class":258},[100,91258,53354],{"class":52854},[100,91260,52861],{"class":258},[19,91262,91263],{},[3095,91264],{"alt":79,"src":91265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[26,91267,91268],{"start":532},[29,91269,91270],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[73,91272,91274],{"className":54621,"code":91273,"language":54623,"meta":79,"style":79},"\u003Cbody>\n  \u003Cbutton>禁用\u003C\u002Fbutton>\n  \u003Cscript>\n    const btn = document.querySelector('button')\n    btn.addEventListener('click', function () {\n      this.disabled = true\n      \u002F\u002F 定时器是window进行调用的\n      setTimeout(function () {\n        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n        this.disabled = false\n      }.bind(this), 2000)\n      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[32,91275,91276,91284,91297,91305,91310,91314,91319,91324,91329,91334,91339,91344,91349,91354,91358,91366],{"__ignoreMap":79},[100,91277,91278,91280,91282],{"class":102,"line":103},[100,91279,2676],{"class":258},[100,91281,53354],{"class":52854},[100,91283,52861],{"class":258},[100,91285,91286,91288,91290,91293,91295],{"class":102,"line":188},[100,91287,53698],{"class":258},[100,91289,55441],{"class":52854},[100,91291,91292],{"class":258},">禁用\u003C\u002F",[100,91294,55441],{"class":52854},[100,91296,52861],{"class":258},[100,91298,91299,91301,91303],{"class":102,"line":199},[100,91300,53698],{"class":258},[100,91302,53367],{"class":52854},[100,91304,52861],{"class":258},[100,91306,91307],{"class":102,"line":532},[100,91308,91309],{"class":258},"    const btn = document.querySelector('button')\n",[100,91311,91312],{"class":102,"line":577},[100,91313,60570],{"class":258},[100,91315,91316],{"class":102,"line":589},[100,91317,91318],{"class":258},"      this.disabled = true\n",[100,91320,91321],{"class":102,"line":595},[100,91322,91323],{"class":258},"      \u002F\u002F 定时器是window进行调用的\n",[100,91325,91326],{"class":102,"line":601},[100,91327,91328],{"class":258},"      setTimeout(function () {\n",[100,91330,91331],{"class":102,"line":606},[100,91332,91333],{"class":258},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[100,91335,91336],{"class":102,"line":612},[100,91337,91338],{"class":258},"        this.disabled = false\n",[100,91340,91341],{"class":102,"line":618},[100,91342,91343],{"class":258},"      }.bind(this), 2000)\n",[100,91345,91346],{"class":102,"line":623},[100,91347,91348],{"class":258},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[100,91350,91351],{"class":102,"line":629},[100,91352,91353],{"class":258},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[100,91355,91356],{"class":102,"line":635},[100,91357,35016],{"class":258},[100,91359,91360,91362,91364],{"class":102,"line":641},[100,91361,53971],{"class":258},[100,91363,53367],{"class":52854},[100,91365,52861],{"class":258},[100,91367,91368,91370,91372],{"class":102,"line":647},[100,91369,53339],{"class":258},[100,91371,53354],{"class":52854},[100,91373,52861],{"class":258},[26,91375,91376],{"start":577},[29,91377,23534],{},[19,91379,91380],{},[3095,91381],{"alt":79,"src":91382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,91384,91386],{"id":91385},"_417-性能优化","4.17 性能优化",[305,91388,91390],{"id":91389},"_4171-防抖","4.17.1 防抖",[19,91392,91393],{},[3095,91394],{"alt":79,"src":91395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,91397,91398],{},[1921,91399,91400],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,91402,91403],{},"防抖实现方式：",[2773,91405,91406],{},[29,91407,91408],{},"lodash 提供了防抖处理",[19,91410,91411],{},"_.debounce(func,[wait=0],[options={}])",[19,91413,91414],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[73,91416,91418],{"className":52187,"code":91417,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .box {\n      box-sizing: border-box;\n      width: 200px;\n      height: 200px;\n      background-color: gray;\n      font-size: 25px;\n      color: #fff;\n      text-align: center;\n      padding-top: 5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\u003C\u002Fdiv>\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const box = document.querySelector('.box')\n    let i = 0\n    function mouseMove() {\n      box.innerHTML = i++\n      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n    }\n    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n    box.addEventListener('mousemove', _.debounce(mouseMove, 500))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,91419,91420,91430,91444,91448,91456,91470,91490,91502,91510,91516,91526,91538,91550,91561,91573,91583,91593,91606,91610,91618,91626,91630,91638,91656,91674,91682,91701,91711,91720,91731,91736,91740,91745,91750,91755,91780,91788,91796,91800],{"__ignoreMap":79},[100,91421,91422,91424,91426,91428],{"class":102,"line":103},[100,91423,52851],{"class":258},[100,91425,52855],{"class":52854},[100,91427,52858],{"class":106},[100,91429,52861],{"class":258},[100,91431,91432,91434,91436,91438,91440,91442],{"class":102,"line":188},[100,91433,2676],{"class":258},[100,91435,52189],{"class":52854},[100,91437,52870],{"class":106},[100,91439,472],{"class":258},[100,91441,52875],{"class":110},[100,91443,52861],{"class":258},[100,91445,91446],{"class":102,"line":199},[100,91447,570],{"emptyLinePlaceholder":569},[100,91449,91450,91452,91454],{"class":102,"line":532},[100,91451,2676],{"class":258},[100,91453,52888],{"class":52854},[100,91455,52861],{"class":258},[100,91457,91458,91460,91462,91464,91466,91468],{"class":102,"line":577},[100,91459,53698],{"class":258},[100,91461,52898],{"class":52854},[100,91463,52901],{"class":106},[100,91465,472],{"class":258},[100,91467,52906],{"class":110},[100,91469,52861],{"class":258},[100,91471,91472,91474,91476,91478,91480,91482,91484,91486,91488],{"class":102,"line":589},[100,91473,53698],{"class":258},[100,91475,52898],{"class":52854},[100,91477,16501],{"class":106},[100,91479,472],{"class":258},[100,91481,52945],{"class":110},[100,91483,52925],{"class":106},[100,91485,472],{"class":258},[100,91487,52952],{"class":110},[100,91489,52861],{"class":258},[100,91491,91492,91494,91496,91498,91500],{"class":102,"line":595},[100,91493,53698],{"class":258},[100,91495,52961],{"class":52854},[100,91497,52964],{"class":258},[100,91499,52961],{"class":52854},[100,91501,52861],{"class":258},[100,91503,91504,91506,91508],{"class":102,"line":601},[100,91505,53698],{"class":258},[100,91507,1677],{"class":52854},[100,91509,52861],{"class":258},[100,91511,91512,91514],{"class":102,"line":606},[100,91513,56306],{"class":106},[100,91515,17153],{"class":258},[100,91517,91518,91520,91522,91524],{"class":102,"line":612},[100,91519,74150],{"class":117},[100,91521,52991],{"class":258},[100,91523,62059],{"class":117},[100,91525,2927],{"class":258},[100,91527,91528,91530,91532,91534,91536],{"class":102,"line":618},[100,91529,56325],{"class":117},[100,91531,52991],{"class":258},[100,91533,3343],{"class":117},[100,91535,53046],{"class":471},[100,91537,2927],{"class":258},[100,91539,91540,91542,91544,91546,91548],{"class":102,"line":623},[100,91541,56339],{"class":117},[100,91543,52991],{"class":258},[100,91545,3343],{"class":117},[100,91547,53046],{"class":471},[100,91549,2927],{"class":258},[100,91551,91552,91554,91556,91559],{"class":102,"line":629},[100,91553,56438],{"class":117},[100,91555,52991],{"class":258},[100,91557,91558],{"class":117},"gray",[100,91560,2927],{"class":258},[100,91562,91563,91565,91567,91569,91571],{"class":102,"line":635},[100,91564,56476],{"class":117},[100,91566,52991],{"class":258},[100,91568,2591],{"class":117},[100,91570,53046],{"class":471},[100,91572,2927],{"class":258},[100,91574,91575,91577,91579,91581],{"class":102,"line":641},[100,91576,58970],{"class":117},[100,91578,52991],{"class":258},[100,91580,62396],{"class":117},[100,91582,2927],{"class":258},[100,91584,91585,91587,91589,91591],{"class":102,"line":647},[100,91586,58840],{"class":117},[100,91588,52991],{"class":258},[100,91590,53146],{"class":117},[100,91592,2927],{"class":258},[100,91594,91595,91598,91600,91602,91604],{"class":102,"line":653},[100,91596,91597],{"class":117},"      padding-top",[100,91599,52991],{"class":258},[100,91601,2086],{"class":117},[100,91603,53046],{"class":471},[100,91605,2927],{"class":258},[100,91607,91608],{"class":102,"line":659},[100,91609,3798],{"class":258},[100,91611,91612,91614,91616],{"class":102,"line":665},[100,91613,53971],{"class":258},[100,91615,1677],{"class":52854},[100,91617,52861],{"class":258},[100,91619,91620,91622,91624],{"class":102,"line":670},[100,91621,53339],{"class":258},[100,91623,52888],{"class":52854},[100,91625,52861],{"class":258},[100,91627,91628],{"class":102,"line":675},[100,91629,570],{"emptyLinePlaceholder":569},[100,91631,91632,91634,91636],{"class":102,"line":699},[100,91633,2676],{"class":258},[100,91635,53354],{"class":52854},[100,91637,52861],{"class":258},[100,91639,91640,91642,91644,91646,91648,91650,91652,91654],{"class":102,"line":708},[100,91641,53698],{"class":258},[100,91643,53165],{"class":52854},[100,91645,55040],{"class":106},[100,91647,472],{"class":258},[100,91649,55045],{"class":110},[100,91651,56868],{"class":258},[100,91653,53165],{"class":52854},[100,91655,52861],{"class":258},[100,91657,91658,91660,91662,91664,91666,91668,91670,91672],{"class":102,"line":722},[100,91659,53698],{"class":258},[100,91661,53367],{"class":52854},[100,91663,56793],{"class":106},[100,91665,472],{"class":258},[100,91667,89826],{"class":110},[100,91669,56868],{"class":258},[100,91671,53367],{"class":52854},[100,91673,52861],{"class":258},[100,91675,91676,91678,91680],{"class":102,"line":735},[100,91677,53698],{"class":258},[100,91679,53367],{"class":52854},[100,91681,52861],{"class":258},[100,91683,91684,91686,91688,91690,91692,91694,91696,91699],{"class":102,"line":754},[100,91685,12803],{"class":471},[100,91687,88485],{"class":117},[100,91689,583],{"class":471},[100,91691,55950],{"class":258},[100,91693,55953],{"class":106},[100,91695,713],{"class":258},[100,91697,91698],{"class":110},"'.box'",[100,91700,809],{"class":258},[100,91702,91703,91705,91707,91709],{"class":102,"line":771},[100,91704,53773],{"class":471},[100,91706,11023],{"class":258},[100,91708,472],{"class":471},[100,91710,48887],{"class":117},[100,91712,91713,91715,91718],{"class":102,"line":776},[100,91714,71638],{"class":471},[100,91716,91717],{"class":106}," mouseMove",[100,91719,12435],{"class":258},[100,91721,91722,91725,91727,91729],{"class":102,"line":781},[100,91723,91724],{"class":258},"      box.innerHTML ",[100,91726,472],{"class":471},[100,91728,4633],{"class":258},[100,91730,4304],{"class":471},[100,91732,91733],{"class":102,"line":796},[100,91734,91735],{"class":1836},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[100,91737,91738],{"class":102,"line":812},[100,91739,3798],{"class":258},[100,91741,91742],{"class":102,"line":823},[100,91743,91744],{"class":1836},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[100,91746,91747],{"class":102,"line":828},[100,91748,91749],{"class":1836},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[100,91751,91752],{"class":102,"line":840},[100,91753,91754],{"class":1836},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[100,91756,91757,91760,91762,91764,91767,91770,91773,91776,91778],{"class":102,"line":845},[100,91758,91759],{"class":258},"    box.",[100,91761,59367],{"class":106},[100,91763,713],{"class":258},[100,91765,91766],{"class":110},"'mousemove'",[100,91768,91769],{"class":258},", _.",[100,91771,91772],{"class":106},"debounce",[100,91774,91775],{"class":258},"(mouseMove, ",[100,91777,66628],{"class":117},[100,91779,751],{"class":258},[100,91781,91782,91784,91786],{"class":102,"line":868},[100,91783,53971],{"class":258},[100,91785,53367],{"class":52854},[100,91787,52861],{"class":258},[100,91789,91790,91792,91794],{"class":102,"line":874},[100,91791,53339],{"class":258},[100,91793,53354],{"class":52854},[100,91795,52861],{"class":258},[100,91797,91798],{"class":102,"line":879},[100,91799,570],{"emptyLinePlaceholder":569},[100,91801,91802,91804,91806],{"class":102,"line":889},[100,91803,53339],{"class":258},[100,91805,52189],{"class":52854},[100,91807,52861],{"class":258},[2773,91809,91810],{},[29,91811,91812],{},"手写一个防抖函数来处理",[19,91814,91815],{},"防抖的核心就是利用定时器来实现的：",[19,91817,91818],{},"①声明一个定时器变量",[19,91820,91821],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,91823,91824],{},"③如果没有定时器则开启定时器，记得存到变量里面",[73,91826,91828],{"className":52187,"code":91827,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .box {\n      box-sizing: border-box;\n      width: 200px;\n      height: 200px;\n      background-color: gray;\n      font-size: 25px;\n      color: #fff;\n      text-align: center;\n      padding-top: 5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\u003C\u002Fdiv>\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const box = document.querySelector('.box')\n    let i = 0\n    function mouseMove() {\n      box.innerHTML = i++\n      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n    }\n    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n    \u002F\u002F 手写防抖函数\n    \u002F\u002F 核心是利用延时器setTimeout来实现的\n    \u002F\u002F 1.声明定时器变量\n    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n    \u002F\u002F 4.定时器里面写函数调用\n    function debounce(fn, t) {\n      let timer\n      \u002F\u002F return 返回一个匿名函数\n      return function () {\n        \u002F\u002F 这里边写第二三四步\n        if (timer) clearTimeout(timer)\n        timer = setTimeout(function () {\n          fn() \u002F\u002F加小括号调用fn }, t)\n        }, t)\n      }\n    }\n    box.addEventListener('mousemove', debounce(mouseMove, 500))\n\n    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,91829,91830,91840,91854,91858,91866,91880,91900,91912,91920,91926,91936,91948,91960,91970,91982,91992,92002,92014,92018,92026,92034,92038,92046,92064,92082,92090,92108,92118,92126,92136,92140,92144,92148,92153,92158,92163,92168,92173,92178,92196,92203,92208,92216,92221,92234,92250,92260,92265,92269,92273,92293,92297,92302,92307,92312,92317,92325,92333,92337],{"__ignoreMap":79},[100,91831,91832,91834,91836,91838],{"class":102,"line":103},[100,91833,52851],{"class":258},[100,91835,52855],{"class":52854},[100,91837,52858],{"class":106},[100,91839,52861],{"class":258},[100,91841,91842,91844,91846,91848,91850,91852],{"class":102,"line":188},[100,91843,2676],{"class":258},[100,91845,52189],{"class":52854},[100,91847,52870],{"class":106},[100,91849,472],{"class":258},[100,91851,52875],{"class":110},[100,91853,52861],{"class":258},[100,91855,91856],{"class":102,"line":199},[100,91857,570],{"emptyLinePlaceholder":569},[100,91859,91860,91862,91864],{"class":102,"line":532},[100,91861,2676],{"class":258},[100,91863,52888],{"class":52854},[100,91865,52861],{"class":258},[100,91867,91868,91870,91872,91874,91876,91878],{"class":102,"line":577},[100,91869,53698],{"class":258},[100,91871,52898],{"class":52854},[100,91873,52901],{"class":106},[100,91875,472],{"class":258},[100,91877,52906],{"class":110},[100,91879,52861],{"class":258},[100,91881,91882,91884,91886,91888,91890,91892,91894,91896,91898],{"class":102,"line":589},[100,91883,53698],{"class":258},[100,91885,52898],{"class":52854},[100,91887,16501],{"class":106},[100,91889,472],{"class":258},[100,91891,52945],{"class":110},[100,91893,52925],{"class":106},[100,91895,472],{"class":258},[100,91897,52952],{"class":110},[100,91899,52861],{"class":258},[100,91901,91902,91904,91906,91908,91910],{"class":102,"line":595},[100,91903,53698],{"class":258},[100,91905,52961],{"class":52854},[100,91907,52964],{"class":258},[100,91909,52961],{"class":52854},[100,91911,52861],{"class":258},[100,91913,91914,91916,91918],{"class":102,"line":601},[100,91915,53698],{"class":258},[100,91917,1677],{"class":52854},[100,91919,52861],{"class":258},[100,91921,91922,91924],{"class":102,"line":606},[100,91923,56306],{"class":106},[100,91925,17153],{"class":258},[100,91927,91928,91930,91932,91934],{"class":102,"line":612},[100,91929,74150],{"class":117},[100,91931,52991],{"class":258},[100,91933,62059],{"class":117},[100,91935,2927],{"class":258},[100,91937,91938,91940,91942,91944,91946],{"class":102,"line":618},[100,91939,56325],{"class":117},[100,91941,52991],{"class":258},[100,91943,3343],{"class":117},[100,91945,53046],{"class":471},[100,91947,2927],{"class":258},[100,91949,91950,91952,91954,91956,91958],{"class":102,"line":623},[100,91951,56339],{"class":117},[100,91953,52991],{"class":258},[100,91955,3343],{"class":117},[100,91957,53046],{"class":471},[100,91959,2927],{"class":258},[100,91961,91962,91964,91966,91968],{"class":102,"line":629},[100,91963,56438],{"class":117},[100,91965,52991],{"class":258},[100,91967,91558],{"class":117},[100,91969,2927],{"class":258},[100,91971,91972,91974,91976,91978,91980],{"class":102,"line":635},[100,91973,56476],{"class":117},[100,91975,52991],{"class":258},[100,91977,2591],{"class":117},[100,91979,53046],{"class":471},[100,91981,2927],{"class":258},[100,91983,91984,91986,91988,91990],{"class":102,"line":641},[100,91985,58970],{"class":117},[100,91987,52991],{"class":258},[100,91989,62396],{"class":117},[100,91991,2927],{"class":258},[100,91993,91994,91996,91998,92000],{"class":102,"line":647},[100,91995,58840],{"class":117},[100,91997,52991],{"class":258},[100,91999,53146],{"class":117},[100,92001,2927],{"class":258},[100,92003,92004,92006,92008,92010,92012],{"class":102,"line":653},[100,92005,91597],{"class":117},[100,92007,52991],{"class":258},[100,92009,2086],{"class":117},[100,92011,53046],{"class":471},[100,92013,2927],{"class":258},[100,92015,92016],{"class":102,"line":659},[100,92017,3798],{"class":258},[100,92019,92020,92022,92024],{"class":102,"line":665},[100,92021,53971],{"class":258},[100,92023,1677],{"class":52854},[100,92025,52861],{"class":258},[100,92027,92028,92030,92032],{"class":102,"line":670},[100,92029,53339],{"class":258},[100,92031,52888],{"class":52854},[100,92033,52861],{"class":258},[100,92035,92036],{"class":102,"line":675},[100,92037,570],{"emptyLinePlaceholder":569},[100,92039,92040,92042,92044],{"class":102,"line":699},[100,92041,2676],{"class":258},[100,92043,53354],{"class":52854},[100,92045,52861],{"class":258},[100,92047,92048,92050,92052,92054,92056,92058,92060,92062],{"class":102,"line":708},[100,92049,53698],{"class":258},[100,92051,53165],{"class":52854},[100,92053,55040],{"class":106},[100,92055,472],{"class":258},[100,92057,55045],{"class":110},[100,92059,56868],{"class":258},[100,92061,53165],{"class":52854},[100,92063,52861],{"class":258},[100,92065,92066,92068,92070,92072,92074,92076,92078,92080],{"class":102,"line":722},[100,92067,53698],{"class":258},[100,92069,53367],{"class":52854},[100,92071,56793],{"class":106},[100,92073,472],{"class":258},[100,92075,89826],{"class":110},[100,92077,56868],{"class":258},[100,92079,53367],{"class":52854},[100,92081,52861],{"class":258},[100,92083,92084,92086,92088],{"class":102,"line":735},[100,92085,53698],{"class":258},[100,92087,53367],{"class":52854},[100,92089,52861],{"class":258},[100,92091,92092,92094,92096,92098,92100,92102,92104,92106],{"class":102,"line":754},[100,92093,12803],{"class":471},[100,92095,88485],{"class":117},[100,92097,583],{"class":471},[100,92099,55950],{"class":258},[100,92101,55953],{"class":106},[100,92103,713],{"class":258},[100,92105,91698],{"class":110},[100,92107,809],{"class":258},[100,92109,92110,92112,92114,92116],{"class":102,"line":771},[100,92111,53773],{"class":471},[100,92113,11023],{"class":258},[100,92115,472],{"class":471},[100,92117,48887],{"class":117},[100,92119,92120,92122,92124],{"class":102,"line":776},[100,92121,71638],{"class":471},[100,92123,91717],{"class":106},[100,92125,12435],{"class":258},[100,92127,92128,92130,92132,92134],{"class":102,"line":781},[100,92129,91724],{"class":258},[100,92131,472],{"class":471},[100,92133,4633],{"class":258},[100,92135,4304],{"class":471},[100,92137,92138],{"class":102,"line":796},[100,92139,91735],{"class":1836},[100,92141,92142],{"class":102,"line":812},[100,92143,3798],{"class":258},[100,92145,92146],{"class":102,"line":823},[100,92147,91744],{"class":1836},[100,92149,92150],{"class":102,"line":828},[100,92151,92152],{"class":1836},"    \u002F\u002F 手写防抖函数\n",[100,92154,92155],{"class":102,"line":840},[100,92156,92157],{"class":1836},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[100,92159,92160],{"class":102,"line":845},[100,92161,92162],{"class":1836},"    \u002F\u002F 1.声明定时器变量\n",[100,92164,92165],{"class":102,"line":868},[100,92166,92167],{"class":1836},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[100,92169,92170],{"class":102,"line":874},[100,92171,92172],{"class":1836},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[100,92174,92175],{"class":102,"line":879},[100,92176,92177],{"class":1836},"    \u002F\u002F 4.定时器里面写函数调用\n",[100,92179,92180,92182,92185,92187,92190,92192,92194],{"class":102,"line":889},[100,92181,71638],{"class":471},[100,92183,92184],{"class":106}," debounce",[100,92186,713],{"class":258},[100,92188,92189],{"class":6812},"fn",[100,92191,14017],{"class":258},[100,92193,2486],{"class":6812},[100,92195,14024],{"class":258},[100,92197,92198,92200],{"class":102,"line":894},[100,92199,81326],{"class":471},[100,92201,92202],{"class":258}," timer\n",[100,92204,92205],{"class":102,"line":900},[100,92206,92207],{"class":1836},"      \u002F\u002F return 返回一个匿名函数\n",[100,92209,92210,92212,92214],{"class":102,"line":910},[100,92211,75536],{"class":471},[100,92213,60472],{"class":471},[100,92215,56006],{"class":258},[100,92217,92218],{"class":102,"line":915},[100,92219,92220],{"class":1836},"        \u002F\u002F 这里边写第二三四步\n",[100,92222,92223,92225,92228,92231],{"class":102,"line":929},[100,92224,4106],{"class":471},[100,92226,92227],{"class":258}," (timer) ",[100,92229,92230],{"class":106},"clearTimeout",[100,92232,92233],{"class":258},"(timer)\n",[100,92235,92236,92239,92241,92244,92246,92248],{"class":102,"line":935},[100,92237,92238],{"class":258},"        timer ",[100,92240,472],{"class":471},[100,92242,92243],{"class":106}," setTimeout",[100,92245,713],{"class":258},[100,92247,56003],{"class":471},[100,92249,56006],{"class":258},[100,92251,92252,92255,92257],{"class":102,"line":945},[100,92253,92254],{"class":106},"          fn",[100,92256,14632],{"class":258},[100,92258,92259],{"class":1836},"\u002F\u002F加小括号调用fn }, t)\n",[100,92261,92262],{"class":102,"line":950},[100,92263,92264],{"class":258},"        }, t)\n",[100,92266,92267],{"class":102,"line":955},[100,92268,53952],{"class":258},[100,92270,92271],{"class":102,"line":972},[100,92272,3798],{"class":258},[100,92274,92275,92277,92279,92281,92283,92285,92287,92289,92291],{"class":102,"line":11370},[100,92276,91759],{"class":258},[100,92278,59367],{"class":106},[100,92280,713],{"class":258},[100,92282,91766],{"class":110},[100,92284,14017],{"class":258},[100,92286,91772],{"class":106},[100,92288,91775],{"class":258},[100,92290,66628],{"class":117},[100,92292,751],{"class":258},[100,92294,92295],{"class":102,"line":11375},[100,92296,570],{"emptyLinePlaceholder":569},[100,92298,92299],{"class":102,"line":11380},[100,92300,92301],{"class":1836},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[100,92303,92304],{"class":102,"line":11385},[100,92305,92306],{"class":1836},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[100,92308,92309],{"class":102,"line":11394},[100,92310,92311],{"class":1836},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[100,92313,92314],{"class":102,"line":11399},[100,92315,92316],{"class":1836},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[100,92318,92319,92321,92323],{"class":102,"line":11405},[100,92320,53971],{"class":258},[100,92322,53367],{"class":52854},[100,92324,52861],{"class":258},[100,92326,92327,92329,92331],{"class":102,"line":11426},[100,92328,53339],{"class":258},[100,92330,53354],{"class":52854},[100,92332,52861],{"class":258},[100,92334,92335],{"class":102,"line":11432},[100,92336,570],{"emptyLinePlaceholder":569},[100,92338,92339,92341,92343],{"class":102,"line":11446},[100,92340,53339],{"class":258},[100,92342,52189],{"class":52854},[100,92344,52861],{"class":258},[305,92346,92348],{"id":92347},"_4172-节流","4.17.2 节流",[19,92350,92351],{},[3095,92352],{"alt":79,"src":92353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,92355,92356],{},[3095,92357],{"alt":79,"src":92358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,92360,92361],{},[1921,92362,92363],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,92365,92366],{},"实现方式：",[2773,92368,92369],{},[29,92370,92371],{},"lodash 提供的节流函数来处理",[19,92373,92374],{},"_.throttle(func,[wait=0],[options=])",[19,92376,92377],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[73,92379,92381],{"className":52187,"code":92380,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .box {\n      box-sizing: border-box;\n      width: 200px;\n      height: 200px;\n      background-color: gray;\n      font-size: 25px;\n      color: #fff;\n      text-align: center;\n      padding-top: 5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\u003C\u002Fdiv>\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const box = document.querySelector('.box')\n    let i = 0\n    function mouseMove() {\n      box.innerHTML = i++\n      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n    }\n    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n    \u002F\u002F 语法:_.throttle(fun,时间)\n    box.addEventListener('mousemove', _.throttle(mouseMove, 500))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,92382,92383,92393,92407,92411,92419,92433,92453,92465,92473,92479,92489,92501,92513,92523,92535,92545,92555,92567,92571,92579,92587,92591,92599,92617,92635,92643,92661,92671,92679,92689,92693,92697,92701,92706,92711,92732,92740,92748,92752],{"__ignoreMap":79},[100,92384,92385,92387,92389,92391],{"class":102,"line":103},[100,92386,52851],{"class":258},[100,92388,52855],{"class":52854},[100,92390,52858],{"class":106},[100,92392,52861],{"class":258},[100,92394,92395,92397,92399,92401,92403,92405],{"class":102,"line":188},[100,92396,2676],{"class":258},[100,92398,52189],{"class":52854},[100,92400,52870],{"class":106},[100,92402,472],{"class":258},[100,92404,52875],{"class":110},[100,92406,52861],{"class":258},[100,92408,92409],{"class":102,"line":199},[100,92410,570],{"emptyLinePlaceholder":569},[100,92412,92413,92415,92417],{"class":102,"line":532},[100,92414,2676],{"class":258},[100,92416,52888],{"class":52854},[100,92418,52861],{"class":258},[100,92420,92421,92423,92425,92427,92429,92431],{"class":102,"line":577},[100,92422,53698],{"class":258},[100,92424,52898],{"class":52854},[100,92426,52901],{"class":106},[100,92428,472],{"class":258},[100,92430,52906],{"class":110},[100,92432,52861],{"class":258},[100,92434,92435,92437,92439,92441,92443,92445,92447,92449,92451],{"class":102,"line":589},[100,92436,53698],{"class":258},[100,92438,52898],{"class":52854},[100,92440,16501],{"class":106},[100,92442,472],{"class":258},[100,92444,52945],{"class":110},[100,92446,52925],{"class":106},[100,92448,472],{"class":258},[100,92450,52952],{"class":110},[100,92452,52861],{"class":258},[100,92454,92455,92457,92459,92461,92463],{"class":102,"line":595},[100,92456,53698],{"class":258},[100,92458,52961],{"class":52854},[100,92460,52964],{"class":258},[100,92462,52961],{"class":52854},[100,92464,52861],{"class":258},[100,92466,92467,92469,92471],{"class":102,"line":601},[100,92468,53698],{"class":258},[100,92470,1677],{"class":52854},[100,92472,52861],{"class":258},[100,92474,92475,92477],{"class":102,"line":606},[100,92476,56306],{"class":106},[100,92478,17153],{"class":258},[100,92480,92481,92483,92485,92487],{"class":102,"line":612},[100,92482,74150],{"class":117},[100,92484,52991],{"class":258},[100,92486,62059],{"class":117},[100,92488,2927],{"class":258},[100,92490,92491,92493,92495,92497,92499],{"class":102,"line":618},[100,92492,56325],{"class":117},[100,92494,52991],{"class":258},[100,92496,3343],{"class":117},[100,92498,53046],{"class":471},[100,92500,2927],{"class":258},[100,92502,92503,92505,92507,92509,92511],{"class":102,"line":623},[100,92504,56339],{"class":117},[100,92506,52991],{"class":258},[100,92508,3343],{"class":117},[100,92510,53046],{"class":471},[100,92512,2927],{"class":258},[100,92514,92515,92517,92519,92521],{"class":102,"line":629},[100,92516,56438],{"class":117},[100,92518,52991],{"class":258},[100,92520,91558],{"class":117},[100,92522,2927],{"class":258},[100,92524,92525,92527,92529,92531,92533],{"class":102,"line":635},[100,92526,56476],{"class":117},[100,92528,52991],{"class":258},[100,92530,2591],{"class":117},[100,92532,53046],{"class":471},[100,92534,2927],{"class":258},[100,92536,92537,92539,92541,92543],{"class":102,"line":641},[100,92538,58970],{"class":117},[100,92540,52991],{"class":258},[100,92542,62396],{"class":117},[100,92544,2927],{"class":258},[100,92546,92547,92549,92551,92553],{"class":102,"line":647},[100,92548,58840],{"class":117},[100,92550,52991],{"class":258},[100,92552,53146],{"class":117},[100,92554,2927],{"class":258},[100,92556,92557,92559,92561,92563,92565],{"class":102,"line":653},[100,92558,91597],{"class":117},[100,92560,52991],{"class":258},[100,92562,2086],{"class":117},[100,92564,53046],{"class":471},[100,92566,2927],{"class":258},[100,92568,92569],{"class":102,"line":659},[100,92570,3798],{"class":258},[100,92572,92573,92575,92577],{"class":102,"line":665},[100,92574,53971],{"class":258},[100,92576,1677],{"class":52854},[100,92578,52861],{"class":258},[100,92580,92581,92583,92585],{"class":102,"line":670},[100,92582,53339],{"class":258},[100,92584,52888],{"class":52854},[100,92586,52861],{"class":258},[100,92588,92589],{"class":102,"line":675},[100,92590,570],{"emptyLinePlaceholder":569},[100,92592,92593,92595,92597],{"class":102,"line":699},[100,92594,2676],{"class":258},[100,92596,53354],{"class":52854},[100,92598,52861],{"class":258},[100,92600,92601,92603,92605,92607,92609,92611,92613,92615],{"class":102,"line":708},[100,92602,53698],{"class":258},[100,92604,53165],{"class":52854},[100,92606,55040],{"class":106},[100,92608,472],{"class":258},[100,92610,55045],{"class":110},[100,92612,56868],{"class":258},[100,92614,53165],{"class":52854},[100,92616,52861],{"class":258},[100,92618,92619,92621,92623,92625,92627,92629,92631,92633],{"class":102,"line":722},[100,92620,53698],{"class":258},[100,92622,53367],{"class":52854},[100,92624,56793],{"class":106},[100,92626,472],{"class":258},[100,92628,89826],{"class":110},[100,92630,56868],{"class":258},[100,92632,53367],{"class":52854},[100,92634,52861],{"class":258},[100,92636,92637,92639,92641],{"class":102,"line":735},[100,92638,53698],{"class":258},[100,92640,53367],{"class":52854},[100,92642,52861],{"class":258},[100,92644,92645,92647,92649,92651,92653,92655,92657,92659],{"class":102,"line":754},[100,92646,12803],{"class":471},[100,92648,88485],{"class":117},[100,92650,583],{"class":471},[100,92652,55950],{"class":258},[100,92654,55953],{"class":106},[100,92656,713],{"class":258},[100,92658,91698],{"class":110},[100,92660,809],{"class":258},[100,92662,92663,92665,92667,92669],{"class":102,"line":771},[100,92664,53773],{"class":471},[100,92666,11023],{"class":258},[100,92668,472],{"class":471},[100,92670,48887],{"class":117},[100,92672,92673,92675,92677],{"class":102,"line":776},[100,92674,71638],{"class":471},[100,92676,91717],{"class":106},[100,92678,12435],{"class":258},[100,92680,92681,92683,92685,92687],{"class":102,"line":781},[100,92682,91724],{"class":258},[100,92684,472],{"class":471},[100,92686,4633],{"class":258},[100,92688,4304],{"class":471},[100,92690,92691],{"class":102,"line":796},[100,92692,91735],{"class":1836},[100,92694,92695],{"class":102,"line":812},[100,92696,3798],{"class":258},[100,92698,92699],{"class":102,"line":823},[100,92700,91744],{"class":1836},[100,92702,92703],{"class":102,"line":828},[100,92704,92705],{"class":1836},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[100,92707,92708],{"class":102,"line":840},[100,92709,92710],{"class":1836},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[100,92712,92713,92715,92717,92719,92721,92723,92726,92728,92730],{"class":102,"line":845},[100,92714,91759],{"class":258},[100,92716,59367],{"class":106},[100,92718,713],{"class":258},[100,92720,91766],{"class":110},[100,92722,91769],{"class":258},[100,92724,92725],{"class":106},"throttle",[100,92727,91775],{"class":258},[100,92729,66628],{"class":117},[100,92731,751],{"class":258},[100,92733,92734,92736,92738],{"class":102,"line":868},[100,92735,53971],{"class":258},[100,92737,53367],{"class":52854},[100,92739,52861],{"class":258},[100,92741,92742,92744,92746],{"class":102,"line":874},[100,92743,53339],{"class":258},[100,92745,53354],{"class":52854},[100,92747,52861],{"class":258},[100,92749,92750],{"class":102,"line":879},[100,92751,570],{"emptyLinePlaceholder":569},[100,92753,92754,92756,92758],{"class":102,"line":889},[100,92755,53339],{"class":258},[100,92757,52189],{"class":52854},[100,92759,52861],{"class":258},[2773,92761,92762],{},[29,92763,92764],{},"手写一个节流函数来处理",[19,92766,72506],{},[19,92768,91818],{},[19,92770,92771],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,92773,92774],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[73,92776,92778],{"className":52187,"code":92777,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .box {\n      box-sizing: border-box;\n      width: 200px;\n      height: 200px;\n      background-color: gray;\n      font-size: 25px;\n      color: #fff;\n      text-align: center;\n      padding-top: 5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\u003C\u002Fdiv>\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const box = document.querySelector('.box')\n    let i = 0\n    function mouseMove() {\n      box.innerHTML = i++\n      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n    }\n    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n    \u002F\u002F 手写节流函数  每隔500ms+1\n    \u002F\u002F 1.声明一个定时器变量\n    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n    \u002F\u002F 3.1定时器里面调用执行函数\n    \u002F\u002F 3.2定时器里面要把定时器清空\n    function throttle(fn, t) {\n      let timer\n      return function () {\n        if (!timer) {\n          timer = setTimeout(function () {\n            fn()\n            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n            timer = null\n            \u002F\u002F 不能用clearTimeout(timer)\n            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n          }, t)\n        }\n      }\n    }\n    box.addEventListener('mousemove', throttle(mouseMove, 500))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,92779,92780,92790,92804,92808,92816,92830,92850,92862,92870,92876,92886,92898,92910,92920,92932,92942,92952,92964,92968,92976,92984,92988,92996,93014,93032,93040,93058,93068,93076,93086,93090,93094,93098,93103,93108,93113,93118,93123,93128,93145,93151,93159,93170,93185,93192,93197,93202,93212,93217,93222,93227,93231,93235,93239,93259,93267,93275,93279],{"__ignoreMap":79},[100,92781,92782,92784,92786,92788],{"class":102,"line":103},[100,92783,52851],{"class":258},[100,92785,52855],{"class":52854},[100,92787,52858],{"class":106},[100,92789,52861],{"class":258},[100,92791,92792,92794,92796,92798,92800,92802],{"class":102,"line":188},[100,92793,2676],{"class":258},[100,92795,52189],{"class":52854},[100,92797,52870],{"class":106},[100,92799,472],{"class":258},[100,92801,52875],{"class":110},[100,92803,52861],{"class":258},[100,92805,92806],{"class":102,"line":199},[100,92807,570],{"emptyLinePlaceholder":569},[100,92809,92810,92812,92814],{"class":102,"line":532},[100,92811,2676],{"class":258},[100,92813,52888],{"class":52854},[100,92815,52861],{"class":258},[100,92817,92818,92820,92822,92824,92826,92828],{"class":102,"line":577},[100,92819,53698],{"class":258},[100,92821,52898],{"class":52854},[100,92823,52901],{"class":106},[100,92825,472],{"class":258},[100,92827,52906],{"class":110},[100,92829,52861],{"class":258},[100,92831,92832,92834,92836,92838,92840,92842,92844,92846,92848],{"class":102,"line":589},[100,92833,53698],{"class":258},[100,92835,52898],{"class":52854},[100,92837,16501],{"class":106},[100,92839,472],{"class":258},[100,92841,52945],{"class":110},[100,92843,52925],{"class":106},[100,92845,472],{"class":258},[100,92847,52952],{"class":110},[100,92849,52861],{"class":258},[100,92851,92852,92854,92856,92858,92860],{"class":102,"line":595},[100,92853,53698],{"class":258},[100,92855,52961],{"class":52854},[100,92857,52964],{"class":258},[100,92859,52961],{"class":52854},[100,92861,52861],{"class":258},[100,92863,92864,92866,92868],{"class":102,"line":601},[100,92865,53698],{"class":258},[100,92867,1677],{"class":52854},[100,92869,52861],{"class":258},[100,92871,92872,92874],{"class":102,"line":606},[100,92873,56306],{"class":106},[100,92875,17153],{"class":258},[100,92877,92878,92880,92882,92884],{"class":102,"line":612},[100,92879,74150],{"class":117},[100,92881,52991],{"class":258},[100,92883,62059],{"class":117},[100,92885,2927],{"class":258},[100,92887,92888,92890,92892,92894,92896],{"class":102,"line":618},[100,92889,56325],{"class":117},[100,92891,52991],{"class":258},[100,92893,3343],{"class":117},[100,92895,53046],{"class":471},[100,92897,2927],{"class":258},[100,92899,92900,92902,92904,92906,92908],{"class":102,"line":623},[100,92901,56339],{"class":117},[100,92903,52991],{"class":258},[100,92905,3343],{"class":117},[100,92907,53046],{"class":471},[100,92909,2927],{"class":258},[100,92911,92912,92914,92916,92918],{"class":102,"line":629},[100,92913,56438],{"class":117},[100,92915,52991],{"class":258},[100,92917,91558],{"class":117},[100,92919,2927],{"class":258},[100,92921,92922,92924,92926,92928,92930],{"class":102,"line":635},[100,92923,56476],{"class":117},[100,92925,52991],{"class":258},[100,92927,2591],{"class":117},[100,92929,53046],{"class":471},[100,92931,2927],{"class":258},[100,92933,92934,92936,92938,92940],{"class":102,"line":641},[100,92935,58970],{"class":117},[100,92937,52991],{"class":258},[100,92939,62396],{"class":117},[100,92941,2927],{"class":258},[100,92943,92944,92946,92948,92950],{"class":102,"line":647},[100,92945,58840],{"class":117},[100,92947,52991],{"class":258},[100,92949,53146],{"class":117},[100,92951,2927],{"class":258},[100,92953,92954,92956,92958,92960,92962],{"class":102,"line":653},[100,92955,91597],{"class":117},[100,92957,52991],{"class":258},[100,92959,2086],{"class":117},[100,92961,53046],{"class":471},[100,92963,2927],{"class":258},[100,92965,92966],{"class":102,"line":659},[100,92967,3798],{"class":258},[100,92969,92970,92972,92974],{"class":102,"line":665},[100,92971,53971],{"class":258},[100,92973,1677],{"class":52854},[100,92975,52861],{"class":258},[100,92977,92978,92980,92982],{"class":102,"line":670},[100,92979,53339],{"class":258},[100,92981,52888],{"class":52854},[100,92983,52861],{"class":258},[100,92985,92986],{"class":102,"line":675},[100,92987,570],{"emptyLinePlaceholder":569},[100,92989,92990,92992,92994],{"class":102,"line":699},[100,92991,2676],{"class":258},[100,92993,53354],{"class":52854},[100,92995,52861],{"class":258},[100,92997,92998,93000,93002,93004,93006,93008,93010,93012],{"class":102,"line":708},[100,92999,53698],{"class":258},[100,93001,53165],{"class":52854},[100,93003,55040],{"class":106},[100,93005,472],{"class":258},[100,93007,55045],{"class":110},[100,93009,56868],{"class":258},[100,93011,53165],{"class":52854},[100,93013,52861],{"class":258},[100,93015,93016,93018,93020,93022,93024,93026,93028,93030],{"class":102,"line":722},[100,93017,53698],{"class":258},[100,93019,53367],{"class":52854},[100,93021,56793],{"class":106},[100,93023,472],{"class":258},[100,93025,89826],{"class":110},[100,93027,56868],{"class":258},[100,93029,53367],{"class":52854},[100,93031,52861],{"class":258},[100,93033,93034,93036,93038],{"class":102,"line":735},[100,93035,53698],{"class":258},[100,93037,53367],{"class":52854},[100,93039,52861],{"class":258},[100,93041,93042,93044,93046,93048,93050,93052,93054,93056],{"class":102,"line":754},[100,93043,12803],{"class":471},[100,93045,88485],{"class":117},[100,93047,583],{"class":471},[100,93049,55950],{"class":258},[100,93051,55953],{"class":106},[100,93053,713],{"class":258},[100,93055,91698],{"class":110},[100,93057,809],{"class":258},[100,93059,93060,93062,93064,93066],{"class":102,"line":771},[100,93061,53773],{"class":471},[100,93063,11023],{"class":258},[100,93065,472],{"class":471},[100,93067,48887],{"class":117},[100,93069,93070,93072,93074],{"class":102,"line":776},[100,93071,71638],{"class":471},[100,93073,91717],{"class":106},[100,93075,12435],{"class":258},[100,93077,93078,93080,93082,93084],{"class":102,"line":781},[100,93079,91724],{"class":258},[100,93081,472],{"class":471},[100,93083,4633],{"class":258},[100,93085,4304],{"class":471},[100,93087,93088],{"class":102,"line":796},[100,93089,91735],{"class":1836},[100,93091,93092],{"class":102,"line":812},[100,93093,3798],{"class":258},[100,93095,93096],{"class":102,"line":823},[100,93097,91744],{"class":1836},[100,93099,93100],{"class":102,"line":828},[100,93101,93102],{"class":1836},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[100,93104,93105],{"class":102,"line":840},[100,93106,93107],{"class":1836},"    \u002F\u002F 1.声明一个定时器变量\n",[100,93109,93110],{"class":102,"line":845},[100,93111,93112],{"class":1836},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[100,93114,93115],{"class":102,"line":868},[100,93116,93117],{"class":1836},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[100,93119,93120],{"class":102,"line":874},[100,93121,93122],{"class":1836},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[100,93124,93125],{"class":102,"line":879},[100,93126,93127],{"class":1836},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[100,93129,93130,93132,93135,93137,93139,93141,93143],{"class":102,"line":889},[100,93131,71638],{"class":471},[100,93133,93134],{"class":106}," throttle",[100,93136,713],{"class":258},[100,93138,92189],{"class":6812},[100,93140,14017],{"class":258},[100,93142,2486],{"class":6812},[100,93144,14024],{"class":258},[100,93146,93147,93149],{"class":102,"line":894},[100,93148,81326],{"class":471},[100,93150,92202],{"class":258},[100,93152,93153,93155,93157],{"class":102,"line":900},[100,93154,75536],{"class":471},[100,93156,60472],{"class":471},[100,93158,56006],{"class":258},[100,93160,93161,93163,93165,93167],{"class":102,"line":910},[100,93162,4106],{"class":471},[100,93164,3283],{"class":258},[100,93166,1994],{"class":471},[100,93168,93169],{"class":258},"timer) {\n",[100,93171,93172,93175,93177,93179,93181,93183],{"class":102,"line":915},[100,93173,93174],{"class":258},"          timer ",[100,93176,472],{"class":471},[100,93178,92243],{"class":106},[100,93180,713],{"class":258},[100,93182,56003],{"class":471},[100,93184,56006],{"class":258},[100,93186,93187,93190],{"class":102,"line":929},[100,93188,93189],{"class":106},"            fn",[100,93191,3587],{"class":258},[100,93193,93194],{"class":102,"line":935},[100,93195,93196],{"class":1836},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[100,93198,93199],{"class":102,"line":945},[100,93200,93201],{"class":1836},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[100,93203,93204,93207,93209],{"class":102,"line":950},[100,93205,93206],{"class":258},"            timer ",[100,93208,472],{"class":471},[100,93210,93211],{"class":117}," null\n",[100,93213,93214],{"class":102,"line":955},[100,93215,93216],{"class":1836},"            \u002F\u002F 不能用clearTimeout(timer)\n",[100,93218,93219],{"class":102,"line":972},[100,93220,93221],{"class":1836},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[100,93223,93224],{"class":102,"line":11370},[100,93225,93226],{"class":258},"          }, t)\n",[100,93228,93229],{"class":102,"line":11375},[100,93230,4138],{"class":258},[100,93232,93233],{"class":102,"line":11380},[100,93234,53952],{"class":258},[100,93236,93237],{"class":102,"line":11385},[100,93238,3798],{"class":258},[100,93240,93241,93243,93245,93247,93249,93251,93253,93255,93257],{"class":102,"line":11394},[100,93242,91759],{"class":258},[100,93244,59367],{"class":106},[100,93246,713],{"class":258},[100,93248,91766],{"class":110},[100,93250,14017],{"class":258},[100,93252,92725],{"class":106},[100,93254,91775],{"class":258},[100,93256,66628],{"class":117},[100,93258,751],{"class":258},[100,93260,93261,93263,93265],{"class":102,"line":11399},[100,93262,53971],{"class":258},[100,93264,53367],{"class":52854},[100,93266,52861],{"class":258},[100,93268,93269,93271,93273],{"class":102,"line":11405},[100,93270,53339],{"class":258},[100,93272,53354],{"class":52854},[100,93274,52861],{"class":258},[100,93276,93277],{"class":102,"line":11426},[100,93278,570],{"emptyLinePlaceholder":569},[100,93280,93281,93283,93285],{"class":102,"line":11432},[100,93282,53339],{"class":258},[100,93284,52189],{"class":52854},[100,93286,52861],{"class":258},[305,93288,93290],{"id":93289},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[73,93292,93294],{"className":54621,"code":93293,"language":54623,"meta":79,"style":79},"\u003Cbody>\n  \u003Cscript>\n    let timer = null\n    timer = setTimeout(() => {\n      clearTimeout(timer)\n      console.log(timer)\n    }, 1000)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[32,93295,93296,93304,93312,93317,93322,93327,93332,93336,93344],{"__ignoreMap":79},[100,93297,93298,93300,93302],{"class":102,"line":103},[100,93299,2676],{"class":258},[100,93301,53354],{"class":52854},[100,93303,52861],{"class":258},[100,93305,93306,93308,93310],{"class":102,"line":188},[100,93307,53698],{"class":258},[100,93309,53367],{"class":52854},[100,93311,52861],{"class":258},[100,93313,93314],{"class":102,"line":199},[100,93315,93316],{"class":258},"    let timer = null\n",[100,93318,93319],{"class":102,"line":532},[100,93320,93321],{"class":258},"    timer = setTimeout(() => {\n",[100,93323,93324],{"class":102,"line":577},[100,93325,93326],{"class":258},"      clearTimeout(timer)\n",[100,93328,93329],{"class":102,"line":589},[100,93330,93331],{"class":258},"      console.log(timer)\n",[100,93333,93334],{"class":102,"line":595},[100,93335,61779],{"class":258},[100,93337,93338,93340,93342],{"class":102,"line":601},[100,93339,53971],{"class":258},[100,93341,53367],{"class":52854},[100,93343,52861],{"class":258},[100,93345,93346,93348,93350],{"class":102,"line":606},[100,93347,53339],{"class":258},[100,93349,53354],{"class":52854},[100,93351,52861],{"class":258},[19,93353,93354],{},"输出为1",[19,93356,93357],{},"在开启的定时器里边写清除定时器",[19,93359,93360],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[305,93362,93364],{"id":93363},"_4174-节流综合案例","4.17.4 节流综合案例",[19,93366,93367],{},"页面打开，可以记录上一次的视频播放位置",[19,93369,93370],{},[3095,93371],{"alt":79,"src":93372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,93374,93375],{},[3095,93376],{"alt":79,"src":93377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[73,93379,93381],{"className":52187,"code":93380,"language":52189,"meta":79,"style":79},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Cmeta name=\"referrer\" content=\"never\" \u002F>\n  \u003Ctitle>综合案例\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n      box-sizing: border-box;\n    }\n\n    .container {\n      width: 1200px;\n      margin: 0 auto;\n    }\n\n    .video video {\n      width: 100%;\n      padding: 20px 0;\n    }\n\n    .elevator {\n      position: fixed;\n      top: 280px;\n      right: 20px;\n      z-index: 999;\n      background: #fff;\n      border: 1px solid #e4e4e4;\n      width: 60px;\n    }\n\n    .elevator a {\n      display: block;\n      padding: 10px;\n      text-decoration: none;\n      text-align: center;\n      color: #999;\n    }\n\n    .elevator a.active {\n      color: #1286ff;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"container\">\n    \u003Cdiv class=\"header\">\n      \u003Ca href=\"http:\u002F\u002Fpip.itcast.cn\">\n        \u003Cimg src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\" alt=\"\" \u002F>\n      \u003C\u002Fa>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"video\">\n      \u003Cvideo src=\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\" controls>\u003C\u002Fvideo>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"elevator\">\n      \u003Ca href=\"javascript:;\" data-ref=\"video\">视频介绍\u003C\u002Fa>\n      \u003Ca href=\"javascript:;\" data-ref=\"intro\">课程简介\u003C\u002Fa>\n      \u003Ca href=\"javascript:;\" data-ref=\"outline\">评论列表\u003C\u002Fa>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript src=\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    \u002F\u002F 1.获取元素 要对视频进行操作\n    const video = document.querySelector('video')\n    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n    video.ontimeupdate = _.throttle(() => {\n      \u002F\u002F 要进行本地存储,存当前播放的时间\n      \u002F\u002F 控制台输出当前的时间\n      \u002F\u002F console.log(video.currentTime)  \u002F\u002F获得当前的视频时间\n      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n      localStorage.setItem('currentTime', video.currentTime)\n    }, 1000)\n    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n    video.onloadeddata = () => {\n      \u002F\u002F console.log(11)\n      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n      video.currentTime = localStorage.getItem('currentTime') || 0\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[32,93382,93383,93393,93407,93411,93419,93433,93453,93473,93495,93508,93516,93522,93532,93542,93552,93556,93560,93567,93580,93592,93596,93600,93610,93622,93636,93640,93644,93651,93661,93674,93686,93696,93706,93722,93734,93738,93742,93750,93760,93772,93782,93792,93802,93806,93810,93820,93831,93835,93843,93851,93855,93863,93878,93893,93908,93929,93937,93945,93960,93982,93990,94005,94031,94057,94083,94091,94099,94118,94126,94131,94150,94155,94173,94178,94183,94191,94196,94210,94218,94223,94240,94244,94249,94271,94275,94283,94291,94295],{"__ignoreMap":79},[100,93384,93385,93387,93389,93391],{"class":102,"line":103},[100,93386,52851],{"class":258},[100,93388,52855],{"class":52854},[100,93390,52858],{"class":106},[100,93392,52861],{"class":258},[100,93394,93395,93397,93399,93401,93403,93405],{"class":102,"line":188},[100,93396,2676],{"class":258},[100,93398,52189],{"class":52854},[100,93400,52870],{"class":106},[100,93402,472],{"class":258},[100,93404,52875],{"class":110},[100,93406,52861],{"class":258},[100,93408,93409],{"class":102,"line":199},[100,93410,570],{"emptyLinePlaceholder":569},[100,93412,93413,93415,93417],{"class":102,"line":532},[100,93414,2676],{"class":258},[100,93416,52888],{"class":52854},[100,93418,52861],{"class":258},[100,93420,93421,93423,93425,93427,93429,93431],{"class":102,"line":577},[100,93422,53698],{"class":258},[100,93424,52898],{"class":52854},[100,93426,52901],{"class":106},[100,93428,472],{"class":258},[100,93430,52906],{"class":110},[100,93432,60681],{"class":258},[100,93434,93435,93437,93439,93441,93443,93445,93447,93449,93451],{"class":102,"line":589},[100,93436,53698],{"class":258},[100,93438,52898],{"class":52854},[100,93440,52917],{"class":106},[100,93442,472],{"class":258},[100,93444,52922],{"class":110},[100,93446,52925],{"class":106},[100,93448,472],{"class":258},[100,93450,52930],{"class":110},[100,93452,60681],{"class":258},[100,93454,93455,93457,93459,93461,93463,93465,93467,93469,93471],{"class":102,"line":595},[100,93456,53698],{"class":258},[100,93458,52898],{"class":52854},[100,93460,16501],{"class":106},[100,93462,472],{"class":258},[100,93464,52945],{"class":110},[100,93466,52925],{"class":106},[100,93468,472],{"class":258},[100,93470,52952],{"class":110},[100,93472,60681],{"class":258},[100,93474,93475,93477,93479,93481,93483,93486,93488,93490,93493],{"class":102,"line":601},[100,93476,53698],{"class":258},[100,93478,52898],{"class":52854},[100,93480,16501],{"class":106},[100,93482,472],{"class":258},[100,93484,93485],{"class":110},"\"referrer\"",[100,93487,52925],{"class":106},[100,93489,472],{"class":258},[100,93491,93492],{"class":110},"\"never\"",[100,93494,60681],{"class":258},[100,93496,93497,93499,93501,93504,93506],{"class":102,"line":606},[100,93498,53698],{"class":258},[100,93500,52961],{"class":52854},[100,93502,93503],{"class":258},">综合案例\u003C\u002F",[100,93505,52961],{"class":52854},[100,93507,52861],{"class":258},[100,93509,93510,93512,93514],{"class":102,"line":612},[100,93511,53698],{"class":258},[100,93513,1677],{"class":52854},[100,93515,52861],{"class":258},[100,93517,93518,93520],{"class":102,"line":618},[100,93519,7999],{"class":52854},[100,93521,17153],{"class":258},[100,93523,93524,93526,93528,93530],{"class":102,"line":623},[100,93525,56249],{"class":117},[100,93527,52991],{"class":258},[100,93529,1366],{"class":117},[100,93531,2927],{"class":258},[100,93533,93534,93536,93538,93540],{"class":102,"line":629},[100,93535,56260],{"class":117},[100,93537,52991],{"class":258},[100,93539,1366],{"class":117},[100,93541,2927],{"class":258},[100,93543,93544,93546,93548,93550],{"class":102,"line":635},[100,93545,74150],{"class":117},[100,93547,52991],{"class":258},[100,93549,62059],{"class":117},[100,93551,2927],{"class":258},[100,93553,93554],{"class":102,"line":641},[100,93555,3798],{"class":258},[100,93557,93558],{"class":102,"line":647},[100,93559,570],{"emptyLinePlaceholder":569},[100,93561,93562,93565],{"class":102,"line":653},[100,93563,93564],{"class":106},"    .container",[100,93566,17153],{"class":258},[100,93568,93569,93571,93573,93576,93578],{"class":102,"line":659},[100,93570,56325],{"class":117},[100,93572,52991],{"class":258},[100,93574,93575],{"class":117},"1200",[100,93577,53046],{"class":471},[100,93579,2927],{"class":258},[100,93581,93582,93584,93586,93588,93590],{"class":102,"line":665},[100,93583,56260],{"class":117},[100,93585,52991],{"class":258},[100,93587,1366],{"class":117},[100,93589,53110],{"class":117},[100,93591,2927],{"class":258},[100,93593,93594],{"class":102,"line":670},[100,93595,3798],{"class":258},[100,93597,93598],{"class":102,"line":675},[100,93599,570],{"emptyLinePlaceholder":569},[100,93601,93602,93605,93608],{"class":102,"line":699},[100,93603,93604],{"class":106},"    .video",[100,93606,93607],{"class":52854}," video",[100,93609,17153],{"class":258},[100,93611,93612,93614,93616,93618,93620],{"class":102,"line":708},[100,93613,56325],{"class":117},[100,93615,52991],{"class":258},[100,93617,2078],{"class":117},[100,93619,2095],{"class":471},[100,93621,2927],{"class":258},[100,93623,93624,93626,93628,93630,93632,93634],{"class":102,"line":722},[100,93625,56249],{"class":117},[100,93627,52991],{"class":258},[100,93629,2466],{"class":117},[100,93631,53046],{"class":471},[100,93633,5692],{"class":117},[100,93635,2927],{"class":258},[100,93637,93638],{"class":102,"line":735},[100,93639,3798],{"class":258},[100,93641,93642],{"class":102,"line":754},[100,93643,570],{"emptyLinePlaceholder":569},[100,93645,93646,93649],{"class":102,"line":771},[100,93647,93648],{"class":106},"    .elevator",[100,93650,17153],{"class":258},[100,93652,93653,93655,93657,93659],{"class":102,"line":776},[100,93654,56313],{"class":117},[100,93656,52991],{"class":258},[100,93658,87785],{"class":117},[100,93660,2927],{"class":258},[100,93662,93663,93665,93667,93670,93672],{"class":102,"line":781},[100,93664,56501],{"class":117},[100,93666,52991],{"class":258},[100,93668,93669],{"class":117},"280",[100,93671,53046],{"class":471},[100,93673,2927],{"class":258},[100,93675,93676,93678,93680,93682,93684],{"class":102,"line":796},[100,93677,87979],{"class":117},[100,93679,52991],{"class":258},[100,93681,2466],{"class":117},[100,93683,53046],{"class":471},[100,93685,2927],{"class":258},[100,93687,93688,93690,93692,93694],{"class":102,"line":812},[100,93689,87792],{"class":117},[100,93691,52991],{"class":258},[100,93693,87797],{"class":117},[100,93695,2927],{"class":258},[100,93697,93698,93700,93702,93704],{"class":102,"line":823},[100,93699,63275],{"class":117},[100,93701,52991],{"class":258},[100,93703,62396],{"class":117},[100,93705,2927],{"class":258},[100,93707,93708,93710,93712,93714,93716,93718,93720],{"class":102,"line":828},[100,93709,63531],{"class":117},[100,93711,52991],{"class":258},[100,93713,1985],{"class":117},[100,93715,53046],{"class":471},[100,93717,53075],{"class":117},[100,93719,63798],{"class":117},[100,93721,2927],{"class":258},[100,93723,93724,93726,93728,93730,93732],{"class":102,"line":840},[100,93725,56325],{"class":117},[100,93727,52991],{"class":258},[100,93729,2673],{"class":117},[100,93731,53046],{"class":471},[100,93733,2927],{"class":258},[100,93735,93736],{"class":102,"line":845},[100,93737,3798],{"class":258},[100,93739,93740],{"class":102,"line":868},[100,93741,570],{"emptyLinePlaceholder":569},[100,93743,93744,93746,93748],{"class":102,"line":874},[100,93745,93648],{"class":106},[100,93747,3031],{"class":52854},[100,93749,17153],{"class":258},[100,93751,93752,93754,93756,93758],{"class":102,"line":879},[100,93753,56563],{"class":117},[100,93755,52991],{"class":258},[100,93757,62423],{"class":117},[100,93759,2927],{"class":258},[100,93761,93762,93764,93766,93768,93770],{"class":102,"line":889},[100,93763,56249],{"class":117},[100,93765,52991],{"class":258},[100,93767,2213],{"class":117},[100,93769,53046],{"class":471},[100,93771,2927],{"class":258},[100,93773,93774,93776,93778,93780],{"class":102,"line":894},[100,93775,65524],{"class":117},[100,93777,52991],{"class":258},[100,93779,56291],{"class":117},[100,93781,2927],{"class":258},[100,93783,93784,93786,93788,93790],{"class":102,"line":900},[100,93785,58840],{"class":117},[100,93787,52991],{"class":258},[100,93789,53146],{"class":117},[100,93791,2927],{"class":258},[100,93793,93794,93796,93798,93800],{"class":102,"line":910},[100,93795,58970],{"class":117},[100,93797,52991],{"class":258},[100,93799,63624],{"class":117},[100,93801,2927],{"class":258},[100,93803,93804],{"class":102,"line":915},[100,93805,3798],{"class":258},[100,93807,93808],{"class":102,"line":929},[100,93809,570],{"emptyLinePlaceholder":569},[100,93811,93812,93814,93816,93818],{"class":102,"line":935},[100,93813,93648],{"class":106},[100,93815,3031],{"class":52854},[100,93817,65578],{"class":106},[100,93819,17153],{"class":258},[100,93821,93822,93824,93826,93829],{"class":102,"line":945},[100,93823,58970],{"class":117},[100,93825,52991],{"class":258},[100,93827,93828],{"class":117},"#1286ff",[100,93830,2927],{"class":258},[100,93832,93833],{"class":102,"line":950},[100,93834,3798],{"class":258},[100,93836,93837,93839,93841],{"class":102,"line":955},[100,93838,53971],{"class":258},[100,93840,1677],{"class":52854},[100,93842,52861],{"class":258},[100,93844,93845,93847,93849],{"class":102,"line":972},[100,93846,53339],{"class":258},[100,93848,52888],{"class":52854},[100,93850,52861],{"class":258},[100,93852,93853],{"class":102,"line":11370},[100,93854,570],{"emptyLinePlaceholder":569},[100,93856,93857,93859,93861],{"class":102,"line":11375},[100,93858,2676],{"class":258},[100,93860,53354],{"class":52854},[100,93862,52861],{"class":258},[100,93864,93865,93867,93869,93871,93873,93876],{"class":102,"line":11380},[100,93866,53698],{"class":258},[100,93868,53165],{"class":52854},[100,93870,55040],{"class":106},[100,93872,472],{"class":258},[100,93874,93875],{"class":110},"\"container\"",[100,93877,52861],{"class":258},[100,93879,93880,93882,93884,93886,93888,93891],{"class":102,"line":11385},[100,93881,52895],{"class":258},[100,93883,53165],{"class":52854},[100,93885,55040],{"class":106},[100,93887,472],{"class":258},[100,93889,93890],{"class":110},"\"header\"",[100,93892,52861],{"class":258},[100,93894,93895,93897,93899,93901,93903,93906],{"class":102,"line":11394},[100,93896,56788],{"class":258},[100,93898,2006],{"class":52854},[100,93900,62611],{"class":106},[100,93902,472],{"class":258},[100,93904,93905],{"class":110},"\"http:\u002F\u002Fpip.itcast.cn\"",[100,93907,52861],{"class":258},[100,93909,93910,93912,93914,93916,93918,93921,93923,93925,93927],{"class":102,"line":11399},[100,93911,56856],{"class":258},[100,93913,3095],{"class":52854},[100,93915,56793],{"class":106},[100,93917,472],{"class":258},[100,93919,93920],{"class":110},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[100,93922,56801],{"class":106},[100,93924,472],{"class":258},[100,93926,9248],{"class":110},[100,93928,60681],{"class":258},[100,93930,93931,93933,93935],{"class":102,"line":11405},[100,93932,56961],{"class":258},[100,93934,2006],{"class":52854},[100,93936,52861],{"class":258},[100,93938,93939,93941,93943],{"class":102,"line":11426},[100,93940,53330],{"class":258},[100,93942,53165],{"class":52854},[100,93944,52861],{"class":258},[100,93946,93947,93949,93951,93953,93955,93958],{"class":102,"line":11432},[100,93948,52895],{"class":258},[100,93950,53165],{"class":52854},[100,93952,55040],{"class":106},[100,93954,472],{"class":258},[100,93956,93957],{"class":110},"\"video\"",[100,93959,52861],{"class":258},[100,93961,93962,93964,93966,93968,93970,93973,93976,93978,93980],{"class":102,"line":11446},[100,93963,56788],{"class":258},[100,93965,29755],{"class":52854},[100,93967,56793],{"class":106},[100,93969,472],{"class":258},[100,93971,93972],{"class":110},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[100,93974,93975],{"class":106}," controls",[100,93977,56868],{"class":258},[100,93979,29755],{"class":52854},[100,93981,52861],{"class":258},[100,93983,93984,93986,93988],{"class":102,"line":11452},[100,93985,53330],{"class":258},[100,93987,53165],{"class":52854},[100,93989,52861],{"class":258},[100,93991,93992,93994,93996,93998,94000,94003],{"class":102,"line":11479},[100,93993,52895],{"class":258},[100,93995,53165],{"class":52854},[100,93997,55040],{"class":106},[100,93999,472],{"class":258},[100,94001,94002],{"class":110},"\"elevator\"",[100,94004,52861],{"class":258},[100,94006,94007,94009,94011,94013,94015,94017,94020,94022,94024,94027,94029],{"class":102,"line":11488},[100,94008,56788],{"class":258},[100,94010,2006],{"class":52854},[100,94012,62611],{"class":106},[100,94014,472],{"class":258},[100,94016,65790],{"class":110},[100,94018,94019],{"class":106}," data-ref",[100,94021,472],{"class":258},[100,94023,93957],{"class":110},[100,94025,94026],{"class":258},">视频介绍\u003C\u002F",[100,94028,2006],{"class":52854},[100,94030,52861],{"class":258},[100,94032,94033,94035,94037,94039,94041,94043,94045,94047,94050,94053,94055],{"class":102,"line":11494},[100,94034,56788],{"class":258},[100,94036,2006],{"class":52854},[100,94038,62611],{"class":106},[100,94040,472],{"class":258},[100,94042,65790],{"class":110},[100,94044,94019],{"class":106},[100,94046,472],{"class":258},[100,94048,94049],{"class":110},"\"intro\"",[100,94051,94052],{"class":258},">课程简介\u003C\u002F",[100,94054,2006],{"class":52854},[100,94056,52861],{"class":258},[100,94058,94059,94061,94063,94065,94067,94069,94071,94073,94076,94079,94081],{"class":102,"line":11502},[100,94060,56788],{"class":258},[100,94062,2006],{"class":52854},[100,94064,62611],{"class":106},[100,94066,472],{"class":258},[100,94068,65790],{"class":110},[100,94070,94019],{"class":106},[100,94072,472],{"class":258},[100,94074,94075],{"class":110},"\"outline\"",[100,94077,94078],{"class":258},">评论列表\u003C\u002F",[100,94080,2006],{"class":52854},[100,94082,52861],{"class":258},[100,94084,94085,94087,94089],{"class":102,"line":11507},[100,94086,53330],{"class":258},[100,94088,53165],{"class":52854},[100,94090,52861],{"class":258},[100,94092,94093,94095,94097],{"class":102,"line":18185},[100,94094,53971],{"class":258},[100,94096,53165],{"class":52854},[100,94098,52861],{"class":258},[100,94100,94101,94103,94105,94107,94109,94112,94114,94116],{"class":102,"line":18191},[100,94102,53698],{"class":258},[100,94104,53367],{"class":52854},[100,94106,56793],{"class":106},[100,94108,472],{"class":258},[100,94110,94111],{"class":110},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[100,94113,56868],{"class":258},[100,94115,53367],{"class":52854},[100,94117,52861],{"class":258},[100,94119,94120,94122,94124],{"class":102,"line":18214},[100,94121,53698],{"class":258},[100,94123,53367],{"class":52854},[100,94125,52861],{"class":258},[100,94127,94128],{"class":102,"line":18220},[100,94129,94130],{"class":1836},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[100,94132,94133,94135,94137,94139,94141,94143,94145,94148],{"class":102,"line":18243},[100,94134,12803],{"class":471},[100,94136,93607],{"class":117},[100,94138,583],{"class":471},[100,94140,55950],{"class":258},[100,94142,55953],{"class":106},[100,94144,713],{"class":258},[100,94146,94147],{"class":110},"'video'",[100,94149,809],{"class":258},[100,94151,94152],{"class":102,"line":18257},[100,94153,94154],{"class":1836},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[100,94156,94157,94160,94162,94164,94166,94169,94171],{"class":102,"line":18277},[100,94158,94159],{"class":258},"    video.ontimeupdate ",[100,94161,472],{"class":471},[100,94163,89907],{"class":258},[100,94165,92725],{"class":106},[100,94167,94168],{"class":258},"(() ",[100,94170,86274],{"class":471},[100,94172,17153],{"class":258},[100,94174,94175],{"class":102,"line":18283},[100,94176,94177],{"class":1836},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[100,94179,94180],{"class":102,"line":18294},[100,94181,94182],{"class":1836},"      \u002F\u002F 控制台输出当前的时间\n",[100,94184,94185,94188],{"class":102,"line":18317},[100,94186,94187],{"class":1836},"      \u002F\u002F console.log(video.currentTime)",[100,94189,94190],{"class":1836},"  \u002F\u002F获得当前的视频时间\n",[100,94192,94193],{"class":102,"line":18339},[100,94194,94195],{"class":1836},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[100,94197,94198,94200,94202,94204,94207],{"class":102,"line":18344},[100,94199,76237],{"class":258},[100,94201,73208],{"class":106},[100,94203,713],{"class":258},[100,94205,94206],{"class":110},"'currentTime'",[100,94208,94209],{"class":258},", video.currentTime)\n",[100,94211,94212,94214,94216],{"class":102,"line":18350},[100,94213,56089],{"class":258},[100,94215,8006],{"class":117},[100,94217,809],{"class":258},[100,94219,94220],{"class":102,"line":18364},[100,94221,94222],{"class":1836},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[100,94224,94225,94228,94231,94233,94236,94238],{"class":102,"line":18377},[100,94226,94227],{"class":258},"    video.",[100,94229,94230],{"class":106},"onloadeddata",[100,94232,583],{"class":471},[100,94234,94235],{"class":258}," () ",[100,94237,86274],{"class":471},[100,94239,17153],{"class":258},[100,94241,94242],{"class":102,"line":18382},[100,94243,61566],{"class":1836},[100,94245,94246],{"class":102,"line":18396},[100,94247,94248],{"class":1836},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[100,94250,94251,94254,94256,94259,94261,94263,94265,94267,94269],{"class":102,"line":18401},[100,94252,94253],{"class":258},"      video.currentTime ",[100,94255,472],{"class":471},[100,94257,94258],{"class":258}," localStorage.",[100,94260,73239],{"class":106},[100,94262,713],{"class":258},[100,94264,94206],{"class":110},[100,94266,15295],{"class":258},[100,94268,72911],{"class":471},[100,94270,48887],{"class":117},[100,94272,94273],{"class":102,"line":18407},[100,94274,3798],{"class":258},[100,94276,94277,94279,94281],{"class":102,"line":18412},[100,94278,53971],{"class":258},[100,94280,53367],{"class":52854},[100,94282,52861],{"class":258},[100,94284,94285,94287,94289],{"class":102,"line":18426},[100,94286,53339],{"class":258},[100,94288,53354],{"class":52854},[100,94290,52861],{"class":258},[100,94292,94293],{"class":102,"line":18431},[100,94294,570],{"emptyLinePlaceholder":569},[100,94296,94297,94299,94301],{"class":102,"line":18436},[100,94298,53339],{"class":258},[100,94300,52189],{"class":52854},[100,94302,52861],{"class":258},[1677,94304,94305],{},"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":79,"searchDepth":188,"depth":188,"links":94307},[94308,94313,94317,94318,94319,94324,94329,94330,94331,94332,94339,94344,94345,94355,94359,94360,94364],{"id":78245,"depth":188,"text":78246,"children":94309},[94310,94311,94312],{"id":78249,"depth":199,"text":78250},{"id":78274,"depth":199,"text":78275},{"id":78286,"depth":199,"text":78287},{"id":78298,"depth":188,"text":78299,"children":94314},[94315,94316],{"id":78302,"depth":199,"text":78303},{"id":78317,"depth":199,"text":78318},{"id":78369,"depth":188,"text":78370},{"id":78413,"depth":188,"text":78414},{"id":78430,"depth":188,"text":78431,"children":94320},[94321,94322,94323],{"id":78434,"depth":199,"text":78435},{"id":78447,"depth":199,"text":78448},{"id":78552,"depth":199,"text":78553},{"id":78841,"depth":188,"text":78842,"children":94325},[94326,94327,94328],{"id":78845,"depth":199,"text":78846},{"id":79288,"depth":199,"text":79289},{"id":79699,"depth":199,"text":79700},{"id":79762,"depth":188,"text":79763},{"id":79841,"depth":188,"text":79842},{"id":79934,"depth":188,"text":79935},{"id":81779,"depth":188,"text":81780,"children":94333},[94334,94335,94336,94337,94338],{"id":81783,"depth":199,"text":81784},{"id":81795,"depth":199,"text":81796},{"id":82014,"depth":199,"text":82015},{"id":82032,"depth":199,"text":82033},{"id":82092,"depth":199,"text":82093},{"id":86358,"depth":188,"text":86359,"children":94340},[94341,94342,94343],{"id":86362,"depth":199,"text":86363},{"id":86380,"depth":199,"text":86381},{"id":86406,"depth":199,"text":86407},{"id":86415,"depth":188,"text":86416},{"id":86437,"depth":188,"text":86438,"children":94346},[94347,94348,94349,94350,94351,94352,94353,94354],{"id":86441,"depth":199,"text":86442},{"id":86702,"depth":199,"text":86703},{"id":86888,"depth":199,"text":86889},{"id":87255,"depth":199,"text":87256},{"id":87371,"depth":199,"text":87372},{"id":87407,"depth":199,"text":87408},{"id":87454,"depth":199,"text":87455},{"id":87488,"depth":199,"text":87489},{"id":88851,"depth":188,"text":88852,"children":94356},[94357,94358],{"id":88855,"depth":199,"text":88856},{"id":88892,"depth":199,"text":88893},{"id":90247,"depth":188,"text":90248},{"id":90618,"depth":188,"text":90619,"children":94361},[94362,94363],{"id":90622,"depth":199,"text":90623},{"id":90656,"depth":199,"text":90657},{"id":91385,"depth":188,"text":91386,"children":94365},[94366,94367,94368,94369],{"id":91389,"depth":199,"text":91390},{"id":92347,"depth":199,"text":92348},{"id":93289,"depth":199,"text":93290},{"id":93363,"depth":199,"text":93364},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":78234,"description":24958},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":94376,"title":94377,"body":94378,"description":94389,"extension":1708,"meta":94390,"navigation":569,"path":94392,"seo":94393,"stem":94394,"__hash__":94395},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":94379,"toc":94387},[94380],[19,94381,94382,94383],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[2006,94384,94385],{"href":94385,"rel":94386},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[25442],{"title":79,"searchDepth":188,"depth":188,"links":94388},[],"三件套第三套学习",{"category":94391},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":94377,"description":94389},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":94397,"title":94398,"body":94399,"description":24958,"extension":1708,"meta":94504,"navigation":569,"path":94505,"seo":94506,"stem":94507,"__hash__":94508},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":94400,"toc":94499},[94401,94408,94411,94414,94417,94421,94430,94433,94436,94440,94449,94452,94456,94459,94479,94482,94496],[19,94402,94403],{},[2006,94404,94407],{"href":94405,"rel":94406},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[25442],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,94409,94398],{"id":94410},"_1安装",[19,94412,94413],{},"numpy是科学计算基础库,底层是C语言",[19,94415,94416],{},"三种方式：",[14,94418,94420],{"id":94419},"_11-通过pip安装","1.1 通过pip安装",[73,94422,94424],{"className":249,"code":94423,"language":251,"meta":79,"style":79},"pip install numpy\n",[32,94425,94426],{"__ignoreMap":79},[100,94427,94428],{"class":102,"line":103},[100,94429,94423],{"class":258},[19,94431,94432],{},"首选方式，自动处理依赖项",[19,94434,94435],{},"在提示系统命令符中使用cmd",[14,94437,94439],{"id":94438},"_12-通过anaconda安装","1.2 通过Anaconda安装",[73,94441,94443],{"className":249,"code":94442,"language":251,"meta":79,"style":79},"conda install numpy\n",[32,94444,94445],{"__ignoreMap":79},[100,94446,94447],{"class":102,"line":103},[100,94448,94442],{"class":258},[19,94450,94451],{},"自动解决环境依赖",[14,94453,94455],{"id":94454},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,94457,94458],{},"对于Debian\u002FUbuntu",[73,94460,94462],{"className":249,"code":94461,"language":251,"meta":79,"style":79},"sudo apt-get install python3-numpy\n",[32,94463,94464],{"__ignoreMap":79},[100,94465,94466,94469,94471,94474,94476],{"class":102,"line":103},[100,94467,94468],{"class":258},"sudo apt",[100,94470,2299],{"class":471},[100,94472,94473],{"class":258},"get install python3",[100,94475,2299],{"class":471},[100,94477,94478],{"class":258},"numpy\n",[19,94480,94481],{},"对于Fedora:",[73,94483,94485],{"className":249,"code":94484,"language":251,"meta":79,"style":79},"sudo dnf install python3-numpy\n",[32,94486,94487],{"__ignoreMap":79},[100,94488,94489,94492,94494],{"class":102,"line":103},[100,94490,94491],{"class":258},"sudo dnf install python3",[100,94493,2299],{"class":471},[100,94495,94478],{"class":258},[1677,94497,94498],{},"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":79,"searchDepth":188,"depth":188,"links":94500},[94501,94502,94503],{"id":94419,"depth":188,"text":94420},{"id":94438,"depth":188,"text":94439},{"id":94454,"depth":188,"text":94455},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":94398,"description":24958},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":94510,"title":94511,"body":94512,"description":24958,"extension":1708,"meta":94625,"navigation":569,"path":94626,"seo":94627,"stem":94628,"__hash__":94629},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":94513,"toc":94623},[94514,94517,94520,94523,94526,94529,94532,94535,94538,94541,94617,94620],[10,94515,94511],{"id":94516},"_10算数函数",[19,94518,94519],{},"加减乘除运算跟python基础语法没区别",[19,94521,94522],{},"除了python那种方法外还可以使用函数",[19,94524,94525],{},"加：np.add(a,b)",[19,94527,94528],{},"减：np.subtract(a,b)",[19,94530,94531],{},"乘：np.multiply(a,b)",[19,94533,94534],{},"除：np.divide(a,b) == a\u002Fb",[19,94536,94537],{},"取余：np.mod(a,b) == a%b",[19,94539,94540],{},"必须会的用法：",[73,94542,94544],{"className":249,"code":94543,"language":251,"meta":79,"style":79},"a=np.arange(9).reshape(3,3)\nb=np.array([10,10,10])\nresult=np.empty_like(a)\nnp.add(a,b,out=result)\nresult\n",[32,94545,94546,94568,94589,94599,94612],{"__ignoreMap":79},[100,94547,94548,94550,94552,94555,94557,94560,94562,94564,94566],{"class":102,"line":103},[100,94549,2006],{"class":258},[100,94551,472],{"class":471},[100,94553,94554],{"class":258},"np.arange(",[100,94556,2187],{"class":117},[100,94558,94559],{"class":258},").reshape(",[100,94561,1849],{"class":117},[100,94563,2145],{"class":258},[100,94565,1849],{"class":117},[100,94567,809],{"class":258},[100,94569,94570,94572,94574,94577,94579,94581,94583,94585,94587],{"class":102,"line":188},[100,94571,2031],{"class":258},[100,94573,472],{"class":471},[100,94575,94576],{"class":258},"np.array([",[100,94578,2213],{"class":117},[100,94580,2145],{"class":258},[100,94582,2213],{"class":117},[100,94584,2145],{"class":258},[100,94586,2213],{"class":117},[100,94588,6255],{"class":258},[100,94590,94591,94594,94596],{"class":102,"line":199},[100,94592,94593],{"class":258},"result",[100,94595,472],{"class":471},[100,94597,94598],{"class":258},"np.empty_like(a)\n",[100,94600,94601,94604,94607,94609],{"class":102,"line":532},[100,94602,94603],{"class":258},"np.add(a,b,",[100,94605,94606],{"class":6812},"out",[100,94608,472],{"class":471},[100,94610,94611],{"class":258},"result)\n",[100,94613,94614],{"class":102,"line":577},[100,94615,94616],{"class":258},"result\n",[19,94618,94619],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[1677,94621,94622],{},"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":79,"searchDepth":188,"depth":188,"links":94624},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":94511,"description":24958},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":94631,"title":94632,"body":94633,"description":24958,"extension":1708,"meta":95395,"navigation":569,"path":95396,"seo":95397,"stem":95398,"__hash__":95399},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":94634,"toc":95382},[94635,94638,94641,94644,94648,94687,94691,94735,94795,94799,94802,94841,94844,94889,94893,94929,94933,95002,95006,95070,95074,95077,95080,95083,95086,95122,95126,95166,95170,95242,95245,95249,95312,95316,95379],[10,94636,94632],{"id":94637},"_11统计函数",[19,94639,94640],{},"sum max min mean",[19,94642,94643],{},"这些有axis参数，可以指定方向",[14,94645,94647],{"id":94646},"_111-sum求和函数","11.1 sum()求和函数",[73,94649,94651],{"className":249,"code":94650,"language":251,"meta":79,"style":79},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[32,94652,94653,94658,94679],{"__ignoreMap":79},[100,94654,94655],{"class":102,"line":103},[100,94656,94657],{"class":1836},"#创建一维数组\n",[100,94659,94660,94662,94664,94667,94669,94671,94673,94675,94677],{"class":102,"line":188},[100,94661,2006],{"class":258},[100,94663,472],{"class":471},[100,94665,94666],{"class":258},"np.random.randint(",[100,94668,1985],{"class":117},[100,94670,2145],{"class":258},[100,94672,2078],{"class":117},[100,94674,2145],{"class":258},[100,94676,2466],{"class":117},[100,94678,809],{"class":258},[100,94680,94681,94684],{"class":102,"line":199},[100,94682,94683],{"class":258},"np.sum(a)",[100,94685,94686],{"class":1836},"#求和\n",[14,94688,94690],{"id":94689},"_112-max求最大值函数","11.2 max()求最大值函数",[73,94692,94694],{"className":249,"code":94693,"language":251,"meta":79,"style":79},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[32,94695,94696,94700,94720,94725,94730],{"__ignoreMap":79},[100,94697,94698],{"class":102,"line":103},[100,94699,94657],{"class":1836},[100,94701,94702,94704,94706,94708,94710,94712,94714,94716,94718],{"class":102,"line":188},[100,94703,2006],{"class":258},[100,94705,472],{"class":471},[100,94707,94666],{"class":258},[100,94709,1985],{"class":117},[100,94711,2145],{"class":258},[100,94713,2078],{"class":117},[100,94715,2145],{"class":258},[100,94717,2466],{"class":117},[100,94719,809],{"class":258},[100,94721,94722],{"class":102,"line":199},[100,94723,94724],{"class":258},"np.max(a)\n",[100,94726,94727],{"class":102,"line":532},[100,94728,94729],{"class":1836},"#最大索引(求最大元素的索引)arg\n",[100,94731,94732],{"class":102,"line":577},[100,94733,94734],{"class":258},"np.argmax(a)\n",[73,94736,94738],{"className":249,"code":94737,"language":251,"meta":79,"style":79},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[32,94739,94740,94761,94781,94785],{"__ignoreMap":79},[100,94741,94742,94744,94746,94749,94751,94753,94755,94757,94759],{"class":102,"line":103},[100,94743,12501],{"class":258},[100,94745,472],{"class":471},[100,94747,94748],{"class":258}," np.array([",[100,94750,1985],{"class":117},[100,94752,14017],{"class":258},[100,94754,2086],{"class":117},[100,94756,14017],{"class":258},[100,94758,1849],{"class":117},[100,94760,6255],{"class":258},[100,94762,94763,94765,94767,94769,94771,94773,94775,94777,94779],{"class":102,"line":188},[100,94764,12527],{"class":258},[100,94766,472],{"class":471},[100,94768,94748],{"class":258},[100,94770,1849],{"class":117},[100,94772,14017],{"class":258},[100,94774,465],{"class":117},[100,94776,14017],{"class":258},[100,94778,748],{"class":117},[100,94780,6255],{"class":258},[100,94782,94783],{"class":102,"line":199},[100,94784,570],{"emptyLinePlaceholder":569},[100,94786,94787,94789,94792],{"class":102,"line":532},[100,94788,1195],{"class":117},[100,94790,94791],{"class":258},"(np.maximum(a, b))   ",[100,94793,94794],{"class":1836},"# [3 5 4]，每个位置上取较大值\n",[14,94796,94798],{"id":94797},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,94800,94801],{},"①一维数组：",[73,94803,94805],{"className":249,"code":94804,"language":251,"meta":79,"style":79},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[32,94806,94807,94811,94831,94836],{"__ignoreMap":79},[100,94808,94809],{"class":102,"line":103},[100,94810,94657],{"class":1836},[100,94812,94813,94815,94817,94819,94821,94823,94825,94827,94829],{"class":102,"line":188},[100,94814,2006],{"class":258},[100,94816,472],{"class":471},[100,94818,94666],{"class":258},[100,94820,1985],{"class":117},[100,94822,2145],{"class":258},[100,94824,2078],{"class":117},[100,94826,2145],{"class":258},[100,94828,2466],{"class":117},[100,94830,809],{"class":258},[100,94832,94833],{"class":102,"line":199},[100,94834,94835],{"class":1836},"#求平均值\n",[100,94837,94838],{"class":102,"line":532},[100,94839,94840],{"class":258},"np.mean(a)\n",[19,94842,94843],{},"②二维数组",[73,94845,94847],{"className":249,"code":94846,"language":251,"meta":79,"style":79},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[32,94848,94849,94854,94879,94884],{"__ignoreMap":79},[100,94850,94851],{"class":102,"line":103},[100,94852,94853],{"class":1836},"#二维数组\n",[100,94855,94856,94859,94861,94863,94865,94867,94869,94871,94873,94875,94877],{"class":102,"line":188},[100,94857,94858],{"class":258},"aa",[100,94860,472],{"class":471},[100,94862,94554],{"class":258},[100,94864,1985],{"class":117},[100,94866,2145],{"class":258},[100,94868,2290],{"class":117},[100,94870,94559],{"class":258},[100,94872,1849],{"class":117},[100,94874,2145],{"class":258},[100,94876,748],{"class":117},[100,94878,809],{"class":258},[100,94880,94881],{"class":102,"line":199},[100,94882,94883],{"class":1836},"#对数组中的所有数求平均\n",[100,94885,94886],{"class":102,"line":532},[100,94887,94888],{"class":258},"np.mean(aa)\n",[14,94890,94892],{"id":94891},"_114-median求中位数函数","11.4 median()求中位数函数",[73,94894,94896],{"className":249,"code":94895,"language":251,"meta":79,"style":79},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[32,94897,94898,94903,94919,94924],{"__ignoreMap":79},[100,94899,94900],{"class":102,"line":103},[100,94901,94902],{"class":1836},"#求中位数\n",[100,94904,94905,94907,94909,94911,94913,94915,94917],{"class":102,"line":188},[100,94906,2031],{"class":258},[100,94908,472],{"class":471},[100,94910,94554],{"class":258},[100,94912,1985],{"class":117},[100,94914,2145],{"class":258},[100,94916,2213],{"class":117},[100,94918,809],{"class":258},[100,94920,94921],{"class":102,"line":199},[100,94922,94923],{"class":258},"np.median(b)\n",[100,94925,94926],{"class":102,"line":532},[100,94927,94928],{"class":1836},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,94930,94932],{"id":94931},"_115-power求幂运算函数","11.5 power()求幂运算函数",[73,94934,94936],{"className":249,"code":94935,"language":251,"meta":79,"style":79},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[32,94937,94938,94954,94959,94964,94973,94978,94987],{"__ignoreMap":79},[100,94939,94940,94942,94944,94946,94948,94950,94952],{"class":102,"line":103},[100,94941,2031],{"class":258},[100,94943,472],{"class":471},[100,94945,94554],{"class":258},[100,94947,1985],{"class":117},[100,94949,2145],{"class":258},[100,94951,2213],{"class":117},[100,94953,809],{"class":258},[100,94955,94956],{"class":102,"line":188},[100,94957,94958],{"class":1836},"#幂运算\n",[100,94960,94961],{"class":102,"line":199},[100,94962,94963],{"class":1836},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[100,94965,94966,94969,94971],{"class":102,"line":532},[100,94967,94968],{"class":258},"np.power(b,",[100,94970,465],{"class":117},[100,94972,809],{"class":258},[100,94974,94975],{"class":102,"line":577},[100,94976,94977],{"class":1836},"#或者以下代码，将数据存储起来\n",[100,94979,94980,94982,94984],{"class":102,"line":589},[100,94981,2611],{"class":258},[100,94983,472],{"class":471},[100,94985,94986],{"class":258},"np.empty_like(b)\n",[100,94988,94989,94991,94993,94995,94997,94999],{"class":102,"line":595},[100,94990,94968],{"class":258},[100,94992,465],{"class":117},[100,94994,2145],{"class":258},[100,94996,94606],{"class":6812},[100,94998,472],{"class":471},[100,95000,95001],{"class":258},"y)\n",[14,95003,95005],{"id":95004},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[73,95007,95009],{"className":249,"code":95008,"language":251,"meta":79,"style":79},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[32,95010,95011,95027,95032,95037,95041,95059],{"__ignoreMap":79},[100,95012,95013,95015,95017,95019,95021,95023,95025],{"class":102,"line":103},[100,95014,2031],{"class":258},[100,95016,472],{"class":471},[100,95018,94554],{"class":258},[100,95020,1985],{"class":117},[100,95022,2145],{"class":258},[100,95024,2213],{"class":117},[100,95026,809],{"class":258},[100,95028,95029],{"class":102,"line":188},[100,95030,95031],{"class":1836},"#开方\n",[100,95033,95034],{"class":102,"line":199},[100,95035,95036],{"class":258},"np.sqrt(b)\n",[100,95038,95039],{"class":102,"line":532},[100,95040,94977],{"class":1836},[100,95042,95043,95045,95047,95050,95053,95055,95057],{"class":102,"line":577},[100,95044,2611],{"class":258},[100,95046,472],{"class":471},[100,95048,95049],{"class":258},"np.empty_like(b,",[100,95051,95052],{"class":6812},"dtype",[100,95054,472],{"class":471},[100,95056,1819],{"class":117},[100,95058,809],{"class":258},[100,95060,95061,95064,95066,95068],{"class":102,"line":589},[100,95062,95063],{"class":258},"np.sqrt(b,",[100,95065,94606],{"class":6812},[100,95067,472],{"class":471},[100,95069,95001],{"class":258},[14,95071,95073],{"id":95072},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,95075,95076],{},"对数组中的元素累计求和，可指定轴",[19,95078,95079],{},"#累计求和的意思是：",[19,95081,95082],{},"a = np.array([1, 2, 3, 4])",[19,95084,95085],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[73,95087,95089],{"className":249,"code":95088,"language":251,"meta":79,"style":79},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[32,95090,95091,95107,95112,95117],{"__ignoreMap":79},[100,95092,95093,95095,95097,95099,95101,95103,95105],{"class":102,"line":103},[100,95094,2031],{"class":258},[100,95096,472],{"class":471},[100,95098,94554],{"class":258},[100,95100,1985],{"class":117},[100,95102,2145],{"class":258},[100,95104,2213],{"class":117},[100,95106,809],{"class":258},[100,95108,95109],{"class":102,"line":188},[100,95110,95111],{"class":258},"np.cumsum(b)\n",[100,95113,95114],{"class":102,"line":199},[100,95115,95116],{"class":1836},"#结果：\n",[100,95118,95119],{"class":102,"line":532},[100,95120,95121],{"class":1836},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,95123,95125],{"id":95124},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[73,95127,95129],{"className":249,"code":95128,"language":251,"meta":79,"style":79},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[32,95130,95131,95147,95152,95157,95161],{"__ignoreMap":79},[100,95132,95133,95135,95137,95139,95141,95143,95145],{"class":102,"line":103},[100,95134,2031],{"class":258},[100,95136,472],{"class":471},[100,95138,94554],{"class":258},[100,95140,1985],{"class":117},[100,95142,2145],{"class":258},[100,95144,2213],{"class":117},[100,95146,809],{"class":258},[100,95148,95149],{"class":102,"line":188},[100,95150,95151],{"class":1836},"#对数组中的元素累计求积，可指定轴\n",[100,95153,95154],{"class":102,"line":199},[100,95155,95156],{"class":258},"np.cumprod(b)\n",[100,95158,95159],{"class":102,"line":532},[100,95160,95116],{"class":1836},[100,95162,95163],{"class":102,"line":577},[100,95164,95165],{"class":1836},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,95167,95169],{"id":95168},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[73,95171,95173],{"className":249,"code":95172,"language":251,"meta":79,"style":79},"#删除数组中的重复数据，并对数据进行排序\na=np.array([1,2,3,12,3,10,32,0,23,4])\nnp.unique(a)\n#结果：\n#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[32,95174,95175,95180,95228,95233,95237],{"__ignoreMap":79},[100,95176,95177],{"class":102,"line":103},[100,95178,95179],{"class":1836},"#删除数组中的重复数据，并对数据进行排序\n",[100,95181,95182,95184,95186,95188,95190,95192,95194,95196,95198,95200,95202,95204,95206,95208,95210,95212,95214,95216,95218,95220,95222,95224,95226],{"class":102,"line":188},[100,95183,2006],{"class":258},[100,95185,472],{"class":471},[100,95187,94576],{"class":258},[100,95189,1985],{"class":117},[100,95191,2145],{"class":258},[100,95193,465],{"class":117},[100,95195,2145],{"class":258},[100,95197,1849],{"class":117},[100,95199,2145],{"class":258},[100,95201,2265],{"class":117},[100,95203,2145],{"class":258},[100,95205,1849],{"class":117},[100,95207,2145],{"class":258},[100,95209,2213],{"class":117},[100,95211,2145],{"class":258},[100,95213,1966],{"class":117},[100,95215,2145],{"class":258},[100,95217,1366],{"class":117},[100,95219,2145],{"class":258},[100,95221,2541],{"class":117},[100,95223,2145],{"class":258},[100,95225,748],{"class":117},[100,95227,6255],{"class":258},[100,95229,95230],{"class":102,"line":199},[100,95231,95232],{"class":258},"np.unique(a)\n",[100,95234,95235],{"class":102,"line":532},[100,95236,95116],{"class":1836},[100,95238,95239],{"class":102,"line":577},[100,95240,95241],{"class":1836},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,95243,95244],{},"升序形式排序",[14,95246,95248],{"id":95247},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[73,95250,95252],{"className":249,"code":95251,"language":251,"meta":79,"style":79},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[32,95253,95254,95302,95307],{"__ignoreMap":79},[100,95255,95256,95258,95260,95262,95264,95266,95268,95270,95272,95274,95276,95278,95280,95282,95284,95286,95288,95290,95292,95294,95296,95298,95300],{"class":102,"line":103},[100,95257,2006],{"class":258},[100,95259,472],{"class":471},[100,95261,94576],{"class":258},[100,95263,1985],{"class":117},[100,95265,2145],{"class":258},[100,95267,465],{"class":117},[100,95269,2145],{"class":258},[100,95271,1849],{"class":117},[100,95273,2145],{"class":258},[100,95275,2265],{"class":117},[100,95277,2145],{"class":258},[100,95279,1849],{"class":117},[100,95281,2145],{"class":258},[100,95283,2213],{"class":117},[100,95285,2145],{"class":258},[100,95287,1966],{"class":117},[100,95289,2145],{"class":258},[100,95291,1366],{"class":117},[100,95293,2145],{"class":258},[100,95295,2541],{"class":117},[100,95297,2145],{"class":258},[100,95299,748],{"class":117},[100,95301,6255],{"class":258},[100,95303,95304],{"class":102,"line":188},[100,95305,95306],{"class":1836},"#返回数组中非零元素的索引\n",[100,95308,95309],{"class":102,"line":199},[100,95310,95311],{"class":258},"np.nonzero(a)\n",[14,95313,95315],{"id":95314},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[73,95317,95319],{"className":249,"code":95318,"language":251,"meta":79,"style":79},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[32,95320,95321,95369,95374],{"__ignoreMap":79},[100,95322,95323,95325,95327,95329,95331,95333,95335,95337,95339,95341,95343,95345,95347,95349,95351,95353,95355,95357,95359,95361,95363,95365,95367],{"class":102,"line":103},[100,95324,2006],{"class":258},[100,95326,472],{"class":471},[100,95328,94576],{"class":258},[100,95330,1985],{"class":117},[100,95332,2145],{"class":258},[100,95334,465],{"class":117},[100,95336,2145],{"class":258},[100,95338,1849],{"class":117},[100,95340,2145],{"class":258},[100,95342,2265],{"class":117},[100,95344,2145],{"class":258},[100,95346,1849],{"class":117},[100,95348,2145],{"class":258},[100,95350,2213],{"class":117},[100,95352,2145],{"class":258},[100,95354,1966],{"class":117},[100,95356,2145],{"class":258},[100,95358,1366],{"class":117},[100,95360,2145],{"class":258},[100,95362,2541],{"class":117},[100,95364,2145],{"class":258},[100,95366,748],{"class":117},[100,95368,6255],{"class":258},[100,95370,95371],{"class":102,"line":188},[100,95372,95373],{"class":1836},"#计算一组数中最大值与最小值的差，可指定轴\n",[100,95375,95376],{"class":102,"line":199},[100,95377,95378],{"class":258},"np.ptp(a)\n",[1677,95380,95381],{},"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":79,"searchDepth":188,"depth":188,"links":95383},[95384,95385,95386,95387,95388,95389,95390,95391,95392,95393,95394],{"id":94646,"depth":188,"text":94647},{"id":94689,"depth":188,"text":94690},{"id":94797,"depth":188,"text":94798},{"id":94891,"depth":188,"text":94892},{"id":94931,"depth":188,"text":94932},{"id":95004,"depth":188,"text":95005},{"id":95072,"depth":188,"text":95073},{"id":95124,"depth":188,"text":95125},{"id":95168,"depth":188,"text":95169},{"id":95247,"depth":188,"text":95248},{"id":95314,"depth":188,"text":95315},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":94632,"description":24958},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":95401,"title":95402,"body":95403,"description":24958,"extension":1708,"meta":96058,"navigation":569,"path":96059,"seo":96060,"stem":96061,"__hash__":96062},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":95404,"toc":96046},[95405,95408,95412,95415,95631,95635,95638,95847,95851,95917,95922,95926,95929,95932,95970,95974,95977,95982,95986,95989,95992,95997,96001,96004,96008,96011,96014,96019,96023,96026,96029,96034,96038,96043],[10,95406,95402],{"id":95407},"_12其他常用函数",[14,95409,95411],{"id":95410},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,95413,95414],{},"将数组的数据按照行列复制扩展",[73,95416,95418],{"className":249,"code":95417,"language":251,"meta":79,"style":79},"a=np.arange(1,5)\nnp.tile(a,2)\n#结果：\n#array([1, 2, 3, 4, 1, 2, 3, 4])\n#行复制两次，列复制三次\nnp.tile(a,(2,3))\n#结果：\n'''\narray([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n'''\n#创建二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.tile(aa,2)#一个数的时候就是行\n#结果：\n'''\narray([[ 1,  2,  3,  1,  2,  3],\n       [ 4,  5,  6,  4,  5,  6],\n       [ 7,  8,  9,  7,  8,  9],\n       [10, 11, 12, 10, 11, 12]])\n'''\nnp.tile(aa,(2,3))\n#结果：\n'''\narray([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n'''\n\n",[32,95419,95420,95436,95445,95449,95454,95459,95472,95476,95481,95486,95491,95495,95500,95524,95536,95540,95544,95549,95554,95559,95564,95568,95581,95585,95589,95594,95599,95604,95609,95614,95618,95622,95627],{"__ignoreMap":79},[100,95421,95422,95424,95426,95428,95430,95432,95434],{"class":102,"line":103},[100,95423,2006],{"class":258},[100,95425,472],{"class":471},[100,95427,94554],{"class":258},[100,95429,1985],{"class":117},[100,95431,2145],{"class":258},[100,95433,2086],{"class":117},[100,95435,809],{"class":258},[100,95437,95438,95441,95443],{"class":102,"line":188},[100,95439,95440],{"class":258},"np.tile(a,",[100,95442,465],{"class":117},[100,95444,809],{"class":258},[100,95446,95447],{"class":102,"line":199},[100,95448,95116],{"class":1836},[100,95450,95451],{"class":102,"line":532},[100,95452,95453],{"class":1836},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[100,95455,95456],{"class":102,"line":577},[100,95457,95458],{"class":1836},"#行复制两次，列复制三次\n",[100,95460,95461,95464,95466,95468,95470],{"class":102,"line":589},[100,95462,95463],{"class":258},"np.tile(a,(",[100,95465,465],{"class":117},[100,95467,2145],{"class":258},[100,95469,1849],{"class":117},[100,95471,751],{"class":258},[100,95473,95474],{"class":102,"line":595},[100,95475,95116],{"class":1836},[100,95477,95478],{"class":102,"line":601},[100,95479,95480],{"class":110},"'''\n",[100,95482,95483],{"class":102,"line":606},[100,95484,95485],{"class":110},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[100,95487,95488],{"class":102,"line":612},[100,95489,95490],{"class":110},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[100,95492,95493],{"class":102,"line":618},[100,95494,95480],{"class":110},[100,95496,95497],{"class":102,"line":623},[100,95498,95499],{"class":1836},"#创建二维数组\n",[100,95501,95502,95504,95506,95508,95510,95512,95514,95516,95518,95520,95522],{"class":102,"line":629},[100,95503,94858],{"class":258},[100,95505,472],{"class":471},[100,95507,94554],{"class":258},[100,95509,1985],{"class":117},[100,95511,2145],{"class":258},[100,95513,2290],{"class":117},[100,95515,94559],{"class":258},[100,95517,748],{"class":117},[100,95519,2145],{"class":258},[100,95521,1849],{"class":117},[100,95523,809],{"class":258},[100,95525,95526,95529,95531,95533],{"class":102,"line":635},[100,95527,95528],{"class":258},"np.tile(aa,",[100,95530,465],{"class":117},[100,95532,2196],{"class":258},[100,95534,95535],{"class":1836},"#一个数的时候就是行\n",[100,95537,95538],{"class":102,"line":641},[100,95539,95116],{"class":1836},[100,95541,95542],{"class":102,"line":647},[100,95543,95480],{"class":110},[100,95545,95546],{"class":102,"line":653},[100,95547,95548],{"class":110},"array([[ 1,  2,  3,  1,  2,  3],\n",[100,95550,95551],{"class":102,"line":659},[100,95552,95553],{"class":110},"       [ 4,  5,  6,  4,  5,  6],\n",[100,95555,95556],{"class":102,"line":665},[100,95557,95558],{"class":110},"       [ 7,  8,  9,  7,  8,  9],\n",[100,95560,95561],{"class":102,"line":670},[100,95562,95563],{"class":110},"       [10, 11, 12, 10, 11, 12]])\n",[100,95565,95566],{"class":102,"line":675},[100,95567,95480],{"class":110},[100,95569,95570,95573,95575,95577,95579],{"class":102,"line":699},[100,95571,95572],{"class":258},"np.tile(aa,(",[100,95574,465],{"class":117},[100,95576,2145],{"class":258},[100,95578,1849],{"class":117},[100,95580,751],{"class":258},[100,95582,95583],{"class":102,"line":708},[100,95584,95116],{"class":1836},[100,95586,95587],{"class":102,"line":722},[100,95588,95480],{"class":110},[100,95590,95591],{"class":102,"line":735},[100,95592,95593],{"class":110},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[100,95595,95596],{"class":102,"line":754},[100,95597,95598],{"class":110},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[100,95600,95601],{"class":102,"line":771},[100,95602,95603],{"class":110},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[100,95605,95606],{"class":102,"line":776},[100,95607,95608],{"class":110},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[100,95610,95611],{"class":102,"line":781},[100,95612,95613],{"class":110},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[100,95615,95616],{"class":102,"line":796},[100,95617,95598],{"class":110},[100,95619,95620],{"class":102,"line":812},[100,95621,95603],{"class":110},[100,95623,95624],{"class":102,"line":823},[100,95625,95626],{"class":110},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[100,95628,95629],{"class":102,"line":828},[100,95630,95480],{"class":110},[14,95632,95634],{"id":95633},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,95636,95637],{},"repeat()将数组中的每个元素重复若干次",[73,95639,95641],{"className":249,"code":95640,"language":251,"meta":79,"style":79},"a=np.arange(1,5)\nnp.repeat(a,3)\n#结果：\n#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\naa=np.arange(1,13).reshape(4,3)\n#这个重复之后二维变成一维\nnp.repeat(aa,2)\n'''\narray([ 1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8,  9, 9, 10, 10, 11, 11, 12, 12])\n'''\n#指定axis\nnp.repeat(aa,2,axis=0)\n#结果：\n'''\narray([[ 1,  2,  3],\n       [ 1,  2,  3],\n       [ 4,  5,  6],\n       [ 4,  5,  6],\n       [ 7,  8,  9],\n       [ 7,  8,  9],\n       [10, 11, 12],\n       [10, 11, 12]])\n'''\nnp.repeat(aa,2,axis=1)\n#结果：\n'''\narray([[ 1,  1,  2,  2,  3,  3],\n       [ 4,  4,  5,  5,  6,  6],\n       [ 7,  7,  8,  8,  9,  9],\n       [10, 10, 11, 11, 12, 12]])\n'''\n",[32,95642,95643,95659,95668,95672,95677,95701,95706,95715,95719,95724,95728,95733,95749,95753,95757,95762,95767,95772,95776,95781,95785,95790,95795,95799,95815,95819,95823,95828,95833,95838,95843],{"__ignoreMap":79},[100,95644,95645,95647,95649,95651,95653,95655,95657],{"class":102,"line":103},[100,95646,2006],{"class":258},[100,95648,472],{"class":471},[100,95650,94554],{"class":258},[100,95652,1985],{"class":117},[100,95654,2145],{"class":258},[100,95656,2086],{"class":117},[100,95658,809],{"class":258},[100,95660,95661,95664,95666],{"class":102,"line":188},[100,95662,95663],{"class":258},"np.repeat(a,",[100,95665,1849],{"class":117},[100,95667,809],{"class":258},[100,95669,95670],{"class":102,"line":199},[100,95671,95116],{"class":1836},[100,95673,95674],{"class":102,"line":532},[100,95675,95676],{"class":1836},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[100,95678,95679,95681,95683,95685,95687,95689,95691,95693,95695,95697,95699],{"class":102,"line":577},[100,95680,94858],{"class":258},[100,95682,472],{"class":471},[100,95684,94554],{"class":258},[100,95686,1985],{"class":117},[100,95688,2145],{"class":258},[100,95690,2290],{"class":117},[100,95692,94559],{"class":258},[100,95694,748],{"class":117},[100,95696,2145],{"class":258},[100,95698,1849],{"class":117},[100,95700,809],{"class":258},[100,95702,95703],{"class":102,"line":589},[100,95704,95705],{"class":1836},"#这个重复之后二维变成一维\n",[100,95707,95708,95711,95713],{"class":102,"line":595},[100,95709,95710],{"class":258},"np.repeat(aa,",[100,95712,465],{"class":117},[100,95714,809],{"class":258},[100,95716,95717],{"class":102,"line":601},[100,95718,95480],{"class":110},[100,95720,95721],{"class":102,"line":606},[100,95722,95723],{"class":110},"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",[100,95725,95726],{"class":102,"line":612},[100,95727,95480],{"class":110},[100,95729,95730],{"class":102,"line":618},[100,95731,95732],{"class":1836},"#指定axis\n",[100,95734,95735,95737,95739,95741,95743,95745,95747],{"class":102,"line":623},[100,95736,95710],{"class":258},[100,95738,465],{"class":117},[100,95740,2145],{"class":258},[100,95742,49068],{"class":6812},[100,95744,472],{"class":471},[100,95746,1366],{"class":117},[100,95748,809],{"class":258},[100,95750,95751],{"class":102,"line":629},[100,95752,95116],{"class":1836},[100,95754,95755],{"class":102,"line":635},[100,95756,95480],{"class":110},[100,95758,95759],{"class":102,"line":641},[100,95760,95761],{"class":110},"array([[ 1,  2,  3],\n",[100,95763,95764],{"class":102,"line":647},[100,95765,95766],{"class":110},"       [ 1,  2,  3],\n",[100,95768,95769],{"class":102,"line":653},[100,95770,95771],{"class":110},"       [ 4,  5,  6],\n",[100,95773,95774],{"class":102,"line":659},[100,95775,95771],{"class":110},[100,95777,95778],{"class":102,"line":665},[100,95779,95780],{"class":110},"       [ 7,  8,  9],\n",[100,95782,95783],{"class":102,"line":670},[100,95784,95780],{"class":110},[100,95786,95787],{"class":102,"line":675},[100,95788,95789],{"class":110},"       [10, 11, 12],\n",[100,95791,95792],{"class":102,"line":699},[100,95793,95794],{"class":110},"       [10, 11, 12]])\n",[100,95796,95797],{"class":102,"line":708},[100,95798,95480],{"class":110},[100,95800,95801,95803,95805,95807,95809,95811,95813],{"class":102,"line":722},[100,95802,95710],{"class":258},[100,95804,465],{"class":117},[100,95806,2145],{"class":258},[100,95808,49068],{"class":6812},[100,95810,472],{"class":471},[100,95812,1985],{"class":117},[100,95814,809],{"class":258},[100,95816,95817],{"class":102,"line":735},[100,95818,95116],{"class":1836},[100,95820,95821],{"class":102,"line":754},[100,95822,95480],{"class":110},[100,95824,95825],{"class":102,"line":771},[100,95826,95827],{"class":110},"array([[ 1,  1,  2,  2,  3,  3],\n",[100,95829,95830],{"class":102,"line":776},[100,95831,95832],{"class":110},"       [ 4,  4,  5,  5,  6,  6],\n",[100,95834,95835],{"class":102,"line":781},[100,95836,95837],{"class":110},"       [ 7,  7,  8,  8,  9,  9],\n",[100,95839,95840],{"class":102,"line":796},[100,95841,95842],{"class":110},"       [10, 10, 11, 11, 12, 12]])\n",[100,95844,95845],{"class":102,"line":812},[100,95846,95480],{"class":110},[14,95848,95850],{"id":95849},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[73,95852,95854],{"className":249,"code":95853,"language":251,"meta":79,"style":79},"a=np.arange(1,5)\n#array([，2，3，4])\nnp.roll(a,2)#传正数向后调多少位，传负数向前调多少位\n#结果：\n#array([3, 4, 1, 2])\nnp.roll(a,-1)\n#结果：\n#array([2, 3, 4, 1])\n",[32,95855,95856,95872,95877,95889,95893,95898,95908,95912],{"__ignoreMap":79},[100,95857,95858,95860,95862,95864,95866,95868,95870],{"class":102,"line":103},[100,95859,2006],{"class":258},[100,95861,472],{"class":471},[100,95863,94554],{"class":258},[100,95865,1985],{"class":117},[100,95867,2145],{"class":258},[100,95869,2086],{"class":117},[100,95871,809],{"class":258},[100,95873,95874],{"class":102,"line":188},[100,95875,95876],{"class":1836},"#array([，2，3，4])\n",[100,95878,95879,95882,95884,95886],{"class":102,"line":199},[100,95880,95881],{"class":258},"np.roll(a,",[100,95883,465],{"class":117},[100,95885,2196],{"class":258},[100,95887,95888],{"class":1836},"#传正数向后调多少位，传负数向前调多少位\n",[100,95890,95891],{"class":102,"line":532},[100,95892,95116],{"class":1836},[100,95894,95895],{"class":102,"line":577},[100,95896,95897],{"class":1836},"#array([3, 4, 1, 2])\n",[100,95899,95900,95902,95904,95906],{"class":102,"line":589},[100,95901,95881],{"class":258},[100,95903,2299],{"class":471},[100,95905,1985],{"class":117},[100,95907,809],{"class":258},[100,95909,95910],{"class":102,"line":595},[100,95911,95116],{"class":1836},[100,95913,95914],{"class":102,"line":601},[100,95915,95916],{"class":1836},"#array([2, 3, 4, 1])\n",[19,95918,95919],{},[3095,95920],{"alt":79,"src":95921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,95923,95925],{"id":95924},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,95927,95928],{},"resize()重新调整数组的大小",[19,95930,95931],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[73,95933,95935],{"className":249,"code":95934,"language":251,"meta":79,"style":79},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[32,95936,95937,95942,95955],{"__ignoreMap":79},[100,95938,95939],{"class":102,"line":103},[100,95940,95941],{"class":1836},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[100,95943,95944,95947,95949,95951,95953],{"class":102,"line":188},[100,95945,95946],{"class":258},"np.resize(aa,(",[100,95948,465],{"class":117},[100,95950,2145],{"class":258},[100,95952,2111],{"class":117},[100,95954,751],{"class":258},[100,95956,95957,95959,95961,95963,95965,95967],{"class":102,"line":199},[100,95958,95946],{"class":258},[100,95960,465],{"class":117},[100,95962,2145],{"class":258},[100,95964,2187],{"class":117},[100,95966,84323],{"class":258},[100,95968,95969],{"class":1836},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,95971,95973],{"id":95972},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,95975,95976],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,95978,95979],{},[3095,95980],{"alt":79,"src":95981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,95983,95985],{"id":95984},"_126-保存加载文件","12.6 保存加载文件",[19,95987,95988],{},"savetxt():将数据保存到txt文件中",[19,95990,95991],{},"loadtxt():从文件加载数据",[19,95993,95994],{},[3095,95995],{"alt":79,"src":95996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,95998,96000],{"id":95999},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,96002,96003],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,96005,96007],{"id":96006},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,96009,96010],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,96012,96013],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,96015,96016],{},[3095,96017],{"alt":79,"src":96018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,96020,96022],{"id":96021},"_129-where语句","12.9 where语句",[19,96024,96025],{},"np.where(条件,x,y)",[19,96027,96028],{},"如果条件为True,对应值为x,否则对应值为y",[19,96030,96031],{},[3095,96032],{"alt":79,"src":96033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,96035,96037],{"id":96036},"_1210-dot矩阵","12.10 dot()矩阵",[19,96039,96040],{},[3095,96041],{"alt":79,"src":96042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[1677,96044,96045],{},"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":79,"searchDepth":188,"depth":188,"links":96047},[96048,96049,96050,96051,96052,96053,96054,96055,96056,96057],{"id":95410,"depth":188,"text":95411},{"id":95633,"depth":188,"text":95634},{"id":95849,"depth":188,"text":95850},{"id":95924,"depth":188,"text":95925},{"id":95972,"depth":188,"text":95973},{"id":95984,"depth":188,"text":95985},{"id":95999,"depth":188,"text":96000},{"id":96006,"depth":188,"text":96007},{"id":96021,"depth":188,"text":96022},{"id":96036,"depth":188,"text":96037},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":95402,"description":24958},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":96064,"title":96065,"body":96066,"description":24958,"extension":1708,"meta":96419,"navigation":569,"path":96420,"seo":96421,"stem":96422,"__hash__":96423},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":96067,"toc":96417},[96068,96071,96074,96077,96080,96083,96148,96150,96414],[10,96069,96065],{"id":96070},"_13数组排序",[19,96072,96073],{},"排序主要用到的方法是np.sort和np.argsort",[19,96075,96076],{},"其中np.sort()对数组直接排序",[19,96078,96079],{},"而np.argsort()是返回排序后的原始索引",[19,96081,96082],{},"①一维数组",[73,96084,96086],{"className":249,"code":96085,"language":251,"meta":79,"style":79},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[32,96087,96088,96092,96132,96140],{"__ignoreMap":79},[100,96089,96090],{"class":102,"line":103},[100,96091,94657],{"class":1836},[100,96093,96094,96096,96098,96100,96102,96104,96106,96108,96110,96112,96114,96116,96118,96120,96122,96124,96126,96128,96130],{"class":102,"line":188},[100,96095,2006],{"class":258},[100,96097,472],{"class":471},[100,96099,94576],{"class":258},[100,96101,1849],{"class":117},[100,96103,2145],{"class":258},[100,96105,2265],{"class":117},[100,96107,2145],{"class":258},[100,96109,2162],{"class":117},[100,96111,2145],{"class":258},[100,96113,2541],{"class":117},[100,96115,2145],{"class":258},[100,96117,2047],{"class":117},[100,96119,2145],{"class":258},[100,96121,2659],{"class":117},[100,96123,2145],{"class":258},[100,96125,2111],{"class":117},[100,96127,2145],{"class":258},[100,96129,2213],{"class":117},[100,96131,6255],{"class":258},[100,96133,96134,96137],{"class":102,"line":199},[100,96135,96136],{"class":258},"np.sort(a)",[100,96138,96139],{"class":1836},"#升序排序\n",[100,96141,96142,96145],{"class":102,"line":532},[100,96143,96144],{"class":258},"np.argsort(a)",[100,96146,96147],{"class":1836},"#按照元素大小来索引排序\n",[19,96149,94843],{},[73,96151,96153],{"className":249,"code":96152,"language":251,"meta":79,"style":79},"np.random.seed(0)#保证每次值一样\naa=np.random.randint(100,size=(4,6))\n#原数组：\n'''\narray([[44, 47, 64, 67, 67,  9],\n       [83, 21, 36, 87, 70, 88],\n       [88, 12, 58, 65, 39, 87],\n       [46, 88, 81, 37, 25, 77]], dtype=int32)\n'''\nnp.sort(aa)#每行进行了排序\n'''\narray([[ 9, 44, 47, 64, 67, 67],\n       [21, 36, 70, 83, 87, 88],\n       [12, 39, 58, 65, 87, 88],\n       [25, 37, 46, 77, 81, 88]], dtype=int32)\n'''\n#axis=0时\nnp.sort(aa,axis=0)\n'''\narray([[44, 12, 36, 37, 25,  9],\n       [46, 21, 58, 65, 39, 77],\n       [83, 47, 64, 67, 67, 87],\n       [88, 88, 81, 87, 70, 88]], dtype=int32)\n'''\n#axis=1时,为默认值\nnp.sort(aa,axis=1)\n'''\narray([[ 9, 44, 47, 64, 67, 67],\n       [21, 36, 70, 83, 87, 88],\n       [12, 39, 58, 65, 87, 88],\n       [25, 37, 46, 77, 81, 88]], dtype=int32)\n'''\n#按最后一列排序\nb=aa[:,-1]\n#获取最后一列排好序的索引\nindex=np.argsort(b)\naa[index]\n'''\narray([[44, 47, 64, 67, 67,  9],\n       [46, 88, 81, 37, 25, 77],\n       [88, 12, 58, 65, 39, 87],\n       [83, 21, 36, 87, 70, 88]], dtype=int32)\n'''\n",[32,96154,96155,96167,96193,96198,96202,96207,96212,96217,96222,96226,96234,96238,96243,96248,96253,96258,96262,96267,96280,96284,96289,96294,96299,96304,96308,96313,96325,96329,96333,96337,96341,96345,96349,96354,96369,96374,96383,96388,96392,96396,96401,96405,96410],{"__ignoreMap":79},[100,96156,96157,96160,96162,96164],{"class":102,"line":103},[100,96158,96159],{"class":258},"np.random.seed(",[100,96161,1366],{"class":117},[100,96163,2196],{"class":258},[100,96165,96166],{"class":1836},"#保证每次值一样\n",[100,96168,96169,96171,96173,96175,96177,96179,96181,96183,96185,96187,96189,96191],{"class":102,"line":188},[100,96170,94858],{"class":258},[100,96172,472],{"class":471},[100,96174,94666],{"class":258},[100,96176,2078],{"class":117},[100,96178,2145],{"class":258},[100,96180,33054],{"class":6812},[100,96182,472],{"class":471},[100,96184,713],{"class":258},[100,96186,748],{"class":117},[100,96188,2145],{"class":258},[100,96190,2111],{"class":117},[100,96192,751],{"class":258},[100,96194,96195],{"class":102,"line":199},[100,96196,96197],{"class":1836},"#原数组：\n",[100,96199,96200],{"class":102,"line":532},[100,96201,95480],{"class":110},[100,96203,96204],{"class":102,"line":577},[100,96205,96206],{"class":110},"array([[44, 47, 64, 67, 67,  9],\n",[100,96208,96209],{"class":102,"line":589},[100,96210,96211],{"class":110},"       [83, 21, 36, 87, 70, 88],\n",[100,96213,96214],{"class":102,"line":595},[100,96215,96216],{"class":110},"       [88, 12, 58, 65, 39, 87],\n",[100,96218,96219],{"class":102,"line":601},[100,96220,96221],{"class":110},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[100,96223,96224],{"class":102,"line":606},[100,96225,95480],{"class":110},[100,96227,96228,96231],{"class":102,"line":612},[100,96229,96230],{"class":258},"np.sort(aa)",[100,96232,96233],{"class":1836},"#每行进行了排序\n",[100,96235,96236],{"class":102,"line":618},[100,96237,95480],{"class":110},[100,96239,96240],{"class":102,"line":623},[100,96241,96242],{"class":110},"array([[ 9, 44, 47, 64, 67, 67],\n",[100,96244,96245],{"class":102,"line":629},[100,96246,96247],{"class":110},"       [21, 36, 70, 83, 87, 88],\n",[100,96249,96250],{"class":102,"line":635},[100,96251,96252],{"class":110},"       [12, 39, 58, 65, 87, 88],\n",[100,96254,96255],{"class":102,"line":641},[100,96256,96257],{"class":110},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[100,96259,96260],{"class":102,"line":647},[100,96261,95480],{"class":110},[100,96263,96264],{"class":102,"line":653},[100,96265,96266],{"class":1836},"#axis=0时\n",[100,96268,96269,96272,96274,96276,96278],{"class":102,"line":659},[100,96270,96271],{"class":258},"np.sort(aa,",[100,96273,49068],{"class":6812},[100,96275,472],{"class":471},[100,96277,1366],{"class":117},[100,96279,809],{"class":258},[100,96281,96282],{"class":102,"line":665},[100,96283,95480],{"class":110},[100,96285,96286],{"class":102,"line":670},[100,96287,96288],{"class":110},"array([[44, 12, 36, 37, 25,  9],\n",[100,96290,96291],{"class":102,"line":675},[100,96292,96293],{"class":110},"       [46, 21, 58, 65, 39, 77],\n",[100,96295,96296],{"class":102,"line":699},[100,96297,96298],{"class":110},"       [83, 47, 64, 67, 67, 87],\n",[100,96300,96301],{"class":102,"line":708},[100,96302,96303],{"class":110},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[100,96305,96306],{"class":102,"line":722},[100,96307,95480],{"class":110},[100,96309,96310],{"class":102,"line":735},[100,96311,96312],{"class":1836},"#axis=1时,为默认值\n",[100,96314,96315,96317,96319,96321,96323],{"class":102,"line":754},[100,96316,96271],{"class":258},[100,96318,49068],{"class":6812},[100,96320,472],{"class":471},[100,96322,1985],{"class":117},[100,96324,809],{"class":258},[100,96326,96327],{"class":102,"line":771},[100,96328,95480],{"class":110},[100,96330,96331],{"class":102,"line":776},[100,96332,96242],{"class":110},[100,96334,96335],{"class":102,"line":781},[100,96336,96247],{"class":110},[100,96338,96339],{"class":102,"line":796},[100,96340,96252],{"class":110},[100,96342,96343],{"class":102,"line":812},[100,96344,96257],{"class":110},[100,96346,96347],{"class":102,"line":823},[100,96348,95480],{"class":110},[100,96350,96351],{"class":102,"line":828},[100,96352,96353],{"class":1836},"#按最后一列排序\n",[100,96355,96356,96358,96360,96363,96365,96367],{"class":102,"line":840},[100,96357,2031],{"class":258},[100,96359,472],{"class":471},[100,96361,96362],{"class":258},"aa[:,",[100,96364,2299],{"class":471},[100,96366,1985],{"class":117},[100,96368,34802],{"class":258},[100,96370,96371],{"class":102,"line":845},[100,96372,96373],{"class":1836},"#获取最后一列排好序的索引\n",[100,96375,96376,96378,96380],{"class":102,"line":868},[100,96377,75612],{"class":258},[100,96379,472],{"class":471},[100,96381,96382],{"class":258},"np.argsort(b)\n",[100,96384,96385],{"class":102,"line":874},[100,96386,96387],{"class":258},"aa[index]\n",[100,96389,96390],{"class":102,"line":879},[100,96391,95480],{"class":110},[100,96393,96394],{"class":102,"line":889},[100,96395,96206],{"class":110},[100,96397,96398],{"class":102,"line":894},[100,96399,96400],{"class":110},"       [46, 88, 81, 37, 25, 77],\n",[100,96402,96403],{"class":102,"line":900},[100,96404,96216],{"class":110},[100,96406,96407],{"class":102,"line":910},[100,96408,96409],{"class":110},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[100,96411,96412],{"class":102,"line":915},[100,96413,95480],{"class":110},[1677,96415,96416],{},"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":79,"searchDepth":188,"depth":188,"links":96418},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":96065,"description":24958},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":96425,"title":96426,"body":96427,"description":24958,"extension":1708,"meta":96457,"navigation":569,"path":96458,"seo":96459,"stem":96460,"__hash__":96461},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":96428,"toc":96455},[96429,96432,96435,96438,96441,96444,96447,96450],[10,96430,96426],{"id":96431},"_14广播机制",[19,96433,96434],{},"广播的规则：",[19,96436,96437],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,96439,96440],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,96442,96443],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,96445,96446],{},"3.如果没有维度形状为1，则会引发异常",[19,96448,96449],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,96451,96452],{},[3095,96453],{"alt":79,"src":96454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":79,"searchDepth":188,"depth":188,"links":96456},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":96426,"description":24958},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":96463,"title":96464,"body":96465,"description":24958,"extension":1708,"meta":96563,"navigation":569,"path":96564,"seo":96565,"stem":96566,"__hash__":96567},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":96466,"toc":96561},[96467,96470,96473,96558],[10,96468,96464],{"id":96469},"_15比较掩码",[19,96471,96472],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[73,96474,96476],{"className":249,"code":96475,"language":251,"meta":79,"style":79},"a=np.array([[1,2,3],[11,12,13],[21,22,23]])\na\u003C20#结果是一个由True,False组成的数组\na[a\u003C20]#小于20的元素会存到这个数组中\n#结果：\n#array([ 1,  2,  3, 11, 12, 13])\n",[32,96477,96478,96524,96535,96549,96553],{"__ignoreMap":79},[100,96479,96480,96482,96484,96487,96489,96491,96493,96495,96497,96499,96501,96503,96505,96507,96509,96511,96513,96515,96517,96519,96521],{"class":102,"line":103},[100,96481,2006],{"class":258},[100,96483,472],{"class":471},[100,96485,96486],{"class":258},"np.array([[",[100,96488,1985],{"class":117},[100,96490,2145],{"class":258},[100,96492,465],{"class":117},[100,96494,2145],{"class":258},[100,96496,1849],{"class":117},[100,96498,49584],{"class":258},[100,96500,2239],{"class":117},[100,96502,2145],{"class":258},[100,96504,2265],{"class":117},[100,96506,2145],{"class":258},[100,96508,2290],{"class":117},[100,96510,49584],{"class":258},[100,96512,2491],{"class":117},[100,96514,2145],{"class":258},[100,96516,2516],{"class":117},[100,96518,2145],{"class":258},[100,96520,2541],{"class":117},[100,96522,96523],{"class":258},"]])\n",[100,96525,96526,96528,96530,96532],{"class":102,"line":188},[100,96527,2006],{"class":258},[100,96529,2676],{"class":471},[100,96531,2466],{"class":117},[100,96533,96534],{"class":1836},"#结果是一个由True,False组成的数组\n",[100,96536,96537,96540,96542,96544,96546],{"class":102,"line":199},[100,96538,96539],{"class":258},"a[a",[100,96541,2676],{"class":471},[100,96543,2466],{"class":117},[100,96545,2706],{"class":258},[100,96547,96548],{"class":1836},"#小于20的元素会存到这个数组中\n",[100,96550,96551],{"class":102,"line":532},[100,96552,95116],{"class":1836},[100,96554,96555],{"class":102,"line":577},[100,96556,96557],{"class":1836},"#array([ 1,  2,  3, 11, 12, 13])\n",[1677,96559,96560],{},"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":79,"searchDepth":188,"depth":188,"links":96562},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":96464,"description":24958},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":96569,"title":96570,"body":96571,"description":24958,"extension":1708,"meta":96663,"navigation":569,"path":96664,"seo":96665,"stem":96666,"__hash__":96667},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":96572,"toc":96661},[96573,96576,96579,96582,96585,96588,96653,96658],[10,96574,96570],{"id":96575},"_16魔法命令time",[19,96577,96578],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,96580,96581],{},"%:行模式",[19,96583,96584],{},"%%:单元格模式",[19,96586,96587],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[73,96589,96591],{"className":249,"code":96590,"language":251,"meta":79,"style":79},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[32,96592,96593,96598,96605,96610,96619,96632,96636,96644],{"__ignoreMap":79},[100,96594,96595],{"class":102,"line":103},[100,96596,96597],{"class":1836},"#程序执行时间\n",[100,96599,96600,96602],{"class":102,"line":188},[100,96601,548],{"class":471},[100,96603,96604],{"class":258}," time \n",[100,96606,96607],{"class":102,"line":199},[100,96608,96609],{"class":1836},"#获取时间\n",[100,96611,96612,96615,96617],{"class":102,"line":532},[100,96613,96614],{"class":258},"start",[100,96616,472],{"class":471},[100,96618,33975],{"class":258},[100,96620,96621,96624,96627,96629],{"class":102,"line":577},[100,96622,96623],{"class":258},"time.sleep(",[100,96625,96626],{"class":117},"0.4",[100,96628,2196],{"class":258},[100,96630,96631],{"class":1836},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[100,96633,96634],{"class":102,"line":589},[100,96635,96609],{"class":1836},[100,96637,96638,96640,96642],{"class":102,"line":595},[100,96639,47355],{"class":258},[100,96641,472],{"class":471},[100,96643,33975],{"class":258},[100,96645,96646,96648,96650],{"class":102,"line":601},[100,96647,47355],{"class":258},[100,96649,2299],{"class":471},[100,96651,96652],{"class":258},"start\n",[19,96654,96655],{},[3095,96656],{"alt":79,"src":96657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[1677,96659,96660],{},"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":79,"searchDepth":188,"depth":188,"links":96662},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":96570,"description":24958},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":96669,"title":96670,"body":96671,"description":24958,"extension":1708,"meta":96706,"navigation":569,"path":96707,"seo":96708,"stem":96709,"__hash__":96710},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":96672,"toc":96704},[96673,96676,96679,96682,96685,96688,96691,96694,96699],[10,96674,96670],{"id":96675},"_17魔法命令timeit",[19,96677,96678],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,96680,96681],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,96683,96684],{},"单元格模式：",[19,96686,96687],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,96689,96690],{},"初始化语句执行次数由轮数来决定",[19,96692,96693],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,96695,96696],{},[3095,96697],{"alt":79,"src":96698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,96700,96701],{},[3095,96702],{"alt":79,"src":96703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":79,"searchDepth":188,"depth":188,"links":96705},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":96670,"description":24958},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":96712,"title":96713,"body":96714,"description":24958,"extension":1708,"meta":96732,"navigation":569,"path":96733,"seo":96734,"stem":96735,"__hash__":96736},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":96715,"toc":96730},[96716,96719,96722,96725],[10,96717,96713],{"id":96718},"_18魔法命令writefile和run",[19,96720,96721],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,96723,96724],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,96726,96727],{},[3095,96728],{"alt":79,"src":96729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":79,"searchDepth":188,"depth":188,"links":96731},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":96713,"description":24958},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":96738,"title":96739,"body":96740,"description":24958,"extension":1708,"meta":96793,"navigation":569,"path":96794,"seo":96795,"stem":96796,"__hash__":96797},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":96741,"toc":96791},[96742,96745,96748,96750,96753,96756,96761,96764,96767,96770,96773,96776,96779,96782,96785,96788],[10,96743,96739],{"id":96744},"_19魔法命令memit",[19,96746,96747],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,96749,26176],{},[19,96751,96752],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,96754,96755],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,96757,96758],{},[3095,96759],{"alt":79,"src":96760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,96762,96763],{},"补充：",[19,96765,96766],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,96768,96769],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,96771,96772],{},"解决方法：",[19,96774,96775],{},"1.cmd",[19,96777,96778],{},"2.依次输入以下代码：",[19,96780,96781],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,96783,96784],{},"pip install --upgrade ipython",[19,96786,96787],{},"#升级 memory_profiler 和 setuptools",[19,96789,96790],{},"pip install --upgrade memory_profiler setuptools",{"title":79,"searchDepth":188,"depth":188,"links":96792},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":96739,"description":24958},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":96799,"title":96800,"body":96801,"description":24958,"extension":1708,"meta":98445,"navigation":569,"path":98446,"seo":98447,"stem":98448,"__hash__":98449},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":96802,"toc":98415},[96803,96806,96810,96814,96875,96878,96883,96887,96892,96897,96902,96907,96910,96915,96919,96923,96956,96959,96962,96965,97017,97020,97056,97059,97101,97105,97126,97128,97165,97167,97172,97174,97179,97183,97186,97214,97218,97222,97273,97277,97369,97373,97377,97380,97385,97389,97414,97419,97423,97426,97429,97432,97435,97438,97441,97444,97456,97460,97464,97467,97499,97502,97525,97528,97554,97557,97583,97586,97620,97623,97685,97689,97692,97696,97699,97725,97728,97731,97736,97739,97808,97810,97815,97876,97879,97890,97896,97901,97905,97908,97921,97925,97940,97942,97965,97967,97993,97996,97999,98002,98050,98052,98057,98061,98065,98092,98096,98123,98126,98131,98136,98226,98230,98288,98293,98296,98299,98341,98345,98401,98406,98409,98412],[10,96804,96800],{"id":96805},"_2创建数组",[14,96807,96809],{"id":96808},"_21-array函数创建数组","2.1 array()函数创建数组",[305,96811,96813],{"id":96812},"_221-函数语句","2.2.1 函数语句",[73,96815,96817],{"className":249,"code":96816,"language":251,"meta":79,"style":79},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[32,96818,96819],{"__ignoreMap":79},[100,96820,96821,96824,96827,96829,96831,96833,96835,96837,96840,96842,96845,96847,96850,96852,96854,96856,96859,96861,96864,96866,96869,96871,96873],{"class":102,"line":103},[100,96822,96823],{"class":258},"numpy.array(",[100,96825,96826],{"class":117},"object",[100,96828,14017],{"class":258},[100,96830,95052],{"class":6812},[100,96832,583],{"class":471},[100,96834,40487],{"class":117},[100,96836,14017],{"class":258},[100,96838,96839],{"class":6812},"copy",[100,96841,583],{"class":471},[100,96843,96844],{"class":117}," True",[100,96846,14017],{"class":258},[100,96848,96849],{"class":6812},"order",[100,96851,583],{"class":471},[100,96853,40487],{"class":117},[100,96855,14017],{"class":258},[100,96857,96858],{"class":6812},"subok",[100,96860,583],{"class":471},[100,96862,96863],{"class":117}," False",[100,96865,14017],{"class":258},[100,96867,96868],{"class":6812},"ndmin",[100,96870,583],{"class":471},[100,96872,5692],{"class":117},[100,96874,809],{"class":258},[19,96876,96877],{},"参数：",[19,96879,96880],{},[3095,96881],{"alt":79,"src":96882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[305,96884,96886],{"id":96885},"_222-实例","2.2.2 实例",[19,96888,96889],{},[3095,96890],{"alt":79,"src":96891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,96893,96894],{},[3095,96895],{"alt":79,"src":96896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,96898,96899],{},[3095,96900],{"alt":79,"src":96901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,96903,96904],{},[3095,96905],{"alt":79,"src":96906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,96908,96909],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,96911,96912],{},[3095,96913],{"alt":79,"src":96914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,96916,96918],{"id":96917},"_22-随机数创建数组","2.2 随机数创建数组",[305,96920,96922],{"id":96921},"_221-random语句","2.2.1 random语句",[73,96924,96926],{"className":249,"code":96925,"language":251,"meta":79,"style":79},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[32,96927,96928,96933,96938,96946,96951],{"__ignoreMap":79},[100,96929,96930],{"class":102,"line":103},[100,96931,96932],{"class":1836},"#random.random()\n",[100,96934,96935],{"class":102,"line":188},[100,96936,96937],{"class":1836},"#确定随机种子,就是每次运行结果是相同的\n",[100,96939,96940,96942,96944],{"class":102,"line":199},[100,96941,96159],{"class":258},[100,96943,1366],{"class":117},[100,96945,809],{"class":258},[100,96947,96948],{"class":102,"line":532},[100,96949,96950],{"class":258},"np.random.random()\n",[100,96952,96953],{"class":102,"line":577},[100,96954,96955],{"class":1836},"#生成一个随机的数目\n",[19,96957,96958],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,96960,96961],{},"可以指定数组形状 size",[19,96963,96964],{},"①生成一维数组",[73,96966,96968],{"className":249,"code":96967,"language":251,"meta":79,"style":79},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[32,96969,96970,96975,96988,96993,97009],{"__ignoreMap":79},[100,96971,96972],{"class":102,"line":103},[100,96973,96974],{"class":1836},"#random.random(size())\n",[100,96976,96977,96980,96982,96984,96986],{"class":102,"line":188},[100,96978,96979],{"class":258},"np.random.random(",[100,96981,33054],{"class":6812},[100,96983,472],{"class":471},[100,96985,2086],{"class":117},[100,96987,809],{"class":258},[100,96989,96990],{"class":102,"line":199},[100,96991,96992],{"class":1836},"#生成一位的五个元素\n",[100,96994,96995,96997,96999,97001,97003,97005,97007],{"class":102,"line":532},[100,96996,2006],{"class":258},[100,96998,472],{"class":471},[100,97000,96979],{"class":258},[100,97002,33054],{"class":6812},[100,97004,472],{"class":471},[100,97006,748],{"class":117},[100,97008,809],{"class":258},[100,97010,97011,97014],{"class":102,"line":577},[100,97012,97013],{"class":258},"a.shape ",[100,97015,97016],{"class":1836},"#输出数组形状\n",[19,97018,97019],{},"②生成二维数组",[73,97021,97023],{"className":249,"code":97022,"language":251,"meta":79,"style":79},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[32,97024,97025,97029,97051],{"__ignoreMap":79},[100,97026,97027],{"class":102,"line":103},[100,97028,94853],{"class":1836},[100,97030,97031,97033,97035,97037,97039,97041,97043,97045,97047,97049],{"class":102,"line":188},[100,97032,94858],{"class":258},[100,97034,472],{"class":471},[100,97036,96979],{"class":258},[100,97038,33054],{"class":6812},[100,97040,472],{"class":471},[100,97042,713],{"class":258},[100,97044,748],{"class":117},[100,97046,2145],{"class":258},[100,97048,2086],{"class":117},[100,97050,751],{"class":258},[100,97052,97053],{"class":102,"line":199},[100,97054,97055],{"class":1836},"#生成四行五列的数组\n",[19,97057,97058],{},"③生成三维数组",[73,97060,97062],{"className":249,"code":97061,"language":251,"meta":79,"style":79},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[32,97063,97064,97069,97096],{"__ignoreMap":79},[100,97065,97066],{"class":102,"line":103},[100,97067,97068],{"class":1836},"#三维数组\n",[100,97070,97071,97074,97076,97078,97080,97082,97084,97086,97088,97090,97092,97094],{"class":102,"line":188},[100,97072,97073],{"class":258},"aaa",[100,97075,472],{"class":471},[100,97077,96979],{"class":258},[100,97079,33054],{"class":6812},[100,97081,472],{"class":471},[100,97083,713],{"class":258},[100,97085,465],{"class":117},[100,97087,2145],{"class":258},[100,97089,1849],{"class":117},[100,97091,2145],{"class":258},[100,97093,748],{"class":117},[100,97095,751],{"class":258},[100,97097,97098],{"class":102,"line":199},[100,97099,97100],{"class":258},"aaa.shape\n",[305,97102,97104],{"id":97103},"_222-randint语句","2.2.2 randint语句",[73,97106,97108],{"className":249,"code":97107,"language":251,"meta":79,"style":79},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[32,97109,97110,97115],{"__ignoreMap":79},[100,97111,97112],{"class":102,"line":103},[100,97113,97114],{"class":1836},"#生成随机的整数 random.randint(low,high,size)\n",[100,97116,97117,97119,97121,97123],{"class":102,"line":188},[100,97118,94666],{"class":258},[100,97120,2086],{"class":117},[100,97122,15295],{"class":258},[100,97124,97125],{"class":1836},"#0~5中的随机一个数\n",[19,97127,96964],{},[73,97129,97131],{"className":249,"code":97130,"language":251,"meta":79,"style":79},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[32,97132,97133,97138,97160],{"__ignoreMap":79},[100,97134,97135],{"class":102,"line":103},[100,97136,97137],{"class":1836},"#一维\n",[100,97139,97140,97142,97144,97146,97148,97150,97152,97154,97156,97158],{"class":102,"line":188},[100,97141,94666],{"class":258},[100,97143,1985],{"class":117},[100,97145,2145],{"class":258},[100,97147,2239],{"class":117},[100,97149,2145],{"class":258},[100,97151,33054],{"class":6812},[100,97153,472],{"class":471},[100,97155,713],{"class":258},[100,97157,2213],{"class":117},[100,97159,751],{"class":258},[100,97161,97162],{"class":102,"line":199},[100,97163,97164],{"class":1836},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,97166,97019],{},[19,97168,97169],{},[3095,97170],{"alt":79,"src":97171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,97173,97058],{},[19,97175,97176],{},[3095,97177],{"alt":79,"src":97178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[305,97180,97182],{"id":97181},"_222-rand语句","2.2.2 rand语句",[19,97184,97185],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[73,97187,97189],{"className":249,"code":97188,"language":251,"meta":79,"style":79},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[32,97190,97191,97204,97209],{"__ignoreMap":79},[100,97192,97193,97196,97198,97200,97202],{"class":102,"line":103},[100,97194,97195],{"class":258},"np.random.rand(",[100,97197,2078],{"class":117},[100,97199,2145],{"class":258},[100,97201,2213],{"class":117},[100,97203,809],{"class":258},[100,97205,97206],{"class":102,"line":188},[100,97207,97208],{"class":1836},"#第一个参数100：行数，表示有100个样本\n",[100,97210,97211],{"class":102,"line":199},[100,97212,97213],{"class":1836},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,97215,97217],{"id":97216},"_23-arange创建数组","2.3 arange()创建数组",[305,97219,97221],{"id":97220},"_231-函数语句","2.3.1 函数语句",[73,97223,97225],{"className":249,"code":97224,"language":251,"meta":79,"style":79},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[32,97226,97227,97240,97245,97249,97254,97259,97264,97269],{"__ignoreMap":79},[100,97228,97229,97232,97234,97236,97238],{"class":102,"line":103},[100,97230,97231],{"class":258},"numpy.arange([start,] stop[, step], ",[100,97233,95052],{"class":6812},[100,97235,472],{"class":471},[100,97237,693],{"class":117},[100,97239,809],{"class":258},[100,97241,97242],{"class":102,"line":188},[100,97243,97244],{"class":1836},"#参数\n",[100,97246,97247],{"class":102,"line":199},[100,97248,662],{"class":110},[100,97250,97251],{"class":102,"line":532},[100,97252,97253],{"class":110},"start:起始值，可选，默认从 0 开始。\n",[100,97255,97256],{"class":102,"line":577},[100,97257,97258],{"class":110},"stop:结束值（不包含该值）。\n",[100,97260,97261],{"class":102,"line":589},[100,97262,97263],{"class":110},"step:步长，可选，默认是 1。可以为浮点数。\n",[100,97265,97266],{"class":102,"line":595},[100,97267,97268],{"class":110},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[100,97270,97271],{"class":102,"line":601},[100,97272,662],{"class":110},[305,97274,97276],{"id":97275},"_232-实例","2.3.2 实例",[73,97278,97280],{"className":249,"code":97279,"language":251,"meta":79,"style":79},"#创建一维数组\nnp.arange(1,21,1,dtype=int)\n#输出结果：\n#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n#创建二维数组\nnp.array([np.arange(1,4),np.arange(4,7)])\n#结果：\n\"\"\"\narray([[1, 2, 3],\n       [4, 5, 6]])\n\"\"\"\n",[32,97281,97282,97286,97310,97315,97320,97324,97347,97351,97355,97360,97365],{"__ignoreMap":79},[100,97283,97284],{"class":102,"line":103},[100,97285,94657],{"class":1836},[100,97287,97288,97290,97292,97294,97296,97298,97300,97302,97304,97306,97308],{"class":102,"line":188},[100,97289,94554],{"class":258},[100,97291,1985],{"class":117},[100,97293,2145],{"class":258},[100,97295,2491],{"class":117},[100,97297,2145],{"class":258},[100,97299,1985],{"class":117},[100,97301,2145],{"class":258},[100,97303,95052],{"class":6812},[100,97305,472],{"class":471},[100,97307,1784],{"class":117},[100,97309,809],{"class":258},[100,97311,97312],{"class":102,"line":199},[100,97313,97314],{"class":1836},"#输出结果：\n",[100,97316,97317],{"class":102,"line":532},[100,97318,97319],{"class":1836},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[100,97321,97322],{"class":102,"line":577},[100,97323,95499],{"class":1836},[100,97325,97326,97329,97331,97333,97335,97338,97340,97342,97344],{"class":102,"line":589},[100,97327,97328],{"class":258},"np.array([np.arange(",[100,97330,1985],{"class":117},[100,97332,2145],{"class":258},[100,97334,748],{"class":117},[100,97336,97337],{"class":258},"),np.arange(",[100,97339,748],{"class":117},[100,97341,2145],{"class":258},[100,97343,2136],{"class":117},[100,97345,97346],{"class":258},")])\n",[100,97348,97349],{"class":102,"line":595},[100,97350,95116],{"class":1836},[100,97352,97353],{"class":102,"line":601},[100,97354,662],{"class":110},[100,97356,97357],{"class":102,"line":606},[100,97358,97359],{"class":110},"array([[1, 2, 3],\n",[100,97361,97362],{"class":102,"line":612},[100,97363,97364],{"class":110},"       [4, 5, 6]])\n",[100,97366,97367],{"class":102,"line":618},[100,97368,662],{"class":110},[14,97370,97372],{"id":97371},"_24-生态分布","2.4 生态分布",[305,97374,97376],{"id":97375},"_241-标准正态分布","2.4.1 标准正态分布",[19,97378,97379],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,97381,97382],{},[3095,97383],{"alt":79,"src":97384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[305,97386,97388],{"id":97387},"_242-常规正态分布","2.4.2 常规正态分布",[73,97390,97392],{"className":249,"code":97391,"language":251,"meta":79,"style":79},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[32,97393,97394,97399,97404,97409],{"__ignoreMap":79},[100,97395,97396],{"class":102,"line":103},[100,97397,97398],{"class":258},"random.normal(loc,scale,size)也可以生成正态分布\n",[100,97400,97401],{"class":102,"line":188},[100,97402,97403],{"class":1836},"#loc:期望\n",[100,97405,97406],{"class":102,"line":199},[100,97407,97408],{"class":1836},"#scale:方差\n",[100,97410,97411],{"class":102,"line":532},[100,97412,97413],{"class":1836},"#size:用于确定是几维的数列\n",[19,97415,97416],{},[3095,97417],{"alt":79,"src":97418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,97420,97422],{"id":97421},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,97424,97425],{},"ndim:秩，维度个数",[19,97427,97428],{},"size:数组元素的个数",[19,97430,97431],{},"shape:数组的形状",[19,97433,97434],{},"dtype:数组元素的类型",[19,97436,97437],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,97439,97440],{},"他们都是属性，通过数组.属性的形式来确定",[19,97442,97443],{},"如果需要输出多个可以通过以下方式：",[73,97445,97447],{"className":249,"code":97446,"language":251,"meta":79,"style":79},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[32,97448,97449],{"__ignoreMap":79},[100,97450,97451,97453],{"class":102,"line":103},[100,97452,1195],{"class":117},[100,97454,97455],{"class":258},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,97457,97459],{"id":97458},"_26-其他方式创建数组","2.6 其他方式创建数组",[305,97461,97463],{"id":97462},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,97465,97466],{},"①创建一维数组",[73,97468,97470],{"className":249,"code":97469,"language":251,"meta":79,"style":79},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[32,97471,97472,97481,97485,97490,97495],{"__ignoreMap":79},[100,97473,97474,97477,97479],{"class":102,"line":103},[100,97475,97476],{"class":258},"np.zeros(",[100,97478,2213],{"class":117},[100,97480,809],{"class":258},[100,97482,97483],{"class":102,"line":188},[100,97484,662],{"class":110},[100,97486,97487],{"class":102,"line":199},[100,97488,97489],{"class":110},"输出结果：\n",[100,97491,97492],{"class":102,"line":532},[100,97493,97494],{"class":110},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[100,97496,97497],{"class":102,"line":577},[100,97498,662],{"class":110},[19,97500,97501],{},"上方代码等价于：",[73,97503,97505],{"className":249,"code":97504,"language":251,"meta":79,"style":79},"np.zeros(shape=(10))#创建10个元素的0数组\n",[32,97506,97507],{"__ignoreMap":79},[100,97508,97509,97511,97514,97516,97518,97520,97522],{"class":102,"line":103},[100,97510,97476],{"class":258},[100,97512,97513],{"class":6812},"shape",[100,97515,472],{"class":471},[100,97517,713],{"class":258},[100,97519,2213],{"class":117},[100,97521,84323],{"class":258},[100,97523,97524],{"class":1836},"#创建10个元素的0数组\n",[19,97526,97527],{},"也可以指定类型",[73,97529,97531],{"className":249,"code":97530,"language":251,"meta":79,"style":79},"#指定类型\nnp.zeros(5,dtype=int)\n",[32,97532,97533,97538],{"__ignoreMap":79},[100,97534,97535],{"class":102,"line":103},[100,97536,97537],{"class":1836},"#指定类型\n",[100,97539,97540,97542,97544,97546,97548,97550,97552],{"class":102,"line":188},[100,97541,97476],{"class":258},[100,97543,2086],{"class":117},[100,97545,2145],{"class":258},[100,97547,95052],{"class":6812},[100,97549,472],{"class":471},[100,97551,1784],{"class":117},[100,97553,809],{"class":258},[19,97555,97556],{},"②创建二维数组",[73,97558,97560],{"className":249,"code":97559,"language":251,"meta":79,"style":79},"np.zeros((3,4),dtype=int)\n",[32,97561,97562],{"__ignoreMap":79},[100,97563,97564,97567,97569,97571,97573,97575,97577,97579,97581],{"class":102,"line":103},[100,97565,97566],{"class":258},"np.zeros((",[100,97568,1849],{"class":117},[100,97570,2145],{"class":258},[100,97572,748],{"class":117},[100,97574,43810],{"class":258},[100,97576,95052],{"class":6812},[100,97578,472],{"class":471},[100,97580,1784],{"class":117},[100,97582,809],{"class":258},[19,97584,97585],{},"③创建三维数组",[73,97587,97589],{"className":249,"code":97588,"language":251,"meta":79,"style":79},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[32,97590,97591,97596],{"__ignoreMap":79},[100,97592,97593],{"class":102,"line":103},[100,97594,97595],{"class":1836},"#创建三维数组\n",[100,97597,97598,97600,97602,97604,97606,97608,97610,97612,97614,97616,97618],{"class":102,"line":188},[100,97599,97566],{"class":258},[100,97601,1849],{"class":117},[100,97603,2145],{"class":258},[100,97605,748],{"class":117},[100,97607,2145],{"class":258},[100,97609,2086],{"class":117},[100,97611,43810],{"class":258},[100,97613,95052],{"class":6812},[100,97615,472],{"class":471},[100,97617,1784],{"class":117},[100,97619,809],{"class":258},[19,97621,97622],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[73,97624,97626],{"className":249,"code":97625,"language":251,"meta":79,"style":79},"#使用zeros_like将创建的一维数组变成全0的数组\na=np.arange(4)#这个得到的结果：一维数组0，1，2，3\nnp.zeros_like(a)\n#使用zeros_like将创建的二维数组变成全0的数组\naa=np.random.random(size=(4,5))\nnp.zeros_like(aa)\n",[32,97627,97628,97633,97648,97653,97658,97680],{"__ignoreMap":79},[100,97629,97630],{"class":102,"line":103},[100,97631,97632],{"class":1836},"#使用zeros_like将创建的一维数组变成全0的数组\n",[100,97634,97635,97637,97639,97641,97643,97645],{"class":102,"line":188},[100,97636,2006],{"class":258},[100,97638,472],{"class":471},[100,97640,94554],{"class":258},[100,97642,748],{"class":117},[100,97644,2196],{"class":258},[100,97646,97647],{"class":1836},"#这个得到的结果：一维数组0，1，2，3\n",[100,97649,97650],{"class":102,"line":199},[100,97651,97652],{"class":258},"np.zeros_like(a)\n",[100,97654,97655],{"class":102,"line":532},[100,97656,97657],{"class":1836},"#使用zeros_like将创建的二维数组变成全0的数组\n",[100,97659,97660,97662,97664,97666,97668,97670,97672,97674,97676,97678],{"class":102,"line":577},[100,97661,94858],{"class":258},[100,97663,472],{"class":471},[100,97665,96979],{"class":258},[100,97667,33054],{"class":6812},[100,97669,472],{"class":471},[100,97671,713],{"class":258},[100,97673,748],{"class":117},[100,97675,2145],{"class":258},[100,97677,2086],{"class":117},[100,97679,751],{"class":258},[100,97681,97682],{"class":102,"line":589},[100,97683,97684],{"class":258},"np.zeros_like(aa)\n",[305,97686,97688],{"id":97687},"_262-ones创建数组","2.6.2 ones()创建数组",[19,97690,97691],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[305,97693,97695],{"id":97694},"_263-empty创建数组","2.6.3 empty()创建数组",[19,97697,97698],{},"①empty()用法",[73,97700,97702],{"className":249,"code":97701,"language":251,"meta":79,"style":79},"numpy.empty(shape,dtype=float,order='c')\n",[32,97703,97704],{"__ignoreMap":79},[100,97705,97706,97709,97711,97713,97715,97717,97719,97721,97723],{"class":102,"line":103},[100,97707,97708],{"class":258},"numpy.empty(shape,",[100,97710,95052],{"class":6812},[100,97712,472],{"class":471},[100,97714,1819],{"class":117},[100,97716,2145],{"class":258},[100,97718,96849],{"class":6812},[100,97720,472],{"class":471},[100,97722,77582],{"class":110},[100,97724,809],{"class":258},[19,97726,97727],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,97729,97730],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,97732,97733],{},[3095,97734],{"alt":79,"src":97735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,97737,97738],{},"②empty()用法",[73,97740,97742],{"className":249,"code":97741,"language":251,"meta":79,"style":79},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[32,97743,97744,97765,97777,97798,97803],{"__ignoreMap":79},[100,97745,97746,97748,97750,97753,97755,97757,97759,97761,97763],{"class":102,"line":103},[100,97747,2611],{"class":258},[100,97749,472],{"class":471},[100,97751,97752],{"class":258},"np.empty(",[100,97754,2213],{"class":117},[100,97756,2145],{"class":258},[100,97758,95052],{"class":6812},[100,97760,472],{"class":471},[100,97762,1784],{"class":117},[100,97764,809],{"class":258},[100,97766,97767,97769,97771,97773,97775],{"class":102,"line":188},[100,97768,2586],{"class":258},[100,97770,472],{"class":471},[100,97772,94554],{"class":258},[100,97774,2086],{"class":117},[100,97776,809],{"class":258},[100,97778,97779,97782,97784,97787,97789,97791,97794,97796],{"class":102,"line":199},[100,97780,97781],{"class":258},"np.add(",[100,97783,465],{"class":117},[100,97785,97786],{"class":258},",x,",[100,97788,94606],{"class":6812},[100,97790,472],{"class":471},[100,97792,97793],{"class":258},"y[:",[100,97795,2086],{"class":117},[100,97797,6255],{"class":258},[100,97799,97800],{"class":102,"line":532},[100,97801,97802],{"class":1836},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[100,97804,97805],{"class":102,"line":577},[100,97806,97807],{"class":258},"y\n",[19,97809,13096],{},[19,97811,97812],{},[3095,97813],{"alt":79,"src":97814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[73,97816,97818],{"className":249,"code":97817,"language":251,"meta":79,"style":79},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[32,97819,97820,97836,97856,97871],{"__ignoreMap":79},[100,97821,97822,97824,97826,97828,97830,97832,97834],{"class":102,"line":103},[100,97823,2586],{"class":258},[100,97825,472],{"class":471},[100,97827,94554],{"class":258},[100,97829,1985],{"class":117},[100,97831,2145],{"class":258},[100,97833,2111],{"class":117},[100,97835,809],{"class":258},[100,97837,97838,97840,97842,97844,97846,97848,97850,97852,97854],{"class":102,"line":188},[100,97839,2611],{"class":258},[100,97841,472],{"class":471},[100,97843,97752],{"class":258},[100,97845,2086],{"class":117},[100,97847,2145],{"class":258},[100,97849,95052],{"class":6812},[100,97851,472],{"class":471},[100,97853,1784],{"class":117},[100,97855,809],{"class":258},[100,97857,97858,97861,97863,97865,97867,97869],{"class":102,"line":199},[100,97859,97860],{"class":258},"np.add(x,",[100,97862,465],{"class":117},[100,97864,2145],{"class":258},[100,97866,94606],{"class":6812},[100,97868,472],{"class":471},[100,97870,95001],{"class":258},[100,97872,97873],{"class":102,"line":532},[100,97874,97875],{"class":1836},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,97877,97878],{},"③empty_like()",[19,97880,97881],{},[1921,97882,97883,97884,97889],{},"创建一个",[1921,97885,97886],{},[1921,97887,97888],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,97891,97892,97895],{},[32,97893,97894],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,97897,97898],{},[3095,97899],{"alt":79,"src":97900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[305,97902,97904],{"id":97903},"_264-用法","2.6.4 ？？用法",[19,97906,97907],{},"当想查看一个函数的参数时，可以通过？？来实现",[73,97909,97911],{"className":249,"code":97910,"language":251,"meta":79,"style":79},"np.full??\n",[32,97912,97913],{"__ignoreMap":79},[100,97914,97915,97918],{"class":102,"line":103},[100,97916,97917],{"class":258},"np.full",[100,97919,97920],{"class":78957},"??\n",[305,97922,97924],{"id":97923},"_265-full创建数组","2.6.5 full()创建数组",[73,97926,97928],{"className":249,"code":97927,"language":251,"meta":79,"style":79},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[32,97929,97930,97935],{"__ignoreMap":79},[100,97931,97932],{"class":102,"line":103},[100,97933,97934],{"class":258},"full(shape,fill_value)\n",[100,97936,97937],{"class":102,"line":188},[100,97938,97939],{"class":258},"创建全为某个指定值的数组\n",[19,97941,96082],{},[73,97943,97945],{"className":249,"code":97944,"language":251,"meta":79,"style":79},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[32,97946,97947,97952],{"__ignoreMap":79},[100,97948,97949],{"class":102,"line":103},[100,97950,97951],{"class":1836},"#创建一个一维数组,以20进行填充\n",[100,97953,97954,97957,97959,97961,97963],{"class":102,"line":188},[100,97955,97956],{"class":258},"np.full(",[100,97958,2213],{"class":117},[100,97960,2145],{"class":258},[100,97962,2466],{"class":117},[100,97964,809],{"class":258},[19,97966,94843],{},[73,97968,97970],{"className":249,"code":97969,"language":251,"meta":79,"style":79},"#创建二维数组\nnp.full((3,5),11)\n",[32,97971,97972,97976],{"__ignoreMap":79},[100,97973,97974],{"class":102,"line":103},[100,97975,95499],{"class":1836},[100,97977,97978,97981,97983,97985,97987,97989,97991],{"class":102,"line":188},[100,97979,97980],{"class":258},"np.full((",[100,97982,1849],{"class":117},[100,97984,2145],{"class":258},[100,97986,2086],{"class":117},[100,97988,43810],{"class":258},[100,97990,2239],{"class":117},[100,97992,809],{"class":258},[19,97994,97995],{},"③full_like用法",[19,97997,97998],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,98000,98001],{},"这里是指定填充而已",[73,98003,98005],{"className":249,"code":98004,"language":251,"meta":79,"style":79},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[32,98006,98007,98012,98036,98041],{"__ignoreMap":79},[100,98008,98009],{"class":102,"line":103},[100,98010,98011],{"class":1836},"#创建一个指定形状数组\n",[100,98013,98014,98016,98018,98020,98022,98024,98026,98028,98030,98032,98034],{"class":102,"line":188},[100,98015,2006],{"class":258},[100,98017,472],{"class":471},[100,98019,94554],{"class":258},[100,98021,1985],{"class":117},[100,98023,2145],{"class":258},[100,98025,2092],{"class":117},[100,98027,94559],{"class":258},[100,98029,748],{"class":117},[100,98031,2145],{"class":258},[100,98033,2187],{"class":117},[100,98035,809],{"class":258},[100,98037,98038],{"class":102,"line":199},[100,98039,98040],{"class":1836},"#进行指定填充\n",[100,98042,98043,98046,98048],{"class":102,"line":532},[100,98044,98045],{"class":258},"np.full_like(a,",[100,98047,2213],{"class":117},[100,98049,809],{"class":258},[19,98051,13096],{},[19,98053,98054],{},[3095,98055],{"alt":79,"src":98056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[305,98058,98060],{"id":98059},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[23579,98062,98064],{"id":98063},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[73,98066,98068],{"className":249,"code":98067,"language":251,"meta":79,"style":79},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[32,98069,98070,98087],{"__ignoreMap":79},[100,98071,98072,98075,98077,98079,98081,98083,98085],{"class":102,"line":103},[100,98073,98074],{"class":258},"np.eye(",[100,98076,748],{"class":117},[100,98078,2145],{"class":258},[100,98080,95052],{"class":6812},[100,98082,472],{"class":471},[100,98084,1784],{"class":117},[100,98086,809],{"class":258},[100,98088,98089],{"class":102,"line":188},[100,98090,98091],{"class":1836},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[23579,98093,98095],{"id":98094},"_2662-法2identity","2.6.6.2 法2：identity()",[73,98097,98099],{"className":249,"code":98098,"language":251,"meta":79,"style":79},"#identity()\nnp.identity(5,dtype=int)\n",[32,98100,98101,98106],{"__ignoreMap":79},[100,98102,98103],{"class":102,"line":103},[100,98104,98105],{"class":1836},"#identity()\n",[100,98107,98108,98111,98113,98115,98117,98119,98121],{"class":102,"line":188},[100,98109,98110],{"class":258},"np.identity(",[100,98112,2086],{"class":117},[100,98114,2145],{"class":258},[100,98116,95052],{"class":6812},[100,98118,472],{"class":471},[100,98120,1784],{"class":117},[100,98122,809],{"class":258},[19,98124,98125],{},"两个函数是有区别的",[19,98127,98128],{},[3095,98129],{"alt":79,"src":98130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,98132,98133],{},[3095,98134],{"alt":79,"src":98135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[73,98137,98139],{"className":249,"code":98138,"language":251,"meta":79,"style":79},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\nnp.eye(3, 4)\n# 输出:\n# [[1. 0. 0. 0.]\n#  [0. 1. 0. 0.]\n#  [0. 0. 1. 0.]]\n\n# 对角线向上偏移1\nnp.eye(3, 4, k=1)\n# 输出:\n# [[0. 1. 0. 0.]\n#  [0. 0. 1. 0.]\n#  [0. 0. 0. 1.]]\n\n",[32,98140,98141,98146,98158,98163,98168,98173,98178,98182,98187,98207,98211,98216,98221],{"__ignoreMap":79},[100,98142,98143],{"class":102,"line":103},[100,98144,98145],{"class":1836},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[100,98147,98148,98150,98152,98154,98156],{"class":102,"line":188},[100,98149,98074],{"class":258},[100,98151,1849],{"class":117},[100,98153,14017],{"class":258},[100,98155,748],{"class":117},[100,98157,809],{"class":258},[100,98159,98160],{"class":102,"line":199},[100,98161,98162],{"class":1836},"# 输出:\n",[100,98164,98165],{"class":102,"line":532},[100,98166,98167],{"class":1836},"# [[1. 0. 0. 0.]\n",[100,98169,98170],{"class":102,"line":577},[100,98171,98172],{"class":1836},"#  [0. 1. 0. 0.]\n",[100,98174,98175],{"class":102,"line":589},[100,98176,98177],{"class":1836},"#  [0. 0. 1. 0.]]\n",[100,98179,98180],{"class":102,"line":595},[100,98181,570],{"emptyLinePlaceholder":569},[100,98183,98184],{"class":102,"line":601},[100,98185,98186],{"class":1836},"# 对角线向上偏移1\n",[100,98188,98189,98191,98193,98195,98197,98199,98201,98203,98205],{"class":102,"line":606},[100,98190,98074],{"class":258},[100,98192,1849],{"class":117},[100,98194,14017],{"class":258},[100,98196,748],{"class":117},[100,98198,14017],{"class":258},[100,98200,2260],{"class":6812},[100,98202,472],{"class":471},[100,98204,1985],{"class":117},[100,98206,809],{"class":258},[100,98208,98209],{"class":102,"line":612},[100,98210,98162],{"class":1836},[100,98212,98213],{"class":102,"line":618},[100,98214,98215],{"class":1836},"# [[0. 1. 0. 0.]\n",[100,98217,98218],{"class":102,"line":623},[100,98219,98220],{"class":1836},"#  [0. 0. 1. 0.]\n",[100,98222,98223],{"class":102,"line":629},[100,98224,98225],{"class":1836},"#  [0. 0. 0. 1.]]\n",[305,98227,98229],{"id":98228},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[73,98231,98233],{"className":249,"code":98232,"language":251,"meta":79,"style":79},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n\"\"\"\nnp.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n参数介绍：\nstart：序列的起始值\nstop:序列的终止值，如果endpoint为True，该值包含数列中\nnum：要生长的等步长的样本数量，默认为50\nendpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\nretstep：如果为True时，生长的数组中会显示间距，反之不显示\ndtype：ndarry的数据类型\n\"\"\"\n",[32,98234,98235,98240,98244,98249,98254,98259,98264,98269,98274,98279,98284],{"__ignoreMap":79},[100,98236,98237],{"class":102,"line":103},[100,98238,98239],{"class":1836},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[100,98241,98242],{"class":102,"line":188},[100,98243,662],{"class":110},[100,98245,98246],{"class":102,"line":199},[100,98247,98248],{"class":110},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[100,98250,98251],{"class":102,"line":532},[100,98252,98253],{"class":110},"参数介绍：\n",[100,98255,98256],{"class":102,"line":577},[100,98257,98258],{"class":110},"start：序列的起始值\n",[100,98260,98261],{"class":102,"line":589},[100,98262,98263],{"class":110},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[100,98265,98266],{"class":102,"line":595},[100,98267,98268],{"class":110},"num：要生长的等步长的样本数量，默认为50\n",[100,98270,98271],{"class":102,"line":601},[100,98272,98273],{"class":110},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[100,98275,98276],{"class":102,"line":606},[100,98277,98278],{"class":110},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[100,98280,98281],{"class":102,"line":612},[100,98282,98283],{"class":110},"dtype：ndarry的数据类型\n",[100,98285,98286],{"class":102,"line":618},[100,98287,662],{"class":110},[19,98289,98290],{},[3095,98291],{"alt":79,"src":98292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,98294,98295],{},"这里num=是可以省略的",[19,98297,98298],{},"也就是下方两行代码结果是一模一样的",[73,98300,98302],{"className":249,"code":98301,"language":251,"meta":79,"style":79},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[32,98303,98304,98321],{"__ignoreMap":79},[100,98305,98306,98309,98311,98313,98315,98317,98319],{"class":102,"line":103},[100,98307,98308],{"class":258},"np.linspace(",[100,98310,1985],{"class":117},[100,98312,2145],{"class":258},[100,98314,2086],{"class":117},[100,98316,2145],{"class":258},[100,98318,2086],{"class":117},[100,98320,809],{"class":258},[100,98322,98323,98325,98327,98329,98331,98333,98335,98337,98339],{"class":102,"line":188},[100,98324,98308],{"class":258},[100,98326,1985],{"class":117},[100,98328,2145],{"class":258},[100,98330,2086],{"class":117},[100,98332,2145],{"class":258},[100,98334,3290],{"class":6812},[100,98336,472],{"class":471},[100,98338,2086],{"class":117},[100,98340,809],{"class":258},[305,98342,98344],{"id":98343},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[73,98346,98348],{"className":249,"code":98347,"language":251,"meta":79,"style":79},"#logspace函数用于创建一个等比数列，格式如下：\n\"\"\"\nnp.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n参数为：\nstart:序列的起始位置为：base**start\nstop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\nnum：要生长的等步长的样本数量，默认为50\nendpoint：是否包含 stop 这个值，默认是 True\nbase：对数的底数，默认是 10（常见对数）\ndtype：ndarry的数据类型\n\"\"\"\n",[32,98349,98350,98355,98359,98364,98369,98374,98379,98383,98388,98393,98397],{"__ignoreMap":79},[100,98351,98352],{"class":102,"line":103},[100,98353,98354],{"class":1836},"#logspace函数用于创建一个等比数列，格式如下：\n",[100,98356,98357],{"class":102,"line":188},[100,98358,662],{"class":110},[100,98360,98361],{"class":102,"line":199},[100,98362,98363],{"class":110},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[100,98365,98366],{"class":102,"line":532},[100,98367,98368],{"class":110},"参数为：\n",[100,98370,98371],{"class":102,"line":577},[100,98372,98373],{"class":110},"start:序列的起始位置为：base**start\n",[100,98375,98376],{"class":102,"line":589},[100,98377,98378],{"class":110},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[100,98380,98381],{"class":102,"line":595},[100,98382,98268],{"class":110},[100,98384,98385],{"class":102,"line":601},[100,98386,98387],{"class":110},"endpoint：是否包含 stop 这个值，默认是 True\n",[100,98389,98390],{"class":102,"line":606},[100,98391,98392],{"class":110},"base：对数的底数，默认是 10（常见对数）\n",[100,98394,98395],{"class":102,"line":612},[100,98396,98283],{"class":110},[100,98398,98399],{"class":102,"line":618},[100,98400,662],{"class":110},[19,98402,98403],{},[3095,98404],{"alt":79,"src":98405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,98407,98408],{},"logspace()函数中的num参数也是可以不写num=的",[19,98410,98411],{},"endpoint是不可以省略的",[1677,98413,98414],{},"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":79,"searchDepth":188,"depth":188,"links":98416},[98417,98421,98426,98430,98434,98435],{"id":96808,"depth":188,"text":96809,"children":98418},[98419,98420],{"id":96812,"depth":199,"text":96813},{"id":96885,"depth":199,"text":96886},{"id":96917,"depth":188,"text":96918,"children":98422},[98423,98424,98425],{"id":96921,"depth":199,"text":96922},{"id":97103,"depth":199,"text":97104},{"id":97181,"depth":199,"text":97182},{"id":97216,"depth":188,"text":97217,"children":98427},[98428,98429],{"id":97220,"depth":199,"text":97221},{"id":97275,"depth":199,"text":97276},{"id":97371,"depth":188,"text":97372,"children":98431},[98432,98433],{"id":97375,"depth":199,"text":97376},{"id":97387,"depth":199,"text":97388},{"id":97421,"depth":188,"text":97422},{"id":97458,"depth":188,"text":97459,"children":98436},[98437,98438,98439,98440,98441,98442,98443,98444],{"id":97462,"depth":199,"text":97463},{"id":97687,"depth":199,"text":97688},{"id":97694,"depth":199,"text":97695},{"id":97903,"depth":199,"text":97904},{"id":97923,"depth":199,"text":97924},{"id":98059,"depth":199,"text":98060},{"id":98228,"depth":199,"text":98229},{"id":98343,"depth":199,"text":98344},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":96800,"description":24958},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":98451,"title":98452,"body":98453,"description":24958,"extension":1708,"meta":98546,"navigation":569,"path":98547,"seo":98548,"stem":98549,"__hash__":98550},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":98454,"toc":98544},[98455,98458,98461,98464,98467,98470,98473,98476,98479,98482,98485,98488,98490,98493,98496,98501,98504,98507,98541],[10,98456,98452],{"id":98457},"_20魔法命令mprun",[19,98459,98460],{},"逐行分析数据内存的使用情况",[19,98462,98463],{},"语法格式：",[19,98465,98466],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,98468,98469],{},"分析结果列如下：",[19,98471,98472],{},"Line行号",[19,98474,98475],{},"Mem usage内存使用大小",[19,98477,98478],{},"increment内存增量",[19,98480,98481],{},"Line content代码内容",[19,98483,98484],{},"补充说明：",[19,98486,98487],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,98489,96755],{},[19,98491,98492],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,98494,98495],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,98497,98498],{},[3095,98499],{"alt":79,"src":98500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,98502,98503],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,98505,98506],{},"这时候需要重新加载模块",[73,98508,98510],{"className":249,"code":98509,"language":251,"meta":79,"style":79},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[32,98511,98512,98517,98524,98529],{"__ignoreMap":79},[100,98513,98514],{"class":102,"line":103},[100,98515,98516],{"class":1836},"#重新加载模块\n",[100,98518,98519,98521],{"class":102,"line":188},[100,98520,548],{"class":471},[100,98522,98523],{"class":258}," importlib\n",[100,98525,98526],{"class":102,"line":199},[100,98527,98528],{"class":258},"importlib.reload(mprun_test)\n",[100,98530,98531,98533,98536,98538],{"class":102,"line":532},[100,98532,2095],{"class":471},[100,98534,98535],{"class":258},"mprun ",[100,98537,2299],{"class":471},[100,98539,98540],{"class":258},"f mprun_test.fun_test mprun_test.fun_test()\n",[1677,98542,98543],{},"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":79,"searchDepth":188,"depth":188,"links":98545},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":98452,"description":24958},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":98552,"title":98553,"body":98554,"description":24958,"extension":1708,"meta":98571,"navigation":569,"path":98572,"seo":98573,"stem":98574,"__hash__":98575},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":98555,"toc":98569},[98556,98559,98564],[10,98557,98553],{"id":98558},"_3一维数组的索引和切片",[19,98560,98561],{},[3095,98562],{"alt":79,"src":98563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,98565,98566],{},[3095,98567],{"alt":79,"src":98568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":79,"searchDepth":188,"depth":188,"links":98570},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":98553,"description":24958},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":98577,"title":98578,"body":98579,"description":24958,"extension":1708,"meta":99062,"navigation":569,"path":99063,"seo":99064,"stem":99065,"__hash__":99066},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":98580,"toc":99060},[98581,98584,98587,98592,98625,98628,98666,98669,98703,98706,98811,98814,98851,98854,98955,98958,99009,99012,99054,99057],[10,98582,98578],{"id":98583},"_4二维数组的索引与切片",[19,98585,98586],{},"①获取指定单个元素",[19,98588,98589],{},[3095,98590],{"alt":79,"src":98591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[73,98593,98595],{"className":249,"code":98594,"language":251,"meta":79,"style":79},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[32,98596,98597,98602,98607,98612],{"__ignoreMap":79},[100,98598,98599],{"class":102,"line":103},[100,98600,98601],{"class":1836},"#获取元素9\n",[100,98603,98604],{"class":102,"line":188},[100,98605,98606],{"class":1836},"#先获取所在行，再获取所在列\n",[100,98608,98609],{"class":102,"line":199},[100,98610,98611],{"class":1836},"#数组[行索引号，列索引号]\n",[100,98613,98614,98617,98619,98621,98623],{"class":102,"line":532},[100,98615,98616],{"class":258},"a[",[100,98618,1985],{"class":117},[100,98620,2145],{"class":258},[100,98622,465],{"class":117},[100,98624,34802],{"class":258},[19,98626,98627],{},"②获取整行元素",[73,98629,98631],{"className":249,"code":98630,"language":251,"meta":79,"style":79},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[32,98632,98633,98638,98643,98651,98656],{"__ignoreMap":79},[100,98634,98635],{"class":102,"line":103},[100,98636,98637],{"class":1836},"#获取整行 数组[行索引号]\n",[100,98639,98640],{"class":102,"line":188},[100,98641,98642],{"class":1836},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[100,98644,98645,98647,98649],{"class":102,"line":199},[100,98646,98616],{"class":258},[100,98648,465],{"class":117},[100,98650,34802],{"class":258},[100,98652,98653],{"class":102,"line":532},[100,98654,98655],{"class":1836},"#也可以负索引获取一行\n",[100,98657,98658,98660,98662,98664],{"class":102,"line":577},[100,98659,98616],{"class":258},[100,98661,2299],{"class":471},[100,98663,1985],{"class":117},[100,98665,34802],{"class":258},[19,98667,98668],{},"③获取整列元素",[73,98670,98672],{"className":249,"code":98671,"language":251,"meta":79,"style":79},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[32,98673,98674,98679,98688,98693],{"__ignoreMap":79},[100,98675,98676],{"class":102,"line":103},[100,98677,98678],{"class":1836},"#获取整列 数组名[:,列索引]\n",[100,98680,98681,98684,98686],{"class":102,"line":188},[100,98682,98683],{"class":258},"a[:,",[100,98685,465],{"class":117},[100,98687,34802],{"class":258},[100,98689,98690],{"class":102,"line":199},[100,98691,98692],{"class":1836},"#也可以负索引获取一列\n",[100,98694,98695,98697,98699,98701],{"class":102,"line":532},[100,98696,98683],{"class":258},[100,98698,2299],{"class":471},[100,98700,1985],{"class":117},[100,98702,34802],{"class":258},[19,98704,98705],{},"④部分行部分列的元素",[73,98707,98709],{"className":249,"code":98708,"language":251,"meta":79,"style":79},"#部分行部分列 数组名[行切片，列切片]\na[:2,:]\n#结果：\n'''\narray([[ 1,  2,  3,  4,  5,  6],\n       [ 7,  8,  9, 10, 11, 12]])\n'''\na[:,1:4]\n#结果：\n'''\narray([[ 2,  3,  4],\n       [ 8,  9, 10],\n       [14, 15, 16],\n       [20, 21, 22]])\n'''\n#对列行同时进行切片，使用了step参数\na[::2,::2]\n",[32,98710,98711,98716,98726,98730,98734,98739,98744,98748,98760,98764,98768,98773,98778,98783,98788,98792,98797],{"__ignoreMap":79},[100,98712,98713],{"class":102,"line":103},[100,98714,98715],{"class":1836},"#部分行部分列 数组名[行切片，列切片]\n",[100,98717,98718,98721,98723],{"class":102,"line":188},[100,98719,98720],{"class":258},"a[:",[100,98722,465],{"class":117},[100,98724,98725],{"class":258},",:]\n",[100,98727,98728],{"class":102,"line":199},[100,98729,95116],{"class":1836},[100,98731,98732],{"class":102,"line":532},[100,98733,95480],{"class":110},[100,98735,98736],{"class":102,"line":577},[100,98737,98738],{"class":110},"array([[ 1,  2,  3,  4,  5,  6],\n",[100,98740,98741],{"class":102,"line":589},[100,98742,98743],{"class":110},"       [ 7,  8,  9, 10, 11, 12]])\n",[100,98745,98746],{"class":102,"line":595},[100,98747,95480],{"class":110},[100,98749,98750,98752,98754,98756,98758],{"class":102,"line":601},[100,98751,98683],{"class":258},[100,98753,1985],{"class":117},[100,98755,2625],{"class":258},[100,98757,748],{"class":117},[100,98759,34802],{"class":258},[100,98761,98762],{"class":102,"line":606},[100,98763,95116],{"class":1836},[100,98765,98766],{"class":102,"line":612},[100,98767,95480],{"class":110},[100,98769,98770],{"class":102,"line":618},[100,98771,98772],{"class":110},"array([[ 2,  3,  4],\n",[100,98774,98775],{"class":102,"line":623},[100,98776,98777],{"class":110},"       [ 8,  9, 10],\n",[100,98779,98780],{"class":102,"line":629},[100,98781,98782],{"class":110},"       [14, 15, 16],\n",[100,98784,98785],{"class":102,"line":635},[100,98786,98787],{"class":110},"       [20, 21, 22]])\n",[100,98789,98790],{"class":102,"line":641},[100,98791,95480],{"class":110},[100,98793,98794],{"class":102,"line":647},[100,98795,98796],{"class":1836},"#对列行同时进行切片，使用了step参数\n",[100,98798,98799,98802,98804,98807,98809],{"class":102,"line":653},[100,98800,98801],{"class":258},"a[::",[100,98803,465],{"class":117},[100,98805,98806],{"class":258},",::",[100,98808,465],{"class":117},[100,98810,34802],{"class":258},[19,98812,98813],{},"⑤同时获取两个元素",[73,98815,98817],{"className":249,"code":98816,"language":251,"meta":79,"style":79},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[32,98818,98819,98824,98829],{"__ignoreMap":79},[100,98820,98821],{"class":102,"line":103},[100,98822,98823],{"class":1836},"#同时获取第三行第二列，第四行第一列\n",[100,98825,98826],{"class":102,"line":188},[100,98827,98828],{"class":1836},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[100,98830,98831,98834,98836,98838,98840,98842,98844,98846,98848],{"class":102,"line":199},[100,98832,98833],{"class":258},"a[(",[100,98835,465],{"class":117},[100,98837,2145],{"class":258},[100,98839,1849],{"class":117},[100,98841,43801],{"class":258},[100,98843,1985],{"class":117},[100,98845,2145],{"class":258},[100,98847,1366],{"class":117},[100,98849,98850],{"class":258},")]\n",[19,98852,98853],{},"⑥切片，对行进行反向获取",[73,98855,98857],{"className":249,"code":98856,"language":251,"meta":79,"style":79},"#切片 对所有行进行反向获取\na[::-1]\n#结果：\n'''\narray([[19, 20, 21, 22, 23, 24],\n       [13, 14, 15, 16, 17, 18],\n       [ 7,  8,  9, 10, 11, 12],\n       [ 1,  2,  3,  4,  5,  6]])\n'''\n#对行列都进行反向切片获取\na[::-1,::-1]\n'''\narray([[24, 23, 22, 21, 20, 19],\n       [18, 17, 16, 15, 14, 13],\n       [12, 11, 10,  9,  8,  7],\n       [ 6,  5,  4,  3,  2,  1]])\n'''\n",[32,98858,98859,98864,98874,98878,98882,98887,98892,98897,98902,98906,98911,98927,98931,98936,98941,98946,98951],{"__ignoreMap":79},[100,98860,98861],{"class":102,"line":103},[100,98862,98863],{"class":1836},"#切片 对所有行进行反向获取\n",[100,98865,98866,98868,98870,98872],{"class":102,"line":188},[100,98867,98801],{"class":258},[100,98869,2299],{"class":471},[100,98871,1985],{"class":117},[100,98873,34802],{"class":258},[100,98875,98876],{"class":102,"line":199},[100,98877,95116],{"class":1836},[100,98879,98880],{"class":102,"line":532},[100,98881,95480],{"class":110},[100,98883,98884],{"class":102,"line":577},[100,98885,98886],{"class":110},"array([[19, 20, 21, 22, 23, 24],\n",[100,98888,98889],{"class":102,"line":589},[100,98890,98891],{"class":110},"       [13, 14, 15, 16, 17, 18],\n",[100,98893,98894],{"class":102,"line":595},[100,98895,98896],{"class":110},"       [ 7,  8,  9, 10, 11, 12],\n",[100,98898,98899],{"class":102,"line":601},[100,98900,98901],{"class":110},"       [ 1,  2,  3,  4,  5,  6]])\n",[100,98903,98904],{"class":102,"line":606},[100,98905,95480],{"class":110},[100,98907,98908],{"class":102,"line":612},[100,98909,98910],{"class":1836},"#对行列都进行反向切片获取\n",[100,98912,98913,98915,98917,98919,98921,98923,98925],{"class":102,"line":618},[100,98914,98801],{"class":258},[100,98916,2299],{"class":471},[100,98918,1985],{"class":117},[100,98920,98806],{"class":258},[100,98922,2299],{"class":471},[100,98924,1985],{"class":117},[100,98926,34802],{"class":258},[100,98928,98929],{"class":102,"line":623},[100,98930,95480],{"class":110},[100,98932,98933],{"class":102,"line":629},[100,98934,98935],{"class":110},"array([[24, 23, 22, 21, 20, 19],\n",[100,98937,98938],{"class":102,"line":635},[100,98939,98940],{"class":110},"       [18, 17, 16, 15, 14, 13],\n",[100,98942,98943],{"class":102,"line":641},[100,98944,98945],{"class":110},"       [12, 11, 10,  9,  8,  7],\n",[100,98947,98948],{"class":102,"line":647},[100,98949,98950],{"class":110},"       [ 6,  5,  4,  3,  2,  1]])\n",[100,98952,98953],{"class":102,"line":653},[100,98954,95480],{"class":110},[19,98956,98957],{},"⑦修改元素",[73,98959,98961],{"className":249,"code":98960,"language":251,"meta":79,"style":79},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[32,98962,98963,98968,98986,98991],{"__ignoreMap":79},[100,98964,98965],{"class":102,"line":103},[100,98966,98967],{"class":1836},"#获取前两行和前两列\n",[100,98969,98970,98973,98975,98977,98979,98982,98984],{"class":102,"line":188},[100,98971,98972],{"class":258},"sub_a",[100,98974,472],{"class":471},[100,98976,98720],{"class":258},[100,98978,465],{"class":117},[100,98980,98981],{"class":258},",:",[100,98983,465],{"class":117},[100,98985,34802],{"class":258},[100,98987,98988],{"class":102,"line":199},[100,98989,98990],{"class":1836},"#修改sub_a第一个元素的值\n",[100,98992,98993,98996,98998,99000,99002,99004,99006],{"class":102,"line":532},[100,98994,98995],{"class":258},"sub_a[",[100,98997,1366],{"class":117},[100,98999,2145],{"class":258},[100,99001,1366],{"class":117},[100,99003,2706],{"class":258},[100,99005,472],{"class":471},[100,99007,99008],{"class":117},"100\n",[19,99010,99011],{},"⑧数组复制copy()",[73,99013,99015],{"className":249,"code":99014,"language":251,"meta":79,"style":79},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[32,99016,99017,99022,99032,99037],{"__ignoreMap":79},[100,99018,99019],{"class":102,"line":103},[100,99020,99021],{"class":1836},"#数组复制\n",[100,99023,99024,99027,99029],{"class":102,"line":188},[100,99025,99026],{"class":258},"copy_a",[100,99028,472],{"class":471},[100,99030,99031],{"class":258},"np.copy(sub_a)\n",[100,99033,99034],{"class":102,"line":199},[100,99035,99036],{"class":1836},"#修改copy_a后不影响原数组\n",[100,99038,99039,99042,99044,99046,99048,99050,99052],{"class":102,"line":532},[100,99040,99041],{"class":258},"copy_a[",[100,99043,1366],{"class":117},[100,99045,2145],{"class":258},[100,99047,1366],{"class":117},[100,99049,2706],{"class":258},[100,99051,472],{"class":471},[100,99053,99008],{"class":117},[19,99055,99056],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[1677,99058,99059],{},"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":79,"searchDepth":188,"depth":188,"links":99061},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":98578,"description":24958},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":99068,"title":99069,"body":99070,"description":24958,"extension":1708,"meta":99562,"navigation":569,"path":99563,"seo":99564,"stem":99565,"__hash__":99566},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":99071,"toc":99554},[99072,99075,99079,99082,99085,99138,99141,99166,99169,99188,99208,99211,99227,99231,99277,99281,99323,99327,99330,99333,99336,99339,99342,99404,99464,99468,99471,99528,99532,99537,99546,99551],[10,99073,99069],{"id":99074},"_5改变数组的维度",[14,99076,99078],{"id":99077},"_51-使用reshape","5.1 使用reshape()",[19,99080,99081],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,99083,99084],{},"①一维数组转换为二维数组",[73,99086,99088],{"className":249,"code":99087,"language":251,"meta":79,"style":79},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[32,99089,99090,99106,99111,99116,99121],{"__ignoreMap":79},[100,99091,99092,99094,99096,99098,99100,99102,99104],{"class":102,"line":103},[100,99093,2006],{"class":258},[100,99095,472],{"class":471},[100,99097,94554],{"class":258},[100,99099,1985],{"class":117},[100,99101,2145],{"class":258},[100,99103,2290],{"class":117},[100,99105,809],{"class":258},[100,99107,99108],{"class":102,"line":188},[100,99109,99110],{"class":1836},"#将一维数组进行转换\n",[100,99112,99113],{"class":102,"line":199},[100,99114,99115],{"class":1836},"#注意点：元素个数不可以变\n",[100,99117,99118],{"class":102,"line":532},[100,99119,99120],{"class":1836},"#转换维度要保持一致，不一致就异常！！！\n",[100,99122,99123,99125,99127,99130,99132,99134,99136],{"class":102,"line":577},[100,99124,94858],{"class":258},[100,99126,472],{"class":471},[100,99128,99129],{"class":258},"a.reshape(",[100,99131,465],{"class":117},[100,99133,2145],{"class":258},[100,99135,2111],{"class":117},[100,99137,809],{"class":258},[19,99139,99140],{},"②一维数组转换为三维数组",[73,99142,99144],{"className":249,"code":99143,"language":251,"meta":79,"style":79},"aaa=a.reshape(2,3,2)\n",[32,99145,99146],{"__ignoreMap":79},[100,99147,99148,99150,99152,99154,99156,99158,99160,99162,99164],{"class":102,"line":103},[100,99149,97073],{"class":258},[100,99151,472],{"class":471},[100,99153,99129],{"class":258},[100,99155,465],{"class":117},[100,99157,2145],{"class":258},[100,99159,1849],{"class":117},[100,99161,2145],{"class":258},[100,99163,465],{"class":117},[100,99165,809],{"class":258},[19,99167,99168],{},"③二维数组转化为一维数组",[73,99170,99172],{"className":249,"code":99171,"language":251,"meta":79,"style":79},"#知道元素个数：\naa.reshape(12)\n",[32,99173,99174,99179],{"__ignoreMap":79},[100,99175,99176],{"class":102,"line":103},[100,99177,99178],{"class":1836},"#知道元素个数：\n",[100,99180,99181,99184,99186],{"class":102,"line":188},[100,99182,99183],{"class":258},"aa.reshape(",[100,99185,2265],{"class":117},[100,99187,809],{"class":258},[73,99189,99191],{"className":249,"code":99190,"language":251,"meta":79,"style":79},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[32,99192,99193,99198],{"__ignoreMap":79},[100,99194,99195],{"class":102,"line":103},[100,99196,99197],{"class":1836},"#不知道元素个数，参数传递-1\n",[100,99199,99200,99202,99204,99206],{"class":102,"line":188},[100,99201,99183],{"class":258},[100,99203,2299],{"class":471},[100,99205,1985],{"class":117},[100,99207,809],{"class":258},[19,99209,99210],{},"④三维数组转换为一维数组",[73,99212,99214],{"className":249,"code":99213,"language":251,"meta":79,"style":79},"aaa.reshape(-1)\n",[32,99215,99216],{"__ignoreMap":79},[100,99217,99218,99221,99223,99225],{"class":102,"line":103},[100,99219,99220],{"class":258},"aaa.reshape(",[100,99222,2299],{"class":471},[100,99224,1985],{"class":117},[100,99226,809],{"class":258},[14,99228,99230],{"id":99229},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[73,99232,99234],{"className":249,"code":99233,"language":251,"meta":79,"style":79},"aa=np.arange(1,13).reshape(2,6)#转换为2行6列的数组\naa.revel()\n#结果：\n#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[32,99235,99236,99263,99268,99272],{"__ignoreMap":79},[100,99237,99238,99240,99242,99244,99246,99248,99250,99252,99254,99256,99258,99260],{"class":102,"line":103},[100,99239,94858],{"class":258},[100,99241,472],{"class":471},[100,99243,94554],{"class":258},[100,99245,1985],{"class":117},[100,99247,2145],{"class":258},[100,99249,2290],{"class":117},[100,99251,94559],{"class":258},[100,99253,465],{"class":117},[100,99255,2145],{"class":258},[100,99257,2111],{"class":117},[100,99259,2196],{"class":258},[100,99261,99262],{"class":1836},"#转换为2行6列的数组\n",[100,99264,99265],{"class":102,"line":188},[100,99266,99267],{"class":258},"aa.revel()\n",[100,99269,99270],{"class":102,"line":199},[100,99271,95116],{"class":1836},[100,99273,99274],{"class":102,"line":532},[100,99275,99276],{"class":1836},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,99278,99280],{"id":99279},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[73,99282,99284],{"className":249,"code":99283,"language":251,"meta":79,"style":79},"aa=np.arange(1,13).reshape(2,6)\naa.flatten()\n#结果：\n#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[32,99285,99286,99310,99315,99319],{"__ignoreMap":79},[100,99287,99288,99290,99292,99294,99296,99298,99300,99302,99304,99306,99308],{"class":102,"line":103},[100,99289,94858],{"class":258},[100,99291,472],{"class":471},[100,99293,94554],{"class":258},[100,99295,1985],{"class":117},[100,99297,2145],{"class":258},[100,99299,2290],{"class":117},[100,99301,94559],{"class":258},[100,99303,465],{"class":117},[100,99305,2145],{"class":258},[100,99307,2111],{"class":117},[100,99309,809],{"class":258},[100,99311,99312],{"class":102,"line":188},[100,99313,99314],{"class":258},"aa.flatten()\n",[100,99316,99317],{"class":102,"line":199},[100,99318,95116],{"class":1836},[100,99320,99321],{"class":102,"line":532},[100,99322,99276],{"class":1836},[14,99324,99326],{"id":99325},"_54-使用resize","5.4 使用resize()",[19,99328,99329],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,99331,99332],{},"通过resize方法可以改变数组的维度",[19,99334,99335],{},"#resize修改数组维度",[19,99337,99338],{},"#以元组的形式指定形状",[19,99340,99341],{},"#改变的是原数组",[73,99343,99345],{"className":249,"code":99344,"language":251,"meta":79,"style":79},"a=np.arange(1,13)\na.shape=(2,6)#改变了原数组\na=resize((12))\n#结果：\n#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[32,99346,99347,99363,99383,99396,99400],{"__ignoreMap":79},[100,99348,99349,99351,99353,99355,99357,99359,99361],{"class":102,"line":103},[100,99350,2006],{"class":258},[100,99352,472],{"class":471},[100,99354,94554],{"class":258},[100,99356,1985],{"class":117},[100,99358,2145],{"class":258},[100,99360,2290],{"class":117},[100,99362,809],{"class":258},[100,99364,99365,99368,99370,99372,99374,99376,99378,99380],{"class":102,"line":188},[100,99366,99367],{"class":258},"a.shape",[100,99369,472],{"class":471},[100,99371,713],{"class":258},[100,99373,465],{"class":117},[100,99375,2145],{"class":258},[100,99377,2111],{"class":117},[100,99379,2196],{"class":258},[100,99381,99382],{"class":1836},"#改变了原数组\n",[100,99384,99385,99387,99389,99392,99394],{"class":102,"line":199},[100,99386,2006],{"class":258},[100,99388,472],{"class":471},[100,99390,99391],{"class":258},"resize((",[100,99393,2265],{"class":117},[100,99395,751],{"class":258},[100,99397,99398],{"class":102,"line":532},[100,99399,95116],{"class":1836},[100,99401,99402],{"class":102,"line":577},[100,99403,99276],{"class":1836},[73,99405,99407],{"className":249,"code":99406,"language":251,"meta":79,"style":79},"a.resize((6,2))\n#结果：\n'''\narray([[ 1,  2],\n       [ 3,  4],\n       [ 5,  6],\n       [ 7,  8],\n       [ 9, 10],\n       [11, 12]])\n'''\n",[32,99408,99409,99422,99426,99430,99435,99440,99445,99450,99455,99460],{"__ignoreMap":79},[100,99410,99411,99414,99416,99418,99420],{"class":102,"line":103},[100,99412,99413],{"class":258},"a.resize((",[100,99415,2111],{"class":117},[100,99417,2145],{"class":258},[100,99419,465],{"class":117},[100,99421,751],{"class":258},[100,99423,99424],{"class":102,"line":188},[100,99425,95116],{"class":1836},[100,99427,99428],{"class":102,"line":199},[100,99429,95480],{"class":110},[100,99431,99432],{"class":102,"line":532},[100,99433,99434],{"class":110},"array([[ 1,  2],\n",[100,99436,99437],{"class":102,"line":577},[100,99438,99439],{"class":110},"       [ 3,  4],\n",[100,99441,99442],{"class":102,"line":589},[100,99443,99444],{"class":110},"       [ 5,  6],\n",[100,99446,99447],{"class":102,"line":595},[100,99448,99449],{"class":110},"       [ 7,  8],\n",[100,99451,99452],{"class":102,"line":601},[100,99453,99454],{"class":110},"       [ 9, 10],\n",[100,99456,99457],{"class":102,"line":606},[100,99458,99459],{"class":110},"       [11, 12]])\n",[100,99461,99462],{"class":102,"line":612},[100,99463,95480],{"class":110},[14,99465,99467],{"id":99466},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,99469,99470],{},"改变了原数组",[73,99472,99474],{"className":249,"code":99473,"language":251,"meta":79,"style":79},"a=np.arange(1,13)\na.shape=(2,6)\n#结果：\n'''\narray([[ 1,  2,  3,  4,  5,  6],\n       [ 7,  8,  9, 10, 11, 12]])\n'''\n",[32,99475,99476,99492,99508,99512,99516,99520,99524],{"__ignoreMap":79},[100,99477,99478,99480,99482,99484,99486,99488,99490],{"class":102,"line":103},[100,99479,2006],{"class":258},[100,99481,472],{"class":471},[100,99483,94554],{"class":258},[100,99485,1985],{"class":117},[100,99487,2145],{"class":258},[100,99489,2290],{"class":117},[100,99491,809],{"class":258},[100,99493,99494,99496,99498,99500,99502,99504,99506],{"class":102,"line":188},[100,99495,99367],{"class":258},[100,99497,472],{"class":471},[100,99499,713],{"class":258},[100,99501,465],{"class":117},[100,99503,2145],{"class":258},[100,99505,2111],{"class":117},[100,99507,809],{"class":258},[100,99509,99510],{"class":102,"line":199},[100,99511,95116],{"class":1836},[100,99513,99514],{"class":102,"line":532},[100,99515,95480],{"class":110},[100,99517,99518],{"class":102,"line":577},[100,99519,98738],{"class":110},[100,99521,99522],{"class":102,"line":589},[100,99523,98743],{"class":110},[100,99525,99526],{"class":102,"line":595},[100,99527,95480],{"class":110},[14,99529,99531],{"id":99530},"_56-重要比较","5.6 重要比较：",[19,99533,99534],{},[3095,99535],{"alt":79,"src":99536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,99538,99539,99540,99542,99543,99545],{},"口诀：NumPy 函数要么用 ",[32,99541,97513],{},"，要么用 ",[32,99544,33054],{},"，创建结构用 shape，造数据用 size",[19,99547,99548],{},[3095,99549],{"alt":79,"src":99550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[1677,99552,99553],{},"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":79,"searchDepth":188,"depth":188,"links":99555},[99556,99557,99558,99559,99560,99561],{"id":99077,"depth":188,"text":99078},{"id":99229,"depth":188,"text":99230},{"id":99279,"depth":188,"text":99280},{"id":99325,"depth":188,"text":99326},{"id":99466,"depth":188,"text":99467},{"id":99530,"depth":188,"text":99531},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":99069,"description":24958},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":99568,"title":99569,"body":99570,"description":24958,"extension":1708,"meta":100642,"navigation":569,"path":100643,"seo":100644,"stem":100645,"__hash__":100646},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":99571,"toc":100636},[99572,99575,99579,99582,99585,99588,99653,99656,99696,99699,99781,99784,99789,99811,99813,99818,99823,99826,99829,99984,99987,100189,100193,100196,100199,100267,100269,100274,100277,100280,100360,100364,100367,100369,100442,100444,100449,100451,100531,100535,100538,100541,100544,100547,100550,100553,100633],[10,99573,99569],{"id":99574},"_6数组的拼接",[14,99576,99578],{"id":99577},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,99580,99581],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,99583,99584],{},"函数内部传两个数列构成的数列或者元组",[19,99586,99587],{},"①一维数组的拼接",[73,99589,99591],{"className":249,"code":99590,"language":251,"meta":79,"style":79},"a=np.array([1,2,3])\nb=np.array([4,5,6])\n#调用concatenate进行数组拼接\nnp.concatenate((a,b))\n#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n#np.concatenate([a,b])\n",[32,99592,99593,99613,99633,99638,99643,99648],{"__ignoreMap":79},[100,99594,99595,99597,99599,99601,99603,99605,99607,99609,99611],{"class":102,"line":103},[100,99596,2006],{"class":258},[100,99598,472],{"class":471},[100,99600,94576],{"class":258},[100,99602,1985],{"class":117},[100,99604,2145],{"class":258},[100,99606,465],{"class":117},[100,99608,2145],{"class":258},[100,99610,1849],{"class":117},[100,99612,6255],{"class":258},[100,99614,99615,99617,99619,99621,99623,99625,99627,99629,99631],{"class":102,"line":188},[100,99616,2031],{"class":258},[100,99618,472],{"class":471},[100,99620,94576],{"class":258},[100,99622,748],{"class":117},[100,99624,2145],{"class":258},[100,99626,2086],{"class":117},[100,99628,2145],{"class":258},[100,99630,2111],{"class":117},[100,99632,6255],{"class":258},[100,99634,99635],{"class":102,"line":199},[100,99636,99637],{"class":1836},"#调用concatenate进行数组拼接\n",[100,99639,99640],{"class":102,"line":532},[100,99641,99642],{"class":258},"np.concatenate((a,b))\n",[100,99644,99645],{"class":102,"line":577},[100,99646,99647],{"class":1836},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[100,99649,99650],{"class":102,"line":589},[100,99651,99652],{"class":1836},"#np.concatenate([a,b])\n",[19,99654,99655],{},"②一维多个数组拼接",[73,99657,99659],{"className":249,"code":99658,"language":251,"meta":79,"style":79},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[32,99660,99661,99666,99686,99691],{"__ignoreMap":79},[100,99662,99663],{"class":102,"line":103},[100,99664,99665],{"class":1836},"#也可以多个数组进行拼接\n",[100,99667,99668,99670,99672,99674,99676,99678,99680,99682,99684],{"class":102,"line":188},[100,99669,2056],{"class":258},[100,99671,472],{"class":471},[100,99673,94576],{"class":258},[100,99675,2213],{"class":117},[100,99677,2145],{"class":258},[100,99679,2239],{"class":117},[100,99681,2145],{"class":258},[100,99683,2290],{"class":117},[100,99685,6255],{"class":258},[100,99687,99688],{"class":102,"line":199},[100,99689,99690],{"class":258},"c\n",[100,99692,99693],{"class":102,"line":532},[100,99694,99695],{"class":258},"np.concatenate((a,b,c))\n",[19,99697,99698],{},"③二维数组拼接",[73,99700,99702],{"className":249,"code":99701,"language":251,"meta":79,"style":79},"#二维数组使用concatenate进行拼接\naa=np.arange(1,13).reshape(3,4)\nbb=np.arange(101,113).reshape(3,4)\n#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\nnp.concatenate((aa,bb),axis=0)\n",[32,99703,99704,99709,99733,99758,99763,99768],{"__ignoreMap":79},[100,99705,99706],{"class":102,"line":103},[100,99707,99708],{"class":1836},"#二维数组使用concatenate进行拼接\n",[100,99710,99711,99713,99715,99717,99719,99721,99723,99725,99727,99729,99731],{"class":102,"line":188},[100,99712,94858],{"class":258},[100,99714,472],{"class":471},[100,99716,94554],{"class":258},[100,99718,1985],{"class":117},[100,99720,2145],{"class":258},[100,99722,2290],{"class":117},[100,99724,94559],{"class":258},[100,99726,1849],{"class":117},[100,99728,2145],{"class":258},[100,99730,748],{"class":117},[100,99732,809],{"class":258},[100,99734,99735,99738,99740,99742,99744,99746,99748,99750,99752,99754,99756],{"class":102,"line":199},[100,99736,99737],{"class":258},"bb",[100,99739,472],{"class":471},[100,99741,94554],{"class":258},[100,99743,2104],{"class":117},[100,99745,2145],{"class":258},[100,99747,2409],{"class":117},[100,99749,94559],{"class":258},[100,99751,1849],{"class":117},[100,99753,2145],{"class":258},[100,99755,748],{"class":117},[100,99757,809],{"class":258},[100,99759,99760],{"class":102,"line":532},[100,99761,99762],{"class":1836},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[100,99764,99765],{"class":102,"line":577},[100,99766,99767],{"class":1836},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[100,99769,99770,99773,99775,99777,99779],{"class":102,"line":589},[100,99771,99772],{"class":258},"np.concatenate((aa,bb),",[100,99774,49068],{"class":6812},[100,99776,472],{"class":471},[100,99778,1366],{"class":117},[100,99780,809],{"class":258},[19,99782,99783],{},"结果：",[19,99785,99786],{},[3095,99787],{"alt":79,"src":99788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[73,99790,99792],{"className":249,"code":99791,"language":251,"meta":79,"style":79},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[32,99793,99794,99799],{"__ignoreMap":79},[100,99795,99796],{"class":102,"line":103},[100,99797,99798],{"class":1836},"#指定axis为1进行拼接\n",[100,99800,99801,99803,99805,99807,99809],{"class":102,"line":188},[100,99802,99772],{"class":258},[100,99804,49068],{"class":6812},[100,99806,472],{"class":471},[100,99808,1985],{"class":117},[100,99810,809],{"class":258},[19,99812,99783],{},[19,99814,99815],{},[3095,99816],{"alt":79,"src":99817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,99819,99820],{},[1921,99821,99822],{},"二维数组总结：0竖着方向，1横着方向",[19,99824,99825],{},"④三维数组拼接",[19,99827,99828],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[73,99830,99832],{"className":249,"code":99831,"language":251,"meta":79,"style":79},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\n#axis=0\ns=np.concatenate((aaa,bbb),axis=0)\ns.shape\n#输出：(4,3,6)\n#axis=1\nss=np.concatenate((aaa,bbb),axis=1)\nss.shape\n#输出：(2,6,6)\n#axis=2\nnp.concatenate((aaa,bbb),axis=2).shape\n#输出：（2，3，12）\n",[32,99833,99834,99839,99867,99897,99902,99919,99924,99929,99934,99951,99956,99961,99966,99979],{"__ignoreMap":79},[100,99835,99836],{"class":102,"line":103},[100,99837,99838],{"class":1836},"#两个三行六列\n",[100,99840,99841,99843,99845,99847,99849,99851,99853,99855,99857,99859,99861,99863,99865],{"class":102,"line":188},[100,99842,97073],{"class":258},[100,99844,472],{"class":471},[100,99846,94554],{"class":258},[100,99848,1985],{"class":117},[100,99850,2145],{"class":258},[100,99852,2092],{"class":117},[100,99854,94559],{"class":258},[100,99856,465],{"class":117},[100,99858,2145],{"class":258},[100,99860,1849],{"class":117},[100,99862,2145],{"class":258},[100,99864,2111],{"class":117},[100,99866,809],{"class":258},[100,99868,99869,99872,99874,99876,99878,99880,99883,99885,99887,99889,99891,99893,99895],{"class":102,"line":199},[100,99870,99871],{"class":258},"bbb",[100,99873,472],{"class":471},[100,99875,94554],{"class":258},[100,99877,2104],{"class":117},[100,99879,2145],{"class":258},[100,99881,99882],{"class":117},"137",[100,99884,94559],{"class":258},[100,99886,465],{"class":117},[100,99888,2145],{"class":258},[100,99890,1849],{"class":117},[100,99892,2145],{"class":258},[100,99894,2111],{"class":117},[100,99896,809],{"class":258},[100,99898,99899],{"class":102,"line":532},[100,99900,99901],{"class":1836},"#axis=0\n",[100,99903,99904,99906,99908,99911,99913,99915,99917],{"class":102,"line":577},[100,99905,2461],{"class":258},[100,99907,472],{"class":471},[100,99909,99910],{"class":258},"np.concatenate((aaa,bbb),",[100,99912,49068],{"class":6812},[100,99914,472],{"class":471},[100,99916,1366],{"class":117},[100,99918,809],{"class":258},[100,99920,99921],{"class":102,"line":589},[100,99922,99923],{"class":258},"s.shape\n",[100,99925,99926],{"class":102,"line":595},[100,99927,99928],{"class":1836},"#输出：(4,3,6)\n",[100,99930,99931],{"class":102,"line":601},[100,99932,99933],{"class":1836},"#axis=1\n",[100,99935,99936,99939,99941,99943,99945,99947,99949],{"class":102,"line":606},[100,99937,99938],{"class":258},"ss",[100,99940,472],{"class":471},[100,99942,99910],{"class":258},[100,99944,49068],{"class":6812},[100,99946,472],{"class":471},[100,99948,1985],{"class":117},[100,99950,809],{"class":258},[100,99952,99953],{"class":102,"line":612},[100,99954,99955],{"class":258},"ss.shape\n",[100,99957,99958],{"class":102,"line":618},[100,99959,99960],{"class":1836},"#输出：(2,6,6)\n",[100,99962,99963],{"class":102,"line":623},[100,99964,99965],{"class":1836},"#axis=2\n",[100,99967,99968,99970,99972,99974,99976],{"class":102,"line":629},[100,99969,99910],{"class":258},[100,99971,49068],{"class":6812},[100,99973,472],{"class":471},[100,99975,465],{"class":117},[100,99977,99978],{"class":258},").shape\n",[100,99980,99981],{"class":102,"line":635},[100,99982,99983],{"class":1836},"#输出：（2，3，12）\n",[19,99985,99986],{},"⑤四维数组拼接",[73,99988,99990],{"className":249,"code":99989,"language":251,"meta":79,"style":79},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\naaaa=aaa.reshape(2,3,3,2)\nbbbb=bbb.reshape(2,3,3,2)\n#axis=0\nnp.concatenate((aaaa,bbbb),axis=0).shape\n#结果：（4，3，3，2）\n#axis=1\nnp.concatenate((aaaa,bbbb),axis=1).shape\n#结果：（2，6，3，2）\n#axis=2\nnp.concatenate((aaaa,bbbb),axis=2).shape\n#结果：（2，3，6，2）\n#axis=3\nnp.concatenate((aaaa,bbbb),axis=3).shape\n#结果：（2，3，3，4）\n",[32,99991,99992,99996,100024,100052,100077,100103,100107,100120,100125,100129,100141,100146,100150,100162,100167,100172,100184],{"__ignoreMap":79},[100,99993,99994],{"class":102,"line":103},[100,99995,99838],{"class":1836},[100,99997,99998,100000,100002,100004,100006,100008,100010,100012,100014,100016,100018,100020,100022],{"class":102,"line":188},[100,99999,97073],{"class":258},[100,100001,472],{"class":471},[100,100003,94554],{"class":258},[100,100005,1985],{"class":117},[100,100007,2145],{"class":258},[100,100009,2092],{"class":117},[100,100011,94559],{"class":258},[100,100013,465],{"class":117},[100,100015,2145],{"class":258},[100,100017,1849],{"class":117},[100,100019,2145],{"class":258},[100,100021,2111],{"class":117},[100,100023,809],{"class":258},[100,100025,100026,100028,100030,100032,100034,100036,100038,100040,100042,100044,100046,100048,100050],{"class":102,"line":199},[100,100027,99871],{"class":258},[100,100029,472],{"class":471},[100,100031,94554],{"class":258},[100,100033,2104],{"class":117},[100,100035,2145],{"class":258},[100,100037,99882],{"class":117},[100,100039,94559],{"class":258},[100,100041,465],{"class":117},[100,100043,2145],{"class":258},[100,100045,1849],{"class":117},[100,100047,2145],{"class":258},[100,100049,2111],{"class":117},[100,100051,809],{"class":258},[100,100053,100054,100057,100059,100061,100063,100065,100067,100069,100071,100073,100075],{"class":102,"line":532},[100,100055,100056],{"class":258},"aaaa",[100,100058,472],{"class":471},[100,100060,99220],{"class":258},[100,100062,465],{"class":117},[100,100064,2145],{"class":258},[100,100066,1849],{"class":117},[100,100068,2145],{"class":258},[100,100070,1849],{"class":117},[100,100072,2145],{"class":258},[100,100074,465],{"class":117},[100,100076,809],{"class":258},[100,100078,100079,100082,100084,100087,100089,100091,100093,100095,100097,100099,100101],{"class":102,"line":577},[100,100080,100081],{"class":258},"bbbb",[100,100083,472],{"class":471},[100,100085,100086],{"class":258},"bbb.reshape(",[100,100088,465],{"class":117},[100,100090,2145],{"class":258},[100,100092,1849],{"class":117},[100,100094,2145],{"class":258},[100,100096,1849],{"class":117},[100,100098,2145],{"class":258},[100,100100,465],{"class":117},[100,100102,809],{"class":258},[100,100104,100105],{"class":102,"line":589},[100,100106,99901],{"class":1836},[100,100108,100109,100112,100114,100116,100118],{"class":102,"line":595},[100,100110,100111],{"class":258},"np.concatenate((aaaa,bbbb),",[100,100113,49068],{"class":6812},[100,100115,472],{"class":471},[100,100117,1366],{"class":117},[100,100119,99978],{"class":258},[100,100121,100122],{"class":102,"line":601},[100,100123,100124],{"class":1836},"#结果：（4，3，3，2）\n",[100,100126,100127],{"class":102,"line":606},[100,100128,99933],{"class":1836},[100,100130,100131,100133,100135,100137,100139],{"class":102,"line":612},[100,100132,100111],{"class":258},[100,100134,49068],{"class":6812},[100,100136,472],{"class":471},[100,100138,1985],{"class":117},[100,100140,99978],{"class":258},[100,100142,100143],{"class":102,"line":618},[100,100144,100145],{"class":1836},"#结果：（2，6，3，2）\n",[100,100147,100148],{"class":102,"line":623},[100,100149,99965],{"class":1836},[100,100151,100152,100154,100156,100158,100160],{"class":102,"line":629},[100,100153,100111],{"class":258},[100,100155,49068],{"class":6812},[100,100157,472],{"class":471},[100,100159,465],{"class":117},[100,100161,99978],{"class":258},[100,100163,100164],{"class":102,"line":635},[100,100165,100166],{"class":1836},"#结果：（2，3，6，2）\n",[100,100168,100169],{"class":102,"line":641},[100,100170,100171],{"class":1836},"#axis=3\n",[100,100173,100174,100176,100178,100180,100182],{"class":102,"line":647},[100,100175,100111],{"class":258},[100,100177,49068],{"class":6812},[100,100179,472],{"class":471},[100,100181,1849],{"class":117},[100,100183,99978],{"class":258},[100,100185,100186],{"class":102,"line":653},[100,100187,100188],{"class":1836},"#结果：（2，3，3，4）\n",[14,100190,100192],{"id":100191},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,100194,100195],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,100197,100198],{},"①二维数组",[73,100200,100202],{"className":249,"code":100201,"language":251,"meta":79,"style":79},"aa=np.arange(1,13).reshape(3,4)\nbb=np.arange(101,113).reshape(3,4)\nnp.hstack((aa,bb))\n#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n#np.hstack([aa,bb])\n",[32,100203,100204,100228,100252,100257,100262],{"__ignoreMap":79},[100,100205,100206,100208,100210,100212,100214,100216,100218,100220,100222,100224,100226],{"class":102,"line":103},[100,100207,94858],{"class":258},[100,100209,472],{"class":471},[100,100211,94554],{"class":258},[100,100213,1985],{"class":117},[100,100215,2145],{"class":258},[100,100217,2290],{"class":117},[100,100219,94559],{"class":258},[100,100221,1849],{"class":117},[100,100223,2145],{"class":258},[100,100225,748],{"class":117},[100,100227,809],{"class":258},[100,100229,100230,100232,100234,100236,100238,100240,100242,100244,100246,100248,100250],{"class":102,"line":188},[100,100231,99737],{"class":258},[100,100233,472],{"class":471},[100,100235,94554],{"class":258},[100,100237,2104],{"class":117},[100,100239,2145],{"class":258},[100,100241,2409],{"class":117},[100,100243,94559],{"class":258},[100,100245,1849],{"class":117},[100,100247,2145],{"class":258},[100,100249,748],{"class":117},[100,100251,809],{"class":258},[100,100253,100254],{"class":102,"line":199},[100,100255,100256],{"class":258},"np.hstack((aa,bb))\n",[100,100258,100259],{"class":102,"line":532},[100,100260,100261],{"class":1836},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[100,100263,100264],{"class":102,"line":577},[100,100265,100266],{"class":1836},"#np.hstack([aa,bb])\n",[19,100268,99783],{},[19,100270,100271],{},[3095,100272],{"alt":79,"src":100273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,100275,100276],{},"等效于concatenate()函数中axis=1时的情况",[19,100278,100279],{},"②三维数组",[73,100281,100283],{"className":249,"code":100282,"language":251,"meta":79,"style":79},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\n#使用hstack\nnp.hstack((aaa,bbb)).shape\n#输出：（2，6，6）\n",[32,100284,100285,100289,100317,100345,100350,100355],{"__ignoreMap":79},[100,100286,100287],{"class":102,"line":103},[100,100288,99838],{"class":1836},[100,100290,100291,100293,100295,100297,100299,100301,100303,100305,100307,100309,100311,100313,100315],{"class":102,"line":188},[100,100292,97073],{"class":258},[100,100294,472],{"class":471},[100,100296,94554],{"class":258},[100,100298,1985],{"class":117},[100,100300,2145],{"class":258},[100,100302,2092],{"class":117},[100,100304,94559],{"class":258},[100,100306,465],{"class":117},[100,100308,2145],{"class":258},[100,100310,1849],{"class":117},[100,100312,2145],{"class":258},[100,100314,2111],{"class":117},[100,100316,809],{"class":258},[100,100318,100319,100321,100323,100325,100327,100329,100331,100333,100335,100337,100339,100341,100343],{"class":102,"line":199},[100,100320,99871],{"class":258},[100,100322,472],{"class":471},[100,100324,94554],{"class":258},[100,100326,2104],{"class":117},[100,100328,2145],{"class":258},[100,100330,99882],{"class":117},[100,100332,94559],{"class":258},[100,100334,465],{"class":117},[100,100336,2145],{"class":258},[100,100338,1849],{"class":117},[100,100340,2145],{"class":258},[100,100342,2111],{"class":117},[100,100344,809],{"class":258},[100,100346,100347],{"class":102,"line":532},[100,100348,100349],{"class":1836},"#使用hstack\n",[100,100351,100352],{"class":102,"line":577},[100,100353,100354],{"class":258},"np.hstack((aaa,bbb)).shape\n",[100,100356,100357],{"class":102,"line":589},[100,100358,100359],{"class":1836},"#输出：（2，6，6）\n",[14,100361,100363],{"id":100362},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,100365,100366],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,100368,100198],{},[73,100370,100372],{"className":249,"code":100371,"language":251,"meta":79,"style":79},"aa=np.arange(1,13).reshape(3,4)\nbb=np.arange(101,113).reshape(3,4)\n#vstack 垂直方向进行堆叠\nnp.vstack((aa,bb))\n#与hstack传的参数类似，等价于：\nnp.vstack([aa,bb])\n",[32,100373,100374,100398,100422,100427,100432,100437],{"__ignoreMap":79},[100,100375,100376,100378,100380,100382,100384,100386,100388,100390,100392,100394,100396],{"class":102,"line":103},[100,100377,94858],{"class":258},[100,100379,472],{"class":471},[100,100381,94554],{"class":258},[100,100383,1985],{"class":117},[100,100385,2145],{"class":258},[100,100387,2290],{"class":117},[100,100389,94559],{"class":258},[100,100391,1849],{"class":117},[100,100393,2145],{"class":258},[100,100395,748],{"class":117},[100,100397,809],{"class":258},[100,100399,100400,100402,100404,100406,100408,100410,100412,100414,100416,100418,100420],{"class":102,"line":188},[100,100401,99737],{"class":258},[100,100403,472],{"class":471},[100,100405,94554],{"class":258},[100,100407,2104],{"class":117},[100,100409,2145],{"class":258},[100,100411,2409],{"class":117},[100,100413,94559],{"class":258},[100,100415,1849],{"class":117},[100,100417,2145],{"class":258},[100,100419,748],{"class":117},[100,100421,809],{"class":258},[100,100423,100424],{"class":102,"line":199},[100,100425,100426],{"class":1836},"#vstack 垂直方向进行堆叠\n",[100,100428,100429],{"class":102,"line":532},[100,100430,100431],{"class":258},"np.vstack((aa,bb))\n",[100,100433,100434],{"class":102,"line":577},[100,100435,100436],{"class":1836},"#与hstack传的参数类似，等价于：\n",[100,100438,100439],{"class":102,"line":589},[100,100440,100441],{"class":258},"np.vstack([aa,bb])\n",[19,100443,99783],{},[19,100445,100446],{},[3095,100447],{"alt":79,"src":100448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,100450,100279],{},[73,100452,100454],{"className":249,"code":100453,"language":251,"meta":79,"style":79},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\n#使用vstack\nnp.vstack((aaa,bbb)).shape\n#输出：（4，3，6）\n",[32,100455,100456,100460,100488,100516,100521,100526],{"__ignoreMap":79},[100,100457,100458],{"class":102,"line":103},[100,100459,99838],{"class":1836},[100,100461,100462,100464,100466,100468,100470,100472,100474,100476,100478,100480,100482,100484,100486],{"class":102,"line":188},[100,100463,97073],{"class":258},[100,100465,472],{"class":471},[100,100467,94554],{"class":258},[100,100469,1985],{"class":117},[100,100471,2145],{"class":258},[100,100473,2092],{"class":117},[100,100475,94559],{"class":258},[100,100477,465],{"class":117},[100,100479,2145],{"class":258},[100,100481,1849],{"class":117},[100,100483,2145],{"class":258},[100,100485,2111],{"class":117},[100,100487,809],{"class":258},[100,100489,100490,100492,100494,100496,100498,100500,100502,100504,100506,100508,100510,100512,100514],{"class":102,"line":199},[100,100491,99871],{"class":258},[100,100493,472],{"class":471},[100,100495,94554],{"class":258},[100,100497,2104],{"class":117},[100,100499,2145],{"class":258},[100,100501,99882],{"class":117},[100,100503,94559],{"class":258},[100,100505,465],{"class":117},[100,100507,2145],{"class":258},[100,100509,1849],{"class":117},[100,100511,2145],{"class":258},[100,100513,2111],{"class":117},[100,100515,809],{"class":258},[100,100517,100518],{"class":102,"line":532},[100,100519,100520],{"class":1836},"#使用vstack\n",[100,100522,100523],{"class":102,"line":577},[100,100524,100525],{"class":258},"np.vstack((aaa,bbb)).shape\n",[100,100527,100528],{"class":102,"line":589},[100,100529,100530],{"class":1836},"#输出：（4，3，6）\n",[14,100532,100534],{"id":100533},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,100536,100537],{},"该方法是三维数组特有的方法",[19,100539,100540],{},"也就是说",[19,100542,100543],{},"一维数组拼接方法用：concatenate()",[19,100545,100546],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,100548,100549],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,100551,100552],{},"四维数组及多维数组只能用concatenate进行拼接",[73,100554,100556],{"className":249,"code":100555,"language":251,"meta":79,"style":79},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\n#使用dstack\nnp.dstack((aaa,bbb)).shape\n#结果：（2，3，12）\n",[32,100557,100558,100562,100590,100618,100623,100628],{"__ignoreMap":79},[100,100559,100560],{"class":102,"line":103},[100,100561,99838],{"class":1836},[100,100563,100564,100566,100568,100570,100572,100574,100576,100578,100580,100582,100584,100586,100588],{"class":102,"line":188},[100,100565,97073],{"class":258},[100,100567,472],{"class":471},[100,100569,94554],{"class":258},[100,100571,1985],{"class":117},[100,100573,2145],{"class":258},[100,100575,2092],{"class":117},[100,100577,94559],{"class":258},[100,100579,465],{"class":117},[100,100581,2145],{"class":258},[100,100583,1849],{"class":117},[100,100585,2145],{"class":258},[100,100587,2111],{"class":117},[100,100589,809],{"class":258},[100,100591,100592,100594,100596,100598,100600,100602,100604,100606,100608,100610,100612,100614,100616],{"class":102,"line":199},[100,100593,99871],{"class":258},[100,100595,472],{"class":471},[100,100597,94554],{"class":258},[100,100599,2104],{"class":117},[100,100601,2145],{"class":258},[100,100603,99882],{"class":117},[100,100605,94559],{"class":258},[100,100607,465],{"class":117},[100,100609,2145],{"class":258},[100,100611,1849],{"class":117},[100,100613,2145],{"class":258},[100,100615,2111],{"class":117},[100,100617,809],{"class":258},[100,100619,100620],{"class":102,"line":532},[100,100621,100622],{"class":1836},"#使用dstack\n",[100,100624,100625],{"class":102,"line":577},[100,100626,100627],{"class":258},"np.dstack((aaa,bbb)).shape\n",[100,100629,100630],{"class":102,"line":589},[100,100631,100632],{"class":1836},"#结果：（2，3，12）\n",[1677,100634,100635],{},"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":79,"searchDepth":188,"depth":188,"links":100637},[100638,100639,100640,100641],{"id":99577,"depth":188,"text":99578},{"id":100191,"depth":188,"text":100192},{"id":100362,"depth":188,"text":100363},{"id":100533,"depth":188,"text":100534},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":99569,"description":24958},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":100648,"title":100649,"body":100650,"description":24958,"extension":1708,"meta":100925,"navigation":569,"path":100926,"seo":100927,"stem":100928,"__hash__":100929},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":100651,"toc":100923},[100652,100655,100658,100752,100755,100758,100761,100764,100767,100770,100773,100776,100920],[10,100653,100649],{"id":100654},"_7数组转置",[19,100656,100657],{},"使用transpose()函数",[73,100659,100661],{"className":249,"code":100660,"language":251,"meta":79,"style":79},"import numpy as np\na= np.arange(1,13).reshape(4,3)\n#二维数组转置\n#调用transpose()函数\na.transpose()\n#对于二维数组也可以采用.T来实现\na.T#与上述代码一样\n#结果：\n'''\narray([[ 1,  4,  7, 10],\n       [ 2,  5,  8, 11],\n       [ 3,  6,  9, 12]])\n'''\n",[32,100662,100663,100673,100697,100702,100707,100712,100717,100725,100729,100733,100738,100743,100748],{"__ignoreMap":79},[100,100664,100665,100667,100669,100671],{"class":102,"line":103},[100,100666,548],{"class":471},[100,100668,558],{"class":258},[100,100670,561],{"class":471},[100,100672,564],{"class":258},[100,100674,100675,100677,100679,100681,100683,100685,100687,100689,100691,100693,100695],{"class":102,"line":188},[100,100676,2006],{"class":258},[100,100678,472],{"class":471},[100,100680,33275],{"class":258},[100,100682,1985],{"class":117},[100,100684,2145],{"class":258},[100,100686,2290],{"class":117},[100,100688,94559],{"class":258},[100,100690,748],{"class":117},[100,100692,2145],{"class":258},[100,100694,1849],{"class":117},[100,100696,809],{"class":258},[100,100698,100699],{"class":102,"line":199},[100,100700,100701],{"class":1836},"#二维数组转置\n",[100,100703,100704],{"class":102,"line":532},[100,100705,100706],{"class":1836},"#调用transpose()函数\n",[100,100708,100709],{"class":102,"line":577},[100,100710,100711],{"class":258},"a.transpose()\n",[100,100713,100714],{"class":102,"line":589},[100,100715,100716],{"class":1836},"#对于二维数组也可以采用.T来实现\n",[100,100718,100719,100722],{"class":102,"line":595},[100,100720,100721],{"class":258},"a.T",[100,100723,100724],{"class":1836},"#与上述代码一样\n",[100,100726,100727],{"class":102,"line":601},[100,100728,95116],{"class":1836},[100,100730,100731],{"class":102,"line":606},[100,100732,95480],{"class":110},[100,100734,100735],{"class":102,"line":612},[100,100736,100737],{"class":110},"array([[ 1,  4,  7, 10],\n",[100,100739,100740],{"class":102,"line":618},[100,100741,100742],{"class":110},"       [ 2,  5,  8, 11],\n",[100,100744,100745],{"class":102,"line":623},[100,100746,100747],{"class":110},"       [ 3,  6,  9, 12]])\n",[100,100749,100750],{"class":102,"line":629},[100,100751,95480],{"class":110},[19,100753,100754],{},"也可以使用np.transpose()的形式",[19,100756,100757],{},"#多维数组进行转置 np.transpose()",[19,100759,100760],{},"#对二维数组也可以使用np.transpose()进行转置",[19,100762,100763],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,100765,100766],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,100768,100769],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,100771,100772],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,100774,100775],{},"四维及以上的数组也是一样的道理",[73,100777,100779],{"className":249,"code":100778,"language":251,"meta":79,"style":79},"x=np.arange(1,37).reshape(3,6,2)\nx.shape\n#结果：（3,6,2）\n#使用np.transpose()进行转置 变为(2,6,3)\nnp.transpose(x,(2,1,0)).shape\n#结果：(2,6,3)\naaaa=np.arange(1,37).reshape(3,2,1,6)\naaaa.shape\n#结果：（3，2，1，6）\n#使用np.transpose()进行转置 变为(2,1,3,6)\nnp.transpose(aaaa,(1,2,0,3)).shape\n#结果：(2,1,3,6)\n",[32,100780,100781,100809,100814,100819,100824,100842,100847,100879,100884,100889,100894,100915],{"__ignoreMap":79},[100,100782,100783,100785,100787,100789,100791,100793,100795,100797,100799,100801,100803,100805,100807],{"class":102,"line":103},[100,100784,2586],{"class":258},[100,100786,472],{"class":471},[100,100788,94554],{"class":258},[100,100790,1985],{"class":117},[100,100792,2145],{"class":258},[100,100794,2092],{"class":117},[100,100796,94559],{"class":258},[100,100798,1849],{"class":117},[100,100800,2145],{"class":258},[100,100802,2111],{"class":117},[100,100804,2145],{"class":258},[100,100806,465],{"class":117},[100,100808,809],{"class":258},[100,100810,100811],{"class":102,"line":188},[100,100812,100813],{"class":258},"x.shape\n",[100,100815,100816],{"class":102,"line":199},[100,100817,100818],{"class":1836},"#结果：（3,6,2）\n",[100,100820,100821],{"class":102,"line":532},[100,100822,100823],{"class":1836},"#使用np.transpose()进行转置 变为(2,6,3)\n",[100,100825,100826,100829,100831,100833,100835,100837,100839],{"class":102,"line":577},[100,100827,100828],{"class":258},"np.transpose(x,(",[100,100830,465],{"class":117},[100,100832,2145],{"class":258},[100,100834,1985],{"class":117},[100,100836,2145],{"class":258},[100,100838,1366],{"class":117},[100,100840,100841],{"class":258},")).shape\n",[100,100843,100844],{"class":102,"line":589},[100,100845,100846],{"class":1836},"#结果：(2,6,3)\n",[100,100848,100849,100851,100853,100855,100857,100859,100861,100863,100865,100867,100869,100871,100873,100875,100877],{"class":102,"line":595},[100,100850,100056],{"class":258},[100,100852,472],{"class":471},[100,100854,94554],{"class":258},[100,100856,1985],{"class":117},[100,100858,2145],{"class":258},[100,100860,2092],{"class":117},[100,100862,94559],{"class":258},[100,100864,1849],{"class":117},[100,100866,2145],{"class":258},[100,100868,465],{"class":117},[100,100870,2145],{"class":258},[100,100872,1985],{"class":117},[100,100874,2145],{"class":258},[100,100876,2111],{"class":117},[100,100878,809],{"class":258},[100,100880,100881],{"class":102,"line":601},[100,100882,100883],{"class":258},"aaaa.shape\n",[100,100885,100886],{"class":102,"line":606},[100,100887,100888],{"class":1836},"#结果：（3，2，1，6）\n",[100,100890,100891],{"class":102,"line":612},[100,100892,100893],{"class":1836},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[100,100895,100896,100899,100901,100903,100905,100907,100909,100911,100913],{"class":102,"line":618},[100,100897,100898],{"class":258},"np.transpose(aaaa,(",[100,100900,1985],{"class":117},[100,100902,2145],{"class":258},[100,100904,465],{"class":117},[100,100906,2145],{"class":258},[100,100908,1366],{"class":117},[100,100910,2145],{"class":258},[100,100912,1849],{"class":117},[100,100914,100841],{"class":258},[100,100916,100917],{"class":102,"line":623},[100,100918,100919],{"class":1836},"#结果：(2,1,3,6)\n",[1677,100921,100922],{},"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":79,"searchDepth":188,"depth":188,"links":100924},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":100649,"description":24958},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":100931,"title":100932,"body":100933,"description":24958,"extension":1708,"meta":101667,"navigation":569,"path":101668,"seo":101669,"stem":101670,"__hash__":101671},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":100934,"toc":101665},[100935,100938,100941,100944,100947,100950,100953,100956,100959,101068,101071,101074,101662],[10,100936,100932],{"id":100937},"_8数组分割",[19,100939,100940],{},"split分割",[19,100942,100943],{},"numpy.split(ary,indics_or_sections,axis)",[19,100945,100946],{},"解释：",[19,100948,100949],{},"ary:被分割的数组",[19,100951,100952],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,100954,100955],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,100957,100958],{},"①一维数组的分割",[73,100960,100962],{"className":249,"code":100961,"language":251,"meta":79,"style":79},"a=np.arange(1,9)\n#如果传入整数，必须能够平分，否则会报错\nnp.split(a,2)\n#结果：\n#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\nnp.split(a,4)\n#结果：\n#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n#传入数组\nnp.split(a,[3,5])\n#结果：\n#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\nnp.split(a,[5,7])\n#结果：\n#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[32,100963,100964,100980,100985,100994,100998,101003,101011,101015,101020,101025,101038,101042,101047,101059,101063],{"__ignoreMap":79},[100,100965,100966,100968,100970,100972,100974,100976,100978],{"class":102,"line":103},[100,100967,2006],{"class":258},[100,100969,472],{"class":471},[100,100971,94554],{"class":258},[100,100973,1985],{"class":117},[100,100975,2145],{"class":258},[100,100977,2187],{"class":117},[100,100979,809],{"class":258},[100,100981,100982],{"class":102,"line":188},[100,100983,100984],{"class":1836},"#如果传入整数，必须能够平分，否则会报错\n",[100,100986,100987,100990,100992],{"class":102,"line":199},[100,100988,100989],{"class":258},"np.split(a,",[100,100991,465],{"class":117},[100,100993,809],{"class":258},[100,100995,100996],{"class":102,"line":532},[100,100997,95116],{"class":1836},[100,100999,101000],{"class":102,"line":577},[100,101001,101002],{"class":1836},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[100,101004,101005,101007,101009],{"class":102,"line":589},[100,101006,100989],{"class":258},[100,101008,748],{"class":117},[100,101010,809],{"class":258},[100,101012,101013],{"class":102,"line":595},[100,101014,95116],{"class":1836},[100,101016,101017],{"class":102,"line":601},[100,101018,101019],{"class":1836},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[100,101021,101022],{"class":102,"line":606},[100,101023,101024],{"class":1836},"#传入数组\n",[100,101026,101027,101030,101032,101034,101036],{"class":102,"line":612},[100,101028,101029],{"class":258},"np.split(a,[",[100,101031,1849],{"class":117},[100,101033,2145],{"class":258},[100,101035,2086],{"class":117},[100,101037,6255],{"class":258},[100,101039,101040],{"class":102,"line":618},[100,101041,95116],{"class":1836},[100,101043,101044],{"class":102,"line":623},[100,101045,101046],{"class":1836},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[100,101048,101049,101051,101053,101055,101057],{"class":102,"line":629},[100,101050,101029],{"class":258},[100,101052,2086],{"class":117},[100,101054,2145],{"class":258},[100,101056,2136],{"class":117},[100,101058,6255],{"class":258},[100,101060,101061],{"class":102,"line":635},[100,101062,95116],{"class":1836},[100,101064,101065],{"class":102,"line":641},[100,101066,101067],{"class":1836},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,101069,101070],{},"②二维数组的分割",[19,101072,101073],{},"使用split()",[73,101075,101077],{"className":249,"code":101076,"language":251,"meta":79,"style":79},"#二维数组分割\naa=np.arange(1,37).reshape(6,6)\n#默认axis=0  传入整数平均分,按行来的\nnp.split(aa,3)\n#输出结果：\n'''\n[array([[ 1,  2,  3,  4,  5,  6],\n        [ 7,  8,  9, 10, 11, 12]]),\n array([[13, 14, 15, 16, 17, 18],\n        [19, 20, 21, 22, 23, 24]]),\n array([[25, 26, 27, 28, 29, 30],\n        [31, 32, 33, 34, 35, 36]])]\n '''\n#传入数组\nnp.split(aa,[2,5])\n#输出结果：\n'''\n[array([[ 1,  2,  3,  4,  5,  6],\n        [ 7,  8,  9, 10, 11, 12]]),\n array([[13, 14, 15, 16, 17, 18],\n        [19, 20, 21, 22, 23, 24],\n        [25, 26, 27, 28, 29, 30]]),\n array([[31, 32, 33, 34, 35, 36]])]\n'''\n#axis=1 按照列来分\nnp.split(aa,3,axis=1)\n#输出结果：\n'''\n[array([[ 1,  2],\n        [ 7,  8],\n        [13, 14],\n        [19, 20],\n        [25, 26],\n        [31, 32]]),\n array([[ 3,  4],\n        [ 9, 10],\n        [15, 16],\n        [21, 22],\n        [27, 28],\n        [33, 34]]),\n array([[ 5,  6],\n        [11, 12],\n        [17, 18],\n        [23, 24],\n        [29, 30],\n        [35, 36]])]\n '''\n#传入数组\nnp.split(aa,[1,2],axis=1)\n#结果：\n'''\n[array([[ 1],\n        [ 7],\n        [13],\n        [19],\n        [25],\n        [31]]),\n array([[ 2],\n        [ 8],\n        [14],\n        [20],\n        [26],\n        [32]]),\n array([[ 3,  4,  5,  6],\n        [ 9, 10, 11, 12],\n        [15, 16, 17, 18],\n        [21, 22, 23, 24],\n        [27, 28, 29, 30],\n        [33, 34, 35, 36]])]\n'''\n#在处理二维数组时也可以直接用vsplit()和hsplit()函数\nnp.vsplit(aa,3)\n#结果：\n'''\n[array([[ 1,  2,  3,  4,  5,  6],\n        [ 7,  8,  9, 10, 11, 12]]),\n array([[13, 14, 15, 16, 17, 18],\n        [19, 20, 21, 22, 23, 24]]),\n array([[25, 26, 27, 28, 29, 30],\n        [31, 32, 33, 34, 35, 36]])]\n'''\nnp.hsplit(aa,3)\n#结果：\n'''\n[array([[ 1,  2],\n        [ 7,  8],\n        [13, 14],\n        [19, 20],\n        [25, 26],\n        [31, 32]]),\n array([[ 3,  4],\n        [ 9, 10],\n        [15, 16],\n        [21, 22],\n        [27, 28],\n        [33, 34]]),\n array([[ 5,  6],\n        [11, 12],\n        [17, 18],\n        [23, 24],\n        [29, 30],\n        [35, 36]])]\n'''\nnp.vsplit(aa,[2,5])\n#结果：\n'''\n[array([[ 1,  2,  3,  4,  5,  6],\n        [ 7,  8,  9, 10, 11, 12]]),\n array([[13, 14, 15, 16, 17, 18],\n        [19, 20, 21, 22, 23, 24],\n        [25, 26, 27, 28, 29, 30]]),\n array([[31, 32, 33, 34, 35, 36]])]\n '''\n",[32,101078,101079,101084,101108,101113,101122,101126,101130,101135,101140,101145,101150,101155,101160,101165,101169,101182,101186,101190,101194,101198,101202,101207,101212,101217,101221,101226,101242,101246,101250,101255,101260,101265,101270,101275,101280,101285,101290,101295,101300,101305,101310,101315,101320,101325,101330,101335,101340,101344,101348,101368,101372,101376,101381,101386,101391,101396,101401,101406,101411,101416,101421,101426,101431,101436,101441,101446,101451,101456,101461,101466,101470,101475,101484,101488,101492,101496,101500,101504,101508,101512,101516,101520,101529,101533,101537,101541,101545,101549,101553,101557,101561,101565,101569,101573,101577,101581,101585,101589,101593,101597,101601,101605,101609,101613,101626,101630,101634,101638,101642,101646,101650,101654,101658],{"__ignoreMap":79},[100,101080,101081],{"class":102,"line":103},[100,101082,101083],{"class":1836},"#二维数组分割\n",[100,101085,101086,101088,101090,101092,101094,101096,101098,101100,101102,101104,101106],{"class":102,"line":188},[100,101087,94858],{"class":258},[100,101089,472],{"class":471},[100,101091,94554],{"class":258},[100,101093,1985],{"class":117},[100,101095,2145],{"class":258},[100,101097,2092],{"class":117},[100,101099,94559],{"class":258},[100,101101,2111],{"class":117},[100,101103,2145],{"class":258},[100,101105,2111],{"class":117},[100,101107,809],{"class":258},[100,101109,101110],{"class":102,"line":199},[100,101111,101112],{"class":1836},"#默认axis=0  传入整数平均分,按行来的\n",[100,101114,101115,101118,101120],{"class":102,"line":532},[100,101116,101117],{"class":258},"np.split(aa,",[100,101119,1849],{"class":117},[100,101121,809],{"class":258},[100,101123,101124],{"class":102,"line":577},[100,101125,97314],{"class":1836},[100,101127,101128],{"class":102,"line":589},[100,101129,95480],{"class":110},[100,101131,101132],{"class":102,"line":595},[100,101133,101134],{"class":110},"[array([[ 1,  2,  3,  4,  5,  6],\n",[100,101136,101137],{"class":102,"line":601},[100,101138,101139],{"class":110},"        [ 7,  8,  9, 10, 11, 12]]),\n",[100,101141,101142],{"class":102,"line":606},[100,101143,101144],{"class":110}," array([[13, 14, 15, 16, 17, 18],\n",[100,101146,101147],{"class":102,"line":612},[100,101148,101149],{"class":110},"        [19, 20, 21, 22, 23, 24]]),\n",[100,101151,101152],{"class":102,"line":618},[100,101153,101154],{"class":110}," array([[25, 26, 27, 28, 29, 30],\n",[100,101156,101157],{"class":102,"line":623},[100,101158,101159],{"class":110},"        [31, 32, 33, 34, 35, 36]])]\n",[100,101161,101162],{"class":102,"line":629},[100,101163,101164],{"class":110}," '''\n",[100,101166,101167],{"class":102,"line":635},[100,101168,101024],{"class":1836},[100,101170,101171,101174,101176,101178,101180],{"class":102,"line":641},[100,101172,101173],{"class":258},"np.split(aa,[",[100,101175,465],{"class":117},[100,101177,2145],{"class":258},[100,101179,2086],{"class":117},[100,101181,6255],{"class":258},[100,101183,101184],{"class":102,"line":647},[100,101185,97314],{"class":1836},[100,101187,101188],{"class":102,"line":653},[100,101189,95480],{"class":110},[100,101191,101192],{"class":102,"line":659},[100,101193,101134],{"class":110},[100,101195,101196],{"class":102,"line":665},[100,101197,101139],{"class":110},[100,101199,101200],{"class":102,"line":670},[100,101201,101144],{"class":110},[100,101203,101204],{"class":102,"line":675},[100,101205,101206],{"class":110},"        [19, 20, 21, 22, 23, 24],\n",[100,101208,101209],{"class":102,"line":699},[100,101210,101211],{"class":110},"        [25, 26, 27, 28, 29, 30]]),\n",[100,101213,101214],{"class":102,"line":708},[100,101215,101216],{"class":110}," array([[31, 32, 33, 34, 35, 36]])]\n",[100,101218,101219],{"class":102,"line":722},[100,101220,95480],{"class":110},[100,101222,101223],{"class":102,"line":735},[100,101224,101225],{"class":1836},"#axis=1 按照列来分\n",[100,101227,101228,101230,101232,101234,101236,101238,101240],{"class":102,"line":754},[100,101229,101117],{"class":258},[100,101231,1849],{"class":117},[100,101233,2145],{"class":258},[100,101235,49068],{"class":6812},[100,101237,472],{"class":471},[100,101239,1985],{"class":117},[100,101241,809],{"class":258},[100,101243,101244],{"class":102,"line":771},[100,101245,97314],{"class":1836},[100,101247,101248],{"class":102,"line":776},[100,101249,95480],{"class":110},[100,101251,101252],{"class":102,"line":781},[100,101253,101254],{"class":110},"[array([[ 1,  2],\n",[100,101256,101257],{"class":102,"line":796},[100,101258,101259],{"class":110},"        [ 7,  8],\n",[100,101261,101262],{"class":102,"line":812},[100,101263,101264],{"class":110},"        [13, 14],\n",[100,101266,101267],{"class":102,"line":823},[100,101268,101269],{"class":110},"        [19, 20],\n",[100,101271,101272],{"class":102,"line":828},[100,101273,101274],{"class":110},"        [25, 26],\n",[100,101276,101277],{"class":102,"line":840},[100,101278,101279],{"class":110},"        [31, 32]]),\n",[100,101281,101282],{"class":102,"line":845},[100,101283,101284],{"class":110}," array([[ 3,  4],\n",[100,101286,101287],{"class":102,"line":868},[100,101288,101289],{"class":110},"        [ 9, 10],\n",[100,101291,101292],{"class":102,"line":874},[100,101293,101294],{"class":110},"        [15, 16],\n",[100,101296,101297],{"class":102,"line":879},[100,101298,101299],{"class":110},"        [21, 22],\n",[100,101301,101302],{"class":102,"line":889},[100,101303,101304],{"class":110},"        [27, 28],\n",[100,101306,101307],{"class":102,"line":894},[100,101308,101309],{"class":110},"        [33, 34]]),\n",[100,101311,101312],{"class":102,"line":900},[100,101313,101314],{"class":110}," array([[ 5,  6],\n",[100,101316,101317],{"class":102,"line":910},[100,101318,101319],{"class":110},"        [11, 12],\n",[100,101321,101322],{"class":102,"line":915},[100,101323,101324],{"class":110},"        [17, 18],\n",[100,101326,101327],{"class":102,"line":929},[100,101328,101329],{"class":110},"        [23, 24],\n",[100,101331,101332],{"class":102,"line":935},[100,101333,101334],{"class":110},"        [29, 30],\n",[100,101336,101337],{"class":102,"line":945},[100,101338,101339],{"class":110},"        [35, 36]])]\n",[100,101341,101342],{"class":102,"line":950},[100,101343,101164],{"class":110},[100,101345,101346],{"class":102,"line":955},[100,101347,101024],{"class":1836},[100,101349,101350,101352,101354,101356,101358,101360,101362,101364,101366],{"class":102,"line":972},[100,101351,101173],{"class":258},[100,101353,1985],{"class":117},[100,101355,2145],{"class":258},[100,101357,465],{"class":117},[100,101359,43163],{"class":258},[100,101361,49068],{"class":6812},[100,101363,472],{"class":471},[100,101365,1985],{"class":117},[100,101367,809],{"class":258},[100,101369,101370],{"class":102,"line":11370},[100,101371,95116],{"class":1836},[100,101373,101374],{"class":102,"line":11375},[100,101375,95480],{"class":110},[100,101377,101378],{"class":102,"line":11380},[100,101379,101380],{"class":110},"[array([[ 1],\n",[100,101382,101383],{"class":102,"line":11385},[100,101384,101385],{"class":110},"        [ 7],\n",[100,101387,101388],{"class":102,"line":11394},[100,101389,101390],{"class":110},"        [13],\n",[100,101392,101393],{"class":102,"line":11399},[100,101394,101395],{"class":110},"        [19],\n",[100,101397,101398],{"class":102,"line":11405},[100,101399,101400],{"class":110},"        [25],\n",[100,101402,101403],{"class":102,"line":11426},[100,101404,101405],{"class":110},"        [31]]),\n",[100,101407,101408],{"class":102,"line":11432},[100,101409,101410],{"class":110}," array([[ 2],\n",[100,101412,101413],{"class":102,"line":11446},[100,101414,101415],{"class":110},"        [ 8],\n",[100,101417,101418],{"class":102,"line":11452},[100,101419,101420],{"class":110},"        [14],\n",[100,101422,101423],{"class":102,"line":11479},[100,101424,101425],{"class":110},"        [20],\n",[100,101427,101428],{"class":102,"line":11488},[100,101429,101430],{"class":110},"        [26],\n",[100,101432,101433],{"class":102,"line":11494},[100,101434,101435],{"class":110},"        [32]]),\n",[100,101437,101438],{"class":102,"line":11502},[100,101439,101440],{"class":110}," array([[ 3,  4,  5,  6],\n",[100,101442,101443],{"class":102,"line":11507},[100,101444,101445],{"class":110},"        [ 9, 10, 11, 12],\n",[100,101447,101448],{"class":102,"line":18185},[100,101449,101450],{"class":110},"        [15, 16, 17, 18],\n",[100,101452,101453],{"class":102,"line":18191},[100,101454,101455],{"class":110},"        [21, 22, 23, 24],\n",[100,101457,101458],{"class":102,"line":18214},[100,101459,101460],{"class":110},"        [27, 28, 29, 30],\n",[100,101462,101463],{"class":102,"line":18220},[100,101464,101465],{"class":110},"        [33, 34, 35, 36]])]\n",[100,101467,101468],{"class":102,"line":18243},[100,101469,95480],{"class":110},[100,101471,101472],{"class":102,"line":18257},[100,101473,101474],{"class":1836},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[100,101476,101477,101480,101482],{"class":102,"line":18277},[100,101478,101479],{"class":258},"np.vsplit(aa,",[100,101481,1849],{"class":117},[100,101483,809],{"class":258},[100,101485,101486],{"class":102,"line":18283},[100,101487,95116],{"class":1836},[100,101489,101490],{"class":102,"line":18294},[100,101491,95480],{"class":110},[100,101493,101494],{"class":102,"line":18317},[100,101495,101134],{"class":110},[100,101497,101498],{"class":102,"line":18339},[100,101499,101139],{"class":110},[100,101501,101502],{"class":102,"line":18344},[100,101503,101144],{"class":110},[100,101505,101506],{"class":102,"line":18350},[100,101507,101149],{"class":110},[100,101509,101510],{"class":102,"line":18364},[100,101511,101154],{"class":110},[100,101513,101514],{"class":102,"line":18377},[100,101515,101159],{"class":110},[100,101517,101518],{"class":102,"line":18382},[100,101519,95480],{"class":110},[100,101521,101522,101525,101527],{"class":102,"line":18396},[100,101523,101524],{"class":258},"np.hsplit(aa,",[100,101526,1849],{"class":117},[100,101528,809],{"class":258},[100,101530,101531],{"class":102,"line":18401},[100,101532,95116],{"class":1836},[100,101534,101535],{"class":102,"line":18407},[100,101536,95480],{"class":110},[100,101538,101539],{"class":102,"line":18412},[100,101540,101254],{"class":110},[100,101542,101543],{"class":102,"line":18426},[100,101544,101259],{"class":110},[100,101546,101547],{"class":102,"line":18431},[100,101548,101264],{"class":110},[100,101550,101551],{"class":102,"line":18436},[100,101552,101269],{"class":110},[100,101554,101555],{"class":102,"line":18450},[100,101556,101274],{"class":110},[100,101558,101559],{"class":102,"line":18462},[100,101560,101279],{"class":110},[100,101562,101563],{"class":102,"line":18467},[100,101564,101284],{"class":110},[100,101566,101567],{"class":102,"line":18480},[100,101568,101289],{"class":110},[100,101570,101571],{"class":102,"line":18485},[100,101572,101294],{"class":110},[100,101574,101575],{"class":102,"line":18490},[100,101576,101299],{"class":110},[100,101578,101579],{"class":102,"line":18495},[100,101580,101304],{"class":110},[100,101582,101583],{"class":102,"line":18508},[100,101584,101309],{"class":110},[100,101586,101587],{"class":102,"line":18513},[100,101588,101314],{"class":110},[100,101590,101591],{"class":102,"line":34189},[100,101592,101319],{"class":110},[100,101594,101595],{"class":102,"line":34195},[100,101596,101324],{"class":110},[100,101598,101599],{"class":102,"line":34201},[100,101600,101329],{"class":110},[100,101602,101603],{"class":102,"line":34207},[100,101604,101334],{"class":110},[100,101606,101607],{"class":102,"line":34213},[100,101608,101339],{"class":110},[100,101610,101611],{"class":102,"line":34224},[100,101612,95480],{"class":110},[100,101614,101615,101618,101620,101622,101624],{"class":102,"line":34230},[100,101616,101617],{"class":258},"np.vsplit(aa,[",[100,101619,465],{"class":117},[100,101621,2145],{"class":258},[100,101623,2086],{"class":117},[100,101625,6255],{"class":258},[100,101627,101628],{"class":102,"line":34250},[100,101629,95116],{"class":1836},[100,101631,101632],{"class":102,"line":34256},[100,101633,95480],{"class":110},[100,101635,101636],{"class":102,"line":34267},[100,101637,101134],{"class":110},[100,101639,101640],{"class":102,"line":34273},[100,101641,101139],{"class":110},[100,101643,101644],{"class":102,"line":34279},[100,101645,101144],{"class":110},[100,101647,101648],{"class":102,"line":34285},[100,101649,101206],{"class":110},[100,101651,101652],{"class":102,"line":34291},[100,101653,101211],{"class":110},[100,101655,101656],{"class":102,"line":34297},[100,101657,101216],{"class":110},[100,101659,101660],{"class":102,"line":34303},[100,101661,101164],{"class":110},[1677,101663,101664],{},"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":79,"searchDepth":188,"depth":188,"links":101666},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":100932,"description":24958},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":101673,"title":101674,"body":101675,"description":24958,"extension":1708,"meta":102169,"navigation":569,"path":102170,"seo":102171,"stem":102172,"__hash__":102173},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":101676,"toc":102160},[101677,101680,101683,101708,101712,101771,101823,101827,101829,101865,101919,101921,101959,102030,102034,102039,102043,102046,102079,102082,102086,102089,102092,102095,102098,102103,102107,102110,102113,102116,102119,102124,102128,102133,102136,102157],[10,101678,101674],{"id":101679},"_9数学函数",[19,101681,101682],{},"补充回顾：python的列表推导式",[73,101684,101686],{"className":249,"code":101685,"language":251,"meta":79,"style":79},"[1\u002Fi for i in a]\n",[32,101687,101688],{"__ignoreMap":79},[100,101689,101690,101692,101694,101696,101699,101701,101703,101705],{"class":102,"line":103},[100,101691,2656],{"class":258},[100,101693,1985],{"class":117},[100,101695,2351],{"class":471},[100,101697,101698],{"class":258},"i ",[100,101700,1051],{"class":471},[100,101702,11023],{"class":258},[100,101704,854],{"class":471},[100,101706,101707],{"class":258}," a]\n",[14,101709,101711],{"id":101710},"_91-求倒数","9.1 求倒数",[73,101713,101715],{"className":249,"code":101714,"language":251,"meta":79,"style":79},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[32,101716,101717,101722,101750,101762],{"__ignoreMap":79},[100,101718,101719],{"class":102,"line":103},[100,101720,101721],{"class":1836},"#数组求倒数\n",[100,101723,101724,101726,101728,101730,101732,101734,101736,101738,101740,101742,101744,101746,101748],{"class":102,"line":188},[100,101725,2006],{"class":258},[100,101727,472],{"class":471},[100,101729,2656],{"class":258},[100,101731,1985],{"class":117},[100,101733,2145],{"class":258},[100,101735,465],{"class":117},[100,101737,2145],{"class":258},[100,101739,1849],{"class":117},[100,101741,2145],{"class":258},[100,101743,748],{"class":117},[100,101745,2145],{"class":258},[100,101747,2086],{"class":117},[100,101749,34802],{"class":258},[100,101751,101752,101754,101756,101759],{"class":102,"line":199},[100,101753,2031],{"class":258},[100,101755,472],{"class":471},[100,101757,101758],{"class":258},"np.array(a)",[100,101760,101761],{"class":1836},"#将列表转换为数组\n",[100,101763,101764,101766,101768],{"class":102,"line":532},[100,101765,1985],{"class":117},[100,101767,2351],{"class":471},[100,101769,101770],{"class":258},"b\n",[73,101772,101774],{"className":249,"code":101773,"language":251,"meta":79,"style":79},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[32,101775,101776,101804,101813,101818],{"__ignoreMap":79},[100,101777,101778,101780,101782,101784,101786,101788,101790,101792,101794,101796,101798,101800,101802],{"class":102,"line":103},[100,101779,2006],{"class":258},[100,101781,472],{"class":471},[100,101783,2656],{"class":258},[100,101785,1985],{"class":117},[100,101787,2145],{"class":258},[100,101789,465],{"class":117},[100,101791,2145],{"class":258},[100,101793,1849],{"class":117},[100,101795,2145],{"class":258},[100,101797,748],{"class":117},[100,101799,2145],{"class":258},[100,101801,2086],{"class":117},[100,101803,34802],{"class":258},[100,101805,101806,101808,101810],{"class":102,"line":188},[100,101807,2031],{"class":258},[100,101809,472],{"class":471},[100,101811,101812],{"class":258},"np.array(a)\n",[100,101814,101815],{"class":102,"line":199},[100,101816,101817],{"class":1836},"#调用numpy中的函数reciprocal()\n",[100,101819,101820],{"class":102,"line":532},[100,101821,101822],{"class":258},"np.reciprocal(b)\n",[14,101824,101826],{"id":101825},"_92-求平方","9.2 求平方",[19,101828,96082],{},[73,101830,101832],{"className":249,"code":101831,"language":251,"meta":79,"style":79},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[32,101833,101834,101839,101844,101860],{"__ignoreMap":79},[100,101835,101836],{"class":102,"line":103},[100,101837,101838],{"class":1836},"#square()，求平方\n",[100,101840,101841],{"class":102,"line":188},[100,101842,101843],{"class":1836},"#一维数组\n",[100,101845,101846,101848,101850,101852,101854,101856,101858],{"class":102,"line":199},[100,101847,2006],{"class":258},[100,101849,472],{"class":471},[100,101851,94554],{"class":258},[100,101853,1985],{"class":117},[100,101855,2145],{"class":258},[100,101857,2213],{"class":117},[100,101859,809],{"class":258},[100,101861,101862],{"class":102,"line":532},[100,101863,101864],{"class":258},"np.square(a)\n",[73,101866,101868],{"className":249,"code":101867,"language":251,"meta":79,"style":79},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[32,101869,101870,101875,101880,101901],{"__ignoreMap":79},[100,101871,101872],{"class":102,"line":103},[100,101873,101874],{"class":1836},"#或者通过循环遍历的形式来计算\n",[100,101876,101877],{"class":102,"line":188},[100,101878,101879],{"class":1836},"#这是一个列表\n",[100,101881,101882,101885,101887,101889,101891,101893,101895,101898],{"class":102,"line":199},[100,101883,101884],{"class":258},"[i",[100,101886,2222],{"class":471},[100,101888,101698],{"class":258},[100,101890,1051],{"class":471},[100,101892,11023],{"class":258},[100,101894,854],{"class":471},[100,101896,101897],{"class":258}," a]",[100,101899,101900],{"class":1836},"#这个求完之后在数列当中\n",[100,101902,101903,101906,101908,101910,101912,101914,101916],{"class":102,"line":532},[100,101904,101905],{"class":258},"np.array([i",[100,101907,2222],{"class":471},[100,101909,101698],{"class":258},[100,101911,1051],{"class":471},[100,101913,11023],{"class":258},[100,101915,854],{"class":471},[100,101917,101918],{"class":258}," a])\n",[19,101920,94843],{},[73,101922,101924],{"className":249,"code":101923,"language":251,"meta":79,"style":79},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[32,101925,101926,101930,101954],{"__ignoreMap":79},[100,101927,101928],{"class":102,"line":103},[100,101929,94853],{"class":1836},[100,101931,101932,101934,101936,101938,101940,101942,101944,101946,101948,101950,101952],{"class":102,"line":188},[100,101933,94858],{"class":258},[100,101935,472],{"class":471},[100,101937,94554],{"class":258},[100,101939,1985],{"class":117},[100,101941,2145],{"class":258},[100,101943,2290],{"class":117},[100,101945,94559],{"class":258},[100,101947,748],{"class":117},[100,101949,2145],{"class":258},[100,101951,1849],{"class":117},[100,101953,809],{"class":258},[100,101955,101956],{"class":102,"line":199},[100,101957,101958],{"class":258},"np.square(aa)\n",[73,101960,101962],{"className":249,"code":101961,"language":251,"meta":79,"style":79},"#传统的方式\nbb=np.empty_like(aa)\nfor i in range(4):\n    for j in range(3):\n        bb[i,j]=aa[i,j]*aa[i,j]\nbb\n",[32,101963,101964,101969,101978,101994,102010,102025],{"__ignoreMap":79},[100,101965,101966],{"class":102,"line":103},[100,101967,101968],{"class":1836},"#传统的方式\n",[100,101970,101971,101973,101975],{"class":102,"line":188},[100,101972,99737],{"class":258},[100,101974,472],{"class":471},[100,101976,101977],{"class":258},"np.empty_like(aa)\n",[100,101979,101980,101982,101984,101986,101988,101990,101992],{"class":102,"line":199},[100,101981,1051],{"class":471},[100,101983,11023],{"class":258},[100,101985,854],{"class":471},[100,101987,857],{"class":117},[100,101989,713],{"class":258},[100,101991,748],{"class":117},[100,101993,865],{"class":258},[100,101995,101996,101998,102000,102002,102004,102006,102008],{"class":102,"line":532},[100,101997,848],{"class":471},[100,101999,11085],{"class":258},[100,102001,854],{"class":471},[100,102003,857],{"class":117},[100,102005,713],{"class":258},[100,102007,1849],{"class":117},[100,102009,865],{"class":258},[100,102011,102012,102015,102017,102020,102022],{"class":102,"line":577},[100,102013,102014],{"class":258},"        bb[i,j]",[100,102016,472],{"class":471},[100,102018,102019],{"class":258},"aa[i,j]",[100,102021,2222],{"class":471},[100,102023,102024],{"class":258},"aa[i,j]\n",[100,102026,102027],{"class":102,"line":589},[100,102028,102029],{"class":258},"bb\n",[14,102031,102033],{"id":102032},"_93-求各元素的符号","9.3 求各元素的符号",[19,102035,102036],{},[3095,102037],{"alt":79,"src":102038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,102040,102042],{"id":102041},"_94-modf函数","9.4 modf函数",[19,102044,102045],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[73,102047,102049],{"className":249,"code":102048,"language":251,"meta":79,"style":79},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[32,102050,102051,102074],{"__ignoreMap":79},[100,102052,102053,102055,102057,102059,102061,102063,102065,102067,102069,102072],{"class":102,"line":103},[100,102054,2006],{"class":258},[100,102056,472],{"class":471},[100,102058,94554],{"class":258},[100,102060,2299],{"class":471},[100,102062,2213],{"class":117},[100,102064,2145],{"class":258},[100,102066,2213],{"class":117},[100,102068,2145],{"class":258},[100,102070,102071],{"class":117},"0.3",[100,102073,809],{"class":258},[100,102075,102076],{"class":102,"line":188},[100,102077,102078],{"class":258},"np.modf(a)\n",[19,102080,102081],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,102083,102085],{"id":102084},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,102087,102088],{},"np.cell()",[19,102090,102091],{},"np.floor()",[19,102093,102094],{},"np.rint()",[19,102096,102097],{},"对各元素分别向上取整、向下取整、四舍五入",[19,102099,102100],{},[3095,102101],{"alt":79,"src":102102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,102104,102106],{"id":102105},"_96-around函数","9.6 around()函数",[19,102108,102109],{},"around()函数也可以实现对数的小数位数进行操作",[19,102111,102112],{},"其中的参数：",[19,102114,102115],{},"1.要传的数组",[19,102117,102118],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,102120,102121],{},[3095,102122],{"alt":79,"src":102123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,102125,102127],{"id":102126},"_97-三角函数","9.7 三角函数",[19,102129,102130],{},[3095,102131],{"alt":79,"src":102132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,102134,102135],{},"引入图像模块非常重要",[73,102137,102139],{"className":249,"code":102138,"language":251,"meta":79,"style":79},"from matplotlib import pyplot as plt\n",[32,102140,102141],{"__ignoreMap":79},[100,102142,102143,102145,102148,102150,102153,102155],{"class":102,"line":103},[100,102144,32301],{"class":471},[100,102146,102147],{"class":258}," matplotlib ",[100,102149,548],{"class":471},[100,102151,102152],{"class":258}," pyplot ",[100,102154,561],{"class":471},[100,102156,32995],{"class":258},[1677,102158,102159],{},"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":79,"searchDepth":188,"depth":188,"links":102161},[102162,102163,102164,102165,102166,102167,102168],{"id":101710,"depth":188,"text":101711},{"id":101825,"depth":188,"text":101826},{"id":102032,"depth":188,"text":102033},{"id":102041,"depth":188,"text":102042},{"id":102084,"depth":188,"text":102085},{"id":102105,"depth":188,"text":102106},{"id":102126,"depth":188,"text":102127},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":101674,"description":24958},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":102175,"title":102176,"body":102177,"description":24958,"extension":1708,"meta":102181,"navigation":569,"path":102182,"seo":102183,"stem":102184,"__hash__":102185},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":102178,"toc":102179},[],{"title":79,"searchDepth":188,"depth":188,"links":102180},[],{"category":51974},"\u002Fwiki\u002F2025-08-14-numpy",{"title":102176,"description":24958},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":102187,"title":102188,"body":102189,"description":79,"extension":1708,"meta":104123,"navigation":569,"path":104124,"seo":104125,"stem":104126,"__hash__":104127},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":102190,"toc":104099},[102191,102194,102196,102199,102202,102208,102211,102232,102235,102267,102270,102311,102313,102315,102406,102409,102453,102456,102470,102473,102487,102490,102493,102534,102536,102572,102574,102577,102583,102588,102604,102608,102611,102677,102680,102698,102702,102705,102734,102743,102749,102753,102756,102762,102773,102775,102778,102807,102810,103067,103069,103072,103083,103086,103089,103111,103117,103120,103137,103140,103143,103156,103164,103167,103192,103198,103200,103203,103213,103225,103245,103254,103274,103284,103308,103321,103335,103340,103381,103398,103423,103435,103455,103461,103506,103525,103542,103555,103571,103577,103589,103598,103633,103653,103678,103691,103715,103730,103755,103758,103779,103788,103790,103801,103803,103806,103812,103824,103831,103833,103836,103848,103851,103865,103868,103878,103888,103891,103929,103932,103934,103940,103942,103956,103960,103963,103995,103999,104002,104025,104033,104036,104042,104048,104051,104054,104082,104084,104087,104093,104096],[10,102192,102188],{"id":102193},"_1环境安装与第一个-mujoco-程序",[14,102195,17],{"id":16},[19,102197,102198],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,102200,102201],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[73,102203,102206],{"className":102204,"code":102205,"language":78,"meta":79},[76],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[32,102207,102205],{"__ignoreMap":79},[19,102209,102210],{},"需要掌握:",[26,102212,102213,102216,102219,102223,102227],{},[29,102214,102215],{},"Fedora 44 下 MuJoCo 的系统依赖",[29,102217,102218],{},"Python 虚拟环境创建",[29,102220,102221],{},[32,102222,217],{},[29,102224,102225],{},[32,102226,221],{},[29,102228,102229],{},[32,102230,102231],{},"mujoco.mj_step(model, data)",[19,102233,102234],{},"MuJoCo 中最重要的两个对象:",[319,102236,102237,102246],{},[322,102238,102239],{},[325,102240,102241,102244],{},[328,102242,102243],{"align":330},"对象",[328,102245,334],{"align":330},[339,102247,102248,102257],{},[325,102249,102250,102254],{},[344,102251,102252],{"align":330},[32,102253,232],{},[344,102255,102256],{"align":330},"模型结构，来自 XML，基本不随时间变化",[325,102258,102259,102264],{},[344,102260,102261],{"align":330},[32,102262,102263],{},"MjData",[344,102265,102266],{"align":330},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,102268,102269],{},"可以先用一个类比理解：",[319,102271,102272,102282],{},[322,102273,102274],{},[325,102275,102276,102279],{},[328,102277,102278],{"align":330},"类比",[328,102280,102281],{"align":330},"MuJoCo 对象",[339,102283,102284,102293,102302],{},[325,102285,102286,102289],{},[344,102287,102288],{"align":330},"游戏地图和角色配置",[344,102290,102291],{"align":330},[32,102292,232],{},[325,102294,102295,102298],{},[344,102296,102297],{"align":330},"游戏运行到当前帧的状态",[344,102299,102300],{"align":330},[32,102301,102263],{},[325,102303,102304,102307],{},[344,102305,102306],{"align":330},"前进一帧",[344,102308,102309],{"align":330},[32,102310,102231],{},[14,102312,88],{"id":87},[19,102314,91],{},[73,102316,102318],{"className":94,"code":102317,"language":96,"meta":79,"style":79},"sudo dnf install -y \\\n  python3 python3-pip python3-virtualenv \\\n  mesa-libGL mesa-libGLU mesa-dri-drivers \\\n  libglvnd-glx libglvnd-opengl \\\n  glfw glfw-devel \\\n  libX11 libXcursor libXi libXinerama libXrandr \\\n  gcc gcc-c++ make\n",[32,102319,102320,102332,102344,102356,102366,102376,102395],{"__ignoreMap":79},[100,102321,102322,102324,102326,102328,102330],{"class":102,"line":103},[100,102323,107],{"class":106},[100,102325,111],{"class":110},[100,102327,114],{"class":110},[100,102329,118],{"class":117},[100,102331,26254],{"class":117},[100,102333,102334,102337,102339,102342],{"class":102,"line":188},[100,102335,102336],{"class":110},"  python3",[100,102338,124],{"class":110},[100,102340,102341],{"class":110}," python3-virtualenv",[100,102343,26254],{"class":117},[100,102345,102346,102349,102352,102354],{"class":102,"line":199},[100,102347,102348],{"class":110},"  mesa-libGL",[100,102350,102351],{"class":110}," mesa-libGLU",[100,102353,130],{"class":110},[100,102355,26254],{"class":117},[100,102357,102358,102361,102364],{"class":102,"line":532},[100,102359,102360],{"class":110},"  libglvnd-glx",[100,102362,102363],{"class":110}," libglvnd-opengl",[100,102365,26254],{"class":117},[100,102367,102368,102371,102374],{"class":102,"line":577},[100,102369,102370],{"class":110},"  glfw",[100,102372,102373],{"class":110}," glfw-devel",[100,102375,26254],{"class":117},[100,102377,102378,102381,102384,102387,102390,102393],{"class":102,"line":589},[100,102379,102380],{"class":110},"  libX11",[100,102382,102383],{"class":110}," libXcursor",[100,102385,102386],{"class":110}," libXi",[100,102388,102389],{"class":110}," libXinerama",[100,102391,102392],{"class":110}," libXrandr",[100,102394,26254],{"class":117},[100,102396,102397,102400,102403],{"class":102,"line":595},[100,102398,102399],{"class":110},"  gcc",[100,102401,102402],{"class":110}," gcc-c++",[100,102404,102405],{"class":110}," make\n",[19,102407,102408],{},"创建 Python 环境:",[73,102410,102412],{"className":94,"code":102411,"language":96,"meta":79,"style":79},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[32,102413,102414,102428,102436],{"__ignoreMap":79},[100,102415,102416,102419,102422,102425],{"class":102,"line":103},[100,102417,102418],{"class":106},"python3",[100,102420,102421],{"class":117}," -m",[100,102423,102424],{"class":110}," venv",[100,102426,102427],{"class":110}," .venv\n",[100,102429,102430,102433],{"class":102,"line":188},[100,102431,102432],{"class":117},"source",[100,102434,102435],{"class":110}," .venv\u002Fbin\u002Factivate\n",[100,102437,102438,102440,102442,102445,102447,102450],{"class":102,"line":199},[100,102439,251],{"class":106},[100,102441,102421],{"class":117},[100,102443,102444],{"class":110}," pip",[100,102446,114],{"class":110},[100,102448,102449],{"class":117}," --upgrade",[100,102451,102452],{"class":110}," pip\n",[19,102454,102455],{},"pip 安装:",[73,102457,102458],{"className":94,"code":139,"language":96,"meta":79,"style":79},[32,102459,102460],{"__ignoreMap":79},[100,102461,102462,102464,102466,102468],{"class":102,"line":103},[100,102463,146],{"class":106},[100,102465,114],{"class":110},[100,102467,151],{"class":110},[100,102469,154],{"class":110},[19,102471,102472],{},"安装完成后，先做最小检查：",[73,102474,102476],{"className":94,"code":102475,"language":96,"meta":79,"style":79},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[32,102477,102478],{"__ignoreMap":79},[100,102479,102480,102482,102484],{"class":102,"line":103},[100,102481,251],{"class":106},[100,102483,31927],{"class":117},[100,102485,102486],{"class":110}," \"import mujoco; print(mujoco.__version__)\"\n",[19,102488,102489],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,102491,102492],{},"conda 安装:",[73,102494,102496],{"className":94,"code":102495,"language":96,"meta":79,"style":79},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[32,102497,102498,102515,102524],{"__ignoreMap":79},[100,102499,102500,102502,102504,102506,102509,102511,102513],{"class":102,"line":103},[100,102501,167],{"class":106},[100,102503,170],{"class":110},[100,102505,173],{"class":117},[100,102507,102508],{"class":110}," mujoco-study",[100,102510,179],{"class":110},[100,102512,182],{"class":117},[100,102514,185],{"class":117},[100,102516,102517,102519,102521],{"class":102,"line":188},[100,102518,167],{"class":106},[100,102520,193],{"class":110},[100,102522,102523],{"class":110}," mujoco-study\n",[100,102525,102526,102528,102530,102532],{"class":102,"line":199},[100,102527,146],{"class":106},[100,102529,114],{"class":110},[100,102531,151],{"class":110},[100,102533,154],{"class":110},[19,102535,210],{},[26,102537,102538,102544,102553,102562],{},[29,102539,102540,102541,233],{},"不要安装 ",[32,102542,102543],{},"mujoco-py",[29,102545,102546,102547,218,102549,102552],{},"如果旧项目里同时安装了 ",[32,102548,102543],{},[32,102550,102551],{},"mujoco","，建议新建干净虚拟环境。",[29,102554,102555,102558,102559,233],{},[32,102556,102557],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[32,102560,102561],{},"~\u002F.mujoco\u002Fmujoco210",[29,102563,102564,102565,288,102568,102571],{},"离屏渲染可能涉及 OpenGL 后端，",[32,102566,102567],{},"MUJOCO_GL=egl",[32,102569,102570],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,102573,243],{"id":242},[19,102575,102576],{},"MuJoCo 的基本执行流程:",[73,102578,102581],{"className":102579,"code":102580,"language":78,"meta":79},[76],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[32,102582,102580],{"__ignoreMap":79},[19,102584,102585,102587],{},[32,102586,232],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,102589,102590,102592,102593,56,102595,56,102597,56,102599,56,102601,233],{},[32,102591,102263],{}," 存放仿真运行时状态，例如 ",[32,102594,270],{},[32,102596,264],{},[32,102598,267],{},[32,102600,372],{},[32,102602,102603],{},"data.xpos",[305,102605,102607],{"id":102606},"xml-是什么","XML 是什么",[19,102609,102610],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[73,102612,102614],{"className":54621,"code":102613,"language":54623,"meta":79,"style":79},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n  \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\"\u002F>\n\u003C\u002Fbody>\n",[32,102615,102616,102638,102669],{"__ignoreMap":79},[100,102617,102618,102620,102622,102624,102626,102628,102631,102633,102636],{"class":102,"line":103},[100,102619,2676],{"class":258},[100,102621,53354],{"class":52854},[100,102623,16501],{"class":106},[100,102625,472],{"class":258},[100,102627,55045],{"class":110},[100,102629,102630],{"class":106}," pos",[100,102632,472],{"class":258},[100,102634,102635],{"class":110},"\"0 0 1\"",[100,102637,52861],{"class":258},[100,102639,102640,102642,102645,102647,102649,102652,102654,102656,102658,102661,102663,102666],{"class":102,"line":188},[100,102641,53698],{"class":258},[100,102643,102644],{"class":52854},"geom",[100,102646,16501],{"class":106},[100,102648,472],{"class":258},[100,102650,102651],{"class":110},"\"box_geom\"",[100,102653,55378],{"class":106},[100,102655,472],{"class":258},[100,102657,55045],{"class":110},[100,102659,102660],{"class":106}," size",[100,102662,472],{"class":258},[100,102664,102665],{"class":110},"\"0.1 0.1 0.1\"",[100,102667,102668],{"class":258},"\u002F>\n",[100,102670,102671,102673,102675],{"class":102,"line":199},[100,102672,53339],{"class":258},[100,102674,53354],{"class":52854},[100,102676,52861],{"class":258},[19,102678,102679],{},"这段意思是：",[26,102681,102682,102688,102695],{},[29,102683,102684,102685,102687],{},"创建一个叫 ",[32,102686,55268],{}," 的刚体。",[29,102689,102690,102691,102694],{},"它初始放在 ",[32,102692,102693],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[29,102696,102697],{},"它里面有一个盒子形状的几何体。",[305,102699,102701],{"id":102700},"timestep-是什么","timestep 是什么",[19,102703,102704],{},"XML 里的：",[73,102706,102708],{"className":54621,"code":102707,"language":54623,"meta":79,"style":79},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[32,102709,102710],{"__ignoreMap":79},[100,102711,102712,102714,102716,102719,102721,102724,102727,102729,102732],{"class":102,"line":103},[100,102713,2676],{"class":258},[100,102715,70720],{"class":52854},[100,102717,102718],{"class":106}," timestep",[100,102720,472],{"class":258},[100,102722,102723],{"class":110},"\"0.01\"",[100,102725,102726],{"class":106}," gravity",[100,102728,472],{"class":258},[100,102730,102731],{"class":110},"\"0 0 -9.81\"",[100,102733,102668],{"class":258},[19,102735,102736,102737,102739,102740,102742],{},"表示每调用一次 ",[32,102738,44],{},"，仿真时间前进 ",[32,102741,40540],{}," 秒。循环 100 次，大约就是 1 秒：",[73,102744,102747],{"className":102745,"code":102746,"language":78,"meta":79},[76],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[32,102748,102746],{"__ignoreMap":79},[305,102750,102752],{"id":102751},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,102754,102755],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[73,102757,102760],{"className":102758,"code":102759,"language":78,"meta":79},[76],"x y z qw qx qy qz\n",[32,102761,102759],{"__ignoreMap":79},[19,102763,102764,102765,102768,102769,102772],{},"表示一个自由刚体的位置和姿态。其中 ",[32,102766,102767],{},"x y z"," 是位置，",[32,102770,102771],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,102774,538],{"id":537},[19,102776,102777],{},"新建文件:",[73,102779,102781],{"className":94,"code":102780,"language":96,"meta":79,"style":79},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[32,102782,102783,102793,102800],{"__ignoreMap":79},[100,102784,102785,102788,102790],{"class":102,"line":103},[100,102786,102787],{"class":106},"mkdir",[100,102789,30786],{"class":117},[100,102791,102792],{"class":110}," mujoco_tutorial\n",[100,102794,102795,102798],{"class":102,"line":188},[100,102796,102797],{"class":117},"cd",[100,102799,102792],{"class":110},[100,102801,102802,102804],{"class":102,"line":199},[100,102803,988],{"class":106},[100,102805,102806],{"class":110}," ch1_first_sim.py\n",[19,102808,102809],{},"写入:",[73,102811,102813],{"className":249,"code":102812,"language":251,"meta":79,"style":79},"import mujoco\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"first_sim\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n\n    \u003Cbody name=\"box\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"box_free\"\u002F>\n      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    print(\"nq:\", model.nq)\n    print(\"nv:\", model.nv)\n    print(\"nu:\", model.nu)\n    print(\"initial time:\", data.time)\n    print(\"initial qpos:\", data.qpos.copy())\n\n    for _ in range(100):\n        mujoco.mj_step(model, data)\n\n    print(\"final time:\", data.time)\n    print(\"final qpos:\", data.qpos.copy())\n\n\nif __name__ == \"__main__\":\n    main()\n",[32,102814,102815,102821,102825,102829,102837,102842,102846,102850,102854,102859,102863,102868,102873,102878,102882,102886,102890,102894,102898,102902,102914,102926,102934,102938,102948,102958,102970,102981,102993,102997,103013,103017,103021,103032,103043,103047,103051,103063],{"__ignoreMap":79},[100,102816,102817,102819],{"class":102,"line":103},[100,102818,548],{"class":471},[100,102820,551],{"class":258},[100,102822,102823],{"class":102,"line":188},[100,102824,570],{"emptyLinePlaceholder":569},[100,102826,102827],{"class":102,"line":199},[100,102828,570],{"emptyLinePlaceholder":569},[100,102830,102831,102833,102835],{"class":102,"line":532},[100,102832,580],{"class":117},[100,102834,583],{"class":471},[100,102836,586],{"class":110},[100,102838,102839],{"class":102,"line":577},[100,102840,102841],{"class":110},"\u003Cmujoco model=\"first_sim\">\n",[100,102843,102844],{"class":102,"line":589},[100,102845,598],{"class":110},[100,102847,102848],{"class":102,"line":595},[100,102849,570],{"emptyLinePlaceholder":569},[100,102851,102852],{"class":102,"line":601},[100,102853,609],{"class":110},[100,102855,102856],{"class":102,"line":606},[100,102857,102858],{"class":110},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[100,102860,102861],{"class":102,"line":612},[100,102862,570],{"emptyLinePlaceholder":569},[100,102864,102865],{"class":102,"line":618},[100,102866,102867],{"class":110},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[100,102869,102870],{"class":102,"line":623},[100,102871,102872],{"class":110},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[100,102874,102875],{"class":102,"line":629},[100,102876,102877],{"class":110},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[100,102879,102880],{"class":102,"line":635},[100,102881,644],{"class":110},[100,102883,102884],{"class":102,"line":641},[100,102885,650],{"class":110},[100,102887,102888],{"class":102,"line":647},[100,102889,656],{"class":110},[100,102891,102892],{"class":102,"line":653},[100,102893,662],{"class":110},[100,102895,102896],{"class":102,"line":659},[100,102897,570],{"emptyLinePlaceholder":569},[100,102899,102900],{"class":102,"line":665},[100,102901,570],{"emptyLinePlaceholder":569},[100,102903,102904,102906,102908,102910,102912],{"class":102,"line":670},[100,102905,678],{"class":471},[100,102907,786],{"class":106},[100,102909,789],{"class":258},[100,102911,693],{"class":117},[100,102913,696],{"class":258},[100,102915,102916,102918,102920,102922,102924],{"class":102,"line":675},[100,102917,799],{"class":258},[100,102919,472],{"class":471},[100,102921,804],{"class":258},[100,102923,580],{"class":117},[100,102925,809],{"class":258},[100,102927,102928,102930,102932],{"class":102,"line":699},[100,102929,815],{"class":258},[100,102931,472],{"class":471},[100,102933,820],{"class":258},[100,102935,102936],{"class":102,"line":708},[100,102937,570],{"emptyLinePlaceholder":569},[100,102939,102940,102942,102944,102946],{"class":102,"line":722},[100,102941,702],{"class":117},[100,102943,713],{"class":258},[100,102945,1585],{"class":110},[100,102947,1588],{"class":258},[100,102949,102950,102952,102954,102956],{"class":102,"line":735},[100,102951,702],{"class":117},[100,102953,713],{"class":258},[100,102955,1597],{"class":110},[100,102957,1600],{"class":258},[100,102959,102960,102962,102964,102967],{"class":102,"line":754},[100,102961,702],{"class":117},[100,102963,713],{"class":258},[100,102965,102966],{"class":110},"\"nu:\"",[100,102968,102969],{"class":258},", model.nu)\n",[100,102971,102972,102974,102976,102979],{"class":102,"line":771},[100,102973,702],{"class":117},[100,102975,713],{"class":258},[100,102977,102978],{"class":110},"\"initial time:\"",[100,102980,732],{"class":258},[100,102982,102983,102985,102987,102990],{"class":102,"line":776},[100,102984,702],{"class":117},[100,102986,713],{"class":258},[100,102988,102989],{"class":110},"\"initial qpos:\"",[100,102991,102992],{"class":258},", data.qpos.copy())\n",[100,102994,102995],{"class":102,"line":781},[100,102996,570],{"emptyLinePlaceholder":569},[100,102998,102999,103001,103003,103005,103007,103009,103011],{"class":102,"line":796},[100,103000,848],{"class":471},[100,103002,851],{"class":258},[100,103004,854],{"class":471},[100,103006,857],{"class":117},[100,103008,713],{"class":258},[100,103010,2078],{"class":117},[100,103012,865],{"class":258},[100,103014,103015],{"class":102,"line":812},[100,103016,871],{"class":258},[100,103018,103019],{"class":102,"line":823},[100,103020,570],{"emptyLinePlaceholder":569},[100,103022,103023,103025,103027,103030],{"class":102,"line":828},[100,103024,702],{"class":117},[100,103026,713],{"class":258},[100,103028,103029],{"class":110},"\"final time:\"",[100,103031,732],{"class":258},[100,103033,103034,103036,103038,103041],{"class":102,"line":840},[100,103035,702],{"class":117},[100,103037,713],{"class":258},[100,103039,103040],{"class":110},"\"final qpos:\"",[100,103042,102992],{"class":258},[100,103044,103045],{"class":102,"line":845},[100,103046,570],{"emptyLinePlaceholder":569},[100,103048,103049],{"class":102,"line":868},[100,103050,570],{"emptyLinePlaceholder":569},[100,103052,103053,103055,103057,103059,103061],{"class":102,"line":874},[100,103054,958],{"class":471},[100,103056,961],{"class":117},[100,103058,964],{"class":471},[100,103060,967],{"class":110},[100,103062,696],{"class":258},[100,103064,103065],{"class":102,"line":879},[100,103066,975],{"class":258},[305,103068,1008],{"id":1008},[19,103070,103071],{},"导入库：",[73,103073,103075],{"className":249,"code":103074,"language":251,"meta":79,"style":79},"import mujoco\n",[32,103076,103077],{"__ignoreMap":79},[100,103078,103079,103081],{"class":102,"line":103},[100,103080,548],{"class":471},[100,103082,551],{"class":258},[19,103084,103085],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,103087,103088],{},"定义 XML：",[73,103090,103092],{"className":249,"code":103091,"language":251,"meta":79,"style":79},"XML = \"\"\"\n...\n\"\"\"\n",[32,103093,103094,103102,103107],{"__ignoreMap":79},[100,103095,103096,103098,103100],{"class":102,"line":103},[100,103097,580],{"class":117},[100,103099,583],{"class":471},[100,103101,586],{"class":110},[100,103103,103104],{"class":102,"line":188},[100,103105,103106],{"class":110},"...\n",[100,103108,103109],{"class":102,"line":199},[100,103110,662],{"class":110},[19,103112,103113,103114,103116],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[32,103115,1554],{}," 的方块。",[19,103118,103119],{},"编译模型：",[73,103121,103123],{"className":249,"code":103122,"language":251,"meta":79,"style":79},"model = mujoco.MjModel.from_xml_string(XML)\n",[32,103124,103125],{"__ignoreMap":79},[100,103126,103127,103129,103131,103133,103135],{"class":102,"line":103},[100,103128,1221],{"class":258},[100,103130,472],{"class":471},[100,103132,804],{"class":258},[100,103134,580],{"class":117},[100,103136,809],{"class":258},[19,103138,103139],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,103141,103142],{},"创建数据：",[73,103144,103146],{"className":249,"code":103145,"language":251,"meta":79,"style":79},"data = mujoco.MjData(model)\n",[32,103147,103148],{"__ignoreMap":79},[100,103149,103150,103152,103154],{"class":102,"line":103},[100,103151,1234],{"class":258},[100,103153,472],{"class":471},[100,103155,820],{"class":258},[19,103157,103158,103160,103161,103163],{},[32,103159,499],{}," 会保存仿真当前状态。刚创建时，时间是 ",[32,103162,1366],{},"，方块还在初始位置。",[19,103165,103166],{},"推进仿真：",[73,103168,103170],{"className":249,"code":103169,"language":251,"meta":79,"style":79},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[32,103171,103172,103188],{"__ignoreMap":79},[100,103173,103174,103176,103178,103180,103182,103184,103186],{"class":102,"line":103},[100,103175,1051],{"class":471},[100,103177,851],{"class":258},[100,103179,854],{"class":471},[100,103181,857],{"class":117},[100,103183,713],{"class":258},[100,103185,2078],{"class":117},[100,103187,865],{"class":258},[100,103189,103190],{"class":102,"line":188},[100,103191,1068],{"class":258},[19,103193,103194,103195,103197],{},"每次 ",[32,103196,44],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[305,103199,1131],{"id":1131},[19,103201,103202],{},"下面把完整代码按新手视角拆开讲。",[73,103204,103205],{"className":249,"code":103074,"language":251,"meta":79,"style":79},[32,103206,103207],{"__ignoreMap":79},[100,103208,103209,103211],{"class":102,"line":103},[100,103210,548],{"class":471},[100,103212,551],{"class":258},[19,103214,103215,103217,103218,56,103220,56,103222,233],{},[32,103216,548],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[32,103219,217],{},[32,103221,221],{},[32,103223,103224],{},"mujoco.mj_step",[73,103226,103227],{"className":249,"code":103091,"language":251,"meta":79,"style":79},[32,103228,103229,103237,103241],{"__ignoreMap":79},[100,103230,103231,103233,103235],{"class":102,"line":103},[100,103232,580],{"class":117},[100,103234,583],{"class":471},[100,103236,586],{"class":110},[100,103238,103239],{"class":102,"line":188},[100,103240,103106],{"class":110},[100,103242,103243],{"class":102,"line":199},[100,103244,662],{"class":110},[19,103246,103247,103249,103250,103253],{},[32,103248,580],{}," 是一个变量名。右边的三引号 ",[32,103251,103252],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[73,103255,103256],{"className":54621,"code":102841,"language":54623,"meta":79,"style":79},[32,103257,103258],{"__ignoreMap":79},[100,103259,103260,103262,103264,103267,103269,103272],{"class":102,"line":103},[100,103261,2676],{"class":258},[100,103263,102551],{"class":52854},[100,103265,103266],{"class":106}," model",[100,103268,472],{"class":258},[100,103270,103271],{"class":110},"\"first_sim\"",[100,103273,52861],{"class":258},[19,103275,103276,103277,103280,103281,233],{},"这是 XML 的根标签。",[32,103278,103279],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[32,103282,103283],{},"first_sim",[73,103285,103286],{"className":54621,"code":102707,"language":54623,"meta":79,"style":79},[32,103287,103288],{"__ignoreMap":79},[100,103289,103290,103292,103294,103296,103298,103300,103302,103304,103306],{"class":102,"line":103},[100,103291,2676],{"class":258},[100,103293,70720],{"class":52854},[100,103295,102718],{"class":106},[100,103297,472],{"class":258},[100,103299,102723],{"class":110},[100,103301,102726],{"class":106},[100,103303,472],{"class":258},[100,103305,102731],{"class":110},[100,103307,102668],{"class":258},[19,103309,103310,103312,103313,103316,103317,103320],{},[32,103311,70720],{}," 用来设置仿真参数。",[32,103314,103315],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[32,103318,103319],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[73,103322,103324],{"className":54621,"code":103323,"language":54623,"meta":79,"style":79},"\u003Cworldbody>\n",[32,103325,103326],{"__ignoreMap":79},[100,103327,103328,103330,103333],{"class":102,"line":103},[100,103329,2676],{"class":258},[100,103331,103332],{"class":52854},"worldbody",[100,103334,52861],{"class":258},[19,103336,103337,103339],{},[32,103338,103332],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[73,103341,103343],{"className":54621,"code":103342,"language":54623,"meta":79,"style":79},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[32,103344,103345],{"__ignoreMap":79},[100,103346,103347,103349,103351,103353,103355,103358,103360,103362,103365,103367,103369,103372,103374,103376,103379],{"class":102,"line":103},[100,103348,2676],{"class":258},[100,103350,102644],{"class":52854},[100,103352,16501],{"class":106},[100,103354,472],{"class":258},[100,103356,103357],{"class":110},"\"floor\"",[100,103359,55378],{"class":106},[100,103361,472],{"class":258},[100,103363,103364],{"class":110},"\"plane\"",[100,103366,102660],{"class":106},[100,103368,472],{"class":258},[100,103370,103371],{"class":110},"\"2 2 0.1\"",[100,103373,80321],{"class":106},[100,103375,472],{"class":258},[100,103377,103378],{"class":110},"\"0.8 0.8 0.8 1\"",[100,103380,102668],{"class":258},[19,103382,103383,103384,103386,103387,103390,103391,103394,103395,103397],{},"这行创建地面。",[32,103385,102644],{}," 是几何体。",[32,103388,103389],{},"name=\"floor\""," 是名字。",[32,103392,103393],{},"type=\"plane\""," 表示平面。",[32,103396,56664],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[73,103399,103401],{"className":54621,"code":103400,"language":54623,"meta":79,"style":79},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[32,103402,103403],{"__ignoreMap":79},[100,103404,103405,103407,103409,103411,103413,103415,103417,103419,103421],{"class":102,"line":103},[100,103406,2676],{"class":258},[100,103408,53354],{"class":52854},[100,103410,16501],{"class":106},[100,103412,472],{"class":258},[100,103414,55045],{"class":110},[100,103416,102630],{"class":106},[100,103418,472],{"class":258},[100,103420,102635],{"class":110},[100,103422,52861],{"class":258},[19,103424,103425,103426,233,103428,103431,103432,103434],{},"这行创建一个刚体，名字叫 ",[32,103427,55268],{},[32,103429,103430],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[32,103433,102693],{},"，也就是离地面 1 米高。",[73,103436,103438],{"className":54621,"code":103437,"language":54623,"meta":79,"style":79},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[32,103439,103440],{"__ignoreMap":79},[100,103441,103442,103444,103446,103448,103450,103453],{"class":102,"line":103},[100,103443,2676],{"class":258},[100,103445,1554],{"class":52854},[100,103447,16501],{"class":106},[100,103449,472],{"class":258},[100,103451,103452],{"class":110},"\"box_free\"",[100,103454,102668],{"class":258},[19,103456,103457,103458,103460],{},"这行很重要。",[32,103459,1554],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[73,103462,103464],{"className":54621,"code":103463,"language":54623,"meta":79,"style":79},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[32,103465,103466],{"__ignoreMap":79},[100,103467,103468,103470,103472,103474,103476,103478,103480,103482,103484,103486,103488,103490,103493,103495,103497,103499,103501,103504],{"class":102,"line":103},[100,103469,2676],{"class":258},[100,103471,102644],{"class":52854},[100,103473,16501],{"class":106},[100,103475,472],{"class":258},[100,103477,102651],{"class":110},[100,103479,55378],{"class":106},[100,103481,472],{"class":258},[100,103483,55045],{"class":110},[100,103485,102660],{"class":106},[100,103487,472],{"class":258},[100,103489,102665],{"class":110},[100,103491,103492],{"class":106}," mass",[100,103494,472],{"class":258},[100,103496,5278],{"class":110},[100,103498,80321],{"class":106},[100,103500,472],{"class":258},[100,103502,103503],{"class":110},"\"1 0 0 1\"",[100,103505,102668],{"class":258},[19,103507,103508,103509,103512,103513,103516,103517,103520,103521,103524],{},"这行给 box body 添加一个盒子形状。",[32,103510,103511],{},"type=\"box\""," 表示形状是盒子。",[32,103514,103515],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[32,103518,103519],{},"mass=\"1\""," 表示质量是 1。",[32,103522,103523],{},"rgba=\"1 0 0 1\""," 表示红色。",[73,103526,103528],{"className":249,"code":103527,"language":251,"meta":79,"style":79},"def main() -> None:\n",[32,103529,103530],{"__ignoreMap":79},[100,103531,103532,103534,103536,103538,103540],{"class":102,"line":103},[100,103533,678],{"class":471},[100,103535,786],{"class":106},[100,103537,789],{"class":258},[100,103539,693],{"class":117},[100,103541,696],{"class":258},[19,103543,103544,103546,103547,103550,103551,103554],{},[32,103545,678],{}," 用来定义函数。这里定义了一个叫 ",[32,103548,103549],{},"main"," 的函数。",[32,103552,103553],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[73,103556,103557],{"className":249,"code":103122,"language":251,"meta":79,"style":79},[32,103558,103559],{"__ignoreMap":79},[100,103560,103561,103563,103565,103567,103569],{"class":102,"line":103},[100,103562,1221],{"class":258},[100,103564,472],{"class":471},[100,103566,804],{"class":258},[100,103568,580],{"class":117},[100,103570,809],{"class":258},[19,103572,103573,103574,103576],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[32,103575,1170],{}," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[73,103578,103579],{"className":249,"code":103145,"language":251,"meta":79,"style":79},[32,103580,103581],{"__ignoreMap":79},[100,103582,103583,103585,103587],{"class":102,"line":103},[100,103584,1234],{"class":258},[100,103586,472],{"class":471},[100,103588,820],{"class":258},[19,103590,103591,103592,103594,103595,103597],{},"这行创建仿真数据。",[32,103593,499],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[32,103596,499],{}," 都会变化。",[73,103599,103601],{"className":249,"code":103600,"language":251,"meta":79,"style":79},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[32,103602,103603,103613,103623],{"__ignoreMap":79},[100,103604,103605,103607,103609,103611],{"class":102,"line":103},[100,103606,1195],{"class":117},[100,103608,713],{"class":258},[100,103610,1585],{"class":110},[100,103612,1588],{"class":258},[100,103614,103615,103617,103619,103621],{"class":102,"line":188},[100,103616,1195],{"class":117},[100,103618,713],{"class":258},[100,103620,1597],{"class":110},[100,103622,1600],{"class":258},[100,103624,103625,103627,103629,103631],{"class":102,"line":199},[100,103626,1195],{"class":117},[100,103628,713],{"class":258},[100,103630,102966],{"class":110},[100,103632,102969],{"class":258},[19,103634,103635,103637,103638,103641,103642,103645,103646,103649,103650,103652],{},[32,103636,1195],{}," 用来输出信息。",[32,103639,103640],{},"model.nq"," 是位置变量数量，",[32,103643,103644],{},"model.nv"," 是速度变量数量，",[32,103647,103648],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[32,103651,1538],{}," 是 0。",[73,103654,103656],{"className":249,"code":103655,"language":251,"meta":79,"style":79},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[32,103657,103658,103668],{"__ignoreMap":79},[100,103659,103660,103662,103664,103666],{"class":102,"line":103},[100,103661,1195],{"class":117},[100,103663,713],{"class":258},[100,103665,102978],{"class":110},[100,103667,732],{"class":258},[100,103669,103670,103672,103674,103676],{"class":102,"line":188},[100,103671,1195],{"class":117},[100,103673,713],{"class":258},[100,103675,102989],{"class":110},[100,103677,102992],{"class":258},[19,103679,103680,103681,103683,103684,103686,103687,103690],{},"这里打印初始时间和初始位置。",[32,103682,270],{}," 一开始是 0。",[32,103685,264],{}," 是位置数组。",[32,103688,103689],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[73,103692,103693],{"className":249,"code":103169,"language":251,"meta":79,"style":79},[32,103694,103695,103711],{"__ignoreMap":79},[100,103696,103697,103699,103701,103703,103705,103707,103709],{"class":102,"line":103},[100,103698,1051],{"class":471},[100,103700,851],{"class":258},[100,103702,854],{"class":471},[100,103704,857],{"class":117},[100,103706,713],{"class":258},[100,103708,2078],{"class":117},[100,103710,865],{"class":258},[100,103712,103713],{"class":102,"line":188},[100,103714,1068],{"class":258},[19,103716,103717,103719,103720,103723,103724,103726,103727,103729],{},[32,103718,1051],{}," 是循环。",[32,103721,103722],{},"range(100)"," 表示循环 100 次。",[32,103725,2758],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[32,103728,44],{},"，仿真就前进一步。",[73,103731,103733],{"className":249,"code":103732,"language":251,"meta":79,"style":79},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[32,103734,103735,103745],{"__ignoreMap":79},[100,103736,103737,103739,103741,103743],{"class":102,"line":103},[100,103738,1195],{"class":117},[100,103740,713],{"class":258},[100,103742,103029],{"class":110},[100,103744,732],{"class":258},[100,103746,103747,103749,103751,103753],{"class":102,"line":188},[100,103748,1195],{"class":117},[100,103750,713],{"class":258},[100,103752,103040],{"class":110},[100,103754,102992],{"class":258},[19,103756,103757],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[73,103759,103761],{"className":249,"code":103760,"language":251,"meta":79,"style":79},"if __name__ == \"__main__\":\n    main()\n",[32,103762,103763,103775],{"__ignoreMap":79},[100,103764,103765,103767,103769,103771,103773],{"class":102,"line":103},[100,103766,958],{"class":471},[100,103768,961],{"class":117},[100,103770,964],{"class":471},[100,103772,967],{"class":110},[100,103774,696],{"class":258},[100,103776,103777],{"class":102,"line":188},[100,103778,975],{"class":258},[19,103780,103781,103782,103785,103786,233],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[32,103783,103784],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[32,103787,103784],{},[19,103789,994],{},[73,103791,103793],{"className":94,"code":103792,"language":96,"meta":79,"style":79},"python ch1_first_sim.py\n",[32,103794,103795],{"__ignoreMap":79},[100,103796,103797,103799],{"class":102,"line":103},[100,103798,251],{"class":106},[100,103800,102806],{"class":110},[14,103802,1355],{"id":1354},[19,103804,103805],{},"你应该看到类似输出:",[73,103807,103810],{"className":103808,"code":103809,"language":78,"meta":79},[76],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[32,103811,103809],{"__ignoreMap":79},[19,103813,103814,103816,103817,103820,103821,233],{},[32,103815,1554],{}," 有 7 个位置变量: ",[32,103818,103819],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[32,103822,103823],{},"vx vy vz wx wy wz",[19,103825,103826,103827,103830],{},"你还会看到 ",[32,103828,103829],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,103832,1418],{"id":1417},[19,103834,103835],{},"确认版本:",[73,103837,103838],{"className":94,"code":102475,"language":96,"meta":79,"style":79},[32,103839,103840],{"__ignoreMap":79},[100,103841,103842,103844,103846],{"class":102,"line":103},[100,103843,251],{"class":106},[100,103845,31927],{"class":117},[100,103847,102486],{"class":110},[19,103849,103850],{},"确认导入的是官方 bindings:",[73,103852,103854],{"className":94,"code":103853,"language":96,"meta":79,"style":79},"python -c \"import mujoco; print(mujoco)\"\n",[32,103855,103856],{"__ignoreMap":79},[100,103857,103858,103860,103862],{"class":102,"line":103},[100,103859,251],{"class":106},[100,103861,31927],{"class":117},[100,103863,103864],{"class":110}," \"import mujoco; print(mujoco)\"\n",[19,103866,103867],{},"运行程序:",[73,103869,103870],{"className":94,"code":103792,"language":96,"meta":79,"style":79},[32,103871,103872],{"__ignoreMap":79},[100,103873,103874,103876],{"class":102,"line":103},[100,103875,251],{"class":106},[100,103877,102806],{"class":110},[19,103879,103880,103881,103884,103885,233],{},"检查 ",[32,103882,103883],{},"final time"," 是否约等于 ",[32,103886,103887],{},"1.0",[19,103889,103890],{},"再做几个小实验：",[26,103892,103893,103901,103909,103922],{},[29,103894,1444,103895,1448,103897,103900],{},[32,103896,103430],{},[32,103898,103899],{},"pos=\"0 0 2\"","，观察初始高度变化。",[29,103902,1444,103903,1448,103905,103908],{},[32,103904,103319],{},[32,103906,103907],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[29,103910,1444,103911,1448,103913,103916,103917,103919,103920,233],{},[32,103912,103315],{},[32,103914,103915],{},"timestep=\"0.005\"","，观察 100 步后的 ",[32,103918,103883],{}," 是否变成约 ",[32,103921,1078],{},[29,103923,103924,103925,103928],{},"删除 ",[32,103926,103927],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,103930,103931],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,103933,1463],{"id":1462},[305,103935,103937],{"id":103936},"modulenotfounderror-no-module-named-mujoco",[32,103938,103939],{},"ModuleNotFoundError: No module named 'mujoco'",[19,103941,1473],{},[73,103943,103945],{"className":94,"code":103944,"language":96,"meta":79,"style":79},"pip install \"mujoco>=2.3\"\n",[32,103946,103947],{"__ignoreMap":79},[100,103948,103949,103951,103953],{"class":102,"line":103},[100,103950,146],{"class":106},[100,103952,114],{"class":110},[100,103954,103955],{"class":110}," \"mujoco>=2.3\"\n",[305,103957,103959],{"id":103958},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,103961,103962],{},"先安装系统依赖:",[73,103964,103966],{"className":94,"code":103965,"language":96,"meta":79,"style":79},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[32,103967,103968],{"__ignoreMap":79},[100,103969,103970,103972,103974,103976,103978,103980,103982,103985,103987,103990,103992],{"class":102,"line":103},[100,103971,107],{"class":106},[100,103973,111],{"class":110},[100,103975,114],{"class":110},[100,103977,118],{"class":117},[100,103979,127],{"class":110},[100,103981,130],{"class":110},[100,103983,103984],{"class":110}," glfw",[100,103986,102373],{"class":110},[100,103988,103989],{"class":110}," libX11",[100,103991,102386],{"class":110},[100,103993,103994],{"class":110}," libXrandr\n",[305,103996,103998],{"id":103997},"xml-解析失败","XML 解析失败",[19,104000,104001],{},"检查:",[26,104003,104004,104007,104010,104016],{},[29,104005,104006],{},"标签是否闭合",[29,104008,104009],{},"属性是否带引号",[29,104011,104012,104013],{},"根节点是否是 ",[32,104014,104015],{},"\u003Cmujoco>",[29,104017,104018,104020,104021,104024],{},[32,104019,53354],{}," 是否放在 ",[32,104022,104023],{},"\u003Cworldbody>"," 内部",[305,104026,104028,104030,104031],{"id":104027},"final-time-不是严格等于-10",[32,104029,103883],{}," 不是严格等于 ",[32,104032,103887],{},[19,104034,104035],{},"这通常不是错误。浮点数计算可能得到：",[73,104037,104040],{"className":104038,"code":104039,"language":78,"meta":79},[76],"1.0000000000000007\n",[32,104041,104039],{"__ignoreMap":79},[19,104043,104044,104045,104047],{},"只要接近 ",[32,104046,103887],{}," 就正常。",[305,104049,104050],{"id":104050},"方块没有掉下来",[19,104052,104053],{},"检查：",[26,104055,104056,104062,104068,104073],{},[29,104057,104058,104059],{},"方块 body 里是否有 ",[32,104060,104061],{},"\u003Cfreejoint\u002F>",[29,104063,104064,104065],{},"重力是否是 ",[32,104066,104067],{},"0 0 -9.81",[29,104069,104070,104071],{},"是否真的调用了 ",[32,104072,102231],{},[29,104074,104075,104076,104078,104079],{},"你看的是否是 ",[32,104077,103829],{},"，不是 ",[32,104080,104081],{},"initial qpos",[14,104083,1640],{"id":1639},[19,104085,104086],{},"本章你已经完成了 MuJoCo 的最小闭环：",[73,104088,104091],{"className":104089,"code":104090,"language":78,"meta":79},[76],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[32,104092,104090],{"__ignoreMap":79},[19,104094,104095],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[1677,104097,104098],{},"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":79,"searchDepth":188,"depth":188,"links":104100},[104101,104102,104103,104108,104112,104113,104114,104122],{"id":16,"depth":188,"text":17},{"id":87,"depth":188,"text":88},{"id":242,"depth":188,"text":243,"children":104104},[104105,104106,104107],{"id":102606,"depth":199,"text":102607},{"id":102700,"depth":199,"text":102701},{"id":102751,"depth":199,"text":102752},{"id":537,"depth":188,"text":538,"children":104109},[104110,104111],{"id":1008,"depth":199,"text":1008},{"id":1131,"depth":199,"text":1131},{"id":1354,"depth":188,"text":1355},{"id":1417,"depth":188,"text":1418},{"id":1462,"depth":188,"text":1463,"children":104115},[104116,104117,104118,104119,104121],{"id":103936,"depth":199,"text":103939},{"id":103958,"depth":199,"text":103959},{"id":103997,"depth":199,"text":103998},{"id":104027,"depth":199,"text":104120},"final time 不是严格等于 1.0",{"id":104050,"depth":199,"text":104050},{"id":1639,"depth":188,"text":1640},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":102188,"description":79},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":104129,"title":104130,"body":104131,"description":79,"extension":1708,"meta":105782,"navigation":569,"path":105783,"seo":105784,"stem":105785,"__hash__":105786},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":104132,"toc":105758},[104133,104136,104138,104141,104144,104161,104256,104259,104265,104267,104269,104293,104295,104309,104311,104352,104354,104367,104369,104372,104420,104432,104435,104438,104444,104457,104524,104527,104546,104549,104552,104558,104560,104569,104572,104576,104585,104667,104676,104680,104686,104700,104710,104712,105042,105044,105056,105058,105069,105071,105074,105092,105095,105098,105116,105127,105130,105145,105155,105157,105178,105195,105215,105221,105261,105277,105293,105299,105302,105326,105342,105347,105377,105394,105419,105422,105437,105446,105461,105470,105485,105492,105494,105503,105516,105523,105526,105565,105572,105574,105626,105628,105634,105637,105644,105651,105654,105656,105674,105677,105680,105714,105725,105727,105730,105752,105755],[10,104134,104130],{"id":104135},"_2xml-与-mjcf-物理建模基础",[14,104137,17],{"id":16},[19,104139,104140],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,104142,104143],{},"本章结束后，你应该能看懂一个简单模型里：",[26,104145,104146,104149,104152,104155,104158],{},[29,104147,104148],{},"地面在哪里。",[29,104150,104151],{},"物体初始位置在哪里。",[29,104153,104154],{},"几何体是什么形状。",[29,104156,104157],{},"哪些 body 可以自由运动。",[29,104159,104160],{},"如何用名字在 Python 里找到 XML 中的对象。",[319,104162,104163,104173],{},[322,104164,104165],{},[325,104166,104167,104170],{},[328,104168,104169],{"align":330},"标签",[328,104171,104172],{"align":330},"作用",[339,104174,104175,104184,104194,104203,104213,104223,104236,104246],{},[325,104176,104177,104181],{},[344,104178,104179],{"align":330},[32,104180,104015],{},[344,104182,104183],{"align":330},"根节点",[325,104185,104186,104191],{},[344,104187,104188],{"align":330},[32,104189,104190],{},"\u003Coption>",[344,104192,104193],{"align":330},"仿真参数",[325,104195,104196,104200],{},[344,104197,104198],{"align":330},[32,104199,104023],{},[344,104201,104202],{"align":330},"世界中的物体",[325,104204,104205,104210],{},[344,104206,104207],{"align":330},[32,104208,104209],{},"\u003Cbody>",[344,104211,104212],{"align":330},"刚体",[325,104214,104215,104220],{},[344,104216,104217],{"align":330},[32,104218,104219],{},"\u003Cgeom>",[344,104221,104222],{"align":330},"几何体、碰撞体、可视体",[325,104224,104225,104233],{},[344,104226,104227,26554,104230],{"align":330},[32,104228,104229],{},"\u003Cjoint>",[32,104231,104232],{},"\u003Cfreejoint>",[344,104234,104235],{"align":330},"关节",[325,104237,104238,104243],{},[344,104239,104240],{"align":330},[32,104241,104242],{},"\u003Csite>",[344,104244,104245],{"align":330},"标记点",[325,104247,104248,104253],{},[344,104249,104250],{"align":330},[32,104251,104252],{},"\u003Cactuator>",[344,104254,104255],{"align":330},"控制器",[19,104257,104258],{},"初学时可以先记住：",[73,104260,104263],{"className":104261,"code":104262,"language":78,"meta":79},[76],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[32,104264,104262],{"__ignoreMap":79},[14,104266,88],{"id":87},[19,104268,91],{},[73,104270,104272],{"className":94,"code":104271,"language":96,"meta":79,"style":79},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[32,104273,104274],{"__ignoreMap":79},[100,104275,104276,104278,104280,104282,104284,104286,104288,104290],{"class":102,"line":103},[100,104277,107],{"class":106},[100,104279,111],{"class":110},[100,104281,114],{"class":110},[100,104283,118],{"class":117},[100,104285,127],{"class":110},[100,104287,130],{"class":110},[100,104289,103984],{"class":110},[100,104291,104292],{"class":110}," glfw-devel\n",[19,104294,136],{},[73,104296,104297],{"className":94,"code":139,"language":96,"meta":79,"style":79},[32,104298,104299],{"__ignoreMap":79},[100,104300,104301,104303,104305,104307],{"class":102,"line":103},[100,104302,146],{"class":106},[100,104304,114],{"class":110},[100,104306,151],{"class":110},[100,104308,154],{"class":110},[19,104310,157],{},[73,104312,104314],{"className":94,"code":104313,"language":96,"meta":79,"style":79},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[32,104315,104316,104333,104342],{"__ignoreMap":79},[100,104317,104318,104320,104322,104324,104327,104329,104331],{"class":102,"line":103},[100,104319,167],{"class":106},[100,104321,170],{"class":110},[100,104323,173],{"class":117},[100,104325,104326],{"class":110}," mujoco-xml",[100,104328,179],{"class":110},[100,104330,182],{"class":117},[100,104332,185],{"class":117},[100,104334,104335,104337,104339],{"class":102,"line":188},[100,104336,167],{"class":106},[100,104338,193],{"class":110},[100,104340,104341],{"class":110}," mujoco-xml\n",[100,104343,104344,104346,104348,104350],{"class":102,"line":199},[100,104345,146],{"class":106},[100,104347,114],{"class":110},[100,104349,151],{"class":110},[100,104351,154],{"class":110},[19,104353,210],{},[26,104355,104356,104359,104364],{},[29,104357,104358],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[29,104360,104361,104362,233],{},"本章使用基础标签，适用于 ",[32,104363,102557],{},[29,104365,104366],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,104368,243],{"id":242},[19,104370,104371],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[73,104373,104375],{"className":54621,"code":104374,"language":54623,"meta":79,"style":79},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[32,104376,104377,104391,104399,104404,104412],{"__ignoreMap":79},[100,104378,104379,104381,104383,104385,104387,104389],{"class":102,"line":103},[100,104380,2676],{"class":258},[100,104382,102551],{"class":52854},[100,104384,103266],{"class":106},[100,104386,472],{"class":258},[100,104388,64233],{"class":110},[100,104390,52861],{"class":258},[100,104392,104393,104395,104397],{"class":102,"line":188},[100,104394,53698],{"class":258},[100,104396,103332],{"class":52854},[100,104398,52861],{"class":258},[100,104400,104401],{"class":102,"line":199},[100,104402,104403],{"class":258},"    ...\n",[100,104405,104406,104408,104410],{"class":102,"line":532},[100,104407,53971],{"class":258},[100,104409,103332],{"class":52854},[100,104411,52861],{"class":258},[100,104413,104414,104416,104418],{"class":102,"line":577},[100,104415,53339],{"class":258},[100,104417,102551],{"class":52854},[100,104419,52861],{"class":258},[19,104421,104422,104424,104425,104427,104428,104431],{},[32,104423,53354],{}," 表示刚体。",[32,104426,102644],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[32,104429,104430],{},"joint"," 表示刚体相对父刚体如何运动。",[305,104433,104434],{"id":104434},"层级结构非常重要",[19,104436,104437],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[73,104439,104442],{"className":104440,"code":104441,"language":78,"meta":79},[76],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[32,104443,104441],{"__ignoreMap":79},[19,104445,104446,218,104449,104452,104453,104456],{},[32,104447,104448],{},"red_box_geom",[32,104450,104451],{},"box_center"," 都属于 ",[32,104454,104455],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[73,104458,104460],{"className":54621,"code":104459,"language":54623,"meta":79,"style":79},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n  \u003Cfreejoint name=\"box_free\"\u002F>\n  \u003Cgeom type=\"box\" size=\"0.1 0.1 0.1\"\u002F>\n\u003C\u002Fbody>\n",[32,104461,104462,104482,104496,104516],{"__ignoreMap":79},[100,104463,104464,104466,104468,104470,104472,104474,104476,104478,104480],{"class":102,"line":103},[100,104465,2676],{"class":258},[100,104467,53354],{"class":52854},[100,104469,16501],{"class":106},[100,104471,472],{"class":258},[100,104473,55045],{"class":110},[100,104475,102630],{"class":106},[100,104477,472],{"class":258},[100,104479,102635],{"class":110},[100,104481,52861],{"class":258},[100,104483,104484,104486,104488,104490,104492,104494],{"class":102,"line":188},[100,104485,53698],{"class":258},[100,104487,1554],{"class":52854},[100,104489,16501],{"class":106},[100,104491,472],{"class":258},[100,104493,103452],{"class":110},[100,104495,102668],{"class":258},[100,104497,104498,104500,104502,104504,104506,104508,104510,104512,104514],{"class":102,"line":199},[100,104499,53698],{"class":258},[100,104501,102644],{"class":52854},[100,104503,55378],{"class":106},[100,104505,472],{"class":258},[100,104507,55045],{"class":110},[100,104509,102660],{"class":106},[100,104511,472],{"class":258},[100,104513,102665],{"class":110},[100,104515,102668],{"class":258},[100,104517,104518,104520,104522],{"class":102,"line":532},[100,104519,53339],{"class":258},[100,104521,53354],{"class":52854},[100,104523,52861],{"class":258},[19,104525,104526],{},"含义:",[26,104528,104529,104535,104540,104543],{},[29,104530,104531,104532,104534],{},"创建名为 ",[32,104533,55268],{}," 的刚体",[29,104536,104537,104538],{},"初始位置在世界坐标 ",[32,104539,102693],{},[29,104541,104542],{},"它有一个自由关节",[29,104544,104545],{},"它有一个盒子几何体",[305,104547,104548],{"id":104548},"坐标怎么理解",[19,104550,104551],{},"MuJoCo 默认使用三维坐标：",[73,104553,104556],{"className":104554,"code":104555,"language":78,"meta":79},[76],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[32,104557,104555],{"__ignoreMap":79},[19,104559,16214],{},[73,104561,104563],{"className":54621,"code":104562,"language":54623,"meta":79,"style":79},"pos=\"0 0 1\"\n",[32,104564,104565],{"__ignoreMap":79},[100,104566,104567],{"class":102,"line":103},[100,104568,104562],{"class":258},[19,104570,104571],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[305,104573,104575],{"id":104574},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,104577,104578,104579,1555,104582,104584],{},"不同 ",[32,104580,104581],{},"type",[32,104583,33054],{}," 含义不同：",[319,104586,104587,104602],{},[322,104588,104589],{},[325,104590,104591,104595,104600],{},[328,104592,104593],{"align":330},[32,104594,104581],{},[328,104596,104597,104599],{"align":330},[32,104598,33054],{}," 示例",[328,104601,334],{"align":330},[339,104603,104604,104618,104633,104652],{},[325,104605,104606,104610,104615],{},[344,104607,104608],{"align":330},[32,104609,55268],{},[344,104611,104612],{"align":330},[32,104613,104614],{},"size=\"0.1 0.2 0.3\"",[344,104616,104617],{"align":330},"x\u002Fy\u002Fz 半边长，不是完整长度",[325,104619,104620,104625,104630],{},[344,104621,104622],{"align":330},[32,104623,104624],{},"sphere",[344,104626,104627],{"align":330},[32,104628,104629],{},"size=\"0.1\"",[344,104631,104632],{"align":330},"球半径",[325,104634,104635,104640,104645],{},[344,104636,104637],{"align":330},[32,104638,104639],{},"capsule",[344,104641,104642],{"align":330},[32,104643,104644],{},"size=\"0.03\"",[344,104646,104647,104648,104651],{"align":330},"胶囊半径，长度常用 ",[32,104649,104650],{},"fromto"," 指定",[325,104653,104654,104659,104664],{},[344,104655,104656],{"align":330},[32,104657,104658],{},"plane",[344,104660,104661],{"align":330},[32,104662,104663],{},"size=\"3 3 0.1\"",[344,104665,104666],{"align":330},"可视平面大小，通常当地面",[19,104668,104669,104670,104672,104673,104675],{},"最容易踩坑的是 box：",[32,104671,103515],{}," 表示边长大约是 ",[32,104674,33594],{},"，因为 MuJoCo 用的是半边长。",[305,104677,104679],{"id":104678},"site-是什么","site 是什么",[19,104681,104682,104685],{},[32,104683,104684],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[26,104687,104688,104691,104694,104697],{},[29,104689,104690],{},"标记机械臂末端。",[29,104692,104693],{},"标记目标位置。",[29,104695,104696],{},"放传感器或相机参考点。",[29,104698,104699],{},"在 Python 中读取某个关键点的世界坐标。",[19,104701,104702,104703,218,104706,104709],{},"在后面的 Reacher 任务中，",[32,104704,104705],{},"tip",[32,104707,104708],{},"target"," 就会用 site 表示。",[14,104711,538],{"id":537},[73,104713,104715],{"className":249,"code":104714,"language":251,"meta":79,"style":79},"import mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"xml_basic\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n\n    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"red_box_free\"\u002F>\n      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n    site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n\n    if box_body_id \u003C 0:\n        raise RuntimeError(\"body red_box not found\")\n    if site_id \u003C 0:\n        raise RuntimeError(\"site box_center not found\")\n\n    for _ in range(200):\n        mujoco.mj_step(model, data)\n\n    print(\"simulation time:\", data.time)\n    print(\"box body position:\", data.xpos[box_body_id].copy())\n    print(\"site position:\", data.site_xpos[site_id].copy())\n    print(\"box qpos:\", np.array(data.qpos))\n\n\nif __name__ == \"__main__\":\n    main()\n",[32,104716,104717,104723,104733,104737,104741,104749,104754,104758,104762,104766,104771,104775,104780,104785,104790,104795,104799,104803,104807,104811,104815,104819,104831,104843,104851,104855,104870,104885,104889,104902,104917,104930,104943,104947,104963,104967,104971,104982,104994,105006,105018,105022,105026,105038],{"__ignoreMap":79},[100,104718,104719,104721],{"class":102,"line":103},[100,104720,548],{"class":471},[100,104722,551],{"class":258},[100,104724,104725,104727,104729,104731],{"class":102,"line":188},[100,104726,548],{"class":471},[100,104728,558],{"class":258},[100,104730,561],{"class":471},[100,104732,564],{"class":258},[100,104734,104735],{"class":102,"line":199},[100,104736,570],{"emptyLinePlaceholder":569},[100,104738,104739],{"class":102,"line":532},[100,104740,570],{"emptyLinePlaceholder":569},[100,104742,104743,104745,104747],{"class":102,"line":577},[100,104744,580],{"class":117},[100,104746,583],{"class":471},[100,104748,586],{"class":110},[100,104750,104751],{"class":102,"line":589},[100,104752,104753],{"class":110},"\u003Cmujoco model=\"xml_basic\">\n",[100,104755,104756],{"class":102,"line":595},[100,104757,598],{"class":110},[100,104759,104760],{"class":102,"line":601},[100,104761,570],{"emptyLinePlaceholder":569},[100,104763,104764],{"class":102,"line":606},[100,104765,609],{"class":110},[100,104767,104768],{"class":102,"line":612},[100,104769,104770],{"class":110},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[100,104772,104773],{"class":102,"line":618},[100,104774,570],{"emptyLinePlaceholder":569},[100,104776,104777],{"class":102,"line":623},[100,104778,104779],{"class":110},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[100,104781,104782],{"class":102,"line":629},[100,104783,104784],{"class":110},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[100,104786,104787],{"class":102,"line":635},[100,104788,104789],{"class":110},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[100,104791,104792],{"class":102,"line":641},[100,104793,104794],{"class":110},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[100,104796,104797],{"class":102,"line":647},[100,104798,644],{"class":110},[100,104800,104801],{"class":102,"line":653},[100,104802,650],{"class":110},[100,104804,104805],{"class":102,"line":659},[100,104806,656],{"class":110},[100,104808,104809],{"class":102,"line":665},[100,104810,662],{"class":110},[100,104812,104813],{"class":102,"line":670},[100,104814,570],{"emptyLinePlaceholder":569},[100,104816,104817],{"class":102,"line":675},[100,104818,570],{"emptyLinePlaceholder":569},[100,104820,104821,104823,104825,104827,104829],{"class":102,"line":699},[100,104822,678],{"class":471},[100,104824,786],{"class":106},[100,104826,789],{"class":258},[100,104828,693],{"class":117},[100,104830,696],{"class":258},[100,104832,104833,104835,104837,104839,104841],{"class":102,"line":708},[100,104834,799],{"class":258},[100,104836,472],{"class":471},[100,104838,804],{"class":258},[100,104840,580],{"class":117},[100,104842,809],{"class":258},[100,104844,104845,104847,104849],{"class":102,"line":722},[100,104846,815],{"class":258},[100,104848,472],{"class":471},[100,104850,820],{"class":258},[100,104852,104853],{"class":102,"line":735},[100,104854,570],{"emptyLinePlaceholder":569},[100,104856,104857,104860,104862,104865,104868],{"class":102,"line":754},[100,104858,104859],{"class":258},"    box_body_id ",[100,104861,472],{"class":471},[100,104863,104864],{"class":258}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[100,104866,104867],{"class":110},"\"red_box\"",[100,104869,809],{"class":258},[100,104871,104872,104875,104877,104880,104883],{"class":102,"line":771},[100,104873,104874],{"class":258},"    site_id ",[100,104876,472],{"class":471},[100,104878,104879],{"class":258}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[100,104881,104882],{"class":110},"\"box_center\"",[100,104884,809],{"class":258},[100,104886,104887],{"class":102,"line":776},[100,104888,570],{"emptyLinePlaceholder":569},[100,104890,104891,104893,104896,104898,104900],{"class":102,"line":781},[100,104892,4702],{"class":471},[100,104894,104895],{"class":258}," box_body_id ",[100,104897,2676],{"class":471},[100,104899,5692],{"class":117},[100,104901,696],{"class":258},[100,104903,104904,104907,104910,104912,104915],{"class":102,"line":796},[100,104905,104906],{"class":471},"        raise",[100,104908,104909],{"class":117}," RuntimeError",[100,104911,713],{"class":258},[100,104913,104914],{"class":110},"\"body red_box not found\"",[100,104916,809],{"class":258},[100,104918,104919,104921,104924,104926,104928],{"class":102,"line":812},[100,104920,4702],{"class":471},[100,104922,104923],{"class":258}," site_id ",[100,104925,2676],{"class":471},[100,104927,5692],{"class":117},[100,104929,696],{"class":258},[100,104931,104932,104934,104936,104938,104941],{"class":102,"line":823},[100,104933,104906],{"class":471},[100,104935,104909],{"class":117},[100,104937,713],{"class":258},[100,104939,104940],{"class":110},"\"site box_center not found\"",[100,104942,809],{"class":258},[100,104944,104945],{"class":102,"line":828},[100,104946,570],{"emptyLinePlaceholder":569},[100,104948,104949,104951,104953,104955,104957,104959,104961],{"class":102,"line":840},[100,104950,848],{"class":471},[100,104952,851],{"class":258},[100,104954,854],{"class":471},[100,104956,857],{"class":117},[100,104958,713],{"class":258},[100,104960,3343],{"class":117},[100,104962,865],{"class":258},[100,104964,104965],{"class":102,"line":845},[100,104966,871],{"class":258},[100,104968,104969],{"class":102,"line":868},[100,104970,570],{"emptyLinePlaceholder":569},[100,104972,104973,104975,104977,104980],{"class":102,"line":874},[100,104974,702],{"class":117},[100,104976,713],{"class":258},[100,104978,104979],{"class":110},"\"simulation time:\"",[100,104981,732],{"class":258},[100,104983,104984,104986,104988,104991],{"class":102,"line":879},[100,104985,702],{"class":117},[100,104987,713],{"class":258},[100,104989,104990],{"class":110},"\"box body position:\"",[100,104992,104993],{"class":258},", data.xpos[box_body_id].copy())\n",[100,104995,104996,104998,105000,105003],{"class":102,"line":889},[100,104997,702],{"class":117},[100,104999,713],{"class":258},[100,105001,105002],{"class":110},"\"site position:\"",[100,105004,105005],{"class":258},", data.site_xpos[site_id].copy())\n",[100,105007,105008,105010,105012,105015],{"class":102,"line":894},[100,105009,702],{"class":117},[100,105011,713],{"class":258},[100,105013,105014],{"class":110},"\"box qpos:\"",[100,105016,105017],{"class":258},", np.array(data.qpos))\n",[100,105019,105020],{"class":102,"line":900},[100,105021,570],{"emptyLinePlaceholder":569},[100,105023,105024],{"class":102,"line":910},[100,105025,570],{"emptyLinePlaceholder":569},[100,105027,105028,105030,105032,105034,105036],{"class":102,"line":915},[100,105029,958],{"class":471},[100,105031,961],{"class":117},[100,105033,964],{"class":471},[100,105035,967],{"class":110},[100,105037,696],{"class":258},[100,105039,105040],{"class":102,"line":929},[100,105041,975],{"class":258},[19,105043,978],{},[73,105045,105047],{"className":94,"code":105046,"language":96,"meta":79,"style":79},"touch ch2_xml_basic.py\n",[32,105048,105049],{"__ignoreMap":79},[100,105050,105051,105053],{"class":102,"line":103},[100,105052,988],{"class":106},[100,105054,105055],{"class":110}," ch2_xml_basic.py\n",[19,105057,994],{},[73,105059,105061],{"className":94,"code":105060,"language":96,"meta":79,"style":79},"python ch2_xml_basic.py\n",[32,105062,105063],{"__ignoreMap":79},[100,105064,105065,105067],{"class":102,"line":103},[100,105066,251],{"class":106},[100,105068,105055],{"class":110},[305,105070,1008],{"id":1008},[19,105072,105073],{},"用名字查找 body：",[73,105075,105077],{"className":249,"code":105076,"language":251,"meta":79,"style":79},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[32,105078,105079],{"__ignoreMap":79},[100,105080,105081,105084,105086,105088,105090],{"class":102,"line":103},[100,105082,105083],{"class":258},"box_body_id ",[100,105085,472],{"class":471},[100,105087,104864],{"class":258},[100,105089,104867],{"class":110},[100,105091,809],{"class":258},[19,105093,105094],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,105096,105097],{},"用名字查找 site：",[73,105099,105101],{"className":249,"code":105100,"language":251,"meta":79,"style":79},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[32,105102,105103],{"__ignoreMap":79},[100,105104,105105,105108,105110,105112,105114],{"class":102,"line":103},[100,105106,105107],{"class":258},"site_id ",[100,105109,472],{"class":471},[100,105111,104879],{"class":258},[100,105113,104882],{"class":110},[100,105115,809],{"class":258},[19,105117,105118,105119,105122,105123,105126],{},"注意第二个参数是对象类型。查 body 就用 ",[32,105120,105121],{},"mjOBJ_BODY","，查 site 就用 ",[32,105124,105125],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,105128,105129],{},"读取世界坐标：",[73,105131,105133],{"className":249,"code":105132,"language":251,"meta":79,"style":79},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[32,105134,105135,105140],{"__ignoreMap":79},[100,105136,105137],{"class":102,"line":103},[100,105138,105139],{"class":258},"data.xpos[box_body_id]\n",[100,105141,105142],{"class":102,"line":188},[100,105143,105144],{"class":258},"data.site_xpos[site_id]\n",[19,105146,105147,105150,105151,105154],{},[32,105148,105149],{},"xpos"," 是 body 的世界坐标，",[32,105152,105153],{},"site_xpos"," 是 site 的世界坐标。",[305,105156,1131],{"id":1131},[73,105158,105160],{"className":249,"code":105159,"language":251,"meta":79,"style":79},"import mujoco\nimport numpy as np\n",[32,105161,105162,105168],{"__ignoreMap":79},[100,105163,105164,105166],{"class":102,"line":103},[100,105165,548],{"class":471},[100,105167,551],{"class":258},[100,105169,105170,105172,105174,105176],{"class":102,"line":188},[100,105171,548],{"class":471},[100,105173,558],{"class":258},[100,105175,561],{"class":471},[100,105177,564],{"class":258},[19,105179,105180,105181,105184,105185,105188,105189,56,105192,233],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[32,105182,105183],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[32,105186,105187],{},"as np"," 是习惯写法，后面就可以写 ",[32,105190,105191],{},"np.array(...)",[32,105193,105194],{},"np.round(...)",[73,105196,105197],{"className":249,"code":103091,"language":251,"meta":79,"style":79},[32,105198,105199,105207,105211],{"__ignoreMap":79},[100,105200,105201,105203,105205],{"class":102,"line":103},[100,105202,580],{"class":117},[100,105204,583],{"class":471},[100,105206,586],{"class":110},[100,105208,105209],{"class":102,"line":188},[100,105210,103106],{"class":110},[100,105212,105213],{"class":102,"line":199},[100,105214,662],{"class":110},[19,105216,105217,105218,233],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[32,105219,105220],{},"mujoco.MjModel.from_xml_string(XML)",[73,105222,105224],{"className":54621,"code":105223,"language":54623,"meta":79,"style":79},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[32,105225,105226],{"__ignoreMap":79},[100,105227,105228,105230,105232,105234,105236,105238,105240,105242,105245,105247,105249,105252,105254,105256,105259],{"class":102,"line":103},[100,105229,2676],{"class":258},[100,105231,104684],{"class":52854},[100,105233,16501],{"class":106},[100,105235,472],{"class":258},[100,105237,104882],{"class":110},[100,105239,102630],{"class":106},[100,105241,472],{"class":258},[100,105243,105244],{"class":110},"\"0 0 0\"",[100,105246,102660],{"class":106},[100,105248,472],{"class":258},[100,105250,105251],{"class":110},"\"0.03\"",[100,105253,80321],{"class":106},[100,105255,472],{"class":258},[100,105257,105258],{"class":110},"\"0 1 0 1\"",[100,105260,102668],{"class":258},[19,105262,105263,105265,105266,105269,105270,105272,105273,105276],{},[32,105264,104684],{}," 是标记点。",[32,105267,105268],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[32,105271,104644],{}," 表示显示出来的小球大小。",[32,105274,105275],{},"rgba=\"0 1 0 1\""," 表示绿色。",[73,105278,105279],{"className":249,"code":105076,"language":251,"meta":79,"style":79},[32,105280,105281],{"__ignoreMap":79},[100,105282,105283,105285,105287,105289,105291],{"class":102,"line":103},[100,105284,105083],{"class":258},[100,105286,472],{"class":471},[100,105288,104864],{"class":258},[100,105290,104867],{"class":110},[100,105292,809],{"class":258},[19,105294,105295,105296,105298],{},"这行的作用是：根据名字 ",[32,105297,104867],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,105300,105301],{},"拆开看：",[26,105303,105304,105310,105315,105321],{},[29,105305,105306,105309],{},[32,105307,105308],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[29,105311,105312,105314],{},[32,105313,1170],{}," 是被查询的模型。",[29,105316,105317,105320],{},[32,105318,105319],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[29,105322,105323,105325],{},[32,105324,104867],{}," 是 XML 里写的名字。",[73,105327,105328],{"className":249,"code":105100,"language":251,"meta":79,"style":79},[32,105329,105330],{"__ignoreMap":79},[100,105331,105332,105334,105336,105338,105340],{"class":102,"line":103},[100,105333,105107],{"class":258},[100,105335,472],{"class":471},[100,105337,104879],{"class":258},[100,105339,104882],{"class":110},[100,105341,809],{"class":258},[19,105343,105344,105345,233],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[32,105346,104882],{},[73,105348,105350],{"className":249,"code":105349,"language":251,"meta":79,"style":79},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[32,105351,105352,105364],{"__ignoreMap":79},[100,105353,105354,105356,105358,105360,105362],{"class":102,"line":103},[100,105355,958],{"class":471},[100,105357,104895],{"class":258},[100,105359,2676],{"class":471},[100,105361,5692],{"class":117},[100,105363,696],{"class":258},[100,105365,105366,105369,105371,105373,105375],{"class":102,"line":188},[100,105367,105368],{"class":471},"    raise",[100,105370,104909],{"class":117},[100,105372,713],{"class":258},[100,105374,104914],{"class":110},[100,105376,809],{"class":258},[19,105378,105379,105381,105382,105385,105386,105389,105390,105393],{},[32,105380,958],{}," 是条件判断。",[32,105383,105384],{},"mj_name2id"," 找不到对象时会返回 ",[32,105387,105388],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[32,105391,105392],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[73,105395,105397],{"className":249,"code":105396,"language":251,"meta":79,"style":79},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[32,105398,105399,105415],{"__ignoreMap":79},[100,105400,105401,105403,105405,105407,105409,105411,105413],{"class":102,"line":103},[100,105402,1051],{"class":471},[100,105404,851],{"class":258},[100,105406,854],{"class":471},[100,105408,857],{"class":117},[100,105410,713],{"class":258},[100,105412,3343],{"class":117},[100,105414,865],{"class":258},[100,105416,105417],{"class":102,"line":188},[100,105418,1068],{"class":258},[19,105420,105421],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[73,105423,105425],{"className":249,"code":105424,"language":251,"meta":79,"style":79},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[32,105426,105427],{"__ignoreMap":79},[100,105428,105429,105431,105433,105435],{"class":102,"line":103},[100,105430,1195],{"class":117},[100,105432,713],{"class":258},[100,105434,104990],{"class":110},[100,105436,104993],{"class":258},[19,105438,105439,105441,105442,105445],{},[32,105440,102603],{}," 保存所有 body 的世界坐标。",[32,105443,105444],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[73,105447,105449],{"className":249,"code":105448,"language":251,"meta":79,"style":79},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[32,105450,105451],{"__ignoreMap":79},[100,105452,105453,105455,105457,105459],{"class":102,"line":103},[100,105454,1195],{"class":117},[100,105456,713],{"class":258},[100,105458,105002],{"class":110},[100,105460,105005],{"class":258},[19,105462,105463,105466,105467,105469],{},[32,105464,105465],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[32,105468,104451],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[73,105471,105473],{"className":249,"code":105472,"language":251,"meta":79,"style":79},"print(\"box qpos:\", np.array(data.qpos))\n",[32,105474,105475],{"__ignoreMap":79},[100,105476,105477,105479,105481,105483],{"class":102,"line":103},[100,105478,1195],{"class":117},[100,105480,713],{"class":258},[100,105482,105014],{"class":110},[100,105484,105017],{"class":258},[19,105486,105487,105488,105491],{},"这里打印广义位置数组。",[32,105489,105490],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,105493,1355],{"id":1354},[19,105495,105496,105497,105500,105501,233],{},"程序会输出 ",[32,105498,105499],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[32,105502,55],{},[19,105504,105505,105507,105508,105511,105512,105515],{},[32,105506,105444],{}," 是 body 的世界坐标位置。",[32,105509,105510],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[32,105513,105514],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,105517,83776,105518,1555,105520,105522],{},[32,105519,104451],{},[32,105521,105268],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,105524,105525],{},"如果你把 site 改成：",[73,105527,105529],{"className":54621,"code":105528,"language":54623,"meta":79,"style":79},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[32,105530,105531],{"__ignoreMap":79},[100,105532,105533,105535,105537,105539,105541,105544,105546,105548,105551,105553,105555,105557,105559,105561,105563],{"class":102,"line":103},[100,105534,2676],{"class":258},[100,105536,104684],{"class":52854},[100,105538,16501],{"class":106},[100,105540,472],{"class":258},[100,105542,105543],{"class":110},"\"box_top\"",[100,105545,102630],{"class":106},[100,105547,472],{"class":258},[100,105549,105550],{"class":110},"\"0 0 0.15\"",[100,105552,102660],{"class":106},[100,105554,472],{"class":258},[100,105556,105251],{"class":110},[100,105558,80321],{"class":106},[100,105560,472],{"class":258},[100,105562,105258],{"class":110},[100,105564,102668],{"class":258},[19,105566,105567,105568,105571],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[32,105569,105570],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,105573,1418],{"id":1417},[26,105575,105576,105585,105588,105595,105601,105612],{},[29,105577,1444,105578,105580,105581,1448,105583,233],{},[32,105579,104455],{}," 的初始高度从 ",[32,105582,1985],{},[32,105584,465],{},[29,105586,105587],{},"重新运行程序。",[29,105589,105590,105591,105594],{},"观察 ",[32,105592,105593],{},"box qpos"," 和最终位置是否变化。",[29,105596,105597,105598,105600],{},"故意把 ",[32,105599,104684],{}," 名称改错，确认程序能报错。",[29,105602,1444,105603,105605,105606,1448,105608,105611],{},[32,105604,102644],{}," 的颜色 ",[32,105607,103523],{},[32,105609,105610],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[29,105613,1444,105614,1555,105616,1448,105619,105622,105623,105625],{},[32,105615,104451],{},[32,105617,105618],{},"pos",[32,105620,105621],{},"0 0 0.2","，观察 ",[32,105624,105570],{}," 如何变化。",[14,105627,1463],{"id":1462},[305,105629,105631],{"id":105630},"xml-error-schema-violation",[32,105632,105633],{},"XML Error: Schema violation",[19,105635,105636],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[305,105638,105640,82844,105642],{"id":105639},"mj_name2id-返回-1",[32,105641,105384],{},[32,105643,105388],{},[19,105645,105646,105647,105650],{},"说明名字没有找到。检查 XML 中 ",[32,105648,105649],{},"name=\"...\"","，并确认对象类型正确。",[305,105652,105653],{"id":105653},"物体不下落",[19,105655,104001],{},[26,105657,105658,105663,105668],{},[29,105659,105660,105661],{},"body 是否有 ",[32,105662,1554],{},[29,105664,105665,105666],{},"gravity 是否为 ",[32,105667,104067],{},[29,105669,105670,105671,105673],{},"body 是否被固定在 ",[32,105672,103332],{}," 中",[305,105675,105676],{"id":105676},"坐标看起来不符合预期",[19,105678,105679],{},"先区分两种坐标：",[319,105681,105682,105691],{},[322,105683,105684],{},[325,105685,105686,105689],{},[328,105687,105688],{"align":330},"坐标",[328,105690,334],{"align":330},[339,105692,105693,105703],{},[325,105694,105695,105700],{},[344,105696,105697,105698],{"align":330},"XML 里的 ",[32,105699,105618],{},[344,105701,105702],{"align":330},"相对父 body 的局部坐标",[325,105704,105705,105711],{},[344,105706,105707,26554,105709],{"align":330},[32,105708,102603],{},[32,105710,105465],{},[344,105712,105713],{"align":330},"仿真更新后的世界坐标",[19,105715,105716,105717,105719,105720,288,105722,105724],{},"如果你修改了 ",[32,105718,264],{},"，但还没调用 ",[32,105721,400],{},[32,105723,44],{},"，世界坐标可能还没有更新。",[14,105726,1640],{"id":1639},[19,105728,105729],{},"MJCF 建模先掌握四件事：",[26,105731,105732,105737,105742,105747],{},[29,105733,105734,105736],{},[32,105735,53354],{}," 表示刚体层级。",[29,105738,105739,105741],{},[32,105740,102644],{}," 表示形状、碰撞和质量。",[29,105743,105744,105746],{},[32,105745,104430],{}," 决定 body 能不能动、怎么动。",[29,105748,105749,105751],{},[32,105750,104684],{}," 用来标记关键点，方便 Python 读取位置。",[19,105753,105754],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[1677,105756,105757],{},"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":79,"searchDepth":188,"depth":188,"links":105759},[105760,105761,105762,105768,105772,105773,105774,105781],{"id":16,"depth":188,"text":17},{"id":87,"depth":188,"text":88},{"id":242,"depth":188,"text":243,"children":105763},[105764,105765,105766,105767],{"id":104434,"depth":199,"text":104434},{"id":104548,"depth":199,"text":104548},{"id":104574,"depth":199,"text":104575},{"id":104678,"depth":199,"text":104679},{"id":537,"depth":188,"text":538,"children":105769},[105770,105771],{"id":1008,"depth":199,"text":1008},{"id":1131,"depth":199,"text":1131},{"id":1354,"depth":188,"text":1355},{"id":1417,"depth":188,"text":1418},{"id":1462,"depth":188,"text":1463,"children":105775},[105776,105777,105779,105780],{"id":105630,"depth":199,"text":105633},{"id":105639,"depth":199,"text":105778},"mj_name2id 返回 -1",{"id":105653,"depth":199,"text":105653},{"id":105676,"depth":199,"text":105676},{"id":1639,"depth":188,"text":1640},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":104130,"description":79},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":4,"title":5,"body":105788,"description":79,"extension":1708,"meta":107059,"navigation":569,"path":1710,"seo":107060,"stem":1712,"__hash__":1713},{"type":7,"value":105789,"toc":107036},[105790,105792,105794,105796,105798,105828,105830,105835,105837,105839,105841,105865,105867,105881,105883,105921,105923,105941,105943,105945,105953,105961,105963,105971,105977,105985,105987,105995,105997,106041,106047,106052,106058,106096,106098,106114,106116,106124,106126,106132,106160,106162,106484,106486,106496,106498,106508,106510,106512,106532,106536,106538,106562,106568,106570,106578,106580,106582,106602,106608,106610,106630,106632,106648,106654,106672,106676,106700,106702,106714,106718,106742,106744,106752,106758,106774,106782,106790,106796,106798,106800,106818,106822,106824,106842,106844,106870,106872,106876,106878,106886,106888,106890,106900,106936,106940,106948,106952,106954,106998,107000,107002,107006,107008,107012,107032,107034],[10,105791,5],{"id":12},[14,105793,17],{"id":16},[19,105795,21],{},[19,105797,24],{},[26,105799,105800,105804,105808,105812,105816,105824],{},[29,105801,105802],{},[32,105803,34],{},[29,105805,105806],{},[32,105807,39],{},[29,105809,105810],{},[32,105811,44],{},[29,105813,105814],{},[32,105815,49],{},[29,105817,52,105818,56,105820,56,105822],{},[32,105819,55],{},[32,105821,59],{},[32,105823,62],{},[29,105825,65,105826],{},[32,105827,68],{},[19,105829,71],{},[73,105831,105833],{"className":105832,"code":77,"language":78,"meta":79},[76],[32,105834,77],{"__ignoreMap":79},[19,105836,84],{},[14,105838,88],{"id":87},[19,105840,91],{},[73,105842,105843],{"className":94,"code":95,"language":96,"meta":79,"style":79},[32,105844,105845],{"__ignoreMap":79},[100,105846,105847,105849,105851,105853,105855,105857,105859,105861,105863],{"class":102,"line":103},[100,105848,107],{"class":106},[100,105850,111],{"class":110},[100,105852,114],{"class":110},[100,105854,118],{"class":117},[100,105856,121],{"class":110},[100,105858,124],{"class":110},[100,105860,127],{"class":110},[100,105862,130],{"class":110},[100,105864,133],{"class":110},[19,105866,136],{},[73,105868,105869],{"className":94,"code":139,"language":96,"meta":79,"style":79},[32,105870,105871],{"__ignoreMap":79},[100,105872,105873,105875,105877,105879],{"class":102,"line":103},[100,105874,146],{"class":106},[100,105876,114],{"class":110},[100,105878,151],{"class":110},[100,105880,154],{"class":110},[19,105882,157],{},[73,105884,105885],{"className":94,"code":160,"language":96,"meta":79,"style":79},[32,105886,105887,105903,105911],{"__ignoreMap":79},[100,105888,105889,105891,105893,105895,105897,105899,105901],{"class":102,"line":103},[100,105890,167],{"class":106},[100,105892,170],{"class":110},[100,105894,173],{"class":117},[100,105896,176],{"class":110},[100,105898,179],{"class":110},[100,105900,182],{"class":117},[100,105902,185],{"class":117},[100,105904,105905,105907,105909],{"class":102,"line":188},[100,105906,167],{"class":106},[100,105908,193],{"class":110},[100,105910,196],{"class":110},[100,105912,105913,105915,105917,105919],{"class":102,"line":199},[100,105914,146],{"class":106},[100,105916,114],{"class":110},[100,105918,151],{"class":110},[100,105920,154],{"class":110},[19,105922,210],{},[26,105924,105925,105931,105937],{},[29,105926,105927,218,105929,222],{},[32,105928,217],{},[32,105930,221],{},[29,105932,225,105933,229,105935,233],{},[32,105934,228],{},[32,105936,232],{},[29,105938,236,105939,233],{},[32,105940,239],{},[14,105942,243],{"id":242},[19,105944,246],{},[73,105946,105947],{"className":249,"code":250,"language":251,"meta":79,"style":79},[32,105948,105949],{"__ignoreMap":79},[100,105950,105951],{"class":102,"line":103},[100,105952,250],{"class":258},[19,105954,261,105955,56,105957,56,105959,233],{},[32,105956,264],{},[32,105958,267],{},[32,105960,270],{},[19,105962,273],{},[73,105964,105965],{"className":249,"code":276,"language":251,"meta":79,"style":79},[32,105966,105967],{"__ignoreMap":79},[100,105968,105969],{"class":102,"line":103},[100,105970,276],{"class":258},[19,105972,285,105973,288,105975,291],{},[32,105974,264],{},[32,105976,267],{},[73,105978,105979],{"className":249,"code":294,"language":251,"meta":79,"style":79},[32,105980,105981],{"__ignoreMap":79},[100,105982,105983],{"class":102,"line":103},[100,105984,294],{"class":258},[19,105986,303],{},[305,105988,105989,56,105991,56,105993,314],{"id":307},[32,105990,55],{},[32,105992,59],{},[32,105994,62],{},[19,105996,317],{},[319,105998,105999,106009],{},[322,106000,106001],{},[325,106002,106003,106005,106007],{},[328,106004,331],{"align":330},[328,106006,334],{"align":330},[328,106008,337],{"align":330},[339,106010,106011,106021,106031],{},[325,106012,106013,106017,106019],{},[344,106014,106015],{"align":330},[32,106016,264],{},[344,106018,350],{"align":330},[344,106020,353],{"align":330},[325,106022,106023,106027,106029],{},[344,106024,106025],{"align":330},[32,106026,267],{},[344,106028,362],{"align":330},[344,106030,365],{"align":330},[325,106032,106033,106037,106039],{},[344,106034,106035],{"align":330},[32,106036,372],{},[344,106038,375],{"align":330},[344,106040,378],{"align":330},[19,106042,381,106043,218,106045,386],{},[32,106044,55],{},[32,106046,59],{},[73,106048,106050],{"className":106049,"code":390,"language":78,"meta":79},[76],[32,106051,390],{"__ignoreMap":79},[305,106053,106054,218,106056,401],{"id":395},[32,106055,44],{},[32,106057,400],{},[319,106059,106060,106070],{},[322,106061,106062],{},[325,106063,106064,106066,106068],{},[328,106065,410],{"align":330},[328,106067,413],{"align":330},[328,106069,416],{"align":330},[339,106071,106072,106082],{},[325,106073,106074,106078,106080],{},[344,106075,106076],{"align":330},[32,106077,425],{},[344,106079,428],{"align":330},[344,106081,431],{"align":330},[325,106083,106084,106088,106090],{},[344,106085,106086],{"align":330},[32,106087,438],{},[344,106089,441],{"align":330},[344,106091,444,106092,56,106094,449],{"align":330},[32,106093,55],{},[32,106095,59],{},[19,106097,452],{},[73,106099,106100],{"className":249,"code":455,"language":251,"meta":79,"style":79},[32,106101,106102],{"__ignoreMap":79},[100,106103,106104,106106,106108,106110,106112],{"class":102,"line":103},[100,106105,462],{"class":258},[100,106107,465],{"class":117},[100,106109,468],{"class":258},[100,106111,472],{"class":471},[100,106113,475],{"class":117},[19,106115,478],{},[73,106117,106118],{"className":249,"code":294,"language":251,"meta":79,"style":79},[32,106119,106120],{"__ignoreMap":79},[100,106121,106122],{"class":102,"line":103},[100,106123,294],{"class":258},[305,106125,490],{"id":489},[19,106127,106128,496,106130,500],{},[32,106129,495],{},[32,106131,499],{},[73,106133,106134],{"className":249,"code":503,"language":251,"meta":79,"style":79},[32,106135,106136,106140,106148,106156],{"__ignoreMap":79},[100,106137,106138],{"class":102,"line":103},[100,106139,276],{"class":258},[100,106141,106142,106144,106146],{"class":102,"line":188},[100,106143,514],{"class":258},[100,106145,472],{"class":471},[100,106147,519],{"class":258},[100,106149,106150,106152,106154],{"class":102,"line":199},[100,106151,524],{"class":258},[100,106153,472],{"class":471},[100,106155,529],{"class":117},[100,106157,106158],{"class":102,"line":532},[100,106159,294],{"class":258},[14,106161,538],{"id":537},[73,106163,106164],{"className":249,"code":541,"language":251,"meta":79,"style":79},[32,106165,106166,106172,106182,106186,106190,106198,106202,106206,106210,106214,106218,106222,106226,106230,106234,106238,106242,106246,106250,106254,106258,106274,106280,106290,106300,106314,106328,106332,106336,106348,106360,106368,106372,106380,106384,106400,106404,106408,106416,106420,106424,106432,106436,106448,106452,106460,106464,106468,106480],{"__ignoreMap":79},[100,106167,106168,106170],{"class":102,"line":103},[100,106169,548],{"class":471},[100,106171,551],{"class":258},[100,106173,106174,106176,106178,106180],{"class":102,"line":188},[100,106175,548],{"class":471},[100,106177,558],{"class":258},[100,106179,561],{"class":471},[100,106181,564],{"class":258},[100,106183,106184],{"class":102,"line":199},[100,106185,570],{"emptyLinePlaceholder":569},[100,106187,106188],{"class":102,"line":532},[100,106189,570],{"emptyLinePlaceholder":569},[100,106191,106192,106194,106196],{"class":102,"line":577},[100,106193,580],{"class":117},[100,106195,583],{"class":471},[100,106197,586],{"class":110},[100,106199,106200],{"class":102,"line":589},[100,106201,592],{"class":110},[100,106203,106204],{"class":102,"line":595},[100,106205,598],{"class":110},[100,106207,106208],{"class":102,"line":601},[100,106209,570],{"emptyLinePlaceholder":569},[100,106211,106212],{"class":102,"line":606},[100,106213,609],{"class":110},[100,106215,106216],{"class":102,"line":612},[100,106217,615],{"class":110},[100,106219,106220],{"class":102,"line":618},[100,106221,570],{"emptyLinePlaceholder":569},[100,106223,106224],{"class":102,"line":623},[100,106225,626],{"class":110},[100,106227,106228],{"class":102,"line":629},[100,106229,632],{"class":110},[100,106231,106232],{"class":102,"line":635},[100,106233,638],{"class":110},[100,106235,106236],{"class":102,"line":641},[100,106237,644],{"class":110},[100,106239,106240],{"class":102,"line":647},[100,106241,650],{"class":110},[100,106243,106244],{"class":102,"line":653},[100,106245,656],{"class":110},[100,106247,106248],{"class":102,"line":659},[100,106249,662],{"class":110},[100,106251,106252],{"class":102,"line":665},[100,106253,570],{"emptyLinePlaceholder":569},[100,106255,106256],{"class":102,"line":670},[100,106257,570],{"emptyLinePlaceholder":569},[100,106259,106260,106262,106264,106266,106268,106270,106272],{"class":102,"line":675},[100,106261,678],{"class":471},[100,106263,681],{"class":106},[100,106265,684],{"class":258},[100,106267,687],{"class":117},[100,106269,690],{"class":258},[100,106271,693],{"class":117},[100,106273,696],{"class":258},[100,106275,106276,106278],{"class":102,"line":699},[100,106277,702],{"class":117},[100,106279,705],{"class":258},[100,106281,106282,106284,106286,106288],{"class":102,"line":708},[100,106283,702],{"class":117},[100,106285,713],{"class":258},[100,106287,716],{"class":110},[100,106289,719],{"class":258},[100,106291,106292,106294,106296,106298],{"class":102,"line":722},[100,106293,702],{"class":117},[100,106295,713],{"class":258},[100,106297,729],{"class":110},[100,106299,732],{"class":258},[100,106301,106302,106304,106306,106308,106310,106312],{"class":102,"line":735},[100,106303,702],{"class":117},[100,106305,713],{"class":258},[100,106307,742],{"class":110},[100,106309,745],{"class":258},[100,106311,748],{"class":117},[100,106313,751],{"class":258},[100,106315,106316,106318,106320,106322,106324,106326],{"class":102,"line":754},[100,106317,702],{"class":117},[100,106319,713],{"class":258},[100,106321,761],{"class":110},[100,106323,764],{"class":258},[100,106325,748],{"class":117},[100,106327,751],{"class":258},[100,106329,106330],{"class":102,"line":771},[100,106331,570],{"emptyLinePlaceholder":569},[100,106333,106334],{"class":102,"line":776},[100,106335,570],{"emptyLinePlaceholder":569},[100,106337,106338,106340,106342,106344,106346],{"class":102,"line":781},[100,106339,678],{"class":471},[100,106341,786],{"class":106},[100,106343,789],{"class":258},[100,106345,693],{"class":117},[100,106347,696],{"class":258},[100,106349,106350,106352,106354,106356,106358],{"class":102,"line":796},[100,106351,799],{"class":258},[100,106353,472],{"class":471},[100,106355,804],{"class":258},[100,106357,580],{"class":117},[100,106359,809],{"class":258},[100,106361,106362,106364,106366],{"class":102,"line":812},[100,106363,815],{"class":258},[100,106365,472],{"class":471},[100,106367,820],{"class":258},[100,106369,106370],{"class":102,"line":823},[100,106371,570],{"emptyLinePlaceholder":569},[100,106373,106374,106376,106378],{"class":102,"line":828},[100,106375,831],{"class":258},[100,106377,834],{"class":110},[100,106379,837],{"class":258},[100,106381,106382],{"class":102,"line":840},[100,106383,570],{"emptyLinePlaceholder":569},[100,106385,106386,106388,106390,106392,106394,106396,106398],{"class":102,"line":845},[100,106387,848],{"class":471},[100,106389,851],{"class":258},[100,106391,854],{"class":471},[100,106393,857],{"class":117},[100,106395,713],{"class":258},[100,106397,862],{"class":117},[100,106399,865],{"class":258},[100,106401,106402],{"class":102,"line":868},[100,106403,871],{"class":258},[100,106405,106406],{"class":102,"line":874},[100,106407,570],{"emptyLinePlaceholder":569},[100,106409,106410,106412,106414],{"class":102,"line":879},[100,106411,831],{"class":258},[100,106413,884],{"class":110},[100,106415,837],{"class":258},[100,106417,106418],{"class":102,"line":889},[100,106419,570],{"emptyLinePlaceholder":569},[100,106421,106422],{"class":102,"line":894},[100,106423,897],{"class":258},[100,106425,106426,106428,106430],{"class":102,"line":900},[100,106427,831],{"class":258},[100,106429,905],{"class":110},[100,106431,837],{"class":258},[100,106433,106434],{"class":102,"line":910},[100,106435,570],{"emptyLinePlaceholder":569},[100,106437,106438,106440,106442,106444,106446],{"class":102,"line":915},[100,106439,918],{"class":258},[100,106441,465],{"class":117},[100,106443,468],{"class":258},[100,106445,472],{"class":471},[100,106447,475],{"class":117},[100,106449,106450],{"class":102,"line":929},[100,106451,932],{"class":258},[100,106453,106454,106456,106458],{"class":102,"line":935},[100,106455,831],{"class":258},[100,106457,940],{"class":110},[100,106459,837],{"class":258},[100,106461,106462],{"class":102,"line":945},[100,106463,570],{"emptyLinePlaceholder":569},[100,106465,106466],{"class":102,"line":950},[100,106467,570],{"emptyLinePlaceholder":569},[100,106469,106470,106472,106474,106476,106478],{"class":102,"line":955},[100,106471,958],{"class":471},[100,106473,961],{"class":117},[100,106475,964],{"class":471},[100,106477,967],{"class":110},[100,106479,696],{"class":258},[100,106481,106482],{"class":102,"line":972},[100,106483,975],{"class":258},[19,106485,978],{},[73,106487,106488],{"className":94,"code":981,"language":96,"meta":79,"style":79},[32,106489,106490],{"__ignoreMap":79},[100,106491,106492,106494],{"class":102,"line":103},[100,106493,988],{"class":106},[100,106495,991],{"class":110},[19,106497,994],{},[73,106499,106500],{"className":94,"code":997,"language":96,"meta":79,"style":79},[32,106501,106502],{"__ignoreMap":79},[100,106503,106504,106506],{"class":102,"line":103},[100,106505,251],{"class":106},[100,106507,991],{"class":110},[305,106509,1008],{"id":1008},[19,106511,1011],{},[73,106513,106514],{"className":249,"code":1014,"language":251,"meta":79,"style":79},[32,106515,106516],{"__ignoreMap":79},[100,106517,106518,106520,106522,106524,106526,106528,106530],{"class":102,"line":103},[100,106519,678],{"class":471},[100,106521,681],{"class":106},[100,106523,684],{"class":258},[100,106525,687],{"class":117},[100,106527,690],{"class":258},[100,106529,693],{"class":117},[100,106531,696],{"class":258},[19,106533,1035,106534,1038],{},[32,106535,499],{},[19,106537,1041],{},[73,106539,106540],{"className":249,"code":1044,"language":251,"meta":79,"style":79},[32,106541,106542,106558],{"__ignoreMap":79},[100,106543,106544,106546,106548,106550,106552,106554,106556],{"class":102,"line":103},[100,106545,1051],{"class":471},[100,106547,851],{"class":258},[100,106549,854],{"class":471},[100,106551,857],{"class":117},[100,106553,713],{"class":258},[100,106555,862],{"class":117},[100,106557,865],{"class":258},[100,106559,106560],{"class":102,"line":188},[100,106561,1068],{"class":258},[19,106563,1071,106564,1075,106566,1079],{},[32,106565,1074],{},[32,106567,1078],{},[19,106569,1082],{},[73,106571,106572],{"className":249,"code":276,"language":251,"meta":79,"style":79},[32,106573,106574],{"__ignoreMap":79},[100,106575,106576],{"class":102,"line":103},[100,106577,276],{"class":258},[19,106579,1093],{},[19,106581,1096],{},[73,106583,106584],{"className":249,"code":1099,"language":251,"meta":79,"style":79},[32,106585,106586,106598],{"__ignoreMap":79},[100,106587,106588,106590,106592,106594,106596],{"class":102,"line":103},[100,106589,462],{"class":258},[100,106591,465],{"class":117},[100,106593,468],{"class":258},[100,106595,472],{"class":471},[100,106597,475],{"class":117},[100,106599,106600],{"class":102,"line":188},[100,106601,294],{"class":258},[19,106603,1120,106604,1124,106606,1128],{},[32,106605,1123],{},[32,106607,1127],{},[305,106609,1131],{"id":1131},[73,106611,106612],{"className":249,"code":1014,"language":251,"meta":79,"style":79},[32,106613,106614],{"__ignoreMap":79},[100,106615,106616,106618,106620,106622,106624,106626,106628],{"class":102,"line":103},[100,106617,678],{"class":471},[100,106619,681],{"class":106},[100,106621,684],{"class":258},[100,106623,687],{"class":117},[100,106625,690],{"class":258},[100,106627,693],{"class":117},[100,106629,696],{"class":258},[19,106631,1154],{},[26,106633,106634,106640,106644],{},[29,106635,106636,1162,106638,1165],{},[32,106637,1161],{},[32,106639,834],{},[29,106641,106642,1171],{},[32,106643,1170],{},[29,106645,106646,1176],{},[32,106647,499],{},[19,106649,106650,56,106652,1185],{},[32,106651,1181],{},[32,106653,1184],{},[73,106655,106656],{"className":249,"code":1188,"language":251,"meta":79,"style":79},[32,106657,106658],{"__ignoreMap":79},[100,106659,106660,106662,106664,106666,106668,106670],{"class":102,"line":103},[100,106661,1195],{"class":117},[100,106663,713],{"class":258},[100,106665,742],{"class":110},[100,106667,745],{"class":258},[100,106669,748],{"class":117},[100,106671,751],{"class":258},[19,106673,106674,1211],{},[32,106675,1210],{},[73,106677,106678],{"className":249,"code":1214,"language":251,"meta":79,"style":79},[32,106679,106680,106692],{"__ignoreMap":79},[100,106681,106682,106684,106686,106688,106690],{"class":102,"line":103},[100,106683,1221],{"class":258},[100,106685,472],{"class":471},[100,106687,804],{"class":258},[100,106689,580],{"class":117},[100,106691,809],{"class":258},[100,106693,106694,106696,106698],{"class":102,"line":188},[100,106695,1234],{"class":258},[100,106697,472],{"class":471},[100,106699,820],{"class":258},[19,106701,1241],{},[73,106703,106704],{"className":249,"code":1244,"language":251,"meta":79,"style":79},[32,106705,106706],{"__ignoreMap":79},[100,106707,106708,106710,106712],{"class":102,"line":103},[100,106709,1251],{"class":258},[100,106711,834],{"class":110},[100,106713,837],{"class":258},[19,106715,1258,106716,1262],{},[32,106717,1261],{},[73,106719,106720],{"className":249,"code":1044,"language":251,"meta":79,"style":79},[32,106721,106722,106738],{"__ignoreMap":79},[100,106723,106724,106726,106728,106730,106732,106734,106736],{"class":102,"line":103},[100,106725,1051],{"class":471},[100,106727,851],{"class":258},[100,106729,854],{"class":471},[100,106731,857],{"class":117},[100,106733,713],{"class":258},[100,106735,862],{"class":117},[100,106737,865],{"class":258},[100,106739,106740],{"class":102,"line":188},[100,106741,1068],{"class":258},[19,106743,1289],{},[73,106745,106746],{"className":249,"code":276,"language":251,"meta":79,"style":79},[32,106747,106748],{"__ignoreMap":79},[100,106749,106750],{"class":102,"line":103},[100,106751,276],{"class":258},[19,106753,1300,106754,1303,106756,1306],{},[32,106755,499],{},[32,106757,1170],{},[73,106759,106760],{"className":249,"code":455,"language":251,"meta":79,"style":79},[32,106761,106762],{"__ignoreMap":79},[100,106763,106764,106766,106768,106770,106772],{"class":102,"line":103},[100,106765,462],{"class":258},[100,106767,465],{"class":117},[100,106769,468],{"class":258},[100,106771,472],{"class":471},[100,106773,475],{"class":117},[19,106775,1325,106776,56,106778,56,106780,1334],{},[32,106777,1328],{},[32,106779,1331],{},[32,106781,1123],{},[73,106783,106784],{"className":249,"code":294,"language":251,"meta":79,"style":79},[32,106785,106786],{"__ignoreMap":79},[100,106787,106788],{"class":102,"line":103},[100,106789,294],{"class":258},[19,106791,1345,106792,1348,106794,1351],{},[32,106793,55],{},[32,106795,400],{},[14,106797,1355],{"id":1354},[19,106799,1358],{},[26,106801,106802,106806,106810,106812],{},[29,106803,1363,106804],{},[32,106805,1366],{},[29,106807,1369,106808],{},[32,106809,1078],{},[29,106811,1374],{},[29,106813,1377,106814,1381,106816],{},[32,106815,1380],{},[32,106817,1127],{},[19,106819,106820,1388],{},[32,106821,1123],{},[19,106823,1391],{},[26,106825,106826,106832,106836],{},[29,106827,106828,1399,106830,1402],{},[32,106829,1398],{},[32,106831,44],{},[29,106833,106834,1407],{},[32,106835,55],{},[29,106837,106838,1412,106840,233],{},[32,106839,49],{},[32,106841,1366],{},[14,106843,1418],{"id":1417},[26,106845,106846,106850,106854,106858,106860,106866],{},[29,106847,1423,106848,233],{},[32,106849,1426],{},[29,106851,1429,106852,233],{},[32,106853,1432],{},[29,106855,1435,106856,233],{},[32,106857,1438],{},[29,106859,1441],{},[29,106861,1444,106862,1448,106864,1452],{},[32,106863,1447],{},[32,106865,1451],{},[29,106867,1455,106868,1459],{},[32,106869,1458],{},[14,106871,1463],{"id":1462},[305,106873,1467,106874,1470],{"id":1466},[32,106875,264],{},[19,106877,1473],{},[73,106879,106880],{"className":249,"code":294,"language":251,"meta":79,"style":79},[32,106881,106882],{"__ignoreMap":79},[100,106883,106884],{"class":102,"line":103},[100,106885,294],{"class":258},[305,106887,1484],{"id":1484},[19,106889,1487],{},[73,106891,106892],{"className":249,"code":1490,"language":251,"meta":79,"style":79},[32,106893,106894],{"__ignoreMap":79},[100,106895,106896,106898],{"class":102,"line":103},[100,106897,1195],{"class":117},[100,106899,1499],{"class":258},[319,106901,106902,106910],{},[322,106903,106904],{},[325,106905,106906,106908],{},[328,106907,331],{"align":330},[328,106909,334],{"align":330},[339,106911,106912,106920,106928],{},[325,106913,106914,106918],{},[344,106915,106916],{"align":330},[32,106917,1518],{},[344,106919,1521],{"align":330},[325,106921,106922,106926],{},[344,106923,106924],{"align":330},[32,106925,1528],{},[344,106927,1531],{"align":330},[325,106929,106930,106934],{},[344,106931,106932],{"align":330},[32,106933,1538],{},[344,106935,1541],{"align":330},[305,106937,1545,106938,1548],{"id":1544},[32,106939,55],{},[19,106941,1551,106942,1555,106944,1558,106946,1561],{},[32,106943,1554],{},[32,106945,55],{},[32,106947,59],{},[305,106949,1565,106950,1568],{"id":1564},[32,106951,55],{},[19,106953,1571],{},[73,106955,106956],{"className":249,"code":1574,"language":251,"meta":79,"style":79},[32,106957,106958,106968,106978,106988],{"__ignoreMap":79},[100,106959,106960,106962,106964,106966],{"class":102,"line":103},[100,106961,1195],{"class":117},[100,106963,713],{"class":258},[100,106965,1585],{"class":110},[100,106967,1588],{"class":258},[100,106969,106970,106972,106974,106976],{"class":102,"line":188},[100,106971,1195],{"class":117},[100,106973,713],{"class":258},[100,106975,1597],{"class":110},[100,106977,1600],{"class":258},[100,106979,106980,106982,106984,106986],{"class":102,"line":199},[100,106981,1195],{"class":117},[100,106983,713],{"class":258},[100,106985,1609],{"class":110},[100,106987,1612],{"class":258},[100,106989,106990,106992,106994,106996],{"class":102,"line":532},[100,106991,1195],{"class":117},[100,106993,713],{"class":258},[100,106995,1621],{"class":110},[100,106997,1624],{"class":258},[19,106999,1627],{},[305,107001,1630],{"id":1630},[19,107003,1633,107004,1636],{},[32,107005,55],{},[14,107007,1640],{"id":1639},[19,107009,1643,107010,1646],{},[32,107011,499],{},[26,107013,107014,107020,107024,107028],{},[29,107015,1651,107016,218,107018,1656],{},[32,107017,264],{},[32,107019,267],{},[29,107021,1651,107022,1661],{},[32,107023,372],{},[29,107025,1651,107026,1666],{},[32,107027,44],{},[29,107029,1669,107030,1672],{},[32,107031,400],{},[19,107033,1675],{},[1677,107035,1679],{},{"title":79,"searchDepth":188,"depth":188,"links":107037},[107038,107039,107040,107045,107049,107050,107051,107058],{"id":16,"depth":188,"text":17},{"id":87,"depth":188,"text":88},{"id":242,"depth":188,"text":243,"children":107041},[107042,107043,107044],{"id":307,"depth":199,"text":1687},{"id":395,"depth":199,"text":1689},{"id":489,"depth":199,"text":490},{"id":537,"depth":188,"text":538,"children":107046},[107047,107048],{"id":1008,"depth":199,"text":1008},{"id":1131,"depth":199,"text":1131},{"id":1354,"depth":188,"text":1355},{"id":1417,"depth":188,"text":1418},{"id":1462,"depth":188,"text":1463,"children":107052},[107053,107054,107055,107056,107057],{"id":1466,"depth":199,"text":1700},{"id":1484,"depth":199,"text":1484},{"id":1544,"depth":199,"text":1703},{"id":1564,"depth":199,"text":1705},{"id":1630,"depth":199,"text":1630},{"id":1639,"depth":188,"text":1640},{},{"title":5,"description":79},{"id":107062,"title":107063,"body":107064,"description":79,"extension":1708,"meta":108754,"navigation":569,"path":108755,"seo":108756,"stem":108757,"__hash__":108758},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":107065,"toc":108730},[107066,107069,107071,107074,107076,107101,107104,107123,107126,107128,107130,107154,107156,107170,107172,107213,107215,107239,107241,107244,107278,107280,107293,107296,107364,107373,107377,107380,107414,107420,107423,107427,107466,107469,107489,107493,107536,107538,107567,107570,107576,107579,107581,107975,107977,107989,107991,108002,108004,108007,108036,108044,108047,108082,108085,108087,108095,108098,108100,108111,108121,108141,108144,108180,108192,108240,108259,108301,108314,108342,108347,108368,108378,108396,108399,108433,108436,108456,108459,108478,108484,108486,108489,108495,108501,108511,108514,108520,108529,108531,108577,108579,108585,108591,108594,108597,108617,108620,108626,108632,108634,108657,108660,108663,108672,108675,108713,108715,108718,108724,108727],[10,107067,107063],{"id":107068},"_4关节actuator-与力控制",[14,107070,17],{"id":16},[19,107072,107073],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,107075,24],{},[26,107077,107078,107084,107089,107093,107098],{},[29,107079,107080,107083],{},[32,107081,107082],{},"hinge"," 关节",[29,107085,107086],{},[32,107087,107088],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[29,107090,107091],{},[32,107092,372],{},[29,107094,107095],{},[32,107096,107097],{},"ctrlrange",[29,107099,107100],{},"读取关节角和角速度",[19,107102,107103],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[73,107105,107107],{"className":249,"code":107106,"language":251,"meta":79,"style":79},"data.ctrl[0] = ...\n",[32,107108,107109],{"__ignoreMap":79},[100,107110,107111,107114,107116,107118,107120],{"class":102,"line":103},[100,107112,107113],{"class":258},"data.ctrl[",[100,107115,1366],{"class":117},[100,107117,468],{"class":258},[100,107119,472],{"class":471},[100,107121,107122],{"class":117}," ...\n",[19,107124,107125],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,107127,88],{"id":87},[19,107129,91],{},[73,107131,107132],{"className":94,"code":95,"language":96,"meta":79,"style":79},[32,107133,107134],{"__ignoreMap":79},[100,107135,107136,107138,107140,107142,107144,107146,107148,107150,107152],{"class":102,"line":103},[100,107137,107],{"class":106},[100,107139,111],{"class":110},[100,107141,114],{"class":110},[100,107143,118],{"class":117},[100,107145,121],{"class":110},[100,107147,124],{"class":110},[100,107149,127],{"class":110},[100,107151,130],{"class":110},[100,107153,133],{"class":110},[19,107155,136],{},[73,107157,107158],{"className":94,"code":139,"language":96,"meta":79,"style":79},[32,107159,107160],{"__ignoreMap":79},[100,107161,107162,107164,107166,107168],{"class":102,"line":103},[100,107163,146],{"class":106},[100,107165,114],{"class":110},[100,107167,151],{"class":110},[100,107169,154],{"class":110},[19,107171,157],{},[73,107173,107175],{"className":94,"code":107174,"language":96,"meta":79,"style":79},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[32,107176,107177,107194,107203],{"__ignoreMap":79},[100,107178,107179,107181,107183,107185,107188,107190,107192],{"class":102,"line":103},[100,107180,167],{"class":106},[100,107182,170],{"class":110},[100,107184,173],{"class":117},[100,107186,107187],{"class":110}," mujoco-control",[100,107189,179],{"class":110},[100,107191,182],{"class":117},[100,107193,185],{"class":117},[100,107195,107196,107198,107200],{"class":102,"line":188},[100,107197,167],{"class":106},[100,107199,193],{"class":110},[100,107201,107202],{"class":110}," mujoco-control\n",[100,107204,107205,107207,107209,107211],{"class":102,"line":199},[100,107206,146],{"class":106},[100,107208,114],{"class":110},[100,107210,151],{"class":110},[100,107212,154],{"class":110},[19,107214,210],{},[26,107216,107217,107223,107230,107236],{},[29,107218,107219,107222],{},[32,107220,107221],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[29,107224,107225,107227,107228,233],{},[32,107226,372],{}," 长度等于 ",[32,107229,103648],{},[29,107231,83776,107232,107235],{},[32,107233,107234],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[29,107237,107238],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,107240,243],{"id":242},[19,107242,107243],{},"关节决定 body 如何运动:",[73,107245,107247],{"className":54621,"code":107246,"language":54623,"meta":79,"style":79},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[32,107248,107249],{"__ignoreMap":79},[100,107250,107251,107253,107255,107257,107259,107262,107264,107266,107268,107271,107273,107276],{"class":102,"line":103},[100,107252,2676],{"class":258},[100,107254,104430],{"class":52854},[100,107256,16501],{"class":106},[100,107258,472],{"class":258},[100,107260,107261],{"class":110},"\"hinge\"",[100,107263,55378],{"class":106},[100,107265,472],{"class":258},[100,107267,107261],{"class":110},[100,107269,107270],{"class":106}," axis",[100,107272,472],{"class":258},[100,107274,107275],{"class":110},"\"0 1 0\"",[100,107277,102668],{"class":258},[19,107279,104526],{},[26,107281,107282,107287,107290],{},[29,107283,107284,107285],{},"名字是 ",[32,107286,107082],{},[29,107288,107289],{},"类型是旋转关节",[29,107291,107292],{},"绕 y 轴旋转",[19,107294,107295],{},"actuator 决定如何施加控制:",[73,107297,107299],{"className":54621,"code":107298,"language":54623,"meta":79,"style":79},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[32,107300,107301,107310,107356],{"__ignoreMap":79},[100,107302,107303,107305,107308],{"class":102,"line":103},[100,107304,2676],{"class":258},[100,107306,107307],{"class":52854},"actuator",[100,107309,52861],{"class":258},[100,107311,107312,107314,107317,107319,107321,107324,107327,107329,107331,107334,107336,107338,107341,107343,107346,107349,107351,107354],{"class":102,"line":188},[100,107313,53698],{"class":258},[100,107315,107316],{"class":52854},"motor",[100,107318,16501],{"class":106},[100,107320,472],{"class":258},[100,107322,107323],{"class":110},"\"hinge_motor\"",[100,107325,107326],{"class":106}," joint",[100,107328,472],{"class":258},[100,107330,107261],{"class":110},[100,107332,107333],{"class":106}," gear",[100,107335,472],{"class":258},[100,107337,5278],{"class":110},[100,107339,107340],{"class":106}," ctrlrange",[100,107342,472],{"class":258},[100,107344,107345],{"class":110},"\"-2 2\"",[100,107347,107348],{"class":106}," ctrllimited",[100,107350,472],{"class":258},[100,107352,107353],{"class":110},"\"true\"",[100,107355,102668],{"class":258},[100,107357,107358,107360,107362],{"class":102,"line":199},[100,107359,53339],{"class":258},[100,107361,107307],{"class":52854},[100,107363,52861],{"class":258},[19,107365,107366,107369,107370,233],{},[32,107367,107368],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[32,107371,107372],{},"[-2, 2]",[305,107374,107376],{"id":107375},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,107378,107379],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[319,107381,107382,107392],{},[322,107383,107384],{},[325,107385,107386,107388,107390],{},[328,107387,27328],{"align":330},[328,107389,104172],{"align":330},[328,107391,102278],{"align":330},[339,107393,107394,107404],{},[325,107395,107396,107398,107401],{},[344,107397,104430],{"align":330},[344,107399,107400],{"align":330},"定义能怎么动",[344,107402,107403],{"align":330},"门轴允许门旋转",[325,107405,107406,107408,107411],{},[344,107407,107307],{"align":330},[344,107409,107410],{"align":330},"定义怎么施力或控制",[344,107412,107413],{"align":330},"人推门、马达带动门",[19,107415,107416,107417,107419],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[32,107418,372],{}," 主动控制它。",[19,107421,107422],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[305,107424,107426],{"id":107425},"hinge-joint","hinge joint",[73,107428,107430],{"className":54621,"code":107429,"language":54623,"meta":79,"style":79},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[32,107431,107432],{"__ignoreMap":79},[100,107433,107434,107436,107438,107440,107442,107444,107446,107448,107450,107452,107454,107456,107459,107461,107464],{"class":102,"line":103},[100,107435,2676],{"class":258},[100,107437,104430],{"class":52854},[100,107439,16501],{"class":106},[100,107441,472],{"class":258},[100,107443,107261],{"class":110},[100,107445,55378],{"class":106},[100,107447,472],{"class":258},[100,107449,107261],{"class":110},[100,107451,107270],{"class":106},[100,107453,472],{"class":258},[100,107455,107275],{"class":110},[100,107457,107458],{"class":106}," damping",[100,107460,472],{"class":258},[100,107462,107463],{"class":110},"\"0.1\"",[100,107465,102668],{"class":258},[19,107467,107468],{},"含义：",[26,107470,107471,107477,107483],{},[29,107472,107473,107476],{},[32,107474,107475],{},"type=\"hinge\"","：只能绕一个轴旋转。",[29,107478,107479,107482],{},[32,107480,107481],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[29,107484,107485,107488],{},[32,107486,107487],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[305,107490,107492],{"id":107491},"motor-actuator","motor actuator",[73,107494,107496],{"className":54621,"code":107495,"language":54623,"meta":79,"style":79},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[32,107497,107498],{"__ignoreMap":79},[100,107499,107500,107502,107504,107506,107508,107510,107512,107514,107516,107518,107520,107522,107524,107526,107528,107530,107532,107534],{"class":102,"line":103},[100,107501,2676],{"class":258},[100,107503,107316],{"class":52854},[100,107505,16501],{"class":106},[100,107507,472],{"class":258},[100,107509,107323],{"class":110},[100,107511,107326],{"class":106},[100,107513,472],{"class":258},[100,107515,107261],{"class":110},[100,107517,107333],{"class":106},[100,107519,472],{"class":258},[100,107521,5278],{"class":110},[100,107523,107340],{"class":106},[100,107525,472],{"class":258},[100,107527,107345],{"class":110},[100,107529,107348],{"class":106},[100,107531,472],{"class":258},[100,107533,107353],{"class":110},[100,107535,102668],{"class":258},[19,107537,107468],{},[26,107539,107540,107549,107555,107561],{},[29,107541,107542,107545,107546,107548],{},[32,107543,107544],{},"joint=\"hinge\"","：这个电机作用在名为 ",[32,107547,107082],{}," 的关节上。",[29,107550,107551,107554],{},[32,107552,107553],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[29,107556,107557,107560],{},[32,107558,107559],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[29,107562,107563,107566],{},[32,107564,107565],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,107568,107569],{},"简单理解：",[73,107571,107574],{"className":107572,"code":107573,"language":78,"meta":79},[76],"实际施加效果 ≈ data.ctrl[0] * gear\n",[32,107575,107573],{"__ignoreMap":79},[19,107577,107578],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,107580,538],{"id":537},[73,107582,107584],{"className":249,"code":107583,"language":251,"meta":79,"style":79},"import math\n\nimport mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"one_link_motor\">\n  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n\n      \u003Cbody name=\"link\" pos=\"0 0 0\">\n        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n        \u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\" rgba=\"0.1 0.4 1 1\"\u002F>\n      \u003C\u002Fbody>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\n  \u003Cactuator>\n    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n  \u003C\u002Factuator>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    print(\"nq:\", model.nq)\n    print(\"nv:\", model.nv)\n    print(\"nu:\", model.nu)\n\n    if model.nu != 1:\n        raise RuntimeError(\"expected exactly one actuator\")\n\n    for step in range(2000):\n        t = step * model.opt.timestep\n        data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n        mujoco.mj_step(model, data)\n\n    print(\"time:\", data.time)\n    print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n    print(\"joint qvel:\", np.round(data.qvel.copy(), 4))\n    print(\"last ctrl:\", data.ctrl.copy())\n\n\nif __name__ == \"__main__\":\n    main()\n",[32,107585,107586,107593,107597,107603,107613,107617,107621,107629,107634,107639,107643,107647,107652,107657,107661,107666,107671,107676,107681,107685,107689,107693,107698,107703,107708,107712,107716,107720,107724,107736,107748,107756,107760,107770,107780,107790,107794,107807,107820,107824,107841,107855,107890,107894,107898,107909,107924,107939,107951,107955,107959,107971],{"__ignoreMap":79},[100,107587,107588,107590],{"class":102,"line":103},[100,107589,548],{"class":471},[100,107591,107592],{"class":258}," math\n",[100,107594,107595],{"class":102,"line":188},[100,107596,570],{"emptyLinePlaceholder":569},[100,107598,107599,107601],{"class":102,"line":199},[100,107600,548],{"class":471},[100,107602,551],{"class":258},[100,107604,107605,107607,107609,107611],{"class":102,"line":532},[100,107606,548],{"class":471},[100,107608,558],{"class":258},[100,107610,561],{"class":471},[100,107612,564],{"class":258},[100,107614,107615],{"class":102,"line":577},[100,107616,570],{"emptyLinePlaceholder":569},[100,107618,107619],{"class":102,"line":589},[100,107620,570],{"emptyLinePlaceholder":569},[100,107622,107623,107625,107627],{"class":102,"line":595},[100,107624,580],{"class":117},[100,107626,583],{"class":471},[100,107628,586],{"class":110},[100,107630,107631],{"class":102,"line":601},[100,107632,107633],{"class":110},"\u003Cmujoco model=\"one_link_motor\">\n",[100,107635,107636],{"class":102,"line":606},[100,107637,107638],{"class":110},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[100,107640,107641],{"class":102,"line":612},[100,107642,570],{"emptyLinePlaceholder":569},[100,107644,107645],{"class":102,"line":618},[100,107646,609],{"class":110},[100,107648,107649],{"class":102,"line":623},[100,107650,107651],{"class":110},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[100,107653,107654],{"class":102,"line":629},[100,107655,107656],{"class":110},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[100,107658,107659],{"class":102,"line":635},[100,107660,570],{"emptyLinePlaceholder":569},[100,107662,107663],{"class":102,"line":641},[100,107664,107665],{"class":110},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[100,107667,107668],{"class":102,"line":647},[100,107669,107670],{"class":110},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[100,107672,107673],{"class":102,"line":653},[100,107674,107675],{"class":110},"        \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",[100,107677,107678],{"class":102,"line":659},[100,107679,107680],{"class":110},"      \u003C\u002Fbody>\n",[100,107682,107683],{"class":102,"line":665},[100,107684,644],{"class":110},[100,107686,107687],{"class":102,"line":670},[100,107688,650],{"class":110},[100,107690,107691],{"class":102,"line":675},[100,107692,570],{"emptyLinePlaceholder":569},[100,107694,107695],{"class":102,"line":699},[100,107696,107697],{"class":110},"  \u003Cactuator>\n",[100,107699,107700],{"class":102,"line":708},[100,107701,107702],{"class":110},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[100,107704,107705],{"class":102,"line":722},[100,107706,107707],{"class":110},"  \u003C\u002Factuator>\n",[100,107709,107710],{"class":102,"line":735},[100,107711,656],{"class":110},[100,107713,107714],{"class":102,"line":754},[100,107715,662],{"class":110},[100,107717,107718],{"class":102,"line":771},[100,107719,570],{"emptyLinePlaceholder":569},[100,107721,107722],{"class":102,"line":776},[100,107723,570],{"emptyLinePlaceholder":569},[100,107725,107726,107728,107730,107732,107734],{"class":102,"line":781},[100,107727,678],{"class":471},[100,107729,786],{"class":106},[100,107731,789],{"class":258},[100,107733,693],{"class":117},[100,107735,696],{"class":258},[100,107737,107738,107740,107742,107744,107746],{"class":102,"line":796},[100,107739,799],{"class":258},[100,107741,472],{"class":471},[100,107743,804],{"class":258},[100,107745,580],{"class":117},[100,107747,809],{"class":258},[100,107749,107750,107752,107754],{"class":102,"line":812},[100,107751,815],{"class":258},[100,107753,472],{"class":471},[100,107755,820],{"class":258},[100,107757,107758],{"class":102,"line":823},[100,107759,570],{"emptyLinePlaceholder":569},[100,107761,107762,107764,107766,107768],{"class":102,"line":828},[100,107763,702],{"class":117},[100,107765,713],{"class":258},[100,107767,1585],{"class":110},[100,107769,1588],{"class":258},[100,107771,107772,107774,107776,107778],{"class":102,"line":840},[100,107773,702],{"class":117},[100,107775,713],{"class":258},[100,107777,1597],{"class":110},[100,107779,1600],{"class":258},[100,107781,107782,107784,107786,107788],{"class":102,"line":845},[100,107783,702],{"class":117},[100,107785,713],{"class":258},[100,107787,102966],{"class":110},[100,107789,102969],{"class":258},[100,107791,107792],{"class":102,"line":868},[100,107793,570],{"emptyLinePlaceholder":569},[100,107795,107796,107798,107801,107803,107805],{"class":102,"line":874},[100,107797,4702],{"class":471},[100,107799,107800],{"class":258}," model.nu ",[100,107802,22529],{"class":471},[100,107804,26693],{"class":117},[100,107806,696],{"class":258},[100,107808,107809,107811,107813,107815,107818],{"class":102,"line":879},[100,107810,104906],{"class":471},[100,107812,104909],{"class":117},[100,107814,713],{"class":258},[100,107816,107817],{"class":110},"\"expected exactly one actuator\"",[100,107819,809],{"class":258},[100,107821,107822],{"class":102,"line":889},[100,107823,570],{"emptyLinePlaceholder":569},[100,107825,107826,107828,107830,107832,107834,107836,107839],{"class":102,"line":894},[100,107827,848],{"class":471},[100,107829,33174],{"class":258},[100,107831,854],{"class":471},[100,107833,857],{"class":117},[100,107835,713],{"class":258},[100,107837,107838],{"class":117},"2000",[100,107840,865],{"class":258},[100,107842,107843,107846,107848,107850,107852],{"class":102,"line":900},[100,107844,107845],{"class":258},"        t ",[100,107847,472],{"class":471},[100,107849,33174],{"class":258},[100,107851,2222],{"class":471},[100,107853,107854],{"class":258}," model.opt.timestep\n",[100,107856,107857,107860,107862,107864,107866,107869,107871,107874,107876,107878,107881,107883,107885,107887],{"class":102,"line":910},[100,107858,107859],{"class":258},"        data.ctrl[",[100,107861,1366],{"class":117},[100,107863,468],{"class":258},[100,107865,472],{"class":471},[100,107867,107868],{"class":117}," 1.5",[100,107870,8114],{"class":471},[100,107872,107873],{"class":258}," math.sin(",[100,107875,1127],{"class":117},[100,107877,8114],{"class":471},[100,107879,107880],{"class":258}," math.pi ",[100,107882,2222],{"class":471},[100,107884,63421],{"class":117},[100,107886,8114],{"class":471},[100,107888,107889],{"class":258}," t)\n",[100,107891,107892],{"class":102,"line":915},[100,107893,871],{"class":258},[100,107895,107896],{"class":102,"line":929},[100,107897,570],{"emptyLinePlaceholder":569},[100,107899,107900,107902,107904,107907],{"class":102,"line":935},[100,107901,702],{"class":117},[100,107903,713],{"class":258},[100,107905,107906],{"class":110},"\"time:\"",[100,107908,732],{"class":258},[100,107910,107911,107913,107915,107918,107920,107922],{"class":102,"line":945},[100,107912,702],{"class":117},[100,107914,713],{"class":258},[100,107916,107917],{"class":110},"\"joint qpos:\"",[100,107919,745],{"class":258},[100,107921,748],{"class":117},[100,107923,751],{"class":258},[100,107925,107926,107928,107930,107933,107935,107937],{"class":102,"line":950},[100,107927,702],{"class":117},[100,107929,713],{"class":258},[100,107931,107932],{"class":110},"\"joint qvel:\"",[100,107934,764],{"class":258},[100,107936,748],{"class":117},[100,107938,751],{"class":258},[100,107940,107941,107943,107945,107948],{"class":102,"line":955},[100,107942,702],{"class":117},[100,107944,713],{"class":258},[100,107946,107947],{"class":110},"\"last ctrl:\"",[100,107949,107950],{"class":258},", data.ctrl.copy())\n",[100,107952,107953],{"class":102,"line":972},[100,107954,570],{"emptyLinePlaceholder":569},[100,107956,107957],{"class":102,"line":11370},[100,107958,570],{"emptyLinePlaceholder":569},[100,107960,107961,107963,107965,107967,107969],{"class":102,"line":11375},[100,107962,958],{"class":471},[100,107964,961],{"class":117},[100,107966,964],{"class":471},[100,107968,967],{"class":110},[100,107970,696],{"class":258},[100,107972,107973],{"class":102,"line":11380},[100,107974,975],{"class":258},[19,107976,978],{},[73,107978,107980],{"className":94,"code":107979,"language":96,"meta":79,"style":79},"touch ch4_joint_motor.py\n",[32,107981,107982],{"__ignoreMap":79},[100,107983,107984,107986],{"class":102,"line":103},[100,107985,988],{"class":106},[100,107987,107988],{"class":110}," ch4_joint_motor.py\n",[19,107990,994],{},[73,107992,107994],{"className":94,"code":107993,"language":96,"meta":79,"style":79},"python ch4_joint_motor.py\n",[32,107995,107996],{"__ignoreMap":79},[100,107997,107998,108000],{"class":102,"line":103},[100,107999,251],{"class":106},[100,108001,107988],{"class":110},[305,108003,1008],{"id":1008},[19,108005,108006],{},"检查 actuator 数量：",[73,108008,108010],{"className":249,"code":108009,"language":251,"meta":79,"style":79},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[32,108011,108012,108024],{"__ignoreMap":79},[100,108013,108014,108016,108018,108020,108022],{"class":102,"line":103},[100,108015,958],{"class":471},[100,108017,107800],{"class":258},[100,108019,22529],{"class":471},[100,108021,26693],{"class":117},[100,108023,696],{"class":258},[100,108025,108026,108028,108030,108032,108034],{"class":102,"line":188},[100,108027,105368],{"class":471},[100,108029,104909],{"class":117},[100,108031,713],{"class":258},[100,108033,107817],{"class":110},[100,108035,809],{"class":258},[19,108037,108038,108040,108041,108043],{},[32,108039,103648],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[32,108042,372],{}," 长度应该是 1。",[19,108045,108046],{},"产生正弦控制信号：",[73,108048,108050],{"className":249,"code":108049,"language":251,"meta":79,"style":79},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[32,108051,108052],{"__ignoreMap":79},[100,108053,108054,108056,108058,108060,108062,108064,108066,108068,108070,108072,108074,108076,108078,108080],{"class":102,"line":103},[100,108055,107113],{"class":258},[100,108057,1366],{"class":117},[100,108059,468],{"class":258},[100,108061,472],{"class":471},[100,108063,107868],{"class":117},[100,108065,8114],{"class":471},[100,108067,107873],{"class":258},[100,108069,1127],{"class":117},[100,108071,8114],{"class":471},[100,108073,107880],{"class":258},[100,108075,2222],{"class":471},[100,108077,63421],{"class":117},[100,108079,8114],{"class":471},[100,108081,107889],{"class":258},[19,108083,108084],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,108086,103166],{},[73,108088,108089],{"className":249,"code":250,"language":251,"meta":79,"style":79},[32,108090,108091],{"__ignoreMap":79},[100,108092,108093],{"class":102,"line":103},[100,108094,250],{"class":258},[19,108096,108097],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[305,108099,1131],{"id":1131},[73,108101,108103],{"className":249,"code":108102,"language":251,"meta":79,"style":79},"import math\n",[32,108104,108105],{"__ignoreMap":79},[100,108106,108107,108109],{"class":102,"line":103},[100,108108,548],{"class":471},[100,108110,107592],{"class":258},[19,108112,108113,108114,218,108117,108120],{},"导入 Python 标准库里的数学模块。后面要用 ",[32,108115,108116],{},"math.sin",[32,108118,108119],{},"math.pi"," 生成周期变化的控制信号。",[73,108122,108123],{"className":249,"code":105159,"language":251,"meta":79,"style":79},[32,108124,108125,108131],{"__ignoreMap":79},[100,108126,108127,108129],{"class":102,"line":103},[100,108128,548],{"class":471},[100,108130,551],{"class":258},[100,108132,108133,108135,108137,108139],{"class":102,"line":188},[100,108134,548],{"class":471},[100,108136,558],{"class":258},[100,108138,561],{"class":471},[100,108140,564],{"class":258},[19,108142,108143],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[73,108145,108146],{"className":54621,"code":107429,"language":54623,"meta":79,"style":79},[32,108147,108148],{"__ignoreMap":79},[100,108149,108150,108152,108154,108156,108158,108160,108162,108164,108166,108168,108170,108172,108174,108176,108178],{"class":102,"line":103},[100,108151,2676],{"class":258},[100,108153,104430],{"class":52854},[100,108155,16501],{"class":106},[100,108157,472],{"class":258},[100,108159,107261],{"class":110},[100,108161,55378],{"class":106},[100,108163,472],{"class":258},[100,108165,107261],{"class":110},[100,108167,107270],{"class":106},[100,108169,472],{"class":258},[100,108171,107275],{"class":110},[100,108173,107458],{"class":106},[100,108175,472],{"class":258},[100,108177,107463],{"class":110},[100,108179,102668],{"class":258},[19,108181,108182,108183,108185,108186,108188,108189,108191],{},"这行定义关节。",[32,108184,107082],{}," 表示旋转关节。",[32,108187,107481],{}," 表示绕 y 轴旋转。",[32,108190,107487],{}," 表示有一点阻尼，运动不会完全无损耗。",[73,108193,108195],{"className":54621,"code":108194,"language":54623,"meta":79,"style":79},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[32,108196,108197],{"__ignoreMap":79},[100,108198,108199,108201,108203,108205,108207,108210,108212,108214,108217,108220,108222,108225,108227,108229,108231,108233,108235,108238],{"class":102,"line":103},[100,108200,2676],{"class":258},[100,108202,102644],{"class":52854},[100,108204,16501],{"class":106},[100,108206,472],{"class":258},[100,108208,108209],{"class":110},"\"link_geom\"",[100,108211,55378],{"class":106},[100,108213,472],{"class":258},[100,108215,108216],{"class":110},"\"capsule\"",[100,108218,108219],{"class":106}," fromto",[100,108221,472],{"class":258},[100,108223,108224],{"class":110},"\"0 0 0 0 0 0.5\"",[100,108226,102660],{"class":106},[100,108228,472],{"class":258},[100,108230,105251],{"class":110},[100,108232,103492],{"class":106},[100,108234,472],{"class":258},[100,108236,108237],{"class":110},"\"0.5\"",[100,108239,102668],{"class":258},[19,108241,108242,108243,108245,108246,108248,108249,108252,108253,233,108256,108258],{},"这行定义摆杆的形状。",[32,108244,104639],{}," 是胶囊体，适合表示杆子。",[32,108247,104650],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[32,108250,108251],{},"(0,0,0)"," 延伸到 ",[32,108254,108255],{},"(0,0,0.5)",[32,108257,104644],{}," 是半径。",[73,108260,108261],{"className":54621,"code":107495,"language":54623,"meta":79,"style":79},[32,108262,108263],{"__ignoreMap":79},[100,108264,108265,108267,108269,108271,108273,108275,108277,108279,108281,108283,108285,108287,108289,108291,108293,108295,108297,108299],{"class":102,"line":103},[100,108266,2676],{"class":258},[100,108268,107316],{"class":52854},[100,108270,16501],{"class":106},[100,108272,472],{"class":258},[100,108274,107323],{"class":110},[100,108276,107326],{"class":106},[100,108278,472],{"class":258},[100,108280,107261],{"class":110},[100,108282,107333],{"class":106},[100,108284,472],{"class":258},[100,108286,5278],{"class":110},[100,108288,107340],{"class":106},[100,108290,472],{"class":258},[100,108292,107345],{"class":110},[100,108294,107348],{"class":106},[100,108296,472],{"class":258},[100,108298,107353],{"class":110},[100,108300,102668],{"class":258},[19,108302,108303,108304,108306,108307,108310,108311,108313],{},"这行定义电机。它作用在 ",[32,108305,107082],{}," 关节上。",[32,108308,108309],{},"gear"," 可以理解成放大倍数。",[32,108312,107097],{}," 限制控制输入范围。",[73,108315,108316],{"className":249,"code":108009,"language":251,"meta":79,"style":79},[32,108317,108318,108330],{"__ignoreMap":79},[100,108319,108320,108322,108324,108326,108328],{"class":102,"line":103},[100,108321,958],{"class":471},[100,108323,107800],{"class":258},[100,108325,22529],{"class":471},[100,108327,26693],{"class":117},[100,108329,696],{"class":258},[100,108331,108332,108334,108336,108338,108340],{"class":102,"line":188},[100,108333,105368],{"class":471},[100,108335,104909],{"class":117},[100,108337,713],{"class":258},[100,108339,107817],{"class":110},[100,108341,809],{"class":258},[19,108343,108344,108346],{},[32,108345,103648],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[73,108348,108350],{"className":249,"code":108349,"language":251,"meta":79,"style":79},"for step in range(2000):\n",[32,108351,108352],{"__ignoreMap":79},[100,108353,108354,108356,108358,108360,108362,108364,108366],{"class":102,"line":103},[100,108355,1051],{"class":471},[100,108357,33174],{"class":258},[100,108359,854],{"class":471},[100,108361,857],{"class":117},[100,108363,713],{"class":258},[100,108365,107838],{"class":117},[100,108367,865],{"class":258},[19,108369,108370,108371,108373,108374,108377],{},"循环 2000 步。这里没有用 ",[32,108372,2758],{},"，而是用 ",[32,108375,108376],{},"step","，因为后面要用当前步数计算时间。",[73,108379,108381],{"className":249,"code":108380,"language":251,"meta":79,"style":79},"t = step * model.opt.timestep\n",[32,108382,108383],{"__ignoreMap":79},[100,108384,108385,108388,108390,108392,108394],{"class":102,"line":103},[100,108386,108387],{"class":258},"t ",[100,108389,472],{"class":471},[100,108391,33174],{"class":258},[100,108393,2222],{"class":471},[100,108395,107854],{"class":258},[19,108397,108398],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[73,108400,108401],{"className":249,"code":108049,"language":251,"meta":79,"style":79},[32,108402,108403],{"__ignoreMap":79},[100,108404,108405,108407,108409,108411,108413,108415,108417,108419,108421,108423,108425,108427,108429,108431],{"class":102,"line":103},[100,108406,107113],{"class":258},[100,108408,1366],{"class":117},[100,108410,468],{"class":258},[100,108412,472],{"class":471},[100,108414,107868],{"class":117},[100,108416,8114],{"class":471},[100,108418,107873],{"class":258},[100,108420,1127],{"class":117},[100,108422,8114],{"class":471},[100,108424,107880],{"class":258},[100,108426,2222],{"class":471},[100,108428,63421],{"class":117},[100,108430,8114],{"class":471},[100,108432,107889],{"class":258},[19,108434,108435],{},"这行给电机输入一个正弦波。拆开看：",[26,108437,108438,108444,108450],{},[29,108439,108440,108443],{},[32,108441,108442],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[29,108445,108446,108449],{},[32,108447,108448],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[29,108451,108452,108455],{},[32,108453,108454],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,108457,108458],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[73,108460,108462],{"className":249,"code":108461,"language":251,"meta":79,"style":79},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[32,108463,108464],{"__ignoreMap":79},[100,108465,108466,108468,108470,108472,108474,108476],{"class":102,"line":103},[100,108467,1195],{"class":117},[100,108469,713],{"class":258},[100,108471,107917],{"class":110},[100,108473,745],{"class":258},[100,108475,748],{"class":117},[100,108477,751],{"class":258},[19,108479,108480,108481,108483],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[32,108482,264],{}," 只有一个数。",[14,108485,1355],{"id":1354},[19,108487,108488],{},"输出类似:",[73,108490,108493],{"className":108491,"code":108492,"language":78,"meta":79},[76],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[32,108494,108492],{"__ignoreMap":79},[19,108496,108497,108498,108500],{},"这里 ",[32,108499,107368],{}," 是电机输入。",[19,108502,108503,108506,108507,108510],{},[32,108504,108505],{},"joint qpos"," 是关节角度，单位通常是弧度。",[32,108508,108509],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,108512,108513],{},"角度单位提示：",[73,108515,108518],{"className":108516,"code":108517,"language":78,"meta":79},[76],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[32,108519,108517],{"__ignoreMap":79},[19,108521,108522,108523,108525,108526,108528],{},"如果你看到 ",[32,108524,55],{}," 是 ",[32,108527,1078],{},"，大约就是 28.6 度。",[14,108530,1418],{"id":1417},[26,108532,108533,108540,108543,108550,108553,108561,108569],{},[29,108534,1444,108535,1448,108537,233],{},[32,108536,107553],{},[32,108538,108539],{},"gear=\"5\"",[29,108541,108542],{},"重新运行，观察关节运动是否更剧烈。",[29,108544,1444,108545,1448,108547,233],{},[32,108546,107097],{},[32,108548,108549],{},"-0.2 0.2",[29,108551,108552],{},"重新运行，观察控制能力是否变弱。",[29,108554,108555,108556,108558,108559,233],{},"去掉 actuator，确认 ",[32,108557,103648],{}," 变成 ",[32,108560,1366],{},[29,108562,1444,108563,1448,108565,108568],{},[32,108564,107487],{},[32,108566,108567],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[29,108570,1444,108571,1448,108573,108576],{},[32,108572,107481],{},[32,108574,108575],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,108578,1463],{"id":1462},[305,108580,108582],{"id":108581},"indexerror-index-0-is-out-of-bounds",[32,108583,108584],{},"IndexError: index 0 is out of bounds",[19,108586,108587,108588,108590],{},"原因是 ",[32,108589,107234],{},"，没有 actuator。",[305,108592,108593],{"id":108593},"关节几乎不动",[19,108595,108596],{},"可能原因:",[26,108598,108599,108604,108608,108614],{},[29,108600,108601,108603],{},[32,108602,108309],{}," 太小",[29,108605,108606,108603],{},[32,108607,107097],{},[29,108609,108610,108613],{},[32,108611,108612],{},"damping"," 太大",[29,108615,108616],{},"重力方向导致运动不明显",[305,108618,108619],{"id":108619},"模型编译失败",[19,108621,108622,108623,108625],{},"检查 actuator 引用的 ",[32,108624,107544],{}," 是否存在，joint 名称是否拼写一致。",[305,108627,108629,108631],{"id":108628},"datactrl0-写了但没有效果",[32,108630,107368],{}," 写了但没有效果",[19,108633,104053],{},[26,108635,108636,108641,108644,108649,108654],{},[29,108637,108638,108640],{},[32,108639,103648],{}," 是否大于 0。",[29,108642,108643],{},"motor 是否引用了正确 joint。",[29,108645,108646,108648],{},[32,108647,108309],{}," 是否太小。",[29,108650,108651,108653],{},[32,108652,107097],{}," 是否把输入限制得太小。",[29,108655,108656],{},"body 是否真的有可动 joint。",[305,108658,108659],{"id":108659},"控制输入超过范围会怎样",[19,108661,108662],{},"如果设置了：",[73,108664,108666],{"className":54621,"code":108665,"language":54623,"meta":79,"style":79},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[32,108667,108668],{"__ignoreMap":79},[100,108669,108670],{"class":102,"line":103},[100,108671,108665],{"class":258},[19,108673,108674],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[73,108676,108678],{"className":249,"code":108677,"language":251,"meta":79,"style":79},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[32,108679,108680,108700],{"__ignoreMap":79},[100,108681,108682,108685,108687,108690,108692,108694,108696,108698],{"class":102,"line":103},[100,108683,108684],{"class":258},"action ",[100,108686,472],{"class":471},[100,108688,108689],{"class":258}," np.clip(action, ",[100,108691,2299],{"class":471},[100,108693,1127],{"class":117},[100,108695,14017],{"class":258},[100,108697,1127],{"class":117},[100,108699,809],{"class":258},[100,108701,108702,108704,108706,108708,108710],{"class":102,"line":188},[100,108703,107113],{"class":258},[100,108705,1366],{"class":117},[100,108707,468],{"class":258},[100,108709,472],{"class":471},[100,108711,108712],{"class":258}," action\n",[14,108714,1640],{"id":1639},[19,108716,108717],{},"这一章建立了控制任务的基本形式：",[73,108719,108722],{"className":108720,"code":108721,"language":78,"meta":79},[76],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[32,108723,108721],{"__ignoreMap":79},[19,108725,108726],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[1677,108728,108729],{},"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":79,"searchDepth":188,"depth":188,"links":108731},[108732,108733,108734,108739,108743,108744,108745,108753],{"id":16,"depth":188,"text":17},{"id":87,"depth":188,"text":88},{"id":242,"depth":188,"text":243,"children":108735},[108736,108737,108738],{"id":107375,"depth":199,"text":107376},{"id":107425,"depth":199,"text":107426},{"id":107491,"depth":199,"text":107492},{"id":537,"depth":188,"text":538,"children":108740},[108741,108742],{"id":1008,"depth":199,"text":1008},{"id":1131,"depth":199,"text":1131},{"id":1354,"depth":188,"text":1355},{"id":1417,"depth":188,"text":1418},{"id":1462,"depth":188,"text":1463,"children":108746},[108747,108748,108749,108750,108752],{"id":108581,"depth":199,"text":108584},{"id":108593,"depth":199,"text":108593},{"id":108619,"depth":199,"text":108619},{"id":108628,"depth":199,"text":108751},"data.ctrl[0] 写了但没有效果",{"id":108659,"depth":199,"text":108659},{"id":1639,"depth":188,"text":1640},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":107063,"description":79},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":108760,"title":108761,"body":108762,"description":79,"extension":1708,"meta":110671,"navigation":569,"path":110672,"seo":110673,"stem":110674,"__hash__":110675},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":108763,"toc":110647},[108764,108767,108769,108772,108780,108783,108800,108803,108828,108831,108877,108879,108881,108936,108938,108957,108959,109002,109005,109022,109025,109041,109051,109058,109060,109063,109066,109100,109103,109151,109155,109158,109172,109181,109185,109188,109213,109216,109220,109233,109236,109242,109245,109260,109262,109265,109525,109527,109539,109542,109854,109856,109868,109870,109873,109888,109893,109896,109918,109921,109924,109958,109961,109965,109976,109979,109996,109999,110013,110020,110040,110047,110061,110064,110076,110091,110111,110114,110136,110139,110143,110158,110169,110184,110187,110217,110233,110262,110270,110294,110297,110315,110325,110337,110344,110353,110359,110368,110371,110373,110382,110385,110400,110402,110405,110416,110419,110430,110433,110451,110453,110470,110473,110501,110503,110507,110510,110540,110546,110549,110553,110561,110564,110566,110587,110590,110593,110609,110612,110628,110630,110633,110644],[10,108765,108761],{"id":108766},"_5viewer-可视化与-renderer-离屏渲染",[14,108768,17],{"id":16},[19,108770,108771],{},"本章掌握两类可视化方式:",[26,108773,108774,108777],{},[29,108775,108776],{},"交互式 viewer: 适合人工观察仿真",[29,108778,108779],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,108781,108782],{},"使用官方接口:",[73,108784,108786],{"className":249,"code":108785,"language":251,"meta":79,"style":79},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[32,108787,108788,108795],{"__ignoreMap":79},[100,108789,108790,108792],{"class":102,"line":103},[100,108791,548],{"class":471},[100,108793,108794],{"class":258}," mujoco.viewer\n",[100,108796,108797],{"class":102,"line":188},[100,108798,108799],{"class":258},"mujoco.viewer.launch_passive(model, data)\n",[19,108801,108802],{},"以及:",[73,108804,108806],{"className":249,"code":108805,"language":251,"meta":79,"style":79},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[32,108807,108808,108818],{"__ignoreMap":79},[100,108809,108810,108813,108815],{"class":102,"line":103},[100,108811,108812],{"class":258},"renderer ",[100,108814,472],{"class":471},[100,108816,108817],{"class":258}," mujoco.Renderer(model)\n",[100,108819,108820,108823,108825],{"class":102,"line":188},[100,108821,108822],{"class":258},"image ",[100,108824,472],{"class":471},[100,108826,108827],{"class":258}," renderer.render()\n",[19,108829,108830],{},"新手建议先理解二者区别：",[319,108832,108833,108849],{},[322,108834,108835],{},[325,108836,108837,108840,108843,108846],{},[328,108838,108839],{"align":330},"工具",[328,108841,108842],{"align":330},"用途",[328,108844,108845],{"align":330},"是否打开窗口",[328,108847,108848],{"align":330},"常见场景",[339,108850,108851,108864],{},[325,108852,108853,108856,108859,108861],{},[344,108854,108855],{"align":330},"Viewer",[344,108857,108858],{"align":330},"人眼实时观察仿真",[344,108860,428],{"align":330},[344,108862,108863],{"align":330},"调试模型、看控制效果",[325,108865,108866,108869,108872,108874],{},[344,108867,108868],{"align":330},"Renderer",[344,108870,108871],{"align":330},"生成图像数组",[344,108873,441],{"align":330},[344,108875,108876],{"align":330},"保存图片、训练视觉策略、服务器批量采集",[14,108878,88],{"id":87},[19,108880,91],{},[73,108882,108884],{"className":94,"code":108883,"language":96,"meta":79,"style":79},"sudo dnf install -y \\\n  mesa-libGL mesa-libGLU mesa-dri-drivers \\\n  libglvnd-glx libglvnd-opengl \\\n  glfw glfw-devel \\\n  libX11 libXcursor libXi libXinerama libXrandr\n",[32,108885,108886,108898,108908,108916,108924],{"__ignoreMap":79},[100,108887,108888,108890,108892,108894,108896],{"class":102,"line":103},[100,108889,107],{"class":106},[100,108891,111],{"class":110},[100,108893,114],{"class":110},[100,108895,118],{"class":117},[100,108897,26254],{"class":117},[100,108899,108900,108902,108904,108906],{"class":102,"line":188},[100,108901,102348],{"class":110},[100,108903,102351],{"class":110},[100,108905,130],{"class":110},[100,108907,26254],{"class":117},[100,108909,108910,108912,108914],{"class":102,"line":199},[100,108911,102360],{"class":110},[100,108913,102363],{"class":110},[100,108915,26254],{"class":117},[100,108917,108918,108920,108922],{"class":102,"line":532},[100,108919,102370],{"class":110},[100,108921,102373],{"class":110},[100,108923,26254],{"class":117},[100,108925,108926,108928,108930,108932,108934],{"class":102,"line":577},[100,108927,102380],{"class":110},[100,108929,102383],{"class":110},[100,108931,102386],{"class":110},[100,108933,102389],{"class":110},[100,108935,103994],{"class":110},[19,108937,136],{},[73,108939,108941],{"className":94,"code":108940,"language":96,"meta":79,"style":79},"pip install \"mujoco>=2.3\" numpy pillow\n",[32,108942,108943],{"__ignoreMap":79},[100,108944,108945,108947,108949,108951,108954],{"class":102,"line":103},[100,108946,146],{"class":106},[100,108948,114],{"class":110},[100,108950,151],{"class":110},[100,108952,108953],{"class":110}," numpy",[100,108955,108956],{"class":110}," pillow\n",[19,108958,157],{},[73,108960,108962],{"className":94,"code":108961,"language":96,"meta":79,"style":79},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[32,108963,108964,108981,108990],{"__ignoreMap":79},[100,108965,108966,108968,108970,108972,108975,108977,108979],{"class":102,"line":103},[100,108967,167],{"class":106},[100,108969,170],{"class":110},[100,108971,173],{"class":117},[100,108973,108974],{"class":110}," mujoco-render",[100,108976,179],{"class":110},[100,108978,182],{"class":117},[100,108980,185],{"class":117},[100,108982,108983,108985,108987],{"class":102,"line":188},[100,108984,167],{"class":106},[100,108986,193],{"class":110},[100,108988,108989],{"class":110}," mujoco-render\n",[100,108991,108992,108994,108996,108998,109000],{"class":102,"line":199},[100,108993,146],{"class":106},[100,108995,114],{"class":110},[100,108997,151],{"class":110},[100,108999,108953],{"class":110},[100,109001,108956],{"class":110},[19,109003,109004],{},"离屏渲染后端:",[73,109006,109008],{"className":94,"code":109007,"language":96,"meta":79,"style":79},"export MUJOCO_GL=egl\n",[32,109009,109010],{"__ignoreMap":79},[100,109011,109012,109014,109017,109019],{"class":102,"line":103},[100,109013,26618],{"class":471},[100,109015,109016],{"class":258}," MUJOCO_GL",[100,109018,472],{"class":471},[100,109020,109021],{"class":258},"egl\n",[19,109023,109024],{},"或:",[73,109026,109028],{"className":94,"code":109027,"language":96,"meta":79,"style":79},"export MUJOCO_GL=osmesa\n",[32,109029,109030],{"__ignoreMap":79},[100,109031,109032,109034,109036,109038],{"class":102,"line":103},[100,109033,26618],{"class":471},[100,109035,109016],{"class":258},[100,109037,472],{"class":471},[100,109039,109040],{"class":258},"osmesa\n",[19,109042,109043,109044,109047,109048,233],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[32,109045,109046],{},"egl"," 失败，再尝试 ",[32,109049,109050],{},"osmesa",[19,109052,109053,109054,109057],{},"如果你在本机桌面环境运行，通常先不要设置 ",[32,109055,109056],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,109059,243],{"id":242},[19,109061,109062],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,109064,109065],{},"典型 viewer 流程:",[73,109067,109069],{"className":249,"code":109068,"language":251,"meta":79,"style":79},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[32,109070,109071,109084,109091,109095],{"__ignoreMap":79},[100,109072,109073,109076,109079,109081],{"class":102,"line":103},[100,109074,109075],{"class":471},"with",[100,109077,109078],{"class":258}," mujoco.viewer.launch_passive(model, data) ",[100,109080,561],{"class":471},[100,109082,109083],{"class":258}," viewer:\n",[100,109085,109086,109088],{"class":102,"line":188},[100,109087,3862],{"class":471},[100,109089,109090],{"class":258}," viewer.is_running():\n",[100,109092,109093],{"class":102,"line":199},[100,109094,871],{"class":258},[100,109096,109097],{"class":102,"line":532},[100,109098,109099],{"class":258},"        viewer.sync()\n",[19,109101,109102],{},"典型 renderer 流程:",[73,109104,109106],{"className":249,"code":109105,"language":251,"meta":79,"style":79},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[32,109107,109108,109134,109138,109143],{"__ignoreMap":79},[100,109109,109110,109112,109114,109117,109119,109121,109123,109125,109127,109129,109132],{"class":102,"line":103},[100,109111,108812],{"class":258},[100,109113,472],{"class":471},[100,109115,109116],{"class":258}," mujoco.Renderer(model, ",[100,109118,26557],{"class":6812},[100,109120,472],{"class":471},[100,109122,43896],{"class":117},[100,109124,14017],{"class":258},[100,109126,26553],{"class":6812},[100,109128,472],{"class":471},[100,109130,109131],{"class":117},"640",[100,109133,809],{"class":258},[100,109135,109136],{"class":102,"line":188},[100,109137,250],{"class":258},[100,109139,109140],{"class":102,"line":199},[100,109141,109142],{"class":258},"renderer.update_scene(data)\n",[100,109144,109145,109147,109149],{"class":102,"line":532},[100,109146,108822],{"class":258},[100,109148,472],{"class":471},[100,109150,108827],{"class":258},[305,109152,109154],{"id":109153},"viewer-的同步逻辑","viewer 的同步逻辑",[19,109156,109157],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[73,109159,109161],{"className":249,"code":109160,"language":251,"meta":79,"style":79},"mujoco.mj_step(model, data)\nviewer.sync()\n",[32,109162,109163,109167],{"__ignoreMap":79},[100,109164,109165],{"class":102,"line":103},[100,109166,250],{"class":258},[100,109168,109169],{"class":102,"line":188},[100,109170,109171],{"class":258},"viewer.sync()\n",[19,109173,109174,109176,109177,109180],{},[32,109175,44],{}," 负责算物理，",[32,109178,109179],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[305,109182,109184],{"id":109183},"为什么要-sleep","为什么要 sleep",[19,109186,109187],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[73,109189,109191],{"className":249,"code":109190,"language":251,"meta":79,"style":79},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[32,109192,109193],{"__ignoreMap":79},[100,109194,109195,109198,109200,109203,109205,109208,109210],{"class":102,"line":103},[100,109196,109197],{"class":258},"sleep_time ",[100,109199,472],{"class":471},[100,109201,109202],{"class":258}," model.opt.timestep ",[100,109204,2299],{"class":471},[100,109206,109207],{"class":258}," (time.time() ",[100,109209,2299],{"class":471},[100,109211,109212],{"class":258}," step_start)\n",[19,109214,109215],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[305,109217,109219],{"id":109218},"renderer-输出是什么","renderer 输出是什么",[73,109221,109223],{"className":249,"code":109222,"language":251,"meta":79,"style":79},"image = renderer.render()\n",[32,109224,109225],{"__ignoreMap":79},[100,109226,109227,109229,109231],{"class":102,"line":103},[100,109228,108822],{"class":258},[100,109230,472],{"class":471},[100,109232,108827],{"class":258},[19,109234,109235],{},"得到的是 NumPy 数组，形状通常是：",[73,109237,109240],{"className":109238,"code":109239,"language":78,"meta":79},[76],"(height, width, 3)\n",[32,109241,109239],{"__ignoreMap":79},[19,109243,109244],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[73,109246,109248],{"className":249,"code":109247,"language":251,"meta":79,"style":79},"Image.fromarray(image).save(\"render_output.png\")\n",[32,109249,109250],{"__ignoreMap":79},[100,109251,109252,109255,109258],{"class":102,"line":103},[100,109253,109254],{"class":258},"Image.fromarray(image).save(",[100,109256,109257],{"class":110},"\"render_output.png\"",[100,109259,809],{"class":258},[14,109261,538],{"id":537},[19,109263,109264],{},"交互式 Viewer:",[73,109266,109268],{"className":249,"code":109267,"language":251,"meta":79,"style":79},"import time\n\nimport mujoco\nimport mujoco.viewer\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"viewer_demo\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n\n    \u003Cbody name=\"box\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"box_free\"\u002F>\n      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    with mujoco.viewer.launch_passive(model, data) as viewer:\n        while viewer.is_running() and data.time \u003C 5.0:\n            step_start = time.time()\n            mujoco.mj_step(model, data)\n            viewer.sync()\n\n            sleep_time = model.opt.timestep - (time.time() - step_start)\n            if sleep_time > 0:\n                time.sleep(sleep_time)\n\n\nif __name__ == \"__main__\":\n    main()\n",[32,109269,109270,109276,109280,109286,109292,109296,109300,109308,109313,109317,109321,109325,109330,109335,109339,109343,109347,109352,109356,109360,109364,109368,109372,109376,109388,109400,109408,109412,109422,109442,109452,109457,109462,109466,109483,109496,109501,109505,109509,109521],{"__ignoreMap":79},[100,109271,109272,109274],{"class":102,"line":103},[100,109273,548],{"class":471},[100,109275,33387],{"class":258},[100,109277,109278],{"class":102,"line":188},[100,109279,570],{"emptyLinePlaceholder":569},[100,109281,109282,109284],{"class":102,"line":199},[100,109283,548],{"class":471},[100,109285,551],{"class":258},[100,109287,109288,109290],{"class":102,"line":532},[100,109289,548],{"class":471},[100,109291,108794],{"class":258},[100,109293,109294],{"class":102,"line":577},[100,109295,570],{"emptyLinePlaceholder":569},[100,109297,109298],{"class":102,"line":589},[100,109299,570],{"emptyLinePlaceholder":569},[100,109301,109302,109304,109306],{"class":102,"line":595},[100,109303,580],{"class":117},[100,109305,583],{"class":471},[100,109307,586],{"class":110},[100,109309,109310],{"class":102,"line":601},[100,109311,109312],{"class":110},"\u003Cmujoco model=\"viewer_demo\">\n",[100,109314,109315],{"class":102,"line":606},[100,109316,598],{"class":110},[100,109318,109319],{"class":102,"line":612},[100,109320,570],{"emptyLinePlaceholder":569},[100,109322,109323],{"class":102,"line":618},[100,109324,609],{"class":110},[100,109326,109327],{"class":102,"line":623},[100,109328,109329],{"class":110},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[100,109331,109332],{"class":102,"line":629},[100,109333,109334],{"class":110},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[100,109336,109337],{"class":102,"line":635},[100,109338,570],{"emptyLinePlaceholder":569},[100,109340,109341],{"class":102,"line":641},[100,109342,102867],{"class":110},[100,109344,109345],{"class":102,"line":647},[100,109346,102872],{"class":110},[100,109348,109349],{"class":102,"line":653},[100,109350,109351],{"class":110},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[100,109353,109354],{"class":102,"line":659},[100,109355,644],{"class":110},[100,109357,109358],{"class":102,"line":665},[100,109359,650],{"class":110},[100,109361,109362],{"class":102,"line":670},[100,109363,656],{"class":110},[100,109365,109366],{"class":102,"line":675},[100,109367,662],{"class":110},[100,109369,109370],{"class":102,"line":699},[100,109371,570],{"emptyLinePlaceholder":569},[100,109373,109374],{"class":102,"line":708},[100,109375,570],{"emptyLinePlaceholder":569},[100,109377,109378,109380,109382,109384,109386],{"class":102,"line":722},[100,109379,678],{"class":471},[100,109381,786],{"class":106},[100,109383,789],{"class":258},[100,109385,693],{"class":117},[100,109387,696],{"class":258},[100,109389,109390,109392,109394,109396,109398],{"class":102,"line":735},[100,109391,799],{"class":258},[100,109393,472],{"class":471},[100,109395,804],{"class":258},[100,109397,580],{"class":117},[100,109399,809],{"class":258},[100,109401,109402,109404,109406],{"class":102,"line":754},[100,109403,815],{"class":258},[100,109405,472],{"class":471},[100,109407,820],{"class":258},[100,109409,109410],{"class":102,"line":771},[100,109411,570],{"emptyLinePlaceholder":569},[100,109413,109414,109416,109418,109420],{"class":102,"line":776},[100,109415,35733],{"class":471},[100,109417,109078],{"class":258},[100,109419,561],{"class":471},[100,109421,109083],{"class":258},[100,109423,109424,109427,109430,109432,109435,109437,109440],{"class":102,"line":781},[100,109425,109426],{"class":471},"        while",[100,109428,109429],{"class":258}," viewer.is_running() ",[100,109431,32027],{"class":471},[100,109433,109434],{"class":258}," data.time ",[100,109436,2676],{"class":471},[100,109438,109439],{"class":117}," 5.0",[100,109441,696],{"class":258},[100,109443,109444,109447,109449],{"class":102,"line":796},[100,109445,109446],{"class":258},"            step_start ",[100,109448,472],{"class":471},[100,109450,109451],{"class":258}," time.time()\n",[100,109453,109454],{"class":102,"line":812},[100,109455,109456],{"class":258},"            mujoco.mj_step(model, data)\n",[100,109458,109459],{"class":102,"line":823},[100,109460,109461],{"class":258},"            viewer.sync()\n",[100,109463,109464],{"class":102,"line":828},[100,109465,570],{"emptyLinePlaceholder":569},[100,109467,109468,109471,109473,109475,109477,109479,109481],{"class":102,"line":840},[100,109469,109470],{"class":258},"            sleep_time ",[100,109472,472],{"class":471},[100,109474,109202],{"class":258},[100,109476,2299],{"class":471},[100,109478,109207],{"class":258},[100,109480,2299],{"class":471},[100,109482,109212],{"class":258},[100,109484,109485,109487,109490,109492,109494],{"class":102,"line":845},[100,109486,6240],{"class":471},[100,109488,109489],{"class":258}," sleep_time ",[100,109491,2726],{"class":471},[100,109493,5692],{"class":117},[100,109495,696],{"class":258},[100,109497,109498],{"class":102,"line":868},[100,109499,109500],{"class":258},"                time.sleep(sleep_time)\n",[100,109502,109503],{"class":102,"line":874},[100,109504,570],{"emptyLinePlaceholder":569},[100,109506,109507],{"class":102,"line":879},[100,109508,570],{"emptyLinePlaceholder":569},[100,109510,109511,109513,109515,109517,109519],{"class":102,"line":889},[100,109512,958],{"class":471},[100,109514,961],{"class":117},[100,109516,964],{"class":471},[100,109518,967],{"class":110},[100,109520,696],{"class":258},[100,109522,109523],{"class":102,"line":894},[100,109524,975],{"class":258},[19,109526,978],{},[73,109528,109530],{"className":94,"code":109529,"language":96,"meta":79,"style":79},"touch ch5_viewer.py\n",[32,109531,109532],{"__ignoreMap":79},[100,109533,109534,109536],{"class":102,"line":103},[100,109535,988],{"class":106},[100,109537,109538],{"class":110}," ch5_viewer.py\n",[19,109540,109541],{},"离屏 Renderer 保存图片:",[73,109543,109545],{"className":249,"code":109544,"language":251,"meta":79,"style":79},"from pathlib import Path\n\nimport mujoco\nfrom PIL import Image\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"renderer_demo\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n\n    \u003Cbody name=\"box\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"box_free\"\u002F>\n      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n    renderer = mujoco.Renderer(model, height=480, width=640)\n\n    for _ in range(100):\n        mujoco.mj_step(model, data)\n\n    renderer.update_scene(data, camera=\"fixed_camera\")\n    image = renderer.render()\n\n    output_path = Path(\"render_output.png\")\n    Image.fromarray(image).save(output_path)\n    renderer.close()\n\n    print(\"saved:\", output_path.resolve())\n    print(\"image shape:\", image.shape)\n\n\nif __name__ == \"__main__\":\n    main()\n",[32,109546,109547,109559,109563,109569,109579,109583,109587,109595,109600,109604,109608,109612,109616,109621,109625,109629,109633,109637,109641,109645,109649,109653,109657,109661,109665,109677,109689,109697,109722,109726,109742,109746,109750,109765,109774,109778,109792,109797,109802,109806,109818,109830,109834,109838,109850],{"__ignoreMap":79},[100,109548,109549,109551,109554,109556],{"class":102,"line":103},[100,109550,32301],{"class":471},[100,109552,109553],{"class":258}," pathlib ",[100,109555,548],{"class":471},[100,109557,109558],{"class":258}," Path\n",[100,109560,109561],{"class":102,"line":188},[100,109562,570],{"emptyLinePlaceholder":569},[100,109564,109565,109567],{"class":102,"line":199},[100,109566,548],{"class":471},[100,109568,551],{"class":258},[100,109570,109571,109573,109575,109577],{"class":102,"line":532},[100,109572,32301],{"class":471},[100,109574,48817],{"class":117},[100,109576,48820],{"class":471},[100,109578,48823],{"class":258},[100,109580,109581],{"class":102,"line":577},[100,109582,570],{"emptyLinePlaceholder":569},[100,109584,109585],{"class":102,"line":589},[100,109586,570],{"emptyLinePlaceholder":569},[100,109588,109589,109591,109593],{"class":102,"line":595},[100,109590,580],{"class":117},[100,109592,583],{"class":471},[100,109594,586],{"class":110},[100,109596,109597],{"class":102,"line":601},[100,109598,109599],{"class":110},"\u003Cmujoco model=\"renderer_demo\">\n",[100,109601,109602],{"class":102,"line":606},[100,109603,598],{"class":110},[100,109605,109606],{"class":102,"line":612},[100,109607,570],{"emptyLinePlaceholder":569},[100,109609,109610],{"class":102,"line":618},[100,109611,609],{"class":110},[100,109613,109614],{"class":102,"line":623},[100,109615,109329],{"class":110},[100,109617,109618],{"class":102,"line":629},[100,109619,109620],{"class":110},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[100,109622,109623],{"class":102,"line":635},[100,109624,109334],{"class":110},[100,109626,109627],{"class":102,"line":641},[100,109628,570],{"emptyLinePlaceholder":569},[100,109630,109631],{"class":102,"line":647},[100,109632,102867],{"class":110},[100,109634,109635],{"class":102,"line":653},[100,109636,102872],{"class":110},[100,109638,109639],{"class":102,"line":659},[100,109640,109351],{"class":110},[100,109642,109643],{"class":102,"line":665},[100,109644,644],{"class":110},[100,109646,109647],{"class":102,"line":670},[100,109648,650],{"class":110},[100,109650,109651],{"class":102,"line":675},[100,109652,656],{"class":110},[100,109654,109655],{"class":102,"line":699},[100,109656,662],{"class":110},[100,109658,109659],{"class":102,"line":708},[100,109660,570],{"emptyLinePlaceholder":569},[100,109662,109663],{"class":102,"line":722},[100,109664,570],{"emptyLinePlaceholder":569},[100,109666,109667,109669,109671,109673,109675],{"class":102,"line":735},[100,109668,678],{"class":471},[100,109670,786],{"class":106},[100,109672,789],{"class":258},[100,109674,693],{"class":117},[100,109676,696],{"class":258},[100,109678,109679,109681,109683,109685,109687],{"class":102,"line":754},[100,109680,799],{"class":258},[100,109682,472],{"class":471},[100,109684,804],{"class":258},[100,109686,580],{"class":117},[100,109688,809],{"class":258},[100,109690,109691,109693,109695],{"class":102,"line":771},[100,109692,815],{"class":258},[100,109694,472],{"class":471},[100,109696,820],{"class":258},[100,109698,109699,109702,109704,109706,109708,109710,109712,109714,109716,109718,109720],{"class":102,"line":776},[100,109700,109701],{"class":258},"    renderer ",[100,109703,472],{"class":471},[100,109705,109116],{"class":258},[100,109707,26557],{"class":6812},[100,109709,472],{"class":471},[100,109711,43896],{"class":117},[100,109713,14017],{"class":258},[100,109715,26553],{"class":6812},[100,109717,472],{"class":471},[100,109719,109131],{"class":117},[100,109721,809],{"class":258},[100,109723,109724],{"class":102,"line":781},[100,109725,570],{"emptyLinePlaceholder":569},[100,109727,109728,109730,109732,109734,109736,109738,109740],{"class":102,"line":796},[100,109729,848],{"class":471},[100,109731,851],{"class":258},[100,109733,854],{"class":471},[100,109735,857],{"class":117},[100,109737,713],{"class":258},[100,109739,2078],{"class":117},[100,109741,865],{"class":258},[100,109743,109744],{"class":102,"line":812},[100,109745,871],{"class":258},[100,109747,109748],{"class":102,"line":823},[100,109749,570],{"emptyLinePlaceholder":569},[100,109751,109752,109755,109758,109760,109763],{"class":102,"line":828},[100,109753,109754],{"class":258},"    renderer.update_scene(data, ",[100,109756,109757],{"class":6812},"camera",[100,109759,472],{"class":471},[100,109761,109762],{"class":110},"\"fixed_camera\"",[100,109764,809],{"class":258},[100,109766,109767,109770,109772],{"class":102,"line":840},[100,109768,109769],{"class":258},"    image ",[100,109771,472],{"class":471},[100,109773,108827],{"class":258},[100,109775,109776],{"class":102,"line":845},[100,109777,570],{"emptyLinePlaceholder":569},[100,109779,109780,109783,109785,109788,109790],{"class":102,"line":868},[100,109781,109782],{"class":258},"    output_path ",[100,109784,472],{"class":471},[100,109786,109787],{"class":258}," Path(",[100,109789,109257],{"class":110},[100,109791,809],{"class":258},[100,109793,109794],{"class":102,"line":874},[100,109795,109796],{"class":258},"    Image.fromarray(image).save(output_path)\n",[100,109798,109799],{"class":102,"line":879},[100,109800,109801],{"class":258},"    renderer.close()\n",[100,109803,109804],{"class":102,"line":889},[100,109805,570],{"emptyLinePlaceholder":569},[100,109807,109808,109810,109812,109815],{"class":102,"line":894},[100,109809,702],{"class":117},[100,109811,713],{"class":258},[100,109813,109814],{"class":110},"\"saved:\"",[100,109816,109817],{"class":258},", output_path.resolve())\n",[100,109819,109820,109822,109824,109827],{"class":102,"line":900},[100,109821,702],{"class":117},[100,109823,713],{"class":258},[100,109825,109826],{"class":110},"\"image shape:\"",[100,109828,109829],{"class":258},", image.shape)\n",[100,109831,109832],{"class":102,"line":910},[100,109833,570],{"emptyLinePlaceholder":569},[100,109835,109836],{"class":102,"line":915},[100,109837,570],{"emptyLinePlaceholder":569},[100,109839,109840,109842,109844,109846,109848],{"class":102,"line":929},[100,109841,958],{"class":471},[100,109843,961],{"class":117},[100,109845,964],{"class":471},[100,109847,967],{"class":110},[100,109849,696],{"class":258},[100,109851,109852],{"class":102,"line":935},[100,109853,975],{"class":258},[19,109855,978],{},[73,109857,109859],{"className":94,"code":109858,"language":96,"meta":79,"style":79},"touch ch5_renderer.py\n",[32,109860,109861],{"__ignoreMap":79},[100,109862,109863,109865],{"class":102,"line":103},[100,109864,988],{"class":106},[100,109866,109867],{"class":110}," ch5_renderer.py\n",[305,109869,1008],{"id":1008},[19,109871,109872],{},"viewer 上下文：",[73,109874,109876],{"className":249,"code":109875,"language":251,"meta":79,"style":79},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[32,109877,109878],{"__ignoreMap":79},[100,109879,109880,109882,109884,109886],{"class":102,"line":103},[100,109881,109075],{"class":471},[100,109883,109078],{"class":258},[100,109885,561],{"class":471},[100,109887,109083],{"class":258},[19,109889,109890,109892],{},[32,109891,109075],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,109894,109895],{},"窗口循环：",[73,109897,109899],{"className":249,"code":109898,"language":251,"meta":79,"style":79},"while viewer.is_running() and data.time \u003C 5.0:\n",[32,109900,109901],{"__ignoreMap":79},[100,109902,109903,109906,109908,109910,109912,109914,109916],{"class":102,"line":103},[100,109904,109905],{"class":471},"while",[100,109907,109429],{"class":258},[100,109909,32027],{"class":471},[100,109911,109434],{"class":258},[100,109913,2676],{"class":471},[100,109915,109439],{"class":117},[100,109917,696],{"class":258},[19,109919,109920],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,109922,109923],{},"固定相机：",[73,109925,109927],{"className":54621,"code":109926,"language":54623,"meta":79,"style":79},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[32,109928,109929],{"__ignoreMap":79},[100,109930,109931,109933,109935,109937,109939,109941,109943,109945,109948,109951,109953,109956],{"class":102,"line":103},[100,109932,2676],{"class":258},[100,109934,109757],{"class":52854},[100,109936,16501],{"class":106},[100,109938,472],{"class":258},[100,109940,109762],{"class":110},[100,109942,102630],{"class":106},[100,109944,472],{"class":258},[100,109946,109947],{"class":110},"\"1.5 -2.0 1.2\"",[100,109949,109950],{"class":106}," xyaxes",[100,109952,472],{"class":258},[100,109954,109955],{"class":110},"\"1 0.75 0 0 0 1\"",[100,109957,102668],{"class":258},[19,109959,109960],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[305,109962,109964],{"id":109963},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[73,109966,109968],{"className":249,"code":109967,"language":251,"meta":79,"style":79},"import time\n",[32,109969,109970],{"__ignoreMap":79},[100,109971,109972,109974],{"class":102,"line":103},[100,109973,548],{"class":471},[100,109975,33387],{"class":258},[19,109977,109978],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[73,109980,109982],{"className":249,"code":109981,"language":251,"meta":79,"style":79},"import mujoco\nimport mujoco.viewer\n",[32,109983,109984,109990],{"__ignoreMap":79},[100,109985,109986,109988],{"class":102,"line":103},[100,109987,548],{"class":471},[100,109989,551],{"class":258},[100,109991,109992,109994],{"class":102,"line":188},[100,109993,548],{"class":471},[100,109995,108794],{"class":258},[19,109997,109998],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[73,110000,110001],{"className":249,"code":109875,"language":251,"meta":79,"style":79},[32,110002,110003],{"__ignoreMap":79},[100,110004,110005,110007,110009,110011],{"class":102,"line":103},[100,110006,109075],{"class":471},[100,110008,109078],{"class":258},[100,110010,561],{"class":471},[100,110012,109083],{"class":258},[19,110014,110015,110016,110019],{},"打开一个 viewer 窗口。",[32,110017,110018],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[73,110021,110022],{"className":249,"code":109898,"language":251,"meta":79,"style":79},[32,110023,110024],{"__ignoreMap":79},[100,110025,110026,110028,110030,110032,110034,110036,110038],{"class":102,"line":103},[100,110027,109905],{"class":471},[100,110029,109429],{"class":258},[100,110031,32027],{"class":471},[100,110033,109434],{"class":258},[100,110035,2676],{"class":471},[100,110037,109439],{"class":117},[100,110039,696],{"class":258},[19,110041,110042,110043,110046],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[32,110044,110045],{},"viewer.is_running()"," 会变成 false，循环结束。",[73,110048,110050],{"className":249,"code":110049,"language":251,"meta":79,"style":79},"step_start = time.time()\n",[32,110051,110052],{"__ignoreMap":79},[100,110053,110054,110057,110059],{"class":102,"line":103},[100,110055,110056],{"class":258},"step_start ",[100,110058,472],{"class":471},[100,110060,109451],{"class":258},[19,110062,110063],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[73,110065,110066],{"className":249,"code":109160,"language":251,"meta":79,"style":79},[32,110067,110068,110072],{"__ignoreMap":79},[100,110069,110070],{"class":102,"line":103},[100,110071,250],{"class":258},[100,110073,110074],{"class":102,"line":188},[100,110075,109171],{"class":258},[19,110077,110078,110080,110081,110083,110084,110086,110087,110090],{},[32,110079,44],{}," 推进物理仿真。",[32,110082,109179],{}," 把最新的 ",[32,110085,499],{}," 同步到窗口里显示。没有 ",[32,110088,110089],{},"sync()","，窗口可能看不到最新状态。",[73,110092,110093],{"className":249,"code":109190,"language":251,"meta":79,"style":79},[32,110094,110095],{"__ignoreMap":79},[100,110096,110097,110099,110101,110103,110105,110107,110109],{"class":102,"line":103},[100,110098,109197],{"class":258},[100,110100,472],{"class":471},[100,110102,109202],{"class":258},[100,110104,2299],{"class":471},[100,110106,109207],{"class":258},[100,110108,2299],{"class":471},[100,110110,109212],{"class":258},[19,110112,110113],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[73,110115,110117],{"className":249,"code":110116,"language":251,"meta":79,"style":79},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[32,110118,110119,110131],{"__ignoreMap":79},[100,110120,110121,110123,110125,110127,110129],{"class":102,"line":103},[100,110122,958],{"class":471},[100,110124,109489],{"class":258},[100,110126,2726],{"class":471},[100,110128,5692],{"class":117},[100,110130,696],{"class":258},[100,110132,110133],{"class":102,"line":188},[100,110134,110135],{"class":258},"    time.sleep(sleep_time)\n",[19,110137,110138],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[305,110140,110142],{"id":110141},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[73,110144,110146],{"className":249,"code":110145,"language":251,"meta":79,"style":79},"from pathlib import Path\n",[32,110147,110148],{"__ignoreMap":79},[100,110149,110150,110152,110154,110156],{"class":102,"line":103},[100,110151,32301],{"class":471},[100,110153,109553],{"class":258},[100,110155,548],{"class":471},[100,110157,109558],{"class":258},[19,110159,110160,110161,110164,110165,110168],{},"导入 ",[32,110162,110163],{},"Path","，用来处理文件路径。相比直接写字符串，",[32,110166,110167],{},"Path(\"render_output.png\")"," 更清晰。",[73,110170,110172],{"className":249,"code":110171,"language":251,"meta":79,"style":79},"from PIL import Image\n",[32,110173,110174],{"__ignoreMap":79},[100,110175,110176,110178,110180,110182],{"class":102,"line":103},[100,110177,32301],{"class":471},[100,110179,48817],{"class":117},[100,110181,48820],{"class":471},[100,110183,48823],{"class":258},[19,110185,110186],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[73,110188,110189],{"className":54621,"code":109926,"language":54623,"meta":79,"style":79},[32,110190,110191],{"__ignoreMap":79},[100,110192,110193,110195,110197,110199,110201,110203,110205,110207,110209,110211,110213,110215],{"class":102,"line":103},[100,110194,2676],{"class":258},[100,110196,109757],{"class":52854},[100,110198,16501],{"class":106},[100,110200,472],{"class":258},[100,110202,109762],{"class":110},[100,110204,102630],{"class":106},[100,110206,472],{"class":258},[100,110208,109947],{"class":110},[100,110210,109950],{"class":106},[100,110212,472],{"class":258},[100,110214,109955],{"class":110},[100,110216,102668],{"class":258},[19,110218,110219,110220,110222,110223,110225,110226,110229,110230,110232],{},"定义一个相机。",[32,110221,81364],{}," 是相机名字。",[32,110224,105618],{}," 是相机在世界里的位置。",[32,110227,110228],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[32,110231,105618],{}," 来调视角。",[73,110234,110236],{"className":249,"code":110235,"language":251,"meta":79,"style":79},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[32,110237,110238],{"__ignoreMap":79},[100,110239,110240,110242,110244,110246,110248,110250,110252,110254,110256,110258,110260],{"class":102,"line":103},[100,110241,108812],{"class":258},[100,110243,472],{"class":471},[100,110245,109116],{"class":258},[100,110247,26557],{"class":6812},[100,110249,472],{"class":471},[100,110251,43896],{"class":117},[100,110253,14017],{"class":258},[100,110255,26553],{"class":6812},[100,110257,472],{"class":471},[100,110259,109131],{"class":117},[100,110261,809],{"class":258},[19,110263,110264,110265,218,110267,110269],{},"创建离屏渲染器。",[32,110266,26557],{},[32,110268,26553],{}," 决定输出图片大小。",[73,110271,110272],{"className":249,"code":103169,"language":251,"meta":79,"style":79},[32,110273,110274,110290],{"__ignoreMap":79},[100,110275,110276,110278,110280,110282,110284,110286,110288],{"class":102,"line":103},[100,110277,1051],{"class":471},[100,110279,851],{"class":258},[100,110281,854],{"class":471},[100,110283,857],{"class":117},[100,110285,713],{"class":258},[100,110287,2078],{"class":117},[100,110289,865],{"class":258},[100,110291,110292],{"class":102,"line":188},[100,110293,1068],{"class":258},[19,110295,110296],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[73,110298,110300],{"className":249,"code":110299,"language":251,"meta":79,"style":79},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[32,110301,110302],{"__ignoreMap":79},[100,110303,110304,110307,110309,110311,110313],{"class":102,"line":103},[100,110305,110306],{"class":258},"renderer.update_scene(data, ",[100,110308,109757],{"class":6812},[100,110310,472],{"class":471},[100,110312,109762],{"class":110},[100,110314,809],{"class":258},[19,110316,110317,110318,110320,110321,110324],{},"告诉 renderer：用当前 ",[32,110319,499],{}," 的状态更新画面，并使用名为 ",[32,110322,110323],{},"fixed_camera"," 的相机视角。",[73,110326,110327],{"className":249,"code":109222,"language":251,"meta":79,"style":79},[32,110328,110329],{"__ignoreMap":79},[100,110330,110331,110333,110335],{"class":102,"line":103},[100,110332,108822],{"class":258},[100,110334,472],{"class":471},[100,110336,108827],{"class":258},[19,110338,110339,110340,110343],{},"真正渲染出图像。",[32,110341,110342],{},"image"," 是一个 NumPy 数组，不是文件。",[73,110345,110347],{"className":249,"code":110346,"language":251,"meta":79,"style":79},"Image.fromarray(image).save(output_path)\n",[32,110348,110349],{"__ignoreMap":79},[100,110350,110351],{"class":102,"line":103},[100,110352,110346],{"class":258},[19,110354,110355,110356,233],{},"把数组转换成图片，并保存到 ",[32,110357,110358],{},"render_output.png",[73,110360,110362],{"className":249,"code":110361,"language":251,"meta":79,"style":79},"renderer.close()\n",[32,110363,110364],{"__ignoreMap":79},[100,110365,110366],{"class":102,"line":103},[100,110367,110361],{"class":258},[19,110369,110370],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,110372,1355],{"id":1354},[19,110374,110375,110376,110378,110379,233],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[32,110377,110358],{},"，并输出图像数组形状，例如 ",[32,110380,110381],{},"(480, 640, 3)",[19,110383,110384],{},"如果图片里看不到方块，先检查：",[26,110386,110387,110390,110393],{},[29,110388,110389],{},"方块是否掉到相机视野外。",[29,110391,110392],{},"camera 位置是否合理。",[29,110394,110395,110396,110399],{},"是否在 ",[32,110397,110398],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,110401,1418],{"id":1417},[19,110403,110404],{},"运行 viewer:",[73,110406,110408],{"className":94,"code":110407,"language":96,"meta":79,"style":79},"python ch5_viewer.py\n",[32,110409,110410],{"__ignoreMap":79},[100,110411,110412,110414],{"class":102,"line":103},[100,110413,251],{"class":106},[100,110415,109538],{"class":110},[19,110417,110418],{},"运行 renderer:",[73,110420,110422],{"className":94,"code":110421,"language":96,"meta":79,"style":79},"python ch5_renderer.py\n",[32,110423,110424],{"__ignoreMap":79},[100,110425,110426,110428],{"class":102,"line":103},[100,110427,251],{"class":106},[100,110429,109867],{"class":110},[19,110431,110432],{},"如果在服务器上运行:",[73,110434,110436],{"className":94,"code":110435,"language":96,"meta":79,"style":79},"MUJOCO_GL=egl python ch5_renderer.py\n",[32,110437,110438],{"__ignoreMap":79},[100,110439,110440,110442,110444,110446,110449],{"class":102,"line":103},[100,110441,109056],{"class":258},[100,110443,472],{"class":471},[100,110445,109046],{"class":110},[100,110447,110448],{"class":106}," python",[100,110450,109867],{"class":110},[19,110452,109024],{},[73,110454,110456],{"className":94,"code":110455,"language":96,"meta":79,"style":79},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[32,110457,110458],{"__ignoreMap":79},[100,110459,110460,110462,110464,110466,110468],{"class":102,"line":103},[100,110461,109056],{"class":258},[100,110463,472],{"class":471},[100,110465,109050],{"class":110},[100,110467,110448],{"class":106},[100,110469,109867],{"class":110},[19,110471,110472],{},"再做几个练习：",[26,110474,110475,110482,110485,110491],{},[29,110476,110477,110478,110481],{},"把 renderer 分辨率改成 ",[32,110479,110480],{},"height=240, width=320","，观察输出 shape。",[29,110483,110484],{},"把方块颜色改成蓝色，重新保存图片。",[29,110486,110487,110488,110490],{},"把相机 ",[32,110489,105618],{}," 改远一点，观察画面中物体是否变小。",[29,110492,110493,110494,1448,110497,110500],{},"把 viewer 示例中的 ",[32,110495,110496],{},"data.time \u003C 5.0",[32,110498,110499],{},"data.time \u003C 20.0","，观察更长时间。",[14,110502,1463],{"id":1462},[305,110504,110506],{"id":110505},"viewer-窗口打不开","viewer 窗口打不开",[19,110508,110509],{},"安装:",[73,110511,110513],{"className":94,"code":110512,"language":96,"meta":79,"style":79},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[32,110514,110515],{"__ignoreMap":79},[100,110516,110517,110519,110521,110523,110525,110527,110529,110531,110533,110535,110537],{"class":102,"line":103},[100,110518,107],{"class":106},[100,110520,111],{"class":110},[100,110522,114],{"class":110},[100,110524,118],{"class":117},[100,110526,103984],{"class":110},[100,110528,102373],{"class":110},[100,110530,103989],{"class":110},[100,110532,102386],{"class":110},[100,110534,102392],{"class":110},[100,110536,102383],{"class":110},[100,110538,110539],{"class":110}," libXinerama\n",[305,110541,110543],{"id":110542},"glfwerror",[32,110544,110545],{},"GLFWError",[19,110547,110548],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[305,110550,110552],{"id":110551},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,110554,110555,110556,288,110558,110560],{},"尝试 ",[32,110557,102567],{},[32,110559,102570],{},"。可能存在版本差异。",[305,110562,110563],{"id":110563},"保存图片是黑的",[19,110565,104053],{},[26,110567,110568,110571,110574,110584],{},[29,110569,110570],{},"XML 里是否有 light。",[29,110572,110573],{},"相机是否对着模型。",[29,110575,110576,110577,110580,110581,233],{},"是否先 ",[32,110578,110579],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[32,110582,110583],{},"renderer.render()",[29,110585,110586],{},"物体是否已经掉出视野。",[305,110588,110589],{"id":110589},"远程服务器没有显示器",[19,110591,110592],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[73,110594,110595],{"className":94,"code":110435,"language":96,"meta":79,"style":79},[32,110596,110597],{"__ignoreMap":79},[100,110598,110599,110601,110603,110605,110607],{"class":102,"line":103},[100,110600,109056],{"class":258},[100,110602,472],{"class":471},[100,110604,109046],{"class":110},[100,110606,110448],{"class":106},[100,110608,109867],{"class":110},[19,110610,110611],{},"如果 EGL 不可用，再尝试：",[73,110613,110614],{"className":94,"code":110455,"language":96,"meta":79,"style":79},[32,110615,110616],{"__ignoreMap":79},[100,110617,110618,110620,110622,110624,110626],{"class":102,"line":103},[100,110619,109056],{"class":258},[100,110621,472],{"class":471},[100,110623,109050],{"class":110},[100,110625,110448],{"class":106},[100,110627,109867],{"class":110},[14,110629,1640],{"id":1639},[19,110631,110632],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[26,110634,110635,110638,110641],{},[29,110636,110637],{},"先用 viewer 看模型和控制是否正常。",[29,110639,110640],{},"再用 renderer 保存图片或构造视觉观测。",[29,110642,110643],{},"最后把状态、动作、图像、奖励组织成训练数据。",[1677,110645,110646],{},"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":79,"searchDepth":188,"depth":188,"links":110648},[110649,110650,110651,110656,110661,110662,110663,110670],{"id":16,"depth":188,"text":17},{"id":87,"depth":188,"text":88},{"id":242,"depth":188,"text":243,"children":110652},[110653,110654,110655],{"id":109153,"depth":199,"text":109154},{"id":109183,"depth":199,"text":109184},{"id":109218,"depth":199,"text":109219},{"id":537,"depth":188,"text":538,"children":110657},[110658,110659,110660],{"id":1008,"depth":199,"text":1008},{"id":109963,"depth":199,"text":109964},{"id":110141,"depth":199,"text":110142},{"id":1354,"depth":188,"text":1355},{"id":1417,"depth":188,"text":1418},{"id":1462,"depth":188,"text":1463,"children":110664},[110665,110666,110667,110668,110669],{"id":110505,"depth":199,"text":110506},{"id":110542,"depth":199,"text":110545},{"id":110551,"depth":199,"text":110552},{"id":110563,"depth":199,"text":110563},{"id":110589,"depth":199,"text":110589},{"id":1639,"depth":188,"text":1640},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":108761,"description":79},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":110677,"title":110678,"body":110679,"description":79,"extension":1708,"meta":112590,"navigation":569,"path":112591,"seo":112592,"stem":112593,"__hash__":112594},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":110680,"toc":112566},[110681,110684,110686,110689,110691,110710,110713,110719,110722,110724,110726,110750,110752,110766,110768,110809,110811,110822,110824,110827,110833,110836,110870,110873,110905,110908,110940,110944,110947,110987,110990,110996,110999,111005,111009,111012,111018,111021,111025,111028,111068,111070,111083,111086,111088,111670,111672,111684,111687,111698,111700,111703,111722,111734,111737,111758,111761,111764,111807,111810,111813,111833,111840,111842,111860,111875,111878,111884,111887,111893,111910,111917,111948,111959,111993,112004,112021,112030,112038,112043,112057,112060,112081,112087,112101,112106,112136,112146,112171,112179,112202,112205,112221,112224,112232,112238,112260,112273,112294,112303,112342,112353,112355,112358,112364,112367,112370,112376,112379,112399,112402,112404,112443,112445,112448,112456,112459,112462,112489,112492,112502,112508,112511,112517,112519,112525,112529,112532,112534,112537,112561,112564],[10,110682,110678],{"id":110683},"_6控制任务cartpole",[14,110685,17],{"id":16},[19,110687,110688],{},"本章搭建一个最小 Cartpole 控制任务。",[19,110690,24],{},[26,110692,110693,110696,110698,110701,110704,110707],{},[29,110694,110695],{},"slide joint",[29,110697,107426],{},[29,110699,110700],{},"cart force actuator",[29,110702,110703],{},"状态观测",[29,110705,110706],{},"简单控制循环",[29,110708,110709],{},"reward 设计雏形",[19,110711,110712],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[73,110714,110717],{"className":110715,"code":110716,"language":78,"meta":79},[76],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[32,110718,110716],{"__ignoreMap":79},[19,110720,110721],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,110723,88],{"id":87},[19,110725,91],{},[73,110727,110728],{"className":94,"code":95,"language":96,"meta":79,"style":79},[32,110729,110730],{"__ignoreMap":79},[100,110731,110732,110734,110736,110738,110740,110742,110744,110746,110748],{"class":102,"line":103},[100,110733,107],{"class":106},[100,110735,111],{"class":110},[100,110737,114],{"class":110},[100,110739,118],{"class":117},[100,110741,121],{"class":110},[100,110743,124],{"class":110},[100,110745,127],{"class":110},[100,110747,130],{"class":110},[100,110749,133],{"class":110},[19,110751,136],{},[73,110753,110754],{"className":94,"code":139,"language":96,"meta":79,"style":79},[32,110755,110756],{"__ignoreMap":79},[100,110757,110758,110760,110762,110764],{"class":102,"line":103},[100,110759,146],{"class":106},[100,110761,114],{"class":110},[100,110763,151],{"class":110},[100,110765,154],{"class":110},[19,110767,157],{},[73,110769,110771],{"className":94,"code":110770,"language":96,"meta":79,"style":79},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[32,110772,110773,110790,110799],{"__ignoreMap":79},[100,110774,110775,110777,110779,110781,110784,110786,110788],{"class":102,"line":103},[100,110776,167],{"class":106},[100,110778,170],{"class":110},[100,110780,173],{"class":117},[100,110782,110783],{"class":110}," mujoco-cartpole",[100,110785,179],{"class":110},[100,110787,182],{"class":117},[100,110789,185],{"class":117},[100,110791,110792,110794,110796],{"class":102,"line":188},[100,110793,167],{"class":106},[100,110795,193],{"class":110},[100,110797,110798],{"class":110}," mujoco-cartpole\n",[100,110800,110801,110803,110805,110807],{"class":102,"line":199},[100,110802,146],{"class":106},[100,110804,114],{"class":110},[100,110806,151],{"class":110},[100,110808,154],{"class":110},[19,110810,210],{},[26,110812,110813,110816,110819],{},[29,110814,110815],{},"本章不依赖 Gymnasium。",[29,110817,110818],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[29,110820,110821],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,110823,243],{"id":242},[19,110825,110826],{},"Cartpole 的模型结构:",[73,110828,110831],{"className":110829,"code":110830,"language":78,"meta":79},[76],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[32,110832,110830],{"__ignoreMap":79},[19,110834,110835],{},"小车通过 slide joint 左右移动:",[73,110837,110839],{"className":54621,"code":110838,"language":54623,"meta":79,"style":79},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[32,110840,110841],{"__ignoreMap":79},[100,110842,110843,110845,110847,110849,110851,110854,110856,110858,110861,110863,110865,110868],{"class":102,"line":103},[100,110844,2676],{"class":258},[100,110846,104430],{"class":52854},[100,110848,16501],{"class":106},[100,110850,472],{"class":258},[100,110852,110853],{"class":110},"\"cart_x\"",[100,110855,55378],{"class":106},[100,110857,472],{"class":258},[100,110859,110860],{"class":110},"\"slide\"",[100,110862,107270],{"class":106},[100,110864,472],{"class":258},[100,110866,110867],{"class":110},"\"1 0 0\"",[100,110869,102668],{"class":258},[19,110871,110872],{},"杆子通过 hinge joint 旋转:",[73,110874,110876],{"className":54621,"code":110875,"language":54623,"meta":79,"style":79},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[32,110877,110878],{"__ignoreMap":79},[100,110879,110880,110882,110884,110886,110888,110891,110893,110895,110897,110899,110901,110903],{"class":102,"line":103},[100,110881,2676],{"class":258},[100,110883,104430],{"class":52854},[100,110885,16501],{"class":106},[100,110887,472],{"class":258},[100,110889,110890],{"class":110},"\"pole_hinge\"",[100,110892,55378],{"class":106},[100,110894,472],{"class":258},[100,110896,107261],{"class":110},[100,110898,107270],{"class":106},[100,110900,472],{"class":258},[100,110902,107275],{"class":110},[100,110904,102668],{"class":258},[19,110906,110907],{},"控制力作用在小车 slide joint 上:",[73,110909,110911],{"className":54621,"code":110910,"language":54623,"meta":79,"style":79},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[32,110912,110913],{"__ignoreMap":79},[100,110914,110915,110917,110919,110921,110923,110926,110928,110930,110932,110934,110936,110938],{"class":102,"line":103},[100,110916,2676],{"class":258},[100,110918,107316],{"class":52854},[100,110920,16501],{"class":106},[100,110922,472],{"class":258},[100,110924,110925],{"class":110},"\"cart_motor\"",[100,110927,107326],{"class":106},[100,110929,472],{"class":258},[100,110931,110853],{"class":110},[100,110933,107333],{"class":106},[100,110935,472],{"class":258},[100,110937,55870],{"class":110},[100,110939,102668],{"class":258},[305,110941,110943],{"id":110942},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,110945,110946],{},"这个简化模型有两个关节：",[319,110948,110949,110960],{},[322,110950,110951],{},[325,110952,110953,110955,110957],{},[328,110954,104235],{"align":330},[328,110956,25318],{"align":330},[328,110958,110959],{"align":330},"对应状态",[339,110961,110962,110975],{},[325,110963,110964,110969,110972],{},[344,110965,110966],{"align":330},[32,110967,110968],{},"cart_x",[344,110970,110971],{"align":330},"slide",[344,110973,110974],{"align":330},"小车 x 位置",[325,110976,110977,110982,110984],{},[344,110978,110979],{"align":330},[32,110980,110981],{},"pole_hinge",[344,110983,107082],{"align":330},[344,110985,110986],{"align":330},"杆子角度",[19,110988,110989],{},"所以：",[73,110991,110994],{"className":110992,"code":110993,"language":78,"meta":79},[76],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[32,110995,110993],{"__ignoreMap":79},[19,110997,110998],{},"把它们拼起来就是观测：",[73,111000,111003],{"className":111001,"code":111002,"language":78,"meta":79},[76],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[32,111004,111002],{"__ignoreMap":79},[305,111006,111008],{"id":111007},"action-是什么","action 是什么",[19,111010,111011],{},"本章只有一个 actuator：",[73,111013,111016],{"className":111014,"code":111015,"language":78,"meta":79},[76],"data.ctrl[0] = action\n",[32,111017,111015],{"__ignoreMap":79},[19,111019,111020],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[305,111022,111024],{"id":111023},"reward-是什么","reward 是什么",[19,111026,111027],{},"奖励函数：",[73,111029,111031],{"className":249,"code":111030,"language":251,"meta":79,"style":79},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[32,111032,111033],{"__ignoreMap":79},[100,111034,111035,111037,111040,111042,111044,111046,111049,111051,111054,111056,111058,111060,111063,111065],{"class":102,"line":103},[100,111036,18627],{"class":471},[100,111038,111039],{"class":117}," float",[100,111041,713],{"class":258},[100,111043,103887],{"class":117},[100,111045,53825],{"class":471},[100,111047,111048],{"class":117}," 0.1",[100,111050,8114],{"class":471},[100,111052,111053],{"class":258}," cart_x ",[100,111055,2222],{"class":471},[100,111057,111053],{"class":258},[100,111059,2299],{"class":471},[100,111061,111062],{"class":258}," pole_angle ",[100,111064,2222],{"class":471},[100,111066,111067],{"class":258}," pole_angle)\n",[19,111069,107468],{},[26,111071,111072,111077,111080],{},[29,111073,111074,111075,233],{},"基础奖励是 ",[32,111076,103887],{},[29,111078,111079],{},"小车离中心越远，扣分越多。",[29,111081,111082],{},"杆子角度越大，扣分越多。",[19,111084,111085],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,111087,538],{"id":537},[73,111089,111091],{"className":249,"code":111090,"language":251,"meta":79,"style":79},"import mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"cartpole\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n\n    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n\n      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n        \u003Cgeom name=\"pole_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.8\" size=\"0.03\" mass=\"0.2\" rgba=\"1 0.2 0.1 1\"\u002F>\n      \u003C\u002Fbody>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\n  \u003Cactuator>\n    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n  \u003C\u002Factuator>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n\n\ndef compute_reward(obs: np.ndarray) -> float:\n    cart_x = obs[0]\n    pole_angle = obs[1]\n    return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    data.qpos[1] = 0.1\n    mujoco.mj_forward(model, data)\n\n    total_reward = 0.0\n\n    for step in range(1000):\n        obs = get_observation(data)\n        pole_angle = obs[1]\n        pole_angular_velocity = obs[3]\n\n        action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n        action = np.clip(action, -1.0, 1.0)\n\n        data.ctrl[0] = action\n        mujoco.mj_step(model, data)\n\n        reward = compute_reward(get_observation(data))\n        total_reward += reward\n\n        if step % 100 == 0:\n            print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n\n    print(\"total_reward:\", round(total_reward, 3))\n    print(\"final obs:\", np.round(get_observation(data), 3))\n\n\nif __name__ == \"__main__\":\n    main()\n",[32,111092,111093,111099,111109,111113,111117,111125,111130,111134,111138,111142,111147,111151,111156,111161,111166,111170,111175,111180,111185,111189,111193,111197,111201,111205,111210,111214,111218,111222,111226,111230,111240,111247,111251,111255,111269,111283,111296,111326,111330,111334,111346,111358,111366,111370,111383,111387,111391,111400,111404,111420,111430,111443,111456,111460,111483,111501,111505,111517,111521,111525,111535,111545,111549,111565,111606,111610,111630,111646,111650,111654,111666],{"__ignoreMap":79},[100,111094,111095,111097],{"class":102,"line":103},[100,111096,548],{"class":471},[100,111098,551],{"class":258},[100,111100,111101,111103,111105,111107],{"class":102,"line":188},[100,111102,548],{"class":471},[100,111104,558],{"class":258},[100,111106,561],{"class":471},[100,111108,564],{"class":258},[100,111110,111111],{"class":102,"line":199},[100,111112,570],{"emptyLinePlaceholder":569},[100,111114,111115],{"class":102,"line":532},[100,111116,570],{"emptyLinePlaceholder":569},[100,111118,111119,111121,111123],{"class":102,"line":577},[100,111120,580],{"class":117},[100,111122,583],{"class":471},[100,111124,586],{"class":110},[100,111126,111127],{"class":102,"line":589},[100,111128,111129],{"class":110},"\u003Cmujoco model=\"cartpole\">\n",[100,111131,111132],{"class":102,"line":595},[100,111133,598],{"class":110},[100,111135,111136],{"class":102,"line":601},[100,111137,570],{"emptyLinePlaceholder":569},[100,111139,111140],{"class":102,"line":606},[100,111141,609],{"class":110},[100,111143,111144],{"class":102,"line":612},[100,111145,111146],{"class":110},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[100,111148,111149],{"class":102,"line":618},[100,111150,570],{"emptyLinePlaceholder":569},[100,111152,111153],{"class":102,"line":623},[100,111154,111155],{"class":110},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[100,111157,111158],{"class":102,"line":629},[100,111159,111160],{"class":110},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[100,111162,111163],{"class":102,"line":635},[100,111164,111165],{"class":110},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[100,111167,111168],{"class":102,"line":641},[100,111169,570],{"emptyLinePlaceholder":569},[100,111171,111172],{"class":102,"line":647},[100,111173,111174],{"class":110},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[100,111176,111177],{"class":102,"line":653},[100,111178,111179],{"class":110},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[100,111181,111182],{"class":102,"line":659},[100,111183,111184],{"class":110},"        \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",[100,111186,111187],{"class":102,"line":665},[100,111188,107680],{"class":110},[100,111190,111191],{"class":102,"line":670},[100,111192,644],{"class":110},[100,111194,111195],{"class":102,"line":675},[100,111196,650],{"class":110},[100,111198,111199],{"class":102,"line":699},[100,111200,570],{"emptyLinePlaceholder":569},[100,111202,111203],{"class":102,"line":708},[100,111204,107697],{"class":110},[100,111206,111207],{"class":102,"line":722},[100,111208,111209],{"class":110},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[100,111211,111212],{"class":102,"line":735},[100,111213,107707],{"class":110},[100,111215,111216],{"class":102,"line":754},[100,111217,656],{"class":110},[100,111219,111220],{"class":102,"line":771},[100,111221,662],{"class":110},[100,111223,111224],{"class":102,"line":776},[100,111225,570],{"emptyLinePlaceholder":569},[100,111227,111228],{"class":102,"line":781},[100,111229,570],{"emptyLinePlaceholder":569},[100,111231,111232,111234,111237],{"class":102,"line":796},[100,111233,678],{"class":471},[100,111235,111236],{"class":106}," get_observation",[100,111238,111239],{"class":258},"(data: mujoco.MjData) -> np.ndarray:\n",[100,111241,111242,111244],{"class":102,"line":812},[100,111243,5689],{"class":471},[100,111245,111246],{"class":258}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[100,111248,111249],{"class":102,"line":823},[100,111250,570],{"emptyLinePlaceholder":569},[100,111252,111253],{"class":102,"line":828},[100,111254,570],{"emptyLinePlaceholder":569},[100,111256,111257,111259,111262,111265,111267],{"class":102,"line":840},[100,111258,678],{"class":471},[100,111260,111261],{"class":106}," compute_reward",[100,111263,111264],{"class":258},"(obs: np.ndarray) -> ",[100,111266,1819],{"class":117},[100,111268,696],{"class":258},[100,111270,111271,111274,111276,111279,111281],{"class":102,"line":845},[100,111272,111273],{"class":258},"    cart_x ",[100,111275,472],{"class":471},[100,111277,111278],{"class":258}," obs[",[100,111280,1366],{"class":117},[100,111282,34802],{"class":258},[100,111284,111285,111288,111290,111292,111294],{"class":102,"line":868},[100,111286,111287],{"class":258},"    pole_angle ",[100,111289,472],{"class":471},[100,111291,111278],{"class":258},[100,111293,1985],{"class":117},[100,111295,34802],{"class":258},[100,111297,111298,111300,111302,111304,111306,111308,111310,111312,111314,111316,111318,111320,111322,111324],{"class":102,"line":874},[100,111299,5689],{"class":471},[100,111301,111039],{"class":117},[100,111303,713],{"class":258},[100,111305,103887],{"class":117},[100,111307,53825],{"class":471},[100,111309,111048],{"class":117},[100,111311,8114],{"class":471},[100,111313,111053],{"class":258},[100,111315,2222],{"class":471},[100,111317,111053],{"class":258},[100,111319,2299],{"class":471},[100,111321,111062],{"class":258},[100,111323,2222],{"class":471},[100,111325,111067],{"class":258},[100,111327,111328],{"class":102,"line":879},[100,111329,570],{"emptyLinePlaceholder":569},[100,111331,111332],{"class":102,"line":889},[100,111333,570],{"emptyLinePlaceholder":569},[100,111335,111336,111338,111340,111342,111344],{"class":102,"line":894},[100,111337,678],{"class":471},[100,111339,786],{"class":106},[100,111341,789],{"class":258},[100,111343,693],{"class":117},[100,111345,696],{"class":258},[100,111347,111348,111350,111352,111354,111356],{"class":102,"line":900},[100,111349,799],{"class":258},[100,111351,472],{"class":471},[100,111353,804],{"class":258},[100,111355,580],{"class":117},[100,111357,809],{"class":258},[100,111359,111360,111362,111364],{"class":102,"line":910},[100,111361,815],{"class":258},[100,111363,472],{"class":471},[100,111365,820],{"class":258},[100,111367,111368],{"class":102,"line":915},[100,111369,570],{"emptyLinePlaceholder":569},[100,111371,111372,111374,111376,111378,111380],{"class":102,"line":929},[100,111373,918],{"class":258},[100,111375,1985],{"class":117},[100,111377,468],{"class":258},[100,111379,472],{"class":471},[100,111381,111382],{"class":117}," 0.1\n",[100,111384,111385],{"class":102,"line":935},[100,111386,932],{"class":258},[100,111388,111389],{"class":102,"line":945},[100,111390,570],{"emptyLinePlaceholder":569},[100,111392,111393,111396,111398],{"class":102,"line":950},[100,111394,111395],{"class":258},"    total_reward ",[100,111397,472],{"class":471},[100,111399,529],{"class":117},[100,111401,111402],{"class":102,"line":955},[100,111403,570],{"emptyLinePlaceholder":569},[100,111405,111406,111408,111410,111412,111414,111416,111418],{"class":102,"line":972},[100,111407,848],{"class":471},[100,111409,33174],{"class":258},[100,111411,854],{"class":471},[100,111413,857],{"class":117},[100,111415,713],{"class":258},[100,111417,8006],{"class":117},[100,111419,865],{"class":258},[100,111421,111422,111425,111427],{"class":102,"line":11370},[100,111423,111424],{"class":258},"        obs ",[100,111426,472],{"class":471},[100,111428,111429],{"class":258}," get_observation(data)\n",[100,111431,111432,111435,111437,111439,111441],{"class":102,"line":11375},[100,111433,111434],{"class":258},"        pole_angle ",[100,111436,472],{"class":471},[100,111438,111278],{"class":258},[100,111440,1985],{"class":117},[100,111442,34802],{"class":258},[100,111444,111445,111448,111450,111452,111454],{"class":102,"line":11380},[100,111446,111447],{"class":258},"        pole_angular_velocity ",[100,111449,472],{"class":471},[100,111451,111278],{"class":258},[100,111453,1849],{"class":117},[100,111455,34802],{"class":258},[100,111457,111458],{"class":102,"line":11385},[100,111459,570],{"emptyLinePlaceholder":569},[100,111461,111462,111465,111467,111470,111472,111474,111476,111478,111480],{"class":102,"line":11394},[100,111463,111464],{"class":258},"        action ",[100,111466,472],{"class":471},[100,111468,111469],{"class":117}," 2.0",[100,111471,8114],{"class":471},[100,111473,111062],{"class":258},[100,111475,2248],{"class":471},[100,111477,63421],{"class":117},[100,111479,8114],{"class":471},[100,111481,111482],{"class":258}," pole_angular_velocity\n",[100,111484,111485,111487,111489,111491,111493,111495,111497,111499],{"class":102,"line":11399},[100,111486,111464],{"class":258},[100,111488,472],{"class":471},[100,111490,108689],{"class":258},[100,111492,2299],{"class":471},[100,111494,103887],{"class":117},[100,111496,14017],{"class":258},[100,111498,103887],{"class":117},[100,111500,809],{"class":258},[100,111502,111503],{"class":102,"line":11405},[100,111504,570],{"emptyLinePlaceholder":569},[100,111506,111507,111509,111511,111513,111515],{"class":102,"line":11426},[100,111508,107859],{"class":258},[100,111510,1366],{"class":117},[100,111512,468],{"class":258},[100,111514,472],{"class":471},[100,111516,108712],{"class":258},[100,111518,111519],{"class":102,"line":11432},[100,111520,871],{"class":258},[100,111522,111523],{"class":102,"line":11446},[100,111524,570],{"emptyLinePlaceholder":569},[100,111526,111527,111530,111532],{"class":102,"line":11452},[100,111528,111529],{"class":258},"        reward ",[100,111531,472],{"class":471},[100,111533,111534],{"class":258}," compute_reward(get_observation(data))\n",[100,111536,111537,111540,111542],{"class":102,"line":11479},[100,111538,111539],{"class":258},"        total_reward ",[100,111541,11062],{"class":471},[100,111543,111544],{"class":258}," reward\n",[100,111546,111547],{"class":102,"line":11488},[100,111548,570],{"emptyLinePlaceholder":569},[100,111550,111551,111553,111555,111557,111559,111561,111563],{"class":102,"line":11494},[100,111552,4106],{"class":471},[100,111554,33174],{"class":258},[100,111556,2095],{"class":471},[100,111558,7350],{"class":117},[100,111560,964],{"class":471},[100,111562,5692],{"class":117},[100,111564,696],{"class":258},[100,111566,111567,111569,111571,111574,111577,111580,111583,111585,111588,111591,111593,111595,111597,111599,111602,111604],{"class":102,"line":11502},[100,111568,36205],{"class":117},[100,111570,713],{"class":258},[100,111572,111573],{"class":110},"\"step:\"",[100,111575,111576],{"class":258},", step, ",[100,111578,111579],{"class":110},"\"obs:\"",[100,111581,111582],{"class":258},", np.round(obs, ",[100,111584,1849],{"class":117},[100,111586,111587],{"class":258},"), ",[100,111589,111590],{"class":110},"\"action:\"",[100,111592,14017],{"class":258},[100,111594,33575],{"class":117},[100,111596,713],{"class":258},[100,111598,1819],{"class":117},[100,111600,111601],{"class":258},"(action), ",[100,111603,1849],{"class":117},[100,111605,751],{"class":258},[100,111607,111608],{"class":102,"line":11507},[100,111609,570],{"emptyLinePlaceholder":569},[100,111611,111612,111614,111616,111619,111621,111623,111626,111628],{"class":102,"line":18185},[100,111613,702],{"class":117},[100,111615,713],{"class":258},[100,111617,111618],{"class":110},"\"total_reward:\"",[100,111620,14017],{"class":258},[100,111622,33575],{"class":117},[100,111624,111625],{"class":258},"(total_reward, ",[100,111627,1849],{"class":117},[100,111629,751],{"class":258},[100,111631,111632,111634,111636,111639,111642,111644],{"class":102,"line":18191},[100,111633,702],{"class":117},[100,111635,713],{"class":258},[100,111637,111638],{"class":110},"\"final obs:\"",[100,111640,111641],{"class":258},", np.round(get_observation(data), ",[100,111643,1849],{"class":117},[100,111645,751],{"class":258},[100,111647,111648],{"class":102,"line":18214},[100,111649,570],{"emptyLinePlaceholder":569},[100,111651,111652],{"class":102,"line":18220},[100,111653,570],{"emptyLinePlaceholder":569},[100,111655,111656,111658,111660,111662,111664],{"class":102,"line":18243},[100,111657,958],{"class":471},[100,111659,961],{"class":117},[100,111661,964],{"class":471},[100,111663,967],{"class":110},[100,111665,696],{"class":258},[100,111667,111668],{"class":102,"line":18257},[100,111669,975],{"class":258},[19,111671,978],{},[73,111673,111675],{"className":94,"code":111674,"language":96,"meta":79,"style":79},"touch ch6_cartpole.py\n",[32,111676,111677],{"__ignoreMap":79},[100,111678,111679,111681],{"class":102,"line":103},[100,111680,988],{"class":106},[100,111682,111683],{"class":110}," ch6_cartpole.py\n",[19,111685,111686],{},"运行：",[73,111688,111690],{"className":94,"code":111689,"language":96,"meta":79,"style":79},"python ch6_cartpole.py\n",[32,111691,111692],{"__ignoreMap":79},[100,111693,111694,111696],{"class":102,"line":103},[100,111695,251],{"class":106},[100,111697,111683],{"class":110},[305,111699,1008],{"id":1008},[19,111701,111702],{},"构造观测：",[73,111704,111706],{"className":249,"code":111705,"language":251,"meta":79,"style":79},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[32,111707,111708,111716],{"__ignoreMap":79},[100,111709,111710,111712,111714],{"class":102,"line":103},[100,111711,678],{"class":471},[100,111713,111236],{"class":106},[100,111715,111239],{"class":258},[100,111717,111718,111720],{"class":102,"line":188},[100,111719,5689],{"class":471},[100,111721,111246],{"class":258},[19,111723,111724,111727,111728,111730,111731,111733],{},[32,111725,111726],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[32,111729,55],{}," 2 维，",[32,111732,59],{}," 2 维，所以 obs 是 4 维。",[19,111735,111736],{},"设置初始角度：",[73,111738,111740],{"className":249,"code":111739,"language":251,"meta":79,"style":79},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[32,111741,111742,111754],{"__ignoreMap":79},[100,111743,111744,111746,111748,111750,111752],{"class":102,"line":103},[100,111745,462],{"class":258},[100,111747,1985],{"class":117},[100,111749,468],{"class":258},[100,111751,472],{"class":471},[100,111753,111382],{"class":117},[100,111755,111756],{"class":102,"line":188},[100,111757,294],{"class":258},[19,111759,111760],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,111762,111763],{},"简单反馈控制：",[73,111765,111767],{"className":249,"code":111766,"language":251,"meta":79,"style":79},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[32,111768,111769,111789],{"__ignoreMap":79},[100,111770,111771,111773,111775,111777,111779,111781,111783,111785,111787],{"class":102,"line":103},[100,111772,108684],{"class":258},[100,111774,472],{"class":471},[100,111776,111469],{"class":117},[100,111778,8114],{"class":471},[100,111780,111062],{"class":258},[100,111782,2248],{"class":471},[100,111784,63421],{"class":117},[100,111786,8114],{"class":471},[100,111788,111482],{"class":258},[100,111790,111791,111793,111795,111797,111799,111801,111803,111805],{"class":102,"line":188},[100,111792,108684],{"class":258},[100,111794,472],{"class":471},[100,111796,108689],{"class":258},[100,111798,2299],{"class":471},[100,111800,103887],{"class":117},[100,111802,14017],{"class":258},[100,111804,103887],{"class":117},[100,111806,809],{"class":258},[19,111808,111809],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,111811,111812],{},"限制动作：",[73,111814,111816],{"className":249,"code":111815,"language":251,"meta":79,"style":79},"np.clip(action, -1.0, 1.0)\n",[32,111817,111818],{"__ignoreMap":79},[100,111819,111820,111823,111825,111827,111829,111831],{"class":102,"line":103},[100,111821,111822],{"class":258},"np.clip(action, ",[100,111824,2299],{"class":471},[100,111826,103887],{"class":117},[100,111828,14017],{"class":258},[100,111830,103887],{"class":117},[100,111832,809],{"class":258},[19,111834,111835,111836,111839],{},"因为 XML 里 ",[32,111837,111838],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[305,111841,1131],{"id":1131},[73,111843,111844],{"className":249,"code":111705,"language":251,"meta":79,"style":79},[32,111845,111846,111854],{"__ignoreMap":79},[100,111847,111848,111850,111852],{"class":102,"line":103},[100,111849,678],{"class":471},[100,111851,111236],{"class":106},[100,111853,111239],{"class":258},[100,111855,111856,111858],{"class":102,"line":188},[100,111857,5689],{"class":471},[100,111859,111246],{"class":258},[19,111861,111862,111863,111866,111867,111870,111871,111874],{},"这段定义了一个函数，用来获取当前观测。",[32,111864,111865],{},"data.qpos.copy()"," 是位置数组副本，",[32,111868,111869],{},"data.qvel.copy()"," 是速度数组副本。",[32,111872,111873],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,111876,111877],{},"在本章模型里：",[73,111879,111882],{"className":111880,"code":111881,"language":78,"meta":79},[76],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[32,111883,111881],{"__ignoreMap":79},[19,111885,111886],{},"所以返回的 obs 是：",[73,111888,111891],{"className":111889,"code":111890,"language":78,"meta":79},[76],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[32,111892,111890],{"__ignoreMap":79},[73,111894,111896],{"className":249,"code":111895,"language":251,"meta":79,"style":79},"def compute_reward(obs: np.ndarray) -> float:\n",[32,111897,111898],{"__ignoreMap":79},[100,111899,111900,111902,111904,111906,111908],{"class":102,"line":103},[100,111901,678],{"class":471},[100,111903,111261],{"class":106},[100,111905,111264],{"class":258},[100,111907,1819],{"class":117},[100,111909,696],{"class":258},[19,111911,111912,111913,111916],{},"这行定义奖励函数。输入是观测 ",[32,111914,111915],{},"obs","，输出是一个浮点数奖励。",[73,111918,111920],{"className":249,"code":111919,"language":251,"meta":79,"style":79},"cart_x = obs[0]\npole_angle = obs[1]\n",[32,111921,111922,111935],{"__ignoreMap":79},[100,111923,111924,111927,111929,111931,111933],{"class":102,"line":103},[100,111925,111926],{"class":258},"cart_x ",[100,111928,472],{"class":471},[100,111930,111278],{"class":258},[100,111932,1366],{"class":117},[100,111934,34802],{"class":258},[100,111936,111937,111940,111942,111944,111946],{"class":102,"line":188},[100,111938,111939],{"class":258},"pole_angle ",[100,111941,472],{"class":471},[100,111943,111278],{"class":258},[100,111945,1985],{"class":117},[100,111947,34802],{"class":258},[19,111949,111950,111951,111954,111955,111958],{},"数组索引从 0 开始。",[32,111952,111953],{},"obs[0]"," 是第一个元素，也就是小车位置。",[32,111956,111957],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[73,111960,111961],{"className":249,"code":111030,"language":251,"meta":79,"style":79},[32,111962,111963],{"__ignoreMap":79},[100,111964,111965,111967,111969,111971,111973,111975,111977,111979,111981,111983,111985,111987,111989,111991],{"class":102,"line":103},[100,111966,18627],{"class":471},[100,111968,111039],{"class":117},[100,111970,713],{"class":258},[100,111972,103887],{"class":117},[100,111974,53825],{"class":471},[100,111976,111048],{"class":117},[100,111978,8114],{"class":471},[100,111980,111053],{"class":258},[100,111982,2222],{"class":471},[100,111984,111053],{"class":258},[100,111986,2299],{"class":471},[100,111988,111062],{"class":258},[100,111990,2222],{"class":471},[100,111992,111067],{"class":258},[19,111994,111995,111996,111999,112000,112003],{},"这行计算奖励。",[32,111997,111998],{},"cart_x * cart_x"," 是小车位置的平方，",[32,112001,112002],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[73,112005,112007],{"className":249,"code":112006,"language":251,"meta":79,"style":79},"data.qpos[1] = 0.1\n",[32,112008,112009],{"__ignoreMap":79},[100,112010,112011,112013,112015,112017,112019],{"class":102,"line":103},[100,112012,462],{"class":258},[100,112014,1985],{"class":117},[100,112016,468],{"class":258},[100,112018,472],{"class":471},[100,112020,111382],{"class":117},[19,112022,112023,112024,112026,112027,112029],{},"手动设置杆子的初始角度。因为 ",[32,112025,1328],{}," 是小车位置，",[32,112028,1331],{}," 是杆子角度，所以这里改的是杆子。",[73,112031,112032],{"className":249,"code":294,"language":251,"meta":79,"style":79},[32,112033,112034],{"__ignoreMap":79},[100,112035,112036],{"class":102,"line":103},[100,112037,294],{"class":258},[19,112039,1377,112040,112042],{},[32,112041,55],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[73,112044,112046],{"className":249,"code":112045,"language":251,"meta":79,"style":79},"total_reward = 0.0\n",[32,112047,112048],{"__ignoreMap":79},[100,112049,112050,112053,112055],{"class":102,"line":103},[100,112051,112052],{"class":258},"total_reward ",[100,112054,472],{"class":471},[100,112056,529],{"class":117},[19,112058,112059],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[73,112061,112063],{"className":249,"code":112062,"language":251,"meta":79,"style":79},"for step in range(1000):\n",[32,112064,112065],{"__ignoreMap":79},[100,112066,112067,112069,112071,112073,112075,112077,112079],{"class":102,"line":103},[100,112068,1051],{"class":471},[100,112070,33174],{"class":258},[100,112072,854],{"class":471},[100,112074,857],{"class":117},[100,112076,713],{"class":258},[100,112078,8006],{"class":117},[100,112080,865],{"class":258},[19,112082,112083,112084,112086],{},"循环 1000 步。",[32,112085,108376],{}," 是当前步数，从 0 到 999。",[73,112088,112090],{"className":249,"code":112089,"language":251,"meta":79,"style":79},"obs = get_observation(data)\n",[32,112091,112092],{"__ignoreMap":79},[100,112093,112094,112097,112099],{"class":102,"line":103},[100,112095,112096],{"class":258},"obs ",[100,112098,472],{"class":471},[100,112100,111429],{"class":258},[19,112102,112103,112104,233],{},"读取当前状态，保存到 ",[32,112105,111915],{},[73,112107,112109],{"className":249,"code":112108,"language":251,"meta":79,"style":79},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[32,112110,112111,112123],{"__ignoreMap":79},[100,112112,112113,112115,112117,112119,112121],{"class":102,"line":103},[100,112114,111939],{"class":258},[100,112116,472],{"class":471},[100,112118,111278],{"class":258},[100,112120,1985],{"class":117},[100,112122,34802],{"class":258},[100,112124,112125,112128,112130,112132,112134],{"class":102,"line":188},[100,112126,112127],{"class":258},"pole_angular_velocity ",[100,112129,472],{"class":471},[100,112131,111278],{"class":258},[100,112133,1849],{"class":117},[100,112135,34802],{"class":258},[19,112137,112138,112139,112142,112143,233],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[32,112140,112141],{},"obs[3]","？因为 obs 的顺序是 ",[32,112144,112145],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[73,112147,112149],{"className":249,"code":112148,"language":251,"meta":79,"style":79},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[32,112150,112151],{"__ignoreMap":79},[100,112152,112153,112155,112157,112159,112161,112163,112165,112167,112169],{"class":102,"line":103},[100,112154,108684],{"class":258},[100,112156,472],{"class":471},[100,112158,111469],{"class":117},[100,112160,8114],{"class":471},[100,112162,111062],{"class":258},[100,112164,2248],{"class":471},[100,112166,63421],{"class":117},[100,112168,8114],{"class":471},[100,112170,111482],{"class":258},[19,112172,112173,112174,218,112176,112178],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[32,112175,1127],{},[32,112177,1078],{}," 是人为设置的系数，不是固定公式。",[73,112180,112182],{"className":249,"code":112181,"language":251,"meta":79,"style":79},"action = np.clip(action, -1.0, 1.0)\n",[32,112183,112184],{"__ignoreMap":79},[100,112185,112186,112188,112190,112192,112194,112196,112198,112200],{"class":102,"line":103},[100,112187,108684],{"class":258},[100,112189,472],{"class":471},[100,112191,108689],{"class":258},[100,112193,2299],{"class":471},[100,112195,103887],{"class":117},[100,112197,14017],{"class":258},[100,112199,103887],{"class":117},[100,112201,809],{"class":258},[19,112203,112204],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[73,112206,112207],{"className":249,"code":111015,"language":251,"meta":79,"style":79},[32,112208,112209],{"__ignoreMap":79},[100,112210,112211,112213,112215,112217,112219],{"class":102,"line":103},[100,112212,107113],{"class":258},[100,112214,1366],{"class":117},[100,112216,468],{"class":258},[100,112218,472],{"class":471},[100,112220,108712],{"class":258},[19,112222,112223],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[73,112225,112226],{"className":249,"code":250,"language":251,"meta":79,"style":79},[32,112227,112228],{"__ignoreMap":79},[100,112229,112230],{"class":102,"line":103},[100,112231,250],{"class":258},[19,112233,112234,112235,112237],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[32,112236,107368],{}," 计算小车和杆子的下一刻状态。",[73,112239,112241],{"className":249,"code":112240,"language":251,"meta":79,"style":79},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[32,112242,112243,112252],{"__ignoreMap":79},[100,112244,112245,112248,112250],{"class":102,"line":103},[100,112246,112247],{"class":258},"reward ",[100,112249,472],{"class":471},[100,112251,111534],{"class":258},[100,112253,112254,112256,112258],{"class":102,"line":188},[100,112255,112052],{"class":258},[100,112257,11062],{"class":471},[100,112259,111544],{"class":258},[19,112261,112262,112263,112265,112266,112269,112270,233],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[32,112264,11062],{}," 是简写，",[32,112267,112268],{},"total_reward += reward"," 等价于 ",[32,112271,112272],{},"total_reward = total_reward + reward",[73,112274,112276],{"className":249,"code":112275,"language":251,"meta":79,"style":79},"if step % 100 == 0:\n",[32,112277,112278],{"__ignoreMap":79},[100,112279,112280,112282,112284,112286,112288,112290,112292],{"class":102,"line":103},[100,112281,958],{"class":471},[100,112283,33174],{"class":258},[100,112285,2095],{"class":471},[100,112287,7350],{"class":117},[100,112289,964],{"class":471},[100,112291,5692],{"class":117},[100,112293,696],{"class":258},[19,112295,112296,112298,112299,112302],{},[32,112297,2095],{}," 是取余数。",[32,112300,112301],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[73,112304,112306],{"className":249,"code":112305,"language":251,"meta":79,"style":79},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[32,112307,112308],{"__ignoreMap":79},[100,112309,112310,112312,112314,112316,112318,112320,112322,112324,112326,112328,112330,112332,112334,112336,112338,112340],{"class":102,"line":103},[100,112311,1195],{"class":117},[100,112313,713],{"class":258},[100,112315,111573],{"class":110},[100,112317,111576],{"class":258},[100,112319,111579],{"class":110},[100,112321,111582],{"class":258},[100,112323,1849],{"class":117},[100,112325,111587],{"class":258},[100,112327,111590],{"class":110},[100,112329,14017],{"class":258},[100,112331,33575],{"class":117},[100,112333,713],{"class":258},[100,112335,1819],{"class":117},[100,112337,111601],{"class":258},[100,112339,1849],{"class":117},[100,112341,751],{"class":258},[19,112343,112344,112345,112348,112349,112352],{},"打印当前步数、观测和动作。",[32,112346,112347],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[32,112350,112351],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,112354,1355],{"id":1354},[19,112356,112357],{},"观测向量:",[73,112359,112362],{"className":112360,"code":112361,"language":78,"meta":79},[76],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[32,112363,112361],{"__ignoreMap":79},[19,112365,112366],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,112368,112369],{},"每隔 100 步会打印一次：",[73,112371,112374],{"className":112372,"code":112373,"language":78,"meta":79},[76],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[32,112375,112373],{"__ignoreMap":79},[19,112377,112378],{},"重点观察：",[26,112380,112381,112387,112392],{},[29,112382,112383,112386],{},[32,112384,112385],{},"pole_angle"," 是否越来越大。",[29,112388,112389,112391],{},[32,112390,110968],{}," 是否跑得太远。",[29,112393,112394,112395,288,112397,233],{},"action 是否经常被 clip 到 ",[32,112396,105388],{},[32,112398,1985],{},[19,112400,112401],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,112403,1418],{"id":1417},[26,112405,112406,112412,112415,112421,112431,112437,112440],{},[29,112407,112408,112409,233],{},"把初始角度改为 ",[32,112410,112411],{},"data.qpos[1] = 0.3",[29,112413,112414],{},"重新运行，观察控制是否变差。",[29,112416,112417,112418,112420],{},"把 actuator ",[32,112419,108309],{}," 改小。",[29,112422,112423,112424,112427,112428,233],{},"打印 ",[32,112425,112426],{},"model.nq, model.nv, model.nu","，应为 ",[32,112429,112430],{},"2 2 1",[29,112432,112433,112434,112436],{},"把 reward 里的 ",[32,112435,112002],{}," 系数改大，观察总奖励变化。",[29,112438,112439],{},"把控制器改成反号，观察杆子是否更容易倒。",[29,112441,112442],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,112444,1463],{"id":1462},[305,112446,112447],{"id":112447},"杆子方向和预期不一致",[19,112449,103880,112450,112452,112453,112455],{},[32,112451,107481],{}," 和 capsule 的 ",[32,112454,104650],{},"，必要时用 viewer 可视化确认。",[305,112457,112458],{"id":112458},"控制器越控越倒",[19,112460,112461],{},"说明反馈符号可能反了，尝试:",[73,112463,112465],{"className":249,"code":112464,"language":251,"meta":79,"style":79},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[32,112466,112467],{"__ignoreMap":79},[100,112468,112469,112471,112473,112475,112477,112479,112481,112483,112485,112487],{"class":102,"line":103},[100,112470,108684],{"class":258},[100,112472,472],{"class":471},[100,112474,53825],{"class":471},[100,112476,1127],{"class":117},[100,112478,8114],{"class":471},[100,112480,111062],{"class":258},[100,112482,2299],{"class":471},[100,112484,63421],{"class":117},[100,112486,8114],{"class":471},[100,112488,111482],{"class":258},[305,112490,112491],{"id":112491},"小车飞走",[19,112493,112494,112495,112497,112498,112501],{},"降低 ",[32,112496,108309],{}," 或缩小 ",[32,112499,112500],{},"action"," 的 clip 范围。",[305,112503,112505,112507],{"id":112504},"obs3-为什么是杆子角速度",[32,112506,112141],{}," 为什么是杆子角速度",[19,112509,112510],{},"因为这个模型里：",[73,112512,112515],{"className":112513,"code":112514,"language":78,"meta":79},[76],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[32,112516,112514],{"__ignoreMap":79},[19,112518,110989],{},[73,112520,112523],{"className":112521,"code":112522,"language":78,"meta":79},[76],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[32,112524,112522],{"__ignoreMap":79},[305,112526,112528],{"id":112527},"reward-变成负数是否错误","reward 变成负数是否错误",[19,112530,112531],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,112533,1640],{"id":1639},[19,112535,112536],{},"一个控制任务通常包含：",[26,112538,112539,112542,112550,112555,112558],{},[29,112540,112541],{},"模型：Cartpole 的 body、joint、actuator。",[29,112543,112544,112545,56,112547,112549],{},"观测：从 ",[32,112546,55],{},[32,112548,59],{}," 里取状态。",[29,112551,112552,112553,233],{},"动作：写入 ",[32,112554,372],{},[29,112556,112557],{},"奖励：根据任务目标打分。",[29,112559,112560],{},"循环：obs -> action -> step -> reward。",[19,112562,112563],{},"这就是后面 Gymnasium 环境的基本骨架。",[1677,112565,105757],{},{"title":79,"searchDepth":188,"depth":188,"links":112567},[112568,112569,112570,112575,112579,112580,112581,112589],{"id":16,"depth":188,"text":17},{"id":87,"depth":188,"text":88},{"id":242,"depth":188,"text":243,"children":112571},[112572,112573,112574],{"id":110942,"depth":199,"text":110943},{"id":111007,"depth":199,"text":111008},{"id":111023,"depth":199,"text":111024},{"id":537,"depth":188,"text":538,"children":112576},[112577,112578],{"id":1008,"depth":199,"text":1008},{"id":1131,"depth":199,"text":1131},{"id":1354,"depth":188,"text":1355},{"id":1417,"depth":188,"text":1418},{"id":1462,"depth":188,"text":1463,"children":112582},[112583,112584,112585,112586,112588],{"id":112447,"depth":199,"text":112447},{"id":112458,"depth":199,"text":112458},{"id":112491,"depth":199,"text":112491},{"id":112504,"depth":199,"text":112587},"obs[3] 为什么是杆子角速度",{"id":112527,"depth":199,"text":112528},{"id":1639,"depth":188,"text":1640},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":110678,"description":79},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":112596,"title":112597,"body":112598,"description":79,"extension":1708,"meta":114612,"navigation":569,"path":114613,"seo":114614,"stem":114615,"__hash__":114616},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":112599,"toc":114588},[112600,112603,112605,112608,112610,112627,112630,112633,112639,112642,112644,112646,112670,112672,112686,112688,112729,112731,112749,112751,112754,112760,112763,112791,112795,112801,112826,112829,112860,112867,112870,112873,112879,112882,112888,112891,112897,112901,112904,112929,112932,112934,113694,113696,113708,113710,113721,113723,113726,113743,113746,113748,113759,113762,113764,113810,113813,113826,113829,113911,113914,113916,113932,113942,113955,113958,113997,114007,114018,114028,114041,114044,114073,114076,114086,114089,114095,114112,114123,114125,114131,114148,114159,114180,114183,114195,114198,114219,114222,114230,114238,114255,114258,114327,114334,114342,114345,114358,114365,114367,114370,114376,114379,114382,114388,114394,114396,114436,114438,114444,114453,114456,114458,114478,114481,114484,114490,114494,114496,114523,114526,114529,114556,114562,114565,114568,114570,114573,114576,114582,114585],[10,112601,112597],{"id":112602},"_7控制任务reacher-机械臂到达目标",[14,112604,17],{"id":16},[19,112606,112607],{},"本章搭建一个二维两关节 reacher 任务。",[19,112609,24],{},[26,112611,112612,112615,112618,112621,112624],{},[29,112613,112614],{},"两个 hinge joint",[29,112616,112617],{},"两个 motor actuator",[29,112619,112620],{},"site 作为末端点和目标点",[29,112622,112623],{},"根据末端和目标距离设计 reward",[29,112625,112626],{},"构造机械臂任务的基本形式",[19,112628,112629],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,112631,112632],{},"Reacher 任务可以理解为：",[73,112634,112637],{"className":112635,"code":112636,"language":78,"meta":79},[76],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[32,112638,112636],{"__ignoreMap":79},[19,112640,112641],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,112643,88],{"id":87},[19,112645,91],{},[73,112647,112648],{"className":94,"code":95,"language":96,"meta":79,"style":79},[32,112649,112650],{"__ignoreMap":79},[100,112651,112652,112654,112656,112658,112660,112662,112664,112666,112668],{"class":102,"line":103},[100,112653,107],{"class":106},[100,112655,111],{"class":110},[100,112657,114],{"class":110},[100,112659,118],{"class":117},[100,112661,121],{"class":110},[100,112663,124],{"class":110},[100,112665,127],{"class":110},[100,112667,130],{"class":110},[100,112669,133],{"class":110},[19,112671,136],{},[73,112673,112674],{"className":94,"code":139,"language":96,"meta":79,"style":79},[32,112675,112676],{"__ignoreMap":79},[100,112677,112678,112680,112682,112684],{"class":102,"line":103},[100,112679,146],{"class":106},[100,112681,114],{"class":110},[100,112683,151],{"class":110},[100,112685,154],{"class":110},[19,112687,157],{},[73,112689,112691],{"className":94,"code":112690,"language":96,"meta":79,"style":79},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[32,112692,112693,112710,112719],{"__ignoreMap":79},[100,112694,112695,112697,112699,112701,112704,112706,112708],{"class":102,"line":103},[100,112696,167],{"class":106},[100,112698,170],{"class":110},[100,112700,173],{"class":117},[100,112702,112703],{"class":110}," mujoco-reacher",[100,112705,179],{"class":110},[100,112707,182],{"class":117},[100,112709,185],{"class":117},[100,112711,112712,112714,112716],{"class":102,"line":188},[100,112713,167],{"class":106},[100,112715,193],{"class":110},[100,112717,112718],{"class":110}," mujoco-reacher\n",[100,112720,112721,112723,112725,112727],{"class":102,"line":199},[100,112722,146],{"class":106},[100,112724,114],{"class":110},[100,112726,151],{"class":110},[100,112728,154],{"class":110},[19,112730,210],{},[26,112732,112733,112736,112739],{},[29,112734,112735],{},"本章使用低维状态，不使用图像输入。",[29,112737,112738],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[29,112740,112741,112742,56,112744,56,112746,112748],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[32,112743,55],{},[32,112745,59],{},[32,112747,105153],{}," 的方法一致。",[14,112750,243],{"id":242},[19,112752,112753],{},"Reacher 任务核心:",[73,112755,112758],{"className":112756,"code":112757,"language":78,"meta":79},[76],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[32,112759,112757],{"__ignoreMap":79},[19,112761,112762],{},"读取 site 世界坐标:",[73,112764,112766],{"className":249,"code":112765,"language":251,"meta":79,"style":79},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[32,112767,112768,112781],{"__ignoreMap":79},[100,112769,112770,112772,112774,112776,112779],{"class":102,"line":103},[100,112771,105107],{"class":258},[100,112773,472],{"class":471},[100,112775,104879],{"class":258},[100,112777,112778],{"class":110},"\"tip\"",[100,112780,809],{"class":258},[100,112782,112783,112786,112788],{"class":102,"line":188},[100,112784,112785],{"class":258},"tip_pos ",[100,112787,472],{"class":471},[100,112789,112790],{"class":258}," data.site_xpos[site_id]\n",[305,112792,112794],{"id":112793},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,112796,112797,112798,112800],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[32,112799,55],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[73,112802,112804],{"className":249,"code":112803,"language":251,"meta":79,"style":79},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[32,112805,112806,112816],{"__ignoreMap":79},[100,112807,112808,112811,112813],{"class":102,"line":103},[100,112809,112810],{"class":258},"tip ",[100,112812,472],{"class":471},[100,112814,112815],{"class":258}," data.site_xpos[tip_site_id]\n",[100,112817,112818,112821,112823],{"class":102,"line":188},[100,112819,112820],{"class":258},"target ",[100,112822,472],{"class":471},[100,112824,112825],{"class":258}," data.site_xpos[target_site_id]\n",[19,112827,112828],{},"这样 reward 就很容易写：",[73,112830,112832],{"className":249,"code":112831,"language":251,"meta":79,"style":79},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[32,112833,112834,112849],{"__ignoreMap":79},[100,112835,112836,112839,112841,112844,112846],{"class":102,"line":103},[100,112837,112838],{"class":258},"dist ",[100,112840,472],{"class":471},[100,112842,112843],{"class":258}," np.linalg.norm(tip ",[100,112845,2299],{"class":471},[100,112847,112848],{"class":258}," target)\n",[100,112850,112851,112853,112855,112857],{"class":102,"line":188},[100,112852,112247],{"class":258},[100,112854,472],{"class":471},[100,112856,53825],{"class":471},[100,112858,112859],{"class":258},"dist\n",[19,112861,112862,112863,112866],{},"距离越小，",[32,112864,112865],{},"-dist"," 越接近 0，奖励越高。",[305,112868,112869],{"id":112869},"两关节机械臂的状态",[19,112871,112872],{},"这个模型有两个 hinge joint：",[73,112874,112877],{"className":112875,"code":112876,"language":78,"meta":79},[76],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[32,112878,112876],{"__ignoreMap":79},[19,112880,112881],{},"再加上末端和目标位置：",[73,112883,112886],{"className":112884,"code":112885,"language":78,"meta":79},[76],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[32,112887,112885],{"__ignoreMap":79},[19,112889,112890],{},"总维度：",[73,112892,112895],{"className":112893,"code":112894,"language":78,"meta":79},[76],"2 + 2 + 3 + 3 = 10\n",[32,112896,112894],{"__ignoreMap":79},[305,112898,112900],{"id":112899},"为什么-gravity-是-0","为什么 gravity 是 0",[19,112902,112903],{},"本章把重力设为：",[73,112905,112907],{"className":54621,"code":112906,"language":54623,"meta":79,"style":79},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[32,112908,112909],{"__ignoreMap":79},[100,112910,112911,112913,112915,112917,112919,112921,112923,112925,112927],{"class":102,"line":103},[100,112912,2676],{"class":258},[100,112914,70720],{"class":52854},[100,112916,102718],{"class":106},[100,112918,472],{"class":258},[100,112920,102723],{"class":110},[100,112922,102726],{"class":106},[100,112924,472],{"class":258},[100,112926,105244],{"class":110},[100,112928,102668],{"class":258},[19,112930,112931],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,112933,538],{"id":537},[73,112935,112937],{"className":249,"code":112936,"language":251,"meta":79,"style":79},"import mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"two_link_reacher\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n\n    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\" rgba=\"0.1 0.3 1 1\"\u002F>\n\n      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\" rgba=\"0.1 0.8 0.3 1\"\u002F>\n        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n      \u003C\u002Fbody>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\n  \u003Cactuator>\n    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n  \u003C\u002Factuator>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n    site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n    if site_id \u003C 0:\n        raise RuntimeError(f\"site not found: {name}\")\n    return data.site_xpos[site_id].copy()\n\n\ndef get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n    tip = site_position(model, data, \"tip\")\n    target = site_position(model, data, \"target\")\n    return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n\n\ndef reward(model: mujoco.MjModel, data: mujoco.MjData) -> float:\n    tip = site_position(model, data, \"tip\")\n    target = site_position(model, data, \"target\")\n    dist = np.linalg.norm(tip - target)\n    control_cost = 0.01 * np.sum(np.square(data.ctrl))\n    return float(-dist - control_cost)\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n    total_reward = 0.0\n\n    for step in range(500):\n        mujoco.mj_forward(model, data)\n        tip = site_position(model, data, \"tip\")\n        target = site_position(model, data, \"target\")\n        error = target - tip\n\n        data.ctrl[0] = np.clip(2.0 * error[2], -1.0, 1.0)\n        data.ctrl[1] = np.clip(2.0 * error[0], -1.0, 1.0)\n\n        mujoco.mj_step(model, data)\n        total_reward += reward(model, data)\n\n        if step % 100 == 0:\n            obs = get_obs(model, data)\n            print(\"step:\", step)\n            print(\"  tip:\", np.round(tip, 3))\n            print(\"  target:\", np.round(target, 3))\n            print(\"  ctrl:\", np.round(data.ctrl.copy(), 3))\n            print(\"  obs_dim:\", obs.shape[0])\n\n    print(\"total_reward:\", round(total_reward, 3))\n    print(\"final tip:\", np.round(site_position(model, data, \"tip\"), 3))\n    print(\"target:\", np.round(site_position(model, data, \"target\"), 3))\n\n\nif __name__ == \"__main__\":\n    main()\n",[32,112938,112939,112945,112955,112959,112963,112971,112976,112981,112985,112989,112994,112999,113003,113008,113013,113018,113022,113027,113032,113037,113042,113046,113050,113054,113058,113062,113067,113072,113076,113080,113084,113088,113092,113107,113116,113128,113151,113158,113162,113166,113176,113190,113204,113211,113215,113219,113233,113245,113257,113270,113285,113302,113306,113310,113322,113334,113342,113350,113354,113370,113375,113388,113401,113416,113420,113455,113487,113491,113495,113504,113508,113524,113534,113545,113561,113577,113593,113609,113613,113631,113651,113670,113674,113678,113690],{"__ignoreMap":79},[100,112940,112941,112943],{"class":102,"line":103},[100,112942,548],{"class":471},[100,112944,551],{"class":258},[100,112946,112947,112949,112951,112953],{"class":102,"line":188},[100,112948,548],{"class":471},[100,112950,558],{"class":258},[100,112952,561],{"class":471},[100,112954,564],{"class":258},[100,112956,112957],{"class":102,"line":199},[100,112958,570],{"emptyLinePlaceholder":569},[100,112960,112961],{"class":102,"line":532},[100,112962,570],{"emptyLinePlaceholder":569},[100,112964,112965,112967,112969],{"class":102,"line":577},[100,112966,580],{"class":117},[100,112968,583],{"class":471},[100,112970,586],{"class":110},[100,112972,112973],{"class":102,"line":589},[100,112974,112975],{"class":110},"\u003Cmujoco model=\"two_link_reacher\">\n",[100,112977,112978],{"class":102,"line":595},[100,112979,112980],{"class":110},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[100,112982,112983],{"class":102,"line":601},[100,112984,570],{"emptyLinePlaceholder":569},[100,112986,112987],{"class":102,"line":606},[100,112988,609],{"class":110},[100,112990,112991],{"class":102,"line":612},[100,112992,112993],{"class":110},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[100,112995,112996],{"class":102,"line":618},[100,112997,112998],{"class":110},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[100,113000,113001],{"class":102,"line":623},[100,113002,570],{"emptyLinePlaceholder":569},[100,113004,113005],{"class":102,"line":629},[100,113006,113007],{"class":110},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[100,113009,113010],{"class":102,"line":635},[100,113011,113012],{"class":110},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[100,113014,113015],{"class":102,"line":641},[100,113016,113017],{"class":110},"      \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",[100,113019,113020],{"class":102,"line":647},[100,113021,570],{"emptyLinePlaceholder":569},[100,113023,113024],{"class":102,"line":653},[100,113025,113026],{"class":110},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[100,113028,113029],{"class":102,"line":659},[100,113030,113031],{"class":110},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[100,113033,113034],{"class":102,"line":665},[100,113035,113036],{"class":110},"        \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",[100,113038,113039],{"class":102,"line":670},[100,113040,113041],{"class":110},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[100,113043,113044],{"class":102,"line":675},[100,113045,107680],{"class":110},[100,113047,113048],{"class":102,"line":699},[100,113049,644],{"class":110},[100,113051,113052],{"class":102,"line":708},[100,113053,650],{"class":110},[100,113055,113056],{"class":102,"line":722},[100,113057,570],{"emptyLinePlaceholder":569},[100,113059,113060],{"class":102,"line":735},[100,113061,107697],{"class":110},[100,113063,113064],{"class":102,"line":754},[100,113065,113066],{"class":110},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[100,113068,113069],{"class":102,"line":771},[100,113070,113071],{"class":110},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[100,113073,113074],{"class":102,"line":776},[100,113075,107707],{"class":110},[100,113077,113078],{"class":102,"line":781},[100,113079,656],{"class":110},[100,113081,113082],{"class":102,"line":796},[100,113083,662],{"class":110},[100,113085,113086],{"class":102,"line":812},[100,113087,570],{"emptyLinePlaceholder":569},[100,113089,113090],{"class":102,"line":823},[100,113091,570],{"emptyLinePlaceholder":569},[100,113093,113094,113096,113099,113102,113104],{"class":102,"line":828},[100,113095,678],{"class":471},[100,113097,113098],{"class":106}," site_position",[100,113100,113101],{"class":258},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[100,113103,687],{"class":117},[100,113105,113106],{"class":258},") -> np.ndarray:\n",[100,113108,113109,113111,113113],{"class":102,"line":840},[100,113110,104874],{"class":258},[100,113112,472],{"class":471},[100,113114,113115],{"class":258}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[100,113117,113118,113120,113122,113124,113126],{"class":102,"line":845},[100,113119,4702],{"class":471},[100,113121,104923],{"class":258},[100,113123,2676],{"class":471},[100,113125,5692],{"class":117},[100,113127,696],{"class":258},[100,113129,113130,113132,113134,113136,113138,113141,113143,113145,113147,113149],{"class":102,"line":868},[100,113131,104906],{"class":471},[100,113133,104909],{"class":117},[100,113135,713],{"class":258},[100,113137,1830],{"class":471},[100,113139,113140],{"class":110},"\"site not found: ",[100,113142,2662],{"class":117},[100,113144,81364],{"class":258},[100,113146,2712],{"class":117},[100,113148,2019],{"class":110},[100,113150,809],{"class":258},[100,113152,113153,113155],{"class":102,"line":874},[100,113154,5689],{"class":471},[100,113156,113157],{"class":258}," data.site_xpos[site_id].copy()\n",[100,113159,113160],{"class":102,"line":879},[100,113161,570],{"emptyLinePlaceholder":569},[100,113163,113164],{"class":102,"line":889},[100,113165,570],{"emptyLinePlaceholder":569},[100,113167,113168,113170,113173],{"class":102,"line":894},[100,113169,678],{"class":471},[100,113171,113172],{"class":106}," get_obs",[100,113174,113175],{"class":258},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[100,113177,113178,113181,113183,113186,113188],{"class":102,"line":900},[100,113179,113180],{"class":258},"    tip ",[100,113182,472],{"class":471},[100,113184,113185],{"class":258}," site_position(model, data, ",[100,113187,112778],{"class":110},[100,113189,809],{"class":258},[100,113191,113192,113195,113197,113199,113202],{"class":102,"line":910},[100,113193,113194],{"class":258},"    target ",[100,113196,472],{"class":471},[100,113198,113185],{"class":258},[100,113200,113201],{"class":110},"\"target\"",[100,113203,809],{"class":258},[100,113205,113206,113208],{"class":102,"line":915},[100,113207,5689],{"class":471},[100,113209,113210],{"class":258}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[100,113212,113213],{"class":102,"line":929},[100,113214,570],{"emptyLinePlaceholder":569},[100,113216,113217],{"class":102,"line":935},[100,113218,570],{"emptyLinePlaceholder":569},[100,113220,113221,113223,113226,113229,113231],{"class":102,"line":945},[100,113222,678],{"class":471},[100,113224,113225],{"class":106}," reward",[100,113227,113228],{"class":258},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[100,113230,1819],{"class":117},[100,113232,696],{"class":258},[100,113234,113235,113237,113239,113241,113243],{"class":102,"line":950},[100,113236,113180],{"class":258},[100,113238,472],{"class":471},[100,113240,113185],{"class":258},[100,113242,112778],{"class":110},[100,113244,809],{"class":258},[100,113246,113247,113249,113251,113253,113255],{"class":102,"line":955},[100,113248,113194],{"class":258},[100,113250,472],{"class":471},[100,113252,113185],{"class":258},[100,113254,113201],{"class":110},[100,113256,809],{"class":258},[100,113258,113259,113262,113264,113266,113268],{"class":102,"line":972},[100,113260,113261],{"class":258},"    dist ",[100,113263,472],{"class":471},[100,113265,112843],{"class":258},[100,113267,2299],{"class":471},[100,113269,112848],{"class":258},[100,113271,113272,113275,113277,113280,113282],{"class":102,"line":11370},[100,113273,113274],{"class":258},"    control_cost ",[100,113276,472],{"class":471},[100,113278,113279],{"class":117}," 0.01",[100,113281,8114],{"class":471},[100,113283,113284],{"class":258}," np.sum(np.square(data.ctrl))\n",[100,113286,113287,113289,113291,113293,113295,113297,113299],{"class":102,"line":11375},[100,113288,5689],{"class":471},[100,113290,111039],{"class":117},[100,113292,713],{"class":258},[100,113294,2299],{"class":471},[100,113296,112838],{"class":258},[100,113298,2299],{"class":471},[100,113300,113301],{"class":258}," control_cost)\n",[100,113303,113304],{"class":102,"line":11380},[100,113305,570],{"emptyLinePlaceholder":569},[100,113307,113308],{"class":102,"line":11385},[100,113309,570],{"emptyLinePlaceholder":569},[100,113311,113312,113314,113316,113318,113320],{"class":102,"line":11394},[100,113313,678],{"class":471},[100,113315,786],{"class":106},[100,113317,789],{"class":258},[100,113319,693],{"class":117},[100,113321,696],{"class":258},[100,113323,113324,113326,113328,113330,113332],{"class":102,"line":11399},[100,113325,799],{"class":258},[100,113327,472],{"class":471},[100,113329,804],{"class":258},[100,113331,580],{"class":117},[100,113333,809],{"class":258},[100,113335,113336,113338,113340],{"class":102,"line":11405},[100,113337,815],{"class":258},[100,113339,472],{"class":471},[100,113341,820],{"class":258},[100,113343,113344,113346,113348],{"class":102,"line":11426},[100,113345,111395],{"class":258},[100,113347,472],{"class":471},[100,113349,529],{"class":117},[100,113351,113352],{"class":102,"line":11432},[100,113353,570],{"emptyLinePlaceholder":569},[100,113355,113356,113358,113360,113362,113364,113366,113368],{"class":102,"line":11446},[100,113357,848],{"class":471},[100,113359,33174],{"class":258},[100,113361,854],{"class":471},[100,113363,857],{"class":117},[100,113365,713],{"class":258},[100,113367,66628],{"class":117},[100,113369,865],{"class":258},[100,113371,113372],{"class":102,"line":11452},[100,113373,113374],{"class":258},"        mujoco.mj_forward(model, data)\n",[100,113376,113377,113380,113382,113384,113386],{"class":102,"line":11479},[100,113378,113379],{"class":258},"        tip ",[100,113381,472],{"class":471},[100,113383,113185],{"class":258},[100,113385,112778],{"class":110},[100,113387,809],{"class":258},[100,113389,113390,113393,113395,113397,113399],{"class":102,"line":11488},[100,113391,113392],{"class":258},"        target ",[100,113394,472],{"class":471},[100,113396,113185],{"class":258},[100,113398,113201],{"class":110},[100,113400,809],{"class":258},[100,113402,113403,113406,113408,113411,113413],{"class":102,"line":11494},[100,113404,113405],{"class":258},"        error ",[100,113407,472],{"class":471},[100,113409,113410],{"class":258}," target ",[100,113412,2299],{"class":471},[100,113414,113415],{"class":258}," tip\n",[100,113417,113418],{"class":102,"line":11502},[100,113419,570],{"emptyLinePlaceholder":569},[100,113421,113422,113424,113426,113428,113430,113433,113435,113437,113440,113442,113445,113447,113449,113451,113453],{"class":102,"line":11507},[100,113423,107859],{"class":258},[100,113425,1366],{"class":117},[100,113427,468],{"class":258},[100,113429,472],{"class":471},[100,113431,113432],{"class":258}," np.clip(",[100,113434,1127],{"class":117},[100,113436,8114],{"class":471},[100,113438,113439],{"class":258}," error[",[100,113441,465],{"class":117},[100,113443,113444],{"class":258},"], ",[100,113446,2299],{"class":471},[100,113448,103887],{"class":117},[100,113450,14017],{"class":258},[100,113452,103887],{"class":117},[100,113454,809],{"class":258},[100,113456,113457,113459,113461,113463,113465,113467,113469,113471,113473,113475,113477,113479,113481,113483,113485],{"class":102,"line":18185},[100,113458,107859],{"class":258},[100,113460,1985],{"class":117},[100,113462,468],{"class":258},[100,113464,472],{"class":471},[100,113466,113432],{"class":258},[100,113468,1127],{"class":117},[100,113470,8114],{"class":471},[100,113472,113439],{"class":258},[100,113474,1366],{"class":117},[100,113476,113444],{"class":258},[100,113478,2299],{"class":471},[100,113480,103887],{"class":117},[100,113482,14017],{"class":258},[100,113484,103887],{"class":117},[100,113486,809],{"class":258},[100,113488,113489],{"class":102,"line":18191},[100,113490,570],{"emptyLinePlaceholder":569},[100,113492,113493],{"class":102,"line":18214},[100,113494,871],{"class":258},[100,113496,113497,113499,113501],{"class":102,"line":18220},[100,113498,111539],{"class":258},[100,113500,11062],{"class":471},[100,113502,113503],{"class":258}," reward(model, data)\n",[100,113505,113506],{"class":102,"line":18243},[100,113507,570],{"emptyLinePlaceholder":569},[100,113509,113510,113512,113514,113516,113518,113520,113522],{"class":102,"line":18257},[100,113511,4106],{"class":471},[100,113513,33174],{"class":258},[100,113515,2095],{"class":471},[100,113517,7350],{"class":117},[100,113519,964],{"class":471},[100,113521,5692],{"class":117},[100,113523,696],{"class":258},[100,113525,113526,113529,113531],{"class":102,"line":18277},[100,113527,113528],{"class":258},"            obs ",[100,113530,472],{"class":471},[100,113532,113533],{"class":258}," get_obs(model, data)\n",[100,113535,113536,113538,113540,113542],{"class":102,"line":18283},[100,113537,36205],{"class":117},[100,113539,713],{"class":258},[100,113541,111573],{"class":110},[100,113543,113544],{"class":258},", step)\n",[100,113546,113547,113549,113551,113554,113557,113559],{"class":102,"line":18294},[100,113548,36205],{"class":117},[100,113550,713],{"class":258},[100,113552,113553],{"class":110},"\"  tip:\"",[100,113555,113556],{"class":258},", np.round(tip, ",[100,113558,1849],{"class":117},[100,113560,751],{"class":258},[100,113562,113563,113565,113567,113570,113573,113575],{"class":102,"line":18317},[100,113564,36205],{"class":117},[100,113566,713],{"class":258},[100,113568,113569],{"class":110},"\"  target:\"",[100,113571,113572],{"class":258},", np.round(target, ",[100,113574,1849],{"class":117},[100,113576,751],{"class":258},[100,113578,113579,113581,113583,113586,113589,113591],{"class":102,"line":18339},[100,113580,36205],{"class":117},[100,113582,713],{"class":258},[100,113584,113585],{"class":110},"\"  ctrl:\"",[100,113587,113588],{"class":258},", np.round(data.ctrl.copy(), ",[100,113590,1849],{"class":117},[100,113592,751],{"class":258},[100,113594,113595,113597,113599,113602,113605,113607],{"class":102,"line":18344},[100,113596,36205],{"class":117},[100,113598,713],{"class":258},[100,113600,113601],{"class":110},"\"  obs_dim:\"",[100,113603,113604],{"class":258},", obs.shape[",[100,113606,1366],{"class":117},[100,113608,6255],{"class":258},[100,113610,113611],{"class":102,"line":18350},[100,113612,570],{"emptyLinePlaceholder":569},[100,113614,113615,113617,113619,113621,113623,113625,113627,113629],{"class":102,"line":18364},[100,113616,702],{"class":117},[100,113618,713],{"class":258},[100,113620,111618],{"class":110},[100,113622,14017],{"class":258},[100,113624,33575],{"class":117},[100,113626,111625],{"class":258},[100,113628,1849],{"class":117},[100,113630,751],{"class":258},[100,113632,113633,113635,113637,113640,113643,113645,113647,113649],{"class":102,"line":18377},[100,113634,702],{"class":117},[100,113636,713],{"class":258},[100,113638,113639],{"class":110},"\"final tip:\"",[100,113641,113642],{"class":258},", np.round(site_position(model, data, ",[100,113644,112778],{"class":110},[100,113646,111587],{"class":258},[100,113648,1849],{"class":117},[100,113650,751],{"class":258},[100,113652,113653,113655,113657,113660,113662,113664,113666,113668],{"class":102,"line":18382},[100,113654,702],{"class":117},[100,113656,713],{"class":258},[100,113658,113659],{"class":110},"\"target:\"",[100,113661,113642],{"class":258},[100,113663,113201],{"class":110},[100,113665,111587],{"class":258},[100,113667,1849],{"class":117},[100,113669,751],{"class":258},[100,113671,113672],{"class":102,"line":18396},[100,113673,570],{"emptyLinePlaceholder":569},[100,113675,113676],{"class":102,"line":18401},[100,113677,570],{"emptyLinePlaceholder":569},[100,113679,113680,113682,113684,113686,113688],{"class":102,"line":18407},[100,113681,958],{"class":471},[100,113683,961],{"class":117},[100,113685,964],{"class":471},[100,113687,967],{"class":110},[100,113689,696],{"class":258},[100,113691,113692],{"class":102,"line":18412},[100,113693,975],{"class":258},[19,113695,978],{},[73,113697,113699],{"className":94,"code":113698,"language":96,"meta":79,"style":79},"touch ch7_reacher.py\n",[32,113700,113701],{"__ignoreMap":79},[100,113702,113703,113705],{"class":102,"line":103},[100,113704,988],{"class":106},[100,113706,113707],{"class":110}," ch7_reacher.py\n",[19,113709,111686],{},[73,113711,113713],{"className":94,"code":113712,"language":96,"meta":79,"style":79},"python ch7_reacher.py\n",[32,113714,113715],{"__ignoreMap":79},[100,113716,113717,113719],{"class":102,"line":103},[100,113718,251],{"class":106},[100,113720,113707],{"class":110},[305,113722,1008],{"id":1008},[19,113724,113725],{},"读取 site 坐标：",[73,113727,113729],{"className":249,"code":113728,"language":251,"meta":79,"style":79},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[32,113730,113731],{"__ignoreMap":79},[100,113732,113733,113735,113737,113739,113741],{"class":102,"line":103},[100,113734,678],{"class":471},[100,113736,113098],{"class":106},[100,113738,113101],{"class":258},[100,113740,687],{"class":117},[100,113742,113106],{"class":258},[19,113744,113745],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,113747,111702],{},[73,113749,113751],{"className":249,"code":113750,"language":251,"meta":79,"style":79},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[32,113752,113753],{"__ignoreMap":79},[100,113754,113755,113757],{"class":102,"line":103},[100,113756,18627],{"class":471},[100,113758,113210],{"class":258},[19,113760,113761],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,113763,111027],{},[73,113765,113767],{"className":249,"code":113766,"language":251,"meta":79,"style":79},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[32,113768,113769,113781,113794],{"__ignoreMap":79},[100,113770,113771,113773,113775,113777,113779],{"class":102,"line":103},[100,113772,112838],{"class":258},[100,113774,472],{"class":471},[100,113776,112843],{"class":258},[100,113778,2299],{"class":471},[100,113780,112848],{"class":258},[100,113782,113783,113786,113788,113790,113792],{"class":102,"line":188},[100,113784,113785],{"class":258},"control_cost ",[100,113787,472],{"class":471},[100,113789,113279],{"class":117},[100,113791,8114],{"class":471},[100,113793,113284],{"class":258},[100,113795,113796,113798,113800,113802,113804,113806,113808],{"class":102,"line":199},[100,113797,18627],{"class":471},[100,113799,111039],{"class":117},[100,113801,713],{"class":258},[100,113803,2299],{"class":471},[100,113805,112838],{"class":258},[100,113807,2299],{"class":471},[100,113809,113301],{"class":258},[19,113811,113812],{},"奖励由两部分组成：",[26,113814,113815,113820],{},[29,113816,113817,113819],{},[32,113818,112865],{},"：末端离目标越远，奖励越低。",[29,113821,113822,113825],{},[32,113823,113824],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,113827,113828],{},"简单控制器：",[73,113830,113832],{"className":249,"code":113831,"language":251,"meta":79,"style":79},"error = target - tip\ndata.ctrl[0] = np.clip(2.0 * error[2], -1.0, 1.0)\ndata.ctrl[1] = np.clip(2.0 * error[0], -1.0, 1.0)\n",[32,113833,113834,113847,113879],{"__ignoreMap":79},[100,113835,113836,113839,113841,113843,113845],{"class":102,"line":103},[100,113837,113838],{"class":258},"error ",[100,113840,472],{"class":471},[100,113842,113410],{"class":258},[100,113844,2299],{"class":471},[100,113846,113415],{"class":258},[100,113848,113849,113851,113853,113855,113857,113859,113861,113863,113865,113867,113869,113871,113873,113875,113877],{"class":102,"line":188},[100,113850,107113],{"class":258},[100,113852,1366],{"class":117},[100,113854,468],{"class":258},[100,113856,472],{"class":471},[100,113858,113432],{"class":258},[100,113860,1127],{"class":117},[100,113862,8114],{"class":471},[100,113864,113439],{"class":258},[100,113866,465],{"class":117},[100,113868,113444],{"class":258},[100,113870,2299],{"class":471},[100,113872,103887],{"class":117},[100,113874,14017],{"class":258},[100,113876,103887],{"class":117},[100,113878,809],{"class":258},[100,113880,113881,113883,113885,113887,113889,113891,113893,113895,113897,113899,113901,113903,113905,113907,113909],{"class":102,"line":199},[100,113882,107113],{"class":258},[100,113884,1985],{"class":117},[100,113886,468],{"class":258},[100,113888,472],{"class":471},[100,113890,113432],{"class":258},[100,113892,1127],{"class":117},[100,113894,8114],{"class":471},[100,113896,113439],{"class":258},[100,113898,1366],{"class":117},[100,113900,113444],{"class":258},[100,113902,2299],{"class":471},[100,113904,103887],{"class":117},[100,113906,14017],{"class":258},[100,113908,103887],{"class":117},[100,113910,809],{"class":258},[19,113912,113913],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[305,113915,1131],{"id":1131},[73,113917,113918],{"className":249,"code":113728,"language":251,"meta":79,"style":79},[32,113919,113920],{"__ignoreMap":79},[100,113921,113922,113924,113926,113928,113930],{"class":102,"line":103},[100,113923,678],{"class":471},[100,113925,113098],{"class":106},[100,113927,113101],{"class":258},[100,113929,687],{"class":117},[100,113931,113106],{"class":258},[19,113933,113934,113935,113937,113938,288,113940,233],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[32,113936,81364],{}," 是 site 的名字，比如 ",[32,113939,112778],{},[32,113941,113201],{},[73,113943,113945],{"className":249,"code":113944,"language":251,"meta":79,"style":79},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[32,113946,113947],{"__ignoreMap":79},[100,113948,113949,113951,113953],{"class":102,"line":103},[100,113950,105107],{"class":258},[100,113952,472],{"class":471},[100,113954,113115],{"class":258},[19,113956,113957],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[73,113959,113961],{"className":249,"code":113960,"language":251,"meta":79,"style":79},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[32,113962,113963,113975],{"__ignoreMap":79},[100,113964,113965,113967,113969,113971,113973],{"class":102,"line":103},[100,113966,958],{"class":471},[100,113968,104923],{"class":258},[100,113970,2676],{"class":471},[100,113972,5692],{"class":117},[100,113974,696],{"class":258},[100,113976,113977,113979,113981,113983,113985,113987,113989,113991,113993,113995],{"class":102,"line":188},[100,113978,105368],{"class":471},[100,113980,104909],{"class":117},[100,113982,713],{"class":258},[100,113984,1830],{"class":471},[100,113986,113140],{"class":110},[100,113988,2662],{"class":117},[100,113990,81364],{"class":258},[100,113992,2712],{"class":117},[100,113994,2019],{"class":110},[100,113996,809],{"class":258},[19,113998,113999,114000,114003,114004,114006],{},"如果 site 没找到，就主动报错。",[32,114001,114002],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[32,114005,81364],{}," 的值放进字符串里。",[73,114008,114010],{"className":249,"code":114009,"language":251,"meta":79,"style":79},"return data.site_xpos[site_id].copy()\n",[32,114011,114012],{"__ignoreMap":79},[100,114013,114014,114016],{"class":102,"line":103},[100,114015,18627],{"class":471},[100,114017,113157],{"class":258},[19,114019,114020,114021,114023,114024,114027],{},"返回这个 site 的世界坐标。",[32,114022,105153],{}," 里的每一行都是一个 site 的 ",[32,114025,114026],{},"(x, y, z)"," 坐标。",[73,114029,114031],{"className":249,"code":114030,"language":251,"meta":79,"style":79},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[32,114032,114033],{"__ignoreMap":79},[100,114034,114035,114037,114039],{"class":102,"line":103},[100,114036,678],{"class":471},[100,114038,113172],{"class":106},[100,114040,113175],{"class":258},[19,114042,114043],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[73,114045,114047],{"className":249,"code":114046,"language":251,"meta":79,"style":79},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[32,114048,114049,114061],{"__ignoreMap":79},[100,114050,114051,114053,114055,114057,114059],{"class":102,"line":103},[100,114052,112810],{"class":258},[100,114054,472],{"class":471},[100,114056,113185],{"class":258},[100,114058,112778],{"class":110},[100,114060,809],{"class":258},[100,114062,114063,114065,114067,114069,114071],{"class":102,"line":188},[100,114064,112820],{"class":258},[100,114066,472],{"class":471},[100,114068,113185],{"class":258},[100,114070,113201],{"class":110},[100,114072,809],{"class":258},[19,114074,114075],{},"分别读取末端点和目标点的世界坐标。",[73,114077,114078],{"className":249,"code":113750,"language":251,"meta":79,"style":79},[32,114079,114080],{"__ignoreMap":79},[100,114081,114082,114084],{"class":102,"line":103},[100,114083,18627],{"class":471},[100,114085,113210],{"class":258},[19,114087,114088],{},"把四部分拼成一个观测数组：",[73,114090,114093],{"className":114091,"code":114092,"language":78,"meta":79},[76],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[32,114094,114092],{"__ignoreMap":79},[73,114096,114098],{"className":249,"code":114097,"language":251,"meta":79,"style":79},"dist = np.linalg.norm(tip - target)\n",[32,114099,114100],{"__ignoreMap":79},[100,114101,114102,114104,114106,114108,114110],{"class":102,"line":103},[100,114103,112838],{"class":258},[100,114105,472],{"class":471},[100,114107,112843],{"class":258},[100,114109,2299],{"class":471},[100,114111,112848],{"class":258},[19,114113,114114,114115,114118,114119,114122],{},"计算 tip 到 target 的距离。",[32,114116,114117],{},"tip - target"," 得到一个三维向量，",[32,114120,114121],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,114124,16214],{},[73,114126,114129],{"className":114127,"code":114128,"language":78,"meta":79},[76],"tip    = [0.3, 0.0, 0.4]\ntarget = [0.5, 0.0, 0.4]\ntip - target = [-0.2, 0.0, 0.0]\ndistance = 0.2\n",[32,114130,114128],{"__ignoreMap":79},[73,114132,114134],{"className":249,"code":114133,"language":251,"meta":79,"style":79},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[32,114135,114136],{"__ignoreMap":79},[100,114137,114138,114140,114142,114144,114146],{"class":102,"line":103},[100,114139,113785],{"class":258},[100,114141,472],{"class":471},[100,114143,113279],{"class":117},[100,114145,8114],{"class":471},[100,114147,113284],{"class":258},[19,114149,114150,114151,114154,114155,114158],{},"计算动作惩罚。",[32,114152,114153],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[32,114156,114157],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[73,114160,114162],{"className":249,"code":114161,"language":251,"meta":79,"style":79},"return float(-dist - control_cost)\n",[32,114163,114164],{"__ignoreMap":79},[100,114165,114166,114168,114170,114172,114174,114176,114178],{"class":102,"line":103},[100,114167,18627],{"class":471},[100,114169,111039],{"class":117},[100,114171,713],{"class":258},[100,114173,2299],{"class":471},[100,114175,112838],{"class":258},[100,114177,2299],{"class":471},[100,114179,113301],{"class":258},[19,114181,114182],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[73,114184,114185],{"className":249,"code":112045,"language":251,"meta":79,"style":79},[32,114186,114187],{"__ignoreMap":79},[100,114188,114189,114191,114193],{"class":102,"line":103},[100,114190,112052],{"class":258},[100,114192,472],{"class":471},[100,114194,529],{"class":117},[19,114196,114197],{},"累计奖励变量，记录整个运行过程的总分。",[73,114199,114201],{"className":249,"code":114200,"language":251,"meta":79,"style":79},"for step in range(500):\n",[32,114202,114203],{"__ignoreMap":79},[100,114204,114205,114207,114209,114211,114213,114215,114217],{"class":102,"line":103},[100,114206,1051],{"class":471},[100,114208,33174],{"class":258},[100,114210,854],{"class":471},[100,114212,857],{"class":117},[100,114214,713],{"class":258},[100,114216,66628],{"class":117},[100,114218,865],{"class":258},[19,114220,114221],{},"运行 500 个控制步。",[73,114223,114224],{"className":249,"code":294,"language":251,"meta":79,"style":79},[32,114225,114226],{"__ignoreMap":79},[100,114227,114228],{"class":102,"line":103},[100,114229,294],{"class":258},[19,114231,114232,114233,218,114235,114237],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[32,114234,104705],{},[32,114236,104708],{}," 是当前状态下的坐标。",[73,114239,114241],{"className":249,"code":114240,"language":251,"meta":79,"style":79},"error = target - tip\n",[32,114242,114243],{"__ignoreMap":79},[100,114244,114245,114247,114249,114251,114253],{"class":102,"line":103},[100,114246,113838],{"class":258},[100,114248,472],{"class":471},[100,114250,113410],{"class":258},[100,114252,2299],{"class":471},[100,114254,113415],{"class":258},[19,114256,114257],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[73,114259,114261],{"className":249,"code":114260,"language":251,"meta":79,"style":79},"data.ctrl[0] = np.clip(2.0 * error[2], -1.0, 1.0)\ndata.ctrl[1] = np.clip(2.0 * error[0], -1.0, 1.0)\n",[32,114262,114263,114295],{"__ignoreMap":79},[100,114264,114265,114267,114269,114271,114273,114275,114277,114279,114281,114283,114285,114287,114289,114291,114293],{"class":102,"line":103},[100,114266,107113],{"class":258},[100,114268,1366],{"class":117},[100,114270,468],{"class":258},[100,114272,472],{"class":471},[100,114274,113432],{"class":258},[100,114276,1127],{"class":117},[100,114278,8114],{"class":471},[100,114280,113439],{"class":258},[100,114282,465],{"class":117},[100,114284,113444],{"class":258},[100,114286,2299],{"class":471},[100,114288,103887],{"class":117},[100,114290,14017],{"class":258},[100,114292,103887],{"class":117},[100,114294,809],{"class":258},[100,114296,114297,114299,114301,114303,114305,114307,114309,114311,114313,114315,114317,114319,114321,114323,114325],{"class":102,"line":188},[100,114298,107113],{"class":258},[100,114300,1985],{"class":117},[100,114302,468],{"class":258},[100,114304,472],{"class":471},[100,114306,113432],{"class":258},[100,114308,1127],{"class":117},[100,114310,8114],{"class":471},[100,114312,113439],{"class":258},[100,114314,1366],{"class":117},[100,114316,113444],{"class":258},[100,114318,2299],{"class":471},[100,114320,103887],{"class":117},[100,114322,14017],{"class":258},[100,114324,103887],{"class":117},[100,114326,809],{"class":258},[19,114328,114329,114330,114333],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[32,114331,114332],{},"error -> ctrl -> step"," 的流程。",[73,114335,114336],{"className":249,"code":250,"language":251,"meta":79,"style":79},[32,114337,114338],{"__ignoreMap":79},[100,114339,114340],{"class":102,"line":103},[100,114341,250],{"class":258},[19,114343,114344],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[73,114346,114348],{"className":249,"code":114347,"language":251,"meta":79,"style":79},"obs = get_obs(model, data)\n",[32,114349,114350],{"__ignoreMap":79},[100,114351,114352,114354,114356],{"class":102,"line":103},[100,114353,112096],{"class":258},[100,114355,472],{"class":471},[100,114357,113533],{"class":258},[19,114359,114360,114361,114364],{},"读取最新观测。后面打印 ",[32,114362,114363],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,114366,1355],{"id":1354},[19,114368,114369],{},"观测维度为:",[73,114371,114374],{"className":114372,"code":114373,"language":78,"meta":79},[76],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[32,114375,114373],{"__ignoreMap":79},[19,114377,114378],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,114380,114381],{},"程序每 100 步打印：",[73,114383,114386],{"className":114384,"code":114385,"language":78,"meta":79},[76],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[32,114387,114385],{"__ignoreMap":79},[19,114389,114390,114391,114393],{},"如果控制有效，你应该看到最终 ",[32,114392,104705],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,114395,1418],{"id":1417},[26,114397,114398,114401,114404,114410,114416,114423,114433],{},[29,114399,114400],{},"修改目标点位置。",[29,114402,114403],{},"重新运行，观察最终 tip 是否变化。",[29,114405,114406,114407,114409],{},"把 gravity 改成 ",[32,114408,104067],{},"，观察控制是否变差。",[29,114411,112423,114412,112427,114414,233],{},[32,114413,103648],{},[32,114415,465],{},[29,114417,1444,114418,1448,114420,114422],{},[32,114419,111838],{},[32,114421,108549],{},"，观察机械臂是否更难移动。",[29,114424,1444,114425,1555,114427,1448,114429,114432],{},[32,114426,104708],{},[32,114428,105618],{},[32,114430,114431],{},"0.2 0 0.6","，观察 reward 和 final tip。",[29,114434,114435],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,114437,1463],{"id":1462},[305,114439,114441],{"id":114440},"site-not-found",[32,114442,114443],{},"site not found",[19,114445,114446,114447,218,114450,233],{},"检查 XML 中是否有 ",[32,114448,114449],{},"site name=\"tip\"",[32,114451,114452],{},"site name=\"target\"",[305,114454,114455],{"id":114455},"机械臂完全不动",[19,114457,104001],{},[26,114459,114460,114465,114468,114473],{},[29,114461,114462,114464],{},[32,114463,103648],{}," 是否为 2",[29,114466,114467],{},"actuator 是否引用正确 joint",[29,114469,114470,114472],{},[32,114471,372],{}," 是否被赋值",[29,114474,114475,114476],{},"是否执行了 ",[32,114477,102231],{},[305,114479,114480],{"id":114480},"控制效果不好",[19,114482,114483],{},"正常。本章重点不是控制器最优，而是任务结构:",[73,114485,114488],{"className":114486,"code":114487,"language":78,"meta":79},[76],"obs → action → mj_step → reward → next_obs\n",[32,114489,114487],{"__ignoreMap":79},[305,114491,114493],{"id":114492},"tip-坐标不变化","tip 坐标不变化",[19,114495,104053],{},[26,114497,114498,114503,114511,114520],{},[29,114499,114500,114501,233],{},"是否每步调用了 ",[32,114502,102231],{},[29,114504,114505,114506,218,114508,233],{},"是否写入了 ",[32,114507,107368],{},[32,114509,114510],{},"data.ctrl[1]",[29,114512,114513,114514,56,114517,233],{},"actuator 是否正确引用 ",[32,114515,114516],{},"joint1",[32,114518,114519],{},"joint2",[29,114521,114522],{},"控制输入是否太小。",[305,114524,114525],{"id":114525},"目标点不会动",[19,114527,114528],{},"本章的 target 是固定 site：",[73,114530,114532],{"className":54621,"code":114531,"language":54623,"meta":79,"style":79},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[32,114533,114534],{"__ignoreMap":79},[100,114535,114536,114538,114540,114542,114544,114546,114548,114550,114553],{"class":102,"line":103},[100,114537,2676],{"class":258},[100,114539,104684],{"class":52854},[100,114541,16501],{"class":106},[100,114543,472],{"class":258},[100,114545,113201],{"class":110},[100,114547,102630],{"class":106},[100,114549,472],{"class":258},[100,114551,114552],{"class":110},"\"0.5 0 0.4\"",[100,114554,114555],{"class":258}," ...\u002F>\n",[19,114557,114558,114559,114561],{},"它直接挂在 ",[32,114560,103332],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[305,114563,114564],{"id":114564},"机械臂不像真实机械臂",[19,114566,114567],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,114569,1640],{"id":1639},[19,114571,114572],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,114574,114575],{},"核心公式：",[73,114577,114580],{"className":114578,"code":114579,"language":78,"meta":79},[76],"distance = ||tip - target||\nreward = -distance - action_cost\n",[32,114581,114579],{"__ignoreMap":79},[19,114583,114584],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[1677,114586,114587],{},"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":79,"searchDepth":188,"depth":188,"links":114589},[114590,114591,114592,114597,114601,114602,114603,114611],{"id":16,"depth":188,"text":17},{"id":87,"depth":188,"text":88},{"id":242,"depth":188,"text":243,"children":114593},[114594,114595,114596],{"id":112793,"depth":199,"text":112794},{"id":112869,"depth":199,"text":112869},{"id":112899,"depth":199,"text":112900},{"id":537,"depth":188,"text":538,"children":114598},[114599,114600],{"id":1008,"depth":199,"text":1008},{"id":1131,"depth":199,"text":1131},{"id":1354,"depth":188,"text":1355},{"id":1417,"depth":188,"text":1418},{"id":1462,"depth":188,"text":1463,"children":114604},[114605,114606,114607,114608,114609,114610],{"id":114440,"depth":199,"text":114443},{"id":114455,"depth":199,"text":114455},{"id":114480,"depth":199,"text":114480},{"id":114492,"depth":199,"text":114493},{"id":114525,"depth":199,"text":114525},{"id":114564,"depth":199,"text":114564},{"id":1639,"depth":188,"text":1640},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":112597,"description":79},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":114618,"title":114619,"body":114620,"description":79,"extension":1708,"meta":118082,"navigation":569,"path":118083,"seo":118084,"stem":118085,"__hash__":118086},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":114621,"toc":118053},[114622,114625,114627,114630,114633,114658,114661,114667,114670,114676,114678,114680,114704,114706,114724,114726,114769,114771,114798,114800,114803,114855,114858,114864,114873,114876,114914,114917,114956,114959,114967,114974,114977,114983,114985,115039,115046,115091,115094,115098,115114,115124,115126,116387,116389,116401,116403,116414,116416,116419,116440,116443,116446,116479,116485,116488,116521,116524,116527,116568,116573,116587,116590,116603,116608,116631,116633,116648,116658,116673,116680,116700,116715,116733,116736,116753,116761,116777,116783,116815,116828,116860,116870,116905,116919,116965,116979,117021,117032,117045,117051,117084,117087,117114,117124,117164,117174,117191,117198,117216,117219,117260,117273,117288,117291,117314,117317,117329,117332,117351,117356,117377,117380,117395,117398,117432,117444,117459,117462,117487,117490,117509,117512,117544,117547,117571,117577,117607,117614,117627,117630,117632,117634,117640,117643,117646,117658,117661,117663,117717,117719,117723,117729,117738,117741,117748,117750,117773,117776,117780,117782,117800,117806,117808,117841,117844,117850,117854,117857,117877,117882,117886,117893,117913,117918,117922,117925,117945,117948,118034,118038,118041,118047,118050],[10,114623,114619],{"id":114624},"_8gymnasium-风格强化学习接口基础",[14,114626,17],{"id":16},[19,114628,114629],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,114631,114632],{},"你将实现:",[73,114634,114636],{"className":249,"code":114635,"language":251,"meta":79,"style":79},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[32,114637,114638,114648],{"__ignoreMap":79},[100,114639,114640,114643,114645],{"class":102,"line":103},[100,114641,114642],{"class":258},"obs, info ",[100,114644,472],{"class":471},[100,114646,114647],{"class":258}," env.reset()\n",[100,114649,114650,114653,114655],{"class":102,"line":188},[100,114651,114652],{"class":258},"obs, reward, terminated, truncated, info ",[100,114654,472],{"class":471},[100,114656,114657],{"class":258}," env.step(action)\n",[19,114659,114660],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,114662,114663,114664,114666],{},"前面章节的代码都是“脚本式”的：在 ",[32,114665,103784],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,114668,114669],{},"可以先记住 Gymnasium 环境的核心交互：",[73,114671,114674],{"className":114672,"code":114673,"language":78,"meta":79},[76],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[32,114675,114673],{"__ignoreMap":79},[14,114677,88],{"id":87},[19,114679,91],{},[73,114681,114682],{"className":94,"code":95,"language":96,"meta":79,"style":79},[32,114683,114684],{"__ignoreMap":79},[100,114685,114686,114688,114690,114692,114694,114696,114698,114700,114702],{"class":102,"line":103},[100,114687,107],{"class":106},[100,114689,111],{"class":110},[100,114691,114],{"class":110},[100,114693,118],{"class":117},[100,114695,121],{"class":110},[100,114697,124],{"class":110},[100,114699,127],{"class":110},[100,114701,130],{"class":110},[100,114703,133],{"class":110},[19,114705,136],{},[73,114707,114709],{"className":94,"code":114708,"language":96,"meta":79,"style":79},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[32,114710,114711],{"__ignoreMap":79},[100,114712,114713,114715,114717,114719,114721],{"class":102,"line":103},[100,114714,146],{"class":106},[100,114716,114],{"class":110},[100,114718,151],{"class":110},[100,114720,108953],{"class":110},[100,114722,114723],{"class":110}," gymnasium\n",[19,114725,157],{},[73,114727,114729],{"className":94,"code":114728,"language":96,"meta":79,"style":79},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[32,114730,114731,114748,114757],{"__ignoreMap":79},[100,114732,114733,114735,114737,114739,114742,114744,114746],{"class":102,"line":103},[100,114734,167],{"class":106},[100,114736,170],{"class":110},[100,114738,173],{"class":117},[100,114740,114741],{"class":110}," mujoco-gym-api",[100,114743,179],{"class":110},[100,114745,182],{"class":117},[100,114747,185],{"class":117},[100,114749,114750,114752,114754],{"class":102,"line":188},[100,114751,167],{"class":106},[100,114753,193],{"class":110},[100,114755,114756],{"class":110}," mujoco-gym-api\n",[100,114758,114759,114761,114763,114765,114767],{"class":102,"line":199},[100,114760,146],{"class":106},[100,114762,114],{"class":110},[100,114764,151],{"class":110},[100,114766,108953],{"class":110},[100,114768,114723],{"class":110},[19,114770,210],{},[26,114772,114773,114783,114786,114792],{},[29,114774,114775,114776,114779,114780,233],{},"本章使用 ",[32,114777,114778],{},"gymnasium","，不是旧版 ",[32,114781,114782],{},"gym",[29,114784,114785],{},"Gymnasium API 与旧 Gym API 有差异。",[29,114787,114788,114789,233],{},"旧 Gym 常见返回值是 4 个: ",[32,114790,114791],{},"obs, reward, done, info",[29,114793,114794,114795,233],{},"Gymnasium 返回值是 5 个: ",[32,114796,114797],{},"obs, reward, terminated, truncated, info",[14,114799,243],{"id":242},[19,114801,114802],{},"强化学习环境接口包含:",[319,114804,114805,114814],{},[322,114806,114807],{},[325,114808,114809,114812],{},[328,114810,114811],{"align":330},"方法",[328,114813,104172],{"align":330},[339,114815,114816,114826,114836,114846],{},[325,114817,114818,114823],{},[344,114819,114820],{"align":330},[32,114821,114822],{},"reset()",[344,114824,114825],{"align":330},"重置环境",[325,114827,114828,114833],{},[344,114829,114830],{"align":330},[32,114831,114832],{},"step(action)",[344,114834,114835],{"align":330},"执行动作",[325,114837,114838,114843],{},[344,114839,114840],{"align":330},[32,114841,114842],{},"observation_space",[344,114844,114845],{"align":330},"观测空间",[325,114847,114848,114853],{},[344,114849,114850],{"align":330},[32,114851,114852],{},"action_space",[344,114854,25236],{"align":330},[19,114856,114857],{},"一个最小环境需要完成:",[73,114859,114862],{"className":114860,"code":114861,"language":78,"meta":79},[76],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[32,114863,114861],{"__ignoreMap":79},[305,114865,114867,218,114870,401],{"id":114866},"terminated-和-truncated-的区别",[32,114868,114869],{},"terminated",[32,114871,114872],{},"truncated",[19,114874,114875],{},"Gymnasium 把“结束”拆成两个概念：",[319,114877,114878,114888],{},[322,114879,114880],{},[325,114881,114882,114884,114886],{},[328,114883,331],{"align":330},[328,114885,334],{"align":330},[328,114887,22768],{"align":330},[339,114889,114890,114902],{},[325,114891,114892,114896,114899],{},[344,114893,114894],{"align":330},[32,114895,114869],{},[344,114897,114898],{"align":330},"任务自然结束",[344,114900,114901],{"align":330},"机械臂到达目标、机器人摔倒",[325,114903,114904,114908,114911],{},[344,114905,114906],{"align":330},[32,114907,114872],{},[344,114909,114910],{"align":330},"因外部限制截断",[344,114912,114913],{"align":330},"达到最大步数、时间限制",[19,114915,114916],{},"本章中：",[73,114918,114920],{"className":249,"code":114919,"language":251,"meta":79,"style":79},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[32,114921,114922,114937],{"__ignoreMap":79},[100,114923,114924,114927,114929,114932,114934],{"class":102,"line":103},[100,114925,114926],{"class":258},"terminated ",[100,114928,472],{"class":471},[100,114930,114931],{"class":258}," dist ",[100,114933,2676],{"class":471},[100,114935,114936],{"class":117}," 0.05\n",[100,114938,114939,114942,114944,114946,114949,114951,114953],{"class":102,"line":188},[100,114940,114941],{"class":258},"truncated ",[100,114943,472],{"class":471},[100,114945,40427],{"class":117},[100,114947,114948],{"class":258},".steps ",[100,114950,3331],{"class":471},[100,114952,40427],{"class":117},[100,114954,114955],{"class":258},".max_steps\n",[19,114957,114958],{},"也就是：",[26,114960,114961,114964],{},[29,114962,114963],{},"末端距离目标小于 0.05，任务成功结束。",[29,114965,114966],{},"步数超过上限，episode 被截断。",[305,114968,114970,218,114972],{"id":114969},"observation_space-和-action_space",[32,114971,114842],{},[32,114973,114852],{},[19,114975,114976],{},"这两个对象告诉算法：",[73,114978,114981],{"className":114979,"code":114980,"language":78,"meta":79},[76],"观测长什么样\n动作允许多大\n",[32,114982,114980],{"__ignoreMap":79},[19,114984,16214],{},[73,114986,114988],{"className":249,"code":114987,"language":251,"meta":79,"style":79},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[32,114989,114990],{"__ignoreMap":79},[100,114991,114992,114994,114997,114999,115002,115005,115008,115010,115012,115015,115017,115019,115021,115023,115025,115027,115029,115032,115034,115036],{"class":102,"line":103},[100,114993,32386],{"class":117},[100,114995,114996],{"class":258},".action_space ",[100,114998,472],{"class":471},[100,115000,115001],{"class":258}," spaces.Box(",[100,115003,115004],{"class":6812},"low",[100,115006,115007],{"class":471},"=-",[100,115009,103887],{"class":117},[100,115011,14017],{"class":258},[100,115013,115014],{"class":6812},"high",[100,115016,472],{"class":471},[100,115018,103887],{"class":117},[100,115020,14017],{"class":258},[100,115022,97513],{"class":6812},[100,115024,472],{"class":471},[100,115026,713],{"class":258},[100,115028,465],{"class":117},[100,115030,115031],{"class":258},",), ",[100,115033,95052],{"class":6812},[100,115035,472],{"class":471},[100,115037,115038],{"class":258},"np.float32)\n",[19,115040,115041,115042,115045],{},"表示动作是 2 维数组，每个值都在 ",[32,115043,115044],{},"[-1, 1]"," 范围内。",[73,115047,115049],{"className":249,"code":115048,"language":251,"meta":79,"style":79},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[32,115050,115051],{"__ignoreMap":79},[100,115052,115053,115055,115058,115060,115062,115064,115066,115069,115071,115073,115075,115077,115079,115081,115083,115085,115087,115089],{"class":102,"line":103},[100,115054,32386],{"class":117},[100,115056,115057],{"class":258},".observation_space ",[100,115059,472],{"class":471},[100,115061,115001],{"class":258},[100,115063,115004],{"class":6812},[100,115065,115007],{"class":471},[100,115067,115068],{"class":258},"np.inf, ",[100,115070,115014],{"class":6812},[100,115072,472],{"class":471},[100,115074,115068],{"class":258},[100,115076,97513],{"class":6812},[100,115078,472],{"class":471},[100,115080,713],{"class":258},[100,115082,2213],{"class":117},[100,115084,115031],{"class":258},[100,115086,95052],{"class":6812},[100,115088,472],{"class":471},[100,115090,115038],{"class":258},[19,115092,115093],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[305,115095,115097],{"id":115096},"frame_skip-是什么","frame_skip 是什么",[73,115099,115101],{"className":249,"code":115100,"language":251,"meta":79,"style":79},"self.frame_skip = 5\n",[32,115102,115103],{"__ignoreMap":79},[100,115104,115105,115107,115110,115112],{"class":102,"line":103},[100,115106,32386],{"class":117},[100,115108,115109],{"class":258},".frame_skip ",[100,115111,472],{"class":471},[100,115113,55981],{"class":117},[19,115115,115116,115117,115120,115121,115123],{},"表示外部调用一次 ",[32,115118,115119],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[32,115122,44],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,115125,538],{"id":537},[73,115127,115129],{"className":249,"code":115128,"language":251,"meta":79,"style":79},"import gymnasium as gym\nimport mujoco\nimport numpy as np\nfrom gymnasium import spaces\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"gym_reacher\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n\n  \u003Cworldbody>\n    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n\n    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n\n      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n      \u003C\u002Fbody>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\n  \u003Cactuator>\n    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n  \u003C\u002Factuator>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\nclass ReacherEnv(gym.Env):\n    metadata = {\"render_modes\": []}\n\n    def __init__(self) -> None:\n        super().__init__()\n        self.model = mujoco.MjModel.from_xml_string(XML)\n        self.data = mujoco.MjData(self.model)\n\n        self.tip_site_id = mujoco.mj_name2id(self.model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\n        self.target_site_id = mujoco.mj_name2id(self.model, mujoco.mjtObj.mjOBJ_SITE, \"target\")\n        if self.tip_site_id \u003C 0 or self.target_site_id \u003C 0:\n            raise RuntimeError(\"required sites not found\")\n\n        self.frame_skip = 5\n        self.max_steps = 200\n        self.steps = 0\n\n        self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n        self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n\n    def _get_obs(self) -> np.ndarray:\n        tip = self.data.site_xpos[self.tip_site_id].copy()\n        target = self.data.site_xpos[self.target_site_id].copy()\n        obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\n        return obs.astype(np.float32)\n\n    def _get_reward(self) -> float:\n        tip = self.data.site_xpos[self.tip_site_id]\n        target = self.data.site_xpos[self.target_site_id]\n        dist = np.linalg.norm(tip - target)\n        control_cost = 0.01 * np.sum(np.square(self.data.ctrl))\n        return float(-dist - control_cost)\n\n    def reset(self, *, seed: int | None = None, options: dict | None = None):\n        super().reset(seed=seed)\n        mujoco.mj_resetData(self.model, self.data)\n\n        self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n        self.data.qvel[:] = 0.0\n        mujoco.mj_forward(self.model, self.data)\n\n        self.steps = 0\n        return self._get_obs(), {}\n\n    def step(self, action):\n        action = np.asarray(action, dtype=np.float32)\n        action = np.clip(action, self.action_space.low, self.action_space.high)\n\n        self.data.ctrl[:] = action\n        for _ in range(self.frame_skip):\n            mujoco.mj_step(self.model, self.data)\n\n        self.steps += 1\n\n        obs = self._get_obs()\n        reward = self._get_reward()\n\n        tip = self.data.site_xpos[self.tip_site_id]\n        target = self.data.site_xpos[self.target_site_id]\n        dist = float(np.linalg.norm(tip - target))\n\n        terminated = dist \u003C 0.05\n        truncated = self.steps >= self.max_steps\n        info = {\"distance\": dist}\n        return obs, reward, terminated, truncated, info\n\n\ndef main() -> None:\n    env = ReacherEnv()\n    obs, info = env.reset(seed=0)\n    print(\"initial obs shape:\", obs.shape)\n    print(\"initial info:\", info)\n\n    total_reward = 0.0\n    for step in range(20):\n        action = env.action_space.sample()\n        obs, reward, terminated, truncated, info = env.step(action)\n        total_reward += reward\n        print(\"step:\", step, \"reward:\", round(reward, 3), \"distance:\", round(info[\"distance\"], 3))\n        if terminated or truncated:\n            break\n\n    print(\"total_reward:\", round(total_reward, 3))\n\n\nif __name__ == \"__main__\":\n    main()\n",[32,115130,115131,115143,115149,115159,115170,115174,115178,115186,115191,115195,115199,115203,115207,115211,115215,115219,115224,115228,115232,115236,115241,115245,115249,115253,115257,115261,115265,115269,115273,115277,115281,115285,115289,115293,115311,115326,115330,115343,115353,115368,115385,115389,115410,115429,115454,115468,115472,115482,115494,115504,115508,115550,115588,115592,115602,115618,115633,115652,115659,115663,115676,115691,115706,115719,115738,115754,115758,115799,115814,115829,115833,115872,115883,115896,115900,115910,115919,115923,115933,115948,115966,115970,115981,115998,116011,116015,116025,116029,116040,116051,116055,116069,116083,116099,116103,116116,116133,116148,116155,116159,116163,116175,116185,116203,116215,116227,116231,116239,116255,116264,116273,116281,116323,116336,116341,116345,116363,116367,116371,116383],{"__ignoreMap":79},[100,115132,115133,115135,115138,115140],{"class":102,"line":103},[100,115134,548],{"class":471},[100,115136,115137],{"class":258}," gymnasium ",[100,115139,561],{"class":471},[100,115141,115142],{"class":258}," gym\n",[100,115144,115145,115147],{"class":102,"line":188},[100,115146,548],{"class":471},[100,115148,551],{"class":258},[100,115150,115151,115153,115155,115157],{"class":102,"line":199},[100,115152,548],{"class":471},[100,115154,558],{"class":258},[100,115156,561],{"class":471},[100,115158,564],{"class":258},[100,115160,115161,115163,115165,115167],{"class":102,"line":532},[100,115162,32301],{"class":471},[100,115164,115137],{"class":258},[100,115166,548],{"class":471},[100,115168,115169],{"class":258}," spaces\n",[100,115171,115172],{"class":102,"line":577},[100,115173,570],{"emptyLinePlaceholder":569},[100,115175,115176],{"class":102,"line":589},[100,115177,570],{"emptyLinePlaceholder":569},[100,115179,115180,115182,115184],{"class":102,"line":595},[100,115181,580],{"class":117},[100,115183,583],{"class":471},[100,115185,586],{"class":110},[100,115187,115188],{"class":102,"line":601},[100,115189,115190],{"class":110},"\u003Cmujoco model=\"gym_reacher\">\n",[100,115192,115193],{"class":102,"line":606},[100,115194,112980],{"class":110},[100,115196,115197],{"class":102,"line":612},[100,115198,570],{"emptyLinePlaceholder":569},[100,115200,115201],{"class":102,"line":618},[100,115202,609],{"class":110},[100,115204,115205],{"class":102,"line":623},[100,115206,112998],{"class":110},[100,115208,115209],{"class":102,"line":629},[100,115210,570],{"emptyLinePlaceholder":569},[100,115212,115213],{"class":102,"line":635},[100,115214,113007],{"class":110},[100,115216,115217],{"class":102,"line":641},[100,115218,113012],{"class":110},[100,115220,115221],{"class":102,"line":647},[100,115222,115223],{"class":110},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[100,115225,115226],{"class":102,"line":653},[100,115227,570],{"emptyLinePlaceholder":569},[100,115229,115230],{"class":102,"line":659},[100,115231,113026],{"class":110},[100,115233,115234],{"class":102,"line":665},[100,115235,113031],{"class":110},[100,115237,115238],{"class":102,"line":670},[100,115239,115240],{"class":110},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[100,115242,115243],{"class":102,"line":675},[100,115244,113041],{"class":110},[100,115246,115247],{"class":102,"line":699},[100,115248,107680],{"class":110},[100,115250,115251],{"class":102,"line":708},[100,115252,644],{"class":110},[100,115254,115255],{"class":102,"line":722},[100,115256,650],{"class":110},[100,115258,115259],{"class":102,"line":735},[100,115260,570],{"emptyLinePlaceholder":569},[100,115262,115263],{"class":102,"line":754},[100,115264,107697],{"class":110},[100,115266,115267],{"class":102,"line":771},[100,115268,113066],{"class":110},[100,115270,115271],{"class":102,"line":776},[100,115272,113071],{"class":110},[100,115274,115275],{"class":102,"line":781},[100,115276,107707],{"class":110},[100,115278,115279],{"class":102,"line":796},[100,115280,656],{"class":110},[100,115282,115283],{"class":102,"line":812},[100,115284,662],{"class":110},[100,115286,115287],{"class":102,"line":823},[100,115288,570],{"emptyLinePlaceholder":569},[100,115290,115291],{"class":102,"line":828},[100,115292,570],{"emptyLinePlaceholder":569},[100,115294,115295,115297,115300,115302,115304,115306,115309],{"class":102,"line":840},[100,115296,16275],{"class":471},[100,115298,115299],{"class":106}," ReacherEnv",[100,115301,713],{"class":258},[100,115303,114782],{"class":106},[100,115305,2325],{"class":258},[100,115307,115308],{"class":106},"Env",[100,115310,865],{"class":258},[100,115312,115313,115316,115318,115320,115323],{"class":102,"line":845},[100,115314,115315],{"class":258},"    metadata ",[100,115317,472],{"class":471},[100,115319,6046],{"class":258},[100,115321,115322],{"class":110},"\"render_modes\"",[100,115324,115325],{"class":258},": []}\n",[100,115327,115328],{"class":102,"line":868},[100,115329,570],{"emptyLinePlaceholder":569},[100,115331,115332,115334,115336,115339,115341],{"class":102,"line":874},[100,115333,32364],{"class":471},[100,115335,32367],{"class":117},[100,115337,115338],{"class":258},"(self) -> ",[100,115340,693],{"class":117},[100,115342,696],{"class":258},[100,115344,115345,115347,115349,115351],{"class":102,"line":879},[100,115346,32380],{"class":117},[100,115348,18842],{"class":258},[100,115350,32392],{"class":117},[100,115352,3587],{"class":258},[100,115354,115355,115357,115360,115362,115364,115366],{"class":102,"line":889},[100,115356,32408],{"class":117},[100,115358,115359],{"class":258},".model ",[100,115361,472],{"class":471},[100,115363,804],{"class":258},[100,115365,580],{"class":117},[100,115367,809],{"class":258},[100,115369,115370,115372,115375,115377,115380,115382],{"class":102,"line":894},[100,115371,32408],{"class":117},[100,115373,115374],{"class":258},".data ",[100,115376,472],{"class":471},[100,115378,115379],{"class":258}," mujoco.MjData(",[100,115381,32386],{"class":117},[100,115383,115384],{"class":258},".model)\n",[100,115386,115387],{"class":102,"line":900},[100,115388,570],{"emptyLinePlaceholder":569},[100,115390,115391,115393,115396,115398,115401,115403,115406,115408],{"class":102,"line":910},[100,115392,32408],{"class":117},[100,115394,115395],{"class":258},".tip_site_id ",[100,115397,472],{"class":471},[100,115399,115400],{"class":258}," mujoco.mj_name2id(",[100,115402,32386],{"class":117},[100,115404,115405],{"class":258},".model, mujoco.mjtObj.mjOBJ_SITE, ",[100,115407,112778],{"class":110},[100,115409,809],{"class":258},[100,115411,115412,115414,115417,115419,115421,115423,115425,115427],{"class":102,"line":915},[100,115413,32408],{"class":117},[100,115415,115416],{"class":258},".target_site_id ",[100,115418,472],{"class":471},[100,115420,115400],{"class":258},[100,115422,32386],{"class":117},[100,115424,115405],{"class":258},[100,115426,113201],{"class":110},[100,115428,809],{"class":258},[100,115430,115431,115433,115435,115437,115439,115441,115444,115446,115448,115450,115452],{"class":102,"line":929},[100,115432,4106],{"class":471},[100,115434,40427],{"class":117},[100,115436,115395],{"class":258},[100,115438,2676],{"class":471},[100,115440,5692],{"class":117},[100,115442,115443],{"class":471}," or",[100,115445,40427],{"class":117},[100,115447,115416],{"class":258},[100,115449,2676],{"class":471},[100,115451,5692],{"class":117},[100,115453,696],{"class":258},[100,115455,115456,115459,115461,115463,115466],{"class":102,"line":935},[100,115457,115458],{"class":471},"            raise",[100,115460,104909],{"class":117},[100,115462,713],{"class":258},[100,115464,115465],{"class":110},"\"required sites not found\"",[100,115467,809],{"class":258},[100,115469,115470],{"class":102,"line":945},[100,115471,570],{"emptyLinePlaceholder":569},[100,115473,115474,115476,115478,115480],{"class":102,"line":950},[100,115475,32408],{"class":117},[100,115477,115109],{"class":258},[100,115479,472],{"class":471},[100,115481,55981],{"class":117},[100,115483,115484,115486,115489,115491],{"class":102,"line":955},[100,115485,32408],{"class":117},[100,115487,115488],{"class":258},".max_steps ",[100,115490,472],{"class":471},[100,115492,115493],{"class":117}," 200\n",[100,115495,115496,115498,115500,115502],{"class":102,"line":972},[100,115497,32408],{"class":117},[100,115499,114948],{"class":258},[100,115501,472],{"class":471},[100,115503,48887],{"class":117},[100,115505,115506],{"class":102,"line":11370},[100,115507,570],{"emptyLinePlaceholder":569},[100,115509,115510,115512,115514,115516,115518,115520,115522,115524,115526,115528,115530,115532,115534,115536,115538,115540,115542,115544,115546,115548],{"class":102,"line":11375},[100,115511,32408],{"class":117},[100,115513,114996],{"class":258},[100,115515,472],{"class":471},[100,115517,115001],{"class":258},[100,115519,115004],{"class":6812},[100,115521,115007],{"class":471},[100,115523,103887],{"class":117},[100,115525,14017],{"class":258},[100,115527,115014],{"class":6812},[100,115529,472],{"class":471},[100,115531,103887],{"class":117},[100,115533,14017],{"class":258},[100,115535,97513],{"class":6812},[100,115537,472],{"class":471},[100,115539,713],{"class":258},[100,115541,465],{"class":117},[100,115543,115031],{"class":258},[100,115545,95052],{"class":6812},[100,115547,472],{"class":471},[100,115549,115038],{"class":258},[100,115551,115552,115554,115556,115558,115560,115562,115564,115566,115568,115570,115572,115574,115576,115578,115580,115582,115584,115586],{"class":102,"line":11380},[100,115553,32408],{"class":117},[100,115555,115057],{"class":258},[100,115557,472],{"class":471},[100,115559,115001],{"class":258},[100,115561,115004],{"class":6812},[100,115563,115007],{"class":471},[100,115565,115068],{"class":258},[100,115567,115014],{"class":6812},[100,115569,472],{"class":471},[100,115571,115068],{"class":258},[100,115573,97513],{"class":6812},[100,115575,472],{"class":471},[100,115577,713],{"class":258},[100,115579,2213],{"class":117},[100,115581,115031],{"class":258},[100,115583,95052],{"class":6812},[100,115585,472],{"class":471},[100,115587,115038],{"class":258},[100,115589,115590],{"class":102,"line":11385},[100,115591,570],{"emptyLinePlaceholder":569},[100,115593,115594,115596,115599],{"class":102,"line":11394},[100,115595,32364],{"class":471},[100,115597,115598],{"class":106}," _get_obs",[100,115600,115601],{"class":258},"(self) -> np.ndarray:\n",[100,115603,115604,115606,115608,115610,115613,115615],{"class":102,"line":11399},[100,115605,113379],{"class":258},[100,115607,472],{"class":471},[100,115609,40427],{"class":117},[100,115611,115612],{"class":258},".data.site_xpos[",[100,115614,32386],{"class":117},[100,115616,115617],{"class":258},".tip_site_id].copy()\n",[100,115619,115620,115622,115624,115626,115628,115630],{"class":102,"line":11405},[100,115621,113392],{"class":258},[100,115623,472],{"class":471},[100,115625,40427],{"class":117},[100,115627,115612],{"class":258},[100,115629,32386],{"class":117},[100,115631,115632],{"class":258},".target_site_id].copy()\n",[100,115634,115635,115637,115639,115642,115644,115647,115649],{"class":102,"line":11426},[100,115636,111424],{"class":258},[100,115638,472],{"class":471},[100,115640,115641],{"class":258}," np.concatenate([",[100,115643,32386],{"class":117},[100,115645,115646],{"class":258},".data.qpos.copy(), ",[100,115648,32386],{"class":117},[100,115650,115651],{"class":258},".data.qvel.copy(), tip, target])\n",[100,115653,115654,115656],{"class":102,"line":11432},[100,115655,16333],{"class":471},[100,115657,115658],{"class":258}," obs.astype(np.float32)\n",[100,115660,115661],{"class":102,"line":11446},[100,115662,570],{"emptyLinePlaceholder":569},[100,115664,115665,115667,115670,115672,115674],{"class":102,"line":11452},[100,115666,32364],{"class":471},[100,115668,115669],{"class":106}," _get_reward",[100,115671,115338],{"class":258},[100,115673,1819],{"class":117},[100,115675,696],{"class":258},[100,115677,115678,115680,115682,115684,115686,115688],{"class":102,"line":11479},[100,115679,113379],{"class":258},[100,115681,472],{"class":471},[100,115683,40427],{"class":117},[100,115685,115612],{"class":258},[100,115687,32386],{"class":117},[100,115689,115690],{"class":258},".tip_site_id]\n",[100,115692,115693,115695,115697,115699,115701,115703],{"class":102,"line":11488},[100,115694,113392],{"class":258},[100,115696,472],{"class":471},[100,115698,40427],{"class":117},[100,115700,115612],{"class":258},[100,115702,32386],{"class":117},[100,115704,115705],{"class":258},".target_site_id]\n",[100,115707,115708,115711,115713,115715,115717],{"class":102,"line":11494},[100,115709,115710],{"class":258},"        dist ",[100,115712,472],{"class":471},[100,115714,112843],{"class":258},[100,115716,2299],{"class":471},[100,115718,112848],{"class":258},[100,115720,115721,115724,115726,115728,115730,115733,115735],{"class":102,"line":11502},[100,115722,115723],{"class":258},"        control_cost ",[100,115725,472],{"class":471},[100,115727,113279],{"class":117},[100,115729,8114],{"class":471},[100,115731,115732],{"class":258}," np.sum(np.square(",[100,115734,32386],{"class":117},[100,115736,115737],{"class":258},".data.ctrl))\n",[100,115739,115740,115742,115744,115746,115748,115750,115752],{"class":102,"line":11507},[100,115741,16333],{"class":471},[100,115743,111039],{"class":117},[100,115745,713],{"class":258},[100,115747,2299],{"class":471},[100,115749,112838],{"class":258},[100,115751,2299],{"class":471},[100,115753,113301],{"class":258},[100,115755,115756],{"class":102,"line":18185},[100,115757,570],{"emptyLinePlaceholder":569},[100,115759,115760,115762,115765,115768,115770,115773,115775,115777,115779,115781,115783,115786,115789,115791,115793,115795,115797],{"class":102,"line":18191},[100,115761,32364],{"class":471},[100,115763,115764],{"class":106}," reset",[100,115766,115767],{"class":258},"(self, ",[100,115769,2222],{"class":471},[100,115771,115772],{"class":258},", seed: ",[100,115774,1784],{"class":117},[100,115776,26685],{"class":471},[100,115778,40487],{"class":117},[100,115780,583],{"class":471},[100,115782,40487],{"class":117},[100,115784,115785],{"class":258},", options: ",[100,115787,115788],{"class":117},"dict",[100,115790,26685],{"class":471},[100,115792,40487],{"class":117},[100,115794,583],{"class":471},[100,115796,40487],{"class":117},[100,115798,865],{"class":258},[100,115800,115801,115803,115806,115809,115811],{"class":102,"line":18214},[100,115802,32380],{"class":117},[100,115804,115805],{"class":258},"().reset(",[100,115807,115808],{"class":6812},"seed",[100,115810,472],{"class":471},[100,115812,115813],{"class":258},"seed)\n",[100,115815,115816,115819,115821,115824,115826],{"class":102,"line":18220},[100,115817,115818],{"class":258},"        mujoco.mj_resetData(",[100,115820,32386],{"class":117},[100,115822,115823],{"class":258},".model, ",[100,115825,32386],{"class":117},[100,115827,115828],{"class":258},".data)\n",[100,115830,115831],{"class":102,"line":18243},[100,115832,570],{"emptyLinePlaceholder":569},[100,115834,115835,115837,115840,115842,115844,115847,115849,115851,115853,115855,115857,115859,115861,115863,115865,115867,115869],{"class":102,"line":18257},[100,115836,32408],{"class":117},[100,115838,115839],{"class":258},".data.qpos[:] ",[100,115841,472],{"class":471},[100,115843,40427],{"class":117},[100,115845,115846],{"class":258},".np_random.uniform(",[100,115848,115004],{"class":6812},[100,115850,115007],{"class":471},[100,115852,87762],{"class":117},[100,115854,14017],{"class":258},[100,115856,115014],{"class":6812},[100,115858,472],{"class":471},[100,115860,87762],{"class":117},[100,115862,14017],{"class":258},[100,115864,33054],{"class":6812},[100,115866,472],{"class":471},[100,115868,32386],{"class":117},[100,115870,115871],{"class":258},".model.nq)\n",[100,115873,115874,115876,115879,115881],{"class":102,"line":18277},[100,115875,32408],{"class":117},[100,115877,115878],{"class":258},".data.qvel[:] ",[100,115880,472],{"class":471},[100,115882,529],{"class":117},[100,115884,115885,115888,115890,115892,115894],{"class":102,"line":18283},[100,115886,115887],{"class":258},"        mujoco.mj_forward(",[100,115889,32386],{"class":117},[100,115891,115823],{"class":258},[100,115893,32386],{"class":117},[100,115895,115828],{"class":258},[100,115897,115898],{"class":102,"line":18294},[100,115899,570],{"emptyLinePlaceholder":569},[100,115901,115902,115904,115906,115908],{"class":102,"line":18317},[100,115903,32408],{"class":117},[100,115905,114948],{"class":258},[100,115907,472],{"class":471},[100,115909,48887],{"class":117},[100,115911,115912,115914,115916],{"class":102,"line":18339},[100,115913,16333],{"class":471},[100,115915,40427],{"class":117},[100,115917,115918],{"class":258},"._get_obs(), {}\n",[100,115920,115921],{"class":102,"line":18344},[100,115922,570],{"emptyLinePlaceholder":569},[100,115924,115925,115927,115930],{"class":102,"line":18350},[100,115926,32364],{"class":471},[100,115928,115929],{"class":106}," step",[100,115931,115932],{"class":258},"(self, action):\n",[100,115934,115935,115937,115939,115942,115944,115946],{"class":102,"line":18364},[100,115936,111464],{"class":258},[100,115938,472],{"class":471},[100,115940,115941],{"class":258}," np.asarray(action, ",[100,115943,95052],{"class":6812},[100,115945,472],{"class":471},[100,115947,115038],{"class":258},[100,115949,115950,115952,115954,115956,115958,115961,115963],{"class":102,"line":18377},[100,115951,111464],{"class":258},[100,115953,472],{"class":471},[100,115955,108689],{"class":258},[100,115957,32386],{"class":117},[100,115959,115960],{"class":258},".action_space.low, ",[100,115962,32386],{"class":117},[100,115964,115965],{"class":258},".action_space.high)\n",[100,115967,115968],{"class":102,"line":18382},[100,115969,570],{"emptyLinePlaceholder":569},[100,115971,115972,115974,115977,115979],{"class":102,"line":18396},[100,115973,32408],{"class":117},[100,115975,115976],{"class":258},".data.ctrl[:] ",[100,115978,472],{"class":471},[100,115980,108712],{"class":258},[100,115982,115983,115985,115987,115989,115991,115993,115995],{"class":102,"line":18401},[100,115984,5003],{"class":471},[100,115986,851],{"class":258},[100,115988,854],{"class":471},[100,115990,857],{"class":117},[100,115992,713],{"class":258},[100,115994,32386],{"class":117},[100,115996,115997],{"class":258},".frame_skip):\n",[100,115999,116000,116003,116005,116007,116009],{"class":102,"line":18407},[100,116001,116002],{"class":258},"            mujoco.mj_step(",[100,116004,32386],{"class":117},[100,116006,115823],{"class":258},[100,116008,32386],{"class":117},[100,116010,115828],{"class":258},[100,116012,116013],{"class":102,"line":18412},[100,116014,570],{"emptyLinePlaceholder":569},[100,116016,116017,116019,116021,116023],{"class":102,"line":18426},[100,116018,32408],{"class":117},[100,116020,114948],{"class":258},[100,116022,11062],{"class":471},[100,116024,57253],{"class":117},[100,116026,116027],{"class":102,"line":18431},[100,116028,570],{"emptyLinePlaceholder":569},[100,116030,116031,116033,116035,116037],{"class":102,"line":18436},[100,116032,111424],{"class":258},[100,116034,472],{"class":471},[100,116036,40427],{"class":117},[100,116038,116039],{"class":258},"._get_obs()\n",[100,116041,116042,116044,116046,116048],{"class":102,"line":18450},[100,116043,111529],{"class":258},[100,116045,472],{"class":471},[100,116047,40427],{"class":117},[100,116049,116050],{"class":258},"._get_reward()\n",[100,116052,116053],{"class":102,"line":18462},[100,116054,570],{"emptyLinePlaceholder":569},[100,116056,116057,116059,116061,116063,116065,116067],{"class":102,"line":18467},[100,116058,113379],{"class":258},[100,116060,472],{"class":471},[100,116062,40427],{"class":117},[100,116064,115612],{"class":258},[100,116066,32386],{"class":117},[100,116068,115690],{"class":258},[100,116070,116071,116073,116075,116077,116079,116081],{"class":102,"line":18480},[100,116072,113392],{"class":258},[100,116074,472],{"class":471},[100,116076,40427],{"class":117},[100,116078,115612],{"class":258},[100,116080,32386],{"class":117},[100,116082,115705],{"class":258},[100,116084,116085,116087,116089,116091,116094,116096],{"class":102,"line":18485},[100,116086,115710],{"class":258},[100,116088,472],{"class":471},[100,116090,111039],{"class":117},[100,116092,116093],{"class":258},"(np.linalg.norm(tip ",[100,116095,2299],{"class":471},[100,116097,116098],{"class":258}," target))\n",[100,116100,116101],{"class":102,"line":18490},[100,116102,570],{"emptyLinePlaceholder":569},[100,116104,116105,116108,116110,116112,116114],{"class":102,"line":18495},[100,116106,116107],{"class":258},"        terminated ",[100,116109,472],{"class":471},[100,116111,114931],{"class":258},[100,116113,2676],{"class":471},[100,116115,114936],{"class":117},[100,116117,116118,116121,116123,116125,116127,116129,116131],{"class":102,"line":18508},[100,116119,116120],{"class":258},"        truncated ",[100,116122,472],{"class":471},[100,116124,40427],{"class":117},[100,116126,114948],{"class":258},[100,116128,3331],{"class":471},[100,116130,40427],{"class":117},[100,116132,114955],{"class":258},[100,116134,116135,116138,116140,116142,116145],{"class":102,"line":18513},[100,116136,116137],{"class":258},"        info ",[100,116139,472],{"class":471},[100,116141,6046],{"class":258},[100,116143,116144],{"class":110},"\"distance\"",[100,116146,116147],{"class":258},": dist}\n",[100,116149,116150,116152],{"class":102,"line":34189},[100,116151,16333],{"class":471},[100,116153,116154],{"class":258}," obs, reward, terminated, truncated, info\n",[100,116156,116157],{"class":102,"line":34195},[100,116158,570],{"emptyLinePlaceholder":569},[100,116160,116161],{"class":102,"line":34201},[100,116162,570],{"emptyLinePlaceholder":569},[100,116164,116165,116167,116169,116171,116173],{"class":102,"line":34207},[100,116166,678],{"class":471},[100,116168,786],{"class":106},[100,116170,789],{"class":258},[100,116172,693],{"class":117},[100,116174,696],{"class":258},[100,116176,116177,116180,116182],{"class":102,"line":34213},[100,116178,116179],{"class":258},"    env ",[100,116181,472],{"class":471},[100,116183,116184],{"class":258}," ReacherEnv()\n",[100,116186,116187,116190,116192,116195,116197,116199,116201],{"class":102,"line":34224},[100,116188,116189],{"class":258},"    obs, info ",[100,116191,472],{"class":471},[100,116193,116194],{"class":258}," env.reset(",[100,116196,115808],{"class":6812},[100,116198,472],{"class":471},[100,116200,1366],{"class":117},[100,116202,809],{"class":258},[100,116204,116205,116207,116209,116212],{"class":102,"line":34230},[100,116206,702],{"class":117},[100,116208,713],{"class":258},[100,116210,116211],{"class":110},"\"initial obs shape:\"",[100,116213,116214],{"class":258},", obs.shape)\n",[100,116216,116217,116219,116221,116224],{"class":102,"line":34250},[100,116218,702],{"class":117},[100,116220,713],{"class":258},[100,116222,116223],{"class":110},"\"initial info:\"",[100,116225,116226],{"class":258},", info)\n",[100,116228,116229],{"class":102,"line":34256},[100,116230,570],{"emptyLinePlaceholder":569},[100,116232,116233,116235,116237],{"class":102,"line":34267},[100,116234,111395],{"class":258},[100,116236,472],{"class":471},[100,116238,529],{"class":117},[100,116240,116241,116243,116245,116247,116249,116251,116253],{"class":102,"line":34273},[100,116242,848],{"class":471},[100,116244,33174],{"class":258},[100,116246,854],{"class":471},[100,116248,857],{"class":117},[100,116250,713],{"class":258},[100,116252,2466],{"class":117},[100,116254,865],{"class":258},[100,116256,116257,116259,116261],{"class":102,"line":34279},[100,116258,111464],{"class":258},[100,116260,472],{"class":471},[100,116262,116263],{"class":258}," env.action_space.sample()\n",[100,116265,116266,116269,116271],{"class":102,"line":34285},[100,116267,116268],{"class":258},"        obs, reward, terminated, truncated, info ",[100,116270,472],{"class":471},[100,116272,114657],{"class":258},[100,116274,116275,116277,116279],{"class":102,"line":34291},[100,116276,111539],{"class":258},[100,116278,11062],{"class":471},[100,116280,111544],{"class":258},[100,116282,116283,116285,116287,116289,116291,116294,116296,116298,116301,116303,116305,116308,116310,116312,116315,116317,116319,116321],{"class":102,"line":34297},[100,116284,34007],{"class":117},[100,116286,713],{"class":258},[100,116288,111573],{"class":110},[100,116290,111576],{"class":258},[100,116292,116293],{"class":110},"\"reward:\"",[100,116295,14017],{"class":258},[100,116297,33575],{"class":117},[100,116299,116300],{"class":258},"(reward, ",[100,116302,1849],{"class":117},[100,116304,111587],{"class":258},[100,116306,116307],{"class":110},"\"distance:\"",[100,116309,14017],{"class":258},[100,116311,33575],{"class":117},[100,116313,116314],{"class":258},"(info[",[100,116316,116144],{"class":110},[100,116318,113444],{"class":258},[100,116320,1849],{"class":117},[100,116322,751],{"class":258},[100,116324,116325,116327,116330,116333],{"class":102,"line":34303},[100,116326,4106],{"class":471},[100,116328,116329],{"class":258}," terminated ",[100,116331,116332],{"class":471},"or",[100,116334,116335],{"class":258}," truncated:\n",[100,116337,116338],{"class":102,"line":34309},[100,116339,116340],{"class":471},"            break\n",[100,116342,116343],{"class":102,"line":34329},[100,116344,570],{"emptyLinePlaceholder":569},[100,116346,116347,116349,116351,116353,116355,116357,116359,116361],{"class":102,"line":34335},[100,116348,702],{"class":117},[100,116350,713],{"class":258},[100,116352,111618],{"class":110},[100,116354,14017],{"class":258},[100,116356,33575],{"class":117},[100,116358,111625],{"class":258},[100,116360,1849],{"class":117},[100,116362,751],{"class":258},[100,116364,116365],{"class":102,"line":34351},[100,116366,570],{"emptyLinePlaceholder":569},[100,116368,116369],{"class":102,"line":34357},[100,116370,570],{"emptyLinePlaceholder":569},[100,116372,116373,116375,116377,116379,116381],{"class":102,"line":34371},[100,116374,958],{"class":471},[100,116376,961],{"class":117},[100,116378,964],{"class":471},[100,116380,967],{"class":110},[100,116382,696],{"class":258},[100,116384,116385],{"class":102,"line":34377},[100,116386,975],{"class":258},[19,116388,978],{},[73,116390,116392],{"className":94,"code":116391,"language":96,"meta":79,"style":79},"touch ch8_gym_env.py\n",[32,116393,116394],{"__ignoreMap":79},[100,116395,116396,116398],{"class":102,"line":103},[100,116397,988],{"class":106},[100,116399,116400],{"class":110}," ch8_gym_env.py\n",[19,116402,111686],{},[73,116404,116406],{"className":94,"code":116405,"language":96,"meta":79,"style":79},"python ch8_gym_env.py\n",[32,116407,116408],{"__ignoreMap":79},[100,116409,116410,116412],{"class":102,"line":103},[100,116411,251],{"class":106},[100,116413,116400],{"class":110},[305,116415,1008],{"id":1008},[19,116417,116418],{},"继承 Gymnasium 环境：",[73,116420,116422],{"className":249,"code":116421,"language":251,"meta":79,"style":79},"class ReacherEnv(gym.Env):\n",[32,116423,116424],{"__ignoreMap":79},[100,116425,116426,116428,116430,116432,116434,116436,116438],{"class":102,"line":103},[100,116427,16275],{"class":471},[100,116429,115299],{"class":106},[100,116431,713],{"class":258},[100,116433,114782],{"class":106},[100,116435,2325],{"class":258},[100,116437,115308],{"class":106},[100,116439,865],{"class":258},[19,116441,116442],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,116444,116445],{},"初始化模型：",[73,116447,116449],{"className":249,"code":116448,"language":251,"meta":79,"style":79},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[32,116450,116451,116465],{"__ignoreMap":79},[100,116452,116453,116455,116457,116459,116461,116463],{"class":102,"line":103},[100,116454,32386],{"class":117},[100,116456,115359],{"class":258},[100,116458,472],{"class":471},[100,116460,804],{"class":258},[100,116462,580],{"class":117},[100,116464,809],{"class":258},[100,116466,116467,116469,116471,116473,116475,116477],{"class":102,"line":188},[100,116468,32386],{"class":117},[100,116470,115374],{"class":258},[100,116472,472],{"class":471},[100,116474,115379],{"class":258},[100,116476,32386],{"class":117},[100,116478,115384],{"class":258},[19,116480,116481,116482,116484],{},"这和前面章节一样，只是现在放到了类的 ",[32,116483,32392],{}," 里。",[19,116486,116487],{},"缓存 site ID：",[73,116489,116491],{"className":249,"code":116490,"language":251,"meta":79,"style":79},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[32,116492,116493,116507],{"__ignoreMap":79},[100,116494,116495,116497,116499,116501,116503,116505],{"class":102,"line":103},[100,116496,32386],{"class":117},[100,116498,115395],{"class":258},[100,116500,472],{"class":471},[100,116502,115400],{"class":258},[100,116504,91106],{"class":117},[100,116506,809],{"class":258},[100,116508,116509,116511,116513,116515,116517,116519],{"class":102,"line":188},[100,116510,32386],{"class":117},[100,116512,115416],{"class":258},[100,116514,472],{"class":471},[100,116516,115400],{"class":258},[100,116518,91106],{"class":117},[100,116520,809],{"class":258},[19,116522,116523],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,116525,116526],{},"reset：",[73,116528,116530],{"className":249,"code":116529,"language":251,"meta":79,"style":79},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[32,116531,116532],{"__ignoreMap":79},[100,116533,116534,116536,116538,116540,116542,116544,116546,116548,116550,116552,116554,116556,116558,116560,116562,116564,116566],{"class":102,"line":103},[100,116535,678],{"class":471},[100,116537,115764],{"class":106},[100,116539,115767],{"class":258},[100,116541,2222],{"class":471},[100,116543,115772],{"class":258},[100,116545,1784],{"class":117},[100,116547,26685],{"class":471},[100,116549,40487],{"class":117},[100,116551,583],{"class":471},[100,116553,40487],{"class":117},[100,116555,115785],{"class":258},[100,116557,115788],{"class":117},[100,116559,26685],{"class":471},[100,116561,40487],{"class":117},[100,116563,583],{"class":471},[100,116565,40487],{"class":117},[100,116567,865],{"class":258},[19,116569,116570,116572],{},[32,116571,71610],{}," 做四件事：",[26,116574,116575,116578,116581,116584],{},[29,116576,116577],{},"设置随机种子。",[29,116579,116580],{},"重置 MuJoCo data。",[29,116582,116583],{},"随机初始化关节角。",[29,116585,116586],{},"返回初始观测和 info。",[19,116588,116589],{},"step：",[73,116591,116593],{"className":249,"code":116592,"language":251,"meta":79,"style":79},"def step(self, action):\n",[32,116594,116595],{"__ignoreMap":79},[100,116596,116597,116599,116601],{"class":102,"line":103},[100,116598,678],{"class":471},[100,116600,115929],{"class":106},[100,116602,115932],{"class":258},[19,116604,116605,116607],{},[32,116606,108376],{}," 做六件事：",[26,116609,116610,116613,116619,116622,116625,116628],{},[29,116611,116612],{},"检查并裁剪 action。",[29,116614,116615,116616,233],{},"写入 ",[32,116617,116618],{},"self.data.ctrl",[29,116620,116621],{},"连续推进若干个 MuJoCo 物理步。",[29,116623,116624],{},"计算新观测。",[29,116626,116627],{},"计算奖励和结束条件。",[29,116629,116630],{},"返回 Gymnasium 标准五元组。",[305,116632,1131],{"id":1131},[73,116634,116636],{"className":249,"code":116635,"language":251,"meta":79,"style":79},"import gymnasium as gym\n",[32,116637,116638],{"__ignoreMap":79},[100,116639,116640,116642,116644,116646],{"class":102,"line":103},[100,116641,548],{"class":471},[100,116643,115137],{"class":258},[100,116645,561],{"class":471},[100,116647,115142],{"class":258},[19,116649,116650,116651,116653,116654,116657],{},"导入 Gymnasium，并起别名 ",[32,116652,114782],{},"。后面写 ",[32,116655,116656],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[73,116659,116661],{"className":249,"code":116660,"language":251,"meta":79,"style":79},"from gymnasium import spaces\n",[32,116662,116663],{"__ignoreMap":79},[100,116664,116665,116667,116669,116671],{"class":102,"line":103},[100,116666,32301],{"class":471},[100,116668,115137],{"class":258},[100,116670,548],{"class":471},[100,116672,115169],{"class":258},[19,116674,116675,116676,116679],{},"导入空间定义工具。",[32,116677,116678],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[73,116681,116682],{"className":249,"code":116421,"language":251,"meta":79,"style":79},[32,116683,116684],{"__ignoreMap":79},[100,116685,116686,116688,116690,116692,116694,116696,116698],{"class":102,"line":103},[100,116687,16275],{"class":471},[100,116689,115299],{"class":106},[100,116691,713],{"class":258},[100,116693,114782],{"class":106},[100,116695,2325],{"class":258},[100,116697,115308],{"class":106},[100,116699,865],{"class":258},[19,116701,116702,116703,116706,116707,116709,116710,218,116712,116714],{},"定义一个类，名字叫 ",[32,116704,116705],{},"ReacherEnv","。括号里的 ",[32,116708,116656],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[32,116711,71610],{},[32,116713,108376],{}," 这两个核心方法。",[73,116716,116718],{"className":249,"code":116717,"language":251,"meta":79,"style":79},"metadata = {\"render_modes\": []}\n",[32,116719,116720],{"__ignoreMap":79},[100,116721,116722,116725,116727,116729,116731],{"class":102,"line":103},[100,116723,116724],{"class":258},"metadata ",[100,116726,472],{"class":471},[100,116728,6046],{"class":258},[100,116730,115322],{"class":110},[100,116732,115325],{"class":258},[19,116734,116735],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[73,116737,116739],{"className":249,"code":116738,"language":251,"meta":79,"style":79},"def __init__(self) -> None:\n",[32,116740,116741],{"__ignoreMap":79},[100,116742,116743,116745,116747,116749,116751],{"class":102,"line":103},[100,116744,678],{"class":471},[100,116746,32367],{"class":117},[100,116748,115338],{"class":258},[100,116750,693],{"class":117},[100,116752,696],{"class":258},[19,116754,116755,116757,116758,233],{},[32,116756,32392],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[32,116759,116760],{},"env = ReacherEnv()",[73,116762,116764],{"className":249,"code":116763,"language":251,"meta":79,"style":79},"super().__init__()\n",[32,116765,116766],{"__ignoreMap":79},[100,116767,116768,116771,116773,116775],{"class":102,"line":103},[100,116769,116770],{"class":117},"super",[100,116772,18842],{"class":258},[100,116774,32392],{"class":117},[100,116776,3587],{"class":258},[19,116778,116779,116780,116782],{},"调用父类 ",[32,116781,116656],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[73,116784,116785],{"className":249,"code":116448,"language":251,"meta":79,"style":79},[32,116786,116787,116801],{"__ignoreMap":79},[100,116788,116789,116791,116793,116795,116797,116799],{"class":102,"line":103},[100,116790,32386],{"class":117},[100,116792,115359],{"class":258},[100,116794,472],{"class":471},[100,116796,804],{"class":258},[100,116798,580],{"class":117},[100,116800,809],{"class":258},[100,116802,116803,116805,116807,116809,116811,116813],{"class":102,"line":188},[100,116804,32386],{"class":117},[100,116806,115374],{"class":258},[100,116808,472],{"class":471},[100,116810,115379],{"class":258},[100,116812,32386],{"class":117},[100,116814,115384],{"class":258},[19,116816,116817,116818,116820,116821,218,116824,116827],{},"把 MuJoCo 模型和状态保存到 ",[32,116819,32386],{}," 上。",[32,116822,116823],{},"self.model",[32,116825,116826],{},"self.data"," 表示这个环境对象自己的模型和状态。",[73,116829,116830],{"className":249,"code":116490,"language":251,"meta":79,"style":79},[32,116831,116832,116846],{"__ignoreMap":79},[100,116833,116834,116836,116838,116840,116842,116844],{"class":102,"line":103},[100,116835,32386],{"class":117},[100,116837,115395],{"class":258},[100,116839,472],{"class":471},[100,116841,115400],{"class":258},[100,116843,91106],{"class":117},[100,116845,809],{"class":258},[100,116847,116848,116850,116852,116854,116856,116858],{"class":102,"line":188},[100,116849,32386],{"class":117},[100,116851,115416],{"class":258},[100,116853,472],{"class":471},[100,116855,115400],{"class":258},[100,116857,91106],{"class":117},[100,116859,809],{"class":258},[19,116861,116862,116863,218,116866,116869],{},"提前查好 tip 和 target 的 site ID。这样 ",[32,116864,116865],{},"_get_obs",[32,116867,116868],{},"_get_reward"," 里就不用每次按名字查找。",[73,116871,116873],{"className":249,"code":116872,"language":251,"meta":79,"style":79},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[32,116874,116875,116885,116895],{"__ignoreMap":79},[100,116876,116877,116879,116881,116883],{"class":102,"line":103},[100,116878,32386],{"class":117},[100,116880,115109],{"class":258},[100,116882,472],{"class":471},[100,116884,55981],{"class":117},[100,116886,116887,116889,116891,116893],{"class":102,"line":188},[100,116888,32386],{"class":117},[100,116890,115488],{"class":258},[100,116892,472],{"class":471},[100,116894,115493],{"class":117},[100,116896,116897,116899,116901,116903],{"class":102,"line":199},[100,116898,32386],{"class":117},[100,116900,114948],{"class":258},[100,116902,472],{"class":471},[100,116904,48887],{"class":117},[19,116906,116907,116910,116911,116914,116915,116918],{},[32,116908,116909],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[32,116912,116913],{},"max_steps"," 是一个 episode 最多运行多少步。",[32,116916,116917],{},"steps"," 记录当前 episode 已经走了多少步。",[73,116920,116921],{"className":249,"code":114987,"language":251,"meta":79,"style":79},[32,116922,116923],{"__ignoreMap":79},[100,116924,116925,116927,116929,116931,116933,116935,116937,116939,116941,116943,116945,116947,116949,116951,116953,116955,116957,116959,116961,116963],{"class":102,"line":103},[100,116926,32386],{"class":117},[100,116928,114996],{"class":258},[100,116930,472],{"class":471},[100,116932,115001],{"class":258},[100,116934,115004],{"class":6812},[100,116936,115007],{"class":471},[100,116938,103887],{"class":117},[100,116940,14017],{"class":258},[100,116942,115014],{"class":6812},[100,116944,472],{"class":471},[100,116946,103887],{"class":117},[100,116948,14017],{"class":258},[100,116950,97513],{"class":6812},[100,116952,472],{"class":471},[100,116954,713],{"class":258},[100,116956,465],{"class":117},[100,116958,115031],{"class":258},[100,116960,95052],{"class":6812},[100,116962,472],{"class":471},[100,116964,115038],{"class":258},[19,116966,116967,116968,116971,116972,218,116975,116978],{},"定义动作空间。",[32,116969,116970],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[32,116973,116974],{},"low=-1.0",[32,116976,116977],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[73,116980,116981],{"className":249,"code":115048,"language":251,"meta":79,"style":79},[32,116982,116983],{"__ignoreMap":79},[100,116984,116985,116987,116989,116991,116993,116995,116997,116999,117001,117003,117005,117007,117009,117011,117013,117015,117017,117019],{"class":102,"line":103},[100,116986,32386],{"class":117},[100,116988,115057],{"class":258},[100,116990,472],{"class":471},[100,116992,115001],{"class":258},[100,116994,115004],{"class":6812},[100,116996,115007],{"class":471},[100,116998,115068],{"class":258},[100,117000,115014],{"class":6812},[100,117002,472],{"class":471},[100,117004,115068],{"class":258},[100,117006,97513],{"class":6812},[100,117008,472],{"class":471},[100,117010,713],{"class":258},[100,117012,2213],{"class":117},[100,117014,115031],{"class":258},[100,117016,95052],{"class":6812},[100,117018,472],{"class":471},[100,117020,115038],{"class":258},[19,117022,117023,117024,117027,117028,117031],{},"定义观测空间。",[32,117025,117026],{},"shape=(10,)"," 表示观测是 10 个数。",[32,117029,117030],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[73,117033,117035],{"className":249,"code":117034,"language":251,"meta":79,"style":79},"def _get_obs(self) -> np.ndarray:\n",[32,117036,117037],{"__ignoreMap":79},[100,117038,117039,117041,117043],{"class":102,"line":103},[100,117040,678],{"class":471},[100,117042,115598],{"class":106},[100,117044,115601],{"class":258},[19,117046,117047,117048,117050],{},"定义内部函数，用来生成观测。函数名前面的 ",[32,117049,2758],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[73,117052,117054],{"className":249,"code":117053,"language":251,"meta":79,"style":79},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[32,117055,117056,117070],{"__ignoreMap":79},[100,117057,117058,117060,117062,117064,117066,117068],{"class":102,"line":103},[100,117059,112810],{"class":258},[100,117061,472],{"class":471},[100,117063,40427],{"class":117},[100,117065,115612],{"class":258},[100,117067,32386],{"class":117},[100,117069,115617],{"class":258},[100,117071,117072,117074,117076,117078,117080,117082],{"class":102,"line":188},[100,117073,112820],{"class":258},[100,117075,472],{"class":471},[100,117077,40427],{"class":117},[100,117079,115612],{"class":258},[100,117081,32386],{"class":117},[100,117083,115632],{"class":258},[19,117085,117086],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[73,117088,117090],{"className":249,"code":117089,"language":251,"meta":79,"style":79},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[32,117091,117092,117108],{"__ignoreMap":79},[100,117093,117094,117096,117098,117100,117102,117104,117106],{"class":102,"line":103},[100,117095,112096],{"class":258},[100,117097,472],{"class":471},[100,117099,115641],{"class":258},[100,117101,32386],{"class":117},[100,117103,115646],{"class":258},[100,117105,32386],{"class":117},[100,117107,115651],{"class":258},[100,117109,117110,117112],{"class":102,"line":188},[100,117111,18627],{"class":471},[100,117113,115658],{"class":258},[19,117115,117116,117117,117120,117121,117123],{},"拼接观测，并转换成 ",[32,117118,117119],{},"float32","。很多强化学习库默认使用 ",[32,117122,117119],{},"，所以这里主动转换。",[73,117125,117126],{"className":249,"code":116529,"language":251,"meta":79,"style":79},[32,117127,117128],{"__ignoreMap":79},[100,117129,117130,117132,117134,117136,117138,117140,117142,117144,117146,117148,117150,117152,117154,117156,117158,117160,117162],{"class":102,"line":103},[100,117131,678],{"class":471},[100,117133,115764],{"class":106},[100,117135,115767],{"class":258},[100,117137,2222],{"class":471},[100,117139,115772],{"class":258},[100,117141,1784],{"class":117},[100,117143,26685],{"class":471},[100,117145,40487],{"class":117},[100,117147,583],{"class":471},[100,117149,40487],{"class":117},[100,117151,115785],{"class":258},[100,117153,115788],{"class":117},[100,117155,26685],{"class":471},[100,117157,40487],{"class":117},[100,117159,583],{"class":471},[100,117161,40487],{"class":117},[100,117163,865],{"class":258},[19,117165,117166,117167,117169,117170,117173],{},"定义 reset。",[32,117168,115808],{}," 用来控制随机数，保证实验可以复现。",[32,117171,117172],{},"options"," 用来接收额外配置，本章暂时不用。",[73,117175,117177],{"className":249,"code":117176,"language":251,"meta":79,"style":79},"super().reset(seed=seed)\n",[32,117178,117179],{"__ignoreMap":79},[100,117180,117181,117183,117185,117187,117189],{"class":102,"line":103},[100,117182,116770],{"class":117},[100,117184,115805],{"class":258},[100,117186,115808],{"class":6812},[100,117188,472],{"class":471},[100,117190,115813],{"class":258},[19,117192,117193,117194,117197],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[32,117195,117196],{},"self.np_random"," 生成可复现的随机数。",[73,117199,117201],{"className":249,"code":117200,"language":251,"meta":79,"style":79},"mujoco.mj_resetData(self.model, self.data)\n",[32,117202,117203],{"__ignoreMap":79},[100,117204,117205,117208,117210,117212,117214],{"class":102,"line":103},[100,117206,117207],{"class":258},"mujoco.mj_resetData(",[100,117209,32386],{"class":117},[100,117211,115823],{"class":258},[100,117213,32386],{"class":117},[100,117215,115828],{"class":258},[19,117217,117218],{},"把 MuJoCo 状态重置到默认状态。",[73,117220,117222],{"className":249,"code":117221,"language":251,"meta":79,"style":79},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[32,117223,117224],{"__ignoreMap":79},[100,117225,117226,117228,117230,117232,117234,117236,117238,117240,117242,117244,117246,117248,117250,117252,117254,117256,117258],{"class":102,"line":103},[100,117227,32386],{"class":117},[100,117229,115839],{"class":258},[100,117231,472],{"class":471},[100,117233,40427],{"class":117},[100,117235,115846],{"class":258},[100,117237,115004],{"class":6812},[100,117239,115007],{"class":471},[100,117241,87762],{"class":117},[100,117243,14017],{"class":258},[100,117245,115014],{"class":6812},[100,117247,472],{"class":471},[100,117249,87762],{"class":117},[100,117251,14017],{"class":258},[100,117253,33054],{"class":6812},[100,117255,472],{"class":471},[100,117257,32386],{"class":117},[100,117259,115871],{"class":258},[19,117261,116583,117262,117265,117266,117269,117270,117272],{},[32,117263,117264],{},"[:]"," 表示修改整个数组。",[32,117267,117268],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[32,117271,103640],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[73,117274,117276],{"className":249,"code":117275,"language":251,"meta":79,"style":79},"self.data.qvel[:] = 0.0\n",[32,117277,117278],{"__ignoreMap":79},[100,117279,117280,117282,117284,117286],{"class":102,"line":103},[100,117281,32386],{"class":117},[100,117283,115878],{"class":258},[100,117285,472],{"class":471},[100,117287,529],{"class":117},[19,117289,117290],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[73,117292,117294],{"className":249,"code":117293,"language":251,"meta":79,"style":79},"self.steps = 0\nreturn self._get_obs(), {}\n",[32,117295,117296,117306],{"__ignoreMap":79},[100,117297,117298,117300,117302,117304],{"class":102,"line":103},[100,117299,32386],{"class":117},[100,117301,114948],{"class":258},[100,117303,472],{"class":471},[100,117305,48887],{"class":117},[100,117307,117308,117310,117312],{"class":102,"line":188},[100,117309,18627],{"class":471},[100,117311,40427],{"class":117},[100,117313,115918],{"class":258},[19,117315,117316],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[73,117318,117319],{"className":249,"code":116592,"language":251,"meta":79,"style":79},[32,117320,117321],{"__ignoreMap":79},[100,117322,117323,117325,117327],{"class":102,"line":103},[100,117324,678],{"class":471},[100,117326,115929],{"class":106},[100,117328,115932],{"class":258},[19,117330,117331],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[73,117333,117335],{"className":249,"code":117334,"language":251,"meta":79,"style":79},"action = np.asarray(action, dtype=np.float32)\n",[32,117336,117337],{"__ignoreMap":79},[100,117338,117339,117341,117343,117345,117347,117349],{"class":102,"line":103},[100,117340,108684],{"class":258},[100,117342,472],{"class":471},[100,117344,115941],{"class":258},[100,117346,95052],{"class":6812},[100,117348,472],{"class":471},[100,117350,115038],{"class":258},[19,117352,117353,117354,233],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[32,117355,117119],{},[73,117357,117359],{"className":249,"code":117358,"language":251,"meta":79,"style":79},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[32,117360,117361],{"__ignoreMap":79},[100,117362,117363,117365,117367,117369,117371,117373,117375],{"class":102,"line":103},[100,117364,108684],{"class":258},[100,117366,472],{"class":471},[100,117368,108689],{"class":258},[100,117370,32386],{"class":117},[100,117372,115960],{"class":258},[100,117374,32386],{"class":117},[100,117376,115965],{"class":258},[19,117378,117379],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[73,117381,117383],{"className":249,"code":117382,"language":251,"meta":79,"style":79},"self.data.ctrl[:] = action\n",[32,117384,117385],{"__ignoreMap":79},[100,117386,117387,117389,117391,117393],{"class":102,"line":103},[100,117388,32386],{"class":117},[100,117390,115976],{"class":258},[100,117392,472],{"class":471},[100,117394,108712],{"class":258},[19,117396,117397],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[73,117399,117401],{"className":249,"code":117400,"language":251,"meta":79,"style":79},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[32,117402,117403,117419],{"__ignoreMap":79},[100,117404,117405,117407,117409,117411,117413,117415,117417],{"class":102,"line":103},[100,117406,1051],{"class":471},[100,117408,851],{"class":258},[100,117410,854],{"class":471},[100,117412,857],{"class":117},[100,117414,713],{"class":258},[100,117416,32386],{"class":117},[100,117418,115997],{"class":258},[100,117420,117421,117424,117426,117428,117430],{"class":102,"line":188},[100,117422,117423],{"class":258},"    mujoco.mj_step(",[100,117425,32386],{"class":117},[100,117427,115823],{"class":258},[100,117429,32386],{"class":117},[100,117431,115828],{"class":258},[19,117433,117434,117435,117438,117439,117441,117442,233],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[32,117436,117437],{},"frame_skip=5","，所以外部调用一次 ",[32,117440,115119],{},"，内部实际执行 5 次 ",[32,117443,44],{},[73,117445,117447],{"className":249,"code":117446,"language":251,"meta":79,"style":79},"self.steps += 1\n",[32,117448,117449],{"__ignoreMap":79},[100,117450,117451,117453,117455,117457],{"class":102,"line":103},[100,117452,32386],{"class":117},[100,117454,114948],{"class":258},[100,117456,11062],{"class":471},[100,117458,57253],{"class":117},[19,117460,117461],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[73,117463,117465],{"className":249,"code":117464,"language":251,"meta":79,"style":79},"obs = self._get_obs()\nreward = self._get_reward()\n",[32,117466,117467,117477],{"__ignoreMap":79},[100,117468,117469,117471,117473,117475],{"class":102,"line":103},[100,117470,112096],{"class":258},[100,117472,472],{"class":471},[100,117474,40427],{"class":117},[100,117476,116039],{"class":258},[100,117478,117479,117481,117483,117485],{"class":102,"line":188},[100,117480,112247],{"class":258},[100,117482,472],{"class":471},[100,117484,40427],{"class":117},[100,117486,116050],{"class":258},[19,117488,117489],{},"计算新的观测和奖励。",[73,117491,117493],{"className":249,"code":117492,"language":251,"meta":79,"style":79},"dist = float(np.linalg.norm(tip - target))\n",[32,117494,117495],{"__ignoreMap":79},[100,117496,117497,117499,117501,117503,117505,117507],{"class":102,"line":103},[100,117498,112838],{"class":258},[100,117500,472],{"class":471},[100,117502,111039],{"class":117},[100,117504,116093],{"class":258},[100,117506,2299],{"class":471},[100,117508,116098],{"class":258},[19,117510,117511],{},"计算末端到目标的距离，并转换成 Python float。",[73,117513,117514],{"className":249,"code":114919,"language":251,"meta":79,"style":79},[32,117515,117516,117528],{"__ignoreMap":79},[100,117517,117518,117520,117522,117524,117526],{"class":102,"line":103},[100,117519,114926],{"class":258},[100,117521,472],{"class":471},[100,117523,114931],{"class":258},[100,117525,2676],{"class":471},[100,117527,114936],{"class":117},[100,117529,117530,117532,117534,117536,117538,117540,117542],{"class":102,"line":188},[100,117531,114941],{"class":258},[100,117533,472],{"class":471},[100,117535,40427],{"class":117},[100,117537,114948],{"class":258},[100,117539,3331],{"class":471},[100,117541,40427],{"class":117},[100,117543,114955],{"class":258},[19,117545,117546],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[73,117548,117550],{"className":249,"code":117549,"language":251,"meta":79,"style":79},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[32,117551,117552,117565],{"__ignoreMap":79},[100,117553,117554,117557,117559,117561,117563],{"class":102,"line":103},[100,117555,117556],{"class":258},"info ",[100,117558,472],{"class":471},[100,117560,6046],{"class":258},[100,117562,116144],{"class":110},[100,117564,116147],{"class":258},[100,117566,117567,117569],{"class":102,"line":188},[100,117568,18627],{"class":471},[100,117570,116154],{"class":258},[19,117572,117573,117576],{},[32,117574,117575],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[73,117578,117580],{"className":249,"code":117579,"language":251,"meta":79,"style":79},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[32,117581,117582,117591],{"__ignoreMap":79},[100,117583,117584,117587,117589],{"class":102,"line":103},[100,117585,117586],{"class":258},"env ",[100,117588,472],{"class":471},[100,117590,116184],{"class":258},[100,117592,117593,117595,117597,117599,117601,117603,117605],{"class":102,"line":188},[100,117594,114642],{"class":258},[100,117596,472],{"class":471},[100,117598,116194],{"class":258},[100,117600,115808],{"class":6812},[100,117602,472],{"class":471},[100,117604,1366],{"class":117},[100,117606,809],{"class":258},[19,117608,117609,117610,117613],{},"创建环境并重置。",[32,117611,117612],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[73,117615,117617],{"className":249,"code":117616,"language":251,"meta":79,"style":79},"action = env.action_space.sample()\n",[32,117618,117619],{"__ignoreMap":79},[100,117620,117621,117623,117625],{"class":102,"line":103},[100,117622,108684],{"class":258},[100,117624,472],{"class":471},[100,117626,116263],{"class":258},[19,117628,117629],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,117631,1355],{"id":1354},[19,117633,1358],{},[73,117635,117638],{"className":117636,"code":117637,"language":78,"meta":79},[76],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[32,117639,117637],{"__ignoreMap":79},[19,117641,117642],{},"这个环境已经具备强化学习环境的基本结构。",[19,117644,117645],{},"主函数里使用随机动作：",[73,117647,117648],{"className":249,"code":117616,"language":251,"meta":79,"style":79},[32,117649,117650],{"__ignoreMap":79},[100,117651,117652,117654,117656],{"class":102,"line":103},[100,117653,108684],{"class":258},[100,117655,472],{"class":471},[100,117657,116263],{"class":258},[19,117659,117660],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,117662,1418],{"id":1417},[26,117664,117665,117668,117674,117683,117692,117701,117707],{},[29,117666,117667],{},"运行程序。",[29,117669,117670,117671,233],{},"确认 ",[32,117672,117673],{},"obs.shape == (10,)",[29,117675,112423,117676,117679,117680,233],{},[32,117677,117678],{},"env.action_space","，应类似 ",[32,117681,117682],{},"Box(-1.0, 1.0, (2,), float32)",[29,117684,1467,117685,117688,117689,233],{},[32,117686,117687],{},"self.max_steps = 10","，确认环境会更快 ",[32,117690,117691],{},"truncated=True",[29,117693,1444,117694,1448,117697,117700],{},[32,117695,117696],{},"terminated = dist \u003C 0.05",[32,117698,117699],{},"dist \u003C 0.2","，观察是否更容易结束。",[29,117702,1444,117703,117706],{},[32,117704,117705],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[29,117708,117709,117710,117712,117713,117716],{},"在 ",[32,117711,117575],{}," 里加入 ",[32,117714,117715],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,117718,1463],{"id":1462},[305,117720,117722],{"id":117721},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,117724,117725,117726,117728],{},"Gymnasium 的 ",[32,117727,108376],{}," 返回 5 个值:",[73,117730,117732],{"className":249,"code":117731,"language":251,"meta":79,"style":79},"obs, reward, terminated, truncated, info\n",[32,117733,117734],{"__ignoreMap":79},[100,117735,117736],{"class":102,"line":103},[100,117737,117731],{"class":258},[19,117739,117740],{},"不是旧 Gym 的 4 个值。",[305,117742,117744,117747],{"id":117743},"datactrl-action-维度错误",[32,117745,117746],{},"data.ctrl[:] = action"," 维度错误",[19,117749,104001],{},[73,117751,117753],{"className":249,"code":117752,"language":251,"meta":79,"style":79},"print(self.model.nu)\nprint(action.shape)\n",[32,117754,117755,117766],{"__ignoreMap":79},[100,117756,117757,117759,117761,117763],{"class":102,"line":103},[100,117758,1195],{"class":117},[100,117760,713],{"class":258},[100,117762,32386],{"class":117},[100,117764,117765],{"class":258},".model.nu)\n",[100,117767,117768,117770],{"class":102,"line":188},[100,117769,1195],{"class":117},[100,117771,117772],{"class":258},"(action.shape)\n",[19,117774,117775],{},"两者必须匹配。",[305,117777,117779],{"id":117778},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,117781,1473],{},[73,117783,117785],{"className":249,"code":117784,"language":251,"meta":79,"style":79},"mujoco.mj_forward(self.model, self.data)\n",[32,117786,117787],{"__ignoreMap":79},[100,117788,117789,117792,117794,117796,117798],{"class":102,"line":103},[100,117790,117791],{"class":258},"mujoco.mj_forward(",[100,117793,32386],{"class":117},[100,117795,115823],{"class":258},[100,117797,32386],{"class":117},[100,117799,115828],{"class":258},[305,117801,117803,117805],{"id":117802},"observation_space-维度和-obs-不一致",[32,117804,114842],{}," 维度和 obs 不一致",[19,117807,104053],{},[73,117809,117811],{"className":249,"code":117810,"language":251,"meta":79,"style":79},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[32,117812,117813,117823,117830],{"__ignoreMap":79},[100,117814,117815,117817,117819,117821],{"class":102,"line":103},[100,117816,112096],{"class":258},[100,117818,472],{"class":471},[100,117820,40427],{"class":117},[100,117822,116039],{"class":258},[100,117824,117825,117827],{"class":102,"line":188},[100,117826,1195],{"class":117},[100,117828,117829],{"class":258},"(obs.shape)\n",[100,117831,117832,117834,117836,117838],{"class":102,"line":199},[100,117833,1195],{"class":117},[100,117835,713],{"class":258},[100,117837,32386],{"class":117},[100,117839,117840],{"class":258},".observation_space.shape)\n",[19,117842,117843],{},"两者必须一致。本章观测是：",[73,117845,117848],{"className":117846,"code":117847,"language":78,"meta":79},[76],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[32,117849,117847],{"__ignoreMap":79},[305,117851,117853],{"id":117852},"action-超过范围","action 超过范围",[19,117855,117856],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[73,117858,117859],{"className":249,"code":117358,"language":251,"meta":79,"style":79},[32,117860,117861],{"__ignoreMap":79},[100,117862,117863,117865,117867,117869,117871,117873,117875],{"class":102,"line":103},[100,117864,108684],{"class":258},[100,117866,472],{"class":471},[100,117868,108689],{"class":258},[100,117870,32386],{"class":117},[100,117872,115960],{"class":258},[100,117874,32386],{"class":117},[100,117876,115965],{"class":258},[19,117878,117879,117880,233],{},"这能避免无效动作直接写入 ",[32,117881,372],{},[305,117883,117885],{"id":117884},"忘记返回-info","忘记返回 info",[19,117887,117725,117888,218,117890,117892],{},[32,117889,71610],{},[32,117891,108376],{}," 都会返回 info：",[73,117894,117895],{"className":249,"code":114635,"language":251,"meta":79,"style":79},[32,117896,117897,117905],{"__ignoreMap":79},[100,117898,117899,117901,117903],{"class":102,"line":103},[100,117900,114642],{"class":258},[100,117902,472],{"class":471},[100,117904,114647],{"class":258},[100,117906,117907,117909,117911],{"class":102,"line":188},[100,117908,114652],{"class":258},[100,117910,472],{"class":471},[100,117912,114657],{"class":258},[19,117914,117915,117916,233],{},"即使暂时没有额外信息，也返回 ",[32,117917,34015],{},[14,117919,117921],{"id":117920},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,117923,117924],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[26,117926,117927,117930,117933,117936,117939,117942],{},[29,117928,117929],{},"更稳定的 reward。",[29,117931,117932],{},"合理的 episode 长度。",[29,117934,117935],{},"可重复的随机目标采样。",[29,117937,117938],{},"render 接口。",[29,117940,117941],{},"环境注册代码。",[29,117943,117944],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,117946,117947],{},"如果只是自己写训练循环，最小形式是：",[73,117949,117951],{"className":249,"code":117950,"language":251,"meta":79,"style":79},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n\nfor _ in range(1000):\n    action = env.action_space.sample()\n    obs, reward, terminated, truncated, info = env.step(action)\n    if terminated or truncated:\n        obs, info = env.reset()\n",[32,117952,117953,117961,117977,117981,117997,118006,118015,118025],{"__ignoreMap":79},[100,117954,117955,117957,117959],{"class":102,"line":103},[100,117956,117586],{"class":258},[100,117958,472],{"class":471},[100,117960,116184],{"class":258},[100,117962,117963,117965,117967,117969,117971,117973,117975],{"class":102,"line":188},[100,117964,114642],{"class":258},[100,117966,472],{"class":471},[100,117968,116194],{"class":258},[100,117970,115808],{"class":6812},[100,117972,472],{"class":471},[100,117974,1366],{"class":117},[100,117976,809],{"class":258},[100,117978,117979],{"class":102,"line":199},[100,117980,570],{"emptyLinePlaceholder":569},[100,117982,117983,117985,117987,117989,117991,117993,117995],{"class":102,"line":532},[100,117984,1051],{"class":471},[100,117986,851],{"class":258},[100,117988,854],{"class":471},[100,117990,857],{"class":117},[100,117992,713],{"class":258},[100,117994,8006],{"class":117},[100,117996,865],{"class":258},[100,117998,117999,118002,118004],{"class":102,"line":577},[100,118000,118001],{"class":258},"    action ",[100,118003,472],{"class":471},[100,118005,116263],{"class":258},[100,118007,118008,118011,118013],{"class":102,"line":589},[100,118009,118010],{"class":258},"    obs, reward, terminated, truncated, info ",[100,118012,472],{"class":471},[100,118014,114657],{"class":258},[100,118016,118017,118019,118021,118023],{"class":102,"line":595},[100,118018,4702],{"class":471},[100,118020,116329],{"class":258},[100,118022,116332],{"class":471},[100,118024,116335],{"class":258},[100,118026,118027,118030,118032],{"class":102,"line":601},[100,118028,118029],{"class":258},"        obs, info ",[100,118031,472],{"class":471},[100,118033,114647],{"class":258},[14,118035,118037],{"id":118036},"_9本章小结","9.本章小结",[19,118039,118040],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[73,118042,118045],{"className":118043,"code":118044,"language":78,"meta":79},[76],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[32,118046,118044],{"__ignoreMap":79},[19,118048,118049],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[1677,118051,118052],{},"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":79,"searchDepth":188,"depth":188,"links":118054},[118055,118056,118057,118064,118068,118069,118070,118080,118081],{"id":16,"depth":188,"text":17},{"id":87,"depth":188,"text":88},{"id":242,"depth":188,"text":243,"children":118058},[118059,118061,118063],{"id":114866,"depth":199,"text":118060},"terminated 和 truncated 的区别",{"id":114969,"depth":199,"text":118062},"observation_space 和 action_space",{"id":115096,"depth":199,"text":115097},{"id":537,"depth":188,"text":538,"children":118065},[118066,118067],{"id":1008,"depth":199,"text":1008},{"id":1131,"depth":199,"text":1131},{"id":1354,"depth":188,"text":1355},{"id":1417,"depth":188,"text":1418},{"id":1462,"depth":188,"text":1463,"children":118071},[118072,118073,118075,118076,118078,118079],{"id":117721,"depth":199,"text":117722},{"id":117743,"depth":199,"text":118074},"data.ctrl[:] = action 维度错误",{"id":117778,"depth":199,"text":117779},{"id":117802,"depth":199,"text":118077},"observation_space 维度和 obs 不一致",{"id":117852,"depth":199,"text":117853},{"id":117884,"depth":199,"text":117885},{"id":117920,"depth":188,"text":117921},{"id":118036,"depth":188,"text":118037},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":114619,"description":79},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":118088,"title":118089,"body":118090,"description":118513,"extension":1708,"meta":118514,"navigation":569,"path":118515,"seo":118516,"stem":118517,"__hash__":118518},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":118091,"toc":118503},[118092,118096,118099,118102,118122,118128,118134,118144,118147,118150,118170,118173,118177,118180,118186,118189,118203,118206,118209,118283,118286,118292,118295,118318,118321,118371,118374,118380,118383,118386,118389,118408,118411,118417,118420,118423,118426,118446,118449,118452,118455,118500],[10,118093,118095],{"id":118094},"mujoco-学习","MuJoCo 学习",[19,118097,118098],{},"初版",[19,118100,118101],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[26,118103,118104,118107,118110,118119],{},[29,118105,118106],{},"MuJoCo 模型文件在描述什么。",[29,118108,118109],{},"Python 代码怎样读取和推进仿真。",[29,118111,118112,56,118114,56,118116,118118],{},[32,118113,55],{},[32,118115,59],{},[32,118117,62],{}," 这些数组为什么重要。",[29,118120,118121],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,118123,118124,118125,118127],{},"默认环境为 Fedora 44、Python >= 3.10、",[32,118126,102557],{}," 官方 Python bindings。",[19,118129,118130,118131,118133],{},"注意：本文禁止使用 ",[32,118132,102543],{},"。所有示例均使用：",[73,118135,118136],{"className":249,"code":103074,"language":251,"meta":79,"style":79},[32,118137,118138],{"__ignoreMap":79},[100,118139,118140,118142],{"class":102,"line":103},[100,118141,548],{"class":471},[100,118143,551],{"class":258},[14,118145,118146],{"id":118146},"适合谁阅读",[19,118148,118149],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[26,118151,118152,118155,118158,118161],{},[29,118153,118154],{},"没学过 MuJoCo，只会一点 Python。",[29,118156,118157],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[29,118159,118160],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[29,118162,118163,118164,118166,118167,118169],{},"以前接触过 ",[32,118165,102543],{},"，现在想迁移到官方 ",[32,118168,102551],{}," Python bindings。",[19,118171,118172],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,118174,118176],{"id":118175},"mujoco-到底是什么","MuJoCo 到底是什么",[19,118178,118179],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[73,118181,118184],{"className":118182,"code":118183,"language":78,"meta":79},[76],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[32,118185,118183],{"__ignoreMap":79},[19,118187,118188],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[26,118190,118191,118194,118197,118200],{},[29,118192,118193],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[29,118195,118196],{},"快速测试控制算法，不必一开始就上真实机器人。",[29,118198,118199],{},"生成强化学习环境。",[29,118201,118202],{},"采集状态、动作、图像、奖励等训练数据。",[14,118204,118205],{"id":118205},"学习前的心智模型",[19,118207,118208],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[319,118210,118211,118223],{},[322,118212,118213],{},[325,118214,118215,118218,118221],{},[328,118216,118217],{"align":330},"部分",[328,118219,118220],{"align":330},"负责什么",[328,118222,22768],{"align":330},[339,118224,118225,118236,118248,118260,118272],{},[325,118226,118227,118230,118233],{},[344,118228,118229],{"align":330},"MJCF XML",[344,118231,118232],{"align":330},"定义世界和机器人结构",[344,118234,118235],{"align":330},"地面、盒子、关节、电机、摄像头",[325,118237,118238,118242,118245],{},[344,118239,118240],{"align":330},[32,118241,232],{},[344,118243,118244],{"align":330},"编译后的静态模型",[344,118246,118247],{"align":330},"有几个关节、有几个电机、时间步长是多少",[325,118249,118250,118254,118257],{},[344,118251,118252],{"align":330},[32,118253,102263],{},[344,118255,118256],{"align":330},"运行中的动态状态",[344,118258,118259],{"align":330},"当前时间、位置、速度、电机输入",[325,118261,118262,118266,118269],{},[344,118263,118264],{"align":330},[32,118265,44],{},[344,118267,118268],{"align":330},"推进一步物理仿真",[344,118270,118271],{"align":330},"根据重力、力、碰撞更新状态",[325,118273,118274,118277,118280],{},[344,118275,118276],{"align":330},"Viewer \u002F Renderer",[344,118278,118279],{"align":330},"把仿真显示出来",[344,118281,118282],{"align":330},"打开窗口或保存图片",[19,118284,118285],{},"一句话总结：",[73,118287,118290],{"className":118288,"code":118289,"language":78,"meta":79},[76],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[32,118291,118289],{"__ignoreMap":79},[19,118293,118294],{},"参考来源：",[2773,118296,118297,118304,118311],{},[29,118298,118299,118300],{},"MuJoCo Python 官方文档：",[2006,118301,118302],{"href":118302,"rel":118303},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[25442],[29,118305,118306,118307],{},"MuJoCo XML Reference：",[2006,118308,118309],{"href":118309,"rel":118310},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[25442],[29,118312,118313,118314],{},"MuJoCo Overview：",[2006,118315,118316],{"href":118316,"rel":118317},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[25442],[14,118319,118320],{"id":118320},"章节目录",[26,118322,118323,118329,118335,118341,118347,118353,118359,118365],{},[29,118324,118325],{},[2006,118326,118328],{"href":118327},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[29,118330,118331],{},[2006,118332,118334],{"href":118333},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[29,118336,118337],{},[2006,118338,118340],{"href":118339},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[29,118342,118343],{},[2006,118344,118346],{"href":118345},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[29,118348,118349],{},[2006,118350,118352],{"href":118351},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[29,118354,118355],{},[2006,118356,118358],{"href":118357},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[29,118360,118361],{},[2006,118362,118364],{"href":118363},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[29,118366,118367],{},[2006,118368,118370],{"href":118369},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,118372,118373],{"id":118373},"推荐学习路线",[73,118375,118378],{"className":118376,"code":118377,"language":78,"meta":79},[76],"环境安装\n→ XML \u002F MJCF 建模\n→ MjModel \u002F MjData\n→ mj_step 控制循环\n→ joint \u002F actuator\n→ viewer \u002F renderer\n→ cartpole \u002F reacher\n→ Gymnasium 环境接口\n→ imitation learning \u002F VLA 数据采集\n",[32,118379,118377],{"__ignoreMap":79},[19,118381,118382],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,118384,118385],{"id":118385},"建议的目录结构",[19,118387,118388],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[73,118390,118392],{"className":94,"code":118391,"language":96,"meta":79,"style":79},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[32,118393,118394,118402],{"__ignoreMap":79},[100,118395,118396,118398,118400],{"class":102,"line":103},[100,118397,102787],{"class":106},[100,118399,30786],{"class":117},[100,118401,102792],{"class":110},[100,118403,118404,118406],{"class":102,"line":188},[100,118405,102797],{"class":117},[100,118407,102792],{"class":110},[19,118409,118410],{},"每一章的代码都单独保存：",[73,118412,118415],{"className":118413,"code":118414,"language":78,"meta":79},[76],"mujoco_tutorial\u002F\n├── ch1_first_sim.py\n├── ch2_xml_basic.py\n├── ch3_python_state.py\n├── ch4_joint_motor.py\n├── ch5_viewer.py\n├── ch5_renderer.py\n├── ch6_cartpole.py\n├── ch7_reacher.py\n└── ch8_gym_env.py\n",[32,118416,118414],{"__ignoreMap":79},[19,118418,118419],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,118421,118422],{"id":118422},"学习方法",[19,118424,118425],{},"每章建议按这个顺序操作：",[26,118427,118428,118431,118434,118437,118440,118443],{},[29,118429,118430],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[29,118432,118433],{},"复制最小可运行代码，保存成指定文件。",[29,118435,118436],{},"运行代码，确认没有报错。",[29,118438,118439],{},"对照“运行结果说明”理解输出。",[29,118441,118442],{},"做“验证步骤”，主动改一两个参数。",[29,118444,118445],{},"遇到报错先看“常见错误与解决方案”。",[19,118447,118448],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,118450,118451],{"id":118451},"全局排错顺序",[19,118453,118454],{},"遇到问题时，按下面顺序查：",[26,118456,118457,118463,118469,118474,118477,118480,118487,118497],{},[29,118458,118459,118460],{},"Python 环境是否激活：",[32,118461,118462],{},"which python",[29,118464,118465,118466],{},"MuJoCo 是否能导入：",[32,118467,118468],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[29,118470,118471,118472],{},"是否误装了 ",[32,118473,102543],{},[29,118475,118476],{},"XML 标签是否闭合、属性是否拼写正确",[29,118478,118479],{},"actuator 引用的 joint 名字是否存在",[29,118481,118482,118484,118485],{},[32,118483,372],{}," 的长度是否等于 ",[32,118486,103648],{},[29,118488,1467,118489,288,118491,118493,118494],{},[32,118490,55],{},[32,118492,59],{}," 后是否调用了 ",[32,118495,118496],{},"mujoco.mj_forward",[29,118498,118499],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[1677,118501,118502],{},"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":79,"searchDepth":188,"depth":188,"links":118504},[118505,118506,118507,118508,118509,118510,118511,118512],{"id":118146,"depth":188,"text":118146},{"id":118175,"depth":188,"text":118176},{"id":118205,"depth":188,"text":118205},{"id":118320,"depth":188,"text":118320},{"id":118373,"depth":188,"text":118373},{"id":118385,"depth":188,"text":118385},{"id":118422,"depth":188,"text":118422},{"id":118451,"depth":188,"text":118451},"仿真搭建。",{"category":24960},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":118089,"description":118513},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":118520,"title":118521,"body":118522,"description":24958,"extension":1708,"meta":118977,"navigation":569,"path":118978,"seo":118979,"stem":118980,"__hash__":118981},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":118523,"toc":118975},[118524,118527,118530,118536,118972],[10,118525,118521],{"id":118526},"_1-最常用的基本操作更新",[19,118528,118529],{},"装linux系统教程：",[19,118531,118532],{},[2006,118533,118534],{"href":118534,"rel":118535},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[25442],[73,118537,118541],{"className":118538,"code":118539,"language":118540,"meta":79,"style":79},"language-Bash shiki shiki-themes github-light github-dark","#更新相关的知识\n# 更新软件包列表（从服务器获取最新软件信息）\nsudo apt update\n# 升级所有可更新的软件包（不删除旧包）\nsudo apt upgrade\n#更新和升级软件包\nsudo apt update && sudo apt upgrade -y\n#列出可更新的软件包及版本信息\napt list --upgradable\n#彻底升级（处理依赖关系，可能删除旧包）\nsudo apt full-upgrade\n#设置指定版本\nsudo apt install \u003Cpackage_name>=\u003Cversion_number>\n#只安装软件包不升级\nsudo apt install \u003Cpackage_name> --no-upgrade\n#只升级，不存在就不安装\nsudo apt install \u003Cpackage_name> --only-upgrade\n\n#安装指定的软件命令\nsudo apt install \u003Cpackage_name>\n\n#安装多个软件包\nsudo apt install \u003Cpackage_1> \u003Cpackage_2> \u003Cpackage_3>\n\n#更新指定的软件命令\nsudo apt update \u003Cpackage_name>\n\n#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\napt show \u003Cpackage_name>\n\n#删除软件包命令\nsudo apt remove \u003Cpackage_name>\n\n# 清理旧版本和缓存（释放磁盘空间）\nsudo apt autoremove  # 删除不再需要的依赖和库文件\nsudo apt clean       # 清理下载的缓存包\n\n#移除软件包及配置文件\nsudo apt purge \u003Cpackage_name>\n\n#查找软件包命令\nsudo apt search \u003Ckeyword>\n\n#列出所有已安装的包\napt list --installed\n\n#列出所有已安装的包的版本信息\napt list --all-versions\n","Bash",[32,118542,118543,118548,118553,118562,118567,118576,118581,118601,118606,118617,118622,118631,118636,118664,118669,118688,118693,118712,118716,118721,118737,118741,118746,118776,118780,118785,118801,118805,118810,118825,118829,118834,118850,118854,118859,118871,118883,118887,118892,118909,118913,118918,118936,118940,118945,118954,118958,118963],{"__ignoreMap":79},[100,118544,118545],{"class":102,"line":103},[100,118546,118547],{"class":1836},"#更新相关的知识\n",[100,118549,118550],{"class":102,"line":188},[100,118551,118552],{"class":1836},"# 更新软件包列表（从服务器获取最新软件信息）\n",[100,118554,118555,118557,118560],{"class":102,"line":199},[100,118556,107],{"class":106},[100,118558,118559],{"class":110}," apt",[100,118561,27816],{"class":110},[100,118563,118564],{"class":102,"line":532},[100,118565,118566],{"class":1836},"# 升级所有可更新的软件包（不删除旧包）\n",[100,118568,118569,118571,118573],{"class":102,"line":577},[100,118570,107],{"class":106},[100,118572,118559],{"class":110},[100,118574,118575],{"class":110}," upgrade\n",[100,118577,118578],{"class":102,"line":589},[100,118579,118580],{"class":1836},"#更新和升级软件包\n",[100,118582,118583,118585,118587,118590,118592,118594,118596,118599],{"class":102,"line":595},[100,118584,107],{"class":106},[100,118586,118559],{"class":110},[100,118588,118589],{"class":110}," update",[100,118591,27764],{"class":258},[100,118593,107],{"class":106},[100,118595,118559],{"class":110},[100,118597,118598],{"class":110}," upgrade",[100,118600,185],{"class":117},[100,118602,118603],{"class":102,"line":601},[100,118604,118605],{"class":1836},"#列出可更新的软件包及版本信息\n",[100,118607,118608,118611,118614],{"class":102,"line":606},[100,118609,118610],{"class":106},"apt",[100,118612,118613],{"class":110}," list",[100,118615,118616],{"class":117}," --upgradable\n",[100,118618,118619],{"class":102,"line":612},[100,118620,118621],{"class":1836},"#彻底升级（处理依赖关系，可能删除旧包）\n",[100,118623,118624,118626,118628],{"class":102,"line":618},[100,118625,107],{"class":106},[100,118627,118559],{"class":110},[100,118629,118630],{"class":110}," full-upgrade\n",[100,118632,118633],{"class":102,"line":623},[100,118634,118635],{"class":1836},"#设置指定版本\n",[100,118637,118638,118640,118642,118644,118646,118649,118651,118653,118655,118657,118660,118662],{"class":102,"line":629},[100,118639,107],{"class":106},[100,118641,118559],{"class":110},[100,118643,114],{"class":110},[100,118645,30473],{"class":471},[100,118647,118648],{"class":110},"package_nam",[100,118650,1852],{"class":258},[100,118652,2726],{"class":471},[100,118654,472],{"class":110},[100,118656,2676],{"class":471},[100,118658,118659],{"class":110},"version_numbe",[100,118661,2436],{"class":258},[100,118663,52861],{"class":471},[100,118665,118666],{"class":102,"line":635},[100,118667,118668],{"class":1836},"#只安装软件包不升级\n",[100,118670,118671,118673,118675,118677,118679,118681,118683,118685],{"class":102,"line":641},[100,118672,107],{"class":106},[100,118674,118559],{"class":110},[100,118676,114],{"class":110},[100,118678,30473],{"class":471},[100,118680,118648],{"class":110},[100,118682,1852],{"class":258},[100,118684,2726],{"class":471},[100,118686,118687],{"class":117}," --no-upgrade\n",[100,118689,118690],{"class":102,"line":647},[100,118691,118692],{"class":1836},"#只升级，不存在就不安装\n",[100,118694,118695,118697,118699,118701,118703,118705,118707,118709],{"class":102,"line":653},[100,118696,107],{"class":106},[100,118698,118559],{"class":110},[100,118700,114],{"class":110},[100,118702,30473],{"class":471},[100,118704,118648],{"class":110},[100,118706,1852],{"class":258},[100,118708,2726],{"class":471},[100,118710,118711],{"class":117}," --only-upgrade\n",[100,118713,118714],{"class":102,"line":659},[100,118715,570],{"emptyLinePlaceholder":569},[100,118717,118718],{"class":102,"line":665},[100,118719,118720],{"class":1836},"#安装指定的软件命令\n",[100,118722,118723,118725,118727,118729,118731,118733,118735],{"class":102,"line":670},[100,118724,107],{"class":106},[100,118726,118559],{"class":110},[100,118728,114],{"class":110},[100,118730,30473],{"class":471},[100,118732,118648],{"class":110},[100,118734,1852],{"class":258},[100,118736,52861],{"class":471},[100,118738,118739],{"class":102,"line":675},[100,118740,570],{"emptyLinePlaceholder":569},[100,118742,118743],{"class":102,"line":699},[100,118744,118745],{"class":1836},"#安装多个软件包\n",[100,118747,118748,118750,118752,118754,118756,118759,118762,118764,118766,118769,118771,118773],{"class":102,"line":708},[100,118749,107],{"class":106},[100,118751,118559],{"class":110},[100,118753,114],{"class":110},[100,118755,30473],{"class":471},[100,118757,118758],{"class":110},"package_",[100,118760,118761],{"class":471},"1>",[100,118763,30473],{"class":471},[100,118765,118758],{"class":110},[100,118767,118768],{"class":471},"2>",[100,118770,30473],{"class":471},[100,118772,118758],{"class":110},[100,118774,118775],{"class":471},"3>\n",[100,118777,118778],{"class":102,"line":722},[100,118779,570],{"emptyLinePlaceholder":569},[100,118781,118782],{"class":102,"line":735},[100,118783,118784],{"class":1836},"#更新指定的软件命令\n",[100,118786,118787,118789,118791,118793,118795,118797,118799],{"class":102,"line":754},[100,118788,107],{"class":106},[100,118790,118559],{"class":110},[100,118792,118589],{"class":110},[100,118794,30473],{"class":471},[100,118796,118648],{"class":110},[100,118798,1852],{"class":258},[100,118800,52861],{"class":471},[100,118802,118803],{"class":102,"line":771},[100,118804,570],{"emptyLinePlaceholder":569},[100,118806,118807],{"class":102,"line":776},[100,118808,118809],{"class":1836},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[100,118811,118812,118814,118817,118819,118821,118823],{"class":102,"line":781},[100,118813,118610],{"class":106},[100,118815,118816],{"class":110}," show",[100,118818,30473],{"class":471},[100,118820,118648],{"class":110},[100,118822,1852],{"class":258},[100,118824,52861],{"class":471},[100,118826,118827],{"class":102,"line":796},[100,118828,570],{"emptyLinePlaceholder":569},[100,118830,118831],{"class":102,"line":812},[100,118832,118833],{"class":1836},"#删除软件包命令\n",[100,118835,118836,118838,118840,118842,118844,118846,118848],{"class":102,"line":823},[100,118837,107],{"class":106},[100,118839,118559],{"class":110},[100,118841,27653],{"class":110},[100,118843,30473],{"class":471},[100,118845,118648],{"class":110},[100,118847,1852],{"class":258},[100,118849,52861],{"class":471},[100,118851,118852],{"class":102,"line":828},[100,118853,570],{"emptyLinePlaceholder":569},[100,118855,118856],{"class":102,"line":840},[100,118857,118858],{"class":1836},"# 清理旧版本和缓存（释放磁盘空间）\n",[100,118860,118861,118863,118865,118868],{"class":102,"line":845},[100,118862,107],{"class":106},[100,118864,118559],{"class":110},[100,118866,118867],{"class":110}," autoremove",[100,118869,118870],{"class":1836},"  # 删除不再需要的依赖和库文件\n",[100,118872,118873,118875,118877,118880],{"class":102,"line":868},[100,118874,107],{"class":106},[100,118876,118559],{"class":110},[100,118878,118879],{"class":110}," clean",[100,118881,118882],{"class":1836},"       # 清理下载的缓存包\n",[100,118884,118885],{"class":102,"line":874},[100,118886,570],{"emptyLinePlaceholder":569},[100,118888,118889],{"class":102,"line":879},[100,118890,118891],{"class":1836},"#移除软件包及配置文件\n",[100,118893,118894,118896,118898,118901,118903,118905,118907],{"class":102,"line":889},[100,118895,107],{"class":106},[100,118897,118559],{"class":110},[100,118899,118900],{"class":110}," purge",[100,118902,30473],{"class":471},[100,118904,118648],{"class":110},[100,118906,1852],{"class":258},[100,118908,52861],{"class":471},[100,118910,118911],{"class":102,"line":894},[100,118912,570],{"emptyLinePlaceholder":569},[100,118914,118915],{"class":102,"line":900},[100,118916,118917],{"class":1836},"#查找软件包命令\n",[100,118919,118920,118922,118924,118927,118929,118932,118934],{"class":102,"line":910},[100,118921,107],{"class":106},[100,118923,118559],{"class":110},[100,118925,118926],{"class":110}," search",[100,118928,30473],{"class":471},[100,118930,118931],{"class":110},"keywor",[100,118933,2081],{"class":258},[100,118935,52861],{"class":471},[100,118937,118938],{"class":102,"line":915},[100,118939,570],{"emptyLinePlaceholder":569},[100,118941,118942],{"class":102,"line":929},[100,118943,118944],{"class":1836},"#列出所有已安装的包\n",[100,118946,118947,118949,118951],{"class":102,"line":935},[100,118948,118610],{"class":106},[100,118950,118613],{"class":110},[100,118952,118953],{"class":117}," --installed\n",[100,118955,118956],{"class":102,"line":945},[100,118957,570],{"emptyLinePlaceholder":569},[100,118959,118960],{"class":102,"line":950},[100,118961,118962],{"class":1836},"#列出所有已安装的包的版本信息\n",[100,118964,118965,118967,118969],{"class":102,"line":955},[100,118966,118610],{"class":106},[100,118968,118613],{"class":110},[100,118970,118971],{"class":117}," --all-versions\n",[1677,118973,118974],{},"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":79,"searchDepth":188,"depth":188,"links":118976},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":118521,"description":24958},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":118983,"title":118984,"body":118985,"description":24958,"extension":1708,"meta":119726,"navigation":569,"path":119727,"seo":119728,"stem":119729,"__hash__":119730},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":118986,"toc":119713},[118987,118990,118994,118997,119003,119007,119011,119017,119022,119027,119032,119037,119042,119045,119048,119051,119054,119058,119061,119066,119069,119074,119077,119082,119089,119092,119095,119098,119101,119104,119115,119119,119123,119128,119133,119137,119142,119146,119151,119155,119159,119164,119167,119212,119217,119221,119225,119230,119236,119241,119251,119256,119266,119271,119276,119303,119307,119310,119315,119318,119343,119347,119352,119355,119360,119365,119385,119390,119393,119408,119412,119465,119468,119473,119477,119480,119495,119498,119501,119506,119510,119514,119517,119521,119525,119528,119533,119538,119542,119549,119557,119560,119567,119572,119577,119580,119585,119592,119597,119604,119608,119610,119615,119619,119622,119625,119630,119633,119638,119641,119646,119651,119656,119660,119665,119669,119710],[10,118988,118984],{"id":118989},"_2-linux装机教程",[14,118991,118993],{"id":118992},"_21-实体机","2.1 实体机",[19,118995,118996],{},"使用清华源：（Ubuntu24.04）",[19,118998,118999],{},[2006,119000,119001],{"href":119001,"rel":119002},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[25442],[14,119004,119006],{"id":119005},"_22-普通虚拟机","2.2 普通虚拟机",[305,119008,119010],{"id":119009},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,119012,119013],{},[2006,119014,119015],{"href":119015,"rel":119016},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[25442],[19,119018,119019],{},[3095,119020],{"alt":79,"src":119021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,119023,119024],{},[3095,119025],{"alt":79,"src":119026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,119028,119029],{},[3095,119030],{"alt":79,"src":119031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,119033,119034],{},[3095,119035],{"alt":79,"src":119036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,119038,119039],{},[3095,119040],{"alt":79,"src":119041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,119043,119044],{},"内存4G（4096MB）；",[19,119046,119047],{},"CPU给4个核；",[19,119049,119050],{},"硬盘动态分配60G；",[19,119052,119053],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[305,119055,119057],{"id":119056},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,119059,119060],{},"按照1.1的步骤下载Ubuntu",[19,119062,119063],{},[3095,119064],{"alt":79,"src":119065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,119067,119068],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,119070,119071],{},[3095,119072],{"alt":79,"src":119073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,119075,119076],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,119078,119079],{},[3095,119080],{"alt":79,"src":119081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,119083,119084,119085,119088],{},"选择“正常安装”(找不到都用Alt+F7)， ",[1921,119086,119087],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,119090,119091],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,119093,119094],{},"将改动写入磁盘吗 继续",[19,119096,119097],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,119099,119100],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,119102,119103],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,119105,119106,119107,119110,119111,119114],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[1921,119108,119109],{},"除了"," 选不发送系统信息与不升级之外， ",[1921,119112,119113],{},"其它"," 都跳过或前进）",[305,119116,119118],{"id":119117},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[23579,119120,119122],{"id":119121},"_2231-全屏","2.2.3.1 全屏",[19,119124,119125],{},[3095,119126],{"alt":79,"src":119127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,119129,119130],{},[3095,119131],{"alt":79,"src":119132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[23579,119134,119136],{"id":119135},"_2232-文件交换","2.2.3.2 文件交换",[19,119138,119139],{},[3095,119140],{"alt":79,"src":119141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[23579,119143,119145],{"id":119144},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,119147,119148],{},[3095,119149],{"alt":79,"src":119150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,119152,119154],{"id":119153},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[305,119156,119158],{"id":119157},"_231-简介与优缺点","2.3.1 简介与优缺点",[26,119160,119161],{},[29,119162,119163],{},"什么情况下推荐？",[19,119165,119166],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[26,119168,119169],{"start":188},[29,119170,119171,119172],{},"优缺点：",[26,119173,119174,119204],{},[29,119175,119176,119177],{},"优点：",[26,119178,119179,119182,119189,119192,119195,119198,119201],{},[29,119180,119181],{},"WSL2是最好的Linux发行版;(bushi)",[29,119183,119184,119185,119188],{},"性能损耗极低。且比在Windows上跑深度性能 ",[1921,119186,119187],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[29,119190,119191],{},"非常方便调用USB设备，可以USB直通;",[29,119193,119194],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[29,119196,119197],{},"非常方便Win与WSL2互相传文件等协同操作;",[29,119199,119200],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[29,119202,119203],{},"非常方便使用Windows的VScode远程开发;",[29,119205,119206,119207],{},"缺点：",[26,119208,119209],{},[29,119210,119211],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,119213,119214],{},[3095,119215],{"alt":79,"src":119216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[305,119218,119220],{"id":119219},"_232-安装教程","2.3.2 安装教程",[23579,119222,119224],{"id":119223},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[26,119226,119227],{},[29,119228,119229],{},"方法一(图形界面)",[19,119231,119232,119233,1646],{},"用Win+R输入",[32,119234,119235],{},"appwiz.cpl",[19,119237,119238],{},[3095,119239],{"alt":79,"src":119240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,119242,119243,119244,119247,119248,28045],{},"点击OK进入 ",[1921,119245,119246],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[1921,119249,119250],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,119252,119253],{},[3095,119254],{"alt":79,"src":119255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,119257,119258,119259,218,119262,119265],{},"选择 ",[1921,119260,119261],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[1921,119263,119264],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,119267,119268],{},[3095,119269],{"alt":79,"src":119270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[26,119272,119273],{"start":188},[29,119274,119275],{},"方法二(命令行)",[73,119277,119281],{"className":119278,"code":119279,"language":119280,"meta":79,"style":79},"language-PowerShell shiki shiki-themes github-light github-dark","# 开启 Linux 子系统\ndism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n# 开启虚拟机平台\ndism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n","PowerShell",[32,119282,119283,119288,119293,119298],{"__ignoreMap":79},[100,119284,119285],{"class":102,"line":103},[100,119286,119287],{},"# 开启 Linux 子系统\n",[100,119289,119290],{"class":102,"line":188},[100,119291,119292],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[100,119294,119295],{"class":102,"line":199},[100,119296,119297],{},"# 开启虚拟机平台\n",[100,119299,119300],{"class":102,"line":532},[100,119301,119302],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[23579,119304,119306],{"id":119305},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,119308,119309],{},"用管理员权限打开powershell",[19,119311,119312],{},[3095,119313],{"alt":79,"src":119314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,119316,119317],{},"升级WSL并设置默认版本为WSL2",[73,119319,119321],{"className":119278,"code":119320,"language":119280,"meta":79,"style":79},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[32,119322,119323,119328,119333,119338],{"__ignoreMap":79},[100,119324,119325],{"class":102,"line":103},[100,119326,119327],{},"# 更新 wsl\n",[100,119329,119330],{"class":102,"line":188},[100,119331,119332],{},"wsl --update\n",[100,119334,119335],{"class":102,"line":199},[100,119336,119337],{},"# 将 wsl 版本设置为 wsl2\n",[100,119339,119340],{"class":102,"line":532},[100,119341,119342],{},"wsl --set-default-version 2\n",[23579,119344,119346],{"id":119345},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[26,119348,119349],{},[29,119350,119351],{},"方式一(商店下载)",[19,119353,119354],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,119356,119357],{},[3095,119358],{"alt":79,"src":119359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[26,119361,119362],{"start":188},[29,119363,119364],{},"方式二(命令行安装)",[73,119366,119368],{"className":119278,"code":119367,"language":119280,"meta":79,"style":79},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[32,119369,119370,119375,119380],{"__ignoreMap":79},[100,119371,119372],{"class":102,"line":103},[100,119373,119374],{},"# 列出可安装的 Linux 版本\n",[100,119376,119377],{"class":102,"line":188},[100,119378,119379],{},"#（需要科学手段）\n",[100,119381,119382],{"class":102,"line":199},[100,119383,119384],{},"wsl --list --online\n",[19,119386,119387],{},[3095,119388],{"alt":79,"src":119389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,119391,119392],{},"选择对应发行版并安装",[73,119394,119396],{"className":119278,"code":119395,"language":119280,"meta":79,"style":79},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[32,119397,119398,119403],{"__ignoreMap":79},[100,119399,119400],{"class":102,"line":103},[100,119401,119402],{},"# Ubuntu安装完毕后需要重启系统\n",[100,119404,119405],{"class":102,"line":188},[100,119406,119407],{},"wsl --install -d Ubuntu-24.04\n",[23579,119409,119411],{"id":119410},"_2324-查看系统状态","2.3.2.4 查看系统状态",[73,119413,119415],{"className":119278,"code":119414,"language":119280,"meta":79,"style":79},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[32,119416,119417,119422,119427,119432,119437,119441,119445,119450,119455,119460],{"__ignoreMap":79},[100,119418,119419],{"class":102,"line":103},[100,119420,119421],{},"# 查看 wsl\n",[100,119423,119424],{"class":102,"line":188},[100,119425,119426],{},"wsl -l\n",[100,119428,119429],{"class":102,"line":199},[100,119430,119431],{},"# 查看 wsl 运行版本或模式\n",[100,119433,119434],{"class":102,"line":532},[100,119435,119436],{},"wsl -l -v\n",[100,119438,119439],{"class":102,"line":577},[100,119440,570],{"emptyLinePlaceholder":569},[100,119442,119443],{"class":102,"line":589},[100,119444,570],{"emptyLinePlaceholder":569},[100,119446,119447],{"class":102,"line":595},[100,119448,119449],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[100,119451,119452],{"class":102,"line":601},[100,119453,119454],{},"wsl --set-version \u003Cdistro> 2\n",[100,119456,119457],{"class":102,"line":606},[100,119458,119459],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[100,119461,119462],{"class":102,"line":612},[100,119463,119464],{},"wsl --unregister \u003Cdistro>\n",[19,119466,119467],{},"输出Version为2即正常",[19,119469,119470],{},[3095,119471],{"alt":79,"src":119472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[23579,119474,119476],{"id":119475},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,119478,119479],{},"直接在Powershell里输入wsl命令进入子系统",[73,119481,119483],{"className":119278,"code":119482,"language":119280,"meta":79,"style":79},"# 进入子系统\nwsl\n",[32,119484,119485,119490],{"__ignoreMap":79},[100,119486,119487],{"class":102,"line":103},[100,119488,119489],{},"# 进入子系统\n",[100,119491,119492],{"class":102,"line":188},[100,119493,119494],{},"wsl\n",[19,119496,119497],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,119499,119500],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,119502,119503],{},[3095,119504],{"alt":79,"src":119505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[305,119507,119509],{"id":119508},"_233-配置各种环境","2.3.3 配置各种环境",[23579,119511,119513],{"id":119512},"_2331-换源","2.3.3.1 换源",[19,119515,119516],{},"(同实体机LINUX，往下找教程)",[23579,119518,119520],{"id":119519},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[24491,119522,119524],{"id":119523},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,119526,119527],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,119529,119530],{},[3095,119531],{"alt":79,"src":119532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,119534,119535],{},[3095,119536],{"alt":79,"src":119537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[24491,119539,119541],{"id":119540},"_23322-cuda","2.3.3.2.2 CUDA",[19,119543,119544,119545],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[2006,119546,119547],{"href":119547,"rel":119548},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[25442],[19,119550,119551,119554],{},[3095,119552],{"alt":79,"src":119553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[3095,119555],{"alt":79,"src":119556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,119558,119559],{},"在下方的网站，选择合适的版本。",[19,119561,119562,119563],{},"WSL2 专属 CUDA 指南：",[2006,119564,119565],{"href":119565,"rel":119566},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[25442],[19,119568,119569],{},[1921,119570,119571],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,119573,119574],{},[3095,119575],{"alt":79,"src":119576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,119578,119579],{},"挨行敲一遍",[19,119581,119582],{},[3095,119583],{"alt":79,"src":119584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,119586,119587,119588,119591],{},"敲完后，输入",[32,119589,119590],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,119593,119594],{},[3095,119595],{"alt":79,"src":119596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,119598,119599,119600,119603],{},"（请详看下方教程的",[1921,119601,119602],{},"安装CUDA的配置环境来看","如何配置环境）",[24491,119605,119607],{"id":119606},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,119609,119516],{},[19,119611,119612],{},[3095,119613],{"alt":79,"src":119614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[23579,119616,119618],{"id":119617},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,119620,119621],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,119623,119624],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,119626,119627],{},[3095,119628],{"alt":79,"src":119629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,119631,119632],{},"连接WSL2",[19,119634,119635],{},[3095,119636],{"alt":79,"src":119637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,119639,119640],{},"远程开发成功。",[19,119642,119643],{},[3095,119644],{"alt":79,"src":119645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,119647,119648],{},[3095,119649],{"alt":79,"src":119650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,119652,119653],{},[3095,119654],{"alt":79,"src":119655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[23579,119657,119659],{"id":119658},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,119661,119662],{},[3095,119663],{"alt":79,"src":119664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[23579,119666,119668],{"id":119667},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[73,119670,119672],{"className":118538,"code":119671,"language":118540,"meta":79,"style":79},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[32,119673,119674,119682,119690,119701,119705],{"__ignoreMap":79},[100,119675,119676,119678,119680],{"class":102,"line":103},[100,119677,107],{"class":106},[100,119679,118559],{"class":110},[100,119681,27816],{"class":110},[100,119683,119684,119686,119688],{"class":102,"line":188},[100,119685,107],{"class":106},[100,119687,118559],{"class":110},[100,119689,118575],{"class":110},[100,119691,119692,119694,119696,119698],{"class":102,"line":199},[100,119693,107],{"class":106},[100,119695,118559],{"class":110},[100,119697,114],{"class":110},[100,119699,119700],{"class":110}," mesa-utils\n",[100,119702,119703],{"class":102,"line":532},[100,119704,570],{"emptyLinePlaceholder":569},[100,119706,119707],{"class":102,"line":577},[100,119708,119709],{"class":1836},"#然后重启wsl2即可\n",[1677,119711,119712],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":79,"searchDepth":188,"depth":188,"links":119714},[119715,119716,119721],{"id":118992,"depth":188,"text":118993},{"id":119005,"depth":188,"text":119006,"children":119717},[119718,119719,119720],{"id":119009,"depth":199,"text":119010},{"id":119056,"depth":199,"text":119057},{"id":119117,"depth":199,"text":119118},{"id":119153,"depth":188,"text":119154,"children":119722},[119723,119724,119725],{"id":119157,"depth":199,"text":119158},{"id":119219,"depth":199,"text":119220},{"id":119508,"depth":199,"text":119509},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":118984,"description":24958},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":119732,"title":119733,"body":119734,"description":24958,"extension":1708,"meta":122670,"navigation":569,"path":122671,"seo":122672,"stem":122673,"__hash__":122674},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":119735,"toc":122642},[119736,119739,119743,119749,119753,119759,119763,119951,119954,119959,119963,119967,119970,119973,119979,119984,119987,119990,119995,120028,120033,120037,120114,120117,120122,120126,120129,120168,120171,120180,120198,120203,120210,120327,120332,120335,120362,120367,120371,120380,120430,120437,120441,120444,120458,120465,120499,120504,120508,120531,120534,120539,120543,120546,120549,120552,120594,120598,120601,120604,120645,120649,120653,120656,120661,120666,120669,120692,120695,120703,120708,120711,120716,120721,120724,120729,120733,120738,120761,120766,120828,120836,120841,120846,120849,120854,120857,120862,120867,120885,120890,120896,120901,120915,120919,120922,120925,120928,120971,120974,120979,121080,121083,121088,121092,121096,121133,121137,121141,121145,121191,121195,121240,121244,121251,121259,121314,121317,121394,121397,121420,121424,121427,121432,121437,121445,121448,121453,121458,121463,121466,121471,121480,121483,121488,121491,121562,121567,121570,121575,121578,121583,121586,121591,121594,121599,121604,121607,121682,121685,121698,121703,121706,121720,121723,121752,121757,121786,121789,121794,121798,121803,121812,121815,121820,121823,121828,121831,121834,121839,121842,121847,121852,121855,121860,121863,121988,121993,122023,122026,122031,122036,122053,122056,122099,122102,122129,122134,122147,122290,122294,122299,122313,122316,122367,122370,122400,122403,122419,122424,122438,122441,122508,122513,122522,122527,122530,122542,122547,122554,122578,122581,122586,122589,122608,122613,122620,122632,122639],[10,119737,119733],{"id":119738},"_3-安装必备配置",[14,119740,119742],{"id":119741},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[73,119744,119747],{"className":119745,"code":119746,"language":78},[76],"  打开下方网站（注意，该Ubuntu仓库版本是X86、amd64的仓库，ARM的仓库并非该网站（99.9%的人的电脑是X86的，很多工控机是ARM的，但工控机也有X86的，请看[Vinci机器人队单片机教程](https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fdocx\u002FPRAodvrWvoXTrVxP1EDcMKM7nXb)中讲的了解一下，或者自行百度。）\n\n  下方这俩学校二选一。\n\n1.  清华大学开源软件镜像站：https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\n\n2.  中国科学技术大学镜像站：https:\u002F\u002Fmirrors.ustc.edu.cn\n\n  可以测速，选择出速度最快的源。\n\n```Bash\ncurl https:\u002F\u002Fmirrors.cernet.edu.cn\u002Foh-my-mirrorz.py | python3\n```\n\n  在北方（山东）测速如下：\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-036.png)\n\n  在南方（广东）测速如下：\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-037.png)\n\n  在南北都比较快的是`北京外国语大学BFSU`和`南方科技大学SUSTech`，不想测速可以无脑选，也可以测速选择最好的源。\n\n  \n",[32,119748,119746],{"__ignoreMap":79},[305,119750,119752],{"id":119751},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[73,119754,119757],{"className":119755,"code":119756,"language":78},[76],"  输入以下命令\n\n```Bash\nsudo apt update\nsudo apt install vim\nsudo vim \u002Fetc\u002Fapt\u002Fsources.list\n```\n\n  在以下界面，用键盘按ggdG（注意区分大小写）\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-038.png)\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-039.png)\n\n  选择好Ubuntu版本后，\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-040.png)\n\n  粘贴进去\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-041.png)\n\n  按一下ESC，然后英文冒号，输入 `:wq!`然后回车\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-042.png)\n\n  输入以下命令\n\n```Bash\nsudo apt update\n```\n\n  下方出现对应学校源网站则成功\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-043.png)\n\n  至此换源结束\n",[32,119758,119756],{"__ignoreMap":79},[305,119760,119762],{"id":119761},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[73,119764,119768],{"className":119765,"code":119766,"language":119767,"meta":79,"style":79},"language-Shell shiki shiki-themes github-light github-dark","sudo apt update\nsudo apt install vim\nsudo rm -rf \u002Fetc\u002Fapt\u002Fsources.list\nsudo rm -rf \u002Fetc\u002Fapt\u002Fsources.list.d\u002F**\n\nsudo vim \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n```\n\n\n选择好Ubuntu版本后，复制下方的内容。\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png)\n\n粘贴进去\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png)\n\n按一下ESC，然后英文冒号，输入 `:wq!`然后回车\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png)\n\n输入以下命令\n\n```Bash\nsudo apt update\n","Shell",[32,119769,119770,119778,119789,119801,119815,119819,119829,119834,119838,119842,119847,119851,119863,119867,119872,119876,119887,119891,119907,119911,119922,119926,119931,119935,119943],{"__ignoreMap":79},[100,119771,119772,119774,119776],{"class":102,"line":103},[100,119773,107],{"class":106},[100,119775,118559],{"class":110},[100,119777,27816],{"class":110},[100,119779,119780,119782,119784,119786],{"class":102,"line":188},[100,119781,107],{"class":106},[100,119783,118559],{"class":110},[100,119785,114],{"class":110},[100,119787,119788],{"class":110}," vim\n",[100,119790,119791,119793,119796,119798],{"class":102,"line":199},[100,119792,107],{"class":106},[100,119794,119795],{"class":110}," rm",[100,119797,26900],{"class":117},[100,119799,119800],{"class":110}," \u002Fetc\u002Fapt\u002Fsources.list\n",[100,119802,119803,119805,119807,119809,119812],{"class":102,"line":532},[100,119804,107],{"class":106},[100,119806,119795],{"class":110},[100,119808,26900],{"class":117},[100,119810,119811],{"class":110}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[100,119813,119814],{"class":117},"**\n",[100,119816,119817],{"class":102,"line":577},[100,119818,570],{"emptyLinePlaceholder":569},[100,119820,119821,119823,119826],{"class":102,"line":589},[100,119822,107],{"class":106},[100,119824,119825],{"class":110}," vim",[100,119827,119828],{"class":110}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[100,119830,119831],{"class":102,"line":595},[100,119832,119833],{"class":110},"```\n",[100,119835,119836],{"class":102,"line":601},[100,119837,570],{"emptyLinePlaceholder":569},[100,119839,119840],{"class":102,"line":606},[100,119841,570],{"emptyLinePlaceholder":569},[100,119843,119844],{"class":102,"line":612},[100,119845,119846],{"class":106},"选择好Ubuntu版本后，复制下方的内容。\n",[100,119848,119849],{"class":102,"line":618},[100,119850,570],{"emptyLinePlaceholder":569},[100,119852,119853,119855,119858,119861],{"class":102,"line":623},[100,119854,1994],{"class":471},[100,119856,119857],{"class":110},"[](",[100,119859,119860],{"class":106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[100,119862,809],{"class":110},[100,119864,119865],{"class":102,"line":629},[100,119866,570],{"emptyLinePlaceholder":569},[100,119868,119869],{"class":102,"line":635},[100,119870,119871],{"class":106},"粘贴进去\n",[100,119873,119874],{"class":102,"line":641},[100,119875,570],{"emptyLinePlaceholder":569},[100,119877,119878,119880,119882,119885],{"class":102,"line":647},[100,119879,1994],{"class":471},[100,119881,119857],{"class":110},[100,119883,119884],{"class":106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[100,119886,809],{"class":110},[100,119888,119889],{"class":102,"line":653},[100,119890,570],{"emptyLinePlaceholder":569},[100,119892,119893,119896,119899,119902,119904],{"class":102,"line":659},[100,119894,119895],{"class":106},"按一下ESC，然后英文冒号，输入",[100,119897,119898],{"class":110}," `",[100,119900,119901],{"class":106},":wq!",[100,119903,2738],{"class":110},[100,119905,119906],{"class":106},"然后回车\n",[100,119908,119909],{"class":102,"line":665},[100,119910,570],{"emptyLinePlaceholder":569},[100,119912,119913,119915,119917,119920],{"class":102,"line":670},[100,119914,1994],{"class":471},[100,119916,119857],{"class":110},[100,119918,119919],{"class":106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[100,119921,809],{"class":110},[100,119923,119924],{"class":102,"line":675},[100,119925,570],{"emptyLinePlaceholder":569},[100,119927,119928],{"class":102,"line":699},[100,119929,119930],{"class":106},"输入以下命令\n",[100,119932,119933],{"class":102,"line":708},[100,119934,570],{"emptyLinePlaceholder":569},[100,119936,119937,119940],{"class":102,"line":722},[100,119938,119939],{"class":110},"```",[100,119941,119942],{"class":106},"Bash\n",[100,119944,119945,119947,119949],{"class":102,"line":735},[100,119946,107],{"class":106},[100,119948,118559],{"class":110},[100,119950,27816],{"class":110},[19,119952,119953],{},"这里被替换成对应学校则成功",[19,119955,119956],{},[3095,119957],{"alt":79,"src":119958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,119960,119962],{"id":119961},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[305,119964,119966],{"id":119965},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,119968,119969],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,119971,119972],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,119974,119975],{},[2006,119976,119977],{"href":119977,"rel":119978},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[25442],[19,119980,119981],{},[3095,119982],{"alt":79,"src":119983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,119985,119986],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,119988,119989],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,119991,119992],{},[3095,119993],{"alt":79,"src":119994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[73,119996,119998],{"className":118538,"code":119997,"language":118540,"meta":79,"style":79},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[32,119999,120000,120005,120012,120017],{"__ignoreMap":79},[100,120001,120002],{"class":102,"line":103},[100,120003,120004],{"class":1836},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[100,120006,120007,120009],{"class":102,"line":188},[100,120008,102797],{"class":117},[100,120010,120011],{"class":110}," ~\u002FDownloads\n",[100,120013,120014],{"class":102,"line":199},[100,120015,120016],{"class":1836},"#下方chrome安装包名不一定是这个，根据名字来看\n",[100,120018,120019,120021,120023,120025],{"class":102,"line":532},[100,120020,107],{"class":106},[100,120022,118559],{"class":110},[100,120024,114],{"class":110},[100,120026,120027],{"class":110}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,120029,120030],{},[3095,120031],{"alt":79,"src":120032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[305,120034,120036],{"id":120035},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[73,120038,120040],{"className":118538,"code":120039,"language":118540,"meta":79,"style":79},"# 老版\nsudo apt update\nsudo apt install neofetch\nneofetch\n\n# 新版\nsudo add-apt-repository ppa:zhangsongcui3371\u002Ffastfetch\nsudo apt update\nsudo apt install fastfetch\nfastfetch\n",[32,120041,120042,120047,120055,120066,120071,120075,120080,120090,120098,120109],{"__ignoreMap":79},[100,120043,120044],{"class":102,"line":103},[100,120045,120046],{"class":1836},"# 老版\n",[100,120048,120049,120051,120053],{"class":102,"line":188},[100,120050,107],{"class":106},[100,120052,118559],{"class":110},[100,120054,27816],{"class":110},[100,120056,120057,120059,120061,120063],{"class":102,"line":199},[100,120058,107],{"class":106},[100,120060,118559],{"class":110},[100,120062,114],{"class":110},[100,120064,120065],{"class":110}," neofetch\n",[100,120067,120068],{"class":102,"line":532},[100,120069,120070],{"class":106},"neofetch\n",[100,120072,120073],{"class":102,"line":577},[100,120074,570],{"emptyLinePlaceholder":569},[100,120076,120077],{"class":102,"line":589},[100,120078,120079],{"class":1836},"# 新版\n",[100,120081,120082,120084,120087],{"class":102,"line":595},[100,120083,107],{"class":106},[100,120085,120086],{"class":110}," add-apt-repository",[100,120088,120089],{"class":110}," ppa:zhangsongcui3371\u002Ffastfetch\n",[100,120091,120092,120094,120096],{"class":102,"line":601},[100,120093,107],{"class":106},[100,120095,118559],{"class":110},[100,120097,27816],{"class":110},[100,120099,120100,120102,120104,120106],{"class":102,"line":606},[100,120101,107],{"class":106},[100,120103,118559],{"class":110},[100,120105,114],{"class":110},[100,120107,120108],{"class":110}," fastfetch\n",[100,120110,120111],{"class":102,"line":612},[100,120112,120113],{"class":106},"fastfetch\n",[19,120115,120116],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,120118,120119],{},[3095,120120],{"alt":79,"src":120121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[305,120123,120125],{"id":120124},"_323-移除snap应用","3.2.3 移除snap应用",[19,120127,120128],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[73,120130,120132],{"className":118538,"code":120131,"language":118540,"meta":79,"style":79},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[32,120133,120134,120146,120157],{"__ignoreMap":79},[100,120135,120136,120138,120140,120143],{"class":102,"line":103},[100,120137,107],{"class":106},[100,120139,28085],{"class":110},[100,120141,120142],{"class":110}," disable",[100,120144,120145],{"class":110}," snapd.service\n",[100,120147,120148,120150,120152,120154],{"class":102,"line":188},[100,120149,107],{"class":106},[100,120151,28085],{"class":110},[100,120153,120142],{"class":110},[100,120155,120156],{"class":110}," snapd.socket\n",[100,120158,120159,120161,120163,120165],{"class":102,"line":199},[100,120160,107],{"class":106},[100,120162,28085],{"class":110},[100,120164,120142],{"class":110},[100,120166,120167],{"class":110}," snapd.seeded.service\n",[19,120169,120170],{},"然后查看snap应用列表",[19,120172,120173,120174,120179],{},"根据你安装的选择不同（最小安装或普通安装），有",[2006,120175,120178],{"href":120176,"rel":120177},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[25442],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[73,120181,120183],{"className":118538,"code":120182,"language":118540,"meta":79,"style":79},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[32,120184,120185,120190],{"__ignoreMap":79},[100,120186,120187],{"class":102,"line":103},[100,120188,120189],{"class":1836},"# 查询当前系统上snap安装了哪些app\n",[100,120191,120192,120195],{"class":102,"line":188},[100,120193,120194],{"class":106},"snap",[100,120196,120197],{"class":110}," list\n",[19,120199,120200],{},[3095,120201],{"alt":79,"src":120202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,120204,120205,120206,120209],{},"卸载掉图中所有应用，按照 ",[1921,120207,120208],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[73,120211,120213],{"className":118538,"code":120212,"language":118540,"meta":79,"style":79},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\nsudo snap remove snap-store\n#移除firefox浏览器\nsudo snap remove firefox\n#移除gnome-42-2204\nsudo snap remove gnome-42-2204\n#移除gtk-common-themes\nsudo snap remove gtk-common-themes\n#移除其它...\n \n#移除core22,bare以及snapd\nsudo snap remove core22\nsudo snap remove bare\nsudo snap remove snapd\n",[32,120214,120215,120220,120232,120237,120248,120253,120264,120269,120280,120285,120289,120294,120305,120316],{"__ignoreMap":79},[100,120216,120217],{"class":102,"line":103},[100,120218,120219],{"class":1836},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[100,120221,120222,120224,120227,120229],{"class":102,"line":188},[100,120223,107],{"class":106},[100,120225,120226],{"class":110}," snap",[100,120228,27653],{"class":110},[100,120230,120231],{"class":110}," snap-store\n",[100,120233,120234],{"class":102,"line":199},[100,120235,120236],{"class":1836},"#移除firefox浏览器\n",[100,120238,120239,120241,120243,120245],{"class":102,"line":532},[100,120240,107],{"class":106},[100,120242,120226],{"class":110},[100,120244,27653],{"class":110},[100,120246,120247],{"class":110}," firefox\n",[100,120249,120250],{"class":102,"line":577},[100,120251,120252],{"class":1836},"#移除gnome-42-2204\n",[100,120254,120255,120257,120259,120261],{"class":102,"line":589},[100,120256,107],{"class":106},[100,120258,120226],{"class":110},[100,120260,27653],{"class":110},[100,120262,120263],{"class":110}," gnome-42-2204\n",[100,120265,120266],{"class":102,"line":595},[100,120267,120268],{"class":1836},"#移除gtk-common-themes\n",[100,120270,120271,120273,120275,120277],{"class":102,"line":601},[100,120272,107],{"class":106},[100,120274,120226],{"class":110},[100,120276,27653],{"class":110},[100,120278,120279],{"class":110}," gtk-common-themes\n",[100,120281,120282],{"class":102,"line":606},[100,120283,120284],{"class":1836},"#移除其它...\n",[100,120286,120287],{"class":102,"line":612},[100,120288,4276],{"class":258},[100,120290,120291],{"class":102,"line":618},[100,120292,120293],{"class":1836},"#移除core22,bare以及snapd\n",[100,120295,120296,120298,120300,120302],{"class":102,"line":623},[100,120297,107],{"class":106},[100,120299,120226],{"class":110},[100,120301,27653],{"class":110},[100,120303,120304],{"class":110}," core22\n",[100,120306,120307,120309,120311,120313],{"class":102,"line":629},[100,120308,107],{"class":106},[100,120310,120226],{"class":110},[100,120312,27653],{"class":110},[100,120314,120315],{"class":110}," bare\n",[100,120317,120318,120320,120322,120324],{"class":102,"line":635},[100,120319,107],{"class":106},[100,120321,120226],{"class":110},[100,120323,27653],{"class":110},[100,120325,120326],{"class":110}," snapd\n",[19,120328,120329],{},[3095,120330],{"alt":79,"src":120331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,120333,120334],{},"输入以下命令查看是否还有snap包",[73,120336,120338],{"className":118538,"code":120337,"language":118540,"meta":79,"style":79},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[32,120339,120340,120346,120350,120354,120358],{"__ignoreMap":79},[100,120341,120342,120344],{"class":102,"line":103},[100,120343,120194],{"class":106},[100,120345,120197],{"class":110},[100,120347,120348],{"class":102,"line":188},[100,120349,120046],{"class":1836},[100,120351,120352],{"class":102,"line":199},[100,120353,120070],{"class":106},[100,120355,120356],{"class":102,"line":532},[100,120357,120079],{"class":1836},[100,120359,120360],{"class":102,"line":577},[100,120361,120113],{"class":106},[19,120363,120364],{},[3095,120365],{"alt":79,"src":120366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[305,120368,120370],{"id":120369},"_324-移除snap","3.2.4 移除snap",[19,120372,120373,120374,120379],{},"在删除掉",[2006,120375,120378],{"href":120376,"rel":120377},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[25442],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[73,120381,120383],{"className":118538,"code":120382,"language":118540,"meta":79,"style":79}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[32,120384,120385,120390,120403,120408,120419],{"__ignoreMap":79},[100,120386,120387],{"class":102,"line":103},[100,120388,120389],{"class":1836}," #使用apt移除掉snap\n",[100,120391,120392,120394,120396,120398,120401],{"class":102,"line":188},[100,120393,107],{"class":106},[100,120395,118559],{"class":110},[100,120397,118867],{"class":110},[100,120399,120400],{"class":117}," --purge",[100,120402,120326],{"class":110},[100,120404,120405],{"class":102,"line":199},[100,120406,120407],{"class":1836},"#移除snapd的一些目录\n",[100,120409,120410,120412,120414,120416],{"class":102,"line":532},[100,120411,107],{"class":106},[100,120413,119795],{"class":110},[100,120415,26900],{"class":117},[100,120417,120418],{"class":110}," \u002Fvar\u002Fcache\u002Fsnapd\n",[100,120420,120421,120423,120425,120427],{"class":102,"line":577},[100,120422,107],{"class":106},[100,120424,119795],{"class":110},[100,120426,26900],{"class":117},[100,120428,120429],{"class":110}," ~\u002Fsnap\n",[19,120431,120432,120433,120436],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[32,120434,120435],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[305,120438,120440],{"id":120439},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,120442,120443],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[73,120445,120447],{"className":118538,"code":120446,"language":118540,"meta":79,"style":79},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[32,120448,120449],{"__ignoreMap":79},[100,120450,120451,120453,120455],{"class":102,"line":103},[100,120452,107],{"class":106},[100,120454,119825],{"class":110},[100,120456,120457],{"class":110}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,120459,120460,120461,120464],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[32,120462,120463],{},":wq"," 回车",[73,120466,120468],{"className":118538,"code":120467,"language":118540,"meta":79,"style":79},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[32,120469,120470,120477,120491],{"__ignoreMap":79},[100,120471,120472,120475],{"class":102,"line":103},[100,120473,120474],{"class":106},"Package:",[100,120476,120326],{"class":110},[100,120478,120479,120482,120485,120488],{"class":102,"line":188},[100,120480,120481],{"class":106},"Pin:",[100,120483,120484],{"class":110}," release",[100,120486,120487],{"class":110}," a=",[100,120489,120490],{"class":117},"*\n",[100,120492,120493,120496],{"class":102,"line":199},[100,120494,120495],{"class":106},"Pin-Priority:",[100,120497,120498],{"class":117}," -10\n",[19,120500,120501],{},[3095,120502],{"alt":79,"src":120503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[305,120505,120507],{"id":120506},"_326-测试是否成功","3.2.6 测试是否成功",[73,120509,120511],{"className":118538,"code":120510,"language":118540,"meta":79,"style":79},"sudo apt update\nsudo apt install firefox\n",[32,120512,120513,120521],{"__ignoreMap":79},[100,120514,120515,120517,120519],{"class":102,"line":103},[100,120516,107],{"class":106},[100,120518,118559],{"class":110},[100,120520,27816],{"class":110},[100,120522,120523,120525,120527,120529],{"class":102,"line":188},[100,120524,107],{"class":106},[100,120526,118559],{"class":110},[100,120528,114],{"class":110},[100,120530,120247],{"class":110},[19,120532,120533],{},"这里提示snapd无法被安装，就证明成功了",[19,120535,120536],{},[3095,120537],{"alt":79,"src":120538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[305,120540,120542],{"id":120541},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,120544,120545],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,120547,120548],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,120550,120551],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[73,120553,120555],{"className":118538,"code":120554,"language":118540,"meta":79,"style":79},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[32,120556,120557,120562,120571,120576,120584],{"__ignoreMap":79},[100,120558,120559],{"class":102,"line":103},[100,120560,120561],{"class":1836},"# 添加Mozilla提供的源\n",[100,120563,120564,120566,120568],{"class":102,"line":188},[100,120565,107],{"class":106},[100,120567,120086],{"class":110},[100,120569,120570],{"class":110}," ppa:mozillateam\u002Fppa\n",[100,120572,120573],{"class":102,"line":199},[100,120574,120575],{"class":1836},"# 安装Firefox\n",[100,120577,120578,120580,120582],{"class":102,"line":532},[100,120579,107],{"class":106},[100,120581,118559],{"class":110},[100,120583,27816],{"class":110},[100,120585,120586,120588,120590,120592],{"class":102,"line":577},[100,120587,107],{"class":106},[100,120589,118559],{"class":110},[100,120591,114],{"class":110},[100,120593,120247],{"class":110},[305,120595,120597],{"id":120596},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,120599,120600],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,120602,120603],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[73,120605,120607],{"className":118538,"code":120606,"language":118540,"meta":79,"style":79},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[32,120608,120609,120614,120624,120632,120636],{"__ignoreMap":79},[100,120610,120611],{"class":102,"line":103},[100,120612,120613],{"class":1836},"#删掉禁止安装snap的配置文件\n",[100,120615,120616,120618,120620,120622],{"class":102,"line":188},[100,120617,107],{"class":106},[100,120619,119795],{"class":110},[100,120621,26900],{"class":117},[100,120623,120457],{"class":110},[100,120625,120626,120628,120630],{"class":102,"line":199},[100,120627,107],{"class":106},[100,120629,118559],{"class":110},[100,120631,27816],{"class":110},[100,120633,120634],{"class":102,"line":532},[100,120635,570],{"emptyLinePlaceholder":569},[100,120637,120638,120640,120642],{"class":102,"line":577},[100,120639,107],{"class":106},[100,120641,118559],{"class":110},[100,120643,120644],{"class":110}," dist-update\n",[14,120646,120648],{"id":120647},"_33-中文输入法","3.3 中文输入法",[305,120650,120652],{"id":120651},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,120654,120655],{},"官网下载搜狗输入法",[19,120657,120658],{},[3095,120659],{"alt":79,"src":120660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,120662,120663],{},[3095,120664],{"alt":79,"src":120665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,120667,120668],{},"打开终端输入如下",[73,120670,120672],{"className":118538,"code":120671,"language":118540,"meta":79,"style":79},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[32,120673,120674,120681],{"__ignoreMap":79},[100,120675,120676,120678],{"class":102,"line":103},[100,120677,102797],{"class":117},[100,120679,120680],{"class":110}," ~\u002FDownloads\u002F\n",[100,120682,120683,120685,120687,120689],{"class":102,"line":188},[100,120684,107],{"class":106},[100,120686,118559],{"class":110},[100,120688,114],{"class":110},[100,120690,120691],{"class":110}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,120693,120694],{},"打开Fcitx",[19,120696,120697,120700],{},[3095,120698],{"alt":79,"src":120699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[3095,120701],{"alt":79,"src":120702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,120704,120705],{},[3095,120706],{"alt":79,"src":120707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,120709,120710],{},"添加搜狗输入法",[19,120712,120713],{},[3095,120714],{"alt":79,"src":120715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,120717,120718],{},[3095,120719],{"alt":79,"src":120720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,120722,120723],{},"将搜狗输入法设置为唯一输入法",[19,120725,120726],{},[3095,120727],{"alt":79,"src":120728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[305,120730,120732],{"id":120731},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[26,120734,120735],{},[29,120736,120737],{},"卸载旧输入法",[73,120739,120741],{"className":119765,"code":120740,"language":119767,"meta":79,"style":79},"sudo apt purge fcitx* ibus*\n",[32,120742,120743],{"__ignoreMap":79},[100,120744,120745,120747,120749,120751,120754,120756,120759],{"class":102,"line":103},[100,120746,107],{"class":106},[100,120748,118559],{"class":110},[100,120750,118900],{"class":110},[100,120752,120753],{"class":110}," fcitx",[100,120755,2222],{"class":117},[100,120757,120758],{"class":110}," ibus",[100,120760,120490],{"class":117},[26,120762,120763],{"start":188},[29,120764,120765],{},"安装Fcitx5",[73,120767,120769],{"className":118538,"code":120768,"language":118540,"meta":79,"style":79},"# Ubuntu22.04及以上、Debian12及以上\nsudo apt install fcitx5 fcitx5-chinese-addons\n\n# Ubuntu20.04\nsudo add-apt-repository ppa:zhsj\u002Ffcitx5\nsudo apt update\nsudo apt install fcitx5 fcitx5-chinese-addons\n",[32,120770,120771,120776,120790,120794,120799,120808,120816],{"__ignoreMap":79},[100,120772,120773],{"class":102,"line":103},[100,120774,120775],{"class":1836},"# Ubuntu22.04及以上、Debian12及以上\n",[100,120777,120778,120780,120782,120784,120787],{"class":102,"line":188},[100,120779,107],{"class":106},[100,120781,118559],{"class":110},[100,120783,114],{"class":110},[100,120785,120786],{"class":110}," fcitx5",[100,120788,120789],{"class":110}," fcitx5-chinese-addons\n",[100,120791,120792],{"class":102,"line":199},[100,120793,570],{"emptyLinePlaceholder":569},[100,120795,120796],{"class":102,"line":532},[100,120797,120798],{"class":1836},"# Ubuntu20.04\n",[100,120800,120801,120803,120805],{"class":102,"line":577},[100,120802,107],{"class":106},[100,120804,120086],{"class":110},[100,120806,120807],{"class":110}," ppa:zhsj\u002Ffcitx5\n",[100,120809,120810,120812,120814],{"class":102,"line":589},[100,120811,107],{"class":106},[100,120813,118559],{"class":110},[100,120815,27816],{"class":110},[100,120817,120818,120820,120822,120824,120826],{"class":102,"line":595},[100,120819,107],{"class":106},[100,120821,118559],{"class":110},[100,120823,114],{"class":110},[100,120825,120786],{"class":110},[100,120827,120789],{"class":110},[26,120829,120830,120833],{"start":199},[29,120831,120832],{},"Reboot System",[29,120834,120835],{},"启动Fcitx5",[19,120837,120838],{},[3095,120839],{"alt":79,"src":120840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[26,120842,120843],{"start":577},[29,120844,120845],{},"修改一些设置",[19,120847,120848],{},"将Pinyin和Keyboard - English US加入到左边。",[19,120850,120851],{},[3095,120852],{"alt":79,"src":120853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,120855,120856],{},"添加快捷键以便于更好切换中英文",[19,120858,120859],{},[3095,120860],{"alt":79,"src":120861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[26,120863,120864],{"start":589},[29,120865,120866],{},"重启",[73,120868,120870],{"className":119765,"code":120869,"language":119767,"meta":79,"style":79},"sudo shutdown -r now\n",[32,120871,120872],{"__ignoreMap":79},[100,120873,120874,120876,120879,120882],{"class":102,"line":103},[100,120875,107],{"class":106},[100,120877,120878],{"class":110}," shutdown",[100,120880,120881],{"class":117}," -r",[100,120883,120884],{"class":110}," now\n",[26,120886,120887],{"start":595},[29,120888,120889],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,120891,120892],{},[2006,120893,120894],{"href":120894,"rel":120895},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[25442],[26,120897,120898],{"start":601},[29,120899,120900],{},"再重启",[73,120902,120903],{"className":119765,"code":120869,"language":119767,"meta":79,"style":79},[32,120904,120905],{"__ignoreMap":79},[100,120906,120907,120909,120911,120913],{"class":102,"line":103},[100,120908,107],{"class":106},[100,120910,120878],{"class":110},[100,120912,120881],{"class":117},[100,120914,120884],{"class":110},[14,120916,120918],{"id":120917},"_34-pip3源替换","3.4 pip3源替换",[19,120920,120921],{},"非Debian系发行版需要做。",[19,120923,120924],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,120926,120927],{},"使用dnf的系统也可能不用做。",[73,120929,120931],{"className":118538,"code":120930,"language":118540,"meta":79,"style":79},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[32,120932,120933,120938,120945,120950,120955],{"__ignoreMap":79},[100,120934,120935],{"class":102,"line":103},[100,120936,120937],{"class":1836},"# 检查是否已安装 pip\n",[100,120939,120940,120943],{"class":102,"line":188},[100,120941,120942],{"class":106},"pip3",[100,120944,27867],{"class":117},[100,120946,120947],{"class":102,"line":199},[100,120948,120949],{"class":1836},"# 如果未安装，先安装 pip3（见下方）\n",[100,120951,120952],{"class":102,"line":532},[100,120953,120954],{"class":1836},"# 配置 pip 使用清华源\n",[100,120956,120957,120959,120962,120965,120968],{"class":102,"line":577},[100,120958,120942],{"class":106},[100,120960,120961],{"class":110}," config",[100,120963,120964],{"class":110}," set",[100,120966,120967],{"class":110}," global.index-url",[100,120969,120970],{"class":110}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,120972,120973],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,120975,120976],{},[3095,120977],{"alt":79,"src":120978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[73,120980,120982],{"className":118538,"code":120981,"language":118540,"meta":79,"style":79},"#安装pip3\nsudo apt update\nsudo apt-get install python3-pip\n\n#更新pip3\npython3 -m pip install -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple --upgrade pip\n\n#设置pip源为清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n\n#测试\npython3 -m pip install --upgrade pip\n",[32,120983,120984,120989,120997,121008,121012,121017,121036,121040,121045,121057,121061,121066],{"__ignoreMap":79},[100,120985,120986],{"class":102,"line":103},[100,120987,120988],{"class":1836},"#安装pip3\n",[100,120990,120991,120993,120995],{"class":102,"line":188},[100,120992,107],{"class":106},[100,120994,118559],{"class":110},[100,120996,27816],{"class":110},[100,120998,120999,121001,121003,121005],{"class":102,"line":199},[100,121000,107],{"class":106},[100,121002,27650],{"class":110},[100,121004,114],{"class":110},[100,121006,121007],{"class":110}," python3-pip\n",[100,121009,121010],{"class":102,"line":532},[100,121011,570],{"emptyLinePlaceholder":569},[100,121013,121014],{"class":102,"line":577},[100,121015,121016],{"class":1836},"#更新pip3\n",[100,121018,121019,121021,121023,121025,121027,121029,121032,121034],{"class":102,"line":589},[100,121020,102418],{"class":106},[100,121022,102421],{"class":117},[100,121024,102444],{"class":110},[100,121026,114],{"class":110},[100,121028,28002],{"class":117},[100,121030,121031],{"class":110}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[100,121033,102449],{"class":117},[100,121035,102452],{"class":110},[100,121037,121038],{"class":102,"line":595},[100,121039,570],{"emptyLinePlaceholder":569},[100,121041,121042],{"class":102,"line":601},[100,121043,121044],{"class":1836},"#设置pip源为清华源\n",[100,121046,121047,121049,121051,121053,121055],{"class":102,"line":606},[100,121048,120942],{"class":106},[100,121050,120961],{"class":110},[100,121052,120964],{"class":110},[100,121054,120967],{"class":110},[100,121056,120970],{"class":110},[100,121058,121059],{"class":102,"line":612},[100,121060,570],{"emptyLinePlaceholder":569},[100,121062,121063],{"class":102,"line":618},[100,121064,121065],{"class":1836},"#测试\n",[100,121067,121068,121070,121072,121074,121076,121078],{"class":102,"line":623},[100,121069,102418],{"class":106},[100,121071,102421],{"class":117},[100,121073,102444],{"class":110},[100,121075,114],{"class":110},[100,121077,102449],{"class":117},[100,121079,102452],{"class":110},[19,121081,121082],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,121084,121085],{},[3095,121086],{"alt":79,"src":121087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,121089,121091],{"id":121090},"_35-显卡驱动安装","3.5 显卡驱动安装",[305,121093,121095],{"id":121094},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[73,121097,121099],{"className":119765,"code":121098,"language":119767,"meta":79,"style":79},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[32,121100,121101,121106,121121,121126],{"__ignoreMap":79},[100,121102,121103],{"class":102,"line":103},[100,121104,121105],{"class":1836},"# 如果是使用apt安装的驱动\n",[100,121107,121108,121110,121112,121114,121116,121119],{"class":102,"line":188},[100,121109,107],{"class":106},[100,121111,27650],{"class":110},[100,121113,27653],{"class":110},[100,121115,120400],{"class":117},[100,121117,121118],{"class":110}," nvidia",[100,121120,120490],{"class":117},[100,121122,121123],{"class":102,"line":199},[100,121124,121125],{"class":1836},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[100,121127,121128,121130],{"class":102,"line":532},[100,121129,107],{"class":106},[100,121131,121132],{"class":110}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[305,121134,121136],{"id":121135},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[23579,121138,121140],{"id":121139},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[24491,121142,121144],{"id":121143},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[73,121146,121148],{"className":119765,"code":121147,"language":119767,"meta":79,"style":79},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[32,121149,121150,121155,121166,121171,121181,121186],{"__ignoreMap":79},[100,121151,121152],{"class":102,"line":103},[100,121153,121154],{"class":1836},"# 安装英伟达驱动\n",[100,121156,121157,121159,121161,121163],{"class":102,"line":188},[100,121158,107],{"class":106},[100,121160,118559],{"class":110},[100,121162,114],{"class":110},[100,121164,121165],{"class":110}," nvidia-driver-版本号\n",[100,121167,121168],{"class":102,"line":199},[100,121169,121170],{"class":1836},"# 重启 \n",[100,121172,121173,121175,121177,121179],{"class":102,"line":532},[100,121174,107],{"class":106},[100,121176,120878],{"class":110},[100,121178,120881],{"class":117},[100,121180,120884],{"class":110},[100,121182,121183],{"class":102,"line":577},[100,121184,121185],{"class":1836},"# 检查驱动是否安装成功\n",[100,121187,121188],{"class":102,"line":589},[100,121189,121190],{"class":106},"nvidia-smi\n",[24491,121192,121194],{"id":121193},"_35212-debian","3.5.2.1.2 Debian",[73,121196,121198],{"className":119765,"code":121197,"language":119767,"meta":79,"style":79},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[32,121199,121200,121204,121218,121222,121232,121236],{"__ignoreMap":79},[100,121201,121202],{"class":102,"line":103},[100,121203,121154],{"class":1836},[100,121205,121206,121208,121210,121212,121215],{"class":102,"line":188},[100,121207,107],{"class":106},[100,121209,118559],{"class":110},[100,121211,114],{"class":110},[100,121213,121214],{"class":110}," nvidia-driver",[100,121216,121217],{"class":110}," nvidia-settings\n",[100,121219,121220],{"class":102,"line":199},[100,121221,121170],{"class":1836},[100,121223,121224,121226,121228,121230],{"class":102,"line":532},[100,121225,107],{"class":106},[100,121227,120878],{"class":110},[100,121229,120881],{"class":117},[100,121231,120884],{"class":110},[100,121233,121234],{"class":102,"line":577},[100,121235,121185],{"class":1836},[100,121237,121238],{"class":102,"line":589},[100,121239,121190],{"class":106},[23579,121241,121243],{"id":121242},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,121245,121246,121247,121250],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[1921,121248,121249],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,121252,121253,121254],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[25135,121255,121256],{},[1921,121257,121258],{},"（也可以不禁用桌面环境，直接进行下一步。）",[73,121260,121262],{"className":119765,"code":121261,"language":119767,"meta":79,"style":79},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[32,121263,121264,121269,121279,121284,121297,121302],{"__ignoreMap":79},[100,121265,121266],{"class":102,"line":103},[100,121267,121268],{"class":1836},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[100,121270,121271,121273,121276],{"class":102,"line":188},[100,121272,107],{"class":106},[100,121274,121275],{"class":110}," telinit",[100,121277,121278],{"class":117}," 3\n",[100,121280,121281],{"class":102,"line":199},[100,121282,121283],{"class":1836},"# ubuntu 使用下方命令\n",[100,121285,121286,121288,121291,121294],{"class":102,"line":532},[100,121287,107],{"class":106},[100,121289,121290],{"class":110}," service",[100,121292,121293],{"class":110}," lightdm",[100,121295,121296],{"class":110}," stop\n",[100,121298,121299],{"class":102,"line":577},[100,121300,121301],{"class":1836},"# Fedora 使用下方命令\n",[100,121303,121304,121306,121308,121311],{"class":102,"line":589},[100,121305,107],{"class":106},[100,121307,28085],{"class":110},[100,121309,121310],{"class":110}," isolate",[100,121312,121313],{"class":110}," multi-user.target\n",[19,121315,121316],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[73,121318,121320],{"className":119765,"code":121319,"language":119767,"meta":79,"style":79},"# 编译环境+准备工作\nsudo apt install build-essential\n# 进入到.run目录中\ncd \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n# 给驱动文件增加可执行权限：\nsudo chmod a+x NVIDIA-Linux-x86_64-550.107.02.run\n# 然后执行安装：\nsudo .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\nsudo .\u002FNVIDIA-Linux-x86_64-550.107.02.run  --no-opengl-files\n",[32,121321,121322,121327,121338,121343,121350,121355,121367,121372,121379,121384],{"__ignoreMap":79},[100,121323,121324],{"class":102,"line":103},[100,121325,121326],{"class":1836},"# 编译环境+准备工作\n",[100,121328,121329,121331,121333,121335],{"class":102,"line":188},[100,121330,107],{"class":106},[100,121332,118559],{"class":110},[100,121334,114],{"class":110},[100,121336,121337],{"class":110}," build-essential\n",[100,121339,121340],{"class":102,"line":199},[100,121341,121342],{"class":1836},"# 进入到.run目录中\n",[100,121344,121345,121347],{"class":102,"line":532},[100,121346,102797],{"class":117},[100,121348,121349],{"class":110}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[100,121351,121352],{"class":102,"line":577},[100,121353,121354],{"class":1836},"# 给驱动文件增加可执行权限：\n",[100,121356,121357,121359,121361,121364],{"class":102,"line":589},[100,121358,107],{"class":106},[100,121360,26156],{"class":110},[100,121362,121363],{"class":110}," a+x",[100,121365,121366],{"class":110}," NVIDIA-Linux-x86_64-550.107.02.run\n",[100,121368,121369],{"class":102,"line":595},[100,121370,121371],{"class":1836},"# 然后执行安装：\n",[100,121373,121374,121376],{"class":102,"line":601},[100,121375,107],{"class":106},[100,121377,121378],{"class":110}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[100,121380,121381],{"class":102,"line":606},[100,121382,121383],{"class":1836},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[100,121385,121386,121388,121391],{"class":102,"line":612},[100,121387,107],{"class":106},[100,121389,121390],{"class":110}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[100,121392,121393],{"class":117},"  --no-opengl-files\n",[19,121395,121396],{},"安装完毕重启即可",[73,121398,121400],{"className":119765,"code":121399,"language":119767,"meta":79,"style":79},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[32,121401,121402,121406,121412,121416],{"__ignoreMap":79},[100,121403,121404],{"class":102,"line":103},[100,121405,121170],{"class":1836},[100,121407,121408,121410],{"class":102,"line":188},[100,121409,107],{"class":106},[100,121411,28219],{"class":110},[100,121413,121414],{"class":102,"line":199},[100,121415,121185],{"class":1836},[100,121417,121418],{"class":102,"line":532},[100,121419,121190],{"class":106},[305,121421,121423],{"id":121422},"_353-安装cuda","3.5.3 安装CUDA",[19,121425,121426],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,121428,121429],{},[3095,121430],{"alt":79,"src":121431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[26,121433,121434],{},[29,121435,121436],{},"先查看显卡驱动所支持的最高CUDA版本",[73,121438,121439],{"className":119765,"code":121190,"language":119767,"meta":79,"style":79},[32,121440,121441],{"__ignoreMap":79},[100,121442,121443],{"class":102,"line":103},[100,121444,121190],{"class":106},[19,121446,121447],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,121449,121450],{},[3095,121451],{"alt":79,"src":121452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[26,121454,121455],{"start":188},[29,121456,121457],{},"下载CUDA并安装CUDA",[19,121459,119544,121460],{},[2006,121461,119547],{"href":119547,"rel":121462},[25442],[19,121464,121465],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,121467,121468],{},[3095,121469],{"alt":79,"src":121470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,121472,121473,121474,121479],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[2006,121475,121478],{"href":121476,"rel":121477},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[25442],"Vinci机器人队单片机教程","）",[19,121481,121482],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,121484,121485],{},[3095,121486],{"alt":79,"src":121487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,121489,121490],{},"将最下方框框里的命令敲入终端",[73,121492,121494],{"className":119765,"code":121493,"language":119767,"meta":79,"style":79},"# 在当前文件夹下创建一个ttt的子文件夹\nmkdir -p .\u002Fttt\n# 进入ttt文件夹\ncd ttt\n# 输入复制的第一条命令（用来下载cuda的runfile文件）\nwget https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n# 给予权限\nsudo chmod a+x .\u002Fcuda_12.4.0_550.54.14_linux.run\n# 运行脚本\nsudo .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[32,121495,121496,121501,121510,121515,121522,121527,121535,121540,121551,121556],{"__ignoreMap":79},[100,121497,121498],{"class":102,"line":103},[100,121499,121500],{"class":1836},"# 在当前文件夹下创建一个ttt的子文件夹\n",[100,121502,121503,121505,121507],{"class":102,"line":188},[100,121504,102787],{"class":106},[100,121506,30786],{"class":117},[100,121508,121509],{"class":110}," .\u002Fttt\n",[100,121511,121512],{"class":102,"line":199},[100,121513,121514],{"class":1836},"# 进入ttt文件夹\n",[100,121516,121517,121519],{"class":102,"line":532},[100,121518,102797],{"class":117},[100,121520,121521],{"class":110}," ttt\n",[100,121523,121524],{"class":102,"line":577},[100,121525,121526],{"class":1836},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[100,121528,121529,121532],{"class":102,"line":589},[100,121530,121531],{"class":106},"wget",[100,121533,121534],{"class":110}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[100,121536,121537],{"class":102,"line":595},[100,121538,121539],{"class":1836},"# 给予权限\n",[100,121541,121542,121544,121546,121548],{"class":102,"line":601},[100,121543,107],{"class":106},[100,121545,26156],{"class":110},[100,121547,121363],{"class":110},[100,121549,121550],{"class":110}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[100,121552,121553],{"class":102,"line":606},[100,121554,121555],{"class":1836},"# 运行脚本\n",[100,121557,121558,121560],{"class":102,"line":612},[100,121559,107],{"class":106},[100,121561,121550],{"class":110},[19,121563,121564],{},[3095,121565],{"alt":79,"src":121566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,121568,121569],{},"正在安装中：",[19,121571,121572],{},[3095,121573],{"alt":79,"src":121574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,121576,121577],{},"输入accept接受即可",[19,121579,121580],{},[3095,121581],{"alt":79,"src":121582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,121584,121585],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,121587,121588],{},[3095,121589],{"alt":79,"src":121590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,121592,121593],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,121595,121596],{},[3095,121597],{"alt":79,"src":121598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[26,121600,121601],{"start":199},[29,121602,121603],{},"配置环境",[19,121605,121606],{},"根据上方确认一下路径，比如我上面红色框起来的为",[73,121608,121610],{"className":119765,"code":121609,"language":119767,"meta":79,"style":79},"Please make sure that \n -   PATH includes \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin \n -   LD_LIBRARY_PATH includes \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64, or, add \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64 to \u002Fetc\u002Fld.so.conf and run ldconfig as root\n",[32,121611,121612,121628,121643],{"__ignoreMap":79},[100,121613,121614,121617,121620,121623,121626],{"class":102,"line":103},[100,121615,121616],{"class":106},"Please",[100,121618,121619],{"class":110}," make",[100,121621,121622],{"class":110}," sure",[100,121624,121625],{"class":110}," that",[100,121627,4276],{"class":258},[100,121629,121630,121632,121635,121638,121641],{"class":102,"line":188},[100,121631,53825],{"class":106},[100,121633,121634],{"class":110},"   PATH",[100,121636,121637],{"class":110}," includes",[100,121639,121640],{"class":110}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[100,121642,4276],{"class":258},[100,121644,121645,121647,121650,121652,121655,121658,121660,121663,121666,121669,121672,121674,121677,121679],{"class":102,"line":199},[100,121646,53825],{"class":106},[100,121648,121649],{"class":110},"   LD_LIBRARY_PATH",[100,121651,121637],{"class":110},[100,121653,121654],{"class":110}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[100,121656,121657],{"class":110}," or,",[100,121659,6805],{"class":110},[100,121661,121662],{"class":110}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[100,121664,121665],{"class":110}," to",[100,121667,121668],{"class":110}," \u002Fetc\u002Fld.so.conf",[100,121670,121671],{"class":110}," and",[100,121673,28802],{"class":110},[100,121675,121676],{"class":110}," ldconfig",[100,121678,66158],{"class":110},[100,121680,121681],{"class":110}," root\n",[19,121683,121684],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[73,121686,121688],{"className":119765,"code":121687,"language":119767,"meta":79,"style":79},"which nvcc\n",[32,121689,121690],{"__ignoreMap":79},[100,121691,121692,121695],{"class":102,"line":103},[100,121693,121694],{"class":117},"which",[100,121696,121697],{"class":110}," nvcc\n",[19,121699,121700],{},[3095,121701],{"alt":79,"src":121702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,121704,121705],{},"所以我进行以下操作：",[73,121707,121709],{"className":119765,"code":121708,"language":119767,"meta":79,"style":79},"sudo vim ~\u002F.bashrc\n",[32,121710,121711],{"__ignoreMap":79},[100,121712,121713,121715,121717],{"class":102,"line":103},[100,121714,107],{"class":106},[100,121716,119825],{"class":110},[100,121718,121719],{"class":110}," ~\u002F.bashrc\n",[19,121721,121722],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[73,121724,121726],{"className":119765,"code":121725,"language":119767,"meta":79,"style":79},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[32,121727,121728,121740],{"__ignoreMap":79},[100,121729,121730,121732,121735,121737],{"class":102,"line":103},[100,121731,26618],{"class":471},[100,121733,121734],{"class":258}," PATH",[100,121736,472],{"class":471},[100,121738,121739],{"class":258},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[100,121741,121742,121744,121747,121749],{"class":102,"line":188},[100,121743,26618],{"class":471},[100,121745,121746],{"class":258}," LD_LIBRARY_PATH",[100,121748,472],{"class":471},[100,121750,121751],{"class":258},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,121753,121754],{},[3095,121755],{"alt":79,"src":121756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[73,121758,121760],{"className":119765,"code":121759,"language":119767,"meta":79,"style":79},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[32,121761,121762,121767,121773,121778],{"__ignoreMap":79},[100,121763,121764],{"class":102,"line":103},[100,121765,121766],{"class":1836},"# 刷新当前终端的环境变量\n",[100,121768,121769,121771],{"class":102,"line":188},[100,121770,102432],{"class":117},[100,121772,121719],{"class":110},[100,121774,121775],{"class":102,"line":199},[100,121776,121777],{"class":1836},"# 验证CUDA是否安装成功\n",[100,121779,121780,121783],{"class":102,"line":532},[100,121781,121782],{"class":106},"nvcc",[100,121784,121785],{"class":117}," -V\n",[19,121787,121788],{},"出现下图这种则安装成功。",[19,121790,121791],{},[3095,121792],{"alt":79,"src":121793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[305,121795,121797],{"id":121796},"_354-安装cudnn","3.5.4 安装cuDNN",[26,121799,121800],{},[29,121801,121802],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,121804,121805,121806,121811],{},"前往 NVIDIA cuDNN 下载页面：",[2006,121807,121810],{"href":121808,"rel":121809},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[25442],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,121813,121814],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,121816,121817],{},[3095,121818],{"alt":79,"src":121819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,121821,121822],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,121824,121825],{},[3095,121826],{"alt":79,"src":121827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,121829,121830],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,121832,121833],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,121835,121836],{},[1921,121837,121838],{},"我这里选择所有Linux X86_64最通用的办法：",[19,121840,121841],{},"下载好的：",[19,121843,121844],{},[3095,121845],{"alt":79,"src":121846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[26,121848,121849],{"start":188},[29,121850,121851],{},"安装cuDNN",[19,121853,121854],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,121856,121857],{},[3095,121858],{"alt":79,"src":121859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,121861,121862],{},"解压文件，并复制到对应位置完成安装",[73,121864,121866],{"className":119765,"code":121865,"language":119767,"meta":79,"style":79},"# 解压cuDNN文件\ntar -xvf .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n# cd进文件夹\ncd .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n# 复制cuDNN文件到CUDA目录\nsudo cp include\u002Fcudnn*    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude \nsudo cp lib\u002Flibcudnn*    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n# 对比一下有没有缺文件\nls \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn* \nls \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn*\n# 给予权限\nsudo chmod a+r \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn*   \nsudo chmod a+r \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn*\n",[32,121867,121868,121873,121884,121889,121896,121901,121917,121931,121936,121947,121956,121960,121976],{"__ignoreMap":79},[100,121869,121870],{"class":102,"line":103},[100,121871,121872],{"class":1836},"# 解压cuDNN文件\n",[100,121874,121875,121878,121881],{"class":102,"line":188},[100,121876,121877],{"class":106},"tar",[100,121879,121880],{"class":117}," -xvf",[100,121882,121883],{"class":110}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[100,121885,121886],{"class":102,"line":199},[100,121887,121888],{"class":1836},"# cd进文件夹\n",[100,121890,121891,121893],{"class":102,"line":532},[100,121892,102797],{"class":117},[100,121894,121895],{"class":110}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[100,121897,121898],{"class":102,"line":577},[100,121899,121900],{"class":1836},"# 复制cuDNN文件到CUDA目录\n",[100,121902,121903,121905,121907,121910,121912,121915],{"class":102,"line":589},[100,121904,107],{"class":106},[100,121906,29433],{"class":110},[100,121908,121909],{"class":110}," include\u002Fcudnn",[100,121911,2222],{"class":117},[100,121913,121914],{"class":110},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[100,121916,4276],{"class":258},[100,121918,121919,121921,121923,121926,121928],{"class":102,"line":595},[100,121920,107],{"class":106},[100,121922,29433],{"class":110},[100,121924,121925],{"class":110}," lib\u002Flibcudnn",[100,121927,2222],{"class":117},[100,121929,121930],{"class":110},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[100,121932,121933],{"class":102,"line":601},[100,121934,121935],{"class":1836},"# 对比一下有没有缺文件\n",[100,121937,121938,121940,121943,121945],{"class":102,"line":606},[100,121939,28333],{"class":106},[100,121941,121942],{"class":110}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[100,121944,2222],{"class":117},[100,121946,4276],{"class":258},[100,121948,121949,121951,121954],{"class":102,"line":612},[100,121950,28333],{"class":106},[100,121952,121953],{"class":110}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[100,121955,120490],{"class":117},[100,121957,121958],{"class":102,"line":618},[100,121959,121539],{"class":1836},[100,121961,121962,121964,121966,121969,121971,121973],{"class":102,"line":623},[100,121963,107],{"class":106},[100,121965,26156],{"class":110},[100,121967,121968],{"class":110}," a+r",[100,121970,121942],{"class":110},[100,121972,2222],{"class":117},[100,121974,121975],{"class":258},"   \n",[100,121977,121978,121980,121982,121984,121986],{"class":102,"line":629},[100,121979,107],{"class":106},[100,121981,26156],{"class":110},[100,121983,121968],{"class":110},[100,121985,121953],{"class":110},[100,121987,120490],{"class":117},[26,121989,121990],{"start":199},[29,121991,121992],{},"检查是否安装成功",[73,121994,121996],{"className":119765,"code":121995,"language":119767,"meta":79,"style":79},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[32,121997,121998,122003],{"__ignoreMap":79},[100,121999,122000],{"class":102,"line":103},[100,122001,122002],{"class":1836},"# 检查cuDNN版本命令\n",[100,122004,122005,122008,122011,122013,122015,122018,122021],{"class":102,"line":188},[100,122006,122007],{"class":106},"cat",[100,122009,122010],{"class":110}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[100,122012,26685],{"class":471},[100,122014,31806],{"class":106},[100,122016,122017],{"class":110}," CUDNN_MAJOR",[100,122019,122020],{"class":117}," -A",[100,122022,49277],{"class":117},[19,122024,122025],{},"出现下图这样的就是安装成功了",[19,122027,122028],{},[3095,122029],{"alt":79,"src":122030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[26,122032,122033],{"start":532},[29,122034,122035],{},"软链接(一般不需要)",[73,122037,122039],{"className":119765,"code":122038,"language":119767,"meta":79,"style":79},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[32,122040,122041,122046],{"__ignoreMap":79},[100,122042,122043],{"class":102,"line":103},[100,122044,122045],{"class":1836},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[100,122047,122048,122050],{"class":102,"line":188},[100,122049,107],{"class":106},[100,122051,122052],{"class":110}," ldconfig\n",[19,122054,122055],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[73,122057,122062],{"className":122058,"code":122059,"language":122060,"meta":122061,"style":79},"language-Plain shiki shiki-themes github-light github-dark","ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n","Plain","Text",[32,122063,122064,122069,122074,122079,122084,122089,122094],{"__ignoreMap":79},[100,122065,122066],{"class":102,"line":103},[100,122067,122068],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[100,122070,122071],{"class":102,"line":188},[100,122072,122073],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[100,122075,122076],{"class":102,"line":199},[100,122077,122078],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[100,122080,122081],{"class":102,"line":532},[100,122082,122083],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[100,122085,122086],{"class":102,"line":577},[100,122087,122088],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[100,122090,122091],{"class":102,"line":589},[100,122092,122093],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[100,122095,122096],{"class":102,"line":595},[100,122097,122098],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,122100,122101],{},"运行下方的命令",[73,122103,122105],{"className":119765,"code":122104,"language":119767,"meta":79,"style":79},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[32,122106,122107,122112,122119,122124],{"__ignoreMap":79},[100,122108,122109],{"class":102,"line":103},[100,122110,122111],{"class":1836},"# cd进入CUDA路径\n",[100,122113,122114,122116],{"class":102,"line":188},[100,122115,102797],{"class":117},[100,122117,122118],{"class":110}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[100,122120,122121],{"class":102,"line":199},[100,122122,122123],{"class":1836}," # 查看本路径下的需要软链接的文件名\n",[100,122125,122126],{"class":102,"line":532},[100,122127,122128],{"class":106}," ls\n",[19,122130,122131],{},[3095,122132],{"alt":79,"src":122133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,122135,122136,122137,19991,122140,19991,122143,122146],{},"如上图，我需要将",[32,122138,122139],{},"libcudnn_xxx_xxxxx.so.8.9.7",[32,122141,122142],{},"libcudnn_xxx_xxxxx.so.8",[32,122144,122145],{},"libcudnn_xxx_xxxxx.so","软链接",[73,122148,122150],{"className":119765,"code":122149,"language":119767,"meta":79,"style":79},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\nsudo ln -sf libcudnn_cnn_train.so.8.9.7 libcudnn_cnn_train.so.8\nsudo ln -sf libcudnn_adv_infer.so.8.9.7 libcudnn_adv_infer.so.8\nsudo ln -sf libcudnn_adv_train.so.8.9.7 libcudnn_adv_train.so.8\nsudo ln -sf libcudnn_cnn_infer.so.8.9.7 libcudnn_cnn_infer.so.8\nsudo ln -sf libcudnn.so.8.9.7 libcudnn.so.8\nsudo ln -sf libcudnn_ops_infer.so.8.9.7 libcudnn_ops_infer.so.8\nsudo ln -sf libcudnn_ops_train.so.8.9.7 libcudnn_ops_train.so.8\n# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\nsudo ldconfig\n# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\nls -l \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_*.so*\n",[32,122151,122152,122157,122173,122187,122201,122215,122229,122243,122257,122262,122268,122273],{"__ignoreMap":79},[100,122153,122154],{"class":102,"line":103},[100,122155,122156],{"class":1836},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[100,122158,122159,122161,122164,122167,122170],{"class":102,"line":188},[100,122160,107],{"class":106},[100,122162,122163],{"class":110}," ln",[100,122165,122166],{"class":117}," -sf",[100,122168,122169],{"class":110}," libcudnn_cnn_train.so.8.9.7",[100,122171,122172],{"class":110}," libcudnn_cnn_train.so.8\n",[100,122174,122175,122177,122179,122181,122184],{"class":102,"line":199},[100,122176,107],{"class":106},[100,122178,122163],{"class":110},[100,122180,122166],{"class":117},[100,122182,122183],{"class":110}," libcudnn_adv_infer.so.8.9.7",[100,122185,122186],{"class":110}," libcudnn_adv_infer.so.8\n",[100,122188,122189,122191,122193,122195,122198],{"class":102,"line":532},[100,122190,107],{"class":106},[100,122192,122163],{"class":110},[100,122194,122166],{"class":117},[100,122196,122197],{"class":110}," libcudnn_adv_train.so.8.9.7",[100,122199,122200],{"class":110}," libcudnn_adv_train.so.8\n",[100,122202,122203,122205,122207,122209,122212],{"class":102,"line":577},[100,122204,107],{"class":106},[100,122206,122163],{"class":110},[100,122208,122166],{"class":117},[100,122210,122211],{"class":110}," libcudnn_cnn_infer.so.8.9.7",[100,122213,122214],{"class":110}," libcudnn_cnn_infer.so.8\n",[100,122216,122217,122219,122221,122223,122226],{"class":102,"line":589},[100,122218,107],{"class":106},[100,122220,122163],{"class":110},[100,122222,122166],{"class":117},[100,122224,122225],{"class":110}," libcudnn.so.8.9.7",[100,122227,122228],{"class":110}," libcudnn.so.8\n",[100,122230,122231,122233,122235,122237,122240],{"class":102,"line":595},[100,122232,107],{"class":106},[100,122234,122163],{"class":110},[100,122236,122166],{"class":117},[100,122238,122239],{"class":110}," libcudnn_ops_infer.so.8.9.7",[100,122241,122242],{"class":110}," libcudnn_ops_infer.so.8\n",[100,122244,122245,122247,122249,122251,122254],{"class":102,"line":601},[100,122246,107],{"class":106},[100,122248,122163],{"class":110},[100,122250,122166],{"class":117},[100,122252,122253],{"class":110}," libcudnn_ops_train.so.8.9.7",[100,122255,122256],{"class":110}," libcudnn_ops_train.so.8\n",[100,122258,122259],{"class":102,"line":606},[100,122260,122261],{"class":1836},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[100,122263,122264,122266],{"class":102,"line":612},[100,122265,107],{"class":106},[100,122267,122052],{"class":110},[100,122269,122270],{"class":102,"line":618},[100,122271,122272],{"class":1836},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[100,122274,122275,122277,122280,122283,122285,122288],{"class":102,"line":623},[100,122276,28333],{"class":106},[100,122278,122279],{"class":117}," -l",[100,122281,122282],{"class":110}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[100,122284,2222],{"class":117},[100,122286,122287],{"class":110},".so",[100,122289,120490],{"class":117},[305,122291,122293],{"id":122292},"_355-常见问题","3.5.5 常见问题",[26,122295,122296],{},[29,122297,122298],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[73,122300,122302],{"className":119765,"code":122301,"language":119767,"meta":79,"style":79},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[32,122303,122304],{"__ignoreMap":79},[100,122305,122306,122308,122310],{"class":102,"line":103},[100,122307,107],{"class":106},[100,122309,119825],{"class":110},[100,122311,122312],{"class":110}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,122314,122315],{},"blacklist-nouveau.conf文件内容如下：",[73,122317,122319],{"className":119765,"code":122318,"language":119767,"meta":79,"style":79},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[32,122320,122321,122329,122336,122348,122358],{"__ignoreMap":79},[100,122322,122323,122326],{"class":102,"line":103},[100,122324,122325],{"class":106},"blacklist",[100,122327,122328],{"class":110}," nouveau\n",[100,122330,122331,122333],{"class":102,"line":188},[100,122332,122325],{"class":106},[100,122334,122335],{"class":110}," lbm-nouveau\n",[100,122337,122338,122340,122343,122346],{"class":102,"line":199},[100,122339,117172],{"class":106},[100,122341,122342],{"class":110}," nouveau",[100,122344,122345],{"class":110}," modeset=",[100,122347,4686],{"class":117},[100,122349,122350,122353,122355],{"class":102,"line":532},[100,122351,122352],{"class":117},"alias",[100,122354,122342],{"class":110},[100,122356,122357],{"class":110}," off\n",[100,122359,122360,122362,122365],{"class":102,"line":577},[100,122361,122352],{"class":117},[100,122363,122364],{"class":110}," lbm-nouveau",[100,122366,122357],{"class":110},[19,122368,122369],{},"接着运行下方命令",[73,122371,122373],{"className":119765,"code":122372,"language":119767,"meta":79,"style":79},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[32,122374,122375,122385,122390],{"__ignoreMap":79},[100,122376,122377,122379,122382],{"class":102,"line":103},[100,122378,107],{"class":106},[100,122380,122381],{"class":110}," update-initramfs",[100,122383,122384],{"class":117}," -u\n",[100,122386,122387],{"class":102,"line":188},[100,122388,122389],{"class":106},"或者\n",[100,122391,122392,122394,122397],{"class":102,"line":199},[100,122393,107],{"class":106},[100,122395,122396],{"class":110}," dracut",[100,122398,122399],{"class":117}," --force\n",[19,122401,122402],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[73,122404,122406],{"className":119765,"code":122405,"language":119767,"meta":79,"style":79},"lsmod | grep nouveau\n",[32,122407,122408],{"__ignoreMap":79},[100,122409,122410,122413,122415,122417],{"class":102,"line":103},[100,122411,122412],{"class":106},"lsmod",[100,122414,26685],{"class":471},[100,122416,31806],{"class":106},[100,122418,122328],{"class":110},[26,122420,122421],{"start":188},[29,122422,122423],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[73,122425,122427],{"className":119765,"code":122426,"language":119767,"meta":79,"style":79},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[32,122428,122429],{"__ignoreMap":79},[100,122430,122431,122433,122435],{"class":102,"line":103},[100,122432,107],{"class":106},[100,122434,119825],{"class":110},[100,122436,122437],{"class":110}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,122439,122440],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[73,122442,122444],{"className":119765,"code":122443,"language":119767,"meta":79,"style":79},"Section \"OutputClass\"\n   Identifier \"nvidia\"\n   MatchDriver \"nvidia-drm\"\n   Driver \"nvidia\"\n   Option \"AllowEmptyInitialConfiguration\"\n   Option \"PrimaryGPU\" \"yes\"\n   ModulePath \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\nEndSection\n",[32,122445,122446,122454,122462,122470,122477,122485,122495,122503],{"__ignoreMap":79},[100,122447,122448,122451],{"class":102,"line":103},[100,122449,122450],{"class":106},"Section",[100,122452,122453],{"class":110}," \"OutputClass\"\n",[100,122455,122456,122459],{"class":102,"line":188},[100,122457,122458],{"class":106},"   Identifier",[100,122460,122461],{"class":110}," \"nvidia\"\n",[100,122463,122464,122467],{"class":102,"line":199},[100,122465,122466],{"class":106},"   MatchDriver",[100,122468,122469],{"class":110}," \"nvidia-drm\"\n",[100,122471,122472,122475],{"class":102,"line":532},[100,122473,122474],{"class":106},"   Driver",[100,122476,122461],{"class":110},[100,122478,122479,122482],{"class":102,"line":577},[100,122480,122481],{"class":106},"   Option",[100,122483,122484],{"class":110}," \"AllowEmptyInitialConfiguration\"\n",[100,122486,122487,122489,122492],{"class":102,"line":589},[100,122488,122481],{"class":106},[100,122490,122491],{"class":110}," \"PrimaryGPU\"",[100,122493,122494],{"class":110}," \"yes\"\n",[100,122496,122497,122500],{"class":102,"line":595},[100,122498,122499],{"class":106},"   ModulePath",[100,122501,122502],{"class":110}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[100,122504,122505],{"class":102,"line":601},[100,122506,122507],{"class":106},"EndSection\n",[26,122509,122510],{"start":199},[29,122511,122512],{},"安装N卡驱动提示错误",[73,122514,122516],{"className":122058,"code":122515,"language":122060,"meta":122061,"style":79},"Unable to find the kernel source tree for the currently running kernel.  Please make sure you have installed the kernel source files for your kernel and that they are properly configured; on Red Hat Linux systems, for example, be sure you have the 'kernel-source' or 'kernel-devel' RPM installed.If you know the correct kernel source files are installed, you may specify the kernel source path with the '--kernel-source-path' command line option.\n",[32,122517,122518],{"__ignoreMap":79},[100,122519,122520],{"class":102,"line":103},[100,122521,122515],{},[26,122523,122524],{},[29,122525,122526],{},"检查当前运行的内核版本：",[19,122528,122529],{},"运行以下命令以查看你当前正在使用的内核版本：",[73,122531,122533],{"className":118538,"code":122532,"language":118540,"meta":79,"style":79},"uname -r\n",[32,122534,122535],{"__ignoreMap":79},[100,122536,122537,122539],{"class":102,"line":103},[100,122538,71758],{"class":106},[100,122540,122541],{"class":117}," -r\n",[26,122543,122544],{"start":188},[29,122545,122546],{},"安装内核开发文件：",[19,122548,122549,122550,122553],{},"确保你已经安装了与当前内核版本相匹配的 ",[32,122551,122552],{},"kernel-devel"," 包。运行以下命令来安装：",[73,122555,122557],{"className":118538,"code":122556,"language":118540,"meta":79,"style":79},"sudo dnf install kernel-devel-$(uname -r)\n",[32,122558,122559],{"__ignoreMap":79},[100,122560,122561,122563,122565,122567,122570,122572,122574,122576],{"class":102,"line":103},[100,122562,107],{"class":106},[100,122564,111],{"class":110},[100,122566,114],{"class":110},[100,122568,122569],{"class":110}," kernel-devel-",[100,122571,26675],{"class":258},[100,122573,71758],{"class":106},[100,122575,120881],{"class":117},[100,122577,809],{"class":258},[19,122579,122580],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[26,122582,122583],{"start":199},[29,122584,122585],{},"安装内核源代码（如果需要）：",[19,122587,122588],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[73,122590,122592],{"className":118538,"code":122591,"language":118540,"meta":79,"style":79},"sudo dnf install kernel-headers kernel-source\n",[32,122593,122594],{"__ignoreMap":79},[100,122595,122596,122598,122600,122602,122605],{"class":102,"line":103},[100,122597,107],{"class":106},[100,122599,111],{"class":110},[100,122601,114],{"class":110},[100,122603,122604],{"class":110}," kernel-headers",[100,122606,122607],{"class":110}," kernel-source\n",[26,122609,122610],{"start":532},[29,122611,122612],{},"检查安装：",[19,122614,122615,122616,122619],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[32,122617,122618],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[73,122621,122623],{"className":118538,"code":122622,"language":118540,"meta":79,"style":79},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[32,122624,122625],{"__ignoreMap":79},[100,122626,122627,122629],{"class":102,"line":103},[100,122628,28333],{"class":106},[100,122630,122631],{"class":110}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,122633,122634,122635,122638],{},"如果仍然遇到问题，可以通过 ",[32,122636,122637],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[1677,122640,122641],{},"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":79,"searchDepth":188,"depth":188,"links":122643},[122644,122648,122658,122662,122663],{"id":119741,"depth":188,"text":119742,"children":122645},[122646,122647],{"id":119751,"depth":199,"text":119752},{"id":119761,"depth":199,"text":119762},{"id":119961,"depth":188,"text":119962,"children":122649},[122650,122651,122652,122653,122654,122655,122656,122657],{"id":119965,"depth":199,"text":119966},{"id":120035,"depth":199,"text":120036},{"id":120124,"depth":199,"text":120125},{"id":120369,"depth":199,"text":120370},{"id":120439,"depth":199,"text":120440},{"id":120506,"depth":199,"text":120507},{"id":120541,"depth":199,"text":120542},{"id":120596,"depth":199,"text":120597},{"id":120647,"depth":188,"text":120648,"children":122659},[122660,122661],{"id":120651,"depth":199,"text":120652},{"id":120731,"depth":199,"text":120732},{"id":120917,"depth":188,"text":120918},{"id":121090,"depth":188,"text":121091,"children":122664},[122665,122666,122667,122668,122669],{"id":121094,"depth":199,"text":121095},{"id":121135,"depth":199,"text":121136},{"id":121422,"depth":199,"text":121423},{"id":121796,"depth":199,"text":121797},{"id":122292,"depth":199,"text":122293},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":119733,"description":24958},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":122676,"title":122677,"body":122678,"description":24958,"extension":1708,"meta":123018,"navigation":569,"path":123019,"seo":123020,"stem":123021,"__hash__":123022},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":122679,"toc":123016},[122680,122683,122688,122691,122937,122942,122945,122981,122984,123013],[10,122681,122677],{"id":122682},"_4-命令教程长期积累",[26,122684,122685],{},[29,122686,122687],{},"大多数命令",[19,122689,122690],{},"常用 Linux 命令速查：",[73,122692,122694],{"className":118538,"code":122693,"language":118540,"meta":79,"style":79},"# 文件与目录\nls        # 列出目录内容\ncd        # 切换目录\npwd       # 显示当前路径\nmkdir     # 创建目录\nrm        # 删除文件或目录\ncp        # 复制文件或目录\nmv        # 移动\u002F重命名文件或目录\ntouch     # 创建空文件\ncat       # 查看文件内容\nhead\u002Ftail # 查看文件头部\u002F尾部\n\n# 权限管理\nchmod     # 修改文件权限\nchown     # 修改文件所有者\nsudo      # 以管理员身份执行\n\n# 系统信息\nuname     # 系统信息\ndf        # 磁盘使用情况\nfree      # 内存使用情况\ntop\u002Fhtop  # 进程监控\nps        # 查看进程\n\n# 网络\nping      # 测试网络连通性\ncurl      # 发送 HTTP 请求\nwget      # 下载文件\nssh       # 远程登录\nscp       # 远程文件传输\n\n# 包管理（Debian\u002FUbuntu）\napt update   # 更新软件源\napt install  # 安装软件包\napt remove   # 卸载软件包\n",[32,122695,122696,122701,122708,122715,122723,122730,122737,122745,122753,122760,122767,122775,122779,122784,122791,122799,122806,122810,122815,122822,122830,122838,122846,122854,122858,122863,122871,122878,122885,122893,122901,122905,122910,122919,122928],{"__ignoreMap":79},[100,122697,122698],{"class":102,"line":103},[100,122699,122700],{"class":1836},"# 文件与目录\n",[100,122702,122703,122705],{"class":102,"line":188},[100,122704,28333],{"class":106},[100,122706,122707],{"class":1836},"        # 列出目录内容\n",[100,122709,122710,122712],{"class":102,"line":199},[100,122711,102797],{"class":117},[100,122713,122714],{"class":1836},"        # 切换目录\n",[100,122716,122717,122720],{"class":102,"line":532},[100,122718,122719],{"class":117},"pwd",[100,122721,122722],{"class":1836},"       # 显示当前路径\n",[100,122724,122725,122727],{"class":102,"line":577},[100,122726,102787],{"class":106},[100,122728,122729],{"class":1836},"     # 创建目录\n",[100,122731,122732,122734],{"class":102,"line":589},[100,122733,26897],{"class":106},[100,122735,122736],{"class":1836},"        # 删除文件或目录\n",[100,122738,122739,122742],{"class":102,"line":595},[100,122740,122741],{"class":106},"cp",[100,122743,122744],{"class":1836},"        # 复制文件或目录\n",[100,122746,122747,122750],{"class":102,"line":601},[100,122748,122749],{"class":106},"mv",[100,122751,122752],{"class":1836},"        # 移动\u002F重命名文件或目录\n",[100,122754,122755,122757],{"class":102,"line":606},[100,122756,988],{"class":106},[100,122758,122759],{"class":1836},"     # 创建空文件\n",[100,122761,122762,122764],{"class":102,"line":612},[100,122763,122007],{"class":106},[100,122765,122766],{"class":1836},"       # 查看文件内容\n",[100,122768,122769,122772],{"class":102,"line":618},[100,122770,122771],{"class":106},"head\u002Ftail",[100,122773,122774],{"class":1836}," # 查看文件头部\u002F尾部\n",[100,122776,122777],{"class":102,"line":623},[100,122778,570],{"emptyLinePlaceholder":569},[100,122780,122781],{"class":102,"line":629},[100,122782,122783],{"class":1836},"# 权限管理\n",[100,122785,122786,122788],{"class":102,"line":635},[100,122787,26188],{"class":106},[100,122789,122790],{"class":1836},"     # 修改文件权限\n",[100,122792,122793,122796],{"class":102,"line":641},[100,122794,122795],{"class":106},"chown",[100,122797,122798],{"class":1836},"     # 修改文件所有者\n",[100,122800,122801,122803],{"class":102,"line":647},[100,122802,107],{"class":106},[100,122804,122805],{"class":1836},"      # 以管理员身份执行\n",[100,122807,122808],{"class":102,"line":653},[100,122809,570],{"emptyLinePlaceholder":569},[100,122811,122812],{"class":102,"line":659},[100,122813,122814],{"class":1836},"# 系统信息\n",[100,122816,122817,122819],{"class":102,"line":665},[100,122818,71758],{"class":106},[100,122820,122821],{"class":1836},"     # 系统信息\n",[100,122823,122824,122827],{"class":102,"line":670},[100,122825,122826],{"class":106},"df",[100,122828,122829],{"class":1836},"        # 磁盘使用情况\n",[100,122831,122832,122835],{"class":102,"line":675},[100,122833,122834],{"class":106},"free",[100,122836,122837],{"class":1836},"      # 内存使用情况\n",[100,122839,122840,122843],{"class":102,"line":699},[100,122841,122842],{"class":106},"top\u002Fhtop",[100,122844,122845],{"class":1836},"  # 进程监控\n",[100,122847,122848,122851],{"class":102,"line":708},[100,122849,122850],{"class":106},"ps",[100,122852,122853],{"class":1836},"        # 查看进程\n",[100,122855,122856],{"class":102,"line":722},[100,122857,570],{"emptyLinePlaceholder":569},[100,122859,122860],{"class":102,"line":735},[100,122861,122862],{"class":1836},"# 网络\n",[100,122864,122865,122868],{"class":102,"line":754},[100,122866,122867],{"class":106},"ping",[100,122869,122870],{"class":1836},"      # 测试网络连通性\n",[100,122872,122873,122875],{"class":102,"line":771},[100,122874,28421],{"class":106},[100,122876,122877],{"class":1836},"      # 发送 HTTP 请求\n",[100,122879,122880,122882],{"class":102,"line":776},[100,122881,121531],{"class":106},[100,122883,122884],{"class":1836},"      # 下载文件\n",[100,122886,122887,122890],{"class":102,"line":781},[100,122888,122889],{"class":106},"ssh",[100,122891,122892],{"class":1836},"       # 远程登录\n",[100,122894,122895,122898],{"class":102,"line":796},[100,122896,122897],{"class":106},"scp",[100,122899,122900],{"class":1836},"       # 远程文件传输\n",[100,122902,122903],{"class":102,"line":812},[100,122904,570],{"emptyLinePlaceholder":569},[100,122906,122907],{"class":102,"line":823},[100,122908,122909],{"class":1836},"# 包管理（Debian\u002FUbuntu）\n",[100,122911,122912,122914,122916],{"class":102,"line":828},[100,122913,118610],{"class":106},[100,122915,118589],{"class":110},[100,122917,122918],{"class":1836},"   # 更新软件源\n",[100,122920,122921,122923,122925],{"class":102,"line":840},[100,122922,118610],{"class":106},[100,122924,114],{"class":110},[100,122926,122927],{"class":1836},"  # 安装软件包\n",[100,122929,122930,122932,122934],{"class":102,"line":845},[100,122931,118610],{"class":106},[100,122933,27653],{"class":110},[100,122935,122936],{"class":1836},"   # 卸载软件包\n",[26,122938,122939],{"start":188},[29,122940,122941],{},"KDE Dolphin 以root打开",[19,122943,122944],{},"kde5",[73,122946,122948],{"className":118538,"code":122947,"language":118540,"meta":79,"style":79},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[32,122949,122950],{"__ignoreMap":79},[100,122951,122952,122955,122958,122961,122963,122965,122968,122971,122973,122976,122978],{"class":102,"line":103},[100,122953,122954],{"class":106},"pkexec",[100,122956,122957],{"class":110}," env",[100,122959,122960],{"class":110}," DISPLAY=",[100,122962,29715],{"class":258},[100,122964,29773],{"class":110},[100,122966,122967],{"class":258},"$XAUTHORITY ",[100,122969,122970],{"class":110},"KDE_SESSION_VERSION=",[100,122972,2086],{"class":117},[100,122974,122975],{"class":110}," KDE_FULL_SESSION=",[100,122977,2995],{"class":117},[100,122979,122980],{"class":110}," dolphin\n",[19,122982,122983],{},"kde6",[73,122985,122987],{"className":118538,"code":122986,"language":118540,"meta":79,"style":79},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[32,122988,122989],{"__ignoreMap":79},[100,122990,122991,122993,122995,122997,122999,123001,123003,123005,123007,123009,123011],{"class":102,"line":103},[100,122992,122954],{"class":106},[100,122994,122957],{"class":110},[100,122996,122960],{"class":110},[100,122998,29715],{"class":258},[100,123000,29773],{"class":110},[100,123002,122967],{"class":258},[100,123004,122970],{"class":110},[100,123006,2111],{"class":117},[100,123008,122975],{"class":110},[100,123010,2995],{"class":117},[100,123012,122980],{"class":110},[1677,123014,123015],{},"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":79,"searchDepth":188,"depth":188,"links":123017},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":122677,"description":24958},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":123024,"title":123025,"body":123026,"description":24958,"extension":1708,"meta":123040,"navigation":569,"path":123041,"seo":123042,"stem":123043,"__hash__":123044},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":123027,"toc":123038},[123028,123031],[10,123029,123025],{"id":123030},"_5-各种环境配置",[19,123032,123033],{},[2006,123034,123037],{"href":123035,"rel":123036},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[25442],"电控组环境搭建大全",{"title":79,"searchDepth":188,"depth":188,"links":123039},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":123025,"description":24958},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":123046,"title":123047,"body":123048,"description":24958,"extension":1708,"meta":123396,"navigation":569,"path":123397,"seo":123398,"stem":123399,"__hash__":123400},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":123049,"toc":123388},[123050,123053,123057,123061,123065,123070,123077,123081,123374,123378,123385],[10,123051,123047],{"id":123052},"_6-拓展功能",[14,123054,123056],{"id":123055},"_61-wine","6.1 Wine",[14,123058,123060],{"id":123059},"_62-android","6.2 Android",[305,123062,123064],{"id":123063},"_621-i卡a卡","6.2.1 I卡、A卡",[26,123066,123067],{},[29,123068,123069],{},"Wayland-Waydroid(体验超级好)",[19,123071,123072,123073],{},"Waydroid 官网与安装指南：",[2006,123074,123075],{"href":123075,"rel":123076},"https:\u002F\u002Fwaydro.id\u002F",[25442],[305,123078,123080],{"id":123079},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[26,123082,123083],{},[29,123084,123085,123086,123088,123089,123093,123095,123098,123103,123300],{},"QEMU-KVM虚拟机 + BlissOS-X86",[55270,123087],{},"BlissOS 官网下载：",[2006,123090,123091],{"href":123091,"rel":123092},"https:\u002F\u002Fblissos.org\u002F",[25442],[55270,123094],{},[3095,123096],{"alt":79,"src":123097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[26,123099,123100],{"start":199},[29,123101,123102],{},"比较推荐的配置",[73,123104,123106],{"className":118538,"code":123105,"language":118540,"meta":79,"style":79},"qemu-system-x86_64 \\\n        -M q35,vmport=off \\\n        -accel kvm \\\n        -cpu qemu64,+sse3,+sse4.2 \\\n        -smp 8,cores=4 \\\n        -m 6G \\\n        -usb \\\n        -device virtio-tablet \\\n        -device virtio-keyboard \\\n        -device usb-tablet \\\n        -bios OVMF-pure-efi64.fd \\\n        -net user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022 \\\n        -net nic,model=virtio \\\n        -audio sdl,model=hda \\\n        -display sdl,gl=on,show-cursor=on \\\n        -device virtio-vga-gl,xres=1920,yres=1080 \\\n        -drive file=disk.qcow2,media=disk,if=virtio,cache=writeback \\\n        -drive file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom \\\n        -monitor stdio \\\n        -serial none\n",[32,123107,123108,123115,123125,123135,123145,123157,123167,123174,123184,123193,123202,123212,123222,123231,123241,123251,123263,123273,123282,123292],{"__ignoreMap":79},[100,123109,123110,123113],{"class":102,"line":103},[100,123111,123112],{"class":106},"qemu-system-x86_64",[100,123114,26254],{"class":117},[100,123116,123117,123120,123123],{"class":102,"line":188},[100,123118,123119],{"class":117},"        -M",[100,123121,123122],{"class":110}," q35,vmport=off",[100,123124,26254],{"class":117},[100,123126,123127,123130,123133],{"class":102,"line":199},[100,123128,123129],{"class":117},"        -accel",[100,123131,123132],{"class":110}," kvm",[100,123134,26254],{"class":117},[100,123136,123137,123140,123143],{"class":102,"line":532},[100,123138,123139],{"class":117},"        -cpu",[100,123141,123142],{"class":110}," qemu64,+sse3,+sse4.2",[100,123144,26254],{"class":117},[100,123146,123147,123150,123153,123155],{"class":102,"line":577},[100,123148,123149],{"class":117},"        -smp",[100,123151,123152],{"class":110}," 8,cores=",[100,123154,748],{"class":117},[100,123156,26254],{"class":117},[100,123158,123159,123162,123165],{"class":102,"line":589},[100,123160,123161],{"class":117},"        -m",[100,123163,123164],{"class":110}," 6G",[100,123166,26254],{"class":117},[100,123168,123169,123172],{"class":102,"line":595},[100,123170,123171],{"class":117},"        -usb",[100,123173,26254],{"class":117},[100,123175,123176,123179,123182],{"class":102,"line":601},[100,123177,123178],{"class":117},"        -device",[100,123180,123181],{"class":110}," virtio-tablet",[100,123183,26254],{"class":117},[100,123185,123186,123188,123191],{"class":102,"line":606},[100,123187,123178],{"class":117},[100,123189,123190],{"class":110}," virtio-keyboard",[100,123192,26254],{"class":117},[100,123194,123195,123197,123200],{"class":102,"line":612},[100,123196,123178],{"class":117},[100,123198,123199],{"class":110}," usb-tablet",[100,123201,26254],{"class":117},[100,123203,123204,123207,123210],{"class":102,"line":618},[100,123205,123206],{"class":117},"        -bios",[100,123208,123209],{"class":110}," OVMF-pure-efi64.fd",[100,123211,26254],{"class":117},[100,123213,123214,123217,123220],{"class":102,"line":623},[100,123215,123216],{"class":117},"        -net",[100,123218,123219],{"class":110}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[100,123221,26254],{"class":117},[100,123223,123224,123226,123229],{"class":102,"line":629},[100,123225,123216],{"class":117},[100,123227,123228],{"class":110}," nic,model=virtio",[100,123230,26254],{"class":117},[100,123232,123233,123236,123239],{"class":102,"line":635},[100,123234,123235],{"class":117},"        -audio",[100,123237,123238],{"class":110}," sdl,model=hda",[100,123240,26254],{"class":117},[100,123242,123243,123246,123249],{"class":102,"line":641},[100,123244,123245],{"class":117},"        -display",[100,123247,123248],{"class":110}," sdl,gl=on,show-cursor=on",[100,123250,26254],{"class":117},[100,123252,123253,123255,123258,123261],{"class":102,"line":647},[100,123254,123178],{"class":117},[100,123256,123257],{"class":110}," virtio-vga-gl,xres=1920,yres=",[100,123259,123260],{"class":117},"1080",[100,123262,26254],{"class":117},[100,123264,123265,123268,123271],{"class":102,"line":653},[100,123266,123267],{"class":117},"        -drive",[100,123269,123270],{"class":110}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[100,123272,26254],{"class":117},[100,123274,123275,123277,123280],{"class":102,"line":659},[100,123276,123267],{"class":117},[100,123278,123279],{"class":110}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[100,123281,26254],{"class":117},[100,123283,123284,123287,123290],{"class":102,"line":665},[100,123285,123286],{"class":117},"        -monitor",[100,123288,123289],{"class":110}," stdio",[100,123291,26254],{"class":117},[100,123293,123294,123297],{"class":102,"line":670},[100,123295,123296],{"class":117},"        -serial",[100,123298,123299],{"class":110}," none\n",[26,123301,123302],{"start":577},[29,123303,123304,123305],{},"常用操作：",[26,123306,123307,123310,123366],{},[29,123308,123309],{},"全屏：Ctrl+Alt+F",[29,123311,123312,123313,123318],{},"adb调试",[26,123314,123315],{},[29,123316,123317],{},"使Linux与Android用ADB连接。",[73,123319,123321],{"className":118538,"code":123320,"language":118540,"meta":79,"style":79},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[32,123322,123323,123328,123339,123344,123356,123361],{"__ignoreMap":79},[100,123324,123325],{"class":102,"line":103},[100,123326,123327],{"class":1836},"# 连接安卓\n",[100,123329,123330,123333,123336],{"class":102,"line":188},[100,123331,123332],{"class":106},"adb",[100,123334,123335],{"class":110}," connect",[100,123337,123338],{"class":117}," 127.0.0.1\n",[100,123340,123341],{"class":102,"line":199},[100,123342,123343],{"class":1836},"# 打开shell\n",[100,123345,123346,123348,123350,123353],{"class":102,"line":532},[100,123347,123332],{"class":106},[100,123349,28455],{"class":117},[100,123351,123352],{"class":110}," 127.0.0.1:5555",[100,123354,123355],{"class":110}," shell\n",[100,123357,123358],{"class":102,"line":577},[100,123359,123360],{"class":1836},"# 使用root权限\n",[100,123362,123363],{"class":102,"line":589},[100,123364,123365],{"class":106},"su\n",[29,123367,123368,123369],{},"中文输入法",[26,123370,123371],{},[29,123372,123373],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,123375,123377],{"id":123376},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,123379,123380,123381],{},"rEFInd 官网与文档：",[2006,123382,123383],{"href":123383,"rel":123384},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[25442],[1677,123386,123387],{},"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":79,"searchDepth":188,"depth":188,"links":123389},[123390,123391,123395],{"id":123055,"depth":188,"text":123056},{"id":123059,"depth":188,"text":123060,"children":123392},[123393,123394],{"id":123063,"depth":199,"text":123064},{"id":123079,"depth":199,"text":123080},{"id":123376,"depth":188,"text":123377},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":123047,"description":24958},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":123402,"title":123403,"body":123404,"description":24958,"extension":1708,"meta":126703,"navigation":569,"path":126704,"seo":126705,"stem":126706,"__hash__":126707},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":123405,"toc":126677},[123406,123409,123413,123416,123423,123673,123676,123748,123751,123755,123759,123764,123767,123770,123773,123778,123781,123784,123787,123792,123795,123800,123803,123806,123811,123814,123819,123822,123826,123830,123833,123838,123841,123855,123858,123861,123870,123873,123882,123885,123888,123897,123900,123909,123912,123915,123924,123927,123930,123945,123948,123951,123960,123965,123968,123971,123980,123983,123992,123995,124004,124007,124016,124021,124024,124032,124037,124040,124049,124052,124060,124065,124068,124077,124080,124083,124087,124090,124095,124098,124103,124117,124122,124127,124138,124143,124149,124154,124169,124174,124177,124182,124187,124192,124200,124205,124212,124217,124228,124233,124236,124240,124243,124246,124251,124254,124273,124278,124281,124290,124295,124298,124320,124323,124353,124356,124361,124364,124378,124383,124402,124405,124408,124413,124425,124430,124435,124438,124443,124446,124461,124464,124469,124474,124478,124483,124523,124526,124530,124536,124542,124547,124550,124557,124562,124569,124572,124575,124582,124596,124599,124659,124662,124676,124688,124691,124694,124697,124761,124764,124767,124770,124790,124793,124798,124805,124809,124812,124816,124821,124826,124830,124833,124836,124878,124883,124886,124908,124923,124925,124930,124942,125002,125004,125006,125060,125062,125064,125070,125075,125078,125083,125087,125090,125152,125157,125160,125162,125166,125178,125260,125262,125264,125318,125324,125326,125330,125335,125337,125342,125346,125366,125401,125405,125408,125411,125414,125421,125424,125436,125439,125454,125457,125476,125524,125527,125544,125547,125561,125566,125569,125578,125593,125605,125643,125648,125657,125662,125667,125693,125702,125706,125710,125715,125718,125722,125726,125731,125734,125739,125742,125747,125750,125755,125758,125762,125767,125770,125775,125778,125782,125787,125790,125795,125798,125803,125806,125810,125815,125818,125823,125826,125831,125834,125838,125843,125846,125851,125854,125859,125862,125867,125870,125875,125878,125883,125886,125890,125895,125898,125903,125910,125914,125919,125922,125927,125930,125934,125939,125942,125945,125948,125951,125954,125958,125961,125971,125976,125981,126003,126008,126013,126020,126024,126029,126032,126035,126040,126043,126046,126049,126052,126055,126058,126061,126064,126067,126070,126073,126076,126081,126086,126091,126096,126101,126106,126111,126114,126118,126121,126125,126130,126135,126140,126145,126149,126155,126163,126168,126171,126176,126191,126194,126199,126233,126248,126251,126306,126332,126344,126347,126356,126359,126374,126379,126382,126388,126393,126396,126401,126404,126409,126414,126421,126424,126439,126442,126477,126482,126490,126528,126531,126534,126539,126542,126547,126558,126592,126597,126600,126609,126614,126620,126623,126628,126637,126642,126645,126648,126653,126661,126664,126669,126674],[10,123407,123403],{"id":123408},"_7-其他操作",[14,123410,123412],{"id":123411},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,123414,123415],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,123417,123418,123419,123422],{},"进入工控机的硬盘目录，进入",[32,123420,123421],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[73,123424,123428],{"className":123425,"code":123426,"language":123427,"meta":79,"style":79},"language-YAML shiki shiki-themes github-light github-dark","network: \n  version: 2 \n  wifis: \n    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96: \n      renderer: NetworkManager \n      match: \n        name: \"wlan0\" \n      dhcp4: true \n      dhcp6: true \n      access-points: \n        \"EMIS_Vinci_Robocon_5G\": \n          auth: \n            key-management: \"psk\" \n            password: \"vinci666\" \n          networkmanager: \n            uuid: \"6f414fe0-2658-48ff-89ee-c7981b87bc96\" \n            name: \"EMIS_Vinci_Robocon_5G\" \n            passthrough: \n              wifi-security.auth-alg: \"open\" \n              ipv6.addr-gen-mode: \"default\" \n              ipv6.ip6-privacy: \"-1\" \n              proxy._: \"\" \n      networkmanager: \n        uuid: \"6f414fe0-2658-48ff-89ee-c7981b87bc96\" \n        name: \"EMIS_Vinci_Robocon_5G\"\n \n","YAML",[32,123429,123430,123438,123449,123456,123463,123475,123482,123494,123505,123516,123523,123530,123537,123549,123561,123568,123580,123592,123599,123611,123623,123635,123646,123653,123664],{"__ignoreMap":79},[100,123431,123432,123435],{"class":102,"line":103},[100,123433,123434],{"class":52854},"network",[100,123436,123437],{"class":258},": \n",[100,123439,123440,123443,123445,123447],{"class":102,"line":188},[100,123441,123442],{"class":52854},"  version",[100,123444,52991],{"class":258},[100,123446,465],{"class":117},[100,123448,4276],{"class":258},[100,123450,123451,123454],{"class":102,"line":199},[100,123452,123453],{"class":52854},"  wifis",[100,123455,123437],{"class":258},[100,123457,123458,123461],{"class":102,"line":532},[100,123459,123460],{"class":52854},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[100,123462,123437],{"class":258},[100,123464,123465,123468,123470,123473],{"class":102,"line":577},[100,123466,123467],{"class":52854},"      renderer",[100,123469,52991],{"class":258},[100,123471,123472],{"class":110},"NetworkManager",[100,123474,4276],{"class":258},[100,123476,123477,123480],{"class":102,"line":589},[100,123478,123479],{"class":52854},"      match",[100,123481,123437],{"class":258},[100,123483,123484,123487,123489,123492],{"class":102,"line":595},[100,123485,123486],{"class":52854},"        name",[100,123488,52991],{"class":258},[100,123490,123491],{"class":110},"\"wlan0\"",[100,123493,4276],{"class":258},[100,123495,123496,123499,123501,123503],{"class":102,"line":601},[100,123497,123498],{"class":52854},"      dhcp4",[100,123500,52991],{"class":258},[100,123502,2995],{"class":117},[100,123504,4276],{"class":258},[100,123506,123507,123510,123512,123514],{"class":102,"line":606},[100,123508,123509],{"class":52854},"      dhcp6",[100,123511,52991],{"class":258},[100,123513,2995],{"class":117},[100,123515,4276],{"class":258},[100,123517,123518,123521],{"class":102,"line":612},[100,123519,123520],{"class":52854},"      access-points",[100,123522,123437],{"class":258},[100,123524,123525,123528],{"class":102,"line":618},[100,123526,123527],{"class":110},"        \"EMIS_Vinci_Robocon_5G\"",[100,123529,123437],{"class":258},[100,123531,123532,123535],{"class":102,"line":623},[100,123533,123534],{"class":52854},"          auth",[100,123536,123437],{"class":258},[100,123538,123539,123542,123544,123547],{"class":102,"line":629},[100,123540,123541],{"class":52854},"            key-management",[100,123543,52991],{"class":258},[100,123545,123546],{"class":110},"\"psk\"",[100,123548,4276],{"class":258},[100,123550,123551,123554,123556,123559],{"class":102,"line":635},[100,123552,123553],{"class":52854},"            password",[100,123555,52991],{"class":258},[100,123557,123558],{"class":110},"\"vinci666\"",[100,123560,4276],{"class":258},[100,123562,123563,123566],{"class":102,"line":641},[100,123564,123565],{"class":52854},"          networkmanager",[100,123567,123437],{"class":258},[100,123569,123570,123573,123575,123578],{"class":102,"line":647},[100,123571,123572],{"class":52854},"            uuid",[100,123574,52991],{"class":258},[100,123576,123577],{"class":110},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[100,123579,4276],{"class":258},[100,123581,123582,123585,123587,123590],{"class":102,"line":653},[100,123583,123584],{"class":52854},"            name",[100,123586,52991],{"class":258},[100,123588,123589],{"class":110},"\"EMIS_Vinci_Robocon_5G\"",[100,123591,4276],{"class":258},[100,123593,123594,123597],{"class":102,"line":659},[100,123595,123596],{"class":52854},"            passthrough",[100,123598,123437],{"class":258},[100,123600,123601,123604,123606,123609],{"class":102,"line":665},[100,123602,123603],{"class":52854},"              wifi-security.auth-alg",[100,123605,52991],{"class":258},[100,123607,123608],{"class":110},"\"open\"",[100,123610,4276],{"class":258},[100,123612,123613,123616,123618,123621],{"class":102,"line":670},[100,123614,123615],{"class":52854},"              ipv6.addr-gen-mode",[100,123617,52991],{"class":258},[100,123619,123620],{"class":110},"\"default\"",[100,123622,4276],{"class":258},[100,123624,123625,123628,123630,123633],{"class":102,"line":675},[100,123626,123627],{"class":52854},"              ipv6.ip6-privacy",[100,123629,52991],{"class":258},[100,123631,123632],{"class":110},"\"-1\"",[100,123634,4276],{"class":258},[100,123636,123637,123640,123642,123644],{"class":102,"line":699},[100,123638,123639],{"class":52854},"              proxy._",[100,123641,52991],{"class":258},[100,123643,9248],{"class":110},[100,123645,4276],{"class":258},[100,123647,123648,123651],{"class":102,"line":708},[100,123649,123650],{"class":52854},"      networkmanager",[100,123652,123437],{"class":258},[100,123654,123655,123658,123660,123662],{"class":102,"line":722},[100,123656,123657],{"class":52854},"        uuid",[100,123659,52991],{"class":258},[100,123661,123577],{"class":110},[100,123663,4276],{"class":258},[100,123665,123666,123668,123670],{"class":102,"line":735},[100,123667,123486],{"class":52854},[100,123669,52991],{"class":258},[100,123671,123672],{"class":110},"\"EMIS_Vinci_Robocon_5G\"\n",[19,123674,123675],{},"将其改为新wifi的名和密码：",[73,123677,123679],{"className":123425,"code":123678,"language":123427,"meta":79,"style":79},"network:\n  version: 2\n  wifis:\n    wlan0:\n      dhcp4: true\n      dhcp6: true\n      access-points:\n        \"EMIS_Vinci_Robocon_5G\":\n          password: \"vinci666\"\n\n",[32,123680,123681,123687,123696,123702,123709,123718,123726,123732,123738],{"__ignoreMap":79},[100,123682,123683,123685],{"class":102,"line":103},[100,123684,123434],{"class":52854},[100,123686,696],{"class":258},[100,123688,123689,123691,123693],{"class":102,"line":188},[100,123690,123442],{"class":52854},[100,123692,52991],{"class":258},[100,123694,123695],{"class":117},"2\n",[100,123697,123698,123700],{"class":102,"line":199},[100,123699,123453],{"class":52854},[100,123701,696],{"class":258},[100,123703,123704,123707],{"class":102,"line":532},[100,123705,123706],{"class":52854},"    wlan0",[100,123708,696],{"class":258},[100,123710,123711,123713,123715],{"class":102,"line":577},[100,123712,123498],{"class":52854},[100,123714,52991],{"class":258},[100,123716,123717],{"class":117},"true\n",[100,123719,123720,123722,123724],{"class":102,"line":589},[100,123721,123509],{"class":52854},[100,123723,52991],{"class":258},[100,123725,123717],{"class":117},[100,123727,123728,123730],{"class":102,"line":595},[100,123729,123520],{"class":52854},[100,123731,696],{"class":258},[100,123733,123734,123736],{"class":102,"line":601},[100,123735,123527],{"class":110},[100,123737,696],{"class":258},[100,123739,123740,123743,123745],{"class":102,"line":606},[100,123741,123742],{"class":52854},"          password",[100,123744,52991],{"class":258},[100,123746,123747],{"class":110},"\"vinci666\"\n",[19,123749,123750],{},"工控机开机即可连上网。",[14,123752,123754],{"id":123753},"_72-ssh远程开发","7.2 SSH远程开发",[305,123756,123758],{"id":123757},"_721-环境准备","7.2.1 环境准备",[19,123760,123761],{},[1921,123762,123763],{},"1.硬件准备",[19,123765,123766],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,123768,123769],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,123771,123772],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,123774,123775],{},[1921,123776,123777],{},"2.设置固定IP",[19,123779,123780],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,123782,123783],{},"1.进入设置界面",[19,123785,123786],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,123788,123789],{},[3095,123790],{"alt":79,"src":123791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,123793,123794],{},"2.配置所连接的网络",[19,123796,123797],{},[3095,123798],{"alt":79,"src":123799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,123801,123802],{},"3.设置固定IP",[19,123804,123805],{},"查看当前IP地址。",[19,123807,123808],{},[3095,123809],{"alt":79,"src":123810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,123812,123813],{},"设置固定IP。",[19,123815,123816],{},[3095,123817],{"alt":79,"src":123818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,123820,123821],{},"至此，IP配置完毕。",[305,123823,123825],{"id":123824},"_722-环境搭建","7.2.2 环境搭建",[19,123827,123828],{},[1921,123829,27328],{},[19,123831,123832],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,123834,123835],{},[1921,123836,123837],{},"实现",[19,123839,123840],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[26,123842,123843,123846,123849,123852],{},[29,123844,123845],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[29,123847,123848],{},"远程主机启动SSH服务；",[29,123850,123851],{},"本地主机登陆远程主机；",[29,123853,123854],{},"实现数据传输。",[19,123856,123857],{},"1.安装SSH客户端与服务端",[19,123859,123860],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[73,123862,123864],{"className":122058,"code":123863,"language":122060,"meta":122061,"style":79}," sudo apt install openssh-server\n",[32,123865,123866],{"__ignoreMap":79},[100,123867,123868],{"class":102,"line":103},[100,123869,123863],{},[19,123871,123872],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[73,123874,123876],{"className":122058,"code":123875,"language":122060,"meta":122061,"style":79},"sudo apt install openssh-client\n",[32,123877,123878],{"__ignoreMap":79},[100,123879,123880],{"class":102,"line":103},[100,123881,123875],{},[19,123883,123884],{},"2.远程主机启动SSH服务",[19,123886,123887],{},"远程主机启动 ssh 服务命令如下：",[73,123889,123891],{"className":122058,"code":123890,"language":122060,"meta":122061,"style":79},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[32,123892,123893],{"__ignoreMap":79},[100,123894,123895],{"class":102,"line":103},[100,123896,123890],{},[19,123898,123899],{},"启动后可使用如下命令查看服务是否正常运行：",[73,123901,123903],{"className":122058,"code":123902,"language":122060,"meta":122061,"style":79},"ps -e | grep ssh\n",[32,123904,123905],{"__ignoreMap":79},[100,123906,123907],{"class":102,"line":103},[100,123908,123902],{},[19,123910,123911],{},"如果启动成功，会包含 sshd 程序。",[19,123913,123914],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[73,123916,123918],{"className":122058,"code":123917,"language":122060,"meta":122061,"style":79},"sudo systemctl enable ssh\n",[32,123919,123920],{"__ignoreMap":79},[100,123921,123922],{"class":102,"line":103},[100,123923,123917],{},[19,123925,123926],{},"3.本地远程登录",[19,123928,123929],{},"登录远程主机可以调用如下命令:",[73,123931,123933],{"className":118538,"code":123932,"language":118540,"meta":79,"style":79},"ssh -X 用户名@ip地址\n",[32,123934,123935],{"__ignoreMap":79},[100,123936,123937,123939,123942],{"class":102,"line":103},[100,123938,122889],{"class":106},[100,123940,123941],{"class":117}," -X",[100,123943,123944],{"class":110}," 用户名@ip地址\n",[19,123946,123947],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,123949,123950],{},"如果退出，可以调用exit命令：",[73,123952,123954],{"className":122058,"code":123953,"language":122060,"meta":122061,"style":79},"exit\n",[32,123955,123956],{"__ignoreMap":79},[100,123957,123958],{"class":102,"line":103},[100,123959,123953],{},[19,123961,123962],{},[1921,123963,123964],{},"4.实现数据传输",[19,123966,123967],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,123969,123970],{},"上传文件指令格式如下：",[73,123972,123974],{"className":122058,"code":123973,"language":122060,"meta":122061,"style":79},"scp 本地文件路径 账号@ip:路径\n",[32,123975,123976],{"__ignoreMap":79},[100,123977,123978],{"class":102,"line":103},[100,123979,123973],{},[19,123981,123982],{},"上传文件夹指令格式如下：",[73,123984,123986],{"className":122058,"code":123985,"language":122060,"meta":122061,"style":79},"scp -r 本地文件夹路径 账号@ip:路径\n",[32,123987,123988],{"__ignoreMap":79},[100,123989,123990],{"class":102,"line":103},[100,123991,123985],{},[19,123993,123994],{},"下载文件指令格式如下：",[73,123996,123998],{"className":122058,"code":123997,"language":122060,"meta":122061,"style":79},"scp 账号@ip:路径 本地文件夹路径\n",[32,123999,124000],{"__ignoreMap":79},[100,124001,124002],{"class":102,"line":103},[100,124003,123997],{},[19,124005,124006],{},"下载文件夹指令格式如下：",[73,124008,124010],{"className":122058,"code":124009,"language":122060,"meta":122061,"style":79},"scp -r 账号@ip:路径 本地文件夹路径\n",[32,124011,124012],{"__ignoreMap":79},[100,124013,124014],{"class":102,"line":103},[100,124015,124009],{},[19,124017,124018],{},[1921,124019,124020],{},"优化",[19,124022,124023],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[26,124025,124026,124029],{},[29,124027,124028],{},"本地生成密钥对；",[29,124030,124031],{},"将公钥上传至远程主机。",[19,124033,124034],{},[1921,124035,124036],{},"1.生成密钥对",[19,124038,124039],{},"本地客户端生成公私钥：（一路回车默认即可）",[73,124041,124043],{"className":122058,"code":124042,"language":122060,"meta":122061,"style":79},"ssh-keygen\n",[32,124044,124045],{"__ignoreMap":79},[100,124046,124047],{"class":102,"line":103},[100,124048,124042],{},[19,124050,124051],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[26,124053,124054,124057],{},[29,124055,124056],{},"id_rsa （私钥）；",[29,124058,124059],{},"id_rsa.pub (公钥)。",[19,124061,124062],{},[1921,124063,124064],{},"2.公钥上传",[19,124066,124067],{},"上传指令如下：",[73,124069,124071],{"className":122058,"code":124070,"language":122060,"meta":122061,"style":79},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[32,124072,124073],{"__ignoreMap":79},[100,124074,124075],{"class":102,"line":103},[100,124076,124070],{},[19,124078,124079],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,124081,124082],{},"以后再远程登录就无需录入密码了。",[305,124084,124086],{"id":124085},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,124088,124089],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,124091,124092],{},[1921,124093,124094],{},"1.准备工作",[19,124096,124097],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,124099,124100],{},[1921,124101,124102],{},"2.为VScode安装远程开发插件",[19,124104,124105,124106,124109,124110,124113,124114,233],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[32,124107,124108],{},"扩展：商店","的搜索栏输入",[32,124111,124112],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[32,124115,124116],{},"安装",[19,124118,124119],{},[3095,124120],{"alt":79,"src":124121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,124123,124124],{},[1921,124125,124126],{},"3.配置远程连接",[19,124128,124129,124130,124133,124134,124137],{},"步骤1：使用快捷键",[32,124131,124132],{},"ctrl + shift + p","打开命令输入窗口，并输入",[32,124135,124136],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,124139,124140],{},[3095,124141],{"alt":79,"src":124142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,124144,124145,124146,233],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[32,124147,124148],{},"Add New SSH Host",[19,124150,124151],{},[3095,124152],{"alt":79,"src":124153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,124155,124156,124157,124160,124161,124164,124165,124168],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[32,124158,124159],{},"ssh +X ubuntu@192.168.43.164","，其中，",[32,124162,124163],{},"ubuntu","需要替换为你的登录用户名，",[32,124166,124167],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,124170,124171],{},[3095,124172],{"alt":79,"src":124173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,124175,124176],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,124178,124179],{},[3095,124180],{"alt":79,"src":124181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,124183,124184],{},[3095,124185],{"alt":79,"src":124186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,124188,124189],{},[1921,124190,124191],{},"4.使用",[19,124193,124194,124195,124133,124197,124199],{},"步骤1：继续使用快捷键",[32,124196,124132],{},[32,124198,124136],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,124201,124202],{},[3095,124203],{"alt":79,"src":124204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,124206,124207,124208,124211],{},"或者，也可以点击侧边栏的",[32,124209,124210],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,124213,124214],{},[3095,124215],{"alt":79,"src":124216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,124218,124219,124220,124223,124224,124227],{},"步骤2：选择菜单栏的",[32,124221,124222],{},"文件","下的",[32,124225,124226],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,124229,124230],{},[3095,124231],{"alt":79,"src":124232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,124234,124235],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,124237,124239],{"id":124238},"_73-远程桌面","7.3 远程桌面",[19,124241,124242],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,124244,124245],{},"我们选择使用VNC来看。",[26,124247,124248],{},[29,124249,124250],{},"安装VNC服务器：",[19,124252,124253],{},"这里以TigerVNC为例进行安装：",[73,124255,124257],{"className":118538,"code":124256,"language":118540,"meta":79,"style":79},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[32,124258,124259],{"__ignoreMap":79},[100,124260,124261,124263,124265,124267,124270],{"class":102,"line":103},[100,124262,107],{"class":106},[100,124264,118559],{"class":110},[100,124266,114],{"class":110},[100,124268,124269],{"class":110}," tigervnc-standalone-server",[100,124271,124272],{"class":110}," tigervnc-common\n",[26,124274,124275],{"start":188},[29,124276,124277],{},"设置VNC密码：",[19,124279,124280],{},"为VNC用户设置密码，运行以下命令：",[73,124282,124284],{"className":118538,"code":124283,"language":118540,"meta":79,"style":79},"vncpasswd\n",[32,124285,124286],{"__ignoreMap":79},[100,124287,124288],{"class":102,"line":103},[100,124289,124283],{"class":106},[26,124291,124292],{"start":199},[29,124293,124294],{},"配置VNC启动脚本:",[19,124296,124297],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[73,124299,124301],{"className":118538,"code":124300,"language":118540,"meta":79,"style":79},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[32,124302,124303,124312],{"__ignoreMap":79},[100,124304,124305,124307,124309],{"class":102,"line":103},[100,124306,102787],{"class":106},[100,124308,30786],{"class":117},[100,124310,124311],{"class":110}," ~\u002F.vnc\n",[100,124313,124314,124317],{"class":102,"line":188},[100,124315,124316],{"class":106},"nano",[100,124318,124319],{"class":110}," ~\u002F.vnc\u002Fxstartup\n",[19,124321,124322],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[73,124324,124326],{"className":118538,"code":124325,"language":118540,"meta":79,"style":79},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[32,124327,124328,124333,124341,124348],{"__ignoreMap":79},[100,124329,124330],{"class":102,"line":103},[100,124331,124332],{"class":1836},"#!\u002Fbin\u002Fsh\n",[100,124334,124335,124338],{"class":102,"line":188},[100,124336,124337],{"class":117},"unset",[100,124339,124340],{"class":110}," SESSION_MANAGER\n",[100,124342,124343,124345],{"class":102,"line":199},[100,124344,124337],{"class":117},[100,124346,124347],{"class":110}," DBUS_SESSION_BUS_ADDRESS\n",[100,124349,124350],{"class":102,"line":532},[100,124351,124352],{"class":106},"gnome-session\n",[19,124354,124355],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[26,124357,124358],{"start":532},[29,124359,124360],{},"给予执行权限：",[19,124362,124363],{},"为xstartup文件设置执行权限：",[73,124365,124367],{"className":118538,"code":124366,"language":118540,"meta":79,"style":79},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[32,124368,124369],{"__ignoreMap":79},[100,124370,124371,124373,124376],{"class":102,"line":103},[100,124372,26188],{"class":106},[100,124374,124375],{"class":110}," +x",[100,124377,124319],{"class":110},[26,124379,124380],{"start":577},[29,124381,124382],{},"启动VNC服务器：",[73,124384,124386],{"className":118538,"code":124385,"language":118540,"meta":79,"style":79},"vncserver -geometry 1920x1080 -localhost=0\n",[32,124387,124388],{"__ignoreMap":79},[100,124389,124390,124393,124396,124399],{"class":102,"line":103},[100,124391,124392],{"class":106},"vncserver",[100,124394,124395],{"class":117}," -geometry",[100,124397,124398],{"class":110}," 1920x1080",[100,124400,124401],{"class":117}," -localhost=0\n",[19,124403,124404],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,124406,124407],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[26,124409,124410],{"start":589},[29,124411,124412],{},"查看已开启的VNC服务器：",[73,124414,124416],{"className":118538,"code":124415,"language":118540,"meta":79,"style":79},"vncserver -list\n",[32,124417,124418],{"__ignoreMap":79},[100,124419,124420,124422],{"class":102,"line":103},[100,124421,124392],{"class":106},[100,124423,124424],{"class":117}," -list\n",[19,124426,124427],{},[3095,124428],{"alt":79,"src":124429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[26,124431,124432],{"start":595},[29,124433,124434],{},"连接到VNC服务器：",[19,124436,124437],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[26,124439,124440],{"start":601},[29,124441,124442],{},"停止VNC服务器：",[19,124444,124445],{},"如果需要停止VNC服务器，可以使用以下命令：",[73,124447,124449],{"className":118538,"code":124448,"language":118540,"meta":79,"style":79},"vncserver -kill :1\n",[32,124450,124451],{"__ignoreMap":79},[100,124452,124453,124455,124458],{"class":102,"line":103},[100,124454,124392],{"class":106},[100,124456,124457],{"class":117}," -kill",[100,124459,124460],{"class":110}," :1\n",[19,124462,124463],{},"将:1替换为你实际使用的显示编号。",[19,124465,124466],{},[3095,124467],{"alt":79,"src":124468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,124470,124471],{},[3095,124472],{"alt":79,"src":124473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,124475,124477],{"id":124476},"_74-usb端口设置","7.4 USB端口设置",[19,124479,124480],{},[1921,124481,124482],{},"首先先配置好权限",[73,124484,124486],{"className":118538,"code":124485,"language":118540,"meta":79,"style":79},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[32,124487,124488,124493,124506,124513,124518],{"__ignoreMap":79},[100,124489,124490],{"class":102,"line":103},[100,124491,124492],{"class":1836},"# 将用户权限提高\n",[100,124494,124495,124497,124499,124501,124504],{"class":102,"line":188},[100,124496,107],{"class":106},[100,124498,28146],{"class":110},[100,124500,28149],{"class":117},[100,124502,124503],{"class":110}," dialout",[100,124505,28154],{"class":258},[100,124507,124508,124510],{"class":102,"line":199},[100,124509,28173],{"class":106},[100,124511,124512],{"class":110}," dialout\n",[100,124514,124515],{"class":102,"line":532},[100,124516,124517],{"class":1836},"# 查看下面命令是否输出dialout（若输出才正常）\n",[100,124519,124520],{"class":102,"line":577},[100,124521,124522],{"class":106},"groups\n",[19,124524,124525],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[305,124527,124529],{"id":124528},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,124531,124532,124535],{},[1921,124533,124534],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,124537,124538,124541],{},[1921,124539,124540],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,124543,124544],{},[1921,124545,124546],{},"流程如下：",[19,124548,124549],{},"（1）.查找设备idVendor和idProduct",[19,124551,124552,124553,124556],{},"接入两个USB设备，在终端调用指令",[32,124554,124555],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,124558,124559],{},[3095,124560],{"alt":79,"src":124561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,124563,124564,124565,124568],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[32,124566,124567],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,124570,124571],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,124573,124574],{},"（2）.编写映射规则",[19,124576,124577,124578,124581],{},"在",[32,124579,124580],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[73,124583,124585],{"className":118538,"code":124584,"language":118540,"meta":79,"style":79},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[32,124586,124587],{"__ignoreMap":79},[100,124588,124589,124591,124593],{"class":102,"line":103},[100,124590,107],{"class":106},[100,124592,119825],{"class":110},[100,124594,124595],{"class":110}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,124597,124598],{},"输入如下内容：",[73,124600,124602],{"className":118538,"code":124601,"language":118540,"meta":79,"style":79},"KERNEL==\"ttyUSB*\", ATTRS{idVendor}==\"10c4\", ATTRS{idProduct}==\"ea60\", MODE:=\"0777\", SYMLINK+=\"mylidar\"\nKERNEL==\"ttyUSB*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"7523\", MODE:=\"0777\", SYMLINK+=\"mycar\"\n",[32,124603,124604,124634],{"__ignoreMap":79},[100,124605,124606,124609,124611,124614,124617,124620,124623,124625,124628,124631],{"class":102,"line":103},[100,124607,124608],{"class":258},"KERNEL",[100,124610,472],{"class":471},[100,124612,124613],{"class":110},"=\"ttyUSB*\",",[100,124615,124616],{"class":106}," ATTRS",[100,124618,124619],{"class":110},"{idVendor}==",[100,124621,124622],{"class":106},"\"10c4\"",[100,124624,2145],{"class":106},[100,124626,124627],{"class":110}," ATTRS{idProduct}==\"ea60\",",[100,124629,124630],{"class":110}," MODE:=\"0777\",",[100,124632,124633],{"class":110}," SYMLINK+=\"mylidar\"\n",[100,124635,124636,124638,124640,124642,124644,124646,124649,124651,124654,124656],{"class":102,"line":188},[100,124637,124608],{"class":258},[100,124639,472],{"class":471},[100,124641,124613],{"class":110},[100,124643,124616],{"class":106},[100,124645,124619],{"class":110},[100,124647,124648],{"class":106},"\"1a86\"",[100,124650,2145],{"class":106},[100,124652,124653],{"class":110}," ATTRS{idProduct}==\"7523\",",[100,124655,124630],{"class":110},[100,124657,124658],{"class":110}," SYMLINK+=\"mycar\"\n",[19,124660,124661],{},"代码解释：",[2773,124663,124664,124667,124670,124673],{},[29,124665,124666],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[29,124668,124669],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[29,124671,124672],{},"SYMLINK是符号连接，即绑定的别名；",[29,124674,124675],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,124677,124678,124679,124682,124685],{},"***小提示：***",[25135,124680,124681],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[32,124683,124684],{},"\u002Fetc\u002Fudev\u002Frule.d",[25135,124686,124687],{},"目录即可。",[19,124689,124690],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,124692,124693],{},"（3）.使规则生效",[19,124695,124696],{},"在终端下输入如下指令：",[73,124698,124700],{"className":118538,"code":124699,"language":118540,"meta":79,"style":79},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[32,124701,124702,124707,124719,124730,124734,124739,124752],{"__ignoreMap":79},[100,124703,124704],{"class":102,"line":103},[100,124705,124706],{"class":1836},"# Ubuntu用下方命令\n",[100,124708,124709,124711,124713,124716],{"class":102,"line":188},[100,124710,107],{"class":106},[100,124712,121290],{"class":110},[100,124714,124715],{"class":110}," udev",[100,124717,124718],{"class":110}," reload\n",[100,124720,124721,124723,124725,124727],{"class":102,"line":199},[100,124722,107],{"class":106},[100,124724,121290],{"class":110},[100,124726,124715],{"class":110},[100,124728,124729],{"class":110}," restart\n",[100,124731,124732],{"class":102,"line":532},[100,124733,570],{"emptyLinePlaceholder":569},[100,124735,124736],{"class":102,"line":577},[100,124737,124738],{"class":1836},"#Fedora用下方命令\n",[100,124740,124741,124743,124746,124749],{"class":102,"line":589},[100,124742,107],{"class":106},[100,124744,124745],{"class":110}," udevadm",[100,124747,124748],{"class":110}," control",[100,124750,124751],{"class":117}," --reload\n",[100,124753,124754,124756,124758],{"class":102,"line":595},[100,124755,107],{"class":106},[100,124757,124745],{"class":110},[100,124759,124760],{"class":110}," trigger\n",[19,124762,124763],{},"再重新插拔设备即可。",[19,124765,124766],{},"（4）.测试",[19,124768,124769],{},"终端下输入如下指令",[73,124771,124773],{"className":118538,"code":124772,"language":118540,"meta":79,"style":79},"ll \u002Fdev | grep ttyUSB\n",[32,124774,124775],{"__ignoreMap":79},[100,124776,124777,124780,124783,124785,124787],{"class":102,"line":103},[100,124778,124779],{"class":106},"ll",[100,124781,124782],{"class":110}," \u002Fdev",[100,124784,26685],{"class":471},[100,124786,31806],{"class":106},[100,124788,124789],{"class":110}," ttyUSB\n",[19,124791,124792],{},"运行结果如下：",[19,124794,124795],{},[3095,124796],{"alt":79,"src":124797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,124799,124800,124801,124804],{},"也可以多次插拔USB设备，会发现设备端口",[32,124802,124803],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,124806,124807],{},[1921,124808,119206],{},[19,124810,124811],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[305,124813,124815],{"id":124814},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,124817,124818,124820],{},[1921,124819,124534],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,124822,124823,124825],{},[1921,124824,124540],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,124827,124828],{},[1921,124829,124546],{},[19,124831,124832],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,124834,124835],{},"调用如下指令查看第一台雷达的USB信息：",[73,124837,124839],{"className":118538,"code":124838,"language":118540,"meta":79,"style":79},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[32,124840,124841,124861],{"__ignoreMap":79},[100,124842,124843,124846,124848,124851,124854,124856,124858],{"class":102,"line":103},[100,124844,124845],{"class":106},"udevadm",[100,124847,71375],{"class":110},[100,124849,124850],{"class":117}," --attribute-walk",[100,124852,124853],{"class":117}," --name=\u002Fdev\u002FttyUSB0",[100,124855,26685],{"class":471},[100,124857,31806],{"class":106},[100,124859,124860],{"class":110}," KERNELS\n",[100,124862,124863,124865,124867,124869,124872,124874,124876],{"class":102,"line":188},[100,124864,124845],{"class":106},[100,124866,71375],{"class":110},[100,124868,124850],{"class":117},[100,124870,124871],{"class":117}," --name=\u002Fdev\u002FttyACM0",[100,124873,26685],{"class":471},[100,124875,31806],{"class":106},[100,124877,124860],{"class":110},[19,124879,124880],{},[3095,124881],{"alt":79,"src":124882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,124884,124885],{},"调用如下指令查看第二台雷达的USB信息：",[73,124887,124889],{"className":118538,"code":124888,"language":118540,"meta":79,"style":79},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[32,124890,124891],{"__ignoreMap":79},[100,124892,124893,124895,124897,124899,124902,124904,124906],{"class":102,"line":103},[100,124894,124845],{"class":106},[100,124896,71375],{"class":110},[100,124898,124850],{"class":117},[100,124900,124901],{"class":117}," --name=\u002Fdev\u002FttyUSB1",[100,124903,26685],{"class":471},[100,124905,31806],{"class":106},[100,124907,124860],{"class":110},[19,124909,124910,124911,124914,124915,124918,124919,124922],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[32,124912,124913],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[32,124916,124917],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[1921,124920,124921],{},"唯一性标识","”。",[19,124924,124574],{},[19,124926,124577,124927,124929],{},[32,124928,124580],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[73,124931,124932],{"className":118538,"code":124584,"language":118540,"meta":79,"style":79},[32,124933,124934],{"__ignoreMap":79},[100,124935,124936,124938,124940],{"class":102,"line":103},[100,124937,107],{"class":106},[100,124939,119825],{"class":110},[100,124941,124595],{"class":110},[73,124943,124945],{"className":118538,"code":124944,"language":118540,"meta":79,"style":79},"KERNEL==\"ttyUSB*\", KERNELS==\"1-1.3:1.0\", MODE:=\"0777\", SYMLINK+=\"rplidar_front\"\nKERNEL==\"ttyUSB*\", KERNELS==\"1-1.4:1.0\", MODE:=\"0777\", SYMLINK+=\"rplidar_back\"\n",[32,124946,124947,124976],{"__ignoreMap":79},[100,124948,124949,124951,124953,124955,124958,124960,124963,124966,124968,124971,124973],{"class":102,"line":103},[100,124950,124608],{"class":258},[100,124952,472],{"class":471},[100,124954,124613],{"class":110},[100,124956,124957],{"class":258}," KERNELS",[100,124959,472],{"class":471},[100,124961,124962],{"class":110},"=\"1-1.3:1.0\",",[100,124964,124965],{"class":106}," MODE:",[100,124967,472],{"class":110},[100,124969,124970],{"class":106},"\"0777\"",[100,124972,2145],{"class":106},[100,124974,124975],{"class":110}," SYMLINK+=\"rplidar_front\"\n",[100,124977,124978,124980,124982,124984,124986,124988,124991,124993,124995,124997,124999],{"class":102,"line":188},[100,124979,124608],{"class":258},[100,124981,472],{"class":471},[100,124983,124613],{"class":110},[100,124985,124957],{"class":258},[100,124987,472],{"class":471},[100,124989,124990],{"class":110},"=\"1-1.4:1.0\",",[100,124992,124965],{"class":106},[100,124994,472],{"class":110},[100,124996,124970],{"class":106},[100,124998,2145],{"class":106},[100,125000,125001],{"class":110}," SYMLINK+=\"rplidar_back\"\n",[19,125003,124693],{},[19,125005,124696],{},[73,125007,125008],{"className":118538,"code":124699,"language":118540,"meta":79,"style":79},[32,125009,125010,125014,125024,125034,125038,125042,125052],{"__ignoreMap":79},[100,125011,125012],{"class":102,"line":103},[100,125013,124706],{"class":1836},[100,125015,125016,125018,125020,125022],{"class":102,"line":188},[100,125017,107],{"class":106},[100,125019,121290],{"class":110},[100,125021,124715],{"class":110},[100,125023,124718],{"class":110},[100,125025,125026,125028,125030,125032],{"class":102,"line":199},[100,125027,107],{"class":106},[100,125029,121290],{"class":110},[100,125031,124715],{"class":110},[100,125033,124729],{"class":110},[100,125035,125036],{"class":102,"line":532},[100,125037,570],{"emptyLinePlaceholder":569},[100,125039,125040],{"class":102,"line":577},[100,125041,124738],{"class":1836},[100,125043,125044,125046,125048,125050],{"class":102,"line":589},[100,125045,107],{"class":106},[100,125047,124745],{"class":110},[100,125049,124748],{"class":110},[100,125051,124751],{"class":117},[100,125053,125054,125056,125058],{"class":102,"line":595},[100,125055,107],{"class":106},[100,125057,124745],{"class":110},[100,125059,124760],{"class":110},[19,125061,124763],{},[19,125063,124766],{},[19,125065,124769,125066,125069],{},[32,125067,125068],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,125071,125072],{},[3095,125073],{"alt":79,"src":125074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,125076,125077],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,125079,125080,125082],{},[1921,125081,119206],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[305,125084,125086],{"id":125085},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,125088,125089],{},"（1）.查看所连接的主机USB接口的信息",[73,125091,125093],{"className":118538,"code":125092,"language":118540,"meta":79,"style":79},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[32,125094,125095,125125],{"__ignoreMap":79},[100,125096,125097,125099,125101,125104,125106,125108,125110,125112,125115,125118,125120,125123],{"class":102,"line":103},[100,125098,124845],{"class":106},[100,125100,71375],{"class":110},[100,125102,125103],{"class":117}," -a",[100,125105,30786],{"class":117},[100,125107,29993],{"class":258},[100,125109,124845],{"class":106},[100,125111,71375],{"class":110},[100,125113,125114],{"class":117}," -q",[100,125116,125117],{"class":110}," path",[100,125119,173],{"class":117},[100,125121,125122],{"class":110}," \u002Fdev\u002FttyACM0",[100,125124,809],{"class":258},[100,125126,125127,125129,125131,125133,125135,125137,125139,125141,125143,125145,125147,125150],{"class":102,"line":188},[100,125128,124845],{"class":106},[100,125130,71375],{"class":110},[100,125132,125103],{"class":117},[100,125134,30786],{"class":117},[100,125136,29993],{"class":258},[100,125138,124845],{"class":106},[100,125140,71375],{"class":110},[100,125142,125114],{"class":117},[100,125144,125117],{"class":110},[100,125146,173],{"class":117},[100,125148,125149],{"class":110}," \u002Fdev\u002FttyUSB0",[100,125151,809],{"class":258},[19,125153,125154],{},[3095,125155],{"alt":79,"src":125156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,125158,125159],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,125161,124574],{},[19,125163,124577,125164,124929],{},[32,125165,124580],{},[73,125167,125168],{"className":118538,"code":124584,"language":118540,"meta":79,"style":79},[32,125169,125170],{"__ignoreMap":79},[100,125171,125172,125174,125176],{"class":102,"line":103},[100,125173,107],{"class":106},[100,125175,119825],{"class":110},[100,125177,124595],{"class":110},[73,125179,125181],{"className":118538,"code":125180,"language":118540,"meta":79,"style":79},"KERNEL==\"ttyACM*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"55d4\", ATTRS{serial}==\"0001\", MODE:=\"0777\", SYMLINK+=\"ttyACM_MCU\"\nKERNEL==\"ttyACM*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"55d4\", ATTRS{serial}==\"0002\", MODE:=\"0777\", SYMLINK+=\"ttyACM_Lidar\"\nKERNEL==\"ttyUSB*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"7523\", MODE:=\"0777\", SYMLINK+=\"ttyUSB_IMU\"\n",[32,125182,125183,125211,125237],{"__ignoreMap":79},[100,125184,125185,125187,125189,125192,125194,125196,125198,125200,125203,125206,125208],{"class":102,"line":103},[100,125186,124608],{"class":258},[100,125188,472],{"class":471},[100,125190,125191],{"class":110},"=\"ttyACM*\",",[100,125193,124616],{"class":106},[100,125195,124619],{"class":110},[100,125197,124648],{"class":106},[100,125199,2145],{"class":106},[100,125201,125202],{"class":110}," ATTRS{idProduct}==\"55d4\",",[100,125204,125205],{"class":110}," ATTRS{serial}==\"0001\",",[100,125207,124630],{"class":110},[100,125209,125210],{"class":110}," SYMLINK+=\"ttyACM_MCU\"\n",[100,125212,125213,125215,125217,125219,125221,125223,125225,125227,125229,125232,125234],{"class":102,"line":188},[100,125214,124608],{"class":258},[100,125216,472],{"class":471},[100,125218,125191],{"class":110},[100,125220,124616],{"class":106},[100,125222,124619],{"class":110},[100,125224,124648],{"class":106},[100,125226,2145],{"class":106},[100,125228,125202],{"class":110},[100,125230,125231],{"class":110}," ATTRS{serial}==\"0002\",",[100,125233,124630],{"class":110},[100,125235,125236],{"class":110}," SYMLINK+=\"ttyACM_Lidar\"\n",[100,125238,125239,125241,125243,125245,125247,125249,125251,125253,125255,125257],{"class":102,"line":199},[100,125240,124608],{"class":258},[100,125242,472],{"class":471},[100,125244,124613],{"class":110},[100,125246,124616],{"class":106},[100,125248,124619],{"class":110},[100,125250,124648],{"class":106},[100,125252,2145],{"class":106},[100,125254,124653],{"class":110},[100,125256,124630],{"class":110},[100,125258,125259],{"class":110}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,125261,124693],{},[19,125263,124696],{},[73,125265,125266],{"className":118538,"code":124699,"language":118540,"meta":79,"style":79},[32,125267,125268,125272,125282,125292,125296,125300,125310],{"__ignoreMap":79},[100,125269,125270],{"class":102,"line":103},[100,125271,124706],{"class":1836},[100,125273,125274,125276,125278,125280],{"class":102,"line":188},[100,125275,107],{"class":106},[100,125277,121290],{"class":110},[100,125279,124715],{"class":110},[100,125281,124718],{"class":110},[100,125283,125284,125286,125288,125290],{"class":102,"line":199},[100,125285,107],{"class":106},[100,125287,121290],{"class":110},[100,125289,124715],{"class":110},[100,125291,124729],{"class":110},[100,125293,125294],{"class":102,"line":532},[100,125295,570],{"emptyLinePlaceholder":569},[100,125297,125298],{"class":102,"line":577},[100,125299,124738],{"class":1836},[100,125301,125302,125304,125306,125308],{"class":102,"line":589},[100,125303,107],{"class":106},[100,125305,124745],{"class":110},[100,125307,124748],{"class":110},[100,125309,124751],{"class":117},[100,125311,125312,125314,125316],{"class":102,"line":595},[100,125313,107],{"class":106},[100,125315,124745],{"class":110},[100,125317,124760],{"class":110},[19,125319,125320,125321],{},"再重新插拔设备即可，或者 ",[1921,125322,125323],{},"直接重启系统。",[19,125325,124766],{},[19,125327,124769,125328,125069],{},[32,125329,125068],{},[19,125331,125332],{},[3095,125333],{"alt":79,"src":125334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,125336,125077],{},[19,125338,125339,125341],{},[1921,125340,119206],{}," 一些设备可能没有串口号等。",[305,125343,125345],{"id":125344},"_744-其他注意事项","7.4.4 其他注意事项",[19,125347,125348,125349,125351,125352,125355,125356,19991,125359,125362,125363,125365],{},"并非所有的USB设备端口号都是",[32,125350,124803],{},"的格式，比如Arduino的端口号可能是",[32,125353,125354],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[32,125357,125358],{},"videon",[32,125360,125361],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[32,125364,125358],{},"端口，绑定时需要关联的也是该接口。",[19,125367,125368,125369,125372,125373,125376,125377,125379,125380,125383,125384,125387,125388,125391,125392,125391,125395,125391,125398,233],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[32,125370,125371],{},"KERNEL==\"ttyUSB*\"","修改为",[32,125374,125375],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[32,125378,125371],{},"修改为类似于",[32,125381,125382],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[32,125385,125386],{},"video[0,2,4,6]","表示可以绑定的端口为",[32,125389,125390],{},"video0","或",[32,125393,125394],{},"video2",[32,125396,125397],{},"video4",[32,125399,125400],{},"video6",[14,125402,125404],{"id":125403},"_75-挂载内网网页","7.5 挂载内网网页",[19,125406,125407],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,125409,125410],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,125412,125413],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,125415,125416,125417],{},"Termux 下载地址（F-Droid）：",[2006,125418,125419],{"href":125419,"rel":125420},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[25442],[19,125422,125423],{},"首先打开app后，先更新软件缓存：",[73,125425,125427],{"className":118538,"code":125426,"language":118540,"meta":79,"style":79},"pkg update\n",[32,125428,125429],{"__ignoreMap":79},[100,125430,125431,125434],{"class":102,"line":103},[100,125432,125433],{"class":106},"pkg",[100,125435,27816],{"class":110},[19,125437,125438],{},"然后换源",[73,125440,125442],{"className":118538,"code":125441,"language":118540,"meta":79,"style":79},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[32,125443,125444],{"__ignoreMap":79},[100,125445,125446,125448,125451],{"class":102,"line":103},[100,125447,124316],{"class":106},[100,125449,125450],{"class":258}," $PREFIX",[100,125452,125453],{"class":110},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,125455,125456],{},"将该文件内容替换为下面：",[73,125458,125460],{"className":118538,"code":125459,"language":118540,"meta":79,"style":79},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[32,125461,125462],{"__ignoreMap":79},[100,125463,125464,125467,125470,125473],{"class":102,"line":103},[100,125465,125466],{"class":106},"deb",[100,125468,125469],{"class":110}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[100,125471,125472],{"class":110}," stable",[100,125474,125475],{"class":110}," main\n",[2773,125477,125478,125505],{},[29,125479,125480,125481,125483,125484],{},"如果你使用的是",[32,125482,124316],{},"编辑器：",[2773,125485,125486,125493,125499],{},[29,125487,125488,125489,125492],{},"按 ",[32,125490,125491],{},"Ctrl+O"," 保存文件。",[29,125494,125488,125495,125498],{},[32,125496,125497],{},"Enter"," 确认文件名。",[29,125500,125488,125501,125504],{},[32,125502,125503],{},"Ctrl+X"," 退出编辑器。",[29,125506,125480,125507,125483,125510],{},[32,125508,125509],{},"vim",[2773,125511,125512,125518],{},[29,125513,125488,125514,125517],{},[32,125515,125516],{},"Esc"," 退出编辑模式。",[29,125519,125520,125521,125523],{},"输入 ",[32,125522,120463],{}," 保存并退出。",[19,125525,125526],{},"接下来重新更新软件源：",[73,125528,125530],{"className":118538,"code":125529,"language":118540,"meta":79,"style":79},"pkg update && pkg upgrade\n",[32,125531,125532],{"__ignoreMap":79},[100,125533,125534,125536,125538,125540,125542],{"class":102,"line":103},[100,125535,125433],{"class":106},[100,125537,118589],{"class":110},[100,125539,27764],{"class":258},[100,125541,125433],{"class":106},[100,125543,118575],{"class":110},[19,125545,125546],{},"安装python：",[73,125548,125550],{"className":118538,"code":125549,"language":118540,"meta":79,"style":79},"pkg install python\n",[32,125551,125552],{"__ignoreMap":79},[100,125553,125554,125556,125558],{"class":102,"line":103},[100,125555,125433],{"class":106},[100,125557,114],{"class":110},[100,125559,125560],{"class":110}," python\n",[19,125562,125563,28045],{},[1921,125564,125565],{},"通过Termux访问设备存储",[19,125567,125568],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[73,125570,125572],{"className":118538,"code":125571,"language":118540,"meta":79,"style":79},"termux-setup-storage\n",[32,125573,125574],{"__ignoreMap":79},[100,125575,125576],{"class":102,"line":103},[100,125577,125571],{"class":106},[26,125579,125580],{},[29,125581,125582,28045,125585],{},[1921,125583,125584],{},"进入HTML文件所在的目录",[26,125586,125587],{},[29,125588,125589,125590,125592],{},"使用",[32,125591,102797],{},"命令进入HTML文件所在的目录：",[73,125594,125596],{"className":118538,"code":125595,"language":118540,"meta":79,"style":79},"cd ~\u002Fyour_html_folder\n",[32,125597,125598],{"__ignoreMap":79},[100,125599,125600,125602],{"class":102,"line":103},[100,125601,102797],{"class":117},[100,125603,125604],{"class":110}," ~\u002Fyour_html_folder\n",[26,125606,125607],{"start":188},[29,125608,125609,28045,125612,125617,125634],{},[1921,125610,125611],{},"启动Python HTTP服务器",[26,125613,125614],{},[29,125615,125616],{},"运行以下命令启动一个简单的HTTP服务器：",[73,125618,125620],{"className":118538,"code":125619,"language":118540,"meta":79,"style":79},"python -m http.server 8000\n",[32,125621,125622],{"__ignoreMap":79},[100,125623,125624,125626,125628,125631],{"class":102,"line":103},[100,125625,251],{"class":106},[100,125627,102421],{"class":117},[100,125629,125630],{"class":110}," http.server",[100,125632,125633],{"class":117}," 8000\n",[26,125635,125636],{"start":199},[29,125637,125638,125639,125642],{},"这会在端口",[32,125640,125641],{},"8000","上启动一个Web服务器。",[2773,125644,125645],{},[29,125646,125647],{},"启动服务器后，Termux会显示日志信息，例如：",[73,125649,125651],{"className":122058,"code":125650,"language":122060,"meta":122061,"style":79},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[32,125652,125653],{"__ignoreMap":79},[100,125654,125655],{"class":102,"line":103},[100,125656,125650],{},[2773,125658,125659],{},[29,125660,125661],{},"这表示服务器已成功启动。",[19,125663,125664],{},[1921,125665,125666],{},"在浏览器中访问HTML文件",[26,125668,125669],{},[29,125670,125671,28045,125674,125679],{},[1921,125672,125673],{},"在同一设备上访问",[26,125675,125676],{},[29,125677,125678],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[73,125680,125683],{"className":125681,"code":125682,"language":73218,"meta":79,"style":79},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[32,125684,125685],{"__ignoreMap":79},[100,125686,125687,125690],{"class":102,"line":103},[100,125688,125689],{"class":258},"http:",[100,125691,125692],{"class":1836},"\u002F\u002Flocalhost:8000\n",[2773,125694,125695],{},[29,125696,125697,125698,125701],{},"如果HTML文件中有",[32,125699,125700],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,125703,125705],{"id":125704},"_76-linux重点知识","7.6 Linux重点知识",[305,125707,125709],{"id":125708},"_761-关于点的说明","7.6.1 关于点的说明",[19,125711,125712],{},[3095,125713],{"alt":79,"src":125714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,125716,125717],{},"一点本目录，两点上目录",[305,125719,125721],{"id":125720},"_762-目录","7.6.2 目录",[23579,125723,125725],{"id":125724},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,125727,125728],{},[1921,125729,125730],{},"\u002Fboot:",[19,125732,125733],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,125735,125736],{},[1921,125737,125738],{},"\u002Fetc:",[19,125740,125741],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,125743,125744],{},[1921,125745,125746],{},"\u002Flib：",[19,125748,125749],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,125751,125752],{},[1921,125753,125754],{},"\u002Fsys:",[19,125756,125757],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[23579,125759,125761],{"id":125760},"_7622-指令集合","7.6.2.2 指令集合",[19,125763,125764],{},[1921,125765,125766],{},"\u002Fbin:",[19,125768,125769],{},"为二进制文件的缩写，存放最经常使用的命令",[19,125771,125772],{},[1921,125773,125774],{},"\u002Fsbin:",[19,125776,125777],{},"只有系统管理员才能使用的程序和指令",[23579,125779,125781],{"id":125780},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,125783,125784],{},[1921,125785,125786],{},"\u002Fdev:",[19,125788,125789],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,125791,125792],{},[1921,125793,125794],{},"\u002Fmedia:",[19,125796,125797],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,125799,125800],{},[1921,125801,125802],{},"\u002Fmnt:",[19,125804,125805],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[23579,125807,125809],{"id":125808},"_7624-临时文件","7.6.2.4 临时文件",[19,125811,125812],{},[1921,125813,125814],{},"\u002Frun:",[19,125816,125817],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,125819,125820],{},[1921,125821,125822],{},"\u002Flost+found:",[19,125824,125825],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,125827,125828],{},[1921,125829,125830],{},"\u002Ftmp:",[19,125832,125833],{},"这个目录是用来存放一些临时文件的",[23579,125835,125837],{"id":125836},"_7625-账户","7.6.2.5 账户",[19,125839,125840],{},[1921,125841,125842],{},"\u002Froot：",[19,125844,125845],{},"系统管理员的用户主目录",[19,125847,125848,28045],{},[1921,125849,125850],{},"\u002Fhome",[19,125852,125853],{},"用户的主目录，以用户的账号命名的",[19,125855,125856,28045],{},[1921,125857,125858],{},"\u002Fusr",[19,125860,125861],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,125863,125864],{},[1921,125865,125866],{},"\u002Fusr\u002Fbin：",[19,125868,125869],{},"系统用户使用的应用程序与指令",[19,125871,125872],{},[1921,125873,125874],{},"\u002Fusr\u002Fsbin：",[19,125876,125877],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,125879,125880],{},[1921,125881,125882],{},"\u002Fusr\u002Fsrc：",[19,125884,125885],{},"内核源代码默认的放置目录",[23579,125887,125889],{"id":125888},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,125891,125892],{},[1921,125893,125894],{},"\u002Fvar：",[19,125896,125897],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,125899,125900],{},[1921,125901,125902],{},"\u002Fproc:",[19,125904,125905,125906,125909],{},"管理 ",[1921,125907,125908],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[23579,125911,125913],{"id":125912},"_7627-扩展用的","7.6.2.7 扩展用的",[19,125915,125916],{},[1921,125917,125918],{},"\u002Fopt:",[19,125920,125921],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,125923,125924],{},[1921,125925,125926],{},"\u002Fsrv:",[19,125928,125929],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[305,125931,125933],{"id":125932},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,125935,125936],{},[3095,125937],{"alt":79,"src":125938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,125940,125941],{},"windows-->linux:",[19,125943,125944],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,125946,125947],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,125949,125950],{},"linux传输文件到windows",[19,125952,125953],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[305,125955,125957],{"id":125956},"_764-易忘知识","7.6.4 易忘知识",[19,125959,125960],{},"操作系统内核查看",[73,125962,125963],{"className":118538,"code":122532,"language":118540,"meta":79,"style":79},[32,125964,125965],{"__ignoreMap":79},[100,125966,125967,125969],{"class":102,"line":103},[100,125968,71758],{"class":106},[100,125970,122541],{"class":117},[19,125972,125973],{},[3095,125974],{"alt":79,"src":125975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,125977,125978],{},[3095,125979],{"alt":79,"src":125980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[73,125982,125984],{"className":118538,"code":125983,"language":118540,"meta":79,"style":79},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[32,125985,125986,125998],{"__ignoreMap":79},[100,125987,125988,125990,125993,125996],{"class":102,"line":103},[100,125989,122749],{"class":106},[100,125991,125992],{"class":110}," mvtest",[100,125994,125995],{"class":110}," mvtest2",[100,125997,4276],{"class":258},[100,125999,126000],{"class":102,"line":188},[100,126001,126002],{"class":106},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,126004,126005],{},[3095,126006],{"alt":79,"src":126007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,126009,126010],{},[3095,126011],{"alt":79,"src":126012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,126014,126015,126016,126019],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[32,126017,126018],{},"du -a"," 可以快速查看磁盘使用细节。",[305,126021,126023],{"id":126022},"_765-vim","7.6.5 Vim",[19,126025,126026],{},[3095,126027],{"alt":79,"src":126028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,126030,126031],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,126033,126034],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,126036,126037],{},[1921,126038,126039],{},"1.命令模式：",[19,126041,126042],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,126044,126045],{},"x 删除当前光标所在处的字符",[19,126047,126048],{},"：切换到底线命令模式，以在最底一行输入命令",[19,126050,126051],{},"a 进行插入模式，在光标下一个位置输入文本",[19,126053,126054],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,126056,126057],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,126059,126060],{},"dd 剪切当前行",[19,126062,126063],{},"yy 复制当前行",[19,126065,126066],{},"p 粘贴剪贴板内容到光标下方",[19,126068,126069],{},"P 粘贴剪贴板内容到光标上方",[19,126071,126072],{},"u 撤销上一次操作",[19,126074,126075],{},"ctrl+r 重做上一次操作",[19,126077,126078,126080],{},[2561,126079],{}," 保存文件",[19,126082,126083,126085],{},[2412,126084],{}," 退出Vim编辑器",[19,126087,126088,126090],{},[2412,126089],{},"! 强制退出Vim编辑器，不保存修改",[19,126092,126093],{},[1921,126094,126095],{},"2.输入模式：",[19,126097,126098],{},[3095,126099],{"alt":79,"src":126100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,126102,126103],{},[1921,126104,126105],{},"3.底线命令模式：",[19,126107,126108],{},[3095,126109],{"alt":79,"src":126110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,126112,126113],{},"按下esc可以退出底线命令模式",[305,126115,126117],{"id":126116},"_766-apt","7.6.6 apt",[19,126119,126120],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[305,126122,126124],{"id":126123},"_767-home与root的区别","7.6.7 home与root的区别",[19,126126,126127],{},[3095,126128],{"alt":79,"src":126129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,126131,126132],{},[3095,126133],{"alt":79,"src":126134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,126136,126137],{},[3095,126138],{"alt":79,"src":126139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,126141,126142],{},[3095,126143],{"alt":79,"src":126144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[305,126146,126148],{"id":126147},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,126150,126151],{},[2006,126152,126153],{"href":126153,"rel":126154},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[25442],[26,126156,126157,126160],{},[29,126158,126159],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[29,126161,126162],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,126164,126165],{},[3095,126166],{"alt":79,"src":126167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,126169,126170],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,126172,126173],{},[3095,126174],{"alt":79,"src":126175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[73,126177,126179],{"className":122058,"code":126178,"language":122060,"meta":122061,"style":79},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[32,126180,126181,126186],{"__ignoreMap":79},[100,126182,126183],{"class":102,"line":103},[100,126184,126185],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[100,126187,126188],{"class":102,"line":188},[100,126189,126190],{},".\u002Fpycharm.sh\n",[19,126192,126193],{},"3️⃣创建.desktop文件",[19,126195,126196],{},[1921,126197,126198],{},"原理：",[2773,126200,126201,126211],{},[29,126202,126203,126204,126210],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[1921,126205,126206,126209],{},[32,126207,126208],{},".desktop"," 文件"," 来识别应用。",[29,126212,126213,126215,126216],{},[32,126214,126208],{}," 文件相当于一个“应用注册表”，告诉系统：",[2773,126217,126218,126221,126224,126227,126230],{},[29,126219,126220],{},"应用名字（Name）",[29,126222,126223],{},"图标（Icon）",[29,126225,126226],{},"执行命令（Exec）",[29,126228,126229],{},"分类（Categories）",[29,126231,126232],{},"是否需要终端（Terminal）",[73,126234,126236],{"className":122058,"code":126235,"language":122060,"meta":122061,"style":79},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[32,126237,126238,126243],{"__ignoreMap":79},[100,126239,126240],{"class":102,"line":103},[100,126241,126242],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[100,126244,126245],{"class":102,"line":188},[100,126246,126247],{},"nano pycharm.desktop\n",[19,126249,126250],{},"nano是一个命令行下的编辑器，也可以使用vim",[73,126252,126254],{"className":122058,"code":126253,"language":122060,"meta":122061,"style":79},"[Desktop Entry]\nVersion=1.0\nType=Application\nName=PyCharm\nIcon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\nExec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\nComment=JetBrains PyCharm IDE\nCategories=Development;IDE;\nTerminal=false\nStartupWMClass=jetbrains-pycharm\n",[32,126255,126256,126261,126266,126271,126276,126281,126286,126291,126296,126301],{"__ignoreMap":79},[100,126257,126258],{"class":102,"line":103},[100,126259,126260],{},"[Desktop Entry]\n",[100,126262,126263],{"class":102,"line":188},[100,126264,126265],{},"Version=1.0\n",[100,126267,126268],{"class":102,"line":199},[100,126269,126270],{},"Type=Application\n",[100,126272,126273],{"class":102,"line":532},[100,126274,126275],{},"Name=PyCharm\n",[100,126277,126278],{"class":102,"line":577},[100,126279,126280],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[100,126282,126283],{"class":102,"line":589},[100,126284,126285],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[100,126287,126288],{"class":102,"line":595},[100,126289,126290],{},"Comment=JetBrains PyCharm IDE\n",[100,126292,126293],{"class":102,"line":601},[100,126294,126295],{},"Categories=Development;IDE;\n",[100,126297,126298],{"class":102,"line":606},[100,126299,126300],{},"Terminal=false\n",[100,126302,126303],{"class":102,"line":612},[100,126304,126305],{},"StartupWMClass=jetbrains-pycharm\n",[2773,126307,126308,126314,126320,126326],{},[29,126309,126310,126313],{},[32,126311,126312],{},"Exec"," → 点击图标时执行的命令",[29,126315,126316,126319],{},[32,126317,126318],{},"Icon"," → 显示在菜单和桌面上的图标",[29,126321,126322,126325],{},[32,126323,126324],{},"Terminal=false"," → 不打开终端",[29,126327,126328,126331],{},[32,126329,126330],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[126333,126334,126335],"blockquote",{},[19,126336,126337,126338,126340,126341],{},"可以理解成 ",[32,126339,126208],{}," 文件是 Linux 的 ",[1921,126342,126343],{},"快捷方式配置文件",[19,126345,126346],{},"4️⃣设置可执行权限",[73,126348,126350],{"className":122058,"code":126349,"language":122060,"meta":122061,"style":79},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[32,126351,126352],{"__ignoreMap":79},[100,126353,126354],{"class":102,"line":103},[100,126355,126349],{},[19,126357,126358],{},"5️⃣桌面图标启动的话如下：",[73,126360,126362],{"className":122058,"code":126361,"language":122060,"meta":122061,"style":79},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[32,126363,126364,126369],{"__ignoreMap":79},[100,126365,126366],{"class":102,"line":103},[100,126367,126368],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[100,126370,126371],{"class":102,"line":188},[100,126372,126373],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[26,126375,126376],{"start":199},[29,126377,126378],{},"下载Appimage文件实现软件的安装",[19,126380,126381],{},"1️⃣先下载appimage",[19,126383,126384],{},[2006,126385,126386],{"href":126386,"rel":126387},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[25442],[19,126389,126390],{},[3095,126391],{"alt":79,"src":126392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,126394,126395],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,126397,126398],{},[3095,126399],{"alt":79,"src":126400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,126402,126403],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,126405,126406],{},[3095,126407],{"alt":79,"src":126408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,126410,126411],{},[3095,126412],{"alt":79,"src":126413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,126415,126416,126417,126420],{},"3️⃣给他们放在",[32,126418,126419],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,126422,126423],{},"4️⃣给软件执行权限",[73,126425,126427],{"className":122058,"code":126426,"language":122060,"meta":122061,"style":79},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[32,126428,126429,126434],{"__ignoreMap":79},[100,126430,126431],{"class":102,"line":103},[100,126432,126433],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[100,126435,126436],{"class":102,"line":188},[100,126437,126438],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,126440,126441],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[73,126443,126445],{"className":118538,"code":126444,"language":118540,"meta":79,"style":79},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[32,126446,126447,126454,126461,126467],{"__ignoreMap":79},[100,126448,126449,126451],{"class":102,"line":103},[100,126450,102797],{"class":117},[100,126452,126453],{"class":110}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[100,126455,126456,126458],{"class":102,"line":188},[100,126457,988],{"class":106},[100,126459,126460],{"class":110}," .\u002Fqqmusic.desktop\n",[100,126462,126463,126465],{"class":102,"line":199},[100,126464,125509],{"class":106},[100,126466,126460],{"class":110},[100,126468,126469,126471,126473,126475],{"class":102,"line":532},[100,126470,107],{"class":106},[100,126472,26156],{"class":110},[100,126474,124375],{"class":110},[100,126476,126460],{"class":110},[19,126478,126479,126481],{},[32,126480,988],{},"：一个 Linux 命令，主要功能是：",[2773,126483,126484,126487],{},[29,126485,126486],{},"如果文件不存在，就创建一个新的空文件",[29,126488,126489],{},"如果文件已存在，就更新该文件的最后修改时间",[73,126491,126493],{"className":122058,"code":126492,"language":122060,"meta":122061,"style":79},"[Desktop Entry]\nName=QQ音乐\nExec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\nIcon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\nType=Application\nCategories=Audio;Music;Player;\nComment=QQ Music Client for Linux\n",[32,126494,126495,126499,126504,126509,126514,126518,126523],{"__ignoreMap":79},[100,126496,126497],{"class":102,"line":103},[100,126498,126260],{},[100,126500,126501],{"class":102,"line":188},[100,126502,126503],{},"Name=QQ音乐\n",[100,126505,126506],{"class":102,"line":199},[100,126507,126508],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[100,126510,126511],{"class":102,"line":532},[100,126512,126513],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[100,126515,126516],{"class":102,"line":577},[100,126517,126270],{},[100,126519,126520],{"class":102,"line":589},[100,126521,126522],{},"Categories=Audio;Music;Player;\n",[100,126524,126525],{"class":102,"line":595},[100,126526,126527],{},"Comment=QQ Music Client for Linux\n",[19,126529,126530],{},"将文件复制进去",[19,126532,126533],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,126535,126536],{},[3095,126537],{"alt":79,"src":126538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,126540,126541],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,126543,126544],{},[3095,126545],{"alt":79,"src":126546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,126548,126549,126550,126553,126554,126557],{},"如果你用的不是KDE，那么也可以直接修改",[32,126551,126552],{},"qqmuic.desktop","：在exec的末尾加上",[32,126555,126556],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[73,126559,126561],{"className":122058,"code":126560,"language":122060,"meta":122061,"style":79},"[Desktop Entry]\nName=QQ音乐\nExec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\nIcon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\nType=Application\nCategories=Audio;Music;Player;\nComment=QQ Music Client for Linux\n",[32,126562,126563,126567,126571,126576,126580,126584,126588],{"__ignoreMap":79},[100,126564,126565],{"class":102,"line":103},[100,126566,126260],{},[100,126568,126569],{"class":102,"line":188},[100,126570,126503],{},[100,126572,126573],{"class":102,"line":199},[100,126574,126575],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[100,126577,126578],{"class":102,"line":532},[100,126579,126513],{},[100,126581,126582],{"class":102,"line":577},[100,126583,126270],{},[100,126585,126586],{"class":102,"line":589},[100,126587,126522],{},[100,126589,126590],{"class":102,"line":595},[100,126591,126527],{},[19,126593,126594],{},[3095,126595],{"alt":79,"src":126596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,126598,126599],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[73,126601,126603],{"className":122058,"code":126602,"language":122060,"meta":122061,"style":79},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[32,126604,126605],{"__ignoreMap":79},[100,126606,126607],{"class":102,"line":103},[100,126608,126602],{},[26,126610,126611],{"start":532},[29,126612,126613],{},"去Flathub上安装软件",[19,126615,126616],{},[2006,126617,126618],{"href":126618,"rel":126619},"https:\u002F\u002Fflathub.org\u002F",[25442],[19,126621,126622],{},"1️⃣去上面的官网搜索软件+下载软件",[19,126624,126625],{},[3095,126626],{"alt":79,"src":126627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[73,126629,126631],{"className":122058,"code":126630,"language":122060,"meta":122061,"style":79},"flatpak install flathub com.obsproject.Studio\n",[32,126632,126633],{"__ignoreMap":79},[100,126634,126635],{"class":102,"line":103},[100,126636,126630],{},[19,126638,126639],{},[3095,126640],{"alt":79,"src":126641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,126643,126644],{},"2️⃣运行软件",[19,126646,126647],{},"a.官方方式：",[19,126649,126650],{},[3095,126651],{"alt":79,"src":126652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[73,126654,126655],{"className":122058,"code":126630,"language":122060,"meta":122061,"style":79},[32,126656,126657],{"__ignoreMap":79},[100,126658,126659],{"class":102,"line":103},[100,126660,126630],{},[19,126662,126663],{},"b.当普通软件运行：",[19,126665,126666],{},[3095,126667],{"alt":79,"src":126668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,126670,126671],{},[3095,126672],{"alt":79,"src":126673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[1677,126675,126676],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":79,"searchDepth":188,"depth":188,"links":126678},[126679,126680,126685,126686,126692,126693],{"id":123411,"depth":188,"text":123412},{"id":123753,"depth":188,"text":123754,"children":126681},[126682,126683,126684],{"id":123757,"depth":199,"text":123758},{"id":123824,"depth":199,"text":123825},{"id":124085,"depth":199,"text":124086},{"id":124238,"depth":188,"text":124239},{"id":124476,"depth":188,"text":124477,"children":126687},[126688,126689,126690,126691],{"id":124528,"depth":199,"text":124529},{"id":124814,"depth":199,"text":124815},{"id":125085,"depth":199,"text":125086},{"id":125344,"depth":199,"text":125345},{"id":125403,"depth":188,"text":125404},{"id":125704,"depth":188,"text":125705,"children":126694},[126695,126696,126697,126698,126699,126700,126701,126702],{"id":125708,"depth":199,"text":125709},{"id":125720,"depth":199,"text":125721},{"id":125932,"depth":199,"text":125933},{"id":125956,"depth":199,"text":125957},{"id":126022,"depth":199,"text":126023},{"id":126116,"depth":199,"text":126117},{"id":126123,"depth":199,"text":126124},{"id":126147,"depth":199,"text":126148},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":123403,"description":24958},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":126709,"title":126710,"body":126711,"description":24958,"extension":1708,"meta":126715,"navigation":569,"path":126716,"seo":126717,"stem":126718,"__hash__":126719},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":126712,"toc":126713},[],{"title":79,"searchDepth":188,"depth":188,"links":126714},[],{"category":31833},"\u002Fwiki\u002F2025-01-27-linux",{"title":126710,"description":24958},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":126721,"title":126722,"body":126723,"description":126727,"extension":1708,"meta":127118,"navigation":569,"path":127119,"seo":127120,"stem":127121,"__hash__":127122},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":126724,"toc":127116},[126725,126728,126732,126749,126752,126805,126809,126811,126851,126860,126864,126867,127108,127113],[19,126726,126727],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,126729,126731],{"id":126730},"_1ubuntu环境配置","1.Ubuntu环境配置",[26,126733,126734,126737,126740,126743,126746],{},[29,126735,126736],{},"ubuntu环境换源",[29,126738,126739],{},"安装cuda",[29,126741,126742],{},"安装miniconda",[29,126744,126745],{},"安装pytorch",[29,126747,126748],{},"安装genesis",[19,126750,126751],{},"参考链接：",[73,126753,126755],{"className":94,"code":126754,"language":96,"meta":79,"style":79},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[32,126756,126757],{"__ignoreMap":79},[100,126758,126759,126762,126765,126768,126770,126773,126776,126778,126781,126784,126786,126789,126792,126794,126797,126800,126802],{"class":102,"line":103},[100,126760,126761],{"class":106},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[100,126763,126764],{"class":110},"=blogdetail",[100,126766,126767],{"class":258},"&sharetype",[100,126769,472],{"class":471},[100,126771,126772],{"class":110},"blogdetail",[100,126774,126775],{"class":258},"&sharerId",[100,126777,472],{"class":471},[100,126779,126780],{"class":110},"144728092",[100,126782,126783],{"class":258},"&sharerefer",[100,126785,472],{"class":471},[100,126787,126788],{"class":110},"PC",[100,126790,126791],{"class":258},"&sharesource",[100,126793,472],{"class":471},[100,126795,126796],{"class":110},"qq_69379513",[100,126798,126799],{"class":258},"&sharefrom",[100,126801,472],{"class":471},[100,126803,126804],{"class":110},"from_link\n",[10,126806,126808],{"id":126807},"_2genesis-报错issue","2.Genesis 报错issue",[19,126810,126751],{},[73,126812,126813],{"className":94,"code":126754,"language":96,"meta":79,"style":79},[32,126814,126815],{"__ignoreMap":79},[100,126816,126817,126819,126821,126823,126825,126827,126829,126831,126833,126835,126837,126839,126841,126843,126845,126847,126849],{"class":102,"line":103},[100,126818,126761],{"class":106},[100,126820,126764],{"class":110},[100,126822,126767],{"class":258},[100,126824,472],{"class":471},[100,126826,126772],{"class":110},[100,126828,126775],{"class":258},[100,126830,472],{"class":471},[100,126832,126780],{"class":110},[100,126834,126783],{"class":258},[100,126836,472],{"class":471},[100,126838,126788],{"class":110},[100,126840,126791],{"class":258},[100,126842,472],{"class":471},[100,126844,126796],{"class":110},[100,126846,126799],{"class":258},[100,126848,472],{"class":471},[100,126850,126804],{"class":110},[73,126852,126854],{"className":94,"code":126853,"language":96,"meta":79,"style":79},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[32,126855,126856],{"__ignoreMap":79},[100,126857,126858],{"class":102,"line":103},[100,126859,126853],{"class":106},[10,126861,126863],{"id":126862},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,126865,126866],{},"hello_robot.py",[73,126868,126870],{"className":249,"code":126869,"language":251,"meta":79,"style":79},"import os\nos.environ['PYOPENGL_PLATFORM'] = 'glx'\n\nimport genesis as gs\nfrom pynput import keyboard\n\ngs.init(backend=gs.gpu)\n\nscene = gs.Scene(show_viewer=True)\nplane = scene.add_entity(gs.morphs.Plane())\nfranka = scene.add_entity(\n    gs.morphs.MJCF(file='xml\u002Ffranka_emika_panda\u002Fpanda.xml'),\n)\n\nscene.build()\n\ndef on_press(key):\n    try:\n        if key.char == 'q':\n            return False\n    except AttributeError:\n        pass\n\nlistener = keyboard.Listener(on_press=on_press)\nlistener.start()\n\nwhile listener.running:\n    scene.step()\n",[32,126871,126872,126878,126893,126897,126909,126921,126925,126938,126942,126961,126971,126981,126995,126999,127003,127008,127012,127022,127029,127043,127050,127060,127065,127069,127087,127092,127096,127103],{"__ignoreMap":79},[100,126873,126874,126876],{"class":102,"line":103},[100,126875,548],{"class":471},[100,126877,46859],{"class":258},[100,126879,126880,126883,126886,126888,126890],{"class":102,"line":188},[100,126881,126882],{"class":258},"os.environ[",[100,126884,126885],{"class":110},"'PYOPENGL_PLATFORM'",[100,126887,468],{"class":258},[100,126889,472],{"class":471},[100,126891,126892],{"class":110}," 'glx'\n",[100,126894,126895],{"class":102,"line":199},[100,126896,570],{"emptyLinePlaceholder":569},[100,126898,126899,126901,126904,126906],{"class":102,"line":532},[100,126900,548],{"class":471},[100,126902,126903],{"class":258}," genesis ",[100,126905,561],{"class":471},[100,126907,126908],{"class":258}," gs\n",[100,126910,126911,126913,126916,126918],{"class":102,"line":577},[100,126912,32301],{"class":471},[100,126914,126915],{"class":258}," pynput ",[100,126917,548],{"class":471},[100,126919,126920],{"class":258}," keyboard\n",[100,126922,126923],{"class":102,"line":589},[100,126924,570],{"emptyLinePlaceholder":569},[100,126926,126927,126930,126933,126935],{"class":102,"line":595},[100,126928,126929],{"class":258},"gs.init(",[100,126931,126932],{"class":6812},"backend",[100,126934,472],{"class":471},[100,126936,126937],{"class":258},"gs.gpu)\n",[100,126939,126940],{"class":102,"line":601},[100,126941,570],{"emptyLinePlaceholder":569},[100,126943,126944,126947,126949,126952,126955,126957,126959],{"class":102,"line":606},[100,126945,126946],{"class":258},"scene ",[100,126948,472],{"class":471},[100,126950,126951],{"class":258}," gs.Scene(",[100,126953,126954],{"class":6812},"show_viewer",[100,126956,472],{"class":471},[100,126958,33034],{"class":117},[100,126960,809],{"class":258},[100,126962,126963,126966,126968],{"class":102,"line":612},[100,126964,126965],{"class":258},"plane ",[100,126967,472],{"class":471},[100,126969,126970],{"class":258}," scene.add_entity(gs.morphs.Plane())\n",[100,126972,126973,126976,126978],{"class":102,"line":618},[100,126974,126975],{"class":258},"franka ",[100,126977,472],{"class":471},[100,126979,126980],{"class":258}," scene.add_entity(\n",[100,126982,126983,126986,126988,126990,126993],{"class":102,"line":623},[100,126984,126985],{"class":258},"    gs.morphs.MJCF(",[100,126987,46908],{"class":6812},[100,126989,472],{"class":471},[100,126991,126992],{"class":110},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[100,126994,39601],{"class":258},[100,126996,126997],{"class":102,"line":629},[100,126998,809],{"class":258},[100,127000,127001],{"class":102,"line":635},[100,127002,570],{"emptyLinePlaceholder":569},[100,127004,127005],{"class":102,"line":641},[100,127006,127007],{"class":258},"scene.build()\n",[100,127009,127010],{"class":102,"line":647},[100,127011,570],{"emptyLinePlaceholder":569},[100,127013,127014,127016,127019],{"class":102,"line":653},[100,127015,678],{"class":471},[100,127017,127018],{"class":106}," on_press",[100,127020,127021],{"class":258},"(key):\n",[100,127023,127024,127027],{"class":102,"line":659},[100,127025,127026],{"class":471},"    try",[100,127028,696],{"class":258},[100,127030,127031,127033,127036,127038,127041],{"class":102,"line":665},[100,127032,4106],{"class":471},[100,127034,127035],{"class":258}," key.char ",[100,127037,4551],{"class":471},[100,127039,127040],{"class":110}," 'q'",[100,127042,696],{"class":258},[100,127044,127045,127047],{"class":102,"line":670},[100,127046,17313],{"class":471},[100,127048,127049],{"class":117}," False\n",[100,127051,127052,127055,127058],{"class":102,"line":675},[100,127053,127054],{"class":471},"    except",[100,127056,127057],{"class":117}," AttributeError",[100,127059,696],{"class":258},[100,127061,127062],{"class":102,"line":699},[100,127063,127064],{"class":471},"        pass\n",[100,127066,127067],{"class":102,"line":708},[100,127068,570],{"emptyLinePlaceholder":569},[100,127070,127071,127074,127076,127079,127082,127084],{"class":102,"line":722},[100,127072,127073],{"class":258},"listener ",[100,127075,472],{"class":471},[100,127077,127078],{"class":258}," keyboard.Listener(",[100,127080,127081],{"class":6812},"on_press",[100,127083,472],{"class":471},[100,127085,127086],{"class":258},"on_press)\n",[100,127088,127089],{"class":102,"line":735},[100,127090,127091],{"class":258},"listener.start()\n",[100,127093,127094],{"class":102,"line":754},[100,127095,570],{"emptyLinePlaceholder":569},[100,127097,127098,127100],{"class":102,"line":771},[100,127099,109905],{"class":471},[100,127101,127102],{"class":258}," listener.running:\n",[100,127104,127105],{"class":102,"line":776},[100,127106,127107],{"class":258},"    scene.step()\n",[19,127109,127110],{},[3095,127111],{"alt":79,"src":127112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[1677,127114,127115],{},"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":79,"searchDepth":188,"depth":188,"links":127117},[],{"category":24960},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":126722,"description":126727},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":127124,"title":127125,"body":127126,"description":24958,"extension":1708,"meta":127141,"navigation":569,"path":127142,"seo":127143,"stem":127144,"__hash__":127145},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":127127,"toc":127138},[127128,127131,127135],[10,127129,127125],{"id":127130},"_1-基础知识",[14,127132,127134],{"id":127133},"_11-js的组成","1.1 js的组成",[19,127136,127137],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":79,"searchDepth":188,"depth":188,"links":127139},[127140],{"id":127133,"depth":188,"text":127134},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":127125,"description":24958},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":127147,"title":127148,"body":127149,"description":24958,"extension":1708,"meta":127288,"navigation":569,"path":127289,"seo":127290,"stem":127291,"__hash__":127292},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":127150,"toc":127276},[127151,127154,127158,127161,127165,127175,127179,127182,127185,127188,127192,127199,127205,127209,127215,127226,127230,127233,127237,127240,127244,127247,127251,127254,127258,127261,127264,127267,127270,127273],[10,127152,127148],{"id":127153},"_2-vscode必备内容",[14,127155,127157],{"id":127156},"_21-标签分类","2.1 标签分类",[19,127159,127160],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,127162,127164],{"id":127163},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,127166,127167,127168,127170,127171,127174],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[32,127169,1994],{}," 然后按 ",[32,127172,127173],{},"Tab","，快速自动生成基本结构。",[14,127176,127178],{"id":127177},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,127180,127181],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,127183,127184],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,127186,127187],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,127189,127191],{"id":127190},"_24-视图缩放","2.4 视图缩放",[19,127193,127194,127195,127198],{},"缩放视图 ",[32,127196,127197],{},"ctrl+"," 可实现代码增大。",[19,127200,127201,127204],{},[32,127202,127203],{},"ctrl-"," 可实现代码减小。",[14,127206,127208],{"id":127207},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,127210,127211,127212,233],{},"VSCode 新建文件快捷键为 ",[32,127213,127214],{},"ctrl+N",[19,127216,127217,127218,127221,127222,127225],{},"保存快捷键为 ",[32,127219,127220],{},"ctrl+S","，将文本保存为 ",[32,127223,127224],{},".html"," 文件。",[14,127227,127229],{"id":127228},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,127231,127232],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,127234,127236],{"id":127235},"_27-vscode-icons","2.7 vscode-icons",[19,127238,127239],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,127241,127243],{"id":127242},"_28-easy-less","2.8 Easy LESS",[19,127245,127246],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,127248,127250],{"id":127249},"_29-会了吧插件","2.9 会了吧插件",[19,127252,127253],{},"会了吧插件可以展示代码中英语单词的意思。",[14,127255,127257],{"id":127256},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,127259,127260],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,127262,127263],{},"②选定多个相同的单词:ctrl+D",[19,127265,127266],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,127268,127269],{},"④全局替换某些单词:ctrl+h",[19,127271,127272],{},"⑤快速定位到某一行:ctrl+g",[19,127274,127275],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":79,"searchDepth":188,"depth":188,"links":127277},[127278,127279,127280,127281,127282,127283,127284,127285,127286,127287],{"id":127156,"depth":188,"text":127157},{"id":127163,"depth":188,"text":127164},{"id":127177,"depth":188,"text":127178},{"id":127190,"depth":188,"text":127191},{"id":127207,"depth":188,"text":127208},{"id":127228,"depth":188,"text":127229},{"id":127235,"depth":188,"text":127236},{"id":127242,"depth":188,"text":127243},{"id":127249,"depth":188,"text":127250},{"id":127256,"depth":188,"text":127257},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":127148,"description":24958},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":127294,"title":127295,"body":127296,"description":24958,"extension":1708,"meta":127455,"navigation":569,"path":127456,"seo":127457,"stem":127458,"__hash__":127459},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":127297,"toc":127447},[127298,127301,127305,127315,127321,127327,127331,127340,127344,127349,127352,127355,127359,127362,127372,127381,127390,127399,127409,127416,127421,127426,127439],[10,127299,127295],{"id":127300},"_3-html文本与容器标签",[14,127302,127304],{"id":127303},"_31-标题标签","3.1 标题标签",[19,127306,127307,127310,127311,127314],{},[32,127308,127309],{},"\u003Ch1>","我是一级标签",[32,127312,127313],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,127316,127317,127310,127319],{},[32,127318,127309],{},[32,127320,127313],{},[19,127322,124577,127323,127326],{},[32,127324,127325],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,127328,127330],{"id":127329},"_32-段落标签","3.2 段落标签",[19,127332,127333,127336,127337],{},[32,127334,127335],{},"\u003Cp>","....",[32,127338,127339],{},"\u003C\u002Fp>",[14,127341,127343],{"id":127342},"_33-换行标签","3.3 换行标签",[19,127345,127346],{},[32,127347,127348],{},"\u003Cbr \u002F>",[19,127350,127351],{},"具有强制换行的作用",[19,127353,127354],{},"单标签",[14,127356,127358],{"id":127357},"_34-文本格式化标签","3.4 文本格式化标签",[19,127360,127361],{},"提供粗体、斜体和下划线等效果",[19,127363,127364,127365,288,127368,127371],{},"加粗：",[32,127366,127367],{},"\u003Cstrong>...\u003C\u002Fstrong>",[32,127369,127370],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,127373,127374,127375,288,127378,127371],{},"斜体：",[32,127376,127377],{},"\u003Cem>...\u003C\u002Fem>",[32,127379,127380],{},"\u003Ci>...\u003C\u002Fi>",[19,127382,127383,127384,288,127387,127371],{},"删除线：",[32,127385,127386],{},"\u003Cdel>...\u003C\u002Fdel>",[32,127388,127389],{},"\u003Cs>...\u003C\u002Fs>",[19,127391,127392,127393,288,127396,127371],{},"下划线：",[32,127394,127395],{},"\u003Cins>...\u003C\u002Fins>",[32,127397,127398],{},"\u003Cu>...\u003C\u002Fu>",[14,127400,127402,127403,19991,127406,104169],{"id":127401},"_35-div和span标签","3.5 ",[32,127404,127405],{},"\u003Cdiv>",[32,127407,127408],{},"\u003Cspan>",[19,127410,127411,218,127413,127415],{},[32,127412,127405],{},[32,127414,127408],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,127417,127418],{},[32,127419,127420],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,127422,127423],{},[32,127424,127425],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,127427,127428,127429,127431,127432,127434,127435,127438],{},"两者特点：①",[32,127430,127405],{}," 标签用来布局，但一行通常只放一个 ",[32,127433,127405],{},"。可以理解为一个大盒子，独占一行，在 ",[32,127436,127437],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,127440,78803,127441,127443,127444,127446],{},[32,127442,127408],{}," 标签也可用于布局，一行可以放多个 ",[32,127445,127408],{},"，可理解为小盒子。",{"title":79,"searchDepth":188,"depth":188,"links":127448},[127449,127450,127451,127452,127453],{"id":127303,"depth":188,"text":127304},{"id":127329,"depth":188,"text":127330},{"id":127342,"depth":188,"text":127343},{"id":127357,"depth":188,"text":127358},{"id":127401,"depth":188,"text":127454},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":127295,"description":24958},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":127461,"title":127462,"body":127463,"description":24958,"extension":1708,"meta":127660,"navigation":569,"path":127661,"seo":127662,"stem":127663,"__hash__":127664},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":127464,"toc":127652},[127465,127468,127472,127475,127481,127488,127494,127500,127503,127506,127509,127512,127515,127518,127521,127525,127528,127531,127534,127540,127546,127552,127559,127563,127569,127575,127578,127581,127587,127593,127599,127602,127605,127609,127612,127622,127628,127632,127641,127645,127648],[10,127466,127462],{"id":127467},"_4-html图像与链接",[14,127469,127471],{"id":127470},"_41-图像标签","4.1 图像标签",[19,127473,127474],{},"（1）标签",[19,127476,127477,127480],{},[32,127478,127479],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,127482,127483,127484,127487],{},"src是",[32,127485,127486],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,127489,127490,127491],{},"alt:文本，替换文本。图像不能显示的文字 ",[32,127492,127493],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,127495,127496,127497],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[32,127498,127499],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,127501,127502],{},"width:像素，设置图像的宽度",[19,127504,127505],{},"height:像素，设置图像的高度",[19,127507,127508],{},"border：像素，设置图像的边框粗细",[19,127510,127511],{},"（2）图像标签属性的注意点：",[19,127513,127514],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,127516,127517],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,127519,127520],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,127522,127524],{"id":127523},"_42-路径注意要点","4.2 路径注意要点：",[19,127526,127527],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,127529,127530],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,127532,127533],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,127535,127536,127537],{},"①同一级路径：图像文件位于HTML文件同一级，如",[32,127538,127539],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,127541,127542,127543],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[32,127544,127545],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,127547,127548,127549],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[32,127550,127551],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,127553,127554,127555,2019],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[2006,127556,127557],{"href":127557,"rel":127558},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[25442],[14,127560,127562],{"id":127561},"_43-超链接标签","4.3 超链接标签",[19,127564,127565,127568],{},[32,127566,127567],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,127570,127571,127572],{},"①语法格式：",[32,127573,127574],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,127576,127577],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,127579,127580],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,127582,127583,127584],{},"③链接分类：外部链接：",[32,127585,127586],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,127588,127589,127590],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[32,127591,127592],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,127594,127595,127596],{},"空链接：如果当时没有确定链接目标时，",[32,127597,127598],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,127600,127601],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,127603,127604],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,127606,127608],{"id":127607},"_44-锚点链接","4.4 锚点链接",[19,127610,127611],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,127613,127614,127615,127618,127619],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[32,127616,127617],{},"\u003Ca href=\"#two\">","第二级",[32,127620,127621],{},"\u003C\u002Fa>",[19,127623,127624,127625],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[32,127626,127627],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,127629,127631],{"id":127630},"_45-注释标签","4.5 注释标签",[19,127633,127634,127637,127638],{},[32,127635,127636],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[32,127639,127640],{},"ctrl+\u002F",[14,127642,127644],{"id":127643},"_46-特殊字符","4.6 特殊字符",[19,127646,127647],{},"可以实现添加多个空格",[3095,127649],{"style":127650,"src":127651},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":79,"searchDepth":188,"depth":188,"links":127653},[127654,127655,127656,127657,127658,127659],{"id":127470,"depth":188,"text":127471},{"id":127523,"depth":188,"text":127524},{"id":127561,"depth":188,"text":127562},{"id":127607,"depth":188,"text":127608},{"id":127630,"depth":188,"text":127631},{"id":127643,"depth":188,"text":127644},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":127462,"description":24958},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":127666,"title":127667,"body":127668,"description":24958,"extension":1708,"meta":127961,"navigation":569,"path":127962,"seo":127963,"stem":127964,"__hash__":127965},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":127669,"toc":127952},[127670,127673,127677,127680,127683,127686,127689,127692,127695,127698,127701,127704,127724,127730,127734,127737,127740,127743,127746,127749,127752,127756,127759,127762,127765,127768,127781,127786,127789,127792,127807,127810,127813,127816,127819,127822,127826,127829,127836,127839,127842,127845,127848,127851,127857,127860,127863,127869,127872,127875,127878,127884,127887,127890,127904,127911,127914,127917,127924,127933,127936,127939,127942,127946,127949],[10,127671,127667],{"id":127672},"_5-html表格列表与表单",[14,127674,127676],{"id":127675},"_51-表格标签","5.1 表格标签",[19,127678,127679],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,127681,127682],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,127684,127685],{},"②表格基本语法：",[3095,127687],{"style":127650,"src":127688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,127690,127691],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[3095,127693],{"style":127650,"src":127694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,127696,127697],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[3095,127699],{"style":127650,"src":127700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,127702,127703],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,127705,127706,127709,127710,127712,127713,127716,127717,127719,127720,127723],{},[32,127707,127708],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[32,127711,127708],{},"内部必须拥有",[32,127714,127715],{},"\u003Ctr>","标签，一般位于第一行，",[32,127718,127708],{},"比",[32,127721,127722],{},"\u003Cth>","范围广",[19,127725,127726,127729],{},[32,127727,127728],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,127731,127733],{"id":127732},"_52-合并单元格","5.2 合并单元格",[19,127735,127736],{},"（1）合并单元格方式：",[19,127738,127739],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,127741,127742],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,127744,127745],{},"（2）目标单元格：",[19,127747,127748],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,127750,127751],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,127753,127755],{"id":127754},"_53-列表标签","5.3 列表标签",[19,127757,127758],{},"（1）分类：无序列表、有序列表、自定义列表",[19,127760,127761],{},"①无序列表：",[3095,127763],{"style":127650,"src":127764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,127766,127767],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,127769,127770,127773,127774,127777,127778,127780],{},[32,127771,127772],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[32,127775,127776],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[32,127779,127772],{},"中输入其他标签或文字是不对的",[19,127782,127783,127785],{},[32,127784,127776],{},"之间相当于一个容器，可以容纳所有元素",[19,127787,127788],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,127790,127791],{},"在css中去除前边的小圆点采用如下代码:",[73,127793,127797],{"className":127794,"code":127795,"language":127796,"meta":79,"style":79},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[32,127798,127799],{"__ignoreMap":79},[100,127800,127801,127804],{"class":102,"line":103},[100,127802,127803],{"class":52854},"list-style",[100,127805,127806],{"class":258},": none;\n",[19,127808,127809],{},"②有序列表：",[3095,127811],{"style":127650,"src":127812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,127814,127815],{},"③自定义列表：",[3095,127817],{"style":127650,"src":127818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[3095,127820],{"style":127650,"src":127821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,127823,127825],{"id":127824},"_54-表单标签","5.4 表单标签",[19,127827,127828],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,127830,127831,127832,127835],{},"（1）表单域：包含单元素的区域，",[32,127833,127834],{},"\u003Cform>","标签可以实现信息的收集和传递。",[3095,127837],{"style":127650,"src":127838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,127840,127841],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,127843,127844],{},"表单元素提交必须有name属性",[19,127846,127847],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,127849,127850],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,127852,78780,127853,127856],{},[32,127854,127855],{},"\u003Cinput>","输入表单元素",[3095,127858],{"style":127650,"src":127859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[3095,127861],{"style":127650,"src":127862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,127864,127865,127866],{},"单选按钮：",[32,127867,127868],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[3095,127870],{"style":127650,"src":127871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,127873,127874],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[3095,127876],{"style":127650,"src":127877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,127879,127880,127883],{},[1921,127881,127882],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,127885,127886],{},"②select下拉表单元素：可以节约页面控件",[3095,127888],{"style":127650,"src":127889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,127891,127892,15376,127894,127897,127898,127900,127901,127903],{},[1921,127893,1809],{},[32,127895,127896],{},"\u003Cselect>","中至少包含一对",[32,127899,104190],{},"；在",[32,127902,104190],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,127905,127906,127907,127910],{},"③",[32,127908,127909],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[3095,127912],{"style":127650,"src":127913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,127915,127916],{},"3行20列",[14,127918,127920,127921,104169],{"id":127919},"_55-lable标签","5.5 ",[32,127922,127923],{},"\u003Clable>",[19,127925,127926,127927,127929,127930,127932],{},"它不是表单标签，但常常与表单标签搭配使用，",[32,127928,127923],{},"标签用于绑定一个表单标签，当点击",[32,127931,127923],{},"标签内的文本",[19,127934,127935],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[3095,127937],{"style":127650,"src":127938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[3095,127940],{"style":127650,"src":127941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,127943,127945],{"id":127944},"_56-实例","5.6 实例",[3095,127947],{"style":127650,"src":127948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[1677,127950,127951],{},"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":79,"searchDepth":188,"depth":188,"links":127953},[127954,127955,127956,127957,127958,127960],{"id":127675,"depth":188,"text":127676},{"id":127732,"depth":188,"text":127733},{"id":127754,"depth":188,"text":127755},{"id":127824,"depth":188,"text":127825},{"id":127919,"depth":188,"text":127959},"5.5 \u003Clable>标签",{"id":127944,"depth":188,"text":127945},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":127667,"description":24958},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":127967,"title":127968,"body":127969,"description":24958,"extension":1708,"meta":128518,"navigation":569,"path":128519,"seo":128520,"stem":128521,"__hash__":128522},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":127970,"toc":128493},[127971,127974,127978,127981,127984,127988,127991,127994,127997,128000,128003,128006,128009,128013,128016,128020,128023,128026,128029,128033,128036,128039,128042,128048,128051,128054,128057,128060,128063,128066,128069,128102,128106,128109,128112,128115,128119,128122,128125,128128,128131,128134,128138,128141,128144,128147,128151,128154,128158,128161,128165,128168,128173,128177,128180,128184,128187,128190,128193,128196,128223,128226,128230,128233,128236,128241,128244,128247,128251,128254,128259,128262,128265,128268,128272,128275,128278,128281,128285,128288,128291,128294,128298,128302,128305,128345,128348,128352,128359,128362,128366,128369,128415,128419,128422,128425,128428,128456,128460,128463,128490],[10,127972,127968],{"id":127973},"_6-css语法与文本样式",[14,127975,127977],{"id":127976},"_61-css语法规范","6.1 css语法规范",[19,127979,127980],{},"由两部分组成，选择器及一条或多条声明",[3095,127982],{"style":127650,"src":127983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,127985,127986],{},[1921,127987,1809],{},[19,127989,127990],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,127992,127993],{},"②属性与属性值以“键值对”的形式出现",[19,127995,127996],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,127998,127999],{},"④属性和属性值之间用英文“;”分开",[3095,128001],{"style":127650,"src":128002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[3095,128004],{"style":127650,"src":128005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[3095,128007],{"style":127650,"src":128008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,128010,128012],{"id":128011},"_62-css选择器","6.2 css选择器",[19,128014,128015],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[305,128017,128019],{"id":128018},"_621-标签选择器","6.2.1 标签选择器",[19,128021,128022],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,128024,128025],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[3095,128027],{"style":127650,"src":128028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[305,128030,128032],{"id":128031},"_622-类选择器","6.2.2 类选择器",[19,128034,128035],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,128037,128038],{},"②样例",[3095,128040],{"style":127650,"src":128041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,128043,128044,128045,128047],{},"③ ",[1921,128046,127882],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,128049,128050],{},"可以理解为给这个标签起了个名字，来表示；",[19,128052,128053],{},"长名称或词组可以使用横线来为选择器命名；",[19,128055,128056],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,128058,128059],{},"命名要有意义；",[3095,128061],{"style":127650,"src":128062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,128064,128065],{},"类选择器也可以指定特殊的元素p.center{}",[19,128067,128068],{},"p.center和.center都对",[73,128070,128072],{"className":127794,"code":128071,"language":127796,"meta":79,"style":79},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[32,128073,128074,128079,128088,128098],{"__ignoreMap":79},[100,128075,128076],{"class":102,"line":103},[100,128077,128078],{"class":1836},"\u002F* 类选择器指定特殊元素 *\u002F\n",[100,128080,128081,128083,128086],{"class":102,"line":188},[100,128082,19],{"class":52854},[100,128084,128085],{"class":106},".center",[100,128087,17153],{"class":258},[100,128089,128090,128092,128094,128096],{"class":102,"line":199},[100,128091,72080],{"class":117},[100,128093,52991],{"class":258},[100,128095,53146],{"class":117},[100,128097,2927],{"class":258},[100,128099,128100],{"class":102,"line":532},[100,128101,3197],{"class":258},[305,128103,128105],{"id":128104},"_623-多类名使用","6.2.3 多类名使用",[19,128107,128108],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[3095,128110],{"style":127650,"src":128111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,128113,128114],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[305,128116,128118],{"id":128117},"_624-id选择器","6.2.4 id选择器",[19,128120,128121],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,128123,128124],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[3095,128126],{"style":127650,"src":128127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,128129,128130],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,128132,128133],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[305,128135,128137],{"id":128136},"_625-通配符选择器","6.2.5 通配符选择器",[19,128139,128140],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,128142,128143],{},"* {",[19,128145,128146],{},"color=\"red\"}",[305,128148,128150],{"id":128149},"_626-总结","6.2.6 总结",[3095,128152],{"style":127650,"src":128153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,128155,128157],{"id":128156},"_63-css字体属性","6.3 css字体属性",[19,128159,128160],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[305,128162,128164],{"id":128163},"_631-字体系列","6.3.1 字体系列",[19,128166,128167],{},"font-family: '宋体';",[19,128169,128170,128172],{},[1921,128171,1809],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[305,128174,128176],{"id":128175},"_632-字体大小","6.3.2 字体大小",[19,128178,128179],{},"font-size: 20px",[19,128181,128182,28045],{},[1921,128183,127882],{},[19,128185,128186],{},"①px（像素）大小是网页的最常用单位",[19,128188,128189],{},"②谷歌浏览器默认为16px",[19,128191,128192],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,128194,128195],{},"④可以给body指定整个页面的大小：会自动引用",[73,128197,128199],{"className":127794,"code":128198,"language":127796,"meta":79,"style":79},"body {\n  font-size: 16px;\n}\n",[32,128200,128201,128207,128219],{"__ignoreMap":79},[100,128202,128203,128205],{"class":102,"line":103},[100,128204,53354],{"class":52854},[100,128206,17153],{"class":258},[100,128208,128209,128211,128213,128215,128217],{"class":102,"line":188},[100,128210,72180],{"class":117},[100,128212,52991],{"class":258},[100,128214,2368],{"class":117},[100,128216,53046],{"class":471},[100,128218,2927],{"class":258},[100,128220,128221],{"class":102,"line":199},[100,128222,3197],{"class":258},[19,128224,128225],{},"⑤标题标签比较特殊，需要单独指定大小",[305,128227,128229],{"id":128228},"_633-字体粗细","6.3.3 字体粗细",[19,128231,128232],{},"font-weight: bold;",[19,128234,128235],{},"font-weight: 100；",[19,128237,128238,128240],{},[1921,128239,1809],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,128242,128243],{},"font-weight= 400;",[19,128245,128246],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[305,128248,128250],{"id":128249},"_634-文字样式","6.3.4 文字样式",[19,128252,128253],{},"font-style: normal；",[19,128255,128256,28045],{},[1921,128257,128258],{},"属性值",[19,128260,128261],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,128263,128264],{},"②italic：浏览器会显示斜体的字体样式",[3095,128266],{"style":127650,"src":128267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[305,128269,128271],{"id":128270},"_635-字体符合属性","6.3.5 字体符合属性",[3095,128273],{"style":127650,"src":128274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[3095,128276],{"style":127650,"src":128277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,128279,128280],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,128282,128283,28045],{},[1921,128284,127882],{},[19,128286,128287],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,128289,128290],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,128292,128293],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,128295,128297],{"id":128296},"_64-css-test文本属性","6.4 css test文本属性",[305,128299,128301],{"id":128300},"_641-文本颜色","6.4.1 文本颜色",[19,128303,128304],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[73,128306,128308],{"className":127794,"code":128307,"language":127796,"meta":79,"style":79},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[32,128309,128310,128315,128321,128331,128336,128341],{"__ignoreMap":79},[100,128311,128312],{"class":102,"line":103},[100,128313,128314],{"class":1836},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[100,128316,128317,128319],{"class":102,"line":188},[100,128318,19],{"class":52854},[100,128320,17153],{"class":258},[100,128322,128323,128325,128327,128329],{"class":102,"line":199},[100,128324,72459],{"class":117},[100,128326,52991],{"class":258},[100,128328,58975],{"class":117},[100,128330,2927],{"class":258},[100,128332,128333],{"class":102,"line":532},[100,128334,128335],{"class":1836},"  \u002F* color: #ff0000; *\u002F\n",[100,128337,128338],{"class":102,"line":577},[100,128339,128340],{"class":1836},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[100,128342,128343],{"class":102,"line":589},[100,128344,3197],{"class":258},[3095,128346],{"style":127650,"src":128347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[305,128349,128351],{"id":128350},"_642-对齐文本","6.4.2 对齐文本",[19,128353,128354,128355,128358],{},"text-align属于用于设置元素内文本内容的 ",[1921,128356,128357],{},"水平对齐"," 方式",[19,128360,128361],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[305,128363,128365],{"id":128364},"_643-装饰文本","6.4.3 装饰文本",[19,128367,128368],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[73,128370,128372],{"className":127794,"code":128371,"language":127796,"meta":79,"style":79},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[32,128373,128374,128380,128390,128394,128400,128411],{"__ignoreMap":79},[100,128375,128376,128378],{"class":102,"line":103},[100,128377,2006],{"class":52854},[100,128379,17153],{"class":258},[100,128381,128382,128384,128386,128388],{"class":102,"line":188},[100,128383,72056],{"class":117},[100,128385,52991],{"class":258},[100,128387,56291],{"class":117},[100,128389,2927],{"class":258},[100,128391,128392],{"class":102,"line":199},[100,128393,3197],{"class":258},[100,128395,128396,128398],{"class":102,"line":532},[100,128397,19],{"class":52854},[100,128399,17153],{"class":258},[100,128401,128402,128404,128406,128409],{"class":102,"line":577},[100,128403,72056],{"class":117},[100,128405,52991],{"class":258},[100,128407,128408],{"class":117},"underline",[100,128410,2927],{"class":258},[100,128412,128413],{"class":102,"line":589},[100,128414,3197],{"class":258},[305,128416,128418],{"id":128417},"_644-文本缩进","6.4.4 文本缩进",[19,128420,128421],{},"实现文本的第一行首行缩进自己指定的距离",[19,128423,128424],{},"20px往右边走；-20px往左边走",[19,128426,128427],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[73,128429,128431],{"className":127794,"code":128430,"language":127796,"meta":79,"style":79},"p {\n  text-indent: 2em;\n}\n",[32,128432,128433,128439,128452],{"__ignoreMap":79},[100,128434,128435,128437],{"class":102,"line":103},[100,128436,19],{"class":52854},[100,128438,17153],{"class":258},[100,128440,128441,128444,128446,128448,128450],{"class":102,"line":188},[100,128442,128443],{"class":117},"  text-indent",[100,128445,52991],{"class":258},[100,128447,465],{"class":117},[100,128449,25135],{"class":471},[100,128451,2927],{"class":258},[100,128453,128454],{"class":102,"line":199},[100,128455,3197],{"class":258},[305,128457,128459],{"id":128458},"_645-行间距","6.4.5 行间距",[19,128461,128462],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[73,128464,128466],{"className":127794,"code":128465,"language":127796,"meta":79,"style":79},"p {\n  line-height: 1.6;\n}\n",[32,128467,128468,128474,128486],{"__ignoreMap":79},[100,128469,128470,128472],{"class":102,"line":103},[100,128471,19],{"class":52854},[100,128473,17153],{"class":258},[100,128475,128476,128479,128481,128484],{"class":102,"line":188},[100,128477,128478],{"class":117},"  line-height",[100,128480,52991],{"class":258},[100,128482,128483],{"class":117},"1.6",[100,128485,2927],{"class":258},[100,128487,128488],{"class":102,"line":199},[100,128489,3197],{"class":258},[1677,128491,128492],{},"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":79,"searchDepth":188,"depth":188,"links":128494},[128495,128496,128504,128511],{"id":127976,"depth":188,"text":127977},{"id":128011,"depth":188,"text":128012,"children":128497},[128498,128499,128500,128501,128502,128503],{"id":128018,"depth":199,"text":128019},{"id":128031,"depth":199,"text":128032},{"id":128104,"depth":199,"text":128105},{"id":128117,"depth":199,"text":128118},{"id":128136,"depth":199,"text":128137},{"id":128149,"depth":199,"text":128150},{"id":128156,"depth":188,"text":128157,"children":128505},[128506,128507,128508,128509,128510],{"id":128163,"depth":199,"text":128164},{"id":128175,"depth":199,"text":128176},{"id":128228,"depth":199,"text":128229},{"id":128249,"depth":199,"text":128250},{"id":128270,"depth":199,"text":128271},{"id":128296,"depth":188,"text":128297,"children":128512},[128513,128514,128515,128516,128517],{"id":128300,"depth":199,"text":128301},{"id":128350,"depth":199,"text":128351},{"id":128364,"depth":199,"text":128365},{"id":128417,"depth":199,"text":128418},{"id":128458,"depth":199,"text":128459},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":127968,"description":24958},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":128524,"title":128525,"body":128526,"description":24958,"extension":1708,"meta":129175,"navigation":569,"path":129176,"seo":129177,"stem":129178,"__hash__":129179},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":128527,"toc":129156},[128528,128531,128535,128539,128599,128603,128613,128616,128619,128623,128648,128652,128655,128658,128661,128664,128667,128671,128674,128677,128719,128722,128748,128754,128757,128761,128765,128771,128774,128777,128780,128783,128786,128789,128834,128838,128841,128844,128848,128852,128881,128884,128889,128892,128895,128898,128901,128905,128909,128912,128914,128917,128921,128924,128928,128931,128934,128937,128941,128945,128951,128961,128964,128967,128970,128973,128976,129099,129107,129115,129153],[10,128529,128525],{"id":128530},"_7-css引入方式与选择器进阶",[14,128532,128534],{"id":128533},"_71-css引入方式","7.1 css引入方式",[305,128536,128538],{"id":128537},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[73,128540,128544],{"className":128541,"code":128542,"language":128543,"meta":79,"style":79},"language-Html shiki shiki-themes github-light github-dark","\u003Cstyle>\n  h1 {\n    color: blue;\n    font-size: 24px;\n  }\n\u003C\u002Fstyle>\n","Html",[32,128545,128546,128554,128561,128573,128586,128591],{"__ignoreMap":79},[100,128547,128548,128550,128552],{"class":102,"line":103},[100,128549,2676],{"class":258},[100,128551,1677],{"class":52854},[100,128553,52861],{"class":258},[100,128555,128556,128559],{"class":102,"line":188},[100,128557,128558],{"class":52854},"  h1",[100,128560,17153],{"class":258},[100,128562,128563,128566,128568,128571],{"class":102,"line":199},[100,128564,128565],{"class":117},"    color",[100,128567,52991],{"class":258},[100,128569,128570],{"class":117},"blue",[100,128572,2927],{"class":258},[100,128574,128575,128578,128580,128582,128584],{"class":102,"line":532},[100,128576,128577],{"class":117},"    font-size",[100,128579,52991],{"class":258},[100,128581,2566],{"class":117},[100,128583,53046],{"class":471},[100,128585,2927],{"class":258},[100,128587,128588],{"class":102,"line":577},[100,128589,128590],{"class":258},"  }\n",[100,128592,128593,128595,128597],{"class":102,"line":589},[100,128594,53339],{"class":258},[100,128596,1677],{"class":52854},[100,128598,52861],{"class":258},[19,128600,128601,28045],{},[1921,128602,127882],{},[19,128604,78780,128605,128608,128609,128612],{},[32,128606,128607],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[32,128610,128611],{},"\u003Chead>","标签中",[19,128614,128615],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,128617,128618],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[305,128620,128622],{"id":128621},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[73,128624,128626],{"className":128541,"code":128625,"language":128543,"meta":79,"style":79},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[32,128627,128628],{"__ignoreMap":79},[100,128629,128630,128632,128634,128636,128638,128641,128644,128646],{"class":102,"line":103},[100,128631,2676],{"class":258},[100,128633,19],{"class":52854},[100,128635,64180],{"class":106},[100,128637,472],{"class":258},[100,128639,128640],{"class":110},"\"color: red; font-size: 16px;\"",[100,128642,128643],{"class":258},">这是一个段落\u003C\u002F",[100,128645,19],{"class":52854},[100,128647,52861],{"class":258},[19,128649,128650,28045],{},[1921,128651,127882],{},[19,128653,128654],{},"①style其实就是标签的属性",[19,128656,128657],{},"②在双引号中间，写法要符合css规范",[19,128659,128660],{},"③可以控制当前的标签设置样式",[19,128662,128663],{},"④书写繁琐，简单时才用",[19,128665,128666],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[305,128668,128670],{"id":128669},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,128672,128673],{},"使用最多，单独建一个css文件，然后html引用",[19,128675,128676],{},"①css文件部分： style.css",[73,128678,128680],{"className":127794,"code":128679,"language":127796,"meta":79,"style":79},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[32,128681,128682,128687,128693,128703,128715],{"__ignoreMap":79},[100,128683,128684],{"class":102,"line":103},[100,128685,128686],{"class":1836},"\u002F* style.css *\u002F\n",[100,128688,128689,128691],{"class":102,"line":188},[100,128690,10],{"class":52854},[100,128692,17153],{"class":258},[100,128694,128695,128697,128699,128701],{"class":102,"line":199},[100,128696,72459],{"class":117},[100,128698,52991],{"class":258},[100,128700,128570],{"class":117},[100,128702,2927],{"class":258},[100,128704,128705,128707,128709,128711,128713],{"class":102,"line":532},[100,128706,72180],{"class":117},[100,128708,52991],{"class":258},[100,128710,2566],{"class":117},[100,128712,53046],{"class":471},[100,128714,2927],{"class":258},[100,128716,128717],{"class":102,"line":577},[100,128718,3197],{"class":258},[19,128720,128721],{},"②html部分",[73,128723,128725],{"className":128541,"code":128724,"language":128543,"meta":79,"style":79},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[32,128726,128727],{"__ignoreMap":79},[100,128728,128729,128731,128733,128735,128737,128739,128741,128743,128746],{"class":102,"line":103},[100,128730,2676],{"class":258},[100,128732,70559],{"class":52854},[100,128734,70562],{"class":106},[100,128736,472],{"class":258},[100,128738,70567],{"class":110},[100,128740,62611],{"class":106},[100,128742,472],{"class":258},[100,128744,128745],{"class":110},"\"style.css\"",[100,128747,52861],{"class":258},[19,128749,128750,128753],{},[32,128751,128752],{},"\u003Chr>","水平线标签（但是不常用！）",[19,128755,128756],{},"ctrl+0回到页面原来大小",[14,128758,128760],{"id":128759},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[305,128762,128764],{"id":128763},"_721-快速生成html","7.2.1 快速生成html",[19,128766,128767,128768],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[32,128769,128770],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,128772,128773],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,128775,128776],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,128778,128779],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,128781,128782],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,128784,128785],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,128787,128788],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[73,128790,128792],{"className":128541,"code":128791,"language":128543,"meta":79,"style":79},"\u003C!-- Emmet 语法示例 -->\n\u003C!-- div*3        → 生成3个div -->\n\u003C!-- ul>li*5      → ul下生成5个li -->\n\u003C!-- div+p        → 兄弟div和p -->\n\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[32,128793,128794,128799,128804,128809,128814,128819,128824,128829],{"__ignoreMap":79},[100,128795,128796],{"class":102,"line":103},[100,128797,128798],{"class":1836},"\u003C!-- Emmet 语法示例 -->\n",[100,128800,128801],{"class":102,"line":188},[100,128802,128803],{"class":1836},"\u003C!-- div*3        → 生成3个div -->\n",[100,128805,128806],{"class":102,"line":199},[100,128807,128808],{"class":1836},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[100,128810,128811],{"class":102,"line":532},[100,128812,128813],{"class":1836},"\u003C!-- div+p        → 兄弟div和p -->\n",[100,128815,128816],{"class":102,"line":577},[100,128817,128818],{"class":1836},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[100,128820,128821],{"class":102,"line":589},[100,128822,128823],{"class":1836},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[100,128825,128826],{"class":102,"line":595},[100,128827,128828],{"class":1836},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[100,128830,128831],{"class":102,"line":601},[100,128832,128833],{"class":1836},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[305,128835,128837],{"id":128836},"_722-快速生成css","7.2.2 快速生成css",[19,128839,128840],{},"简写开头",[19,128842,128843],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,128845,128847],{"id":128846},"_73-css复合选择器","7.3 css复合选择器",[305,128849,128851],{"id":128850},"_731-后代选择器","7.3.1 后代选择器",[73,128853,128855],{"className":127794,"code":128854,"language":127796,"meta":79,"style":79},".parent .child {\n  color: blue;\n}\n",[32,128856,128857,128867,128877],{"__ignoreMap":79},[100,128858,128859,128862,128865],{"class":102,"line":103},[100,128860,128861],{"class":106},".parent",[100,128863,128864],{"class":106}," .child",[100,128866,17153],{"class":258},[100,128868,128869,128871,128873,128875],{"class":102,"line":188},[100,128870,72459],{"class":117},[100,128872,52991],{"class":258},[100,128874,128570],{"class":117},[100,128876,2927],{"class":258},[100,128878,128879],{"class":102,"line":199},[100,128880,3197],{"class":258},[19,128882,128883],{},"元素1 元素2 {样式声明}",[19,128885,128886],{},[1921,128887,128888],{},"注意点:",[19,128890,128891],{},"①元素1和元素2中间用空格隔开",[19,128893,128894],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,128896,128897],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,128899,128900],{},"④元素1和元素2可以是任意基础选择器",[305,128902,128904],{"id":128903},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,128906,128907],{},[1921,128908,128888],{},[19,128910,128911],{},"①元素1和元素2中间用大于号隔开",[19,128913,128894],{},[19,128915,128916],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[305,128918,128920],{"id":128919},"_733-并集选择器","7.3.3 并集选择器",[19,128922,128923],{},"元素1，元素2 {样式声明}",[19,128925,128926],{},[1921,128927,128888],{},[19,128929,128930],{},"①元素1和元素2中间用逗号隔开",[19,128932,128933],{},"②逗号可以理解为和的意思",[19,128935,128936],{},"③并集选择器通常用于集体声明",[305,128938,128940],{"id":128939},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,128942,128943],{},[1921,128944,128888],{},[19,128946,128947,128948,128950],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[70559,128949],{},"－:visited－:hover－:active。",[19,128952,128953,128954,128957,128958,27315],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[128955,128956],"hover",{}," 、 ",[128959,128960],"first-child",{},[19,128962,128963],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,128965,128966],{},"link对没访问的进行设置",[19,128968,128969],{},"vistied对已访问的进行改变",[19,128971,128972],{},"hover鼠标经过就会变",[19,128974,128975],{},"active常按(点)就会变",[73,128977,128979],{"className":127794,"code":128978,"language":127796,"meta":79,"style":79},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\na:link {\n  color: #333;\n  text-decoration: none;\n}\na:visited {\n  color: purple;\n}\na:hover {\n  color: skyblue;\n  text-decoration: underline;\n}\na:active {\n  color: green;\n}\n",[32,128980,128981,128986,128995,129005,129015,129019,129028,129039,129043,129051,129061,129071,129075,129084,129095],{"__ignoreMap":79},[100,128982,128983],{"class":102,"line":103},[100,128984,128985],{"class":1836},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[100,128987,128988,128990,128993],{"class":102,"line":188},[100,128989,2006],{"class":52854},[100,128991,128992],{"class":106},":link",[100,128994,17153],{"class":258},[100,128996,128997,128999,129001,129003],{"class":102,"line":199},[100,128998,72459],{"class":117},[100,129000,52991],{"class":258},[100,129002,63923],{"class":117},[100,129004,2927],{"class":258},[100,129006,129007,129009,129011,129013],{"class":102,"line":532},[100,129008,72056],{"class":117},[100,129010,52991],{"class":258},[100,129012,56291],{"class":117},[100,129014,2927],{"class":258},[100,129016,129017],{"class":102,"line":577},[100,129018,3197],{"class":258},[100,129020,129021,129023,129026],{"class":102,"line":589},[100,129022,2006],{"class":52854},[100,129024,129025],{"class":106},":visited",[100,129027,17153],{"class":258},[100,129029,129030,129032,129034,129037],{"class":102,"line":595},[100,129031,72459],{"class":117},[100,129033,52991],{"class":258},[100,129035,129036],{"class":117},"purple",[100,129038,2927],{"class":258},[100,129040,129041],{"class":102,"line":601},[100,129042,3197],{"class":258},[100,129044,129045,129047,129049],{"class":102,"line":606},[100,129046,2006],{"class":52854},[100,129048,62494],{"class":106},[100,129050,17153],{"class":258},[100,129052,129053,129055,129057,129059],{"class":102,"line":612},[100,129054,72459],{"class":117},[100,129056,52991],{"class":258},[100,129058,56443],{"class":117},[100,129060,2927],{"class":258},[100,129062,129063,129065,129067,129069],{"class":102,"line":618},[100,129064,72056],{"class":117},[100,129066,52991],{"class":258},[100,129068,128408],{"class":117},[100,129070,2927],{"class":258},[100,129072,129073],{"class":102,"line":623},[100,129074,3197],{"class":258},[100,129076,129077,129079,129082],{"class":102,"line":629},[100,129078,2006],{"class":52854},[100,129080,129081],{"class":106},":active",[100,129083,17153],{"class":258},[100,129085,129086,129088,129090,129093],{"class":102,"line":635},[100,129087,72459],{"class":117},[100,129089,52991],{"class":258},[100,129091,129092],{"class":117},"green",[100,129094,2927],{"class":258},[100,129096,129097],{"class":102,"line":641},[100,129098,3197],{"class":258},[305,129100,129102,129103,129106],{"id":129101},"_735-伪类选择器","7.3.5 ",[129104,129105],"focus",{},"伪类选择器",[19,129108,129109,129111,129112,129114],{},[129104,129110],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[32,129113,127855],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[73,129116,129118],{"className":127794,"code":129117,"language":127796,"meta":79,"style":79},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[32,129119,129120,129128,129139,129149],{"__ignoreMap":79},[100,129121,129122,129124,129126],{"class":102,"line":103},[100,129123,55375],{"class":52854},[100,129125,63454],{"class":106},[100,129127,17153],{"class":258},[100,129129,129130,129133,129135,129137],{"class":102,"line":188},[100,129131,129132],{"class":117},"  border-color",[100,129134,52991],{"class":258},[100,129136,56443],{"class":117},[100,129138,2927],{"class":258},[100,129140,129141,129143,129145,129147],{"class":102,"line":199},[100,129142,72352],{"class":117},[100,129144,52991],{"class":258},[100,129146,56291],{"class":117},[100,129148,2927],{"class":258},[100,129150,129151],{"class":102,"line":532},[100,129152,3197],{"class":258},[1677,129154,129155],{},"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":79,"searchDepth":188,"depth":188,"links":129157},[129158,129163,129167],{"id":128533,"depth":188,"text":128534,"children":129159},[129160,129161,129162],{"id":128537,"depth":199,"text":128538},{"id":128621,"depth":199,"text":128622},{"id":128669,"depth":199,"text":128670},{"id":128759,"depth":188,"text":128760,"children":129164},[129165,129166],{"id":128763,"depth":199,"text":128764},{"id":128836,"depth":199,"text":128837},{"id":128846,"depth":188,"text":128847,"children":129168},[129169,129170,129171,129172,129173],{"id":128850,"depth":199,"text":128851},{"id":128903,"depth":199,"text":128904},{"id":128919,"depth":199,"text":128920},{"id":128939,"depth":199,"text":128940},{"id":129101,"depth":199,"text":129174},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":128525,"description":24958},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":129181,"title":129182,"body":129183,"description":24958,"extension":1708,"meta":131106,"navigation":569,"path":131107,"seo":131108,"stem":131109,"__hash__":131110},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":129184,"toc":131080},[129185,129188,129192,129201,129205,129231,129236,129239,129242,129245,129248,129252,129255,129265,129273,129277,129312,129317,129320,129323,129326,129329,129333,129336,129345,129349,129362,129367,129370,129373,129376,129380,129383,129387,129390,129445,129448,129479,129482,129536,129540,129543,129709,129832,129835,129838,129841,129844,129848,129851,129855,129858,129861,129865,129868,129899,129926,129954,129957,129961,129987,130030,130034,130128,130131,130158,130161,130164,130167,130170,130173,130176,130179,130182,130185,130189,130246,130273,130277,130325,130329,130370,130372,130375,130378,130381,130384,130388,130480,130483,130486,130489,130493,130616,130817,130821,130825,130828,130831,130834,130838,130841,130844,130869,130872,130875,130878,130881,130884,130888,130896,130958,130961,131019,131022,131025,131028,131031,131034,131037,131040,131077],[10,129186,129182],{"id":129187},"_8-css显示模式与背景特性",[14,129189,129191],{"id":129190},"_81-css元素显示模式","8.1 css元素显示模式",[19,129193,129194,129195,129197,129198,129200],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[32,129196,127405],{},"自己占一行，比如一行可以放多个",[32,129199,127408],{},"，HTML 元素一般分为块元素和行内元素两种类型",[305,129202,129204],{"id":129203},"_811-块元素","8.1.1 块元素",[19,129206,129207,129208,129210,129211,56,129214,56,129216,56,129218,56,129221,56,129224,129227,129228,129230],{},"常见的块元素有",[32,129209,127309],{},"~",[32,129212,129213],{},"\u003Ch6>",[32,129215,127335],{},[32,129217,127405],{},[32,129219,129220],{},"\u003Cul>",[32,129222,129223],{},"\u003Col>",[32,129225,129226],{},"\u003Cli>","等，其中 ",[32,129229,127405],{}," 标签是最典型的块元素",[19,129232,129233],{},[1921,129234,129235],{},"块级元素的特点：",[19,129237,129238],{},"① 比较霸道，自己独占一行。",[19,129240,129241],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,129243,129244],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,129246,129247],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,129249,129250],{},[1921,129251,1809],{},[19,129253,129254],{},"①文字类的元素内不能使用块级元素",[19,129256,78803,129257,129259,129260,129262,129263],{},[32,129258,127335],{}," 标签主要用于存放文字，因此 ",[32,129261,127335],{}," 里面不能放块级元素，特别是不能放",[32,129264,127405],{},[19,129266,129267,129268,129210,129270,129272],{},"⑥同理， ",[32,129269,127309],{},[32,129271,129213],{},"等都是文字类块级标签，里面也不能放其他块级元素",[305,129274,129276],{"id":129275},"_812-行内元素","8.1.2 行内元素",[19,129278,129279,129280,56,129282,56,129285,56,129288,56,129291,56,129294,56,129297,56,129300,56,129303,56,129306,129308,129309,129311],{},"常见的行内元素有 ",[32,129281,127567],{},[32,129283,129284],{},"\u003Cstrong>",[32,129286,129287],{},"\u003Cb>",[32,129289,129290],{},"\u003Cem>",[32,129292,129293],{},"\u003Ci>",[32,129295,129296],{},"\u003Cdel>",[32,129298,129299],{},"\u003Cs>",[32,129301,129302],{},"\u003Cins>",[32,129304,129305],{},"\u003Cu>",[32,129307,127408],{}," 等，其中 ",[32,129310,127408],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,129313,129314],{},[1921,129315,129316],{},"特点：",[19,129318,129319],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,129321,129322],{},"② 高、宽直接设置是无效的。",[19,129324,129325],{},"③ 默认宽度就是它本身内容的宽度。",[19,129327,129328],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,129330,129331],{},[1921,129332,1809],{},[19,129334,129335],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,129337,129338,129339,129341,129342,129344],{},"②特殊情况链接 ",[32,129340,127567],{}," 里面可以放块级元素，但是给 ",[32,129343,127567],{}," 转换一下块级模式最安全",[305,129346,129348],{"id":129347},"_813-行内块元素","8.1.3 行内块元素",[19,129350,129351,129352,56,129355,56,129358,129361],{},"在行内元素中有几个特殊的标签 —— ",[32,129353,129354],{},"\u003Cimg \u002F>",[32,129356,129357],{},"\u003Cinput \u002F>",[32,129359,129360],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,129363,129364],{},[1921,129365,129366],{},"行内块元素的特点：",[19,129368,129369],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,129371,129372],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,129374,129375],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[305,129377,129379],{"id":129378},"_814-总结","8.1.4 总结",[3095,129381],{"style":127650,"src":129382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[305,129384,129386],{"id":129385},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,129388,129389],{},"①转换为块元素：display:block;",[73,129391,129393],{"className":127794,"code":129392,"language":127796,"meta":79,"style":79},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[32,129394,129395,129400,129406,129417,129429,129441],{"__ignoreMap":79},[100,129396,129397],{"class":102,"line":103},[100,129398,129399],{"class":1836},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[100,129401,129402,129404],{"class":102,"line":188},[100,129403,2006],{"class":52854},[100,129405,17153],{"class":258},[100,129407,129408,129411,129413,129415],{"class":102,"line":199},[100,129409,129410],{"class":117},"  display",[100,129412,52991],{"class":258},[100,129414,62423],{"class":117},[100,129416,2927],{"class":258},[100,129418,129419,129421,129423,129425,129427],{"class":102,"line":532},[100,129420,72122],{"class":117},[100,129422,52991],{"class":258},[100,129424,2078],{"class":117},[100,129426,53046],{"class":471},[100,129428,2927],{"class":258},[100,129430,129431,129433,129435,129437,129439],{"class":102,"line":577},[100,129432,72342],{"class":117},[100,129434,52991],{"class":258},[100,129436,2168],{"class":117},[100,129438,53046],{"class":471},[100,129440,2927],{"class":258},[100,129442,129443],{"class":102,"line":589},[100,129444,3197],{"class":258},[19,129446,129447],{},"②转换为行内元素：display:inline;",[73,129449,129451],{"className":127794,"code":129450,"language":127796,"meta":79,"style":79},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[32,129452,129453,129458,129464,129475],{"__ignoreMap":79},[100,129454,129455],{"class":102,"line":103},[100,129456,129457],{"class":1836},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[100,129459,129460,129462],{"class":102,"line":188},[100,129461,53165],{"class":52854},[100,129463,17153],{"class":258},[100,129465,129466,129468,129470,129473],{"class":102,"line":199},[100,129467,129410],{"class":117},[100,129469,52991],{"class":258},[100,129471,129472],{"class":117},"inline",[100,129474,2927],{"class":258},[100,129476,129477],{"class":102,"line":532},[100,129478,3197],{"class":258},[19,129480,129481],{},"③转换为行内块：display:inline-block;",[73,129483,129485],{"className":127794,"code":129484,"language":127796,"meta":79,"style":79},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[32,129486,129487,129492,129498,129508,129520,129532],{"__ignoreMap":79},[100,129488,129489],{"class":102,"line":103},[100,129490,129491],{"class":1836},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[100,129493,129494,129496],{"class":102,"line":188},[100,129495,100],{"class":52854},[100,129497,17153],{"class":258},[100,129499,129500,129502,129504,129506],{"class":102,"line":199},[100,129501,129410],{"class":117},[100,129503,52991],{"class":258},[100,129505,73937],{"class":117},[100,129507,2927],{"class":258},[100,129509,129510,129512,129514,129516,129518],{"class":102,"line":532},[100,129511,72122],{"class":117},[100,129513,52991],{"class":258},[100,129515,2379],{"class":117},[100,129517,53046],{"class":471},[100,129519,2927],{"class":258},[100,129521,129522,129524,129526,129528,129530],{"class":102,"line":577},[100,129523,72342],{"class":117},[100,129525,52991],{"class":258},[100,129527,2717],{"class":117},[100,129529,53046],{"class":471},[100,129531,2927],{"class":258},[100,129533,129534],{"class":102,"line":589},[100,129535,3197],{"class":258},[305,129537,129539],{"id":129538},"_816-小米侧边栏","8.1.6 小米侧边栏",[3095,129541],{"style":127650,"src":129542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[73,129544,129546],{"className":128541,"code":129545,"language":128543,"meta":79,"style":79},"\u003C!-- 小米侧边栏案例 -->\n\u003Cdiv class=\"sidebar\">\n  \u003Ca href=\"#\">手机 电话卡\u003C\u002Fa>\n  \u003Ca href=\"#\">电视 盒子\u003C\u002Fa>\n  \u003Ca href=\"#\">笔记本 平板\u003C\u002Fa>\n  \u003Ca href=\"#\">出行 穿戴\u003C\u002Fa>\n  \u003Ca href=\"#\">智能 路由器\u003C\u002Fa>\n  \u003Ca href=\"#\">健康 儿童\u003C\u002Fa>\n  \u003Ca href=\"#\">耳机 音响\u003C\u002Fa>\n\u003C\u002Fdiv>\n",[32,129547,129548,129553,129568,129587,129606,129625,129644,129663,129682,129701],{"__ignoreMap":79},[100,129549,129550],{"class":102,"line":103},[100,129551,129552],{"class":1836},"\u003C!-- 小米侧边栏案例 -->\n",[100,129554,129555,129557,129559,129561,129563,129566],{"class":102,"line":188},[100,129556,2676],{"class":258},[100,129558,53165],{"class":52854},[100,129560,55040],{"class":106},[100,129562,472],{"class":258},[100,129564,129565],{"class":110},"\"sidebar\"",[100,129567,52861],{"class":258},[100,129569,129570,129572,129574,129576,129578,129580,129583,129585],{"class":102,"line":199},[100,129571,53698],{"class":258},[100,129573,2006],{"class":52854},[100,129575,62611],{"class":106},[100,129577,472],{"class":258},[100,129579,62616],{"class":110},[100,129581,129582],{"class":258},">手机 电话卡\u003C\u002F",[100,129584,2006],{"class":52854},[100,129586,52861],{"class":258},[100,129588,129589,129591,129593,129595,129597,129599,129602,129604],{"class":102,"line":532},[100,129590,53698],{"class":258},[100,129592,2006],{"class":52854},[100,129594,62611],{"class":106},[100,129596,472],{"class":258},[100,129598,62616],{"class":110},[100,129600,129601],{"class":258},">电视 盒子\u003C\u002F",[100,129603,2006],{"class":52854},[100,129605,52861],{"class":258},[100,129607,129608,129610,129612,129614,129616,129618,129621,129623],{"class":102,"line":577},[100,129609,53698],{"class":258},[100,129611,2006],{"class":52854},[100,129613,62611],{"class":106},[100,129615,472],{"class":258},[100,129617,62616],{"class":110},[100,129619,129620],{"class":258},">笔记本 平板\u003C\u002F",[100,129622,2006],{"class":52854},[100,129624,52861],{"class":258},[100,129626,129627,129629,129631,129633,129635,129637,129640,129642],{"class":102,"line":589},[100,129628,53698],{"class":258},[100,129630,2006],{"class":52854},[100,129632,62611],{"class":106},[100,129634,472],{"class":258},[100,129636,62616],{"class":110},[100,129638,129639],{"class":258},">出行 穿戴\u003C\u002F",[100,129641,2006],{"class":52854},[100,129643,52861],{"class":258},[100,129645,129646,129648,129650,129652,129654,129656,129659,129661],{"class":102,"line":595},[100,129647,53698],{"class":258},[100,129649,2006],{"class":52854},[100,129651,62611],{"class":106},[100,129653,472],{"class":258},[100,129655,62616],{"class":110},[100,129657,129658],{"class":258},">智能 路由器\u003C\u002F",[100,129660,2006],{"class":52854},[100,129662,52861],{"class":258},[100,129664,129665,129667,129669,129671,129673,129675,129678,129680],{"class":102,"line":601},[100,129666,53698],{"class":258},[100,129668,2006],{"class":52854},[100,129670,62611],{"class":106},[100,129672,472],{"class":258},[100,129674,62616],{"class":110},[100,129676,129677],{"class":258},">健康 儿童\u003C\u002F",[100,129679,2006],{"class":52854},[100,129681,52861],{"class":258},[100,129683,129684,129686,129688,129690,129692,129694,129697,129699],{"class":102,"line":606},[100,129685,53698],{"class":258},[100,129687,2006],{"class":52854},[100,129689,62611],{"class":106},[100,129691,472],{"class":258},[100,129693,62616],{"class":110},[100,129695,129696],{"class":258},">耳机 音响\u003C\u002F",[100,129698,2006],{"class":52854},[100,129700,52861],{"class":258},[100,129702,129703,129705,129707],{"class":102,"line":612},[100,129704,53339],{"class":258},[100,129706,53165],{"class":52854},[100,129708,52861],{"class":258},[73,129710,129712],{"className":127794,"code":129711,"language":127796,"meta":79,"style":79},".sidebar a {\n  display: block;\n  width: 234px;\n  height: 42px;\n  line-height: 42px;\n  padding-left: 30px;\n  color: #fff;\n  background-color: #55585a;\n}\n.sidebar a:hover {\n  background-color: #ff6700;\n}\n",[32,129713,129714,129723,129733,129746,129758,129770,129782,129792,129803,129807,129817,129828],{"__ignoreMap":79},[100,129715,129716,129719,129721],{"class":102,"line":103},[100,129717,129718],{"class":106},".sidebar",[100,129720,3031],{"class":52854},[100,129722,17153],{"class":258},[100,129724,129725,129727,129729,129731],{"class":102,"line":188},[100,129726,129410],{"class":117},[100,129728,52991],{"class":258},[100,129730,62423],{"class":117},[100,129732,2927],{"class":258},[100,129734,129735,129737,129739,129742,129744],{"class":102,"line":199},[100,129736,72122],{"class":117},[100,129738,52991],{"class":258},[100,129740,129741],{"class":117},"234",[100,129743,53046],{"class":471},[100,129745,2927],{"class":258},[100,129747,129748,129750,129752,129754,129756],{"class":102,"line":532},[100,129749,72342],{"class":117},[100,129751,52991],{"class":258},[100,129753,2219],{"class":117},[100,129755,53046],{"class":471},[100,129757,2927],{"class":258},[100,129759,129760,129762,129764,129766,129768],{"class":102,"line":577},[100,129761,128478],{"class":117},[100,129763,52991],{"class":258},[100,129765,2219],{"class":117},[100,129767,53046],{"class":471},[100,129769,2927],{"class":258},[100,129771,129772,129774,129776,129778,129780],{"class":102,"line":589},[100,129773,72377],{"class":117},[100,129775,52991],{"class":258},[100,129777,2717],{"class":117},[100,129779,53046],{"class":471},[100,129781,2927],{"class":258},[100,129783,129784,129786,129788,129790],{"class":102,"line":595},[100,129785,72459],{"class":117},[100,129787,52991],{"class":258},[100,129789,62396],{"class":117},[100,129791,2927],{"class":258},[100,129793,129794,129796,129798,129801],{"class":102,"line":601},[100,129795,72432],{"class":117},[100,129797,52991],{"class":258},[100,129799,129800],{"class":117},"#55585a",[100,129802,2927],{"class":258},[100,129804,129805],{"class":102,"line":606},[100,129806,3197],{"class":258},[100,129808,129809,129811,129813,129815],{"class":102,"line":612},[100,129810,129718],{"class":106},[100,129812,3031],{"class":52854},[100,129814,62494],{"class":106},[100,129816,17153],{"class":258},[100,129818,129819,129821,129823,129826],{"class":102,"line":618},[100,129820,72432],{"class":117},[100,129822,52991],{"class":258},[100,129824,129825],{"class":117},"#ff6700",[100,129827,2927],{"class":258},[100,129829,129830],{"class":102,"line":623},[100,129831,3197],{"class":258},[3095,129833],{"style":127650,"src":129834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,129836,129837],{},"行高=盒子高度：实现文字的垂直居中",[19,129839,129840],{},"原理讲解：",[3095,129842],{"style":127650,"src":129843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,129845,129847],{"id":129846},"_82-css背景","8.2 css背景",[19,129849,129850],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[305,129852,129854],{"id":129853},"_821-背景颜色","8.2.1 背景颜色",[19,129856,129857],{},"background-color:颜色值;",[19,129859,129860],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[305,129862,129864],{"id":129863},"_822-背景图片","8.2.2 背景图片",[19,129866,129867],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[73,129869,129871],{"className":127794,"code":129870,"language":127796,"meta":79,"style":79},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[32,129872,129873,129879,129895],{"__ignoreMap":79},[100,129874,129875,129877],{"class":102,"line":103},[100,129876,53165],{"class":52854},[100,129878,17153],{"class":258},[100,129880,129881,129884,129886,129888,129890,129893],{"class":102,"line":188},[100,129882,129883],{"class":117},"  background-image",[100,129885,52991],{"class":258},[100,129887,63280],{"class":117},[100,129889,713],{"class":258},[100,129891,129892],{"class":6812},"images\u002Fbg.png",[100,129894,4321],{"class":258},[100,129896,129897],{"class":102,"line":199},[100,129898,3197],{"class":258},[319,129900,129901,129910],{},[322,129902,129903],{},[325,129904,129905,129908],{},[328,129906,129907],{"align":330},"参数值",[328,129909,104172],{"align":330},[339,129911,129912,129919],{},[325,129913,129914,129916],{},[344,129915,56291],{"align":330},[344,129917,129918],{"align":330},"无背景图（默认的）",[325,129920,129921,129923],{},[344,129922,63280],{"align":330},[344,129924,129925],{"align":330},"使用绝对或相对地址指定背景图像",[73,129927,129928],{"className":127794,"code":129870,"language":127796,"meta":79,"style":79},[32,129929,129930,129936,129950],{"__ignoreMap":79},[100,129931,129932,129934],{"class":102,"line":103},[100,129933,53165],{"class":52854},[100,129935,17153],{"class":258},[100,129937,129938,129940,129942,129944,129946,129948],{"class":102,"line":188},[100,129939,129883],{"class":117},[100,129941,52991],{"class":258},[100,129943,63280],{"class":117},[100,129945,713],{"class":258},[100,129947,129892],{"class":6812},[100,129949,4321],{"class":258},[100,129951,129952],{"class":102,"line":199},[100,129953,3197],{"class":258},[19,129955,129956],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[305,129958,129960],{"id":129959},"_823-背景平铺","8.2.3 背景平铺",[73,129962,129964],{"className":127794,"code":129963,"language":127796,"meta":79,"style":79},"div {\n  background-repeat: no-repeat;\n}\n",[32,129965,129966,129972,129983],{"__ignoreMap":79},[100,129967,129968,129970],{"class":102,"line":103},[100,129969,53165],{"class":52854},[100,129971,17153],{"class":258},[100,129973,129974,129977,129979,129981],{"class":102,"line":188},[100,129975,129976],{"class":117},"  background-repeat",[100,129978,52991],{"class":258},[100,129980,63290],{"class":117},[100,129982,2927],{"class":258},[100,129984,129985],{"class":102,"line":199},[100,129986,3197],{"class":258},[319,129988,129989,129997],{},[322,129990,129991],{},[325,129992,129993,129995],{},[328,129994,129907],{"align":330},[328,129996,104172],{"align":330},[339,129998,129999,130007,130014,130022],{},[325,130000,130001,130004],{},[344,130002,130003],{"align":330},"repeat",[344,130005,130006],{"align":330},"背景图像在纵向和横向上平铺（默认的）",[325,130008,130009,130011],{},[344,130010,63290],{"align":330},[344,130012,130013],{"align":330},"背景图像不平铺",[325,130015,130016,130019],{},[344,130017,130018],{"align":330},"repeat-x",[344,130020,130021],{"align":330},"背景图像在横向上平铺",[325,130023,130024,130027],{},[344,130025,130026],{"align":330},"repeat-y",[344,130028,130029],{"align":330},"背景图像在纵向平铺",[305,130031,130033],{"id":130032},"_824-背景图片位置","8.2.4 背景图片位置",[73,130035,130037],{"className":127794,"code":130036,"language":127796,"meta":79,"style":79},"\u002F* 方位名词 *\u002F\ndiv {\n  background-position: center top;\n}\n\u002F* 精确单位 *\u002F\ndiv {\n  background-position: 20px 50px;\n}\n\u002F* 混合单位 *\u002F\ndiv {\n  background-position: 20px center;\n}\n",[32,130038,130039,130044,130050,130064,130068,130073,130079,130095,130099,130104,130110,130124],{"__ignoreMap":79},[100,130040,130041],{"class":102,"line":103},[100,130042,130043],{"class":1836},"\u002F* 方位名词 *\u002F\n",[100,130045,130046,130048],{"class":102,"line":188},[100,130047,53165],{"class":52854},[100,130049,17153],{"class":258},[100,130051,130052,130055,130057,130059,130062],{"class":102,"line":199},[100,130053,130054],{"class":117},"  background-position",[100,130056,52991],{"class":258},[100,130058,53146],{"class":117},[100,130060,130061],{"class":117}," top",[100,130063,2927],{"class":258},[100,130065,130066],{"class":102,"line":532},[100,130067,3197],{"class":258},[100,130069,130070],{"class":102,"line":577},[100,130071,130072],{"class":1836},"\u002F* 精确单位 *\u002F\n",[100,130074,130075,130077],{"class":102,"line":589},[100,130076,53165],{"class":52854},[100,130078,17153],{"class":258},[100,130080,130081,130083,130085,130087,130089,130091,130093],{"class":102,"line":595},[100,130082,130054],{"class":117},[100,130084,52991],{"class":258},[100,130086,2466],{"class":117},[100,130088,53046],{"class":471},[100,130090,59058],{"class":117},[100,130092,53046],{"class":471},[100,130094,2927],{"class":258},[100,130096,130097],{"class":102,"line":601},[100,130098,3197],{"class":258},[100,130100,130101],{"class":102,"line":606},[100,130102,130103],{"class":1836},"\u002F* 混合单位 *\u002F\n",[100,130105,130106,130108],{"class":102,"line":612},[100,130107,53165],{"class":52854},[100,130109,17153],{"class":258},[100,130111,130112,130114,130116,130118,130120,130122],{"class":102,"line":618},[100,130113,130054],{"class":117},[100,130115,52991],{"class":258},[100,130117,2466],{"class":117},[100,130119,53046],{"class":471},[100,130121,18725],{"class":117},[100,130123,2927],{"class":258},[100,130125,130126],{"class":102,"line":623},[100,130127,3197],{"class":258},[19,130129,130130],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[319,130132,130133,130141],{},[322,130134,130135],{},[325,130136,130137,130139],{},[328,130138,129907],{"align":330},[328,130140,27444],{"align":330},[339,130142,130143,130150],{},[325,130144,130145,130147],{},[344,130146,53522],{"align":330},[344,130148,130149],{"align":330},"百分数|由浮点数和单位标识符组成的长度值",[325,130151,130152,130155],{},[344,130153,130154],{"align":330},"position",[344,130156,130157],{"align":330},"top|center|bottom|left|center|right 方位名词",[19,130159,130160],{},"其他说明：",[19,130162,130163],{},"①参数是方位名词",[19,130165,130166],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,130168,130169],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,130171,130172],{},"②参数是精确单位",[19,130174,130175],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,130177,130178],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,130180,130181],{},"③参数是混合单位",[19,130183,130184],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[305,130186,130188],{"id":130187},"_825-背景图片固定","8.2.5 背景图片固定",[73,130190,130192],{"className":127794,"code":130191,"language":127796,"meta":79,"style":79},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[32,130193,130194,130199,130205,130217,130221,130226,130232,130242],{"__ignoreMap":79},[100,130195,130196],{"class":102,"line":103},[100,130197,130198],{"class":1836},"\u002F* 背景滚动（默认） *\u002F\n",[100,130200,130201,130203],{"class":102,"line":188},[100,130202,53165],{"class":52854},[100,130204,17153],{"class":258},[100,130206,130207,130210,130212,130215],{"class":102,"line":199},[100,130208,130209],{"class":117},"  background-attachment",[100,130211,52991],{"class":258},[100,130213,130214],{"class":117},"scroll",[100,130216,2927],{"class":258},[100,130218,130219],{"class":102,"line":532},[100,130220,3197],{"class":258},[100,130222,130223],{"class":102,"line":577},[100,130224,130225],{"class":1836},"\u002F* 背景固定 *\u002F\n",[100,130227,130228,130230],{"class":102,"line":589},[100,130229,53165],{"class":52854},[100,130231,17153],{"class":258},[100,130233,130234,130236,130238,130240],{"class":102,"line":595},[100,130235,130209],{"class":117},[100,130237,52991],{"class":258},[100,130239,87785],{"class":117},[100,130241,2927],{"class":258},[100,130243,130244],{"class":102,"line":601},[100,130245,3197],{"class":258},[319,130247,130248,130257],{},[322,130249,130250],{},[325,130251,130252,130255],{},[328,130253,130254],{"align":330},"参数",[328,130256,104172],{"align":330},[339,130258,130259,130266],{},[325,130260,130261,130263],{},[344,130262,130214],{"align":330},[344,130264,130265],{"align":330},"背景图像是随对象内容滚动",[325,130267,130268,130270],{},[344,130269,87785],{"align":330},[344,130271,130272],{"align":330},"背景图像固定",[305,130274,130276],{"id":130275},"_826-背景样式合写","8.2.6 背景样式合写",[73,130278,130280],{"className":127794,"code":130279,"language":127796,"meta":79,"style":79},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[32,130281,130282,130287,130293,130321],{"__ignoreMap":79},[100,130283,130284],{"class":102,"line":103},[100,130285,130286],{"class":1836},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[100,130288,130289,130291],{"class":102,"line":188},[100,130290,53165],{"class":52854},[100,130292,17153],{"class":258},[100,130294,130295,130297,130299,130301,130304,130306,130308,130310,130312,130315,130317,130319],{"class":102,"line":199},[100,130296,72165],{"class":117},[100,130298,52991],{"class":258},[100,130300,62396],{"class":117},[100,130302,130303],{"class":117}," url",[100,130305,713],{"class":258},[100,130307,129892],{"class":6812},[100,130309,15295],{"class":258},[100,130311,63290],{"class":117},[100,130313,130314],{"class":117}," fixed",[100,130316,18725],{"class":117},[100,130318,130061],{"class":117},[100,130320,2927],{"class":258},[100,130322,130323],{"class":102,"line":532},[100,130324,3197],{"class":258},[305,130326,130328],{"id":130327},"_827-背景色半透明","8.2.7 背景色半透明",[73,130330,130332],{"className":127794,"code":130331,"language":127796,"meta":79,"style":79},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[32,130333,130334,130340,130366],{"__ignoreMap":79},[100,130335,130336,130338],{"class":102,"line":103},[100,130337,53165],{"class":52854},[100,130339,17153],{"class":258},[100,130341,130342,130344,130346,130348,130350,130352,130354,130356,130358,130360,130362,130364],{"class":102,"line":188},[100,130343,72165],{"class":117},[100,130345,52991],{"class":258},[100,130347,56664],{"class":117},[100,130349,713],{"class":258},[100,130351,1366],{"class":117},[100,130353,14017],{"class":258},[100,130355,1366],{"class":117},[100,130357,14017],{"class":258},[100,130359,1366],{"class":117},[100,130361,14017],{"class":258},[100,130363,102071],{"class":117},[100,130365,4321],{"class":258},[100,130367,130368],{"class":102,"line":199},[100,130369,3197],{"class":258},[19,130371,100946],{},[19,130373,130374],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,130376,130377],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,130379,130380],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,130382,130383],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[305,130385,130387],{"id":130386},"_828-总结","8.2.8 总结",[319,130389,130390,130401],{},[322,130391,130392],{},[325,130393,130394,130397,130399],{},[328,130395,130396],{"align":330},"属性",[328,130398,104172],{"align":330},[328,130400,1924],{"align":330},[339,130402,130403,130414,130425,130436,130447,130458,130469],{},[325,130404,130405,130408,130411],{},[344,130406,130407],{"align":330},"background-color",[344,130409,130410],{"align":330},"背景颜色",[344,130412,130413],{"align":330},"预定义的颜色值\u002F十六进制\u002FRGB代码",[325,130415,130416,130419,130422],{},[344,130417,130418],{"align":330},"background-image",[344,130420,130421],{"align":330},"背景图片",[344,130423,130424],{"align":330},"url(图片路径)",[325,130426,130427,130430,130433],{},[344,130428,130429],{"align":330},"background-repeat",[344,130431,130432],{"align":330},"是否平铺",[344,130434,130435],{"align":330},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[325,130437,130438,130441,130444],{},[344,130439,130440],{"align":330},"background-position",[344,130442,130443],{"align":330},"背景位置",[344,130445,130446],{"align":330},"length\u002Fposition 分别是x和y坐标",[325,130448,130449,130452,130455],{},[344,130450,130451],{"align":330},"background-attachment",[344,130453,130454],{"align":330},"背景附着",[344,130456,130457],{"align":330},"scroll(背景滚动) \u002Ffixed (背景固定)",[325,130459,130460,130463,130466],{},[344,130461,130462],{"align":330},"背景简写",[344,130464,130465],{"align":330},"书写更简单",[344,130467,130468],{"align":330},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[325,130470,130471,130474,130477],{},[344,130472,130473],{"align":330},"背景半透明",[344,130475,130476],{"align":330},"背景颜色半透明",[344,130478,130479],{"align":330},"background: rgba(0,0,0.3); 后面必须是4个值",[19,130481,130482],{},"颜色渐变：",[3095,130484],{"style":127650,"src":130485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[3095,130487],{"style":127650,"src":130488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[305,130490,130492],{"id":130491},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[73,130494,130496],{"className":128541,"code":130495,"language":128543,"meta":79,"style":79},"\u003Cdiv class=\"nav\">\n  \u003Ca href=\"#\">五彩导航1\u003C\u002Fa>\n  \u003Ca href=\"#\">五彩导航2\u003C\u002Fa>\n  \u003Ca href=\"#\">五彩导航3\u003C\u002Fa>\n  \u003Ca href=\"#\">五彩导航4\u003C\u002Fa>\n  \u003Ca href=\"#\">五彩导航5\u003C\u002Fa>\n\u003C\u002Fdiv>\n",[32,130497,130498,130513,130532,130551,130570,130589,130608],{"__ignoreMap":79},[100,130499,130500,130502,130504,130506,130508,130511],{"class":102,"line":103},[100,130501,2676],{"class":258},[100,130503,53165],{"class":52854},[100,130505,55040],{"class":106},[100,130507,472],{"class":258},[100,130509,130510],{"class":110},"\"nav\"",[100,130512,52861],{"class":258},[100,130514,130515,130517,130519,130521,130523,130525,130528,130530],{"class":102,"line":188},[100,130516,53698],{"class":258},[100,130518,2006],{"class":52854},[100,130520,62611],{"class":106},[100,130522,472],{"class":258},[100,130524,62616],{"class":110},[100,130526,130527],{"class":258},">五彩导航1\u003C\u002F",[100,130529,2006],{"class":52854},[100,130531,52861],{"class":258},[100,130533,130534,130536,130538,130540,130542,130544,130547,130549],{"class":102,"line":199},[100,130535,53698],{"class":258},[100,130537,2006],{"class":52854},[100,130539,62611],{"class":106},[100,130541,472],{"class":258},[100,130543,62616],{"class":110},[100,130545,130546],{"class":258},">五彩导航2\u003C\u002F",[100,130548,2006],{"class":52854},[100,130550,52861],{"class":258},[100,130552,130553,130555,130557,130559,130561,130563,130566,130568],{"class":102,"line":532},[100,130554,53698],{"class":258},[100,130556,2006],{"class":52854},[100,130558,62611],{"class":106},[100,130560,472],{"class":258},[100,130562,62616],{"class":110},[100,130564,130565],{"class":258},">五彩导航3\u003C\u002F",[100,130567,2006],{"class":52854},[100,130569,52861],{"class":258},[100,130571,130572,130574,130576,130578,130580,130582,130585,130587],{"class":102,"line":577},[100,130573,53698],{"class":258},[100,130575,2006],{"class":52854},[100,130577,62611],{"class":106},[100,130579,472],{"class":258},[100,130581,62616],{"class":110},[100,130583,130584],{"class":258},">五彩导航4\u003C\u002F",[100,130586,2006],{"class":52854},[100,130588,52861],{"class":258},[100,130590,130591,130593,130595,130597,130599,130601,130604,130606],{"class":102,"line":589},[100,130592,53698],{"class":258},[100,130594,2006],{"class":52854},[100,130596,62611],{"class":106},[100,130598,472],{"class":258},[100,130600,62616],{"class":110},[100,130602,130603],{"class":258},">五彩导航5\u003C\u002F",[100,130605,2006],{"class":52854},[100,130607,52861],{"class":258},[100,130609,130610,130612,130614],{"class":102,"line":595},[100,130611,53339],{"class":258},[100,130613,53165],{"class":52854},[100,130615,52861],{"class":258},[73,130617,130619],{"className":127794,"code":130618,"language":127796,"meta":79,"style":79},".nav a {\n  display: inline-block;\n  width: 120px;\n  height: 58px;\n  text-align: center;\n  line-height: 58px;\n  color: #fff;\n}\n.nav a:nth-child(1) { background-color: #ff6700; }\n.nav a:nth-child(2) { background-color: #ff0000; }\n.nav a:nth-child(3) { background-color: #00a4ff; }\n.nav a:nth-child(4) { background-color: #ff00ff; }\n.nav a:nth-child(5) { background-color: #00ff00; }\n",[32,130620,130621,130630,130640,130652,130664,130674,130686,130696,130700,130725,130748,130771,130794],{"__ignoreMap":79},[100,130622,130623,130626,130628],{"class":102,"line":103},[100,130624,130625],{"class":106},".nav",[100,130627,3031],{"class":52854},[100,130629,17153],{"class":258},[100,130631,130632,130634,130636,130638],{"class":102,"line":188},[100,130633,129410],{"class":117},[100,130635,52991],{"class":258},[100,130637,73937],{"class":117},[100,130639,2927],{"class":258},[100,130641,130642,130644,130646,130648,130650],{"class":102,"line":199},[100,130643,72122],{"class":117},[100,130645,52991],{"class":258},[100,130647,2583],{"class":117},[100,130649,53046],{"class":471},[100,130651,2927],{"class":258},[100,130653,130654,130656,130658,130660,130662],{"class":102,"line":532},[100,130655,72342],{"class":117},[100,130657,52991],{"class":258},[100,130659,2622],{"class":117},[100,130661,53046],{"class":471},[100,130663,2927],{"class":258},[100,130665,130666,130668,130670,130672],{"class":102,"line":577},[100,130667,72080],{"class":117},[100,130669,52991],{"class":258},[100,130671,53146],{"class":117},[100,130673,2927],{"class":258},[100,130675,130676,130678,130680,130682,130684],{"class":102,"line":589},[100,130677,128478],{"class":117},[100,130679,52991],{"class":258},[100,130681,2622],{"class":117},[100,130683,53046],{"class":471},[100,130685,2927],{"class":258},[100,130687,130688,130690,130692,130694],{"class":102,"line":595},[100,130689,72459],{"class":117},[100,130691,52991],{"class":258},[100,130693,62396],{"class":117},[100,130695,2927],{"class":258},[100,130697,130698],{"class":102,"line":601},[100,130699,3197],{"class":258},[100,130701,130702,130704,130706,130709,130711,130713,130716,130718,130720,130722],{"class":102,"line":606},[100,130703,130625],{"class":106},[100,130705,3031],{"class":52854},[100,130707,130708],{"class":106},":nth-child",[100,130710,713],{"class":258},[100,130712,1985],{"class":117},[100,130714,130715],{"class":258},") { ",[100,130717,130407],{"class":117},[100,130719,52991],{"class":258},[100,130721,129825],{"class":117},[100,130723,130724],{"class":258},"; }\n",[100,130726,130727,130729,130731,130733,130735,130737,130739,130741,130743,130746],{"class":102,"line":612},[100,130728,130625],{"class":106},[100,130730,3031],{"class":52854},[100,130732,130708],{"class":106},[100,130734,713],{"class":258},[100,130736,465],{"class":117},[100,130738,130715],{"class":258},[100,130740,130407],{"class":117},[100,130742,52991],{"class":258},[100,130744,130745],{"class":117},"#ff0000",[100,130747,130724],{"class":258},[100,130749,130750,130752,130754,130756,130758,130760,130762,130764,130766,130769],{"class":102,"line":618},[100,130751,130625],{"class":106},[100,130753,3031],{"class":52854},[100,130755,130708],{"class":106},[100,130757,713],{"class":258},[100,130759,1849],{"class":117},[100,130761,130715],{"class":258},[100,130763,130407],{"class":117},[100,130765,52991],{"class":258},[100,130767,130768],{"class":117},"#00a4ff",[100,130770,130724],{"class":258},[100,130772,130773,130775,130777,130779,130781,130783,130785,130787,130789,130792],{"class":102,"line":623},[100,130774,130625],{"class":106},[100,130776,3031],{"class":52854},[100,130778,130708],{"class":106},[100,130780,713],{"class":258},[100,130782,748],{"class":117},[100,130784,130715],{"class":258},[100,130786,130407],{"class":117},[100,130788,52991],{"class":258},[100,130790,130791],{"class":117},"#ff00ff",[100,130793,130724],{"class":258},[100,130795,130796,130798,130800,130802,130804,130806,130808,130810,130812,130815],{"class":102,"line":629},[100,130797,130625],{"class":106},[100,130799,3031],{"class":52854},[100,130801,130708],{"class":106},[100,130803,713],{"class":258},[100,130805,2086],{"class":117},[100,130807,130715],{"class":258},[100,130809,130407],{"class":117},[100,130811,52991],{"class":258},[100,130813,130814],{"class":117},"#00ff00",[100,130816,130724],{"class":258},[14,130818,130820],{"id":130819},"_83-css三大特性","8.3 css三大特性",[305,130822,130824],{"id":130823},"_831-层叠性","8.3.1 层叠性",[19,130826,130827],{},"为了解决样式冲突问题",[19,130829,130830],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,130832,130833],{},"   ②样式不冲突，不会层叠",[305,130835,130837],{"id":130836},"_832-继承性","8.3.2 继承性",[19,130839,130840],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,130842,130843],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[73,130845,130847],{"className":127794,"code":130846,"language":127796,"meta":79,"style":79},"p {\n  color: #333;\n}\n",[32,130848,130849,130855,130865],{"__ignoreMap":79},[100,130850,130851,130853],{"class":102,"line":103},[100,130852,19],{"class":52854},[100,130854,17153],{"class":258},[100,130856,130857,130859,130861,130863],{"class":102,"line":188},[100,130858,72459],{"class":117},[100,130860,52991],{"class":258},[100,130862,63923],{"class":117},[100,130864,2927],{"class":258},[100,130866,130867],{"class":102,"line":199},[100,130868,3197],{"class":258},[3095,130870],{"style":127650,"src":130871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,130873,130874],{},"解释：①行高可以跟单位也可以不跟单位",[19,130876,130877],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,130879,130880],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,130882,130883],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[305,130885,130887],{"id":130886},"_833-优先级","8.3.3 优先级",[26,130889,130890,130893],{},[29,130891,130892],{},"选择器相同，则执行层叠性",[29,130894,130895],{},"选择器不同，则根据选择器权重执行",[319,130897,130898,130908],{},[322,130899,130900],{},[325,130901,130902,130905],{},[328,130903,130904],{"align":330},"选择器",[328,130906,130907],{"align":330},"选择器权重",[339,130909,130910,130918,130926,130934,130942,130950],{},[325,130911,130912,130915],{},[344,130913,130914],{"align":330},"继承 或者*",[344,130916,130917],{"align":330},"0，0，0，0",[325,130919,130920,130923],{},[344,130921,130922],{"align":330},"标签选择器",[344,130924,130925],{"align":330},"0，0，0，1",[325,130927,130928,130931],{},[344,130929,130930],{"align":330},"类选择器，伪类选择器",[344,130932,130933],{"align":330},"0，0，1，0",[325,130935,130936,130939],{},[344,130937,130938],{"align":330},"ID选择器",[344,130940,130941],{"align":330},"0，1，0，0",[325,130943,130944,130947],{},[344,130945,130946],{"align":330},"行内样式",[344,130948,130949],{"align":330},"1，0，0，0",[325,130951,130952,130955],{},[344,130953,130954],{"align":330},"！important",[344,130956,130957],{"align":330},"无穷大",[19,130959,130960],{},"! important用法：",[73,130962,130964],{"className":127794,"code":130963,"language":127796,"meta":79,"style":79},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[32,130965,130966,130971,130977,130990,130994,130999,131005,131015],{"__ignoreMap":79},[100,130967,130968],{"class":102,"line":103},[100,130969,130970],{"class":1836},"\u002F* !important 拥有最高优先级 *\u002F\n",[100,130972,130973,130975],{"class":102,"line":188},[100,130974,53165],{"class":52854},[100,130976,17153],{"class":258},[100,130978,130979,130981,130983,130985,130988],{"class":102,"line":199},[100,130980,72459],{"class":117},[100,130982,52991],{"class":258},[100,130984,53199],{"class":117},[100,130986,130987],{"class":471}," !important",[100,130989,2927],{"class":258},[100,130991,130992],{"class":102,"line":532},[100,130993,3197],{"class":258},[100,130995,130996],{"class":102,"line":577},[100,130997,130998],{"class":1836},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[100,131000,131001,131003],{"class":102,"line":589},[100,131002,53165],{"class":52854},[100,131004,17153],{"class":258},[100,131006,131007,131009,131011,131013],{"class":102,"line":595},[100,131008,72459],{"class":117},[100,131010,52991],{"class":258},[100,131012,58975],{"class":117},[100,131014,2927],{"class":258},[100,131016,131017],{"class":102,"line":601},[100,131018,3197],{"class":258},[19,131020,131021],{},"优先级注意点：",[19,131023,131024],{},"①权重是有4组数字组成,但是不会有进位",[19,131026,131027],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,131029,131030],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,131032,131033],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,131035,131036],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,131038,131039],{},"⑥复合选择器",[319,131041,131042,131052],{},[322,131043,131044],{},[325,131045,131046,131049],{},[328,131047,131048],{"align":330},"div ul li",[328,131050,131051],{"align":330},"0,0,0,3",[339,131053,131054,131062,131070],{},[325,131055,131056,131059],{},[344,131057,131058],{"align":330},".nav ul li",[344,131060,131061],{"align":330},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[325,131063,131064,131067],{},[344,131065,131066],{"align":330},"a:hover",[344,131068,131069],{"align":330},"0,0,1,1",[325,131071,131072,131075],{},[344,131073,131074],{"align":330},".nav a",[344,131076,131069],{"align":330},[1677,131078,131079],{},"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":79,"searchDepth":188,"depth":188,"links":131081},[131082,131090,131101],{"id":129190,"depth":188,"text":129191,"children":131083},[131084,131085,131086,131087,131088,131089],{"id":129203,"depth":199,"text":129204},{"id":129275,"depth":199,"text":129276},{"id":129347,"depth":199,"text":129348},{"id":129378,"depth":199,"text":129379},{"id":129385,"depth":199,"text":129386},{"id":129538,"depth":199,"text":129539},{"id":129846,"depth":188,"text":129847,"children":131091},[131092,131093,131094,131095,131096,131097,131098,131099,131100],{"id":129853,"depth":199,"text":129854},{"id":129863,"depth":199,"text":129864},{"id":129959,"depth":199,"text":129960},{"id":130032,"depth":199,"text":130033},{"id":130187,"depth":199,"text":130188},{"id":130275,"depth":199,"text":130276},{"id":130327,"depth":199,"text":130328},{"id":130386,"depth":199,"text":130387},{"id":130491,"depth":199,"text":130492},{"id":130819,"depth":188,"text":130820,"children":131102},[131103,131104,131105],{"id":130823,"depth":199,"text":130824},{"id":130836,"depth":199,"text":130837},{"id":130886,"depth":199,"text":130887},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":129182,"description":24958},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":131112,"title":131113,"body":131114,"description":24958,"extension":1708,"meta":132704,"navigation":569,"path":132705,"seo":132706,"stem":132707,"__hash__":132708},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":131115,"toc":132683},[131116,131119,131123,131126,131129,131132,131135,131138,131141,131144,131148,131156,131193,131229,131232,131246,131251,131285,131288,131381,131386,131389,131419,131422,131427,131435,131439,131446,131492,131536,131541,131544,131547,131550,131553,131556,131559,131561,131564,131568,131573,131617,131622,131625,131628,131665,131670,131673,131676,131679,131682,131714,131717,131720,131723,131755,131758,131761,131764,131768,131771,131803,131806,131810,131830,131833,131841,131844,131848,131853,131856,131888,131893,131896,131934,131938,131943,131946,131949,131980,131983,132000,132005,132057,132117,132122,132176,132214,132218,132222,132225,132229,132237,132240,132242,132253,132258,132306,132340,132343,132346,132349,132352,132396,132399,132402,132405,132408,132411,132414,132458,132461,132464,132467,132470,132473,132476,132482,132485,132529,132532,132535,132538,132541,132544,132588,132591,132593,132596,132600,132604,132642,132646,132649,132652,132656,132664,132668,132671,132674,132677,132680],[10,131117,131113],{"id":131118},"_9-css盒模型浮动与切图",[14,131120,131122],{"id":131121},"_91-盒子模型","9.1 盒子模型",[19,131124,131125],{},"利用盒子来设计网页",[19,131127,131128],{},"盒子包含：边框、外边距、内边距、实际内容",[19,131130,131131],{},"网页布局设置：",[19,131133,131134],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,131136,131137],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,131139,131140],{},"③往盒子里装内容",[3095,131142],{"style":127650,"src":131143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[305,131145,131147],{"id":131146},"_911-边框border","9.1.1 边框（border）",[26,131149,131150,131153],{},[29,131151,131152],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[29,131154,131155],{},"语法",[73,131157,131159],{"className":127794,"code":131158,"language":127796,"meta":79,"style":79},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[32,131160,131161,131166,131172,131189],{"__ignoreMap":79},[100,131162,131163],{"class":102,"line":103},[100,131164,131165],{"class":1836},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[100,131167,131168,131170],{"class":102,"line":188},[100,131169,53165],{"class":52854},[100,131171,17153],{"class":258},[100,131173,131174,131176,131178,131180,131182,131184,131187],{"class":102,"line":199},[100,131175,72450],{"class":117},[100,131177,52991],{"class":258},[100,131179,1985],{"class":117},[100,131181,53046],{"class":471},[100,131183,53075],{"class":117},[100,131185,131186],{"class":117}," #ccc",[100,131188,2927],{"class":258},[100,131190,131191],{"class":102,"line":532},[100,131192,3197],{"class":258},[319,131194,131195,131203],{},[322,131196,131197],{},[325,131198,131199,131201],{},[328,131200,130396],{"align":330},[328,131202,104172],{"align":330},[339,131204,131205,131213,131221],{},[325,131206,131207,131210],{},[344,131208,131209],{"align":330},"border-width",[344,131211,131212],{"align":330},"定义边框粗细，单位是px",[325,131214,131215,131218],{},[344,131216,131217],{"align":330},"border-style",[344,131219,131220],{"align":330},"边框的样式",[325,131222,131223,131226],{},[344,131224,131225],{"align":330},"border-color",[344,131227,131228],{"align":330},"边框的颜色",[19,131230,131231],{},"边框样式 border-style 可以设置如下值：",[2773,131233,131234,131237,131240,131243],{},[29,131235,131236],{},"none：没有边框即忽略所有边框的宽度（默认值）",[29,131238,131239],{},"solid：边框为单实线(最为常用的)",[29,131241,131242],{},"dashed：边框为虚线",[29,131244,131245],{},"dotted：边框为点线",[26,131247,131248],{"start":199},[29,131249,131250],{},"边框的合写分写",[73,131252,131253],{"className":127794,"code":131158,"language":127796,"meta":79,"style":79},[32,131254,131255,131259,131265,131281],{"__ignoreMap":79},[100,131256,131257],{"class":102,"line":103},[100,131258,131165],{"class":1836},[100,131260,131261,131263],{"class":102,"line":188},[100,131262,53165],{"class":52854},[100,131264,17153],{"class":258},[100,131266,131267,131269,131271,131273,131275,131277,131279],{"class":102,"line":199},[100,131268,72450],{"class":117},[100,131270,52991],{"class":258},[100,131272,1985],{"class":117},[100,131274,53046],{"class":471},[100,131276,53075],{"class":117},[100,131278,131186],{"class":117},[100,131280,2927],{"class":258},[100,131282,131283],{"class":102,"line":532},[100,131284,3197],{"class":258},[19,131286,131287],{},"边框分开写法：",[73,131289,131291],{"className":127794,"code":131290,"language":127796,"meta":79,"style":79},"\u002F* 边框分开写法 *\u002F\ndiv {\n  border-top: 1px solid #000;\n  border-right: 2px dashed #333;\n  border-bottom: 3px dotted #666;\n  border-left: 1px solid #999;\n}\n",[32,131292,131293,131298,131304,131322,131340,131359,131377],{"__ignoreMap":79},[100,131294,131295],{"class":102,"line":103},[100,131296,131297],{"class":1836},"\u002F* 边框分开写法 *\u002F\n",[100,131299,131300,131302],{"class":102,"line":188},[100,131301,53165],{"class":52854},[100,131303,17153],{"class":258},[100,131305,131306,131309,131311,131313,131315,131317,131320],{"class":102,"line":199},[100,131307,131308],{"class":117},"  border-top",[100,131310,52991],{"class":258},[100,131312,1985],{"class":117},[100,131314,53046],{"class":471},[100,131316,53075],{"class":117},[100,131318,131319],{"class":117}," #000",[100,131321,2927],{"class":258},[100,131323,131324,131327,131329,131331,131333,131335,131338],{"class":102,"line":532},[100,131325,131326],{"class":117},"  border-right",[100,131328,52991],{"class":258},[100,131330,465],{"class":117},[100,131332,53046],{"class":471},[100,131334,63795],{"class":117},[100,131336,131337],{"class":117}," #333",[100,131339,2927],{"class":258},[100,131341,131342,131345,131347,131349,131351,131354,131357],{"class":102,"line":577},[100,131343,131344],{"class":117},"  border-bottom",[100,131346,52991],{"class":258},[100,131348,1849],{"class":117},[100,131350,53046],{"class":471},[100,131352,131353],{"class":117}," dotted",[100,131355,131356],{"class":117}," #666",[100,131358,2927],{"class":258},[100,131360,131361,131364,131366,131368,131370,131372,131375],{"class":102,"line":589},[100,131362,131363],{"class":117},"  border-left",[100,131365,52991],{"class":258},[100,131367,1985],{"class":117},[100,131369,53046],{"class":471},[100,131371,53075],{"class":117},[100,131373,131374],{"class":117}," #999",[100,131376,2927],{"class":258},[100,131378,131379],{"class":102,"line":595},[100,131380,3197],{"class":258},[26,131382,131383],{"start":532},[29,131384,131385],{},"表格的细线边框",[19,131387,131388],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[73,131390,131392],{"className":127794,"code":131391,"language":127796,"meta":79,"style":79},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[32,131393,131394,131399,131405,131415],{"__ignoreMap":79},[100,131395,131396],{"class":102,"line":103},[100,131397,131398],{"class":1836},"\u002F* 表格细线边框合并 *\u002F\n",[100,131400,131401,131403],{"class":102,"line":188},[100,131402,319],{"class":52854},[100,131404,17153],{"class":258},[100,131406,131407,131409,131411,131413],{"class":102,"line":199},[100,131408,72132],{"class":117},[100,131410,52991],{"class":258},[100,131412,66589],{"class":117},[100,131414,2927],{"class":258},[100,131416,131417],{"class":102,"line":532},[100,131418,3197],{"class":258},[19,131420,131421],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[26,131423,131424],{"start":577},[29,131425,131426],{},"解决边框额外增加盒子的实际大小的方法：",[2773,131428,131429,131432],{},[29,131430,131431],{},"测量盒子大小的时候,不量边框",[29,131433,131434],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[305,131436,131438],{"id":131437},"_912-内边距","9.1.2 内边距",[26,131440,131441,131444],{},[29,131442,131443],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[29,131445,131155],{},[319,131447,131448,131458],{},[322,131449,131450],{},[325,131451,131452,131455],{},[328,131453,131454],{"align":330},"值的个数",[328,131456,131457],{"align":330},"表达意思",[339,131459,131460,131468,131476,131484],{},[325,131461,131462,131465],{},[344,131463,131464],{"align":330},"padding: 5px;",[344,131466,131467],{"align":330},"1个值，代表上下左右都有5个元素",[325,131469,131470,131473],{},[344,131471,131472],{"align":330},"padding: 5px 10px;",[344,131474,131475],{"align":330},"2个值，代表上下内边距为5像素，左右内边距为10像素",[325,131477,131478,131481],{},[344,131479,131480],{"align":330},"padding: 5px 10px 20px;",[344,131482,131483],{"align":330},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[325,131485,131486,131489],{},[344,131487,131488],{"align":330},"padding: 5px 10px 20px 30px;",[344,131490,131491],{"align":330},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[319,131493,131494,131502],{},[322,131495,131496],{},[325,131497,131498,131500],{},[328,131499,130396],{"align":330},[328,131501,104172],{"align":330},[339,131503,131504,131512,131520,131528],{},[325,131505,131506,131509],{},[344,131507,131508],{"align":330},"padding-left",[344,131510,131511],{"align":330},"左内边距",[325,131513,131514,131517],{},[344,131515,131516],{"align":330},"padding-right",[344,131518,131519],{"align":330},"右内边距",[325,131521,131522,131525],{},[344,131523,131524],{"align":330},"padding-top",[344,131526,131527],{"align":330},"上内边距",[325,131529,131530,131533],{},[344,131531,131532],{"align":330},"padding-bottom",[344,131534,131535],{"align":330},"下内边距",[26,131537,131538],{"start":199},[29,131539,131540],{},"内边距会影响盒子的实际大小",[19,131542,131543],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,131545,131546],{},"①内容和边框有了距离，添加了内边距",[19,131548,131549],{},"②padding影响了盒子实际大小",[19,131551,131552],{},"内边距对盒子大小的影响：",[19,131554,131555],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,131557,131558],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,131560,96772],{},[19,131562,131563],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[305,131565,131567],{"id":131566},"_913-外边距","9.1.3 外边距",[26,131569,131570],{},[29,131571,131572],{},"控制盒子与盒子之间的距离",[319,131574,131575,131583],{},[322,131576,131577],{},[325,131578,131579,131581],{},[328,131580,130396],{"align":330},[328,131582,104172],{"align":330},[339,131584,131585,131593,131601,131609],{},[325,131586,131587,131590],{},[344,131588,131589],{"align":330},"margin-left",[344,131591,131592],{"align":330},"左外边距",[325,131594,131595,131598],{},[344,131596,131597],{"align":330},"margin-right",[344,131599,131600],{"align":330},"右外边距",[325,131602,131603,131606],{},[344,131604,131605],{"align":330},"margin-top",[344,131607,131608],{"align":330},"上外边距",[325,131610,131611,131614],{},[344,131612,131613],{"align":330},"margin-bottom",[344,131615,131616],{"align":330},"下外边距",[26,131618,131619],{"start":188},[29,131620,131621],{},"外边距可以让块级盒子水平居中的两个条件：",[19,131623,131624],{},"①盒子必须指定了宽度（width）",[19,131626,131627],{},"②盒子左右的外边距都设置为 auto",[73,131629,131631],{"className":127794,"code":131630,"language":127796,"meta":79,"style":79},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[32,131632,131633,131638,131645,131661],{"__ignoreMap":79},[100,131634,131635],{"class":102,"line":103},[100,131636,131637],{"class":1836},"\u002F* margin 复合写法（同上） *\u002F\n",[100,131639,131640,131643],{"class":102,"line":188},[100,131641,131642],{"class":106},".box",[100,131644,17153],{"class":258},[100,131646,131647,131649,131651,131653,131655,131658],{"class":102,"line":199},[100,131648,72024],{"class":117},[100,131650,52991],{"class":258},[100,131652,1366],{"class":117},[100,131654,53110],{"class":117},[100,131656,131657],{"class":258},";  ",[100,131659,131660],{"class":1836},"\u002F* 块级盒子水平居中 *\u002F\n",[100,131662,131663],{"class":102,"line":532},[100,131664,3197],{"class":258},[26,131666,131667],{"start":199},[29,131668,131669],{},"外边距塌陷问题",[19,131671,131672],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[3095,131674],{"style":127650,"src":131675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,131677,131678],{},"解决方案：",[19,131680,131681],{},"①可以为父亲元素定义上边距",[73,131683,131684],{"className":127794,"code":131630,"language":127796,"meta":79,"style":79},[32,131685,131686,131690,131696,131710],{"__ignoreMap":79},[100,131687,131688],{"class":102,"line":103},[100,131689,131637],{"class":1836},[100,131691,131692,131694],{"class":102,"line":188},[100,131693,131642],{"class":106},[100,131695,17153],{"class":258},[100,131697,131698,131700,131702,131704,131706,131708],{"class":102,"line":199},[100,131699,72024],{"class":117},[100,131701,52991],{"class":258},[100,131703,1366],{"class":117},[100,131705,53110],{"class":117},[100,131707,131657],{"class":258},[100,131709,131660],{"class":1836},[100,131711,131712],{"class":102,"line":532},[100,131713,3197],{"class":258},[19,131715,131716],{},"②可以为父亲元素定义上内边距",[19,131718,131719],{},"③可以为父亲元素添加overflow:hidden",[3095,131721],{"style":127650,"src":131722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[73,131724,131725],{"className":127794,"code":131630,"language":127796,"meta":79,"style":79},[32,131726,131727,131731,131737,131751],{"__ignoreMap":79},[100,131728,131729],{"class":102,"line":103},[100,131730,131637],{"class":1836},[100,131732,131733,131735],{"class":102,"line":188},[100,131734,131642],{"class":106},[100,131736,17153],{"class":258},[100,131738,131739,131741,131743,131745,131747,131749],{"class":102,"line":199},[100,131740,72024],{"class":117},[100,131742,52991],{"class":258},[100,131744,1366],{"class":117},[100,131746,53110],{"class":117},[100,131748,131657],{"class":258},[100,131750,131660],{"class":1836},[100,131752,131753],{"class":102,"line":532},[100,131754,3197],{"class":258},[3095,131756],{"style":127650,"src":131757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,131759,131760],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,131762,131763],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[305,131765,131767],{"id":131766},"_914-清除内外边距","9.1.4 清除内外边距",[19,131769,131770],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[73,131772,131773],{"className":127794,"code":131630,"language":127796,"meta":79,"style":79},[32,131774,131775,131779,131785,131799],{"__ignoreMap":79},[100,131776,131777],{"class":102,"line":103},[100,131778,131637],{"class":1836},[100,131780,131781,131783],{"class":102,"line":188},[100,131782,131642],{"class":106},[100,131784,17153],{"class":258},[100,131786,131787,131789,131791,131793,131795,131797],{"class":102,"line":199},[100,131788,72024],{"class":117},[100,131790,52991],{"class":258},[100,131792,1366],{"class":117},[100,131794,53110],{"class":117},[100,131796,131657],{"class":258},[100,131798,131660],{"class":1836},[100,131800,131801],{"class":102,"line":532},[100,131802,3197],{"class":258},[19,131804,131805],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[305,131807,131809],{"id":131808},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[2773,131811,131812,131815,131818,131821,131824,131827],{},[29,131813,131814],{},"文件→打开 ：可以打开我们要测量的图片",[29,131816,131817],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[29,131819,131820],{},"右击标尺，把里面的单位改为像素",[29,131822,131823],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[29,131825,131826],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[29,131828,131829],{},"用选区拖动 可以测量大小",[3095,131831],{"style":127650,"src":131832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[2773,131834,131835,131838],{},[29,131836,131837],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[29,131839,131840],{},"吸管取色工具",[3095,131842],{"style":127650,"src":131843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[305,131845,131847],{"id":131846},"_916-案例","9.1.6 案例",[26,131849,131850],{},[29,131851,131852],{},"小米商品",[3095,131854],{"style":127650,"src":131855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[73,131857,131858],{"className":127794,"code":131630,"language":127796,"meta":79,"style":79},[32,131859,131860,131864,131870,131884],{"__ignoreMap":79},[100,131861,131862],{"class":102,"line":103},[100,131863,131637],{"class":1836},[100,131865,131866,131868],{"class":102,"line":188},[100,131867,131642],{"class":106},[100,131869,17153],{"class":258},[100,131871,131872,131874,131876,131878,131880,131882],{"class":102,"line":199},[100,131873,72024],{"class":117},[100,131875,52991],{"class":258},[100,131877,1366],{"class":117},[100,131879,53110],{"class":117},[100,131881,131657],{"class":258},[100,131883,131660],{"class":1836},[100,131885,131886],{"class":102,"line":532},[100,131887,3197],{"class":258},[26,131889,131890],{"start":188},[29,131891,131892],{},"快报模块",[3095,131894],{"style":127650,"src":131895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[73,131897,131899],{"className":128541,"code":131898,"language":128543,"meta":79,"style":79},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[32,131900,131901,131906,131921,131926],{"__ignoreMap":79},[100,131902,131903],{"class":102,"line":103},[100,131904,131905],{"class":1836},"\u003C!-- HTML 代码示例 -->\n",[100,131907,131908,131910,131912,131914,131916,131919],{"class":102,"line":188},[100,131909,2676],{"class":258},[100,131911,53165],{"class":52854},[100,131913,55040],{"class":106},[100,131915,472],{"class":258},[100,131917,131918],{"class":110},"\"example\"",[100,131920,52861],{"class":258},[100,131922,131923],{"class":102,"line":199},[100,131924,131925],{"class":258},"  示例内容\n",[100,131927,131928,131930,131932],{"class":102,"line":532},[100,131929,53339],{"class":258},[100,131931,53165],{"class":52854},[100,131933,52861],{"class":258},[305,131935,131937],{"id":131936},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[26,131939,131940],{},[29,131941,131942],{},"圆角边框",[19,131944,131945],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[3095,131947],{"style":127650,"src":131948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[73,131950,131952],{"className":127794,"code":131951,"language":127796,"meta":79,"style":79},"div {\n  border: 1px solid #ccc;\n}\n",[32,131953,131954,131960,131976],{"__ignoreMap":79},[100,131955,131956,131958],{"class":102,"line":103},[100,131957,53165],{"class":52854},[100,131959,17153],{"class":258},[100,131961,131962,131964,131966,131968,131970,131972,131974],{"class":102,"line":188},[100,131963,72450],{"class":117},[100,131965,52991],{"class":258},[100,131967,1985],{"class":117},[100,131969,53046],{"class":471},[100,131971,53075],{"class":117},[100,131973,131186],{"class":117},[100,131975,2927],{"class":258},[100,131977,131978],{"class":102,"line":199},[100,131979,3197],{"class":258},[19,131981,131982],{},"解释:",[2773,131984,131985,131988,131991,131994,131997],{},[29,131986,131987],{},"参数值可以为数值或百分比的形式",[29,131989,131990],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[29,131992,131993],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[29,131995,131996],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[29,131998,131999],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[26,132001,132002],{"start":188},[29,132003,132004],{},"盒子阴影",[73,132006,132008],{"className":127794,"code":132007,"language":127796,"meta":79,"style":79},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[32,132009,132010,132016,132053],{"__ignoreMap":79},[100,132011,132012,132014],{"class":102,"line":103},[100,132013,53165],{"class":52854},[100,132015,17153],{"class":258},[100,132017,132018,132021,132023,132025,132027,132029,132031,132033,132035,132037,132039,132041,132043,132045,132047,132049,132051],{"class":102,"line":188},[100,132019,132020],{"class":117},"  box-shadow",[100,132022,52991],{"class":258},[100,132024,1366],{"class":117},[100,132026,16336],{"class":117},[100,132028,53046],{"class":471},[100,132030,3649],{"class":117},[100,132032,53046],{"class":471},[100,132034,80321],{"class":117},[100,132036,713],{"class":258},[100,132038,1366],{"class":117},[100,132040,14017],{"class":258},[100,132042,1366],{"class":117},[100,132044,14017],{"class":258},[100,132046,1366],{"class":117},[100,132048,14017],{"class":258},[100,132050,87762],{"class":117},[100,132052,4321],{"class":258},[100,132054,132055],{"class":102,"line":199},[100,132056,3197],{"class":258},[319,132058,132059,132067],{},[322,132060,132061],{},[325,132062,132063,132065],{},[328,132064,1924],{"align":330},[328,132066,29061],{"align":330},[339,132068,132069,132077,132085,132093,132101,132109],{},[325,132070,132071,132074],{},[344,132072,132073],{"align":330},"h-shadow",[344,132075,132076],{"align":330},"必需,水平阴影的位置,允许负值",[325,132078,132079,132082],{},[344,132080,132081],{"align":330},"v-shadow",[344,132083,132084],{"align":330},"必需,垂直阴影的位置,允许负值",[325,132086,132087,132090],{},[344,132088,132089],{"align":330},"blur",[344,132091,132092],{"align":330},"可选,模糊距离,就是影子的虚实",[325,132094,132095,132098],{},[344,132096,132097],{"align":330},"spread",[344,132099,132100],{"align":330},"可选,阴影尺寸",[325,132102,132103,132106],{},[344,132104,132105],{"align":330},"color",[344,132107,132108],{"align":330},"可选,阴影的颜色",[325,132110,132111,132114],{},[344,132112,132113],{"align":330},"inset",[344,132115,132116],{"align":330},"可选,将外部阴影(outset)改为内部阴影",[26,132118,132119],{"start":199},[29,132120,132121],{},"文字阴影",[73,132123,132125],{"className":127794,"code":132124,"language":127796,"meta":79,"style":79},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[32,132126,132127,132133,132172],{"__ignoreMap":79},[100,132128,132129,132131],{"class":102,"line":103},[100,132130,19],{"class":52854},[100,132132,17153],{"class":258},[100,132134,132135,132138,132140,132142,132144,132146,132148,132150,132152,132154,132156,132158,132160,132162,132164,132166,132168,132170],{"class":102,"line":188},[100,132136,132137],{"class":117},"  text-shadow",[100,132139,52991],{"class":258},[100,132141,1985],{"class":117},[100,132143,53046],{"class":471},[100,132145,26693],{"class":117},[100,132147,53046],{"class":471},[100,132149,16336],{"class":117},[100,132151,53046],{"class":471},[100,132153,80321],{"class":117},[100,132155,713],{"class":258},[100,132157,1366],{"class":117},[100,132159,14017],{"class":258},[100,132161,1366],{"class":117},[100,132163,14017],{"class":258},[100,132165,1366],{"class":117},[100,132167,14017],{"class":258},[100,132169,102071],{"class":117},[100,132171,4321],{"class":258},[100,132173,132174],{"class":102,"line":199},[100,132175,3197],{"class":258},[319,132177,132178,132186],{},[322,132179,132180],{},[325,132181,132182,132184],{},[328,132183,1924],{"align":330},[328,132185,29061],{"align":330},[339,132187,132188,132194,132201,132208],{},[325,132189,132190,132192],{},[344,132191,132073],{"align":330},[344,132193,132076],{"align":330},[325,132195,132196,132198],{},[344,132197,132081],{"align":330},[344,132199,132200],{"align":330},"必需,垂直阴影位置,允许负值",[325,132202,132203,132205],{},[344,132204,132089],{"align":330},[344,132206,132207],{"align":330},"可选,模糊的距离",[325,132209,132210,132212],{},[344,132211,132105],{"align":330},[344,132213,132108],{"align":330},[14,132215,132217],{"id":132216},"_92-浮动","9.2 浮动",[305,132219,132221],{"id":132220},"_921-浮动介绍","9.2.1 浮动介绍",[19,132223,132224],{},"在16.2中详细介绍",[305,132226,132228],{"id":132227},"_922-清除浮动","9.2.2 清除浮动",[26,132230,132231,132234],{},[29,132232,132233],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[29,132235,132236],{},"清除浮动的本质",[19,132238,132239],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,132241,381],{},[2773,132243,132244,132247,132250],{},[29,132245,132246],{},"如果父盒子本身有高度，则不需要清除浮动",[29,132248,132249],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[29,132251,132252],{},"父级有了高度，就不会影响下面的标准流了",[26,132254,132255],{"start":199},[29,132256,132257],{},"清除浮动样式",[73,132259,132261],{"className":127794,"code":132260,"language":127796,"meta":79,"style":79},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[32,132262,132263,132270,132281,132285,132292,132302],{"__ignoreMap":79},[100,132264,132265,132268],{"class":102,"line":103},[100,132266,132267],{"class":106},".left",[100,132269,17153],{"class":258},[100,132271,132272,132275,132277,132279],{"class":102,"line":188},[100,132273,132274],{"class":117},"  float",[100,132276,52991],{"class":258},[100,132278,330],{"class":117},[100,132280,2927],{"class":258},[100,132282,132283],{"class":102,"line":199},[100,132284,3197],{"class":258},[100,132286,132287,132290],{"class":102,"line":532},[100,132288,132289],{"class":106},".right",[100,132291,17153],{"class":258},[100,132293,132294,132296,132298,132300],{"class":102,"line":577},[100,132295,132274],{"class":117},[100,132297,52991],{"class":258},[100,132299,74076],{"class":117},[100,132301,2927],{"class":258},[100,132303,132304],{"class":102,"line":589},[100,132305,3197],{"class":258},[319,132307,132308,132316],{},[322,132309,132310],{},[325,132311,132312,132314],{},[328,132313,128258],{"align":330},[328,132315,29061],{"align":330},[339,132317,132318,132325,132332],{},[325,132319,132320,132322],{},[344,132321,330],{"align":330},[344,132323,132324],{"align":330},"不允许左侧有浮动元素（清除左侧浮动的影响）",[325,132326,132327,132329],{},[344,132328,74076],{"align":330},[344,132330,132331],{"align":330},"不允许右侧有浮动元素（清除右侧浮动的影响）",[325,132333,132334,132337],{},[344,132335,132336],{"align":330},"both",[344,132338,132339],{"align":330},"同时清除左右侧浮动的影响",[19,132341,132342],{},"法一",[19,132344,132345],{},"额外标签法也称为隔墙法",[19,132347,132348],{},"使用方式：",[19,132350,132351],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[73,132353,132354],{"className":127794,"code":132260,"language":127796,"meta":79,"style":79},[32,132355,132356,132362,132372,132376,132382,132392],{"__ignoreMap":79},[100,132357,132358,132360],{"class":102,"line":103},[100,132359,132267],{"class":106},[100,132361,17153],{"class":258},[100,132363,132364,132366,132368,132370],{"class":102,"line":188},[100,132365,132274],{"class":117},[100,132367,52991],{"class":258},[100,132369,330],{"class":117},[100,132371,2927],{"class":258},[100,132373,132374],{"class":102,"line":199},[100,132375,3197],{"class":258},[100,132377,132378,132380],{"class":102,"line":532},[100,132379,132289],{"class":106},[100,132381,17153],{"class":258},[100,132383,132384,132386,132388,132390],{"class":102,"line":577},[100,132385,132274],{"class":117},[100,132387,52991],{"class":258},[100,132389,74076],{"class":117},[100,132391,2927],{"class":258},[100,132393,132394],{"class":102,"line":589},[100,132395,3197],{"class":258},[19,132397,132398],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,132400,132401],{},"优点： 通俗易懂，书写方便",[19,132403,132404],{},"缺点： 添加许多无意义的标签，结构化较差",[19,132406,132407],{},"注意： 要求这个新的空标签必须是块级元素。",[19,132409,132410],{},"法二",[19,132412,132413],{},"父级添加overflow属性",[73,132415,132416],{"className":127794,"code":132260,"language":127796,"meta":79,"style":79},[32,132417,132418,132424,132434,132438,132444,132454],{"__ignoreMap":79},[100,132419,132420,132422],{"class":102,"line":103},[100,132421,132267],{"class":106},[100,132423,17153],{"class":258},[100,132425,132426,132428,132430,132432],{"class":102,"line":188},[100,132427,132274],{"class":117},[100,132429,52991],{"class":258},[100,132431,330],{"class":117},[100,132433,2927],{"class":258},[100,132435,132436],{"class":102,"line":199},[100,132437,3197],{"class":258},[100,132439,132440,132442],{"class":102,"line":532},[100,132441,132289],{"class":106},[100,132443,17153],{"class":258},[100,132445,132446,132448,132450,132452],{"class":102,"line":577},[100,132447,132274],{"class":117},[100,132449,52991],{"class":258},[100,132451,74076],{"class":117},[100,132453,2927],{"class":258},[100,132455,132456],{"class":102,"line":589},[100,132457,3197],{"class":258},[19,132459,132460],{},"overflow: hidden;",[19,132462,132463],{},"优点：代码简洁",[19,132465,132466],{},"缺点：无法显示溢出的部分",[19,132468,132469],{},"注意：是给父元素添加代码",[19,132471,132472],{},"法三",[19,132474,132475],{},"父级添加after伪元素",[19,132477,132478,132481],{},[132479,132480],"after",{}," 方式是额外标签法的升级版",[19,132483,132484],{},"使用的时候复制就可以",[73,132486,132487],{"className":127794,"code":132260,"language":127796,"meta":79,"style":79},[32,132488,132489,132495,132505,132509,132515,132525],{"__ignoreMap":79},[100,132490,132491,132493],{"class":102,"line":103},[100,132492,132267],{"class":106},[100,132494,17153],{"class":258},[100,132496,132497,132499,132501,132503],{"class":102,"line":188},[100,132498,132274],{"class":117},[100,132500,52991],{"class":258},[100,132502,330],{"class":117},[100,132504,2927],{"class":258},[100,132506,132507],{"class":102,"line":199},[100,132508,3197],{"class":258},[100,132510,132511,132513],{"class":102,"line":532},[100,132512,132289],{"class":106},[100,132514,17153],{"class":258},[100,132516,132517,132519,132521,132523],{"class":102,"line":577},[100,132518,132274],{"class":117},[100,132520,52991],{"class":258},[100,132522,74076],{"class":117},[100,132524,2927],{"class":258},[100,132526,132527],{"class":102,"line":589},[100,132528,3197],{"class":258},[19,132530,132531],{},"优点：没有增加标签，结构更简单",[19,132533,132534],{},"缺点：照顾低版本浏览器",[19,132536,132537],{},"代表网站： 百度、淘宝网、网易等",[19,132539,132540],{},"法四",[19,132542,132543],{},"父级添加双伪元素",[73,132545,132546],{"className":127794,"code":132260,"language":127796,"meta":79,"style":79},[32,132547,132548,132554,132564,132568,132574,132584],{"__ignoreMap":79},[100,132549,132550,132552],{"class":102,"line":103},[100,132551,132267],{"class":106},[100,132553,17153],{"class":258},[100,132555,132556,132558,132560,132562],{"class":102,"line":188},[100,132557,132274],{"class":117},[100,132559,52991],{"class":258},[100,132561,330],{"class":117},[100,132563,2927],{"class":258},[100,132565,132566],{"class":102,"line":199},[100,132567,3197],{"class":258},[100,132569,132570,132572],{"class":102,"line":532},[100,132571,132289],{"class":106},[100,132573,17153],{"class":258},[100,132575,132576,132578,132580,132582],{"class":102,"line":577},[100,132577,132274],{"class":117},[100,132579,52991],{"class":258},[100,132581,74076],{"class":117},[100,132583,2927],{"class":258},[100,132585,132586],{"class":102,"line":589},[100,132587,3197],{"class":258},[19,132589,132590],{},"优点：代码更简洁",[19,132592,132534],{},[19,132594,132595],{},"代表网站：小米、腾讯等",[14,132597,132599],{"id":132598},"_93-ps切图","9.3 PS切图",[305,132601,132603],{"id":132602},"_931-常见图片格式","9.3.1 常见图片格式",[319,132605,132606,132616],{},[322,132607,132608],{},[325,132609,132610,132613],{},[328,132611,132612],{"align":330},"jpg图像格式",[328,132614,132615],{"align":330},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[339,132617,132618,132626,132634],{},[325,132619,132620,132623],{},[344,132621,132622],{"align":330},"gif图像格式",[344,132624,132625],{"align":330},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[325,132627,132628,132631],{},[344,132629,132630],{"align":330},"png图像格式",[344,132632,132633],{"align":330},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[325,132635,132636,132639],{},[344,132637,132638],{"align":330},"PSD图像格式",[344,132640,132641],{"align":330},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[305,132643,132645],{"id":132644},"_932-图层切图","9.3.2 图层切图",[19,132647,132648],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,132650,132651],{},"按住shift选中两个图层->图层菜单->合并图层",[305,132653,132655],{"id":132654},"_933-切片切图","9.3.3 切片切图",[2773,132657,132658,132661],{},[29,132659,132660],{},"利用切片工具手动划出",[29,132662,132663],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[305,132665,132667],{"id":132666},"_934-切图步骤","9.3.4 切图步骤",[19,132669,132670],{},"用切片工具选中：",[3095,132672],{"style":127650,"src":132673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,132675,132676],{},"文件 -> 导出",[3095,132678],{"style":127650,"src":132679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[1677,132681,132682],{},"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":79,"searchDepth":188,"depth":188,"links":132684},[132685,132694,132698],{"id":131121,"depth":188,"text":131122,"children":132686},[132687,132688,132689,132690,132691,132692,132693],{"id":131146,"depth":199,"text":131147},{"id":131437,"depth":199,"text":131438},{"id":131566,"depth":199,"text":131567},{"id":131766,"depth":199,"text":131767},{"id":131808,"depth":199,"text":131809},{"id":131846,"depth":199,"text":131847},{"id":131936,"depth":199,"text":131937},{"id":132216,"depth":188,"text":132217,"children":132695},[132696,132697],{"id":132220,"depth":199,"text":132221},{"id":132227,"depth":199,"text":132228},{"id":132598,"depth":188,"text":132599,"children":132699},[132700,132701,132702,132703],{"id":132602,"depth":199,"text":132603},{"id":132644,"depth":199,"text":132645},{"id":132654,"depth":199,"text":132655},{"id":132666,"depth":199,"text":132667},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":131113,"description":24958},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":132710,"title":132711,"body":132712,"description":24958,"extension":1708,"meta":133353,"navigation":569,"path":133354,"seo":133355,"stem":133356,"__hash__":133357},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":132713,"toc":133341},[132714,132717,132721,132747,132781,132785,132789,132792,132834,132841,132851,132859,132861,132864,132867,132870,132877,132891,132895,132898,132927,132931,132934,132948,132952,132955,132983,132987,132990,133016,133020,133025,133058,133063,133091,133095,133112,133158,133163,133207,133224,133331,133339],[10,132715,132711],{"id":132716},"_10-css规范与学成在线案例",[14,132718,132720],{"id":132719},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[26,132722,132723,132729,132735,132741],{},[29,132724,132725,132728],{},[1921,132726,132727],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[29,132730,132731,132734],{},[1921,132732,132733],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[29,132736,132737,132740],{},[1921,132738,132739],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[29,132742,132743,132746],{},[1921,132744,132745],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[73,132748,132749],{"className":127794,"code":131158,"language":127796,"meta":79,"style":79},[32,132750,132751,132755,132761,132777],{"__ignoreMap":79},[100,132752,132753],{"class":102,"line":103},[100,132754,131165],{"class":1836},[100,132756,132757,132759],{"class":102,"line":188},[100,132758,53165],{"class":52854},[100,132760,17153],{"class":258},[100,132762,132763,132765,132767,132769,132771,132773,132775],{"class":102,"line":199},[100,132764,72450],{"class":117},[100,132766,52991],{"class":258},[100,132768,1985],{"class":117},[100,132770,53046],{"class":471},[100,132772,53075],{"class":117},[100,132774,131186],{"class":117},[100,132776,2927],{"class":258},[100,132778,132779],{"class":102,"line":532},[100,132780,3197],{"class":258},[14,132782,132784],{"id":132783},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[305,132786,132788],{"id":132787},"_1021-header头部制作","10.2.1 header头部制作",[3095,132790],{"style":127650,"src":132791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[2773,132793,132794,132801,132808,132814,132821,132828],{},[29,132795,132796,132797,132800],{},"1号是版心盒子 ",[1921,132798,132799],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[29,132802,132803,132804,132807],{},"版心盒子 里面包含 2号盒子 ",[1921,132805,132806],{},"logo"," 图标",[29,132809,132810,132811,132813],{},"版心盒子 里面包含 3号盒子 ",[1921,132812,55267],{}," 导航栏",[29,132815,132816,132817,132820],{},"版心盒子 里面包含 4号盒子 ",[1921,132818,132819],{},"search"," 搜索框",[29,132822,132823,132824,132827],{},"版心盒子 里面包含 5号盒子 ",[1921,132825,132826],{},"user"," 个人信息",[29,132829,132830,132831],{},"注意，要求里面的 ",[1921,132832,132833],{},"4个子盒子 必须都浮动",[26,132835,132836],{},[29,132837,132838],{},[1921,132839,132840],{},"导航栏注意点:",[19,132842,132843,132844,132847,132848],{},"实际开发中， ",[1921,132845,132846],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[1921,132849,132850],{},"用 li 包含链接(li+a)的做法",[2773,132852,132853,132856],{},[29,132854,132855],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[29,132857,132858],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,132860,381],{},[19,132862,132863],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,132865,132866],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,132868,132869],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[26,132871,132872],{"start":188},[29,132873,132874],{},[1921,132875,132876],{},"4号盒子search的细节：",[2773,132878,132879,132882,132885],{},[29,132880,132881],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[29,132883,132884],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[29,132886,132887,132890],{},[32,132888,132889],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[305,132892,132894],{"id":132893},"_1022-banner制作","10.2.2 banner制作",[3095,132896],{"style":127650,"src":132897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[2773,132899,132900,132907,132913,132920],{},[29,132901,132902,132903,132906],{},"1号盒子是通栏的大盒子 ",[1921,132904,132905],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[29,132908,132909,132910,132912],{},"2号盒子是版心 ",[1921,132911,2561],{}," ， 要水平居中对齐",[29,132914,132915,132916,132919],{},"3号盒子版心内，左对齐 ",[1921,132917,132918],{},"subnav"," 侧导航栏",[29,132921,132922,132923,132926],{},"4号盒子版心内，右对齐 ",[1921,132924,132925],{},"course"," 课程",[305,132928,132930],{"id":132929},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[3095,132932],{"style":127650,"src":132933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[2773,132935,132936,132939,132942,132945],{},[29,132937,132938],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[29,132940,132941],{},"1号盒子是标题 H3 左侧浮动",[29,132943,132944],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[29,132946,132947],{},"3号盒子 右浮动 mod 修改",[305,132949,132951],{"id":132950},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[3095,132953],{"style":127650,"src":132954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[2773,132956,132957,132963,132970,132977,132980],{},[29,132958,132959,132960,132962],{},"1号盒子为最大的盒子 ",[1921,132961,55268],{}," 版心水平居中对齐",[29,132964,132965,132966,132969],{},"2号盒子为上面部分 ",[1921,132967,132968],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[29,132971,132972,132973,132976],{},"3号盒子为底下部分 ",[1921,132974,132975],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[29,132978,132979],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[29,132981,132982],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[305,132984,132986],{"id":132985},"_1025-底部模块制作","10.2.5 底部模块制作",[3095,132988],{"style":127650,"src":132989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[2773,132991,132992,132999,133002,133009],{},[29,132993,132994,132995,132998],{},"1号盒子通栏大盒子 底部 ",[1921,132996,132997],{},"footer"," 给高度 底色是白色",[29,133000,133001],{},"2号盒子版心水平居中",[29,133003,133004,133005,133008],{},"3号盒子版权 ",[1921,133006,133007],{},"copyright"," 左对齐",[29,133010,133011,133012,133015],{},"4号盒子 链接组 ",[1921,133013,133014],{},"links"," 右对齐",[305,133017,133019],{"id":133018},"_1026-代码模块","10.2.6 代码模块",[26,133021,133022],{},[29,133023,133024],{},"html部分",[73,133026,133028],{"className":128541,"code":133027,"language":128543,"meta":79,"style":79},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[32,133029,133030],{"__ignoreMap":79},[100,133031,133032,133034,133036,133038,133040,133043,133046,133048,133051,133054,133056],{"class":102,"line":103},[100,133033,2676],{"class":258},[100,133035,2006],{"class":52854},[100,133037,62611],{"class":106},[100,133039,472],{"class":258},[100,133041,133042],{"class":110},"\"https:\u002F\u002Fexample.com\"",[100,133044,133045],{"class":106}," target",[100,133047,472],{"class":258},[100,133049,133050],{"class":110},"\"_blank\"",[100,133052,133053],{"class":258},">链接文字\u003C\u002F",[100,133055,2006],{"class":52854},[100,133057,52861],{"class":258},[26,133059,133060],{"start":188},[29,133061,133062],{},"css部分",[73,133064,133065],{"className":128541,"code":133027,"language":128543,"meta":79,"style":79},[32,133066,133067],{"__ignoreMap":79},[100,133068,133069,133071,133073,133075,133077,133079,133081,133083,133085,133087,133089],{"class":102,"line":103},[100,133070,2676],{"class":258},[100,133072,2006],{"class":52854},[100,133074,62611],{"class":106},[100,133076,472],{"class":258},[100,133078,133042],{"class":110},[100,133080,133045],{"class":106},[100,133082,472],{"class":258},[100,133084,133050],{"class":110},[100,133086,133053],{"class":258},[100,133088,2006],{"class":52854},[100,133090,52861],{"class":258},[305,133092,133094],{"id":133093},"_1027-收获","10.2.7 收获",[26,133096,133097,133100,133103,133106,133109],{},[29,133098,133099],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[29,133101,133102],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[29,133104,133105],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[29,133107,133108],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[29,133110,133111],{},"遗忘代码",[73,133113,133115],{"className":127794,"code":133114,"language":127796,"meta":79,"style":79},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[32,133116,133117,133139,133144,133154],{"__ignoreMap":79},[100,133118,133119,133121,133123,133125,133127,133129,133131,133133,133135,133137],{"class":102,"line":103},[100,133120,53165],{"class":52854},[100,133122,14017],{"class":258},[100,133124,19],{"class":52854},[100,133126,14017],{"class":258},[100,133128,10],{"class":52854},[100,133130,14017],{"class":258},[100,133132,2773],{"class":52854},[100,133134,14017],{"class":258},[100,133136,29],{"class":52854},[100,133138,17153],{"class":258},[100,133140,133141],{"class":102,"line":188},[100,133142,133143],{"class":1836},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[100,133145,133146,133148,133150,133152],{"class":102,"line":199},[100,133147,129410],{"class":117},[100,133149,52991],{"class":258},[100,133151,62423],{"class":117},[100,133153,2927],{"class":258},[100,133155,133156],{"class":102,"line":532},[100,133157,3197],{"class":258},[26,133159,133160],{"start":589},[29,133161,133162],{},"html引css的程序",[73,133164,133165],{"className":127794,"code":133114,"language":127796,"meta":79,"style":79},[32,133166,133167,133189,133193,133203],{"__ignoreMap":79},[100,133168,133169,133171,133173,133175,133177,133179,133181,133183,133185,133187],{"class":102,"line":103},[100,133170,53165],{"class":52854},[100,133172,14017],{"class":258},[100,133174,19],{"class":52854},[100,133176,14017],{"class":258},[100,133178,10],{"class":52854},[100,133180,14017],{"class":258},[100,133182,2773],{"class":52854},[100,133184,14017],{"class":258},[100,133186,29],{"class":52854},[100,133188,17153],{"class":258},[100,133190,133191],{"class":102,"line":188},[100,133192,133143],{"class":1836},[100,133194,133195,133197,133199,133201],{"class":102,"line":199},[100,133196,129410],{"class":117},[100,133198,52991],{"class":258},[100,133200,62423],{"class":117},[100,133202,2927],{"class":258},[100,133204,133205],{"class":102,"line":532},[100,133206,3197],{"class":258},[26,133208,133209,133212,133215,133218,133221],{"start":595},[29,133210,133211],{},"浮动的盒子不会有外边距合并问题",[29,133213,133214],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[29,133216,133217],{},"ctrl+g快速定位行；shift+alt多个光标",[29,133219,133220],{},"学习上方各个模块的选择器起名方法，以后就这样用",[29,133222,133223],{},"在写选择器时尽量写全一些，例如",[73,133225,133227],{"className":127794,"code":133226,"language":127796,"meta":79,"style":79},"\u002F* 静态定位（默认） *\u002F\n.static { position: static; }\n\u002F* 相对定位 *\u002F\n.relative { position: relative; }\n\u002F* 绝对定位 *\u002F\n.absolute { position: absolute; }\n\u002F* 固定定位 *\u002F\n.fixed { position: fixed; }\n\u002F* 粘性定位 *\u002F\n.sticky { position: sticky; }\n",[32,133228,133229,133234,133250,133255,133270,133275,133290,133295,133310,133315],{"__ignoreMap":79},[100,133230,133231],{"class":102,"line":103},[100,133232,133233],{"class":1836},"\u002F* 静态定位（默认） *\u002F\n",[100,133235,133236,133239,133241,133243,133245,133248],{"class":102,"line":188},[100,133237,133238],{"class":106},".static",[100,133240,81361],{"class":258},[100,133242,130154],{"class":117},[100,133244,52991],{"class":258},[100,133246,133247],{"class":117},"static",[100,133249,130724],{"class":258},[100,133251,133252],{"class":102,"line":199},[100,133253,133254],{"class":1836},"\u002F* 相对定位 *\u002F\n",[100,133256,133257,133260,133262,133264,133266,133268],{"class":102,"line":532},[100,133258,133259],{"class":106},".relative",[100,133261,81361],{"class":258},[100,133263,130154],{"class":117},[100,133265,52991],{"class":258},[100,133267,56318],{"class":117},[100,133269,130724],{"class":258},[100,133271,133272],{"class":102,"line":577},[100,133273,133274],{"class":1836},"\u002F* 绝对定位 *\u002F\n",[100,133276,133277,133280,133282,133284,133286,133288],{"class":102,"line":589},[100,133278,133279],{"class":106},".absolute",[100,133281,81361],{"class":258},[100,133283,130154],{"class":117},[100,133285,52991],{"class":258},[100,133287,56385],{"class":117},[100,133289,130724],{"class":258},[100,133291,133292],{"class":102,"line":595},[100,133293,133294],{"class":1836},"\u002F* 固定定位 *\u002F\n",[100,133296,133297,133300,133302,133304,133306,133308],{"class":102,"line":601},[100,133298,133299],{"class":106},".fixed",[100,133301,81361],{"class":258},[100,133303,130154],{"class":117},[100,133305,52991],{"class":258},[100,133307,87785],{"class":117},[100,133309,130724],{"class":258},[100,133311,133312],{"class":102,"line":606},[100,133313,133314],{"class":1836},"\u002F* 粘性定位 *\u002F\n",[100,133316,133317,133320,133322,133324,133326,133329],{"class":102,"line":612},[100,133318,133319],{"class":106},".sticky",[100,133321,81361],{"class":258},[100,133323,130154],{"class":117},[100,133325,52991],{"class":258},[100,133327,133328],{"class":117},"sticky",[100,133330,130724],{"class":258},[26,133332,133333,133336],{"start":623},[29,133334,133335],{},"一定要用好注释",[29,133337,133338],{},"浮动的盒子不会有外边距合并的问题",[1677,133340,132682],{},{"title":79,"searchDepth":188,"depth":188,"links":133342},[133343,133344],{"id":132719,"depth":188,"text":132720},{"id":132783,"depth":188,"text":132784,"children":133345},[133346,133347,133348,133349,133350,133351,133352],{"id":132787,"depth":199,"text":132788},{"id":132893,"depth":199,"text":132894},{"id":132929,"depth":199,"text":132930},{"id":132950,"depth":199,"text":132951},{"id":132985,"depth":199,"text":132986},{"id":133018,"depth":199,"text":133019},{"id":133093,"depth":199,"text":133094},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":132711,"description":24958},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":133359,"title":133360,"body":133361,"description":24958,"extension":1708,"meta":134847,"navigation":569,"path":134848,"seo":134849,"stem":134850,"__hash__":134851},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":133362,"toc":134839},[133363,133366,133370,133374,133385,133389,133406,133450,133483,133486,133503,133506,133509,133553,133557,133561,133564,133567,133571,133574,133585,133648,133689,133692,133707,133761,133769,133772,133783,133837,133863,133866,133879,133933,133965,134019,134042,134096,134099,134102,134109,134163,134184,134238,134241,134244,134329,134337,134394,134417,134421,134424,134442,134446,134465,134519,134557,134561,134564,134567,134589,134593,134601,134604,134609,134620,134623,134627,134641,134685,134688,134692,134695,134700,134726,134731,134808,134811,134815,134818,134821,134824,134827,134830,134833,134836],[10,133364,133360],{"id":133365},"_11-传统布局与定位体系",[14,133367,133369],{"id":133368},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[305,133371,133373],{"id":133372},"_1111-普通流标准流","11.1.1 普通流（标准流）",[2773,133375,133376,133379,133382],{},[29,133377,133378],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[29,133380,133381],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[29,133383,133384],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[305,133386,133388],{"id":133387},"_1112-浮动","11.1.2 浮动",[2773,133390,133391,133394,133397,133400,133403],{},[29,133392,133393],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[29,133395,133396],{},"浮动可以改变元素标签默认的排列方式",[29,133398,133399],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[29,133401,133402],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[29,133404,133405],{},"在使用行内块转换时盒子之间是有空隙的",[73,133407,133408],{"className":127794,"code":132260,"language":127796,"meta":79,"style":79},[32,133409,133410,133416,133426,133430,133436,133446],{"__ignoreMap":79},[100,133411,133412,133414],{"class":102,"line":103},[100,133413,132267],{"class":106},[100,133415,17153],{"class":258},[100,133417,133418,133420,133422,133424],{"class":102,"line":188},[100,133419,132274],{"class":117},[100,133421,52991],{"class":258},[100,133423,330],{"class":117},[100,133425,2927],{"class":258},[100,133427,133428],{"class":102,"line":199},[100,133429,3197],{"class":258},[100,133431,133432,133434],{"class":102,"line":532},[100,133433,132289],{"class":106},[100,133435,17153],{"class":258},[100,133437,133438,133440,133442,133444],{"class":102,"line":577},[100,133439,132274],{"class":117},[100,133441,52991],{"class":258},[100,133443,74076],{"class":117},[100,133445,2927],{"class":258},[100,133447,133448],{"class":102,"line":589},[100,133449,3197],{"class":258},[319,133451,133452,133460],{},[322,133453,133454],{},[325,133455,133456,133458],{},[328,133457,128258],{"align":330},[328,133459,29061],{"align":330},[339,133461,133462,133469,133476],{},[325,133463,133464,133466],{},[344,133465,56291],{"align":330},[344,133467,133468],{"align":330},"元素不浮动（默认值）",[325,133470,133471,133473],{},[344,133472,330],{"align":330},[344,133474,133475],{"align":330},"元素向左浮动",[325,133477,133478,133480],{},[344,133479,74076],{"align":330},[344,133481,133482],{"align":330},"元素向右浮动",[19,133484,133485],{},"浮动重点：",[2773,133487,133488,133491,133494,133497,133500],{},[29,133489,133490],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[29,133492,133493],{},"浮动的元素会一行内显示并且元素顶部对齐",[29,133495,133496],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[29,133498,133499],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[29,133501,133502],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,133504,133505],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,133507,133508],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[73,133510,133511],{"className":127794,"code":132260,"language":127796,"meta":79,"style":79},[32,133512,133513,133519,133529,133533,133539,133549],{"__ignoreMap":79},[100,133514,133515,133517],{"class":102,"line":103},[100,133516,132267],{"class":106},[100,133518,17153],{"class":258},[100,133520,133521,133523,133525,133527],{"class":102,"line":188},[100,133522,132274],{"class":117},[100,133524,52991],{"class":258},[100,133526,330],{"class":117},[100,133528,2927],{"class":258},[100,133530,133531],{"class":102,"line":199},[100,133532,3197],{"class":258},[100,133534,133535,133537],{"class":102,"line":532},[100,133536,132289],{"class":106},[100,133538,17153],{"class":258},[100,133540,133541,133543,133545,133547],{"class":102,"line":577},[100,133542,132274],{"class":117},[100,133544,52991],{"class":258},[100,133546,74076],{"class":117},[100,133548,2927],{"class":258},[100,133550,133551],{"class":102,"line":589},[100,133552,3197],{"class":258},[305,133554,133556],{"id":133555},"_1113-定位","11.1.3 定位",[23579,133558,133560],{"id":133559},"_11131-使用场景","11.1.3.1 使用场景",[19,133562,133563],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,133565,133566],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[23579,133568,133570],{"id":133569},"_11132-定位组成","11.1.3.2 定位组成",[19,133572,133573],{},"定位 = 定位模式 + 边偏移",[26,133575,133576],{},[29,133577,133578,133581,133582],{},[1921,133579,133580],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[1921,133583,133584],{},"定位模式",[73,133586,133588],{"className":127794,"code":133587,"language":127796,"meta":79,"style":79},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[32,133589,133590,133596,133610,133627,133644],{"__ignoreMap":79},[100,133591,133592,133594],{"class":102,"line":103},[100,133593,131642],{"class":106},[100,133595,17153],{"class":258},[100,133597,133598,133601,133603,133605,133607],{"class":102,"line":188},[100,133599,133600],{"class":117},"  position",[100,133602,52991],{"class":258},[100,133604,56318],{"class":117},[100,133606,131657],{"class":258},[100,133608,133609],{"class":1836},"\u002F* 定位模式 *\u002F\n",[100,133611,133612,133615,133617,133619,133621,133624],{"class":102,"line":199},[100,133613,133614],{"class":117},"  top",[100,133616,52991],{"class":258},[100,133618,2213],{"class":117},[100,133620,53046],{"class":471},[100,133622,133623],{"class":258},";           ",[100,133625,133626],{"class":1836},"\u002F* 边偏移：上 *\u002F\n",[100,133628,133629,133632,133634,133636,133638,133641],{"class":102,"line":532},[100,133630,133631],{"class":117},"  left",[100,133633,52991],{"class":258},[100,133635,2466],{"class":117},[100,133637,53046],{"class":471},[100,133639,133640],{"class":258},";          ",[100,133642,133643],{"class":1836},"\u002F* 边偏移：左 *\u002F\n",[100,133645,133646],{"class":102,"line":577},[100,133647,3197],{"class":258},[319,133649,133650,133659],{},[322,133651,133652],{},[325,133653,133654,133656],{},[328,133655,1924],{"align":330},[328,133657,133658],{"align":330},"语义",[339,133660,133661,133668,133675,133682],{},[325,133662,133663,133665],{},[344,133664,133247],{"align":330},[344,133666,133667],{"align":330},"静态定位",[325,133669,133670,133672],{},[344,133671,56318],{"align":330},[344,133673,133674],{"align":330},"相对定位",[325,133676,133677,133679],{},[344,133678,56385],{"align":330},[344,133680,133681],{"align":330},"绝对定位",[325,133683,133684,133686],{},[344,133685,87785],{"align":330},[344,133687,133688],{"align":330},"固定定位",[19,133690,133691],{},"（1）静态定位：",[2773,133693,133694,133705],{},[29,133695,133696,133697,133700,133701,133704],{},"静态定位是元素的 ",[1921,133698,133699],{},"默认定位方式"," ， ",[1921,133702,133703],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[29,133706,6779],{},[73,133708,133709],{"className":127794,"code":133587,"language":127796,"meta":79,"style":79},[32,133710,133711,133717,133729,133743,133757],{"__ignoreMap":79},[100,133712,133713,133715],{"class":102,"line":103},[100,133714,131642],{"class":106},[100,133716,17153],{"class":258},[100,133718,133719,133721,133723,133725,133727],{"class":102,"line":188},[100,133720,133600],{"class":117},[100,133722,52991],{"class":258},[100,133724,56318],{"class":117},[100,133726,131657],{"class":258},[100,133728,133609],{"class":1836},[100,133730,133731,133733,133735,133737,133739,133741],{"class":102,"line":199},[100,133732,133614],{"class":117},[100,133734,52991],{"class":258},[100,133736,2213],{"class":117},[100,133738,53046],{"class":471},[100,133740,133623],{"class":258},[100,133742,133626],{"class":1836},[100,133744,133745,133747,133749,133751,133753,133755],{"class":102,"line":532},[100,133746,133631],{"class":117},[100,133748,52991],{"class":258},[100,133750,2466],{"class":117},[100,133752,53046],{"class":471},[100,133754,133640],{"class":258},[100,133756,133643],{"class":1836},[100,133758,133759],{"class":102,"line":577},[100,133760,3197],{"class":258},[2773,133762,133763,133766],{},[29,133764,133765],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[29,133767,133768],{},"静态定位在布局时我们几乎不用的",[19,133770,133771],{},"（2）相对定位",[2773,133773,133774,133781],{},[29,133775,133776,133777,133780],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[1921,133778,133779],{},"原来的位置"," 来说的（自恋型）",[29,133782,6779],{},[73,133784,133785],{"className":127794,"code":133587,"language":127796,"meta":79,"style":79},[32,133786,133787,133793,133805,133819,133833],{"__ignoreMap":79},[100,133788,133789,133791],{"class":102,"line":103},[100,133790,131642],{"class":106},[100,133792,17153],{"class":258},[100,133794,133795,133797,133799,133801,133803],{"class":102,"line":188},[100,133796,133600],{"class":117},[100,133798,52991],{"class":258},[100,133800,56318],{"class":117},[100,133802,131657],{"class":258},[100,133804,133609],{"class":1836},[100,133806,133807,133809,133811,133813,133815,133817],{"class":102,"line":199},[100,133808,133614],{"class":117},[100,133810,52991],{"class":258},[100,133812,2213],{"class":117},[100,133814,53046],{"class":471},[100,133816,133623],{"class":258},[100,133818,133626],{"class":1836},[100,133820,133821,133823,133825,133827,133829,133831],{"class":102,"line":532},[100,133822,133631],{"class":117},[100,133824,52991],{"class":258},[100,133826,2466],{"class":117},[100,133828,53046],{"class":471},[100,133830,133640],{"class":258},[100,133832,133643],{"class":1836},[100,133834,133835],{"class":102,"line":577},[100,133836,3197],{"class":258},[2773,133838,133839],{},[29,133840,133841,133842,133844,133845,133847,133848,133851,133852,133855,133856,133858,133859,133862],{},"相对定位的特点：",[55270,133843],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[55270,133846],{},"  ② ",[1921,133849,133850],{},"原来"," 在标准流的 ",[1921,133853,133854],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[55270,133857],{},"  ③因此， ",[1921,133860,133861],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,133864,133865],{},"（3）绝对定位",[2773,133867,133868,133877],{},[29,133869,133870,133872,133873,133876],{},[1921,133871,133681],{}," 是元素在移动位置的时候，是相对于它 ",[1921,133874,133875],{},"祖先元素"," 来说的（拼爹型）",[29,133878,6779],{},[73,133880,133881],{"className":127794,"code":133587,"language":127796,"meta":79,"style":79},[32,133882,133883,133889,133901,133915,133929],{"__ignoreMap":79},[100,133884,133885,133887],{"class":102,"line":103},[100,133886,131642],{"class":106},[100,133888,17153],{"class":258},[100,133890,133891,133893,133895,133897,133899],{"class":102,"line":188},[100,133892,133600],{"class":117},[100,133894,52991],{"class":258},[100,133896,56318],{"class":117},[100,133898,131657],{"class":258},[100,133900,133609],{"class":1836},[100,133902,133903,133905,133907,133909,133911,133913],{"class":102,"line":199},[100,133904,133614],{"class":117},[100,133906,52991],{"class":258},[100,133908,2213],{"class":117},[100,133910,53046],{"class":471},[100,133912,133623],{"class":258},[100,133914,133626],{"class":1836},[100,133916,133917,133919,133921,133923,133925,133927],{"class":102,"line":532},[100,133918,133631],{"class":117},[100,133920,52991],{"class":258},[100,133922,2466],{"class":117},[100,133924,53046],{"class":471},[100,133926,133640],{"class":258},[100,133928,133643],{"class":1836},[100,133930,133931],{"class":102,"line":577},[100,133932,3197],{"class":258},[2773,133934,133935,133950,133959,133962],{},[29,133936,133937,133938,133940,133941,133943,133944,133946,133947,133949],{},"绝对定位的特点：",[55270,133939],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[55270,133942],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[55270,133945],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[55270,133948],{},"  (4)固定定位",[29,133951,133952,133954,133955,133958],{},[1921,133953,133688],{}," 是元素 ",[1921,133956,133957],{},"固定于浏览器可视区的位置"," 。（认死理型）",[29,133960,133961],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[29,133963,133964],{},"语法:",[73,133966,133967],{"className":127794,"code":133587,"language":127796,"meta":79,"style":79},[32,133968,133969,133975,133987,134001,134015],{"__ignoreMap":79},[100,133970,133971,133973],{"class":102,"line":103},[100,133972,131642],{"class":106},[100,133974,17153],{"class":258},[100,133976,133977,133979,133981,133983,133985],{"class":102,"line":188},[100,133978,133600],{"class":117},[100,133980,52991],{"class":258},[100,133982,56318],{"class":117},[100,133984,131657],{"class":258},[100,133986,133609],{"class":1836},[100,133988,133989,133991,133993,133995,133997,133999],{"class":102,"line":199},[100,133990,133614],{"class":117},[100,133992,52991],{"class":258},[100,133994,2213],{"class":117},[100,133996,53046],{"class":471},[100,133998,133623],{"class":258},[100,134000,133626],{"class":1836},[100,134002,134003,134005,134007,134009,134011,134013],{"class":102,"line":532},[100,134004,133631],{"class":117},[100,134006,52991],{"class":258},[100,134008,2466],{"class":117},[100,134010,53046],{"class":471},[100,134012,133640],{"class":258},[100,134014,133643],{"class":1836},[100,134016,134017],{"class":102,"line":577},[100,134018,3197],{"class":258},[2773,134020,134021,134030],{},[29,134022,134023,134024,134026,134027,134029],{},"特点:",[55270,134025],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[55270,134028],{},"  ②固定定位不再占有原先的位置,完全脱标",[29,134031,134032,134033,134035,134036,134038,134039,134041],{},"固定在版心位置的方法:",[55270,134034],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[55270,134037],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[55270,134040],{},"  实例：",[73,134043,134044],{"className":127794,"code":133587,"language":127796,"meta":79,"style":79},[32,134045,134046,134052,134064,134078,134092],{"__ignoreMap":79},[100,134047,134048,134050],{"class":102,"line":103},[100,134049,131642],{"class":106},[100,134051,17153],{"class":258},[100,134053,134054,134056,134058,134060,134062],{"class":102,"line":188},[100,134055,133600],{"class":117},[100,134057,52991],{"class":258},[100,134059,56318],{"class":117},[100,134061,131657],{"class":258},[100,134063,133609],{"class":1836},[100,134065,134066,134068,134070,134072,134074,134076],{"class":102,"line":199},[100,134067,133614],{"class":117},[100,134069,52991],{"class":258},[100,134071,2213],{"class":117},[100,134073,53046],{"class":471},[100,134075,133623],{"class":258},[100,134077,133626],{"class":1836},[100,134079,134080,134082,134084,134086,134088,134090],{"class":102,"line":532},[100,134081,133631],{"class":117},[100,134083,52991],{"class":258},[100,134085,2466],{"class":117},[100,134087,53046],{"class":471},[100,134089,133640],{"class":258},[100,134091,133643],{"class":1836},[100,134093,134094],{"class":102,"line":577},[100,134095,3197],{"class":258},[3095,134097],{"style":127650,"src":134098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,134100,134101],{},"(5)粘性定位",[2773,134103,134104,134107],{},[29,134105,134106],{},"粘性定位可以被认为是相对定位和固定定位的混合",[29,134108,6779],{},[73,134110,134111],{"className":127794,"code":133587,"language":127796,"meta":79,"style":79},[32,134112,134113,134119,134131,134145,134159],{"__ignoreMap":79},[100,134114,134115,134117],{"class":102,"line":103},[100,134116,131642],{"class":106},[100,134118,17153],{"class":258},[100,134120,134121,134123,134125,134127,134129],{"class":102,"line":188},[100,134122,133600],{"class":117},[100,134124,52991],{"class":258},[100,134126,56318],{"class":117},[100,134128,131657],{"class":258},[100,134130,133609],{"class":1836},[100,134132,134133,134135,134137,134139,134141,134143],{"class":102,"line":199},[100,134134,133614],{"class":117},[100,134136,52991],{"class":258},[100,134138,2213],{"class":117},[100,134140,53046],{"class":471},[100,134142,133623],{"class":258},[100,134144,133626],{"class":1836},[100,134146,134147,134149,134151,134153,134155,134157],{"class":102,"line":532},[100,134148,133631],{"class":117},[100,134150,52991],{"class":258},[100,134152,2466],{"class":117},[100,134154,53046],{"class":471},[100,134156,133640],{"class":258},[100,134158,133643],{"class":1836},[100,134160,134161],{"class":102,"line":577},[100,134162,3197],{"class":258},[2773,134164,134165],{},[29,134166,134167,134168,134170,134171,134173,134174,134176,134177,134180,134181,134183],{},"粘性定位的特点：",[55270,134169],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[55270,134172],{},"  ②粘性定位占有原先的位置（相对定位特点）",[55270,134175],{},"  ③必须添加 top 、left、right、bottom ",[1921,134178,134179],{},"其中一个"," 才有效",[55270,134182],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[73,134185,134186],{"className":127794,"code":133587,"language":127796,"meta":79,"style":79},[32,134187,134188,134194,134206,134220,134234],{"__ignoreMap":79},[100,134189,134190,134192],{"class":102,"line":103},[100,134191,131642],{"class":106},[100,134193,17153],{"class":258},[100,134195,134196,134198,134200,134202,134204],{"class":102,"line":188},[100,134197,133600],{"class":117},[100,134199,52991],{"class":258},[100,134201,56318],{"class":117},[100,134203,131657],{"class":258},[100,134205,133609],{"class":1836},[100,134207,134208,134210,134212,134214,134216,134218],{"class":102,"line":199},[100,134209,133614],{"class":117},[100,134211,52991],{"class":258},[100,134213,2213],{"class":117},[100,134215,53046],{"class":471},[100,134217,133623],{"class":258},[100,134219,133626],{"class":1836},[100,134221,134222,134224,134226,134228,134230,134232],{"class":102,"line":532},[100,134223,133631],{"class":117},[100,134225,52991],{"class":258},[100,134227,2466],{"class":117},[100,134229,53046],{"class":471},[100,134231,133640],{"class":258},[100,134233,133643],{"class":1836},[100,134235,134236],{"class":102,"line":577},[100,134237,3197],{"class":258},[3095,134239],{"style":127650,"src":134240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,134242,134243],{},"(6)总结",[319,134245,134246,134261],{},[322,134247,134248],{},[325,134249,134250,134252,134255,134258],{},[328,134251,133584],{"align":330},[328,134253,134254],{"align":330},"是否脱标",[328,134256,134257],{"align":330},"移动位置",[328,134259,134260],{"align":330},"是否常用",[339,134262,134263,134276,134290,134304,134317],{},[325,134264,134265,134268,134270,134273],{},[344,134266,134267],{"align":330},"Static 静态定位",[344,134269,441],{"align":330},[344,134271,134272],{"align":330},"不能使用边偏移",[344,134274,134275],{"align":330},"很少",[325,134277,134278,134281,134284,134287],{},[344,134279,134280],{"align":330},"Relative 相对定位",[344,134282,134283],{"align":330},"否(占有位置)",[344,134285,134286],{"align":330},"相对于自身位置移动",[344,134288,134289],{"align":330},"基本单独使用",[325,134291,134292,134295,134298,134301],{},[344,134293,134294],{"align":330},"Absolute 绝对定位",[344,134296,134297],{"align":330},"是(不占有位置)",[344,134299,134300],{"align":330},"带有定位的父级",[344,134302,134303],{"align":330},"要和定位父级元素搭配使用",[325,134305,134306,134309,134311,134314],{},[344,134307,134308],{"align":330},"Fixed 固定定位",[344,134310,134297],{"align":330},[344,134312,134313],{"align":330},"浏览器可视区",[344,134315,134316],{"align":330},"单独使用,不需要父级",[325,134318,134319,134322,134324,134326],{},[344,134320,134321],{"align":330},"Sticky 粘性定位",[344,134323,134283],{"align":330},[344,134325,134313],{"align":330},[344,134327,134328],{"align":330},"当前阶段少",[26,134330,134331],{"start":188},[29,134332,134333,134336],{},[1921,134334,134335],{},"边偏移"," 则决定了该元素的最终位置",[319,134338,134339,134350],{},[322,134340,134341],{},[325,134342,134343,134346,134348],{},[328,134344,134345],{"align":330},"边偏移属性",[328,134347,29064],{"align":330},[328,134349,29061],{"align":330},[339,134351,134352,134363,134374,134384],{},[325,134353,134354,134357,134360],{},[344,134355,134356],{"align":330},"top",[344,134358,134359],{"align":330},"top: 80px;",[344,134361,134362],{"align":330},"顶端偏移量，定义元素相对于父元素上边线的距离",[325,134364,134365,134368,134371],{},[344,134366,134367],{"align":330},"bottom",[344,134369,134370],{"align":330},"bottom: 80px ;",[344,134372,134373],{"align":330},"底部偏移量，定义元素相对于其父元素下边线的距离",[325,134375,134376,134378,134381],{},[344,134377,330],{"align":330},[344,134379,134380],{"align":330},"left: 80px ;",[344,134382,134383],{"align":330},"左侧偏移量，定义元素相对于其父元素左边线的距离",[325,134385,134386,134388,134391],{},[344,134387,74076],{"align":330},[344,134389,134390],{"align":330},"right: 80px ;",[344,134392,134393],{"align":330},"右侧偏移量，定义元素相对于其父元素右边线的距离",[2773,134395,134396],{},[29,134397,381,134398,134400,134401,134403,134404,134406,134407,134410,134411,134413,134414,134416],{},[55270,134399],{},"  ① ",[1921,134402,134335],{}," 需要和 ",[1921,134405,133584],{}," 联合使用， ",[1921,134408,134409],{},"单独使用无效"," ；",[55270,134412],{},"  ②top和bottom不要同时使用",[55270,134415],{},"  ③left和right不要同时使用",[23579,134418,134420],{"id":134419},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,134422,134423],{},"子级是绝对定位的话，父级要用相对定位",[2773,134425,134426,134429,134432,134435],{},[29,134427,134428],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[29,134430,134431],{},"父盒子需要加定位限制子盒子在父盒子内显示",[29,134433,134434],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[29,134436,134437,134438,134441],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[1921,134439,134440],{},"子绝父绝"," 也会遇到",[23579,134443,134445],{"id":134444},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[2773,134447,134448,134463],{},[29,134449,134450,134451,134454,134455,134458,134459,134462],{},"在使用 ",[1921,134452,134453],{},"定位"," 布局时，可能会 ",[1921,134456,134457],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[1921,134460,134461],{},"z-index"," 来控制盒子的前后次序 (z轴)",[29,134464,6779],{},[73,134466,134467],{"className":127794,"code":133587,"language":127796,"meta":79,"style":79},[32,134468,134469,134475,134487,134501,134515],{"__ignoreMap":79},[100,134470,134471,134473],{"class":102,"line":103},[100,134472,131642],{"class":106},[100,134474,17153],{"class":258},[100,134476,134477,134479,134481,134483,134485],{"class":102,"line":188},[100,134478,133600],{"class":117},[100,134480,52991],{"class":258},[100,134482,56318],{"class":117},[100,134484,131657],{"class":258},[100,134486,133609],{"class":1836},[100,134488,134489,134491,134493,134495,134497,134499],{"class":102,"line":199},[100,134490,133614],{"class":117},[100,134492,52991],{"class":258},[100,134494,2213],{"class":117},[100,134496,53046],{"class":471},[100,134498,133623],{"class":258},[100,134500,133626],{"class":1836},[100,134502,134503,134505,134507,134509,134511,134513],{"class":102,"line":532},[100,134504,133631],{"class":117},[100,134506,52991],{"class":258},[100,134508,2466],{"class":117},[100,134510,53046],{"class":471},[100,134512,133640],{"class":258},[100,134514,133643],{"class":1836},[100,134516,134517],{"class":102,"line":577},[100,134518,3197],{"class":258},[2773,134520,134521],{},[29,134522,134523,134524,134400,134526,134528,134529,128957,134532,288,134535,134537,134538,134540,134541,134544,134545,134410,134548,134550,134551,134554,134556],{},"z-index的特性",[55270,134525],{},[1921,134527,128258],{}," ： ",[1921,134530,134531],{},"正整数",[1921,134533,134534],{},"负整数",[1921,134536,1366],{}," ，默认值是 0，数值越大，盒子越靠上；",[55270,134539],{},"  ②如果 ",[1921,134542,134543],{},"属性值相同"," ，则按照书写顺序， ",[1921,134546,134547],{},"后来居上",[55270,134549],{},"  ③数字后面 ",[1921,134552,134553],{},"不能加单位",[55270,134555],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[23579,134558,134560],{"id":134559},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,134562,134563],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,134565,134566],{},"方法:",[2773,134568,134569,134579],{},[29,134570,134571,134572,134575,134576],{},"left: 50%; 让 ",[1921,134573,134574],{},"盒子的左侧"," 移动到 ",[1921,134577,134578],{},"父级元素的水平中心位置",[29,134580,134581,134582,134585,134586],{},"margin-left: -100px; 让盒子 ",[1921,134583,134584],{},"向左"," 移动 ",[1921,134587,134588],{},"自身宽度的一半",[23579,134590,134592],{"id":134591},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[26,134594,134595,134598],{},[29,134596,134597],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[29,134599,134600],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,134602,134603],{},"也就是说绝对定位和固定定位和浮动类似",[26,134605,134606],{"start":199},[29,134607,134608],{},"display 是显示模式， 可以改变显示模式有以下方式:",[2773,134610,134611,134614,134617],{},[29,134612,134613],{},"可以用inline-block 转换为行内块",[29,134615,134616],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[29,134618,134619],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,134621,134622],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[23579,134624,134626],{"id":134625},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[26,134628,134629,134632,134635,134638],{},[29,134630,134631],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[29,134633,134634],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[29,134636,134637],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[29,134639,134640],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[73,134642,134643],{"className":127794,"code":132260,"language":127796,"meta":79,"style":79},[32,134644,134645,134651,134661,134665,134671,134681],{"__ignoreMap":79},[100,134646,134647,134649],{"class":102,"line":103},[100,134648,132267],{"class":106},[100,134650,17153],{"class":258},[100,134652,134653,134655,134657,134659],{"class":102,"line":188},[100,134654,132274],{"class":117},[100,134656,52991],{"class":258},[100,134658,330],{"class":117},[100,134660,2927],{"class":258},[100,134662,134663],{"class":102,"line":199},[100,134664,3197],{"class":258},[100,134666,134667,134669],{"class":102,"line":532},[100,134668,132289],{"class":106},[100,134670,17153],{"class":258},[100,134672,134673,134675,134677,134679],{"class":102,"line":577},[100,134674,132274],{"class":117},[100,134676,52991],{"class":258},[100,134678,74076],{"class":117},[100,134680,2927],{"class":258},[100,134682,134683],{"class":102,"line":589},[100,134684,3197],{"class":258},[3095,134686],{"style":127650,"src":134687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[23579,134689,134691],{"id":134690},"_11138-轮播图","11.1.3.8 轮播图",[3095,134693],{"style":127650,"src":134694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[26,134696,134697],{},[29,134698,134699],{},"制作顺序:",[2773,134701,134702,134705,134708,134717],{},[29,134703,134704],{},"大盒子我们类名为： tb-promo 淘宝广告",[29,134706,134707],{},"里面先放一张图片",[29,134709,134710,134711,134713,134714,134716],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[55270,134712],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[55270,134715],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[29,134718,134719,134720,134722,134723,134725],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[55270,134721],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[55270,134724],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[26,134727,134728],{"start":188},[29,134729,134730],{},"代码模块",[73,134732,134734],{"className":127794,"code":134733,"language":127796,"meta":79,"style":79},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n.son {\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n\u002F* 父元素需要加 relative（子绝父相） *\u002F\n.father {\n  position: relative;\n}\n",[32,134735,134736,134741,134748,134758,134768,134778,134782,134787,134794,134804],{"__ignoreMap":79},[100,134737,134738],{"class":102,"line":103},[100,134739,134740],{"class":1836},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[100,134742,134743,134746],{"class":102,"line":188},[100,134744,134745],{"class":106},".son",[100,134747,17153],{"class":258},[100,134749,134750,134752,134754,134756],{"class":102,"line":199},[100,134751,133600],{"class":117},[100,134753,52991],{"class":258},[100,134755,56385],{"class":117},[100,134757,2927],{"class":258},[100,134759,134760,134762,134764,134766],{"class":102,"line":532},[100,134761,133614],{"class":117},[100,134763,52991],{"class":258},[100,134765,1366],{"class":117},[100,134767,2927],{"class":258},[100,134769,134770,134772,134774,134776],{"class":102,"line":577},[100,134771,133631],{"class":117},[100,134773,52991],{"class":258},[100,134775,1366],{"class":117},[100,134777,2927],{"class":258},[100,134779,134780],{"class":102,"line":589},[100,134781,3197],{"class":258},[100,134783,134784],{"class":102,"line":595},[100,134785,134786],{"class":1836},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[100,134788,134789,134792],{"class":102,"line":601},[100,134790,134791],{"class":106},".father",[100,134793,17153],{"class":258},[100,134795,134796,134798,134800,134802],{"class":102,"line":606},[100,134797,133600],{"class":117},[100,134799,52991],{"class":258},[100,134801,56318],{"class":117},[100,134803,2927],{"class":258},[100,134805,134806],{"class":102,"line":612},[100,134807,3197],{"class":258},[19,134809,134810],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[305,134812,134814],{"id":134813},"_1114-定位数值的移动","11.1.4 定位数值的移动",[3095,134816],{"style":127650,"src":134817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,134819,134820],{},"✨ 黄金口诀：",[19,134822,134823],{},"\"TOP正下负上，LEFT正右负左\"",[19,134825,134826],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,134828,134829],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,134831,134832],{},"✨ 简单记：",[19,134834,134835],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[1677,134837,134838],{},"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":79,"searchDepth":188,"depth":188,"links":134840},[134841],{"id":133368,"depth":188,"text":133369,"children":134842},[134843,134844,134845,134846],{"id":133372,"depth":199,"text":133373},{"id":133387,"depth":199,"text":133388},{"id":133555,"depth":199,"text":133556},{"id":134813,"depth":199,"text":134814},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":133360,"description":24958},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":134853,"title":134854,"body":134855,"description":24958,"extension":1708,"meta":136278,"navigation":569,"path":136279,"seo":136280,"stem":136281,"__hash__":136282},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":134856,"toc":136257},[134857,134860,134864,134872,134876,134881,134889,134901,134905,134910,134918,134929,134933,134938,134979,134987,134991,134994,134997,135000,135094,135097,135191,135194,135288,135291,135294,135329,135332,135335,135365,135368,135371,135374,135377,135380,135383,135386,135456,135459,135463,135467,135508,135512,135518,135521,135524,135528,135531,135534,135537,135618,135621,135624,135628,135632,135635,135638,135641,135644,135647,135653,135662,135666,135685,135689,135699,135702,135705,135708,135711,135714,135717,135720,135723,135732,135736,135745,135748,135753,135806,135811,135977,135980,135983,135988,135991,135994,135997,136000,136005,136153,136156,136159,136164,136167,136172,136206,136209,136212,136216,136219,136226,136229,136232,136235,136238,136241,136244,136247,136251,136254],[10,134858,134854],{"id":134859},"_12-显示隐藏与图形资源",[14,134861,134863],{"id":134862},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[2773,134865,134866,134869],{},[29,134867,134868],{},"目的:让一个元素在页面中消失或者显示出来",[29,134870,134871],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[305,134873,134875],{"id":134874},"_1211-display-显示","12.1.1 display 显示",[26,134877,134878],{},[29,134879,134880],{},"display 设置或检索对象是否及如何显示",[2773,134882,134883,134886],{},[29,134884,134885],{},"display: none;隐藏对象",[29,134887,134888],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[26,134890,134891,134898],{"start":188},[29,134892,134893,134894,134897],{},"特点： display 隐藏元素后， ",[1921,134895,134896],{},"不再占"," 有原来的位置",[29,134899,134900],{},"在js中使用非常的广泛",[305,134902,134904],{"id":134903},"_1212-visibility可见性","12.1.2 visibility可见性",[26,134906,134907],{},[29,134908,134909],{},"visibility 属性用于指定一个元素应可见还是隐藏",[2773,134911,134912,134915],{},[29,134913,134914],{},"visibility： visible；元素可见",[29,134916,134917],{},"visibility：hidden；元素隐藏",[26,134919,134920,134923,134926],{"start":188},[29,134921,134922],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[29,134924,134925],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[29,134927,134928],{},"隐藏后继续占有原有位置",[305,134930,134932],{"id":134931},"_1213-overflow溢出","12.1.3 overflow溢出",[2773,134934,134935],{},[29,134936,134937],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[319,134939,134940,134948],{},[322,134941,134942],{},[325,134943,134944,134946],{},[328,134945,128258],{"align":330},[328,134947,29061],{"align":330},[339,134949,134950,134958,134965,134972],{},[325,134951,134952,134955],{},[344,134953,134954],{"align":330},"visible",[344,134956,134957],{"align":330},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[325,134959,134960,134962],{},[344,134961,63268],{"align":330},[344,134963,134964],{"align":330},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[325,134966,134967,134969],{},[344,134968,130214],{"align":330},[344,134970,134971],{"align":330},"不管超出内容否，总是显示滚动条",[325,134973,134974,134976],{},[344,134975,74217],{"align":330},[344,134977,134978],{"align":330},"超出自动显示滚动条，不超出不显示滚动条",[2773,134980,134981,134984],{},[29,134982,134983],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[29,134985,134986],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[305,134988,134990],{"id":134989},"_1214-案例收获","12.1.4 案例收获",[3095,134992],{"style":127650,"src":134993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,134995,134996],{},"问题：没做出来动态效果，使用hover没实现",[19,134998,134999],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[73,135001,135002],{"className":127794,"code":133226,"language":127796,"meta":79,"style":79},[32,135003,135004,135008,135022,135026,135040,135044,135058,135062,135076,135080],{"__ignoreMap":79},[100,135005,135006],{"class":102,"line":103},[100,135007,133233],{"class":1836},[100,135009,135010,135012,135014,135016,135018,135020],{"class":102,"line":188},[100,135011,133238],{"class":106},[100,135013,81361],{"class":258},[100,135015,130154],{"class":117},[100,135017,52991],{"class":258},[100,135019,133247],{"class":117},[100,135021,130724],{"class":258},[100,135023,135024],{"class":102,"line":199},[100,135025,133254],{"class":1836},[100,135027,135028,135030,135032,135034,135036,135038],{"class":102,"line":532},[100,135029,133259],{"class":106},[100,135031,81361],{"class":258},[100,135033,130154],{"class":117},[100,135035,52991],{"class":258},[100,135037,56318],{"class":117},[100,135039,130724],{"class":258},[100,135041,135042],{"class":102,"line":577},[100,135043,133274],{"class":1836},[100,135045,135046,135048,135050,135052,135054,135056],{"class":102,"line":589},[100,135047,133279],{"class":106},[100,135049,81361],{"class":258},[100,135051,130154],{"class":117},[100,135053,52991],{"class":258},[100,135055,56385],{"class":117},[100,135057,130724],{"class":258},[100,135059,135060],{"class":102,"line":595},[100,135061,133294],{"class":1836},[100,135063,135064,135066,135068,135070,135072,135074],{"class":102,"line":601},[100,135065,133299],{"class":106},[100,135067,81361],{"class":258},[100,135069,130154],{"class":117},[100,135071,52991],{"class":258},[100,135073,87785],{"class":117},[100,135075,130724],{"class":258},[100,135077,135078],{"class":102,"line":606},[100,135079,133314],{"class":1836},[100,135081,135082,135084,135086,135088,135090,135092],{"class":102,"line":612},[100,135083,133319],{"class":106},[100,135085,81361],{"class":258},[100,135087,130154],{"class":117},[100,135089,52991],{"class":258},[100,135091,133328],{"class":117},[100,135093,130724],{"class":258},[19,135095,135096],{},"完整代码：",[73,135098,135099],{"className":127794,"code":133226,"language":127796,"meta":79,"style":79},[32,135100,135101,135105,135119,135123,135137,135141,135155,135159,135173,135177],{"__ignoreMap":79},[100,135102,135103],{"class":102,"line":103},[100,135104,133233],{"class":1836},[100,135106,135107,135109,135111,135113,135115,135117],{"class":102,"line":188},[100,135108,133238],{"class":106},[100,135110,81361],{"class":258},[100,135112,130154],{"class":117},[100,135114,52991],{"class":258},[100,135116,133247],{"class":117},[100,135118,130724],{"class":258},[100,135120,135121],{"class":102,"line":199},[100,135122,133254],{"class":1836},[100,135124,135125,135127,135129,135131,135133,135135],{"class":102,"line":532},[100,135126,133259],{"class":106},[100,135128,81361],{"class":258},[100,135130,130154],{"class":117},[100,135132,52991],{"class":258},[100,135134,56318],{"class":117},[100,135136,130724],{"class":258},[100,135138,135139],{"class":102,"line":577},[100,135140,133274],{"class":1836},[100,135142,135143,135145,135147,135149,135151,135153],{"class":102,"line":589},[100,135144,133279],{"class":106},[100,135146,81361],{"class":258},[100,135148,130154],{"class":117},[100,135150,52991],{"class":258},[100,135152,56385],{"class":117},[100,135154,130724],{"class":258},[100,135156,135157],{"class":102,"line":595},[100,135158,133294],{"class":1836},[100,135160,135161,135163,135165,135167,135169,135171],{"class":102,"line":601},[100,135162,133299],{"class":106},[100,135164,81361],{"class":258},[100,135166,130154],{"class":117},[100,135168,52991],{"class":258},[100,135170,87785],{"class":117},[100,135172,130724],{"class":258},[100,135174,135175],{"class":102,"line":606},[100,135176,133314],{"class":1836},[100,135178,135179,135181,135183,135185,135187,135189],{"class":102,"line":612},[100,135180,133319],{"class":106},[100,135182,81361],{"class":258},[100,135184,130154],{"class":117},[100,135186,52991],{"class":258},[100,135188,133328],{"class":117},[100,135190,130724],{"class":258},[19,135192,135193],{},"分布思路重点详解：",[73,135195,135196],{"className":127794,"code":133226,"language":127796,"meta":79,"style":79},[32,135197,135198,135202,135216,135220,135234,135238,135252,135256,135270,135274],{"__ignoreMap":79},[100,135199,135200],{"class":102,"line":103},[100,135201,133233],{"class":1836},[100,135203,135204,135206,135208,135210,135212,135214],{"class":102,"line":188},[100,135205,133238],{"class":106},[100,135207,81361],{"class":258},[100,135209,130154],{"class":117},[100,135211,52991],{"class":258},[100,135213,133247],{"class":117},[100,135215,130724],{"class":258},[100,135217,135218],{"class":102,"line":199},[100,135219,133254],{"class":1836},[100,135221,135222,135224,135226,135228,135230,135232],{"class":102,"line":532},[100,135223,133259],{"class":106},[100,135225,81361],{"class":258},[100,135227,130154],{"class":117},[100,135229,52991],{"class":258},[100,135231,56318],{"class":117},[100,135233,130724],{"class":258},[100,135235,135236],{"class":102,"line":577},[100,135237,133274],{"class":1836},[100,135239,135240,135242,135244,135246,135248,135250],{"class":102,"line":589},[100,135241,133279],{"class":106},[100,135243,81361],{"class":258},[100,135245,130154],{"class":117},[100,135247,52991],{"class":258},[100,135249,56385],{"class":117},[100,135251,130724],{"class":258},[100,135253,135254],{"class":102,"line":595},[100,135255,133294],{"class":1836},[100,135257,135258,135260,135262,135264,135266,135268],{"class":102,"line":601},[100,135259,133299],{"class":106},[100,135261,81361],{"class":258},[100,135263,130154],{"class":117},[100,135265,52991],{"class":258},[100,135267,87785],{"class":117},[100,135269,130724],{"class":258},[100,135271,135272],{"class":102,"line":606},[100,135273,133314],{"class":1836},[100,135275,135276,135278,135280,135282,135284,135286],{"class":102,"line":612},[100,135277,133319],{"class":106},[100,135279,81361],{"class":258},[100,135281,130154],{"class":117},[100,135283,52991],{"class":258},[100,135285,133328],{"class":117},[100,135287,130724],{"class":258},[3095,135289],{"style":127650,"src":135290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,135292,135293],{},"图片太大，盒子太小，此时需要修改图片的大小",[73,135295,135297],{"className":128541,"code":135296,"language":128543,"meta":79,"style":79},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[32,135298,135299],{"__ignoreMap":79},[100,135300,135301,135303,135305,135307,135309,135312,135314,135316,135319,135322,135324,135327],{"class":102,"line":103},[100,135302,2676],{"class":258},[100,135304,3095],{"class":52854},[100,135306,56793],{"class":106},[100,135308,472],{"class":258},[100,135310,135311],{"class":110},"\"images\u002Fpic.jpg\"",[100,135313,56801],{"class":106},[100,135315,472],{"class":258},[100,135317,135318],{"class":110},"\"描述文字\"",[100,135320,135321],{"class":106}," title",[100,135323,472],{"class":258},[100,135325,135326],{"class":110},"\"悬停提示\"",[100,135328,52861],{"class":258},[3095,135330],{"style":127650,"src":135331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,135333,135334],{},"制造遮罩层",[73,135336,135337],{"className":128541,"code":135296,"language":128543,"meta":79,"style":79},[32,135338,135339],{"__ignoreMap":79},[100,135340,135341,135343,135345,135347,135349,135351,135353,135355,135357,135359,135361,135363],{"class":102,"line":103},[100,135342,2676],{"class":258},[100,135344,3095],{"class":52854},[100,135346,56793],{"class":106},[100,135348,472],{"class":258},[100,135350,135311],{"class":110},[100,135352,56801],{"class":106},[100,135354,472],{"class":258},[100,135356,135318],{"class":110},[100,135358,135321],{"class":106},[100,135360,472],{"class":258},[100,135362,135326],{"class":110},[100,135364,52861],{"class":258},[19,135366,135367],{},"此时是这样的为标准流",[3095,135369],{"style":127650,"src":135370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,135372,135373],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,135375,135376],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,135378,135379],{},"让他在中间，用center(background-position)",[19,135381,135382],{},"将需要变的尽可能放到一个盒子中",[19,135384,135385],{},"放大盒子上内部盒子发生变化",[73,135387,135389],{"className":127794,"code":135388,"language":127796,"meta":79,"style":79},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[32,135390,135391,135397,135407,135411,135418,135428,135440,135452],{"__ignoreMap":79},[100,135392,135393,135395],{"class":102,"line":103},[100,135394,128861],{"class":106},[100,135396,17153],{"class":258},[100,135398,135399,135401,135403,135405],{"class":102,"line":188},[100,135400,133600],{"class":117},[100,135402,52991],{"class":258},[100,135404,56318],{"class":117},[100,135406,2927],{"class":258},[100,135408,135409],{"class":102,"line":199},[100,135410,3197],{"class":258},[100,135412,135413,135416],{"class":102,"line":532},[100,135414,135415],{"class":106},".child",[100,135417,17153],{"class":258},[100,135419,135420,135422,135424,135426],{"class":102,"line":577},[100,135421,133600],{"class":117},[100,135423,52991],{"class":258},[100,135425,56385],{"class":117},[100,135427,2927],{"class":258},[100,135429,135430,135432,135434,135436,135438],{"class":102,"line":589},[100,135431,133614],{"class":117},[100,135433,52991],{"class":258},[100,135435,862],{"class":117},[100,135437,2095],{"class":471},[100,135439,2927],{"class":258},[100,135441,135442,135444,135446,135448,135450],{"class":102,"line":595},[100,135443,133631],{"class":117},[100,135445,52991],{"class":258},[100,135447,862],{"class":117},[100,135449,2095],{"class":471},[100,135451,2927],{"class":258},[100,135453,135454],{"class":102,"line":601},[100,135455,3197],{"class":258},[19,135457,135458],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,135460,135462],{"id":135461},"_122-精灵图","12.2 精灵图",[305,135464,135466],{"id":135465},"_1221-理解","12.2.1 理解",[26,135468,135469,135487],{},[29,135470,135471,135472,133700,135475,135478,135479,135482,135483,135486],{},"目的： ",[1921,135473,135474],{},"为了有效地减少服务器接收和发送请求的次数",[1921,135476,135477],{},"提高"," 页面的 ",[1921,135480,135481],{},"加载速度"," ，出现了 ",[1921,135484,135485],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[29,135488,135489,135490,135492,135493,135495,135496,135498,135499,135501,135502,135504,135505,135507],{},"使用精灵图核心：",[55270,135491],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[55270,135494],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[55270,135497],{},"  ③移动背景图片位置， 此时可以使用 background-position",[55270,135500],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[55270,135503],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[55270,135506],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[305,135509,135511],{"id":135510},"_1222-扒图","12.2.2 扒图",[73,135513,135516],{"className":135514,"code":135515,"language":78},[76],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[32,135517,135515],{"__ignoreMap":79},[3095,135519],{"style":127650,"src":135520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[3095,135522],{"style":127650,"src":135523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[305,135525,135527],{"id":135526},"_1223-精灵图的实现","12.2.3 精灵图的实现",[3095,135529],{"style":127650,"src":135530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,135532,135533],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[3095,135535],{"style":127650,"src":135536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[73,135538,135540],{"className":127794,"code":135539,"language":127796,"meta":79,"style":79},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n.icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat;\n  background-position: -10px -20px;\n}\n",[32,135541,135542,135547,135554,135566,135578,135597,135614],{"__ignoreMap":79},[100,135543,135544],{"class":102,"line":103},[100,135545,135546],{"class":1836},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[100,135548,135549,135552],{"class":102,"line":188},[100,135550,135551],{"class":106},".icon",[100,135553,17153],{"class":258},[100,135555,135556,135558,135560,135562,135564],{"class":102,"line":199},[100,135557,72122],{"class":117},[100,135559,52991],{"class":258},[100,135561,2466],{"class":117},[100,135563,53046],{"class":471},[100,135565,2927],{"class":258},[100,135567,135568,135570,135572,135574,135576],{"class":102,"line":532},[100,135569,72342],{"class":117},[100,135571,52991],{"class":258},[100,135573,2466],{"class":117},[100,135575,53046],{"class":471},[100,135577,2927],{"class":258},[100,135579,135580,135582,135584,135586,135588,135591,135593,135595],{"class":102,"line":577},[100,135581,72165],{"class":117},[100,135583,52991],{"class":258},[100,135585,63280],{"class":117},[100,135587,713],{"class":258},[100,135589,135590],{"class":6812},"sprites.png",[100,135592,15295],{"class":258},[100,135594,63290],{"class":117},[100,135596,2927],{"class":258},[100,135598,135599,135601,135603,135605,135607,135610,135612],{"class":102,"line":589},[100,135600,130054],{"class":117},[100,135602,52991],{"class":258},[100,135604,53317],{"class":117},[100,135606,53046],{"class":471},[100,135608,135609],{"class":117}," -20",[100,135611,53046],{"class":471},[100,135613,2927],{"class":258},[100,135615,135616],{"class":102,"line":595},[100,135617,3197],{"class":258},[3095,135619],{"style":127650,"src":135620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,135622,135623],{},"在前端中坐标轴的正方向是右和下",[14,135625,135627],{"id":135626},"_123-字体图标","12.3 字体图标",[305,135629,135631],{"id":135630},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,135633,135634],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,135636,135637],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,135639,135640],{},"1.图片文件还是比较大的。",[19,135642,135643],{},"2.图片本身放大和缩小会失真。",[19,135645,135646],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,135648,135649,135650,27315],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[1921,135651,135652],{},"字体图标 iconfont",[19,135654,135655,135658,135659,233],{},[1921,135656,135657],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[1921,135660,135661],{},"展示的是图标，本质属于字体",[305,135663,135665],{"id":135664},"_1232-字体图标的优点","12.3.2 字体图标的优点",[2773,135667,135668,135673,135676,135679,135682],{},[29,135669,135670,135672],{},[1921,135671,27451],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[29,135674,135675],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[29,135677,135678],{},"兼容性：几乎支持所有的浏览器，请放心使用",[29,135680,135681],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[29,135683,135684],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[305,135686,135688],{"id":135687},"_1233-字体库下载网站","12.3.3 字体库下载网站",[2773,135690,135691],{},[29,135692,135693,135694],{},"icomoon字体库：",[2006,135695,135698],{"href":135696,"rel":135697},"http:\u002F\u002Ficomoon.io\u002F",[25442],"http:\u002F\u002Ficomoon.io",[19,135700,135701],{},"进去之后点icomoon app",[3095,135703],{"style":127650,"src":135704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,135706,135707],{},"可以对其编辑：",[3095,135709],{"style":127650,"src":135710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,135712,135713],{},"生成字体：",[3095,135715],{"style":127650,"src":135716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,135718,135719],{},"下载：",[3095,135721],{"style":127650,"src":135722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[2773,135724,135725],{},[29,135726,135727,135728],{},"阿里iconfont字体库： ",[2006,135729,135730],{"href":135730,"rel":135731},"http:\u002F\u002Fwww.iconfont.cn\u002F",[25442],[305,135733,135735],{"id":135734},"_1234-字体图标的引入","12.3.4 字体图标的引入",[26,135737,135738],{},[29,135739,135740,135741,135744],{},"把下载包里面的 ",[1921,135742,135743],{},"fonts"," 文件夹放入页面根目录下",[3095,135746],{"style":127650,"src":135747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[26,135749,135750],{"start":188},[29,135751,135752],{},"字体文件格式",[319,135754,135755,135764],{},[322,135756,135757],{},[325,135758,135759,135762],{},[328,135760,135761],{"align":330},"格式",[328,135763,25321],{"align":330},[339,135765,135766,135776,135786,135796],{},[325,135767,135768,135773],{},[344,135769,135770],{"align":330},[1921,135771,135772],{},".ttf",[344,135774,135775],{"align":330},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[325,135777,135778,135783],{},[344,135779,135780],{"align":330},[1921,135781,135782],{},".woff",[344,135784,135785],{"align":330},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[325,135787,135788,135793],{},[344,135789,135790],{"align":330},[1921,135791,135792],{},".eot",[344,135794,135795],{"align":330},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[325,135797,135798,135803],{},[344,135799,135800],{"align":330},[1921,135801,135802],{},"svg",[344,135804,135805],{"align":330},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[26,135807,135808],{"start":199},[29,135809,135810],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[73,135812,135814],{"className":127794,"code":135813,"language":127796,"meta":79,"style":79},"\u002F* 引入字体图标 *\u002F\n@font-face {\n  font-family: 'icomoon';\n  src: url('fonts\u002Ficomoon.eot');\n  src: url('fonts\u002Ficomoon.eot?#iefix') format('embedded-opentype'),\n       url('fonts\u002Ficomoon.woff') format('woff'),\n       url('fonts\u002Ficomoon.ttf') format('truetype'),\n       url('fonts\u002Ficomoon.svg#icomoon') format('svg');\n}\n.icon {\n  font-family: 'icomoon';\n  font-style: normal;\n}\n",[32,135815,135816,135821,135828,135840,135856,135881,135902,135922,135942,135946,135952,135962,135973],{"__ignoreMap":79},[100,135817,135818],{"class":102,"line":103},[100,135819,135820],{"class":1836},"\u002F* 引入字体图标 *\u002F\n",[100,135822,135823,135826],{"class":102,"line":188},[100,135824,135825],{"class":471},"@font-face",[100,135827,17153],{"class":258},[100,135829,135830,135833,135835,135838],{"class":102,"line":199},[100,135831,135832],{"class":117},"  font-family",[100,135834,52991],{"class":258},[100,135836,135837],{"class":110},"'icomoon'",[100,135839,2927],{"class":258},[100,135841,135842,135845,135847,135849,135851,135854],{"class":102,"line":532},[100,135843,135844],{"class":117},"  src",[100,135846,52991],{"class":258},[100,135848,63280],{"class":117},[100,135850,713],{"class":258},[100,135852,135853],{"class":110},"'fonts\u002Ficomoon.eot'",[100,135855,4321],{"class":258},[100,135857,135858,135860,135862,135864,135866,135869,135871,135874,135876,135879],{"class":102,"line":577},[100,135859,135844],{"class":117},[100,135861,52991],{"class":258},[100,135863,63280],{"class":117},[100,135865,713],{"class":258},[100,135867,135868],{"class":110},"'fonts\u002Ficomoon.eot?#iefix'",[100,135870,15295],{"class":258},[100,135872,135873],{"class":117},"format",[100,135875,713],{"class":258},[100,135877,135878],{"class":110},"'embedded-opentype'",[100,135880,39601],{"class":258},[100,135882,135883,135886,135888,135891,135893,135895,135897,135900],{"class":102,"line":589},[100,135884,135885],{"class":117},"       url",[100,135887,713],{"class":258},[100,135889,135890],{"class":110},"'fonts\u002Ficomoon.woff'",[100,135892,15295],{"class":258},[100,135894,135873],{"class":117},[100,135896,713],{"class":258},[100,135898,135899],{"class":110},"'woff'",[100,135901,39601],{"class":258},[100,135903,135904,135906,135908,135911,135913,135915,135917,135920],{"class":102,"line":595},[100,135905,135885],{"class":117},[100,135907,713],{"class":258},[100,135909,135910],{"class":110},"'fonts\u002Ficomoon.ttf'",[100,135912,15295],{"class":258},[100,135914,135873],{"class":117},[100,135916,713],{"class":258},[100,135918,135919],{"class":110},"'truetype'",[100,135921,39601],{"class":258},[100,135923,135924,135926,135928,135931,135933,135935,135937,135940],{"class":102,"line":601},[100,135925,135885],{"class":117},[100,135927,713],{"class":258},[100,135929,135930],{"class":110},"'fonts\u002Ficomoon.svg#icomoon'",[100,135932,15295],{"class":258},[100,135934,135873],{"class":117},[100,135936,713],{"class":258},[100,135938,135939],{"class":110},"'svg'",[100,135941,4321],{"class":258},[100,135943,135944],{"class":102,"line":606},[100,135945,3197],{"class":258},[100,135947,135948,135950],{"class":102,"line":612},[100,135949,135551],{"class":106},[100,135951,17153],{"class":258},[100,135953,135954,135956,135958,135960],{"class":102,"line":618},[100,135955,135832],{"class":117},[100,135957,52991],{"class":258},[100,135959,135837],{"class":110},[100,135961,2927],{"class":258},[100,135963,135964,135967,135969,135971],{"class":102,"line":623},[100,135965,135966],{"class":117},"  font-style",[100,135968,52991],{"class":258},[100,135970,65395],{"class":117},[100,135972,2927],{"class":258},[100,135974,135975],{"class":102,"line":629},[100,135976,3197],{"class":258},[19,135978,135979],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[3095,135981],{"style":127650,"src":135982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[26,135984,135985],{"start":532},[29,135986,135987],{},"添加字体",[3095,135989],{"style":127650,"src":135990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,135992,135993],{},"复制：",[3095,135995],{"style":127650,"src":135996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,135998,135999],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[26,136001,136002],{"start":577},[29,136003,136004],{},"代码展示：",[73,136006,136007],{"className":127794,"code":135813,"language":127796,"meta":79,"style":79},[32,136008,136009,136013,136019,136029,136043,136065,136083,136101,136119,136123,136129,136139,136149],{"__ignoreMap":79},[100,136010,136011],{"class":102,"line":103},[100,136012,135820],{"class":1836},[100,136014,136015,136017],{"class":102,"line":188},[100,136016,135825],{"class":471},[100,136018,17153],{"class":258},[100,136020,136021,136023,136025,136027],{"class":102,"line":199},[100,136022,135832],{"class":117},[100,136024,52991],{"class":258},[100,136026,135837],{"class":110},[100,136028,2927],{"class":258},[100,136030,136031,136033,136035,136037,136039,136041],{"class":102,"line":532},[100,136032,135844],{"class":117},[100,136034,52991],{"class":258},[100,136036,63280],{"class":117},[100,136038,713],{"class":258},[100,136040,135853],{"class":110},[100,136042,4321],{"class":258},[100,136044,136045,136047,136049,136051,136053,136055,136057,136059,136061,136063],{"class":102,"line":577},[100,136046,135844],{"class":117},[100,136048,52991],{"class":258},[100,136050,63280],{"class":117},[100,136052,713],{"class":258},[100,136054,135868],{"class":110},[100,136056,15295],{"class":258},[100,136058,135873],{"class":117},[100,136060,713],{"class":258},[100,136062,135878],{"class":110},[100,136064,39601],{"class":258},[100,136066,136067,136069,136071,136073,136075,136077,136079,136081],{"class":102,"line":589},[100,136068,135885],{"class":117},[100,136070,713],{"class":258},[100,136072,135890],{"class":110},[100,136074,15295],{"class":258},[100,136076,135873],{"class":117},[100,136078,713],{"class":258},[100,136080,135899],{"class":110},[100,136082,39601],{"class":258},[100,136084,136085,136087,136089,136091,136093,136095,136097,136099],{"class":102,"line":595},[100,136086,135885],{"class":117},[100,136088,713],{"class":258},[100,136090,135910],{"class":110},[100,136092,15295],{"class":258},[100,136094,135873],{"class":117},[100,136096,713],{"class":258},[100,136098,135919],{"class":110},[100,136100,39601],{"class":258},[100,136102,136103,136105,136107,136109,136111,136113,136115,136117],{"class":102,"line":601},[100,136104,135885],{"class":117},[100,136106,713],{"class":258},[100,136108,135930],{"class":110},[100,136110,15295],{"class":258},[100,136112,135873],{"class":117},[100,136114,713],{"class":258},[100,136116,135939],{"class":110},[100,136118,4321],{"class":258},[100,136120,136121],{"class":102,"line":606},[100,136122,3197],{"class":258},[100,136124,136125,136127],{"class":102,"line":612},[100,136126,135551],{"class":106},[100,136128,17153],{"class":258},[100,136130,136131,136133,136135,136137],{"class":102,"line":618},[100,136132,135832],{"class":117},[100,136134,52991],{"class":258},[100,136136,135837],{"class":110},[100,136138,2927],{"class":258},[100,136140,136141,136143,136145,136147],{"class":102,"line":623},[100,136142,135966],{"class":117},[100,136144,52991],{"class":258},[100,136146,65395],{"class":117},[100,136148,2927],{"class":258},[100,136150,136151],{"class":102,"line":629},[100,136152,3197],{"class":258},[3095,136154],{"style":127650,"src":136155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,136157,136158],{},"更加细节展示：",[26,136160,136161],{},[29,136162,136163],{},"html 标签内添加小图标",[3095,136165],{"style":127650,"src":136166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[26,136168,136169],{"start":188},[29,136170,136171],{},"给标签定义字体",[73,136173,136174],{"className":128541,"code":131898,"language":128543,"meta":79,"style":79},[32,136175,136176,136180,136194,136198],{"__ignoreMap":79},[100,136177,136178],{"class":102,"line":103},[100,136179,131905],{"class":1836},[100,136181,136182,136184,136186,136188,136190,136192],{"class":102,"line":188},[100,136183,2676],{"class":258},[100,136185,53165],{"class":52854},[100,136187,55040],{"class":106},[100,136189,472],{"class":258},[100,136191,131918],{"class":110},[100,136193,52861],{"class":258},[100,136195,136196],{"class":102,"line":199},[100,136197,131925],{"class":258},[100,136199,136200,136202,136204],{"class":102,"line":532},[100,136201,53339],{"class":258},[100,136203,53165],{"class":52854},[100,136205,52861],{"class":258},[19,136207,136208],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[3095,136210],{"style":127650,"src":136211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[305,136213,136215],{"id":136214},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,136217,136218],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,136220,136221,136222,136225],{},"把压缩包里面的 ",[1921,136223,136224],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,136227,136228],{},"打开网站，点下方：",[3095,136230],{"style":127650,"src":136231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[3095,136233],{"style":127650,"src":136234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[3095,136236],{"style":127650,"src":136237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,136239,136240],{},"点yes重新加载",[19,136242,136243],{},"然后重复之前的操作就可以实现了",[19,136245,136246],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[305,136248,136250],{"id":136249},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[3095,136252],{"style":127650,"src":136253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[1677,136255,136256],{},"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":79,"searchDepth":188,"depth":188,"links":136258},[136259,136265,136270],{"id":134862,"depth":188,"text":134863,"children":136260},[136261,136262,136263,136264],{"id":134874,"depth":199,"text":134875},{"id":134903,"depth":199,"text":134904},{"id":134931,"depth":199,"text":134932},{"id":134989,"depth":199,"text":134990},{"id":135461,"depth":188,"text":135462,"children":136266},[136267,136268,136269],{"id":135465,"depth":199,"text":135466},{"id":135510,"depth":199,"text":135511},{"id":135526,"depth":199,"text":135527},{"id":135626,"depth":188,"text":135627,"children":136271},[136272,136273,136274,136275,136276,136277],{"id":135630,"depth":199,"text":135631},{"id":135664,"depth":199,"text":135665},{"id":135687,"depth":199,"text":135688},{"id":135734,"depth":199,"text":135735},{"id":136214,"depth":199,"text":136215},{"id":136249,"depth":199,"text":136250},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":134854,"description":24958},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":136284,"title":136285,"body":136286,"description":24958,"extension":1708,"meta":137513,"navigation":569,"path":137514,"seo":137515,"stem":137516,"__hash__":137517},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":136287,"toc":137494},[136288,136291,136295,136298,136312,136380,136410,136413,136417,136421,136523,136570,136574,136577,136580,136614,136617,136620,136623,136626,136629,136632,136635,136637,136640,136643,136646,136649,136652,136655,136658,136686,136689,136693,136696,136703,136706,136709,136735,136738,136742,136745,136748,136755,136759,136762,136764,136796,136799,136802,136814,136820,136823,136826,136829,136831,136835,136838,136841,136844,136889,136893,136895,136898,136905,136947,136950,136954,136959,136973,136977,136980,136983,136986,136989,136992,137026,137029,137032,137086,137089,137092,137095,137098,137150,137153,137156,137205,137209,137211,137214,137217,137220,137223,137226,137284,137287,137293,137296,137299,137331,137334,137338,137342,137345,137377,137381,137384,137428,137432,137435,137438,137441,137444,137447,137450,137453,137455,137458,137460,137463,137466,137469,137472,137477,137480,137482,137485,137488,137491],[10,136289,136285],{"id":136290},"_13-界面样式与布局技巧",[14,136292,136294],{"id":136293},"_131-css三角","13.1 css三角",[19,136296,136297],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[2773,136299,136300,136303,136306,136309],{},[29,136301,136302],{},"用css 边框可以模拟三角效果",[29,136304,136305],{},"宽度高度为0",[29,136307,136308],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[29,136310,136311],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[73,136313,136315],{"className":127794,"code":136314,"language":127796,"meta":79,"style":79},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[32,136316,136317,136322,136329,136339,136349,136365,136376],{"__ignoreMap":79},[100,136318,136319],{"class":102,"line":103},[100,136320,136321],{"class":1836},"\u002F* CSS 实现三角形 *\u002F\n",[100,136323,136324,136327],{"class":102,"line":188},[100,136325,136326],{"class":106},".triangle",[100,136328,17153],{"class":258},[100,136330,136331,136333,136335,136337],{"class":102,"line":199},[100,136332,72122],{"class":117},[100,136334,52991],{"class":258},[100,136336,1366],{"class":117},[100,136338,2927],{"class":258},[100,136340,136341,136343,136345,136347],{"class":102,"line":532},[100,136342,72342],{"class":117},[100,136344,52991],{"class":258},[100,136346,1366],{"class":117},[100,136348,2927],{"class":258},[100,136350,136351,136353,136355,136357,136359,136361,136363],{"class":102,"line":577},[100,136352,72450],{"class":117},[100,136354,52991],{"class":258},[100,136356,2213],{"class":117},[100,136358,53046],{"class":471},[100,136360,53075],{"class":117},[100,136362,65545],{"class":117},[100,136364,2927],{"class":258},[100,136366,136367,136370,136372,136374],{"class":102,"line":589},[100,136368,136369],{"class":117},"  border-bottom-color",[100,136371,52991],{"class":258},[100,136373,63923],{"class":117},[100,136375,2927],{"class":258},[100,136377,136378],{"class":102,"line":595},[100,136379,3197],{"class":258},[73,136381,136382],{"className":127794,"code":131951,"language":127796,"meta":79,"style":79},[32,136383,136384,136390,136406],{"__ignoreMap":79},[100,136385,136386,136388],{"class":102,"line":103},[100,136387,53165],{"class":52854},[100,136389,17153],{"class":258},[100,136391,136392,136394,136396,136398,136400,136402,136404],{"class":102,"line":188},[100,136393,72450],{"class":117},[100,136395,52991],{"class":258},[100,136397,1985],{"class":117},[100,136399,53046],{"class":471},[100,136401,53075],{"class":117},[100,136403,131186],{"class":117},[100,136405,2927],{"class":258},[100,136407,136408],{"class":102,"line":199},[100,136409,3197],{"class":258},[3095,136411],{"style":127650,"src":136412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,136414,136416],{"id":136415},"_132-css用户界面样式","13.2 css用户界面样式",[305,136418,136420],{"id":136419},"_1321-鼠标样式","13.2.1 鼠标样式",[73,136422,136424],{"className":127794,"code":136423,"language":127796,"meta":79,"style":79},"\u002F* 鼠标样式 *\u002F\ndiv { cursor: pointer; }   \u002F* 手型 *\u002F\ndiv { cursor: default; }   \u002F* 默认 *\u002F\ndiv { cursor: move; }      \u002F* 移动 *\u002F\ndiv { cursor: text; }      \u002F* 文本 *\u002F\ndiv { cursor: not-allowed; } \u002F* 禁止 *\u002F\n",[32,136425,136426,136431,136450,136468,136487,136504],{"__ignoreMap":79},[100,136427,136428],{"class":102,"line":103},[100,136429,136430],{"class":1836},"\u002F* 鼠标样式 *\u002F\n",[100,136432,136433,136435,136437,136440,136442,136444,136447],{"class":102,"line":188},[100,136434,53165],{"class":52854},[100,136436,81361],{"class":258},[100,136438,136439],{"class":117},"cursor",[100,136441,52991],{"class":258},[100,136443,63584],{"class":117},[100,136445,136446],{"class":258},"; }   ",[100,136448,136449],{"class":1836},"\u002F* 手型 *\u002F\n",[100,136451,136452,136454,136456,136458,136460,136463,136465],{"class":102,"line":199},[100,136453,53165],{"class":52854},[100,136455,81361],{"class":258},[100,136457,136439],{"class":117},[100,136459,52991],{"class":258},[100,136461,136462],{"class":117},"default",[100,136464,136446],{"class":258},[100,136466,136467],{"class":1836},"\u002F* 默认 *\u002F\n",[100,136469,136470,136472,136474,136476,136478,136481,136484],{"class":102,"line":532},[100,136471,53165],{"class":52854},[100,136473,81361],{"class":258},[100,136475,136439],{"class":117},[100,136477,52991],{"class":258},[100,136479,136480],{"class":117},"move",[100,136482,136483],{"class":258},"; }      ",[100,136485,136486],{"class":1836},"\u002F* 移动 *\u002F\n",[100,136488,136489,136491,136493,136495,136497,136499,136501],{"class":102,"line":577},[100,136490,53165],{"class":52854},[100,136492,81361],{"class":258},[100,136494,136439],{"class":117},[100,136496,52991],{"class":258},[100,136498,78],{"class":117},[100,136500,136483],{"class":258},[100,136502,136503],{"class":1836},"\u002F* 文本 *\u002F\n",[100,136505,136506,136508,136510,136512,136514,136517,136520],{"class":102,"line":589},[100,136507,53165],{"class":52854},[100,136509,81361],{"class":258},[100,136511,136439],{"class":117},[100,136513,52991],{"class":258},[100,136515,136516],{"class":117},"not-allowed",[100,136518,136519],{"class":258},"; } ",[100,136521,136522],{"class":1836},"\u002F* 禁止 *\u002F\n",[319,136524,136525,136533],{},[322,136526,136527],{},[325,136528,136529,136531],{},[328,136530,128258],{"align":330},[328,136532,29061],{"align":330},[339,136534,136535,136542,136549,136556,136563],{},[325,136536,136537,136539],{},[344,136538,136462],{"align":330},[344,136540,136541],{"align":330},"小白 默认",[325,136543,136544,136546],{},[344,136545,63584],{"align":330},[344,136547,136548],{"align":330},"小手",[325,136550,136551,136553],{},[344,136552,136480],{"align":330},[344,136554,136555],{"align":330},"移动",[325,136557,136558,136560],{},[344,136559,78],{"align":330},[344,136561,136562],{"align":330},"文本",[325,136564,136565,136567],{},[344,136566,136516],{"align":330},[344,136568,136569],{"align":330},"禁止",[305,136571,136573],{"id":136572},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,136575,136576],{},"去除表单轮廓线",[19,136578,136579],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[73,136581,136582],{"className":127794,"code":131158,"language":127796,"meta":79,"style":79},[32,136583,136584,136588,136594,136610],{"__ignoreMap":79},[100,136585,136586],{"class":102,"line":103},[100,136587,131165],{"class":1836},[100,136589,136590,136592],{"class":102,"line":188},[100,136591,53165],{"class":52854},[100,136593,17153],{"class":258},[100,136595,136596,136598,136600,136602,136604,136606,136608],{"class":102,"line":199},[100,136597,72450],{"class":117},[100,136599,52991],{"class":258},[100,136601,1985],{"class":117},[100,136603,53046],{"class":471},[100,136605,53075],{"class":117},[100,136607,131186],{"class":117},[100,136609,2927],{"class":258},[100,136611,136612],{"class":102,"line":532},[100,136613,3197],{"class":258},[19,136615,136616],{},"文本域：",[3095,136618],{"style":127650,"src":136619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,136621,136622],{},"此时会有一个空白区域",[3095,136624],{"style":127650,"src":136625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,136627,136628],{},"写在同一行就不会出现这个问题",[3095,136630],{"style":127650,"src":136631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,136633,136634],{},"文本域是行内块元素，一定记住！！！",[19,136636,99783],{},[3095,136638],{"style":127650,"src":136639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,136641,136642],{},"文本域尽量放在一行",[19,136644,136645],{},"知识回顾：cols是列，rols是行",[3095,136647],{"style":127650,"src":136648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,136650,136651],{},"它可以进行拖动，显然这是我们不愿意看到的",[3095,136653],{"style":127650,"src":136654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,136656,136657],{},"使用resize进行解决",[73,136659,136661],{"className":127794,"code":136660,"language":127796,"meta":79,"style":79},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[32,136662,136663,136669,136682],{"__ignoreMap":79},[100,136664,136665,136667],{"class":102,"line":103},[100,136666,55375],{"class":52854},[100,136668,17153],{"class":258},[100,136670,136671,136673,136675,136677,136679],{"class":102,"line":188},[100,136672,72352],{"class":117},[100,136674,52991],{"class":258},[100,136676,56291],{"class":117},[100,136678,131657],{"class":258},[100,136680,136681],{"class":1836},"\u002F* 取消表单轮廓线 *\u002F\n",[100,136683,136684],{"class":102,"line":199},[100,136685,3197],{"class":258},[19,136687,136688],{},"此时就无法通过右下方实现拖动了",[305,136690,136692],{"id":136691},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,136694,136695],{},"实现一个盒子中的文字和图片对齐",[19,136697,136698,136699,136702],{},"用于设置一个元素的 ",[1921,136700,136701],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,136704,136705],{},"图片和文字默认是基线对齐",[3095,136707],{"style":127650,"src":136708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[73,136710,136711],{"className":127794,"code":136660,"language":127796,"meta":79,"style":79},[32,136712,136713,136719,136731],{"__ignoreMap":79},[100,136714,136715,136717],{"class":102,"line":103},[100,136716,55375],{"class":52854},[100,136718,17153],{"class":258},[100,136720,136721,136723,136725,136727,136729],{"class":102,"line":188},[100,136722,72352],{"class":117},[100,136724,52991],{"class":258},[100,136726,56291],{"class":117},[100,136728,131657],{"class":258},[100,136730,136681],{"class":1836},[100,136732,136733],{"class":102,"line":199},[100,136734,3197],{"class":258},[3095,136736],{"style":127650,"src":136737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[23579,136739,136741],{"id":136740},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,136743,136744],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[3095,136746],{"style":127650,"src":136747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,136749,136750,136751,136754],{},"此时可以给图片、表单这些行内块元素的 ",[1921,136752,136753],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[23579,136756,136758],{"id":136757},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,136760,136761],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,136763,16214],{},[73,136765,136767],{"className":127794,"code":136766,"language":127796,"meta":79,"style":79},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[32,136768,136769,136774,136780,136792],{"__ignoreMap":79},[100,136770,136771],{"class":102,"line":103},[100,136772,136773],{"class":1836},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[100,136775,136776,136778],{"class":102,"line":188},[100,136777,3095],{"class":52854},[100,136779,17153],{"class":258},[100,136781,136782,136785,136787,136790],{"class":102,"line":199},[100,136783,136784],{"class":117},"  vertical-align",[100,136786,52991],{"class":258},[100,136788,136789],{"class":117},"middle",[100,136791,2927],{"class":258},[100,136793,136794],{"class":102,"line":532},[100,136795,3197],{"class":258},[3095,136797],{"style":127650,"src":136798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,136800,136801],{},"主要解决方法有两种：",[26,136803,136804],{},[29,136805,136806,136809,136810,136813],{},[1921,136807,136808],{},"给图片"," 添加 ",[1921,136811,136812],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,136815,136816,136817],{},"2.把图片转换为块级元素 ",[1921,136818,136819],{},"display: block",[19,136821,136822],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,136824,136825],{},"img {",[19,136827,136828],{},"vertical-align:middle;",[19,136830,2712],{},[305,136832,136834],{"id":136833},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,136836,136837],{},"效果：",[3095,136839],{"style":127650,"src":136840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,136842,136843],{},"单行文本溢出显示省略号--必须满足三个条件：",[73,136845,136847],{"className":127794,"code":136846,"language":127796,"meta":79,"style":79},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[32,136848,136849,136854,136860,136870,136875,136885],{"__ignoreMap":79},[100,136850,136851],{"class":102,"line":103},[100,136852,136853],{"class":1836},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[100,136855,136856,136858],{"class":102,"line":188},[100,136857,3095],{"class":52854},[100,136859,17153],{"class":258},[100,136861,136862,136864,136866,136868],{"class":102,"line":199},[100,136863,136784],{"class":117},[100,136865,52991],{"class":258},[100,136867,136789],{"class":117},[100,136869,2927],{"class":258},[100,136871,136872],{"class":102,"line":532},[100,136873,136874],{"class":1836},"  \u002F* 或 *\u002F\n",[100,136876,136877,136879,136881,136883],{"class":102,"line":577},[100,136878,129410],{"class":117},[100,136880,52991],{"class":258},[100,136882,62423],{"class":117},[100,136884,2927],{"class":258},[100,136886,136887],{"class":102,"line":589},[100,136888,3197],{"class":258},[305,136890,136892],{"id":136891},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,136894,136837],{},[3095,136896],{"style":127650,"src":136897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,136899,136900,136901,136904],{},"多行文本溢出显示省略号， ",[1921,136902,136903],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[73,136906,136907],{"className":127794,"code":136846,"language":127796,"meta":79,"style":79},[32,136908,136909,136913,136919,136929,136933,136943],{"__ignoreMap":79},[100,136910,136911],{"class":102,"line":103},[100,136912,136853],{"class":1836},[100,136914,136915,136917],{"class":102,"line":188},[100,136916,3095],{"class":52854},[100,136918,17153],{"class":258},[100,136920,136921,136923,136925,136927],{"class":102,"line":199},[100,136922,136784],{"class":117},[100,136924,52991],{"class":258},[100,136926,136789],{"class":117},[100,136928,2927],{"class":258},[100,136930,136931],{"class":102,"line":532},[100,136932,136874],{"class":1836},[100,136934,136935,136937,136939,136941],{"class":102,"line":577},[100,136936,129410],{"class":117},[100,136938,52991],{"class":258},[100,136940,62423],{"class":117},[100,136942,2927],{"class":258},[100,136944,136945],{"class":102,"line":589},[100,136946,3197],{"class":258},[19,136948,136949],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,136951,136953],{"id":136952},"_133-常见布局技巧","13.3 常见布局技巧",[19,136955,136956],{},[1921,136957,136958],{},"巧妙利用一个技术更快更好的布局：",[26,136960,136961,136964,136967,136970],{},[29,136962,136963],{},"margin负值的运用",[29,136965,136966],{},"文字围绕浮动元素",[29,136968,136969],{},"行内块的巧妙运用",[29,136971,136972],{},"CSS三角强化",[305,136974,136976],{"id":136975},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,136978,136979],{},"应用场景：",[3095,136981],{"style":127650,"src":136982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[3095,136984],{"style":127650,"src":136985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,136987,136988],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,136990,136991],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[73,136993,136994],{"className":127794,"code":131158,"language":127796,"meta":79,"style":79},[32,136995,136996,137000,137006,137022],{"__ignoreMap":79},[100,136997,136998],{"class":102,"line":103},[100,136999,131165],{"class":1836},[100,137001,137002,137004],{"class":102,"line":188},[100,137003,53165],{"class":52854},[100,137005,17153],{"class":258},[100,137007,137008,137010,137012,137014,137016,137018,137020],{"class":102,"line":199},[100,137009,72450],{"class":117},[100,137011,52991],{"class":258},[100,137013,1985],{"class":117},[100,137015,53046],{"class":471},[100,137017,53075],{"class":117},[100,137019,131186],{"class":117},[100,137021,2927],{"class":258},[100,137023,137024],{"class":102,"line":532},[100,137025,3197],{"class":258},[3095,137027],{"style":127650,"src":137028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,137030,137031],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[73,137033,137035],{"className":127794,"code":137034,"language":127796,"meta":79,"style":79},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[32,137036,137037,137042,137048,137058,137070,137082],{"__ignoreMap":79},[100,137038,137039],{"class":102,"line":103},[100,137040,137041],{"class":1836},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[100,137043,137044,137046],{"class":102,"line":188},[100,137045,131642],{"class":106},[100,137047,17153],{"class":258},[100,137049,137050,137052,137054,137056],{"class":102,"line":199},[100,137051,133600],{"class":117},[100,137053,52991],{"class":258},[100,137055,56318],{"class":117},[100,137057,2927],{"class":258},[100,137059,137060,137062,137064,137066,137068],{"class":102,"line":532},[100,137061,133614],{"class":117},[100,137063,52991],{"class":258},[100,137065,2213],{"class":117},[100,137067,53046],{"class":471},[100,137069,2927],{"class":258},[100,137071,137072,137074,137076,137078,137080],{"class":102,"line":577},[100,137073,133631],{"class":117},[100,137075,52991],{"class":258},[100,137077,2466],{"class":117},[100,137079,53046],{"class":471},[100,137081,2927],{"class":258},[100,137083,137084],{"class":102,"line":589},[100,137085,3197],{"class":258},[19,137087,137088],{},"加上上述代码会发现：",[3095,137090],{"style":127650,"src":137091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,137093,137094],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,137096,137097],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[73,137099,137100],{"className":127794,"code":137034,"language":127796,"meta":79,"style":79},[32,137101,137102,137106,137112,137122,137134,137146],{"__ignoreMap":79},[100,137103,137104],{"class":102,"line":103},[100,137105,137041],{"class":1836},[100,137107,137108,137110],{"class":102,"line":188},[100,137109,131642],{"class":106},[100,137111,17153],{"class":258},[100,137113,137114,137116,137118,137120],{"class":102,"line":199},[100,137115,133600],{"class":117},[100,137117,52991],{"class":258},[100,137119,56318],{"class":117},[100,137121,2927],{"class":258},[100,137123,137124,137126,137128,137130,137132],{"class":102,"line":532},[100,137125,133614],{"class":117},[100,137127,52991],{"class":258},[100,137129,2213],{"class":117},[100,137131,53046],{"class":471},[100,137133,2927],{"class":258},[100,137135,137136,137138,137140,137142,137144],{"class":102,"line":577},[100,137137,133631],{"class":117},[100,137139,52991],{"class":258},[100,137141,2466],{"class":117},[100,137143,53046],{"class":471},[100,137145,2927],{"class":258},[100,137147,137148],{"class":102,"line":589},[100,137149,3197],{"class":258},[19,137151,137152],{},"解决方式2：",[19,137154,137155],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[73,137157,137159],{"className":127794,"code":137158,"language":127796,"meta":79,"style":79},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[32,137160,137161,137167,137177,137189,137201],{"__ignoreMap":79},[100,137162,137163,137165],{"class":102,"line":103},[100,137164,53165],{"class":52854},[100,137166,17153],{"class":258},[100,137168,137169,137171,137173,137175],{"class":102,"line":188},[100,137170,133600],{"class":117},[100,137172,52991],{"class":258},[100,137174,56318],{"class":117},[100,137176,2927],{"class":258},[100,137178,137179,137181,137183,137185,137187],{"class":102,"line":199},[100,137180,133614],{"class":117},[100,137182,52991],{"class":258},[100,137184,2213],{"class":117},[100,137186,53046],{"class":471},[100,137188,2927],{"class":258},[100,137190,137191,137193,137195,137197,137199],{"class":102,"line":532},[100,137192,133631],{"class":117},[100,137194,52991],{"class":258},[100,137196,2466],{"class":117},[100,137198,53046],{"class":471},[100,137200,2927],{"class":258},[100,137202,137203],{"class":102,"line":577},[100,137204,3197],{"class":258},[305,137206,137208],{"id":137207},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,137210,136979],{},[3095,137212],{"style":127650,"src":137213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,137215,137216],{},"实现结构图：",[3095,137218],{"style":127650,"src":137219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,137221,137222],{},"巧妙运用浮动元素不会压住文字的特性",[19,137224,137225],{},"代码显示：",[73,137227,137229],{"className":127794,"code":137228,"language":127796,"meta":79,"style":79},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[32,137230,137231,137237,137247,137251,137256,137260,137266,137280],{"__ignoreMap":79},[100,137232,137233,137235],{"class":102,"line":103},[100,137234,131642],{"class":106},[100,137236,17153],{"class":258},[100,137238,137239,137241,137243,137245],{"class":102,"line":188},[100,137240,132274],{"class":117},[100,137242,52991],{"class":258},[100,137244,330],{"class":117},[100,137246,2927],{"class":258},[100,137248,137249],{"class":102,"line":199},[100,137250,3197],{"class":258},[100,137252,137253],{"class":102,"line":532},[100,137254,137255],{"class":258},"```Css\n",[100,137257,137258],{"class":102,"line":577},[100,137259,131637],{"class":1836},[100,137261,137262,137264],{"class":102,"line":589},[100,137263,131642],{"class":106},[100,137265,17153],{"class":258},[100,137267,137268,137270,137272,137274,137276,137278],{"class":102,"line":595},[100,137269,72024],{"class":117},[100,137271,52991],{"class":258},[100,137273,1366],{"class":117},[100,137275,53110],{"class":117},[100,137277,131657],{"class":258},[100,137279,131660],{"class":1836},[100,137281,137282],{"class":102,"line":601},[100,137283,3197],{"class":258},[19,137285,137286],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[73,137288,137291],{"className":137289,"code":137290,"language":78},[76],"\n对行内元素转换为行内块元素之后，就可以设置宽和高了\n\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-107.png\">\n\n此时要实现整体居中可以使用text-align:center\n\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[32,137292,137290],{"__ignoreMap":79},[3095,137294],{"style":127650,"src":137295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,137297,137298],{},"最终展示结果：",[73,137300,137301],{"className":127794,"code":131630,"language":127796,"meta":79,"style":79},[32,137302,137303,137307,137313,137327],{"__ignoreMap":79},[100,137304,137305],{"class":102,"line":103},[100,137306,131637],{"class":1836},[100,137308,137309,137311],{"class":102,"line":188},[100,137310,131642],{"class":106},[100,137312,17153],{"class":258},[100,137314,137315,137317,137319,137321,137323,137325],{"class":102,"line":199},[100,137316,72024],{"class":117},[100,137318,52991],{"class":258},[100,137320,1366],{"class":117},[100,137322,53110],{"class":117},[100,137324,131657],{"class":258},[100,137326,131660],{"class":1836},[100,137328,137329],{"class":102,"line":532},[100,137330,3197],{"class":258},[3095,137332],{"style":127650,"src":137333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,137335,137337],{"id":137336},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[305,137339,137341],{"id":137340},"_1341-原理","13.4.1 原理",[3095,137343],{"style":127650,"src":137344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[73,137346,137347],{"className":127794,"code":131630,"language":127796,"meta":79,"style":79},[32,137348,137349,137353,137359,137373],{"__ignoreMap":79},[100,137350,137351],{"class":102,"line":103},[100,137352,131637],{"class":1836},[100,137354,137355,137357],{"class":102,"line":188},[100,137356,131642],{"class":106},[100,137358,17153],{"class":258},[100,137360,137361,137363,137365,137367,137369,137371],{"class":102,"line":199},[100,137362,72024],{"class":117},[100,137364,52991],{"class":258},[100,137366,1366],{"class":117},[100,137368,53110],{"class":117},[100,137370,131657],{"class":258},[100,137372,131660],{"class":1836},[100,137374,137375],{"class":102,"line":532},[100,137376,3197],{"class":258},[305,137378,137380],{"id":137379},"_1342-实例","13.4.2 实例",[3095,137382],{"style":127650,"src":137383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[73,137385,137386],{"className":127794,"code":132260,"language":127796,"meta":79,"style":79},[32,137387,137388,137394,137404,137408,137414,137424],{"__ignoreMap":79},[100,137389,137390,137392],{"class":102,"line":103},[100,137391,132267],{"class":106},[100,137393,17153],{"class":258},[100,137395,137396,137398,137400,137402],{"class":102,"line":188},[100,137397,132274],{"class":117},[100,137399,52991],{"class":258},[100,137401,330],{"class":117},[100,137403,2927],{"class":258},[100,137405,137406],{"class":102,"line":199},[100,137407,3197],{"class":258},[100,137409,137410,137412],{"class":102,"line":532},[100,137411,132289],{"class":106},[100,137413,17153],{"class":258},[100,137415,137416,137418,137420,137422],{"class":102,"line":577},[100,137417,132274],{"class":117},[100,137419,52991],{"class":258},[100,137421,74076],{"class":117},[100,137423,2927],{"class":258},[100,137425,137426],{"class":102,"line":589},[100,137427,3197],{"class":258},[14,137429,137431],{"id":137430},"_135-css的初始化","13.5 css的初始化",[19,137433,137434],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,137436,137437],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,137439,137440],{},"每个网页都必须首先进行 CSS初始化。",[19,137442,137443],{},"这里我们以 京东CSS初始化代码为例。",[19,137445,137446],{},"在网页右键查看网页源代码",[19,137448,137449],{},"找到css的link引入语句",[19,137451,137452],{},"然后ctrl+f 输入body",[19,137454,78780],{},[3095,137456],{"style":127650,"src":137457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,137459,78803],{},[3095,137461],{"style":127650,"src":137462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,137464,137465],{},"③打开了网页上传压缩的代码",[3095,137467],{"style":127650,"src":137468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,137470,137471],{},"④从body前可以查看这个网页的初始化代码",[19,137473,137474],{},[1921,137475,137476],{},"Unicode编码字体：",[19,137478,137479],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,137481,84759],{},[19,137483,137484],{},"黑体 \\9ED1\\4F53",[19,137486,137487],{},"宋体 \\5B8B\\4F53",[19,137489,137490],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[1677,137492,137493],{},"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":79,"searchDepth":188,"depth":188,"links":137495},[137496,137497,137504,137508,137512],{"id":136293,"depth":188,"text":136294},{"id":136415,"depth":188,"text":136416,"children":137498},[137499,137500,137501,137502,137503],{"id":136419,"depth":199,"text":136420},{"id":136572,"depth":199,"text":136573},{"id":136691,"depth":199,"text":136692},{"id":136833,"depth":199,"text":136834},{"id":136891,"depth":199,"text":136892},{"id":136952,"depth":188,"text":136953,"children":137505},[137506,137507],{"id":136975,"depth":199,"text":136976},{"id":137207,"depth":199,"text":137208},{"id":137336,"depth":188,"text":137337,"children":137509},[137510,137511],{"id":137340,"depth":199,"text":137341},{"id":137379,"depth":199,"text":137380},{"id":137430,"depth":188,"text":137431},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":136285,"description":24958},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":137519,"title":137520,"body":137521,"description":24958,"extension":1708,"meta":139207,"navigation":569,"path":139208,"seo":139209,"stem":139210,"__hash__":139211},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":137522,"toc":139196},[137523,137526,137530,137534,137537,137544,137547,137550,137588,137591,137593,137607,137611,137620,137624,137629,137632,137635,137638,137673,137678,137681,137711,137714,137719,137722,137725,137755,137758,137812,137815,137819,137824,137836,137839,137843,137873,137876,137881,137884,137914,137917,137921,137938,137942,137946,137949,137982,137985,137989,137992,137995,137998,138001,138004,138115,138118,138121,138124,138226,138229,138233,138237,138241,138244,138284,138287,138289,138305,138309,138312,138317,138398,138401,138404,138530,138535,138538,138546,138549,138554,138639,138642,138646,138649,138652,138656,138676,138681,138765,138768,138773,138776,138779,138857,138860,138863,138866,138869,138872,138877,138880,138883,138955,138958,138963,138966,139063,139066,139072,139075,139078,139081,139084,139087,139090,139093,139096,139100,139105,139108,139141,139146,139149,139190,139193],[10,137524,137520],{"id":137525},"_14-html5与css3新特性",[14,137527,137529],{"id":137528},"_141-html5的新特性","14.1 HTML5的新特性",[305,137531,137533],{"id":137532},"_1411-基本标签","14.1.1 基本标签",[19,137535,137536],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,137538,137539,137540,137543],{},"这些新特性都有兼容性问题，基本是 ",[1921,137541,137542],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,137545,137546],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,137548,137549],{},"现在使用的是新特性：",[2773,137551,137552,137558,137564,137570,137576,137582],{},[29,137553,137554,137557],{},[32,137555,137556],{},"\u003Cheader>"," 头部标签",[29,137559,137560,137563],{},[32,137561,137562],{},"\u003Cnav>"," 导航标签",[29,137565,137566,137569],{},[32,137567,137568],{},"\u003Carticle>"," 内容标签",[29,137571,137572,137575],{},[32,137573,137574],{},"\u003Csection>"," 定义文档某个区域",[29,137577,137578,137581],{},[32,137579,137580],{},"\u003Caside>"," 侧边栏标签",[29,137583,137584,137587],{},[32,137585,137586],{},"\u003Cfooter>"," 尾部标签",[3095,137589],{"style":127650,"src":137590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,137592,1809],{},[2773,137594,137595,137598,137601,137604],{},[29,137596,137597],{},"这种语义化标准主要是针对搜索引擎的",[29,137599,137600],{},"这些标签页面中可以经常使用",[29,137602,137603],{},"在IE9中，需要把这些元素转换为块级元素",[29,137605,137606],{},"移动端更喜欢使用这些标签",[305,137608,137610],{"id":137609},"_1412-多媒体标签","14.1.2 多媒体标签",[19,137612,137613,137614,137616,137617,137619],{},"音频 ",[1921,137615,29746],{}," 和视频 ",[1921,137618,29755],{}," 两个标签",[23579,137621,137623],{"id":137622},"_14121-视频标签-video","14.1.2.1 视频标签- video",[26,137625,137626],{},[29,137627,137628],{},"支持格式：",[3095,137630],{"style":127650,"src":137631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,137633,137634],{},"尽量使用MP4，兼容性好",[19,137636,137637],{},"用MP4就可以",[73,137639,137641],{"className":128541,"code":137640,"language":128543,"meta":79,"style":79},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[32,137642,137643],{"__ignoreMap":79},[100,137644,137645,137647,137649,137651,137653,137656,137658,137661,137664,137667,137669,137671],{"class":102,"line":103},[100,137646,2676],{"class":258},[100,137648,29755],{"class":52854},[100,137650,56793],{"class":106},[100,137652,472],{"class":258},[100,137654,137655],{"class":110},"\"movie.mp4\"",[100,137657,93975],{"class":106},[100,137659,137660],{"class":106}," autoplay",[100,137662,137663],{"class":106}," muted",[100,137665,137666],{"class":106}," loop",[100,137668,56868],{"class":258},[100,137670,29755],{"class":52854},[100,137672,52861],{"class":258},[26,137674,137675],{"start":188},[29,137676,137677],{},"兼容写法",[19,137679,137680],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[73,137682,137683],{"className":128541,"code":137640,"language":128543,"meta":79,"style":79},[32,137684,137685],{"__ignoreMap":79},[100,137686,137687,137689,137691,137693,137695,137697,137699,137701,137703,137705,137707,137709],{"class":102,"line":103},[100,137688,2676],{"class":258},[100,137690,29755],{"class":52854},[100,137692,56793],{"class":106},[100,137694,472],{"class":258},[100,137696,137655],{"class":110},[100,137698,93975],{"class":106},[100,137700,137660],{"class":106},[100,137702,137663],{"class":106},[100,137704,137666],{"class":106},[100,137706,56868],{"class":258},[100,137708,29755],{"class":52854},[100,137710,52861],{"class":258},[19,137712,137713],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[26,137715,137716],{"start":199},[29,137717,137718],{},"video常用属性",[3095,137720],{"style":127650,"src":137721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,137723,137724],{},"poster属性后面是跟的等待加载图片的地址",[73,137726,137727],{"className":128541,"code":135296,"language":128543,"meta":79,"style":79},[32,137728,137729],{"__ignoreMap":79},[100,137730,137731,137733,137735,137737,137739,137741,137743,137745,137747,137749,137751,137753],{"class":102,"line":103},[100,137732,2676],{"class":258},[100,137734,3095],{"class":52854},[100,137736,56793],{"class":106},[100,137738,472],{"class":258},[100,137740,135311],{"class":110},[100,137742,56801],{"class":106},[100,137744,472],{"class":258},[100,137746,135318],{"class":110},[100,137748,135321],{"class":106},[100,137750,472],{"class":258},[100,137752,135326],{"class":110},[100,137754,52861],{"class":258},[19,137756,137757],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[73,137759,137761],{"className":127794,"code":137760,"language":127796,"meta":79,"style":79},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[32,137762,137763,137768,137774,137798,137803,137808],{"__ignoreMap":79},[100,137764,137765],{"class":102,"line":103},[100,137766,137767],{"class":1836},"\u002F* 2D 位移 *\u002F\n",[100,137769,137770,137772],{"class":102,"line":188},[100,137771,53165],{"class":52854},[100,137773,17153],{"class":258},[100,137775,137776,137779,137781,137784,137786,137788,137790,137792,137794,137796],{"class":102,"line":199},[100,137777,137778],{"class":117},"  transform",[100,137780,52991],{"class":258},[100,137782,137783],{"class":117},"translate",[100,137785,713],{"class":258},[100,137787,2078],{"class":117},[100,137789,53046],{"class":471},[100,137791,14017],{"class":258},[100,137793,862],{"class":117},[100,137795,53046],{"class":471},[100,137797,4321],{"class":258},[100,137799,137800],{"class":102,"line":532},[100,137801,137802],{"class":1836},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[100,137804,137805],{"class":102,"line":577},[100,137806,137807],{"class":1836},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[100,137809,137810],{"class":102,"line":589},[100,137811,3197],{"class":258},[19,137813,137814],{},"muted:自动静音属性",[23579,137816,137818],{"id":137817},"_14122-音频标签audio","14.1.2.2 音频标签audio",[26,137820,137821],{},[29,137822,137823],{},"基本使用",[19,137825,137826,137827,137832,137833],{},"当前 ",[1921,137828,137829],{},[32,137830,137831],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[1921,137834,137835],{},"mp3格式",[3095,137837],{"style":127650,"src":137838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[26,137840,137841],{"start":188},[29,137842,137677],{},[73,137844,137845],{"className":128541,"code":137640,"language":128543,"meta":79,"style":79},[32,137846,137847],{"__ignoreMap":79},[100,137848,137849,137851,137853,137855,137857,137859,137861,137863,137865,137867,137869,137871],{"class":102,"line":103},[100,137850,2676],{"class":258},[100,137852,29755],{"class":52854},[100,137854,56793],{"class":106},[100,137856,472],{"class":258},[100,137858,137655],{"class":110},[100,137860,93975],{"class":106},[100,137862,137660],{"class":106},[100,137864,137663],{"class":106},[100,137866,137666],{"class":106},[100,137868,56868],{"class":258},[100,137870,29755],{"class":52854},[100,137872,52861],{"class":258},[19,137874,137875],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[26,137877,137878],{"start":199},[29,137879,137880],{},"常用属性",[3095,137882],{"style":127650,"src":137883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[73,137885,137886],{"className":128541,"code":137640,"language":128543,"meta":79,"style":79},[32,137887,137888],{"__ignoreMap":79},[100,137889,137890,137892,137894,137896,137898,137900,137902,137904,137906,137908,137910,137912],{"class":102,"line":103},[100,137891,2676],{"class":258},[100,137893,29755],{"class":52854},[100,137895,56793],{"class":106},[100,137897,472],{"class":258},[100,137899,137655],{"class":110},[100,137901,93975],{"class":106},[100,137903,137660],{"class":106},[100,137905,137663],{"class":106},[100,137907,137666],{"class":106},[100,137909,56868],{"class":258},[100,137911,29755],{"class":52854},[100,137913,52861],{"class":258},[19,137915,137916],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[23579,137918,137920],{"id":137919},"_14123-总结","14.1.2.3 总结",[2773,137922,137923,137926,137929,137932,137935],{},[29,137924,137925],{},"音频标签和视频标签使用方式基本一致",[29,137927,137928],{},"浏览器支持情况不同",[29,137930,137931],{},"谷歌浏览器把音频和视频自动播放禁止了",[29,137933,137934],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[29,137936,137937],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[305,137939,137941],{"id":137940},"_1413-表单元素","14.1.3 表单元素",[23579,137943,137945],{"id":137944},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[3095,137947],{"style":127650,"src":137948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[73,137950,137952],{"className":128541,"code":137951,"language":128543,"meta":79,"style":79},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[32,137953,137954],{"__ignoreMap":79},[100,137955,137956,137958,137960,137962,137964,137966,137968,137970,137973,137975,137977,137980],{"class":102,"line":103},[100,137957,2676],{"class":258},[100,137959,55375],{"class":52854},[100,137961,55378],{"class":106},[100,137963,472],{"class":258},[100,137965,64253],{"class":110},[100,137967,16501],{"class":106},[100,137969,472],{"class":258},[100,137971,137972],{"class":110},"\"username\"",[100,137974,62574],{"class":106},[100,137976,472],{"class":258},[100,137978,137979],{"class":110},"\"请输入用户名\"",[100,137981,52861],{"class":258},[3095,137983],{"style":127650,"src":137984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[23579,137986,137988],{"id":137987},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[3095,137990],{"style":127650,"src":137991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,137993,137994],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,137996,137997],{},"快捷操作：",[3095,137999],{"style":127650,"src":138000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,138002,138003],{},"例子1：",[73,138005,138007],{"className":128541,"code":138006,"language":128543,"meta":79,"style":79},"\u003Cform action=\"\u002Fsubmit\" method=\"post\">\n  \u003Cinput type=\"text\" name=\"username\" placeholder=\"用户名\">\n  \u003Cinput type=\"password\" name=\"pwd\" placeholder=\"密码\">\n  \u003Cbutton type=\"submit\">提交\u003C\u002Fbutton>\n\u003C\u002Fform>\n",[32,138008,138009,138032,138059,138088,138107],{"__ignoreMap":79},[100,138010,138011,138013,138015,138017,138019,138022,138025,138027,138030],{"class":102,"line":103},[100,138012,2676],{"class":258},[100,138014,68179],{"class":52854},[100,138016,68182],{"class":106},[100,138018,472],{"class":258},[100,138020,138021],{"class":110},"\"\u002Fsubmit\"",[100,138023,138024],{"class":106}," method",[100,138026,472],{"class":258},[100,138028,138029],{"class":110},"\"post\"",[100,138031,52861],{"class":258},[100,138033,138034,138036,138038,138040,138042,138044,138046,138048,138050,138052,138054,138057],{"class":102,"line":188},[100,138035,53698],{"class":258},[100,138037,55375],{"class":52854},[100,138039,55378],{"class":106},[100,138041,472],{"class":258},[100,138043,64253],{"class":110},[100,138045,16501],{"class":106},[100,138047,472],{"class":258},[100,138049,137972],{"class":110},[100,138051,62574],{"class":106},[100,138053,472],{"class":258},[100,138055,138056],{"class":110},"\"用户名\"",[100,138058,52861],{"class":258},[100,138060,138061,138063,138065,138067,138069,138072,138074,138076,138079,138081,138083,138086],{"class":102,"line":199},[100,138062,53698],{"class":258},[100,138064,55375],{"class":52854},[100,138066,55378],{"class":106},[100,138068,472],{"class":258},[100,138070,138071],{"class":110},"\"password\"",[100,138073,16501],{"class":106},[100,138075,472],{"class":258},[100,138077,138078],{"class":110},"\"pwd\"",[100,138080,62574],{"class":106},[100,138082,472],{"class":258},[100,138084,138085],{"class":110},"\"密码\"",[100,138087,52861],{"class":258},[100,138089,138090,138092,138094,138096,138098,138100,138103,138105],{"class":102,"line":532},[100,138091,53698],{"class":258},[100,138093,55441],{"class":52854},[100,138095,55378],{"class":106},[100,138097,472],{"class":258},[100,138099,68202],{"class":110},[100,138101,138102],{"class":258},">提交\u003C\u002F",[100,138104,55441],{"class":52854},[100,138106,52861],{"class":258},[100,138108,138109,138111,138113],{"class":102,"line":577},[100,138110,53339],{"class":258},[100,138112,68179],{"class":52854},[100,138114,52861],{"class":258},[3095,138116],{"style":127650,"src":138117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,138119,138120],{},"value是表单域的内容",[19,138122,138123],{},"例子2：",[73,138125,138126],{"className":128541,"code":138006,"language":128543,"meta":79,"style":79},[32,138127,138128,138148,138174,138200,138218],{"__ignoreMap":79},[100,138129,138130,138132,138134,138136,138138,138140,138142,138144,138146],{"class":102,"line":103},[100,138131,2676],{"class":258},[100,138133,68179],{"class":52854},[100,138135,68182],{"class":106},[100,138137,472],{"class":258},[100,138139,138021],{"class":110},[100,138141,138024],{"class":106},[100,138143,472],{"class":258},[100,138145,138029],{"class":110},[100,138147,52861],{"class":258},[100,138149,138150,138152,138154,138156,138158,138160,138162,138164,138166,138168,138170,138172],{"class":102,"line":188},[100,138151,53698],{"class":258},[100,138153,55375],{"class":52854},[100,138155,55378],{"class":106},[100,138157,472],{"class":258},[100,138159,64253],{"class":110},[100,138161,16501],{"class":106},[100,138163,472],{"class":258},[100,138165,137972],{"class":110},[100,138167,62574],{"class":106},[100,138169,472],{"class":258},[100,138171,138056],{"class":110},[100,138173,52861],{"class":258},[100,138175,138176,138178,138180,138182,138184,138186,138188,138190,138192,138194,138196,138198],{"class":102,"line":199},[100,138177,53698],{"class":258},[100,138179,55375],{"class":52854},[100,138181,55378],{"class":106},[100,138183,472],{"class":258},[100,138185,138071],{"class":110},[100,138187,16501],{"class":106},[100,138189,472],{"class":258},[100,138191,138078],{"class":110},[100,138193,62574],{"class":106},[100,138195,472],{"class":258},[100,138197,138085],{"class":110},[100,138199,52861],{"class":258},[100,138201,138202,138204,138206,138208,138210,138212,138214,138216],{"class":102,"line":532},[100,138203,53698],{"class":258},[100,138205,55441],{"class":52854},[100,138207,55378],{"class":106},[100,138209,472],{"class":258},[100,138211,68202],{"class":110},[100,138213,138102],{"class":258},[100,138215,55441],{"class":52854},[100,138217,52861],{"class":258},[100,138219,138220,138222,138224],{"class":102,"line":577},[100,138221,53339],{"class":258},[100,138223,68179],{"class":52854},[100,138225,52861],{"class":258},[3095,138227],{"style":127650,"src":138228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,138230,138232],{"id":138231},"_142-css新特性","14.2 CSS新特性",[305,138234,138236],{"id":138235},"_1421-新增选择器","14.2.1 新增选择器",[23579,138238,138240],{"id":138239},"_14211-属性选择器","14.2.1.1 属性选择器",[3095,138242],{"style":127650,"src":138243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[73,138245,138247],{"className":127794,"code":138246,"language":127796,"meta":79,"style":79},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[32,138248,138249,138264,138280],{"__ignoreMap":79},[100,138250,138251,138253,138255,138257,138259,138261],{"class":102,"line":103},[100,138252,55375],{"class":52854},[100,138254,2656],{"class":258},[100,138256,104581],{"class":106},[100,138258,472],{"class":471},[100,138260,64253],{"class":110},[100,138262,138263],{"class":258},"] {\n",[100,138265,138266,138268,138270,138272,138274,138276,138278],{"class":102,"line":188},[100,138267,72450],{"class":117},[100,138269,52991],{"class":258},[100,138271,1985],{"class":117},[100,138273,53046],{"class":471},[100,138275,53075],{"class":117},[100,138277,131374],{"class":117},[100,138279,2927],{"class":258},[100,138281,138282],{"class":102,"line":199},[100,138283,3197],{"class":258},[3095,138285],{"style":127650,"src":138286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,138288,1809],{},[2773,138290,138291,138294,138297,138300],{},[29,138292,138293],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[29,138295,138296],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[29,138298,138299],{},"属性选择器也可以选择出来自定义的属性",[29,138301,138302,138304],{},[1921,138303,381],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[23579,138306,138308],{"id":138307},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[3095,138310],{"style":127650,"src":138311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[26,138313,138314],{},[29,138315,138316],{},"fist-child",[73,138318,138320],{"className":127794,"code":138319,"language":127796,"meta":79,"style":79},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[32,138321,138322,138327,138342,138362,138380],{"__ignoreMap":79},[100,138323,138324],{"class":102,"line":103},[100,138325,138326],{"class":1836},"\u002F* 属性选择器 *\u002F\n",[100,138328,138329,138331,138333,138335,138337,138339],{"class":102,"line":188},[100,138330,55375],{"class":52854},[100,138332,2656],{"class":258},[100,138334,104581],{"class":106},[100,138336,472],{"class":471},[100,138338,64253],{"class":110},[100,138340,138341],{"class":258},"] { }\n",[100,138343,138344,138346,138348,138350,138353,138356,138359],{"class":102,"line":199},[100,138345,55375],{"class":52854},[100,138347,2656],{"class":258},[100,138349,16275],{"class":106},[100,138351,138352],{"class":471},"^=",[100,138354,138355],{"class":110},"\"icon\"",[100,138357,138358],{"class":258},"] { }  ",[100,138360,138361],{"class":1836},"\u002F* 以 icon 开头 *\u002F\n",[100,138363,138364,138366,138368,138370,138373,138375,138377],{"class":102,"line":532},[100,138365,55375],{"class":52854},[100,138367,2656],{"class":258},[100,138369,16275],{"class":106},[100,138371,138372],{"class":471},"$=",[100,138374,138355],{"class":110},[100,138376,138358],{"class":258},[100,138378,138379],{"class":1836},"\u002F* 以 icon 结尾 *\u002F\n",[100,138381,138382,138384,138386,138388,138391,138393,138395],{"class":102,"line":577},[100,138383,55375],{"class":52854},[100,138385,2656],{"class":258},[100,138387,16275],{"class":106},[100,138389,138390],{"class":471},"*=",[100,138392,138355],{"class":110},[100,138394,138358],{"class":258},[100,138396,138397],{"class":1836},"\u002F* 包含 icon *\u002F\n",[19,138399,138400],{},"ul的第一个儿子文本为红色",[19,138402,138403],{},"一定要在冒号前加空格，不然就是选中所有的了",[73,138405,138407],{"className":127794,"code":138406,"language":127796,"meta":79,"style":79},".center {\n  color: red;\n}\n```Css\n\u002F* 结构伪类选择器 *\u002F\nli:first-child { }           \u002F* 第一个 *\u002F\nli:last-child { }            \u002F* 最后一个 *\u002F\nli:nth-child(2) { }          \u002F* 第2个 *\u002F\nli:nth-child(2n) { }         \u002F* 偶数 *\u002F\nli:nth-child(2n+1) { }       \u002F* 奇数 *\u002F\nli:nth-child(-n+3) { }       \u002F* 前3个 *\u002F\n",[32,138408,138409,138415,138425,138429,138433,138438,138451,138464,138480,138497,138514],{"__ignoreMap":79},[100,138410,138411,138413],{"class":102,"line":103},[100,138412,128085],{"class":106},[100,138414,17153],{"class":258},[100,138416,138417,138419,138421,138423],{"class":102,"line":188},[100,138418,72459],{"class":117},[100,138420,52991],{"class":258},[100,138422,58975],{"class":117},[100,138424,2927],{"class":258},[100,138426,138427],{"class":102,"line":199},[100,138428,3197],{"class":258},[100,138430,138431],{"class":102,"line":532},[100,138432,137255],{"class":258},[100,138434,138435],{"class":102,"line":577},[100,138436,138437],{"class":1836},"\u002F* 结构伪类选择器 *\u002F\n",[100,138439,138440,138442,138445,138448],{"class":102,"line":589},[100,138441,29],{"class":52854},[100,138443,138444],{"class":106},":first-child",[100,138446,138447],{"class":258}," { }           ",[100,138449,138450],{"class":1836},"\u002F* 第一个 *\u002F\n",[100,138452,138453,138455,138458,138461],{"class":102,"line":595},[100,138454,29],{"class":52854},[100,138456,138457],{"class":106},":last-child",[100,138459,138460],{"class":258}," { }            ",[100,138462,138463],{"class":1836},"\u002F* 最后一个 *\u002F\n",[100,138465,138466,138468,138470,138472,138474,138477],{"class":102,"line":601},[100,138467,29],{"class":52854},[100,138469,130708],{"class":106},[100,138471,713],{"class":258},[100,138473,465],{"class":117},[100,138475,138476],{"class":258},") { }          ",[100,138478,138479],{"class":1836},"\u002F* 第2个 *\u002F\n",[100,138481,138482,138484,138486,138488,138491,138494],{"class":102,"line":606},[100,138483,29],{"class":52854},[100,138485,130708],{"class":106},[100,138487,713],{"class":258},[100,138489,138490],{"class":117},"2n",[100,138492,138493],{"class":258},") { }         ",[100,138495,138496],{"class":1836},"\u002F* 偶数 *\u002F\n",[100,138498,138499,138501,138503,138505,138508,138511],{"class":102,"line":612},[100,138500,29],{"class":52854},[100,138502,130708],{"class":106},[100,138504,713],{"class":258},[100,138506,138507],{"class":117},"2n+1",[100,138509,138510],{"class":258},") { }       ",[100,138512,138513],{"class":1836},"\u002F* 奇数 *\u002F\n",[100,138515,138516,138518,138520,138522,138525,138527],{"class":102,"line":618},[100,138517,29],{"class":52854},[100,138519,130708],{"class":106},[100,138521,713],{"class":258},[100,138523,138524],{"class":117},"-n+3",[100,138526,138510],{"class":258},[100,138528,138529],{"class":1836},"\u002F* 前3个 *\u002F\n",[53165,138531,138534],{"className":138532},[138533],"example","\n  示例内容\n",[19,138536,138537],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[2773,138539,138540],{},[29,138541,138542,138545],{},[32,138543,138544],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,138547,138548],{},"也就是说它选择的是熊大",[26,138550,138551],{"start":589},[29,138552,138553],{},"权重",[73,138555,138557],{"className":127794,"code":138556,"language":127796,"meta":79,"style":79},"\u002F* 结构伪类选择器 *\u002F\nli:first-child { }           \u002F* 第一个 *\u002F\nli:last-child { }            \u002F* 最后一个 *\u002F\nli:nth-child(2) { }          \u002F* 第2个 *\u002F\nli:nth-child(2n) { }         \u002F* 偶数 *\u002F\nli:nth-child(2n+1) { }       \u002F* 奇数 *\u002F\nli:nth-child(-n+3) { }       \u002F* 前3个 *\u002F\n",[32,138558,138559,138563,138573,138583,138597,138611,138625],{"__ignoreMap":79},[100,138560,138561],{"class":102,"line":103},[100,138562,138437],{"class":1836},[100,138564,138565,138567,138569,138571],{"class":102,"line":188},[100,138566,29],{"class":52854},[100,138568,138444],{"class":106},[100,138570,138447],{"class":258},[100,138572,138450],{"class":1836},[100,138574,138575,138577,138579,138581],{"class":102,"line":199},[100,138576,29],{"class":52854},[100,138578,138457],{"class":106},[100,138580,138460],{"class":258},[100,138582,138463],{"class":1836},[100,138584,138585,138587,138589,138591,138593,138595],{"class":102,"line":532},[100,138586,29],{"class":52854},[100,138588,130708],{"class":106},[100,138590,713],{"class":258},[100,138592,465],{"class":117},[100,138594,138476],{"class":258},[100,138596,138479],{"class":1836},[100,138598,138599,138601,138603,138605,138607,138609],{"class":102,"line":577},[100,138600,29],{"class":52854},[100,138602,130708],{"class":106},[100,138604,713],{"class":258},[100,138606,138490],{"class":117},[100,138608,138493],{"class":258},[100,138610,138496],{"class":1836},[100,138612,138613,138615,138617,138619,138621,138623],{"class":102,"line":589},[100,138614,29],{"class":52854},[100,138616,130708],{"class":106},[100,138618,713],{"class":258},[100,138620,138507],{"class":117},[100,138622,138510],{"class":258},[100,138624,138513],{"class":1836},[100,138626,138627,138629,138631,138633,138635,138637],{"class":102,"line":595},[100,138628,29],{"class":52854},[100,138630,130708],{"class":106},[100,138632,713],{"class":258},[100,138634,138524],{"class":117},[100,138636,138510],{"class":258},[100,138638,138529],{"class":1836},[19,138640,138641],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[23579,138643,138645],{"id":138644},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,138647,138648],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[3095,138650],{"style":127650,"src":138651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[26,138653,138654],{},[29,138655,1809],{},[2773,138657,138658,138661,138664,138667,138670,138673],{},[29,138659,138660],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[29,138662,138663],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[29,138665,138666],{},"语法： element::before {}",[29,138668,138669],{},"before 和 after 必须有 content 属性",[29,138671,138672],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[29,138674,138675],{},"伪元素选择器和标签选择器一样，权重为 1",[26,138677,138678],{"start":188},[29,138679,138680],{},"实例",[73,138682,138683],{"className":127794,"code":138556,"language":127796,"meta":79,"style":79},[32,138684,138685,138689,138699,138709,138723,138737,138751],{"__ignoreMap":79},[100,138686,138687],{"class":102,"line":103},[100,138688,138437],{"class":1836},[100,138690,138691,138693,138695,138697],{"class":102,"line":188},[100,138692,29],{"class":52854},[100,138694,138444],{"class":106},[100,138696,138447],{"class":258},[100,138698,138450],{"class":1836},[100,138700,138701,138703,138705,138707],{"class":102,"line":199},[100,138702,29],{"class":52854},[100,138704,138457],{"class":106},[100,138706,138460],{"class":258},[100,138708,138463],{"class":1836},[100,138710,138711,138713,138715,138717,138719,138721],{"class":102,"line":532},[100,138712,29],{"class":52854},[100,138714,130708],{"class":106},[100,138716,713],{"class":258},[100,138718,465],{"class":117},[100,138720,138476],{"class":258},[100,138722,138479],{"class":1836},[100,138724,138725,138727,138729,138731,138733,138735],{"class":102,"line":577},[100,138726,29],{"class":52854},[100,138728,130708],{"class":106},[100,138730,713],{"class":258},[100,138732,138490],{"class":117},[100,138734,138493],{"class":258},[100,138736,138496],{"class":1836},[100,138738,138739,138741,138743,138745,138747,138749],{"class":102,"line":589},[100,138740,29],{"class":52854},[100,138742,130708],{"class":106},[100,138744,713],{"class":258},[100,138746,138507],{"class":117},[100,138748,138510],{"class":258},[100,138750,138513],{"class":1836},[100,138752,138753,138755,138757,138759,138761,138763],{"class":102,"line":595},[100,138754,29],{"class":52854},[100,138756,130708],{"class":106},[100,138758,713],{"class":258},[100,138760,138524],{"class":117},[100,138762,138510],{"class":258},[100,138764,138529],{"class":1836},[3095,138766],{"style":127650,"src":138767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[26,138769,138770],{"start":199},[29,138771,138772],{},"使用场景1",[3095,138774],{"style":127650,"src":138775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,138777,138778],{},"不需要再加盒子来整红色那部分了",[73,138780,138782],{"className":127794,"code":138781,"language":127796,"meta":79,"style":79},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[32,138783,138784,138789,138798,138809,138819,138823,138832,138843,138853],{"__ignoreMap":79},[100,138785,138786],{"class":102,"line":103},[100,138787,138788],{"class":1836},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[100,138790,138791,138793,138796],{"class":102,"line":188},[100,138792,53165],{"class":52854},[100,138794,138795],{"class":106},"::before",[100,138797,17153],{"class":258},[100,138799,138800,138803,138805,138807],{"class":102,"line":199},[100,138801,138802],{"class":117},"  content",[100,138804,52991],{"class":258},[100,138806,9248],{"class":110},[100,138808,2927],{"class":258},[100,138810,138811,138813,138815,138817],{"class":102,"line":532},[100,138812,129410],{"class":117},[100,138814,52991],{"class":258},[100,138816,62423],{"class":117},[100,138818,2927],{"class":258},[100,138820,138821],{"class":102,"line":577},[100,138822,3197],{"class":258},[100,138824,138825,138827,138830],{"class":102,"line":589},[100,138826,53165],{"class":52854},[100,138828,138829],{"class":106},"::after",[100,138831,17153],{"class":258},[100,138833,138834,138836,138838,138841],{"class":102,"line":595},[100,138835,138802],{"class":117},[100,138837,52991],{"class":258},[100,138839,138840],{"class":110},"\"→\"",[100,138842,2927],{"class":258},[100,138844,138845,138847,138849,138851],{"class":102,"line":601},[100,138846,72459],{"class":117},[100,138848,52991],{"class":258},[100,138850,63624],{"class":117},[100,138852,2927],{"class":258},[100,138854,138855],{"class":102,"line":606},[100,138856,3197],{"class":258},[3095,138858],{"style":127650,"src":138859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,138861,138862],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[3095,138864],{"style":127650,"src":138865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,138867,138868],{},"但是在引用时需要先转义一下",[19,138870,138871],{},"content='\\e930'",[26,138873,138874],{"start":532},[29,138875,138876],{},"使用场景2",[19,138878,138879],{},"仿土豆效果",[19,138881,138882],{},"通过使用伪元素选择器可以减少body中盒子的数量",[73,138884,138885],{"className":127794,"code":138781,"language":127796,"meta":79,"style":79},[32,138886,138887,138891,138899,138909,138919,138923,138931,138941,138951],{"__ignoreMap":79},[100,138888,138889],{"class":102,"line":103},[100,138890,138788],{"class":1836},[100,138892,138893,138895,138897],{"class":102,"line":188},[100,138894,53165],{"class":52854},[100,138896,138795],{"class":106},[100,138898,17153],{"class":258},[100,138900,138901,138903,138905,138907],{"class":102,"line":199},[100,138902,138802],{"class":117},[100,138904,52991],{"class":258},[100,138906,9248],{"class":110},[100,138908,2927],{"class":258},[100,138910,138911,138913,138915,138917],{"class":102,"line":532},[100,138912,129410],{"class":117},[100,138914,52991],{"class":258},[100,138916,62423],{"class":117},[100,138918,2927],{"class":258},[100,138920,138921],{"class":102,"line":577},[100,138922,3197],{"class":258},[100,138924,138925,138927,138929],{"class":102,"line":589},[100,138926,53165],{"class":52854},[100,138928,138829],{"class":106},[100,138930,17153],{"class":258},[100,138932,138933,138935,138937,138939],{"class":102,"line":595},[100,138934,138802],{"class":117},[100,138936,52991],{"class":258},[100,138938,138840],{"class":110},[100,138940,2927],{"class":258},[100,138942,138943,138945,138947,138949],{"class":102,"line":601},[100,138944,72459],{"class":117},[100,138946,52991],{"class":258},[100,138948,63624],{"class":117},[100,138950,2927],{"class":258},[100,138952,138953],{"class":102,"line":606},[100,138954,3197],{"class":258},[3095,138956],{"style":127650,"src":138957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[26,138959,138960],{"start":577},[29,138961,138962],{},"使用场景3",[19,138964,138965],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[73,138967,138969],{"className":127794,"code":138968,"language":127796,"meta":79,"style":79},".box {\n  float: left;\n}\n```Css\n\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[32,138970,138971,138977,138987,138991,138995,138999,139007,139017,139027,139031,139039,139049,139059],{"__ignoreMap":79},[100,138972,138973,138975],{"class":102,"line":103},[100,138974,131642],{"class":106},[100,138976,17153],{"class":258},[100,138978,138979,138981,138983,138985],{"class":102,"line":188},[100,138980,132274],{"class":117},[100,138982,52991],{"class":258},[100,138984,330],{"class":117},[100,138986,2927],{"class":258},[100,138988,138989],{"class":102,"line":199},[100,138990,3197],{"class":258},[100,138992,138993],{"class":102,"line":532},[100,138994,137255],{"class":258},[100,138996,138997],{"class":102,"line":577},[100,138998,138788],{"class":1836},[100,139000,139001,139003,139005],{"class":102,"line":589},[100,139002,53165],{"class":52854},[100,139004,138795],{"class":106},[100,139006,17153],{"class":258},[100,139008,139009,139011,139013,139015],{"class":102,"line":595},[100,139010,138802],{"class":117},[100,139012,52991],{"class":258},[100,139014,9248],{"class":110},[100,139016,2927],{"class":258},[100,139018,139019,139021,139023,139025],{"class":102,"line":601},[100,139020,129410],{"class":117},[100,139022,52991],{"class":258},[100,139024,62423],{"class":117},[100,139026,2927],{"class":258},[100,139028,139029],{"class":102,"line":606},[100,139030,3197],{"class":258},[100,139032,139033,139035,139037],{"class":102,"line":612},[100,139034,53165],{"class":52854},[100,139036,138829],{"class":106},[100,139038,17153],{"class":258},[100,139040,139041,139043,139045,139047],{"class":102,"line":618},[100,139042,138802],{"class":117},[100,139044,52991],{"class":258},[100,139046,138840],{"class":110},[100,139048,2927],{"class":258},[100,139050,139051,139053,139055,139057],{"class":102,"line":623},[100,139052,72459],{"class":117},[100,139054,52991],{"class":258},[100,139056,63624],{"class":117},[100,139058,2927],{"class":258},[100,139060,139061],{"class":102,"line":629},[100,139062,3197],{"class":258},[19,139064,139065],{},"div {\nmargin: 0 auto;\n}",[73,139067,139070],{"className":139068,"code":139069,"language":78},[76],"\n### 14.2.3 CSS3图片变模糊\n\nfilter CSS属性将模糊或颜色偏移等图形效果应用于元素\n\n`filter: 函数();`，例如：`filter: blur(5px);`，`blur` 表示模糊处理，数值越大越模糊。\n\n### 14.2.4 计算盒子宽度\n\ncalc() 此CSS函数让你在声明CSS属性值时执行一些计算\n\nwidth: calc(100% - 80px);\n\n括号里面可以使用 + - \\* \u002F 来进行计算\n\n运算符前后要加空格，不然显示不出来\n\n要求子盒子宽度永远比父盒子小30像素\n\n### 14.2.5 CSS3 过渡\n\n过渡（transition)是CSS3中具有颠覆性的特征之一，我们可以在不使用 Flash 动画或 JavaScript 的情况下，当元素从一种样式变换为另一种样式时为元素添加效果\n\n**过渡动画：** 是从一个状态 渐渐的过渡到另外一个状态\n\n可以让我们页面更好看，更动感十足，虽然 低版本浏览器不支持（ie9以下版本） 但是不会影响页面布局。\n\n我们现在经常和 :hover 一起 搭配使用\n\n语法：\n\ntransition: 要过渡的属性 花费时间 运动曲线 何时开始;\n\n*   属性 ： 想要变化的 css 属性， 宽度高度 背景颜色 内外边距都可以 。如果想要所有的属性都变化过渡， 写一个all 就可以\n    \n*   花费时间： 单位是 秒（必须写单位） 比如 0.5s\n    \n*   运动曲线： 默认是 ease （可以省略）\n    \n*   何时开始：单位是 秒（必须写单位）可以设置延迟触发时间 默认是 0s （可以省略）\n    \n*   **后面两个属性可以省略**\n    \n*   **记住过渡的使用口诀： 谁做过渡给谁加**\n    \n\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-140.png\">\n\n代码案例\n\n```Css\ndiv {\n  transition: all 0.3s ease;\n}\n",[32,139071,139069],{"__ignoreMap":79},[19,139073,139074],{},"如果想让多个元素都发生变化",[19,139076,139077],{},"不能如下操作：",[19,139079,139080],{},"transition: width 2s ease 0.5s;",[19,139082,139083],{},"transition: height 2s ease 0.5s;不对！！！",[19,139085,139086],{},"上方会样式冲突，导致不显示任何过渡效果",[19,139088,139089],{},"使用如下：加逗号隔开",[19,139091,139092],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,139094,139095],{},"transition all 2s ease;",[305,139097,139099],{"id":139098},"_1426-过渡练习","14.2.6 过渡练习",[26,139101,139102],{},[29,139103,139104],{},"进度条",[3095,139106],{"style":127650,"src":139107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[73,139109,139111],{"className":127794,"code":139110,"language":127796,"meta":79,"style":79},"div {\n  transition: all 0.3s ease;\n}\n",[32,139112,139113,139119,139137],{"__ignoreMap":79},[100,139114,139115,139117],{"class":102,"line":103},[100,139116,53165],{"class":52854},[100,139118,17153],{"class":258},[100,139120,139121,139124,139126,139128,139131,139133,139135],{"class":102,"line":188},[100,139122,139123],{"class":117},"  transition",[100,139125,52991],{"class":258},[100,139127,29693],{"class":117},[100,139129,139130],{"class":117}," 0.3",[100,139132,2461],{"class":471},[100,139134,80234],{"class":117},[100,139136,2927],{"class":258},[100,139138,139139],{"class":102,"line":199},[100,139140,3197],{"class":258},[26,139142,139143],{"start":188},[29,139144,139145],{},"小米logo",[19,139147,139148],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[73,139150,139152],{"className":127794,"code":139151,"language":127796,"meta":79,"style":79},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[32,139153,139154,139159,139165,139181,139186],{"__ignoreMap":79},[100,139155,139156],{"class":102,"line":103},[100,139157,139158],{"class":1836},"\u002F* CSS3 过渡 *\u002F\n",[100,139160,139161,139163],{"class":102,"line":188},[100,139162,53165],{"class":52854},[100,139164,17153],{"class":258},[100,139166,139167,139169,139171,139173,139175,139177,139179],{"class":102,"line":199},[100,139168,139123],{"class":117},[100,139170,52991],{"class":258},[100,139172,29693],{"class":117},[100,139174,139130],{"class":117},[100,139176,2461],{"class":471},[100,139178,80234],{"class":117},[100,139180,2927],{"class":258},[100,139182,139183],{"class":102,"line":532},[100,139184,139185],{"class":1836},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[100,139187,139188],{"class":102,"line":577},[100,139189,3197],{"class":258},[19,139191,139192],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[1677,139194,139195],{},"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":79,"searchDepth":188,"depth":188,"links":139197},[139198,139203],{"id":137528,"depth":188,"text":137529,"children":139199},[139200,139201,139202],{"id":137532,"depth":199,"text":137533},{"id":137609,"depth":199,"text":137610},{"id":137940,"depth":199,"text":137941},{"id":138231,"depth":188,"text":138232,"children":139204},[139205,139206],{"id":138235,"depth":199,"text":138236},{"id":139098,"depth":199,"text":139099},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":137520,"description":24958},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":139213,"title":139214,"body":139215,"description":24958,"extension":1708,"meta":140959,"navigation":569,"path":140960,"seo":140961,"stem":140962,"__hash__":140963},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":139216,"toc":140940},[139217,139220,139224,139227,139233,139239,139243,139245,139248,139251,139254,139257,139260,139263,139266,139270,139274,139277,139280,139283,139287,139290,139293,139298,139301,139304,139307,139311,139314,139323,139326,139329,139333,139336,139339,139344,139351,139365,139373,139380,139385,139388,139391,139394,139401,139405,139411,139417,139420,139423,139428,139434,139436,139444,139449,139452,139458,139460,139465,139470,139473,139475,139480,139483,139488,139493,139527,139531,139535,139538,139542,139545,139631,139634,139671,139674,139710,139714,139719,139732,139786,139788,139816,139818,139846,139852,139866,139868,139912,139914,139958,139961,139968,139979,139981,140008,140010,140036,140043,140059,140061,140155,140157,140251,140258,140261,140266,140272,140346,140349,140351,140387,140389,140425,140428,140435,140454,140457,140460,140462,140487,140489,140513,140516,140519,140549,140553,140556,140619,140621,140687,140689,140753,140756,140788,140790,140816,140818,140844,140847,140878,140880,140906,140908,140934,140937],[10,139218,139214],{"id":139219},"_15-品优购项目上篇-搭建与公共模块",[14,139221,139223],{"id":139222},"_151-项目规划","15.1 项目规划",[3095,139225],{"style":127650,"src":139226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,139228,139229,139232],{},[1921,139230,139231],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,139234,139235,139238],{},[1921,139236,139237],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,139240,139242],{"id":139241},"_152-项目介绍","15.2 项目介绍",[19,139244,139231],{},[3095,139246],{"style":127650,"src":139247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,139249,139250],{},"主页：",[3095,139252],{"style":127650,"src":139253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,139255,139256],{},"列表页：",[3095,139258],{"style":127650,"src":139259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,139261,139262],{},"注册页：",[3095,139264],{"style":127650,"src":139265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,139267,139269],{"id":139268},"_153-项目搭建工作","15.3 项目搭建工作",[305,139271,139273],{"id":139272},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[3095,139275],{"style":127650,"src":139276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,139278,139279],{},"经常更换的图片要放到upload文件夹中",[19,139281,139282],{},"不经常换的放到images文件夹中",[305,139284,139286],{"id":139285},"_1532-创建文件如下","15.3.2 创建文件如下",[3095,139288],{"style":127650,"src":139289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[3095,139291],{"style":127650,"src":139292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,139294,139295],{},[1921,139296,139297],{},"初始化样式：",[19,139299,139300],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,139302,139303],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,139305,139306],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[305,139308,139310],{"id":139309},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,139312,139313],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,139315,139316,139317,139322],{},"这里最典型的应用就是 ",[1921,139318,139319],{},[32,139320,139321],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[3095,139324],{"style":127650,"src":139325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,139327,139328],{},"通过link方法来引入",[305,139330,139332],{"id":139331},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[3095,139334],{"style":127650,"src":139335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,139337,139338],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[26,139340,139341],{},[29,139342,139343],{},"制作favicon图标",[19,139345,139346,139347,139350],{},"①把品优购图标切成 ",[32,139348,139349],{},"png"," 图片",[19,139352,139353,139354,139356,139357,139360,139361],{},"②把 ",[32,139355,139349],{}," 图片转换为 ",[32,139358,139359],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[2006,139362,139363],{"href":139363,"rel":139364},"http:\u002F\u002Fwww.bitbug.net\u002F",[25442],[26,139366,139367,139370],{"start":188},[29,139368,139369],{},"favicon图标放到网站根目录下",[29,139371,139372],{},"HTML页面引入favicon",[19,139374,139375,139376,139379],{},"在html 页面里面的 ",[32,139377,139378],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,139381,139382],{},[32,139383,139384],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,139386,139387],{},"复制这行代码或者在生成这个的网站进行复制",[3095,139389],{"style":127650,"src":139390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,139392,139393],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,139395,139396,139397],{},"例如:",[2006,139398,139399],{"href":139399,"rel":139400},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[25442],[305,139402,139404],{"id":139403},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,139406,139407,139410],{},[1921,139408,139409],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,139412,139413,139416],{},[1921,139414,139415],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,139418,139419],{},"页面必须有三个标签用来符合 SEO 优化",[3095,139421],{"style":127650,"src":139422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[26,139424,139425],{},[29,139426,139427],{},"title网站标题",[19,139429,139430,139433],{},[1921,139431,139432],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,139435,70344],{},[2773,139437,139438,139441],{},[29,139439,139440],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[29,139442,139443],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[26,139445,139446],{"start":188},[29,139447,139448],{},"description网站描述",[19,139450,139451],{},"简要说明我们网站主要是做什么的",[19,139453,139454,139457],{},[1921,139455,139456],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,139459,70344],{},[19,139461,139462],{},[32,139463,139464],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[26,139466,139467],{"start":199},[29,139468,139469],{},"keywords关键词",[19,139471,139472],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,139474,70344],{},[19,139476,139477],{},[32,139478,139479],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,139481,139482],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,139484,139485],{},[1921,139486,139487],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[26,139489,139490],{"start":532},[29,139491,139492],{},"代码总结",[73,139494,139495],{"className":128541,"code":131898,"language":128543,"meta":79,"style":79},[32,139496,139497,139501,139515,139519],{"__ignoreMap":79},[100,139498,139499],{"class":102,"line":103},[100,139500,131905],{"class":1836},[100,139502,139503,139505,139507,139509,139511,139513],{"class":102,"line":188},[100,139504,2676],{"class":258},[100,139506,53165],{"class":52854},[100,139508,55040],{"class":106},[100,139510,472],{"class":258},[100,139512,131918],{"class":110},[100,139514,52861],{"class":258},[100,139516,139517],{"class":102,"line":199},[100,139518,131925],{"class":258},[100,139520,139521,139523,139525],{"class":102,"line":532},[100,139522,53339],{"class":258},[100,139524,53165],{"class":52854},[100,139526,52861],{"class":258},[14,139528,139530],{"id":139529},"_154-项目公共部分制作","15.4 项目公共部分制作",[305,139532,139534],{"id":139533},"_1541-常用模块类命名","15.4.1 常用模块类命名",[3095,139536],{"style":127650,"src":139537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[305,139539,139541],{"id":139540},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,139543,139544],{},"布局思路：",[2773,139546,139547,139550,139553,139575,139608],{},[29,139548,139549],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[29,139551,139552],{},"里面包含版心的盒子",[29,139554,139555,139556],{},"版心盒子里面包含 1 号左侧盒子左浮动",[2773,139557,139558,139566,139572],{},[29,139559,139560,139561,23081,139563,139565],{},"1 号盒子 里面包含一个",[32,139562,2773],{},[32,139564,2773],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[29,139567,139568,139569,139571],{},"里面的内容是水平排列，所以需要给",[32,139570,29],{},"设置浮动",[29,139573,139574],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[29,139576,139577,139578],{},"版心盒子里面包含 2 号右侧盒子右浮动",[2773,139579,139580,139594,139599],{},[29,139581,139582,139583,23081,139585,139587,139588,139590,139591,139593],{},"2 号盒子 里面包含一个",[32,139584,2773],{},[32,139586,2773],{},"包裹",[32,139589,29],{},"，中间的",[32,139592,2687],{},"可以用样式去设置，也可以用字符 |",[29,139595,139596,139597,139571],{},"里面内容水平排列，给",[32,139598,29],{},[29,139600,139601,139602,139604,139605,139607],{},"找到里面所有偶数的 ",[32,139603,29],{}," 设置样式（偶数的 ",[32,139606,29],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[29,139609,139610,139611],{},"需要用到字体图标",[2773,139612,139613,139619,139622,139625,139628],{},[29,139614,139615,139616],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[32,139617,139618],{},"arrow-icon",[29,139620,139621],{},"先要引入字体图片的资源",[29,139623,139624],{},"在样式里面利用 font-face 来进行声明",[29,139626,139627],{},"在伪元素的 content属性设置 图标的编码",[29,139629,139630],{},"给伪元素设置font-family属性",[19,139632,139633],{},"结构实例代码：",[73,139635,139637],{"className":127794,"code":139636,"language":127796,"meta":79,"style":79},"div::before {\n  content: \"\";\n  display: block;\n}\n",[32,139638,139639,139647,139657,139667],{"__ignoreMap":79},[100,139640,139641,139643,139645],{"class":102,"line":103},[100,139642,53165],{"class":52854},[100,139644,138795],{"class":106},[100,139646,17153],{"class":258},[100,139648,139649,139651,139653,139655],{"class":102,"line":188},[100,139650,138802],{"class":117},[100,139652,52991],{"class":258},[100,139654,9248],{"class":110},[100,139656,2927],{"class":258},[100,139658,139659,139661,139663,139665],{"class":102,"line":199},[100,139660,129410],{"class":117},[100,139662,52991],{"class":258},[100,139664,62423],{"class":117},[100,139666,2927],{"class":258},[100,139668,139669],{"class":102,"line":532},[100,139670,3197],{"class":258},[19,139672,139673],{},"样式实例代码：",[73,139675,139676],{"className":127794,"code":139636,"language":127796,"meta":79,"style":79},[32,139677,139678,139686,139696,139706],{"__ignoreMap":79},[100,139679,139680,139682,139684],{"class":102,"line":103},[100,139681,53165],{"class":52854},[100,139683,138795],{"class":106},[100,139685,17153],{"class":258},[100,139687,139688,139690,139692,139694],{"class":102,"line":188},[100,139689,138802],{"class":117},[100,139691,52991],{"class":258},[100,139693,9248],{"class":110},[100,139695,2927],{"class":258},[100,139697,139698,139700,139702,139704],{"class":102,"line":199},[100,139699,129410],{"class":117},[100,139701,52991],{"class":258},[100,139703,62423],{"class":117},[100,139705,2927],{"class":258},[100,139707,139708],{"class":102,"line":532},[100,139709,3197],{"class":258},[305,139711,139713],{"id":139712},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[2773,139715,139716],{},[29,139717,139718],{},"header 盒子必须要有高度",[19,139720,139721,139722,139724,139725],{},"1 号盒子是 ",[32,139723,132806],{}," 标志定位，在正常开发过程中， ",[1921,139726,139727,139728,139731],{},"logo的布局其实是有讲究的，需要进行 ",[32,139729,139730],{},"logoSEO","的优化 （★★★）",[2773,139733,139734,139742,139750,139777],{},[29,139735,139736,139738,139739,139741],{},[32,139737,132806],{}," 里面首先放一个 ",[32,139740,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[29,139743,139744,139746,139747,139749],{},[32,139745,10],{}," 里面再放一个链接，可以返回首页的，把 ",[32,139748,132806],{}," 的背景图片给链接即可",[29,139751,139752,139753],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[2773,139754,139755,139770],{},[29,139756,139757,139758,139761,139762,139765,139766,139769],{},"方法1：",[32,139759,139760],{},"text-indent"," 移到盒子外面（",[32,139763,139764],{},"text-indent: -9999px",") ，然后 ",[32,139767,139768],{},"overflow:hidden"," ，淘宝的做法",[29,139771,139772,139773,139776],{},"方法2：直接给 ",[32,139774,139775],{},"font-size: 0;"," 就看不到文字了，京东的做法",[29,139778,139779,139780,139782,139783,139785],{},"最后给链接一个 ",[32,139781,52961],{}," 属性，这样鼠标放到 ",[32,139784,132806],{}," 上就可以看到提示文字了",[19,139787,139633],{},[73,139789,139790],{"className":128541,"code":133027,"language":128543,"meta":79,"style":79},[32,139791,139792],{"__ignoreMap":79},[100,139793,139794,139796,139798,139800,139802,139804,139806,139808,139810,139812,139814],{"class":102,"line":103},[100,139795,2676],{"class":258},[100,139797,2006],{"class":52854},[100,139799,62611],{"class":106},[100,139801,472],{"class":258},[100,139803,133042],{"class":110},[100,139805,133045],{"class":106},[100,139807,472],{"class":258},[100,139809,133050],{"class":110},[100,139811,133053],{"class":258},[100,139813,2006],{"class":52854},[100,139815,52861],{"class":258},[19,139817,139673],{},[73,139819,139820],{"className":128541,"code":133027,"language":128543,"meta":79,"style":79},[32,139821,139822],{"__ignoreMap":79},[100,139823,139824,139826,139828,139830,139832,139834,139836,139838,139840,139842,139844],{"class":102,"line":103},[100,139825,2676],{"class":258},[100,139827,2006],{"class":52854},[100,139829,62611],{"class":106},[100,139831,472],{"class":258},[100,139833,133042],{"class":110},[100,139835,133045],{"class":106},[100,139837,472],{"class":258},[100,139839,133050],{"class":110},[100,139841,133053],{"class":258},[100,139843,2006],{"class":52854},[100,139845,52861],{"class":258},[19,139847,139848,139849,139851],{},"2 号盒子是 ",[32,139850,132819],{}," 搜索模块定位",[2773,139853,139854,139857,139860,139863],{},[29,139855,139856],{},"search盒子利用定位的方式放在对应的位置",[29,139858,139859],{},"search盒子设置绝对定位，header盒子设置相对定位",[29,139861,139862],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[29,139864,139865],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,139867,139633],{},[73,139869,139870],{"className":127794,"code":133114,"language":127796,"meta":79,"style":79},[32,139871,139872,139894,139898,139908],{"__ignoreMap":79},[100,139873,139874,139876,139878,139880,139882,139884,139886,139888,139890,139892],{"class":102,"line":103},[100,139875,53165],{"class":52854},[100,139877,14017],{"class":258},[100,139879,19],{"class":52854},[100,139881,14017],{"class":258},[100,139883,10],{"class":52854},[100,139885,14017],{"class":258},[100,139887,2773],{"class":52854},[100,139889,14017],{"class":258},[100,139891,29],{"class":52854},[100,139893,17153],{"class":258},[100,139895,139896],{"class":102,"line":188},[100,139897,133143],{"class":1836},[100,139899,139900,139902,139904,139906],{"class":102,"line":199},[100,139901,129410],{"class":117},[100,139903,52991],{"class":258},[100,139905,62423],{"class":117},[100,139907,2927],{"class":258},[100,139909,139910],{"class":102,"line":532},[100,139911,3197],{"class":258},[19,139913,139673],{},[73,139915,139916],{"className":127794,"code":133114,"language":127796,"meta":79,"style":79},[32,139917,139918,139940,139944,139954],{"__ignoreMap":79},[100,139919,139920,139922,139924,139926,139928,139930,139932,139934,139936,139938],{"class":102,"line":103},[100,139921,53165],{"class":52854},[100,139923,14017],{"class":258},[100,139925,19],{"class":52854},[100,139927,14017],{"class":258},[100,139929,10],{"class":52854},[100,139931,14017],{"class":258},[100,139933,2773],{"class":52854},[100,139935,14017],{"class":258},[100,139937,29],{"class":52854},[100,139939,17153],{"class":258},[100,139941,139942],{"class":102,"line":188},[100,139943,133143],{"class":1836},[100,139945,139946,139948,139950,139952],{"class":102,"line":199},[100,139947,129410],{"class":117},[100,139949,52991],{"class":258},[100,139951,62423],{"class":117},[100,139953,2927],{"class":258},[100,139955,139956],{"class":102,"line":532},[100,139957,3197],{"class":258},[19,139959,139960],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,139962,139963,139964,139967],{},"3 号盒子是 ",[32,139965,139966],{},"hotwords"," 热词模块定位",[2773,139969,139970,139973,139976],{},[29,139971,139972],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[29,139974,139975],{},"给里面所有的a标签设置 左右10px的外边距",[29,139977,139978],{},"给第一个a标签设置文字变红色（#c81623）",[19,139980,139633],{},[73,139982,139984],{"className":127794,"code":139983,"language":127796,"meta":79,"style":79},"div {\n  margin: 0 auto;\n}\n",[32,139985,139986,139992,140004],{"__ignoreMap":79},[100,139987,139988,139990],{"class":102,"line":103},[100,139989,53165],{"class":52854},[100,139991,17153],{"class":258},[100,139993,139994,139996,139998,140000,140002],{"class":102,"line":188},[100,139995,72024],{"class":117},[100,139997,52991],{"class":258},[100,139999,1366],{"class":117},[100,140001,53110],{"class":117},[100,140003,2927],{"class":258},[100,140005,140006],{"class":102,"line":199},[100,140007,3197],{"class":258},[19,140009,139673],{},[73,140011,140012],{"className":127794,"code":139983,"language":127796,"meta":79,"style":79},[32,140013,140014,140020,140032],{"__ignoreMap":79},[100,140015,140016,140018],{"class":102,"line":103},[100,140017,53165],{"class":52854},[100,140019,17153],{"class":258},[100,140021,140022,140024,140026,140028,140030],{"class":102,"line":188},[100,140023,72024],{"class":117},[100,140025,52991],{"class":258},[100,140027,1366],{"class":117},[100,140029,53110],{"class":117},[100,140031,2927],{"class":258},[100,140033,140034],{"class":102,"line":199},[100,140035,3197],{"class":258},[19,140037,140038,140039,140042],{},"4 号盒子是 ",[32,140040,140041],{},"shopcar"," 购物车模块",[2773,140044,140045,140050,140053,140056],{},[29,140046,124577,140047,140049],{},[32,140048,140041],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[29,140051,140052],{},"count 统计部分用绝对定位做",[29,140054,140055],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[29,140057,140058],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,140060,139633],{},[73,140062,140063],{"className":127794,"code":133226,"language":127796,"meta":79,"style":79},[32,140064,140065,140069,140083,140087,140101,140105,140119,140123,140137,140141],{"__ignoreMap":79},[100,140066,140067],{"class":102,"line":103},[100,140068,133233],{"class":1836},[100,140070,140071,140073,140075,140077,140079,140081],{"class":102,"line":188},[100,140072,133238],{"class":106},[100,140074,81361],{"class":258},[100,140076,130154],{"class":117},[100,140078,52991],{"class":258},[100,140080,133247],{"class":117},[100,140082,130724],{"class":258},[100,140084,140085],{"class":102,"line":199},[100,140086,133254],{"class":1836},[100,140088,140089,140091,140093,140095,140097,140099],{"class":102,"line":532},[100,140090,133259],{"class":106},[100,140092,81361],{"class":258},[100,140094,130154],{"class":117},[100,140096,52991],{"class":258},[100,140098,56318],{"class":117},[100,140100,130724],{"class":258},[100,140102,140103],{"class":102,"line":577},[100,140104,133274],{"class":1836},[100,140106,140107,140109,140111,140113,140115,140117],{"class":102,"line":589},[100,140108,133279],{"class":106},[100,140110,81361],{"class":258},[100,140112,130154],{"class":117},[100,140114,52991],{"class":258},[100,140116,56385],{"class":117},[100,140118,130724],{"class":258},[100,140120,140121],{"class":102,"line":595},[100,140122,133294],{"class":1836},[100,140124,140125,140127,140129,140131,140133,140135],{"class":102,"line":601},[100,140126,133299],{"class":106},[100,140128,81361],{"class":258},[100,140130,130154],{"class":117},[100,140132,52991],{"class":258},[100,140134,87785],{"class":117},[100,140136,130724],{"class":258},[100,140138,140139],{"class":102,"line":606},[100,140140,133314],{"class":1836},[100,140142,140143,140145,140147,140149,140151,140153],{"class":102,"line":612},[100,140144,133319],{"class":106},[100,140146,81361],{"class":258},[100,140148,130154],{"class":117},[100,140150,52991],{"class":258},[100,140152,133328],{"class":117},[100,140154,130724],{"class":258},[19,140156,139673],{},[73,140158,140159],{"className":127794,"code":133226,"language":127796,"meta":79,"style":79},[32,140160,140161,140165,140179,140183,140197,140201,140215,140219,140233,140237],{"__ignoreMap":79},[100,140162,140163],{"class":102,"line":103},[100,140164,133233],{"class":1836},[100,140166,140167,140169,140171,140173,140175,140177],{"class":102,"line":188},[100,140168,133238],{"class":106},[100,140170,81361],{"class":258},[100,140172,130154],{"class":117},[100,140174,52991],{"class":258},[100,140176,133247],{"class":117},[100,140178,130724],{"class":258},[100,140180,140181],{"class":102,"line":199},[100,140182,133254],{"class":1836},[100,140184,140185,140187,140189,140191,140193,140195],{"class":102,"line":532},[100,140186,133259],{"class":106},[100,140188,81361],{"class":258},[100,140190,130154],{"class":117},[100,140192,52991],{"class":258},[100,140194,56318],{"class":117},[100,140196,130724],{"class":258},[100,140198,140199],{"class":102,"line":577},[100,140200,133274],{"class":1836},[100,140202,140203,140205,140207,140209,140211,140213],{"class":102,"line":589},[100,140204,133279],{"class":106},[100,140206,81361],{"class":258},[100,140208,130154],{"class":117},[100,140210,52991],{"class":258},[100,140212,56385],{"class":117},[100,140214,130724],{"class":258},[100,140216,140217],{"class":102,"line":595},[100,140218,133294],{"class":1836},[100,140220,140221,140223,140225,140227,140229,140231],{"class":102,"line":601},[100,140222,133299],{"class":106},[100,140224,81361],{"class":258},[100,140226,130154],{"class":117},[100,140228,52991],{"class":258},[100,140230,87785],{"class":117},[100,140232,130724],{"class":258},[100,140234,140235],{"class":102,"line":606},[100,140236,133314],{"class":1836},[100,140238,140239,140241,140243,140245,140247,140249],{"class":102,"line":612},[100,140240,133319],{"class":106},[100,140242,81361],{"class":258},[100,140244,130154],{"class":117},[100,140246,52991],{"class":258},[100,140248,133328],{"class":117},[100,140250,130724],{"class":258},[305,140252,140254,140255,140257],{"id":140253},"_1544-nav导航模块制作","15.4.4 ",[32,140256,55267],{},"导航模块制作",[3095,140259],{"style":127650,"src":140260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,140262,140263,140265],{},[32,140264,55267],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,140267,140268,140269],{},"1 号盒子左侧浮动，",[32,140270,140271],{},"dropdown",[2773,140273,140274,140284,140292,140298,140306,140316,140324,140335],{},[29,140275,140276,140277,218,140280,140283],{},"1号盒子有讲究，根据相关性 里面包含 ",[32,140278,140279],{},".dt",[32,140281,140282],{},".dd"," 两个盒子",[29,140285,140286,140288,140289,140291],{},[32,140287,140279],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[32,140290,140282],{}," 挤到下面去了",[29,140293,140294,140295,140297],{},"给 ",[32,140296,140282],{}," 盒子设置宽度 和 高度，以及背景颜色",[29,140299,140294,140300,140302,140303,121479],{},[32,140301,140282],{}," 盒子里面定义 无序列表 （",[32,140304,140305],{},"ul > li > a",[29,140307,140308,140309,140311,140312,140315],{},"每个 ",[32,140310,29],{}," 都有一个高度（",[32,140313,140314],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[29,140317,140294,140318,140320,140321,121479],{},[32,140319,29],{}," 里面的a设置文字大小（",[32,140322,140323],{},"14px",[29,140325,140294,140326,140328,140329,140331,140332,140334],{},[32,140327,29],{}," 设置 ",[32,140330,128955],{},"，当鼠标移入的时候，让",[32,140333,29],{},"的背景变成白色，让里面的文字变成红色",[29,140336,140337,140339,140340,140342,140343,140345],{},[32,140338,29],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[32,140341,29],{},"的右侧，那么给",[32,140344,29],{},"设置相对定位",[19,140347,140348],{},"一定要注意相关性",[19,140350,139633],{},[73,140352,140353],{"className":127794,"code":139636,"language":127796,"meta":79,"style":79},[32,140354,140355,140363,140373,140383],{"__ignoreMap":79},[100,140356,140357,140359,140361],{"class":102,"line":103},[100,140358,53165],{"class":52854},[100,140360,138795],{"class":106},[100,140362,17153],{"class":258},[100,140364,140365,140367,140369,140371],{"class":102,"line":188},[100,140366,138802],{"class":117},[100,140368,52991],{"class":258},[100,140370,9248],{"class":110},[100,140372,2927],{"class":258},[100,140374,140375,140377,140379,140381],{"class":102,"line":199},[100,140376,129410],{"class":117},[100,140378,52991],{"class":258},[100,140380,62423],{"class":117},[100,140382,2927],{"class":258},[100,140384,140385],{"class":102,"line":532},[100,140386,3197],{"class":258},[19,140388,139673],{},[73,140390,140391],{"className":127794,"code":139636,"language":127796,"meta":79,"style":79},[32,140392,140393,140401,140411,140421],{"__ignoreMap":79},[100,140394,140395,140397,140399],{"class":102,"line":103},[100,140396,53165],{"class":52854},[100,140398,138795],{"class":106},[100,140400,17153],{"class":258},[100,140402,140403,140405,140407,140409],{"class":102,"line":188},[100,140404,138802],{"class":117},[100,140406,52991],{"class":258},[100,140408,9248],{"class":110},[100,140410,2927],{"class":258},[100,140412,140413,140415,140417,140419],{"class":102,"line":199},[100,140414,129410],{"class":117},[100,140416,52991],{"class":258},[100,140418,62423],{"class":117},[100,140420,2927],{"class":258},[100,140422,140423],{"class":102,"line":532},[100,140424,3197],{"class":258},[19,140426,140427],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,140429,140430,140431,140434],{},"2 号盒子左侧浮动，",[32,140432,140433],{},"navitems"," 导航栏组",[2773,140436,140437,140442,140451],{},[29,140438,140439,140440],{},"里面结构是 ",[32,140441,140305],{},[29,140443,140444,140445,140447,140448,140450],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[32,140446,2006],{},"左右的",[32,140449,32446],{},"把两侧撑开",[29,140452,140453],{},"让文字垂直居中（行高等于高度）",[3095,140455],{"style":127650,"src":140456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,140458,140459],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,140461,139633],{},[73,140463,140465],{"className":127794,"code":140464,"language":127796,"meta":79,"style":79},".box {\n  float: left;\n}\n",[32,140466,140467,140473,140483],{"__ignoreMap":79},[100,140468,140469,140471],{"class":102,"line":103},[100,140470,131642],{"class":106},[100,140472,17153],{"class":258},[100,140474,140475,140477,140479,140481],{"class":102,"line":188},[100,140476,132274],{"class":117},[100,140478,52991],{"class":258},[100,140480,330],{"class":117},[100,140482,2927],{"class":258},[100,140484,140485],{"class":102,"line":199},[100,140486,3197],{"class":258},[19,140488,139673],{},[73,140490,140491],{"className":127794,"code":140464,"language":127796,"meta":79,"style":79},[32,140492,140493,140499,140509],{"__ignoreMap":79},[100,140494,140495,140497],{"class":102,"line":103},[100,140496,131642],{"class":106},[100,140498,17153],{"class":258},[100,140500,140501,140503,140505,140507],{"class":102,"line":188},[100,140502,132274],{"class":117},[100,140504,52991],{"class":258},[100,140506,330],{"class":117},[100,140508,2927],{"class":258},[100,140510,140511],{"class":102,"line":199},[100,140512,3197],{"class":258},[19,140514,140515],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[3095,140517],{"style":127650,"src":140518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[73,140520,140521],{"className":127794,"code":131951,"language":127796,"meta":79,"style":79},[32,140522,140523,140529,140545],{"__ignoreMap":79},[100,140524,140525,140527],{"class":102,"line":103},[100,140526,53165],{"class":52854},[100,140528,17153],{"class":258},[100,140530,140531,140533,140535,140537,140539,140541,140543],{"class":102,"line":188},[100,140532,72450],{"class":117},[100,140534,52991],{"class":258},[100,140536,1985],{"class":117},[100,140538,53046],{"class":471},[100,140540,53075],{"class":117},[100,140542,131186],{"class":117},[100,140544,2927],{"class":258},[100,140546,140547],{"class":102,"line":199},[100,140548,3197],{"class":258},[305,140550,140552],{"id":140551},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[3095,140554],{"style":127650,"src":140555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[2773,140557,140558,140563,140568],{},[29,140559,140560,140562],{},[32,140561,132997],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[29,140564,140565,140567],{},[32,140566,132997],{}," 里面有一个大的版心",[29,140569,140570,140571,140574,140575],{},"版心里面包含 1 号盒子，",[32,140572,140573],{},"mod_service"," 是服务模块，mod 是模块的意思",[2773,140576,140577,140582,140595,140611,140616],{},[29,140578,140294,140579,140581],{},[32,140580,140573],{}," 设置高度（80px）和下边框",[29,140583,140584,140585,140588,140589,140591,140592,140594],{},"在里面定义 ",[32,140586,140587],{},"ul > li"," ,每个",[32,140590,29],{}," 宽度是300px 高度是 50px，给每个",[32,140593,29],{},"设置35px的左内边距",[29,140596,140597,140598,140600,140601,140603,140604,140606,140607,19991,140609,121479],{},"在每个",[32,140599,29],{},"里面，放一个 ",[32,140602,24491],{},"（里面放图标），一个",[32,140605,53165],{},"（里面放",[32,140608,53165],{},[32,140610,19],{},[29,140612,140294,140613,140615],{},[32,140614,24491],{},"设置浮动，让h5与这个div左右排列",[29,140617,140618],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,140620,139633],{},[73,140622,140624],{"className":127794,"code":140623,"language":127796,"meta":79,"style":79},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[32,140625,140626,140632,140644,140656,140683],{"__ignoreMap":79},[100,140627,140628,140630],{"class":102,"line":103},[100,140629,135551],{"class":106},[100,140631,17153],{"class":258},[100,140633,140634,140636,140638,140640,140642],{"class":102,"line":188},[100,140635,72122],{"class":117},[100,140637,52991],{"class":258},[100,140639,2466],{"class":117},[100,140641,53046],{"class":471},[100,140643,2927],{"class":258},[100,140645,140646,140648,140650,140652,140654],{"class":102,"line":199},[100,140647,72342],{"class":117},[100,140649,52991],{"class":258},[100,140651,2466],{"class":117},[100,140653,53046],{"class":471},[100,140655,2927],{"class":258},[100,140657,140658,140660,140662,140664,140666,140668,140670,140672,140675,140677,140679,140681],{"class":102,"line":532},[100,140659,72165],{"class":117},[100,140661,52991],{"class":258},[100,140663,63280],{"class":117},[100,140665,713],{"class":258},[100,140667,135590],{"class":6812},[100,140669,15295],{"class":258},[100,140671,63290],{"class":117},[100,140673,140674],{"class":117}," -10",[100,140676,53046],{"class":471},[100,140678,135609],{"class":117},[100,140680,53046],{"class":471},[100,140682,2927],{"class":258},[100,140684,140685],{"class":102,"line":577},[100,140686,3197],{"class":258},[19,140688,139673],{},[73,140690,140691],{"className":127794,"code":140623,"language":127796,"meta":79,"style":79},[32,140692,140693,140699,140711,140723,140749],{"__ignoreMap":79},[100,140694,140695,140697],{"class":102,"line":103},[100,140696,135551],{"class":106},[100,140698,17153],{"class":258},[100,140700,140701,140703,140705,140707,140709],{"class":102,"line":188},[100,140702,72122],{"class":117},[100,140704,52991],{"class":258},[100,140706,2466],{"class":117},[100,140708,53046],{"class":471},[100,140710,2927],{"class":258},[100,140712,140713,140715,140717,140719,140721],{"class":102,"line":199},[100,140714,72342],{"class":117},[100,140716,52991],{"class":258},[100,140718,2466],{"class":117},[100,140720,53046],{"class":471},[100,140722,2927],{"class":258},[100,140724,140725,140727,140729,140731,140733,140735,140737,140739,140741,140743,140745,140747],{"class":102,"line":532},[100,140726,72165],{"class":117},[100,140728,52991],{"class":258},[100,140730,63280],{"class":117},[100,140732,713],{"class":258},[100,140734,135590],{"class":6812},[100,140736,15295],{"class":258},[100,140738,63290],{"class":117},[100,140740,140674],{"class":117},[100,140742,53046],{"class":471},[100,140744,135609],{"class":117},[100,140746,53046],{"class":471},[100,140748,2927],{"class":258},[100,140750,140751],{"class":102,"line":577},[100,140752,3197],{"class":258},[19,140754,140755],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[2773,140757,140758,140761,140767,140773,140785],{},[29,140759,140760],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[29,140762,140763,140764,121479],{},"里面的布局利用 自定义列表来实现（",[32,140765,140766],{},"dl > dt + dd",[29,140768,140294,140769,140772],{},[32,140770,140771],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[29,140774,140294,140775,140778,140779,19991,140781,140784],{},[32,140776,140777],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[32,140780,140777],{},[32,140782,140783],{},"dd","之间有些距离",[29,140786,140787],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,140789,139633],{},[73,140791,140792],{"className":127794,"code":139983,"language":127796,"meta":79,"style":79},[32,140793,140794,140800,140812],{"__ignoreMap":79},[100,140795,140796,140798],{"class":102,"line":103},[100,140797,53165],{"class":52854},[100,140799,17153],{"class":258},[100,140801,140802,140804,140806,140808,140810],{"class":102,"line":188},[100,140803,72024],{"class":117},[100,140805,52991],{"class":258},[100,140807,1366],{"class":117},[100,140809,53110],{"class":117},[100,140811,2927],{"class":258},[100,140813,140814],{"class":102,"line":199},[100,140815,3197],{"class":258},[19,140817,139673],{},[73,140819,140820],{"className":127794,"code":139983,"language":127796,"meta":79,"style":79},[32,140821,140822,140828,140840],{"__ignoreMap":79},[100,140823,140824,140826],{"class":102,"line":103},[100,140825,53165],{"class":52854},[100,140827,17153],{"class":258},[100,140829,140830,140832,140834,140836,140838],{"class":102,"line":188},[100,140831,72024],{"class":117},[100,140833,52991],{"class":258},[100,140835,1366],{"class":117},[100,140837,53110],{"class":117},[100,140839,2927],{"class":258},[100,140841,140842],{"class":102,"line":199},[100,140843,3197],{"class":258},[19,140845,140846],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[2773,140848,140849,140858,140861,140872],{},[29,140850,140851,140852,140854,140855,140857],{},"分为上下两块，上面是 ",[32,140853,133014],{}," 友情链接，下面是 ",[32,140856,133007],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[29,140859,140860],{},"把内容分别复制到相应模块中",[29,140862,140294,140863,140865,140866,140868,140869,140871],{},[32,140864,133014],{}," 设置 15px 的下外边距，给",[32,140867,133014],{}," 里面 的 ",[32,140870,2006],{}," 标签设置 左右 3px 的外边距",[29,140873,140874,140875,140877],{},"给",[32,140876,133007],{}," 设置 20px 的行高",[19,140879,139633],{},[73,140881,140882],{"className":127794,"code":139983,"language":127796,"meta":79,"style":79},[32,140883,140884,140890,140902],{"__ignoreMap":79},[100,140885,140886,140888],{"class":102,"line":103},[100,140887,53165],{"class":52854},[100,140889,17153],{"class":258},[100,140891,140892,140894,140896,140898,140900],{"class":102,"line":188},[100,140893,72024],{"class":117},[100,140895,52991],{"class":258},[100,140897,1366],{"class":117},[100,140899,53110],{"class":117},[100,140901,2927],{"class":258},[100,140903,140904],{"class":102,"line":199},[100,140905,3197],{"class":258},[19,140907,139673],{},[73,140909,140910],{"className":127794,"code":139983,"language":127796,"meta":79,"style":79},[32,140911,140912,140918,140930],{"__ignoreMap":79},[100,140913,140914,140916],{"class":102,"line":103},[100,140915,53165],{"class":52854},[100,140917,17153],{"class":258},[100,140919,140920,140922,140924,140926,140928],{"class":102,"line":188},[100,140921,72024],{"class":117},[100,140923,52991],{"class":258},[100,140925,1366],{"class":117},[100,140927,53110],{"class":117},[100,140929,2927],{"class":258},[100,140931,140932],{"class":102,"line":199},[100,140933,3197],{"class":258},[19,140935,140936],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[1677,140938,140939],{},"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":79,"searchDepth":188,"depth":188,"links":140941},[140942,140943,140944,140951],{"id":139222,"depth":188,"text":139223},{"id":139241,"depth":188,"text":139242},{"id":139268,"depth":188,"text":139269,"children":140945},[140946,140947,140948,140949,140950],{"id":139272,"depth":199,"text":139273},{"id":139285,"depth":199,"text":139286},{"id":139309,"depth":199,"text":139310},{"id":139331,"depth":199,"text":139332},{"id":139403,"depth":199,"text":139404},{"id":139529,"depth":188,"text":139530,"children":140952},[140953,140954,140955,140956,140958],{"id":139533,"depth":199,"text":139534},{"id":139540,"depth":199,"text":139541},{"id":139712,"depth":199,"text":139713},{"id":140253,"depth":199,"text":140957},"15.4.4 nav导航模块制作",{"id":140551,"depth":199,"text":140552},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":139214,"description":24958},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":140965,"title":140966,"body":140967,"description":24958,"extension":1708,"meta":143369,"navigation":569,"path":143370,"seo":143371,"stem":143372,"__hash__":143373},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":140968,"toc":143346},[140969,140972,140976,140980,140992,140995,140998,141001,141012,141014,141038,141040,141064,141069,141072,141074,141110,141112,141148,141151,141156,141159,141162,141165,141195,141202,141205,141215,141217,141251,141254,141288,141294,141311,141313,141349,141351,141387,141392,141417,141419,141445,141447,141471,141478,141481,141545,141547,141589,141591,141631,141638,141643,141645,141675,141677,141707,141711,141714,141721,141733,141735,141761,141763,141787,141790,141792,141816,141822,141832,141834,141864,141866,141896,141903,141944,141946,141982,141984,142020,142024,142027,142030,142033,142039,142044,142047,142070,142073,142097,142100,142124,142129,142132,142135,142138,142141,142144,142218,142220,142250,142252,142282,142285,142288,142320,142324,142328,142342,142351,142354,142359,142361,142455,142457,142551,142574,142576,142600,142602,142626,142633,142636,142646,142648,142672,142677,142685,142687,142717,142722,142762,142764,142790,142792,142818,142822,142825,142830,142833,142837,142845,142852,142860,142862,142892,142894,142924,142932,142935,142938,142940,142970,142972,143002,143005,143010,143012,143036,143038,143062,143065,143150,143152,143176,143178,143202,143206,143208,143232,143234,143268,143272,143286,143289,143294,143297,143302,143305,143335,143343],[10,140970,140966],{"id":140971},"_16-品优购项目下篇-主体与页面开发",[14,140973,140975],{"id":140974},"_161-项目主体模块制作","16.1 项目主体模块制作",[305,140977,140979],{"id":140978},"_1611-首页制作","16.1.1 首页制作",[19,140981,140982,140984,140985,140987,140988,140991],{},[1921,140983,103549],{}," 主体模块是 ",[1921,140986,75612],{}," 里面专有的，注意需要新的样式文件 ",[1921,140989,140990],{},"index.css，"," 就不要写在common.css中了",[3095,140993],{"style":127650,"src":140994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[3095,140996],{"style":127650,"src":140997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,140999,141000],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[2773,141002,141003,141006,141009],{},[29,141004,141005],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[29,141007,141008],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[29,141010,141011],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,141013,139633],{},[73,141015,141016],{"className":127794,"code":140464,"language":127796,"meta":79,"style":79},[32,141017,141018,141024,141034],{"__ignoreMap":79},[100,141019,141020,141022],{"class":102,"line":103},[100,141021,131642],{"class":106},[100,141023,17153],{"class":258},[100,141025,141026,141028,141030,141032],{"class":102,"line":188},[100,141027,132274],{"class":117},[100,141029,52991],{"class":258},[100,141031,330],{"class":117},[100,141033,2927],{"class":258},[100,141035,141036],{"class":102,"line":199},[100,141037,3197],{"class":258},[19,141039,139673],{},[73,141041,141042],{"className":127794,"code":140464,"language":127796,"meta":79,"style":79},[32,141043,141044,141050,141060],{"__ignoreMap":79},[100,141045,141046,141048],{"class":102,"line":103},[100,141047,131642],{"class":106},[100,141049,17153],{"class":258},[100,141051,141052,141054,141056,141058],{"class":102,"line":188},[100,141053,132274],{"class":117},[100,141055,52991],{"class":258},[100,141057,330],{"class":117},[100,141059,2927],{"class":258},[100,141061,141062],{"class":102,"line":199},[100,141063,3197],{"class":258},[26,141065,141066],{},[29,141067,141068],{},"左侧focus模块制作",[3095,141070],{"style":127650,"src":141071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,141073,139633],{},[73,141075,141076],{"className":127794,"code":129117,"language":127796,"meta":79,"style":79},[32,141077,141078,141086,141096,141106],{"__ignoreMap":79},[100,141079,141080,141082,141084],{"class":102,"line":103},[100,141081,55375],{"class":52854},[100,141083,63454],{"class":106},[100,141085,17153],{"class":258},[100,141087,141088,141090,141092,141094],{"class":102,"line":188},[100,141089,129132],{"class":117},[100,141091,52991],{"class":258},[100,141093,56443],{"class":117},[100,141095,2927],{"class":258},[100,141097,141098,141100,141102,141104],{"class":102,"line":199},[100,141099,72352],{"class":117},[100,141101,52991],{"class":258},[100,141103,56291],{"class":117},[100,141105,2927],{"class":258},[100,141107,141108],{"class":102,"line":532},[100,141109,3197],{"class":258},[19,141111,139673],{},[73,141113,141114],{"className":127794,"code":129117,"language":127796,"meta":79,"style":79},[32,141115,141116,141124,141134,141144],{"__ignoreMap":79},[100,141117,141118,141120,141122],{"class":102,"line":103},[100,141119,55375],{"class":52854},[100,141121,63454],{"class":106},[100,141123,17153],{"class":258},[100,141125,141126,141128,141130,141132],{"class":102,"line":188},[100,141127,129132],{"class":117},[100,141129,52991],{"class":258},[100,141131,56443],{"class":117},[100,141133,2927],{"class":258},[100,141135,141136,141138,141140,141142],{"class":102,"line":199},[100,141137,72352],{"class":117},[100,141139,52991],{"class":258},[100,141141,56291],{"class":117},[100,141143,2927],{"class":258},[100,141145,141146],{"class":102,"line":532},[100,141147,3197],{"class":258},[19,141149,141150],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[26,141152,141153],{"start":188},[29,141154,141155],{},"右侧newsflash模块制作",[3095,141157],{"style":127650,"src":141158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,141160,141161],{},"右侧的模块 分为上中下三个盒子",[19,141163,141164],{},"结构代码：",[73,141166,141167],{"className":128541,"code":135296,"language":128543,"meta":79,"style":79},[32,141168,141169],{"__ignoreMap":79},[100,141170,141171,141173,141175,141177,141179,141181,141183,141185,141187,141189,141191,141193],{"class":102,"line":103},[100,141172,2676],{"class":258},[100,141174,3095],{"class":52854},[100,141176,56793],{"class":106},[100,141178,472],{"class":258},[100,141180,135311],{"class":110},[100,141182,56801],{"class":106},[100,141184,472],{"class":258},[100,141186,135318],{"class":110},[100,141188,135321],{"class":106},[100,141190,472],{"class":258},[100,141192,135326],{"class":110},[100,141194,52861],{"class":258},[19,141196,141197,141198,141201],{},"1 号盒子为 ",[32,141199,141200],{},"news"," 新闻模块 高度为 165px",[3095,141203],{"style":127650,"src":141204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,141206,141207,141208,141211,141212],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[32,141209,141210],{},"news-hd","，下面是 ",[32,141213,141214],{},"news-bd",[19,141216,141164],{},[73,141218,141219],{"className":128541,"code":131898,"language":128543,"meta":79,"style":79},[32,141220,141221,141225,141239,141243],{"__ignoreMap":79},[100,141222,141223],{"class":102,"line":103},[100,141224,131905],{"class":1836},[100,141226,141227,141229,141231,141233,141235,141237],{"class":102,"line":188},[100,141228,2676],{"class":258},[100,141230,53165],{"class":52854},[100,141232,55040],{"class":106},[100,141234,472],{"class":258},[100,141236,131918],{"class":110},[100,141238,52861],{"class":258},[100,141240,141241],{"class":102,"line":199},[100,141242,131925],{"class":258},[100,141244,141245,141247,141249],{"class":102,"line":532},[100,141246,53339],{"class":258},[100,141248,53165],{"class":52854},[100,141250,52861],{"class":258},[19,141252,141253],{},"样式代码：",[73,141255,141256],{"className":128541,"code":131898,"language":128543,"meta":79,"style":79},[32,141257,141258,141262,141276,141280],{"__ignoreMap":79},[100,141259,141260],{"class":102,"line":103},[100,141261,131905],{"class":1836},[100,141263,141264,141266,141268,141270,141272,141274],{"class":102,"line":188},[100,141265,2676],{"class":258},[100,141267,53165],{"class":52854},[100,141269,55040],{"class":106},[100,141271,472],{"class":258},[100,141273,131918],{"class":110},[100,141275,52861],{"class":258},[100,141277,141278],{"class":102,"line":199},[100,141279,131925],{"class":258},[100,141281,141282,141284,141286],{"class":102,"line":532},[100,141283,53339],{"class":258},[100,141285,53165],{"class":52854},[100,141287,52861],{"class":258},[19,141289,141290,141291,141293],{},"上面是",[32,141292,141210],{},"，设置高度是 33px，设置下边框",[2773,141295,141296,141302],{},[29,141297,141298,141299,141301],{},"里面放一个",[32,141300,24491],{}," 标题",[29,141303,141304,141305,141307,141308,141310],{},"放一个a",[32,141306,104169],{},"，内容是 更多，然后让 ",[32,141309,2006],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,141312,141164],{},[73,141314,141315],{"className":127794,"code":139636,"language":127796,"meta":79,"style":79},[32,141316,141317,141325,141335,141345],{"__ignoreMap":79},[100,141318,141319,141321,141323],{"class":102,"line":103},[100,141320,53165],{"class":52854},[100,141322,138795],{"class":106},[100,141324,17153],{"class":258},[100,141326,141327,141329,141331,141333],{"class":102,"line":188},[100,141328,138802],{"class":117},[100,141330,52991],{"class":258},[100,141332,9248],{"class":110},[100,141334,2927],{"class":258},[100,141336,141337,141339,141341,141343],{"class":102,"line":199},[100,141338,129410],{"class":117},[100,141340,52991],{"class":258},[100,141342,62423],{"class":117},[100,141344,2927],{"class":258},[100,141346,141347],{"class":102,"line":532},[100,141348,3197],{"class":258},[19,141350,141253],{},[73,141352,141353],{"className":127794,"code":139636,"language":127796,"meta":79,"style":79},[32,141354,141355,141363,141373,141383],{"__ignoreMap":79},[100,141356,141357,141359,141361],{"class":102,"line":103},[100,141358,53165],{"class":52854},[100,141360,138795],{"class":106},[100,141362,17153],{"class":258},[100,141364,141365,141367,141369,141371],{"class":102,"line":188},[100,141366,138802],{"class":117},[100,141368,52991],{"class":258},[100,141370,9248],{"class":110},[100,141372,2927],{"class":258},[100,141374,141375,141377,141379,141381],{"class":102,"line":199},[100,141376,129410],{"class":117},[100,141378,52991],{"class":258},[100,141380,62423],{"class":117},[100,141382,2927],{"class":258},[100,141384,141385],{"class":102,"line":532},[100,141386,3197],{"class":258},[19,141388,141389,141390],{},"下面是",[32,141391,141214],{},[2773,141393,141394,141402],{},[29,141395,141396,141397,218,141399,141401],{},"里面包含 ",[32,141398,2773],{},[32,141400,29],{}," 还有链接",[29,141403,140874,141404,141406,141407,141409,141410,141413,141414],{},[32,141405,29],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[32,141408,132460],{}," 2.设置 ",[32,141411,141412],{},"white-space: nowrap;"," 3. 设置 ",[32,141415,141416],{},"text-overflow: ellipsis;",[19,141418,141164],{},[73,141420,141422],{"className":127794,"code":141421,"language":127796,"meta":79,"style":79},"div {\n  overflow: hidden;\n}\n",[32,141423,141424,141430,141441],{"__ignoreMap":79},[100,141425,141426,141428],{"class":102,"line":103},[100,141427,53165],{"class":52854},[100,141429,17153],{"class":258},[100,141431,141432,141435,141437,141439],{"class":102,"line":188},[100,141433,141434],{"class":117},"  overflow",[100,141436,52991],{"class":258},[100,141438,63268],{"class":117},[100,141440,2927],{"class":258},[100,141442,141443],{"class":102,"line":199},[100,141444,3197],{"class":258},[19,141446,141253],{},[73,141448,141449],{"className":127794,"code":141421,"language":127796,"meta":79,"style":79},[32,141450,141451,141457,141467],{"__ignoreMap":79},[100,141452,141453,141455],{"class":102,"line":103},[100,141454,53165],{"class":52854},[100,141456,17153],{"class":258},[100,141458,141459,141461,141463,141465],{"class":102,"line":188},[100,141460,141434],{"class":117},[100,141462,52991],{"class":258},[100,141464,63268],{"class":117},[100,141466,2927],{"class":258},[100,141468,141469],{"class":102,"line":199},[100,141470,3197],{"class":258},[19,141472,141473,141474,141477],{},"2 号盒子为 ",[32,141475,141476],{},"lifeservice"," 生活服务模块 高度为 209px",[3095,141479],{"style":127650,"src":141480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[2773,141482,141483,141486,141496,141520,141531],{},[29,141484,141485],{},"设置边框（左右下边框）",[29,141487,141488,141489,141492,141493,141495],{},"里面的内容 是 ",[32,141490,141491],{},"ul > 12*li","，给",[32,141494,29],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[29,141497,141498,141499],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[2773,141500,141501,141506,141515],{},[29,141502,141503,141505],{},[32,141504,141476],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[29,141507,141508,141509,141511,141512,141514],{},"可以让 ",[32,141510,141476],{}," 里面的 ",[32,141513,2773],{}," 宽度为 252，就可以装的下 4 个 小 li",[29,141516,141517,141519],{},[32,141518,141476],{}," 盒子 overflow 隐藏多余的部分就可以了",[29,141521,117709,141522,141524,141525,141527,141528,141530],{},[32,141523,29],{}," 里面放一个 ",[32,141526,2208],{},"（里面放图标），下面的文本用 ",[32,141529,19],{}," 标签包裹",[29,141532,140294,141533,141535,141536,141538,141539,140328,141541,141544],{},[32,141534,2208],{}," 设置 24px宽和28px的高（注意 ",[32,141537,2208],{}," 是行内元素， 转成行内块），给 ",[32,141540,29],{},[32,141542,141543],{},"text-align:center"," 让里面内容居中显示",[19,141546,141164],{},[73,141548,141550],{"className":127794,"code":141549,"language":127796,"meta":79,"style":79},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[32,141551,141552,141570,141575,141585],{"__ignoreMap":79},[100,141553,141554,141556,141558,141560,141562,141564,141566,141568],{"class":102,"line":103},[100,141555,100],{"class":52854},[100,141557,14017],{"class":258},[100,141559,2006],{"class":52854},[100,141561,14017],{"class":258},[100,141563,25135],{"class":52854},[100,141565,14017],{"class":258},[100,141567,1921],{"class":52854},[100,141569,17153],{"class":258},[100,141571,141572],{"class":102,"line":188},[100,141573,141574],{"class":1836},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[100,141576,141577,141579,141581,141583],{"class":102,"line":199},[100,141578,129410],{"class":117},[100,141580,52991],{"class":258},[100,141582,129472],{"class":117},[100,141584,2927],{"class":258},[100,141586,141587],{"class":102,"line":532},[100,141588,3197],{"class":258},[19,141590,141253],{},[73,141592,141593],{"className":127794,"code":141549,"language":127796,"meta":79,"style":79},[32,141594,141595,141613,141617,141627],{"__ignoreMap":79},[100,141596,141597,141599,141601,141603,141605,141607,141609,141611],{"class":102,"line":103},[100,141598,100],{"class":52854},[100,141600,14017],{"class":258},[100,141602,2006],{"class":52854},[100,141604,14017],{"class":258},[100,141606,25135],{"class":52854},[100,141608,14017],{"class":258},[100,141610,1921],{"class":52854},[100,141612,17153],{"class":258},[100,141614,141615],{"class":102,"line":188},[100,141616,141574],{"class":1836},[100,141618,141619,141621,141623,141625],{"class":102,"line":199},[100,141620,129410],{"class":117},[100,141622,52991],{"class":258},[100,141624,129472],{"class":117},[100,141626,2927],{"class":258},[100,141628,141629],{"class":102,"line":532},[100,141630,3197],{"class":258},[19,141632,141633,141634,141637],{},"3 号盒子为 ",[32,141635,141636],{},"bargain"," 特价商品",[2773,141639,141640],{},[29,141641,141642],{},"这个比较简单，直接插入一张图片即可",[19,141644,141164],{},[73,141646,141647],{"className":128541,"code":135296,"language":128543,"meta":79,"style":79},[32,141648,141649],{"__ignoreMap":79},[100,141650,141651,141653,141655,141657,141659,141661,141663,141665,141667,141669,141671,141673],{"class":102,"line":103},[100,141652,2676],{"class":258},[100,141654,3095],{"class":52854},[100,141656,56793],{"class":106},[100,141658,472],{"class":258},[100,141660,135311],{"class":110},[100,141662,56801],{"class":106},[100,141664,472],{"class":258},[100,141666,135318],{"class":110},[100,141668,135321],{"class":106},[100,141670,472],{"class":258},[100,141672,135326],{"class":110},[100,141674,52861],{"class":258},[19,141676,141253],{},[73,141678,141679],{"className":128541,"code":135296,"language":128543,"meta":79,"style":79},[32,141680,141681],{"__ignoreMap":79},[100,141682,141683,141685,141687,141689,141691,141693,141695,141697,141699,141701,141703,141705],{"class":102,"line":103},[100,141684,2676],{"class":258},[100,141686,3095],{"class":52854},[100,141688,56793],{"class":106},[100,141690,472],{"class":258},[100,141692,135311],{"class":110},[100,141694,56801],{"class":106},[100,141696,472],{"class":258},[100,141698,135318],{"class":110},[100,141700,135321],{"class":106},[100,141702,472],{"class":258},[100,141704,135326],{"class":110},[100,141706,52861],{"class":258},[305,141708,141710],{"id":141709},"_1612-推荐模块制作","16.1.2 推荐模块制作",[3095,141712],{"style":127650,"src":141713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,141715,141716,141717,141720],{},"大盒子 ",[32,141718,141719],{},"recom"," 推荐模块 recommend",[2773,141722,141723],{},[29,141724,141725,141726,141728,141729,141732],{},"给这个 ",[32,141727,141719],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[32,141730,141731],{},"#ebebeb","），设置距离上边 12px",[19,141734,141164],{},[73,141736,141738],{"className":127794,"code":141737,"language":127796,"meta":79,"style":79},"div {\n  background-color: #f0f0f0;\n}\n",[32,141739,141740,141746,141757],{"__ignoreMap":79},[100,141741,141742,141744],{"class":102,"line":103},[100,141743,53165],{"class":52854},[100,141745,17153],{"class":258},[100,141747,141748,141750,141752,141755],{"class":102,"line":188},[100,141749,72432],{"class":117},[100,141751,52991],{"class":258},[100,141753,141754],{"class":117},"#f0f0f0",[100,141756,2927],{"class":258},[100,141758,141759],{"class":102,"line":199},[100,141760,3197],{"class":258},[19,141762,141253],{},[73,141764,141765],{"className":127794,"code":141737,"language":127796,"meta":79,"style":79},[32,141766,141767,141773,141783],{"__ignoreMap":79},[100,141768,141769,141771],{"class":102,"line":103},[100,141770,53165],{"class":52854},[100,141772,17153],{"class":258},[100,141774,141775,141777,141779,141781],{"class":102,"line":188},[100,141776,72432],{"class":117},[100,141778,52991],{"class":258},[100,141780,141754],{"class":117},[100,141782,2927],{"class":258},[100,141784,141785],{"class":102,"line":199},[100,141786,3197],{"class":258},[19,141788,141789],{},"里面包含 2 个盒子， 浮动即可",[19,141791,141164],{},[73,141793,141794],{"className":127794,"code":140464,"language":127796,"meta":79,"style":79},[32,141795,141796,141802,141812],{"__ignoreMap":79},[100,141797,141798,141800],{"class":102,"line":103},[100,141799,131642],{"class":106},[100,141801,17153],{"class":258},[100,141803,141804,141806,141808,141810],{"class":102,"line":188},[100,141805,132274],{"class":117},[100,141807,52991],{"class":258},[100,141809,330],{"class":117},[100,141811,2927],{"class":258},[100,141813,141814],{"class":102,"line":199},[100,141815,3197],{"class":258},[19,141817,141818,141819],{},"1 号盒子 ",[32,141820,141821],{},"recom_hd",[2773,141823,141824,141827],{},[29,141825,141826],{},"设置宽度205px，高度163px",[29,141828,141298,141829,141831],{},[32,141830,3095],{},"标签，插入图片即可",[19,141833,141164],{},[73,141835,141836],{"className":128541,"code":135296,"language":128543,"meta":79,"style":79},[32,141837,141838],{"__ignoreMap":79},[100,141839,141840,141842,141844,141846,141848,141850,141852,141854,141856,141858,141860,141862],{"class":102,"line":103},[100,141841,2676],{"class":258},[100,141843,3095],{"class":52854},[100,141845,56793],{"class":106},[100,141847,472],{"class":258},[100,141849,135311],{"class":110},[100,141851,56801],{"class":106},[100,141853,472],{"class":258},[100,141855,135318],{"class":110},[100,141857,135321],{"class":106},[100,141859,472],{"class":258},[100,141861,135326],{"class":110},[100,141863,52861],{"class":258},[19,141865,141253],{},[73,141867,141868],{"className":128541,"code":135296,"language":128543,"meta":79,"style":79},[32,141869,141870],{"__ignoreMap":79},[100,141871,141872,141874,141876,141878,141880,141882,141884,141886,141888,141890,141892,141894],{"class":102,"line":103},[100,141873,2676],{"class":258},[100,141875,3095],{"class":52854},[100,141877,56793],{"class":106},[100,141879,472],{"class":258},[100,141881,135311],{"class":110},[100,141883,56801],{"class":106},[100,141885,472],{"class":258},[100,141887,135318],{"class":110},[100,141889,135321],{"class":106},[100,141891,472],{"class":258},[100,141893,135326],{"class":110},[100,141895,52861],{"class":258},[19,141897,141898,141899,141902],{},"2 号盒子 ",[32,141900,141901],{},"recom_bd"," ，注意里面的小竖线",[2773,141904,141905,141916,141919,141924,141929],{},[29,141906,141907,141908,141910,141911,141913,141914],{},"右侧结构里面放 ",[32,141909,2773],{}," 包含 4个 ",[32,141912,29],{},"，每个li里面包含一个",[32,141915,3095],{},[29,141917,141918],{},"直接利用切片工具把里面的内容当成一张图片",[29,141920,140294,141921,141923],{},[32,141922,29],{}," 设置浮动",[29,141925,140294,141926,141928],{},[32,141927,3095],{}," 设置宽高，宽度 248px，高度 163px",[29,141930,141931,141932,141492,141935,141937,141938,141940,141941],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[32,141933,141934],{},"top 10px",[32,141936,29],{},"设置相对定位（注意，最后一个",[32,141939,29],{},"不用设置伪元素），可以利用 ",[32,141942,141943],{},"nth-child(-n+3){...}",[19,141945,141164],{},[73,141947,141948],{"className":127794,"code":139636,"language":127796,"meta":79,"style":79},[32,141949,141950,141958,141968,141978],{"__ignoreMap":79},[100,141951,141952,141954,141956],{"class":102,"line":103},[100,141953,53165],{"class":52854},[100,141955,138795],{"class":106},[100,141957,17153],{"class":258},[100,141959,141960,141962,141964,141966],{"class":102,"line":188},[100,141961,138802],{"class":117},[100,141963,52991],{"class":258},[100,141965,9248],{"class":110},[100,141967,2927],{"class":258},[100,141969,141970,141972,141974,141976],{"class":102,"line":199},[100,141971,129410],{"class":117},[100,141973,52991],{"class":258},[100,141975,62423],{"class":117},[100,141977,2927],{"class":258},[100,141979,141980],{"class":102,"line":532},[100,141981,3197],{"class":258},[19,141983,141253],{},[73,141985,141986],{"className":127794,"code":139636,"language":127796,"meta":79,"style":79},[32,141987,141988,141996,142006,142016],{"__ignoreMap":79},[100,141989,141990,141992,141994],{"class":102,"line":103},[100,141991,53165],{"class":52854},[100,141993,138795],{"class":106},[100,141995,17153],{"class":258},[100,141997,141998,142000,142002,142004],{"class":102,"line":188},[100,141999,138802],{"class":117},[100,142001,52991],{"class":258},[100,142003,9248],{"class":110},[100,142005,2927],{"class":258},[100,142007,142008,142010,142012,142014],{"class":102,"line":199},[100,142009,129410],{"class":117},[100,142011,52991],{"class":258},[100,142013,62423],{"class":117},[100,142015,2927],{"class":258},[100,142017,142018],{"class":102,"line":532},[100,142019,3197],{"class":258},[305,142021,142023],{"id":142022},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[3095,142025],{"style":127650,"src":142026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,142028,142029],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,142031,142032],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,142034,142035,142038],{},[32,142036,142037],{},"box_hd"," 制作",[19,142040,141818,142041,142043],{},[32,142042,142037],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[3095,142045],{"style":127650,"src":142046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[2773,142048,142049,142054,142059,142062],{},[29,142050,142051,142053],{},[32,142052,142037],{}," 给 30px 的高度，2个像素的下边框",[29,142055,142056,142057],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[32,142058,140305],{},[29,142060,142061],{},"左侧盒左浮动，右侧盒子右浮动",[29,142063,142064,142066,142067,142069],{},[32,142065,2006],{},"标签之间的距离用左右的",[32,142068,32446],{},"撑开即可",[19,142071,142072],{},"结构代码",[73,142074,142075],{"className":127794,"code":140464,"language":127796,"meta":79,"style":79},[32,142076,142077,142083,142093],{"__ignoreMap":79},[100,142078,142079,142081],{"class":102,"line":103},[100,142080,131642],{"class":106},[100,142082,17153],{"class":258},[100,142084,142085,142087,142089,142091],{"class":102,"line":188},[100,142086,132274],{"class":117},[100,142088,52991],{"class":258},[100,142090,330],{"class":117},[100,142092,2927],{"class":258},[100,142094,142095],{"class":102,"line":199},[100,142096,3197],{"class":258},[19,142098,142099],{},"样式代码",[73,142101,142102],{"className":127794,"code":140464,"language":127796,"meta":79,"style":79},[32,142103,142104,142110,142120],{"__ignoreMap":79},[100,142105,142106,142108],{"class":102,"line":103},[100,142107,131642],{"class":106},[100,142109,17153],{"class":258},[100,142111,142112,142114,142116,142118],{"class":102,"line":188},[100,142113,132274],{"class":117},[100,142115,52991],{"class":258},[100,142117,330],{"class":117},[100,142119,2927],{"class":258},[100,142121,142122],{"class":102,"line":199},[100,142123,3197],{"class":258},[19,142125,142126,142038],{},[32,142127,142128],{},"box_bd",[19,142130,142131],{},"2 号盒子 box_bd，不要给高度",[3095,142133],{"style":127650,"src":142134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,142136,142137],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,142139,142140],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,142142,142143],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[2773,142145,142146,142158,142174],{},[29,142147,142148,142150,142151,142154,142155,142157],{},[32,142149,142128],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[32,142152,142153],{},"tab_content","，在",[32,142156,142153],{}," 里面包裹tab选项卡对应的内容",[29,142159,142160,142161,142164,142165,142167,142168,142170,142171,142173],{},"内容被一个大盒子包裹（",[32,142162,142163],{},"tab_list_item","），里面是 ",[32,142166,2773],{}," 包裹 5个 ",[32,142169,29],{},"，每个",[32,142172,29],{},"设置对应的宽度，然后设置浮动",[29,142175,142176,142177,142179,142180,142182,142183],{},"而这5个",[32,142178,29],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[32,142181,29],{},"设置",[2773,142184,142185,142203,142206],{},[29,142186,142187,142188,142190,142191,142193,142194,142196,142197,142199,142200,142202],{},"第一个小 ",[32,142189,29],{}," 分为上下结构，上面是 ",[32,142192,2773],{}," 包裹 ",[32,142195,29],{}," ，",[32,142198,29],{},"里面包裹 ",[32,142201,2006],{},"，下面插入一张图片",[29,142204,142205],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[29,142207,142208,142209,142211,142212,142214,142215,142217],{},"后面的小 ",[32,142210,29],{}," 里面先放一个",[32,142213,2006],{},"标签，然后在",[32,142216,2006],{},"标签里面插入图片即可",[19,142219,142072],{},[73,142221,142222],{"className":128541,"code":135296,"language":128543,"meta":79,"style":79},[32,142223,142224],{"__ignoreMap":79},[100,142225,142226,142228,142230,142232,142234,142236,142238,142240,142242,142244,142246,142248],{"class":102,"line":103},[100,142227,2676],{"class":258},[100,142229,3095],{"class":52854},[100,142231,56793],{"class":106},[100,142233,472],{"class":258},[100,142235,135311],{"class":110},[100,142237,56801],{"class":106},[100,142239,472],{"class":258},[100,142241,135318],{"class":110},[100,142243,135321],{"class":106},[100,142245,472],{"class":258},[100,142247,135326],{"class":110},[100,142249,52861],{"class":258},[19,142251,142099],{},[73,142253,142254],{"className":128541,"code":135296,"language":128543,"meta":79,"style":79},[32,142255,142256],{"__ignoreMap":79},[100,142257,142258,142260,142262,142264,142266,142268,142270,142272,142274,142276,142278,142280],{"class":102,"line":103},[100,142259,2676],{"class":258},[100,142261,3095],{"class":52854},[100,142263,56793],{"class":106},[100,142265,472],{"class":258},[100,142267,135311],{"class":110},[100,142269,56801],{"class":106},[100,142271,472],{"class":258},[100,142273,135318],{"class":110},[100,142275,135321],{"class":106},[100,142277,472],{"class":258},[100,142279,135326],{"class":110},[100,142281,52861],{"class":258},[19,142283,142284],{},"tab栏切换需求！！！！！！介绍：",[3095,142286],{"style":127650,"src":142287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[2773,142289,142290,142298,142304,142307],{},[29,142291,142292,142295,142296],{},[32,142293,142294],{},"tab","栏的布局是 ",[32,142297,140305],{},[29,142299,142300,142301,142303],{},"有多少个",[32,142302,142294],{},"选项卡，那么对应就有多少个内容",[29,142305,142306],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[29,142308,142309,142310,142313,142314,142316,142317,142319],{},"等后面我们学习了",[32,142311,142312],{},"js","之后，我们就会配合",[32,142315,142312],{},"来实现，",[32,142318,142294],{},"栏的切换",[14,142321,142323],{"id":142322},"_162-列表制作","16.2 列表制作",[305,142325,142327],{"id":142326},"_1621-准备工作","16.2.1 准备工作",[2773,142329,142330,142333,142336,142339],{},[29,142331,142332],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[29,142334,142335],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[29,142337,142338],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[29,142340,142341],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[305,142343,142345,142346,218,142348,142350],{"id":142344},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[32,142347,132799],{},[32,142349,55267],{}," 修改",[3095,142352],{"style":127650,"src":142353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[2773,142355,142356],{},[29,142357,142358],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,142360,141164],{},[73,142362,142363],{"className":127794,"code":133226,"language":127796,"meta":79,"style":79},[32,142364,142365,142369,142383,142387,142401,142405,142419,142423,142437,142441],{"__ignoreMap":79},[100,142366,142367],{"class":102,"line":103},[100,142368,133233],{"class":1836},[100,142370,142371,142373,142375,142377,142379,142381],{"class":102,"line":188},[100,142372,133238],{"class":106},[100,142374,81361],{"class":258},[100,142376,130154],{"class":117},[100,142378,52991],{"class":258},[100,142380,133247],{"class":117},[100,142382,130724],{"class":258},[100,142384,142385],{"class":102,"line":199},[100,142386,133254],{"class":1836},[100,142388,142389,142391,142393,142395,142397,142399],{"class":102,"line":532},[100,142390,133259],{"class":106},[100,142392,81361],{"class":258},[100,142394,130154],{"class":117},[100,142396,52991],{"class":258},[100,142398,56318],{"class":117},[100,142400,130724],{"class":258},[100,142402,142403],{"class":102,"line":577},[100,142404,133274],{"class":1836},[100,142406,142407,142409,142411,142413,142415,142417],{"class":102,"line":589},[100,142408,133279],{"class":106},[100,142410,81361],{"class":258},[100,142412,130154],{"class":117},[100,142414,52991],{"class":258},[100,142416,56385],{"class":117},[100,142418,130724],{"class":258},[100,142420,142421],{"class":102,"line":595},[100,142422,133294],{"class":1836},[100,142424,142425,142427,142429,142431,142433,142435],{"class":102,"line":601},[100,142426,133299],{"class":106},[100,142428,81361],{"class":258},[100,142430,130154],{"class":117},[100,142432,52991],{"class":258},[100,142434,87785],{"class":117},[100,142436,130724],{"class":258},[100,142438,142439],{"class":102,"line":606},[100,142440,133314],{"class":1836},[100,142442,142443,142445,142447,142449,142451,142453],{"class":102,"line":612},[100,142444,133319],{"class":106},[100,142446,81361],{"class":258},[100,142448,130154],{"class":117},[100,142450,52991],{"class":258},[100,142452,133328],{"class":117},[100,142454,130724],{"class":258},[19,142456,141253],{},[73,142458,142459],{"className":127794,"code":133226,"language":127796,"meta":79,"style":79},[32,142460,142461,142465,142479,142483,142497,142501,142515,142519,142533,142537],{"__ignoreMap":79},[100,142462,142463],{"class":102,"line":103},[100,142464,133233],{"class":1836},[100,142466,142467,142469,142471,142473,142475,142477],{"class":102,"line":188},[100,142468,133238],{"class":106},[100,142470,81361],{"class":258},[100,142472,130154],{"class":117},[100,142474,52991],{"class":258},[100,142476,133247],{"class":117},[100,142478,130724],{"class":258},[100,142480,142481],{"class":102,"line":199},[100,142482,133254],{"class":1836},[100,142484,142485,142487,142489,142491,142493,142495],{"class":102,"line":532},[100,142486,133259],{"class":106},[100,142488,81361],{"class":258},[100,142490,130154],{"class":117},[100,142492,52991],{"class":258},[100,142494,56318],{"class":117},[100,142496,130724],{"class":258},[100,142498,142499],{"class":102,"line":577},[100,142500,133274],{"class":1836},[100,142502,142503,142505,142507,142509,142511,142513],{"class":102,"line":589},[100,142504,133279],{"class":106},[100,142506,81361],{"class":258},[100,142508,130154],{"class":117},[100,142510,52991],{"class":258},[100,142512,56385],{"class":117},[100,142514,130724],{"class":258},[100,142516,142517],{"class":102,"line":595},[100,142518,133294],{"class":1836},[100,142520,142521,142523,142525,142527,142529,142531],{"class":102,"line":601},[100,142522,133299],{"class":106},[100,142524,81361],{"class":258},[100,142526,130154],{"class":117},[100,142528,52991],{"class":258},[100,142530,87785],{"class":117},[100,142532,130724],{"class":258},[100,142534,142535],{"class":102,"line":606},[100,142536,133314],{"class":1836},[100,142538,142539,142541,142543,142545,142547,142549],{"class":102,"line":612},[100,142540,133319],{"class":106},[100,142542,81361],{"class":258},[100,142544,130154],{"class":117},[100,142546,52991],{"class":258},[100,142548,133328],{"class":117},[100,142550,130724],{"class":258},[2773,142552,142553,142564],{},[29,142554,142555,142556,142559,142560,218,142562],{},"1 号盒子左侧浮动 ",[32,142557,142558],{},"sk_list"," 里面包含 ",[32,142561,2773],{},[32,142563,29],{},[29,142565,142566,142567,142559,142570,218,142572],{},"2 号盒子左侧浮动 ",[32,142568,142569],{},"sk_con",[32,142571,2773],{},[32,142573,29],{},[19,142575,141164],{},[73,142577,142578],{"className":127794,"code":140464,"language":127796,"meta":79,"style":79},[32,142579,142580,142586,142596],{"__ignoreMap":79},[100,142581,142582,142584],{"class":102,"line":103},[100,142583,131642],{"class":106},[100,142585,17153],{"class":258},[100,142587,142588,142590,142592,142594],{"class":102,"line":188},[100,142589,132274],{"class":117},[100,142591,52991],{"class":258},[100,142593,330],{"class":117},[100,142595,2927],{"class":258},[100,142597,142598],{"class":102,"line":199},[100,142599,3197],{"class":258},[19,142601,141253],{},[73,142603,142604],{"className":127794,"code":140464,"language":127796,"meta":79,"style":79},[32,142605,142606,142612,142622],{"__ignoreMap":79},[100,142607,142608,142610],{"class":102,"line":103},[100,142609,131642],{"class":106},[100,142611,17153],{"class":258},[100,142613,142614,142616,142618,142620],{"class":102,"line":188},[100,142615,132274],{"class":117},[100,142617,52991],{"class":258},[100,142619,330],{"class":117},[100,142621,2927],{"class":258},[100,142623,142624],{"class":102,"line":199},[100,142625,3197],{"class":258},[305,142627,142629,142630],{"id":142628},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[32,142631,142632],{},"sk_container",[3095,142634],{"style":127650,"src":142635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[2773,142637,142638,142643],{},[29,142639,141818,142640,142642],{},[32,142641,142632],{}," 给宽度 1200，不要给高度",[29,142644,142645],{},"一定不要忘记清除浮动",[19,142647,141164],{},[73,142649,142650],{"className":127794,"code":140464,"language":127796,"meta":79,"style":79},[32,142651,142652,142658,142668],{"__ignoreMap":79},[100,142653,142654,142656],{"class":102,"line":103},[100,142655,131642],{"class":106},[100,142657,17153],{"class":258},[100,142659,142660,142662,142664,142666],{"class":102,"line":188},[100,142661,132274],{"class":117},[100,142663,52991],{"class":258},[100,142665,330],{"class":117},[100,142667,2927],{"class":258},[100,142669,142670],{"class":102,"line":199},[100,142671,3197],{"class":258},[26,142673,142674],{},[29,142675,142676],{},"sk_hd制作",[2773,142678,142679],{},[29,142680,141898,142681,142684],{},[32,142682,142683],{},"sk_hd"," ，插入图片即可",[19,142686,141164],{},[73,142688,142689],{"className":128541,"code":135296,"language":128543,"meta":79,"style":79},[32,142690,142691],{"__ignoreMap":79},[100,142692,142693,142695,142697,142699,142701,142703,142705,142707,142709,142711,142713,142715],{"class":102,"line":103},[100,142694,2676],{"class":258},[100,142696,3095],{"class":52854},[100,142698,56793],{"class":106},[100,142700,472],{"class":258},[100,142702,135311],{"class":110},[100,142704,56801],{"class":106},[100,142706,472],{"class":258},[100,142708,135318],{"class":110},[100,142710,135321],{"class":106},[100,142712,472],{"class":258},[100,142714,135326],{"class":110},[100,142716,52861],{"class":258},[26,142718,142719],{"start":188},[29,142720,142721],{},"sk_bd制作",[2773,142723,142724],{},[29,142725,142726,142727,142730,142731,218,142733,142735],{},"3 号盒子 ",[32,142728,142729],{},"sk_bd"," ，里面包含很多的 ",[32,142732,2773],{},[32,142734,29],{},[2773,142736,142737,142746],{},[29,142738,142739,142740,142742,142743,142745],{},"当鼠标移入到 ",[32,142741,29],{}," 上面的时候显示红色的边框，在这里先给 ",[32,142744,29],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[29,142747,142748,142749,142751,142752,142754,142755,142758,142759,142761],{},"由于给每个 ",[32,142750,29],{}," 都设置了外边距，导致一行的最后一个 ",[32,142753,29],{}," 掉了下来，在这里我们利用 ",[32,142756,142757],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[32,142760,29],{},"，去掉外边距就好了",[19,142763,141164],{},[73,142765,142766],{"className":127794,"code":139983,"language":127796,"meta":79,"style":79},[32,142767,142768,142774,142786],{"__ignoreMap":79},[100,142769,142770,142772],{"class":102,"line":103},[100,142771,53165],{"class":52854},[100,142773,17153],{"class":258},[100,142775,142776,142778,142780,142782,142784],{"class":102,"line":188},[100,142777,72024],{"class":117},[100,142779,52991],{"class":258},[100,142781,1366],{"class":117},[100,142783,53110],{"class":117},[100,142785,2927],{"class":258},[100,142787,142788],{"class":102,"line":199},[100,142789,3197],{"class":258},[19,142791,141253],{},[73,142793,142794],{"className":127794,"code":139983,"language":127796,"meta":79,"style":79},[32,142795,142796,142802,142814],{"__ignoreMap":79},[100,142797,142798,142800],{"class":102,"line":103},[100,142799,53165],{"class":52854},[100,142801,17153],{"class":258},[100,142803,142804,142806,142808,142810,142812],{"class":102,"line":188},[100,142805,72024],{"class":117},[100,142807,52991],{"class":258},[100,142809,1366],{"class":117},[100,142811,53110],{"class":117},[100,142813,2927],{"class":258},[100,142815,142816],{"class":102,"line":199},[100,142817,3197],{"class":258},[14,142819,142821],{"id":142820},"_163-注册页面制作","16.3 注册页面制作",[3095,142823],{"style":127650,"src":142824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,142826,142827,142829],{},[1921,142828,381],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[3095,142831],{"style":127650,"src":142832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[305,142834,142836],{"id":142835},"_1631-准备工作","16.3.1 准备工作",[2773,142838,142839,142842],{},[29,142840,142841],{},"创建register.html，引入 base.css，引入favicon图标",[29,142843,142844],{},"创建register.css ，在html页面进行引入",[305,142846,142848,142849,142851],{"id":142847},"_1632-header-头部实现","16.3.2 ",[32,142850,132799],{}," 头部实现",[2773,142853,142854,142857],{},[29,142855,142856],{},"整个内容用 版心 进行包裹",[29,142858,142859],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,142861,141164],{},[73,142863,142864],{"className":128541,"code":135296,"language":128543,"meta":79,"style":79},[32,142865,142866],{"__ignoreMap":79},[100,142867,142868,142870,142872,142874,142876,142878,142880,142882,142884,142886,142888,142890],{"class":102,"line":103},[100,142869,2676],{"class":258},[100,142871,3095],{"class":52854},[100,142873,56793],{"class":106},[100,142875,472],{"class":258},[100,142877,135311],{"class":110},[100,142879,56801],{"class":106},[100,142881,472],{"class":258},[100,142883,135318],{"class":110},[100,142885,135321],{"class":106},[100,142887,472],{"class":258},[100,142889,135326],{"class":110},[100,142891,52861],{"class":258},[19,142893,141253],{},[73,142895,142896],{"className":128541,"code":135296,"language":128543,"meta":79,"style":79},[32,142897,142898],{"__ignoreMap":79},[100,142899,142900,142902,142904,142906,142908,142910,142912,142914,142916,142918,142920,142922],{"class":102,"line":103},[100,142901,2676],{"class":258},[100,142903,3095],{"class":52854},[100,142905,56793],{"class":106},[100,142907,472],{"class":258},[100,142909,135311],{"class":110},[100,142911,56801],{"class":106},[100,142913,472],{"class":258},[100,142915,135318],{"class":110},[100,142917,135321],{"class":106},[100,142919,472],{"class":258},[100,142921,135326],{"class":110},[100,142923,52861],{"class":258},[305,142925,142927,142928,142931],{"id":142926},"_1633-registerarea-主体模块实现","16.3.3 ",[32,142929,142930],{},"registerarea"," 主体模块实现",[3095,142933],{"style":127650,"src":142934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,142936,142937],{},"整个大盒子 高度为 522px，设置4个边框",[19,142939,141164],{},[73,142941,142942],{"className":127794,"code":131951,"language":127796,"meta":79,"style":79},[32,142943,142944,142950,142966],{"__ignoreMap":79},[100,142945,142946,142948],{"class":102,"line":103},[100,142947,53165],{"class":52854},[100,142949,17153],{"class":258},[100,142951,142952,142954,142956,142958,142960,142962,142964],{"class":102,"line":188},[100,142953,72450],{"class":117},[100,142955,52991],{"class":258},[100,142957,1985],{"class":117},[100,142959,53046],{"class":471},[100,142961,53075],{"class":117},[100,142963,131186],{"class":117},[100,142965,2927],{"class":258},[100,142967,142968],{"class":102,"line":199},[100,142969,3197],{"class":258},[19,142971,141253],{},[73,142973,142974],{"className":127794,"code":131951,"language":127796,"meta":79,"style":79},[32,142975,142976,142982,142998],{"__ignoreMap":79},[100,142977,142978,142980],{"class":102,"line":103},[100,142979,53165],{"class":52854},[100,142981,17153],{"class":258},[100,142983,142984,142986,142988,142990,142992,142994,142996],{"class":102,"line":188},[100,142985,72450],{"class":117},[100,142987,52991],{"class":258},[100,142989,1985],{"class":117},[100,142991,53046],{"class":471},[100,142993,53075],{"class":117},[100,142995,131186],{"class":117},[100,142997,2927],{"class":258},[100,142999,143000],{"class":102,"line":199},[100,143001,3197],{"class":258},[19,143003,143004],{},"1号盒子 是一个 h3 标签，放标题",[2773,143006,143007],{},[29,143008,143009],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,143011,141164],{},[73,143013,143014],{"className":127794,"code":140464,"language":127796,"meta":79,"style":79},[32,143015,143016,143022,143032],{"__ignoreMap":79},[100,143017,143018,143020],{"class":102,"line":103},[100,143019,131642],{"class":106},[100,143021,17153],{"class":258},[100,143023,143024,143026,143028,143030],{"class":102,"line":188},[100,143025,132274],{"class":117},[100,143027,52991],{"class":258},[100,143029,330],{"class":117},[100,143031,2927],{"class":258},[100,143033,143034],{"class":102,"line":199},[100,143035,3197],{"class":258},[19,143037,141253],{},[73,143039,143040],{"className":127794,"code":140464,"language":127796,"meta":79,"style":79},[32,143041,143042,143048,143058],{"__ignoreMap":79},[100,143043,143044,143046],{"class":102,"line":103},[100,143045,131642],{"class":106},[100,143047,17153],{"class":258},[100,143049,143050,143052,143054,143056],{"class":102,"line":188},[100,143051,132274],{"class":117},[100,143053,52991],{"class":258},[100,143055,330],{"class":117},[100,143057,2927],{"class":258},[100,143059,143060],{"class":102,"line":199},[100,143061,3197],{"class":258},[19,143063,143064],{},"2号盒子 里面放注册的内容",[2773,143066,143067,143070,143079,143093,143106,143109,143112,143130,143144],{},[29,143068,143069],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[29,143071,143072,143073,143075,143076,143078],{},"里面的内容利用 ",[32,143074,2773],{}," 包含 ",[32,143077,29],{}," 来实现的（不需要用表格）",[29,143080,140308,143081,143083,143084,143086,143087,143089,143090,143092],{},[32,143082,29],{}," 里面，左侧放 ",[32,143085,35163],{}," 标签， 中间放",[32,143088,55375],{}," 标签， 右侧放 ",[32,143091,100],{}," 提示信息",[29,143094,143095,143096,143098,143099,143101,143102,143105],{},"左侧 ",[32,143097,35163],{},"里面的文字都是右对齐，我们可以给",[32,143100,35163],{},"设置一个宽度（88px），然后利用",[32,143103,143104],{},"text-align"," 来设置右对齐",[29,143107,143108],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[29,143110,143111],{},"右侧 span修饰一下文字颜色",[29,143113,143114,143115],{},"提示信息的样式优化",[2773,143116,143117,143120,143123],{},[29,143118,143119],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[29,143121,143122],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[29,143124,143125,143126,143129],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[32,143127,143128],{},"vertical-algin"," 来设置 图片与文字对齐方式",[29,143131,143132,143133],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[2773,143134,143135,143141],{},[29,143136,143137,143138,143140],{},"设置 ",[32,143139,25135],{}," 的 左右 12px 的内边距，设置一下文字颜色",[29,143142,143143],{},"分别设置 背景颜色",[29,143145,143146,143147,143149],{},"同意协议 和 完成注册 都是用 ",[32,143148,29],{}," 进行包裹",[19,143151,141164],{},[73,143153,143154],{"className":127794,"code":141737,"language":127796,"meta":79,"style":79},[32,143155,143156,143162,143172],{"__ignoreMap":79},[100,143157,143158,143160],{"class":102,"line":103},[100,143159,53165],{"class":52854},[100,143161,17153],{"class":258},[100,143163,143164,143166,143168,143170],{"class":102,"line":188},[100,143165,72432],{"class":117},[100,143167,52991],{"class":258},[100,143169,141754],{"class":117},[100,143171,2927],{"class":258},[100,143173,143174],{"class":102,"line":199},[100,143175,3197],{"class":258},[19,143177,141253],{},[73,143179,143180],{"className":127794,"code":141737,"language":127796,"meta":79,"style":79},[32,143181,143182,143188,143198],{"__ignoreMap":79},[100,143183,143184,143186],{"class":102,"line":103},[100,143185,53165],{"class":52854},[100,143187,17153],{"class":258},[100,143189,143190,143192,143194,143196],{"class":102,"line":188},[100,143191,72432],{"class":117},[100,143193,52991],{"class":258},[100,143195,141754],{"class":117},[100,143197,2927],{"class":258},[100,143199,143200],{"class":102,"line":199},[100,143201,3197],{"class":258},[305,143203,143205],{"id":143204},"_1634-底部实现","16.3.4 底部实现",[19,143207,141164],{},[73,143209,143210],{"className":127794,"code":141737,"language":127796,"meta":79,"style":79},[32,143211,143212,143218,143228],{"__ignoreMap":79},[100,143213,143214,143216],{"class":102,"line":103},[100,143215,53165],{"class":52854},[100,143217,17153],{"class":258},[100,143219,143220,143222,143224,143226],{"class":102,"line":188},[100,143221,72432],{"class":117},[100,143223,52991],{"class":258},[100,143225,141754],{"class":117},[100,143227,2927],{"class":258},[100,143229,143230],{"class":102,"line":199},[100,143231,3197],{"class":258},[19,143233,141253],{},[73,143235,143236],{"className":128541,"code":131898,"language":128543,"meta":79,"style":79},[32,143237,143238,143242,143256,143260],{"__ignoreMap":79},[100,143239,143240],{"class":102,"line":103},[100,143241,131905],{"class":1836},[100,143243,143244,143246,143248,143250,143252,143254],{"class":102,"line":188},[100,143245,2676],{"class":258},[100,143247,53165],{"class":52854},[100,143249,55040],{"class":106},[100,143251,472],{"class":258},[100,143253,131918],{"class":110},[100,143255,52861],{"class":258},[100,143257,143258],{"class":102,"line":199},[100,143259,131925],{"class":258},[100,143261,143262,143264,143266],{"class":102,"line":532},[100,143263,53339],{"class":258},[100,143265,53165],{"class":52854},[100,143267,52861],{"class":258},[14,143269,143271],{"id":143270},"_164-项目总结","16.4 项目总结",[26,143273,143274,143277,143280,143283],{},[29,143275,143276],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[29,143278,143279],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[29,143281,143282],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[29,143284,143285],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[3095,143287],{"style":127650,"src":143288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[26,143290,143291],{"start":577},[29,143292,143293],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[3095,143295],{"style":127650,"src":143296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[26,143298,143299],{"start":589},[29,143300,143301],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[3095,143303],{"style":127650,"src":143304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[73,143306,143307],{"className":128541,"code":137951,"language":128543,"meta":79,"style":79},[32,143308,143309],{"__ignoreMap":79},[100,143310,143311,143313,143315,143317,143319,143321,143323,143325,143327,143329,143331,143333],{"class":102,"line":103},[100,143312,2676],{"class":258},[100,143314,55375],{"class":52854},[100,143316,55378],{"class":106},[100,143318,472],{"class":258},[100,143320,64253],{"class":110},[100,143322,16501],{"class":106},[100,143324,472],{"class":258},[100,143326,137972],{"class":110},[100,143328,62574],{"class":106},[100,143330,472],{"class":258},[100,143332,137979],{"class":110},[100,143334,52861],{"class":258},[26,143336,143337,143340],{"start":595},[29,143338,143339],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[29,143341,143342],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[1677,143344,143345],{},"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":79,"searchDepth":188,"depth":188,"links":143347},[143348,143353,143360,143368],{"id":140974,"depth":188,"text":140975,"children":143349},[143350,143351,143352],{"id":140978,"depth":199,"text":140979},{"id":141709,"depth":199,"text":141710},{"id":142022,"depth":199,"text":142023},{"id":142322,"depth":188,"text":142323,"children":143354},[143355,143356,143358],{"id":142326,"depth":199,"text":142327},{"id":142344,"depth":199,"text":143357},"16.2.2 列表页 header 和 nav 修改",{"id":142628,"depth":199,"text":143359},"16.2.3 列表页主体 sk_container",{"id":142820,"depth":188,"text":142821,"children":143361},[143362,143363,143365,143367],{"id":142835,"depth":199,"text":142836},{"id":142847,"depth":199,"text":143364},"16.3.2 header 头部实现",{"id":142926,"depth":199,"text":143366},"16.3.3 registerarea 主体模块实现",{"id":143204,"depth":199,"text":143205},{"id":143270,"depth":188,"text":143271},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":140966,"description":24958},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":143375,"title":143376,"body":143377,"description":24958,"extension":1708,"meta":143485,"navigation":569,"path":143486,"seo":143487,"stem":143488,"__hash__":143489},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":143378,"toc":143480},[143379,143382,143386,143389,143392,143401,143410,143414,143419,143426,143444,143447,143450,143453,143456,143459,143462,143465,143468,143471,143474,143477],[10,143380,143376],{"id":143381},"_17-web服务器与网站发布",[14,143383,143385],{"id":143384},"_171-web服务器","17.1 Web服务器",[19,143387,143388],{},"把自己网站上传到服务器上，可以让其他人访问",[3095,143390],{"style":127650,"src":143391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,143393,143394,143397,143398],{},[1921,143395,143396],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[1921,143399,143400],{},"Web 服务器等",[19,143402,143403,143404,218,143407,27315],{},"根据服务器在网络中所在的位置不同，又可分为 ",[1921,143405,143406],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[1921,143408,143409],{},"远程服务器",[305,143411,143413],{"id":143412},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,143415,143416],{},[1921,143417,143418],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,143420,143421,143422],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[2006,143423,143424],{"href":143424,"rel":143425},"http:\u002F\u002Ffree.3v.do\u002F",[25442],[2773,143427,143428,143431,143434,143441],{},[29,143429,143430],{},"去免费空间网站注册账号。",[29,143432,143433],{},"记录下主机名、用户名、密码、域名。",[29,143435,143436,143437,143440],{},"利用 ",[32,143438,143439],{},"utftp"," 软件 上传网站到远程服务器",[29,143442,143443],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,143445,143446],{},"使用软件上传，对上传软件文件进行解压",[3095,143448],{"style":127650,"src":143449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[3095,143451],{"style":127650,"src":143452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,143454,143455],{},"输入刚刚申请的服务器账号信息：",[3095,143457],{"style":127650,"src":143458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[3095,143460],{"style":127650,"src":143461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[3095,143463],{"style":127650,"src":143464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[3095,143466],{"style":127650,"src":143467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,143469,143470],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[3095,143472],{"style":127650,"src":143473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,143475,143476],{},"浏览器输入域名即可访问",[19,143478,143479],{},"首页一定必须是index",{"title":79,"searchDepth":188,"depth":188,"links":143481},[143482],{"id":143384,"depth":188,"text":143385,"children":143483},[143484],{"id":143412,"depth":199,"text":143413},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":143376,"description":24958},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":143491,"title":143492,"body":143493,"description":24958,"extension":1708,"meta":144420,"navigation":569,"path":144421,"seo":144422,"stem":144423,"__hash__":144424},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":143494,"toc":144403},[143495,143498,143502,143505,143508,143519,143522,143526,143530,143535,143538,143541,143544,143547,143551,143577,143581,143585,143588,143591,143595,143628,143632,143635,143638,143702,143706,143710,143713,143716,143719,143723,143768,143772,143775,143805,143809,143813,143816,143819,143823,143826,143895,143898,144006,144008,144014,144018,144021,144024,144120,144123,144127,144151,144155,144158,144162,144165,144169,144172,144175,144178,144181,144185,144188,144191,144195,144199,144202,144205,144208,144211,144215,144218,144222,144225,144228,144273,144277,144281,144284,144287,144290,144322,144326,144329,144363,144367,144370,144400],[10,143496,143492],{"id":143497},"_18-2d动画与3d转换",[14,143499,143501],{"id":143500},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,143503,143504],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,143506,143507],{},"转换（transform）你可以简单理解为变形",[2773,143509,143510,143513,143516],{},[29,143511,143512],{},"移动：translate",[29,143514,143515],{},"旋转：rotate",[29,143517,143518],{},"缩放：scale",[3095,143520],{"style":127650,"src":143521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[305,143523,143525],{"id":143524},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[23579,143527,143529],{"id":143528},"_18111-translate介绍","18.1.1.1 translate介绍",[19,143531,143532,143533],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[1921,143534,134453],{},[3095,143536],{"style":127650,"src":143537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,143539,143540],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,143542,143543],{},"对于行内元素无效",[19,143545,143546],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[23579,143548,143550],{"id":143549},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[73,143552,143553],{"className":127794,"code":139983,"language":127796,"meta":79,"style":79},[32,143554,143555,143561,143573],{"__ignoreMap":79},[100,143556,143557,143559],{"class":102,"line":103},[100,143558,53165],{"class":52854},[100,143560,17153],{"class":258},[100,143562,143563,143565,143567,143569,143571],{"class":102,"line":188},[100,143564,72024],{"class":117},[100,143566,52991],{"class":258},[100,143568,1366],{"class":117},[100,143570,53110],{"class":117},[100,143572,2927],{"class":258},[100,143574,143575],{"class":102,"line":199},[100,143576,3197],{"class":258},[305,143578,143580],{"id":143579},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[23579,143582,143584],{"id":143583},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,143586,143587],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[3095,143589],{"style":127650,"src":143590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[23579,143592,143594],{"id":143593},"_18122-旋转效果","18.1.2.2 旋转效果",[73,143596,143598],{"className":127794,"code":143597,"language":127796,"meta":79,"style":79},"div {\n  transform: rotate(45deg);\n}\n",[32,143599,143600,143606,143624],{"__ignoreMap":79},[100,143601,143602,143604],{"class":102,"line":103},[100,143603,53165],{"class":52854},[100,143605,17153],{"class":258},[100,143607,143608,143610,143612,143615,143617,143619,143622],{"class":102,"line":188},[100,143609,137778],{"class":117},[100,143611,52991],{"class":258},[100,143613,143614],{"class":117},"rotate",[100,143616,713],{"class":258},[100,143618,2296],{"class":117},[100,143620,143621],{"class":471},"deg",[100,143623,4321],{"class":258},[100,143625,143626],{"class":102,"line":199},[100,143627,3197],{"class":258},[23579,143629,143631],{"id":143630},"_18123-三角做法","18.1.2.3 三角做法",[19,143633,143634],{},"该下标当经过最外层大盒子时会实现向上反转",[3095,143636],{"style":127650,"src":143637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[73,143639,143640],{"className":127794,"code":136314,"language":127796,"meta":79,"style":79},[32,143641,143642,143646,143652,143662,143672,143688,143698],{"__ignoreMap":79},[100,143643,143644],{"class":102,"line":103},[100,143645,136321],{"class":1836},[100,143647,143648,143650],{"class":102,"line":188},[100,143649,136326],{"class":106},[100,143651,17153],{"class":258},[100,143653,143654,143656,143658,143660],{"class":102,"line":199},[100,143655,72122],{"class":117},[100,143657,52991],{"class":258},[100,143659,1366],{"class":117},[100,143661,2927],{"class":258},[100,143663,143664,143666,143668,143670],{"class":102,"line":532},[100,143665,72342],{"class":117},[100,143667,52991],{"class":258},[100,143669,1366],{"class":117},[100,143671,2927],{"class":258},[100,143673,143674,143676,143678,143680,143682,143684,143686],{"class":102,"line":577},[100,143675,72450],{"class":117},[100,143677,52991],{"class":258},[100,143679,2213],{"class":117},[100,143681,53046],{"class":471},[100,143683,53075],{"class":117},[100,143685,65545],{"class":117},[100,143687,2927],{"class":258},[100,143689,143690,143692,143694,143696],{"class":102,"line":589},[100,143691,136369],{"class":117},[100,143693,52991],{"class":258},[100,143695,63923],{"class":117},[100,143697,2927],{"class":258},[100,143699,143700],{"class":102,"line":595},[100,143701,3197],{"class":258},[305,143703,143705],{"id":143704},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[23579,143707,143709],{"id":143708},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,143711,143712],{},"设置中心点",[3095,143714],{"style":127650,"src":143715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,143717,143718],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[23579,143720,143722],{"id":143721},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[73,143724,143726],{"className":127794,"code":143725,"language":127796,"meta":79,"style":79},"\u002F* 转换中心点 *\u002F\ndiv {\n  transform-origin: center center;  \u002F* 默认 *\u002F\n  \u002F* transform-origin: 50% 50%; *\u002F\n  \u002F* transform-origin: left top; *\u002F\n}\n",[32,143727,143728,143733,143739,143754,143759,143764],{"__ignoreMap":79},[100,143729,143730],{"class":102,"line":103},[100,143731,143732],{"class":1836},"\u002F* 转换中心点 *\u002F\n",[100,143734,143735,143737],{"class":102,"line":188},[100,143736,53165],{"class":52854},[100,143738,17153],{"class":258},[100,143740,143741,143744,143746,143748,143750,143752],{"class":102,"line":199},[100,143742,143743],{"class":117},"  transform-origin",[100,143745,52991],{"class":258},[100,143747,53146],{"class":117},[100,143749,18725],{"class":117},[100,143751,131657],{"class":258},[100,143753,136467],{"class":1836},[100,143755,143756],{"class":102,"line":532},[100,143757,143758],{"class":1836},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[100,143760,143761],{"class":102,"line":577},[100,143762,143763],{"class":1836},"  \u002F* transform-origin: left top; *\u002F\n",[100,143765,143766],{"class":102,"line":589},[100,143767,3197],{"class":258},[23579,143769,143771],{"id":143770},"_18133-旋转案例","18.1.3.3 旋转案例",[3095,143773],{"style":127650,"src":143774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[73,143776,143777],{"className":127794,"code":143597,"language":127796,"meta":79,"style":79},[32,143778,143779,143785,143801],{"__ignoreMap":79},[100,143780,143781,143783],{"class":102,"line":103},[100,143782,53165],{"class":52854},[100,143784,17153],{"class":258},[100,143786,143787,143789,143791,143793,143795,143797,143799],{"class":102,"line":188},[100,143788,137778],{"class":117},[100,143790,52991],{"class":258},[100,143792,143614],{"class":117},[100,143794,713],{"class":258},[100,143796,2296],{"class":117},[100,143798,143621],{"class":471},[100,143800,4321],{"class":258},[100,143802,143803],{"class":102,"line":199},[100,143804,3197],{"class":258},[305,143806,143808],{"id":143807},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[23579,143810,143812],{"id":143811},"_18141-scale介绍","18.1.4.1 scale介绍",[19,143814,143815],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[3095,143817],{"style":127650,"src":143818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[23579,143820,143822],{"id":143821},"_18142-分页按钮","18.1.4.2 分页按钮",[3095,143824],{"style":127650,"src":143825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[73,143827,143829],{"className":127794,"code":143828,"language":127796,"meta":79,"style":79},"div {\n  transform: scale(1.2);\n}\n```Css\n\u002F* 2D 缩放 *\u002F\ndiv {\n  transform: scale(1.2);\n  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n}\n",[32,143830,143831,143837,143853,143857,143861,143866,143872,143886,143891],{"__ignoreMap":79},[100,143832,143833,143835],{"class":102,"line":103},[100,143834,53165],{"class":52854},[100,143836,17153],{"class":258},[100,143838,143839,143841,143843,143846,143848,143851],{"class":102,"line":188},[100,143840,137778],{"class":117},[100,143842,52991],{"class":258},[100,143844,143845],{"class":117},"scale",[100,143847,713],{"class":258},[100,143849,143850],{"class":117},"1.2",[100,143852,4321],{"class":258},[100,143854,143855],{"class":102,"line":199},[100,143856,3197],{"class":258},[100,143858,143859],{"class":102,"line":532},[100,143860,137255],{"class":258},[100,143862,143863],{"class":102,"line":577},[100,143864,143865],{"class":1836},"\u002F* 2D 缩放 *\u002F\n",[100,143867,143868,143870],{"class":102,"line":589},[100,143869,53165],{"class":52854},[100,143871,17153],{"class":258},[100,143873,143874,143876,143878,143880,143882,143884],{"class":102,"line":595},[100,143875,137778],{"class":117},[100,143877,52991],{"class":258},[100,143879,143845],{"class":117},[100,143881,713],{"class":258},[100,143883,143850],{"class":117},[100,143885,4321],{"class":258},[100,143887,143888],{"class":102,"line":601},[100,143889,143890],{"class":1836},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[100,143892,143893],{"class":102,"line":606},[100,143894,3197],{"class":258},[19,143896,143897],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[73,143899,143901],{"className":127794,"code":143900,"language":127796,"meta":79,"style":79},"\u002F* 定义动画 *\u002F\n@keyframes move {\n  0% { transform: translateX(0); }\n  100% { transform: translateX(100px); }\n}\n\u002F* 调用动画 *\u002F\ndiv {\n  animation: move 1s ease 0s infinite alternate;\n}\n",[32,143902,143903,143908,143918,143939,143960,143964,143969,143975,144002],{"__ignoreMap":79},[100,143904,143905],{"class":102,"line":103},[100,143906,143907],{"class":1836},"\u002F* 定义动画 *\u002F\n",[100,143909,143910,143913,143916],{"class":102,"line":188},[100,143911,143912],{"class":471},"@keyframes",[100,143914,143915],{"class":6812}," move",[100,143917,17153],{"class":258},[100,143919,143920,143923,143925,143927,143929,143932,143934,143936],{"class":102,"line":199},[100,143921,143922],{"class":106},"  0%",[100,143924,81361],{"class":258},[100,143926,49688],{"class":117},[100,143928,52991],{"class":258},[100,143930,143931],{"class":117},"translateX",[100,143933,713],{"class":258},[100,143935,1366],{"class":117},[100,143937,143938],{"class":258},"); }\n",[100,143940,143941,143944,143946,143948,143950,143952,143954,143956,143958],{"class":102,"line":532},[100,143942,143943],{"class":106},"  100%",[100,143945,81361],{"class":258},[100,143947,49688],{"class":117},[100,143949,52991],{"class":258},[100,143951,143931],{"class":117},[100,143953,713],{"class":258},[100,143955,2078],{"class":117},[100,143957,53046],{"class":471},[100,143959,143938],{"class":258},[100,143961,143962],{"class":102,"line":577},[100,143963,3197],{"class":258},[100,143965,143966],{"class":102,"line":589},[100,143967,143968],{"class":1836},"\u002F* 调用动画 *\u002F\n",[100,143970,143971,143973],{"class":102,"line":595},[100,143972,53165],{"class":52854},[100,143974,17153],{"class":258},[100,143976,143977,143980,143982,143984,143986,143988,143990,143992,143994,143997,144000],{"class":102,"line":601},[100,143978,143979],{"class":117},"  animation",[100,143981,52991],{"class":258},[100,143983,136480],{"class":117},[100,143985,26693],{"class":117},[100,143987,2461],{"class":471},[100,143989,80234],{"class":117},[100,143991,5692],{"class":117},[100,143993,2461],{"class":471},[100,143995,143996],{"class":117}," infinite",[100,143998,143999],{"class":117}," alternate",[100,144001,2927],{"class":258},[100,144003,144004],{"class":102,"line":606},[100,144005,3197],{"class":258},[19,144007,143897],{},[73,144009,144012],{"className":144010,"code":144011,"language":78},[76],"\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-200.png\">\n\n#### 18.2.1.5 动画简写\n\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-201.png\">\n\nname,duration这两个属性必须写！\n\n### 18.2.2 案例\n\n#### 18.2.2.1 热点图\n\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-202.png\">\n\n```Css\n@keyframes slide {\n  from { transform: translateX(0); }\n  to { transform: translateX(100px); }\n}\ndiv {\n  animation: slide 1s ease infinite;\n}\n",[32,144013,144011],{"__ignoreMap":79},[23579,144015,144017],{"id":144016},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,144019,144020],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[3095,144022],{"style":127650,"src":144023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[73,144025,144026],{"className":127794,"code":143900,"language":127796,"meta":79,"style":79},[32,144027,144028,144032,144040,144058,144078,144082,144086,144092,144116],{"__ignoreMap":79},[100,144029,144030],{"class":102,"line":103},[100,144031,143907],{"class":1836},[100,144033,144034,144036,144038],{"class":102,"line":188},[100,144035,143912],{"class":471},[100,144037,143915],{"class":6812},[100,144039,17153],{"class":258},[100,144041,144042,144044,144046,144048,144050,144052,144054,144056],{"class":102,"line":199},[100,144043,143922],{"class":106},[100,144045,81361],{"class":258},[100,144047,49688],{"class":117},[100,144049,52991],{"class":258},[100,144051,143931],{"class":117},[100,144053,713],{"class":258},[100,144055,1366],{"class":117},[100,144057,143938],{"class":258},[100,144059,144060,144062,144064,144066,144068,144070,144072,144074,144076],{"class":102,"line":532},[100,144061,143943],{"class":106},[100,144063,81361],{"class":258},[100,144065,49688],{"class":117},[100,144067,52991],{"class":258},[100,144069,143931],{"class":117},[100,144071,713],{"class":258},[100,144073,2078],{"class":117},[100,144075,53046],{"class":471},[100,144077,143938],{"class":258},[100,144079,144080],{"class":102,"line":577},[100,144081,3197],{"class":258},[100,144083,144084],{"class":102,"line":589},[100,144085,143968],{"class":1836},[100,144087,144088,144090],{"class":102,"line":595},[100,144089,53165],{"class":52854},[100,144091,17153],{"class":258},[100,144093,144094,144096,144098,144100,144102,144104,144106,144108,144110,144112,144114],{"class":102,"line":601},[100,144095,143979],{"class":117},[100,144097,52991],{"class":258},[100,144099,136480],{"class":117},[100,144101,26693],{"class":117},[100,144103,2461],{"class":471},[100,144105,80234],{"class":117},[100,144107,5692],{"class":117},[100,144109,2461],{"class":471},[100,144111,143996],{"class":117},[100,144113,143999],{"class":117},[100,144115,2927],{"class":258},[100,144117,144118],{"class":102,"line":606},[100,144119,3197],{"class":258},[19,144121,144122],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[305,144124,144126],{"id":144125},"_1823-知识点回顾","18.2.3 知识点回顾",[73,144128,144129],{"className":127794,"code":129963,"language":127796,"meta":79,"style":79},[32,144130,144131,144137,144147],{"__ignoreMap":79},[100,144132,144133,144135],{"class":102,"line":103},[100,144134,53165],{"class":52854},[100,144136,17153],{"class":258},[100,144138,144139,144141,144143,144145],{"class":102,"line":188},[100,144140,129976],{"class":117},[100,144142,52991],{"class":258},[100,144144,63290],{"class":117},[100,144146,2927],{"class":258},[100,144148,144149],{"class":102,"line":199},[100,144150,3197],{"class":258},[14,144152,144154],{"id":144153},"_183-3d-转换","18.3 3D 转换",[19,144156,144157],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[305,144159,144161],{"id":144160},"_1831-坐标轴认识","18.3.1 坐标轴认识",[3095,144163],{"style":127650,"src":144164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[305,144166,144168],{"id":144167},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[3095,144170],{"style":127650,"src":144171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,144173,144174],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,144176,144177],{},"translate3d的效果需要搭配透视perspective来使用",[3095,144179],{"style":127650,"src":144180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[305,144182,144184],{"id":144183},"_1833-透视-perspective","18.3.3 透视 perspective",[3095,144186],{"style":127650,"src":144187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,144189,144190],{},"透视写在父盒子上，单位为像素",[305,144192,144194],{"id":144193},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[23579,144196,144198],{"id":144197},"_18341-分开解释","18.3.4.1 分开解释",[3095,144200],{"style":127650,"src":144201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[3095,144203],{"style":127650,"src":144204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[3095,144206],{"style":127650,"src":144207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,144209,144210],{},"总结来说就是左手原则",[23579,144212,144214],{"id":144213},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[3095,144216],{"style":127650,"src":144217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[305,144219,144221],{"id":144220},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[3095,144223],{"style":127650,"src":144224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[3095,144226],{"style":127650,"src":144227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[73,144229,144231],{"className":127794,"code":144230,"language":127796,"meta":79,"style":79},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[32,144232,144233,144239,144252,144269],{"__ignoreMap":79},[100,144234,144235,144237],{"class":102,"line":103},[100,144236,53165],{"class":52854},[100,144238,17153],{"class":258},[100,144240,144241,144244,144246,144248,144250],{"class":102,"line":188},[100,144242,144243],{"class":117},"  perspective",[100,144245,52991],{"class":258},[100,144247,66628],{"class":117},[100,144249,53046],{"class":471},[100,144251,2927],{"class":258},[100,144253,144254,144256,144258,144261,144263,144265,144267],{"class":102,"line":199},[100,144255,137778],{"class":117},[100,144257,52991],{"class":258},[100,144259,144260],{"class":117},"rotateX",[100,144262,713],{"class":258},[100,144264,2296],{"class":117},[100,144266,143621],{"class":471},[100,144268,4321],{"class":258},[100,144270,144271],{"class":102,"line":532},[100,144272,3197],{"class":258},[305,144274,144276],{"id":144275},"_1836-案例","18.3.6 案例",[23579,144278,144280],{"id":144279},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[3095,144282],{"style":127650,"src":144283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[3095,144285],{"style":127650,"src":144286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[3095,144288],{"style":127650,"src":144289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[73,144291,144293],{"className":127794,"code":144292,"language":127796,"meta":79,"style":79},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[32,144294,144295,144300,144306,144318],{"__ignoreMap":79},[100,144296,144297],{"class":102,"line":103},[100,144298,144299],{"class":1836},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[100,144301,144302,144304],{"class":102,"line":188},[100,144303,134791],{"class":106},[100,144305,17153],{"class":258},[100,144307,144308,144310,144312,144314,144316],{"class":102,"line":199},[100,144309,144243],{"class":117},[100,144311,52991],{"class":258},[100,144313,66628],{"class":117},[100,144315,53046],{"class":471},[100,144317,2927],{"class":258},[100,144319,144320],{"class":102,"line":532},[100,144321,3197],{"class":258},[23579,144323,144325],{"id":144324},"_18362-3d导航栏","18.3.6.2 3D导航栏",[3095,144327],{"style":127650,"src":144328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[73,144330,144331],{"className":128541,"code":131898,"language":128543,"meta":79,"style":79},[32,144332,144333,144337,144351,144355],{"__ignoreMap":79},[100,144334,144335],{"class":102,"line":103},[100,144336,131905],{"class":1836},[100,144338,144339,144341,144343,144345,144347,144349],{"class":102,"line":188},[100,144340,2676],{"class":258},[100,144342,53165],{"class":52854},[100,144344,55040],{"class":106},[100,144346,472],{"class":258},[100,144348,131918],{"class":110},[100,144350,52861],{"class":258},[100,144352,144353],{"class":102,"line":199},[100,144354,131925],{"class":258},[100,144356,144357,144359,144361],{"class":102,"line":532},[100,144358,53339],{"class":258},[100,144360,53165],{"class":52854},[100,144362,52861],{"class":258},[23579,144364,144366],{"id":144365},"_18363-旋转木马","18.3.6.3 旋转木马",[3095,144368],{"style":127650,"src":144369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[73,144371,144372],{"className":127794,"code":143597,"language":127796,"meta":79,"style":79},[32,144373,144374,144380,144396],{"__ignoreMap":79},[100,144375,144376,144378],{"class":102,"line":103},[100,144377,53165],{"class":52854},[100,144379,17153],{"class":258},[100,144381,144382,144384,144386,144388,144390,144392,144394],{"class":102,"line":188},[100,144383,137778],{"class":117},[100,144385,52991],{"class":258},[100,144387,143614],{"class":117},[100,144389,713],{"class":258},[100,144391,2296],{"class":117},[100,144393,143621],{"class":471},[100,144395,4321],{"class":258},[100,144397,144398],{"class":102,"line":199},[100,144399,3197],{"class":258},[1677,144401,144402],{},"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":79,"searchDepth":188,"depth":188,"links":144404},[144405,144412],{"id":143500,"depth":188,"text":143501,"children":144406},[144407,144408,144409,144410,144411],{"id":143524,"depth":199,"text":143525},{"id":143579,"depth":199,"text":143580},{"id":143704,"depth":199,"text":143705},{"id":143807,"depth":199,"text":143808},{"id":144125,"depth":199,"text":144126},{"id":144153,"depth":188,"text":144154,"children":144413},[144414,144415,144416,144417,144418,144419],{"id":144160,"depth":199,"text":144161},{"id":144167,"depth":199,"text":144168},{"id":144183,"depth":199,"text":144184},{"id":144193,"depth":199,"text":144194},{"id":144220,"depth":199,"text":144221},{"id":144275,"depth":199,"text":144276},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":143492,"description":24958},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":144426,"title":144427,"body":144428,"description":24958,"extension":1708,"meta":144631,"navigation":569,"path":144632,"seo":144633,"stem":144634,"__hash__":144635},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":144429,"toc":144620},[144430,144433,144437,144440,144443,144447,144450,144453,144456,144460,144463,144467,144470,144474,144477,144481,144495,144499,144524,144527,144530,144547,144551,144555,144558,144561,144565,144568,144571,144589,144593,144596,144610,144614,144617],[10,144431,144427],{"id":144432},"_19-移动端基础-前缀现状与视口",[14,144434,144436],{"id":144435},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[3095,144438],{"style":127650,"src":144439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,144441,144442],{},"意思就是加个前缀，增加兼容性",[14,144444,144446],{"id":144445},"_192-移动端现状认识","19.2 移动端现状认识",[3095,144448],{"style":127650,"src":144449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,144451,144452],{},"调试方法：",[3095,144454],{"style":127650,"src":144455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,144457,144459],{"id":144458},"_193-视口","19.3 视口",[19,144461,144462],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[305,144464,144466],{"id":144465},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[3095,144468],{"style":127650,"src":144469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[305,144471,144473],{"id":144472},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[3095,144475],{"style":127650,"src":144476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[305,144478,144480],{"id":144479},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[2773,144482,144483,144486,144489,144492],{},[29,144484,144485],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[29,144487,144488],{},"理想视口，对设备来讲，是最理想的视口尺寸",[29,144490,144491],{},"需要手动添写meta视口标签通知浏览器操作",[29,144493,144494],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[305,144496,144498],{"id":144497},"_1934-meta视口标签","19.3.4 meta视口标签",[73,144500,144502],{"className":128541,"code":144501,"language":128543,"meta":79,"style":79},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[32,144503,144504],{"__ignoreMap":79},[100,144505,144506,144508,144510,144512,144514,144516,144518,144520,144522],{"class":102,"line":103},[100,144507,2676],{"class":258},[100,144509,52898],{"class":52854},[100,144511,16501],{"class":106},[100,144513,472],{"class":258},[100,144515,52945],{"class":110},[100,144517,52925],{"class":106},[100,144519,472],{"class":258},[100,144521,52952],{"class":110},[100,144523,52861],{"class":258},[3095,144525],{"style":127650,"src":144526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,144528,144529],{},"标准视口设置：",[26,144531,144532,144535,144538,144541,144544],{},[29,144533,144534],{},"视口宽度和设备保持一致",[29,144536,144537],{},"视口的默认缩放比例1.0",[29,144539,144540],{},"不允许用户自行缩放",[29,144542,144543],{},"最大允许的缩放比例1.0",[29,144545,144546],{},"最小允许的缩放比例1.0",[305,144548,144550],{"id":144549},"_1935-二倍图","19.3.5 二倍图",[23579,144552,144554],{"id":144553},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[3095,144556],{"style":127650,"src":144557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[3095,144559],{"style":127650,"src":144560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[23579,144562,144564],{"id":144563},"_19352-多倍图","19.3.5.2 多倍图",[3095,144566],{"style":127650,"src":144567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,144569,144570],{},"二倍图法，代码如下：",[73,144572,144574],{"className":127794,"code":144573,"language":127796,"meta":79,"style":79},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[32,144575,144576,144581],{"__ignoreMap":79},[100,144577,144578],{"class":102,"line":103},[100,144579,144580],{"class":1836},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[100,144582,144583,144586],{"class":102,"line":188},[100,144584,144585],{"class":52854},"background-size",[100,144587,144588],{"class":258},": 50% 50%;\n",[23579,144590,144592],{"id":144591},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[3095,144594],{"style":127650,"src":144595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[26,144597,144598,144601,144604,144607],{},[29,144599,144600],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[29,144602,144603],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[29,144605,144606],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[29,144608,144609],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[23579,144611,144613],{"id":144612},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[3095,144615],{"style":127650,"src":144616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[1677,144618,144619],{},"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":79,"searchDepth":188,"depth":188,"links":144621},[144622,144623,144624],{"id":144435,"depth":188,"text":144436},{"id":144445,"depth":188,"text":144446},{"id":144458,"depth":188,"text":144459,"children":144625},[144626,144627,144628,144629,144630],{"id":144465,"depth":199,"text":144466},{"id":144472,"depth":199,"text":144473},{"id":144479,"depth":199,"text":144480},{"id":144497,"depth":199,"text":144498},{"id":144549,"depth":199,"text":144550},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":144427,"description":24958},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":144637,"title":144638,"body":144639,"description":24958,"extension":1708,"meta":145516,"navigation":569,"path":145517,"seo":145518,"stem":145519,"__hash__":145520},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":144640,"toc":145500},[144641,144644,144648,144655,144658,144665,144668,144673,144676,144680,144684,144691,144694,144697,144701,144704,144707,144710,144713,144716,144720,144723,144727,144729,144732,144735,144738,144741,144743,144746,144748,144778,144780,144810,144814,144817,144821,144824,144841,144844,144847,144923,144925,144928,144931,144934,144937,144939,144942,144945,144949,144971,144974,144977,144981,144984,144990,144993,144997,145000,145003,145007,145010,145013,145016,145020,145023,145026,145029,145032,145036,145039,145043,145050,145053,145056,145059,145062,145072,145075,145078,145085,145088,145092,145095,145098,145102,145105,145108,145111,145156,145159,145162,145165,145167,145296,145298,145336,145339,145342,145344,145462,145464,145498],[10,144642,144638],{"id":144643},"_20-移动端布局实战上篇",[14,144645,144647],{"id":144646},"_201-移动端主流方案","20.1 移动端主流方案",[26,144649,144650],{},[29,144651,144652],{},[1921,144653,144654],{},"单独移动端页面（主流）",[3095,144656],{"style":127650,"src":144657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[26,144659,144660],{"start":188},[29,144661,144662],{},[1921,144663,144664],{},"响应式兼容PC移动端",[3095,144666],{"style":127650,"src":144667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[26,144669,144670],{"start":199},[29,144671,144672],{},"两种页面选型布局方式",[3095,144674],{"style":127650,"src":144675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,144677,144679],{"id":144678},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[305,144681,144683],{"id":144682},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,144685,144686,144687],{},"官网地址： ",[2006,144688,144689],{"href":144689,"rel":144690},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[25442],[3095,144692],{"style":127650,"src":144693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[3095,144695],{"style":127650,"src":144696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[305,144698,144700],{"id":144699},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[3095,144702],{"style":127650,"src":144703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[3095,144705],{"style":127650,"src":144706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,144708,144709],{},"去除高亮：",[19,144711,144712],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,144714,144715],{},"-webkit- tap-highlight-color: transparent;",[14,144717,144719],{"id":144718},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[3095,144721],{"style":127650,"src":144722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,144724,144726],{"id":144725},"_204-流式布局案例","20.4 流式布局案例",[19,144728,1809],{},[19,144730,144731],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,144733,144734],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,144736,144737],{},"图片格式：",[3095,144739],{"style":127650,"src":144740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,144742,136837],{},[3095,144744],{"style":127650,"src":144745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,144747,141164],{},[73,144749,144750],{"className":128541,"code":135296,"language":128543,"meta":79,"style":79},[32,144751,144752],{"__ignoreMap":79},[100,144753,144754,144756,144758,144760,144762,144764,144766,144768,144770,144772,144774,144776],{"class":102,"line":103},[100,144755,2676],{"class":258},[100,144757,3095],{"class":52854},[100,144759,56793],{"class":106},[100,144761,472],{"class":258},[100,144763,135311],{"class":110},[100,144765,56801],{"class":106},[100,144767,472],{"class":258},[100,144769,135318],{"class":110},[100,144771,135321],{"class":106},[100,144773,472],{"class":258},[100,144775,135326],{"class":110},[100,144777,52861],{"class":258},[19,144779,141253],{},[73,144781,144782],{"className":128541,"code":135296,"language":128543,"meta":79,"style":79},[32,144783,144784],{"__ignoreMap":79},[100,144785,144786,144788,144790,144792,144794,144796,144798,144800,144802,144804,144806,144808],{"class":102,"line":103},[100,144787,2676],{"class":258},[100,144789,3095],{"class":52854},[100,144791,56793],{"class":106},[100,144793,472],{"class":258},[100,144795,135311],{"class":110},[100,144797,56801],{"class":106},[100,144799,472],{"class":258},[100,144801,135318],{"class":110},[100,144803,135321],{"class":106},[100,144805,472],{"class":258},[100,144807,135326],{"class":110},[100,144809,52861],{"class":258},[14,144811,144813],{"id":144812},"_205-flex布局","20.5 flex布局",[3095,144815],{"style":127650,"src":144816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[305,144818,144820],{"id":144819},"_2051-布局原理","20.5.1 布局原理",[19,144822,144823],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[2773,144825,144826,144829,144832,144835,144838],{},[29,144827,144828],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[29,144830,144831],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[29,144833,144834],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[29,144836,144837],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[29,144839,144840],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,144842,144843],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,144845,144846],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[73,144848,144850],{"className":127794,"code":144849,"language":127796,"meta":79,"style":79},"\u002F* Flex 弹性布局 *\u002F\n.container {\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  align-items: center;\n  flex-wrap: wrap;\n}\n",[32,144851,144852,144857,144864,144874,144886,144897,144908,144919],{"__ignoreMap":79},[100,144853,144854],{"class":102,"line":103},[100,144855,144856],{"class":1836},"\u002F* Flex 弹性布局 *\u002F\n",[100,144858,144859,144862],{"class":102,"line":188},[100,144860,144861],{"class":106},".container",[100,144863,17153],{"class":258},[100,144865,144866,144868,144870,144872],{"class":102,"line":199},[100,144867,129410],{"class":117},[100,144869,52991],{"class":258},[100,144871,53031],{"class":117},[100,144873,2927],{"class":258},[100,144875,144876,144879,144881,144884],{"class":102,"line":532},[100,144877,144878],{"class":117},"  flex-direction",[100,144880,52991],{"class":258},[100,144882,144883],{"class":117},"row",[100,144885,2927],{"class":258},[100,144887,144888,144891,144893,144895],{"class":102,"line":577},[100,144889,144890],{"class":117},"  justify-content",[100,144892,52991],{"class":258},[100,144894,53222],{"class":117},[100,144896,2927],{"class":258},[100,144898,144899,144902,144904,144906],{"class":102,"line":589},[100,144900,144901],{"class":117},"  align-items",[100,144903,52991],{"class":258},[100,144905,53146],{"class":117},[100,144907,2927],{"class":258},[100,144909,144910,144913,144915,144917],{"class":102,"line":595},[100,144911,144912],{"class":117},"  flex-wrap",[100,144914,52991],{"class":258},[100,144916,80164],{"class":117},[100,144918,2927],{"class":258},[100,144920,144921],{"class":102,"line":601},[100,144922,3197],{"class":258},[19,144924,72007],{},[19,144926,144927],{},".form-item .male-label {",[19,144929,144930],{},"   margin-right: 20px;",[19,144932,144933],{},"   display: inline-flex;",[19,144935,144936],{},"   align-items: center;",[19,144938,2712],{},[3095,144940],{"style":127650,"src":144941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[3095,144943],{"style":127650,"src":144944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[305,144946,144948],{"id":144947},"_2052-常见父项属性","20.5.2 常见父项属性",[26,144950,144951,144954,144957,144960,144963,144966,144969],{},[29,144952,144953],{},"flex-direction：设置主轴的方向",[29,144955,144956],{},"justify-content：设置主轴上的子元素排列方式",[29,144958,144959],{},"flex-wrap：设置子元素是否换行",[29,144961,144962],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[29,144964,144965],{},"align-items：设置侧轴上的子元素排列方式（单行）",[29,144967,144968],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[29,144970,144953],{},[3095,144972],{"style":127650,"src":144973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[3095,144975],{"style":127650,"src":144976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[26,144978,144979],{"start":188},[29,144980,144956],{},[3095,144982],{"style":127650,"src":144983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,144985,144986,144989],{},[32,144987,144988],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,144991,144992],{},"跟着主轴走",[26,144994,144995],{"start":199},[29,144996,144959],{},[3095,144998],{"style":127650,"src":144999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,145001,145002],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[26,145004,145005],{"start":532},[29,145006,144962],{},[3095,145008],{"style":127650,"src":145009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,145011,145012],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,145014,145015],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[26,145017,145018],{"start":577},[29,145019,144965],{},[3095,145021],{"style":127650,"src":145022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,145024,145025],{},"align-items与align-content之间的区别：",[19,145027,145028],{},"单找items，多找content",[3095,145030],{"style":127650,"src":145031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[26,145033,145034],{"start":589},[29,145035,144968],{},[3095,145037],{"style":127650,"src":145038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[305,145040,145042],{"id":145041},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[26,145044,145045],{},[29,145046,145047],{},[1921,145048,145049],{},"flex 属性",[19,145051,145052],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[3095,145054],{"style":127650,"src":145055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,145057,145058],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,145060,145061],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[26,145063,145064],{"start":188},[29,145065,145066,15376,145069],{},[1921,145067,145068],{},"align-self",[1921,145070,145071],{},"控制子项自己在侧轴上的排列方式",[3095,145073],{"style":127650,"src":145074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,145076,145077],{},"单个子盒子在父盒子侧轴上的排列方式",[26,145079,145080],{"start":199},[29,145081,145082,145084],{},[1921,145083,96849],{}," 属性定义项目的排列顺序",[3095,145086],{"style":127650,"src":145087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[305,145089,145091],{"id":145090},"_2054-背景线性渐变","20.5.4 背景线性渐变",[3095,145093],{"style":127650,"src":145094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,145096,145097],{},"必须要添加浏览器的私有前缀",[305,145099,145101],{"id":145100},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,145103,145104],{},"学到最重要的知识：",[19,145106,145107],{},"flex处理这样的布局思路",[3095,145109],{"style":127650,"src":145110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[73,145112,145114],{"className":127794,"code":145113,"language":127796,"meta":79,"style":79},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[32,145115,145116,145122,145132,145142,145152],{"__ignoreMap":79},[100,145117,145118,145120],{"class":102,"line":103},[100,145119,144861],{"class":106},[100,145121,17153],{"class":258},[100,145123,145124,145126,145128,145130],{"class":102,"line":188},[100,145125,129410],{"class":117},[100,145127,52991],{"class":258},[100,145129,53031],{"class":117},[100,145131,2927],{"class":258},[100,145133,145134,145136,145138,145140],{"class":102,"line":199},[100,145135,144890],{"class":117},[100,145137,52991],{"class":258},[100,145139,53146],{"class":117},[100,145141,2927],{"class":258},[100,145143,145144,145146,145148,145150],{"class":102,"line":532},[100,145145,144901],{"class":117},[100,145147,52991],{"class":258},[100,145149,53146],{"class":117},[100,145151,2927],{"class":258},[100,145153,145154],{"class":102,"line":577},[100,145155,3197],{"class":258},[19,145157,145158],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,145160,145161],{},"使用属性选择器",[3095,145163],{"style":127650,"src":145164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,145166,70443],{},[73,145168,145170],{"className":128541,"code":145169,"language":128543,"meta":79,"style":79},"\u003C!-- 携程网移动端案例结构 -->\n\u003Cdiv class=\"container\">\n  \u003C!-- 搜索栏 -->\n  \u003Cdiv class=\"search-index\">...\u003C\u002Fdiv>\n  \u003C!-- 焦点图 -->\n  \u003Cdiv class=\"focus\">...\u003C\u002Fdiv>\n  \u003C!-- 主导航 -->\n  \u003Cdiv class=\"local-nav\">...\u003C\u002Fdiv>\n  \u003C!-- 子导航 -->\n  \u003Cdiv class=\"nav-common\">...\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n",[32,145171,145172,145177,145191,145196,145216,145221,145240,145245,145264,145269,145288],{"__ignoreMap":79},[100,145173,145174],{"class":102,"line":103},[100,145175,145176],{"class":1836},"\u003C!-- 携程网移动端案例结构 -->\n",[100,145178,145179,145181,145183,145185,145187,145189],{"class":102,"line":188},[100,145180,2676],{"class":258},[100,145182,53165],{"class":52854},[100,145184,55040],{"class":106},[100,145186,472],{"class":258},[100,145188,93875],{"class":110},[100,145190,52861],{"class":258},[100,145192,145193],{"class":102,"line":199},[100,145194,145195],{"class":1836},"  \u003C!-- 搜索栏 -->\n",[100,145197,145198,145200,145202,145204,145206,145209,145212,145214],{"class":102,"line":532},[100,145199,53698],{"class":258},[100,145201,53165],{"class":52854},[100,145203,55040],{"class":106},[100,145205,472],{"class":258},[100,145207,145208],{"class":110},"\"search-index\"",[100,145210,145211],{"class":258},">...\u003C\u002F",[100,145213,53165],{"class":52854},[100,145215,52861],{"class":258},[100,145217,145218],{"class":102,"line":577},[100,145219,145220],{"class":1836},"  \u003C!-- 焦点图 -->\n",[100,145222,145223,145225,145227,145229,145231,145234,145236,145238],{"class":102,"line":589},[100,145224,53698],{"class":258},[100,145226,53165],{"class":52854},[100,145228,55040],{"class":106},[100,145230,472],{"class":258},[100,145232,145233],{"class":110},"\"focus\"",[100,145235,145211],{"class":258},[100,145237,53165],{"class":52854},[100,145239,52861],{"class":258},[100,145241,145242],{"class":102,"line":595},[100,145243,145244],{"class":1836},"  \u003C!-- 主导航 -->\n",[100,145246,145247,145249,145251,145253,145255,145258,145260,145262],{"class":102,"line":601},[100,145248,53698],{"class":258},[100,145250,53165],{"class":52854},[100,145252,55040],{"class":106},[100,145254,472],{"class":258},[100,145256,145257],{"class":110},"\"local-nav\"",[100,145259,145211],{"class":258},[100,145261,53165],{"class":52854},[100,145263,52861],{"class":258},[100,145265,145266],{"class":102,"line":606},[100,145267,145268],{"class":1836},"  \u003C!-- 子导航 -->\n",[100,145270,145271,145273,145275,145277,145279,145282,145284,145286],{"class":102,"line":612},[100,145272,53698],{"class":258},[100,145274,53165],{"class":52854},[100,145276,55040],{"class":106},[100,145278,472],{"class":258},[100,145280,145281],{"class":110},"\"nav-common\"",[100,145283,145211],{"class":258},[100,145285,53165],{"class":52854},[100,145287,52861],{"class":258},[100,145289,145290,145292,145294],{"class":102,"line":618},[100,145291,53339],{"class":258},[100,145293,53165],{"class":52854},[100,145295,52861],{"class":258},[19,145297,72007],{},[73,145299,145300],{"className":127794,"code":138246,"language":127796,"meta":79,"style":79},[32,145301,145302,145316,145332],{"__ignoreMap":79},[100,145303,145304,145306,145308,145310,145312,145314],{"class":102,"line":103},[100,145305,55375],{"class":52854},[100,145307,2656],{"class":258},[100,145309,104581],{"class":106},[100,145311,472],{"class":471},[100,145313,64253],{"class":110},[100,145315,138263],{"class":258},[100,145317,145318,145320,145322,145324,145326,145328,145330],{"class":102,"line":188},[100,145319,72450],{"class":117},[100,145321,52991],{"class":258},[100,145323,1985],{"class":117},[100,145325,53046],{"class":471},[100,145327,53075],{"class":117},[100,145329,131374],{"class":117},[100,145331,2927],{"class":258},[100,145333,145334],{"class":102,"line":199},[100,145335,3197],{"class":258},[19,145337,145338],{},"总代码和效果展示：",[3095,145340],{"style":127650,"src":145341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,145343,70443],{},[73,145345,145346],{"className":128541,"code":145169,"language":128543,"meta":79,"style":79},[32,145347,145348,145352,145366,145370,145388,145392,145410,145414,145432,145436,145454],{"__ignoreMap":79},[100,145349,145350],{"class":102,"line":103},[100,145351,145176],{"class":1836},[100,145353,145354,145356,145358,145360,145362,145364],{"class":102,"line":188},[100,145355,2676],{"class":258},[100,145357,53165],{"class":52854},[100,145359,55040],{"class":106},[100,145361,472],{"class":258},[100,145363,93875],{"class":110},[100,145365,52861],{"class":258},[100,145367,145368],{"class":102,"line":199},[100,145369,145195],{"class":1836},[100,145371,145372,145374,145376,145378,145380,145382,145384,145386],{"class":102,"line":532},[100,145373,53698],{"class":258},[100,145375,53165],{"class":52854},[100,145377,55040],{"class":106},[100,145379,472],{"class":258},[100,145381,145208],{"class":110},[100,145383,145211],{"class":258},[100,145385,53165],{"class":52854},[100,145387,52861],{"class":258},[100,145389,145390],{"class":102,"line":577},[100,145391,145220],{"class":1836},[100,145393,145394,145396,145398,145400,145402,145404,145406,145408],{"class":102,"line":589},[100,145395,53698],{"class":258},[100,145397,53165],{"class":52854},[100,145399,55040],{"class":106},[100,145401,472],{"class":258},[100,145403,145233],{"class":110},[100,145405,145211],{"class":258},[100,145407,53165],{"class":52854},[100,145409,52861],{"class":258},[100,145411,145412],{"class":102,"line":595},[100,145413,145244],{"class":1836},[100,145415,145416,145418,145420,145422,145424,145426,145428,145430],{"class":102,"line":601},[100,145417,53698],{"class":258},[100,145419,53165],{"class":52854},[100,145421,55040],{"class":106},[100,145423,472],{"class":258},[100,145425,145257],{"class":110},[100,145427,145211],{"class":258},[100,145429,53165],{"class":52854},[100,145431,52861],{"class":258},[100,145433,145434],{"class":102,"line":606},[100,145435,145268],{"class":1836},[100,145437,145438,145440,145442,145444,145446,145448,145450,145452],{"class":102,"line":612},[100,145439,53698],{"class":258},[100,145441,53165],{"class":52854},[100,145443,55040],{"class":106},[100,145445,472],{"class":258},[100,145447,145281],{"class":110},[100,145449,145211],{"class":258},[100,145451,53165],{"class":52854},[100,145453,52861],{"class":258},[100,145455,145456,145458,145460],{"class":102,"line":618},[100,145457,53339],{"class":258},[100,145459,53165],{"class":52854},[100,145461,52861],{"class":258},[19,145463,72007],{},[73,145465,145466],{"className":128541,"code":131898,"language":128543,"meta":79,"style":79},[32,145467,145468,145472,145486,145490],{"__ignoreMap":79},[100,145469,145470],{"class":102,"line":103},[100,145471,131905],{"class":1836},[100,145473,145474,145476,145478,145480,145482,145484],{"class":102,"line":188},[100,145475,2676],{"class":258},[100,145477,53165],{"class":52854},[100,145479,55040],{"class":106},[100,145481,472],{"class":258},[100,145483,131918],{"class":110},[100,145485,52861],{"class":258},[100,145487,145488],{"class":102,"line":199},[100,145489,131925],{"class":258},[100,145491,145492,145494,145496],{"class":102,"line":532},[100,145493,53339],{"class":258},[100,145495,53165],{"class":52854},[100,145497,52861],{"class":258},[1677,145499,139195],{},{"title":79,"searchDepth":188,"depth":188,"links":145501},[145502,145503,145507,145508,145509],{"id":144646,"depth":188,"text":144647},{"id":144678,"depth":188,"text":144679,"children":145504},[145505,145506],{"id":144682,"depth":199,"text":144683},{"id":144699,"depth":199,"text":144700},{"id":144718,"depth":188,"text":144719},{"id":144725,"depth":188,"text":144726},{"id":144812,"depth":188,"text":144813,"children":145510},[145511,145512,145513,145514,145515],{"id":144819,"depth":199,"text":144820},{"id":144947,"depth":199,"text":144948},{"id":145041,"depth":199,"text":145042},{"id":145090,"depth":199,"text":145091},{"id":145100,"depth":199,"text":145101},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":144638,"description":24958},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":145522,"title":145523,"body":145524,"description":24958,"extension":1708,"meta":146751,"navigation":569,"path":146752,"seo":146753,"stem":146754,"__hash__":146755},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":145525,"toc":146729},[145526,145529,145533,145537,145540,145543,145547,145552,145555,145558,145561,145564,145567,145624,145627,145632,145635,145638,145642,145653,145657,145660,145663,145670,145675,145679,145682,145688,145691,145695,145698,145705,145708,145711,145718,145721,145728,145731,145734,145741,145744,145747,145749,145766,145770,145773,145776,145779,145783,145786,145789,145792,145795,145798,145801,145803,145806,145809,145871,145874,145984,145991,145997,146000,146003,146007,146010,146014,146019,146022,146029,146032,146038,146043,146046,146049,146052,146055,146058,146061,146064,146067,146123,146125,146151,146155,146158,146161,146164,146172,146175,146178,146182,146238,146241,146245,146251,146262,146265,146270,146273,146276,146282,146285,146288,146291,146294,146297,146300,146303,146306,146331,146337,146340,146343,146346,146349,146352,146355,146360,146363,146366,146369,146377,146380,146387,146390,146393,146395,146419,146421,146424,146427,146430,146433,146436,146439,146442,146476,146479,146482,146516,146523,146526,146529,146532,146535,146538,146541,146548,146551,146554,146557,146560,146567,146570,146573,146580,146583,146586,146590,146593,146596,146599,146602,146605,146608,146611,146614,146616,146640,146642,146666,146670,146681,146684,146687,146690,146693,146696,146699,146702,146705,146708,146711,146714,146717,146720,146723,146726],[10,145527,145523],{"id":145528},"_21-移动端布局实战下篇",[14,145530,145532],{"id":145531},"_211-rem适配布局","21.1 rem适配布局",[305,145534,145536],{"id":145535},"_2111-rem单位","21.1.1 rem单位",[3095,145538],{"style":127650,"src":145539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,145541,145542],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[305,145544,145546],{"id":145545},"_2112-媒体查询","21.1.2 媒体查询",[26,145548,145549],{},[29,145550,145551],{},"参数介绍",[3095,145553],{"style":127650,"src":145554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[3095,145556],{"style":127650,"src":145557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[3095,145559],{"style":127650,"src":145560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[3095,145562],{"style":127650,"src":145563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[3095,145565],{"style":127650,"src":145566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[73,145568,145570],{"className":127794,"code":145569,"language":127796,"meta":79,"style":79},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[32,145571,145572,145577,145596,145603,145616,145620],{"__ignoreMap":79},[100,145573,145574],{"class":102,"line":103},[100,145575,145576],{"class":1836},"\u002F* 媒体查询 *\u002F\n",[100,145578,145579,145582,145584,145587,145589,145592,145594],{"class":102,"line":188},[100,145580,145581],{"class":471},"@media",[100,145583,3283],{"class":258},[100,145585,145586],{"class":117},"max-width",[100,145588,52991],{"class":258},[100,145590,145591],{"class":117},"768",[100,145593,53046],{"class":471},[100,145595,14024],{"class":258},[100,145597,145598,145601],{"class":102,"line":199},[100,145599,145600],{"class":106},"  .container",[100,145602,17153],{"class":258},[100,145604,145605,145608,145610,145612,145614],{"class":102,"line":532},[100,145606,145607],{"class":117},"    width",[100,145609,52991],{"class":258},[100,145611,2078],{"class":117},[100,145613,2095],{"class":471},[100,145615,2927],{"class":258},[100,145617,145618],{"class":102,"line":577},[100,145619,128590],{"class":258},[100,145621,145622],{"class":102,"line":589},[100,145623,3197],{"class":258},[19,145625,145626],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[26,145628,145629],{"start":188},[29,145630,145631],{},"引入资源",[3095,145633],{"style":127650,"src":145634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,145636,145637],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[305,145639,145641],{"id":145640},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[2773,145643,145644,145647,145650],{},[29,145645,145646],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[29,145648,145649],{},"媒体查询可以根据不同设备宽度来修改样式",[29,145651,145652],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,145654,145656],{"id":145655},"_212-less基础","21.2 Less基础",[19,145658,145659],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,145661,145662],{},"Less可以解决该问题，它是css的扩展语言",[19,145664,145665,145666],{},"Less中文网址： ",[2006,145667,145668],{"href":145668,"rel":145669},"http:\u002F\u002Flesscss.cn\u002F",[25442],[19,145671,145672],{},[1921,145673,145674],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[305,145676,145678],{"id":145677},"_2121-less安装","21.2.1 less安装",[19,145680,145681],{},"如果使用vscode，则无需进行下方安装步骤",[19,145683,145684],{},[2006,145685,145686],{"href":145686,"rel":145687},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[25442],[3095,145689],{"style":127650,"src":145690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[305,145692,145694],{"id":145693},"_2122-less使用","21.2.2 less使用",[19,145696,145697],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[26,145699,145700],{},[29,145701,145702],{},[1921,145703,145704],{},"Less 变量",[3095,145706],{"style":127650,"src":145707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[3095,145709],{"style":127650,"src":145710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[26,145712,145713],{"start":188},[29,145714,145715],{},[1921,145716,145717],{},"Less 编译",[3095,145719],{"style":127650,"src":145720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[26,145722,145723],{"start":199},[29,145724,145725],{},[1921,145726,145727],{},"Less 嵌套",[3095,145729],{"style":127650,"src":145730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[3095,145732],{"style":127650,"src":145733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[26,145735,145736],{"start":532},[29,145737,145738],{},[1921,145739,145740],{},"Less 运算",[3095,145742],{"style":127650,"src":145743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,145745,145746],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,145748,1809],{},[2773,145750,145751,145754,145757,145760,145763],{},[29,145752,145753],{},"乘号（*）和除号（\u002F）的写法",[29,145755,145756],{},"运算符中间左右有个空格隔开 1px + 5",[29,145758,145759],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[29,145761,145762],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[29,145764,145765],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,145767,145769],{"id":145768},"_213-rem-适配方案","21.3 rem 适配方案",[19,145771,145772],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,145774,145775],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[3095,145777],{"style":127650,"src":145778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[305,145780,145782],{"id":145781},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,145784,145785],{},"rem + 媒体查询 + less 技术",[3095,145787],{"style":127650,"src":145788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,145790,145791],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,145793,145794],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[3095,145796],{"style":127650,"src":145797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,145799,145800],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,145802,16214],{},[3095,145804],{"style":127650,"src":145805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,145807,145808],{},"index.html:",[73,145810,145812],{"className":127794,"code":145811,"language":127796,"meta":79,"style":79},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[32,145813,145814,145819,145825,145841,145845,145851,145867],{"__ignoreMap":79},[100,145815,145816],{"class":102,"line":103},[100,145817,145818],{"class":1836},"\u002F* rem 适配方案 *\u002F\n",[100,145820,145821,145823],{"class":102,"line":188},[100,145822,52189],{"class":52854},[100,145824,17153],{"class":258},[100,145826,145827,145829,145831,145834,145836,145838],{"class":102,"line":199},[100,145828,72180],{"class":117},[100,145830,52991],{"class":258},[100,145832,145833],{"class":117},"62.5",[100,145835,2095],{"class":471},[100,145837,131657],{"class":258},[100,145839,145840],{"class":1836},"\u002F* 1rem = 10px *\u002F\n",[100,145842,145843],{"class":102,"line":532},[100,145844,3197],{"class":258},[100,145846,145847,145849],{"class":102,"line":577},[100,145848,131642],{"class":106},[100,145850,17153],{"class":258},[100,145852,145853,145855,145857,145859,145862,145864],{"class":102,"line":589},[100,145854,72122],{"class":117},[100,145856,52991],{"class":258},[100,145858,2213],{"class":117},[100,145860,145861],{"class":471},"rem",[100,145863,131657],{"class":258},[100,145865,145866],{"class":1836},"\u002F* 100px *\u002F\n",[100,145868,145869],{"class":102,"line":595},[100,145870,3197],{"class":258},[19,145872,145873],{},"common.less",[73,145875,145877],{"className":127794,"code":145876,"language":127796,"meta":79,"style":79},"html {\n  font-size: 62.5%; \u002F* 10px *\u002F\n}\ndiv {\n  width: 10rem; \u002F* 100px *\u002F\n}\n```Css\n\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[32,145878,145879,145885,145900,145904,145910,145924,145928,145932,145936,145942,145956,145960,145966,145980],{"__ignoreMap":79},[100,145880,145881,145883],{"class":102,"line":103},[100,145882,52189],{"class":52854},[100,145884,17153],{"class":258},[100,145886,145887,145889,145891,145893,145895,145897],{"class":102,"line":188},[100,145888,72180],{"class":117},[100,145890,52991],{"class":258},[100,145892,145833],{"class":117},[100,145894,2095],{"class":471},[100,145896,27641],{"class":258},[100,145898,145899],{"class":1836},"\u002F* 10px *\u002F\n",[100,145901,145902],{"class":102,"line":199},[100,145903,3197],{"class":258},[100,145905,145906,145908],{"class":102,"line":532},[100,145907,53165],{"class":52854},[100,145909,17153],{"class":258},[100,145911,145912,145914,145916,145918,145920,145922],{"class":102,"line":577},[100,145913,72122],{"class":117},[100,145915,52991],{"class":258},[100,145917,2213],{"class":117},[100,145919,145861],{"class":471},[100,145921,27641],{"class":258},[100,145923,145866],{"class":1836},[100,145925,145926],{"class":102,"line":589},[100,145927,3197],{"class":258},[100,145929,145930],{"class":102,"line":595},[100,145931,137255],{"class":258},[100,145933,145934],{"class":102,"line":601},[100,145935,145818],{"class":1836},[100,145937,145938,145940],{"class":102,"line":606},[100,145939,52189],{"class":52854},[100,145941,17153],{"class":258},[100,145943,145944,145946,145948,145950,145952,145954],{"class":102,"line":612},[100,145945,72180],{"class":117},[100,145947,52991],{"class":258},[100,145949,145833],{"class":117},[100,145951,2095],{"class":471},[100,145953,131657],{"class":258},[100,145955,145840],{"class":1836},[100,145957,145958],{"class":102,"line":618},[100,145959,3197],{"class":258},[100,145961,145962,145964],{"class":102,"line":623},[100,145963,131642],{"class":106},[100,145965,17153],{"class":258},[100,145967,145968,145970,145972,145974,145976,145978],{"class":102,"line":629},[100,145969,72122],{"class":117},[100,145971,52991],{"class":258},[100,145973,2213],{"class":117},[100,145975,145861],{"class":471},[100,145977,131657],{"class":258},[100,145979,145866],{"class":1836},[100,145981,145982],{"class":102,"line":635},[100,145983,3197],{"class":258},[19,145985,145986,145987,145990],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[25135,145988,145989],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[73,145992,145995],{"className":145993,"code":145994,"language":78},[76],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[32,145996,145994],{"__ignoreMap":79},[19,145998,145999],{},"less保存时会自动变成.css文件",[19,146001,146002],{},"好好搞懂上述代码写法",[305,146004,146006],{"id":146005},"_2132-样式导入样式","21.3.2 样式导入样式",[3095,146008],{"style":127650,"src":146009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[305,146011,146013],{"id":146012},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[26,146015,146016],{},[29,146017,146018],{},"准备工作",[3095,146020],{"style":127650,"src":146021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,146023,146024,146025],{},"github地址：",[2006,146026,146027],{"href":146027,"rel":146028},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[25442],[19,146030,146031],{},"下载之后，将index.js文件拖到项目中就可以了",[19,146033,146034,146035],{},"js文件引入到index.html中使用的是",[32,146036,146037],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[26,146039,146040],{"start":188},[29,146041,146042],{},"vscode插件",[3095,146044],{"style":127650,"src":146045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,146047,146048],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,146050,146051],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[3095,146053],{"style":127650,"src":146054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,146056,146057],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[3095,146059],{"style":127650,"src":146060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,146062,146063],{},"修改成75就可以，alt+z为快捷键",[19,146065,146066],{},"index.css：",[73,146068,146069],{"className":127794,"code":145811,"language":127796,"meta":79,"style":79},[32,146070,146071,146075,146081,146095,146099,146105,146119],{"__ignoreMap":79},[100,146072,146073],{"class":102,"line":103},[100,146074,145818],{"class":1836},[100,146076,146077,146079],{"class":102,"line":188},[100,146078,52189],{"class":52854},[100,146080,17153],{"class":258},[100,146082,146083,146085,146087,146089,146091,146093],{"class":102,"line":199},[100,146084,72180],{"class":117},[100,146086,52991],{"class":258},[100,146088,145833],{"class":117},[100,146090,2095],{"class":471},[100,146092,131657],{"class":258},[100,146094,145840],{"class":1836},[100,146096,146097],{"class":102,"line":532},[100,146098,3197],{"class":258},[100,146100,146101,146103],{"class":102,"line":577},[100,146102,131642],{"class":106},[100,146104,17153],{"class":258},[100,146106,146107,146109,146111,146113,146115,146117],{"class":102,"line":589},[100,146108,72122],{"class":117},[100,146110,52991],{"class":258},[100,146112,2213],{"class":117},[100,146114,145861],{"class":471},[100,146116,131657],{"class":258},[100,146118,145866],{"class":1836},[100,146120,146121],{"class":102,"line":595},[100,146122,3197],{"class":258},[19,146124,145808],{},[73,146126,146127],{"className":127794,"code":128198,"language":127796,"meta":79,"style":79},[32,146128,146129,146135,146147],{"__ignoreMap":79},[100,146130,146131,146133],{"class":102,"line":103},[100,146132,53354],{"class":52854},[100,146134,17153],{"class":258},[100,146136,146137,146139,146141,146143,146145],{"class":102,"line":188},[100,146138,72180],{"class":117},[100,146140,52991],{"class":258},[100,146142,2368],{"class":117},[100,146144,53046],{"class":471},[100,146146,2927],{"class":258},[100,146148,146149],{"class":102,"line":199},[100,146150,3197],{"class":258},[14,146152,146154],{"id":146153},"_214-响应式开发","21.4 响应式开发",[19,146156,146157],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[3095,146159],{"style":127650,"src":146160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,146162,146163],{},"做法：",[2773,146165,146166,146169],{},[29,146167,146168],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[29,146170,146171],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[3095,146173],{"style":127650,"src":146174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,146176,146177],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[305,146179,146181],{"id":146180},"_2141-简单代码示范","21.4.1 简单代码示范",[73,146183,146184],{"className":127794,"code":145811,"language":127796,"meta":79,"style":79},[32,146185,146186,146190,146196,146210,146214,146220,146234],{"__ignoreMap":79},[100,146187,146188],{"class":102,"line":103},[100,146189,145818],{"class":1836},[100,146191,146192,146194],{"class":102,"line":188},[100,146193,52189],{"class":52854},[100,146195,17153],{"class":258},[100,146197,146198,146200,146202,146204,146206,146208],{"class":102,"line":199},[100,146199,72180],{"class":117},[100,146201,52991],{"class":258},[100,146203,145833],{"class":117},[100,146205,2095],{"class":471},[100,146207,131657],{"class":258},[100,146209,145840],{"class":1836},[100,146211,146212],{"class":102,"line":532},[100,146213,3197],{"class":258},[100,146215,146216,146218],{"class":102,"line":577},[100,146217,131642],{"class":106},[100,146219,17153],{"class":258},[100,146221,146222,146224,146226,146228,146230,146232],{"class":102,"line":589},[100,146223,72122],{"class":117},[100,146225,52991],{"class":258},[100,146227,2213],{"class":117},[100,146229,145861],{"class":471},[100,146231,131657],{"class":258},[100,146233,145866],{"class":1836},[100,146235,146236],{"class":102,"line":595},[100,146237,3197],{"class":258},[19,146239,146240],{},"父盒子一般命名为container",[305,146242,146244],{"id":146243},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,146246,146247,146248],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[1921,146249,146250],{},"使得 Web 开发更加快捷",[2773,146252,146253],{},[29,146254,146255,146256],{},"官网：",[1921,146257,146258],{},[2006,146259,146260],{"href":146260,"rel":146261},"http:\u002F\u002Fgetbootstrap.com\u002F",[25442],[19,146263,146264],{},"可以直接去官网拿现成的东西",[26,146266,146267],{},[29,146268,146269],{},"Bootstrap的使用",[19,146271,146272],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,146274,146275],{},"Bootstrap 使用四步曲：",[19,146277,146278,146281],{},[1921,146279,146280],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[3095,146283],{"style":127650,"src":146284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,146286,146287],{},"打开Bootstrap官网，然后下载",[3095,146289],{"style":127650,"src":146290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[3095,146292],{"style":127650,"src":146293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,146295,146296],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,146298,146299],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,146301,146302],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[3095,146304],{"style":127650,"src":146305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[73,146307,146309],{"className":127794,"code":146308,"language":127796,"meta":79,"style":79},".center {\n  color: red;\n}\n",[32,146310,146311,146317,146327],{"__ignoreMap":79},[100,146312,146313,146315],{"class":102,"line":103},[100,146314,128085],{"class":106},[100,146316,17153],{"class":258},[100,146318,146319,146321,146323,146325],{"class":102,"line":188},[100,146320,72459],{"class":117},[100,146322,52991],{"class":258},[100,146324,58975],{"class":117},[100,146326,2927],{"class":258},[100,146328,146329],{"class":102,"line":199},[100,146330,3197],{"class":258},[19,146332,146333,146336],{},[32,146334,146335],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[3095,146338],{"style":127650,"src":146339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[3095,146341],{"style":127650,"src":146342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[3095,146344],{"style":127650,"src":146345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,146347,146348],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[3095,146350],{"style":127650,"src":146351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,146353,146354],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[26,146356,146357],{"start":188},[29,146358,146359],{},"布局容器",[3095,146361],{"style":127650,"src":146362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,146364,146365],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,146367,146368],{},"container-fluid用于移动式布局比较方便",[26,146370,146371],{"start":199},[29,146372,146373,146374],{},"bootstrap ",[1921,146375,146376],{},"栅格系统原理",[3095,146378],{"style":127650,"src":146379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[26,146381,146382],{"start":532},[29,146383,146384],{},[1921,146385,146386],{},"栅格选项参数",[3095,146388],{"style":127650,"src":146389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,146391,146392],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,146394,16214],{},[73,146396,146397],{"className":127794,"code":146308,"language":127796,"meta":79,"style":79},[32,146398,146399,146405,146415],{"__ignoreMap":79},[100,146400,146401,146403],{"class":102,"line":103},[100,146402,128085],{"class":106},[100,146404,17153],{"class":258},[100,146406,146407,146409,146411,146413],{"class":102,"line":188},[100,146408,72459],{"class":117},[100,146410,52991],{"class":258},[100,146412,58975],{"class":117},[100,146414,2927],{"class":258},[100,146416,146417],{"class":102,"line":199},[100,146418,3197],{"class":258},[19,146420,136837],{},[3095,146422],{"style":127650,"src":146423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,146425,146426],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,146428,146429],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,146431,146432],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,146434,146435],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,146437,146438],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,146440,146441],{},"汇总展示说明：",[73,146443,146444],{"className":128541,"code":131898,"language":128543,"meta":79,"style":79},[32,146445,146446,146450,146464,146468],{"__ignoreMap":79},[100,146447,146448],{"class":102,"line":103},[100,146449,131905],{"class":1836},[100,146451,146452,146454,146456,146458,146460,146462],{"class":102,"line":188},[100,146453,2676],{"class":258},[100,146455,53165],{"class":52854},[100,146457,55040],{"class":106},[100,146459,472],{"class":258},[100,146461,131918],{"class":110},[100,146463,52861],{"class":258},[100,146465,146466],{"class":102,"line":199},[100,146467,131925],{"class":258},[100,146469,146470,146472,146474],{"class":102,"line":532},[100,146471,53339],{"class":258},[100,146473,53165],{"class":52854},[100,146475,52861],{"class":258},[3095,146477],{"style":127650,"src":146478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,146480,146481],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[73,146483,146484],{"className":128541,"code":131898,"language":128543,"meta":79,"style":79},[32,146485,146486,146490,146504,146508],{"__ignoreMap":79},[100,146487,146488],{"class":102,"line":103},[100,146489,131905],{"class":1836},[100,146491,146492,146494,146496,146498,146500,146502],{"class":102,"line":188},[100,146493,2676],{"class":258},[100,146495,53165],{"class":52854},[100,146497,55040],{"class":106},[100,146499,472],{"class":258},[100,146501,131918],{"class":110},[100,146503,52861],{"class":258},[100,146505,146506],{"class":102,"line":199},[100,146507,131925],{"class":258},[100,146509,146510,146512,146514],{"class":102,"line":532},[100,146511,53339],{"class":258},[100,146513,53165],{"class":52854},[100,146515,52861],{"class":258},[26,146517,146518],{"start":577},[29,146519,146520],{},[1921,146521,146522],{},"列嵌套",[3095,146524],{"style":127650,"src":146525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,146527,146528],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,146530,146531],{},"没加row内部这样：",[3095,146533],{"style":127650,"src":146534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,146536,146537],{},"加上row之后内部为：",[3095,146539],{"style":127650,"src":146540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[26,146542,146543],{"start":589},[29,146544,146545],{},[1921,146546,146547],{},"列偏移",[3095,146549],{"style":127650,"src":146550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,146552,146553],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,146555,146556],{},"要加偏移量，即偏移份数",[19,146558,146559],{},"偏移的份数=12-两个盒子的份数",[26,146561,146562],{"start":595},[29,146563,146564],{},[1921,146565,146566],{},"列排序",[3095,146568],{"style":127650,"src":146569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,146571,146572],{},"pull拉左；push推右",[26,146574,146575],{"start":601},[29,146576,146577],{},[1921,146578,146579],{},"响应式工具",[3095,146581],{"style":127650,"src":146582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,146584,146585],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[305,146587,146589],{"id":146588},"_2143-响应式小项目","21.4.3 响应式小项目",[19,146591,146592],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,146594,146595],{},"ul {",[19,146597,146598],{},"list-style: none;",[19,146600,146601],{},"margin:0;",[19,146603,146604],{},"padding:0; }",[3095,146606],{"style":127650,"src":146607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[3095,146609],{"style":127650,"src":146610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,146612,146613],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,146615,70443],{},[73,146617,146618],{"className":127794,"code":140464,"language":127796,"meta":79,"style":79},[32,146619,146620,146626,146636],{"__ignoreMap":79},[100,146621,146622,146624],{"class":102,"line":103},[100,146623,131642],{"class":106},[100,146625,17153],{"class":258},[100,146627,146628,146630,146632,146634],{"class":102,"line":188},[100,146629,132274],{"class":117},[100,146631,52991],{"class":258},[100,146633,330],{"class":117},[100,146635,2927],{"class":258},[100,146637,146638],{"class":102,"line":199},[100,146639,3197],{"class":258},[19,146641,72007],{},[73,146643,146644],{"className":127794,"code":140464,"language":127796,"meta":79,"style":79},[32,146645,146646,146652,146662],{"__ignoreMap":79},[100,146647,146648,146650],{"class":102,"line":103},[100,146649,131642],{"class":106},[100,146651,17153],{"class":258},[100,146653,146654,146656,146658,146660],{"class":102,"line":188},[100,146655,132274],{"class":117},[100,146657,52991],{"class":258},[100,146659,330],{"class":117},[100,146661,2927],{"class":258},[100,146663,146664],{"class":102,"line":199},[100,146665,3197],{"class":258},[14,146667,146669],{"id":146668},"_215-swiper-插件使用","21.5 swiper 插件使用",[2773,146671,146672,146675,146678],{},[29,146673,146674],{},"下载需要的css和js文件html页面中 引入相关文件",[29,146676,146677],{},"官网找到类似案例，复制html结构，css样式 js 语法",[29,146679,146680],{},"根据需求定制修改模块",[3095,146682],{"style":127650,"src":146683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,146685,146686],{},"解压后将这两部分放到项目中",[3095,146688],{"style":127650,"src":146689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,146691,146692],{},"这个插件可以帮助我们实现轮播图效果",[19,146694,146695],{},"用法：",[3095,146697],{"style":127650,"src":146698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,146700,146701],{},"找到自己喜欢的",[3095,146703],{"style":127650,"src":146704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,146706,146707],{},"右键，查看网页源代码",[3095,146709],{"style":127650,"src":146710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,146712,146713],{},"复制人家的结构内容",[19,146715,146716],{},"然后去看API文档：",[3095,146718],{"style":127650,"src":146719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,146721,146722],{},"可以看看如何修改样式",[19,146724,146725],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[1677,146727,146728],{},"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":79,"searchDepth":188,"depth":188,"links":146730},[146731,146736,146740,146745,146750],{"id":145531,"depth":188,"text":145532,"children":146732},[146733,146734,146735],{"id":145535,"depth":199,"text":145536},{"id":145545,"depth":199,"text":145546},{"id":145640,"depth":199,"text":145641},{"id":145655,"depth":188,"text":145656,"children":146737},[146738,146739],{"id":145677,"depth":199,"text":145678},{"id":145693,"depth":199,"text":145694},{"id":145768,"depth":188,"text":145769,"children":146741},[146742,146743,146744],{"id":145781,"depth":199,"text":145782},{"id":146005,"depth":199,"text":146006},{"id":146012,"depth":199,"text":146013},{"id":146153,"depth":188,"text":146154,"children":146746},[146747,146748,146749],{"id":146180,"depth":199,"text":146181},{"id":146243,"depth":199,"text":146244},{"id":146588,"depth":199,"text":146589},{"id":146668,"depth":188,"text":146669},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":145523,"description":24958},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":146757,"title":146758,"body":146759,"description":24958,"extension":1708,"meta":146979,"navigation":569,"path":146980,"seo":146981,"stem":146982,"__hash__":146983},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":146760,"toc":146975},[146761,146764,146768,146771,146786,146791,146794,146799,146834,146839,146851,146856,146869,146874,146891,146896,146916,146921,146939,146942,146945,146948,146951,146955,146958,146961,146964,146967,146970,146973],[10,146762,146758],{"id":146763},"_22-代码提交与新型相对单位",[14,146765,146767],{"id":146766},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,146769,146770],{},"法1：",[26,146772,146773,146780,146783],{},[29,146774,146775,146776],{},"登录网站注册：",[2006,146777,146778],{"href":146778,"rel":146779},"https:\u002F\u002Fgitee.com\u002F",[25442],[29,146781,146782],{},"码云创建新的仓库",[29,146784,146785],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[2773,146787,146788],{},[29,146789,146790],{},"在网站根目录右键-- Git Bash Here",[3095,146792],{"style":127650,"src":146793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[2773,146795,146796],{},[29,146797,146798],{},"如果是第一次利用git提交，请配置好全局选项",[73,146800,146802],{"className":118538,"code":146801,"language":118540,"meta":79,"style":79},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[32,146803,146804,146820],{"__ignoreMap":79},[100,146805,146806,146809,146811,146814,146817],{"class":102,"line":103},[100,146807,146808],{"class":106},"git",[100,146810,120961],{"class":110},[100,146812,146813],{"class":117}," --global",[100,146815,146816],{"class":110}," user.name",[100,146818,146819],{"class":110}," \"你的名字\"\n",[100,146821,146822,146824,146826,146828,146831],{"class":102,"line":188},[100,146823,146808],{"class":106},[100,146825,120961],{"class":110},[100,146827,146813],{"class":117},[100,146829,146830],{"class":110}," user.email",[100,146832,146833],{"class":110}," \"你的邮箱\"\n",[2773,146835,146836],{},[29,146837,146838],{},"初始化仓库",[73,146840,146842],{"className":118538,"code":146841,"language":118540,"meta":79,"style":79},"git init\n",[32,146843,146844],{"__ignoreMap":79},[100,146845,146846,146848],{"class":102,"line":103},[100,146847,146808],{"class":106},[100,146849,146850],{"class":110}," init\n",[2773,146852,146853],{},[29,146854,146855],{},"把本地文件放到暂存区",[73,146857,146859],{"className":118538,"code":146858,"language":118540,"meta":79,"style":79},"git add .\n",[32,146860,146861],{"__ignoreMap":79},[100,146862,146863,146865,146867],{"class":102,"line":103},[100,146864,146808],{"class":106},[100,146866,6805],{"class":110},[100,146868,30312],{"class":110},[2773,146870,146871],{},[29,146872,146873],{},"把本地文件放到本地仓库里面",[73,146875,146877],{"className":118538,"code":146876,"language":118540,"meta":79,"style":79},"git commit -m \"first commit\"\n",[32,146878,146879],{"__ignoreMap":79},[100,146880,146881,146883,146886,146888],{"class":102,"line":103},[100,146882,146808],{"class":106},[100,146884,146885],{"class":110}," commit",[100,146887,102421],{"class":117},[100,146889,146890],{"class":110}," \"first commit\"\n",[2773,146892,146893],{},[29,146894,146895],{},"链接远程仓库",[73,146897,146899],{"className":118538,"code":146898,"language":118540,"meta":79,"style":79},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[32,146900,146901],{"__ignoreMap":79},[100,146902,146903,146905,146908,146910,146913],{"class":102,"line":103},[100,146904,146808],{"class":106},[100,146906,146907],{"class":110}," remote",[100,146909,6805],{"class":110},[100,146911,146912],{"class":110}," origin",[100,146914,146915],{"class":110}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[2773,146917,146918],{},[29,146919,146920],{},"把本地仓库的文件推送到远程仓库 push",[73,146922,146924],{"className":118538,"code":146923,"language":118540,"meta":79,"style":79},"git push -u origin master\n",[32,146925,146926],{"__ignoreMap":79},[100,146927,146928,146930,146932,146934,146936],{"class":102,"line":103},[100,146929,146808],{"class":106},[100,146931,30587],{"class":110},[100,146933,29862],{"class":117},[100,146935,146912],{"class":110},[100,146937,146938],{"class":110}," master\n",[3095,146940],{"style":127650,"src":146941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,146943,146944],{},"上方方法暂未实现，后边学完git后在整",[19,146946,146947],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[3095,146949],{"style":127650,"src":146950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,146952,146954],{"id":146953},"_222-新型相对单位","22.2 新型相对单位",[3095,146956],{"style":127650,"src":146957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[3095,146959],{"style":127650,"src":146960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,146962,146963],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,146965,146966],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[3095,146968],{"style":127650,"src":146969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,146971,146972],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[1677,146974,25535],{},{"title":79,"searchDepth":188,"depth":188,"links":146976},[146977,146978],{"id":146766,"depth":188,"text":146767},{"id":146953,"depth":188,"text":146954},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":146758,"description":24958},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":146985,"title":146986,"body":146987,"description":146991,"extension":1708,"meta":146992,"navigation":569,"path":146993,"seo":146994,"stem":146995,"__hash__":146996},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":146988,"toc":146989},[],{"title":79,"searchDepth":188,"depth":188,"links":146990},[],"自己正经开始学编程的第一门语言！",{"category":94391},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":146986,"description":146991},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":146998,"title":146999,"body":147000,"description":24958,"extension":1708,"meta":148147,"navigation":569,"path":148148,"seo":148149,"stem":148150,"__hash__":148151},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":147001,"toc":148123},[147002,147005,147009,147012,147015,147040,147043,147049,147053,147056,147083,147086,147126,147129,147141,147144,147150,147154,147158,147185,147202,147209,147213,147216,147242,147245,147249,147252,147292,147295,147312,147318,147322,147327,147371,147374,147392,147395,147463,147467,147474,147477,147492,147495,147504,147507,147518,147521,147530,147533,147550,147553,147568,147572,147576,147579,147581,147601,147605,147608,147611,147622,147625,147631,147635,147641,147668,147671,147683,147686,147697,147700,147706,147710,147716,147766,147769,147811,147814,147847,147850,147884,147888,147891,147911,147914,147950,147953,147966,147970,147974,147980,147983,147996,148000,148003,148009,148012,148016,148019,148022,148071,148075,148091,148097,148104,148110,148120],[10,147003,146999],{"id":147004},"_1-python环境与第一个程序",[14,147006,147008],{"id":147007},"_11-什么是python","1.1 什么是Python",[19,147010,147011],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,147013,147014],{},"理解 Python 时抓住三个关键词：",[26,147016,147017,147020,147023],{},[29,147018,147019],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[29,147021,147022],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[29,147024,147025,147026,56,147029,56,147032,56,147035,56,147037,233],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[32,147027,147028],{},"os",[32,147030,147031],{},"sys",[32,147033,147034],{},"json",[32,147036,59414],{},[32,147038,147039],{},"datetime",[19,147041,147042],{},"Python 程序的运行链路：",[73,147044,147047],{"className":147045,"code":147046,"language":78,"meta":79},[76],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[32,147048,147046],{"__ignoreMap":79},[14,147050,147052],{"id":147051},"_12-python解释器","1.2 Python解释器",[19,147054,147055],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[73,147057,147059],{"className":94,"code":147058,"language":96,"meta":79,"style":79},"python --version\npython3 --version\npython\npython3\n",[32,147060,147061,147067,147073,147078],{"__ignoreMap":79},[100,147062,147063,147065],{"class":102,"line":103},[100,147064,251],{"class":106},[100,147066,27867],{"class":117},[100,147068,147069,147071],{"class":102,"line":188},[100,147070,102418],{"class":106},[100,147072,27867],{"class":117},[100,147074,147075],{"class":102,"line":199},[100,147076,147077],{"class":106},"python\n",[100,147079,147080],{"class":102,"line":532},[100,147081,147082],{"class":106},"python3\n",[19,147084,147085],{},"进入交互模式后，可以直接输入表达式：",[73,147087,147089],{"className":249,"code":147088,"language":251,"meta":79,"style":79},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[32,147090,147091,147102,147107,147121],{"__ignoreMap":79},[100,147092,147093,147096,147098,147100],{"class":102,"line":103},[100,147094,147095],{"class":471},">>>",[100,147097,26693],{"class":117},[100,147099,47120],{"class":471},[100,147101,49277],{"class":117},[100,147103,147104],{"class":102,"line":188},[100,147105,147106],{"class":117},"3\n",[100,147108,147109,147111,147114,147116,147119],{"class":102,"line":199},[100,147110,147095],{"class":471},[100,147112,147113],{"class":117}," print",[100,147115,713],{"class":258},[100,147117,147118],{"class":110},"\"hello python\"",[100,147120,809],{"class":258},[100,147122,147123],{"class":102,"line":532},[100,147124,147125],{"class":258},"hello python\n",[19,147127,147128],{},"退出交互模式：",[73,147130,147132],{"className":249,"code":147131,"language":251,"meta":79,"style":79},"exit()\n",[32,147133,147134],{"__ignoreMap":79},[100,147135,147136,147139],{"class":102,"line":103},[100,147137,147138],{"class":117},"exit",[100,147140,3587],{"class":258},[19,147142,147143],{},"或使用快捷键：",[73,147145,147148],{"className":147146,"code":147147,"language":78,"meta":79},[76],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[32,147149,147147],{"__ignoreMap":79},[14,147151,147153],{"id":147152},"_13-安装python","1.3 安装Python",[305,147155,147157],{"id":147156},"_131-windows安装","1.3.1 Windows安装",[26,147159,147160,147167,147170,147176,147182],{},[29,147161,147162,147163],{},"打开 Python 官网：",[2006,147164,147165],{"href":147165,"rel":147166},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[25442],[29,147168,147169],{},"下载 Windows Installer。",[29,147171,147172,147173,233],{},"安装时勾选 ",[32,147174,147175],{},"Add Python to PATH",[29,147177,147178,147179,233],{},"点击 ",[32,147180,147181],{},"Install Now",[29,147183,147184],{},"安装完成后打开命令提示符验证：",[73,147186,147188],{"className":94,"code":147187,"language":96,"meta":79,"style":79},"python --version\npip --version\n",[32,147189,147190,147196],{"__ignoreMap":79},[100,147191,147192,147194],{"class":102,"line":103},[100,147193,251],{"class":106},[100,147195,27867],{"class":117},[100,147197,147198,147200],{"class":102,"line":188},[100,147199,146],{"class":106},[100,147201,27867],{"class":117},[19,147203,147204,147205,147208],{},"如果提示 ",[32,147206,147207],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[305,147210,147212],{"id":147211},"_132-macos安装","1.3.2 macOS安装",[19,147214,147215],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[73,147217,147219],{"className":94,"code":147218,"language":96,"meta":79,"style":79},"brew install python\npython3 --version\npip3 --version\n",[32,147220,147221,147230,147236],{"__ignoreMap":79},[100,147222,147223,147226,147228],{"class":102,"line":103},[100,147224,147225],{"class":106},"brew",[100,147227,114],{"class":110},[100,147229,125560],{"class":110},[100,147231,147232,147234],{"class":102,"line":188},[100,147233,102418],{"class":106},[100,147235,27867],{"class":117},[100,147237,147238,147240],{"class":102,"line":199},[100,147239,120942],{"class":106},[100,147241,27867],{"class":117},[19,147243,147244],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[305,147246,147248],{"id":147247},"_133-linux安装","1.3.3 Linux安装",[19,147250,147251],{},"Ubuntu\u002FDebian：",[73,147253,147255],{"className":94,"code":147254,"language":96,"meta":79,"style":79},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[32,147256,147257,147265,147280,147286],{"__ignoreMap":79},[100,147258,147259,147261,147263],{"class":102,"line":103},[100,147260,107],{"class":106},[100,147262,118559],{"class":110},[100,147264,27816],{"class":110},[100,147266,147267,147269,147271,147273,147275,147277],{"class":102,"line":188},[100,147268,107],{"class":106},[100,147270,118559],{"class":110},[100,147272,114],{"class":110},[100,147274,121],{"class":110},[100,147276,124],{"class":110},[100,147278,147279],{"class":110}," python3-venv\n",[100,147281,147282,147284],{"class":102,"line":199},[100,147283,102418],{"class":106},[100,147285,27867],{"class":117},[100,147287,147288,147290],{"class":102,"line":532},[100,147289,120942],{"class":106},[100,147291,27867],{"class":117},[19,147293,147294],{},"Fedora：",[73,147296,147298],{"className":94,"code":147297,"language":96,"meta":79,"style":79},"sudo dnf install python3 python3-pip\n",[32,147299,147300],{"__ignoreMap":79},[100,147301,147302,147304,147306,147308,147310],{"class":102,"line":103},[100,147303,107],{"class":106},[100,147305,111],{"class":110},[100,147307,114],{"class":110},[100,147309,121],{"class":110},[100,147311,121007],{"class":110},[19,147313,147314,147315,147317],{},"Linux 上通常使用 ",[32,147316,102418],{}," 命令，避免和系统旧版本 Python 冲突。",[14,147319,147321],{"id":147320},"_14-pip包管理器","1.4 pip包管理器",[19,147323,147324,147326],{},[32,147325,146],{}," 用来安装第三方库。",[73,147328,147330],{"className":94,"code":147329,"language":96,"meta":79,"style":79},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[32,147331,147332,147341,147350,147358,147364],{"__ignoreMap":79},[100,147333,147334,147336,147338],{"class":102,"line":103},[100,147335,146],{"class":106},[100,147337,114],{"class":110},[100,147339,147340],{"class":110}," requests\n",[100,147342,147343,147345,147348],{"class":102,"line":188},[100,147344,146],{"class":106},[100,147346,147347],{"class":110}," uninstall",[100,147349,147340],{"class":110},[100,147351,147352,147354,147356],{"class":102,"line":199},[100,147353,146],{"class":106},[100,147355,118816],{"class":110},[100,147357,147340],{"class":110},[100,147359,147360,147362],{"class":102,"line":532},[100,147361,146],{"class":106},[100,147363,120197],{"class":110},[100,147365,147366,147368],{"class":102,"line":577},[100,147367,146],{"class":106},[100,147369,147370],{"class":110}," freeze\n",[19,147372,147373],{},"国内网络较慢时可以临时使用镜像：",[73,147375,147377],{"className":94,"code":147376,"language":96,"meta":79,"style":79},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[32,147378,147379],{"__ignoreMap":79},[100,147380,147381,147383,147385,147388,147390],{"class":102,"line":103},[100,147382,146],{"class":106},[100,147384,114],{"class":110},[100,147386,147387],{"class":110}," requests",[100,147389,28002],{"class":117},[100,147391,120970],{"class":110},[19,147393,147394],{},"常见第三方库：",[319,147396,147397,147406],{},[322,147398,147399],{},[325,147400,147401,147404],{},[328,147402,147403],{},"库",[328,147405,104172],{},[339,147407,147408,147416,147423,147431,147439,147447,147455],{},[325,147409,147410,147413],{},[344,147411,147412],{},"requests",[344,147414,147415],{},"网络请求",[325,147417,147418,147420],{},[344,147419,102176],{},[344,147421,147422],{},"数值计算",[325,147424,147425,147428],{},[344,147426,147427],{},"pandas",[344,147429,147430],{},"表格数据处理",[325,147432,147433,147436],{},[344,147434,147435],{},"matplotlib",[344,147437,147438],{},"绘图",[325,147440,147441,147444],{},[344,147442,147443],{},"pyecharts",[344,147445,147446],{},"ECharts 图表",[325,147448,147449,147452],{},[344,147450,147451],{},"flask",[344,147453,147454],{},"Web 后端",[325,147456,147457,147460],{},[344,147458,147459],{},"pytest",[344,147461,147462],{},"自动化测试",[14,147464,147466],{"id":147465},"_15-虚拟环境","1.5 虚拟环境",[19,147468,147469,147470,147473],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[32,147471,147472],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,147475,147476],{},"创建虚拟环境：",[73,147478,147480],{"className":94,"code":147479,"language":96,"meta":79,"style":79},"python -m venv .venv\n",[32,147481,147482],{"__ignoreMap":79},[100,147483,147484,147486,147488,147490],{"class":102,"line":103},[100,147485,251],{"class":106},[100,147487,102421],{"class":117},[100,147489,102424],{"class":110},[100,147491,102427],{"class":110},[19,147493,147494],{},"Windows 激活：",[73,147496,147498],{"className":94,"code":147497,"language":96,"meta":79,"style":79},".venv\\Scripts\\activate\n",[32,147499,147500],{"__ignoreMap":79},[100,147501,147502],{"class":102,"line":103},[100,147503,147497],{"class":106},[19,147505,147506],{},"macOS\u002FLinux 激活：",[73,147508,147510],{"className":94,"code":147509,"language":96,"meta":79,"style":79},"source .venv\u002Fbin\u002Factivate\n",[32,147511,147512],{"__ignoreMap":79},[100,147513,147514,147516],{"class":102,"line":103},[100,147515,102432],{"class":117},[100,147517,102435],{"class":110},[19,147519,147520],{},"退出虚拟环境：",[73,147522,147524],{"className":94,"code":147523,"language":96,"meta":79,"style":79},"deactivate\n",[32,147525,147526],{"__ignoreMap":79},[100,147527,147528],{"class":102,"line":103},[100,147529,147523],{"class":106},[19,147531,147532],{},"保存依赖：",[73,147534,147536],{"className":94,"code":147535,"language":96,"meta":79,"style":79},"pip freeze > requirements.txt\n",[32,147537,147538],{"__ignoreMap":79},[100,147539,147540,147542,147545,147547],{"class":102,"line":103},[100,147541,146],{"class":106},[100,147543,147544],{"class":110}," freeze",[100,147546,27796],{"class":471},[100,147548,147549],{"class":110}," requirements.txt\n",[19,147551,147552],{},"安装依赖：",[73,147554,147556],{"className":94,"code":147555,"language":96,"meta":79,"style":79},"pip install -r requirements.txt\n",[32,147557,147558],{"__ignoreMap":79},[100,147559,147560,147562,147564,147566],{"class":102,"line":103},[100,147561,146],{"class":106},[100,147563,114],{"class":110},[100,147565,120881],{"class":117},[100,147567,147549],{"class":110},[14,147569,147571],{"id":147570},"_16-开发工具","1.6 开发工具",[305,147573,147575],{"id":147574},"_161-pycharm","1.6.1 PyCharm",[19,147577,147578],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,147580,123304],{},[26,147582,147583,147586,147589,147595,147598],{},[29,147584,147585],{},"New Project：创建项目。",[29,147587,147588],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[29,147590,147591,147592,127225],{},"New Python File：创建 ",[32,147593,147594],{},".py",[29,147596,147597],{},"Run：运行当前文件。",[29,147599,147600],{},"Debug：断点调试。",[305,147602,147604],{"id":147603},"_162-vs-code","1.6.2 VS Code",[19,147606,147607],{},"VS Code 轻量，适合后续多语言开发。",[19,147609,147610],{},"建议安装插件：",[26,147612,147613,147616,147619],{},[29,147614,147615],{},"Python。",[29,147617,147618],{},"Pylance。",[29,147620,147621],{},"Jupyter。",[19,147623,147624],{},"选择解释器：",[73,147626,147629],{"className":147627,"code":147628,"language":78,"meta":79},[76],"Ctrl + Shift + P -> Python: Select Interpreter\n",[32,147630,147628],{"__ignoreMap":79},[14,147632,147634],{"id":147633},"_17-第一个python程序","1.7 第一个Python程序",[19,147636,147637,147638,1646],{},"创建文件 ",[32,147639,147640],{},"hello.py",[73,147642,147644],{"className":249,"code":147643,"language":251,"meta":79,"style":79},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[32,147645,147646,147657],{"__ignoreMap":79},[100,147647,147648,147650,147652,147655],{"class":102,"line":103},[100,147649,1195],{"class":117},[100,147651,713],{"class":258},[100,147653,147654],{"class":110},"\"Hello World\"",[100,147656,809],{"class":258},[100,147658,147659,147661,147663,147666],{"class":102,"line":188},[100,147660,1195],{"class":117},[100,147662,713],{"class":258},[100,147664,147665],{"class":110},"\"你好，Python\"",[100,147667,809],{"class":258},[19,147669,147670],{},"在终端运行：",[73,147672,147674],{"className":94,"code":147673,"language":96,"meta":79,"style":79},"python hello.py\n",[32,147675,147676],{"__ignoreMap":79},[100,147677,147678,147680],{"class":102,"line":103},[100,147679,251],{"class":106},[100,147681,147682],{"class":110}," hello.py\n",[19,147684,147685],{},"或：",[73,147687,147689],{"className":94,"code":147688,"language":96,"meta":79,"style":79},"python3 hello.py\n",[32,147690,147691],{"__ignoreMap":79},[100,147692,147693,147695],{"class":102,"line":103},[100,147694,102418],{"class":106},[100,147696,147682],{"class":110},[19,147698,147699],{},"输出：",[73,147701,147704],{"className":147702,"code":147703,"language":78,"meta":79},[76],"Hello World\n你好，Python\n",[32,147705,147703],{"__ignoreMap":79},[14,147707,147709],{"id":147708},"_18-print函数","1.8 print函数",[19,147711,147712,147715],{},[32,147713,147714],{},"print()"," 用来输出内容。",[73,147717,147719],{"className":249,"code":147718,"language":251,"meta":79,"style":79},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[32,147720,147721,147731,147741,147751],{"__ignoreMap":79},[100,147722,147723,147725,147727,147729],{"class":102,"line":103},[100,147724,1195],{"class":117},[100,147726,713],{"class":258},[100,147728,7440],{"class":110},[100,147730,809],{"class":258},[100,147732,147733,147735,147737,147739],{"class":102,"line":188},[100,147734,1195],{"class":117},[100,147736,713],{"class":258},[100,147738,2078],{"class":117},[100,147740,809],{"class":258},[100,147742,147743,147745,147747,147749],{"class":102,"line":199},[100,147744,1195],{"class":117},[100,147746,713],{"class":258},[100,147748,1827],{"class":117},[100,147750,809],{"class":258},[100,147752,147753,147755,147757,147760,147762,147764],{"class":102,"line":532},[100,147754,1195],{"class":117},[100,147756,713],{"class":258},[100,147758,147759],{"class":110},"\"年龄:\"",[100,147761,14017],{"class":258},[100,147763,2417],{"class":117},[100,147765,809],{"class":258},[19,147767,147768],{},"多个内容用逗号隔开，默认中间加空格：",[73,147770,147772],{"className":249,"code":147771,"language":251,"meta":79,"style":79},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[32,147773,147774,147784,147794],{"__ignoreMap":79},[100,147775,147776,147779,147781],{"class":102,"line":103},[100,147777,147778],{"class":258},"name ",[100,147780,472],{"class":471},[100,147782,147783],{"class":110}," \"张三\"\n",[100,147785,147786,147789,147791],{"class":102,"line":188},[100,147787,147788],{"class":258},"age ",[100,147790,472],{"class":471},[100,147792,147793],{"class":117}," 18\n",[100,147795,147796,147798,147800,147803,147806,147808],{"class":102,"line":199},[100,147797,1195],{"class":117},[100,147799,713],{"class":258},[100,147801,147802],{"class":110},"\"姓名:\"",[100,147804,147805],{"class":258},", name, ",[100,147807,147759],{"class":110},[100,147809,147810],{"class":258},", age)\n",[19,147812,147813],{},"修改分隔符：",[73,147815,147817],{"className":249,"code":147816,"language":251,"meta":79,"style":79},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[32,147818,147819],{"__ignoreMap":79},[100,147820,147821,147823,147825,147828,147830,147832,147834,147836,147838,147841,147843,147845],{"class":102,"line":103},[100,147822,1195],{"class":117},[100,147824,713],{"class":258},[100,147826,147827],{"class":110},"\"2024\"",[100,147829,14017],{"class":258},[100,147831,55870],{"class":110},[100,147833,14017],{"class":258},[100,147835,55870],{"class":110},[100,147837,14017],{"class":258},[100,147839,147840],{"class":6812},"sep",[100,147842,472],{"class":471},[100,147844,34039],{"class":110},[100,147846,809],{"class":258},[19,147848,147849],{},"修改结尾符：",[73,147851,147853],{"className":249,"code":147852,"language":251,"meta":79,"style":79},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[32,147854,147855,147873],{"__ignoreMap":79},[100,147856,147857,147859,147861,147863,147865,147867,147869,147871],{"class":102,"line":103},[100,147858,1195],{"class":117},[100,147860,713],{"class":258},[100,147862,7440],{"class":110},[100,147864,14017],{"class":258},[100,147866,47355],{"class":6812},[100,147868,472],{"class":471},[100,147870,5958],{"class":110},[100,147872,809],{"class":258},[100,147874,147875,147877,147879,147882],{"class":102,"line":188},[100,147876,1195],{"class":117},[100,147878,713],{"class":258},[100,147880,147881],{"class":110},"\"python\"",[100,147883,809],{"class":258},[14,147885,147887],{"id":147886},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,147889,147890],{},"交互运行适合临时验证：",[73,147892,147894],{"className":249,"code":147893,"language":251,"meta":79,"style":79},">>> 10 * 3\n30\n",[32,147895,147896,147906],{"__ignoreMap":79},[100,147897,147898,147900,147902,147904],{"class":102,"line":103},[100,147899,147095],{"class":471},[100,147901,3649],{"class":117},[100,147903,8114],{"class":471},[100,147905,121278],{"class":117},[100,147907,147908],{"class":102,"line":188},[100,147909,147910],{"class":117},"30\n",[19,147912,147913],{},"脚本运行适合保存程序：",[73,147915,147917],{"className":249,"code":147916,"language":251,"meta":79,"style":79},"price = 8\ncount = 5\nprint(price * count)\n",[32,147918,147919,147929,147938],{"__ignoreMap":79},[100,147920,147921,147924,147926],{"class":102,"line":103},[100,147922,147923],{"class":258},"price ",[100,147925,472],{"class":471},[100,147927,147928],{"class":117}," 8\n",[100,147930,147931,147934,147936],{"class":102,"line":188},[100,147932,147933],{"class":258},"count ",[100,147935,472],{"class":471},[100,147937,55981],{"class":117},[100,147939,147940,147942,147945,147947],{"class":102,"line":199},[100,147941,1195],{"class":117},[100,147943,147944],{"class":258},"(price ",[100,147946,2222],{"class":471},[100,147948,147949],{"class":258}," count)\n",[19,147951,147952],{},"实际学习中推荐：",[26,147954,147955,147958,147963],{},[29,147956,147957],{},"临时试一个语法，用交互模式。",[29,147959,147960,147961,127225],{},"写完整练习，用 ",[32,147962,147594],{},[29,147964,147965],{},"写项目，用独立目录和虚拟环境。",[14,147967,147969],{"id":147968},"_110-常见错误","1.10 常见错误",[305,147971,147973],{"id":147972},"_1101-命令找不到","1.10.1 命令找不到",[73,147975,147978],{"className":147976,"code":147977,"language":78,"meta":79},[76],"python: command not found\n",[32,147979,147977],{"__ignoreMap":79},[19,147981,147982],{},"原因：",[26,147984,147985,147988,147991],{},[29,147986,147987],{},"没安装 Python。",[29,147989,147990],{},"PATH 没配置。",[29,147992,147993,147994,233],{},"Linux\u002FmacOS 应该使用 ",[32,147995,102418],{},[305,147997,147999],{"id":147998},"_1102-文件名冲突","1.10.2 文件名冲突",[19,148001,148002],{},"不要把文件命名为：",[73,148004,148007],{"className":148005,"code":148006,"language":78,"meta":79},[76],"random.py\njson.py\ntime.py\nrequests.py\n",[32,148008,148006],{"__ignoreMap":79},[19,148010,148011],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[305,148013,148015],{"id":148014},"_1103-中文乱码","1.10.3 中文乱码",[19,148017,148018],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,148020,148021],{},"如果读写文件出现乱码，要明确指定编码：",[73,148023,148025],{"className":249,"code":148024,"language":251,"meta":79,"style":79},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[32,148026,148027,148061],{"__ignoreMap":79},[100,148028,148029,148031,148034,148036,148039,148041,148044,148046,148049,148051,148054,148056,148058],{"class":102,"line":103},[100,148030,109075],{"class":471},[100,148032,148033],{"class":117}," open",[100,148035,713],{"class":258},[100,148037,148038],{"class":110},"\"data.txt\"",[100,148040,14017],{"class":258},[100,148042,148043],{"class":110},"\"r\"",[100,148045,14017],{"class":258},[100,148047,148048],{"class":6812},"encoding",[100,148050,472],{"class":471},[100,148052,148053],{"class":110},"\"utf-8\"",[100,148055,15295],{"class":258},[100,148057,561],{"class":471},[100,148059,148060],{"class":258}," f:\n",[100,148062,148063,148066,148068],{"class":102,"line":188},[100,148064,148065],{"class":258},"    content ",[100,148067,472],{"class":471},[100,148069,148070],{"class":258}," f.read()\n",[14,148072,148074],{"id":148073},"_111-本章练习","1.11 本章练习",[26,148076,148077,148080,148086],{},[29,148078,148079],{},"安装 Python，并在终端输出版本号。",[29,148081,148082,148083,148085],{},"新建 ",[32,148084,147640],{},"，输出自己的姓名、年龄、学习目标。",[29,148087,65,148088,148090],{},[32,148089,147714],{}," 输出下面格式：",[73,148092,148095],{"className":148093,"code":148094,"language":78,"meta":79},[76],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[32,148096,148094],{"__ignoreMap":79},[26,148098,148099],{"start":532},[29,148100,65,148101,148103],{},[32,148102,147840],{}," 输出日期：",[73,148105,148108],{"className":148106,"code":148107,"language":78,"meta":79},[76],"2024-10-10\n",[32,148109,148107],{"__ignoreMap":79},[26,148111,148112],{"start":577},[29,148113,65,148114,148116,148117,148119],{},[32,148115,47355],{}," 让两次 ",[32,148118,147714],{}," 输出在同一行。",[1677,148121,148122],{},"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":79,"searchDepth":188,"depth":188,"links":148124},[148125,148126,148127,148132,148133,148134,148138,148139,148140,148141,148146],{"id":147007,"depth":188,"text":147008},{"id":147051,"depth":188,"text":147052},{"id":147152,"depth":188,"text":147153,"children":148128},[148129,148130,148131],{"id":147156,"depth":199,"text":147157},{"id":147211,"depth":199,"text":147212},{"id":147247,"depth":199,"text":147248},{"id":147320,"depth":188,"text":147321},{"id":147465,"depth":188,"text":147466},{"id":147570,"depth":188,"text":147571,"children":148135},[148136,148137],{"id":147574,"depth":199,"text":147575},{"id":147603,"depth":199,"text":147604},{"id":147633,"depth":188,"text":147634},{"id":147708,"depth":188,"text":147709},{"id":147886,"depth":188,"text":147887},{"id":147968,"depth":188,"text":147969,"children":148142},[148143,148144,148145],{"id":147972,"depth":199,"text":147973},{"id":147998,"depth":199,"text":147999},{"id":148014,"depth":199,"text":148015},{"id":148073,"depth":188,"text":148074},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":146999,"description":24958},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":148153,"title":148154,"body":148155,"description":24958,"extension":1708,"meta":150559,"navigation":569,"path":150560,"seo":150561,"stem":150562,"__hash__":150563},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":148156,"toc":150544},[148157,148160,148164,148167,148170,148187,148190,148232,148235,148239,148242,148245,148282,148285,148319,148322,148414,148418,148432,148435,148462,148465,148469,148572,148579,148582,148599,148603,148610,148799,148802,148875,148879,148882,148966,148969,149001,149005,149209,149212,149216,149222,149324,149327,149583,149587,149590,149593,149607,149609,149795,149799,150161,150167,150171,150174,150298,150301,150480,150483,150487,150520,150524,150541],[10,148158,148154],{"id":148159},"_10-json与pyecharts折线图",[14,148161,148163],{"id":148162},"_101-数据可视化","10.1 数据可视化",[19,148165,148166],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,148168,148169],{},"常见图表：",[26,148171,148172,148175,148178,148181,148184],{},[29,148173,148174],{},"折线图：看趋势。",[29,148176,148177],{},"柱状图：看分类对比。",[29,148179,148180],{},"饼图：看占比。",[29,148182,148183],{},"地图：看地域分布。",[29,148185,148186],{},"散点图：看两个变量之间的关系。",[19,148188,148189],{},"Python 可视化常用库：",[319,148191,148192,148200],{},[322,148193,148194],{},[325,148195,148196,148198],{},[328,148197,147403],{},[328,148199,25321],{},[339,148201,148202,148209,148217,148224],{},[325,148203,148204,148206],{},[344,148205,147435],{},[344,148207,148208],{},"基础、经典、可定制",[325,148210,148211,148214],{},[344,148212,148213],{},"seaborn",[344,148215,148216],{},"统计图表更美观",[325,148218,148219,148221],{},[344,148220,147443],{},[344,148222,148223],{},"生成交互式网页图表",[325,148225,148226,148229],{},[344,148227,148228],{},"plotly",[344,148230,148231],{},"交互图表能力强",[19,148233,148234],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,148236,148238],{"id":148237},"_102-json回顾","10.2 JSON回顾",[19,148240,148241],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,148243,148244],{},"Python 字典：",[73,148246,148248],{"className":249,"code":148247,"language":251,"meta":79,"style":79},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[32,148249,148250,148258,148269,148278],{"__ignoreMap":79},[100,148251,148252,148254,148256],{"class":102,"line":103},[100,148253,1234],{"class":258},[100,148255,472],{"class":471},[100,148257,17153],{"class":258},[100,148259,148260,148263,148265,148267],{"class":102,"line":188},[100,148261,148262],{"class":110},"    \"name\"",[100,148264,52991],{"class":258},[100,148266,70823],{"class":110},[100,148268,33024],{"class":258},[100,148270,148271,148274,148276],{"class":102,"line":199},[100,148272,148273],{"class":110},"    \"value\"",[100,148275,52991],{"class":258},[100,148277,99008],{"class":117},[100,148279,148280],{"class":102,"line":532},[100,148281,3197],{"class":258},[19,148283,148284],{},"JSON 字符串：",[73,148286,148289],{"className":148287,"code":148288,"language":147034,"meta":79,"style":79},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[32,148290,148291,148295,148306,148315],{"__ignoreMap":79},[100,148292,148293],{"class":102,"line":103},[100,148294,3178],{"class":258},[100,148296,148297,148300,148302,148304],{"class":102,"line":188},[100,148298,148299],{"class":117},"  \"name\"",[100,148301,52991],{"class":258},[100,148303,70823],{"class":110},[100,148305,33024],{"class":258},[100,148307,148308,148311,148313],{"class":102,"line":199},[100,148309,148310],{"class":117},"  \"value\"",[100,148312,52991],{"class":258},[100,148314,99008],{"class":117},[100,148316,148317],{"class":102,"line":532},[100,148318,3197],{"class":258},[19,148320,148321],{},"Python 与 JSON 的转换：",[73,148323,148325],{"className":249,"code":148324,"language":251,"meta":79,"style":79},"import json\n\ndata = {\"name\": \"北京\", \"value\": 100}\n\njson_text = json.dumps(data, ensure_ascii=False)\nprint(json_text)\n\nnew_data = json.loads(json_text)\nprint(new_data)\n",[32,148326,148327,148334,148338,148363,148367,148386,148393,148397,148407],{"__ignoreMap":79},[100,148328,148329,148331],{"class":102,"line":103},[100,148330,548],{"class":471},[100,148332,148333],{"class":258}," json\n",[100,148335,148336],{"class":102,"line":188},[100,148337,570],{"emptyLinePlaceholder":569},[100,148339,148340,148342,148344,148346,148348,148350,148352,148354,148357,148359,148361],{"class":102,"line":199},[100,148341,1234],{"class":258},[100,148343,472],{"class":471},[100,148345,6046],{"class":258},[100,148347,64233],{"class":110},[100,148349,52991],{"class":258},[100,148351,70823],{"class":110},[100,148353,14017],{"class":258},[100,148355,148356],{"class":110},"\"value\"",[100,148358,52991],{"class":258},[100,148360,2078],{"class":117},[100,148362,3197],{"class":258},[100,148364,148365],{"class":102,"line":532},[100,148366,570],{"emptyLinePlaceholder":569},[100,148368,148369,148372,148374,148377,148380,148382,148384],{"class":102,"line":577},[100,148370,148371],{"class":258},"json_text ",[100,148373,472],{"class":471},[100,148375,148376],{"class":258}," json.dumps(data, ",[100,148378,148379],{"class":6812},"ensure_ascii",[100,148381,472],{"class":471},[100,148383,35542],{"class":117},[100,148385,809],{"class":258},[100,148387,148388,148390],{"class":102,"line":589},[100,148389,1195],{"class":117},[100,148391,148392],{"class":258},"(json_text)\n",[100,148394,148395],{"class":102,"line":595},[100,148396,570],{"emptyLinePlaceholder":569},[100,148398,148399,148402,148404],{"class":102,"line":601},[100,148400,148401],{"class":258},"new_data ",[100,148403,472],{"class":471},[100,148405,148406],{"class":258}," json.loads(json_text)\n",[100,148408,148409,148411],{"class":102,"line":606},[100,148410,1195],{"class":117},[100,148412,148413],{"class":258},"(new_data)\n",[14,148415,148417],{"id":148416},"_103-安装pyecharts","10.3 安装pyecharts",[73,148419,148421],{"className":94,"code":148420,"language":96,"meta":79,"style":79},"pip install pyecharts\n",[32,148422,148423],{"__ignoreMap":79},[100,148424,148425,148427,148429],{"class":102,"line":103},[100,148426,146],{"class":106},[100,148428,114],{"class":110},[100,148430,148431],{"class":110}," pyecharts\n",[19,148433,148434],{},"验证：",[73,148436,148438],{"className":249,"code":148437,"language":251,"meta":79,"style":79},"import pyecharts\n\nprint(pyecharts.__version__)\n",[32,148439,148440,148446,148450],{"__ignoreMap":79},[100,148441,148442,148444],{"class":102,"line":103},[100,148443,548],{"class":471},[100,148445,148431],{"class":258},[100,148447,148448],{"class":102,"line":188},[100,148449,570],{"emptyLinePlaceholder":569},[100,148451,148452,148454,148457,148460],{"class":102,"line":199},[100,148453,1195],{"class":117},[100,148455,148456],{"class":258},"(pyecharts.",[100,148458,148459],{"class":117},"__version__",[100,148461,809],{"class":258},[19,148463,148464],{},"如果使用虚拟环境，要先激活环境再安装。",[14,148466,148468],{"id":148467},"_104-第一个折线图","10.4 第一个折线图",[73,148470,148472],{"className":249,"code":148471,"language":251,"meta":79,"style":79},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[32,148473,148474,148486,148490,148500,148530,148562],{"__ignoreMap":79},[100,148475,148476,148478,148481,148483],{"class":102,"line":103},[100,148477,32301],{"class":471},[100,148479,148480],{"class":258}," pyecharts.charts ",[100,148482,548],{"class":471},[100,148484,148485],{"class":258}," Line\n",[100,148487,148488],{"class":102,"line":188},[100,148489,570],{"emptyLinePlaceholder":569},[100,148491,148492,148495,148497],{"class":102,"line":199},[100,148493,148494],{"class":258},"line ",[100,148496,472],{"class":471},[100,148498,148499],{"class":258}," Line()\n",[100,148501,148502,148505,148508,148510,148513,148515,148518,148520,148523,148525,148528],{"class":102,"line":532},[100,148503,148504],{"class":258},"line.add_xaxis([",[100,148506,148507],{"class":110},"\"周一\"",[100,148509,14017],{"class":258},[100,148511,148512],{"class":110},"\"周二\"",[100,148514,14017],{"class":258},[100,148516,148517],{"class":110},"\"周三\"",[100,148519,14017],{"class":258},[100,148521,148522],{"class":110},"\"周四\"",[100,148524,14017],{"class":258},[100,148526,148527],{"class":110},"\"周五\"",[100,148529,6255],{"class":258},[100,148531,148532,148535,148538,148540,148542,148544,148546,148548,148550,148552,148555,148557,148560],{"class":102,"line":577},[100,148533,148534],{"class":258},"line.add_yaxis(",[100,148536,148537],{"class":110},"\"销售额\"",[100,148539,79072],{"class":258},[100,148541,2078],{"class":117},[100,148543,14017],{"class":258},[100,148545,2583],{"class":117},[100,148547,14017],{"class":258},[100,148549,2628],{"class":117},[100,148551,14017],{"class":258},[100,148553,148554],{"class":117},"150",[100,148556,14017],{"class":258},[100,148558,148559],{"class":117},"180",[100,148561,6255],{"class":258},[100,148563,148564,148567,148570],{"class":102,"line":589},[100,148565,148566],{"class":258},"line.render(",[100,148568,148569],{"class":110},"\"line.html\"",[100,148571,809],{"class":258},[19,148573,148574,148575,148578],{},"运行后会生成 ",[32,148576,148577],{},"line.html","，用浏览器打开即可看到图表。",[19,148580,148581],{},"核心步骤：",[26,148583,148584,148587,148590,148593,148596],{},[29,148585,148586],{},"导入图表类。",[29,148588,148589],{},"创建图表对象。",[29,148591,148592],{},"添加 x 轴数据。",[29,148594,148595],{},"添加 y 轴数据。",[29,148597,148598],{},"渲染为 HTML。",[14,148600,148602],{"id":148601},"_105-全局配置","10.5 全局配置",[19,148604,148605,148606,148609],{},"常用配置在 ",[32,148607,148608],{},"pyecharts.options"," 中。",[73,148611,148613],{"className":249,"code":148612,"language":251,"meta":79,"style":79},"from pyecharts import options as opts\nfrom pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"一周销售额\"),\n    xaxis_opts=opts.AxisOpts(name=\"日期\"),\n    yaxis_opts=opts.AxisOpts(name=\"金额\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n)\nline.render(\"line.html\")\n",[32,148614,148615,148632,148642,148646,148654,148678,148706,148711,148730,148749,148767,148787,148791],{"__ignoreMap":79},[100,148616,148617,148619,148622,148624,148627,148629],{"class":102,"line":103},[100,148618,32301],{"class":471},[100,148620,148621],{"class":258}," pyecharts ",[100,148623,548],{"class":471},[100,148625,148626],{"class":258}," options ",[100,148628,561],{"class":471},[100,148630,148631],{"class":258}," opts\n",[100,148633,148634,148636,148638,148640],{"class":102,"line":188},[100,148635,32301],{"class":471},[100,148637,148480],{"class":258},[100,148639,548],{"class":471},[100,148641,148485],{"class":258},[100,148643,148644],{"class":102,"line":199},[100,148645,570],{"emptyLinePlaceholder":569},[100,148647,148648,148650,148652],{"class":102,"line":532},[100,148649,148494],{"class":258},[100,148651,472],{"class":471},[100,148653,148499],{"class":258},[100,148655,148656,148658,148660,148662,148664,148666,148668,148670,148672,148674,148676],{"class":102,"line":577},[100,148657,148504],{"class":258},[100,148659,148507],{"class":110},[100,148661,14017],{"class":258},[100,148663,148512],{"class":110},[100,148665,14017],{"class":258},[100,148667,148517],{"class":110},[100,148669,14017],{"class":258},[100,148671,148522],{"class":110},[100,148673,14017],{"class":258},[100,148675,148527],{"class":110},[100,148677,6255],{"class":258},[100,148679,148680,148682,148684,148686,148688,148690,148692,148694,148696,148698,148700,148702,148704],{"class":102,"line":589},[100,148681,148534],{"class":258},[100,148683,148537],{"class":110},[100,148685,79072],{"class":258},[100,148687,2078],{"class":117},[100,148689,14017],{"class":258},[100,148691,2583],{"class":117},[100,148693,14017],{"class":258},[100,148695,2628],{"class":117},[100,148697,14017],{"class":258},[100,148699,148554],{"class":117},[100,148701,14017],{"class":258},[100,148703,148559],{"class":117},[100,148705,6255],{"class":258},[100,148707,148708],{"class":102,"line":595},[100,148709,148710],{"class":258},"line.set_global_opts(\n",[100,148712,148713,148716,148718,148721,148723,148725,148728],{"class":102,"line":601},[100,148714,148715],{"class":6812},"    title_opts",[100,148717,472],{"class":471},[100,148719,148720],{"class":258},"opts.TitleOpts(",[100,148722,52961],{"class":6812},[100,148724,472],{"class":471},[100,148726,148727],{"class":110},"\"一周销售额\"",[100,148729,39601],{"class":258},[100,148731,148732,148735,148737,148740,148742,148744,148747],{"class":102,"line":606},[100,148733,148734],{"class":6812},"    xaxis_opts",[100,148736,472],{"class":471},[100,148738,148739],{"class":258},"opts.AxisOpts(",[100,148741,81364],{"class":6812},[100,148743,472],{"class":471},[100,148745,148746],{"class":110},"\"日期\"",[100,148748,39601],{"class":258},[100,148750,148751,148754,148756,148758,148760,148762,148765],{"class":102,"line":612},[100,148752,148753],{"class":6812},"    yaxis_opts",[100,148755,472],{"class":471},[100,148757,148739],{"class":258},[100,148759,81364],{"class":6812},[100,148761,472],{"class":471},[100,148763,148764],{"class":110},"\"金额\"",[100,148766,39601],{"class":258},[100,148768,148769,148772,148774,148777,148780,148782,148785],{"class":102,"line":618},[100,148770,148771],{"class":6812},"    tooltip_opts",[100,148773,472],{"class":471},[100,148775,148776],{"class":258},"opts.TooltipOpts(",[100,148778,148779],{"class":6812},"trigger",[100,148781,472],{"class":471},[100,148783,148784],{"class":110},"\"axis\"",[100,148786,39601],{"class":258},[100,148788,148789],{"class":102,"line":623},[100,148790,809],{"class":258},[100,148792,148793,148795,148797],{"class":102,"line":629},[100,148794,148566],{"class":258},[100,148796,148569],{"class":110},[100,148798,809],{"class":258},[19,148800,148801],{},"常见全局配置：",[319,148803,148804,148813],{},[322,148805,148806],{},[325,148807,148808,148811],{},[328,148809,148810],{},"配置",[328,148812,104172],{},[339,148814,148815,148825,148835,148845,148855,148865],{},[325,148816,148817,148822],{},[344,148818,148819],{},[32,148820,148821],{},"TitleOpts",[344,148823,148824],{},"标题",[325,148826,148827,148832],{},[344,148828,148829],{},[32,148830,148831],{},"LegendOpts",[344,148833,148834],{},"图例",[325,148836,148837,148842],{},[344,148838,148839],{},[32,148840,148841],{},"TooltipOpts",[344,148843,148844],{},"提示框",[325,148846,148847,148852],{},[344,148848,148849],{},[32,148850,148851],{},"AxisOpts",[344,148853,148854],{},"坐标轴",[325,148856,148857,148862],{},[344,148858,148859],{},[32,148860,148861],{},"VisualMapOpts",[344,148863,148864],{},"视觉映射",[325,148866,148867,148872],{},[344,148868,148869],{},[32,148870,148871],{},"DataZoomOpts",[344,148873,148874],{},"区域缩放",[14,148876,148878],{"id":148877},"_106-系列配置","10.6 系列配置",[19,148880,148881],{},"系列配置作用于某一组数据。",[73,148883,148885],{"className":249,"code":148884,"language":251,"meta":79,"style":79},"line.add_yaxis(\n    series_name=\"销售额\",\n    y_axis=[100, 120, 90, 150, 180],\n    is_smooth=True,\n    label_opts=opts.LabelOpts(is_show=True),\n)\n",[32,148886,148887,148892,148903,148932,148943,148962],{"__ignoreMap":79},[100,148888,148889],{"class":102,"line":103},[100,148890,148891],{"class":258},"line.add_yaxis(\n",[100,148893,148894,148897,148899,148901],{"class":102,"line":188},[100,148895,148896],{"class":6812},"    series_name",[100,148898,472],{"class":471},[100,148900,148537],{"class":110},[100,148902,33024],{"class":258},[100,148904,148905,148908,148910,148912,148914,148916,148918,148920,148922,148924,148926,148928,148930],{"class":102,"line":199},[100,148906,148907],{"class":6812},"    y_axis",[100,148909,472],{"class":471},[100,148911,2656],{"class":258},[100,148913,2078],{"class":117},[100,148915,14017],{"class":258},[100,148917,2583],{"class":117},[100,148919,14017],{"class":258},[100,148921,2628],{"class":117},[100,148923,14017],{"class":258},[100,148925,148554],{"class":117},[100,148927,14017],{"class":258},[100,148929,148559],{"class":117},[100,148931,89388],{"class":258},[100,148933,148934,148937,148939,148941],{"class":102,"line":532},[100,148935,148936],{"class":6812},"    is_smooth",[100,148938,472],{"class":471},[100,148940,33034],{"class":117},[100,148942,33024],{"class":258},[100,148944,148945,148948,148950,148953,148956,148958,148960],{"class":102,"line":577},[100,148946,148947],{"class":6812},"    label_opts",[100,148949,472],{"class":471},[100,148951,148952],{"class":258},"opts.LabelOpts(",[100,148954,148955],{"class":6812},"is_show",[100,148957,472],{"class":471},[100,148959,33034],{"class":117},[100,148961,39601],{"class":258},[100,148963,148964],{"class":102,"line":589},[100,148965,809],{"class":258},[19,148967,148968],{},"常用参数：",[26,148970,148971,148977,148983,148989,148995],{},[29,148972,148973,148976],{},[32,148974,148975],{},"series_name","：系列名称。",[29,148978,148979,148982],{},[32,148980,148981],{},"y_axis","：y 轴数据。",[29,148984,148985,148988],{},[32,148986,148987],{},"is_smooth","：是否平滑曲线。",[29,148990,148991,148994],{},[32,148992,148993],{},"label_opts","：标签配置。",[29,148996,148997,149000],{},[32,148998,148999],{},"symbol_size","：标记点大小。",[14,149002,149004],{"id":149003},"_107-多条折线","10.7 多条折线",[73,149006,149008],{"className":249,"code":149007,"language":251,"meta":79,"style":79},"from pyecharts import options as opts\nfrom pyecharts.charts import Line\n\ndates = [\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"]\n\nline = Line()\nline.add_xaxis(dates)\nline.add_yaxis(\"线上销售\", [100, 130, 120, 160, 200], is_smooth=True)\nline.add_yaxis(\"线下销售\", [80, 90, 100, 120, 150], is_smooth=True)\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"线上线下销售趋势\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n)\nline.render(\"sales.html\")\n",[32,149009,149010,149024,149034,149038,149067,149071,149079,149084,149122,149159,149163,149180,149196,149200],{"__ignoreMap":79},[100,149011,149012,149014,149016,149018,149020,149022],{"class":102,"line":103},[100,149013,32301],{"class":471},[100,149015,148621],{"class":258},[100,149017,548],{"class":471},[100,149019,148626],{"class":258},[100,149021,561],{"class":471},[100,149023,148631],{"class":258},[100,149025,149026,149028,149030,149032],{"class":102,"line":188},[100,149027,32301],{"class":471},[100,149029,148480],{"class":258},[100,149031,548],{"class":471},[100,149033,148485],{"class":258},[100,149035,149036],{"class":102,"line":199},[100,149037,570],{"emptyLinePlaceholder":569},[100,149039,149040,149043,149045,149047,149049,149051,149053,149055,149057,149059,149061,149063,149065],{"class":102,"line":532},[100,149041,149042],{"class":258},"dates ",[100,149044,472],{"class":471},[100,149046,53780],{"class":258},[100,149048,148507],{"class":110},[100,149050,14017],{"class":258},[100,149052,148512],{"class":110},[100,149054,14017],{"class":258},[100,149056,148517],{"class":110},[100,149058,14017],{"class":258},[100,149060,148522],{"class":110},[100,149062,14017],{"class":258},[100,149064,148527],{"class":110},[100,149066,34802],{"class":258},[100,149068,149069],{"class":102,"line":577},[100,149070,570],{"emptyLinePlaceholder":569},[100,149072,149073,149075,149077],{"class":102,"line":589},[100,149074,148494],{"class":258},[100,149076,472],{"class":471},[100,149078,148499],{"class":258},[100,149080,149081],{"class":102,"line":595},[100,149082,149083],{"class":258},"line.add_xaxis(dates)\n",[100,149085,149086,149088,149091,149093,149095,149097,149100,149102,149104,149106,149108,149110,149112,149114,149116,149118,149120],{"class":102,"line":601},[100,149087,148534],{"class":258},[100,149089,149090],{"class":110},"\"线上销售\"",[100,149092,79072],{"class":258},[100,149094,2078],{"class":117},[100,149096,14017],{"class":258},[100,149098,149099],{"class":117},"130",[100,149101,14017],{"class":258},[100,149103,2583],{"class":117},[100,149105,14017],{"class":258},[100,149107,22629],{"class":117},[100,149109,14017],{"class":258},[100,149111,3343],{"class":117},[100,149113,113444],{"class":258},[100,149115,148987],{"class":6812},[100,149117,472],{"class":471},[100,149119,33034],{"class":117},[100,149121,809],{"class":258},[100,149123,149124,149126,149129,149131,149133,149135,149137,149139,149141,149143,149145,149147,149149,149151,149153,149155,149157],{"class":102,"line":606},[100,149125,148534],{"class":258},[100,149127,149128],{"class":110},"\"线下销售\"",[100,149130,79072],{"class":258},[100,149132,2379],{"class":117},[100,149134,14017],{"class":258},[100,149136,2628],{"class":117},[100,149138,14017],{"class":258},[100,149140,2078],{"class":117},[100,149142,14017],{"class":258},[100,149144,2583],{"class":117},[100,149146,14017],{"class":258},[100,149148,148554],{"class":117},[100,149150,113444],{"class":258},[100,149152,148987],{"class":6812},[100,149154,472],{"class":471},[100,149156,33034],{"class":117},[100,149158,809],{"class":258},[100,149160,149161],{"class":102,"line":612},[100,149162,148710],{"class":258},[100,149164,149165,149167,149169,149171,149173,149175,149178],{"class":102,"line":618},[100,149166,148715],{"class":6812},[100,149168,472],{"class":471},[100,149170,148720],{"class":258},[100,149172,52961],{"class":6812},[100,149174,472],{"class":471},[100,149176,149177],{"class":110},"\"线上线下销售趋势\"",[100,149179,39601],{"class":258},[100,149181,149182,149184,149186,149188,149190,149192,149194],{"class":102,"line":623},[100,149183,148771],{"class":6812},[100,149185,472],{"class":471},[100,149187,148776],{"class":258},[100,149189,148779],{"class":6812},[100,149191,472],{"class":471},[100,149193,148784],{"class":110},[100,149195,39601],{"class":258},[100,149197,149198],{"class":102,"line":629},[100,149199,809],{"class":258},[100,149201,149202,149204,149207],{"class":102,"line":635},[100,149203,148566],{"class":258},[100,149205,149206],{"class":110},"\"sales.html\"",[100,149208,809],{"class":258},[19,149210,149211],{},"多条折线适合比较不同指标或不同地区。",[14,149213,149215],{"id":149214},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,149217,149218,149219,1646],{},"假设 ",[32,149220,149221],{},"sales.json",[73,149223,149225],{"className":148287,"code":149224,"language":147034,"meta":79,"style":79},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[32,149226,149227,149232,149264,149292,149320],{"__ignoreMap":79},[100,149228,149229],{"class":102,"line":103},[100,149230,149231],{"class":258},"[\n",[100,149233,149234,149237,149240,149242,149244,149246,149249,149251,149253,149255,149258,149260,149262],{"class":102,"line":188},[100,149235,149236],{"class":258},"  {",[100,149238,149239],{"class":117},"\"date\"",[100,149241,52991],{"class":258},[100,149243,148507],{"class":110},[100,149245,14017],{"class":258},[100,149247,149248],{"class":117},"\"online\"",[100,149250,52991],{"class":258},[100,149252,2078],{"class":117},[100,149254,14017],{"class":258},[100,149256,149257],{"class":117},"\"offline\"",[100,149259,52991],{"class":258},[100,149261,2379],{"class":117},[100,149263,6528],{"class":258},[100,149265,149266,149268,149270,149272,149274,149276,149278,149280,149282,149284,149286,149288,149290],{"class":102,"line":199},[100,149267,149236],{"class":258},[100,149269,149239],{"class":117},[100,149271,52991],{"class":258},[100,149273,148512],{"class":110},[100,149275,14017],{"class":258},[100,149277,149248],{"class":117},[100,149279,52991],{"class":258},[100,149281,149099],{"class":117},[100,149283,14017],{"class":258},[100,149285,149257],{"class":117},[100,149287,52991],{"class":258},[100,149289,2628],{"class":117},[100,149291,6528],{"class":258},[100,149293,149294,149296,149298,149300,149302,149304,149306,149308,149310,149312,149314,149316,149318],{"class":102,"line":532},[100,149295,149236],{"class":258},[100,149297,149239],{"class":117},[100,149299,52991],{"class":258},[100,149301,148517],{"class":110},[100,149303,14017],{"class":258},[100,149305,149248],{"class":117},[100,149307,52991],{"class":258},[100,149309,2583],{"class":117},[100,149311,14017],{"class":258},[100,149313,149257],{"class":117},[100,149315,52991],{"class":258},[100,149317,2078],{"class":117},[100,149319,3197],{"class":258},[100,149321,149322],{"class":102,"line":577},[100,149323,34802],{"class":258},[19,149325,149326],{},"读取并绘图：",[73,149328,149330],{"className":249,"code":149329,"language":251,"meta":79,"style":79},"import json\nfrom pyecharts import options as opts\nfrom pyecharts.charts import Line\n\nwith open(\"sales.json\", \"r\", encoding=\"utf-8\") as file:\n    data = json.load(file)\n\ndates = []\nonline_sales = []\noffline_sales = []\n\nfor item in data:\n    dates.append(item[\"date\"])\n    online_sales.append(item[\"online\"])\n    offline_sales.append(item[\"offline\"])\n\nline = Line()\nline.add_xaxis(dates)\nline.add_yaxis(\"线上销售\", online_sales, is_smooth=True)\nline.add_yaxis(\"线下销售\", offline_sales, is_smooth=True)\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"销售趋势\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n)\nline.render(\"sales.html\")\n",[32,149331,149332,149338,149352,149362,149366,149398,149411,149415,149423,149432,149441,149445,149457,149466,149475,149484,149488,149496,149500,149517,149534,149538,149555,149571,149575],{"__ignoreMap":79},[100,149333,149334,149336],{"class":102,"line":103},[100,149335,548],{"class":471},[100,149337,148333],{"class":258},[100,149339,149340,149342,149344,149346,149348,149350],{"class":102,"line":188},[100,149341,32301],{"class":471},[100,149343,148621],{"class":258},[100,149345,548],{"class":471},[100,149347,148626],{"class":258},[100,149349,561],{"class":471},[100,149351,148631],{"class":258},[100,149353,149354,149356,149358,149360],{"class":102,"line":199},[100,149355,32301],{"class":471},[100,149357,148480],{"class":258},[100,149359,548],{"class":471},[100,149361,148485],{"class":258},[100,149363,149364],{"class":102,"line":532},[100,149365,570],{"emptyLinePlaceholder":569},[100,149367,149368,149370,149372,149374,149377,149379,149381,149383,149385,149387,149389,149391,149393,149396],{"class":102,"line":577},[100,149369,109075],{"class":471},[100,149371,148033],{"class":117},[100,149373,713],{"class":258},[100,149375,149376],{"class":110},"\"sales.json\"",[100,149378,14017],{"class":258},[100,149380,148043],{"class":110},[100,149382,14017],{"class":258},[100,149384,148048],{"class":6812},[100,149386,472],{"class":471},[100,149388,148053],{"class":110},[100,149390,15295],{"class":258},[100,149392,561],{"class":471},[100,149394,149395],{"class":6812}," file",[100,149397,696],{"class":258},[100,149399,149400,149402,149404,149407,149409],{"class":102,"line":589},[100,149401,815],{"class":258},[100,149403,472],{"class":471},[100,149405,149406],{"class":258}," json.load(",[100,149408,46908],{"class":6812},[100,149410,809],{"class":258},[100,149412,149413],{"class":102,"line":595},[100,149414,570],{"emptyLinePlaceholder":569},[100,149416,149417,149419,149421],{"class":102,"line":601},[100,149418,149042],{"class":258},[100,149420,472],{"class":471},[100,149422,53392],{"class":258},[100,149424,149425,149428,149430],{"class":102,"line":606},[100,149426,149427],{"class":258},"online_sales ",[100,149429,472],{"class":471},[100,149431,53392],{"class":258},[100,149433,149434,149437,149439],{"class":102,"line":612},[100,149435,149436],{"class":258},"offline_sales ",[100,149438,472],{"class":471},[100,149440,53392],{"class":258},[100,149442,149443],{"class":102,"line":618},[100,149444,570],{"emptyLinePlaceholder":569},[100,149446,149447,149449,149452,149454],{"class":102,"line":623},[100,149448,1051],{"class":471},[100,149450,149451],{"class":258}," item ",[100,149453,854],{"class":471},[100,149455,149456],{"class":258}," data:\n",[100,149458,149459,149462,149464],{"class":102,"line":629},[100,149460,149461],{"class":258},"    dates.append(item[",[100,149463,149239],{"class":110},[100,149465,6255],{"class":258},[100,149467,149468,149471,149473],{"class":102,"line":635},[100,149469,149470],{"class":258},"    online_sales.append(item[",[100,149472,149248],{"class":110},[100,149474,6255],{"class":258},[100,149476,149477,149480,149482],{"class":102,"line":641},[100,149478,149479],{"class":258},"    offline_sales.append(item[",[100,149481,149257],{"class":110},[100,149483,6255],{"class":258},[100,149485,149486],{"class":102,"line":647},[100,149487,570],{"emptyLinePlaceholder":569},[100,149489,149490,149492,149494],{"class":102,"line":653},[100,149491,148494],{"class":258},[100,149493,472],{"class":471},[100,149495,148499],{"class":258},[100,149497,149498],{"class":102,"line":659},[100,149499,149083],{"class":258},[100,149501,149502,149504,149506,149509,149511,149513,149515],{"class":102,"line":665},[100,149503,148534],{"class":258},[100,149505,149090],{"class":110},[100,149507,149508],{"class":258},", online_sales, ",[100,149510,148987],{"class":6812},[100,149512,472],{"class":471},[100,149514,33034],{"class":117},[100,149516,809],{"class":258},[100,149518,149519,149521,149523,149526,149528,149530,149532],{"class":102,"line":670},[100,149520,148534],{"class":258},[100,149522,149128],{"class":110},[100,149524,149525],{"class":258},", offline_sales, ",[100,149527,148987],{"class":6812},[100,149529,472],{"class":471},[100,149531,33034],{"class":117},[100,149533,809],{"class":258},[100,149535,149536],{"class":102,"line":675},[100,149537,148710],{"class":258},[100,149539,149540,149542,149544,149546,149548,149550,149553],{"class":102,"line":699},[100,149541,148715],{"class":6812},[100,149543,472],{"class":471},[100,149545,148720],{"class":258},[100,149547,52961],{"class":6812},[100,149549,472],{"class":471},[100,149551,149552],{"class":110},"\"销售趋势\"",[100,149554,39601],{"class":258},[100,149556,149557,149559,149561,149563,149565,149567,149569],{"class":102,"line":708},[100,149558,148771],{"class":6812},[100,149560,472],{"class":471},[100,149562,148776],{"class":258},[100,149564,148779],{"class":6812},[100,149566,472],{"class":471},[100,149568,148784],{"class":110},[100,149570,39601],{"class":258},[100,149572,149573],{"class":102,"line":722},[100,149574,809],{"class":258},[100,149576,149577,149579,149581],{"class":102,"line":735},[100,149578,148566],{"class":258},[100,149580,149206],{"class":110},[100,149582,809],{"class":258},[14,149584,149586],{"id":149585},"_109-数据清洗","10.9 数据清洗",[19,149588,149589],{},"真实数据经常不整齐，需要清洗。",[19,149591,149592],{},"常见问题：",[26,149594,149595,149598,149601,149604],{},[29,149596,149597],{},"数字是字符串。",[29,149599,149600],{},"字段缺失。",[29,149602,149603],{},"空值。",[29,149605,149606],{},"日期格式不统一。",[19,149608,16716],{},[73,149610,149612],{"className":249,"code":149611,"language":251,"meta":79,"style":79},"raw_data = [\n    {\"date\": \"周一\", \"sales\": \"100\"},\n    {\"date\": \"周二\", \"sales\": \"\"},\n    {\"date\": \"周三\", \"sales\": \"120\"},\n]\n\ndates = []\nsales = []\n\nfor item in raw_data:\n    value = item.get(\"sales\")\n    if not value:\n        continue\n\n    dates.append(item[\"date\"])\n    sales.append(int(value))\n\nprint(dates)\nprint(sales)\n",[32,149613,149614,149623,149646,149666,149687,149691,149695,149703,149712,149716,149727,149741,149750,149755,149759,149767,149777,149781,149788],{"__ignoreMap":79},[100,149615,149616,149619,149621],{"class":102,"line":103},[100,149617,149618],{"class":258},"raw_data ",[100,149620,472],{"class":471},[100,149622,57001],{"class":258},[100,149624,149625,149628,149630,149632,149634,149636,149639,149641,149644],{"class":102,"line":188},[100,149626,149627],{"class":258},"    {",[100,149629,149239],{"class":110},[100,149631,52991],{"class":258},[100,149633,148507],{"class":110},[100,149635,14017],{"class":258},[100,149637,149638],{"class":110},"\"sales\"",[100,149640,52991],{"class":258},[100,149642,149643],{"class":110},"\"100\"",[100,149645,6528],{"class":258},[100,149647,149648,149650,149652,149654,149656,149658,149660,149662,149664],{"class":102,"line":199},[100,149649,149627],{"class":258},[100,149651,149239],{"class":110},[100,149653,52991],{"class":258},[100,149655,148512],{"class":110},[100,149657,14017],{"class":258},[100,149659,149638],{"class":110},[100,149661,52991],{"class":258},[100,149663,9248],{"class":110},[100,149665,6528],{"class":258},[100,149667,149668,149670,149672,149674,149676,149678,149680,149682,149685],{"class":102,"line":532},[100,149669,149627],{"class":258},[100,149671,149239],{"class":110},[100,149673,52991],{"class":258},[100,149675,148517],{"class":110},[100,149677,14017],{"class":258},[100,149679,149638],{"class":110},[100,149681,52991],{"class":258},[100,149683,149684],{"class":110},"\"120\"",[100,149686,6528],{"class":258},[100,149688,149689],{"class":102,"line":577},[100,149690,34802],{"class":258},[100,149692,149693],{"class":102,"line":589},[100,149694,570],{"emptyLinePlaceholder":569},[100,149696,149697,149699,149701],{"class":102,"line":595},[100,149698,149042],{"class":258},[100,149700,472],{"class":471},[100,149702,53392],{"class":258},[100,149704,149705,149708,149710],{"class":102,"line":601},[100,149706,149707],{"class":258},"sales ",[100,149709,472],{"class":471},[100,149711,53392],{"class":258},[100,149713,149714],{"class":102,"line":606},[100,149715,570],{"emptyLinePlaceholder":569},[100,149717,149718,149720,149722,149724],{"class":102,"line":612},[100,149719,1051],{"class":471},[100,149721,149451],{"class":258},[100,149723,854],{"class":471},[100,149725,149726],{"class":258}," raw_data:\n",[100,149728,149729,149732,149734,149737,149739],{"class":102,"line":618},[100,149730,149731],{"class":258},"    value ",[100,149733,472],{"class":471},[100,149735,149736],{"class":258}," item.get(",[100,149738,149638],{"class":110},[100,149740,809],{"class":258},[100,149742,149743,149745,149747],{"class":102,"line":623},[100,149744,4702],{"class":471},[100,149746,40484],{"class":471},[100,149748,149749],{"class":258}," value:\n",[100,149751,149752],{"class":102,"line":629},[100,149753,149754],{"class":471},"        continue\n",[100,149756,149757],{"class":102,"line":635},[100,149758,570],{"emptyLinePlaceholder":569},[100,149760,149761,149763,149765],{"class":102,"line":641},[100,149762,149461],{"class":258},[100,149764,149239],{"class":110},[100,149766,6255],{"class":258},[100,149768,149769,149772,149774],{"class":102,"line":647},[100,149770,149771],{"class":258},"    sales.append(",[100,149773,1784],{"class":117},[100,149775,149776],{"class":258},"(value))\n",[100,149778,149779],{"class":102,"line":653},[100,149780,570],{"emptyLinePlaceholder":569},[100,149782,149783,149785],{"class":102,"line":659},[100,149784,1195],{"class":117},[100,149786,149787],{"class":258},"(dates)\n",[100,149789,149790,149792],{"class":102,"line":665},[100,149791,1195],{"class":117},[100,149793,149794],{"class":258},"(sales)\n",[14,149796,149798],{"id":149797},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[73,149800,149802],{"className":249,"code":149801,"language":251,"meta":79,"style":79},"from pyecharts import options as opts\nfrom pyecharts.charts import Line\n\nsales = [\n    {\"date\": \"2024-10-01\", \"amount\": 1200},\n    {\"date\": \"2024-10-02\", \"amount\": 1800},\n    {\"date\": \"2024-10-03\", \"amount\": 1500},\n    {\"date\": \"2024-10-04\", \"amount\": 2100},\n    {\"date\": \"2024-10-05\", \"amount\": 2600},\n]\n\ndates = [item[\"date\"] for item in sales]\namounts = [item[\"amount\"] for item in sales]\n\nline = Line()\nline.add_xaxis(dates)\nline.add_yaxis(\n    series_name=\"销售额\",\n    y_axis=amounts,\n    is_smooth=True,\n    label_opts=opts.LabelOpts(is_show=True),\n)\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"每日销售额\"),\n    xaxis_opts=opts.AxisOpts(name=\"日期\"),\n    yaxis_opts=opts.AxisOpts(name=\"金额\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n    datazoom_opts=[opts.DataZoomOpts()],\n)\nline.render(\"daily_sales.html\")\n",[32,149803,149804,149818,149828,149832,149840,149861,149883,149905,149927,149949,149953,149957,149979,150000,150004,150012,150016,150020,150030,150039,150049,150065,150069,150073,150090,150106,150122,150138,150148,150152],{"__ignoreMap":79},[100,149805,149806,149808,149810,149812,149814,149816],{"class":102,"line":103},[100,149807,32301],{"class":471},[100,149809,148621],{"class":258},[100,149811,548],{"class":471},[100,149813,148626],{"class":258},[100,149815,561],{"class":471},[100,149817,148631],{"class":258},[100,149819,149820,149822,149824,149826],{"class":102,"line":188},[100,149821,32301],{"class":471},[100,149823,148480],{"class":258},[100,149825,548],{"class":471},[100,149827,148485],{"class":258},[100,149829,149830],{"class":102,"line":199},[100,149831,570],{"emptyLinePlaceholder":569},[100,149833,149834,149836,149838],{"class":102,"line":532},[100,149835,149707],{"class":258},[100,149837,472],{"class":471},[100,149839,57001],{"class":258},[100,149841,149842,149844,149846,149848,149851,149853,149855,149857,149859],{"class":102,"line":577},[100,149843,149627],{"class":258},[100,149845,149239],{"class":110},[100,149847,52991],{"class":258},[100,149849,149850],{"class":110},"\"2024-10-01\"",[100,149852,14017],{"class":258},[100,149854,85636],{"class":110},[100,149856,52991],{"class":258},[100,149858,93575],{"class":117},[100,149860,6528],{"class":258},[100,149862,149863,149865,149867,149869,149872,149874,149876,149878,149881],{"class":102,"line":589},[100,149864,149627],{"class":258},[100,149866,149239],{"class":110},[100,149868,52991],{"class":258},[100,149870,149871],{"class":110},"\"2024-10-02\"",[100,149873,14017],{"class":258},[100,149875,85636],{"class":110},[100,149877,52991],{"class":258},[100,149879,149880],{"class":117},"1800",[100,149882,6528],{"class":258},[100,149884,149885,149887,149889,149891,149894,149896,149898,149900,149903],{"class":102,"line":595},[100,149886,149627],{"class":258},[100,149888,149239],{"class":110},[100,149890,52991],{"class":258},[100,149892,149893],{"class":110},"\"2024-10-03\"",[100,149895,14017],{"class":258},[100,149897,85636],{"class":110},[100,149899,52991],{"class":258},[100,149901,149902],{"class":117},"1500",[100,149904,6528],{"class":258},[100,149906,149907,149909,149911,149913,149916,149918,149920,149922,149925],{"class":102,"line":601},[100,149908,149627],{"class":258},[100,149910,149239],{"class":110},[100,149912,52991],{"class":258},[100,149914,149915],{"class":110},"\"2024-10-04\"",[100,149917,14017],{"class":258},[100,149919,85636],{"class":110},[100,149921,52991],{"class":258},[100,149923,149924],{"class":117},"2100",[100,149926,6528],{"class":258},[100,149928,149929,149931,149933,149935,149938,149940,149942,149944,149947],{"class":102,"line":606},[100,149930,149627],{"class":258},[100,149932,149239],{"class":110},[100,149934,52991],{"class":258},[100,149936,149937],{"class":110},"\"2024-10-05\"",[100,149939,14017],{"class":258},[100,149941,85636],{"class":110},[100,149943,52991],{"class":258},[100,149945,149946],{"class":117},"2600",[100,149948,6528],{"class":258},[100,149950,149951],{"class":102,"line":612},[100,149952,34802],{"class":258},[100,149954,149955],{"class":102,"line":618},[100,149956,570],{"emptyLinePlaceholder":569},[100,149958,149959,149961,149963,149966,149968,149970,149972,149974,149976],{"class":102,"line":623},[100,149960,149042],{"class":258},[100,149962,472],{"class":471},[100,149964,149965],{"class":258}," [item[",[100,149967,149239],{"class":110},[100,149969,468],{"class":258},[100,149971,1051],{"class":471},[100,149973,149451],{"class":258},[100,149975,854],{"class":471},[100,149977,149978],{"class":258}," sales]\n",[100,149980,149981,149984,149986,149988,149990,149992,149994,149996,149998],{"class":102,"line":629},[100,149982,149983],{"class":258},"amounts ",[100,149985,472],{"class":471},[100,149987,149965],{"class":258},[100,149989,85636],{"class":110},[100,149991,468],{"class":258},[100,149993,1051],{"class":471},[100,149995,149451],{"class":258},[100,149997,854],{"class":471},[100,149999,149978],{"class":258},[100,150001,150002],{"class":102,"line":635},[100,150003,570],{"emptyLinePlaceholder":569},[100,150005,150006,150008,150010],{"class":102,"line":641},[100,150007,148494],{"class":258},[100,150009,472],{"class":471},[100,150011,148499],{"class":258},[100,150013,150014],{"class":102,"line":647},[100,150015,149083],{"class":258},[100,150017,150018],{"class":102,"line":653},[100,150019,148891],{"class":258},[100,150021,150022,150024,150026,150028],{"class":102,"line":659},[100,150023,148896],{"class":6812},[100,150025,472],{"class":471},[100,150027,148537],{"class":110},[100,150029,33024],{"class":258},[100,150031,150032,150034,150036],{"class":102,"line":665},[100,150033,148907],{"class":6812},[100,150035,472],{"class":471},[100,150037,150038],{"class":258},"amounts,\n",[100,150040,150041,150043,150045,150047],{"class":102,"line":670},[100,150042,148936],{"class":6812},[100,150044,472],{"class":471},[100,150046,33034],{"class":117},[100,150048,33024],{"class":258},[100,150050,150051,150053,150055,150057,150059,150061,150063],{"class":102,"line":675},[100,150052,148947],{"class":6812},[100,150054,472],{"class":471},[100,150056,148952],{"class":258},[100,150058,148955],{"class":6812},[100,150060,472],{"class":471},[100,150062,33034],{"class":117},[100,150064,39601],{"class":258},[100,150066,150067],{"class":102,"line":699},[100,150068,809],{"class":258},[100,150070,150071],{"class":102,"line":708},[100,150072,148710],{"class":258},[100,150074,150075,150077,150079,150081,150083,150085,150088],{"class":102,"line":722},[100,150076,148715],{"class":6812},[100,150078,472],{"class":471},[100,150080,148720],{"class":258},[100,150082,52961],{"class":6812},[100,150084,472],{"class":471},[100,150086,150087],{"class":110},"\"每日销售额\"",[100,150089,39601],{"class":258},[100,150091,150092,150094,150096,150098,150100,150102,150104],{"class":102,"line":735},[100,150093,148734],{"class":6812},[100,150095,472],{"class":471},[100,150097,148739],{"class":258},[100,150099,81364],{"class":6812},[100,150101,472],{"class":471},[100,150103,148746],{"class":110},[100,150105,39601],{"class":258},[100,150107,150108,150110,150112,150114,150116,150118,150120],{"class":102,"line":754},[100,150109,148753],{"class":6812},[100,150111,472],{"class":471},[100,150113,148739],{"class":258},[100,150115,81364],{"class":6812},[100,150117,472],{"class":471},[100,150119,148764],{"class":110},[100,150121,39601],{"class":258},[100,150123,150124,150126,150128,150130,150132,150134,150136],{"class":102,"line":771},[100,150125,148771],{"class":6812},[100,150127,472],{"class":471},[100,150129,148776],{"class":258},[100,150131,148779],{"class":6812},[100,150133,472],{"class":471},[100,150135,148784],{"class":110},[100,150137,39601],{"class":258},[100,150139,150140,150143,150145],{"class":102,"line":776},[100,150141,150142],{"class":6812},"    datazoom_opts",[100,150144,472],{"class":471},[100,150146,150147],{"class":258},"[opts.DataZoomOpts()],\n",[100,150149,150150],{"class":102,"line":781},[100,150151,809],{"class":258},[100,150153,150154,150156,150159],{"class":102,"line":796},[100,150155,148566],{"class":258},[100,150157,150158],{"class":110},"\"daily_sales.html\"",[100,150160,809],{"class":258},[19,150162,150163,150166],{},[32,150164,150165],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,150168,150170],{"id":150169},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,150172,150173],{},"如果数据结构如下：",[73,150175,150177],{"className":249,"code":150176,"language":251,"meta":79,"style":79},"data = {\n    \"北京\": [\n        {\"date\": \"2024-01-01\", \"confirm\": 10},\n        {\"date\": \"2024-01-02\", \"confirm\": 12},\n    ],\n    \"上海\": [\n        {\"date\": \"2024-01-01\", \"confirm\": 8},\n        {\"date\": \"2024-01-02\", \"confirm\": 13},\n    ],\n}\n",[32,150178,150179,150187,150195,150217,150238,150243,150250,150270,150290,150294],{"__ignoreMap":79},[100,150180,150181,150183,150185],{"class":102,"line":103},[100,150182,1234],{"class":258},[100,150184,472],{"class":471},[100,150186,17153],{"class":258},[100,150188,150189,150192],{"class":102,"line":188},[100,150190,150191],{"class":110},"    \"北京\"",[100,150193,150194],{"class":258},": [\n",[100,150196,150197,150199,150201,150203,150206,150208,150211,150213,150215],{"class":102,"line":199},[100,150198,6515],{"class":258},[100,150200,149239],{"class":110},[100,150202,52991],{"class":258},[100,150204,150205],{"class":110},"\"2024-01-01\"",[100,150207,14017],{"class":258},[100,150209,150210],{"class":110},"\"confirm\"",[100,150212,52991],{"class":258},[100,150214,2213],{"class":117},[100,150216,6528],{"class":258},[100,150218,150219,150221,150223,150225,150228,150230,150232,150234,150236],{"class":102,"line":532},[100,150220,6515],{"class":258},[100,150222,149239],{"class":110},[100,150224,52991],{"class":258},[100,150226,150227],{"class":110},"\"2024-01-02\"",[100,150229,14017],{"class":258},[100,150231,150210],{"class":110},[100,150233,52991],{"class":258},[100,150235,2265],{"class":117},[100,150237,6528],{"class":258},[100,150239,150240],{"class":102,"line":577},[100,150241,150242],{"class":258},"    ],\n",[100,150244,150245,150248],{"class":102,"line":589},[100,150246,150247],{"class":110},"    \"上海\"",[100,150249,150194],{"class":258},[100,150251,150252,150254,150256,150258,150260,150262,150264,150266,150268],{"class":102,"line":595},[100,150253,6515],{"class":258},[100,150255,149239],{"class":110},[100,150257,52991],{"class":258},[100,150259,150205],{"class":110},[100,150261,14017],{"class":258},[100,150263,150210],{"class":110},[100,150265,52991],{"class":258},[100,150267,2162],{"class":117},[100,150269,6528],{"class":258},[100,150271,150272,150274,150276,150278,150280,150282,150284,150286,150288],{"class":102,"line":601},[100,150273,6515],{"class":258},[100,150275,149239],{"class":110},[100,150277,52991],{"class":258},[100,150279,150227],{"class":110},[100,150281,14017],{"class":258},[100,150283,150210],{"class":110},[100,150285,52991],{"class":258},[100,150287,2290],{"class":117},[100,150289,6528],{"class":258},[100,150291,150292],{"class":102,"line":606},[100,150293,150242],{"class":258},[100,150295,150296],{"class":102,"line":612},[100,150297,3197],{"class":258},[19,150299,150300],{},"绘制多地区趋势：",[73,150302,150304],{"className":249,"code":150303,"language":251,"meta":79,"style":79},"from pyecharts import options as opts\nfrom pyecharts.charts import Line\n\ndates = [item[\"date\"] for item in data[\"北京\"]]\n\nline = Line()\nline.add_xaxis(dates)\n\nfor city, records in data.items():\n    values = [item[\"confirm\"] for item in records]\n    line.add_yaxis(city, values, is_smooth=True)\n\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"多地区趋势图\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n)\nline.render(\"trend.html\")\n",[32,150305,150306,150320,150330,150334,150359,150363,150371,150375,150379,150391,150413,150426,150430,150434,150451,150467,150471],{"__ignoreMap":79},[100,150307,150308,150310,150312,150314,150316,150318],{"class":102,"line":103},[100,150309,32301],{"class":471},[100,150311,148621],{"class":258},[100,150313,548],{"class":471},[100,150315,148626],{"class":258},[100,150317,561],{"class":471},[100,150319,148631],{"class":258},[100,150321,150322,150324,150326,150328],{"class":102,"line":188},[100,150323,32301],{"class":471},[100,150325,148480],{"class":258},[100,150327,548],{"class":471},[100,150329,148485],{"class":258},[100,150331,150332],{"class":102,"line":199},[100,150333,570],{"emptyLinePlaceholder":569},[100,150335,150336,150338,150340,150342,150344,150346,150348,150350,150352,150355,150357],{"class":102,"line":532},[100,150337,149042],{"class":258},[100,150339,472],{"class":471},[100,150341,149965],{"class":258},[100,150343,149239],{"class":110},[100,150345,468],{"class":258},[100,150347,1051],{"class":471},[100,150349,149451],{"class":258},[100,150351,854],{"class":471},[100,150353,150354],{"class":258}," data[",[100,150356,70823],{"class":110},[100,150358,79081],{"class":258},[100,150360,150361],{"class":102,"line":577},[100,150362,570],{"emptyLinePlaceholder":569},[100,150364,150365,150367,150369],{"class":102,"line":589},[100,150366,148494],{"class":258},[100,150368,472],{"class":471},[100,150370,148499],{"class":258},[100,150372,150373],{"class":102,"line":595},[100,150374,149083],{"class":258},[100,150376,150377],{"class":102,"line":601},[100,150378,570],{"emptyLinePlaceholder":569},[100,150380,150381,150383,150386,150388],{"class":102,"line":606},[100,150382,1051],{"class":471},[100,150384,150385],{"class":258}," city, records ",[100,150387,854],{"class":471},[100,150389,150390],{"class":258}," data.items():\n",[100,150392,150393,150396,150398,150400,150402,150404,150406,150408,150410],{"class":102,"line":612},[100,150394,150395],{"class":258},"    values ",[100,150397,472],{"class":471},[100,150399,149965],{"class":258},[100,150401,150210],{"class":110},[100,150403,468],{"class":258},[100,150405,1051],{"class":471},[100,150407,149451],{"class":258},[100,150409,854],{"class":471},[100,150411,150412],{"class":258}," records]\n",[100,150414,150415,150418,150420,150422,150424],{"class":102,"line":618},[100,150416,150417],{"class":258},"    line.add_yaxis(city, values, ",[100,150419,148987],{"class":6812},[100,150421,472],{"class":471},[100,150423,33034],{"class":117},[100,150425,809],{"class":258},[100,150427,150428],{"class":102,"line":623},[100,150429,570],{"emptyLinePlaceholder":569},[100,150431,150432],{"class":102,"line":629},[100,150433,148710],{"class":258},[100,150435,150436,150438,150440,150442,150444,150446,150449],{"class":102,"line":635},[100,150437,148715],{"class":6812},[100,150439,472],{"class":471},[100,150441,148720],{"class":258},[100,150443,52961],{"class":6812},[100,150445,472],{"class":471},[100,150447,150448],{"class":110},"\"多地区趋势图\"",[100,150450,39601],{"class":258},[100,150452,150453,150455,150457,150459,150461,150463,150465],{"class":102,"line":641},[100,150454,148771],{"class":6812},[100,150456,472],{"class":471},[100,150458,148776],{"class":258},[100,150460,148779],{"class":6812},[100,150462,472],{"class":471},[100,150464,148784],{"class":110},[100,150466,39601],{"class":258},[100,150468,150469],{"class":102,"line":647},[100,150470,809],{"class":258},[100,150472,150473,150475,150478],{"class":102,"line":653},[100,150474,148566],{"class":258},[100,150476,150477],{"class":110},"\"trend.html\"",[100,150479,809],{"class":258},[19,150481,150482],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,150484,150486],{"id":150485},"_1012-易错点","10.12 易错点",[26,150488,150489,150495,150501,150511,150517],{},[29,150490,150491,150494],{},[32,150492,150493],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[29,150496,150497,150500],{},[32,150498,150499],{},"render()"," 生成的是 HTML，不是图片。",[29,150502,150503,150504,150507,150508,233],{},"JSON 字符串用 ",[32,150505,150506],{},"json.loads()","，JSON 文件用 ",[32,150509,150510],{},"json.load()",[29,150512,150513,150514,233],{},"中文 JSON 保存时加 ",[32,150515,150516],{},"ensure_ascii=False",[29,150518,150519],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,150521,150523],{"id":150522},"_1013-本章练习","10.13 本章练习",[26,150525,150526,150529,150532,150535,150538],{},[29,150527,150528],{},"安装 pyecharts 并生成第一个折线图。",[29,150530,150531],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[29,150533,150534],{},"绘制两条折线，对比线上和线下销售额。",[29,150536,150537],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[29,150539,150540],{},"对含有空值的销售数据进行清洗后再绘图。",[1677,150542,150543],{},"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":79,"searchDepth":188,"depth":188,"links":150545},[150546,150547,150548,150549,150550,150551,150552,150553,150554,150555,150556,150557,150558],{"id":148162,"depth":188,"text":148163},{"id":148237,"depth":188,"text":148238},{"id":148416,"depth":188,"text":148417},{"id":148467,"depth":188,"text":148468},{"id":148601,"depth":188,"text":148602},{"id":148877,"depth":188,"text":148878},{"id":149003,"depth":188,"text":149004},{"id":149214,"depth":188,"text":149215},{"id":149585,"depth":188,"text":149586},{"id":149797,"depth":188,"text":149798},{"id":150169,"depth":188,"text":150170},{"id":150485,"depth":188,"text":150486},{"id":150522,"depth":188,"text":150523},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":148154,"description":24958},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":150565,"title":150566,"body":150567,"description":24958,"extension":1708,"meta":152927,"navigation":569,"path":152928,"seo":152929,"stem":152930,"__hash__":152931},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":150568,"toc":152904},[150569,150572,150576,150579,150582,150658,150661,150752,150755,150759,150762,150806,150819,150823,150826,150893,150896,150900,150903,150987,150995,150999,151004,151145,151148,151159,151165,151171,151285,151289,151292,151295,151548,151551,151555,151558,151662,151665,151669,151820,151824,151831,151944,151948,151951,152057,152060,152064,152067,152098,152101,152206,152209,152213,152217,152227,152295,152299,152306,152370,152373,152377,152383,152479,152488,152492,152816,152825,152829,152857,152861,152901],[10,150570,150566],{"id":150571},"_11-面向对象基础",[14,150573,150575],{"id":150574},"_111-什么是面向对象","11.1 什么是面向对象",[19,150577,150578],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,150580,150581],{},"面向过程：",[73,150583,150585],{"className":249,"code":150584,"language":251,"meta":79,"style":79},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[32,150586,150587,150596,150604,150608,150618,150649,150653],{"__ignoreMap":79},[100,150588,150589,150591,150593],{"class":102,"line":103},[100,150590,147778],{"class":258},[100,150592,472],{"class":471},[100,150594,150595],{"class":110}," \"小明\"\n",[100,150597,150598,150600,150602],{"class":102,"line":188},[100,150599,147788],{"class":258},[100,150601,472],{"class":471},[100,150603,147793],{"class":117},[100,150605,150606],{"class":102,"line":199},[100,150607,570],{"emptyLinePlaceholder":569},[100,150609,150610,150612,150615],{"class":102,"line":532},[100,150611,678],{"class":471},[100,150613,150614],{"class":106}," introduce",[100,150616,150617],{"class":258},"(name, age):\n",[100,150619,150620,150622,150624,150626,150629,150631,150633,150635,150638,150640,150642,150644,150647],{"class":102,"line":577},[100,150621,702],{"class":117},[100,150623,713],{"class":258},[100,150625,1830],{"class":471},[100,150627,150628],{"class":110},"\"我叫",[100,150630,2662],{"class":117},[100,150632,81364],{"class":258},[100,150634,2712],{"class":117},[100,150636,150637],{"class":110},"，今年",[100,150639,2662],{"class":117},[100,150641,71775],{"class":258},[100,150643,2712],{"class":117},[100,150645,150646],{"class":110},"岁\"",[100,150648,809],{"class":258},[100,150650,150651],{"class":102,"line":589},[100,150652,570],{"emptyLinePlaceholder":569},[100,150654,150655],{"class":102,"line":595},[100,150656,150657],{"class":258},"introduce(name, age)\n",[19,150659,150660],{},"面向对象：",[73,150662,150664],{"className":249,"code":150663,"language":251,"meta":79,"style":79},"class Student:\n    def introduce(self):\n        print(f\"我叫{self.name}，今年{self.age}岁\")\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\nstudent.introduce()\n",[32,150665,150666,150674,150682,150711,150715,150719,150729,150738,150747],{"__ignoreMap":79},[100,150667,150668,150670,150672],{"class":102,"line":103},[100,150669,16275],{"class":471},[100,150671,9494],{"class":106},[100,150673,696],{"class":258},[100,150675,150676,150678,150680],{"class":102,"line":188},[100,150677,32364],{"class":471},[100,150679,150614],{"class":106},[100,150681,32370],{"class":258},[100,150683,150684,150686,150688,150690,150692,150695,150697,150699,150701,150703,150705,150707,150709],{"class":102,"line":199},[100,150685,34007],{"class":117},[100,150687,713],{"class":258},[100,150689,1830],{"class":471},[100,150691,150628],{"class":110},[100,150693,150694],{"class":117},"{self",[100,150696,81855],{"class":258},[100,150698,2712],{"class":117},[100,150700,150637],{"class":110},[100,150702,150694],{"class":117},[100,150704,81867],{"class":258},[100,150706,2712],{"class":117},[100,150708,150646],{"class":110},[100,150710,809],{"class":258},[100,150712,150713],{"class":102,"line":532},[100,150714,570],{"emptyLinePlaceholder":569},[100,150716,150717],{"class":102,"line":577},[100,150718,570],{"emptyLinePlaceholder":569},[100,150720,150721,150724,150726],{"class":102,"line":589},[100,150722,150723],{"class":258},"student ",[100,150725,472],{"class":471},[100,150727,150728],{"class":258}," Student()\n",[100,150730,150731,150734,150736],{"class":102,"line":595},[100,150732,150733],{"class":258},"student.name ",[100,150735,472],{"class":471},[100,150737,150595],{"class":110},[100,150739,150740,150743,150745],{"class":102,"line":601},[100,150741,150742],{"class":258},"student.age ",[100,150744,472],{"class":471},[100,150746,147793],{"class":117},[100,150748,150749],{"class":102,"line":606},[100,150750,150751],{"class":258},"student.introduce()\n",[19,150753,150754],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,150756,150758],{"id":150757},"_112-类和对象","11.2 类和对象",[19,150760,150761],{},"类是模板，对象是根据模板创建出来的具体实例。",[73,150763,150765],{"className":249,"code":150764,"language":251,"meta":79,"style":79},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[32,150766,150767,150775,150780,150784,150788,150797],{"__ignoreMap":79},[100,150768,150769,150771,150773],{"class":102,"line":103},[100,150770,16275],{"class":471},[100,150772,9494],{"class":106},[100,150774,696],{"class":258},[100,150776,150777],{"class":102,"line":188},[100,150778,150779],{"class":471},"    pass\n",[100,150781,150782],{"class":102,"line":199},[100,150783,570],{"emptyLinePlaceholder":569},[100,150785,150786],{"class":102,"line":532},[100,150787,570],{"emptyLinePlaceholder":569},[100,150789,150790,150793,150795],{"class":102,"line":577},[100,150791,150792],{"class":258},"student1 ",[100,150794,472],{"class":471},[100,150796,150728],{"class":258},[100,150798,150799,150802,150804],{"class":102,"line":589},[100,150800,150801],{"class":258},"student2 ",[100,150803,472],{"class":471},[100,150805,150728],{"class":258},[19,150807,150808,150811,150812,218,150815,150818],{},[32,150809,150810],{},"Student"," 是类，",[32,150813,150814],{},"student1",[32,150816,150817],{},"student2"," 是对象。",[14,150820,150822],{"id":150821},"_113-属性","11.3 属性",[19,150824,150825],{},"属性是对象保存的数据。",[73,150827,150829],{"className":249,"code":150828,"language":251,"meta":79,"style":79},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[32,150830,150831,150839,150843,150847,150851,150859,150867,150875,150879,150886],{"__ignoreMap":79},[100,150832,150833,150835,150837],{"class":102,"line":103},[100,150834,16275],{"class":471},[100,150836,9494],{"class":106},[100,150838,696],{"class":258},[100,150840,150841],{"class":102,"line":188},[100,150842,150779],{"class":471},[100,150844,150845],{"class":102,"line":199},[100,150846,570],{"emptyLinePlaceholder":569},[100,150848,150849],{"class":102,"line":532},[100,150850,570],{"emptyLinePlaceholder":569},[100,150852,150853,150855,150857],{"class":102,"line":577},[100,150854,150723],{"class":258},[100,150856,472],{"class":471},[100,150858,150728],{"class":258},[100,150860,150861,150863,150865],{"class":102,"line":589},[100,150862,150733],{"class":258},[100,150864,472],{"class":471},[100,150866,150595],{"class":110},[100,150868,150869,150871,150873],{"class":102,"line":595},[100,150870,150742],{"class":258},[100,150872,472],{"class":471},[100,150874,147793],{"class":117},[100,150876,150877],{"class":102,"line":601},[100,150878,570],{"emptyLinePlaceholder":569},[100,150880,150881,150883],{"class":102,"line":606},[100,150882,1195],{"class":117},[100,150884,150885],{"class":258},"(student.name)\n",[100,150887,150888,150890],{"class":102,"line":612},[100,150889,1195],{"class":117},[100,150891,150892],{"class":258},"(student.age)\n",[19,150894,150895],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,150897,150899],{"id":150898},"_114-方法","11.4 方法",[19,150901,150902],{},"类中的函数叫方法。",[73,150904,150905],{"className":249,"code":150663,"language":251,"meta":79,"style":79},[32,150906,150907,150915,150923,150951,150955,150959,150967,150975,150983],{"__ignoreMap":79},[100,150908,150909,150911,150913],{"class":102,"line":103},[100,150910,16275],{"class":471},[100,150912,9494],{"class":106},[100,150914,696],{"class":258},[100,150916,150917,150919,150921],{"class":102,"line":188},[100,150918,32364],{"class":471},[100,150920,150614],{"class":106},[100,150922,32370],{"class":258},[100,150924,150925,150927,150929,150931,150933,150935,150937,150939,150941,150943,150945,150947,150949],{"class":102,"line":199},[100,150926,34007],{"class":117},[100,150928,713],{"class":258},[100,150930,1830],{"class":471},[100,150932,150628],{"class":110},[100,150934,150694],{"class":117},[100,150936,81855],{"class":258},[100,150938,2712],{"class":117},[100,150940,150637],{"class":110},[100,150942,150694],{"class":117},[100,150944,81867],{"class":258},[100,150946,2712],{"class":117},[100,150948,150646],{"class":110},[100,150950,809],{"class":258},[100,150952,150953],{"class":102,"line":532},[100,150954,570],{"emptyLinePlaceholder":569},[100,150956,150957],{"class":102,"line":577},[100,150958,570],{"emptyLinePlaceholder":569},[100,150960,150961,150963,150965],{"class":102,"line":589},[100,150962,150723],{"class":258},[100,150964,472],{"class":471},[100,150966,150728],{"class":258},[100,150968,150969,150971,150973],{"class":102,"line":595},[100,150970,150733],{"class":258},[100,150972,472],{"class":471},[100,150974,150595],{"class":110},[100,150976,150977,150979,150981],{"class":102,"line":601},[100,150978,150742],{"class":258},[100,150980,472],{"class":471},[100,150982,147793],{"class":117},[100,150984,150985],{"class":102,"line":606},[100,150986,150751],{"class":258},[19,150988,150989,150991,150992,150994],{},[32,150990,32386],{}," 表示当前对象。调用方法时不需要手动传入 ",[32,150993,32386],{},"，Python 会自动传。",[14,150996,150998],{"id":150997},"_115-构造方法__init__","11.5 构造方法__init__",[19,151000,151001,151003],{},[32,151002,32392],{}," 在对象创建时自动执行，用于初始化属性。",[73,151005,151007],{"className":249,"code":151006,"language":251,"meta":79,"style":79},"class Student:\n    def __init__(self, name, age, score):\n        self.name = name\n        self.age = age\n        self.score = score\n\n    def introduce(self):\n        print(f\"我叫{self.name}，今年{self.age}岁，成绩{self.score}\")\n\n\nstudent = Student(\"小明\", 18, 95)\nstudent.introduce()\n",[32,151008,151009,151017,151026,151038,151050,151061,151065,151073,151111,151115,151119,151141],{"__ignoreMap":79},[100,151010,151011,151013,151015],{"class":102,"line":103},[100,151012,16275],{"class":471},[100,151014,9494],{"class":106},[100,151016,696],{"class":258},[100,151018,151019,151021,151023],{"class":102,"line":188},[100,151020,32364],{"class":471},[100,151022,32367],{"class":117},[100,151024,151025],{"class":258},"(self, name, age, score):\n",[100,151027,151028,151030,151033,151035],{"class":102,"line":199},[100,151029,32408],{"class":117},[100,151031,151032],{"class":258},".name ",[100,151034,472],{"class":471},[100,151036,151037],{"class":258}," name\n",[100,151039,151040,151042,151045,151047],{"class":102,"line":532},[100,151041,32408],{"class":117},[100,151043,151044],{"class":258},".age ",[100,151046,472],{"class":471},[100,151048,151049],{"class":258}," age\n",[100,151051,151052,151054,151057,151059],{"class":102,"line":577},[100,151053,32408],{"class":117},[100,151055,151056],{"class":258},".score ",[100,151058,472],{"class":471},[100,151060,3211],{"class":258},[100,151062,151063],{"class":102,"line":589},[100,151064,570],{"emptyLinePlaceholder":569},[100,151066,151067,151069,151071],{"class":102,"line":595},[100,151068,32364],{"class":471},[100,151070,150614],{"class":106},[100,151072,32370],{"class":258},[100,151074,151075,151077,151079,151081,151083,151085,151087,151089,151091,151093,151095,151097,151100,151102,151105,151107,151109],{"class":102,"line":601},[100,151076,34007],{"class":117},[100,151078,713],{"class":258},[100,151080,1830],{"class":471},[100,151082,150628],{"class":110},[100,151084,150694],{"class":117},[100,151086,81855],{"class":258},[100,151088,2712],{"class":117},[100,151090,150637],{"class":110},[100,151092,150694],{"class":117},[100,151094,81867],{"class":258},[100,151096,2712],{"class":117},[100,151098,151099],{"class":110},"岁，成绩",[100,151101,150694],{"class":117},[100,151103,151104],{"class":258},".score",[100,151106,2712],{"class":117},[100,151108,2019],{"class":110},[100,151110,809],{"class":258},[100,151112,151113],{"class":102,"line":606},[100,151114,570],{"emptyLinePlaceholder":569},[100,151116,151117],{"class":102,"line":612},[100,151118,570],{"emptyLinePlaceholder":569},[100,151120,151121,151123,151125,151128,151131,151133,151135,151137,151139],{"class":102,"line":618},[100,151122,150723],{"class":258},[100,151124,472],{"class":471},[100,151126,151127],{"class":258}," Student(",[100,151129,151130],{"class":110},"\"小明\"",[100,151132,14017],{"class":258},[100,151134,2417],{"class":117},[100,151136,14017],{"class":258},[100,151138,2755],{"class":117},[100,151140,809],{"class":258},[100,151142,151143],{"class":102,"line":623},[100,151144,150751],{"class":258},[19,151146,151147],{},"构造方法的好处：",[26,151149,151150,151153,151156],{},[29,151151,151152],{},"创建对象时必须提供必要数据。",[29,151154,151155],{},"属性初始化集中，不容易漏。",[29,151157,151158],{},"对象状态更完整。",[14,151160,151162,151163],{"id":151161},"_116-str","11.6 ",[1921,151164,687],{},[19,151166,151167,151168,233],{},"直接打印对象时，默认输出不直观。可以定义 ",[32,151169,151170],{},"__str__",[73,151172,151174],{"className":249,"code":151173,"language":251,"meta":79,"style":79},"class Student:\n    def __init__(self, name, age):\n        self.name = name\n        self.age = age\n\n    def __str__(self):\n        return f\"Student(name={self.name}, age={self.age})\"\n\n\nstudent = Student(\"小明\", 18)\nprint(student)\n",[32,151175,151176,151184,151193,151203,151213,151217,151226,151254,151258,151262,151278],{"__ignoreMap":79},[100,151177,151178,151180,151182],{"class":102,"line":103},[100,151179,16275],{"class":471},[100,151181,9494],{"class":106},[100,151183,696],{"class":258},[100,151185,151186,151188,151190],{"class":102,"line":188},[100,151187,32364],{"class":471},[100,151189,32367],{"class":117},[100,151191,151192],{"class":258},"(self, name, age):\n",[100,151194,151195,151197,151199,151201],{"class":102,"line":199},[100,151196,32408],{"class":117},[100,151198,151032],{"class":258},[100,151200,472],{"class":471},[100,151202,151037],{"class":258},[100,151204,151205,151207,151209,151211],{"class":102,"line":532},[100,151206,32408],{"class":117},[100,151208,151044],{"class":258},[100,151210,472],{"class":471},[100,151212,151049],{"class":258},[100,151214,151215],{"class":102,"line":577},[100,151216,570],{"emptyLinePlaceholder":569},[100,151218,151219,151221,151224],{"class":102,"line":589},[100,151220,32364],{"class":471},[100,151222,151223],{"class":117}," __str__",[100,151225,32370],{"class":258},[100,151227,151228,151230,151233,151236,151238,151240,151242,151245,151247,151249,151251],{"class":102,"line":595},[100,151229,16333],{"class":471},[100,151231,151232],{"class":471}," f",[100,151234,151235],{"class":110},"\"Student(name=",[100,151237,150694],{"class":117},[100,151239,81855],{"class":258},[100,151241,2712],{"class":117},[100,151243,151244],{"class":110},", age=",[100,151246,150694],{"class":117},[100,151248,81867],{"class":258},[100,151250,2712],{"class":117},[100,151252,151253],{"class":110},")\"\n",[100,151255,151256],{"class":102,"line":601},[100,151257,570],{"emptyLinePlaceholder":569},[100,151259,151260],{"class":102,"line":606},[100,151261,570],{"emptyLinePlaceholder":569},[100,151263,151264,151266,151268,151270,151272,151274,151276],{"class":102,"line":612},[100,151265,150723],{"class":258},[100,151267,472],{"class":471},[100,151269,151127],{"class":258},[100,151271,151130],{"class":110},[100,151273,14017],{"class":258},[100,151275,2417],{"class":117},[100,151277,809],{"class":258},[100,151279,151280,151282],{"class":102,"line":618},[100,151281,1195],{"class":117},[100,151283,151284],{"class":258},"(student)\n",[14,151286,151288],{"id":151287},"_117-封装","11.7 封装",[19,151290,151291],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,151293,151294],{},"Python 中以双下划线开头的属性通常视为私有属性。",[73,151296,151298],{"className":249,"code":151297,"language":251,"meta":79,"style":79},"class Account:\n    def __init__(self, owner, balance):\n        self.owner = owner\n        self.__balance = balance\n\n    def get_balance(self):\n        return self.__balance\n\n    def deposit(self, money):\n        if money \u003C= 0:\n            print(\"存款金额必须大于0\")\n            return\n        self.__balance += money\n\n    def withdraw(self, money):\n        if money \u003C= 0:\n            print(\"取款金额必须大于0\")\n            return\n        if money > self.__balance:\n            print(\"余额不足\")\n            return\n        self.__balance -= money\n\n\naccount = Account(\"小明\", 1000)\naccount.deposit(200)\naccount.withdraw(100)\nprint(account.get_balance())\n",[32,151299,151300,151309,151318,151330,151342,151346,151355,151364,151368,151378,151391,151402,151407,151418,151422,151431,151443,151454,151458,151471,151482,151486,151497,151501,151505,151523,151532,151541],{"__ignoreMap":79},[100,151301,151302,151304,151307],{"class":102,"line":103},[100,151303,16275],{"class":471},[100,151305,151306],{"class":106}," Account",[100,151308,696],{"class":258},[100,151310,151311,151313,151315],{"class":102,"line":188},[100,151312,32364],{"class":471},[100,151314,32367],{"class":117},[100,151316,151317],{"class":258},"(self, owner, balance):\n",[100,151319,151320,151322,151325,151327],{"class":102,"line":199},[100,151321,32408],{"class":117},[100,151323,151324],{"class":258},".owner ",[100,151326,472],{"class":471},[100,151328,151329],{"class":258}," owner\n",[100,151331,151332,151334,151337,151339],{"class":102,"line":532},[100,151333,32408],{"class":117},[100,151335,151336],{"class":258},".__balance ",[100,151338,472],{"class":471},[100,151340,151341],{"class":258}," balance\n",[100,151343,151344],{"class":102,"line":577},[100,151345,570],{"emptyLinePlaceholder":569},[100,151347,151348,151350,151353],{"class":102,"line":589},[100,151349,32364],{"class":471},[100,151351,151352],{"class":106}," get_balance",[100,151354,32370],{"class":258},[100,151356,151357,151359,151361],{"class":102,"line":595},[100,151358,16333],{"class":471},[100,151360,40427],{"class":117},[100,151362,151363],{"class":258},".__balance\n",[100,151365,151366],{"class":102,"line":601},[100,151367,570],{"emptyLinePlaceholder":569},[100,151369,151370,151372,151375],{"class":102,"line":606},[100,151371,32364],{"class":471},[100,151373,151374],{"class":106}," deposit",[100,151376,151377],{"class":258},"(self, money):\n",[100,151379,151380,151382,151385,151387,151389],{"class":102,"line":612},[100,151381,4106],{"class":471},[100,151383,151384],{"class":258}," money ",[100,151386,3220],{"class":471},[100,151388,5692],{"class":117},[100,151390,696],{"class":258},[100,151392,151393,151395,151397,151400],{"class":102,"line":618},[100,151394,36205],{"class":117},[100,151396,713],{"class":258},[100,151398,151399],{"class":110},"\"存款金额必须大于0\"",[100,151401,809],{"class":258},[100,151403,151404],{"class":102,"line":623},[100,151405,151406],{"class":471},"            return\n",[100,151408,151409,151411,151413,151415],{"class":102,"line":629},[100,151410,32408],{"class":117},[100,151412,151336],{"class":258},[100,151414,11062],{"class":471},[100,151416,151417],{"class":258}," money\n",[100,151419,151420],{"class":102,"line":635},[100,151421,570],{"emptyLinePlaceholder":569},[100,151423,151424,151426,151429],{"class":102,"line":641},[100,151425,32364],{"class":471},[100,151427,151428],{"class":106}," withdraw",[100,151430,151377],{"class":258},[100,151432,151433,151435,151437,151439,151441],{"class":102,"line":647},[100,151434,4106],{"class":471},[100,151436,151384],{"class":258},[100,151438,3220],{"class":471},[100,151440,5692],{"class":117},[100,151442,696],{"class":258},[100,151444,151445,151447,151449,151452],{"class":102,"line":653},[100,151446,36205],{"class":117},[100,151448,713],{"class":258},[100,151450,151451],{"class":110},"\"取款金额必须大于0\"",[100,151453,809],{"class":258},[100,151455,151456],{"class":102,"line":659},[100,151457,151406],{"class":471},[100,151459,151460,151462,151464,151466,151468],{"class":102,"line":665},[100,151461,4106],{"class":471},[100,151463,151384],{"class":258},[100,151465,2726],{"class":471},[100,151467,40427],{"class":117},[100,151469,151470],{"class":258},".__balance:\n",[100,151472,151473,151475,151477,151480],{"class":102,"line":670},[100,151474,36205],{"class":117},[100,151476,713],{"class":258},[100,151478,151479],{"class":110},"\"余额不足\"",[100,151481,809],{"class":258},[100,151483,151484],{"class":102,"line":675},[100,151485,151406],{"class":471},[100,151487,151488,151490,151492,151495],{"class":102,"line":699},[100,151489,32408],{"class":117},[100,151491,151336],{"class":258},[100,151493,151494],{"class":471},"-=",[100,151496,151417],{"class":258},[100,151498,151499],{"class":102,"line":708},[100,151500,570],{"emptyLinePlaceholder":569},[100,151502,151503],{"class":102,"line":722},[100,151504,570],{"emptyLinePlaceholder":569},[100,151506,151507,151510,151512,151515,151517,151519,151521],{"class":102,"line":735},[100,151508,151509],{"class":258},"account ",[100,151511,472],{"class":471},[100,151513,151514],{"class":258}," Account(",[100,151516,151130],{"class":110},[100,151518,14017],{"class":258},[100,151520,8006],{"class":117},[100,151522,809],{"class":258},[100,151524,151525,151528,151530],{"class":102,"line":754},[100,151526,151527],{"class":258},"account.deposit(",[100,151529,3343],{"class":117},[100,151531,809],{"class":258},[100,151533,151534,151537,151539],{"class":102,"line":771},[100,151535,151536],{"class":258},"account.withdraw(",[100,151538,2078],{"class":117},[100,151540,809],{"class":258},[100,151542,151543,151545],{"class":102,"line":776},[100,151544,1195],{"class":117},[100,151546,151547],{"class":258},"(account.get_balance())\n",[19,151549,151550],{},"封装的意义是避免外部随意修改内部状态。",[14,151552,151554],{"id":151553},"_118-继承","11.8 继承",[19,151556,151557],{},"继承可以让子类复用父类的属性和方法。",[73,151559,151561],{"className":249,"code":151560,"language":251,"meta":79,"style":79},"class Animal:\n    def eat(self):\n        print(\"吃东西\")\n\n\nclass Dog(Animal):\n    def bark(self):\n        print(\"汪汪\")\n\n\ndog = Dog()\ndog.eat()\ndog.bark()\n",[32,151562,151563,151572,151581,151592,151596,151600,151614,151623,151634,151638,151642,151652,151657],{"__ignoreMap":79},[100,151564,151565,151567,151570],{"class":102,"line":103},[100,151566,16275],{"class":471},[100,151568,151569],{"class":106}," Animal",[100,151571,696],{"class":258},[100,151573,151574,151576,151579],{"class":102,"line":188},[100,151575,32364],{"class":471},[100,151577,151578],{"class":106}," eat",[100,151580,32370],{"class":258},[100,151582,151583,151585,151587,151590],{"class":102,"line":199},[100,151584,34007],{"class":117},[100,151586,713],{"class":258},[100,151588,151589],{"class":110},"\"吃东西\"",[100,151591,809],{"class":258},[100,151593,151594],{"class":102,"line":532},[100,151595,570],{"emptyLinePlaceholder":569},[100,151597,151598],{"class":102,"line":577},[100,151599,570],{"emptyLinePlaceholder":569},[100,151601,151602,151604,151607,151609,151612],{"class":102,"line":589},[100,151603,16275],{"class":471},[100,151605,151606],{"class":106}," Dog",[100,151608,713],{"class":258},[100,151610,151611],{"class":106},"Animal",[100,151613,865],{"class":258},[100,151615,151616,151618,151621],{"class":102,"line":595},[100,151617,32364],{"class":471},[100,151619,151620],{"class":106}," bark",[100,151622,32370],{"class":258},[100,151624,151625,151627,151629,151632],{"class":102,"line":601},[100,151626,34007],{"class":117},[100,151628,713],{"class":258},[100,151630,151631],{"class":110},"\"汪汪\"",[100,151633,809],{"class":258},[100,151635,151636],{"class":102,"line":606},[100,151637,570],{"emptyLinePlaceholder":569},[100,151639,151640],{"class":102,"line":612},[100,151641,570],{"emptyLinePlaceholder":569},[100,151643,151644,151647,151649],{"class":102,"line":618},[100,151645,151646],{"class":258},"dog ",[100,151648,472],{"class":471},[100,151650,151651],{"class":258}," Dog()\n",[100,151653,151654],{"class":102,"line":623},[100,151655,151656],{"class":258},"dog.eat()\n",[100,151658,151659],{"class":102,"line":629},[100,151660,151661],{"class":258},"dog.bark()\n",[19,151663,151664],{},"子类可以扩展新方法，也可以重写父类方法。",[14,151666,151668],{"id":151667},"_119-方法重写","11.9 方法重写",[73,151670,151672],{"className":249,"code":151671,"language":251,"meta":79,"style":79},"class Animal:\n    def speak(self):\n        print(\"动物叫\")\n\n\nclass Dog(Animal):\n    def speak(self):\n        print(\"汪汪\")\n\n\nclass Cat(Animal):\n    def speak(self):\n        print(\"喵喵\")\n\n\ndog = Dog()\ncat = Cat()\n\ndog.speak()\ncat.speak()\n",[32,151673,151674,151682,151691,151702,151706,151710,151722,151730,151740,151744,151748,151761,151769,151780,151784,151788,151796,151806,151810,151815],{"__ignoreMap":79},[100,151675,151676,151678,151680],{"class":102,"line":103},[100,151677,16275],{"class":471},[100,151679,151569],{"class":106},[100,151681,696],{"class":258},[100,151683,151684,151686,151689],{"class":102,"line":188},[100,151685,32364],{"class":471},[100,151687,151688],{"class":106}," speak",[100,151690,32370],{"class":258},[100,151692,151693,151695,151697,151700],{"class":102,"line":199},[100,151694,34007],{"class":117},[100,151696,713],{"class":258},[100,151698,151699],{"class":110},"\"动物叫\"",[100,151701,809],{"class":258},[100,151703,151704],{"class":102,"line":532},[100,151705,570],{"emptyLinePlaceholder":569},[100,151707,151708],{"class":102,"line":577},[100,151709,570],{"emptyLinePlaceholder":569},[100,151711,151712,151714,151716,151718,151720],{"class":102,"line":589},[100,151713,16275],{"class":471},[100,151715,151606],{"class":106},[100,151717,713],{"class":258},[100,151719,151611],{"class":106},[100,151721,865],{"class":258},[100,151723,151724,151726,151728],{"class":102,"line":595},[100,151725,32364],{"class":471},[100,151727,151688],{"class":106},[100,151729,32370],{"class":258},[100,151731,151732,151734,151736,151738],{"class":102,"line":601},[100,151733,34007],{"class":117},[100,151735,713],{"class":258},[100,151737,151631],{"class":110},[100,151739,809],{"class":258},[100,151741,151742],{"class":102,"line":606},[100,151743,570],{"emptyLinePlaceholder":569},[100,151745,151746],{"class":102,"line":612},[100,151747,570],{"emptyLinePlaceholder":569},[100,151749,151750,151752,151755,151757,151759],{"class":102,"line":618},[100,151751,16275],{"class":471},[100,151753,151754],{"class":106}," Cat",[100,151756,713],{"class":258},[100,151758,151611],{"class":106},[100,151760,865],{"class":258},[100,151762,151763,151765,151767],{"class":102,"line":623},[100,151764,32364],{"class":471},[100,151766,151688],{"class":106},[100,151768,32370],{"class":258},[100,151770,151771,151773,151775,151778],{"class":102,"line":629},[100,151772,34007],{"class":117},[100,151774,713],{"class":258},[100,151776,151777],{"class":110},"\"喵喵\"",[100,151779,809],{"class":258},[100,151781,151782],{"class":102,"line":635},[100,151783,570],{"emptyLinePlaceholder":569},[100,151785,151786],{"class":102,"line":641},[100,151787,570],{"emptyLinePlaceholder":569},[100,151789,151790,151792,151794],{"class":102,"line":647},[100,151791,151646],{"class":258},[100,151793,472],{"class":471},[100,151795,151651],{"class":258},[100,151797,151798,151801,151803],{"class":102,"line":653},[100,151799,151800],{"class":258},"cat ",[100,151802,472],{"class":471},[100,151804,151805],{"class":258}," Cat()\n",[100,151807,151808],{"class":102,"line":659},[100,151809,570],{"emptyLinePlaceholder":569},[100,151811,151812],{"class":102,"line":665},[100,151813,151814],{"class":258},"dog.speak()\n",[100,151816,151817],{"class":102,"line":670},[100,151818,151819],{"class":258},"cat.speak()\n",[14,151821,151823],{"id":151822},"_1110-super","11.10 super",[19,151825,151826,151827,151830],{},"子类可以通过 ",[32,151828,151829],{},"super()"," 调用父类方法。",[73,151832,151834],{"className":249,"code":151833,"language":251,"meta":79,"style":79},"class Person:\n    def __init__(self, name):\n        self.name = name\n\n\nclass Student(Person):\n    def __init__(self, name, score):\n        super().__init__(name)\n        self.score = score\n\n\nstudent = Student(\"小明\", 95)\nprint(student.name, student.score)\n",[32,151835,151836,151844,151853,151863,151867,151871,151883,151892,151903,151913,151917,151921,151937],{"__ignoreMap":79},[100,151837,151838,151840,151842],{"class":102,"line":103},[100,151839,16275],{"class":471},[100,151841,17150],{"class":106},[100,151843,696],{"class":258},[100,151845,151846,151848,151850],{"class":102,"line":188},[100,151847,32364],{"class":471},[100,151849,32367],{"class":117},[100,151851,151852],{"class":258},"(self, name):\n",[100,151854,151855,151857,151859,151861],{"class":102,"line":199},[100,151856,32408],{"class":117},[100,151858,151032],{"class":258},[100,151860,472],{"class":471},[100,151862,151037],{"class":258},[100,151864,151865],{"class":102,"line":532},[100,151866,570],{"emptyLinePlaceholder":569},[100,151868,151869],{"class":102,"line":577},[100,151870,570],{"emptyLinePlaceholder":569},[100,151872,151873,151875,151877,151879,151881],{"class":102,"line":589},[100,151874,16275],{"class":471},[100,151876,9494],{"class":106},[100,151878,713],{"class":258},[100,151880,20627],{"class":106},[100,151882,865],{"class":258},[100,151884,151885,151887,151889],{"class":102,"line":595},[100,151886,32364],{"class":471},[100,151888,32367],{"class":117},[100,151890,151891],{"class":258},"(self, name, score):\n",[100,151893,151894,151896,151898,151900],{"class":102,"line":601},[100,151895,32380],{"class":117},[100,151897,18842],{"class":258},[100,151899,32392],{"class":117},[100,151901,151902],{"class":258},"(name)\n",[100,151904,151905,151907,151909,151911],{"class":102,"line":606},[100,151906,32408],{"class":117},[100,151908,151056],{"class":258},[100,151910,472],{"class":471},[100,151912,3211],{"class":258},[100,151914,151915],{"class":102,"line":612},[100,151916,570],{"emptyLinePlaceholder":569},[100,151918,151919],{"class":102,"line":618},[100,151920,570],{"emptyLinePlaceholder":569},[100,151922,151923,151925,151927,151929,151931,151933,151935],{"class":102,"line":623},[100,151924,150723],{"class":258},[100,151926,472],{"class":471},[100,151928,151127],{"class":258},[100,151930,151130],{"class":110},[100,151932,14017],{"class":258},[100,151934,2755],{"class":117},[100,151936,809],{"class":258},[100,151938,151939,151941],{"class":102,"line":629},[100,151940,1195],{"class":117},[100,151942,151943],{"class":258},"(student.name, student.score)\n",[14,151945,151947],{"id":151946},"_1111-多态","11.11 多态",[19,151949,151950],{},"多态指不同对象响应同一个方法，表现出不同结果。",[73,151952,151954],{"className":249,"code":151953,"language":251,"meta":79,"style":79},"class Dog:\n    def speak(self):\n        print(\"汪汪\")\n\n\nclass Cat:\n    def speak(self):\n        print(\"喵喵\")\n\n\ndef make_sound(animal):\n    animal.speak()\n\n\nmake_sound(Dog())\nmake_sound(Cat())\n",[32,151955,151956,151964,151972,151982,151986,151990,151998,152006,152016,152020,152024,152034,152039,152043,152047,152052],{"__ignoreMap":79},[100,151957,151958,151960,151962],{"class":102,"line":103},[100,151959,16275],{"class":471},[100,151961,151606],{"class":106},[100,151963,696],{"class":258},[100,151965,151966,151968,151970],{"class":102,"line":188},[100,151967,32364],{"class":471},[100,151969,151688],{"class":106},[100,151971,32370],{"class":258},[100,151973,151974,151976,151978,151980],{"class":102,"line":199},[100,151975,34007],{"class":117},[100,151977,713],{"class":258},[100,151979,151631],{"class":110},[100,151981,809],{"class":258},[100,151983,151984],{"class":102,"line":532},[100,151985,570],{"emptyLinePlaceholder":569},[100,151987,151988],{"class":102,"line":577},[100,151989,570],{"emptyLinePlaceholder":569},[100,151991,151992,151994,151996],{"class":102,"line":589},[100,151993,16275],{"class":471},[100,151995,151754],{"class":106},[100,151997,696],{"class":258},[100,151999,152000,152002,152004],{"class":102,"line":595},[100,152001,32364],{"class":471},[100,152003,151688],{"class":106},[100,152005,32370],{"class":258},[100,152007,152008,152010,152012,152014],{"class":102,"line":601},[100,152009,34007],{"class":117},[100,152011,713],{"class":258},[100,152013,151777],{"class":110},[100,152015,809],{"class":258},[100,152017,152018],{"class":102,"line":606},[100,152019,570],{"emptyLinePlaceholder":569},[100,152021,152022],{"class":102,"line":612},[100,152023,570],{"emptyLinePlaceholder":569},[100,152025,152026,152028,152031],{"class":102,"line":618},[100,152027,678],{"class":471},[100,152029,152030],{"class":106}," make_sound",[100,152032,152033],{"class":258},"(animal):\n",[100,152035,152036],{"class":102,"line":623},[100,152037,152038],{"class":258},"    animal.speak()\n",[100,152040,152041],{"class":102,"line":629},[100,152042,570],{"emptyLinePlaceholder":569},[100,152044,152045],{"class":102,"line":635},[100,152046,570],{"emptyLinePlaceholder":569},[100,152048,152049],{"class":102,"line":641},[100,152050,152051],{"class":258},"make_sound(Dog())\n",[100,152053,152054],{"class":102,"line":647},[100,152055,152056],{"class":258},"make_sound(Cat())\n",[19,152058,152059],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,152061,152063],{"id":152062},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,152065,152066],{},"实例属性属于对象：",[73,152068,152070],{"className":249,"code":152069,"language":251,"meta":79,"style":79},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[32,152071,152072,152080,152088],{"__ignoreMap":79},[100,152073,152074,152076,152078],{"class":102,"line":103},[100,152075,16275],{"class":471},[100,152077,9494],{"class":106},[100,152079,696],{"class":258},[100,152081,152082,152084,152086],{"class":102,"line":188},[100,152083,32364],{"class":471},[100,152085,32367],{"class":117},[100,152087,151852],{"class":258},[100,152089,152090,152092,152094,152096],{"class":102,"line":199},[100,152091,32408],{"class":117},[100,152093,151032],{"class":258},[100,152095,472],{"class":471},[100,152097,151037],{"class":258},[19,152099,152100],{},"类属性属于类，所有对象共享：",[73,152102,152104],{"className":249,"code":152103,"language":251,"meta":79,"style":79},"class Student:\n    school = \"黑马学校\"\n\n    def __init__(self, name):\n        self.name = name\n\n\ns1 = Student(\"小明\")\ns2 = Student(\"小红\")\n\nprint(s1.school)\nprint(s2.school)\nprint(Student.school)\n",[32,152105,152106,152114,152124,152128,152136,152146,152150,152154,152167,152181,152185,152192,152199],{"__ignoreMap":79},[100,152107,152108,152110,152112],{"class":102,"line":103},[100,152109,16275],{"class":471},[100,152111,9494],{"class":106},[100,152113,696],{"class":258},[100,152115,152116,152119,152121],{"class":102,"line":188},[100,152117,152118],{"class":258},"    school ",[100,152120,472],{"class":471},[100,152122,152123],{"class":110}," \"黑马学校\"\n",[100,152125,152126],{"class":102,"line":199},[100,152127,570],{"emptyLinePlaceholder":569},[100,152129,152130,152132,152134],{"class":102,"line":532},[100,152131,32364],{"class":471},[100,152133,32367],{"class":117},[100,152135,151852],{"class":258},[100,152137,152138,152140,152142,152144],{"class":102,"line":577},[100,152139,32408],{"class":117},[100,152141,151032],{"class":258},[100,152143,472],{"class":471},[100,152145,151037],{"class":258},[100,152147,152148],{"class":102,"line":589},[100,152149,570],{"emptyLinePlaceholder":569},[100,152151,152152],{"class":102,"line":595},[100,152153,570],{"emptyLinePlaceholder":569},[100,152155,152156,152159,152161,152163,152165],{"class":102,"line":601},[100,152157,152158],{"class":258},"s1 ",[100,152160,472],{"class":471},[100,152162,151127],{"class":258},[100,152164,151130],{"class":110},[100,152166,809],{"class":258},[100,152168,152169,152172,152174,152176,152179],{"class":102,"line":606},[100,152170,152171],{"class":258},"s2 ",[100,152173,472],{"class":471},[100,152175,151127],{"class":258},[100,152177,152178],{"class":110},"\"小红\"",[100,152180,809],{"class":258},[100,152182,152183],{"class":102,"line":612},[100,152184,570],{"emptyLinePlaceholder":569},[100,152186,152187,152189],{"class":102,"line":618},[100,152188,1195],{"class":117},[100,152190,152191],{"class":258},"(s1.school)\n",[100,152193,152194,152196],{"class":102,"line":623},[100,152195,1195],{"class":117},[100,152197,152198],{"class":258},"(s2.school)\n",[100,152200,152201,152203],{"class":102,"line":629},[100,152202,1195],{"class":117},[100,152204,152205],{"class":258},"(Student.school)\n",[19,152207,152208],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,152210,152212],{"id":152211},"_1113-类方法和静态方法","11.13 类方法和静态方法",[305,152214,152216],{"id":152215},"_11131-类方法","11.13.1 类方法",[19,152218,152219,152220,152223,152224,233],{},"类方法使用 ",[32,152221,152222],{},"@classmethod","，第一个参数通常是 ",[32,152225,152226],{},"cls",[73,152228,152230],{"className":249,"code":152229,"language":251,"meta":79,"style":79},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[32,152231,152232,152240,152248,152252,152260,152270,152280,152284,152288],{"__ignoreMap":79},[100,152233,152234,152236,152238],{"class":102,"line":103},[100,152235,16275],{"class":471},[100,152237,9494],{"class":106},[100,152239,696],{"class":258},[100,152241,152242,152244,152246],{"class":102,"line":188},[100,152243,152118],{"class":258},[100,152245,472],{"class":471},[100,152247,152123],{"class":110},[100,152249,152250],{"class":102,"line":199},[100,152251,570],{"emptyLinePlaceholder":569},[100,152253,152254,152257],{"class":102,"line":532},[100,152255,152256],{"class":106},"    @",[100,152258,152259],{"class":117},"classmethod\n",[100,152261,152262,152264,152267],{"class":102,"line":577},[100,152263,32364],{"class":471},[100,152265,152266],{"class":106}," get_school",[100,152268,152269],{"class":258},"(cls):\n",[100,152271,152272,152274,152277],{"class":102,"line":589},[100,152273,16333],{"class":471},[100,152275,152276],{"class":117}," cls",[100,152278,152279],{"class":258},".school\n",[100,152281,152282],{"class":102,"line":595},[100,152283,570],{"emptyLinePlaceholder":569},[100,152285,152286],{"class":102,"line":601},[100,152287,570],{"emptyLinePlaceholder":569},[100,152289,152290,152292],{"class":102,"line":606},[100,152291,1195],{"class":117},[100,152293,152294],{"class":258},"(Student.get_school())\n",[305,152296,152298],{"id":152297},"_11132-静态方法","11.13.2 静态方法",[19,152300,152301,152302,152305],{},"静态方法使用 ",[32,152303,152304],{},"@staticmethod","，不需要访问实例和类。",[73,152307,152309],{"className":249,"code":152308,"language":251,"meta":79,"style":79},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[32,152310,152311,152320,152327,152336,152347,152351,152355],{"__ignoreMap":79},[100,152312,152313,152315,152318],{"class":102,"line":103},[100,152314,16275],{"class":471},[100,152316,152317],{"class":106}," MathUtils",[100,152319,696],{"class":258},[100,152321,152322,152324],{"class":102,"line":188},[100,152323,152256],{"class":106},[100,152325,152326],{"class":117},"staticmethod\n",[100,152328,152329,152331,152333],{"class":102,"line":199},[100,152330,32364],{"class":471},[100,152332,6805],{"class":106},[100,152334,152335],{"class":258},"(a, b):\n",[100,152337,152338,152340,152342,152344],{"class":102,"line":532},[100,152339,16333],{"class":471},[100,152341,12451],{"class":258},[100,152343,2248],{"class":471},[100,152345,152346],{"class":258}," b\n",[100,152348,152349],{"class":102,"line":577},[100,152350,570],{"emptyLinePlaceholder":569},[100,152352,152353],{"class":102,"line":589},[100,152354,570],{"emptyLinePlaceholder":569},[100,152356,152357,152359,152362,152364,152366,152368],{"class":102,"line":595},[100,152358,1195],{"class":117},[100,152360,152361],{"class":258},"(MathUtils.add(",[100,152363,1985],{"class":117},[100,152365,14017],{"class":258},[100,152367,465],{"class":117},[100,152369,751],{"class":258},[19,152371,152372],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,152374,152376],{"id":152375},"_1114-dataclass","11.14 dataclass",[19,152378,152379,152382],{},[32,152380,152381],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[73,152384,152386],{"className":249,"code":152385,"language":251,"meta":79,"style":79},"from dataclasses import dataclass\n\n\n@dataclass\nclass Student:\n    name: str\n    age: int\n    score: float\n\n\nstudent = Student(\"小明\", 18, 95)\nprint(student)\n",[32,152387,152388,152400,152404,152408,152413,152421,152429,152437,152445,152449,152453,152473],{"__ignoreMap":79},[100,152389,152390,152392,152395,152397],{"class":102,"line":103},[100,152391,32301],{"class":471},[100,152393,152394],{"class":258}," dataclasses ",[100,152396,548],{"class":471},[100,152398,152399],{"class":258}," dataclass\n",[100,152401,152402],{"class":102,"line":188},[100,152403,570],{"emptyLinePlaceholder":569},[100,152405,152406],{"class":102,"line":199},[100,152407,570],{"emptyLinePlaceholder":569},[100,152409,152410],{"class":102,"line":532},[100,152411,152412],{"class":106},"@dataclass\n",[100,152414,152415,152417,152419],{"class":102,"line":577},[100,152416,16275],{"class":471},[100,152418,9494],{"class":106},[100,152420,696],{"class":258},[100,152422,152423,152426],{"class":102,"line":589},[100,152424,152425],{"class":258},"    name: ",[100,152427,152428],{"class":117},"str\n",[100,152430,152431,152434],{"class":102,"line":595},[100,152432,152433],{"class":258},"    age: ",[100,152435,152436],{"class":117},"int\n",[100,152438,152439,152442],{"class":102,"line":601},[100,152440,152441],{"class":258},"    score: ",[100,152443,152444],{"class":117},"float\n",[100,152446,152447],{"class":102,"line":606},[100,152448,570],{"emptyLinePlaceholder":569},[100,152450,152451],{"class":102,"line":612},[100,152452,570],{"emptyLinePlaceholder":569},[100,152454,152455,152457,152459,152461,152463,152465,152467,152469,152471],{"class":102,"line":618},[100,152456,150723],{"class":258},[100,152458,472],{"class":471},[100,152460,151127],{"class":258},[100,152462,151130],{"class":110},[100,152464,14017],{"class":258},[100,152466,2417],{"class":117},[100,152468,14017],{"class":258},[100,152470,2755],{"class":117},[100,152472,809],{"class":258},[100,152474,152475,152477],{"class":102,"line":623},[100,152476,1195],{"class":117},[100,152478,151284],{"class":258},[19,152480,152481,152482,56,152484,152487],{},"它会自动生成 ",[32,152483,32392],{},[32,152485,152486],{},"__repr__"," 等方法。适合数据模型类。",[14,152489,152491],{"id":152490},"_1115-小案例学生类","11.15 小案例：学生类",[73,152493,152495],{"className":249,"code":152494,"language":251,"meta":79,"style":79},"class Student:\n    def __init__(self, student_id, name, age, score):\n        self.student_id = student_id\n        self.name = name\n        self.age = age\n        self.score = score\n\n    def is_passed(self):\n        return self.score >= 60\n\n    def to_dict(self):\n        return {\n            \"student_id\": self.student_id,\n            \"name\": self.name,\n            \"age\": self.age,\n            \"score\": self.score,\n        }\n\n    @classmethod\n    def from_dict(cls, data):\n        return cls(\n            data[\"student_id\"],\n            data[\"name\"],\n            data[\"age\"],\n            data[\"score\"],\n        )\n\n    def __str__(self):\n        return f\"{self.student_id} {self.name} {self.age} {self.score}\"\n\n\nstudent = Student(\"001\", \"小明\", 18, 95)\nprint(student.is_passed())\nprint(student.to_dict())\n",[32,152496,152497,152505,152514,152526,152536,152546,152556,152560,152569,152582,152586,152595,152601,152613,152625,152637,152649,152653,152657,152663,152673,152682,152692,152700,152708,152717,152721,152725,152733,152769,152773,152777,152802,152809],{"__ignoreMap":79},[100,152498,152499,152501,152503],{"class":102,"line":103},[100,152500,16275],{"class":471},[100,152502,9494],{"class":106},[100,152504,696],{"class":258},[100,152506,152507,152509,152511],{"class":102,"line":188},[100,152508,32364],{"class":471},[100,152510,32367],{"class":117},[100,152512,152513],{"class":258},"(self, student_id, name, age, score):\n",[100,152515,152516,152518,152521,152523],{"class":102,"line":199},[100,152517,32408],{"class":117},[100,152519,152520],{"class":258},".student_id ",[100,152522,472],{"class":471},[100,152524,152525],{"class":258}," student_id\n",[100,152527,152528,152530,152532,152534],{"class":102,"line":532},[100,152529,32408],{"class":117},[100,152531,151032],{"class":258},[100,152533,472],{"class":471},[100,152535,151037],{"class":258},[100,152537,152538,152540,152542,152544],{"class":102,"line":577},[100,152539,32408],{"class":117},[100,152541,151044],{"class":258},[100,152543,472],{"class":471},[100,152545,151049],{"class":258},[100,152547,152548,152550,152552,152554],{"class":102,"line":589},[100,152549,32408],{"class":117},[100,152551,151056],{"class":258},[100,152553,472],{"class":471},[100,152555,3211],{"class":258},[100,152557,152558],{"class":102,"line":595},[100,152559,570],{"emptyLinePlaceholder":569},[100,152561,152562,152564,152567],{"class":102,"line":601},[100,152563,32364],{"class":471},[100,152565,152566],{"class":106}," is_passed",[100,152568,32370],{"class":258},[100,152570,152571,152573,152575,152577,152579],{"class":102,"line":606},[100,152572,16333],{"class":471},[100,152574,40427],{"class":117},[100,152576,151056],{"class":258},[100,152578,3331],{"class":471},[100,152580,152581],{"class":117}," 60\n",[100,152583,152584],{"class":102,"line":612},[100,152585,570],{"emptyLinePlaceholder":569},[100,152587,152588,152590,152593],{"class":102,"line":618},[100,152589,32364],{"class":471},[100,152591,152592],{"class":106}," to_dict",[100,152594,32370],{"class":258},[100,152596,152597,152599],{"class":102,"line":623},[100,152598,16333],{"class":471},[100,152600,17153],{"class":258},[100,152602,152603,152606,152608,152610],{"class":102,"line":629},[100,152604,152605],{"class":110},"            \"student_id\"",[100,152607,52991],{"class":258},[100,152609,32386],{"class":117},[100,152611,152612],{"class":258},".student_id,\n",[100,152614,152615,152618,152620,152622],{"class":102,"line":635},[100,152616,152617],{"class":110},"            \"name\"",[100,152619,52991],{"class":258},[100,152621,32386],{"class":117},[100,152623,152624],{"class":258},".name,\n",[100,152626,152627,152630,152632,152634],{"class":102,"line":641},[100,152628,152629],{"class":110},"            \"age\"",[100,152631,52991],{"class":258},[100,152633,32386],{"class":117},[100,152635,152636],{"class":258},".age,\n",[100,152638,152639,152642,152644,152646],{"class":102,"line":647},[100,152640,152641],{"class":110},"            \"score\"",[100,152643,52991],{"class":258},[100,152645,32386],{"class":117},[100,152647,152648],{"class":258},".score,\n",[100,152650,152651],{"class":102,"line":653},[100,152652,4138],{"class":258},[100,152654,152655],{"class":102,"line":659},[100,152656,570],{"emptyLinePlaceholder":569},[100,152658,152659,152661],{"class":102,"line":665},[100,152660,152256],{"class":106},[100,152662,152259],{"class":117},[100,152664,152665,152667,152670],{"class":102,"line":670},[100,152666,32364],{"class":471},[100,152668,152669],{"class":106}," from_dict",[100,152671,152672],{"class":258},"(cls, data):\n",[100,152674,152675,152677,152679],{"class":102,"line":675},[100,152676,16333],{"class":471},[100,152678,152276],{"class":117},[100,152680,152681],{"class":258},"(\n",[100,152683,152684,152687,152690],{"class":102,"line":699},[100,152685,152686],{"class":258},"            data[",[100,152688,152689],{"class":110},"\"student_id\"",[100,152691,89388],{"class":258},[100,152693,152694,152696,152698],{"class":102,"line":708},[100,152695,152686],{"class":258},[100,152697,64233],{"class":110},[100,152699,89388],{"class":258},[100,152701,152702,152704,152706],{"class":102,"line":722},[100,152703,152686],{"class":258},[100,152705,70678],{"class":110},[100,152707,89388],{"class":258},[100,152709,152710,152712,152715],{"class":102,"line":735},[100,152711,152686],{"class":258},[100,152713,152714],{"class":110},"\"score\"",[100,152716,89388],{"class":258},[100,152718,152719],{"class":102,"line":754},[100,152720,39680],{"class":258},[100,152722,152723],{"class":102,"line":771},[100,152724,570],{"emptyLinePlaceholder":569},[100,152726,152727,152729,152731],{"class":102,"line":776},[100,152728,32364],{"class":471},[100,152730,151223],{"class":117},[100,152732,32370],{"class":258},[100,152734,152735,152737,152739,152741,152743,152746,152748,152751,152753,152755,152757,152759,152761,152763,152765,152767],{"class":102,"line":781},[100,152736,16333],{"class":471},[100,152738,151232],{"class":471},[100,152740,2019],{"class":110},[100,152742,150694],{"class":117},[100,152744,152745],{"class":258},".student_id",[100,152747,2712],{"class":117},[100,152749,152750],{"class":117}," {self",[100,152752,81855],{"class":258},[100,152754,2712],{"class":117},[100,152756,152750],{"class":117},[100,152758,81867],{"class":258},[100,152760,2712],{"class":117},[100,152762,152750],{"class":117},[100,152764,151104],{"class":258},[100,152766,2712],{"class":117},[100,152768,26708],{"class":110},[100,152770,152771],{"class":102,"line":796},[100,152772,570],{"emptyLinePlaceholder":569},[100,152774,152775],{"class":102,"line":812},[100,152776,570],{"emptyLinePlaceholder":569},[100,152778,152779,152781,152783,152785,152788,152790,152792,152794,152796,152798,152800],{"class":102,"line":823},[100,152780,150723],{"class":258},[100,152782,472],{"class":471},[100,152784,151127],{"class":258},[100,152786,152787],{"class":110},"\"001\"",[100,152789,14017],{"class":258},[100,152791,151130],{"class":110},[100,152793,14017],{"class":258},[100,152795,2417],{"class":117},[100,152797,14017],{"class":258},[100,152799,2755],{"class":117},[100,152801,809],{"class":258},[100,152803,152804,152806],{"class":102,"line":828},[100,152805,1195],{"class":117},[100,152807,152808],{"class":258},"(student.is_passed())\n",[100,152810,152811,152813],{"class":102,"line":840},[100,152812,1195],{"class":117},[100,152814,152815],{"class":258},"(student.to_dict())\n",[19,152817,152818,218,152821,152824],{},[32,152819,152820],{},"to_dict()",[32,152822,152823],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,152826,152828],{"id":152827},"_1116-易错点","11.16 易错点",[26,152830,152831,152837,152843,152848,152851,152854],{},[29,152832,152833,152834,233],{},"类名推荐使用大驼峰，如 ",[32,152835,152836],{},"StudentManager",[29,152838,152839,152840,152842],{},"方法第一个参数必须写 ",[32,152841,32386],{},"，调用时不用传。",[29,152844,152845,152847],{},[32,152846,32392],{}," 不是普通方法，它在创建对象时自动执行。",[29,152849,152850],{},"私有属性不是绝对安全，只是约定和名称改写。",[29,152852,152853],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[29,152855,152856],{},"类中方法太多时，说明职责可能过重。",[14,152858,152860],{"id":152859},"_1117-本章练习","11.17 本章练习",[26,152862,152863,152869,152875,152880,152893],{},[29,152864,152865,152866,152868],{},"定义 ",[32,152867,150810],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[29,152870,152865,152871,152874],{},[32,152872,152873],{},"Account"," 类，实现存款、取款、查询余额。",[29,152876,152865,152877,152879],{},[32,152878,18807],{}," 类，计算圆的周长和面积。",[29,152881,152865,152882,56,152885,152888,152889,152892],{},[32,152883,152884],{},"Dog",[32,152886,152887],{},"Cat"," 类，并用同一个函数调用它们的 ",[32,152890,152891],{},"speak()"," 方法。",[29,152894,65,152895,152897,152898,233],{},[32,152896,152381],{}," 定义一个商品类 ",[32,152899,152900],{},"Product",[1677,152902,152903],{},"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":79,"searchDepth":188,"depth":188,"links":152905},[152906,152907,152908,152909,152910,152911,152913,152914,152915,152916,152917,152918,152919,152923,152924,152925,152926],{"id":150574,"depth":188,"text":150575},{"id":150757,"depth":188,"text":150758},{"id":150821,"depth":188,"text":150822},{"id":150898,"depth":188,"text":150899},{"id":150997,"depth":188,"text":150998},{"id":151161,"depth":188,"text":152912},"11.6 str",{"id":151287,"depth":188,"text":151288},{"id":151553,"depth":188,"text":151554},{"id":151667,"depth":188,"text":151668},{"id":151822,"depth":188,"text":151823},{"id":151946,"depth":188,"text":151947},{"id":152062,"depth":188,"text":152063},{"id":152211,"depth":188,"text":152212,"children":152920},[152921,152922],{"id":152215,"depth":199,"text":152216},{"id":152297,"depth":199,"text":152298},{"id":152375,"depth":188,"text":152376},{"id":152490,"depth":188,"text":152491},{"id":152827,"depth":188,"text":152828},{"id":152859,"depth":188,"text":152860},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":150566,"description":24958},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":152933,"title":152934,"body":152935,"description":24958,"extension":1708,"meta":156248,"navigation":569,"path":156249,"seo":156250,"stem":156251,"__hash__":156252},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":152936,"toc":156224},[152937,152940,152944,152947,152950,152979,152982,152990,152994,152998,153001,153024,153027,153033,153037,154483,154486,154507,154511,154514,154526,154529,154713,154716,154842,154845,154849,154853,154989,154993,155079,155083,155165,155169,155206,155210,155399,155403,155406,155636,155640,155643,155824,155827,155831,155834,155840,155843,155869,155873,155876,155890,155893,155918,155921,155935,155938,155955,155958,155975,155978,155995,155999,156025,156029,156052,156056,156059,156061,156067,156069,156090,156093,156099,156105,156109,156112,156188,156191,156195,156221],[10,152938,152934],{"id":152939},"_12-综合案例与复习路线",[14,152941,152943],{"id":152942},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,152945,152946],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,152948,152949],{},"一个合格的入门综合项目最好覆盖：",[26,152951,152952,152955,152958,152961,152964,152967,152970,152973,152976],{},[29,152953,152954],{},"输入输出。",[29,152956,152957],{},"判断和循环。",[29,152959,152960],{},"函数拆分。",[29,152962,152963],{},"列表、字典等容器。",[29,152965,152966],{},"文件持久化。",[29,152968,152969],{},"异常处理。",[29,152971,152972],{},"模块拆分。",[29,152974,152975],{},"可选：面向对象。",[29,152977,152978],{},"可选：数据可视化。",[19,152980,152981],{},"本章整理两个方向：",[26,152983,152984,152987],{},[29,152985,152986],{},"学生管理系统。",[29,152988,152989],{},"销售数据统计和可视化。",[14,152991,152993],{"id":152992},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[305,152995,152997],{"id":152996},"_1221-需求","12.2.1 需求",[19,152999,153000],{},"实现一个命令行学生管理系统：",[26,153002,153003,153006,153009,153012,153015,153018,153021],{},[29,153004,153005],{},"添加学生。",[29,153007,153008],{},"删除学生。",[29,153010,153011],{},"修改学生。",[29,153013,153014],{},"查询学生。",[29,153016,153017],{},"显示所有学生。",[29,153019,153020],{},"保存到 JSON 文件。",[29,153022,153023],{},"程序启动时自动读取 JSON 文件。",[19,153025,153026],{},"学生字段：",[73,153028,153031],{"className":153029,"code":153030,"language":78,"meta":79},[76],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[32,153032,153030],{"__ignoreMap":79},[14,153034,153036],{"id":153035},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[73,153038,153040],{"className":249,"code":153039,"language":251,"meta":79,"style":79},"import json\nfrom pathlib import Path\n\nDATA_FILE = Path(\"students.json\")\n\n\ndef load_students():\n    if not DATA_FILE.exists():\n        return []\n\n    try:\n        with open(DATA_FILE, \"r\", encoding=\"utf-8\") as file:\n            return json.load(file)\n    except json.JSONDecodeError:\n        print(\"数据文件格式错误，已使用空数据启动\")\n        return []\n\n\ndef save_students(students):\n    with open(DATA_FILE, \"w\", encoding=\"utf-8\") as file:\n        json.dump(students, file, ensure_ascii=False, indent=2)\n\n\ndef show_menu():\n    print(\"====== 学生管理系统 ======\")\n    print(\"1. 添加学生\")\n    print(\"2. 删除学生\")\n    print(\"3. 修改学生\")\n    print(\"4. 查询学生\")\n    print(\"5. 显示所有学生\")\n    print(\"0. 退出系统\")\n\n\ndef find_student(students, student_id):\n    for student in students:\n        if student[\"student_id\"] == student_id:\n            return student\n    return None\n\n\ndef input_int(prompt):\n    while True:\n        try:\n            return int(input(prompt))\n        except ValueError:\n            print(\"请输入整数\")\n\n\ndef input_float(prompt):\n    while True:\n        try:\n            return float(input(prompt))\n        except ValueError:\n            print(\"请输入数字\")\n\n\ndef add_student(students):\n    student_id = input(\"请输入学号:\")\n\n    if find_student(students, student_id):\n        print(\"学号已存在\")\n        return\n\n    name = input(\"请输入姓名:\")\n    age = input_int(\"请输入年龄:\")\n    score = input_float(\"请输入成绩:\")\n\n    students.append({\n        \"student_id\": student_id,\n        \"name\": name,\n        \"age\": age,\n        \"score\": score,\n    })\n    save_students(students)\n    print(\"添加成功\")\n\n\ndef delete_student(students):\n    student_id = input(\"请输入要删除的学号:\")\n    student = find_student(students, student_id)\n\n    if student is None:\n        print(\"学生不存在\")\n        return\n\n    students.remove(student)\n    save_students(students)\n    print(\"删除成功\")\n\n\ndef update_student(students):\n    student_id = input(\"请输入要修改的学号:\")\n    student = find_student(students, student_id)\n\n    if student is None:\n        print(\"学生不存在\")\n        return\n\n    name = input(\"请输入新姓名:\")\n    age = input_int(\"请输入新年龄:\")\n    score = input_float(\"请输入新成绩:\")\n\n    student[\"name\"] = name\n    student[\"age\"] = age\n    student[\"score\"] = score\n\n    save_students(students)\n    print(\"修改成功\")\n\n\ndef query_student(students):\n    student_id = input(\"请输入要查询的学号:\")\n    student = find_student(students, student_id)\n\n    if student is None:\n        print(\"学生不存在\")\n        return\n\n    print_student(student)\n\n\ndef print_student(student):\n    print(\n        f\"{student['student_id']}\\t\"\n        f\"{student['name']}\\t\"\n        f\"{student['age']}\\t\"\n        f\"{student['score']}\"\n    )\n\n\ndef show_all_students(students):\n    if not students:\n        print(\"暂无学生\")\n        return\n\n    print(\"学号\\t姓名\\t年龄\\t成绩\")\n    for student in students:\n        print_student(student)\n\n\ndef main():\n    students = load_students()\n\n    while True:\n        show_menu()\n        choice = input(\"请输入操作:\")\n\n        if choice == \"1\":\n            add_student(students)\n        elif choice == \"2\":\n            delete_student(students)\n        elif choice == \"3\":\n            update_student(students)\n        elif choice == \"4\":\n            query_student(students)\n        elif choice == \"5\":\n            show_all_students(students)\n        elif choice == \"0\":\n            print(\"退出系统\")\n            break\n        else:\n            print(\"输入错误\")\n\n\nif __name__ == \"__main__\":\n    main()\n",[32,153041,153042,153048,153058,153062,153076,153080,153084,153093,153105,153111,153115,153121,153152,153162,153169,153180,153186,153190,153194,153204,153235,153261,153265,153269,153278,153289,153300,153311,153322,153333,153344,153355,153359,153363,153373,153385,153401,153408,153415,153419,153423,153433,153441,153448,153461,153471,153482,153486,153490,153499,153507,153513,153525,153533,153544,153548,153552,153561,153577,153581,153588,153599,153604,153608,153624,153639,153654,153658,153663,153671,153679,153687,153695,153699,153704,153715,153719,153723,153732,153747,153757,153761,153773,153784,153788,153792,153797,153801,153812,153816,153820,153829,153844,153852,153856,153868,153878,153882,153886,153901,153914,153927,153931,153944,153956,153968,153972,153976,153987,153991,153995,154004,154019,154027,154031,154043,154053,154057,154061,154066,154070,154074,154084,154090,154112,154131,154150,154169,154174,154178,154182,154191,154199,154210,154214,154218,154244,154254,154259,154263,154267,154275,154285,154289,154297,154302,154318,154322,154336,154341,154355,154360,154373,154378,154391,154396,154409,154414,154427,154438,154442,154448,154459,154463,154467,154479],{"__ignoreMap":79},[100,153043,153044,153046],{"class":102,"line":103},[100,153045,548],{"class":471},[100,153047,148333],{"class":258},[100,153049,153050,153052,153054,153056],{"class":102,"line":188},[100,153051,32301],{"class":471},[100,153053,109553],{"class":258},[100,153055,548],{"class":471},[100,153057,109558],{"class":258},[100,153059,153060],{"class":102,"line":199},[100,153061,570],{"emptyLinePlaceholder":569},[100,153063,153064,153067,153069,153071,153074],{"class":102,"line":532},[100,153065,153066],{"class":117},"DATA_FILE",[100,153068,583],{"class":471},[100,153070,109787],{"class":258},[100,153072,153073],{"class":110},"\"students.json\"",[100,153075,809],{"class":258},[100,153077,153078],{"class":102,"line":577},[100,153079,570],{"emptyLinePlaceholder":569},[100,153081,153082],{"class":102,"line":589},[100,153083,570],{"emptyLinePlaceholder":569},[100,153085,153086,153088,153091],{"class":102,"line":595},[100,153087,678],{"class":471},[100,153089,153090],{"class":106}," load_students",[100,153092,33510],{"class":258},[100,153094,153095,153097,153099,153102],{"class":102,"line":601},[100,153096,4702],{"class":471},[100,153098,40484],{"class":471},[100,153100,153101],{"class":117}," DATA_FILE",[100,153103,153104],{"class":258},".exists():\n",[100,153106,153107,153109],{"class":102,"line":606},[100,153108,16333],{"class":471},[100,153110,53392],{"class":258},[100,153112,153113],{"class":102,"line":612},[100,153114,570],{"emptyLinePlaceholder":569},[100,153116,153117,153119],{"class":102,"line":618},[100,153118,127026],{"class":471},[100,153120,696],{"class":258},[100,153122,153123,153126,153128,153130,153132,153134,153136,153138,153140,153142,153144,153146,153148,153150],{"class":102,"line":623},[100,153124,153125],{"class":471},"        with",[100,153127,148033],{"class":117},[100,153129,713],{"class":258},[100,153131,153066],{"class":117},[100,153133,14017],{"class":258},[100,153135,148043],{"class":110},[100,153137,14017],{"class":258},[100,153139,148048],{"class":6812},[100,153141,472],{"class":471},[100,153143,148053],{"class":110},[100,153145,15295],{"class":258},[100,153147,561],{"class":471},[100,153149,149395],{"class":6812},[100,153151,696],{"class":258},[100,153153,153154,153156,153158,153160],{"class":102,"line":629},[100,153155,17313],{"class":471},[100,153157,149406],{"class":258},[100,153159,46908],{"class":6812},[100,153161,809],{"class":258},[100,153163,153164,153166],{"class":102,"line":635},[100,153165,127054],{"class":471},[100,153167,153168],{"class":258}," json.JSONDecodeError:\n",[100,153170,153171,153173,153175,153178],{"class":102,"line":641},[100,153172,34007],{"class":117},[100,153174,713],{"class":258},[100,153176,153177],{"class":110},"\"数据文件格式错误，已使用空数据启动\"",[100,153179,809],{"class":258},[100,153181,153182,153184],{"class":102,"line":647},[100,153183,16333],{"class":471},[100,153185,53392],{"class":258},[100,153187,153188],{"class":102,"line":653},[100,153189,570],{"emptyLinePlaceholder":569},[100,153191,153192],{"class":102,"line":659},[100,153193,570],{"emptyLinePlaceholder":569},[100,153195,153196,153198,153201],{"class":102,"line":665},[100,153197,678],{"class":471},[100,153199,153200],{"class":106}," save_students",[100,153202,153203],{"class":258},"(students):\n",[100,153205,153206,153208,153210,153212,153214,153216,153219,153221,153223,153225,153227,153229,153231,153233],{"class":102,"line":670},[100,153207,35733],{"class":471},[100,153209,148033],{"class":117},[100,153211,713],{"class":258},[100,153213,153066],{"class":117},[100,153215,14017],{"class":258},[100,153217,153218],{"class":110},"\"w\"",[100,153220,14017],{"class":258},[100,153222,148048],{"class":6812},[100,153224,472],{"class":471},[100,153226,148053],{"class":110},[100,153228,15295],{"class":258},[100,153230,561],{"class":471},[100,153232,149395],{"class":6812},[100,153234,696],{"class":258},[100,153236,153237,153240,153242,153244,153246,153248,153250,153252,153255,153257,153259],{"class":102,"line":675},[100,153238,153239],{"class":258},"        json.dump(students, ",[100,153241,46908],{"class":6812},[100,153243,14017],{"class":258},[100,153245,148379],{"class":6812},[100,153247,472],{"class":471},[100,153249,35542],{"class":117},[100,153251,14017],{"class":258},[100,153253,153254],{"class":6812},"indent",[100,153256,472],{"class":471},[100,153258,465],{"class":117},[100,153260,809],{"class":258},[100,153262,153263],{"class":102,"line":699},[100,153264,570],{"emptyLinePlaceholder":569},[100,153266,153267],{"class":102,"line":708},[100,153268,570],{"emptyLinePlaceholder":569},[100,153270,153271,153273,153276],{"class":102,"line":722},[100,153272,678],{"class":471},[100,153274,153275],{"class":106}," show_menu",[100,153277,33510],{"class":258},[100,153279,153280,153282,153284,153287],{"class":102,"line":735},[100,153281,702],{"class":117},[100,153283,713],{"class":258},[100,153285,153286],{"class":110},"\"====== 学生管理系统 ======\"",[100,153288,809],{"class":258},[100,153290,153291,153293,153295,153298],{"class":102,"line":754},[100,153292,702],{"class":117},[100,153294,713],{"class":258},[100,153296,153297],{"class":110},"\"1. 添加学生\"",[100,153299,809],{"class":258},[100,153301,153302,153304,153306,153309],{"class":102,"line":771},[100,153303,702],{"class":117},[100,153305,713],{"class":258},[100,153307,153308],{"class":110},"\"2. 删除学生\"",[100,153310,809],{"class":258},[100,153312,153313,153315,153317,153320],{"class":102,"line":776},[100,153314,702],{"class":117},[100,153316,713],{"class":258},[100,153318,153319],{"class":110},"\"3. 修改学生\"",[100,153321,809],{"class":258},[100,153323,153324,153326,153328,153331],{"class":102,"line":781},[100,153325,702],{"class":117},[100,153327,713],{"class":258},[100,153329,153330],{"class":110},"\"4. 查询学生\"",[100,153332,809],{"class":258},[100,153334,153335,153337,153339,153342],{"class":102,"line":796},[100,153336,702],{"class":117},[100,153338,713],{"class":258},[100,153340,153341],{"class":110},"\"5. 显示所有学生\"",[100,153343,809],{"class":258},[100,153345,153346,153348,153350,153353],{"class":102,"line":812},[100,153347,702],{"class":117},[100,153349,713],{"class":258},[100,153351,153352],{"class":110},"\"0. 退出系统\"",[100,153354,809],{"class":258},[100,153356,153357],{"class":102,"line":823},[100,153358,570],{"emptyLinePlaceholder":569},[100,153360,153361],{"class":102,"line":828},[100,153362,570],{"emptyLinePlaceholder":569},[100,153364,153365,153367,153370],{"class":102,"line":840},[100,153366,678],{"class":471},[100,153368,153369],{"class":106}," find_student",[100,153371,153372],{"class":258},"(students, student_id):\n",[100,153374,153375,153377,153380,153382],{"class":102,"line":845},[100,153376,848],{"class":471},[100,153378,153379],{"class":258}," student ",[100,153381,854],{"class":471},[100,153383,153384],{"class":258}," students:\n",[100,153386,153387,153389,153392,153394,153396,153398],{"class":102,"line":868},[100,153388,4106],{"class":471},[100,153390,153391],{"class":258}," student[",[100,153393,152689],{"class":110},[100,153395,468],{"class":258},[100,153397,4551],{"class":471},[100,153399,153400],{"class":258}," student_id:\n",[100,153402,153403,153405],{"class":102,"line":874},[100,153404,17313],{"class":471},[100,153406,153407],{"class":258}," student\n",[100,153409,153410,153412],{"class":102,"line":879},[100,153411,5689],{"class":471},[100,153413,153414],{"class":117}," None\n",[100,153416,153417],{"class":102,"line":889},[100,153418,570],{"emptyLinePlaceholder":569},[100,153420,153421],{"class":102,"line":894},[100,153422,570],{"emptyLinePlaceholder":569},[100,153424,153425,153427,153430],{"class":102,"line":900},[100,153426,678],{"class":471},[100,153428,153429],{"class":106}," input_int",[100,153431,153432],{"class":258},"(prompt):\n",[100,153434,153435,153437,153439],{"class":102,"line":910},[100,153436,3862],{"class":471},[100,153438,96844],{"class":117},[100,153440,696],{"class":258},[100,153442,153443,153446],{"class":102,"line":915},[100,153444,153445],{"class":471},"        try",[100,153447,696],{"class":258},[100,153449,153450,153452,153454,153456,153458],{"class":102,"line":929},[100,153451,17313],{"class":471},[100,153453,3993],{"class":117},[100,153455,713],{"class":258},[100,153457,55375],{"class":117},[100,153459,153460],{"class":258},"(prompt))\n",[100,153462,153463,153466,153469],{"class":102,"line":935},[100,153464,153465],{"class":471},"        except",[100,153467,153468],{"class":117}," ValueError",[100,153470,696],{"class":258},[100,153472,153473,153475,153477,153480],{"class":102,"line":945},[100,153474,36205],{"class":117},[100,153476,713],{"class":258},[100,153478,153479],{"class":110},"\"请输入整数\"",[100,153481,809],{"class":258},[100,153483,153484],{"class":102,"line":950},[100,153485,570],{"emptyLinePlaceholder":569},[100,153487,153488],{"class":102,"line":955},[100,153489,570],{"emptyLinePlaceholder":569},[100,153491,153492,153494,153497],{"class":102,"line":972},[100,153493,678],{"class":471},[100,153495,153496],{"class":106}," input_float",[100,153498,153432],{"class":258},[100,153500,153501,153503,153505],{"class":102,"line":11370},[100,153502,3862],{"class":471},[100,153504,96844],{"class":117},[100,153506,696],{"class":258},[100,153508,153509,153511],{"class":102,"line":11375},[100,153510,153445],{"class":471},[100,153512,696],{"class":258},[100,153514,153515,153517,153519,153521,153523],{"class":102,"line":11380},[100,153516,17313],{"class":471},[100,153518,111039],{"class":117},[100,153520,713],{"class":258},[100,153522,55375],{"class":117},[100,153524,153460],{"class":258},[100,153526,153527,153529,153531],{"class":102,"line":11385},[100,153528,153465],{"class":471},[100,153530,153468],{"class":117},[100,153532,696],{"class":258},[100,153534,153535,153537,153539,153542],{"class":102,"line":11394},[100,153536,36205],{"class":117},[100,153538,713],{"class":258},[100,153540,153541],{"class":110},"\"请输入数字\"",[100,153543,809],{"class":258},[100,153545,153546],{"class":102,"line":11399},[100,153547,570],{"emptyLinePlaceholder":569},[100,153549,153550],{"class":102,"line":11405},[100,153551,570],{"emptyLinePlaceholder":569},[100,153553,153554,153556,153559],{"class":102,"line":11426},[100,153555,678],{"class":471},[100,153557,153558],{"class":106}," add_student",[100,153560,153203],{"class":258},[100,153562,153563,153566,153568,153570,153572,153575],{"class":102,"line":11432},[100,153564,153565],{"class":258},"    student_id ",[100,153567,472],{"class":471},[100,153569,62159],{"class":117},[100,153571,713],{"class":258},[100,153573,153574],{"class":110},"\"请输入学号:\"",[100,153576,809],{"class":258},[100,153578,153579],{"class":102,"line":11446},[100,153580,570],{"emptyLinePlaceholder":569},[100,153582,153583,153585],{"class":102,"line":11452},[100,153584,4702],{"class":471},[100,153586,153587],{"class":258}," find_student(students, student_id):\n",[100,153589,153590,153592,153594,153597],{"class":102,"line":11479},[100,153591,34007],{"class":117},[100,153593,713],{"class":258},[100,153595,153596],{"class":110},"\"学号已存在\"",[100,153598,809],{"class":258},[100,153600,153601],{"class":102,"line":11488},[100,153602,153603],{"class":471},"        return\n",[100,153605,153606],{"class":102,"line":11494},[100,153607,570],{"emptyLinePlaceholder":569},[100,153609,153610,153613,153615,153617,153619,153622],{"class":102,"line":11502},[100,153611,153612],{"class":258},"    name ",[100,153614,472],{"class":471},[100,153616,62159],{"class":117},[100,153618,713],{"class":258},[100,153620,153621],{"class":110},"\"请输入姓名:\"",[100,153623,809],{"class":258},[100,153625,153626,153629,153631,153634,153637],{"class":102,"line":11507},[100,153627,153628],{"class":258},"    age ",[100,153630,472],{"class":471},[100,153632,153633],{"class":258}," input_int(",[100,153635,153636],{"class":110},"\"请输入年龄:\"",[100,153638,809],{"class":258},[100,153640,153641,153644,153646,153649,153652],{"class":102,"line":18185},[100,153642,153643],{"class":258},"    score ",[100,153645,472],{"class":471},[100,153647,153648],{"class":258}," input_float(",[100,153650,153651],{"class":110},"\"请输入成绩:\"",[100,153653,809],{"class":258},[100,153655,153656],{"class":102,"line":18191},[100,153657,570],{"emptyLinePlaceholder":569},[100,153659,153660],{"class":102,"line":18214},[100,153661,153662],{"class":258},"    students.append({\n",[100,153664,153665,153668],{"class":102,"line":18220},[100,153666,153667],{"class":110},"        \"student_id\"",[100,153669,153670],{"class":258},": student_id,\n",[100,153672,153673,153676],{"class":102,"line":18243},[100,153674,153675],{"class":110},"        \"name\"",[100,153677,153678],{"class":258},": name,\n",[100,153680,153681,153684],{"class":102,"line":18257},[100,153682,153683],{"class":110},"        \"age\"",[100,153685,153686],{"class":258},": age,\n",[100,153688,153689,153692],{"class":102,"line":18277},[100,153690,153691],{"class":110},"        \"score\"",[100,153693,153694],{"class":258},": score,\n",[100,153696,153697],{"class":102,"line":18283},[100,153698,35016],{"class":258},[100,153700,153701],{"class":102,"line":18294},[100,153702,153703],{"class":258},"    save_students(students)\n",[100,153705,153706,153708,153710,153713],{"class":102,"line":18317},[100,153707,702],{"class":117},[100,153709,713],{"class":258},[100,153711,153712],{"class":110},"\"添加成功\"",[100,153714,809],{"class":258},[100,153716,153717],{"class":102,"line":18339},[100,153718,570],{"emptyLinePlaceholder":569},[100,153720,153721],{"class":102,"line":18344},[100,153722,570],{"emptyLinePlaceholder":569},[100,153724,153725,153727,153730],{"class":102,"line":18350},[100,153726,678],{"class":471},[100,153728,153729],{"class":106}," delete_student",[100,153731,153203],{"class":258},[100,153733,153734,153736,153738,153740,153742,153745],{"class":102,"line":18364},[100,153735,153565],{"class":258},[100,153737,472],{"class":471},[100,153739,62159],{"class":117},[100,153741,713],{"class":258},[100,153743,153744],{"class":110},"\"请输入要删除的学号:\"",[100,153746,809],{"class":258},[100,153748,153749,153752,153754],{"class":102,"line":18377},[100,153750,153751],{"class":258},"    student ",[100,153753,472],{"class":471},[100,153755,153756],{"class":258}," find_student(students, student_id)\n",[100,153758,153759],{"class":102,"line":18382},[100,153760,570],{"emptyLinePlaceholder":569},[100,153762,153763,153765,153767,153769,153771],{"class":102,"line":18396},[100,153764,4702],{"class":471},[100,153766,153379],{"class":258},[100,153768,40481],{"class":471},[100,153770,40487],{"class":117},[100,153772,696],{"class":258},[100,153774,153775,153777,153779,153782],{"class":102,"line":18401},[100,153776,34007],{"class":117},[100,153778,713],{"class":258},[100,153780,153781],{"class":110},"\"学生不存在\"",[100,153783,809],{"class":258},[100,153785,153786],{"class":102,"line":18407},[100,153787,153603],{"class":471},[100,153789,153790],{"class":102,"line":18412},[100,153791,570],{"emptyLinePlaceholder":569},[100,153793,153794],{"class":102,"line":18426},[100,153795,153796],{"class":258},"    students.remove(student)\n",[100,153798,153799],{"class":102,"line":18431},[100,153800,153703],{"class":258},[100,153802,153803,153805,153807,153810],{"class":102,"line":18436},[100,153804,702],{"class":117},[100,153806,713],{"class":258},[100,153808,153809],{"class":110},"\"删除成功\"",[100,153811,809],{"class":258},[100,153813,153814],{"class":102,"line":18450},[100,153815,570],{"emptyLinePlaceholder":569},[100,153817,153818],{"class":102,"line":18462},[100,153819,570],{"emptyLinePlaceholder":569},[100,153821,153822,153824,153827],{"class":102,"line":18467},[100,153823,678],{"class":471},[100,153825,153826],{"class":106}," update_student",[100,153828,153203],{"class":258},[100,153830,153831,153833,153835,153837,153839,153842],{"class":102,"line":18480},[100,153832,153565],{"class":258},[100,153834,472],{"class":471},[100,153836,62159],{"class":117},[100,153838,713],{"class":258},[100,153840,153841],{"class":110},"\"请输入要修改的学号:\"",[100,153843,809],{"class":258},[100,153845,153846,153848,153850],{"class":102,"line":18485},[100,153847,153751],{"class":258},[100,153849,472],{"class":471},[100,153851,153756],{"class":258},[100,153853,153854],{"class":102,"line":18490},[100,153855,570],{"emptyLinePlaceholder":569},[100,153857,153858,153860,153862,153864,153866],{"class":102,"line":18495},[100,153859,4702],{"class":471},[100,153861,153379],{"class":258},[100,153863,40481],{"class":471},[100,153865,40487],{"class":117},[100,153867,696],{"class":258},[100,153869,153870,153872,153874,153876],{"class":102,"line":18508},[100,153871,34007],{"class":117},[100,153873,713],{"class":258},[100,153875,153781],{"class":110},[100,153877,809],{"class":258},[100,153879,153880],{"class":102,"line":18513},[100,153881,153603],{"class":471},[100,153883,153884],{"class":102,"line":34189},[100,153885,570],{"emptyLinePlaceholder":569},[100,153887,153888,153890,153892,153894,153896,153899],{"class":102,"line":34195},[100,153889,153612],{"class":258},[100,153891,472],{"class":471},[100,153893,62159],{"class":117},[100,153895,713],{"class":258},[100,153897,153898],{"class":110},"\"请输入新姓名:\"",[100,153900,809],{"class":258},[100,153902,153903,153905,153907,153909,153912],{"class":102,"line":34201},[100,153904,153628],{"class":258},[100,153906,472],{"class":471},[100,153908,153633],{"class":258},[100,153910,153911],{"class":110},"\"请输入新年龄:\"",[100,153913,809],{"class":258},[100,153915,153916,153918,153920,153922,153925],{"class":102,"line":34207},[100,153917,153643],{"class":258},[100,153919,472],{"class":471},[100,153921,153648],{"class":258},[100,153923,153924],{"class":110},"\"请输入新成绩:\"",[100,153926,809],{"class":258},[100,153928,153929],{"class":102,"line":34213},[100,153930,570],{"emptyLinePlaceholder":569},[100,153932,153933,153936,153938,153940,153942],{"class":102,"line":34224},[100,153934,153935],{"class":258},"    student[",[100,153937,64233],{"class":110},[100,153939,468],{"class":258},[100,153941,472],{"class":471},[100,153943,151037],{"class":258},[100,153945,153946,153948,153950,153952,153954],{"class":102,"line":34230},[100,153947,153935],{"class":258},[100,153949,70678],{"class":110},[100,153951,468],{"class":258},[100,153953,472],{"class":471},[100,153955,151049],{"class":258},[100,153957,153958,153960,153962,153964,153966],{"class":102,"line":34250},[100,153959,153935],{"class":258},[100,153961,152714],{"class":110},[100,153963,468],{"class":258},[100,153965,472],{"class":471},[100,153967,3211],{"class":258},[100,153969,153970],{"class":102,"line":34256},[100,153971,570],{"emptyLinePlaceholder":569},[100,153973,153974],{"class":102,"line":34267},[100,153975,153703],{"class":258},[100,153977,153978,153980,153982,153985],{"class":102,"line":34273},[100,153979,702],{"class":117},[100,153981,713],{"class":258},[100,153983,153984],{"class":110},"\"修改成功\"",[100,153986,809],{"class":258},[100,153988,153989],{"class":102,"line":34279},[100,153990,570],{"emptyLinePlaceholder":569},[100,153992,153993],{"class":102,"line":34285},[100,153994,570],{"emptyLinePlaceholder":569},[100,153996,153997,153999,154002],{"class":102,"line":34291},[100,153998,678],{"class":471},[100,154000,154001],{"class":106}," query_student",[100,154003,153203],{"class":258},[100,154005,154006,154008,154010,154012,154014,154017],{"class":102,"line":34297},[100,154007,153565],{"class":258},[100,154009,472],{"class":471},[100,154011,62159],{"class":117},[100,154013,713],{"class":258},[100,154015,154016],{"class":110},"\"请输入要查询的学号:\"",[100,154018,809],{"class":258},[100,154020,154021,154023,154025],{"class":102,"line":34303},[100,154022,153751],{"class":258},[100,154024,472],{"class":471},[100,154026,153756],{"class":258},[100,154028,154029],{"class":102,"line":34309},[100,154030,570],{"emptyLinePlaceholder":569},[100,154032,154033,154035,154037,154039,154041],{"class":102,"line":34329},[100,154034,4702],{"class":471},[100,154036,153379],{"class":258},[100,154038,40481],{"class":471},[100,154040,40487],{"class":117},[100,154042,696],{"class":258},[100,154044,154045,154047,154049,154051],{"class":102,"line":34335},[100,154046,34007],{"class":117},[100,154048,713],{"class":258},[100,154050,153781],{"class":110},[100,154052,809],{"class":258},[100,154054,154055],{"class":102,"line":34351},[100,154056,153603],{"class":471},[100,154058,154059],{"class":102,"line":34357},[100,154060,570],{"emptyLinePlaceholder":569},[100,154062,154063],{"class":102,"line":34371},[100,154064,154065],{"class":258},"    print_student(student)\n",[100,154067,154068],{"class":102,"line":34377},[100,154069,570],{"emptyLinePlaceholder":569},[100,154071,154072],{"class":102,"line":34392},[100,154073,570],{"emptyLinePlaceholder":569},[100,154075,154076,154078,154081],{"class":102,"line":34398},[100,154077,678],{"class":471},[100,154079,154080],{"class":106}," print_student",[100,154082,154083],{"class":258},"(student):\n",[100,154085,154086,154088],{"class":102,"line":34407},[100,154087,702],{"class":117},[100,154089,152681],{"class":258},[100,154091,154092,154095,154097,154099,154102,154105,154107,154110],{"class":102,"line":34413},[100,154093,154094],{"class":471},"        f",[100,154096,2019],{"class":110},[100,154098,2662],{"class":117},[100,154100,154101],{"class":258},"student[",[100,154103,154104],{"class":110},"'student_id'",[100,154106,2706],{"class":258},[100,154108,154109],{"class":117},"}\\t",[100,154111,26708],{"class":110},[100,154113,154114,154116,154118,154120,154122,154125,154127,154129],{"class":102,"line":34422},[100,154115,154094],{"class":471},[100,154117,2019],{"class":110},[100,154119,2662],{"class":117},[100,154121,154101],{"class":258},[100,154123,154124],{"class":110},"'name'",[100,154126,2706],{"class":258},[100,154128,154109],{"class":117},[100,154130,26708],{"class":110},[100,154132,154133,154135,154137,154139,154141,154144,154146,154148],{"class":102,"line":34428},[100,154134,154094],{"class":471},[100,154136,2019],{"class":110},[100,154138,2662],{"class":117},[100,154140,154101],{"class":258},[100,154142,154143],{"class":110},"'age'",[100,154145,2706],{"class":258},[100,154147,154109],{"class":117},[100,154149,26708],{"class":110},[100,154151,154152,154154,154156,154158,154160,154163,154165,154167],{"class":102,"line":34434},[100,154153,154094],{"class":471},[100,154155,2019],{"class":110},[100,154157,2662],{"class":117},[100,154159,154101],{"class":258},[100,154161,154162],{"class":110},"'score'",[100,154164,2706],{"class":258},[100,154166,2712],{"class":117},[100,154168,26708],{"class":110},[100,154170,154171],{"class":102,"line":34443},[100,154172,154173],{"class":258},"    )\n",[100,154175,154176],{"class":102,"line":34449},[100,154177,570],{"emptyLinePlaceholder":569},[100,154179,154180],{"class":102,"line":34460},[100,154181,570],{"emptyLinePlaceholder":569},[100,154183,154184,154186,154189],{"class":102,"line":34466},[100,154185,678],{"class":471},[100,154187,154188],{"class":106}," show_all_students",[100,154190,153203],{"class":258},[100,154192,154193,154195,154197],{"class":102,"line":34485},[100,154194,4702],{"class":471},[100,154196,40484],{"class":471},[100,154198,153384],{"class":258},[100,154200,154201,154203,154205,154208],{"class":102,"line":34491},[100,154202,34007],{"class":117},[100,154204,713],{"class":258},[100,154206,154207],{"class":110},"\"暂无学生\"",[100,154209,809],{"class":258},[100,154211,154212],{"class":102,"line":34502},[100,154213,153603],{"class":471},[100,154215,154216],{"class":102,"line":34508},[100,154217,570],{"emptyLinePlaceholder":569},[100,154219,154220,154222,154224,154227,154229,154232,154234,154237,154239,154242],{"class":102,"line":34528},[100,154221,702],{"class":117},[100,154223,713],{"class":258},[100,154225,154226],{"class":110},"\"学号",[100,154228,2867],{"class":117},[100,154230,154231],{"class":110},"姓名",[100,154233,2867],{"class":117},[100,154235,154236],{"class":110},"年龄",[100,154238,2867],{"class":117},[100,154240,154241],{"class":110},"成绩\"",[100,154243,809],{"class":258},[100,154245,154246,154248,154250,154252],{"class":102,"line":34544},[100,154247,848],{"class":471},[100,154249,153379],{"class":258},[100,154251,854],{"class":471},[100,154253,153384],{"class":258},[100,154255,154256],{"class":102,"line":34550},[100,154257,154258],{"class":258},"        print_student(student)\n",[100,154260,154261],{"class":102,"line":34564},[100,154262,570],{"emptyLinePlaceholder":569},[100,154264,154265],{"class":102,"line":34570},[100,154266,570],{"emptyLinePlaceholder":569},[100,154268,154269,154271,154273],{"class":102,"line":34576},[100,154270,678],{"class":471},[100,154272,786],{"class":106},[100,154274,33510],{"class":258},[100,154276,154277,154280,154282],{"class":102,"line":34587},[100,154278,154279],{"class":258},"    students ",[100,154281,472],{"class":471},[100,154283,154284],{"class":258}," load_students()\n",[100,154286,154287],{"class":102,"line":34593},[100,154288,570],{"emptyLinePlaceholder":569},[100,154290,154291,154293,154295],{"class":102,"line":34599},[100,154292,3862],{"class":471},[100,154294,96844],{"class":117},[100,154296,696],{"class":258},[100,154298,154299],{"class":102,"line":34609},[100,154300,154301],{"class":258},"        show_menu()\n",[100,154303,154304,154307,154309,154311,154313,154316],{"class":102,"line":34615},[100,154305,154306],{"class":258},"        choice ",[100,154308,472],{"class":471},[100,154310,62159],{"class":117},[100,154312,713],{"class":258},[100,154314,154315],{"class":110},"\"请输入操作:\"",[100,154317,809],{"class":258},[100,154319,154320],{"class":102,"line":34626},[100,154321,570],{"emptyLinePlaceholder":569},[100,154323,154324,154326,154329,154331,154334],{"class":102,"line":34632},[100,154325,4106],{"class":471},[100,154327,154328],{"class":258}," choice ",[100,154330,4551],{"class":471},[100,154332,154333],{"class":110}," \"1\"",[100,154335,696],{"class":258},[100,154337,154338],{"class":102,"line":34642},[100,154339,154340],{"class":258},"            add_student(students)\n",[100,154342,154343,154346,154348,154350,154353],{"class":102,"line":34647},[100,154344,154345],{"class":471},"        elif",[100,154347,154328],{"class":258},[100,154349,4551],{"class":471},[100,154351,154352],{"class":110}," \"2\"",[100,154354,696],{"class":258},[100,154356,154357],{"class":102,"line":34653},[100,154358,154359],{"class":258},"            delete_student(students)\n",[100,154361,154362,154364,154366,154368,154371],{"class":102,"line":34702},[100,154363,154345],{"class":471},[100,154365,154328],{"class":258},[100,154367,4551],{"class":471},[100,154369,154370],{"class":110}," \"3\"",[100,154372,696],{"class":258},[100,154374,154375],{"class":102,"line":34749},[100,154376,154377],{"class":258},"            update_student(students)\n",[100,154379,154380,154382,154384,154386,154389],{"class":102,"line":34754},[100,154381,154345],{"class":471},[100,154383,154328],{"class":258},[100,154385,4551],{"class":471},[100,154387,154388],{"class":110}," \"4\"",[100,154390,696],{"class":258},[100,154392,154393],{"class":102,"line":34760},[100,154394,154395],{"class":258},"            query_student(students)\n",[100,154397,154398,154400,154402,154404,154407],{"class":102,"line":34779},[100,154399,154345],{"class":471},[100,154401,154328],{"class":258},[100,154403,4551],{"class":471},[100,154405,154406],{"class":110}," \"5\"",[100,154408,696],{"class":258},[100,154410,154411],{"class":102,"line":34785},[100,154412,154413],{"class":258},"            show_all_students(students)\n",[100,154415,154416,154418,154420,154422,154425],{"class":102,"line":34805},[100,154417,154345],{"class":471},[100,154419,154328],{"class":258},[100,154421,4551],{"class":471},[100,154423,154424],{"class":110}," \"0\"",[100,154426,696],{"class":258},[100,154428,154429,154431,154433,154436],{"class":102,"line":34811},[100,154430,36205],{"class":117},[100,154432,713],{"class":258},[100,154434,154435],{"class":110},"\"退出系统\"",[100,154437,809],{"class":258},[100,154439,154440],{"class":102,"line":34817},[100,154441,116340],{"class":471},[100,154443,154444,154446],{"class":102,"line":34827},[100,154445,4143],{"class":471},[100,154447,696],{"class":258},[100,154449,154450,154452,154454,154457],{"class":102,"line":34832},[100,154451,36205],{"class":117},[100,154453,713],{"class":258},[100,154455,154456],{"class":110},"\"输入错误\"",[100,154458,809],{"class":258},[100,154460,154461],{"class":102,"line":34838},[100,154462,570],{"emptyLinePlaceholder":569},[100,154464,154465],{"class":102,"line":34854},[100,154466,570],{"emptyLinePlaceholder":569},[100,154468,154469,154471,154473,154475,154477],{"class":102,"line":34899},[100,154470,958],{"class":471},[100,154472,961],{"class":117},[100,154474,964],{"class":471},[100,154476,967],{"class":110},[100,154478,696],{"class":258},[100,154480,154481],{"class":102,"line":34905},[100,154482,975],{"class":258},[19,154484,154485],{},"这个项目串联了：",[26,154487,154488,154491,154494,154497,154500,154502],{},[29,154489,154490],{},"菜单循环。",[29,154492,154493],{},"函数封装。",[29,154495,154496],{},"列表字典。",[29,154498,154499],{},"JSON 读写。",[29,154501,152969],{},[29,154503,154504,233],{},[32,154505,154506],{},"if __name__ == \"__main__\"",[14,154508,154510],{"id":154509},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,154512,154513],{},"可以进一步拆成两个类：",[26,154515,154516,154521],{},[29,154517,154518,154520],{},[32,154519,150810],{},"：表示单个学生。",[29,154522,154523,154525],{},[32,154524,152836],{},"：负责学生增删改查和文件保存。",[19,154527,154528],{},"示意代码：",[73,154530,154532],{"className":249,"code":154531,"language":251,"meta":79,"style":79},"from dataclasses import dataclass\n\n\n@dataclass\nclass Student:\n    student_id: str\n    name: str\n    age: int\n    score: float\n\n    def to_dict(self):\n        return {\n            \"student_id\": self.student_id,\n            \"name\": self.name,\n            \"age\": self.age,\n            \"score\": self.score,\n        }\n\n    @classmethod\n    def from_dict(cls, data):\n        return cls(\n            data[\"student_id\"],\n            data[\"name\"],\n            data[\"age\"],\n            data[\"score\"],\n        )\n",[32,154533,154534,154544,154548,154552,154556,154564,154571,154577,154583,154589,154593,154601,154607,154617,154627,154637,154647,154651,154655,154661,154669,154677,154685,154693,154701,154709],{"__ignoreMap":79},[100,154535,154536,154538,154540,154542],{"class":102,"line":103},[100,154537,32301],{"class":471},[100,154539,152394],{"class":258},[100,154541,548],{"class":471},[100,154543,152399],{"class":258},[100,154545,154546],{"class":102,"line":188},[100,154547,570],{"emptyLinePlaceholder":569},[100,154549,154550],{"class":102,"line":199},[100,154551,570],{"emptyLinePlaceholder":569},[100,154553,154554],{"class":102,"line":532},[100,154555,152412],{"class":106},[100,154557,154558,154560,154562],{"class":102,"line":577},[100,154559,16275],{"class":471},[100,154561,9494],{"class":106},[100,154563,696],{"class":258},[100,154565,154566,154569],{"class":102,"line":589},[100,154567,154568],{"class":258},"    student_id: ",[100,154570,152428],{"class":117},[100,154572,154573,154575],{"class":102,"line":595},[100,154574,152425],{"class":258},[100,154576,152428],{"class":117},[100,154578,154579,154581],{"class":102,"line":601},[100,154580,152433],{"class":258},[100,154582,152436],{"class":117},[100,154584,154585,154587],{"class":102,"line":606},[100,154586,152441],{"class":258},[100,154588,152444],{"class":117},[100,154590,154591],{"class":102,"line":612},[100,154592,570],{"emptyLinePlaceholder":569},[100,154594,154595,154597,154599],{"class":102,"line":618},[100,154596,32364],{"class":471},[100,154598,152592],{"class":106},[100,154600,32370],{"class":258},[100,154602,154603,154605],{"class":102,"line":623},[100,154604,16333],{"class":471},[100,154606,17153],{"class":258},[100,154608,154609,154611,154613,154615],{"class":102,"line":629},[100,154610,152605],{"class":110},[100,154612,52991],{"class":258},[100,154614,32386],{"class":117},[100,154616,152612],{"class":258},[100,154618,154619,154621,154623,154625],{"class":102,"line":635},[100,154620,152617],{"class":110},[100,154622,52991],{"class":258},[100,154624,32386],{"class":117},[100,154626,152624],{"class":258},[100,154628,154629,154631,154633,154635],{"class":102,"line":641},[100,154630,152629],{"class":110},[100,154632,52991],{"class":258},[100,154634,32386],{"class":117},[100,154636,152636],{"class":258},[100,154638,154639,154641,154643,154645],{"class":102,"line":647},[100,154640,152641],{"class":110},[100,154642,52991],{"class":258},[100,154644,32386],{"class":117},[100,154646,152648],{"class":258},[100,154648,154649],{"class":102,"line":653},[100,154650,4138],{"class":258},[100,154652,154653],{"class":102,"line":659},[100,154654,570],{"emptyLinePlaceholder":569},[100,154656,154657,154659],{"class":102,"line":665},[100,154658,152256],{"class":106},[100,154660,152259],{"class":117},[100,154662,154663,154665,154667],{"class":102,"line":670},[100,154664,32364],{"class":471},[100,154666,152669],{"class":106},[100,154668,152672],{"class":258},[100,154670,154671,154673,154675],{"class":102,"line":675},[100,154672,16333],{"class":471},[100,154674,152276],{"class":117},[100,154676,152681],{"class":258},[100,154678,154679,154681,154683],{"class":102,"line":699},[100,154680,152686],{"class":258},[100,154682,152689],{"class":110},[100,154684,89388],{"class":258},[100,154686,154687,154689,154691],{"class":102,"line":708},[100,154688,152686],{"class":258},[100,154690,64233],{"class":110},[100,154692,89388],{"class":258},[100,154694,154695,154697,154699],{"class":102,"line":722},[100,154696,152686],{"class":258},[100,154698,70678],{"class":110},[100,154700,89388],{"class":258},[100,154702,154703,154705,154707],{"class":102,"line":735},[100,154704,152686],{"class":258},[100,154706,152714],{"class":110},[100,154708,89388],{"class":258},[100,154710,154711],{"class":102,"line":754},[100,154712,39680],{"class":258},[19,154714,154715],{},"管理器示意：",[73,154717,154719],{"className":249,"code":154718,"language":251,"meta":79,"style":79},"class StudentManager:\n    def __init__(self):\n        self.students = []\n\n    def find_by_id(self, student_id):\n        for student in self.students:\n            if student.student_id == student_id:\n                return student\n        return None\n\n    def add(self, student):\n        if self.find_by_id(student.student_id):\n            return False\n        self.students.append(student)\n        return True\n",[32,154720,154721,154730,154738,154749,154753,154763,154776,154787,154794,154800,154804,154813,154822,154828,154835],{"__ignoreMap":79},[100,154722,154723,154725,154728],{"class":102,"line":103},[100,154724,16275],{"class":471},[100,154726,154727],{"class":106}," StudentManager",[100,154729,696],{"class":258},[100,154731,154732,154734,154736],{"class":102,"line":188},[100,154733,32364],{"class":471},[100,154735,32367],{"class":117},[100,154737,32370],{"class":258},[100,154739,154740,154742,154745,154747],{"class":102,"line":199},[100,154741,32408],{"class":117},[100,154743,154744],{"class":258},".students ",[100,154746,472],{"class":471},[100,154748,53392],{"class":258},[100,154750,154751],{"class":102,"line":532},[100,154752,570],{"emptyLinePlaceholder":569},[100,154754,154755,154757,154760],{"class":102,"line":577},[100,154756,32364],{"class":471},[100,154758,154759],{"class":106}," find_by_id",[100,154761,154762],{"class":258},"(self, student_id):\n",[100,154764,154765,154767,154769,154771,154773],{"class":102,"line":589},[100,154766,5003],{"class":471},[100,154768,153379],{"class":258},[100,154770,854],{"class":471},[100,154772,40427],{"class":117},[100,154774,154775],{"class":258},".students:\n",[100,154777,154778,154780,154783,154785],{"class":102,"line":595},[100,154779,6240],{"class":471},[100,154781,154782],{"class":258}," student.student_id ",[100,154784,4551],{"class":471},[100,154786,153400],{"class":258},[100,154788,154789,154792],{"class":102,"line":601},[100,154790,154791],{"class":471},"                return",[100,154793,153407],{"class":258},[100,154795,154796,154798],{"class":102,"line":606},[100,154797,16333],{"class":471},[100,154799,153414],{"class":117},[100,154801,154802],{"class":102,"line":612},[100,154803,570],{"emptyLinePlaceholder":569},[100,154805,154806,154808,154810],{"class":102,"line":618},[100,154807,32364],{"class":471},[100,154809,6805],{"class":106},[100,154811,154812],{"class":258},"(self, student):\n",[100,154814,154815,154817,154819],{"class":102,"line":623},[100,154816,4106],{"class":471},[100,154818,40427],{"class":117},[100,154820,154821],{"class":258},".find_by_id(student.student_id):\n",[100,154823,154824,154826],{"class":102,"line":629},[100,154825,17313],{"class":471},[100,154827,127049],{"class":117},[100,154829,154830,154832],{"class":102,"line":635},[100,154831,32408],{"class":117},[100,154833,154834],{"class":258},".students.append(student)\n",[100,154836,154837,154839],{"class":102,"line":641},[100,154838,16333],{"class":471},[100,154840,154841],{"class":117}," True\n",[19,154843,154844],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,154846,154848],{"id":154847},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[305,154850,154852],{"id":154851},"_1251-数据结构","12.5.1 数据结构",[73,154854,154856],{"className":249,"code":154855,"language":251,"meta":79,"style":79},"sales = [\n    {\"date\": \"2024-10-01\", \"category\": \"手机\", \"amount\": 12000},\n    {\"date\": \"2024-10-01\", \"category\": \"电脑\", \"amount\": 18000},\n    {\"date\": \"2024-10-02\", \"category\": \"手机\", \"amount\": 15000},\n    {\"date\": \"2024-10-02\", \"category\": \"电脑\", \"amount\": 16000},\n]\n",[32,154857,154858,154866,154897,154927,154956,154985],{"__ignoreMap":79},[100,154859,154860,154862,154864],{"class":102,"line":103},[100,154861,149707],{"class":258},[100,154863,472],{"class":471},[100,154865,57001],{"class":258},[100,154867,154868,154870,154872,154874,154876,154878,154881,154883,154886,154888,154890,154892,154895],{"class":102,"line":188},[100,154869,149627],{"class":258},[100,154871,149239],{"class":110},[100,154873,52991],{"class":258},[100,154875,149850],{"class":110},[100,154877,14017],{"class":258},[100,154879,154880],{"class":110},"\"category\"",[100,154882,52991],{"class":258},[100,154884,154885],{"class":110},"\"手机\"",[100,154887,14017],{"class":258},[100,154889,85636],{"class":110},[100,154891,52991],{"class":258},[100,154893,154894],{"class":117},"12000",[100,154896,6528],{"class":258},[100,154898,154899,154901,154903,154905,154907,154909,154911,154913,154916,154918,154920,154922,154925],{"class":102,"line":199},[100,154900,149627],{"class":258},[100,154902,149239],{"class":110},[100,154904,52991],{"class":258},[100,154906,149850],{"class":110},[100,154908,14017],{"class":258},[100,154910,154880],{"class":110},[100,154912,52991],{"class":258},[100,154914,154915],{"class":110},"\"电脑\"",[100,154917,14017],{"class":258},[100,154919,85636],{"class":110},[100,154921,52991],{"class":258},[100,154923,154924],{"class":117},"18000",[100,154926,6528],{"class":258},[100,154928,154929,154931,154933,154935,154937,154939,154941,154943,154945,154947,154949,154951,154954],{"class":102,"line":532},[100,154930,149627],{"class":258},[100,154932,149239],{"class":110},[100,154934,52991],{"class":258},[100,154936,149871],{"class":110},[100,154938,14017],{"class":258},[100,154940,154880],{"class":110},[100,154942,52991],{"class":258},[100,154944,154885],{"class":110},[100,154946,14017],{"class":258},[100,154948,85636],{"class":110},[100,154950,52991],{"class":258},[100,154952,154953],{"class":117},"15000",[100,154955,6528],{"class":258},[100,154957,154958,154960,154962,154964,154966,154968,154970,154972,154974,154976,154978,154980,154983],{"class":102,"line":577},[100,154959,149627],{"class":258},[100,154961,149239],{"class":110},[100,154963,52991],{"class":258},[100,154965,149871],{"class":110},[100,154967,14017],{"class":258},[100,154969,154880],{"class":110},[100,154971,52991],{"class":258},[100,154973,154915],{"class":110},[100,154975,14017],{"class":258},[100,154977,85636],{"class":110},[100,154979,52991],{"class":258},[100,154981,154982],{"class":117},"16000",[100,154984,6528],{"class":258},[100,154986,154987],{"class":102,"line":589},[100,154988,34802],{"class":258},[305,154990,154992],{"id":154991},"_1252-按日期统计","12.5.2 按日期统计",[73,154994,154996],{"className":249,"code":154995,"language":251,"meta":79,"style":79},"daily_total = {}\n\nfor item in sales:\n    date = item[\"date\"]\n    amount = item[\"amount\"]\n    daily_total[date] = daily_total.get(date, 0) + amount\n\nprint(daily_total)\n",[32,154997,154998,155007,155011,155022,155036,155049,155068,155072],{"__ignoreMap":79},[100,154999,155000,155003,155005],{"class":102,"line":103},[100,155001,155002],{"class":258},"daily_total ",[100,155004,472],{"class":471},[100,155006,89420],{"class":258},[100,155008,155009],{"class":102,"line":188},[100,155010,570],{"emptyLinePlaceholder":569},[100,155012,155013,155015,155017,155019],{"class":102,"line":199},[100,155014,1051],{"class":471},[100,155016,149451],{"class":258},[100,155018,854],{"class":471},[100,155020,155021],{"class":258}," sales:\n",[100,155023,155024,155027,155029,155032,155034],{"class":102,"line":532},[100,155025,155026],{"class":258},"    date ",[100,155028,472],{"class":471},[100,155030,155031],{"class":258}," item[",[100,155033,149239],{"class":110},[100,155035,34802],{"class":258},[100,155037,155038,155041,155043,155045,155047],{"class":102,"line":577},[100,155039,155040],{"class":258},"    amount ",[100,155042,472],{"class":471},[100,155044,155031],{"class":258},[100,155046,85636],{"class":110},[100,155048,34802],{"class":258},[100,155050,155051,155054,155056,155059,155061,155063,155065],{"class":102,"line":589},[100,155052,155053],{"class":258},"    daily_total[date] ",[100,155055,472],{"class":471},[100,155057,155058],{"class":258}," daily_total.get(date, ",[100,155060,1366],{"class":117},[100,155062,15295],{"class":258},[100,155064,2248],{"class":471},[100,155066,155067],{"class":258}," amount\n",[100,155069,155070],{"class":102,"line":595},[100,155071,570],{"emptyLinePlaceholder":569},[100,155073,155074,155076],{"class":102,"line":601},[100,155075,1195],{"class":117},[100,155077,155078],{"class":258},"(daily_total)\n",[305,155080,155082],{"id":155081},"_1253-按类别统计","12.5.3 按类别统计",[73,155084,155086],{"className":249,"code":155085,"language":251,"meta":79,"style":79},"category_total = {}\n\nfor item in sales:\n    category = item[\"category\"]\n    amount = item[\"amount\"]\n    category_total[category] = category_total.get(category, 0) + amount\n\nprint(category_total)\n",[32,155087,155088,155097,155101,155111,155124,155136,155154,155158],{"__ignoreMap":79},[100,155089,155090,155093,155095],{"class":102,"line":103},[100,155091,155092],{"class":258},"category_total ",[100,155094,472],{"class":471},[100,155096,89420],{"class":258},[100,155098,155099],{"class":102,"line":188},[100,155100,570],{"emptyLinePlaceholder":569},[100,155102,155103,155105,155107,155109],{"class":102,"line":199},[100,155104,1051],{"class":471},[100,155106,149451],{"class":258},[100,155108,854],{"class":471},[100,155110,155021],{"class":258},[100,155112,155113,155116,155118,155120,155122],{"class":102,"line":532},[100,155114,155115],{"class":258},"    category ",[100,155117,472],{"class":471},[100,155119,155031],{"class":258},[100,155121,154880],{"class":110},[100,155123,34802],{"class":258},[100,155125,155126,155128,155130,155132,155134],{"class":102,"line":577},[100,155127,155040],{"class":258},[100,155129,472],{"class":471},[100,155131,155031],{"class":258},[100,155133,85636],{"class":110},[100,155135,34802],{"class":258},[100,155137,155138,155141,155143,155146,155148,155150,155152],{"class":102,"line":589},[100,155139,155140],{"class":258},"    category_total[category] ",[100,155142,472],{"class":471},[100,155144,155145],{"class":258}," category_total.get(category, ",[100,155147,1366],{"class":117},[100,155149,15295],{"class":258},[100,155151,2248],{"class":471},[100,155153,155067],{"class":258},[100,155155,155156],{"class":102,"line":595},[100,155157,570],{"emptyLinePlaceholder":569},[100,155159,155160,155162],{"class":102,"line":601},[100,155161,1195],{"class":117},[100,155163,155164],{"class":258},"(category_total)\n",[305,155166,155168],{"id":155167},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[73,155170,155172],{"className":249,"code":155171,"language":251,"meta":79,"style":79},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[32,155173,155174,155199],{"__ignoreMap":79},[100,155175,155176,155179,155181,155183,155186,155189,155192,155195,155197],{"class":102,"line":103},[100,155177,155178],{"class":258},"top_date, top_amount ",[100,155180,472],{"class":471},[100,155182,7547],{"class":117},[100,155184,155185],{"class":258},"(daily_total.items(), ",[100,155187,155188],{"class":6812},"key",[100,155190,155191],{"class":471},"=lambda",[100,155193,155194],{"class":258}," item: item[",[100,155196,1985],{"class":117},[100,155198,6255],{"class":258},[100,155200,155201,155203],{"class":102,"line":188},[100,155202,1195],{"class":117},[100,155204,155205],{"class":258},"(top_date, top_amount)\n",[14,155207,155209],{"id":155208},"_126-绘制柱状图","12.6 绘制柱状图",[73,155211,155213],{"className":249,"code":155212,"language":251,"meta":79,"style":79},"from pyecharts import options as opts\nfrom pyecharts.charts import Bar\n\ncategory_total = {\n    \"手机\": 27000,\n    \"电脑\": 34000,\n    \"耳机\": 8000,\n}\n\nbar = Bar()\nbar.add_xaxis(list(category_total.keys()))\nbar.add_yaxis(\"销售额\", list(category_total.values()))\nbar.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"品类销售额\"),\n    xaxis_opts=opts.AxisOpts(name=\"品类\"),\n    yaxis_opts=opts.AxisOpts(name=\"销售额\"),\n)\nbar.render(\"category_sales.html\")\n",[32,155214,155215,155229,155240,155244,155252,155264,155276,155287,155291,155295,155305,155316,155330,155335,155352,155369,155385,155389],{"__ignoreMap":79},[100,155216,155217,155219,155221,155223,155225,155227],{"class":102,"line":103},[100,155218,32301],{"class":471},[100,155220,148621],{"class":258},[100,155222,548],{"class":471},[100,155224,148626],{"class":258},[100,155226,561],{"class":471},[100,155228,148631],{"class":258},[100,155230,155231,155233,155235,155237],{"class":102,"line":188},[100,155232,32301],{"class":471},[100,155234,148480],{"class":258},[100,155236,548],{"class":471},[100,155238,155239],{"class":258}," Bar\n",[100,155241,155242],{"class":102,"line":199},[100,155243,570],{"emptyLinePlaceholder":569},[100,155245,155246,155248,155250],{"class":102,"line":532},[100,155247,155092],{"class":258},[100,155249,472],{"class":471},[100,155251,17153],{"class":258},[100,155253,155254,155257,155259,155262],{"class":102,"line":577},[100,155255,155256],{"class":110},"    \"手机\"",[100,155258,52991],{"class":258},[100,155260,155261],{"class":117},"27000",[100,155263,33024],{"class":258},[100,155265,155266,155269,155271,155274],{"class":102,"line":589},[100,155267,155268],{"class":110},"    \"电脑\"",[100,155270,52991],{"class":258},[100,155272,155273],{"class":117},"34000",[100,155275,33024],{"class":258},[100,155277,155278,155281,155283,155285],{"class":102,"line":595},[100,155279,155280],{"class":110},"    \"耳机\"",[100,155282,52991],{"class":258},[100,155284,125641],{"class":117},[100,155286,33024],{"class":258},[100,155288,155289],{"class":102,"line":601},[100,155290,3197],{"class":258},[100,155292,155293],{"class":102,"line":606},[100,155294,570],{"emptyLinePlaceholder":569},[100,155296,155297,155300,155302],{"class":102,"line":612},[100,155298,155299],{"class":258},"bar ",[100,155301,472],{"class":471},[100,155303,155304],{"class":258}," Bar()\n",[100,155306,155307,155310,155313],{"class":102,"line":618},[100,155308,155309],{"class":258},"bar.add_xaxis(",[100,155311,155312],{"class":117},"list",[100,155314,155315],{"class":258},"(category_total.keys()))\n",[100,155317,155318,155321,155323,155325,155327],{"class":102,"line":623},[100,155319,155320],{"class":258},"bar.add_yaxis(",[100,155322,148537],{"class":110},[100,155324,14017],{"class":258},[100,155326,155312],{"class":117},[100,155328,155329],{"class":258},"(category_total.values()))\n",[100,155331,155332],{"class":102,"line":629},[100,155333,155334],{"class":258},"bar.set_global_opts(\n",[100,155336,155337,155339,155341,155343,155345,155347,155350],{"class":102,"line":635},[100,155338,148715],{"class":6812},[100,155340,472],{"class":471},[100,155342,148720],{"class":258},[100,155344,52961],{"class":6812},[100,155346,472],{"class":471},[100,155348,155349],{"class":110},"\"品类销售额\"",[100,155351,39601],{"class":258},[100,155353,155354,155356,155358,155360,155362,155364,155367],{"class":102,"line":641},[100,155355,148734],{"class":6812},[100,155357,472],{"class":471},[100,155359,148739],{"class":258},[100,155361,81364],{"class":6812},[100,155363,472],{"class":471},[100,155365,155366],{"class":110},"\"品类\"",[100,155368,39601],{"class":258},[100,155370,155371,155373,155375,155377,155379,155381,155383],{"class":102,"line":647},[100,155372,148753],{"class":6812},[100,155374,472],{"class":471},[100,155376,148739],{"class":258},[100,155378,81364],{"class":6812},[100,155380,472],{"class":471},[100,155382,148537],{"class":110},[100,155384,39601],{"class":258},[100,155386,155387],{"class":102,"line":653},[100,155388,809],{"class":258},[100,155390,155391,155394,155397],{"class":102,"line":659},[100,155392,155393],{"class":258},"bar.render(",[100,155395,155396],{"class":110},"\"category_sales.html\"",[100,155398,809],{"class":258},[14,155400,155402],{"id":155401},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,155404,155405],{},"时间线适合展示不同日期、月份、年份的数据变化。",[73,155407,155409],{"className":249,"code":155408,"language":251,"meta":79,"style":79},"from pyecharts import options as opts\nfrom pyecharts.charts import Bar, Timeline\n\ndata = {\n    \"2024-10-01\": {\"手机\": 12000, \"电脑\": 18000},\n    \"2024-10-02\": {\"手机\": 15000, \"电脑\": 16000},\n    \"2024-10-03\": {\"手机\": 17000, \"电脑\": 19000},\n}\n\ntimeline = Timeline()\n\nfor date, category_data in data.items():\n    bar = Bar()\n    bar.add_xaxis(list(category_data.keys()))\n    bar.add_yaxis(\"销售额\", list(category_data.values()))\n    bar.set_global_opts(title_opts=opts.TitleOpts(title=f\"{date}销售额\"))\n    timeline.add(bar, date)\n\ntimeline.render(\"timeline_sales.html\")\n",[32,155410,155411,155425,155436,155440,155448,155472,155495,155520,155524,155528,155538,155542,155553,155562,155572,155586,155617,155622,155626],{"__ignoreMap":79},[100,155412,155413,155415,155417,155419,155421,155423],{"class":102,"line":103},[100,155414,32301],{"class":471},[100,155416,148621],{"class":258},[100,155418,548],{"class":471},[100,155420,148626],{"class":258},[100,155422,561],{"class":471},[100,155424,148631],{"class":258},[100,155426,155427,155429,155431,155433],{"class":102,"line":188},[100,155428,32301],{"class":471},[100,155430,148480],{"class":258},[100,155432,548],{"class":471},[100,155434,155435],{"class":258}," Bar, Timeline\n",[100,155437,155438],{"class":102,"line":199},[100,155439,570],{"emptyLinePlaceholder":569},[100,155441,155442,155444,155446],{"class":102,"line":532},[100,155443,1234],{"class":258},[100,155445,472],{"class":471},[100,155447,17153],{"class":258},[100,155449,155450,155453,155456,155458,155460,155462,155464,155466,155468,155470],{"class":102,"line":577},[100,155451,155452],{"class":110},"    \"2024-10-01\"",[100,155454,155455],{"class":258},": {",[100,155457,154885],{"class":110},[100,155459,52991],{"class":258},[100,155461,154894],{"class":117},[100,155463,14017],{"class":258},[100,155465,154915],{"class":110},[100,155467,52991],{"class":258},[100,155469,154924],{"class":117},[100,155471,6528],{"class":258},[100,155473,155474,155477,155479,155481,155483,155485,155487,155489,155491,155493],{"class":102,"line":589},[100,155475,155476],{"class":110},"    \"2024-10-02\"",[100,155478,155455],{"class":258},[100,155480,154885],{"class":110},[100,155482,52991],{"class":258},[100,155484,154953],{"class":117},[100,155486,14017],{"class":258},[100,155488,154915],{"class":110},[100,155490,52991],{"class":258},[100,155492,154982],{"class":117},[100,155494,6528],{"class":258},[100,155496,155497,155500,155502,155504,155506,155509,155511,155513,155515,155518],{"class":102,"line":595},[100,155498,155499],{"class":110},"    \"2024-10-03\"",[100,155501,155455],{"class":258},[100,155503,154885],{"class":110},[100,155505,52991],{"class":258},[100,155507,155508],{"class":117},"17000",[100,155510,14017],{"class":258},[100,155512,154915],{"class":110},[100,155514,52991],{"class":258},[100,155516,155517],{"class":117},"19000",[100,155519,6528],{"class":258},[100,155521,155522],{"class":102,"line":601},[100,155523,3197],{"class":258},[100,155525,155526],{"class":102,"line":606},[100,155527,570],{"emptyLinePlaceholder":569},[100,155529,155530,155533,155535],{"class":102,"line":612},[100,155531,155532],{"class":258},"timeline ",[100,155534,472],{"class":471},[100,155536,155537],{"class":258}," Timeline()\n",[100,155539,155540],{"class":102,"line":618},[100,155541,570],{"emptyLinePlaceholder":569},[100,155543,155544,155546,155549,155551],{"class":102,"line":623},[100,155545,1051],{"class":471},[100,155547,155548],{"class":258}," date, category_data ",[100,155550,854],{"class":471},[100,155552,150390],{"class":258},[100,155554,155555,155558,155560],{"class":102,"line":629},[100,155556,155557],{"class":258},"    bar ",[100,155559,472],{"class":471},[100,155561,155304],{"class":258},[100,155563,155564,155567,155569],{"class":102,"line":635},[100,155565,155566],{"class":258},"    bar.add_xaxis(",[100,155568,155312],{"class":117},[100,155570,155571],{"class":258},"(category_data.keys()))\n",[100,155573,155574,155577,155579,155581,155583],{"class":102,"line":641},[100,155575,155576],{"class":258},"    bar.add_yaxis(",[100,155578,148537],{"class":110},[100,155580,14017],{"class":258},[100,155582,155312],{"class":117},[100,155584,155585],{"class":258},"(category_data.values()))\n",[100,155587,155588,155591,155594,155596,155598,155600,155602,155604,155606,155608,155610,155612,155615],{"class":102,"line":647},[100,155589,155590],{"class":258},"    bar.set_global_opts(",[100,155592,155593],{"class":6812},"title_opts",[100,155595,472],{"class":471},[100,155597,148720],{"class":258},[100,155599,52961],{"class":6812},[100,155601,472],{"class":471},[100,155603,1830],{"class":471},[100,155605,2019],{"class":110},[100,155607,2662],{"class":117},[100,155609,75480],{"class":258},[100,155611,2712],{"class":117},[100,155613,155614],{"class":110},"销售额\"",[100,155616,751],{"class":258},[100,155618,155619],{"class":102,"line":653},[100,155620,155621],{"class":258},"    timeline.add(bar, date)\n",[100,155623,155624],{"class":102,"line":659},[100,155625,570],{"emptyLinePlaceholder":569},[100,155627,155628,155631,155634],{"class":102,"line":665},[100,155629,155630],{"class":258},"timeline.render(",[100,155632,155633],{"class":110},"\"timeline_sales.html\"",[100,155635,809],{"class":258},[14,155637,155639],{"id":155638},"_128-绘制地图","12.8 绘制地图",[19,155641,155642],{},"地图适合展示地区数据。",[73,155644,155646],{"className":249,"code":155645,"language":251,"meta":79,"style":79},"from pyecharts import options as opts\nfrom pyecharts.charts import Map\n\ndata = [\n    (\"北京\", 120),\n    (\"上海\", 150),\n    (\"广东\", 200),\n    (\"浙江\", 180),\n]\n\nmap_chart = Map()\nmap_chart.add(\"销售额\", data, \"china\")\nmap_chart.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"地区销售额\"),\n    visualmap_opts=opts.VisualMapOpts(max_=200),\n)\nmap_chart.render(\"map_sales.html\")\n",[32,155647,155648,155662,155673,155677,155685,155698,155710,155723,155736,155740,155744,155754,155769,155774,155791,155810,155814],{"__ignoreMap":79},[100,155649,155650,155652,155654,155656,155658,155660],{"class":102,"line":103},[100,155651,32301],{"class":471},[100,155653,148621],{"class":258},[100,155655,548],{"class":471},[100,155657,148626],{"class":258},[100,155659,561],{"class":471},[100,155661,148631],{"class":258},[100,155663,155664,155666,155668,155670],{"class":102,"line":188},[100,155665,32301],{"class":471},[100,155667,148480],{"class":258},[100,155669,548],{"class":471},[100,155671,155672],{"class":258}," Map\n",[100,155674,155675],{"class":102,"line":199},[100,155676,570],{"emptyLinePlaceholder":569},[100,155678,155679,155681,155683],{"class":102,"line":532},[100,155680,1234],{"class":258},[100,155682,472],{"class":471},[100,155684,57001],{"class":258},[100,155686,155687,155690,155692,155694,155696],{"class":102,"line":577},[100,155688,155689],{"class":258},"    (",[100,155691,70823],{"class":110},[100,155693,14017],{"class":258},[100,155695,2583],{"class":117},[100,155697,39601],{"class":258},[100,155699,155700,155702,155704,155706,155708],{"class":102,"line":589},[100,155701,155689],{"class":258},[100,155703,70843],{"class":110},[100,155705,14017],{"class":258},[100,155707,148554],{"class":117},[100,155709,39601],{"class":258},[100,155711,155712,155714,155717,155719,155721],{"class":102,"line":595},[100,155713,155689],{"class":258},[100,155715,155716],{"class":110},"\"广东\"",[100,155718,14017],{"class":258},[100,155720,3343],{"class":117},[100,155722,39601],{"class":258},[100,155724,155725,155727,155730,155732,155734],{"class":102,"line":601},[100,155726,155689],{"class":258},[100,155728,155729],{"class":110},"\"浙江\"",[100,155731,14017],{"class":258},[100,155733,148559],{"class":117},[100,155735,39601],{"class":258},[100,155737,155738],{"class":102,"line":606},[100,155739,34802],{"class":258},[100,155741,155742],{"class":102,"line":612},[100,155743,570],{"emptyLinePlaceholder":569},[100,155745,155746,155749,155751],{"class":102,"line":618},[100,155747,155748],{"class":258},"map_chart ",[100,155750,472],{"class":471},[100,155752,155753],{"class":258}," Map()\n",[100,155755,155756,155759,155761,155764,155767],{"class":102,"line":623},[100,155757,155758],{"class":258},"map_chart.add(",[100,155760,148537],{"class":110},[100,155762,155763],{"class":258},", data, ",[100,155765,155766],{"class":110},"\"china\"",[100,155768,809],{"class":258},[100,155770,155771],{"class":102,"line":629},[100,155772,155773],{"class":258},"map_chart.set_global_opts(\n",[100,155775,155776,155778,155780,155782,155784,155786,155789],{"class":102,"line":635},[100,155777,148715],{"class":6812},[100,155779,472],{"class":471},[100,155781,148720],{"class":258},[100,155783,52961],{"class":6812},[100,155785,472],{"class":471},[100,155787,155788],{"class":110},"\"地区销售额\"",[100,155790,39601],{"class":258},[100,155792,155793,155796,155798,155801,155804,155806,155808],{"class":102,"line":641},[100,155794,155795],{"class":6812},"    visualmap_opts",[100,155797,472],{"class":471},[100,155799,155800],{"class":258},"opts.VisualMapOpts(",[100,155802,155803],{"class":6812},"max_",[100,155805,472],{"class":471},[100,155807,3343],{"class":117},[100,155809,39601],{"class":258},[100,155811,155812],{"class":102,"line":647},[100,155813,809],{"class":258},[100,155815,155816,155819,155822],{"class":102,"line":653},[100,155817,155818],{"class":258},"map_chart.render(",[100,155820,155821],{"class":110},"\"map_sales.html\"",[100,155823,809],{"class":258},[19,155825,155826],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,155828,155830],{"id":155829},"_129-项目拆分建议","12.9 项目拆分建议",[19,155832,155833],{},"当代码超过一个文件时，可以这样组织：",[73,155835,155838],{"className":155836,"code":155837,"language":78,"meta":79},[76],"sales_project\u002F\n  main.py\n  data\u002F\n    sales.json\n  services\u002F\n    __init__.py\n    sales_service.py\n  charts\u002F\n    __init__.py\n    chart_builder.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n",[32,155839,155837],{"__ignoreMap":79},[19,155841,155842],{},"职责：",[26,155844,155845,155851,155857,155863],{},[29,155846,155847,155850],{},[32,155848,155849],{},"main.py","：程序入口。",[29,155852,155853,155856],{},[32,155854,155855],{},"file_utils.py","：读写 JSON。",[29,155858,155859,155862],{},[32,155860,155861],{},"sales_service.py","：统计销售数据。",[29,155864,155865,155868],{},[32,155866,155867],{},"chart_builder.py","：生成图表。",[14,155870,155872],{"id":155871},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,155874,155875],{},"语法基础：",[26,155877,155878,155881,155884,155887],{},[29,155879,155880],{},"会写变量、注释、输入输出。",[29,155882,155883],{},"会使用 int、float、str、bool。",[29,155885,155886],{},"会做类型转换。",[29,155888,155889],{},"会使用 f-string 格式化输出。",[19,155891,155892],{},"流程控制：",[26,155894,155895,155901,155907,155915],{},[29,155896,155897,155898,233],{},"会写 ",[32,155899,155900],{},"if elif else",[29,155902,155897,155903,218,155905,233],{},[32,155904,109905],{},[32,155906,1051],{},[29,155908,155909,155910,218,155912,233],{},"理解 ",[32,155911,3664],{},[32,155913,155914],{},"continue",[29,155916,155917],{},"能写嵌套循环。",[19,155919,155920],{},"函数：",[26,155922,155923,155926,155929,155932],{},[29,155924,155925],{},"会定义和调用函数。",[29,155927,155928],{},"理解参数和返回值。",[29,155930,155931],{},"知道局部变量和全局变量。",[29,155933,155934],{},"会使用默认参数、关键字参数、不定长参数。",[19,155936,155937],{},"容器：",[26,155939,155940,155943,155946,155949,155952],{},[29,155941,155942],{},"会使用列表增删改查。",[29,155944,155945],{},"会遍历列表、字典。",[29,155947,155948],{},"会使用切片。",[29,155950,155951],{},"会用集合去重。",[29,155953,155954],{},"会处理列表嵌套字典。",[19,155956,155957],{},"文件和模块：",[26,155959,155960,155963,155966,155969,155972],{},[29,155961,155962],{},"会读写文本文件。",[29,155964,155965],{},"会读写 JSON。",[29,155967,155968],{},"会捕获常见异常。",[29,155970,155971],{},"会导入模块和第三方包。",[29,155973,155974],{},"会创建简单包结构。",[19,155976,155977],{},"项目能力：",[26,155979,155980,155983,155986,155989,155992],{},[29,155981,155982],{},"能把代码拆成函数。",[29,155984,155985],{},"能把数据保存到文件。",[29,155987,155988],{},"能处理用户输入错误。",[29,155990,155991],{},"能写一个完整菜单程序。",[29,155993,155994],{},"能用 pyecharts 生成图表。",[14,155996,155998],{"id":155997},"_1211-推荐练习顺序","12.11 推荐练习顺序",[26,156000,156001,156004,156007,156010,156013,156016,156019,156022],{},[29,156002,156003],{},"猜数字游戏。",[29,156005,156006],{},"ATM 菜单程序。",[29,156008,156009],{},"学生成绩统计。",[29,156011,156012],{},"学生管理系统函数版。",[29,156014,156015],{},"学生管理系统文件持久化版。",[29,156017,156018],{},"学生管理系统面向对象版。",[29,156020,156021],{},"销售数据统计。",[29,156023,156024],{},"销售数据可视化。",[14,156026,156028],{"id":156027},"_1212-常见学习误区","12.12 常见学习误区",[26,156030,156031,156034,156037,156040,156043,156046,156049],{},[29,156032,156033],{},"只看视频不敲代码。",[29,156035,156036],{},"一报错就复制错误去搜，不先读报错位置。",[29,156038,156039],{},"变量名随便写，后续自己看不懂。",[29,156041,156042],{},"所有代码都写在一个文件一个函数里。",[29,156044,156045],{},"不保存练习代码，复习时没有材料。",[29,156047,156048],{},"还没掌握列表字典就急着学框架。",[29,156050,156051],{},"不会读官方文档，只依赖教程。",[14,156053,156055],{"id":156054},"_1213-如何读报错","12.13 如何读报错",[19,156057,156058],{},"报错通常从下往上看最后几行。",[19,156060,16716],{},[73,156062,156065],{"className":156063,"code":156064,"language":78,"meta":79},[76],"ValueError: invalid literal for int() with base 10: 'abc'\n",[32,156066,156064],{"__ignoreMap":79},[19,156068,26176],{},[26,156070,156071,156077,156087],{},[29,156072,156073,156074,233],{},"异常类型是 ",[32,156075,156076],{},"ValueError",[29,156078,108587,156079,156082,156083,156086],{},[32,156080,156081],{},"int()"," 无法把 ",[32,156084,156085],{},"'abc'"," 转成整数。",[29,156088,156089],{},"应该检查输入内容或增加异常处理。",[19,156091,156092],{},"再看文件名和行号：",[73,156094,156097],{"className":156095,"code":156096,"language":78,"meta":79},[76],"File \"main.py\", line 10, in \u003Cmodule>\n",[32,156098,156096],{"__ignoreMap":79},[19,156100,156101,156102,156104],{},"表示错误发生在 ",[32,156103,155849],{}," 第 10 行。",[14,156106,156108],{"id":156107},"_1214-后续学习方向","12.14 后续学习方向",[19,156110,156111],{},"Python 基础完成后，可以按兴趣选择方向：",[26,156113,156114,156126,156135,156147,156158,156167,156177],{},[29,156115,156116,156117,56,156120,56,156123,233],{},"自动化办公：",[32,156118,156119],{},"openpyxl",[32,156121,156122],{},"python-docx",[32,156124,156125],{},"pdfplumber",[29,156127,156128,156129,56,156131,56,156133,233],{},"数据分析：",[32,156130,102176],{},[32,156132,147427],{},[32,156134,147435],{},[29,156136,156137,156138,56,156141,56,156144,233],{},"Web 后端：",[32,156139,156140],{},"Flask",[32,156142,156143],{},"FastAPI",[32,156145,156146],{},"Django",[29,156148,156149,156150,56,156152,56,156155,233],{},"爬虫：",[32,156151,147412],{},[32,156153,156154],{},"BeautifulSoup",[32,156156,156157],{},"Scrapy",[29,156159,156160,156161,56,156163,156166],{},"测试开发：",[32,156162,147459],{},[32,156164,156165],{},"selenium","、接口测试。",[29,156168,156169,156170,56,156172,56,156174,233],{},"人工智能：",[32,156171,102176],{},[32,156173,147427],{},[32,156175,156176],{},"pytorch",[29,156178,156179,156180,56,156182,56,156185,233],{},"运维脚本：",[32,156181,147028],{},[32,156183,156184],{},"subprocess",[32,156186,156187],{},"paramiko",[19,156189,156190],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,156192,156194],{"id":156193},"_1215-结课练习","12.15 结课练习",[26,156196,156197,156200,156203,156206,156209,156212,156215,156218],{},[29,156198,156199],{},"完成函数版学生管理系统。",[29,156201,156202],{},"给学生管理系统增加 JSON 持久化。",[29,156204,156205],{},"给学生管理系统增加异常处理。",[29,156207,156208],{},"把学生管理系统改成面向对象版。",[29,156210,156211],{},"使用 pyecharts 绘制学生成绩柱状图。",[29,156213,156214],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[29,156216,156217],{},"按品类统计销售额并绘制柱状图。",[29,156219,156220],{},"写一份自己的 Python 学习路线图。",[1677,156222,156223],{},"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":79,"searchDepth":188,"depth":188,"links":156225},[156226,156227,156230,156231,156232,156238,156239,156240,156241,156242,156243,156244,156245,156246,156247],{"id":152942,"depth":188,"text":152943},{"id":152992,"depth":188,"text":152993,"children":156228},[156229],{"id":152996,"depth":199,"text":152997},{"id":153035,"depth":188,"text":153036},{"id":154509,"depth":188,"text":154510},{"id":154847,"depth":188,"text":154848,"children":156233},[156234,156235,156236,156237],{"id":154851,"depth":199,"text":154852},{"id":154991,"depth":199,"text":154992},{"id":155081,"depth":199,"text":155082},{"id":155167,"depth":199,"text":155168},{"id":155208,"depth":188,"text":155209},{"id":155401,"depth":188,"text":155402},{"id":155638,"depth":188,"text":155639},{"id":155829,"depth":188,"text":155830},{"id":155871,"depth":188,"text":155872},{"id":155997,"depth":188,"text":155998},{"id":156027,"depth":188,"text":156028},{"id":156054,"depth":188,"text":156055},{"id":156107,"depth":188,"text":156108},{"id":156193,"depth":188,"text":156194},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":152934,"description":24958},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":156254,"title":156255,"body":156256,"description":24958,"extension":1708,"meta":158725,"navigation":569,"path":158726,"seo":158727,"stem":158728,"__hash__":158729},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":156257,"toc":158700},[156258,156261,156265,156268,156271,156291,156294,156317,156320,156323,156345,156348,156370,156374,156377,156417,156420,156541,156545,156548,156588,156591,156615,156618,156622,156625,156639,156672,156675,156710,156713,156736,156739,156772,156775,156777,156783,156858,156861,156867,156884,156924,156928,156931,156977,156979,157017,157020,157055,157058,157093,157096,157128,157131,157150,157154,157158,157271,157273,157348,157352,157398,157401,157427,157436,157440,157443,157506,157514,157542,157546,157586,157651,157655,157658,157697,157700,157745,157748,157809,157813,157840,157843,157871,157874,157878,157882,157947,157950,157988,157991,158023,158027,158126,158130,158133,158206,158209,158257,158261,158267,158307,158310,158357,158360,158409,158413,158415,158429,158431,158612,158616,158643,158663,158670,158674,158691,158697],[10,156259,156255],{"id":156260},"_2-基础语法变量与字符串",[14,156262,156264],{"id":156263},"_21-注释","2.1 注释",[19,156266,156267],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,156269,156270],{},"单行注释：",[73,156272,156274],{"className":249,"code":156273,"language":251,"meta":79,"style":79},"# 这是单行注释\nprint(\"hello\")\n",[32,156275,156276,156281],{"__ignoreMap":79},[100,156277,156278],{"class":102,"line":103},[100,156279,156280],{"class":1836},"# 这是单行注释\n",[100,156282,156283,156285,156287,156289],{"class":102,"line":188},[100,156284,1195],{"class":117},[100,156286,713],{"class":258},[100,156288,7440],{"class":110},[100,156290,809],{"class":258},[19,156292,156293],{},"多行说明常用三引号：",[73,156295,156297],{"className":249,"code":156296,"language":251,"meta":79,"style":79},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[32,156298,156299,156303,156308,156313],{"__ignoreMap":79},[100,156300,156301],{"class":102,"line":103},[100,156302,662],{"class":110},[100,156304,156305],{"class":102,"line":188},[100,156306,156307],{"class":110},"这是多行说明。\n",[100,156309,156310],{"class":102,"line":199},[100,156311,156312],{"class":110},"常用于文件顶部说明、函数说明等。\n",[100,156314,156315],{"class":102,"line":532},[100,156316,662],{"class":110},[19,156318,156319],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,156321,156322],{},"不好：",[73,156324,156326],{"className":249,"code":156325,"language":251,"meta":79,"style":79},"# age 加 1\nage = age + 1\n",[32,156327,156328,156333],{"__ignoreMap":79},[100,156329,156330],{"class":102,"line":103},[100,156331,156332],{"class":1836},"# age 加 1\n",[100,156334,156335,156337,156339,156341,156343],{"class":102,"line":188},[100,156336,147788],{"class":258},[100,156338,472],{"class":471},[100,156340,17288],{"class":258},[100,156342,2248],{"class":471},[100,156344,57253],{"class":117},[19,156346,156347],{},"较好：",[73,156349,156351],{"className":249,"code":156350,"language":251,"meta":79,"style":79},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[32,156352,156353,156358],{"__ignoreMap":79},[100,156354,156355],{"class":102,"line":103},[100,156356,156357],{"class":1836},"# 用户过完生日后，年龄增加一岁\n",[100,156359,156360,156362,156364,156366,156368],{"class":102,"line":188},[100,156361,147788],{"class":258},[100,156363,472],{"class":471},[100,156365,17288],{"class":258},[100,156367,2248],{"class":471},[100,156369,57253],{"class":117},[14,156371,156373],{"id":156372},"_22-字面量","2.2 字面量",[19,156375,156376],{},"字面量就是代码中直接写出来的数据。",[73,156378,156380],{"className":249,"code":156379,"language":251,"meta":79,"style":79},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[32,156381,156382,156389,156396,156403,156410],{"__ignoreMap":79},[100,156383,156384,156386],{"class":102,"line":103},[100,156385,2078],{"class":117},[100,156387,156388],{"class":1836},"          # 整数\n",[100,156390,156391,156393],{"class":102,"line":188},[100,156392,1827],{"class":117},[100,156394,156395],{"class":1836},"         # 小数\n",[100,156397,156398,156400],{"class":102,"line":199},[100,156399,7440],{"class":110},[100,156401,156402],{"class":1836},"      # 字符串\n",[100,156404,156405,156407],{"class":102,"line":532},[100,156406,33034],{"class":117},[100,156408,156409],{"class":1836},"         # 布尔值\n",[100,156411,156412,156414],{"class":102,"line":577},[100,156413,693],{"class":117},[100,156415,156416],{"class":1836},"         # 空值\n",[19,156418,156419],{},"常见字面量类型：",[319,156421,156422,156432],{},[322,156423,156424],{},[325,156425,156426,156428,156430],{},[328,156427,25318],{},[328,156429,29064],{},[328,156431,27444],{},[339,156433,156434,156445,156456,156467,156479,156491,156503,156516,156528],{},[325,156435,156436,156438,156442],{},[344,156437,1784],{},[344,156439,156440],{},[32,156441,2078],{},[344,156443,156444],{},"整数",[325,156446,156447,156449,156453],{},[344,156448,1819],{},[344,156450,156451],{},[32,156452,1827],{},[344,156454,156455],{},"浮点数",[325,156457,156458,156460,156464],{},[344,156459,687],{},[344,156461,156462],{},[32,156463,7440],{},[344,156465,156466],{},"字符串",[325,156468,156469,156471,156477],{},[344,156470,2987],{},[344,156472,156473,56,156475],{},[32,156474,33034],{},[32,156476,35542],{},[344,156478,67569],{},[325,156480,156481,156484,156488],{},[344,156482,156483],{},"NoneType",[344,156485,156486],{},[32,156487,693],{},[344,156489,156490],{},"空值",[325,156492,156493,156495,156500],{},[344,156494,155312],{},[344,156496,156497],{},[32,156498,156499],{},"[1, 2, 3]",[344,156501,156502],{},"列表",[325,156504,156505,156508,156513],{},[344,156506,156507],{},"tuple",[344,156509,156510],{},[32,156511,156512],{},"(1, 2, 3)",[344,156514,156515],{},"元组",[325,156517,156518,156520,156525],{},[344,156519,115788],{},[344,156521,156522],{},[32,156523,156524],{},"{\"name\": \"张三\"}",[344,156526,156527],{},"字典",[325,156529,156530,156533,156538],{},[344,156531,156532],{},"set",[344,156534,156535],{},[32,156536,156537],{},"{1, 2, 3}",[344,156539,156540],{},"集合",[14,156542,156544],{"id":156543},"_23-变量","2.3 变量",[19,156546,156547],{},"变量是保存数据的名字。",[73,156549,156551],{"className":249,"code":156550,"language":251,"meta":79,"style":79},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[32,156552,156553,156561,156569,156579],{"__ignoreMap":79},[100,156554,156555,156557,156559],{"class":102,"line":103},[100,156556,147778],{"class":258},[100,156558,472],{"class":471},[100,156560,150595],{"class":110},[100,156562,156563,156565,156567],{"class":102,"line":188},[100,156564,147788],{"class":258},[100,156566,472],{"class":471},[100,156568,147793],{"class":117},[100,156570,156571,156574,156576],{"class":102,"line":199},[100,156572,156573],{"class":258},"height ",[100,156575,472],{"class":471},[100,156577,156578],{"class":117}," 1.75\n",[100,156580,156581,156584,156586],{"class":102,"line":532},[100,156582,156583],{"class":258},"is_student ",[100,156585,472],{"class":471},[100,156587,154841],{"class":117},[19,156589,156590],{},"Python 的变量不需要提前声明类型：",[73,156592,156594],{"className":249,"code":156593,"language":251,"meta":79,"style":79},"score = 100\nscore = \"满分\"\n",[32,156595,156596,156606],{"__ignoreMap":79},[100,156597,156598,156601,156603],{"class":102,"line":103},[100,156599,156600],{"class":258},"score ",[100,156602,472],{"class":471},[100,156604,156605],{"class":117}," 100\n",[100,156607,156608,156610,156612],{"class":102,"line":188},[100,156609,156600],{"class":258},[100,156611,472],{"class":471},[100,156613,156614],{"class":110}," \"满分\"\n",[19,156616,156617],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,156619,156621],{"id":156620},"_24-变量命名规则","2.4 变量命名规则",[19,156623,156624],{},"硬性规则：",[26,156626,156627,156630,156633,156636],{},[29,156628,156629],{},"只能由字母、数字、下划线组成。",[29,156631,156632],{},"不能以数字开头。",[29,156634,156635],{},"不能使用 Python 关键字。",[29,156637,156638],{},"区分大小写。",[73,156640,156642],{"className":249,"code":156641,"language":251,"meta":79,"style":79},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[32,156643,156644,156653,156662],{"__ignoreMap":79},[100,156645,156646,156649,156651],{"class":102,"line":103},[100,156647,156648],{"class":258},"user_name ",[100,156650,472],{"class":471},[100,156652,147783],{"class":110},[100,156654,156655,156658,156660],{"class":102,"line":188},[100,156656,156657],{"class":258},"age2 ",[100,156659,472],{"class":471},[100,156661,147793],{"class":117},[100,156663,156664,156667,156669],{"class":102,"line":199},[100,156665,156666],{"class":258},"_token ",[100,156668,472],{"class":471},[100,156670,156671],{"class":110}," \"abc\"\n",[19,156673,156674],{},"错误写法：",[73,156676,156678],{"className":249,"code":156677,"language":251,"meta":79,"style":79},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[32,156679,156680,156689,156701],{"__ignoreMap":79},[100,156681,156682,156685,156687],{"class":102,"line":103},[100,156683,156684],{"class":78957},"2age",[100,156686,583],{"class":471},[100,156688,147793],{"class":117},[100,156690,156691,156693,156695,156697,156699],{"class":102,"line":188},[100,156692,132826],{"class":258},[100,156694,2299],{"class":471},[100,156696,147778],{"class":258},[100,156698,472],{"class":471},[100,156700,147783],{"class":110},[100,156702,156703,156705,156707],{"class":102,"line":199},[100,156704,16275],{"class":471},[100,156706,583],{"class":471},[100,156708,156709],{"class":110}," \"一班\"\n",[19,156711,156712],{},"查看关键字：",[73,156714,156716],{"className":249,"code":156715,"language":251,"meta":79,"style":79},"import keyword\n\nprint(keyword.kwlist)\n",[32,156717,156718,156725,156729],{"__ignoreMap":79},[100,156719,156720,156722],{"class":102,"line":103},[100,156721,548],{"class":471},[100,156723,156724],{"class":258}," keyword\n",[100,156726,156727],{"class":102,"line":188},[100,156728,570],{"emptyLinePlaceholder":569},[100,156730,156731,156733],{"class":102,"line":199},[100,156732,1195],{"class":117},[100,156734,156735],{"class":258},"(keyword.kwlist)\n",[19,156737,156738],{},"推荐命名风格：",[73,156740,156742],{"className":249,"code":156741,"language":251,"meta":79,"style":79},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[32,156743,156744,156753,156763],{"__ignoreMap":79},[100,156745,156746,156749,156751],{"class":102,"line":103},[100,156747,156748],{"class":258},"student_name ",[100,156750,472],{"class":471},[100,156752,150595],{"class":110},[100,156754,156755,156758,156760],{"class":102,"line":188},[100,156756,156757],{"class":258},"total_price ",[100,156759,472],{"class":471},[100,156761,156762],{"class":117}," 99.8\n",[100,156764,156765,156768,156770],{"class":102,"line":199},[100,156766,156767],{"class":258},"is_finished ",[100,156769,472],{"class":471},[100,156771,127049],{"class":117},[19,156773,156774],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,156776,52286],{"id":52285},[19,156778,65,156779,156782],{},[32,156780,156781],{},"type()"," 查看数据类型：",[73,156784,156786],{"className":249,"code":156785,"language":251,"meta":79,"style":79},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[32,156787,156788,156802,156816,156830,156844],{"__ignoreMap":79},[100,156789,156790,156792,156794,156796,156798,156800],{"class":102,"line":103},[100,156791,1195],{"class":117},[100,156793,713],{"class":258},[100,156795,104581],{"class":117},[100,156797,713],{"class":258},[100,156799,2078],{"class":117},[100,156801,751],{"class":258},[100,156803,156804,156806,156808,156810,156812,156814],{"class":102,"line":188},[100,156805,1195],{"class":117},[100,156807,713],{"class":258},[100,156809,104581],{"class":117},[100,156811,713],{"class":258},[100,156813,1827],{"class":117},[100,156815,751],{"class":258},[100,156817,156818,156820,156822,156824,156826,156828],{"class":102,"line":199},[100,156819,1195],{"class":117},[100,156821,713],{"class":258},[100,156823,104581],{"class":117},[100,156825,713],{"class":258},[100,156827,7440],{"class":110},[100,156829,751],{"class":258},[100,156831,156832,156834,156836,156838,156840,156842],{"class":102,"line":532},[100,156833,1195],{"class":117},[100,156835,713],{"class":258},[100,156837,104581],{"class":117},[100,156839,713],{"class":258},[100,156841,33034],{"class":117},[100,156843,751],{"class":258},[100,156845,156846,156848,156850,156852,156854,156856],{"class":102,"line":577},[100,156847,1195],{"class":117},[100,156849,713],{"class":258},[100,156851,104581],{"class":117},[100,156853,713],{"class":258},[100,156855,693],{"class":117},[100,156857,751],{"class":258},[19,156859,156860],{},"输出类似：",[73,156862,156865],{"className":156863,"code":156864,"language":78,"meta":79},[76],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[32,156866,156864],{"__ignoreMap":79},[19,156868,381,156869,108525,156871,156873,156874,156876,156877,23081,156879,156876,156881,156883],{},[32,156870,2987],{},[32,156872,1784],{}," 的子类，",[32,156875,33034],{}," 可以当作 ",[32,156878,1985],{},[32,156880,35542],{},[32,156882,1366],{},"，但业务代码中不要滥用。",[73,156885,156887],{"className":249,"code":156886,"language":251,"meta":79,"style":79},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[32,156888,156889,156907],{"__ignoreMap":79},[100,156890,156891,156893,156895,156897,156899,156901,156904],{"class":102,"line":103},[100,156892,1195],{"class":117},[100,156894,713],{"class":258},[100,156896,33034],{"class":117},[100,156898,47120],{"class":471},[100,156900,26693],{"class":117},[100,156902,156903],{"class":258},")   ",[100,156905,156906],{"class":1836},"# 2\n",[100,156908,156909,156911,156913,156915,156917,156919,156921],{"class":102,"line":188},[100,156910,1195],{"class":117},[100,156912,713],{"class":258},[100,156914,35542],{"class":117},[100,156916,47120],{"class":471},[100,156918,26693],{"class":117},[100,156920,47362],{"class":258},[100,156922,156923],{"class":1836},"# 1\n",[14,156925,156927],{"id":156926},"_26-类型转换","2.6 类型转换",[19,156929,156930],{},"常用转换函数：",[73,156932,156934],{"className":249,"code":156933,"language":251,"meta":79,"style":79},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[32,156935,156936,156946,156957,156967],{"__ignoreMap":79},[100,156937,156938,156940,156942,156944],{"class":102,"line":103},[100,156939,1784],{"class":117},[100,156941,713],{"class":258},[100,156943,55870],{"class":110},[100,156945,809],{"class":258},[100,156947,156948,156950,156952,156955],{"class":102,"line":188},[100,156949,1819],{"class":117},[100,156951,713],{"class":258},[100,156953,156954],{"class":110},"\"3.14\"",[100,156956,809],{"class":258},[100,156958,156959,156961,156963,156965],{"class":102,"line":199},[100,156960,687],{"class":117},[100,156962,713],{"class":258},[100,156964,2078],{"class":117},[100,156966,809],{"class":258},[100,156968,156969,156971,156973,156975],{"class":102,"line":532},[100,156970,2987],{"class":117},[100,156972,713],{"class":258},[100,156974,1985],{"class":117},[100,156976,809],{"class":258},[19,156978,16716],{},[73,156980,156982],{"className":249,"code":156981,"language":251,"meta":79,"style":79},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[32,156983,156984,156993,157004],{"__ignoreMap":79},[100,156985,156986,156988,156990],{"class":102,"line":103},[100,156987,147788],{"class":258},[100,156989,472],{"class":471},[100,156991,156992],{"class":110}," \"18\"\n",[100,156994,156995,156997,156999,157001],{"class":102,"line":188},[100,156996,147788],{"class":258},[100,156998,472],{"class":471},[100,157000,3993],{"class":117},[100,157002,157003],{"class":258},"(age)\n",[100,157005,157006,157008,157011,157013,157015],{"class":102,"line":199},[100,157007,1195],{"class":117},[100,157009,157010],{"class":258},"(age ",[100,157012,2248],{"class":471},[100,157014,26693],{"class":117},[100,157016,809],{"class":258},[19,157018,157019],{},"输入得到的内容永远是字符串：",[73,157021,157023],{"className":249,"code":157022,"language":251,"meta":79,"style":79},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[32,157024,157025,157041],{"__ignoreMap":79},[100,157026,157027,157030,157032,157034,157036,157039],{"class":102,"line":103},[100,157028,157029],{"class":258},"num ",[100,157031,472],{"class":471},[100,157033,62159],{"class":117},[100,157035,713],{"class":258},[100,157037,157038],{"class":110},"\"请输入数字:\"",[100,157040,809],{"class":258},[100,157042,157043,157045,157047,157049,157052],{"class":102,"line":188},[100,157044,1195],{"class":117},[100,157046,713],{"class":258},[100,157048,104581],{"class":117},[100,157050,157051],{"class":258},"(num))  ",[100,157053,157054],{"class":1836},"# str\n",[19,157056,157057],{},"如果要做数学运算，必须转换：",[73,157059,157061],{"className":249,"code":157060,"language":251,"meta":79,"style":79},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[32,157062,157063,157081],{"__ignoreMap":79},[100,157064,157065,157067,157069,157071,157073,157075,157077,157079],{"class":102,"line":103},[100,157066,157029],{"class":258},[100,157068,472],{"class":471},[100,157070,3993],{"class":117},[100,157072,713],{"class":258},[100,157074,55375],{"class":117},[100,157076,713],{"class":258},[100,157078,157038],{"class":110},[100,157080,751],{"class":258},[100,157082,157083,157085,157087,157089,157091],{"class":102,"line":188},[100,157084,1195],{"class":117},[100,157086,47173],{"class":258},[100,157088,2248],{"class":471},[100,157090,3649],{"class":117},[100,157092,809],{"class":258},[19,157094,157095],{},"常见错误：",[73,157097,157099],{"className":249,"code":157098,"language":251,"meta":79,"style":79},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[32,157100,157101,157114],{"__ignoreMap":79},[100,157102,157103,157105,157107,157109,157111],{"class":102,"line":103},[100,157104,1784],{"class":117},[100,157106,713],{"class":258},[100,157108,156954],{"class":110},[100,157110,156903],{"class":258},[100,157112,157113],{"class":1836},"# 错误\n",[100,157115,157116,157118,157120,157123,157126],{"class":102,"line":188},[100,157117,1784],{"class":117},[100,157119,713],{"class":258},[100,157121,157122],{"class":110},"\"abc\"",[100,157124,157125],{"class":258},")    ",[100,157127,157113],{"class":1836},[19,157129,157130],{},"正确写法：",[73,157132,157134],{"className":249,"code":157133,"language":251,"meta":79,"style":79},"num = float(\"3.14\")\n",[32,157135,157136],{"__ignoreMap":79},[100,157137,157138,157140,157142,157144,157146,157148],{"class":102,"line":103},[100,157139,157029],{"class":258},[100,157141,472],{"class":471},[100,157143,111039],{"class":117},[100,157145,713],{"class":258},[100,157147,156954],{"class":110},[100,157149,809],{"class":258},[14,157151,157153],{"id":157152},"_27-运算符","2.7 运算符",[305,157155,157157],{"id":157156},"_271-算术运算符","2.7.1 算术运算符",[319,157159,157160,157171],{},[322,157161,157162],{},[325,157163,157164,157167,157169],{},[328,157165,157166],{},"运算符",[328,157168,27444],{},[328,157170,29064],{},[339,157172,157173,157187,157201,157215,157229,157243,157257],{},[325,157174,157175,157179,157182],{},[344,157176,157177],{},[32,157178,2248],{},[344,157180,157181],{},"加法",[344,157183,157184],{},[32,157185,157186],{},"1 + 2",[325,157188,157189,157193,157196],{},[344,157190,157191],{},[32,157192,2299],{},[344,157194,157195],{},"减法",[344,157197,157198],{},[32,157199,157200],{},"5 - 3",[325,157202,157203,157207,157210],{},[344,157204,157205],{},[32,157206,2222],{},[344,157208,157209],{},"乘法",[344,157211,157212],{},[32,157213,157214],{},"2 * 3",[325,157216,157217,157221,157224],{},[344,157218,157219],{},[32,157220,2351],{},[344,157222,157223],{},"除法，结果是浮点数",[344,157225,157226],{},[32,157227,157228],{},"5 \u002F 2",[325,157230,157231,157235,157238],{},[344,157232,157233],{},[32,157234,34885],{},[344,157236,157237],{},"整除",[344,157239,157240],{},[32,157241,157242],{},"5 \u002F\u002F 2",[325,157244,157245,157249,157252],{},[344,157246,157247],{},[32,157248,2095],{},[344,157250,157251],{},"取余",[344,157253,157254],{},[32,157255,157256],{},"5 % 2",[325,157258,157259,157263,157266],{},[344,157260,157261],{},[32,157262,12243],{},[344,157264,157265],{},"幂运算",[344,157267,157268],{},[32,157269,157270],{},"2 ** 3",[19,157272,16716],{},[73,157274,157276],{"className":249,"code":157275,"language":251,"meta":79,"style":79},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[32,157277,157278,157296,157313,157330],{"__ignoreMap":79},[100,157279,157280,157282,157284,157286,157289,157291,157293],{"class":102,"line":103},[100,157281,1195],{"class":117},[100,157283,713],{"class":258},[100,157285,2086],{"class":117},[100,157287,157288],{"class":471}," \u002F",[100,157290,16336],{"class":117},[100,157292,156903],{"class":258},[100,157294,157295],{"class":1836},"# 2.5\n",[100,157297,157298,157300,157302,157304,157307,157309,157311],{"class":102,"line":188},[100,157299,1195],{"class":117},[100,157301,713],{"class":258},[100,157303,2086],{"class":117},[100,157305,157306],{"class":471}," \u002F\u002F",[100,157308,16336],{"class":117},[100,157310,47362],{"class":258},[100,157312,156906],{"class":1836},[100,157314,157315,157317,157319,157321,157324,157326,157328],{"class":102,"line":199},[100,157316,1195],{"class":117},[100,157318,713],{"class":258},[100,157320,2086],{"class":117},[100,157322,157323],{"class":471}," %",[100,157325,16336],{"class":117},[100,157327,156903],{"class":258},[100,157329,156923],{"class":1836},[100,157331,157332,157334,157336,157338,157341,157343,157345],{"class":102,"line":532},[100,157333,1195],{"class":117},[100,157335,713],{"class":258},[100,157337,465],{"class":117},[100,157339,157340],{"class":471}," **",[100,157342,79624],{"class":117},[100,157344,47362],{"class":258},[100,157346,157347],{"class":1836},"# 8\n",[305,157349,157351],{"id":157350},"_272-赋值运算符","2.7.2 赋值运算符",[73,157353,157355],{"className":249,"code":157354,"language":251,"meta":79,"style":79},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[32,157356,157357,157365,157373,157381,157389],{"__ignoreMap":79},[100,157358,157359,157361,157363],{"class":102,"line":103},[100,157360,157029],{"class":258},[100,157362,472],{"class":471},[100,157364,59982],{"class":117},[100,157366,157367,157369,157371],{"class":102,"line":188},[100,157368,157029],{"class":258},[100,157370,11062],{"class":471},[100,157372,55981],{"class":117},[100,157374,157375,157377,157379],{"class":102,"line":199},[100,157376,157029],{"class":258},[100,157378,151494],{"class":471},[100,157380,49277],{"class":117},[100,157382,157383,157385,157387],{"class":102,"line":532},[100,157384,157029],{"class":258},[100,157386,138390],{"class":471},[100,157388,121278],{"class":117},[100,157390,157391,157393,157396],{"class":102,"line":577},[100,157392,157029],{"class":258},[100,157394,157395],{"class":471},"\u002F=",[100,157397,49277],{"class":117},[19,157399,157400],{},"等价关系：",[73,157402,157404],{"className":249,"code":157403,"language":251,"meta":79,"style":79},"num += 1\nnum = num + 1\n",[32,157405,157406,157414],{"__ignoreMap":79},[100,157407,157408,157410,157412],{"class":102,"line":103},[100,157409,157029],{"class":258},[100,157411,11062],{"class":471},[100,157413,57253],{"class":117},[100,157415,157416,157418,157420,157423,157425],{"class":102,"line":188},[100,157417,157029],{"class":258},[100,157419,472],{"class":471},[100,157421,157422],{"class":258}," num ",[100,157424,2248],{"class":471},[100,157426,57253],{"class":117},[19,157428,157429,157430,218,157433,233],{},"Python 没有 ",[32,157431,157432],{},"num++",[32,157434,157435],{},"num--",[305,157437,157439],{"id":157438},"_273-比较运算符","2.7.3 比较运算符",[19,157441,157442],{},"比较运算结果是布尔值。",[73,157444,157446],{"className":249,"code":157445,"language":251,"meta":79,"style":79},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[32,157447,157448,157462,157477,157491],{"__ignoreMap":79},[100,157449,157450,157452,157454,157456,157458,157460],{"class":102,"line":103},[100,157451,1195],{"class":117},[100,157453,713],{"class":258},[100,157455,2213],{"class":117},[100,157457,27796],{"class":471},[100,157459,3759],{"class":117},[100,157461,809],{"class":258},[100,157463,157464,157466,157468,157470,157473,157475],{"class":102,"line":188},[100,157465,1195],{"class":117},[100,157467,713],{"class":258},[100,157469,2213],{"class":117},[100,157471,157472],{"class":471}," >=",[100,157474,3649],{"class":117},[100,157476,809],{"class":258},[100,157478,157479,157481,157483,157485,157487,157489],{"class":102,"line":199},[100,157480,1195],{"class":117},[100,157482,713],{"class":258},[100,157484,2213],{"class":117},[100,157486,964],{"class":471},[100,157488,3694],{"class":117},[100,157490,809],{"class":258},[100,157492,157493,157495,157497,157499,157502,157504],{"class":102,"line":532},[100,157494,1195],{"class":117},[100,157496,713],{"class":258},[100,157498,2213],{"class":117},[100,157500,157501],{"class":471}," !=",[100,157503,3694],{"class":117},[100,157505,809],{"class":258},[19,157507,157508,157509,157511,157512,233],{},"注意：判断相等用 ",[32,157510,4551],{},"，赋值用 ",[32,157513,472],{},[73,157515,157517],{"className":249,"code":157516,"language":251,"meta":79,"style":79},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[32,157518,157519,157531],{"__ignoreMap":79},[100,157520,157521,157523,157525,157528],{"class":102,"line":103},[100,157522,147788],{"class":258},[100,157524,472],{"class":471},[100,157526,157527],{"class":117}," 18",[100,157529,157530],{"class":1836},"       # 赋值\n",[100,157532,157533,157535,157537,157539],{"class":102,"line":188},[100,157534,147788],{"class":258},[100,157536,4551],{"class":471},[100,157538,157527],{"class":117},[100,157540,157541],{"class":1836},"      # 判断是否相等\n",[305,157543,157545],{"id":157544},"_274-逻辑运算符","2.7.4 逻辑运算符",[319,157547,157548,157556],{},[322,157549,157550],{},[325,157551,157552,157554],{},[328,157553,157166],{},[328,157555,27444],{},[339,157557,157558,157567,157576],{},[325,157559,157560,157564],{},[344,157561,157562],{},[32,157563,32027],{},[344,157565,157566],{},"并且",[325,157568,157569,157573],{},[344,157570,157571],{},[32,157572,116332],{},[344,157574,157575],{},"或者",[325,157577,157578,157583],{},[344,157579,157580],{},[32,157581,157582],{},"not",[344,157584,157585],{},"取反",[73,157587,157589],{"className":249,"code":157588,"language":251,"meta":79,"style":79},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[32,157590,157591,157599,157608,157612,157627,157641],{"__ignoreMap":79},[100,157592,157593,157595,157597],{"class":102,"line":103},[100,157594,147788],{"class":258},[100,157596,472],{"class":471},[100,157598,89617],{"class":117},[100,157600,157601,157604,157606],{"class":102,"line":188},[100,157602,157603],{"class":258},"has_ticket ",[100,157605,472],{"class":471},[100,157607,154841],{"class":117},[100,157609,157610],{"class":102,"line":199},[100,157611,570],{"emptyLinePlaceholder":569},[100,157613,157614,157616,157618,157620,157622,157624],{"class":102,"line":532},[100,157615,1195],{"class":117},[100,157617,157010],{"class":258},[100,157619,3331],{"class":471},[100,157621,157527],{"class":117},[100,157623,121671],{"class":471},[100,157625,157626],{"class":258}," has_ticket)\n",[100,157628,157629,157631,157633,157635,157637,157639],{"class":102,"line":577},[100,157630,1195],{"class":117},[100,157632,157010],{"class":258},[100,157634,2676],{"class":471},[100,157636,157527],{"class":117},[100,157638,115443],{"class":471},[100,157640,157626],{"class":258},[100,157642,157643,157645,157647,157649],{"class":102,"line":589},[100,157644,1195],{"class":117},[100,157646,713],{"class":258},[100,157648,157582],{"class":471},[100,157650,157626],{"class":258},[14,157652,157654],{"id":157653},"_28-字符串定义","2.8 字符串定义",[19,157656,157657],{},"三种常见写法：",[73,157659,157661],{"className":249,"code":157660,"language":251,"meta":79,"style":79},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[32,157662,157663,157673,157682,157692],{"__ignoreMap":79},[100,157664,157665,157668,157670],{"class":102,"line":103},[100,157666,157667],{"class":258},"name1 ",[100,157669,472],{"class":471},[100,157671,157672],{"class":110}," '小明'\n",[100,157674,157675,157678,157680],{"class":102,"line":188},[100,157676,157677],{"class":258},"name2 ",[100,157679,472],{"class":471},[100,157681,150595],{"class":110},[100,157683,157684,157687,157689],{"class":102,"line":199},[100,157685,157686],{"class":258},"text ",[100,157688,472],{"class":471},[100,157690,157691],{"class":110}," \"\"\"这是多行字符串\n",[100,157693,157694],{"class":102,"line":532},[100,157695,157696],{"class":110},"可以换行\"\"\"\n",[19,157698,157699],{},"字符串中包含引号：",[73,157701,157703],{"className":249,"code":157702,"language":251,"meta":79,"style":79},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[32,157704,157705,157715,157725],{"__ignoreMap":79},[100,157706,157707,157710,157712],{"class":102,"line":103},[100,157708,157709],{"class":258},"msg ",[100,157711,472],{"class":471},[100,157713,157714],{"class":110}," \"他说:'你好'\"\n",[100,157716,157717,157720,157722],{"class":102,"line":188},[100,157718,157719],{"class":258},"msg2 ",[100,157721,472],{"class":471},[100,157723,157724],{"class":110}," '他说:\"你好\"'\n",[100,157726,157727,157730,157732,157735,157738,157741,157743],{"class":102,"line":199},[100,157728,157729],{"class":258},"msg3 ",[100,157731,472],{"class":471},[100,157733,157734],{"class":110}," \"他说:",[100,157736,157737],{"class":117},"\\\"",[100,157739,157740],{"class":110},"你好",[100,157742,157737],{"class":117},[100,157744,26708],{"class":110},[19,157746,157747],{},"常见转义字符：",[319,157749,157750,157759],{},[322,157751,157752],{},[325,157753,157754,157757],{},[328,157755,157756],{},"写法",[328,157758,334],{},[339,157760,157761,157771,157780,157790,157799],{},[325,157762,157763,157768],{},[344,157764,157765],{},[32,157766,157767],{},"\\n",[344,157769,157770],{},"换行",[325,157772,157773,157777],{},[344,157774,157775],{},[32,157776,2867],{},[344,157778,157779],{},"制表符",[325,157781,157782,157787],{},[344,157783,157784],{},[32,157785,157786],{},"\\\\",[344,157788,157789],{},"反斜杠",[325,157791,157792,157796],{},[344,157793,157794],{},[32,157795,157737],{},[344,157797,157798],{},"双引号",[325,157800,157801,157806],{},[344,157802,157803],{},[32,157804,157805],{},"\\'",[344,157807,157808],{},"单引号",[14,157810,157812],{"id":157811},"_29-字符串拼接","2.9 字符串拼接",[73,157814,157816],{"className":249,"code":157815,"language":251,"meta":79,"style":79},"name = \"小明\"\nprint(\"你好，\" + name)\n",[32,157817,157818,157826],{"__ignoreMap":79},[100,157819,157820,157822,157824],{"class":102,"line":103},[100,157821,147778],{"class":258},[100,157823,472],{"class":471},[100,157825,150595],{"class":110},[100,157827,157828,157830,157832,157835,157837],{"class":102,"line":188},[100,157829,1195],{"class":117},[100,157831,713],{"class":258},[100,157833,157834],{"class":110},"\"你好，\"",[100,157836,47120],{"class":471},[100,157838,157839],{"class":258}," name)\n",[19,157841,157842],{},"字符串只能和字符串拼接：",[73,157844,157846],{"className":249,"code":157845,"language":251,"meta":79,"style":79},"age = 18\nprint(\"年龄:\" + str(age))\n",[32,157847,157848,157856],{"__ignoreMap":79},[100,157849,157850,157852,157854],{"class":102,"line":103},[100,157851,147788],{"class":258},[100,157853,472],{"class":471},[100,157855,147793],{"class":117},[100,157857,157858,157860,157862,157864,157866,157868],{"class":102,"line":188},[100,157859,1195],{"class":117},[100,157861,713],{"class":258},[100,157863,147759],{"class":110},[100,157865,47120],{"class":471},[100,157867,75473],{"class":117},[100,157869,157870],{"class":258},"(age))\n",[19,157872,157873],{},"更推荐使用格式化字符串。",[14,157875,157877],{"id":157876},"_210-字符串格式化","2.10 字符串格式化",[305,157879,157881],{"id":157880},"_2101-百分号格式化","2.10.1 百分号格式化",[73,157883,157885],{"className":249,"code":157884,"language":251,"meta":79,"style":79},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[32,157886,157887,157895,157903,157912,157916],{"__ignoreMap":79},[100,157888,157889,157891,157893],{"class":102,"line":103},[100,157890,147778],{"class":258},[100,157892,472],{"class":471},[100,157894,150595],{"class":110},[100,157896,157897,157899,157901],{"class":102,"line":188},[100,157898,147788],{"class":258},[100,157900,472],{"class":471},[100,157902,147793],{"class":117},[100,157904,157905,157907,157909],{"class":102,"line":199},[100,157906,156600],{"class":258},[100,157908,472],{"class":471},[100,157910,157911],{"class":117}," 95.5\n",[100,157913,157914],{"class":102,"line":532},[100,157915,570],{"emptyLinePlaceholder":569},[100,157917,157918,157920,157922,157925,157928,157931,157934,157937,157940,157942,157944],{"class":102,"line":577},[100,157919,1195],{"class":117},[100,157921,713],{"class":258},[100,157923,157924],{"class":110},"\"姓名:",[100,157926,157927],{"class":117},"%s",[100,157929,157930],{"class":110}," 年龄:",[100,157932,157933],{"class":117},"%d",[100,157935,157936],{"class":110}," 分数:",[100,157938,157939],{"class":117},"%.1f",[100,157941,2019],{"class":110},[100,157943,157323],{"class":471},[100,157945,157946],{"class":258}," (name, age, score))\n",[19,157948,157949],{},"常用占位符：",[319,157951,157952,157961],{},[322,157953,157954],{},[325,157955,157956,157959],{},[328,157957,157958],{},"占位符",[328,157960,27444],{},[339,157962,157963,157971,157979],{},[325,157964,157965,157969],{},[344,157966,157967],{},[32,157968,157927],{},[344,157970,156466],{},[325,157972,157973,157977],{},[344,157974,157975],{},[32,157976,157933],{},[344,157978,156444],{},[325,157980,157981,157986],{},[344,157982,157983],{},[32,157984,157985],{},"%f",[344,157987,156455],{},[19,157989,157990],{},"精度控制：",[73,157992,157994],{"className":249,"code":157993,"language":251,"meta":79,"style":79},"price = 12.3456\nprint(\"%.2f\" % price)\n",[32,157995,157996,158005],{"__ignoreMap":79},[100,157997,157998,158000,158002],{"class":102,"line":103},[100,157999,147923],{"class":258},[100,158001,472],{"class":471},[100,158003,158004],{"class":117}," 12.3456\n",[100,158006,158007,158009,158011,158013,158016,158018,158020],{"class":102,"line":188},[100,158008,1195],{"class":117},[100,158010,713],{"class":258},[100,158012,2019],{"class":110},[100,158014,158015],{"class":117},"%.2f",[100,158017,2019],{"class":110},[100,158019,157323],{"class":471},[100,158021,158022],{"class":258}," price)\n",[305,158024,158026],{"id":158025},"_2102-format方法","2.10.2 format方法",[73,158028,158030],{"className":249,"code":158029,"language":251,"meta":79,"style":79},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[32,158031,158032,158040,158048,158052,158071,158091],{"__ignoreMap":79},[100,158033,158034,158036,158038],{"class":102,"line":103},[100,158035,147778],{"class":258},[100,158037,472],{"class":471},[100,158039,150595],{"class":110},[100,158041,158042,158044,158046],{"class":102,"line":188},[100,158043,147788],{"class":258},[100,158045,472],{"class":471},[100,158047,147793],{"class":117},[100,158049,158050],{"class":102,"line":199},[100,158051,570],{"emptyLinePlaceholder":569},[100,158053,158054,158056,158058,158060,158062,158064,158066,158068],{"class":102,"line":532},[100,158055,1195],{"class":117},[100,158057,713],{"class":258},[100,158059,157924],{"class":110},[100,158061,34015],{"class":117},[100,158063,157930],{"class":110},[100,158065,34015],{"class":117},[100,158067,2019],{"class":110},[100,158069,158070],{"class":258},".format(name, age))\n",[100,158072,158073,158075,158077,158079,158082,158084,158087,158089],{"class":102,"line":577},[100,158074,1195],{"class":117},[100,158076,713],{"class":258},[100,158078,157924],{"class":110},[100,158080,158081],{"class":117},"{0}",[100,158083,157930],{"class":110},[100,158085,158086],{"class":117},"{1}",[100,158088,2019],{"class":110},[100,158090,158070],{"class":258},[100,158092,158093,158095,158097,158099,158102,158104,158107,158109,158112,158114,158116,158119,158121,158123],{"class":102,"line":589},[100,158094,1195],{"class":117},[100,158096,713],{"class":258},[100,158098,157924],{"class":110},[100,158100,158101],{"class":117},"{name}",[100,158103,157930],{"class":110},[100,158105,158106],{"class":117},"{age}",[100,158108,2019],{"class":110},[100,158110,158111],{"class":258},".format(",[100,158113,81364],{"class":6812},[100,158115,472],{"class":471},[100,158117,158118],{"class":258},"name, ",[100,158120,71775],{"class":6812},[100,158122,472],{"class":471},[100,158124,158125],{"class":258},"age))\n",[305,158127,158129],{"id":158128},"_2103-f-string","2.10.3 f-string",[19,158131,158132],{},"推荐写法：",[73,158134,158136],{"className":249,"code":158135,"language":251,"meta":79,"style":79},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[32,158137,158138,158146,158154,158162,158166],{"__ignoreMap":79},[100,158139,158140,158142,158144],{"class":102,"line":103},[100,158141,147778],{"class":258},[100,158143,472],{"class":471},[100,158145,150595],{"class":110},[100,158147,158148,158150,158152],{"class":102,"line":188},[100,158149,147788],{"class":258},[100,158151,472],{"class":471},[100,158153,147793],{"class":117},[100,158155,158156,158158,158160],{"class":102,"line":199},[100,158157,156600],{"class":258},[100,158159,472],{"class":471},[100,158161,157911],{"class":117},[100,158163,158164],{"class":102,"line":532},[100,158165,570],{"emptyLinePlaceholder":569},[100,158167,158168,158170,158172,158174,158176,158178,158180,158182,158184,158186,158188,158190,158192,158194,158197,158200,158202,158204],{"class":102,"line":577},[100,158169,1195],{"class":117},[100,158171,713],{"class":258},[100,158173,1830],{"class":471},[100,158175,157924],{"class":110},[100,158177,2662],{"class":117},[100,158179,81364],{"class":258},[100,158181,2712],{"class":117},[100,158183,157930],{"class":110},[100,158185,2662],{"class":117},[100,158187,71775],{"class":258},[100,158189,2712],{"class":117},[100,158191,157936],{"class":110},[100,158193,2662],{"class":117},[100,158195,158196],{"class":258},"score",[100,158198,158199],{"class":471},":.1f",[100,158201,2712],{"class":117},[100,158203,2019],{"class":110},[100,158205,809],{"class":258},[19,158207,158208],{},"表达式也可以放进去：",[73,158210,158212],{"className":249,"code":158211,"language":251,"meta":79,"style":79},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[32,158213,158214,158222,158230],{"__ignoreMap":79},[100,158215,158216,158218,158220],{"class":102,"line":103},[100,158217,147923],{"class":258},[100,158219,472],{"class":471},[100,158221,147928],{"class":117},[100,158223,158224,158226,158228],{"class":102,"line":188},[100,158225,147933],{"class":258},[100,158227,472],{"class":471},[100,158229,55981],{"class":117},[100,158231,158232,158234,158236,158238,158241,158243,158245,158247,158250,158252,158255],{"class":102,"line":199},[100,158233,1195],{"class":117},[100,158235,713],{"class":258},[100,158237,1830],{"class":471},[100,158239,158240],{"class":110},"\"总价:",[100,158242,2662],{"class":117},[100,158244,147923],{"class":258},[100,158246,2222],{"class":471},[100,158248,158249],{"class":258}," count",[100,158251,2712],{"class":117},[100,158253,158254],{"class":110},"元\"",[100,158256,809],{"class":258},[14,158258,158260],{"id":158259},"_211-input输入","2.11 input输入",[19,158262,158263,158266],{},[32,158264,158265],{},"input()"," 会暂停程序，等待用户输入。",[73,158268,158270],{"className":249,"code":158269,"language":251,"meta":79,"style":79},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[32,158271,158272,158286],{"__ignoreMap":79},[100,158273,158274,158276,158278,158280,158282,158284],{"class":102,"line":103},[100,158275,147778],{"class":258},[100,158277,472],{"class":471},[100,158279,62159],{"class":117},[100,158281,713],{"class":258},[100,158283,153621],{"class":110},[100,158285,809],{"class":258},[100,158287,158288,158290,158292,158294,158297,158299,158301,158303,158305],{"class":102,"line":188},[100,158289,1195],{"class":117},[100,158291,713],{"class":258},[100,158293,1830],{"class":471},[100,158295,158296],{"class":110},"\"你好，",[100,158298,2662],{"class":117},[100,158300,81364],{"class":258},[100,158302,2712],{"class":117},[100,158304,2019],{"class":110},[100,158306,809],{"class":258},[19,158308,158309],{},"输入整数：",[73,158311,158313],{"className":249,"code":158312,"language":251,"meta":79,"style":79},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[32,158314,158315,158333],{"__ignoreMap":79},[100,158316,158317,158319,158321,158323,158325,158327,158329,158331],{"class":102,"line":103},[100,158318,147788],{"class":258},[100,158320,472],{"class":471},[100,158322,3993],{"class":117},[100,158324,713],{"class":258},[100,158326,55375],{"class":117},[100,158328,713],{"class":258},[100,158330,153636],{"class":110},[100,158332,751],{"class":258},[100,158334,158335,158337,158339,158341,158344,158346,158348,158350,158353,158355],{"class":102,"line":188},[100,158336,1195],{"class":117},[100,158338,713],{"class":258},[100,158340,1830],{"class":471},[100,158342,158343],{"class":110},"\"明年你",[100,158345,2662],{"class":117},[100,158347,147788],{"class":258},[100,158349,2248],{"class":471},[100,158351,158352],{"class":117}," 1}",[100,158354,150646],{"class":110},[100,158356,809],{"class":258},[19,158358,158359],{},"输入小数：",[73,158361,158363],{"className":249,"code":158362,"language":251,"meta":79,"style":79},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[32,158364,158365,158384],{"__ignoreMap":79},[100,158366,158367,158369,158371,158373,158375,158377,158379,158382],{"class":102,"line":103},[100,158368,156573],{"class":258},[100,158370,472],{"class":471},[100,158372,111039],{"class":117},[100,158374,713],{"class":258},[100,158376,55375],{"class":117},[100,158378,713],{"class":258},[100,158380,158381],{"class":110},"\"请输入身高:\"",[100,158383,751],{"class":258},[100,158385,158386,158388,158390,158392,158395,158397,158399,158402,158404,158407],{"class":102,"line":188},[100,158387,1195],{"class":117},[100,158389,713],{"class":258},[100,158391,1830],{"class":471},[100,158393,158394],{"class":110},"\"身高:",[100,158396,2662],{"class":117},[100,158398,26557],{"class":258},[100,158400,158401],{"class":471},":.2f",[100,158403,2712],{"class":117},[100,158405,158406],{"class":110},"米\"",[100,158408,809],{"class":258},[14,158410,158412],{"id":158411},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,158414,124534],{},[26,158416,158417,158420,158423,158426],{},[29,158418,158419],{},"输入商品单价。",[29,158421,158422],{},"输入购买数量。",[29,158424,158425],{},"输入折扣，例如 0.8 表示八折。",[29,158427,158428],{},"输出最终金额，保留两位小数。",[19,158430,11617],{},[73,158432,158434],{"className":249,"code":158433,"language":251,"meta":79,"style":79},"price = float(input(\"请输入商品单价:\"))\ncount = int(input(\"请输入购买数量:\"))\ndiscount = float(input(\"请输入折扣:\"))\n\ntotal = price * count * discount\n\nprint(f\"商品单价:{price:.2f}\")\nprint(f\"购买数量:{count}\")\nprint(f\"折扣:{discount}\")\nprint(f\"应付金额:{total:.2f}元\")\n",[32,158435,158436,158455,158474,158494,158498,158518,158522,158545,158566,158588],{"__ignoreMap":79},[100,158437,158438,158440,158442,158444,158446,158448,158450,158453],{"class":102,"line":103},[100,158439,147923],{"class":258},[100,158441,472],{"class":471},[100,158443,111039],{"class":117},[100,158445,713],{"class":258},[100,158447,55375],{"class":117},[100,158449,713],{"class":258},[100,158451,158452],{"class":110},"\"请输入商品单价:\"",[100,158454,751],{"class":258},[100,158456,158457,158459,158461,158463,158465,158467,158469,158472],{"class":102,"line":188},[100,158458,147933],{"class":258},[100,158460,472],{"class":471},[100,158462,3993],{"class":117},[100,158464,713],{"class":258},[100,158466,55375],{"class":117},[100,158468,713],{"class":258},[100,158470,158471],{"class":110},"\"请输入购买数量:\"",[100,158473,751],{"class":258},[100,158475,158476,158479,158481,158483,158485,158487,158489,158492],{"class":102,"line":199},[100,158477,158478],{"class":258},"discount ",[100,158480,472],{"class":471},[100,158482,111039],{"class":117},[100,158484,713],{"class":258},[100,158486,55375],{"class":117},[100,158488,713],{"class":258},[100,158490,158491],{"class":110},"\"请输入折扣:\"",[100,158493,751],{"class":258},[100,158495,158496],{"class":102,"line":532},[100,158497,570],{"emptyLinePlaceholder":569},[100,158499,158500,158503,158505,158508,158510,158513,158515],{"class":102,"line":577},[100,158501,158502],{"class":258},"total ",[100,158504,472],{"class":471},[100,158506,158507],{"class":258}," price ",[100,158509,2222],{"class":471},[100,158511,158512],{"class":258}," count ",[100,158514,2222],{"class":471},[100,158516,158517],{"class":258}," discount\n",[100,158519,158520],{"class":102,"line":589},[100,158521,570],{"emptyLinePlaceholder":569},[100,158523,158524,158526,158528,158530,158533,158535,158537,158539,158541,158543],{"class":102,"line":595},[100,158525,1195],{"class":117},[100,158527,713],{"class":258},[100,158529,1830],{"class":471},[100,158531,158532],{"class":110},"\"商品单价:",[100,158534,2662],{"class":117},[100,158536,81369],{"class":258},[100,158538,158401],{"class":471},[100,158540,2712],{"class":117},[100,158542,2019],{"class":110},[100,158544,809],{"class":258},[100,158546,158547,158549,158551,158553,158556,158558,158560,158562,158564],{"class":102,"line":601},[100,158548,1195],{"class":117},[100,158550,713],{"class":258},[100,158552,1830],{"class":471},[100,158554,158555],{"class":110},"\"购买数量:",[100,158557,2662],{"class":117},[100,158559,85986],{"class":258},[100,158561,2712],{"class":117},[100,158563,2019],{"class":110},[100,158565,809],{"class":258},[100,158567,158568,158570,158572,158574,158577,158579,158582,158584,158586],{"class":102,"line":606},[100,158569,1195],{"class":117},[100,158571,713],{"class":258},[100,158573,1830],{"class":471},[100,158575,158576],{"class":110},"\"折扣:",[100,158578,2662],{"class":117},[100,158580,158581],{"class":258},"discount",[100,158583,2712],{"class":117},[100,158585,2019],{"class":110},[100,158587,809],{"class":258},[100,158589,158590,158592,158594,158596,158599,158601,158604,158606,158608,158610],{"class":102,"line":612},[100,158591,1195],{"class":117},[100,158593,713],{"class":258},[100,158595,1830],{"class":471},[100,158597,158598],{"class":110},"\"应付金额:",[100,158600,2662],{"class":117},[100,158602,158603],{"class":258},"total",[100,158605,158401],{"class":471},[100,158607,2712],{"class":117},[100,158609,158254],{"class":110},[100,158611,809],{"class":258},[14,158613,158615],{"id":158614},"_213-易错点","2.13 易错点",[26,158617,158618,158623,158629,158637,158640],{},[29,158619,158620,158622],{},[32,158621,158265],{}," 的结果是字符串，做运算前要转换。",[29,158624,158625,158626,233],{},"字符串拼接时，数字要先 ",[32,158627,158628],{},"str()",[29,158630,158631,158633,158634,158636],{},[32,158632,472],{}," 是赋值，",[32,158635,4551],{}," 是比较。",[29,158638,158639],{},"Python 没有自增自减运算符。",[29,158641,158642],{},"浮点数计算可能有精度误差：",[73,158644,158646],{"className":249,"code":158645,"language":251,"meta":79,"style":79},"print(0.1 + 0.2)\n",[32,158647,158648],{"__ignoreMap":79},[100,158649,158650,158652,158654,158656,158658,158661],{"class":102,"line":103},[100,158651,1195],{"class":117},[100,158653,713],{"class":258},[100,158655,87762],{"class":117},[100,158657,47120],{"class":471},[100,158659,158660],{"class":117}," 0.2",[100,158662,809],{"class":258},[19,158664,158665,158666,158669],{},"金额计算如果要求严格，可以后续学习 ",[32,158667,158668],{},"decimal"," 模块。",[14,158671,158673],{"id":158672},"_214-本章练习","2.14 本章练习",[26,158675,158676,158679,158682,158685,158688],{},[29,158677,158678],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[29,158680,158681],{},"输入圆的半径，计算面积，保留两位小数。",[29,158683,158684],{},"输入工资和奖金，计算总收入。",[29,158686,158687],{},"输入摄氏温度，转换为华氏温度。",[29,158689,158690],{},"写一个 BMI 计算程序：",[73,158692,158695],{"className":158693,"code":158694,"language":78,"meta":79},[76],"BMI = 体重kg \u002F 身高m ** 2\n",[32,158696,158694],{"__ignoreMap":79},[1677,158698,158699],{},"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":79,"searchDepth":188,"depth":188,"links":158701},[158702,158703,158704,158705,158706,158707,158708,158714,158715,158716,158721,158722,158723,158724],{"id":156263,"depth":188,"text":156264},{"id":156372,"depth":188,"text":156373},{"id":156543,"depth":188,"text":156544},{"id":156620,"depth":188,"text":156621},{"id":52285,"depth":188,"text":52286},{"id":156926,"depth":188,"text":156927},{"id":157152,"depth":188,"text":157153,"children":158709},[158710,158711,158712,158713],{"id":157156,"depth":199,"text":157157},{"id":157350,"depth":199,"text":157351},{"id":157438,"depth":199,"text":157439},{"id":157544,"depth":199,"text":157545},{"id":157653,"depth":188,"text":157654},{"id":157811,"depth":188,"text":157812},{"id":157876,"depth":188,"text":157877,"children":158717},[158718,158719,158720],{"id":157880,"depth":199,"text":157881},{"id":158025,"depth":199,"text":158026},{"id":158128,"depth":199,"text":158129},{"id":158259,"depth":188,"text":158260},{"id":158411,"depth":188,"text":158412},{"id":158614,"depth":188,"text":158615},{"id":158672,"depth":188,"text":158673},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":156255,"description":24958},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":158731,"title":158732,"body":158733,"description":24958,"extension":1708,"meta":160369,"navigation":569,"path":160370,"seo":160371,"stem":160372,"__hash__":160373},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":158734,"toc":160350},[158735,158738,158742,158745,158760,158763,158791,158795,158845,158847,158863,158866,158892,158895,158899,158966,158969,158985,158989,158992,159110,159113,159120,159169,159175,159179,159182,159295,159298,159302,159306,159309,159359,159363,159366,159416,159420,159423,159461,159465,159468,159514,159517,159552,159556,159561,159564,159610,159612,159679,159683,159689,159800,159809,159813,159815,159826,159828,159994,159998,160000,160014,160016,160230,160234,160253,160270,160273,160319,160323,160347],[10,158736,158732],{"id":158737},"_3-判断语句",[14,158739,158741],{"id":158740},"_31-布尔值","3.1 布尔值",[19,158743,158744],{},"判断语句依赖布尔值：",[73,158746,158748],{"className":249,"code":158747,"language":251,"meta":79,"style":79},"True\nFalse\n",[32,158749,158750,158755],{"__ignoreMap":79},[100,158751,158752],{"class":102,"line":103},[100,158753,158754],{"class":117},"True\n",[100,158756,158757],{"class":102,"line":188},[100,158758,158759],{"class":117},"False\n",[19,158761,158762],{},"比较表达式会产生布尔值：",[73,158764,158766],{"className":249,"code":158765,"language":251,"meta":79,"style":79},"age = 18\nprint(age >= 18)  # True\n",[32,158767,158768,158776],{"__ignoreMap":79},[100,158769,158770,158772,158774],{"class":102,"line":103},[100,158771,147788],{"class":258},[100,158773,472],{"class":471},[100,158775,147793],{"class":117},[100,158777,158778,158780,158782,158784,158786,158788],{"class":102,"line":188},[100,158779,1195],{"class":117},[100,158781,157010],{"class":258},[100,158783,3331],{"class":471},[100,158785,157527],{"class":117},[100,158787,47362],{"class":258},[100,158789,158790],{"class":1836},"# True\n",[14,158792,158794],{"id":158793},"_32-if基础语法","3.2 if基础语法",[73,158796,158798],{"className":249,"code":158797,"language":251,"meta":79,"style":79},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[32,158799,158800,158818,158822,158834],{"__ignoreMap":79},[100,158801,158802,158804,158806,158808,158810,158812,158814,158816],{"class":102,"line":103},[100,158803,147788],{"class":258},[100,158805,472],{"class":471},[100,158807,3993],{"class":117},[100,158809,713],{"class":258},[100,158811,55375],{"class":117},[100,158813,713],{"class":258},[100,158815,153636],{"class":110},[100,158817,751],{"class":258},[100,158819,158820],{"class":102,"line":188},[100,158821,570],{"emptyLinePlaceholder":569},[100,158823,158824,158826,158828,158830,158832],{"class":102,"line":199},[100,158825,958],{"class":471},[100,158827,17288],{"class":258},[100,158829,3331],{"class":471},[100,158831,157527],{"class":117},[100,158833,696],{"class":258},[100,158835,158836,158838,158840,158843],{"class":102,"line":532},[100,158837,702],{"class":117},[100,158839,713],{"class":258},[100,158841,158842],{"class":110},"\"可以进入网吧\"",[100,158844,809],{"class":258},[19,158846,381],{},[26,158848,158849,158854,158857,158860],{},[29,158850,158851,158853],{},[32,158852,958],{}," 后面是条件表达式。",[29,158855,158856],{},"条件后面必须写冒号。",[29,158858,158859],{},"条件成立时执行缩进代码块。",[29,158861,158862],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,158864,158865],{},"错误示例：",[73,158867,158869],{"className":249,"code":158868,"language":251,"meta":79,"style":79},"if age >= 18\n    print(\"可以进入\")\n",[32,158870,158871,158881],{"__ignoreMap":79},[100,158872,158873,158875,158877,158879],{"class":102,"line":103},[100,158874,958],{"class":471},[100,158876,17288],{"class":258},[100,158878,3331],{"class":471},[100,158880,147793],{"class":117},[100,158882,158883,158885,158887,158890],{"class":102,"line":188},[100,158884,702],{"class":117},[100,158886,713],{"class":258},[100,158888,158889],{"class":110},"\"可以进入\"",[100,158891,809],{"class":258},[19,158893,158894],{},"缺少冒号。",[14,158896,158898],{"id":158897},"_33-if-else","3.3 if else",[73,158900,158902],{"className":249,"code":158901,"language":251,"meta":79,"style":79},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[32,158903,158904,158922,158926,158938,158949,158955],{"__ignoreMap":79},[100,158905,158906,158908,158910,158912,158914,158916,158918,158920],{"class":102,"line":103},[100,158907,147788],{"class":258},[100,158909,472],{"class":471},[100,158911,3993],{"class":117},[100,158913,713],{"class":258},[100,158915,55375],{"class":117},[100,158917,713],{"class":258},[100,158919,153636],{"class":110},[100,158921,751],{"class":258},[100,158923,158924],{"class":102,"line":188},[100,158925,570],{"emptyLinePlaceholder":569},[100,158927,158928,158930,158932,158934,158936],{"class":102,"line":199},[100,158929,958],{"class":471},[100,158931,17288],{"class":258},[100,158933,3331],{"class":471},[100,158935,157527],{"class":117},[100,158937,696],{"class":258},[100,158939,158940,158942,158944,158947],{"class":102,"line":532},[100,158941,702],{"class":117},[100,158943,713],{"class":258},[100,158945,158946],{"class":110},"\"成年人\"",[100,158948,809],{"class":258},[100,158950,158951,158953],{"class":102,"line":577},[100,158952,3322],{"class":471},[100,158954,696],{"class":258},[100,158956,158957,158959,158961,158964],{"class":102,"line":589},[100,158958,702],{"class":117},[100,158960,713],{"class":258},[100,158962,158963],{"class":110},"\"未成年人\"",[100,158965,809],{"class":258},[19,158967,158968],{},"执行逻辑：",[26,158970,158971,158977,158982],{},[29,158972,158973,158974,158976],{},"条件成立，执行 ",[32,158975,958],{}," 代码块。",[29,158978,158979,158980,158976],{},"条件不成立，执行 ",[32,158981,3322],{},[29,158983,158984],{},"两个代码块只会执行其中一个。",[14,158986,158988],{"id":158987},"_34-if-elif-else","3.4 if elif else",[19,158990,158991],{},"多条件判断：",[73,158993,158995],{"className":249,"code":158994,"language":251,"meta":79,"style":79},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[32,158996,158997,159015,159019,159033,159044,159058,159069,159082,159093,159099],{"__ignoreMap":79},[100,158998,158999,159001,159003,159005,159007,159009,159011,159013],{"class":102,"line":103},[100,159000,156600],{"class":258},[100,159002,472],{"class":471},[100,159004,3993],{"class":117},[100,159006,713],{"class":258},[100,159008,55375],{"class":117},[100,159010,713],{"class":258},[100,159012,153651],{"class":110},[100,159014,751],{"class":258},[100,159016,159017],{"class":102,"line":188},[100,159018,570],{"emptyLinePlaceholder":569},[100,159020,159021,159023,159026,159028,159031],{"class":102,"line":199},[100,159022,958],{"class":471},[100,159024,159025],{"class":258}," score ",[100,159027,3331],{"class":471},[100,159029,159030],{"class":117}," 90",[100,159032,696],{"class":258},[100,159034,159035,159037,159039,159042],{"class":102,"line":532},[100,159036,702],{"class":117},[100,159038,713],{"class":258},[100,159040,159041],{"class":110},"\"优秀\"",[100,159043,809],{"class":258},[100,159045,159046,159049,159051,159053,159056],{"class":102,"line":577},[100,159047,159048],{"class":471},"elif",[100,159050,159025],{"class":258},[100,159052,3331],{"class":471},[100,159054,159055],{"class":117}," 80",[100,159057,696],{"class":258},[100,159059,159060,159062,159064,159067],{"class":102,"line":589},[100,159061,702],{"class":117},[100,159063,713],{"class":258},[100,159065,159066],{"class":110},"\"良好\"",[100,159068,809],{"class":258},[100,159070,159071,159073,159075,159077,159080],{"class":102,"line":595},[100,159072,159048],{"class":471},[100,159074,159025],{"class":258},[100,159076,3331],{"class":471},[100,159078,159079],{"class":117}," 60",[100,159081,696],{"class":258},[100,159083,159084,159086,159088,159091],{"class":102,"line":601},[100,159085,702],{"class":117},[100,159087,713],{"class":258},[100,159089,159090],{"class":110},"\"及格\"",[100,159092,809],{"class":258},[100,159094,159095,159097],{"class":102,"line":606},[100,159096,3322],{"class":471},[100,159098,696],{"class":258},[100,159100,159101,159103,159105,159108],{"class":102,"line":612},[100,159102,702],{"class":117},[100,159104,713],{"class":258},[100,159106,159107],{"class":110},"\"不及格\"",[100,159109,809],{"class":258},[19,159111,159112],{},"注意判断顺序很重要。",[19,159114,159115,159116,159119],{},"如果把 ",[32,159117,159118],{},"score >= 60"," 放在最前面：",[73,159121,159123],{"className":249,"code":159122,"language":251,"meta":79,"style":79},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[32,159124,159125,159137,159147,159159],{"__ignoreMap":79},[100,159126,159127,159129,159131,159133,159135],{"class":102,"line":103},[100,159128,958],{"class":471},[100,159130,159025],{"class":258},[100,159132,3331],{"class":471},[100,159134,159079],{"class":117},[100,159136,696],{"class":258},[100,159138,159139,159141,159143,159145],{"class":102,"line":188},[100,159140,702],{"class":117},[100,159142,713],{"class":258},[100,159144,159090],{"class":110},[100,159146,809],{"class":258},[100,159148,159149,159151,159153,159155,159157],{"class":102,"line":199},[100,159150,159048],{"class":471},[100,159152,159025],{"class":258},[100,159154,3331],{"class":471},[100,159156,159030],{"class":117},[100,159158,696],{"class":258},[100,159160,159161,159163,159165,159167],{"class":102,"line":532},[100,159162,702],{"class":117},[100,159164,713],{"class":258},[100,159166,159041],{"class":110},[100,159168,809],{"class":258},[19,159170,159171,159172,159174],{},"成绩 95 会先满足 ",[32,159173,159118],{},"，后面的优秀分支就不会执行。",[14,159176,159178],{"id":159177},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,159180,159181],{},"嵌套判断就是在一个判断内部再写判断。",[73,159183,159185],{"className":249,"code":159184,"language":251,"meta":79,"style":79},"age = int(input(\"请输入年龄:\"))\nhas_ticket = input(\"是否有票(y\u002Fn):\")\n\nif age >= 18:\n    if has_ticket == \"y\":\n        print(\"可以进入\")\n    else:\n        print(\"请先买票\")\nelse:\n    print(\"未成年人禁止进入\")\n",[32,159186,159187,159205,159220,159224,159236,159250,159260,159267,159278,159284],{"__ignoreMap":79},[100,159188,159189,159191,159193,159195,159197,159199,159201,159203],{"class":102,"line":103},[100,159190,147788],{"class":258},[100,159192,472],{"class":471},[100,159194,3993],{"class":117},[100,159196,713],{"class":258},[100,159198,55375],{"class":117},[100,159200,713],{"class":258},[100,159202,153636],{"class":110},[100,159204,751],{"class":258},[100,159206,159207,159209,159211,159213,159215,159218],{"class":102,"line":188},[100,159208,157603],{"class":258},[100,159210,472],{"class":471},[100,159212,62159],{"class":117},[100,159214,713],{"class":258},[100,159216,159217],{"class":110},"\"是否有票(y\u002Fn):\"",[100,159219,809],{"class":258},[100,159221,159222],{"class":102,"line":199},[100,159223,570],{"emptyLinePlaceholder":569},[100,159225,159226,159228,159230,159232,159234],{"class":102,"line":532},[100,159227,958],{"class":471},[100,159229,17288],{"class":258},[100,159231,3331],{"class":471},[100,159233,157527],{"class":117},[100,159235,696],{"class":258},[100,159237,159238,159240,159243,159245,159248],{"class":102,"line":577},[100,159239,4702],{"class":471},[100,159241,159242],{"class":258}," has_ticket ",[100,159244,4551],{"class":471},[100,159246,159247],{"class":110}," \"y\"",[100,159249,696],{"class":258},[100,159251,159252,159254,159256,159258],{"class":102,"line":589},[100,159253,34007],{"class":117},[100,159255,713],{"class":258},[100,159257,158889],{"class":110},[100,159259,809],{"class":258},[100,159261,159262,159265],{"class":102,"line":595},[100,159263,159264],{"class":471},"    else",[100,159266,696],{"class":258},[100,159268,159269,159271,159273,159276],{"class":102,"line":601},[100,159270,34007],{"class":117},[100,159272,713],{"class":258},[100,159274,159275],{"class":110},"\"请先买票\"",[100,159277,809],{"class":258},[100,159279,159280,159282],{"class":102,"line":606},[100,159281,3322],{"class":471},[100,159283,696],{"class":258},[100,159285,159286,159288,159290,159293],{"class":102,"line":612},[100,159287,702],{"class":117},[100,159289,713],{"class":258},[100,159291,159292],{"class":110},"\"未成年人禁止进入\"",[100,159294,809],{"class":258},[19,159296,159297],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,159299,159301],{"id":159300},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[305,159303,159305],{"id":159304},"_361-and","3.6.1 and",[19,159307,159308],{},"两个条件都成立才成立。",[73,159310,159312],{"className":249,"code":159311,"language":251,"meta":79,"style":79},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[32,159313,159314,159322,159330,159334,159349],{"__ignoreMap":79},[100,159315,159316,159318,159320],{"class":102,"line":103},[100,159317,147788],{"class":258},[100,159319,472],{"class":471},[100,159321,89617],{"class":117},[100,159323,159324,159326,159328],{"class":102,"line":188},[100,159325,157603],{"class":258},[100,159327,472],{"class":471},[100,159329,154841],{"class":117},[100,159331,159332],{"class":102,"line":199},[100,159333,570],{"emptyLinePlaceholder":569},[100,159335,159336,159338,159340,159342,159344,159346],{"class":102,"line":532},[100,159337,958],{"class":471},[100,159339,17288],{"class":258},[100,159341,3331],{"class":471},[100,159343,157527],{"class":117},[100,159345,121671],{"class":471},[100,159347,159348],{"class":258}," has_ticket:\n",[100,159350,159351,159353,159355,159357],{"class":102,"line":577},[100,159352,702],{"class":117},[100,159354,713],{"class":258},[100,159356,158889],{"class":110},[100,159358,809],{"class":258},[305,159360,159362],{"id":159361},"_362-or","3.6.2 or",[19,159364,159365],{},"只要一个条件成立就成立。",[73,159367,159369],{"className":249,"code":159368,"language":251,"meta":79,"style":79},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[32,159370,159371,159380,159389,159393,159405],{"__ignoreMap":79},[100,159372,159373,159376,159378],{"class":102,"line":103},[100,159374,159375],{"class":258},"is_vip ",[100,159377,472],{"class":471},[100,159379,127049],{"class":117},[100,159381,159382,159385,159387],{"class":102,"line":188},[100,159383,159384],{"class":258},"coupon ",[100,159386,472],{"class":471},[100,159388,154841],{"class":117},[100,159390,159391],{"class":102,"line":199},[100,159392,570],{"emptyLinePlaceholder":569},[100,159394,159395,159397,159400,159402],{"class":102,"line":532},[100,159396,958],{"class":471},[100,159398,159399],{"class":258}," is_vip ",[100,159401,116332],{"class":471},[100,159403,159404],{"class":258}," coupon:\n",[100,159406,159407,159409,159411,159414],{"class":102,"line":577},[100,159408,702],{"class":117},[100,159410,713],{"class":258},[100,159412,159413],{"class":110},"\"可以享受优惠\"",[100,159415,809],{"class":258},[305,159417,159419],{"id":159418},"_363-not","3.6.3 not",[19,159421,159422],{},"取反。",[73,159424,159426],{"className":249,"code":159425,"language":251,"meta":79,"style":79},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[32,159427,159428,159437,159441,159450],{"__ignoreMap":79},[100,159429,159430,159433,159435],{"class":102,"line":103},[100,159431,159432],{"class":258},"is_closed ",[100,159434,472],{"class":471},[100,159436,127049],{"class":117},[100,159438,159439],{"class":102,"line":188},[100,159440,570],{"emptyLinePlaceholder":569},[100,159442,159443,159445,159447],{"class":102,"line":199},[100,159444,958],{"class":471},[100,159446,40484],{"class":471},[100,159448,159449],{"class":258}," is_closed:\n",[100,159451,159452,159454,159456,159459],{"class":102,"line":532},[100,159453,702],{"class":117},[100,159455,713],{"class":258},[100,159457,159458],{"class":110},"\"店铺营业中\"",[100,159460,809],{"class":258},[14,159462,159464],{"id":159463},"_37-链式比较","3.7 链式比较",[19,159466,159467],{},"Python 支持链式比较：",[73,159469,159471],{"className":249,"code":159470,"language":251,"meta":79,"style":79},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[32,159472,159473,159482,159486,159503],{"__ignoreMap":79},[100,159474,159475,159477,159479],{"class":102,"line":103},[100,159476,156600],{"class":258},[100,159478,472],{"class":471},[100,159480,159481],{"class":117}," 85\n",[100,159483,159484],{"class":102,"line":188},[100,159485,570],{"emptyLinePlaceholder":569},[100,159487,159488,159490,159492,159495,159497,159499,159501],{"class":102,"line":199},[100,159489,958],{"class":471},[100,159491,5692],{"class":117},[100,159493,159494],{"class":471}," \u003C=",[100,159496,159025],{"class":258},[100,159498,3220],{"class":471},[100,159500,7350],{"class":117},[100,159502,696],{"class":258},[100,159504,159505,159507,159509,159512],{"class":102,"line":532},[100,159506,702],{"class":117},[100,159508,713],{"class":258},[100,159510,159511],{"class":110},"\"成绩合法\"",[100,159513,809],{"class":258},[19,159515,159516],{},"等价于：",[73,159518,159520],{"className":249,"code":159519,"language":251,"meta":79,"style":79},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[32,159521,159522,159542],{"__ignoreMap":79},[100,159523,159524,159526,159528,159530,159532,159534,159536,159538,159540],{"class":102,"line":103},[100,159525,958],{"class":471},[100,159527,159025],{"class":258},[100,159529,3331],{"class":471},[100,159531,5692],{"class":117},[100,159533,121671],{"class":471},[100,159535,159025],{"class":258},[100,159537,3220],{"class":471},[100,159539,7350],{"class":117},[100,159541,696],{"class":258},[100,159543,159544,159546,159548,159550],{"class":102,"line":188},[100,159545,702],{"class":117},[100,159547,713],{"class":258},[100,159549,159511],{"class":110},[100,159551,809],{"class":258},[14,159553,159555],{"id":159554},"_38-真值和假值","3.8 真值和假值",[19,159557,117709,159558,159560],{},[32,159559,958],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,159562,159563],{},"假值：",[73,159565,159567],{"className":249,"code":159566,"language":251,"meta":79,"style":79},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[32,159568,159569,159573,159578,159582,159586,159591,159595,159599,159604],{"__ignoreMap":79},[100,159570,159571],{"class":102,"line":103},[100,159572,158759],{"class":117},[100,159574,159575],{"class":102,"line":188},[100,159576,159577],{"class":117},"None\n",[100,159579,159580],{"class":102,"line":199},[100,159581,4686],{"class":117},[100,159583,159584],{"class":102,"line":532},[100,159585,33899],{"class":117},[100,159587,159588],{"class":102,"line":577},[100,159589,159590],{"class":110},"\"\"\n",[100,159592,159593],{"class":102,"line":589},[100,159594,33914],{"class":258},[100,159596,159597],{"class":102,"line":595},[100,159598,3587],{"class":258},[100,159600,159601],{"class":102,"line":601},[100,159602,159603],{"class":258},"{}\n",[100,159605,159606,159608],{"class":102,"line":606},[100,159607,156532],{"class":117},[100,159609,3587],{"class":258},[19,159611,16716],{},[73,159613,159615],{"className":249,"code":159614,"language":251,"meta":79,"style":79},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[32,159616,159617,159631,159635,159642,159662,159668],{"__ignoreMap":79},[100,159618,159619,159621,159623,159625,159627,159629],{"class":102,"line":103},[100,159620,147778],{"class":258},[100,159622,472],{"class":471},[100,159624,62159],{"class":117},[100,159626,713],{"class":258},[100,159628,153621],{"class":110},[100,159630,809],{"class":258},[100,159632,159633],{"class":102,"line":188},[100,159634,570],{"emptyLinePlaceholder":569},[100,159636,159637,159639],{"class":102,"line":199},[100,159638,958],{"class":471},[100,159640,159641],{"class":258}," name:\n",[100,159643,159644,159646,159648,159650,159652,159654,159656,159658,159660],{"class":102,"line":532},[100,159645,702],{"class":117},[100,159647,713],{"class":258},[100,159649,1830],{"class":471},[100,159651,158296],{"class":110},[100,159653,2662],{"class":117},[100,159655,81364],{"class":258},[100,159657,2712],{"class":117},[100,159659,2019],{"class":110},[100,159661,809],{"class":258},[100,159663,159664,159666],{"class":102,"line":577},[100,159665,3322],{"class":471},[100,159667,696],{"class":258},[100,159669,159670,159672,159674,159677],{"class":102,"line":589},[100,159671,702],{"class":117},[100,159673,713],{"class":258},[100,159675,159676],{"class":110},"\"姓名不能为空\"",[100,159678,809],{"class":258},[14,159680,159682],{"id":159681},"_39-match语句","3.9 match语句",[19,159684,159685,159686,159688],{},"Python 3.10 开始支持 ",[32,159687,72819],{},"。它适合处理固定选项。",[73,159690,159692],{"className":249,"code":159691,"language":251,"meta":79,"style":79},"command = input(\"请输入命令:\")\n\nmatch command:\n    case \"start\":\n        print(\"启动\")\n    case \"stop\":\n        print(\"停止\")\n    case \"restart\":\n        print(\"重启\")\n    case _:\n        print(\"未知命令\")\n",[32,159693,159694,159710,159714,159721,159731,159742,159751,159762,159771,159782,159789],{"__ignoreMap":79},[100,159695,159696,159699,159701,159703,159705,159708],{"class":102,"line":103},[100,159697,159698],{"class":258},"command ",[100,159700,472],{"class":471},[100,159702,62159],{"class":117},[100,159704,713],{"class":258},[100,159706,159707],{"class":110},"\"请输入命令:\"",[100,159709,809],{"class":258},[100,159711,159712],{"class":102,"line":188},[100,159713,570],{"emptyLinePlaceholder":569},[100,159715,159716,159718],{"class":102,"line":199},[100,159717,72819],{"class":471},[100,159719,159720],{"class":258}," command:\n",[100,159722,159723,159726,159729],{"class":102,"line":532},[100,159724,159725],{"class":471},"    case",[100,159727,159728],{"class":110}," \"start\"",[100,159730,696],{"class":258},[100,159732,159733,159735,159737,159740],{"class":102,"line":577},[100,159734,34007],{"class":117},[100,159736,713],{"class":258},[100,159738,159739],{"class":110},"\"启动\"",[100,159741,809],{"class":258},[100,159743,159744,159746,159749],{"class":102,"line":589},[100,159745,159725],{"class":471},[100,159747,159748],{"class":110}," \"stop\"",[100,159750,696],{"class":258},[100,159752,159753,159755,159757,159760],{"class":102,"line":595},[100,159754,34007],{"class":117},[100,159756,713],{"class":258},[100,159758,159759],{"class":110},"\"停止\"",[100,159761,809],{"class":258},[100,159763,159764,159766,159769],{"class":102,"line":601},[100,159765,159725],{"class":471},[100,159767,159768],{"class":110}," \"restart\"",[100,159770,696],{"class":258},[100,159772,159773,159775,159777,159780],{"class":102,"line":606},[100,159774,34007],{"class":117},[100,159776,713],{"class":258},[100,159778,159779],{"class":110},"\"重启\"",[100,159781,809],{"class":258},[100,159783,159784,159786],{"class":102,"line":612},[100,159785,159725],{"class":471},[100,159787,159788],{"class":258}," _:\n",[100,159790,159791,159793,159795,159798],{"class":102,"line":618},[100,159792,34007],{"class":117},[100,159794,713],{"class":258},[100,159796,159797],{"class":110},"\"未知命令\"",[100,159799,809],{"class":258},[19,159801,159802,159803,159805,159806,159808],{},"入门阶段掌握 ",[32,159804,155900],{}," 更重要，",[32,159807,72819],{}," 可以作为补充。",[14,159810,159812],{"id":159811},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,159814,124534],{},[26,159816,159817,159820,159823],{},[29,159818,159819],{},"输入成绩。",[29,159821,159822],{},"判断成绩是否合法。",[29,159824,159825],{},"输出等级。",[19,159827,11617],{},[73,159829,159831],{"className":249,"code":159830,"language":251,"meta":79,"style":79},"score = float(input(\"请输入成绩:\"))\n\nif not 0 \u003C= score \u003C= 100:\n    print(\"成绩不合法\")\nelif score >= 90:\n    print(\"等级:A\")\nelif score >= 80:\n    print(\"等级:B\")\nelif score >= 70:\n    print(\"等级:C\")\nelif score >= 60:\n    print(\"等级:D\")\nelse:\n    print(\"等级:E\")\n",[32,159832,159833,159851,159855,159873,159884,159896,159907,159919,159930,159943,159954,159966,159977,159983],{"__ignoreMap":79},[100,159834,159835,159837,159839,159841,159843,159845,159847,159849],{"class":102,"line":103},[100,159836,156600],{"class":258},[100,159838,472],{"class":471},[100,159840,111039],{"class":117},[100,159842,713],{"class":258},[100,159844,55375],{"class":117},[100,159846,713],{"class":258},[100,159848,153651],{"class":110},[100,159850,751],{"class":258},[100,159852,159853],{"class":102,"line":188},[100,159854,570],{"emptyLinePlaceholder":569},[100,159856,159857,159859,159861,159863,159865,159867,159869,159871],{"class":102,"line":199},[100,159858,958],{"class":471},[100,159860,40484],{"class":471},[100,159862,5692],{"class":117},[100,159864,159494],{"class":471},[100,159866,159025],{"class":258},[100,159868,3220],{"class":471},[100,159870,7350],{"class":117},[100,159872,696],{"class":258},[100,159874,159875,159877,159879,159882],{"class":102,"line":532},[100,159876,702],{"class":117},[100,159878,713],{"class":258},[100,159880,159881],{"class":110},"\"成绩不合法\"",[100,159883,809],{"class":258},[100,159885,159886,159888,159890,159892,159894],{"class":102,"line":577},[100,159887,159048],{"class":471},[100,159889,159025],{"class":258},[100,159891,3331],{"class":471},[100,159893,159030],{"class":117},[100,159895,696],{"class":258},[100,159897,159898,159900,159902,159905],{"class":102,"line":589},[100,159899,702],{"class":117},[100,159901,713],{"class":258},[100,159903,159904],{"class":110},"\"等级:A\"",[100,159906,809],{"class":258},[100,159908,159909,159911,159913,159915,159917],{"class":102,"line":595},[100,159910,159048],{"class":471},[100,159912,159025],{"class":258},[100,159914,3331],{"class":471},[100,159916,159055],{"class":117},[100,159918,696],{"class":258},[100,159920,159921,159923,159925,159928],{"class":102,"line":601},[100,159922,702],{"class":117},[100,159924,713],{"class":258},[100,159926,159927],{"class":110},"\"等级:B\"",[100,159929,809],{"class":258},[100,159931,159932,159934,159936,159938,159941],{"class":102,"line":606},[100,159933,159048],{"class":471},[100,159935,159025],{"class":258},[100,159937,3331],{"class":471},[100,159939,159940],{"class":117}," 70",[100,159942,696],{"class":258},[100,159944,159945,159947,159949,159952],{"class":102,"line":612},[100,159946,702],{"class":117},[100,159948,713],{"class":258},[100,159950,159951],{"class":110},"\"等级:C\"",[100,159953,809],{"class":258},[100,159955,159956,159958,159960,159962,159964],{"class":102,"line":618},[100,159957,159048],{"class":471},[100,159959,159025],{"class":258},[100,159961,3331],{"class":471},[100,159963,159079],{"class":117},[100,159965,696],{"class":258},[100,159967,159968,159970,159972,159975],{"class":102,"line":623},[100,159969,702],{"class":117},[100,159971,713],{"class":258},[100,159973,159974],{"class":110},"\"等级:D\"",[100,159976,809],{"class":258},[100,159978,159979,159981],{"class":102,"line":629},[100,159980,3322],{"class":471},[100,159982,696],{"class":258},[100,159984,159985,159987,159989,159992],{"class":102,"line":635},[100,159986,702],{"class":117},[100,159988,713],{"class":258},[100,159990,159991],{"class":110},"\"等级:E\"",[100,159993,809],{"class":258},[14,159995,159997],{"id":159996},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,159999,124534],{},[26,160001,160002,160005,160008,160011],{},[29,160003,160004],{},"输入消费金额。",[29,160006,160007],{},"输入会员等级，普通、银卡、金卡。",[29,160009,160010],{},"普通不打折，银卡 9 折，金卡 8 折。",[29,160012,160013],{},"满 500 再减 50。",[19,160015,11617],{},[73,160017,160019],{"className":249,"code":160018,"language":251,"meta":79,"style":79},"amount = float(input(\"请输入消费金额:\"))\nlevel = input(\"请输入会员等级(普通\u002F银卡\u002F金卡):\")\n\ndiscount = 1\n\nif level == \"银卡\":\n    discount = 0.9\nelif level == \"金卡\":\n    discount = 0.8\nelif level == \"普通\":\n    discount = 1\nelse:\n    print(\"会员等级输入错误，按普通会员计算\")\n\npay = amount * discount\n\nif pay >= 500:\n    pay -= 50\n\nprint(f\"应付金额:{pay:.2f}元\")\n",[32,160020,160021,160041,160057,160061,160069,160073,160087,160097,160110,160119,160132,160140,160146,160157,160161,160175,160179,160193,160203,160207],{"__ignoreMap":79},[100,160022,160023,160026,160028,160030,160032,160034,160036,160039],{"class":102,"line":103},[100,160024,160025],{"class":258},"amount ",[100,160027,472],{"class":471},[100,160029,111039],{"class":117},[100,160031,713],{"class":258},[100,160033,55375],{"class":117},[100,160035,713],{"class":258},[100,160037,160038],{"class":110},"\"请输入消费金额:\"",[100,160040,751],{"class":258},[100,160042,160043,160046,160048,160050,160052,160055],{"class":102,"line":188},[100,160044,160045],{"class":258},"level ",[100,160047,472],{"class":471},[100,160049,62159],{"class":117},[100,160051,713],{"class":258},[100,160053,160054],{"class":110},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[100,160056,809],{"class":258},[100,160058,160059],{"class":102,"line":199},[100,160060,570],{"emptyLinePlaceholder":569},[100,160062,160063,160065,160067],{"class":102,"line":532},[100,160064,158478],{"class":258},[100,160066,472],{"class":471},[100,160068,57253],{"class":117},[100,160070,160071],{"class":102,"line":577},[100,160072,570],{"emptyLinePlaceholder":569},[100,160074,160075,160077,160080,160082,160085],{"class":102,"line":589},[100,160076,958],{"class":471},[100,160078,160079],{"class":258}," level ",[100,160081,4551],{"class":471},[100,160083,160084],{"class":110}," \"银卡\"",[100,160086,696],{"class":258},[100,160088,160089,160092,160094],{"class":102,"line":595},[100,160090,160091],{"class":258},"    discount ",[100,160093,472],{"class":471},[100,160095,160096],{"class":117}," 0.9\n",[100,160098,160099,160101,160103,160105,160108],{"class":102,"line":601},[100,160100,159048],{"class":471},[100,160102,160079],{"class":258},[100,160104,4551],{"class":471},[100,160106,160107],{"class":110}," \"金卡\"",[100,160109,696],{"class":258},[100,160111,160112,160114,160116],{"class":102,"line":606},[100,160113,160091],{"class":258},[100,160115,472],{"class":471},[100,160117,160118],{"class":117}," 0.8\n",[100,160120,160121,160123,160125,160127,160130],{"class":102,"line":612},[100,160122,159048],{"class":471},[100,160124,160079],{"class":258},[100,160126,4551],{"class":471},[100,160128,160129],{"class":110}," \"普通\"",[100,160131,696],{"class":258},[100,160133,160134,160136,160138],{"class":102,"line":618},[100,160135,160091],{"class":258},[100,160137,472],{"class":471},[100,160139,57253],{"class":117},[100,160141,160142,160144],{"class":102,"line":623},[100,160143,3322],{"class":471},[100,160145,696],{"class":258},[100,160147,160148,160150,160152,160155],{"class":102,"line":629},[100,160149,702],{"class":117},[100,160151,713],{"class":258},[100,160153,160154],{"class":110},"\"会员等级输入错误，按普通会员计算\"",[100,160156,809],{"class":258},[100,160158,160159],{"class":102,"line":635},[100,160160,570],{"emptyLinePlaceholder":569},[100,160162,160163,160166,160168,160171,160173],{"class":102,"line":641},[100,160164,160165],{"class":258},"pay ",[100,160167,472],{"class":471},[100,160169,160170],{"class":258}," amount ",[100,160172,2222],{"class":471},[100,160174,158517],{"class":258},[100,160176,160177],{"class":102,"line":647},[100,160178,570],{"emptyLinePlaceholder":569},[100,160180,160181,160183,160186,160188,160191],{"class":102,"line":653},[100,160182,958],{"class":471},[100,160184,160185],{"class":258}," pay ",[100,160187,3331],{"class":471},[100,160189,160190],{"class":117}," 500",[100,160192,696],{"class":258},[100,160194,160195,160198,160200],{"class":102,"line":659},[100,160196,160197],{"class":258},"    pay ",[100,160199,151494],{"class":471},[100,160201,160202],{"class":117}," 50\n",[100,160204,160205],{"class":102,"line":665},[100,160206,570],{"emptyLinePlaceholder":569},[100,160208,160209,160211,160213,160215,160217,160219,160222,160224,160226,160228],{"class":102,"line":670},[100,160210,1195],{"class":117},[100,160212,713],{"class":258},[100,160214,1830],{"class":471},[100,160216,158598],{"class":110},[100,160218,2662],{"class":117},[100,160220,160221],{"class":258},"pay",[100,160223,158401],{"class":471},[100,160225,2712],{"class":117},[100,160227,158254],{"class":110},[100,160229,809],{"class":258},[14,160231,160233],{"id":160232},"_312-易错点","3.12 易错点",[26,160235,160236,160239,160242,160245,160250],{},[29,160237,160238],{},"冒号不能漏。",[29,160240,160241],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[29,160243,160244],{},"多分支判断要注意顺序。",[29,160246,160247,160248,233],{},"判断相等用 ",[32,160249,4551],{},[29,160251,160252],{},"字符串比较区分大小写：",[73,160254,160256],{"className":249,"code":160255,"language":251,"meta":79,"style":79},"\"Y\" == \"y\"  # False\n",[32,160257,160258],{"__ignoreMap":79},[100,160259,160260,160263,160265,160267],{"class":102,"line":103},[100,160261,160262],{"class":110},"\"Y\"",[100,160264,964],{"class":471},[100,160266,159247],{"class":110},[100,160268,160269],{"class":1836},"  # False\n",[19,160271,160272],{},"可转换后再判断：",[73,160274,160276],{"className":249,"code":160275,"language":251,"meta":79,"style":79},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[32,160277,160278,160295,160308],{"__ignoreMap":79},[100,160279,160280,160283,160285,160287,160289,160292],{"class":102,"line":103},[100,160281,160282],{"class":258},"answer ",[100,160284,472],{"class":471},[100,160286,62159],{"class":117},[100,160288,713],{"class":258},[100,160290,160291],{"class":110},"\"是否继续(y\u002Fn):\"",[100,160293,160294],{"class":258},").lower()\n",[100,160296,160297,160299,160302,160304,160306],{"class":102,"line":188},[100,160298,958],{"class":471},[100,160300,160301],{"class":258}," answer ",[100,160303,4551],{"class":471},[100,160305,159247],{"class":110},[100,160307,696],{"class":258},[100,160309,160310,160312,160314,160317],{"class":102,"line":199},[100,160311,702],{"class":117},[100,160313,713],{"class":258},[100,160315,160316],{"class":110},"\"继续\"",[100,160318,809],{"class":258},[14,160320,160322],{"id":160321},"_313-本章练习","3.13 本章练习",[26,160324,160325,160328,160331,160334,160344],{},[29,160326,160327],{},"输入年龄，判断是否成年。",[29,160329,160330],{},"输入年份，判断是否为闰年。",[29,160332,160333],{},"输入三个数字，输出最大值。",[29,160335,160336,160337,160340,160341,160343],{},"写登录判断：用户名是 ",[32,160338,160339],{},"admin"," 且密码是 ",[32,160342,16665],{}," 才登录成功。",[29,160345,160346],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[1677,160348,160349],{},"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":79,"searchDepth":188,"depth":188,"links":160351},[160352,160353,160354,160355,160356,160357,160362,160363,160364,160365,160366,160367,160368],{"id":158740,"depth":188,"text":158741},{"id":158793,"depth":188,"text":158794},{"id":158897,"depth":188,"text":158898},{"id":158987,"depth":188,"text":158988},{"id":159177,"depth":188,"text":159178},{"id":159300,"depth":188,"text":159301,"children":160358},[160359,160360,160361],{"id":159304,"depth":199,"text":159305},{"id":159361,"depth":199,"text":159362},{"id":159418,"depth":199,"text":159419},{"id":159463,"depth":188,"text":159464},{"id":159554,"depth":188,"text":159555},{"id":159681,"depth":188,"text":159682},{"id":159811,"depth":188,"text":159812},{"id":159996,"depth":188,"text":159997},{"id":160232,"depth":188,"text":160233},{"id":160321,"depth":188,"text":160322},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":158732,"description":24958},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":160375,"title":160376,"body":160377,"description":24958,"extension":1708,"meta":162146,"navigation":569,"path":162147,"seo":162148,"stem":162149,"__hash__":162150},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":160378,"toc":162126},[160379,160382,160386,160392,160395,160412,160416,160418,160435,160437,160482,160484,160501,160505,160508,160574,160577,160595,160599,160760,160769,160773,160777,160782,160829,160831,160837,160841,160846,160893,160895,160901,160905,160910,160946,160949,160996,161000,161006,161064,161069,161100,161105,161109,161164,161167,161239,161242,161301,161305,161308,161383,161386,161390,161496,161499,161525,161529,161541,161610,161613,161705,161709,161711,161722,161724,161854,161858,162060,162068,162072,162102,162106,162123],[10,160380,160376],{"id":160381},"_4-循环语句",[14,160383,160385],{"id":160384},"_41-为什么需要循环","4.1 为什么需要循环",[19,160387,160388,160389,160391],{},"如果要输出 1 到 100，不应该写 100 行 ",[32,160390,147714],{},"，而应该用循环。",[19,160393,160394],{},"循环适合处理重复任务：",[26,160396,160397,160400,160403,160406,160409],{},[29,160398,160399],{},"重复输出。",[29,160401,160402],{},"重复输入。",[29,160404,160405],{},"遍历数据。",[29,160407,160408],{},"持续执行菜单。",[29,160410,160411],{},"批量处理文件或数据。",[14,160413,160415],{"id":160414},"_42-while循环","4.2 while循环",[19,160417,6779],{},[73,160419,160421],{"className":249,"code":160420,"language":251,"meta":79,"style":79},"while 条件:\n    循环体\n",[32,160422,160423,160430],{"__ignoreMap":79},[100,160424,160425,160427],{"class":102,"line":103},[100,160426,109905],{"class":471},[100,160428,160429],{"class":258}," 条件:\n",[100,160431,160432],{"class":102,"line":188},[100,160433,160434],{"class":258},"    循环体\n",[19,160436,16716],{},[73,160438,160440],{"className":249,"code":160439,"language":251,"meta":79,"style":79},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[32,160441,160442,160450,160454,160466,160473],{"__ignoreMap":79},[100,160443,160444,160446,160448],{"class":102,"line":103},[100,160445,101698],{"class":258},[100,160447,472],{"class":471},[100,160449,57253],{"class":117},[100,160451,160452],{"class":102,"line":188},[100,160453,570],{"emptyLinePlaceholder":569},[100,160455,160456,160458,160460,160462,160464],{"class":102,"line":199},[100,160457,109905],{"class":471},[100,160459,11023],{"class":258},[100,160461,3220],{"class":471},[100,160463,3759],{"class":117},[100,160465,696],{"class":258},[100,160467,160468,160470],{"class":102,"line":532},[100,160469,702],{"class":117},[100,160471,160472],{"class":258},"(i)\n",[100,160474,160475,160478,160480],{"class":102,"line":577},[100,160476,160477],{"class":258},"    i ",[100,160479,11062],{"class":471},[100,160481,57253],{"class":117},[19,160483,82483],{},[26,160485,160486,160492,160495,160498],{},[29,160487,160488,160489,233],{},"判断条件 ",[32,160490,160491],{},"i \u003C= 5",[29,160493,160494],{},"条件成立，执行循环体。",[29,160496,160497],{},"执行完后回到条件判断。",[29,160499,160500],{},"条件不成立，退出循环。",[14,160502,160504],{"id":160503},"_43-while累加","4.3 while累加",[19,160506,160507],{},"计算 1 到 100 的和：",[73,160509,160511],{"className":249,"code":160510,"language":251,"meta":79,"style":79},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[32,160512,160513,160521,160529,160533,160545,160555,160563,160567],{"__ignoreMap":79},[100,160514,160515,160517,160519],{"class":102,"line":103},[100,160516,101698],{"class":258},[100,160518,472],{"class":471},[100,160520,57253],{"class":117},[100,160522,160523,160525,160527],{"class":102,"line":188},[100,160524,158502],{"class":258},[100,160526,472],{"class":471},[100,160528,48887],{"class":117},[100,160530,160531],{"class":102,"line":199},[100,160532,570],{"emptyLinePlaceholder":569},[100,160534,160535,160537,160539,160541,160543],{"class":102,"line":532},[100,160536,109905],{"class":471},[100,160538,11023],{"class":258},[100,160540,3220],{"class":471},[100,160542,7350],{"class":117},[100,160544,696],{"class":258},[100,160546,160547,160550,160552],{"class":102,"line":577},[100,160548,160549],{"class":258},"    total ",[100,160551,11062],{"class":471},[100,160553,160554],{"class":258}," i\n",[100,160556,160557,160559,160561],{"class":102,"line":589},[100,160558,160477],{"class":258},[100,160560,11062],{"class":471},[100,160562,57253],{"class":117},[100,160564,160565],{"class":102,"line":595},[100,160566,570],{"emptyLinePlaceholder":569},[100,160568,160569,160571],{"class":102,"line":601},[100,160570,1195],{"class":117},[100,160572,160573],{"class":258},"(total)\n",[19,160575,160576],{},"核心思想：",[26,160578,160579,160584,160589],{},[29,160580,160581,160583],{},[32,160582,2208],{}," 控制循环次数。",[29,160585,160586,160588],{},[32,160587,158603],{}," 保存累加结果。",[29,160590,160591,160592,160594],{},"每轮循环都要更新 ",[32,160593,2208],{},"，否则可能死循环。",[14,160596,160598],{"id":160597},"_44-while猜数字","4.4 while猜数字",[73,160600,160602],{"className":249,"code":160601,"language":251,"meta":79,"style":79},"import random\n\nanswer = random.randint(1, 100)\ncount = 0\n\nwhile True:\n    guess = int(input(\"请输入1到100之间的数字:\"))\n    count += 1\n\n    if guess > answer:\n        print(\"猜大了\")\n    elif guess \u003C answer:\n        print(\"猜小了\")\n    else:\n        print(f\"猜对了，一共猜了{count}次\")\n        break\n",[32,160603,160604,160610,160614,160631,160639,160643,160651,160671,160680,160684,160696,160707,160717,160728,160734,160756],{"__ignoreMap":79},[100,160605,160606,160608],{"class":102,"line":103},[100,160607,548],{"class":471},[100,160609,46882],{"class":258},[100,160611,160612],{"class":102,"line":188},[100,160613,570],{"emptyLinePlaceholder":569},[100,160615,160616,160618,160620,160623,160625,160627,160629],{"class":102,"line":199},[100,160617,160282],{"class":258},[100,160619,472],{"class":471},[100,160621,160622],{"class":258}," random.randint(",[100,160624,1985],{"class":117},[100,160626,14017],{"class":258},[100,160628,2078],{"class":117},[100,160630,809],{"class":258},[100,160632,160633,160635,160637],{"class":102,"line":532},[100,160634,147933],{"class":258},[100,160636,472],{"class":471},[100,160638,48887],{"class":117},[100,160640,160641],{"class":102,"line":577},[100,160642,570],{"emptyLinePlaceholder":569},[100,160644,160645,160647,160649],{"class":102,"line":589},[100,160646,109905],{"class":471},[100,160648,96844],{"class":117},[100,160650,696],{"class":258},[100,160652,160653,160656,160658,160660,160662,160664,160666,160669],{"class":102,"line":595},[100,160654,160655],{"class":258},"    guess ",[100,160657,472],{"class":471},[100,160659,3993],{"class":117},[100,160661,713],{"class":258},[100,160663,55375],{"class":117},[100,160665,713],{"class":258},[100,160667,160668],{"class":110},"\"请输入1到100之间的数字:\"",[100,160670,751],{"class":258},[100,160672,160673,160676,160678],{"class":102,"line":601},[100,160674,160675],{"class":258},"    count ",[100,160677,11062],{"class":471},[100,160679,57253],{"class":117},[100,160681,160682],{"class":102,"line":606},[100,160683,570],{"emptyLinePlaceholder":569},[100,160685,160686,160688,160691,160693],{"class":102,"line":612},[100,160687,4702],{"class":471},[100,160689,160690],{"class":258}," guess ",[100,160692,2726],{"class":471},[100,160694,160695],{"class":258}," answer:\n",[100,160697,160698,160700,160702,160705],{"class":102,"line":618},[100,160699,34007],{"class":117},[100,160701,713],{"class":258},[100,160703,160704],{"class":110},"\"猜大了\"",[100,160706,809],{"class":258},[100,160708,160709,160711,160713,160715],{"class":102,"line":623},[100,160710,40847],{"class":471},[100,160712,160690],{"class":258},[100,160714,2676],{"class":471},[100,160716,160695],{"class":258},[100,160718,160719,160721,160723,160726],{"class":102,"line":629},[100,160720,34007],{"class":117},[100,160722,713],{"class":258},[100,160724,160725],{"class":110},"\"猜小了\"",[100,160727,809],{"class":258},[100,160729,160730,160732],{"class":102,"line":635},[100,160731,159264],{"class":471},[100,160733,696],{"class":258},[100,160735,160736,160738,160740,160742,160745,160747,160749,160751,160754],{"class":102,"line":641},[100,160737,34007],{"class":117},[100,160739,713],{"class":258},[100,160741,1830],{"class":471},[100,160743,160744],{"class":110},"\"猜对了，一共猜了",[100,160746,2662],{"class":117},[100,160748,85986],{"class":258},[100,160750,2712],{"class":117},[100,160752,160753],{"class":110},"次\"",[100,160755,809],{"class":258},[100,160757,160758],{"class":102,"line":647},[100,160759,33185],{"class":471},[19,160761,160762,160765,160766,160768],{},[32,160763,160764],{},"while True"," 表示无限循环，通常配合 ",[32,160767,3664],{}," 使用。",[14,160770,160772],{"id":160771},"_45-break和continue","4.5 break和continue",[305,160774,160776],{"id":160775},"_451-break","4.5.1 break",[19,160778,160779,160781],{},[32,160780,3664],{}," 直接结束整个循环。",[73,160783,160785],{"className":249,"code":160784,"language":251,"meta":79,"style":79},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[32,160786,160787,160807,160819,160823],{"__ignoreMap":79},[100,160788,160789,160791,160793,160795,160797,160799,160801,160803,160805],{"class":102,"line":103},[100,160790,1051],{"class":471},[100,160792,11023],{"class":258},[100,160794,854],{"class":471},[100,160796,857],{"class":117},[100,160798,713],{"class":258},[100,160800,1985],{"class":117},[100,160802,14017],{"class":258},[100,160804,2111],{"class":117},[100,160806,865],{"class":258},[100,160808,160809,160811,160813,160815,160817],{"class":102,"line":188},[100,160810,4702],{"class":471},[100,160812,11023],{"class":258},[100,160814,4551],{"class":471},[100,160816,79624],{"class":117},[100,160818,696],{"class":258},[100,160820,160821],{"class":102,"line":199},[100,160822,33185],{"class":471},[100,160824,160825,160827],{"class":102,"line":532},[100,160826,702],{"class":117},[100,160828,160472],{"class":258},[19,160830,147699],{},[73,160832,160835],{"className":160833,"code":160834,"language":78,"meta":79},[76],"1\n2\n",[32,160836,160834],{"__ignoreMap":79},[305,160838,160840],{"id":160839},"_452-continue","4.5.2 continue",[19,160842,160843,160845],{},[32,160844,155914],{}," 跳过本轮剩余代码，进入下一轮循环。",[73,160847,160849],{"className":249,"code":160848,"language":251,"meta":79,"style":79},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[32,160850,160851,160871,160883,160887],{"__ignoreMap":79},[100,160852,160853,160855,160857,160859,160861,160863,160865,160867,160869],{"class":102,"line":103},[100,160854,1051],{"class":471},[100,160856,11023],{"class":258},[100,160858,854],{"class":471},[100,160860,857],{"class":117},[100,160862,713],{"class":258},[100,160864,1985],{"class":117},[100,160866,14017],{"class":258},[100,160868,2111],{"class":117},[100,160870,865],{"class":258},[100,160872,160873,160875,160877,160879,160881],{"class":102,"line":188},[100,160874,4702],{"class":471},[100,160876,11023],{"class":258},[100,160878,4551],{"class":471},[100,160880,79624],{"class":117},[100,160882,696],{"class":258},[100,160884,160885],{"class":102,"line":199},[100,160886,149754],{"class":471},[100,160888,160889,160891],{"class":102,"line":532},[100,160890,702],{"class":117},[100,160892,160472],{"class":258},[19,160894,147699],{},[73,160896,160899],{"className":160897,"code":160898,"language":78,"meta":79},[76],"1\n2\n4\n5\n",[32,160900,160898],{"__ignoreMap":79},[14,160902,160904],{"id":160903},"_46-for循环","4.6 for循环",[19,160906,160907,160909],{},[32,160908,1051],{}," 常用于遍历序列。",[73,160911,160913],{"className":249,"code":160912,"language":251,"meta":79,"style":79},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[32,160914,160915,160924,160928,160939],{"__ignoreMap":79},[100,160916,160917,160919,160921],{"class":102,"line":103},[100,160918,147778],{"class":258},[100,160920,472],{"class":471},[100,160922,160923],{"class":110}," \"python\"\n",[100,160925,160926],{"class":102,"line":188},[100,160927,570],{"emptyLinePlaceholder":569},[100,160929,160930,160932,160935,160937],{"class":102,"line":199},[100,160931,1051],{"class":471},[100,160933,160934],{"class":258}," ch ",[100,160936,854],{"class":471},[100,160938,159641],{"class":258},[100,160940,160941,160943],{"class":102,"line":532},[100,160942,702],{"class":117},[100,160944,160945],{"class":258},"(ch)\n",[19,160947,160948],{},"遍历列表：",[73,160950,160952],{"className":249,"code":160951,"language":251,"meta":79,"style":79},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[32,160953,160954,160976,160980,160990],{"__ignoreMap":79},[100,160955,160956,160959,160961,160963,160965,160967,160969,160971,160974],{"class":102,"line":103},[100,160957,160958],{"class":258},"students ",[100,160960,472],{"class":471},[100,160962,53780],{"class":258},[100,160964,151130],{"class":110},[100,160966,14017],{"class":258},[100,160968,152178],{"class":110},[100,160970,14017],{"class":258},[100,160972,160973],{"class":110},"\"小刚\"",[100,160975,34802],{"class":258},[100,160977,160978],{"class":102,"line":188},[100,160979,570],{"emptyLinePlaceholder":569},[100,160981,160982,160984,160986,160988],{"class":102,"line":199},[100,160983,1051],{"class":471},[100,160985,153379],{"class":258},[100,160987,854],{"class":471},[100,160989,153384],{"class":258},[100,160991,160992,160994],{"class":102,"line":532},[100,160993,702],{"class":117},[100,160995,151284],{"class":258},[14,160997,160999],{"id":160998},"_47-range函数","4.7 range函数",[19,161001,161002,161005],{},[32,161003,161004],{},"range()"," 用于生成整数序列。",[73,161007,161009],{"className":249,"code":161008,"language":251,"meta":79,"style":79},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[32,161010,161011,161025,161043],{"__ignoreMap":79},[100,161012,161013,161015,161017,161019,161022],{"class":102,"line":103},[100,161014,34971],{"class":117},[100,161016,713],{"class":258},[100,161018,2086],{"class":117},[100,161020,161021],{"class":258},")          ",[100,161023,161024],{"class":1836},"# 0,1,2,3,4\n",[100,161026,161027,161029,161031,161033,161035,161037,161040],{"class":102,"line":188},[100,161028,34971],{"class":117},[100,161030,713],{"class":258},[100,161032,1985],{"class":117},[100,161034,14017],{"class":258},[100,161036,2086],{"class":117},[100,161038,161039],{"class":258},")       ",[100,161041,161042],{"class":1836},"# 1,2,3,4\n",[100,161044,161045,161047,161049,161051,161053,161055,161057,161059,161061],{"class":102,"line":199},[100,161046,34971],{"class":117},[100,161048,713],{"class":258},[100,161050,1985],{"class":117},[100,161052,14017],{"class":258},[100,161054,2213],{"class":117},[100,161056,14017],{"class":258},[100,161058,465],{"class":117},[100,161060,156903],{"class":258},[100,161062,161063],{"class":1836},"# 1,3,5,7,9\n",[19,161065,161066,161067,1646],{},"配合 ",[32,161068,1051],{},[73,161070,161072],{"className":249,"code":161071,"language":251,"meta":79,"style":79},"for i in range(1, 6):\n    print(i)\n",[32,161073,161074,161094],{"__ignoreMap":79},[100,161075,161076,161078,161080,161082,161084,161086,161088,161090,161092],{"class":102,"line":103},[100,161077,1051],{"class":471},[100,161079,11023],{"class":258},[100,161081,854],{"class":471},[100,161083,857],{"class":117},[100,161085,713],{"class":258},[100,161087,1985],{"class":117},[100,161089,14017],{"class":258},[100,161091,2111],{"class":117},[100,161093,865],{"class":258},[100,161095,161096,161098],{"class":102,"line":188},[100,161097,702],{"class":117},[100,161099,160472],{"class":258},[19,161101,381,161102,161104],{},[32,161103,34971],{}," 的结束值不包含在内。",[14,161106,161108],{"id":161107},"_48-for循环求和","4.8 for循环求和",[73,161110,161112],{"className":249,"code":161111,"language":251,"meta":79,"style":79},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[32,161113,161114,161122,161126,161146,161154,161158],{"__ignoreMap":79},[100,161115,161116,161118,161120],{"class":102,"line":103},[100,161117,158502],{"class":258},[100,161119,472],{"class":471},[100,161121,48887],{"class":117},[100,161123,161124],{"class":102,"line":188},[100,161125,570],{"emptyLinePlaceholder":569},[100,161127,161128,161130,161132,161134,161136,161138,161140,161142,161144],{"class":102,"line":199},[100,161129,1051],{"class":471},[100,161131,11023],{"class":258},[100,161133,854],{"class":471},[100,161135,857],{"class":117},[100,161137,713],{"class":258},[100,161139,1985],{"class":117},[100,161141,14017],{"class":258},[100,161143,2104],{"class":117},[100,161145,865],{"class":258},[100,161147,161148,161150,161152],{"class":102,"line":532},[100,161149,160549],{"class":258},[100,161151,11062],{"class":471},[100,161153,160554],{"class":258},[100,161155,161156],{"class":102,"line":577},[100,161157,570],{"emptyLinePlaceholder":569},[100,161159,161160,161162],{"class":102,"line":589},[100,161161,1195],{"class":117},[100,161163,160573],{"class":258},[19,161165,161166],{},"求偶数和：",[73,161168,161170],{"className":249,"code":161169,"language":251,"meta":79,"style":79},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[32,161171,161172,161180,161184,161204,161220,161229,161233],{"__ignoreMap":79},[100,161173,161174,161176,161178],{"class":102,"line":103},[100,161175,158502],{"class":258},[100,161177,472],{"class":471},[100,161179,48887],{"class":117},[100,161181,161182],{"class":102,"line":188},[100,161183,570],{"emptyLinePlaceholder":569},[100,161185,161186,161188,161190,161192,161194,161196,161198,161200,161202],{"class":102,"line":199},[100,161187,1051],{"class":471},[100,161189,11023],{"class":258},[100,161191,854],{"class":471},[100,161193,857],{"class":117},[100,161195,713],{"class":258},[100,161197,1985],{"class":117},[100,161199,14017],{"class":258},[100,161201,2104],{"class":117},[100,161203,865],{"class":258},[100,161205,161206,161208,161210,161212,161214,161216,161218],{"class":102,"line":532},[100,161207,4702],{"class":471},[100,161209,11023],{"class":258},[100,161211,2095],{"class":471},[100,161213,16336],{"class":117},[100,161215,964],{"class":471},[100,161217,5692],{"class":117},[100,161219,696],{"class":258},[100,161221,161222,161225,161227],{"class":102,"line":577},[100,161223,161224],{"class":258},"        total ",[100,161226,11062],{"class":471},[100,161228,160554],{"class":258},[100,161230,161231],{"class":102,"line":589},[100,161232,570],{"emptyLinePlaceholder":569},[100,161234,161235,161237],{"class":102,"line":595},[100,161236,1195],{"class":117},[100,161238,160573],{"class":258},[19,161240,161241],{},"也可以：",[73,161243,161245],{"className":249,"code":161244,"language":251,"meta":79,"style":79},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[32,161246,161247,161255,161259,161283,161291,161295],{"__ignoreMap":79},[100,161248,161249,161251,161253],{"class":102,"line":103},[100,161250,158502],{"class":258},[100,161252,472],{"class":471},[100,161254,48887],{"class":117},[100,161256,161257],{"class":102,"line":188},[100,161258,570],{"emptyLinePlaceholder":569},[100,161260,161261,161263,161265,161267,161269,161271,161273,161275,161277,161279,161281],{"class":102,"line":199},[100,161262,1051],{"class":471},[100,161264,11023],{"class":258},[100,161266,854],{"class":471},[100,161268,857],{"class":117},[100,161270,713],{"class":258},[100,161272,465],{"class":117},[100,161274,14017],{"class":258},[100,161276,2104],{"class":117},[100,161278,14017],{"class":258},[100,161280,465],{"class":117},[100,161282,865],{"class":258},[100,161284,161285,161287,161289],{"class":102,"line":532},[100,161286,160549],{"class":258},[100,161288,11062],{"class":471},[100,161290,160554],{"class":258},[100,161292,161293],{"class":102,"line":577},[100,161294,570],{"emptyLinePlaceholder":569},[100,161296,161297,161299],{"class":102,"line":589},[100,161298,1195],{"class":117},[100,161300,160573],{"class":258},[14,161302,161304],{"id":161303},"_49-循环嵌套","4.9 循环嵌套",[19,161306,161307],{},"嵌套循环就是循环里面再写循环。",[73,161309,161311],{"className":249,"code":161310,"language":251,"meta":79,"style":79},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[32,161312,161313,161333,161353],{"__ignoreMap":79},[100,161314,161315,161317,161319,161321,161323,161325,161327,161329,161331],{"class":102,"line":103},[100,161316,1051],{"class":471},[100,161318,11023],{"class":258},[100,161320,854],{"class":471},[100,161322,857],{"class":117},[100,161324,713],{"class":258},[100,161326,1985],{"class":117},[100,161328,14017],{"class":258},[100,161330,748],{"class":117},[100,161332,865],{"class":258},[100,161334,161335,161337,161339,161341,161343,161345,161347,161349,161351],{"class":102,"line":188},[100,161336,848],{"class":471},[100,161338,11085],{"class":258},[100,161340,854],{"class":471},[100,161342,857],{"class":117},[100,161344,713],{"class":258},[100,161346,1985],{"class":117},[100,161348,14017],{"class":258},[100,161350,748],{"class":117},[100,161352,865],{"class":258},[100,161354,161355,161357,161359,161361,161364,161366,161368,161370,161373,161375,161377,161379,161381],{"class":102,"line":199},[100,161356,34007],{"class":117},[100,161358,713],{"class":258},[100,161360,1830],{"class":471},[100,161362,161363],{"class":110},"\"i=",[100,161365,2662],{"class":117},[100,161367,2208],{"class":258},[100,161369,2712],{"class":117},[100,161371,161372],{"class":110},", j=",[100,161374,2662],{"class":117},[100,161376,2234],{"class":258},[100,161378,2712],{"class":117},[100,161380,2019],{"class":110},[100,161382,809],{"class":258},[19,161384,161385],{},"外层循环执行一次，内层循环执行完整一轮。",[14,161387,161389],{"id":161388},"_410-九九乘法表","4.10 九九乘法表",[73,161391,161393],{"className":249,"code":161392,"language":251,"meta":79,"style":79},"for i in range(1, 10):\n    for j in range(1, i + 1):\n        print(f\"{j}*{i}={i * j}\", end=\"\\t\")\n    print()\n",[32,161394,161395,161415,161438,161490],{"__ignoreMap":79},[100,161396,161397,161399,161401,161403,161405,161407,161409,161411,161413],{"class":102,"line":103},[100,161398,1051],{"class":471},[100,161400,11023],{"class":258},[100,161402,854],{"class":471},[100,161404,857],{"class":117},[100,161406,713],{"class":258},[100,161408,1985],{"class":117},[100,161410,14017],{"class":258},[100,161412,2213],{"class":117},[100,161414,865],{"class":258},[100,161416,161417,161419,161421,161423,161425,161427,161429,161432,161434,161436],{"class":102,"line":188},[100,161418,848],{"class":471},[100,161420,11085],{"class":258},[100,161422,854],{"class":471},[100,161424,857],{"class":117},[100,161426,713],{"class":258},[100,161428,1985],{"class":117},[100,161430,161431],{"class":258},", i ",[100,161433,2248],{"class":471},[100,161435,26693],{"class":117},[100,161437,865],{"class":258},[100,161439,161440,161442,161444,161446,161448,161450,161452,161454,161456,161458,161460,161462,161464,161466,161468,161470,161472,161474,161476,161478,161480,161482,161484,161486,161488],{"class":102,"line":199},[100,161441,34007],{"class":117},[100,161443,713],{"class":258},[100,161445,1830],{"class":471},[100,161447,2019],{"class":110},[100,161449,2662],{"class":117},[100,161451,2234],{"class":258},[100,161453,2712],{"class":117},[100,161455,2222],{"class":110},[100,161457,2662],{"class":117},[100,161459,2208],{"class":258},[100,161461,2712],{"class":117},[100,161463,472],{"class":110},[100,161465,2662],{"class":117},[100,161467,101698],{"class":258},[100,161469,2222],{"class":471},[100,161471,5010],{"class":258},[100,161473,2712],{"class":117},[100,161475,2019],{"class":110},[100,161477,14017],{"class":258},[100,161479,47355],{"class":6812},[100,161481,472],{"class":471},[100,161483,2019],{"class":110},[100,161485,2867],{"class":117},[100,161487,2019],{"class":110},[100,161489,809],{"class":258},[100,161491,161492,161494],{"class":102,"line":532},[100,161493,702],{"class":117},[100,161495,3587],{"class":258},[19,161497,161498],{},"关键点：",[26,161500,161501,161507,161513,161519],{},[29,161502,161503,161504,161506],{},"外层 ",[32,161505,2208],{}," 控制行。",[29,161508,161509,161510,161512],{},"内层 ",[32,161511,2234],{}," 控制列。",[29,161514,161515,161516,161518],{},"每行结束后用 ",[32,161517,147714],{}," 换行。",[29,161520,161521,161524],{},[32,161522,161523],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,161526,161528],{"id":161527},"_411-循环else","4.11 循环else",[19,161530,161531,161532,161534,161535,161537,161538,161540],{},"Python 的循环可以带 ",[32,161533,3322],{},"。当循环正常结束时执行 ",[32,161536,3322],{},"，如果被 ",[32,161539,3664],{}," 打断，则不执行。",[73,161542,161544],{"className":249,"code":161543,"language":251,"meta":79,"style":79},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[32,161545,161546,161566,161578,161589,161593,161599],{"__ignoreMap":79},[100,161547,161548,161550,161552,161554,161556,161558,161560,161562,161564],{"class":102,"line":103},[100,161549,1051],{"class":471},[100,161551,11023],{"class":258},[100,161553,854],{"class":471},[100,161555,857],{"class":117},[100,161557,713],{"class":258},[100,161559,1985],{"class":117},[100,161561,14017],{"class":258},[100,161563,2111],{"class":117},[100,161565,865],{"class":258},[100,161567,161568,161570,161572,161574,161576],{"class":102,"line":188},[100,161569,4702],{"class":471},[100,161571,11023],{"class":258},[100,161573,4551],{"class":471},[100,161575,3649],{"class":117},[100,161577,696],{"class":258},[100,161579,161580,161582,161584,161587],{"class":102,"line":199},[100,161581,34007],{"class":117},[100,161583,713],{"class":258},[100,161585,161586],{"class":110},"\"找到了\"",[100,161588,809],{"class":258},[100,161590,161591],{"class":102,"line":532},[100,161592,33185],{"class":471},[100,161594,161595,161597],{"class":102,"line":577},[100,161596,3322],{"class":471},[100,161598,696],{"class":258},[100,161600,161601,161603,161605,161608],{"class":102,"line":589},[100,161602,702],{"class":117},[100,161604,713],{"class":258},[100,161606,161607],{"class":110},"\"没找到\"",[100,161609,809],{"class":258},[19,161611,161612],{},"常用于搜索。",[73,161614,161616],{"className":249,"code":161615,"language":251,"meta":79,"style":79},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[32,161617,161618,161639,161648,161652,161664,161675,161685,161689,161695],{"__ignoreMap":79},[100,161619,161620,161623,161625,161627,161629,161631,161633,161635,161637],{"class":102,"line":103},[100,161621,161622],{"class":258},"names ",[100,161624,472],{"class":471},[100,161626,53780],{"class":258},[100,161628,151130],{"class":110},[100,161630,14017],{"class":258},[100,161632,152178],{"class":110},[100,161634,14017],{"class":258},[100,161636,160973],{"class":110},[100,161638,34802],{"class":258},[100,161640,161641,161643,161645],{"class":102,"line":188},[100,161642,112820],{"class":258},[100,161644,472],{"class":471},[100,161646,161647],{"class":110}," \"小李\"\n",[100,161649,161650],{"class":102,"line":199},[100,161651,570],{"emptyLinePlaceholder":569},[100,161653,161654,161656,161659,161661],{"class":102,"line":532},[100,161655,1051],{"class":471},[100,161657,161658],{"class":258}," name ",[100,161660,854],{"class":471},[100,161662,161663],{"class":258}," names:\n",[100,161665,161666,161668,161670,161672],{"class":102,"line":577},[100,161667,4702],{"class":471},[100,161669,161658],{"class":258},[100,161671,4551],{"class":471},[100,161673,161674],{"class":258}," target:\n",[100,161676,161677,161679,161681,161683],{"class":102,"line":589},[100,161678,34007],{"class":117},[100,161680,713],{"class":258},[100,161682,161586],{"class":110},[100,161684,809],{"class":258},[100,161686,161687],{"class":102,"line":595},[100,161688,33185],{"class":471},[100,161690,161691,161693],{"class":102,"line":601},[100,161692,3322],{"class":471},[100,161694,696],{"class":258},[100,161696,161697,161699,161701,161703],{"class":102,"line":606},[100,161698,702],{"class":117},[100,161700,713],{"class":258},[100,161702,161607],{"class":110},[100,161704,809],{"class":258},[14,161706,161708],{"id":161707},"_412-小案例登录重试","4.12 小案例：登录重试",[19,161710,124534],{},[26,161712,161713,161716,161719],{},[29,161714,161715],{},"用户最多输入 3 次密码。",[29,161717,161718],{},"密码正确则登录成功。",[29,161720,161721],{},"3 次都错误则锁定账号。",[19,161723,11617],{},[73,161725,161727],{"className":249,"code":161726,"language":251,"meta":79,"style":79},"password = \"123456\"\n\nfor i in range(3):\n    user_password = input(\"请输入密码:\")\n\n    if user_password == password:\n        print(\"登录成功\")\n        break\n    else:\n        print(f\"密码错误，还剩{2 - i}次机会\")\nelse:\n    print(\"账号已锁定\")\n",[32,161728,161729,161739,161743,161759,161775,161779,161791,161802,161806,161812,161837,161843],{"__ignoreMap":79},[100,161730,161731,161734,161736],{"class":102,"line":103},[100,161732,161733],{"class":258},"password ",[100,161735,472],{"class":471},[100,161737,161738],{"class":110}," \"123456\"\n",[100,161740,161741],{"class":102,"line":188},[100,161742,570],{"emptyLinePlaceholder":569},[100,161744,161745,161747,161749,161751,161753,161755,161757],{"class":102,"line":199},[100,161746,1051],{"class":471},[100,161748,11023],{"class":258},[100,161750,854],{"class":471},[100,161752,857],{"class":117},[100,161754,713],{"class":258},[100,161756,1849],{"class":117},[100,161758,865],{"class":258},[100,161760,161761,161764,161766,161768,161770,161773],{"class":102,"line":532},[100,161762,161763],{"class":258},"    user_password ",[100,161765,472],{"class":471},[100,161767,62159],{"class":117},[100,161769,713],{"class":258},[100,161771,161772],{"class":110},"\"请输入密码:\"",[100,161774,809],{"class":258},[100,161776,161777],{"class":102,"line":577},[100,161778,570],{"emptyLinePlaceholder":569},[100,161780,161781,161783,161786,161788],{"class":102,"line":589},[100,161782,4702],{"class":471},[100,161784,161785],{"class":258}," user_password ",[100,161787,4551],{"class":471},[100,161789,161790],{"class":258}," password:\n",[100,161792,161793,161795,161797,161800],{"class":102,"line":595},[100,161794,34007],{"class":117},[100,161796,713],{"class":258},[100,161798,161799],{"class":110},"\"登录成功\"",[100,161801,809],{"class":258},[100,161803,161804],{"class":102,"line":601},[100,161805,33185],{"class":471},[100,161807,161808,161810],{"class":102,"line":606},[100,161809,159264],{"class":471},[100,161811,696],{"class":258},[100,161813,161814,161816,161818,161820,161823,161826,161828,161830,161832,161835],{"class":102,"line":612},[100,161815,34007],{"class":117},[100,161817,713],{"class":258},[100,161819,1830],{"class":471},[100,161821,161822],{"class":110},"\"密码错误，还剩",[100,161824,161825],{"class":117},"{2",[100,161827,53825],{"class":471},[100,161829,4633],{"class":258},[100,161831,2712],{"class":117},[100,161833,161834],{"class":110},"次机会\"",[100,161836,809],{"class":258},[100,161838,161839,161841],{"class":102,"line":618},[100,161840,3322],{"class":471},[100,161842,696],{"class":258},[100,161844,161845,161847,161849,161852],{"class":102,"line":623},[100,161846,702],{"class":117},[100,161848,713],{"class":258},[100,161850,161851],{"class":110},"\"账号已锁定\"",[100,161853,809],{"class":258},[14,161855,161857],{"id":161856},"_413-小案例菜单程序","4.13 小案例：菜单程序",[73,161859,161861],{"className":249,"code":161860,"language":251,"meta":79,"style":79},"while True:\n    print(\"====== 菜单 ======\")\n    print(\"1. 查询余额\")\n    print(\"2. 存款\")\n    print(\"3. 取款\")\n    print(\"0. 退出\")\n\n    choice = input(\"请输入操作:\")\n\n    if choice == \"1\":\n        print(\"余额为1000元\")\n    elif choice == \"2\":\n        print(\"存款功能\")\n    elif choice == \"3\":\n        print(\"取款功能\")\n    elif choice == \"0\":\n        print(\"退出系统\")\n        break\n    else:\n        print(\"输入错误\")\n",[32,161862,161863,161871,161882,161893,161904,161915,161926,161930,161945,161949,161961,161972,161984,161995,162007,162018,162030,162040,162044,162050],{"__ignoreMap":79},[100,161864,161865,161867,161869],{"class":102,"line":103},[100,161866,109905],{"class":471},[100,161868,96844],{"class":117},[100,161870,696],{"class":258},[100,161872,161873,161875,161877,161880],{"class":102,"line":188},[100,161874,702],{"class":117},[100,161876,713],{"class":258},[100,161878,161879],{"class":110},"\"====== 菜单 ======\"",[100,161881,809],{"class":258},[100,161883,161884,161886,161888,161891],{"class":102,"line":199},[100,161885,702],{"class":117},[100,161887,713],{"class":258},[100,161889,161890],{"class":110},"\"1. 查询余额\"",[100,161892,809],{"class":258},[100,161894,161895,161897,161899,161902],{"class":102,"line":532},[100,161896,702],{"class":117},[100,161898,713],{"class":258},[100,161900,161901],{"class":110},"\"2. 存款\"",[100,161903,809],{"class":258},[100,161905,161906,161908,161910,161913],{"class":102,"line":577},[100,161907,702],{"class":117},[100,161909,713],{"class":258},[100,161911,161912],{"class":110},"\"3. 取款\"",[100,161914,809],{"class":258},[100,161916,161917,161919,161921,161924],{"class":102,"line":589},[100,161918,702],{"class":117},[100,161920,713],{"class":258},[100,161922,161923],{"class":110},"\"0. 退出\"",[100,161925,809],{"class":258},[100,161927,161928],{"class":102,"line":595},[100,161929,570],{"emptyLinePlaceholder":569},[100,161931,161932,161935,161937,161939,161941,161943],{"class":102,"line":601},[100,161933,161934],{"class":258},"    choice ",[100,161936,472],{"class":471},[100,161938,62159],{"class":117},[100,161940,713],{"class":258},[100,161942,154315],{"class":110},[100,161944,809],{"class":258},[100,161946,161947],{"class":102,"line":606},[100,161948,570],{"emptyLinePlaceholder":569},[100,161950,161951,161953,161955,161957,161959],{"class":102,"line":612},[100,161952,4702],{"class":471},[100,161954,154328],{"class":258},[100,161956,4551],{"class":471},[100,161958,154333],{"class":110},[100,161960,696],{"class":258},[100,161962,161963,161965,161967,161970],{"class":102,"line":618},[100,161964,34007],{"class":117},[100,161966,713],{"class":258},[100,161968,161969],{"class":110},"\"余额为1000元\"",[100,161971,809],{"class":258},[100,161973,161974,161976,161978,161980,161982],{"class":102,"line":623},[100,161975,40847],{"class":471},[100,161977,154328],{"class":258},[100,161979,4551],{"class":471},[100,161981,154352],{"class":110},[100,161983,696],{"class":258},[100,161985,161986,161988,161990,161993],{"class":102,"line":629},[100,161987,34007],{"class":117},[100,161989,713],{"class":258},[100,161991,161992],{"class":110},"\"存款功能\"",[100,161994,809],{"class":258},[100,161996,161997,161999,162001,162003,162005],{"class":102,"line":635},[100,161998,40847],{"class":471},[100,162000,154328],{"class":258},[100,162002,4551],{"class":471},[100,162004,154370],{"class":110},[100,162006,696],{"class":258},[100,162008,162009,162011,162013,162016],{"class":102,"line":641},[100,162010,34007],{"class":117},[100,162012,713],{"class":258},[100,162014,162015],{"class":110},"\"取款功能\"",[100,162017,809],{"class":258},[100,162019,162020,162022,162024,162026,162028],{"class":102,"line":647},[100,162021,40847],{"class":471},[100,162023,154328],{"class":258},[100,162025,4551],{"class":471},[100,162027,154424],{"class":110},[100,162029,696],{"class":258},[100,162031,162032,162034,162036,162038],{"class":102,"line":653},[100,162033,34007],{"class":117},[100,162035,713],{"class":258},[100,162037,154435],{"class":110},[100,162039,809],{"class":258},[100,162041,162042],{"class":102,"line":659},[100,162043,33185],{"class":471},[100,162045,162046,162048],{"class":102,"line":665},[100,162047,159264],{"class":471},[100,162049,696],{"class":258},[100,162051,162052,162054,162056,162058],{"class":102,"line":670},[100,162053,34007],{"class":117},[100,162055,713],{"class":258},[100,162057,154456],{"class":110},[100,162059,809],{"class":258},[19,162061,162062,162063,162065,162066,233],{},"菜单类程序通常使用 ",[32,162064,160764],{},"，用户选择退出时 ",[32,162067,3664],{},[14,162069,162071],{"id":162070},"_414-易错点","4.14 易错点",[26,162073,162074,162079,162085,162093,162099],{},[29,162075,162076,162078],{},[32,162077,109905],{}," 循环必须更新控制变量。",[29,162080,162081,162084],{},[32,162082,162083],{},"range(1, 10)"," 不包含 10。",[29,162086,162087,162089,162090,162092],{},[32,162088,3664],{}," 结束整个循环，",[32,162091,155914],{}," 只跳过本轮。",[29,162094,162095,162096,162098],{},"嵌套循环中，",[32,162097,3664],{}," 只跳出当前所在的一层循环。",[29,162100,162101],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,162103,162105],{"id":162104},"_415-本章练习","4.15 本章练习",[26,162107,162108,162111,162114,162117,162120],{},[29,162109,162110],{},"输出 1 到 100。",[29,162112,162113],{},"计算 1 到 100 的偶数和。",[29,162115,162116],{},"输出 100 以内能被 3 和 5 同时整除的数。",[29,162118,162119],{},"编写猜数字游戏，限制最多猜 7 次。",[29,162121,162122],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[1677,162124,162125],{},"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":79,"searchDepth":188,"depth":188,"links":162127},[162128,162129,162130,162131,162132,162136,162137,162138,162139,162140,162141,162142,162143,162144,162145],{"id":160384,"depth":188,"text":160385},{"id":160414,"depth":188,"text":160415},{"id":160503,"depth":188,"text":160504},{"id":160597,"depth":188,"text":160598},{"id":160771,"depth":188,"text":160772,"children":162133},[162134,162135],{"id":160775,"depth":199,"text":160776},{"id":160839,"depth":199,"text":160840},{"id":160903,"depth":188,"text":160904},{"id":160998,"depth":188,"text":160999},{"id":161107,"depth":188,"text":161108},{"id":161303,"depth":188,"text":161304},{"id":161388,"depth":188,"text":161389},{"id":161527,"depth":188,"text":161528},{"id":161707,"depth":188,"text":161708},{"id":161856,"depth":188,"text":161857},{"id":162070,"depth":188,"text":162071},{"id":162104,"depth":188,"text":162105},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":160376,"description":24958},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":162152,"title":162153,"body":162154,"description":24958,"extension":1708,"meta":164159,"navigation":569,"path":164160,"seo":164161,"stem":164162,"__hash__":164163},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":162155,"toc":164139},[162156,162159,162163,162166,162169,162183,162186,162200,162204,162206,162225,162227,162274,162276,162290,162294,162368,162371,162375,162378,162437,162445,162448,162501,162504,162508,162513,162568,162576,162626,162630,162635,162643,162742,162748,162752,162757,162760,162771,162812,162825,162829,162832,162868,162871,162884,162887,162947,162951,162955,162958,163009,163013,163016,163063,163069,163135,163138,163142,163145,163261,163264,163268,163271,163377,163381,163384,163422,163425,163467,163470,163530,163533,163537,164001,164004,164008,164035,164041,164102,164106,164136],[10,162157,162153],{"id":162158},"_5-函数基础",[14,162160,162162],{"id":162161},"_51-为什么需要函数","5.1 为什么需要函数",[19,162164,162165],{},"函数用于封装一段可以重复使用的代码。",[19,162167,162168],{},"不使用函数的问题：",[26,162170,162171,162174,162177,162180],{},[29,162172,162173],{},"重复代码多。",[29,162175,162176],{},"修改逻辑时容易漏改。",[29,162178,162179],{},"主流程不清晰。",[29,162181,162182],{},"程序越写越长，难以维护。",[19,162184,162185],{},"使用函数后的好处：",[26,162187,162188,162191,162194,162197],{},[29,162189,162190],{},"提高复用性。",[29,162192,162193],{},"提高可读性。",[29,162195,162196],{},"便于调试。",[29,162198,162199],{},"便于分工。",[14,162201,162203],{"id":162202},"_52-函数定义","5.2 函数定义",[19,162205,6779],{},[73,162207,162209],{"className":249,"code":162208,"language":251,"meta":79,"style":79},"def 函数名():\n    函数体\n",[32,162210,162211,162220],{"__ignoreMap":79},[100,162212,162213,162215,162218],{"class":102,"line":103},[100,162214,678],{"class":471},[100,162216,162217],{"class":106}," 函数名",[100,162219,33510],{"class":258},[100,162221,162222],{"class":102,"line":188},[100,162223,162224],{"class":258},"    函数体\n",[19,162226,16716],{},[73,162228,162230],{"className":249,"code":162229,"language":251,"meta":79,"style":79},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[32,162231,162232,162241,162251,162261,162265,162269],{"__ignoreMap":79},[100,162233,162234,162236,162239],{"class":102,"line":103},[100,162235,678],{"class":471},[100,162237,162238],{"class":106}," say_hello",[100,162240,33510],{"class":258},[100,162242,162243,162245,162247,162249],{"class":102,"line":188},[100,162244,702],{"class":117},[100,162246,713],{"class":258},[100,162248,7440],{"class":110},[100,162250,809],{"class":258},[100,162252,162253,162255,162257,162259],{"class":102,"line":199},[100,162254,702],{"class":117},[100,162256,713],{"class":258},[100,162258,147881],{"class":110},[100,162260,809],{"class":258},[100,162262,162263],{"class":102,"line":532},[100,162264,570],{"emptyLinePlaceholder":569},[100,162266,162267],{"class":102,"line":577},[100,162268,570],{"emptyLinePlaceholder":569},[100,162270,162271],{"class":102,"line":589},[100,162272,162273],{"class":258},"say_hello()\n",[19,162275,381],{},[26,162277,162278,162281,162284,162287],{},[29,162279,162280],{},"函数必须先定义，再调用。",[29,162282,162283],{},"函数名遵循变量命名规则。",[29,162285,162286],{},"函数体需要缩进。",[29,162288,162289],{},"函数不调用就不会执行。",[14,162291,162293],{"id":162292},"_53-函数调用","5.3 函数调用",[73,162295,162297],{"className":249,"code":162296,"language":251,"meta":79,"style":79},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[32,162298,162299,162308,162319,162330,162341,162351,162355,162359,162364],{"__ignoreMap":79},[100,162300,162301,162303,162306],{"class":102,"line":103},[100,162302,678],{"class":471},[100,162304,162305],{"class":106}," print_menu",[100,162307,33510],{"class":258},[100,162309,162310,162312,162314,162317],{"class":102,"line":188},[100,162311,702],{"class":117},[100,162313,713],{"class":258},[100,162315,162316],{"class":110},"\"1. 查询\"",[100,162318,809],{"class":258},[100,162320,162321,162323,162325,162328],{"class":102,"line":199},[100,162322,702],{"class":117},[100,162324,713],{"class":258},[100,162326,162327],{"class":110},"\"2. 添加\"",[100,162329,809],{"class":258},[100,162331,162332,162334,162336,162339],{"class":102,"line":532},[100,162333,702],{"class":117},[100,162335,713],{"class":258},[100,162337,162338],{"class":110},"\"3. 删除\"",[100,162340,809],{"class":258},[100,162342,162343,162345,162347,162349],{"class":102,"line":577},[100,162344,702],{"class":117},[100,162346,713],{"class":258},[100,162348,161923],{"class":110},[100,162350,809],{"class":258},[100,162352,162353],{"class":102,"line":589},[100,162354,570],{"emptyLinePlaceholder":569},[100,162356,162357],{"class":102,"line":595},[100,162358,570],{"emptyLinePlaceholder":569},[100,162360,162361],{"class":102,"line":601},[100,162362,162363],{"class":258},"print_menu()\n",[100,162365,162366],{"class":102,"line":606},[100,162367,162363],{"class":258},[19,162369,162370],{},"函数可以多次调用，每次调用都会执行函数体。",[14,162372,162374],{"id":162373},"_54-参数","5.4 参数",[19,162376,162377],{},"参数用于向函数传递数据。",[73,162379,162381],{"className":249,"code":162380,"language":251,"meta":79,"style":79},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[32,162382,162383,162392,162412,162416,162420,162429],{"__ignoreMap":79},[100,162384,162385,162387,162389],{"class":102,"line":103},[100,162386,678],{"class":471},[100,162388,162238],{"class":106},[100,162390,162391],{"class":258},"(name):\n",[100,162393,162394,162396,162398,162400,162402,162404,162406,162408,162410],{"class":102,"line":188},[100,162395,702],{"class":117},[100,162397,713],{"class":258},[100,162399,1830],{"class":471},[100,162401,158296],{"class":110},[100,162403,2662],{"class":117},[100,162405,81364],{"class":258},[100,162407,2712],{"class":117},[100,162409,2019],{"class":110},[100,162411,809],{"class":258},[100,162413,162414],{"class":102,"line":199},[100,162415,570],{"emptyLinePlaceholder":569},[100,162417,162418],{"class":102,"line":532},[100,162419,570],{"emptyLinePlaceholder":569},[100,162421,162422,162425,162427],{"class":102,"line":577},[100,162423,162424],{"class":258},"say_hello(",[100,162426,151130],{"class":110},[100,162428,809],{"class":258},[100,162430,162431,162433,162435],{"class":102,"line":589},[100,162432,162424],{"class":258},[100,162434,152178],{"class":110},[100,162436,809],{"class":258},[19,162438,162439,162441,162442,162444],{},[32,162440,81364],{}," 是形参，",[32,162443,151130],{}," 是实参。",[19,162446,162447],{},"多个参数：",[73,162449,162451],{"className":249,"code":162450,"language":251,"meta":79,"style":79},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[32,162452,162453,162461,162474,162480,162484,162488],{"__ignoreMap":79},[100,162454,162455,162457,162459],{"class":102,"line":103},[100,162456,678],{"class":471},[100,162458,6805],{"class":106},[100,162460,152335],{"class":258},[100,162462,162463,162466,162468,162470,162472],{"class":102,"line":188},[100,162464,162465],{"class":258},"    result ",[100,162467,472],{"class":471},[100,162469,12451],{"class":258},[100,162471,2248],{"class":471},[100,162473,152346],{"class":258},[100,162475,162476,162478],{"class":102,"line":199},[100,162477,702],{"class":117},[100,162479,78139],{"class":258},[100,162481,162482],{"class":102,"line":532},[100,162483,570],{"emptyLinePlaceholder":569},[100,162485,162486],{"class":102,"line":577},[100,162487,570],{"emptyLinePlaceholder":569},[100,162489,162490,162493,162495,162497,162499],{"class":102,"line":589},[100,162491,162492],{"class":258},"add(",[100,162494,2213],{"class":117},[100,162496,14017],{"class":258},[100,162498,2466],{"class":117},[100,162500,809],{"class":258},[19,162502,162503],{},"调用时参数数量必须匹配。",[14,162505,162507],{"id":162506},"_55-返回值","5.5 返回值",[19,162509,162510,162512],{},[32,162511,18627],{}," 用于把函数内部的结果返回给调用者。",[73,162514,162516],{"className":249,"code":162515,"language":251,"meta":79,"style":79},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[32,162517,162518,162526,162536,162540,162544,162562],{"__ignoreMap":79},[100,162519,162520,162522,162524],{"class":102,"line":103},[100,162521,678],{"class":471},[100,162523,6805],{"class":106},[100,162525,152335],{"class":258},[100,162527,162528,162530,162532,162534],{"class":102,"line":188},[100,162529,5689],{"class":471},[100,162531,12451],{"class":258},[100,162533,2248],{"class":471},[100,162535,152346],{"class":258},[100,162537,162538],{"class":102,"line":199},[100,162539,570],{"emptyLinePlaceholder":569},[100,162541,162542],{"class":102,"line":532},[100,162543,570],{"emptyLinePlaceholder":569},[100,162545,162546,162549,162551,162554,162556,162558,162560],{"class":102,"line":577},[100,162547,162548],{"class":258},"result ",[100,162550,472],{"class":471},[100,162552,162553],{"class":258}," add(",[100,162555,2213],{"class":117},[100,162557,14017],{"class":258},[100,162559,2466],{"class":117},[100,162561,809],{"class":258},[100,162563,162564,162566],{"class":102,"line":589},[100,162565,1195],{"class":117},[100,162567,78139],{"class":258},[19,162569,162570,162571,162573,162574,233],{},"如果函数没有写 ",[32,162572,18627],{},"，默认返回 ",[32,162575,693],{},[73,162577,162579],{"className":249,"code":162578,"language":251,"meta":79,"style":79},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[32,162580,162581,162589,162599,162603,162607,162616],{"__ignoreMap":79},[100,162582,162583,162585,162587],{"class":102,"line":103},[100,162584,678],{"class":471},[100,162586,162238],{"class":106},[100,162588,33510],{"class":258},[100,162590,162591,162593,162595,162597],{"class":102,"line":188},[100,162592,702],{"class":117},[100,162594,713],{"class":258},[100,162596,7440],{"class":110},[100,162598,809],{"class":258},[100,162600,162601],{"class":102,"line":199},[100,162602,570],{"emptyLinePlaceholder":569},[100,162604,162605],{"class":102,"line":532},[100,162606,570],{"emptyLinePlaceholder":569},[100,162608,162609,162611,162613],{"class":102,"line":577},[100,162610,162548],{"class":258},[100,162612,472],{"class":471},[100,162614,162615],{"class":258}," say_hello()\n",[100,162617,162618,162620,162623],{"class":102,"line":589},[100,162619,1195],{"class":117},[100,162621,162622],{"class":258},"(result)  ",[100,162624,162625],{"class":1836},"# None\n",[14,162627,162629],{"id":162628},"_56-return的作用","5.6 return的作用",[19,162631,162632,162634],{},[32,162633,18627],{}," 有两个作用：",[26,162636,162637,162640],{},[29,162638,162639],{},"返回结果。",[29,162641,162642],{},"结束函数。",[73,162644,162646],{"className":249,"code":162645,"language":251,"meta":79,"style":79},"def check_age(age):\n    if age \u003C 0:\n        return \"年龄不合法\"\n\n    if age >= 18:\n        return \"成年人\"\n\n    return \"未成年人\"\n\n\nprint(check_age(20))\nprint(check_age(-1))\n",[32,162647,162648,162658,162670,162677,162681,162693,162700,162704,162711,162715,162719,162730],{"__ignoreMap":79},[100,162649,162650,162652,162655],{"class":102,"line":103},[100,162651,678],{"class":471},[100,162653,162654],{"class":106}," check_age",[100,162656,162657],{"class":258},"(age):\n",[100,162659,162660,162662,162664,162666,162668],{"class":102,"line":188},[100,162661,4702],{"class":471},[100,162663,17288],{"class":258},[100,162665,2676],{"class":471},[100,162667,5692],{"class":117},[100,162669,696],{"class":258},[100,162671,162672,162674],{"class":102,"line":199},[100,162673,16333],{"class":471},[100,162675,162676],{"class":110}," \"年龄不合法\"\n",[100,162678,162679],{"class":102,"line":532},[100,162680,570],{"emptyLinePlaceholder":569},[100,162682,162683,162685,162687,162689,162691],{"class":102,"line":577},[100,162684,4702],{"class":471},[100,162686,17288],{"class":258},[100,162688,3331],{"class":471},[100,162690,157527],{"class":117},[100,162692,696],{"class":258},[100,162694,162695,162697],{"class":102,"line":589},[100,162696,16333],{"class":471},[100,162698,162699],{"class":110}," \"成年人\"\n",[100,162701,162702],{"class":102,"line":595},[100,162703,570],{"emptyLinePlaceholder":569},[100,162705,162706,162708],{"class":102,"line":601},[100,162707,5689],{"class":471},[100,162709,162710],{"class":110}," \"未成年人\"\n",[100,162712,162713],{"class":102,"line":606},[100,162714,570],{"emptyLinePlaceholder":569},[100,162716,162717],{"class":102,"line":612},[100,162718,570],{"emptyLinePlaceholder":569},[100,162720,162721,162723,162726,162728],{"class":102,"line":618},[100,162722,1195],{"class":117},[100,162724,162725],{"class":258},"(check_age(",[100,162727,2466],{"class":117},[100,162729,751],{"class":258},[100,162731,162732,162734,162736,162738,162740],{"class":102,"line":623},[100,162733,1195],{"class":117},[100,162735,162725],{"class":258},[100,162737,2299],{"class":471},[100,162739,1985],{"class":117},[100,162741,751],{"class":258},[19,162743,162744,162745,162747],{},"函数执行到 ",[32,162746,18627],{}," 后，后面的代码不会继续执行。",[14,162749,162751],{"id":162750},"_57-none","5.7 None",[19,162753,162754,162756],{},[32,162755,693],{}," 表示空值或没有结果。",[19,162758,162759],{},"常见使用场景：",[26,162761,162762,162765,162768],{},[29,162763,162764],{},"函数没有返回值。",[29,162766,162767],{},"变量暂时没有具体值。",[29,162769,162770],{},"表示查询不到结果。",[73,162772,162774],{"className":249,"code":162773,"language":251,"meta":79,"style":79},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[32,162775,162776,162784,162788,162801],{"__ignoreMap":79},[100,162777,162778,162780,162782],{"class":102,"line":103},[100,162779,162548],{"class":258},[100,162781,472],{"class":471},[100,162783,153414],{"class":117},[100,162785,162786],{"class":102,"line":188},[100,162787,570],{"emptyLinePlaceholder":569},[100,162789,162790,162792,162795,162797,162799],{"class":102,"line":199},[100,162791,958],{"class":471},[100,162793,162794],{"class":258}," result ",[100,162796,40481],{"class":471},[100,162798,40487],{"class":117},[100,162800,696],{"class":258},[100,162802,162803,162805,162807,162810],{"class":102,"line":532},[100,162804,702],{"class":117},[100,162806,713],{"class":258},[100,162808,162809],{"class":110},"\"没有数据\"",[100,162811,809],{"class":258},[19,162813,162814,162815,162817,162818,162821,162822,233],{},"判断 ",[32,162816,693],{}," 推荐使用 ",[32,162819,162820],{},"is None","，不要写成 ",[32,162823,162824],{},"== None",[14,162826,162828],{"id":162827},"_58-函数文档字符串","5.8 函数文档字符串",[19,162830,162831],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[73,162833,162835],{"className":249,"code":162834,"language":251,"meta":79,"style":79},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[32,162836,162837,162847,162852],{"__ignoreMap":79},[100,162838,162839,162841,162844],{"class":102,"line":103},[100,162840,678],{"class":471},[100,162842,162843],{"class":106}," calculate_bmi",[100,162845,162846],{"class":258},"(weight, height):\n",[100,162848,162849],{"class":102,"line":188},[100,162850,162851],{"class":110},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[100,162853,162854,162856,162859,162861,162864,162866],{"class":102,"line":199},[100,162855,5689],{"class":471},[100,162857,162858],{"class":258}," weight ",[100,162860,2351],{"class":471},[100,162862,162863],{"class":258}," height ",[100,162865,12243],{"class":471},[100,162867,49277],{"class":117},[19,162869,162870],{},"查看说明：",[73,162872,162874],{"className":249,"code":162873,"language":251,"meta":79,"style":79},"help(calculate_bmi)\n",[32,162875,162876],{"__ignoreMap":79},[100,162877,162878,162881],{"class":102,"line":103},[100,162879,162880],{"class":117},"help",[100,162882,162883],{"class":258},"(calculate_bmi)\n",[19,162885,162886],{},"较完整的写法：",[73,162888,162890],{"className":249,"code":162889,"language":251,"meta":79,"style":79},"def calculate_bmi(weight, height):\n    \"\"\"\n    计算BMI。\n\n    :param weight: 体重，单位kg\n    :param height: 身高，单位m\n    :return: BMI数值\n    \"\"\"\n    return weight \u002F height ** 2\n",[32,162891,162892,162900,162905,162910,162914,162919,162924,162929,162933],{"__ignoreMap":79},[100,162893,162894,162896,162898],{"class":102,"line":103},[100,162895,678],{"class":471},[100,162897,162843],{"class":106},[100,162899,162846],{"class":258},[100,162901,162902],{"class":102,"line":188},[100,162903,162904],{"class":110},"    \"\"\"\n",[100,162906,162907],{"class":102,"line":199},[100,162908,162909],{"class":110},"    计算BMI。\n",[100,162911,162912],{"class":102,"line":532},[100,162913,570],{"emptyLinePlaceholder":569},[100,162915,162916],{"class":102,"line":577},[100,162917,162918],{"class":110},"    :param weight: 体重，单位kg\n",[100,162920,162921],{"class":102,"line":589},[100,162922,162923],{"class":110},"    :param height: 身高，单位m\n",[100,162925,162926],{"class":102,"line":595},[100,162927,162928],{"class":110},"    :return: BMI数值\n",[100,162930,162931],{"class":102,"line":601},[100,162932,162904],{"class":110},[100,162934,162935,162937,162939,162941,162943,162945],{"class":102,"line":606},[100,162936,5689],{"class":471},[100,162938,162858],{"class":258},[100,162940,2351],{"class":471},[100,162942,162863],{"class":258},[100,162944,12243],{"class":471},[100,162946,49277],{"class":117},[14,162948,162950],{"id":162949},"_59-变量作用域","5.9 变量作用域",[305,162952,162954],{"id":162953},"_591-局部变量","5.9.1 局部变量",[19,162956,162957],{},"在函数内部定义的变量，只能在函数内部使用。",[73,162959,162961],{"className":249,"code":162960,"language":251,"meta":79,"style":79},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[32,162962,162963,162972,162980,162986,162990,162994,162999],{"__ignoreMap":79},[100,162964,162965,162967,162970],{"class":102,"line":103},[100,162966,678],{"class":471},[100,162968,162969],{"class":106}," test",[100,162971,33510],{"class":258},[100,162973,162974,162976,162978],{"class":102,"line":188},[100,162975,47147],{"class":258},[100,162977,472],{"class":471},[100,162979,59982],{"class":117},[100,162981,162982,162984],{"class":102,"line":199},[100,162983,702],{"class":117},[100,162985,1793],{"class":258},[100,162987,162988],{"class":102,"line":532},[100,162989,570],{"emptyLinePlaceholder":569},[100,162991,162992],{"class":102,"line":577},[100,162993,570],{"emptyLinePlaceholder":569},[100,162995,162996],{"class":102,"line":589},[100,162997,162998],{"class":258},"test()\n",[100,163000,163001,163003,163006],{"class":102,"line":595},[100,163002,1195],{"class":117},[100,163004,163005],{"class":258},"(num)  ",[100,163007,163008],{"class":1836},"# 报错\n",[305,163010,163012],{"id":163011},"_592-全局变量","5.9.2 全局变量",[19,163014,163015],{},"在函数外部定义的变量，可以在函数内部读取。",[73,163017,163019],{"className":249,"code":163018,"language":251,"meta":79,"style":79},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[32,163020,163021,163029,163033,163037,163045,163051,163055,163059],{"__ignoreMap":79},[100,163022,163023,163025,163027],{"class":102,"line":103},[100,163024,147778],{"class":258},[100,163026,472],{"class":471},[100,163028,150595],{"class":110},[100,163030,163031],{"class":102,"line":188},[100,163032,570],{"emptyLinePlaceholder":569},[100,163034,163035],{"class":102,"line":199},[100,163036,570],{"emptyLinePlaceholder":569},[100,163038,163039,163041,163043],{"class":102,"line":532},[100,163040,678],{"class":471},[100,163042,162238],{"class":106},[100,163044,33510],{"class":258},[100,163046,163047,163049],{"class":102,"line":577},[100,163048,702],{"class":117},[100,163050,151902],{"class":258},[100,163052,163053],{"class":102,"line":589},[100,163054,570],{"emptyLinePlaceholder":569},[100,163056,163057],{"class":102,"line":595},[100,163058,570],{"emptyLinePlaceholder":569},[100,163060,163061],{"class":102,"line":601},[100,163062,162273],{"class":258},[19,163064,163065,163066,233],{},"如果要在函数内部修改全局变量，需要 ",[32,163067,163068],{},"global",[73,163070,163072],{"className":249,"code":163071,"language":251,"meta":79,"style":79},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[32,163073,163074,163082,163086,163090,163099,163107,163115,163119,163123,163128],{"__ignoreMap":79},[100,163075,163076,163078,163080],{"class":102,"line":103},[100,163077,147933],{"class":258},[100,163079,472],{"class":471},[100,163081,48887],{"class":117},[100,163083,163084],{"class":102,"line":188},[100,163085,570],{"emptyLinePlaceholder":569},[100,163087,163088],{"class":102,"line":199},[100,163089,570],{"emptyLinePlaceholder":569},[100,163091,163092,163094,163097],{"class":102,"line":532},[100,163093,678],{"class":471},[100,163095,163096],{"class":106}," add_count",[100,163098,33510],{"class":258},[100,163100,163101,163104],{"class":102,"line":577},[100,163102,163103],{"class":471},"    global",[100,163105,163106],{"class":258}," count\n",[100,163108,163109,163111,163113],{"class":102,"line":589},[100,163110,160675],{"class":258},[100,163112,11062],{"class":471},[100,163114,57253],{"class":117},[100,163116,163117],{"class":102,"line":595},[100,163118,570],{"emptyLinePlaceholder":569},[100,163120,163121],{"class":102,"line":601},[100,163122,570],{"emptyLinePlaceholder":569},[100,163124,163125],{"class":102,"line":606},[100,163126,163127],{"class":258},"add_count()\n",[100,163129,163130,163132],{"class":102,"line":612},[100,163131,1195],{"class":117},[100,163133,163134],{"class":258},"(count)\n",[19,163136,163137],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,163139,163141],{"id":163140},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,163143,163144],{},"一个函数中可以调用另一个函数。",[73,163146,163148],{"className":249,"code":163147,"language":251,"meta":79,"style":79},"def print_line():\n    print(\"-\" * 30)\n\n\ndef print_info(name, age):\n    print_line()\n    print(f\"姓名:{name}\")\n    print(f\"年龄:{age}\")\n    print_line()\n\n\nprint_info(\"小明\", 18)\n",[32,163149,163150,163159,163173,163177,163181,163190,163195,163215,163236,163240,163244,163248],{"__ignoreMap":79},[100,163151,163152,163154,163157],{"class":102,"line":103},[100,163153,678],{"class":471},[100,163155,163156],{"class":106}," print_line",[100,163158,33510],{"class":258},[100,163160,163161,163163,163165,163167,163169,163171],{"class":102,"line":188},[100,163162,702],{"class":117},[100,163164,713],{"class":258},[100,163166,34039],{"class":110},[100,163168,8114],{"class":471},[100,163170,80219],{"class":117},[100,163172,809],{"class":258},[100,163174,163175],{"class":102,"line":199},[100,163176,570],{"emptyLinePlaceholder":569},[100,163178,163179],{"class":102,"line":532},[100,163180,570],{"emptyLinePlaceholder":569},[100,163182,163183,163185,163188],{"class":102,"line":577},[100,163184,678],{"class":471},[100,163186,163187],{"class":106}," print_info",[100,163189,150617],{"class":258},[100,163191,163192],{"class":102,"line":589},[100,163193,163194],{"class":258},"    print_line()\n",[100,163196,163197,163199,163201,163203,163205,163207,163209,163211,163213],{"class":102,"line":595},[100,163198,702],{"class":117},[100,163200,713],{"class":258},[100,163202,1830],{"class":471},[100,163204,157924],{"class":110},[100,163206,2662],{"class":117},[100,163208,81364],{"class":258},[100,163210,2712],{"class":117},[100,163212,2019],{"class":110},[100,163214,809],{"class":258},[100,163216,163217,163219,163221,163223,163226,163228,163230,163232,163234],{"class":102,"line":601},[100,163218,702],{"class":117},[100,163220,713],{"class":258},[100,163222,1830],{"class":471},[100,163224,163225],{"class":110},"\"年龄:",[100,163227,2662],{"class":117},[100,163229,71775],{"class":258},[100,163231,2712],{"class":117},[100,163233,2019],{"class":110},[100,163235,809],{"class":258},[100,163237,163238],{"class":102,"line":606},[100,163239,163194],{"class":258},[100,163241,163242],{"class":102,"line":612},[100,163243,570],{"emptyLinePlaceholder":569},[100,163245,163246],{"class":102,"line":618},[100,163247,570],{"emptyLinePlaceholder":569},[100,163249,163250,163253,163255,163257,163259],{"class":102,"line":623},[100,163251,163252],{"class":258},"print_info(",[100,163254,151130],{"class":110},[100,163256,14017],{"class":258},[100,163258,2417],{"class":117},[100,163260,809],{"class":258},[19,163262,163263],{},"这种方式可以把小功能组合成大功能。",[14,163265,163267],{"id":163266},"_511-参数检查","5.11 参数检查",[19,163269,163270],{},"函数内部可以检查参数是否合法。",[73,163272,163274],{"className":249,"code":163273,"language":251,"meta":79,"style":79},"def divide(a, b):\n    if b == 0:\n        return None\n    return a \u002F b\n\n\nresult = divide(10, 0)\n\nif result is None:\n    print(\"除数不能为0\")\nelse:\n    print(result)\n",[32,163275,163276,163285,163297,163303,163313,163317,163321,163338,163342,163354,163365,163371],{"__ignoreMap":79},[100,163277,163278,163280,163283],{"class":102,"line":103},[100,163279,678],{"class":471},[100,163281,163282],{"class":106}," divide",[100,163284,152335],{"class":258},[100,163286,163287,163289,163291,163293,163295],{"class":102,"line":188},[100,163288,4702],{"class":471},[100,163290,12464],{"class":258},[100,163292,4551],{"class":471},[100,163294,5692],{"class":117},[100,163296,696],{"class":258},[100,163298,163299,163301],{"class":102,"line":199},[100,163300,16333],{"class":471},[100,163302,153414],{"class":117},[100,163304,163305,163307,163309,163311],{"class":102,"line":532},[100,163306,5689],{"class":471},[100,163308,12451],{"class":258},[100,163310,2351],{"class":471},[100,163312,152346],{"class":258},[100,163314,163315],{"class":102,"line":577},[100,163316,570],{"emptyLinePlaceholder":569},[100,163318,163319],{"class":102,"line":589},[100,163320,570],{"emptyLinePlaceholder":569},[100,163322,163323,163325,163327,163330,163332,163334,163336],{"class":102,"line":595},[100,163324,162548],{"class":258},[100,163326,472],{"class":471},[100,163328,163329],{"class":258}," divide(",[100,163331,2213],{"class":117},[100,163333,14017],{"class":258},[100,163335,1366],{"class":117},[100,163337,809],{"class":258},[100,163339,163340],{"class":102,"line":601},[100,163341,570],{"emptyLinePlaceholder":569},[100,163343,163344,163346,163348,163350,163352],{"class":102,"line":606},[100,163345,958],{"class":471},[100,163347,162794],{"class":258},[100,163349,40481],{"class":471},[100,163351,40487],{"class":117},[100,163353,696],{"class":258},[100,163355,163356,163358,163360,163363],{"class":102,"line":612},[100,163357,702],{"class":117},[100,163359,713],{"class":258},[100,163361,163362],{"class":110},"\"除数不能为0\"",[100,163364,809],{"class":258},[100,163366,163367,163369],{"class":102,"line":618},[100,163368,3322],{"class":471},[100,163370,696],{"class":258},[100,163372,163373,163375],{"class":102,"line":623},[100,163374,702],{"class":117},[100,163376,78139],{"class":258},[14,163378,163380],{"id":163379},"_512-类型提示","5.12 类型提示",[19,163382,163383],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[73,163385,163387],{"className":249,"code":163386,"language":251,"meta":79,"style":79},"def add(a: int, b: int) -> int:\n    return a + b\n",[32,163388,163389,163412],{"__ignoreMap":79},[100,163390,163391,163393,163395,163398,163400,163403,163405,163408,163410],{"class":102,"line":103},[100,163392,678],{"class":471},[100,163394,6805],{"class":106},[100,163396,163397],{"class":258},"(a: ",[100,163399,1784],{"class":117},[100,163401,163402],{"class":258},", b: ",[100,163404,1784],{"class":117},[100,163406,163407],{"class":258},") -> ",[100,163409,1784],{"class":117},[100,163411,696],{"class":258},[100,163413,163414,163416,163418,163420],{"class":102,"line":188},[100,163415,5689],{"class":471},[100,163417,12451],{"class":258},[100,163419,2248],{"class":471},[100,163421,152346],{"class":258},[19,163423,163424],{},"字符串参数：",[73,163426,163428],{"className":249,"code":163427,"language":251,"meta":79,"style":79},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[32,163429,163430,163447],{"__ignoreMap":79},[100,163431,163432,163434,163436,163439,163441,163443,163445],{"class":102,"line":103},[100,163433,678],{"class":471},[100,163435,162238],{"class":106},[100,163437,163438],{"class":258},"(name: ",[100,163440,687],{"class":117},[100,163442,163407],{"class":258},[100,163444,693],{"class":117},[100,163446,696],{"class":258},[100,163448,163449,163451,163453,163455,163457,163459,163461,163463,163465],{"class":102,"line":188},[100,163450,702],{"class":117},[100,163452,713],{"class":258},[100,163454,1830],{"class":471},[100,163456,158296],{"class":110},[100,163458,2662],{"class":117},[100,163460,81364],{"class":258},[100,163462,2712],{"class":117},[100,163464,2019],{"class":110},[100,163466,809],{"class":258},[19,163468,163469],{},"列表参数：",[73,163471,163473],{"className":249,"code":163472,"language":251,"meta":79,"style":79},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[32,163474,163475,163494,163502,163514,163523],{"__ignoreMap":79},[100,163476,163477,163479,163482,163485,163487,163490,163492],{"class":102,"line":103},[100,163478,678],{"class":471},[100,163480,163481],{"class":106}," get_total",[100,163483,163484],{"class":258},"(numbers: list[",[100,163486,1784],{"class":117},[100,163488,163489],{"class":258},"]) -> ",[100,163491,1784],{"class":117},[100,163493,696],{"class":258},[100,163495,163496,163498,163500],{"class":102,"line":188},[100,163497,160549],{"class":258},[100,163499,472],{"class":471},[100,163501,48887],{"class":117},[100,163503,163504,163506,163509,163511],{"class":102,"line":199},[100,163505,848],{"class":471},[100,163507,163508],{"class":258}," number ",[100,163510,854],{"class":471},[100,163512,163513],{"class":258}," numbers:\n",[100,163515,163516,163518,163520],{"class":102,"line":532},[100,163517,161224],{"class":258},[100,163519,11062],{"class":471},[100,163521,163522],{"class":258}," number\n",[100,163524,163525,163527],{"class":102,"line":577},[100,163526,5689],{"class":471},[100,163528,163529],{"class":258}," total\n",[19,163531,163532],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,163534,163536],{"id":163535},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[73,163538,163540],{"className":249,"code":163539,"language":251,"meta":79,"style":79},"balance = 1000\n\n\ndef show_menu():\n    print(\"====== ATM ======\")\n    print(\"1. 查询余额\")\n    print(\"2. 存款\")\n    print(\"3. 取款\")\n    print(\"0. 退出\")\n\n\ndef show_balance():\n    print(f\"当前余额:{balance}元\")\n\n\ndef save_money():\n    global balance\n    money = float(input(\"请输入存款金额:\"))\n    if money \u003C= 0:\n        print(\"金额必须大于0\")\n        return\n    balance += money\n    print(\"存款成功\")\n    show_balance()\n\n\ndef withdraw_money():\n    global balance\n    money = float(input(\"请输入取款金额:\"))\n    if money \u003C= 0:\n        print(\"金额必须大于0\")\n        return\n    if money > balance:\n        print(\"余额不足\")\n        return\n    balance -= money\n    print(\"取款成功\")\n    show_balance()\n\n\nwhile True:\n    show_menu()\n    choice = input(\"请输入操作:\")\n\n    if choice == \"1\":\n        show_balance()\n    elif choice == \"2\":\n        save_money()\n    elif choice == \"3\":\n        withdraw_money()\n    elif choice == \"0\":\n        print(\"退出系统\")\n        break\n    else:\n        print(\"输入错误\")\n",[32,163541,163542,163552,163556,163560,163568,163579,163589,163599,163609,163619,163623,163627,163636,163658,163662,163666,163675,163681,163701,163713,163724,163728,163737,163748,163753,163757,163761,163770,163776,163795,163807,163817,163821,163832,163842,163846,163854,163865,163869,163873,163877,163885,163890,163904,163908,163920,163925,163937,163942,163954,163959,163971,163981,163985,163991],{"__ignoreMap":79},[100,163543,163544,163547,163549],{"class":102,"line":103},[100,163545,163546],{"class":258},"balance ",[100,163548,472],{"class":471},[100,163550,163551],{"class":117}," 1000\n",[100,163553,163554],{"class":102,"line":188},[100,163555,570],{"emptyLinePlaceholder":569},[100,163557,163558],{"class":102,"line":199},[100,163559,570],{"emptyLinePlaceholder":569},[100,163561,163562,163564,163566],{"class":102,"line":532},[100,163563,678],{"class":471},[100,163565,153275],{"class":106},[100,163567,33510],{"class":258},[100,163569,163570,163572,163574,163577],{"class":102,"line":577},[100,163571,702],{"class":117},[100,163573,713],{"class":258},[100,163575,163576],{"class":110},"\"====== ATM ======\"",[100,163578,809],{"class":258},[100,163580,163581,163583,163585,163587],{"class":102,"line":589},[100,163582,702],{"class":117},[100,163584,713],{"class":258},[100,163586,161890],{"class":110},[100,163588,809],{"class":258},[100,163590,163591,163593,163595,163597],{"class":102,"line":595},[100,163592,702],{"class":117},[100,163594,713],{"class":258},[100,163596,161901],{"class":110},[100,163598,809],{"class":258},[100,163600,163601,163603,163605,163607],{"class":102,"line":601},[100,163602,702],{"class":117},[100,163604,713],{"class":258},[100,163606,161912],{"class":110},[100,163608,809],{"class":258},[100,163610,163611,163613,163615,163617],{"class":102,"line":606},[100,163612,702],{"class":117},[100,163614,713],{"class":258},[100,163616,161923],{"class":110},[100,163618,809],{"class":258},[100,163620,163621],{"class":102,"line":612},[100,163622,570],{"emptyLinePlaceholder":569},[100,163624,163625],{"class":102,"line":618},[100,163626,570],{"emptyLinePlaceholder":569},[100,163628,163629,163631,163634],{"class":102,"line":623},[100,163630,678],{"class":471},[100,163632,163633],{"class":106}," show_balance",[100,163635,33510],{"class":258},[100,163637,163638,163640,163642,163644,163647,163649,163652,163654,163656],{"class":102,"line":629},[100,163639,702],{"class":117},[100,163641,713],{"class":258},[100,163643,1830],{"class":471},[100,163645,163646],{"class":110},"\"当前余额:",[100,163648,2662],{"class":117},[100,163650,163651],{"class":258},"balance",[100,163653,2712],{"class":117},[100,163655,158254],{"class":110},[100,163657,809],{"class":258},[100,163659,163660],{"class":102,"line":635},[100,163661,570],{"emptyLinePlaceholder":569},[100,163663,163664],{"class":102,"line":641},[100,163665,570],{"emptyLinePlaceholder":569},[100,163667,163668,163670,163673],{"class":102,"line":647},[100,163669,678],{"class":471},[100,163671,163672],{"class":106}," save_money",[100,163674,33510],{"class":258},[100,163676,163677,163679],{"class":102,"line":653},[100,163678,163103],{"class":471},[100,163680,151341],{"class":258},[100,163682,163683,163686,163688,163690,163692,163694,163696,163699],{"class":102,"line":659},[100,163684,163685],{"class":258},"    money ",[100,163687,472],{"class":471},[100,163689,111039],{"class":117},[100,163691,713],{"class":258},[100,163693,55375],{"class":117},[100,163695,713],{"class":258},[100,163697,163698],{"class":110},"\"请输入存款金额:\"",[100,163700,751],{"class":258},[100,163702,163703,163705,163707,163709,163711],{"class":102,"line":665},[100,163704,4702],{"class":471},[100,163706,151384],{"class":258},[100,163708,3220],{"class":471},[100,163710,5692],{"class":117},[100,163712,696],{"class":258},[100,163714,163715,163717,163719,163722],{"class":102,"line":670},[100,163716,34007],{"class":117},[100,163718,713],{"class":258},[100,163720,163721],{"class":110},"\"金额必须大于0\"",[100,163723,809],{"class":258},[100,163725,163726],{"class":102,"line":675},[100,163727,153603],{"class":471},[100,163729,163730,163733,163735],{"class":102,"line":699},[100,163731,163732],{"class":258},"    balance ",[100,163734,11062],{"class":471},[100,163736,151417],{"class":258},[100,163738,163739,163741,163743,163746],{"class":102,"line":708},[100,163740,702],{"class":117},[100,163742,713],{"class":258},[100,163744,163745],{"class":110},"\"存款成功\"",[100,163747,809],{"class":258},[100,163749,163750],{"class":102,"line":722},[100,163751,163752],{"class":258},"    show_balance()\n",[100,163754,163755],{"class":102,"line":735},[100,163756,570],{"emptyLinePlaceholder":569},[100,163758,163759],{"class":102,"line":754},[100,163760,570],{"emptyLinePlaceholder":569},[100,163762,163763,163765,163768],{"class":102,"line":771},[100,163764,678],{"class":471},[100,163766,163767],{"class":106}," withdraw_money",[100,163769,33510],{"class":258},[100,163771,163772,163774],{"class":102,"line":776},[100,163773,163103],{"class":471},[100,163775,151341],{"class":258},[100,163777,163778,163780,163782,163784,163786,163788,163790,163793],{"class":102,"line":781},[100,163779,163685],{"class":258},[100,163781,472],{"class":471},[100,163783,111039],{"class":117},[100,163785,713],{"class":258},[100,163787,55375],{"class":117},[100,163789,713],{"class":258},[100,163791,163792],{"class":110},"\"请输入取款金额:\"",[100,163794,751],{"class":258},[100,163796,163797,163799,163801,163803,163805],{"class":102,"line":796},[100,163798,4702],{"class":471},[100,163800,151384],{"class":258},[100,163802,3220],{"class":471},[100,163804,5692],{"class":117},[100,163806,696],{"class":258},[100,163808,163809,163811,163813,163815],{"class":102,"line":812},[100,163810,34007],{"class":117},[100,163812,713],{"class":258},[100,163814,163721],{"class":110},[100,163816,809],{"class":258},[100,163818,163819],{"class":102,"line":823},[100,163820,153603],{"class":471},[100,163822,163823,163825,163827,163829],{"class":102,"line":828},[100,163824,4702],{"class":471},[100,163826,151384],{"class":258},[100,163828,2726],{"class":471},[100,163830,163831],{"class":258}," balance:\n",[100,163833,163834,163836,163838,163840],{"class":102,"line":840},[100,163835,34007],{"class":117},[100,163837,713],{"class":258},[100,163839,151479],{"class":110},[100,163841,809],{"class":258},[100,163843,163844],{"class":102,"line":845},[100,163845,153603],{"class":471},[100,163847,163848,163850,163852],{"class":102,"line":868},[100,163849,163732],{"class":258},[100,163851,151494],{"class":471},[100,163853,151417],{"class":258},[100,163855,163856,163858,163860,163863],{"class":102,"line":874},[100,163857,702],{"class":117},[100,163859,713],{"class":258},[100,163861,163862],{"class":110},"\"取款成功\"",[100,163864,809],{"class":258},[100,163866,163867],{"class":102,"line":879},[100,163868,163752],{"class":258},[100,163870,163871],{"class":102,"line":889},[100,163872,570],{"emptyLinePlaceholder":569},[100,163874,163875],{"class":102,"line":894},[100,163876,570],{"emptyLinePlaceholder":569},[100,163878,163879,163881,163883],{"class":102,"line":900},[100,163880,109905],{"class":471},[100,163882,96844],{"class":117},[100,163884,696],{"class":258},[100,163886,163887],{"class":102,"line":910},[100,163888,163889],{"class":258},"    show_menu()\n",[100,163891,163892,163894,163896,163898,163900,163902],{"class":102,"line":915},[100,163893,161934],{"class":258},[100,163895,472],{"class":471},[100,163897,62159],{"class":117},[100,163899,713],{"class":258},[100,163901,154315],{"class":110},[100,163903,809],{"class":258},[100,163905,163906],{"class":102,"line":929},[100,163907,570],{"emptyLinePlaceholder":569},[100,163909,163910,163912,163914,163916,163918],{"class":102,"line":935},[100,163911,4702],{"class":471},[100,163913,154328],{"class":258},[100,163915,4551],{"class":471},[100,163917,154333],{"class":110},[100,163919,696],{"class":258},[100,163921,163922],{"class":102,"line":945},[100,163923,163924],{"class":258},"        show_balance()\n",[100,163926,163927,163929,163931,163933,163935],{"class":102,"line":950},[100,163928,40847],{"class":471},[100,163930,154328],{"class":258},[100,163932,4551],{"class":471},[100,163934,154352],{"class":110},[100,163936,696],{"class":258},[100,163938,163939],{"class":102,"line":955},[100,163940,163941],{"class":258},"        save_money()\n",[100,163943,163944,163946,163948,163950,163952],{"class":102,"line":972},[100,163945,40847],{"class":471},[100,163947,154328],{"class":258},[100,163949,4551],{"class":471},[100,163951,154370],{"class":110},[100,163953,696],{"class":258},[100,163955,163956],{"class":102,"line":11370},[100,163957,163958],{"class":258},"        withdraw_money()\n",[100,163960,163961,163963,163965,163967,163969],{"class":102,"line":11375},[100,163962,40847],{"class":471},[100,163964,154328],{"class":258},[100,163966,4551],{"class":471},[100,163968,154424],{"class":110},[100,163970,696],{"class":258},[100,163972,163973,163975,163977,163979],{"class":102,"line":11380},[100,163974,34007],{"class":117},[100,163976,713],{"class":258},[100,163978,154435],{"class":110},[100,163980,809],{"class":258},[100,163982,163983],{"class":102,"line":11385},[100,163984,33185],{"class":471},[100,163986,163987,163989],{"class":102,"line":11394},[100,163988,159264],{"class":471},[100,163990,696],{"class":258},[100,163992,163993,163995,163997,163999],{"class":102,"line":11399},[100,163994,34007],{"class":117},[100,163996,713],{"class":258},[100,163998,154456],{"class":110},[100,164000,809],{"class":258},[19,164002,164003],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,164005,164007],{"id":164006},"_514-易错点","5.14 易错点",[26,164009,164010,164013,164016,164021,164026,164029],{},[29,164011,164012],{},"函数定义后必须调用才会执行。",[29,164014,164015],{},"函数名后面有括号才是调用。",[29,164017,164018,164020],{},[32,164019,18627],{}," 后面的代码不会执行。",[29,164022,164023,164024,233],{},"没有返回值的函数默认返回 ",[32,164025,693],{},[29,164027,164028],{},"局部变量不能在函数外部访问。",[29,164030,164031,164032,164034],{},"不要滥用 ",[32,164033,163068],{},"，更好的方式是让函数返回新值。",[19,164036,164037,164038,164040],{},"例如不用 ",[32,164039,163068],{}," 改写存款：",[73,164042,164044],{"className":249,"code":164043,"language":251,"meta":79,"style":79},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[32,164045,164046,164055,164066,164070,164074,164082,164095],{"__ignoreMap":79},[100,164047,164048,164050,164052],{"class":102,"line":103},[100,164049,678],{"class":471},[100,164051,163672],{"class":106},[100,164053,164054],{"class":258},"(balance, money):\n",[100,164056,164057,164059,164062,164064],{"class":102,"line":188},[100,164058,5689],{"class":471},[100,164060,164061],{"class":258}," balance ",[100,164063,2248],{"class":471},[100,164065,151417],{"class":258},[100,164067,164068],{"class":102,"line":199},[100,164069,570],{"emptyLinePlaceholder":569},[100,164071,164072],{"class":102,"line":532},[100,164073,570],{"emptyLinePlaceholder":569},[100,164075,164076,164078,164080],{"class":102,"line":577},[100,164077,163546],{"class":258},[100,164079,472],{"class":471},[100,164081,163551],{"class":117},[100,164083,164084,164086,164088,164091,164093],{"class":102,"line":589},[100,164085,163546],{"class":258},[100,164087,472],{"class":471},[100,164089,164090],{"class":258}," save_money(balance, ",[100,164092,3343],{"class":117},[100,164094,809],{"class":258},[100,164096,164097,164099],{"class":102,"line":595},[100,164098,1195],{"class":117},[100,164100,164101],{"class":258},"(balance)\n",[14,164103,164105],{"id":164104},"_515-本章练习","5.15 本章练习",[26,164107,164108,164115,164121,164127,164133],{},[29,164109,164110,164111,164114],{},"定义函数 ",[32,164112,164113],{},"print_student(name, age)","，输出学生信息。",[29,164116,164110,164117,164120],{},[32,164118,164119],{},"get_max(a, b, c)","，返回三个数中的最大值。",[29,164122,164110,164123,164126],{},[32,164124,164125],{},"is_even(num)","，判断一个数是否为偶数。",[29,164128,164110,164129,164132],{},[32,164130,164131],{},"calculate_bmi(weight, height)","，返回 BMI。",[29,164134,164135],{},"把第 4 章的菜单程序拆分成多个函数。",[1677,164137,164138],{},"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":79,"searchDepth":188,"depth":188,"links":164140},[164141,164142,164143,164144,164145,164146,164147,164148,164149,164153,164154,164155,164156,164157,164158],{"id":162161,"depth":188,"text":162162},{"id":162202,"depth":188,"text":162203},{"id":162292,"depth":188,"text":162293},{"id":162373,"depth":188,"text":162374},{"id":162506,"depth":188,"text":162507},{"id":162628,"depth":188,"text":162629},{"id":162750,"depth":188,"text":162751},{"id":162827,"depth":188,"text":162828},{"id":162949,"depth":188,"text":162950,"children":164150},[164151,164152],{"id":162953,"depth":199,"text":162954},{"id":163011,"depth":199,"text":163012},{"id":163140,"depth":188,"text":163141},{"id":163266,"depth":188,"text":163267},{"id":163379,"depth":188,"text":163380},{"id":163535,"depth":188,"text":163536},{"id":164006,"depth":188,"text":164007},{"id":164104,"depth":188,"text":164105},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":162153,"description":24958},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":164165,"title":164166,"body":164167,"description":24958,"extension":1708,"meta":167211,"navigation":569,"path":167212,"seo":167213,"stem":167214,"__hash__":167215},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":164168,"toc":167192},[164169,164172,164176,164179,164182,164286,164289,164293,164296,164376,164379,164383,164386,164446,164449,164485,164488,164503,164507,164580,164583,164638,164641,164711,164714,164798,164808,164866,164870,164915,164918,164944,164947,165053,165057,165060,165102,165105,165169,165172,165176,165179,165240,165243,165273,165276,165314,165318,165321,165330,165333,165457,165460,165501,165505,165508,165519,165559,165562,165577,165582,165585,165652,165655,165745,165749,165752,165800,165803,165830,165832,165862,165865,165885,165888,165919,165922,165955,165959,165962,165986,165989,166013,166016,166040,166044,166047,166177,166180,166260,166263,166338,166342,166345,166395,166398,166440,166443,166467,166469,166493,166496,166551,166554,166620,166624,166627,166630,166668,166671,166724,166727,166773,166776,166809,166812,166816,167135,167139,167168,167172,167189],[10,164170,164166],{"id":164171},"_6-数据容器",[14,164173,164175],{"id":164174},"_61-什么是数据容器","6.1 什么是数据容器",[19,164177,164178],{},"数据容器用于一次保存多个数据。",[19,164180,164181],{},"常见容器：",[319,164183,164184,164201],{},[322,164185,164186],{},[325,164187,164188,164190,164193,164196,164199],{},[328,164189,27346],{},[328,164191,164192],{},"是否有序",[328,164194,164195],{},"是否可变",[328,164197,164198],{},"是否允许重复",[328,164200,29064],{},[339,164202,164203,164221,164237,164252,164269],{},[325,164204,164205,164208,164211,164214,164217],{},[344,164206,164207],{},"list列表",[344,164209,164210],{},"有序",[344,164212,164213],{},"可变",[344,164215,164216],{},"允许",[344,164218,164219],{},[32,164220,156499],{},[325,164222,164223,164226,164228,164231,164233],{},[344,164224,164225],{},"tuple元组",[344,164227,164210],{},[344,164229,164230],{},"不可变",[344,164232,164216],{},[344,164234,164235],{},[32,164236,156512],{},[325,164238,164239,164242,164244,164246,164248],{},[344,164240,164241],{},"str字符串",[344,164243,164210],{},[344,164245,164230],{},[344,164247,164216],{},[344,164249,164250],{},[32,164251,157122],{},[325,164253,164254,164257,164260,164262,164265],{},[344,164255,164256],{},"set集合",[344,164258,164259],{},"无序",[344,164261,164213],{},[344,164263,164264],{},"不允许",[344,164266,164267],{},[32,164268,156537],{},[325,164270,164271,164274,164276,164278,164281],{},[344,164272,164273],{},"dict字典",[344,164275,164210],{},[344,164277,164213],{},[344,164279,164280],{},"key不允许重复",[344,164282,164283],{},[32,164284,164285],{},"{\"name\": \"小明\"}",[19,164287,164288],{},"Python 3.7 之后，字典保持插入顺序。",[14,164290,164292],{"id":164291},"_62-列表list","6.2 列表list",[19,164294,164295],{},"列表用于保存一组有顺序的数据。",[73,164297,164299],{"className":249,"code":164298,"language":251,"meta":79,"style":79},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[32,164300,164301,164321,164346,164367],{"__ignoreMap":79},[100,164302,164303,164305,164307,164309,164311,164313,164315,164317,164319],{"class":102,"line":103},[100,164304,161622],{"class":258},[100,164306,472],{"class":471},[100,164308,53780],{"class":258},[100,164310,151130],{"class":110},[100,164312,14017],{"class":258},[100,164314,152178],{"class":110},[100,164316,14017],{"class":258},[100,164318,160973],{"class":110},[100,164320,34802],{"class":258},[100,164322,164323,164326,164328,164330,164332,164334,164336,164338,164340,164342,164344],{"class":102,"line":188},[100,164324,164325],{"class":258},"numbers ",[100,164327,472],{"class":471},[100,164329,53780],{"class":258},[100,164331,1985],{"class":117},[100,164333,14017],{"class":258},[100,164335,465],{"class":117},[100,164337,14017],{"class":258},[100,164339,1849],{"class":117},[100,164341,14017],{"class":258},[100,164343,748],{"class":117},[100,164345,34802],{"class":258},[100,164347,164348,164351,164353,164355,164357,164359,164361,164363,164365],{"class":102,"line":199},[100,164349,164350],{"class":258},"mixed ",[100,164352,472],{"class":471},[100,164354,53780],{"class":258},[100,164356,151130],{"class":110},[100,164358,14017],{"class":258},[100,164360,2417],{"class":117},[100,164362,14017],{"class":258},[100,164364,33034],{"class":117},[100,164366,34802],{"class":258},[100,164368,164369,164372,164374],{"class":102,"line":532},[100,164370,164371],{"class":258},"empty ",[100,164373,472],{"class":471},[100,164375,53392],{"class":258},[19,164377,164378],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,164380,164382],{"id":164381},"_63-列表索引","6.3 列表索引",[19,164384,164385],{},"正向索引从 0 开始：",[73,164387,164389],{"className":249,"code":164388,"language":251,"meta":79,"style":79},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[32,164390,164391,164411,164415,164426,164436],{"__ignoreMap":79},[100,164392,164393,164395,164397,164399,164401,164403,164405,164407,164409],{"class":102,"line":103},[100,164394,161622],{"class":258},[100,164396,472],{"class":471},[100,164398,53780],{"class":258},[100,164400,151130],{"class":110},[100,164402,14017],{"class":258},[100,164404,152178],{"class":110},[100,164406,14017],{"class":258},[100,164408,160973],{"class":110},[100,164410,34802],{"class":258},[100,164412,164413],{"class":102,"line":188},[100,164414,570],{"emptyLinePlaceholder":569},[100,164416,164417,164419,164422,164424],{"class":102,"line":199},[100,164418,1195],{"class":117},[100,164420,164421],{"class":258},"(names[",[100,164423,1366],{"class":117},[100,164425,6255],{"class":258},[100,164427,164428,164430,164432,164434],{"class":102,"line":532},[100,164429,1195],{"class":117},[100,164431,164421],{"class":258},[100,164433,1985],{"class":117},[100,164435,6255],{"class":258},[100,164437,164438,164440,164442,164444],{"class":102,"line":577},[100,164439,1195],{"class":117},[100,164441,164421],{"class":258},[100,164443,465],{"class":117},[100,164445,6255],{"class":258},[19,164447,164448],{},"反向索引从 -1 开始：",[73,164450,164452],{"className":249,"code":164451,"language":251,"meta":79,"style":79},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[32,164453,164454,164470],{"__ignoreMap":79},[100,164455,164456,164458,164460,164462,164464,164467],{"class":102,"line":103},[100,164457,1195],{"class":117},[100,164459,164421],{"class":258},[100,164461,2299],{"class":471},[100,164463,1985],{"class":117},[100,164465,164466],{"class":258},"])  ",[100,164468,164469],{"class":1836},"# 小刚\n",[100,164471,164472,164474,164476,164478,164480,164482],{"class":102,"line":188},[100,164473,1195],{"class":117},[100,164475,164421],{"class":258},[100,164477,2299],{"class":471},[100,164479,465],{"class":117},[100,164481,164466],{"class":258},[100,164483,164484],{"class":1836},"# 小红\n",[19,164486,164487],{},"索引越界会报错：",[73,164489,164491],{"className":249,"code":164490,"language":251,"meta":79,"style":79},"print(names[3])\n",[32,164492,164493],{"__ignoreMap":79},[100,164494,164495,164497,164499,164501],{"class":102,"line":103},[100,164496,1195],{"class":117},[100,164498,164421],{"class":258},[100,164500,1849],{"class":117},[100,164502,6255],{"class":258},[14,164504,164506],{"id":164505},"_64-列表常用方法","6.4 列表常用方法",[73,164508,164510],{"className":249,"code":164509,"language":251,"meta":79,"style":79},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[32,164511,164512,164528,164532,164541,164555,164569,164573],{"__ignoreMap":79},[100,164513,164514,164516,164518,164520,164522,164524,164526],{"class":102,"line":103},[100,164515,161622],{"class":258},[100,164517,472],{"class":471},[100,164519,53780],{"class":258},[100,164521,151130],{"class":110},[100,164523,14017],{"class":258},[100,164525,152178],{"class":110},[100,164527,34802],{"class":258},[100,164529,164530],{"class":102,"line":188},[100,164531,570],{"emptyLinePlaceholder":569},[100,164533,164534,164537,164539],{"class":102,"line":199},[100,164535,164536],{"class":258},"names.append(",[100,164538,160973],{"class":110},[100,164540,809],{"class":258},[100,164542,164543,164546,164548,164550,164553],{"class":102,"line":532},[100,164544,164545],{"class":258},"names.insert(",[100,164547,1985],{"class":117},[100,164549,14017],{"class":258},[100,164551,164552],{"class":110},"\"小李\"",[100,164554,809],{"class":258},[100,164556,164557,164560,164562,164564,164567],{"class":102,"line":577},[100,164558,164559],{"class":258},"names.extend([",[100,164561,10269],{"class":110},[100,164563,14017],{"class":258},[100,164565,164566],{"class":110},"\"小赵\"",[100,164568,6255],{"class":258},[100,164570,164571],{"class":102,"line":589},[100,164572,570],{"emptyLinePlaceholder":569},[100,164574,164575,164577],{"class":102,"line":595},[100,164576,1195],{"class":117},[100,164578,164579],{"class":258},"(names)\n",[19,164581,164582],{},"删除元素：",[73,164584,164586],{"className":249,"code":164585,"language":251,"meta":79,"style":79},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[32,164587,164588,164597,164607,164621,164633],{"__ignoreMap":79},[100,164589,164590,164593,164595],{"class":102,"line":103},[100,164591,164592],{"class":258},"names.remove(",[100,164594,152178],{"class":110},[100,164596,809],{"class":258},[100,164598,164599,164602,164604],{"class":102,"line":188},[100,164600,164601],{"class":258},"last ",[100,164603,472],{"class":471},[100,164605,164606],{"class":258}," names.pop()\n",[100,164608,164609,164612,164614,164617,164619],{"class":102,"line":199},[100,164610,164611],{"class":258},"first ",[100,164613,472],{"class":471},[100,164615,164616],{"class":258}," names.pop(",[100,164618,1366],{"class":117},[100,164620,809],{"class":258},[100,164622,164623,164626,164629,164631],{"class":102,"line":532},[100,164624,164625],{"class":471},"del",[100,164627,164628],{"class":258}," names[",[100,164630,1366],{"class":117},[100,164632,34802],{"class":258},[100,164634,164635],{"class":102,"line":577},[100,164636,164637],{"class":258},"names.clear()\n",[19,164639,164640],{},"查询和统计：",[73,164642,164644],{"className":249,"code":164643,"language":251,"meta":79,"style":79},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[32,164645,164646,164674,164678,164689,164700],{"__ignoreMap":79},[100,164647,164648,164650,164652,164654,164656,164658,164660,164662,164664,164666,164668,164670,164672],{"class":102,"line":103},[100,164649,164325],{"class":258},[100,164651,472],{"class":471},[100,164653,53780],{"class":258},[100,164655,1985],{"class":117},[100,164657,14017],{"class":258},[100,164659,465],{"class":117},[100,164661,14017],{"class":258},[100,164663,1849],{"class":117},[100,164665,14017],{"class":258},[100,164667,465],{"class":117},[100,164669,14017],{"class":258},[100,164671,748],{"class":117},[100,164673,34802],{"class":258},[100,164675,164676],{"class":102,"line":188},[100,164677,570],{"emptyLinePlaceholder":569},[100,164679,164680,164682,164685,164687],{"class":102,"line":199},[100,164681,1195],{"class":117},[100,164683,164684],{"class":258},"(numbers.index(",[100,164686,1849],{"class":117},[100,164688,751],{"class":258},[100,164690,164691,164693,164696,164698],{"class":102,"line":532},[100,164692,1195],{"class":117},[100,164694,164695],{"class":258},"(numbers.count(",[100,164697,465],{"class":117},[100,164699,751],{"class":258},[100,164701,164702,164704,164706,164708],{"class":102,"line":577},[100,164703,1195],{"class":117},[100,164705,713],{"class":258},[100,164707,8954],{"class":117},[100,164709,164710],{"class":258},"(numbers))\n",[19,164712,164713],{},"排序：",[73,164715,164717],{"className":249,"code":164716,"language":251,"meta":79,"style":79},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[32,164718,164719,164743,164747,164752,164759,164763,164777,164783,164787,164792],{"__ignoreMap":79},[100,164720,164721,164723,164725,164727,164729,164731,164733,164735,164737,164739,164741],{"class":102,"line":103},[100,164722,164325],{"class":258},[100,164724,472],{"class":471},[100,164726,53780],{"class":258},[100,164728,1849],{"class":117},[100,164730,14017],{"class":258},[100,164732,1985],{"class":117},[100,164734,14017],{"class":258},[100,164736,2086],{"class":117},[100,164738,14017],{"class":258},[100,164740,465],{"class":117},[100,164742,34802],{"class":258},[100,164744,164745],{"class":102,"line":188},[100,164746,570],{"emptyLinePlaceholder":569},[100,164748,164749],{"class":102,"line":199},[100,164750,164751],{"class":258},"numbers.sort()\n",[100,164753,164754,164756],{"class":102,"line":532},[100,164755,1195],{"class":117},[100,164757,164758],{"class":258},"(numbers)\n",[100,164760,164761],{"class":102,"line":577},[100,164762,570],{"emptyLinePlaceholder":569},[100,164764,164765,164768,164771,164773,164775],{"class":102,"line":589},[100,164766,164767],{"class":258},"numbers.sort(",[100,164769,164770],{"class":6812},"reverse",[100,164772,472],{"class":471},[100,164774,33034],{"class":117},[100,164776,809],{"class":258},[100,164778,164779,164781],{"class":102,"line":595},[100,164780,1195],{"class":117},[100,164782,164758],{"class":258},[100,164784,164785],{"class":102,"line":601},[100,164786,570],{"emptyLinePlaceholder":569},[100,164788,164789],{"class":102,"line":606},[100,164790,164791],{"class":258},"numbers.reverse()\n",[100,164793,164794,164796],{"class":102,"line":612},[100,164795,1195],{"class":117},[100,164797,164758],{"class":258},[19,164799,164800,164803,164804,164807],{},[32,164801,164802],{},"sort()"," 会修改原列表，",[32,164805,164806],{},"sorted()"," 返回新列表。",[73,164809,164811],{"className":249,"code":164810,"language":251,"meta":79,"style":79},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[32,164812,164813,164837,164849,164853,164859],{"__ignoreMap":79},[100,164814,164815,164817,164819,164821,164823,164825,164827,164829,164831,164833,164835],{"class":102,"line":103},[100,164816,164325],{"class":258},[100,164818,472],{"class":471},[100,164820,53780],{"class":258},[100,164822,1849],{"class":117},[100,164824,14017],{"class":258},[100,164826,1985],{"class":117},[100,164828,14017],{"class":258},[100,164830,2086],{"class":117},[100,164832,14017],{"class":258},[100,164834,465],{"class":117},[100,164836,34802],{"class":258},[100,164838,164839,164842,164844,164847],{"class":102,"line":188},[100,164840,164841],{"class":258},"new_numbers ",[100,164843,472],{"class":471},[100,164845,164846],{"class":117}," sorted",[100,164848,164758],{"class":258},[100,164850,164851],{"class":102,"line":199},[100,164852,570],{"emptyLinePlaceholder":569},[100,164854,164855,164857],{"class":102,"line":532},[100,164856,1195],{"class":117},[100,164858,164758],{"class":258},[100,164860,164861,164863],{"class":102,"line":577},[100,164862,1195],{"class":117},[100,164864,164865],{"class":258},"(new_numbers)\n",[14,164867,164869],{"id":164868},"_65-列表遍历","6.5 列表遍历",[73,164871,164873],{"className":249,"code":164872,"language":251,"meta":79,"style":79},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[32,164874,164875,164895,164899,164909],{"__ignoreMap":79},[100,164876,164877,164879,164881,164883,164885,164887,164889,164891,164893],{"class":102,"line":103},[100,164878,161622],{"class":258},[100,164880,472],{"class":471},[100,164882,53780],{"class":258},[100,164884,151130],{"class":110},[100,164886,14017],{"class":258},[100,164888,152178],{"class":110},[100,164890,14017],{"class":258},[100,164892,160973],{"class":110},[100,164894,34802],{"class":258},[100,164896,164897],{"class":102,"line":188},[100,164898,570],{"emptyLinePlaceholder":569},[100,164900,164901,164903,164905,164907],{"class":102,"line":199},[100,164902,1051],{"class":471},[100,164904,161658],{"class":258},[100,164906,854],{"class":471},[100,164908,161663],{"class":258},[100,164910,164911,164913],{"class":102,"line":532},[100,164912,702],{"class":117},[100,164914,151902],{"class":258},[19,164916,164917],{},"需要索引时：",[73,164919,164921],{"className":249,"code":164920,"language":251,"meta":79,"style":79},"for index, name in enumerate(names):\n    print(index, name)\n",[32,164922,164923,164937],{"__ignoreMap":79},[100,164924,164925,164927,164930,164932,164934],{"class":102,"line":103},[100,164926,1051],{"class":471},[100,164928,164929],{"class":258}," index, name ",[100,164931,854],{"class":471},[100,164933,33164],{"class":117},[100,164935,164936],{"class":258},"(names):\n",[100,164938,164939,164941],{"class":102,"line":188},[100,164940,702],{"class":117},[100,164942,164943],{"class":258},"(index, name)\n",[19,164945,164946],{},"统计总分：",[73,164948,164950],{"className":249,"code":164949,"language":251,"meta":79,"style":79},"scores = [90, 85, 66, 78]\ntotal = 0\n\nfor score in scores:\n    total += score\n\navg = total \u002F len(scores)\nprint(f\"平均分:{avg:.2f}\")\n",[32,164951,164952,164977,164985,164989,165000,165008,165012,165029],{"__ignoreMap":79},[100,164953,164954,164957,164959,164961,164963,164965,164967,164969,164971,164973,164975],{"class":102,"line":103},[100,164955,164956],{"class":258},"scores ",[100,164958,472],{"class":471},[100,164960,53780],{"class":258},[100,164962,2628],{"class":117},[100,164964,14017],{"class":258},[100,164966,2502],{"class":117},[100,164968,14017],{"class":258},[100,164970,2022],{"class":117},[100,164972,14017],{"class":258},[100,164974,2328],{"class":117},[100,164976,34802],{"class":258},[100,164978,164979,164981,164983],{"class":102,"line":188},[100,164980,158502],{"class":258},[100,164982,472],{"class":471},[100,164984,48887],{"class":117},[100,164986,164987],{"class":102,"line":199},[100,164988,570],{"emptyLinePlaceholder":569},[100,164990,164991,164993,164995,164997],{"class":102,"line":532},[100,164992,1051],{"class":471},[100,164994,159025],{"class":258},[100,164996,854],{"class":471},[100,164998,164999],{"class":258}," scores:\n",[100,165001,165002,165004,165006],{"class":102,"line":577},[100,165003,160549],{"class":258},[100,165005,11062],{"class":471},[100,165007,3211],{"class":258},[100,165009,165010],{"class":102,"line":589},[100,165011,570],{"emptyLinePlaceholder":569},[100,165013,165014,165017,165019,165022,165024,165026],{"class":102,"line":595},[100,165015,165016],{"class":258},"avg ",[100,165018,472],{"class":471},[100,165020,165021],{"class":258}," total ",[100,165023,2351],{"class":471},[100,165025,8927],{"class":117},[100,165027,165028],{"class":258},"(scores)\n",[100,165030,165031,165033,165035,165037,165040,165042,165045,165047,165049,165051],{"class":102,"line":601},[100,165032,1195],{"class":117},[100,165034,713],{"class":258},[100,165036,1830],{"class":471},[100,165038,165039],{"class":110},"\"平均分:",[100,165041,2662],{"class":117},[100,165043,165044],{"class":258},"avg",[100,165046,158401],{"class":471},[100,165048,2712],{"class":117},[100,165050,2019],{"class":110},[100,165052,809],{"class":258},[14,165054,165056],{"id":165055},"_66-元组tuple","6.6 元组tuple",[19,165058,165059],{},"元组和列表类似，但不可修改。",[73,165061,165063],{"className":249,"code":165062,"language":251,"meta":79,"style":79},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[32,165064,165065,165082],{"__ignoreMap":79},[100,165066,165067,165070,165072,165074,165076,165078,165080],{"class":102,"line":103},[100,165068,165069],{"class":258},"point ",[100,165071,472],{"class":471},[100,165073,3283],{"class":258},[100,165075,2213],{"class":117},[100,165077,14017],{"class":258},[100,165079,2466],{"class":117},[100,165081,809],{"class":258},[100,165083,165084,165086,165088,165090,165092,165094,165096,165098,165100],{"class":102,"line":188},[100,165085,117556],{"class":258},[100,165087,472],{"class":471},[100,165089,3283],{"class":258},[100,165091,151130],{"class":110},[100,165093,14017],{"class":258},[100,165095,2417],{"class":117},[100,165097,14017],{"class":258},[100,165099,70823],{"class":110},[100,165101,809],{"class":258},[19,165103,165104],{},"单元素元组必须加逗号：",[73,165106,165108],{"className":249,"code":165107,"language":251,"meta":79,"style":79},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[32,165109,165110,165124,165137,165141,165155],{"__ignoreMap":79},[100,165111,165112,165115,165117,165119,165121],{"class":102,"line":103},[100,165113,165114],{"class":258},"t1 ",[100,165116,472],{"class":471},[100,165118,3283],{"class":258},[100,165120,2213],{"class":117},[100,165122,165123],{"class":258},",)\n",[100,165125,165126,165129,165131,165133,165135],{"class":102,"line":188},[100,165127,165128],{"class":258},"t2 ",[100,165130,472],{"class":471},[100,165132,3283],{"class":258},[100,165134,2213],{"class":117},[100,165136,809],{"class":258},[100,165138,165139],{"class":102,"line":199},[100,165140,570],{"emptyLinePlaceholder":569},[100,165142,165143,165145,165147,165149,165152],{"class":102,"line":532},[100,165144,1195],{"class":117},[100,165146,713],{"class":258},[100,165148,104581],{"class":117},[100,165150,165151],{"class":258},"(t1))  ",[100,165153,165154],{"class":1836},"# tuple\n",[100,165156,165157,165159,165161,165163,165166],{"class":102,"line":577},[100,165158,1195],{"class":117},[100,165160,713],{"class":258},[100,165162,104581],{"class":117},[100,165164,165165],{"class":258},"(t2))  ",[100,165167,165168],{"class":1836},"# int\n",[19,165170,165171],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,165173,165175],{"id":165174},"_67-字符串str","6.7 字符串str",[19,165177,165178],{},"字符串也是序列，可以索引、切片和遍历。",[73,165180,165182],{"className":249,"code":165181,"language":251,"meta":79,"style":79},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[32,165183,165184,165192,165196,165207,165219,165223,165234],{"__ignoreMap":79},[100,165185,165186,165188,165190],{"class":102,"line":103},[100,165187,157686],{"class":258},[100,165189,472],{"class":471},[100,165191,160923],{"class":110},[100,165193,165194],{"class":102,"line":188},[100,165195,570],{"emptyLinePlaceholder":569},[100,165197,165198,165200,165203,165205],{"class":102,"line":199},[100,165199,1195],{"class":117},[100,165201,165202],{"class":258},"(text[",[100,165204,1366],{"class":117},[100,165206,6255],{"class":258},[100,165208,165209,165211,165213,165215,165217],{"class":102,"line":532},[100,165210,1195],{"class":117},[100,165212,165202],{"class":258},[100,165214,2299],{"class":471},[100,165216,1985],{"class":117},[100,165218,6255],{"class":258},[100,165220,165221],{"class":102,"line":577},[100,165222,570],{"emptyLinePlaceholder":569},[100,165224,165225,165227,165229,165231],{"class":102,"line":589},[100,165226,1051],{"class":471},[100,165228,160934],{"class":258},[100,165230,854],{"class":471},[100,165232,165233],{"class":258}," text:\n",[100,165235,165236,165238],{"class":102,"line":595},[100,165237,702],{"class":117},[100,165239,160945],{"class":258},[19,165241,165242],{},"字符串不可变：",[73,165244,165246],{"className":249,"code":165245,"language":251,"meta":79,"style":79},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[32,165247,165248,165256],{"__ignoreMap":79},[100,165249,165250,165252,165254],{"class":102,"line":103},[100,165251,157686],{"class":258},[100,165253,472],{"class":471},[100,165255,160923],{"class":110},[100,165257,165258,165261,165263,165265,165267,165270],{"class":102,"line":188},[100,165259,165260],{"class":258},"text[",[100,165262,1366],{"class":117},[100,165264,468],{"class":258},[100,165266,472],{"class":471},[100,165268,165269],{"class":110}," \"P\"",[100,165271,165272],{"class":1836},"  # 报错\n",[19,165274,165275],{},"如果要得到新字符串：",[73,165277,165279],{"className":249,"code":165278,"language":251,"meta":79,"style":79},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[32,165280,165281,165289,165307],{"__ignoreMap":79},[100,165282,165283,165285,165287],{"class":102,"line":103},[100,165284,157686],{"class":258},[100,165286,472],{"class":471},[100,165288,160923],{"class":110},[100,165290,165291,165293,165295,165297,165299,165302,165304],{"class":102,"line":188},[100,165292,157686],{"class":258},[100,165294,472],{"class":471},[100,165296,165269],{"class":110},[100,165298,47120],{"class":471},[100,165300,165301],{"class":258}," text[",[100,165303,1985],{"class":117},[100,165305,165306],{"class":258},":]\n",[100,165308,165309,165311],{"class":102,"line":199},[100,165310,1195],{"class":117},[100,165312,165313],{"class":258},"(text)\n",[14,165315,165317],{"id":165316},"_68-切片","6.8 切片",[19,165319,165320],{},"切片用于从序列中取一部分。",[73,165322,165324],{"className":249,"code":165323,"language":251,"meta":79,"style":79},"序列[开始:结束:步长]\n",[32,165325,165326],{"__ignoreMap":79},[100,165327,165328],{"class":102,"line":103},[100,165329,165323],{"class":258},[19,165331,165332],{},"结束位置不包含。",[73,165334,165336],{"className":249,"code":165335,"language":251,"meta":79,"style":79},"nums = [0, 1, 2, 3, 4, 5, 6]\n\nprint(nums[1:4])    # [1, 2, 3]\nprint(nums[:3])     # [0, 1, 2]\nprint(nums[3:])     # [3, 4, 5, 6]\nprint(nums[::2])    # [0, 2, 4, 6]\nprint(nums[::-1])   # 反转\n",[32,165337,165338,165375,165379,165398,165413,165427,165441],{"__ignoreMap":79},[100,165339,165340,165343,165345,165347,165349,165351,165353,165355,165357,165359,165361,165363,165365,165367,165369,165371,165373],{"class":102,"line":103},[100,165341,165342],{"class":258},"nums ",[100,165344,472],{"class":471},[100,165346,53780],{"class":258},[100,165348,1366],{"class":117},[100,165350,14017],{"class":258},[100,165352,1985],{"class":117},[100,165354,14017],{"class":258},[100,165356,465],{"class":117},[100,165358,14017],{"class":258},[100,165360,1849],{"class":117},[100,165362,14017],{"class":258},[100,165364,748],{"class":117},[100,165366,14017],{"class":258},[100,165368,2086],{"class":117},[100,165370,14017],{"class":258},[100,165372,2111],{"class":117},[100,165374,34802],{"class":258},[100,165376,165377],{"class":102,"line":188},[100,165378,570],{"emptyLinePlaceholder":569},[100,165380,165381,165383,165386,165388,165390,165392,165395],{"class":102,"line":199},[100,165382,1195],{"class":117},[100,165384,165385],{"class":258},"(nums[",[100,165387,1985],{"class":117},[100,165389,2625],{"class":258},[100,165391,748],{"class":117},[100,165393,165394],{"class":258},"])    ",[100,165396,165397],{"class":1836},"# [1, 2, 3]\n",[100,165399,165400,165402,165405,165407,165410],{"class":102,"line":532},[100,165401,1195],{"class":117},[100,165403,165404],{"class":258},"(nums[:",[100,165406,1849],{"class":117},[100,165408,165409],{"class":258},"])     ",[100,165411,165412],{"class":1836},"# [0, 1, 2]\n",[100,165414,165415,165417,165419,165421,165424],{"class":102,"line":577},[100,165416,1195],{"class":117},[100,165418,165385],{"class":258},[100,165420,1849],{"class":117},[100,165422,165423],{"class":258},":])     ",[100,165425,165426],{"class":1836},"# [3, 4, 5, 6]\n",[100,165428,165429,165431,165434,165436,165438],{"class":102,"line":589},[100,165430,1195],{"class":117},[100,165432,165433],{"class":258},"(nums[::",[100,165435,465],{"class":117},[100,165437,165394],{"class":258},[100,165439,165440],{"class":1836},"# [0, 2, 4, 6]\n",[100,165442,165443,165445,165447,165449,165451,165454],{"class":102,"line":595},[100,165444,1195],{"class":117},[100,165446,165433],{"class":258},[100,165448,2299],{"class":471},[100,165450,1985],{"class":117},[100,165452,165453],{"class":258},"])   ",[100,165455,165456],{"class":1836},"# 反转\n",[19,165458,165459],{},"字符串切片：",[73,165461,165463],{"className":249,"code":165462,"language":251,"meta":79,"style":79},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[32,165464,165465,165474,165488],{"__ignoreMap":79},[100,165466,165467,165469,165471],{"class":102,"line":103},[100,165468,157686],{"class":258},[100,165470,472],{"class":471},[100,165472,165473],{"class":110}," \"abcdef\"\n",[100,165475,165476,165478,165480,165482,165484,165486],{"class":102,"line":188},[100,165477,1195],{"class":117},[100,165479,165202],{"class":258},[100,165481,1985],{"class":117},[100,165483,2625],{"class":258},[100,165485,748],{"class":117},[100,165487,6255],{"class":258},[100,165489,165490,165492,165495,165497,165499],{"class":102,"line":199},[100,165491,1195],{"class":117},[100,165493,165494],{"class":258},"(text[::",[100,165496,2299],{"class":471},[100,165498,1985],{"class":117},[100,165500,6255],{"class":258},[14,165502,165504],{"id":165503},"_69-集合set","6.9 集合set",[19,165506,165507],{},"集合特点：",[26,165509,165510,165513,165516],{},[29,165511,165512],{},"无序。",[29,165514,165515],{},"元素不重复。",[29,165517,165518],{},"可以做交集、并集、差集。",[73,165520,165522],{"className":249,"code":165521,"language":251,"meta":79,"style":79},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[32,165523,165524,165552],{"__ignoreMap":79},[100,165525,165526,165528,165530,165532,165534,165536,165538,165540,165542,165544,165546,165548,165550],{"class":102,"line":103},[100,165527,165342],{"class":258},[100,165529,472],{"class":471},[100,165531,6046],{"class":258},[100,165533,1985],{"class":117},[100,165535,14017],{"class":258},[100,165537,465],{"class":117},[100,165539,14017],{"class":258},[100,165541,1849],{"class":117},[100,165543,14017],{"class":258},[100,165545,1849],{"class":117},[100,165547,14017],{"class":258},[100,165549,748],{"class":117},[100,165551,3197],{"class":258},[100,165553,165554,165556],{"class":102,"line":188},[100,165555,1195],{"class":117},[100,165557,165558],{"class":258},"(nums)\n",[19,165560,165561],{},"创建空集合：",[73,165563,165565],{"className":249,"code":165564,"language":251,"meta":79,"style":79},"s = set()\n",[32,165566,165567],{"__ignoreMap":79},[100,165568,165569,165571,165573,165575],{"class":102,"line":103},[100,165570,12161],{"class":258},[100,165572,472],{"class":471},[100,165574,120964],{"class":117},[100,165576,3587],{"class":258},[19,165578,381,165579,165581],{},[32,165580,34015],{}," 是空字典，不是空集合。",[19,165583,165584],{},"集合常用操作：",[73,165586,165588],{"className":249,"code":165587,"language":251,"meta":79,"style":79},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[32,165589,165590,165610,165614,165623,165632,165641],{"__ignoreMap":79},[100,165591,165592,165594,165596,165598,165600,165602,165604,165606,165608],{"class":102,"line":103},[100,165593,12161],{"class":258},[100,165595,472],{"class":471},[100,165597,6046],{"class":258},[100,165599,1985],{"class":117},[100,165601,14017],{"class":258},[100,165603,465],{"class":117},[100,165605,14017],{"class":258},[100,165607,1849],{"class":117},[100,165609,3197],{"class":258},[100,165611,165612],{"class":102,"line":188},[100,165613,570],{"emptyLinePlaceholder":569},[100,165615,165616,165619,165621],{"class":102,"line":199},[100,165617,165618],{"class":258},"s.add(",[100,165620,748],{"class":117},[100,165622,809],{"class":258},[100,165624,165625,165628,165630],{"class":102,"line":532},[100,165626,165627],{"class":258},"s.remove(",[100,165629,465],{"class":117},[100,165631,809],{"class":258},[100,165633,165634,165637,165639],{"class":102,"line":577},[100,165635,165636],{"class":258},"s.discard(",[100,165638,2213],{"class":117},[100,165640,809],{"class":258},[100,165642,165643,165645,165647,165649],{"class":102,"line":589},[100,165644,1195],{"class":117},[100,165646,713],{"class":258},[100,165648,8954],{"class":117},[100,165650,165651],{"class":258},"(s))\n",[19,165653,165654],{},"交并差：",[73,165656,165658],{"className":249,"code":165657,"language":251,"meta":79,"style":79},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[32,165659,165660,165680,165700,165704,165719,165732],{"__ignoreMap":79},[100,165661,165662,165664,165666,165668,165670,165672,165674,165676,165678],{"class":102,"line":103},[100,165663,12501],{"class":258},[100,165665,472],{"class":471},[100,165667,6046],{"class":258},[100,165669,1985],{"class":117},[100,165671,14017],{"class":258},[100,165673,465],{"class":117},[100,165675,14017],{"class":258},[100,165677,1849],{"class":117},[100,165679,3197],{"class":258},[100,165681,165682,165684,165686,165688,165690,165692,165694,165696,165698],{"class":102,"line":188},[100,165683,12527],{"class":258},[100,165685,472],{"class":471},[100,165687,6046],{"class":258},[100,165689,1849],{"class":117},[100,165691,14017],{"class":258},[100,165693,748],{"class":117},[100,165695,14017],{"class":258},[100,165697,2086],{"class":117},[100,165699,3197],{"class":258},[100,165701,165702],{"class":102,"line":199},[100,165703,570],{"emptyLinePlaceholder":569},[100,165705,165706,165708,165711,165713,165716],{"class":102,"line":532},[100,165707,1195],{"class":117},[100,165709,165710],{"class":258},"(a ",[100,165712,2120],{"class":471},[100,165714,165715],{"class":258}," b)  ",[100,165717,165718],{"class":1836},"# 交集\n",[100,165720,165721,165723,165725,165727,165729],{"class":102,"line":577},[100,165722,1195],{"class":117},[100,165724,165710],{"class":258},[100,165726,2687],{"class":471},[100,165728,165715],{"class":258},[100,165730,165731],{"class":1836},"# 并集\n",[100,165733,165734,165736,165738,165740,165742],{"class":102,"line":589},[100,165735,1195],{"class":117},[100,165737,165710],{"class":258},[100,165739,2299],{"class":471},[100,165741,165715],{"class":258},[100,165743,165744],{"class":1836},"# 差集\n",[14,165746,165748],{"id":165747},"_610-字典dict","6.10 字典dict",[19,165750,165751],{},"字典通过 key-value 保存数据。",[73,165753,165755],{"className":249,"code":165754,"language":251,"meta":79,"style":79},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[32,165756,165757,165765,165775,165786,165796],{"__ignoreMap":79},[100,165758,165759,165761,165763],{"class":102,"line":103},[100,165760,150723],{"class":258},[100,165762,472],{"class":471},[100,165764,17153],{"class":258},[100,165766,165767,165769,165771,165773],{"class":102,"line":188},[100,165768,148262],{"class":110},[100,165770,52991],{"class":258},[100,165772,151130],{"class":110},[100,165774,33024],{"class":258},[100,165776,165777,165780,165782,165784],{"class":102,"line":199},[100,165778,165779],{"class":110},"    \"age\"",[100,165781,52991],{"class":258},[100,165783,2417],{"class":117},[100,165785,33024],{"class":258},[100,165787,165788,165791,165793],{"class":102,"line":532},[100,165789,165790],{"class":110},"    \"score\"",[100,165792,52991],{"class":258},[100,165794,165795],{"class":117},"95\n",[100,165797,165798],{"class":102,"line":577},[100,165799,3197],{"class":258},[19,165801,165802],{},"获取值：",[73,165804,165806],{"className":249,"code":165805,"language":251,"meta":79,"style":79},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[32,165807,165808,165819],{"__ignoreMap":79},[100,165809,165810,165812,165815,165817],{"class":102,"line":103},[100,165811,1195],{"class":117},[100,165813,165814],{"class":258},"(student[",[100,165816,64233],{"class":110},[100,165818,6255],{"class":258},[100,165820,165821,165823,165826,165828],{"class":102,"line":188},[100,165822,1195],{"class":117},[100,165824,165825],{"class":258},"(student.get(",[100,165827,64233],{"class":110},[100,165829,751],{"class":258},[19,165831,16969],{},[73,165833,165835],{"className":249,"code":165834,"language":251,"meta":79,"style":79},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[32,165836,165837,165850],{"__ignoreMap":79},[100,165838,165839,165841,165844,165847],{"class":102,"line":103},[100,165840,154101],{"class":258},[100,165842,165843],{"class":110},"\"address\"",[100,165845,165846],{"class":258},"]     ",[100,165848,165849],{"class":1836},"# key不存在会报错\n",[100,165851,165852,165855,165857,165859],{"class":102,"line":188},[100,165853,165854],{"class":258},"student.get(",[100,165856,165843],{"class":110},[100,165858,15295],{"class":258},[100,165860,165861],{"class":1836},"# key不存在返回None\n",[19,165863,165864],{},"设置默认值：",[73,165866,165868],{"className":249,"code":165867,"language":251,"meta":79,"style":79},"print(student.get(\"address\", \"未知\"))\n",[32,165869,165870],{"__ignoreMap":79},[100,165871,165872,165874,165876,165878,165880,165883],{"class":102,"line":103},[100,165873,1195],{"class":117},[100,165875,165825],{"class":258},[100,165877,165843],{"class":110},[100,165879,14017],{"class":258},[100,165881,165882],{"class":110},"\"未知\"",[100,165884,751],{"class":258},[19,165886,165887],{},"新增和修改：",[73,165889,165891],{"className":249,"code":165890,"language":251,"meta":79,"style":79},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[32,165892,165893,165906],{"__ignoreMap":79},[100,165894,165895,165897,165899,165901,165903],{"class":102,"line":103},[100,165896,154101],{"class":258},[100,165898,70678],{"class":110},[100,165900,468],{"class":258},[100,165902,472],{"class":471},[100,165904,165905],{"class":117}," 19\n",[100,165907,165908,165910,165912,165914,165916],{"class":102,"line":188},[100,165909,154101],{"class":258},[100,165911,165843],{"class":110},[100,165913,468],{"class":258},[100,165915,472],{"class":471},[100,165917,165918],{"class":110}," \"北京\"\n",[19,165920,165921],{},"删除：",[73,165923,165925],{"className":249,"code":165924,"language":251,"meta":79,"style":79},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[32,165926,165927,165940,165950],{"__ignoreMap":79},[100,165928,165929,165931,165933,165936,165938],{"class":102,"line":103},[100,165930,156600],{"class":258},[100,165932,472],{"class":471},[100,165934,165935],{"class":258}," student.pop(",[100,165937,152714],{"class":110},[100,165939,809],{"class":258},[100,165941,165942,165944,165946,165948],{"class":102,"line":188},[100,165943,164625],{"class":471},[100,165945,153391],{"class":258},[100,165947,70678],{"class":110},[100,165949,34802],{"class":258},[100,165951,165952],{"class":102,"line":199},[100,165953,165954],{"class":258},"student.clear()\n",[14,165956,165958],{"id":165957},"_611-字典遍历","6.11 字典遍历",[19,165960,165961],{},"遍历 key：",[73,165963,165965],{"className":249,"code":165964,"language":251,"meta":79,"style":79},"for key in student:\n    print(key, student[key])\n",[32,165966,165967,165979],{"__ignoreMap":79},[100,165968,165969,165971,165974,165976],{"class":102,"line":103},[100,165970,1051],{"class":471},[100,165972,165973],{"class":258}," key ",[100,165975,854],{"class":471},[100,165977,165978],{"class":258}," student:\n",[100,165980,165981,165983],{"class":102,"line":188},[100,165982,702],{"class":117},[100,165984,165985],{"class":258},"(key, student[key])\n",[19,165987,165988],{},"遍历 value：",[73,165990,165992],{"className":249,"code":165991,"language":251,"meta":79,"style":79},"for value in student.values():\n    print(value)\n",[32,165993,165994,166006],{"__ignoreMap":79},[100,165995,165996,165998,166001,166003],{"class":102,"line":103},[100,165997,1051],{"class":471},[100,165999,166000],{"class":258}," value ",[100,166002,854],{"class":471},[100,166004,166005],{"class":258}," student.values():\n",[100,166007,166008,166010],{"class":102,"line":188},[100,166009,702],{"class":117},[100,166011,166012],{"class":258},"(value)\n",[19,166014,166015],{},"遍历 key 和 value：",[73,166017,166019],{"className":249,"code":166018,"language":251,"meta":79,"style":79},"for key, value in student.items():\n    print(key, value)\n",[32,166020,166021,166033],{"__ignoreMap":79},[100,166022,166023,166025,166028,166030],{"class":102,"line":103},[100,166024,1051],{"class":471},[100,166026,166027],{"class":258}," key, value ",[100,166029,854],{"class":471},[100,166031,166032],{"class":258}," student.items():\n",[100,166034,166035,166037],{"class":102,"line":188},[100,166036,702],{"class":117},[100,166038,166039],{"class":258},"(key, value)\n",[14,166041,166043],{"id":166042},"_612-嵌套容器","6.12 嵌套容器",[19,166045,166046],{},"列表中保存字典，是项目中最常见的结构之一。",[73,166048,166050],{"className":249,"code":166049,"language":251,"meta":79,"style":79},"students = [\n    {\"name\": \"小明\", \"age\": 18, \"score\": 95},\n    {\"name\": \"小红\", \"age\": 17, \"score\": 88},\n    {\"name\": \"小刚\", \"age\": 19, \"score\": 72},\n]\n\nfor student in students:\n    print(student[\"name\"], student[\"score\"])\n",[32,166051,166052,166060,166088,166116,166144,166148,166152,166162],{"__ignoreMap":79},[100,166053,166054,166056,166058],{"class":102,"line":103},[100,166055,160958],{"class":258},[100,166057,472],{"class":471},[100,166059,57001],{"class":258},[100,166061,166062,166064,166066,166068,166070,166072,166074,166076,166078,166080,166082,166084,166086],{"class":102,"line":188},[100,166063,149627],{"class":258},[100,166065,64233],{"class":110},[100,166067,52991],{"class":258},[100,166069,151130],{"class":110},[100,166071,14017],{"class":258},[100,166073,70678],{"class":110},[100,166075,52991],{"class":258},[100,166077,2417],{"class":117},[100,166079,14017],{"class":258},[100,166081,152714],{"class":110},[100,166083,52991],{"class":258},[100,166085,2755],{"class":117},[100,166087,6528],{"class":258},[100,166089,166090,166092,166094,166096,166098,166100,166102,166104,166106,166108,166110,166112,166114],{"class":102,"line":199},[100,166091,149627],{"class":258},[100,166093,64233],{"class":110},[100,166095,52991],{"class":258},[100,166097,152178],{"class":110},[100,166099,14017],{"class":258},[100,166101,70678],{"class":110},[100,166103,52991],{"class":258},[100,166105,2392],{"class":117},[100,166107,14017],{"class":258},[100,166109,152714],{"class":110},[100,166111,52991],{"class":258},[100,166113,2577],{"class":117},[100,166115,6528],{"class":258},[100,166117,166118,166120,166122,166124,166126,166128,166130,166132,166134,166136,166138,166140,166142],{"class":102,"line":532},[100,166119,149627],{"class":258},[100,166121,64233],{"class":110},[100,166123,52991],{"class":258},[100,166125,160973],{"class":110},[100,166127,14017],{"class":258},[100,166129,70678],{"class":110},[100,166131,52991],{"class":258},[100,166133,2441],{"class":117},[100,166135,14017],{"class":258},[100,166137,152714],{"class":110},[100,166139,52991],{"class":258},[100,166141,2173],{"class":117},[100,166143,6528],{"class":258},[100,166145,166146],{"class":102,"line":577},[100,166147,34802],{"class":258},[100,166149,166150],{"class":102,"line":589},[100,166151,570],{"emptyLinePlaceholder":569},[100,166153,166154,166156,166158,166160],{"class":102,"line":595},[100,166155,1051],{"class":471},[100,166157,153379],{"class":258},[100,166159,854],{"class":471},[100,166161,153384],{"class":258},[100,166163,166164,166166,166168,166170,166173,166175],{"class":102,"line":601},[100,166165,702],{"class":117},[100,166167,165814],{"class":258},[100,166169,64233],{"class":110},[100,166171,166172],{"class":258},"], student[",[100,166174,152714],{"class":110},[100,166176,6255],{"class":258},[19,166178,166179],{},"统计平均分：",[73,166181,166183],{"className":249,"code":166182,"language":251,"meta":79,"style":79},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[32,166184,166185,166193,166197,166207,166219,166223,166238],{"__ignoreMap":79},[100,166186,166187,166189,166191],{"class":102,"line":103},[100,166188,158502],{"class":258},[100,166190,472],{"class":471},[100,166192,48887],{"class":117},[100,166194,166195],{"class":102,"line":188},[100,166196,570],{"emptyLinePlaceholder":569},[100,166198,166199,166201,166203,166205],{"class":102,"line":199},[100,166200,1051],{"class":471},[100,166202,153379],{"class":258},[100,166204,854],{"class":471},[100,166206,153384],{"class":258},[100,166208,166209,166211,166213,166215,166217],{"class":102,"line":532},[100,166210,160549],{"class":258},[100,166212,11062],{"class":471},[100,166214,153391],{"class":258},[100,166216,152714],{"class":110},[100,166218,34802],{"class":258},[100,166220,166221],{"class":102,"line":577},[100,166222,570],{"emptyLinePlaceholder":569},[100,166224,166225,166227,166229,166231,166233,166235],{"class":102,"line":589},[100,166226,165016],{"class":258},[100,166228,472],{"class":471},[100,166230,165021],{"class":258},[100,166232,2351],{"class":471},[100,166234,8927],{"class":117},[100,166236,166237],{"class":258},"(students)\n",[100,166239,166240,166242,166244,166246,166248,166250,166252,166254,166256,166258],{"class":102,"line":595},[100,166241,1195],{"class":117},[100,166243,713],{"class":258},[100,166245,1830],{"class":471},[100,166247,165039],{"class":110},[100,166249,2662],{"class":117},[100,166251,165044],{"class":258},[100,166253,158401],{"class":471},[100,166255,2712],{"class":117},[100,166257,2019],{"class":110},[100,166259,809],{"class":258},[19,166261,166262],{},"查找学生：",[73,166264,166266],{"className":249,"code":166265,"language":251,"meta":79,"style":79},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[32,166267,166268,166283,166287,166297,166311,166317,166321,166327],{"__ignoreMap":79},[100,166269,166270,166272,166274,166276,166278,166281],{"class":102,"line":103},[100,166271,112820],{"class":258},[100,166273,472],{"class":471},[100,166275,62159],{"class":117},[100,166277,713],{"class":258},[100,166279,166280],{"class":110},"\"请输入学生姓名:\"",[100,166282,809],{"class":258},[100,166284,166285],{"class":102,"line":188},[100,166286,570],{"emptyLinePlaceholder":569},[100,166288,166289,166291,166293,166295],{"class":102,"line":199},[100,166290,1051],{"class":471},[100,166292,153379],{"class":258},[100,166294,854],{"class":471},[100,166296,153384],{"class":258},[100,166298,166299,166301,166303,166305,166307,166309],{"class":102,"line":532},[100,166300,4702],{"class":471},[100,166302,153391],{"class":258},[100,166304,64233],{"class":110},[100,166306,468],{"class":258},[100,166308,4551],{"class":471},[100,166310,161674],{"class":258},[100,166312,166313,166315],{"class":102,"line":577},[100,166314,34007],{"class":117},[100,166316,151284],{"class":258},[100,166318,166319],{"class":102,"line":589},[100,166320,33185],{"class":471},[100,166322,166323,166325],{"class":102,"line":595},[100,166324,3322],{"class":471},[100,166326,696],{"class":258},[100,166328,166329,166331,166333,166336],{"class":102,"line":601},[100,166330,702],{"class":117},[100,166332,713],{"class":258},[100,166334,166335],{"class":110},"\"没有找到\"",[100,166337,809],{"class":258},[14,166339,166341],{"id":166340},"_613-容器通用操作","6.13 容器通用操作",[19,166343,166344],{},"长度：",[73,166346,166348],{"className":249,"code":166347,"language":251,"meta":79,"style":79},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[32,166349,166350,166369,166379],{"__ignoreMap":79},[100,166351,166352,166354,166357,166359,166361,166363,166365,166367],{"class":102,"line":103},[100,166353,8954],{"class":117},[100,166355,166356],{"class":258},"([",[100,166358,1985],{"class":117},[100,166360,14017],{"class":258},[100,166362,465],{"class":117},[100,166364,14017],{"class":258},[100,166366,1849],{"class":117},[100,166368,6255],{"class":258},[100,166370,166371,166373,166375,166377],{"class":102,"line":188},[100,166372,8954],{"class":117},[100,166374,713],{"class":258},[100,166376,157122],{"class":110},[100,166378,809],{"class":258},[100,166380,166381,166383,166386,166388,166390,166392],{"class":102,"line":199},[100,166382,8954],{"class":117},[100,166384,166385],{"class":258},"({",[100,166387,64233],{"class":110},[100,166389,52991],{"class":258},[100,166391,151130],{"class":110},[100,166393,166394],{"class":258},"})\n",[19,166396,166397],{},"最大最小：",[73,166399,166401],{"className":249,"code":166400,"language":251,"meta":79,"style":79},"max([1, 2, 3])\nmin([1, 2, 3])\n",[32,166402,166403,166421],{"__ignoreMap":79},[100,166404,166405,166407,166409,166411,166413,166415,166417,166419],{"class":102,"line":103},[100,166406,7611],{"class":117},[100,166408,166356],{"class":258},[100,166410,1985],{"class":117},[100,166412,14017],{"class":258},[100,166414,465],{"class":117},[100,166416,14017],{"class":258},[100,166418,1849],{"class":117},[100,166420,6255],{"class":258},[100,166422,166423,166426,166428,166430,166432,166434,166436,166438],{"class":102,"line":188},[100,166424,166425],{"class":117},"min",[100,166427,166356],{"class":258},[100,166429,1985],{"class":117},[100,166431,14017],{"class":258},[100,166433,465],{"class":117},[100,166435,14017],{"class":258},[100,166437,1849],{"class":117},[100,166439,6255],{"class":258},[19,166441,166442],{},"求和：",[73,166444,166446],{"className":249,"code":166445,"language":251,"meta":79,"style":79},"sum([1, 2, 3])\n",[32,166447,166448],{"__ignoreMap":79},[100,166449,166450,166453,166455,166457,166459,166461,166463,166465],{"class":102,"line":103},[100,166451,166452],{"class":117},"sum",[100,166454,166356],{"class":258},[100,166456,1985],{"class":117},[100,166458,14017],{"class":258},[100,166460,465],{"class":117},[100,166462,14017],{"class":258},[100,166464,1849],{"class":117},[100,166466,6255],{"class":258},[19,166468,164713],{},[73,166470,166472],{"className":249,"code":166471,"language":251,"meta":79,"style":79},"sorted([3, 1, 2])\n",[32,166473,166474],{"__ignoreMap":79},[100,166475,166476,166479,166481,166483,166485,166487,166489,166491],{"class":102,"line":103},[100,166477,166478],{"class":117},"sorted",[100,166480,166356],{"class":258},[100,166482,1849],{"class":117},[100,166484,14017],{"class":258},[100,166486,1985],{"class":117},[100,166488,14017],{"class":258},[100,166490,465],{"class":117},[100,166492,6255],{"class":258},[19,166494,166495],{},"类型转换：",[73,166497,166499],{"className":249,"code":166498,"language":251,"meta":79,"style":79},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[32,166500,166501,166511,166529],{"__ignoreMap":79},[100,166502,166503,166505,166507,166509],{"class":102,"line":103},[100,166504,155312],{"class":117},[100,166506,713],{"class":258},[100,166508,157122],{"class":110},[100,166510,809],{"class":258},[100,166512,166513,166515,166517,166519,166521,166523,166525,166527],{"class":102,"line":188},[100,166514,156507],{"class":117},[100,166516,166356],{"class":258},[100,166518,1985],{"class":117},[100,166520,14017],{"class":258},[100,166522,465],{"class":117},[100,166524,14017],{"class":258},[100,166526,1849],{"class":117},[100,166528,6255],{"class":258},[100,166530,166531,166533,166535,166537,166539,166541,166543,166545,166547,166549],{"class":102,"line":199},[100,166532,156532],{"class":117},[100,166534,166356],{"class":258},[100,166536,1985],{"class":117},[100,166538,14017],{"class":258},[100,166540,1985],{"class":117},[100,166542,14017],{"class":258},[100,166544,465],{"class":117},[100,166546,14017],{"class":258},[100,166548,1849],{"class":117},[100,166550,6255],{"class":258},[19,166552,166553],{},"成员判断：",[73,166555,166557],{"className":249,"code":166556,"language":251,"meta":79,"style":79},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[32,166558,166559,166576,166600],{"__ignoreMap":79},[100,166560,166561,166563,166565,166568,166571,166574],{"class":102,"line":103},[100,166562,1195],{"class":117},[100,166564,713],{"class":258},[100,166566,166567],{"class":110},"\"a\"",[100,166569,166570],{"class":471}," in",[100,166572,166573],{"class":110}," \"abc\"",[100,166575,809],{"class":258},[100,166577,166578,166580,166582,166584,166586,166588,166590,166592,166594,166596,166598],{"class":102,"line":188},[100,166579,1195],{"class":117},[100,166581,713],{"class":258},[100,166583,1985],{"class":117},[100,166585,166570],{"class":471},[100,166587,53780],{"class":258},[100,166589,1985],{"class":117},[100,166591,14017],{"class":258},[100,166593,465],{"class":117},[100,166595,14017],{"class":258},[100,166597,1849],{"class":117},[100,166599,6255],{"class":258},[100,166601,166602,166604,166606,166608,166610,166612,166614,166616,166618],{"class":102,"line":199},[100,166603,1195],{"class":117},[100,166605,713],{"class":258},[100,166607,64233],{"class":110},[100,166609,166570],{"class":471},[100,166611,6046],{"class":258},[100,166613,64233],{"class":110},[100,166615,52991],{"class":258},[100,166617,151130],{"class":110},[100,166619,166394],{"class":258},[14,166621,166623],{"id":166622},"_614-推导式","6.14 推导式",[19,166625,166626],{},"推导式用于快速生成容器。",[19,166628,166629],{},"列表推导式：",[73,166631,166633],{"className":249,"code":166632,"language":251,"meta":79,"style":79},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[32,166634,166635,166662],{"__ignoreMap":79},[100,166636,166637,166639,166641,166644,166646,166648,166650,166652,166654,166656,166658,166660],{"class":102,"line":103},[100,166638,165342],{"class":258},[100,166640,472],{"class":471},[100,166642,166643],{"class":258}," [i ",[100,166645,1051],{"class":471},[100,166647,11023],{"class":258},[100,166649,854],{"class":471},[100,166651,857],{"class":117},[100,166653,713],{"class":258},[100,166655,1985],{"class":117},[100,166657,14017],{"class":258},[100,166659,2111],{"class":117},[100,166661,98850],{"class":258},[100,166663,166664,166666],{"class":102,"line":188},[100,166665,1195],{"class":117},[100,166667,165558],{"class":258},[19,166669,166670],{},"带条件：",[73,166672,166674],{"className":249,"code":166673,"language":251,"meta":79,"style":79},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[32,166675,166676,166717],{"__ignoreMap":79},[100,166677,166678,166681,166683,166685,166687,166689,166691,166693,166695,166697,166699,166701,166703,166705,166707,166709,166711,166713,166715],{"class":102,"line":103},[100,166679,166680],{"class":258},"even_nums ",[100,166682,472],{"class":471},[100,166684,166643],{"class":258},[100,166686,1051],{"class":471},[100,166688,11023],{"class":258},[100,166690,854],{"class":471},[100,166692,857],{"class":117},[100,166694,713],{"class":258},[100,166696,1985],{"class":117},[100,166698,14017],{"class":258},[100,166700,2104],{"class":117},[100,166702,15295],{"class":258},[100,166704,958],{"class":471},[100,166706,11023],{"class":258},[100,166708,2095],{"class":471},[100,166710,16336],{"class":117},[100,166712,964],{"class":471},[100,166714,5692],{"class":117},[100,166716,34802],{"class":258},[100,166718,166719,166721],{"class":102,"line":188},[100,166720,1195],{"class":117},[100,166722,166723],{"class":258},"(even_nums)\n",[19,166725,166726],{},"字典推导式：",[73,166728,166730],{"className":249,"code":166729,"language":251,"meta":79,"style":79},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[32,166731,166732,166766],{"__ignoreMap":79},[100,166733,166734,166737,166739,166742,166744,166746,166749,166751,166753,166755,166757,166759,166761,166763],{"class":102,"line":103},[100,166735,166736],{"class":258},"squares ",[100,166738,472],{"class":471},[100,166740,166741],{"class":258}," {i: i ",[100,166743,12243],{"class":471},[100,166745,16336],{"class":117},[100,166747,166748],{"class":471}," for",[100,166750,11023],{"class":258},[100,166752,854],{"class":471},[100,166754,857],{"class":117},[100,166756,713],{"class":258},[100,166758,1985],{"class":117},[100,166760,14017],{"class":258},[100,166762,2111],{"class":117},[100,166764,166765],{"class":258},")}\n",[100,166767,166768,166770],{"class":102,"line":188},[100,166769,1195],{"class":117},[100,166771,166772],{"class":258},"(squares)\n",[19,166774,166775],{},"集合推导式：",[73,166777,166779],{"className":249,"code":166778,"language":251,"meta":79,"style":79},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[32,166780,166781,166802],{"__ignoreMap":79},[100,166782,166783,166786,166788,166791,166793,166795,166797,166800],{"class":102,"line":103},[100,166784,166785],{"class":258},"chars ",[100,166787,472],{"class":471},[100,166789,166790],{"class":258}," {ch ",[100,166792,1051],{"class":471},[100,166794,160934],{"class":258},[100,166796,854],{"class":471},[100,166798,166799],{"class":110}," \"hello\"",[100,166801,3197],{"class":258},[100,166803,166804,166806],{"class":102,"line":188},[100,166805,1195],{"class":117},[100,166807,166808],{"class":258},"(chars)\n",[19,166810,166811],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,166813,166815],{"id":166814},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[73,166817,166819],{"className":249,"code":166818,"language":251,"meta":79,"style":79},"students = [\n    {\"name\": \"小明\", \"score\": 95},\n    {\"name\": \"小红\", \"score\": 88},\n    {\"name\": \"小刚\", \"score\": 72},\n    {\"name\": \"小李\", \"score\": 59},\n]\n\ntotal = 0\nmax_student = students[0]\npassed = []\n\nfor student in students:\n    total += student[\"score\"]\n\n    if student[\"score\"] > max_student[\"score\"]:\n        max_student = student\n\n    if student[\"score\"] >= 60:\n        passed.append(student)\n\navg = total \u002F len(students)\n\nprint(f\"平均分:{avg:.2f}\")\nprint(f\"最高分学生:{max_student['name']} {max_student['score']}\")\nprint(f\"及格人数:{len(passed)}\")\n",[32,166820,166821,166829,166849,166869,166889,166909,166913,166917,166925,166939,166948,166952,166962,166974,166978,166998,167007,167011,167027,167032,167036,167050,167054,167076,167112],{"__ignoreMap":79},[100,166822,166823,166825,166827],{"class":102,"line":103},[100,166824,160958],{"class":258},[100,166826,472],{"class":471},[100,166828,57001],{"class":258},[100,166830,166831,166833,166835,166837,166839,166841,166843,166845,166847],{"class":102,"line":188},[100,166832,149627],{"class":258},[100,166834,64233],{"class":110},[100,166836,52991],{"class":258},[100,166838,151130],{"class":110},[100,166840,14017],{"class":258},[100,166842,152714],{"class":110},[100,166844,52991],{"class":258},[100,166846,2755],{"class":117},[100,166848,6528],{"class":258},[100,166850,166851,166853,166855,166857,166859,166861,166863,166865,166867],{"class":102,"line":199},[100,166852,149627],{"class":258},[100,166854,64233],{"class":110},[100,166856,52991],{"class":258},[100,166858,152178],{"class":110},[100,166860,14017],{"class":258},[100,166862,152714],{"class":110},[100,166864,52991],{"class":258},[100,166866,2577],{"class":117},[100,166868,6528],{"class":258},[100,166870,166871,166873,166875,166877,166879,166881,166883,166885,166887],{"class":102,"line":532},[100,166872,149627],{"class":258},[100,166874,64233],{"class":110},[100,166876,52991],{"class":258},[100,166878,160973],{"class":110},[100,166880,14017],{"class":258},[100,166882,152714],{"class":110},[100,166884,52991],{"class":258},[100,166886,2173],{"class":117},[100,166888,6528],{"class":258},[100,166890,166891,166893,166895,166897,166899,166901,166903,166905,166907],{"class":102,"line":577},[100,166892,149627],{"class":258},[100,166894,64233],{"class":110},[100,166896,52991],{"class":258},[100,166898,164552],{"class":110},[100,166900,14017],{"class":258},[100,166902,152714],{"class":110},[100,166904,52991],{"class":258},[100,166906,2648],{"class":117},[100,166908,6528],{"class":258},[100,166910,166911],{"class":102,"line":589},[100,166912,34802],{"class":258},[100,166914,166915],{"class":102,"line":595},[100,166916,570],{"emptyLinePlaceholder":569},[100,166918,166919,166921,166923],{"class":102,"line":601},[100,166920,158502],{"class":258},[100,166922,472],{"class":471},[100,166924,48887],{"class":117},[100,166926,166927,166930,166932,166935,166937],{"class":102,"line":606},[100,166928,166929],{"class":258},"max_student ",[100,166931,472],{"class":471},[100,166933,166934],{"class":258}," students[",[100,166936,1366],{"class":117},[100,166938,34802],{"class":258},[100,166940,166941,166944,166946],{"class":102,"line":612},[100,166942,166943],{"class":258},"passed ",[100,166945,472],{"class":471},[100,166947,53392],{"class":258},[100,166949,166950],{"class":102,"line":618},[100,166951,570],{"emptyLinePlaceholder":569},[100,166953,166954,166956,166958,166960],{"class":102,"line":623},[100,166955,1051],{"class":471},[100,166957,153379],{"class":258},[100,166959,854],{"class":471},[100,166961,153384],{"class":258},[100,166963,166964,166966,166968,166970,166972],{"class":102,"line":629},[100,166965,160549],{"class":258},[100,166967,11062],{"class":471},[100,166969,153391],{"class":258},[100,166971,152714],{"class":110},[100,166973,34802],{"class":258},[100,166975,166976],{"class":102,"line":635},[100,166977,570],{"emptyLinePlaceholder":569},[100,166979,166980,166982,166984,166986,166988,166990,166993,166995],{"class":102,"line":641},[100,166981,4702],{"class":471},[100,166983,153391],{"class":258},[100,166985,152714],{"class":110},[100,166987,468],{"class":258},[100,166989,2726],{"class":471},[100,166991,166992],{"class":258}," max_student[",[100,166994,152714],{"class":110},[100,166996,166997],{"class":258},"]:\n",[100,166999,167000,167003,167005],{"class":102,"line":647},[100,167001,167002],{"class":258},"        max_student ",[100,167004,472],{"class":471},[100,167006,153407],{"class":258},[100,167008,167009],{"class":102,"line":653},[100,167010,570],{"emptyLinePlaceholder":569},[100,167012,167013,167015,167017,167019,167021,167023,167025],{"class":102,"line":659},[100,167014,4702],{"class":471},[100,167016,153391],{"class":258},[100,167018,152714],{"class":110},[100,167020,468],{"class":258},[100,167022,3331],{"class":471},[100,167024,159079],{"class":117},[100,167026,696],{"class":258},[100,167028,167029],{"class":102,"line":665},[100,167030,167031],{"class":258},"        passed.append(student)\n",[100,167033,167034],{"class":102,"line":670},[100,167035,570],{"emptyLinePlaceholder":569},[100,167037,167038,167040,167042,167044,167046,167048],{"class":102,"line":675},[100,167039,165016],{"class":258},[100,167041,472],{"class":471},[100,167043,165021],{"class":258},[100,167045,2351],{"class":471},[100,167047,8927],{"class":117},[100,167049,166237],{"class":258},[100,167051,167052],{"class":102,"line":699},[100,167053,570],{"emptyLinePlaceholder":569},[100,167055,167056,167058,167060,167062,167064,167066,167068,167070,167072,167074],{"class":102,"line":708},[100,167057,1195],{"class":117},[100,167059,713],{"class":258},[100,167061,1830],{"class":471},[100,167063,165039],{"class":110},[100,167065,2662],{"class":117},[100,167067,165044],{"class":258},[100,167069,158401],{"class":471},[100,167071,2712],{"class":117},[100,167073,2019],{"class":110},[100,167075,809],{"class":258},[100,167077,167078,167080,167082,167084,167087,167089,167092,167094,167096,167098,167100,167102,167104,167106,167108,167110],{"class":102,"line":722},[100,167079,1195],{"class":117},[100,167081,713],{"class":258},[100,167083,1830],{"class":471},[100,167085,167086],{"class":110},"\"最高分学生:",[100,167088,2662],{"class":117},[100,167090,167091],{"class":258},"max_student[",[100,167093,154124],{"class":110},[100,167095,2706],{"class":258},[100,167097,2712],{"class":117},[100,167099,6046],{"class":117},[100,167101,167091],{"class":258},[100,167103,154162],{"class":110},[100,167105,2706],{"class":258},[100,167107,2712],{"class":117},[100,167109,2019],{"class":110},[100,167111,809],{"class":258},[100,167113,167114,167116,167118,167120,167123,167126,167129,167131,167133],{"class":102,"line":735},[100,167115,1195],{"class":117},[100,167117,713],{"class":258},[100,167119,1830],{"class":471},[100,167121,167122],{"class":110},"\"及格人数:",[100,167124,167125],{"class":117},"{len",[100,167127,167128],{"class":258},"(passed)",[100,167130,2712],{"class":117},[100,167132,2019],{"class":110},[100,167134,809],{"class":258},[14,167136,167138],{"id":167137},"_616-易错点","6.16 易错点",[26,167140,167141,167144,167147,167150,167156,167165],{},[29,167142,167143],{},"列表可变，元组和字符串不可变。",[29,167145,167146],{},"切片结束位置不包含。",[29,167148,167149],{},"字典通过 key 取值，不是通过索引。",[29,167151,167152,167153,233],{},"空集合要用 ",[32,167154,167155],{},"set()",[29,167157,65,167158,167161,167162,233],{},[32,167159,167160],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[32,167163,167164],{},"get()",[29,167166,167167],{},"嵌套容器要先看清楚每一层是什么类型。",[14,167169,167171],{"id":167170},"_617-本章练习","6.17 本章练习",[26,167173,167174,167177,167180,167183,167186],{},[29,167175,167176],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[29,167178,167179],{},"输入一句话，统计每个字符出现次数。",[29,167181,167182],{},"使用集合去除列表中的重复元素。",[29,167184,167185],{},"使用字典保存一个学生的信息，并实现修改成绩。",[29,167187,167188],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[1677,167190,167191],{},"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":79,"searchDepth":188,"depth":188,"links":167193},[167194,167195,167196,167197,167198,167199,167200,167201,167202,167203,167204,167205,167206,167207,167208,167209,167210],{"id":164174,"depth":188,"text":164175},{"id":164291,"depth":188,"text":164292},{"id":164381,"depth":188,"text":164382},{"id":164505,"depth":188,"text":164506},{"id":164868,"depth":188,"text":164869},{"id":165055,"depth":188,"text":165056},{"id":165174,"depth":188,"text":165175},{"id":165316,"depth":188,"text":165317},{"id":165503,"depth":188,"text":165504},{"id":165747,"depth":188,"text":165748},{"id":165957,"depth":188,"text":165958},{"id":166042,"depth":188,"text":166043},{"id":166340,"depth":188,"text":166341},{"id":166622,"depth":188,"text":166623},{"id":166814,"depth":188,"text":166815},{"id":167137,"depth":188,"text":167138},{"id":167170,"depth":188,"text":167171},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":164166,"description":24958},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":167217,"title":167218,"body":167219,"description":24958,"extension":1708,"meta":169391,"navigation":569,"path":169392,"seo":169393,"stem":169394,"__hash__":169395},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":167220,"toc":169366},[167221,167224,167228,167231,167311,167314,167335,167338,167342,167345,167407,167410,167427,167431,167434,167479,167481,167489,167493,167496,167578,167581,167584,167609,167612,167635,167639,167642,167644,167706,167709,167711,167762,167766,167770,167776,167881,167885,167891,167962,167966,167969,168037,168040,168120,168124,168130,168166,168169,168172,168282,168288,168292,168295,168367,168370,168374,168378,168383,168445,168449,168454,168522,168526,168531,168647,168651,168654,168734,168737,168741,168744,168848,168850,168865,168868,168872,169010,169018,169022,169024,169035,169037,169295,169299,169331,169335,169363],[10,167222,167218],{"id":167223},"_7-函数进阶",[14,167225,167227],{"id":167226},"_71-多返回值","7.1 多返回值",[19,167229,167230],{},"Python 函数可以返回多个值，本质上返回的是元组。",[73,167232,167234],{"className":249,"code":167233,"language":251,"meta":79,"style":79},"def get_info():\n    name = \"小明\"\n    age = 18\n    score = 95\n    return name, age, score\n\n\nresult = get_info()\nprint(result)\nprint(type(result))\n",[32,167235,167236,167245,167253,167261,167270,167277,167281,167285,167294,167300],{"__ignoreMap":79},[100,167237,167238,167240,167243],{"class":102,"line":103},[100,167239,678],{"class":471},[100,167241,167242],{"class":106}," get_info",[100,167244,33510],{"class":258},[100,167246,167247,167249,167251],{"class":102,"line":188},[100,167248,153612],{"class":258},[100,167250,472],{"class":471},[100,167252,150595],{"class":110},[100,167254,167255,167257,167259],{"class":102,"line":199},[100,167256,153628],{"class":258},[100,167258,472],{"class":471},[100,167260,147793],{"class":117},[100,167262,167263,167265,167267],{"class":102,"line":532},[100,167264,153643],{"class":258},[100,167266,472],{"class":471},[100,167268,167269],{"class":117}," 95\n",[100,167271,167272,167274],{"class":102,"line":577},[100,167273,5689],{"class":471},[100,167275,167276],{"class":258}," name, age, score\n",[100,167278,167279],{"class":102,"line":589},[100,167280,570],{"emptyLinePlaceholder":569},[100,167282,167283],{"class":102,"line":595},[100,167284,570],{"emptyLinePlaceholder":569},[100,167286,167287,167289,167291],{"class":102,"line":601},[100,167288,162548],{"class":258},[100,167290,472],{"class":471},[100,167292,167293],{"class":258}," get_info()\n",[100,167295,167296,167298],{"class":102,"line":606},[100,167297,1195],{"class":117},[100,167299,78139],{"class":258},[100,167301,167302,167304,167306,167308],{"class":102,"line":612},[100,167303,1195],{"class":117},[100,167305,713],{"class":258},[100,167307,104581],{"class":117},[100,167309,167310],{"class":258},"(result))\n",[19,167312,167313],{},"可以直接解包：",[73,167315,167317],{"className":249,"code":167316,"language":251,"meta":79,"style":79},"name, age, score = get_info()\nprint(name, age, score)\n",[32,167318,167319,167328],{"__ignoreMap":79},[100,167320,167321,167324,167326],{"class":102,"line":103},[100,167322,167323],{"class":258},"name, age, score ",[100,167325,472],{"class":471},[100,167327,167293],{"class":258},[100,167329,167330,167332],{"class":102,"line":188},[100,167331,1195],{"class":117},[100,167333,167334],{"class":258},"(name, age, score)\n",[19,167336,167337],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,167339,167341],{"id":167340},"_72-位置参数","7.2 位置参数",[19,167343,167344],{},"位置参数按顺序传递。",[73,167346,167348],{"className":249,"code":167347,"language":251,"meta":79,"style":79},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[32,167349,167350,167358,167386,167390,167394],{"__ignoreMap":79},[100,167351,167352,167354,167356],{"class":102,"line":103},[100,167353,678],{"class":471},[100,167355,150614],{"class":106},[100,167357,150617],{"class":258},[100,167359,167360,167362,167364,167366,167368,167370,167372,167374,167376,167378,167380,167382,167384],{"class":102,"line":188},[100,167361,702],{"class":117},[100,167363,713],{"class":258},[100,167365,1830],{"class":471},[100,167367,150628],{"class":110},[100,167369,2662],{"class":117},[100,167371,81364],{"class":258},[100,167373,2712],{"class":117},[100,167375,150637],{"class":110},[100,167377,2662],{"class":117},[100,167379,71775],{"class":258},[100,167381,2712],{"class":117},[100,167383,150646],{"class":110},[100,167385,809],{"class":258},[100,167387,167388],{"class":102,"line":199},[100,167389,570],{"emptyLinePlaceholder":569},[100,167391,167392],{"class":102,"line":532},[100,167393,570],{"emptyLinePlaceholder":569},[100,167395,167396,167399,167401,167403,167405],{"class":102,"line":577},[100,167397,167398],{"class":258},"introduce(",[100,167400,151130],{"class":110},[100,167402,14017],{"class":258},[100,167404,2417],{"class":117},[100,167406,809],{"class":258},[19,167408,167409],{},"顺序错了就会得到错误含义：",[73,167411,167413],{"className":249,"code":167412,"language":251,"meta":79,"style":79},"introduce(18, \"小明\")\n",[32,167414,167415],{"__ignoreMap":79},[100,167416,167417,167419,167421,167423,167425],{"class":102,"line":103},[100,167418,167398],{"class":258},[100,167420,2417],{"class":117},[100,167422,14017],{"class":258},[100,167424,151130],{"class":110},[100,167426,809],{"class":258},[14,167428,167430],{"id":167429},"_73-关键字参数","7.3 关键字参数",[19,167432,167433],{},"关键字参数按参数名传递。",[73,167435,167437],{"className":249,"code":167436,"language":251,"meta":79,"style":79},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[32,167438,167439,167459],{"__ignoreMap":79},[100,167440,167441,167443,167445,167447,167449,167451,167453,167455,167457],{"class":102,"line":103},[100,167442,167398],{"class":258},[100,167444,81364],{"class":6812},[100,167446,472],{"class":471},[100,167448,151130],{"class":110},[100,167450,14017],{"class":258},[100,167452,71775],{"class":6812},[100,167454,472],{"class":471},[100,167456,2417],{"class":117},[100,167458,809],{"class":258},[100,167460,167461,167463,167465,167467,167469,167471,167473,167475,167477],{"class":102,"line":188},[100,167462,167398],{"class":258},[100,167464,71775],{"class":6812},[100,167466,472],{"class":471},[100,167468,2417],{"class":117},[100,167470,14017],{"class":258},[100,167472,81364],{"class":6812},[100,167474,472],{"class":471},[100,167476,151130],{"class":110},[100,167478,809],{"class":258},[19,167480,119176],{},[26,167482,167483,167486],{},[29,167484,167485],{},"顺序不容易错。",[29,167487,167488],{},"调用时可读性更强。",[14,167490,167492],{"id":167491},"_74-默认参数","7.4 默认参数",[19,167494,167495],{},"默认参数给参数设置默认值。",[73,167497,167499],{"className":249,"code":167498,"language":251,"meta":79,"style":79},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[32,167500,167501,167517,167547,167551,167555,167565],{"__ignoreMap":79},[100,167502,167503,167505,167507,167510,167512,167515],{"class":102,"line":103},[100,167504,678],{"class":471},[100,167506,123335],{"class":106},[100,167508,167509],{"class":258},"(host, port",[100,167511,472],{"class":471},[100,167513,167514],{"class":117},"3306",[100,167516,865],{"class":258},[100,167518,167519,167521,167523,167525,167528,167530,167532,167534,167536,167538,167541,167543,167545],{"class":102,"line":188},[100,167520,702],{"class":117},[100,167522,713],{"class":258},[100,167524,1830],{"class":471},[100,167526,167527],{"class":110},"\"连接",[100,167529,2662],{"class":117},[100,167531,28967],{"class":258},[100,167533,2712],{"class":117},[100,167535,2625],{"class":110},[100,167537,2662],{"class":117},[100,167539,167540],{"class":258},"port",[100,167542,2712],{"class":117},[100,167544,2019],{"class":110},[100,167546,809],{"class":258},[100,167548,167549],{"class":102,"line":199},[100,167550,570],{"emptyLinePlaceholder":569},[100,167552,167553],{"class":102,"line":532},[100,167554,570],{"emptyLinePlaceholder":569},[100,167556,167557,167560,167563],{"class":102,"line":577},[100,167558,167559],{"class":258},"connect(",[100,167561,167562],{"class":110},"\"localhost\"",[100,167564,809],{"class":258},[100,167566,167567,167569,167571,167573,167576],{"class":102,"line":589},[100,167568,167559],{"class":258},[100,167570,167562],{"class":110},[100,167572,14017],{"class":258},[100,167574,167575],{"class":117},"6379",[100,167577,809],{"class":258},[19,167579,167580],{},"注意：默认参数必须放在非默认参数后面。",[19,167582,167583],{},"错误：",[73,167585,167587],{"className":249,"code":167586,"language":251,"meta":79,"style":79},"def connect(port=3306, host):\n    pass\n",[32,167588,167589,167605],{"__ignoreMap":79},[100,167590,167591,167593,167595,167598,167600,167602],{"class":102,"line":103},[100,167592,678],{"class":471},[100,167594,123335],{"class":106},[100,167596,167597],{"class":258},"(port",[100,167599,472],{"class":471},[100,167601,167514],{"class":117},[100,167603,167604],{"class":258},", host):\n",[100,167606,167607],{"class":102,"line":188},[100,167608,150779],{"class":471},[19,167610,167611],{},"正确：",[73,167613,167615],{"className":249,"code":167614,"language":251,"meta":79,"style":79},"def connect(host, port=3306):\n    pass\n",[32,167616,167617,167631],{"__ignoreMap":79},[100,167618,167619,167621,167623,167625,167627,167629],{"class":102,"line":103},[100,167620,678],{"class":471},[100,167622,123335],{"class":106},[100,167624,167509],{"class":258},[100,167626,472],{"class":471},[100,167628,167514],{"class":117},[100,167630,865],{"class":258},[100,167632,167633],{"class":102,"line":188},[100,167634,150779],{"class":471},[14,167636,167638],{"id":167637},"_75-默认参数的坑","7.5 默认参数的坑",[19,167640,167641],{},"不要使用可变对象作为默认参数。",[19,167643,158865],{},[73,167645,167647],{"className":249,"code":167646,"language":251,"meta":79,"style":79},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[32,167648,167649,167664,167669,167676,167680,167684,167695],{"__ignoreMap":79},[100,167650,167651,167653,167656,167659,167661],{"class":102,"line":103},[100,167652,678],{"class":471},[100,167654,167655],{"class":106}," add_item",[100,167657,167658],{"class":258},"(item, items",[100,167660,472],{"class":471},[100,167662,167663],{"class":258},"[]):\n",[100,167665,167666],{"class":102,"line":188},[100,167667,167668],{"class":258},"    items.append(item)\n",[100,167670,167671,167673],{"class":102,"line":199},[100,167672,5689],{"class":471},[100,167674,167675],{"class":258}," items\n",[100,167677,167678],{"class":102,"line":532},[100,167679,570],{"emptyLinePlaceholder":569},[100,167681,167682],{"class":102,"line":577},[100,167683,570],{"emptyLinePlaceholder":569},[100,167685,167686,167688,167691,167693],{"class":102,"line":589},[100,167687,1195],{"class":117},[100,167689,167690],{"class":258},"(add_item(",[100,167692,166567],{"class":110},[100,167694,751],{"class":258},[100,167696,167697,167699,167701,167704],{"class":102,"line":595},[100,167698,1195],{"class":117},[100,167700,167690],{"class":258},[100,167702,167703],{"class":110},"\"b\"",[100,167705,751],{"class":258},[19,167707,167708],{},"第二次调用会复用第一次的列表。",[19,167710,157130],{},[73,167712,167714],{"className":249,"code":167713,"language":251,"meta":79,"style":79},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[32,167715,167716,167730,167743,167752,167756],{"__ignoreMap":79},[100,167717,167718,167720,167722,167724,167726,167728],{"class":102,"line":103},[100,167719,678],{"class":471},[100,167721,167655],{"class":106},[100,167723,167658],{"class":258},[100,167725,472],{"class":471},[100,167727,693],{"class":117},[100,167729,865],{"class":258},[100,167731,167732,167734,167737,167739,167741],{"class":102,"line":188},[100,167733,4702],{"class":471},[100,167735,167736],{"class":258}," items ",[100,167738,40481],{"class":471},[100,167740,40487],{"class":117},[100,167742,696],{"class":258},[100,167744,167745,167748,167750],{"class":102,"line":199},[100,167746,167747],{"class":258},"        items ",[100,167749,472],{"class":471},[100,167751,53392],{"class":258},[100,167753,167754],{"class":102,"line":532},[100,167755,167668],{"class":258},[100,167757,167758,167760],{"class":102,"line":577},[100,167759,5689],{"class":471},[100,167761,167675],{"class":258},[14,167763,167765],{"id":167764},"_76-不定长参数","7.6 不定长参数",[305,167767,167769],{"id":167768},"_761-args","7.6.1 *args",[19,167771,167772,167775],{},[32,167773,167774],{},"*args"," 接收任意数量的位置参数，得到元组。",[73,167777,167779],{"className":249,"code":167778,"language":251,"meta":79,"style":79},"def add(*args):\n    total = 0\n    for num in args:\n        total += num\n    return total\n\n\nprint(add(1, 2, 3))\nprint(add(1, 2, 3, 4, 5))\n",[32,167780,167781,167794,167802,167813,167822,167828,167832,167836,167855],{"__ignoreMap":79},[100,167782,167783,167785,167787,167789,167791],{"class":102,"line":103},[100,167784,678],{"class":471},[100,167786,6805],{"class":106},[100,167788,713],{"class":258},[100,167790,2222],{"class":471},[100,167792,167793],{"class":258},"args):\n",[100,167795,167796,167798,167800],{"class":102,"line":188},[100,167797,160549],{"class":258},[100,167799,472],{"class":471},[100,167801,48887],{"class":117},[100,167803,167804,167806,167808,167810],{"class":102,"line":199},[100,167805,848],{"class":471},[100,167807,157422],{"class":258},[100,167809,854],{"class":471},[100,167811,167812],{"class":258}," args:\n",[100,167814,167815,167817,167819],{"class":102,"line":532},[100,167816,161224],{"class":258},[100,167818,11062],{"class":471},[100,167820,167821],{"class":258}," num\n",[100,167823,167824,167826],{"class":102,"line":577},[100,167825,5689],{"class":471},[100,167827,163529],{"class":258},[100,167829,167830],{"class":102,"line":589},[100,167831,570],{"emptyLinePlaceholder":569},[100,167833,167834],{"class":102,"line":595},[100,167835,570],{"emptyLinePlaceholder":569},[100,167837,167838,167840,167843,167845,167847,167849,167851,167853],{"class":102,"line":601},[100,167839,1195],{"class":117},[100,167841,167842],{"class":258},"(add(",[100,167844,1985],{"class":117},[100,167846,14017],{"class":258},[100,167848,465],{"class":117},[100,167850,14017],{"class":258},[100,167852,1849],{"class":117},[100,167854,751],{"class":258},[100,167856,167857,167859,167861,167863,167865,167867,167869,167871,167873,167875,167877,167879],{"class":102,"line":606},[100,167858,1195],{"class":117},[100,167860,167842],{"class":258},[100,167862,1985],{"class":117},[100,167864,14017],{"class":258},[100,167866,465],{"class":117},[100,167868,14017],{"class":258},[100,167870,1849],{"class":117},[100,167872,14017],{"class":258},[100,167874,748],{"class":117},[100,167876,14017],{"class":258},[100,167878,2086],{"class":117},[100,167880,751],{"class":258},[305,167882,167884],{"id":167883},"_762-kwargs","7.6.2 **kwargs",[19,167886,167887,167890],{},[32,167888,167889],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[73,167892,167894],{"className":249,"code":167893,"language":251,"meta":79,"style":79},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[32,167895,167896,167909,167920,167926,167930,167934],{"__ignoreMap":79},[100,167897,167898,167900,167902,167904,167906],{"class":102,"line":103},[100,167899,678],{"class":471},[100,167901,163187],{"class":106},[100,167903,713],{"class":258},[100,167905,12243],{"class":471},[100,167907,167908],{"class":258},"kwargs):\n",[100,167910,167911,167913,167915,167917],{"class":102,"line":188},[100,167912,848],{"class":471},[100,167914,166027],{"class":258},[100,167916,854],{"class":471},[100,167918,167919],{"class":258}," kwargs.items():\n",[100,167921,167922,167924],{"class":102,"line":199},[100,167923,34007],{"class":117},[100,167925,166039],{"class":258},[100,167927,167928],{"class":102,"line":532},[100,167929,570],{"emptyLinePlaceholder":569},[100,167931,167932],{"class":102,"line":577},[100,167933,570],{"emptyLinePlaceholder":569},[100,167935,167936,167938,167940,167942,167944,167946,167948,167950,167952,167954,167956,167958,167960],{"class":102,"line":589},[100,167937,163252],{"class":258},[100,167939,81364],{"class":6812},[100,167941,472],{"class":471},[100,167943,151130],{"class":110},[100,167945,14017],{"class":258},[100,167947,71775],{"class":6812},[100,167949,472],{"class":471},[100,167951,2417],{"class":117},[100,167953,14017],{"class":258},[100,167955,71826],{"class":6812},[100,167957,472],{"class":471},[100,167959,70823],{"class":110},[100,167961,809],{"class":258},[14,167963,167965],{"id":167964},"_77-参数解包","7.7 参数解包",[19,167967,167968],{},"列表或元组解包为位置参数：",[73,167970,167972],{"className":249,"code":167971,"language":251,"meta":79,"style":79},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[32,167973,167974,167983,167998,168002,168006,168026],{"__ignoreMap":79},[100,167975,167976,167978,167980],{"class":102,"line":103},[100,167977,678],{"class":471},[100,167979,6805],{"class":106},[100,167981,167982],{"class":258},"(a, b, c):\n",[100,167984,167985,167987,167989,167991,167993,167995],{"class":102,"line":188},[100,167986,5689],{"class":471},[100,167988,12451],{"class":258},[100,167990,2248],{"class":471},[100,167992,12464],{"class":258},[100,167994,2248],{"class":471},[100,167996,167997],{"class":258}," c\n",[100,167999,168000],{"class":102,"line":199},[100,168001,570],{"emptyLinePlaceholder":569},[100,168003,168004],{"class":102,"line":532},[100,168005,570],{"emptyLinePlaceholder":569},[100,168007,168008,168010,168012,168014,168016,168018,168020,168022,168024],{"class":102,"line":577},[100,168009,165342],{"class":258},[100,168011,472],{"class":471},[100,168013,53780],{"class":258},[100,168015,1985],{"class":117},[100,168017,14017],{"class":258},[100,168019,465],{"class":117},[100,168021,14017],{"class":258},[100,168023,1849],{"class":117},[100,168025,34802],{"class":258},[100,168027,168028,168030,168032,168034],{"class":102,"line":589},[100,168029,1195],{"class":117},[100,168031,167842],{"class":258},[100,168033,2222],{"class":471},[100,168035,168036],{"class":258},"nums))\n",[19,168038,168039],{},"字典解包为关键字参数：",[73,168041,168043],{"className":249,"code":168042,"language":251,"meta":79,"style":79},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[32,168044,168045,168053,168079,168083,168087,168111],{"__ignoreMap":79},[100,168046,168047,168049,168051],{"class":102,"line":103},[100,168048,678],{"class":471},[100,168050,150614],{"class":106},[100,168052,150617],{"class":258},[100,168054,168055,168057,168059,168061,168063,168065,168067,168069,168071,168073,168075,168077],{"class":102,"line":188},[100,168056,702],{"class":117},[100,168058,713],{"class":258},[100,168060,1830],{"class":471},[100,168062,2019],{"class":110},[100,168064,2662],{"class":117},[100,168066,81364],{"class":258},[100,168068,2712],{"class":117},[100,168070,6046],{"class":117},[100,168072,71775],{"class":258},[100,168074,2712],{"class":117},[100,168076,2019],{"class":110},[100,168078,809],{"class":258},[100,168080,168081],{"class":102,"line":199},[100,168082,570],{"emptyLinePlaceholder":569},[100,168084,168085],{"class":102,"line":532},[100,168086,570],{"emptyLinePlaceholder":569},[100,168088,168089,168091,168093,168095,168097,168099,168101,168103,168105,168107,168109],{"class":102,"line":577},[100,168090,117556],{"class":258},[100,168092,472],{"class":471},[100,168094,6046],{"class":258},[100,168096,64233],{"class":110},[100,168098,52991],{"class":258},[100,168100,151130],{"class":110},[100,168102,14017],{"class":258},[100,168104,70678],{"class":110},[100,168106,52991],{"class":258},[100,168108,2417],{"class":117},[100,168110,3197],{"class":258},[100,168112,168113,168115,168117],{"class":102,"line":589},[100,168114,167398],{"class":258},[100,168116,12243],{"class":471},[100,168118,168119],{"class":258},"info)\n",[14,168121,168123],{"id":168122},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,168125,168126,168129],{},[32,168127,168128],{},"lambda"," 用于定义简单匿名函数。",[73,168131,168133],{"className":249,"code":168132,"language":251,"meta":79,"style":79},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[32,168134,168135,168152],{"__ignoreMap":79},[100,168136,168137,168140,168142,168145,168148,168150],{"class":102,"line":103},[100,168138,168139],{"class":258},"add ",[100,168141,472],{"class":471},[100,168143,168144],{"class":471}," lambda",[100,168146,168147],{"class":258}," a, b: a ",[100,168149,2248],{"class":471},[100,168151,152346],{"class":258},[100,168153,168154,168156,168158,168160,168162,168164],{"class":102,"line":188},[100,168155,1195],{"class":117},[100,168157,167842],{"class":258},[100,168159,1985],{"class":117},[100,168161,14017],{"class":258},[100,168163,465],{"class":117},[100,168165,751],{"class":258},[19,168167,168168],{},"常和排序、过滤等函数一起使用。",[19,168170,168171],{},"按分数排序：",[73,168173,168175],{"className":249,"code":168174,"language":251,"meta":79,"style":79},"students = [\n    {\"name\": \"小明\", \"score\": 95},\n    {\"name\": \"小红\", \"score\": 88},\n    {\"name\": \"小刚\", \"score\": 72},\n]\n\nstudents.sort(key=lambda item: item[\"score\"], reverse=True)\nprint(students)\n",[32,168176,168177,168185,168205,168225,168245,168249,168253,168276],{"__ignoreMap":79},[100,168178,168179,168181,168183],{"class":102,"line":103},[100,168180,160958],{"class":258},[100,168182,472],{"class":471},[100,168184,57001],{"class":258},[100,168186,168187,168189,168191,168193,168195,168197,168199,168201,168203],{"class":102,"line":188},[100,168188,149627],{"class":258},[100,168190,64233],{"class":110},[100,168192,52991],{"class":258},[100,168194,151130],{"class":110},[100,168196,14017],{"class":258},[100,168198,152714],{"class":110},[100,168200,52991],{"class":258},[100,168202,2755],{"class":117},[100,168204,6528],{"class":258},[100,168206,168207,168209,168211,168213,168215,168217,168219,168221,168223],{"class":102,"line":199},[100,168208,149627],{"class":258},[100,168210,64233],{"class":110},[100,168212,52991],{"class":258},[100,168214,152178],{"class":110},[100,168216,14017],{"class":258},[100,168218,152714],{"class":110},[100,168220,52991],{"class":258},[100,168222,2577],{"class":117},[100,168224,6528],{"class":258},[100,168226,168227,168229,168231,168233,168235,168237,168239,168241,168243],{"class":102,"line":532},[100,168228,149627],{"class":258},[100,168230,64233],{"class":110},[100,168232,52991],{"class":258},[100,168234,160973],{"class":110},[100,168236,14017],{"class":258},[100,168238,152714],{"class":110},[100,168240,52991],{"class":258},[100,168242,2173],{"class":117},[100,168244,6528],{"class":258},[100,168246,168247],{"class":102,"line":577},[100,168248,34802],{"class":258},[100,168250,168251],{"class":102,"line":589},[100,168252,570],{"emptyLinePlaceholder":569},[100,168254,168255,168258,168260,168262,168264,168266,168268,168270,168272,168274],{"class":102,"line":595},[100,168256,168257],{"class":258},"students.sort(",[100,168259,155188],{"class":6812},[100,168261,155191],{"class":471},[100,168263,155194],{"class":258},[100,168265,152714],{"class":110},[100,168267,113444],{"class":258},[100,168269,164770],{"class":6812},[100,168271,472],{"class":471},[100,168273,33034],{"class":117},[100,168275,809],{"class":258},[100,168277,168278,168280],{"class":102,"line":601},[100,168279,1195],{"class":117},[100,168281,166237],{"class":258},[19,168283,168284,168285,168287],{},"如果逻辑复杂，不要硬写 ",[32,168286,168128],{},"，定义普通函数更清晰。",[14,168289,168291],{"id":168290},"_79-函数作为参数","7.9 函数作为参数",[19,168293,168294],{},"函数可以作为参数传给另一个函数。",[73,168296,168298],{"className":249,"code":168297,"language":251,"meta":79,"style":79},"def add(a, b):\n    return a + b\n\n\ndef calculate(a, b, func):\n    return func(a, b)\n\n\nprint(calculate(10, 20, add))\n",[32,168299,168300,168308,168318,168322,168326,168336,168343,168347,168351],{"__ignoreMap":79},[100,168301,168302,168304,168306],{"class":102,"line":103},[100,168303,678],{"class":471},[100,168305,6805],{"class":106},[100,168307,152335],{"class":258},[100,168309,168310,168312,168314,168316],{"class":102,"line":188},[100,168311,5689],{"class":471},[100,168313,12451],{"class":258},[100,168315,2248],{"class":471},[100,168317,152346],{"class":258},[100,168319,168320],{"class":102,"line":199},[100,168321,570],{"emptyLinePlaceholder":569},[100,168323,168324],{"class":102,"line":532},[100,168325,570],{"emptyLinePlaceholder":569},[100,168327,168328,168330,168333],{"class":102,"line":577},[100,168329,678],{"class":471},[100,168331,168332],{"class":106}," calculate",[100,168334,168335],{"class":258},"(a, b, func):\n",[100,168337,168338,168340],{"class":102,"line":589},[100,168339,5689],{"class":471},[100,168341,168342],{"class":258}," func(a, b)\n",[100,168344,168345],{"class":102,"line":595},[100,168346,570],{"emptyLinePlaceholder":569},[100,168348,168349],{"class":102,"line":601},[100,168350,570],{"emptyLinePlaceholder":569},[100,168352,168353,168355,168358,168360,168362,168364],{"class":102,"line":606},[100,168354,1195],{"class":117},[100,168356,168357],{"class":258},"(calculate(",[100,168359,2213],{"class":117},[100,168361,14017],{"class":258},[100,168363,2466],{"class":117},[100,168365,168366],{"class":258},", add))\n",[19,168368,168369],{},"这种思想在排序、回调、框架中经常出现。",[14,168371,168373],{"id":168372},"_710-mapfiltersorted","7.10 map、filter、sorted",[305,168375,168377],{"id":168376},"_7101-map","7.10.1 map",[19,168379,168380,168382],{},[32,168381,75598],{}," 对每个元素执行函数。",[73,168384,168386],{"className":249,"code":168385,"language":251,"meta":79,"style":79},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[32,168387,168388,168412,168435],{"__ignoreMap":79},[100,168389,168390,168392,168394,168396,168398,168400,168402,168404,168406,168408,168410],{"class":102,"line":103},[100,168391,165342],{"class":258},[100,168393,472],{"class":471},[100,168395,53780],{"class":258},[100,168397,1985],{"class":117},[100,168399,14017],{"class":258},[100,168401,465],{"class":117},[100,168403,14017],{"class":258},[100,168405,1849],{"class":117},[100,168407,14017],{"class":258},[100,168409,748],{"class":117},[100,168411,34802],{"class":258},[100,168413,168414,168416,168418,168421,168423,168425,168428,168430,168432],{"class":102,"line":188},[100,168415,162548],{"class":258},[100,168417,472],{"class":471},[100,168419,168420],{"class":117}," map",[100,168422,713],{"class":258},[100,168424,168128],{"class":471},[100,168426,168427],{"class":258}," x: x ",[100,168429,2222],{"class":471},[100,168431,16336],{"class":117},[100,168433,168434],{"class":258},", nums)\n",[100,168436,168437,168439,168441,168443],{"class":102,"line":199},[100,168438,1195],{"class":117},[100,168440,713],{"class":258},[100,168442,155312],{"class":117},[100,168444,167310],{"class":258},[305,168446,168448],{"id":168447},"_7102-filter","7.10.2 filter",[19,168450,168451,168453],{},[32,168452,81605],{}," 保留满足条件的元素。",[73,168455,168457],{"className":249,"code":168456,"language":251,"meta":79,"style":79},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[32,168458,168459,168487,168512],{"__ignoreMap":79},[100,168460,168461,168463,168465,168467,168469,168471,168473,168475,168477,168479,168481,168483,168485],{"class":102,"line":103},[100,168462,165342],{"class":258},[100,168464,472],{"class":471},[100,168466,53780],{"class":258},[100,168468,1985],{"class":117},[100,168470,14017],{"class":258},[100,168472,465],{"class":117},[100,168474,14017],{"class":258},[100,168476,1849],{"class":117},[100,168478,14017],{"class":258},[100,168480,748],{"class":117},[100,168482,14017],{"class":258},[100,168484,2086],{"class":117},[100,168486,34802],{"class":258},[100,168488,168489,168491,168493,168496,168498,168500,168502,168504,168506,168508,168510],{"class":102,"line":188},[100,168490,162548],{"class":258},[100,168492,472],{"class":471},[100,168494,168495],{"class":117}," filter",[100,168497,713],{"class":258},[100,168499,168128],{"class":471},[100,168501,168427],{"class":258},[100,168503,2095],{"class":471},[100,168505,16336],{"class":117},[100,168507,964],{"class":471},[100,168509,5692],{"class":117},[100,168511,168434],{"class":258},[100,168513,168514,168516,168518,168520],{"class":102,"line":199},[100,168515,1195],{"class":117},[100,168517,713],{"class":258},[100,168519,155312],{"class":117},[100,168521,167310],{"class":258},[305,168523,168525],{"id":168524},"_7103-sorted","7.10.3 sorted",[19,168527,168528,168530],{},[32,168529,166478],{}," 返回排序后的新列表。",[73,168532,168534],{"className":249,"code":168533,"language":251,"meta":79,"style":79},"students = [\n    {\"name\": \"小明\", \"score\": 95},\n    {\"name\": \"小红\", \"score\": 88},\n    {\"name\": \"小刚\", \"score\": 72},\n]\n\nresult = sorted(students, key=lambda item: item[\"score\"], reverse=True)\nprint(result)\n",[32,168535,168536,168544,168564,168584,168604,168608,168612,168641],{"__ignoreMap":79},[100,168537,168538,168540,168542],{"class":102,"line":103},[100,168539,160958],{"class":258},[100,168541,472],{"class":471},[100,168543,57001],{"class":258},[100,168545,168546,168548,168550,168552,168554,168556,168558,168560,168562],{"class":102,"line":188},[100,168547,149627],{"class":258},[100,168549,64233],{"class":110},[100,168551,52991],{"class":258},[100,168553,151130],{"class":110},[100,168555,14017],{"class":258},[100,168557,152714],{"class":110},[100,168559,52991],{"class":258},[100,168561,2755],{"class":117},[100,168563,6528],{"class":258},[100,168565,168566,168568,168570,168572,168574,168576,168578,168580,168582],{"class":102,"line":199},[100,168567,149627],{"class":258},[100,168569,64233],{"class":110},[100,168571,52991],{"class":258},[100,168573,152178],{"class":110},[100,168575,14017],{"class":258},[100,168577,152714],{"class":110},[100,168579,52991],{"class":258},[100,168581,2577],{"class":117},[100,168583,6528],{"class":258},[100,168585,168586,168588,168590,168592,168594,168596,168598,168600,168602],{"class":102,"line":532},[100,168587,149627],{"class":258},[100,168589,64233],{"class":110},[100,168591,52991],{"class":258},[100,168593,160973],{"class":110},[100,168595,14017],{"class":258},[100,168597,152714],{"class":110},[100,168599,52991],{"class":258},[100,168601,2173],{"class":117},[100,168603,6528],{"class":258},[100,168605,168606],{"class":102,"line":577},[100,168607,34802],{"class":258},[100,168609,168610],{"class":102,"line":589},[100,168611,570],{"emptyLinePlaceholder":569},[100,168613,168614,168616,168618,168620,168623,168625,168627,168629,168631,168633,168635,168637,168639],{"class":102,"line":595},[100,168615,162548],{"class":258},[100,168617,472],{"class":471},[100,168619,164846],{"class":117},[100,168621,168622],{"class":258},"(students, ",[100,168624,155188],{"class":6812},[100,168626,155191],{"class":471},[100,168628,155194],{"class":258},[100,168630,152714],{"class":110},[100,168632,113444],{"class":258},[100,168634,164770],{"class":6812},[100,168636,472],{"class":471},[100,168638,33034],{"class":117},[100,168640,809],{"class":258},[100,168642,168643,168645],{"class":102,"line":601},[100,168644,1195],{"class":117},[100,168646,78139],{"class":258},[14,168648,168650],{"id":168649},"_711-闭包入门","7.11 闭包入门",[19,168652,168653],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[73,168655,168657],{"className":249,"code":168656,"language":251,"meta":79,"style":79},"def outer(base):\n    def inner(num):\n        return base + num\n\n    return inner\n\n\nadd_10 = outer(10)\nprint(add_10(5))\n",[32,168658,168659,168669,168679,168690,168694,168701,168705,168709,168723],{"__ignoreMap":79},[100,168660,168661,168663,168666],{"class":102,"line":103},[100,168662,678],{"class":471},[100,168664,168665],{"class":106}," outer",[100,168667,168668],{"class":258},"(base):\n",[100,168670,168671,168673,168676],{"class":102,"line":188},[100,168672,32364],{"class":471},[100,168674,168675],{"class":106}," inner",[100,168677,168678],{"class":258},"(num):\n",[100,168680,168681,168683,168686,168688],{"class":102,"line":199},[100,168682,16333],{"class":471},[100,168684,168685],{"class":258}," base ",[100,168687,2248],{"class":471},[100,168689,167821],{"class":258},[100,168691,168692],{"class":102,"line":532},[100,168693,570],{"emptyLinePlaceholder":569},[100,168695,168696,168698],{"class":102,"line":577},[100,168697,5689],{"class":471},[100,168699,168700],{"class":258}," inner\n",[100,168702,168703],{"class":102,"line":589},[100,168704,570],{"emptyLinePlaceholder":569},[100,168706,168707],{"class":102,"line":595},[100,168708,570],{"emptyLinePlaceholder":569},[100,168710,168711,168714,168716,168719,168721],{"class":102,"line":601},[100,168712,168713],{"class":258},"add_10 ",[100,168715,472],{"class":471},[100,168717,168718],{"class":258}," outer(",[100,168720,2213],{"class":117},[100,168722,809],{"class":258},[100,168724,168725,168727,168730,168732],{"class":102,"line":606},[100,168726,1195],{"class":117},[100,168728,168729],{"class":258},"(add_10(",[100,168731,2086],{"class":117},[100,168733,751],{"class":258},[19,168735,168736],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,168738,168740],{"id":168739},"_712-装饰器入门","7.12 装饰器入门",[19,168742,168743],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[73,168745,168747],{"className":249,"code":168746,"language":251,"meta":79,"style":79},"def log(func):\n    def wrapper():\n        print(\"函数开始执行\")\n        func()\n        print(\"函数执行结束\")\n\n    return wrapper\n\n\n@log\ndef say_hello():\n    print(\"hello\")\n\n\nsay_hello()\n",[32,168748,168749,168758,168767,168778,168783,168794,168798,168805,168809,168813,168818,168826,168836,168840,168844],{"__ignoreMap":79},[100,168750,168751,168753,168755],{"class":102,"line":103},[100,168752,678],{"class":471},[100,168754,88743],{"class":106},[100,168756,168757],{"class":258},"(func):\n",[100,168759,168760,168762,168765],{"class":102,"line":188},[100,168761,32364],{"class":471},[100,168763,168764],{"class":106}," wrapper",[100,168766,33510],{"class":258},[100,168768,168769,168771,168773,168776],{"class":102,"line":199},[100,168770,34007],{"class":117},[100,168772,713],{"class":258},[100,168774,168775],{"class":110},"\"函数开始执行\"",[100,168777,809],{"class":258},[100,168779,168780],{"class":102,"line":532},[100,168781,168782],{"class":258},"        func()\n",[100,168784,168785,168787,168789,168792],{"class":102,"line":577},[100,168786,34007],{"class":117},[100,168788,713],{"class":258},[100,168790,168791],{"class":110},"\"函数执行结束\"",[100,168793,809],{"class":258},[100,168795,168796],{"class":102,"line":589},[100,168797,570],{"emptyLinePlaceholder":569},[100,168799,168800,168802],{"class":102,"line":595},[100,168801,5689],{"class":471},[100,168803,168804],{"class":258}," wrapper\n",[100,168806,168807],{"class":102,"line":601},[100,168808,570],{"emptyLinePlaceholder":569},[100,168810,168811],{"class":102,"line":606},[100,168812,570],{"emptyLinePlaceholder":569},[100,168814,168815],{"class":102,"line":612},[100,168816,168817],{"class":106},"@log\n",[100,168819,168820,168822,168824],{"class":102,"line":618},[100,168821,678],{"class":471},[100,168823,162238],{"class":106},[100,168825,33510],{"class":258},[100,168827,168828,168830,168832,168834],{"class":102,"line":623},[100,168829,702],{"class":117},[100,168831,713],{"class":258},[100,168833,7440],{"class":110},[100,168835,809],{"class":258},[100,168837,168838],{"class":102,"line":629},[100,168839,570],{"emptyLinePlaceholder":569},[100,168841,168842],{"class":102,"line":635},[100,168843,570],{"emptyLinePlaceholder":569},[100,168845,168846],{"class":102,"line":641},[100,168847,162273],{"class":258},[19,168849,159516],{},[73,168851,168853],{"className":249,"code":168852,"language":251,"meta":79,"style":79},"say_hello = log(say_hello)\n",[32,168854,168855],{"__ignoreMap":79},[100,168856,168857,168860,168862],{"class":102,"line":103},[100,168858,168859],{"class":258},"say_hello ",[100,168861,472],{"class":471},[100,168863,168864],{"class":258}," log(say_hello)\n",[19,168866,168867],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,168869,168871],{"id":168870},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[73,168873,168875],{"className":249,"code":168874,"language":251,"meta":79,"style":79},"def log(func):\n    def wrapper(*args, **kwargs):\n        print(\"函数开始执行\")\n        result = func(*args, **kwargs)\n        print(\"函数执行结束\")\n        return result\n\n    return wrapper\n\n\n@log\ndef add(a, b):\n    return a + b\n\n\nprint(add(10, 20))\n",[32,168876,168877,168885,168902,168912,168931,168941,168948,168952,168958,168962,168966,168970,168978,168988,168992,168996],{"__ignoreMap":79},[100,168878,168879,168881,168883],{"class":102,"line":103},[100,168880,678],{"class":471},[100,168882,88743],{"class":106},[100,168884,168757],{"class":258},[100,168886,168887,168889,168891,168893,168895,168898,168900],{"class":102,"line":188},[100,168888,32364],{"class":471},[100,168890,168764],{"class":106},[100,168892,713],{"class":258},[100,168894,2222],{"class":471},[100,168896,168897],{"class":258},"args, ",[100,168899,12243],{"class":471},[100,168901,167908],{"class":258},[100,168903,168904,168906,168908,168910],{"class":102,"line":199},[100,168905,34007],{"class":117},[100,168907,713],{"class":258},[100,168909,168775],{"class":110},[100,168911,809],{"class":258},[100,168913,168914,168917,168919,168922,168924,168926,168928],{"class":102,"line":532},[100,168915,168916],{"class":258},"        result ",[100,168918,472],{"class":471},[100,168920,168921],{"class":258}," func(",[100,168923,2222],{"class":471},[100,168925,168897],{"class":258},[100,168927,12243],{"class":471},[100,168929,168930],{"class":258},"kwargs)\n",[100,168932,168933,168935,168937,168939],{"class":102,"line":577},[100,168934,34007],{"class":117},[100,168936,713],{"class":258},[100,168938,168791],{"class":110},[100,168940,809],{"class":258},[100,168942,168943,168945],{"class":102,"line":589},[100,168944,16333],{"class":471},[100,168946,168947],{"class":258}," result\n",[100,168949,168950],{"class":102,"line":595},[100,168951,570],{"emptyLinePlaceholder":569},[100,168953,168954,168956],{"class":102,"line":601},[100,168955,5689],{"class":471},[100,168957,168804],{"class":258},[100,168959,168960],{"class":102,"line":606},[100,168961,570],{"emptyLinePlaceholder":569},[100,168963,168964],{"class":102,"line":612},[100,168965,570],{"emptyLinePlaceholder":569},[100,168967,168968],{"class":102,"line":618},[100,168969,168817],{"class":106},[100,168971,168972,168974,168976],{"class":102,"line":623},[100,168973,678],{"class":471},[100,168975,6805],{"class":106},[100,168977,152335],{"class":258},[100,168979,168980,168982,168984,168986],{"class":102,"line":629},[100,168981,5689],{"class":471},[100,168983,12451],{"class":258},[100,168985,2248],{"class":471},[100,168987,152346],{"class":258},[100,168989,168990],{"class":102,"line":635},[100,168991,570],{"emptyLinePlaceholder":569},[100,168993,168994],{"class":102,"line":641},[100,168995,570],{"emptyLinePlaceholder":569},[100,168997,168998,169000,169002,169004,169006,169008],{"class":102,"line":647},[100,168999,1195],{"class":117},[100,169001,167842],{"class":258},[100,169003,2213],{"class":117},[100,169005,14017],{"class":258},[100,169007,2466],{"class":117},[100,169009,751],{"class":258},[19,169011,169012,169013,218,169015,169017],{},"这个写法使用 ",[32,169014,167774],{},[32,169016,167889],{}," 接收原函数的所有参数。",[14,169019,169021],{"id":169020},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,169023,124534],{},[26,169025,169026,169029,169032],{},[29,169027,169028],{},"给定一组学生数据。",[29,169030,169031],{},"封装函数，根据传入规则筛选学生。",[29,169033,169034],{},"筛选及格、优秀、未成年学生。",[19,169036,11617],{},[73,169038,169040],{"className":249,"code":169039,"language":251,"meta":79,"style":79},"students = [\n    {\"name\": \"小明\", \"age\": 18, \"score\": 95},\n    {\"name\": \"小红\", \"age\": 17, \"score\": 88},\n    {\"name\": \"小刚\", \"age\": 19, \"score\": 59},\n]\n\n\ndef filter_students(students, condition):\n    result = []\n    for student in students:\n        if condition(student):\n            result.append(student)\n    return result\n\n\npassed = filter_students(students, lambda s: s[\"score\"] >= 60)\nexcellent = filter_students(students, lambda s: s[\"score\"] >= 90)\nunder_age = filter_students(students, lambda s: s[\"age\"] \u003C 18)\n\nprint(passed)\nprint(excellent)\nprint(under_age)\n",[32,169041,169042,169050,169078,169106,169134,169138,169142,169146,169156,169164,169174,169181,169186,169192,169196,169200,169224,169247,169270,169274,169281,169288],{"__ignoreMap":79},[100,169043,169044,169046,169048],{"class":102,"line":103},[100,169045,160958],{"class":258},[100,169047,472],{"class":471},[100,169049,57001],{"class":258},[100,169051,169052,169054,169056,169058,169060,169062,169064,169066,169068,169070,169072,169074,169076],{"class":102,"line":188},[100,169053,149627],{"class":258},[100,169055,64233],{"class":110},[100,169057,52991],{"class":258},[100,169059,151130],{"class":110},[100,169061,14017],{"class":258},[100,169063,70678],{"class":110},[100,169065,52991],{"class":258},[100,169067,2417],{"class":117},[100,169069,14017],{"class":258},[100,169071,152714],{"class":110},[100,169073,52991],{"class":258},[100,169075,2755],{"class":117},[100,169077,6528],{"class":258},[100,169079,169080,169082,169084,169086,169088,169090,169092,169094,169096,169098,169100,169102,169104],{"class":102,"line":199},[100,169081,149627],{"class":258},[100,169083,64233],{"class":110},[100,169085,52991],{"class":258},[100,169087,152178],{"class":110},[100,169089,14017],{"class":258},[100,169091,70678],{"class":110},[100,169093,52991],{"class":258},[100,169095,2392],{"class":117},[100,169097,14017],{"class":258},[100,169099,152714],{"class":110},[100,169101,52991],{"class":258},[100,169103,2577],{"class":117},[100,169105,6528],{"class":258},[100,169107,169108,169110,169112,169114,169116,169118,169120,169122,169124,169126,169128,169130,169132],{"class":102,"line":532},[100,169109,149627],{"class":258},[100,169111,64233],{"class":110},[100,169113,52991],{"class":258},[100,169115,160973],{"class":110},[100,169117,14017],{"class":258},[100,169119,70678],{"class":110},[100,169121,52991],{"class":258},[100,169123,2441],{"class":117},[100,169125,14017],{"class":258},[100,169127,152714],{"class":110},[100,169129,52991],{"class":258},[100,169131,2648],{"class":117},[100,169133,6528],{"class":258},[100,169135,169136],{"class":102,"line":577},[100,169137,34802],{"class":258},[100,169139,169140],{"class":102,"line":589},[100,169141,570],{"emptyLinePlaceholder":569},[100,169143,169144],{"class":102,"line":595},[100,169145,570],{"emptyLinePlaceholder":569},[100,169147,169148,169150,169153],{"class":102,"line":601},[100,169149,678],{"class":471},[100,169151,169152],{"class":106}," filter_students",[100,169154,169155],{"class":258},"(students, condition):\n",[100,169157,169158,169160,169162],{"class":102,"line":606},[100,169159,162465],{"class":258},[100,169161,472],{"class":471},[100,169163,53392],{"class":258},[100,169165,169166,169168,169170,169172],{"class":102,"line":612},[100,169167,848],{"class":471},[100,169169,153379],{"class":258},[100,169171,854],{"class":471},[100,169173,153384],{"class":258},[100,169175,169176,169178],{"class":102,"line":618},[100,169177,4106],{"class":471},[100,169179,169180],{"class":258}," condition(student):\n",[100,169182,169183],{"class":102,"line":623},[100,169184,169185],{"class":258},"            result.append(student)\n",[100,169187,169188,169190],{"class":102,"line":629},[100,169189,5689],{"class":471},[100,169191,168947],{"class":258},[100,169193,169194],{"class":102,"line":635},[100,169195,570],{"emptyLinePlaceholder":569},[100,169197,169198],{"class":102,"line":641},[100,169199,570],{"emptyLinePlaceholder":569},[100,169201,169202,169204,169206,169209,169211,169214,169216,169218,169220,169222],{"class":102,"line":647},[100,169203,166943],{"class":258},[100,169205,472],{"class":471},[100,169207,169208],{"class":258}," filter_students(students, ",[100,169210,168128],{"class":471},[100,169212,169213],{"class":258}," s: s[",[100,169215,152714],{"class":110},[100,169217,468],{"class":258},[100,169219,3331],{"class":471},[100,169221,159079],{"class":117},[100,169223,809],{"class":258},[100,169225,169226,169229,169231,169233,169235,169237,169239,169241,169243,169245],{"class":102,"line":653},[100,169227,169228],{"class":258},"excellent ",[100,169230,472],{"class":471},[100,169232,169208],{"class":258},[100,169234,168128],{"class":471},[100,169236,169213],{"class":258},[100,169238,152714],{"class":110},[100,169240,468],{"class":258},[100,169242,3331],{"class":471},[100,169244,159030],{"class":117},[100,169246,809],{"class":258},[100,169248,169249,169252,169254,169256,169258,169260,169262,169264,169266,169268],{"class":102,"line":659},[100,169250,169251],{"class":258},"under_age ",[100,169253,472],{"class":471},[100,169255,169208],{"class":258},[100,169257,168128],{"class":471},[100,169259,169213],{"class":258},[100,169261,70678],{"class":110},[100,169263,468],{"class":258},[100,169265,2676],{"class":471},[100,169267,157527],{"class":117},[100,169269,809],{"class":258},[100,169271,169272],{"class":102,"line":665},[100,169273,570],{"emptyLinePlaceholder":569},[100,169275,169276,169278],{"class":102,"line":670},[100,169277,1195],{"class":117},[100,169279,169280],{"class":258},"(passed)\n",[100,169282,169283,169285],{"class":102,"line":675},[100,169284,1195],{"class":117},[100,169286,169287],{"class":258},"(excellent)\n",[100,169289,169290,169292],{"class":102,"line":699},[100,169291,1195],{"class":117},[100,169293,169294],{"class":258},"(under_age)\n",[14,169296,169298],{"id":169297},"_715-易错点","7.15 易错点",[26,169300,169301,169304,169312,169317,169328],{},[29,169302,169303],{},"默认参数不要写可变对象。",[29,169305,169306,169308,169309,169311],{},[32,169307,167774],{}," 是元组，",[32,169310,167889],{}," 是字典。",[29,169313,169314,169316],{},[32,169315,168128],{}," 只适合简单表达式。",[29,169318,169319,218,169321,169323,169324,169327],{},[32,169320,75598],{},[32,169322,81605],{}," 的结果是迭代器，常用 ",[32,169325,169326],{},"list()"," 转换查看。",[29,169329,169330],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,169332,169334],{"id":169333},"_716-本章练习","7.16 本章练习",[26,169336,169337,169344,169350,169355,169360],{},[29,169338,169339,169340,169343],{},"写函数 ",[32,169341,169342],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[29,169345,169339,169346,169349],{},[32,169347,169348],{},"print_user(**kwargs)","，输出用户所有字段。",[29,169351,65,169352,169354],{},[32,169353,168128],{}," 对学生列表按年龄排序。",[29,169356,65,169357,169359],{},[32,169358,81605],{}," 找出成绩不及格的学生。",[29,169361,169362],{},"写一个装饰器，统计函数执行前后的提示信息。",[1677,169364,169365],{},"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":79,"searchDepth":188,"depth":188,"links":169367},[169368,169369,169370,169371,169372,169373,169377,169378,169379,169380,169385,169386,169387,169388,169389,169390],{"id":167226,"depth":188,"text":167227},{"id":167340,"depth":188,"text":167341},{"id":167429,"depth":188,"text":167430},{"id":167491,"depth":188,"text":167492},{"id":167637,"depth":188,"text":167638},{"id":167764,"depth":188,"text":167765,"children":169374},[169375,169376],{"id":167768,"depth":199,"text":167769},{"id":167883,"depth":199,"text":167884},{"id":167964,"depth":188,"text":167965},{"id":168122,"depth":188,"text":168123},{"id":168290,"depth":188,"text":168291},{"id":168372,"depth":188,"text":168373,"children":169381},[169382,169383,169384],{"id":168376,"depth":199,"text":168377},{"id":168447,"depth":199,"text":168448},{"id":168524,"depth":199,"text":168525},{"id":168649,"depth":188,"text":168650},{"id":168739,"depth":188,"text":168740},{"id":168870,"depth":188,"text":168871},{"id":169020,"depth":188,"text":169021},{"id":169297,"depth":188,"text":169298},{"id":169333,"depth":188,"text":169334},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":167218,"description":24958},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":169397,"title":169398,"body":169399,"description":24958,"extension":1708,"meta":171918,"navigation":569,"path":171919,"seo":171920,"stem":171921,"__hash__":171922},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":169400,"toc":171893},[169401,169404,169408,169411,169414,169445,169449,169453,169456,169483,169487,169490,169541,169544,169559,169562,169597,169601,169603,169627,169630,169690,169694,169698,169701,169758,169761,169781,169785,169788,169851,169855,169858,169914,169921,169945,169949,169952,170015,170019,170024,170075,170078,170082,170087,170154,170157,170239,170243,170248,170299,170302,170306,170309,170312,170320,170323,170369,170372,170418,170422,170428,170472,170475,170521,170524,170564,170567,170628,170632,170635,170725,170728,170870,170873,170940,170944,170947,170950,171091,171094,171172,171175,171351,171355,171357,171368,171370,171569,171573,171817,171821,171855,171859,171890],[10,169402,169398],{"id":169403},"_8-文件操作",[14,169405,169407],{"id":169406},"_81-文件操作的意义","8.1 文件操作的意义",[19,169409,169410],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,169412,169413],{},"常见文件类型：",[26,169415,169416,169422,169428,169434,169440],{},[29,169417,169418,169421],{},[32,169419,169420],{},".txt","：普通文本。",[29,169423,169424,169427],{},[32,169425,169426],{},".csv","：表格文本。",[29,169429,169430,169433],{},[32,169431,169432],{},".json","：结构化数据。",[29,169435,169436,169439],{},[32,169437,169438],{},".log","：日志文件。",[29,169441,169442,169444],{},[32,169443,147594],{},"：Python 源代码。",[14,169446,169448],{"id":169447},"_82-路径","8.2 路径",[305,169450,169452],{"id":169451},"_821-相对路径","8.2.1 相对路径",[19,169454,169455],{},"相对当前运行目录：",[73,169457,169459],{"className":249,"code":169458,"language":251,"meta":79,"style":79},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[32,169460,169461],{"__ignoreMap":79},[100,169462,169463,169465,169467,169469,169471,169473,169475,169477,169479,169481],{"class":102,"line":103},[100,169464,88467],{"class":117},[100,169466,713],{"class":258},[100,169468,148038],{"class":110},[100,169470,14017],{"class":258},[100,169472,148043],{"class":110},[100,169474,14017],{"class":258},[100,169476,148048],{"class":6812},[100,169478,472],{"class":471},[100,169480,148053],{"class":110},[100,169482,809],{"class":258},[305,169484,169486],{"id":169485},"_822-绝对路径","8.2.2 绝对路径",[19,169488,169489],{},"从根目录或盘符开始：",[73,169491,169493],{"className":249,"code":169492,"language":251,"meta":79,"style":79},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[32,169494,169495,169518],{"__ignoreMap":79},[100,169496,169497,169499,169501,169504,169506,169508,169510,169512,169514,169516],{"class":102,"line":103},[100,169498,88467],{"class":117},[100,169500,713],{"class":258},[100,169502,169503],{"class":110},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[100,169505,14017],{"class":258},[100,169507,148043],{"class":110},[100,169509,14017],{"class":258},[100,169511,148048],{"class":6812},[100,169513,472],{"class":471},[100,169515,148053],{"class":110},[100,169517,809],{"class":258},[100,169519,169520,169522,169524,169527,169529,169531,169533,169535,169537,169539],{"class":102,"line":188},[100,169521,88467],{"class":117},[100,169523,713],{"class":258},[100,169525,169526],{"class":110},"\"D:\u002Fdata\u002Fdata.txt\"",[100,169528,14017],{"class":258},[100,169530,148043],{"class":110},[100,169532,14017],{"class":258},[100,169534,148048],{"class":6812},[100,169536,472],{"class":471},[100,169538,148053],{"class":110},[100,169540,809],{"class":258},[19,169542,169543],{},"Windows 路径建议写成：",[73,169545,169547],{"className":249,"code":169546,"language":251,"meta":79,"style":79},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[32,169548,169549],{"__ignoreMap":79},[100,169550,169551,169554,169556],{"class":102,"line":103},[100,169552,169553],{"class":258},"path ",[100,169555,472],{"class":471},[100,169557,169558],{"class":110}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,169560,169561],{},"或原始字符串：",[73,169563,169565],{"className":249,"code":169564,"language":251,"meta":79,"style":79},"path = r\"D:\\data\\data.txt\"\n",[32,169566,169567],{"__ignoreMap":79},[100,169568,169569,169571,169573,169575,169577,169580,169583,169586,169588,169590,169592,169595],{"class":102,"line":103},[100,169570,169553],{"class":258},[100,169572,472],{"class":471},[100,169574,18702],{"class":471},[100,169576,2019],{"class":110},[100,169578,169579],{"class":49531},"D:",[100,169581,169582],{"class":117},"\\d",[100,169584,169585],{"class":49531},"ata",[100,169587,169582],{"class":117},[100,169589,169585],{"class":49531},[100,169591,2325],{"class":117},[100,169593,169594],{"class":49531},"txt",[100,169596,26708],{"class":110},[14,169598,169600],{"id":169599},"_83-open函数","8.3 open函数",[19,169602,6779],{},[73,169604,169606],{"className":249,"code":169605,"language":251,"meta":79,"style":79},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[32,169607,169608],{"__ignoreMap":79},[100,169609,169610,169612,169614,169616,169619,169621,169623,169625],{"class":102,"line":103},[100,169611,46908],{"class":6812},[100,169613,583],{"class":471},[100,169615,148033],{"class":117},[100,169617,169618],{"class":258},"(文件路径, 打开模式, ",[100,169620,148048],{"class":6812},[100,169622,472],{"class":471},[100,169624,148053],{"class":110},[100,169626,809],{"class":258},[19,169628,169629],{},"常见模式：",[319,169631,169632,169641],{},[322,169633,169634],{},[325,169635,169636,169639],{},[328,169637,169638],{},"模式",[328,169640,27444],{},[339,169642,169643,169652,169661,169670,169680],{},[325,169644,169645,169649],{},[344,169646,169647],{},[32,169648,2436],{},[344,169650,169651],{},"只读，文件不存在会报错",[325,169653,169654,169658],{},[344,169655,169656],{},[32,169657,2561],{},[344,169659,169660],{},"只写，文件不存在会创建，存在会清空",[325,169662,169663,169667],{},[344,169664,169665],{},[32,169666,2006],{},[344,169668,169669],{},"追加，文件不存在会创建",[325,169671,169672,169677],{},[344,169673,169674],{},[32,169675,169676],{},"rb",[344,169678,169679],{},"二进制只读",[325,169681,169682,169687],{},[344,169683,169684],{},[32,169685,169686],{},"wb",[344,169688,169689],{},"二进制只写",[14,169691,169693],{"id":169692},"_84-读取文件","8.4 读取文件",[305,169695,169697],{"id":169696},"_841-read","8.4.1 read",[19,169699,169700],{},"一次读取全部内容：",[73,169702,169704],{"className":249,"code":169703,"language":251,"meta":79,"style":79},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[32,169705,169706,169732,169744,169751],{"__ignoreMap":79},[100,169707,169708,169710,169712,169714,169716,169718,169720,169722,169724,169726,169728,169730],{"class":102,"line":103},[100,169709,46908],{"class":6812},[100,169711,583],{"class":471},[100,169713,148033],{"class":117},[100,169715,713],{"class":258},[100,169717,148038],{"class":110},[100,169719,14017],{"class":258},[100,169721,148043],{"class":110},[100,169723,14017],{"class":258},[100,169725,148048],{"class":6812},[100,169727,472],{"class":471},[100,169729,148053],{"class":110},[100,169731,809],{"class":258},[100,169733,169734,169737,169739,169741],{"class":102,"line":188},[100,169735,169736],{"class":258},"content ",[100,169738,472],{"class":471},[100,169740,149395],{"class":6812},[100,169742,169743],{"class":258},".read()\n",[100,169745,169746,169748],{"class":102,"line":199},[100,169747,1195],{"class":117},[100,169749,169750],{"class":258},"(content)\n",[100,169752,169753,169755],{"class":102,"line":532},[100,169754,46908],{"class":6812},[100,169756,169757],{"class":258},".close()\n",[19,169759,169760],{},"可以指定读取字符数：",[73,169762,169764],{"className":249,"code":169763,"language":251,"meta":79,"style":79},"content = file.read(10)\n",[32,169765,169766],{"__ignoreMap":79},[100,169767,169768,169770,169772,169774,169777,169779],{"class":102,"line":103},[100,169769,169736],{"class":258},[100,169771,472],{"class":471},[100,169773,149395],{"class":6812},[100,169775,169776],{"class":258},".read(",[100,169778,2213],{"class":117},[100,169780,809],{"class":258},[305,169782,169784],{"id":169783},"_842-readline","8.4.2 readline",[19,169786,169787],{},"一次读取一行：",[73,169789,169791],{"className":249,"code":169790,"language":251,"meta":79,"style":79},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[32,169792,169793,169819,169823,169834,169841,169845],{"__ignoreMap":79},[100,169794,169795,169797,169799,169801,169803,169805,169807,169809,169811,169813,169815,169817],{"class":102,"line":103},[100,169796,46908],{"class":6812},[100,169798,583],{"class":471},[100,169800,148033],{"class":117},[100,169802,713],{"class":258},[100,169804,148038],{"class":110},[100,169806,14017],{"class":258},[100,169808,148043],{"class":110},[100,169810,14017],{"class":258},[100,169812,148048],{"class":6812},[100,169814,472],{"class":471},[100,169816,148053],{"class":110},[100,169818,809],{"class":258},[100,169820,169821],{"class":102,"line":188},[100,169822,570],{"emptyLinePlaceholder":569},[100,169824,169825,169827,169829,169831],{"class":102,"line":199},[100,169826,148494],{"class":258},[100,169828,472],{"class":471},[100,169830,149395],{"class":6812},[100,169832,169833],{"class":258},".readline()\n",[100,169835,169836,169838],{"class":102,"line":532},[100,169837,1195],{"class":117},[100,169839,169840],{"class":258},"(line)\n",[100,169842,169843],{"class":102,"line":577},[100,169844,570],{"emptyLinePlaceholder":569},[100,169846,169847,169849],{"class":102,"line":589},[100,169848,46908],{"class":6812},[100,169850,169757],{"class":258},[305,169852,169854],{"id":169853},"_843-readlines","8.4.3 readlines",[19,169856,169857],{},"读取所有行，返回列表：",[73,169859,169861],{"className":249,"code":169860,"language":251,"meta":79,"style":79},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[32,169862,169863,169889,169901,169908],{"__ignoreMap":79},[100,169864,169865,169867,169869,169871,169873,169875,169877,169879,169881,169883,169885,169887],{"class":102,"line":103},[100,169866,46908],{"class":6812},[100,169868,583],{"class":471},[100,169870,148033],{"class":117},[100,169872,713],{"class":258},[100,169874,148038],{"class":110},[100,169876,14017],{"class":258},[100,169878,148043],{"class":110},[100,169880,14017],{"class":258},[100,169882,148048],{"class":6812},[100,169884,472],{"class":471},[100,169886,148053],{"class":110},[100,169888,809],{"class":258},[100,169890,169891,169894,169896,169898],{"class":102,"line":188},[100,169892,169893],{"class":258},"lines ",[100,169895,472],{"class":471},[100,169897,149395],{"class":6812},[100,169899,169900],{"class":258},".readlines()\n",[100,169902,169903,169905],{"class":102,"line":199},[100,169904,1195],{"class":117},[100,169906,169907],{"class":258},"(lines)\n",[100,169909,169910,169912],{"class":102,"line":532},[100,169911,46908],{"class":6812},[100,169913,169757],{"class":258},[19,169915,169916,169917,169920],{},"每一行通常带有换行符，可以用 ",[32,169918,169919],{},"strip()"," 去掉：",[73,169922,169924],{"className":249,"code":169923,"language":251,"meta":79,"style":79},"for line in lines:\n    print(line.strip())\n",[32,169925,169926,169938],{"__ignoreMap":79},[100,169927,169928,169930,169933,169935],{"class":102,"line":103},[100,169929,1051],{"class":471},[100,169931,169932],{"class":258}," line ",[100,169934,854],{"class":471},[100,169936,169937],{"class":258}," lines:\n",[100,169939,169940,169942],{"class":102,"line":188},[100,169941,702],{"class":117},[100,169943,169944],{"class":258},"(line.strip())\n",[305,169946,169948],{"id":169947},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,169950,169951],{},"推荐读取大文件时使用：",[73,169953,169955],{"className":249,"code":169954,"language":251,"meta":79,"style":79},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[32,169956,169957,169983,169987,169999,170005,170009],{"__ignoreMap":79},[100,169958,169959,169961,169963,169965,169967,169969,169971,169973,169975,169977,169979,169981],{"class":102,"line":103},[100,169960,46908],{"class":6812},[100,169962,583],{"class":471},[100,169964,148033],{"class":117},[100,169966,713],{"class":258},[100,169968,148038],{"class":110},[100,169970,14017],{"class":258},[100,169972,148043],{"class":110},[100,169974,14017],{"class":258},[100,169976,148048],{"class":6812},[100,169978,472],{"class":471},[100,169980,148053],{"class":110},[100,169982,809],{"class":258},[100,169984,169985],{"class":102,"line":188},[100,169986,570],{"emptyLinePlaceholder":569},[100,169988,169989,169991,169993,169995,169997],{"class":102,"line":199},[100,169990,1051],{"class":471},[100,169992,169932],{"class":258},[100,169994,854],{"class":471},[100,169996,149395],{"class":6812},[100,169998,696],{"class":258},[100,170000,170001,170003],{"class":102,"line":532},[100,170002,702],{"class":117},[100,170004,169944],{"class":258},[100,170006,170007],{"class":102,"line":577},[100,170008,570],{"emptyLinePlaceholder":569},[100,170010,170011,170013],{"class":102,"line":589},[100,170012,46908],{"class":6812},[100,170014,169757],{"class":258},[14,170016,170018],{"id":170017},"_85-with语句","8.5 with语句",[19,170020,170021,170023],{},[32,170022,109075],{}," 会自动关闭文件，推荐使用。",[73,170025,170027],{"className":249,"code":170026,"language":251,"meta":79,"style":79},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[32,170028,170029,170059,170069],{"__ignoreMap":79},[100,170030,170031,170033,170035,170037,170039,170041,170043,170045,170047,170049,170051,170053,170055,170057],{"class":102,"line":103},[100,170032,109075],{"class":471},[100,170034,148033],{"class":117},[100,170036,713],{"class":258},[100,170038,148038],{"class":110},[100,170040,14017],{"class":258},[100,170042,148043],{"class":110},[100,170044,14017],{"class":258},[100,170046,148048],{"class":6812},[100,170048,472],{"class":471},[100,170050,148053],{"class":110},[100,170052,15295],{"class":258},[100,170054,561],{"class":471},[100,170056,149395],{"class":6812},[100,170058,696],{"class":258},[100,170060,170061,170063,170065,170067],{"class":102,"line":188},[100,170062,148065],{"class":258},[100,170064,472],{"class":471},[100,170066,149395],{"class":6812},[100,170068,169743],{"class":258},[100,170070,170071,170073],{"class":102,"line":199},[100,170072,702],{"class":117},[100,170074,169750],{"class":258},[19,170076,170077],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,170079,170081],{"id":170080},"_86-写入文件","8.6 写入文件",[19,170083,170084,170086],{},[32,170085,2561],{}," 模式会清空原文件。",[73,170088,170090],{"className":249,"code":170089,"language":251,"meta":79,"style":79},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[32,170091,170092,170122,170139],{"__ignoreMap":79},[100,170093,170094,170096,170098,170100,170102,170104,170106,170108,170110,170112,170114,170116,170118,170120],{"class":102,"line":103},[100,170095,109075],{"class":471},[100,170097,148033],{"class":117},[100,170099,713],{"class":258},[100,170101,148038],{"class":110},[100,170103,14017],{"class":258},[100,170105,153218],{"class":110},[100,170107,14017],{"class":258},[100,170109,148048],{"class":6812},[100,170111,472],{"class":471},[100,170113,148053],{"class":110},[100,170115,15295],{"class":258},[100,170117,561],{"class":471},[100,170119,149395],{"class":6812},[100,170121,696],{"class":258},[100,170123,170124,170127,170130,170133,170135,170137],{"class":102,"line":188},[100,170125,170126],{"class":6812},"    file",[100,170128,170129],{"class":258},".write(",[100,170131,170132],{"class":110},"\"hello",[100,170134,157767],{"class":117},[100,170136,2019],{"class":110},[100,170138,809],{"class":258},[100,170140,170141,170143,170145,170148,170150,170152],{"class":102,"line":199},[100,170142,170126],{"class":6812},[100,170144,170129],{"class":258},[100,170146,170147],{"class":110},"\"python",[100,170149,157767],{"class":117},[100,170151,2019],{"class":110},[100,170153,809],{"class":258},[19,170155,170156],{},"写入多行：",[73,170158,170160],{"className":249,"code":170159,"language":251,"meta":79,"style":79},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[32,170161,170162,170197,170201,170232],{"__ignoreMap":79},[100,170163,170164,170166,170168,170170,170173,170175,170177,170179,170182,170184,170186,170188,170191,170193,170195],{"class":102,"line":103},[100,170165,169893],{"class":258},[100,170167,472],{"class":471},[100,170169,53780],{"class":258},[100,170171,170172],{"class":110},"\"小明,18",[100,170174,157767],{"class":117},[100,170176,2019],{"class":110},[100,170178,14017],{"class":258},[100,170180,170181],{"class":110},"\"小红,17",[100,170183,157767],{"class":117},[100,170185,2019],{"class":110},[100,170187,14017],{"class":258},[100,170189,170190],{"class":110},"\"小刚,19",[100,170192,157767],{"class":117},[100,170194,2019],{"class":110},[100,170196,34802],{"class":258},[100,170198,170199],{"class":102,"line":188},[100,170200,570],{"emptyLinePlaceholder":569},[100,170202,170203,170205,170207,170209,170212,170214,170216,170218,170220,170222,170224,170226,170228,170230],{"class":102,"line":199},[100,170204,109075],{"class":471},[100,170206,148033],{"class":117},[100,170208,713],{"class":258},[100,170210,170211],{"class":110},"\"students.txt\"",[100,170213,14017],{"class":258},[100,170215,153218],{"class":110},[100,170217,14017],{"class":258},[100,170219,148048],{"class":6812},[100,170221,472],{"class":471},[100,170223,148053],{"class":110},[100,170225,15295],{"class":258},[100,170227,561],{"class":471},[100,170229,149395],{"class":6812},[100,170231,696],{"class":258},[100,170233,170234,170236],{"class":102,"line":532},[100,170235,170126],{"class":6812},[100,170237,170238],{"class":258},".writelines(lines)\n",[14,170240,170242],{"id":170241},"_87-追加文件","8.7 追加文件",[19,170244,170245,170247],{},[32,170246,2006],{}," 模式不会清空原内容，而是在末尾追加。",[73,170249,170251],{"className":249,"code":170250,"language":251,"meta":79,"style":79},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[32,170252,170253,170284],{"__ignoreMap":79},[100,170254,170255,170257,170259,170261,170264,170266,170268,170270,170272,170274,170276,170278,170280,170282],{"class":102,"line":103},[100,170256,109075],{"class":471},[100,170258,148033],{"class":117},[100,170260,713],{"class":258},[100,170262,170263],{"class":110},"\"log.txt\"",[100,170265,14017],{"class":258},[100,170267,166567],{"class":110},[100,170269,14017],{"class":258},[100,170271,148048],{"class":6812},[100,170273,472],{"class":471},[100,170275,148053],{"class":110},[100,170277,15295],{"class":258},[100,170279,561],{"class":471},[100,170281,149395],{"class":6812},[100,170283,696],{"class":258},[100,170285,170286,170288,170290,170293,170295,170297],{"class":102,"line":188},[100,170287,170126],{"class":6812},[100,170289,170129],{"class":258},[100,170291,170292],{"class":110},"\"程序启动",[100,170294,157767],{"class":117},[100,170296,2019],{"class":110},[100,170298,809],{"class":258},[19,170300,170301],{},"日志类文件常用追加模式。",[14,170303,170305],{"id":170304},"_88-文件编码","8.8 文件编码",[19,170307,170308],{},"编码决定文字如何保存为字节。",[19,170310,170311],{},"常见编码：",[26,170313,170314,170317],{},[29,170315,170316],{},"UTF-8：推荐。",[29,170318,170319],{},"GBK：部分 Windows 中文文件常见。",[19,170321,170322],{},"读取文件乱码时，可以尝试：",[73,170324,170326],{"className":249,"code":170325,"language":251,"meta":79,"style":79},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[32,170327,170328,170359],{"__ignoreMap":79},[100,170329,170330,170332,170334,170336,170338,170340,170342,170344,170346,170348,170351,170353,170355,170357],{"class":102,"line":103},[100,170331,109075],{"class":471},[100,170333,148033],{"class":117},[100,170335,713],{"class":258},[100,170337,148038],{"class":110},[100,170339,14017],{"class":258},[100,170341,148043],{"class":110},[100,170343,14017],{"class":258},[100,170345,148048],{"class":6812},[100,170347,472],{"class":471},[100,170349,170350],{"class":110},"\"gbk\"",[100,170352,15295],{"class":258},[100,170354,561],{"class":471},[100,170356,149395],{"class":6812},[100,170358,696],{"class":258},[100,170360,170361,170363,170365,170367],{"class":102,"line":188},[100,170362,148065],{"class":258},[100,170364,472],{"class":471},[100,170366,149395],{"class":6812},[100,170368,169743],{"class":258},[19,170370,170371],{},"写文件时建议统一 UTF-8：",[73,170373,170375],{"className":249,"code":170374,"language":251,"meta":79,"style":79},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[32,170376,170377,170407],{"__ignoreMap":79},[100,170378,170379,170381,170383,170385,170387,170389,170391,170393,170395,170397,170399,170401,170403,170405],{"class":102,"line":103},[100,170380,109075],{"class":471},[100,170382,148033],{"class":117},[100,170384,713],{"class":258},[100,170386,148038],{"class":110},[100,170388,14017],{"class":258},[100,170390,153218],{"class":110},[100,170392,14017],{"class":258},[100,170394,148048],{"class":6812},[100,170396,472],{"class":471},[100,170398,148053],{"class":110},[100,170400,15295],{"class":258},[100,170402,561],{"class":471},[100,170404,149395],{"class":6812},[100,170406,696],{"class":258},[100,170408,170409,170411,170413,170416],{"class":102,"line":188},[100,170410,170126],{"class":6812},[100,170412,170129],{"class":258},[100,170414,170415],{"class":110},"\"中文内容\"",[100,170417,809],{"class":258},[14,170419,170421],{"id":170420},"_89-pathlib","8.9 pathlib",[19,170423,170424,170427],{},[32,170425,170426],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[73,170429,170431],{"className":249,"code":170430,"language":251,"meta":79,"style":79},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[32,170432,170433,170443,170447,170465],{"__ignoreMap":79},[100,170434,170435,170437,170439,170441],{"class":102,"line":103},[100,170436,32301],{"class":471},[100,170438,109553],{"class":258},[100,170440,548],{"class":471},[100,170442,109558],{"class":258},[100,170444,170445],{"class":102,"line":188},[100,170446,570],{"emptyLinePlaceholder":569},[100,170448,170449,170451,170453,170455,170458,170460,170462],{"class":102,"line":199},[100,170450,169553],{"class":258},[100,170452,472],{"class":471},[100,170454,109787],{"class":258},[100,170456,170457],{"class":110},"\"data\"",[100,170459,15295],{"class":258},[100,170461,2351],{"class":471},[100,170463,170464],{"class":110}," \"students.txt\"\n",[100,170466,170467,170469],{"class":102,"line":532},[100,170468,1195],{"class":117},[100,170470,170471],{"class":258},"(path)\n",[19,170473,170474],{},"创建目录：",[73,170476,170478],{"className":249,"code":170477,"language":251,"meta":79,"style":79},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[32,170479,170480,170490,170494,170507],{"__ignoreMap":79},[100,170481,170482,170484,170486,170488],{"class":102,"line":103},[100,170483,32301],{"class":471},[100,170485,109553],{"class":258},[100,170487,548],{"class":471},[100,170489,109558],{"class":258},[100,170491,170492],{"class":102,"line":188},[100,170493,570],{"emptyLinePlaceholder":569},[100,170495,170496,170499,170501,170503,170505],{"class":102,"line":199},[100,170497,170498],{"class":258},"data_dir ",[100,170500,472],{"class":471},[100,170502,109787],{"class":258},[100,170504,170457],{"class":110},[100,170506,809],{"class":258},[100,170508,170509,170512,170515,170517,170519],{"class":102,"line":532},[100,170510,170511],{"class":258},"data_dir.mkdir(",[100,170513,170514],{"class":6812},"exist_ok",[100,170516,472],{"class":471},[100,170518,33034],{"class":117},[100,170520,809],{"class":258},[19,170522,170523],{},"判断文件是否存在：",[73,170525,170527],{"className":249,"code":170526,"language":251,"meta":79,"style":79},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[32,170528,170529,170542,170546,170553],{"__ignoreMap":79},[100,170530,170531,170533,170535,170537,170540],{"class":102,"line":103},[100,170532,169553],{"class":258},[100,170534,472],{"class":471},[100,170536,109787],{"class":258},[100,170538,170539],{"class":110},"\"data\u002Fstudents.txt\"",[100,170541,809],{"class":258},[100,170543,170544],{"class":102,"line":188},[100,170545,570],{"emptyLinePlaceholder":569},[100,170547,170548,170550],{"class":102,"line":199},[100,170549,958],{"class":471},[100,170551,170552],{"class":258}," path.exists():\n",[100,170554,170555,170557,170559,170562],{"class":102,"line":532},[100,170556,702],{"class":117},[100,170558,713],{"class":258},[100,170560,170561],{"class":110},"\"文件存在\"",[100,170563,809],{"class":258},[19,170565,170566],{},"读写文本：",[73,170568,170570],{"className":249,"code":170569,"language":251,"meta":79,"style":79},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[32,170571,170572,170584,170588,170605,170622],{"__ignoreMap":79},[100,170573,170574,170576,170578,170580,170582],{"class":102,"line":103},[100,170575,169553],{"class":258},[100,170577,472],{"class":471},[100,170579,109787],{"class":258},[100,170581,148038],{"class":110},[100,170583,809],{"class":258},[100,170585,170586],{"class":102,"line":188},[100,170587,570],{"emptyLinePlaceholder":569},[100,170589,170590,170593,170595,170597,170599,170601,170603],{"class":102,"line":199},[100,170591,170592],{"class":258},"path.write_text(",[100,170594,147118],{"class":110},[100,170596,14017],{"class":258},[100,170598,148048],{"class":6812},[100,170600,472],{"class":471},[100,170602,148053],{"class":110},[100,170604,809],{"class":258},[100,170606,170607,170609,170611,170614,170616,170618,170620],{"class":102,"line":532},[100,170608,169736],{"class":258},[100,170610,472],{"class":471},[100,170612,170613],{"class":258}," path.read_text(",[100,170615,148048],{"class":6812},[100,170617,472],{"class":471},[100,170619,148053],{"class":110},[100,170621,809],{"class":258},[100,170623,170624,170626],{"class":102,"line":577},[100,170625,1195],{"class":117},[100,170627,169750],{"class":258},[14,170629,170631],{"id":170630},"_810-json文件","8.10 JSON文件",[19,170633,170634],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[73,170636,170638],{"className":249,"code":170637,"language":251,"meta":79,"style":79},"import json\n\nstudent = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n\ntext = json.dumps(student, ensure_ascii=False, indent=2)\nprint(text)\n",[32,170639,170640,170646,170650,170658,170668,170678,170686,170690,170694,170719],{"__ignoreMap":79},[100,170641,170642,170644],{"class":102,"line":103},[100,170643,548],{"class":471},[100,170645,148333],{"class":258},[100,170647,170648],{"class":102,"line":188},[100,170649,570],{"emptyLinePlaceholder":569},[100,170651,170652,170654,170656],{"class":102,"line":199},[100,170653,150723],{"class":258},[100,170655,472],{"class":471},[100,170657,17153],{"class":258},[100,170659,170660,170662,170664,170666],{"class":102,"line":532},[100,170661,148262],{"class":110},[100,170663,52991],{"class":258},[100,170665,151130],{"class":110},[100,170667,33024],{"class":258},[100,170669,170670,170672,170674,170676],{"class":102,"line":577},[100,170671,165779],{"class":110},[100,170673,52991],{"class":258},[100,170675,2417],{"class":117},[100,170677,33024],{"class":258},[100,170679,170680,170682,170684],{"class":102,"line":589},[100,170681,165790],{"class":110},[100,170683,52991],{"class":258},[100,170685,165795],{"class":117},[100,170687,170688],{"class":102,"line":595},[100,170689,3197],{"class":258},[100,170691,170692],{"class":102,"line":601},[100,170693,570],{"emptyLinePlaceholder":569},[100,170695,170696,170698,170700,170703,170705,170707,170709,170711,170713,170715,170717],{"class":102,"line":606},[100,170697,157686],{"class":258},[100,170699,472],{"class":471},[100,170701,170702],{"class":258}," json.dumps(student, ",[100,170704,148379],{"class":6812},[100,170706,472],{"class":471},[100,170708,35542],{"class":117},[100,170710,14017],{"class":258},[100,170712,153254],{"class":6812},[100,170714,472],{"class":471},[100,170716,465],{"class":117},[100,170718,809],{"class":258},[100,170720,170721,170723],{"class":102,"line":612},[100,170722,1195],{"class":117},[100,170724,165313],{"class":258},[19,170726,170727],{},"写入 JSON 文件：",[73,170729,170731],{"className":249,"code":170730,"language":251,"meta":79,"style":79},"import json\n\nstudents = [\n    {\"name\": \"小明\", \"age\": 18, \"score\": 95},\n    {\"name\": \"小红\", \"age\": 17, \"score\": 88},\n]\n\nwith open(\"students.json\", \"w\", encoding=\"utf-8\") as file:\n    json.dump(students, file, ensure_ascii=False, indent=2)\n",[32,170732,170733,170739,170743,170751,170779,170807,170811,170815,170845],{"__ignoreMap":79},[100,170734,170735,170737],{"class":102,"line":103},[100,170736,548],{"class":471},[100,170738,148333],{"class":258},[100,170740,170741],{"class":102,"line":188},[100,170742,570],{"emptyLinePlaceholder":569},[100,170744,170745,170747,170749],{"class":102,"line":199},[100,170746,160958],{"class":258},[100,170748,472],{"class":471},[100,170750,57001],{"class":258},[100,170752,170753,170755,170757,170759,170761,170763,170765,170767,170769,170771,170773,170775,170777],{"class":102,"line":532},[100,170754,149627],{"class":258},[100,170756,64233],{"class":110},[100,170758,52991],{"class":258},[100,170760,151130],{"class":110},[100,170762,14017],{"class":258},[100,170764,70678],{"class":110},[100,170766,52991],{"class":258},[100,170768,2417],{"class":117},[100,170770,14017],{"class":258},[100,170772,152714],{"class":110},[100,170774,52991],{"class":258},[100,170776,2755],{"class":117},[100,170778,6528],{"class":258},[100,170780,170781,170783,170785,170787,170789,170791,170793,170795,170797,170799,170801,170803,170805],{"class":102,"line":577},[100,170782,149627],{"class":258},[100,170784,64233],{"class":110},[100,170786,52991],{"class":258},[100,170788,152178],{"class":110},[100,170790,14017],{"class":258},[100,170792,70678],{"class":110},[100,170794,52991],{"class":258},[100,170796,2392],{"class":117},[100,170798,14017],{"class":258},[100,170800,152714],{"class":110},[100,170802,52991],{"class":258},[100,170804,2577],{"class":117},[100,170806,6528],{"class":258},[100,170808,170809],{"class":102,"line":589},[100,170810,34802],{"class":258},[100,170812,170813],{"class":102,"line":595},[100,170814,570],{"emptyLinePlaceholder":569},[100,170816,170817,170819,170821,170823,170825,170827,170829,170831,170833,170835,170837,170839,170841,170843],{"class":102,"line":601},[100,170818,109075],{"class":471},[100,170820,148033],{"class":117},[100,170822,713],{"class":258},[100,170824,153073],{"class":110},[100,170826,14017],{"class":258},[100,170828,153218],{"class":110},[100,170830,14017],{"class":258},[100,170832,148048],{"class":6812},[100,170834,472],{"class":471},[100,170836,148053],{"class":110},[100,170838,15295],{"class":258},[100,170840,561],{"class":471},[100,170842,149395],{"class":6812},[100,170844,696],{"class":258},[100,170846,170847,170850,170852,170854,170856,170858,170860,170862,170864,170866,170868],{"class":102,"line":606},[100,170848,170849],{"class":258},"    json.dump(students, ",[100,170851,46908],{"class":6812},[100,170853,14017],{"class":258},[100,170855,148379],{"class":6812},[100,170857,472],{"class":471},[100,170859,35542],{"class":117},[100,170861,14017],{"class":258},[100,170863,153254],{"class":6812},[100,170865,472],{"class":471},[100,170867,465],{"class":117},[100,170869,809],{"class":258},[19,170871,170872],{},"读取 JSON 文件：",[73,170874,170876],{"className":249,"code":170875,"language":251,"meta":79,"style":79},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[32,170877,170878,170884,170888,170918,170930,170934],{"__ignoreMap":79},[100,170879,170880,170882],{"class":102,"line":103},[100,170881,548],{"class":471},[100,170883,148333],{"class":258},[100,170885,170886],{"class":102,"line":188},[100,170887,570],{"emptyLinePlaceholder":569},[100,170889,170890,170892,170894,170896,170898,170900,170902,170904,170906,170908,170910,170912,170914,170916],{"class":102,"line":199},[100,170891,109075],{"class":471},[100,170893,148033],{"class":117},[100,170895,713],{"class":258},[100,170897,153073],{"class":110},[100,170899,14017],{"class":258},[100,170901,148043],{"class":110},[100,170903,14017],{"class":258},[100,170905,148048],{"class":6812},[100,170907,472],{"class":471},[100,170909,148053],{"class":110},[100,170911,15295],{"class":258},[100,170913,561],{"class":471},[100,170915,149395],{"class":6812},[100,170917,696],{"class":258},[100,170919,170920,170922,170924,170926,170928],{"class":102,"line":532},[100,170921,154279],{"class":258},[100,170923,472],{"class":471},[100,170925,149406],{"class":258},[100,170927,46908],{"class":6812},[100,170929,809],{"class":258},[100,170931,170932],{"class":102,"line":577},[100,170933,570],{"emptyLinePlaceholder":569},[100,170935,170936,170938],{"class":102,"line":589},[100,170937,1195],{"class":117},[100,170939,166237],{"class":258},[14,170941,170943],{"id":170942},"_811-csv文件","8.11 CSV文件",[19,170945,170946],{},"CSV 是逗号分隔值，常用于表格数据。",[19,170948,170949],{},"写入 CSV：",[73,170951,170953],{"className":249,"code":170952,"language":251,"meta":79,"style":79},"import csv\n\nstudents = [\n    [\"姓名\", \"年龄\", \"成绩\"],\n    [\"小明\", 18, 95],\n    [\"小红\", 17, 88],\n]\n\nwith open(\"students.csv\", \"w\", encoding=\"utf-8\", newline=\"\") as file:\n    writer = csv.writer(file)\n    writer.writerows(students)\n",[32,170954,170955,170962,170966,170974,170992,171008,171024,171028,171032,171072,171086],{"__ignoreMap":79},[100,170956,170957,170959],{"class":102,"line":103},[100,170958,548],{"class":471},[100,170960,170961],{"class":258}," csv\n",[100,170963,170964],{"class":102,"line":188},[100,170965,570],{"emptyLinePlaceholder":569},[100,170967,170968,170970,170972],{"class":102,"line":199},[100,170969,160958],{"class":258},[100,170971,472],{"class":471},[100,170973,57001],{"class":258},[100,170975,170976,170979,170981,170983,170985,170987,170990],{"class":102,"line":532},[100,170977,170978],{"class":258},"    [",[100,170980,74653],{"class":110},[100,170982,14017],{"class":258},[100,170984,74686],{"class":110},[100,170986,14017],{"class":258},[100,170988,170989],{"class":110},"\"成绩\"",[100,170991,89388],{"class":258},[100,170993,170994,170996,170998,171000,171002,171004,171006],{"class":102,"line":577},[100,170995,170978],{"class":258},[100,170997,151130],{"class":110},[100,170999,14017],{"class":258},[100,171001,2417],{"class":117},[100,171003,14017],{"class":258},[100,171005,2755],{"class":117},[100,171007,89388],{"class":258},[100,171009,171010,171012,171014,171016,171018,171020,171022],{"class":102,"line":589},[100,171011,170978],{"class":258},[100,171013,152178],{"class":110},[100,171015,14017],{"class":258},[100,171017,2392],{"class":117},[100,171019,14017],{"class":258},[100,171021,2577],{"class":117},[100,171023,89388],{"class":258},[100,171025,171026],{"class":102,"line":595},[100,171027,34802],{"class":258},[100,171029,171030],{"class":102,"line":601},[100,171031,570],{"emptyLinePlaceholder":569},[100,171033,171034,171036,171038,171040,171043,171045,171047,171049,171051,171053,171055,171057,171060,171062,171064,171066,171068,171070],{"class":102,"line":606},[100,171035,109075],{"class":471},[100,171037,148033],{"class":117},[100,171039,713],{"class":258},[100,171041,171042],{"class":110},"\"students.csv\"",[100,171044,14017],{"class":258},[100,171046,153218],{"class":110},[100,171048,14017],{"class":258},[100,171050,148048],{"class":6812},[100,171052,472],{"class":471},[100,171054,148053],{"class":110},[100,171056,14017],{"class":258},[100,171058,171059],{"class":6812},"newline",[100,171061,472],{"class":471},[100,171063,9248],{"class":110},[100,171065,15295],{"class":258},[100,171067,561],{"class":471},[100,171069,149395],{"class":6812},[100,171071,696],{"class":258},[100,171073,171074,171077,171079,171082,171084],{"class":102,"line":612},[100,171075,171076],{"class":258},"    writer ",[100,171078,472],{"class":471},[100,171080,171081],{"class":258}," csv.writer(",[100,171083,46908],{"class":6812},[100,171085,809],{"class":258},[100,171087,171088],{"class":102,"line":618},[100,171089,171090],{"class":258},"    writer.writerows(students)\n",[19,171092,171093],{},"读取 CSV：",[73,171095,171097],{"className":249,"code":171096,"language":251,"meta":79,"style":79},"import csv\n\nwith open(\"students.csv\", \"r\", encoding=\"utf-8\") as file:\n    reader = csv.reader(file)\n    for row in reader:\n        print(row)\n",[32,171098,171099,171105,171109,171139,171153,171165],{"__ignoreMap":79},[100,171100,171101,171103],{"class":102,"line":103},[100,171102,548],{"class":471},[100,171104,170961],{"class":258},[100,171106,171107],{"class":102,"line":188},[100,171108,570],{"emptyLinePlaceholder":569},[100,171110,171111,171113,171115,171117,171119,171121,171123,171125,171127,171129,171131,171133,171135,171137],{"class":102,"line":199},[100,171112,109075],{"class":471},[100,171114,148033],{"class":117},[100,171116,713],{"class":258},[100,171118,171042],{"class":110},[100,171120,14017],{"class":258},[100,171122,148043],{"class":110},[100,171124,14017],{"class":258},[100,171126,148048],{"class":6812},[100,171128,472],{"class":471},[100,171130,148053],{"class":110},[100,171132,15295],{"class":258},[100,171134,561],{"class":471},[100,171136,149395],{"class":6812},[100,171138,696],{"class":258},[100,171140,171141,171144,171146,171149,171151],{"class":102,"line":532},[100,171142,171143],{"class":258},"    reader ",[100,171145,472],{"class":471},[100,171147,171148],{"class":258}," csv.reader(",[100,171150,46908],{"class":6812},[100,171152,809],{"class":258},[100,171154,171155,171157,171160,171162],{"class":102,"line":577},[100,171156,848],{"class":471},[100,171158,171159],{"class":258}," row ",[100,171161,854],{"class":471},[100,171163,171164],{"class":258}," reader:\n",[100,171166,171167,171169],{"class":102,"line":589},[100,171168,34007],{"class":117},[100,171170,171171],{"class":258},"(row)\n",[19,171173,171174],{},"使用字典写入：",[73,171176,171178],{"className":249,"code":171177,"language":251,"meta":79,"style":79},"import csv\n\nstudents = [\n    {\"name\": \"小明\", \"age\": 18, \"score\": 95},\n    {\"name\": \"小红\", \"age\": 17, \"score\": 88},\n]\n\nwith open(\"students.csv\", \"w\", encoding=\"utf-8\", newline=\"\") as file:\n    fieldnames = [\"name\", \"age\", \"score\"]\n    writer = csv.DictWriter(file, fieldnames=fieldnames)\n    writer.writeheader()\n    writer.writerows(students)\n",[32,171179,171180,171186,171190,171198,171226,171254,171258,171262,171300,171321,171342,171347],{"__ignoreMap":79},[100,171181,171182,171184],{"class":102,"line":103},[100,171183,548],{"class":471},[100,171185,170961],{"class":258},[100,171187,171188],{"class":102,"line":188},[100,171189,570],{"emptyLinePlaceholder":569},[100,171191,171192,171194,171196],{"class":102,"line":199},[100,171193,160958],{"class":258},[100,171195,472],{"class":471},[100,171197,57001],{"class":258},[100,171199,171200,171202,171204,171206,171208,171210,171212,171214,171216,171218,171220,171222,171224],{"class":102,"line":532},[100,171201,149627],{"class":258},[100,171203,64233],{"class":110},[100,171205,52991],{"class":258},[100,171207,151130],{"class":110},[100,171209,14017],{"class":258},[100,171211,70678],{"class":110},[100,171213,52991],{"class":258},[100,171215,2417],{"class":117},[100,171217,14017],{"class":258},[100,171219,152714],{"class":110},[100,171221,52991],{"class":258},[100,171223,2755],{"class":117},[100,171225,6528],{"class":258},[100,171227,171228,171230,171232,171234,171236,171238,171240,171242,171244,171246,171248,171250,171252],{"class":102,"line":577},[100,171229,149627],{"class":258},[100,171231,64233],{"class":110},[100,171233,52991],{"class":258},[100,171235,152178],{"class":110},[100,171237,14017],{"class":258},[100,171239,70678],{"class":110},[100,171241,52991],{"class":258},[100,171243,2392],{"class":117},[100,171245,14017],{"class":258},[100,171247,152714],{"class":110},[100,171249,52991],{"class":258},[100,171251,2577],{"class":117},[100,171253,6528],{"class":258},[100,171255,171256],{"class":102,"line":589},[100,171257,34802],{"class":258},[100,171259,171260],{"class":102,"line":595},[100,171261,570],{"emptyLinePlaceholder":569},[100,171263,171264,171266,171268,171270,171272,171274,171276,171278,171280,171282,171284,171286,171288,171290,171292,171294,171296,171298],{"class":102,"line":601},[100,171265,109075],{"class":471},[100,171267,148033],{"class":117},[100,171269,713],{"class":258},[100,171271,171042],{"class":110},[100,171273,14017],{"class":258},[100,171275,153218],{"class":110},[100,171277,14017],{"class":258},[100,171279,148048],{"class":6812},[100,171281,472],{"class":471},[100,171283,148053],{"class":110},[100,171285,14017],{"class":258},[100,171287,171059],{"class":6812},[100,171289,472],{"class":471},[100,171291,9248],{"class":110},[100,171293,15295],{"class":258},[100,171295,561],{"class":471},[100,171297,149395],{"class":6812},[100,171299,696],{"class":258},[100,171301,171302,171305,171307,171309,171311,171313,171315,171317,171319],{"class":102,"line":606},[100,171303,171304],{"class":258},"    fieldnames ",[100,171306,472],{"class":471},[100,171308,53780],{"class":258},[100,171310,64233],{"class":110},[100,171312,14017],{"class":258},[100,171314,70678],{"class":110},[100,171316,14017],{"class":258},[100,171318,152714],{"class":110},[100,171320,34802],{"class":258},[100,171322,171323,171325,171327,171330,171332,171334,171337,171339],{"class":102,"line":612},[100,171324,171076],{"class":258},[100,171326,472],{"class":471},[100,171328,171329],{"class":258}," csv.DictWriter(",[100,171331,46908],{"class":6812},[100,171333,14017],{"class":258},[100,171335,171336],{"class":6812},"fieldnames",[100,171338,472],{"class":471},[100,171340,171341],{"class":258},"fieldnames)\n",[100,171343,171344],{"class":102,"line":618},[100,171345,171346],{"class":258},"    writer.writeheader()\n",[100,171348,171349],{"class":102,"line":623},[100,171350,171090],{"class":258},[14,171352,171354],{"id":171353},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,171356,124534],{},[26,171358,171359,171362,171365],{},[29,171360,171361],{},"读取文本文件。",[29,171363,171364],{},"统计每个单词出现次数。",[29,171366,171367],{},"输出出现次数最多的前 10 个单词。",[19,171369,11617],{},[73,171371,171373],{"className":249,"code":171372,"language":251,"meta":79,"style":79},"from pathlib import Path\n\npath = Path(\"article.txt\")\ncontent = path.read_text(encoding=\"utf-8\")\n\nwords = content.lower().split()\ncounter = {}\n\nfor word in words:\n    word = word.strip(\".,!?;:\\\"'()[]\")\n    if not word:\n        continue\n    counter[word] = counter.get(word, 0) + 1\n\nitems = sorted(counter.items(), key=lambda item: item[1], reverse=True)\n\nfor word, count in items[:10]:\n    print(word, count)\n",[32,171374,171375,171385,171389,171402,171418,171422,171432,171441,171445,171457,171477,171486,171490,171508,171512,171542,171546,171562],{"__ignoreMap":79},[100,171376,171377,171379,171381,171383],{"class":102,"line":103},[100,171378,32301],{"class":471},[100,171380,109553],{"class":258},[100,171382,548],{"class":471},[100,171384,109558],{"class":258},[100,171386,171387],{"class":102,"line":188},[100,171388,570],{"emptyLinePlaceholder":569},[100,171390,171391,171393,171395,171397,171400],{"class":102,"line":199},[100,171392,169553],{"class":258},[100,171394,472],{"class":471},[100,171396,109787],{"class":258},[100,171398,171399],{"class":110},"\"article.txt\"",[100,171401,809],{"class":258},[100,171403,171404,171406,171408,171410,171412,171414,171416],{"class":102,"line":532},[100,171405,169736],{"class":258},[100,171407,472],{"class":471},[100,171409,170613],{"class":258},[100,171411,148048],{"class":6812},[100,171413,472],{"class":471},[100,171415,148053],{"class":110},[100,171417,809],{"class":258},[100,171419,171420],{"class":102,"line":577},[100,171421,570],{"emptyLinePlaceholder":569},[100,171423,171424,171427,171429],{"class":102,"line":589},[100,171425,171426],{"class":258},"words ",[100,171428,472],{"class":471},[100,171430,171431],{"class":258}," content.lower().split()\n",[100,171433,171434,171437,171439],{"class":102,"line":595},[100,171435,171436],{"class":258},"counter ",[100,171438,472],{"class":471},[100,171440,89420],{"class":258},[100,171442,171443],{"class":102,"line":601},[100,171444,570],{"emptyLinePlaceholder":569},[100,171446,171447,171449,171452,171454],{"class":102,"line":606},[100,171448,1051],{"class":471},[100,171450,171451],{"class":258}," word ",[100,171453,854],{"class":471},[100,171455,171456],{"class":258}," words:\n",[100,171458,171459,171462,171464,171467,171470,171472,171475],{"class":102,"line":612},[100,171460,171461],{"class":258},"    word ",[100,171463,472],{"class":471},[100,171465,171466],{"class":258}," word.strip(",[100,171468,171469],{"class":110},"\".,!?;:",[100,171471,157737],{"class":117},[100,171473,171474],{"class":110},"'()[]\"",[100,171476,809],{"class":258},[100,171478,171479,171481,171483],{"class":102,"line":618},[100,171480,4702],{"class":471},[100,171482,40484],{"class":471},[100,171484,171485],{"class":258}," word:\n",[100,171487,171488],{"class":102,"line":623},[100,171489,149754],{"class":471},[100,171491,171492,171495,171497,171500,171502,171504,171506],{"class":102,"line":629},[100,171493,171494],{"class":258},"    counter[word] ",[100,171496,472],{"class":471},[100,171498,171499],{"class":258}," counter.get(word, ",[100,171501,1366],{"class":117},[100,171503,15295],{"class":258},[100,171505,2248],{"class":471},[100,171507,57253],{"class":117},[100,171509,171510],{"class":102,"line":635},[100,171511,570],{"emptyLinePlaceholder":569},[100,171513,171514,171517,171519,171521,171524,171526,171528,171530,171532,171534,171536,171538,171540],{"class":102,"line":641},[100,171515,171516],{"class":258},"items ",[100,171518,472],{"class":471},[100,171520,164846],{"class":117},[100,171522,171523],{"class":258},"(counter.items(), ",[100,171525,155188],{"class":6812},[100,171527,155191],{"class":471},[100,171529,155194],{"class":258},[100,171531,1985],{"class":117},[100,171533,113444],{"class":258},[100,171535,164770],{"class":6812},[100,171537,472],{"class":471},[100,171539,33034],{"class":117},[100,171541,809],{"class":258},[100,171543,171544],{"class":102,"line":647},[100,171545,570],{"emptyLinePlaceholder":569},[100,171547,171548,171550,171553,171555,171558,171560],{"class":102,"line":653},[100,171549,1051],{"class":471},[100,171551,171552],{"class":258}," word, count ",[100,171554,854],{"class":471},[100,171556,171557],{"class":258}," items[:",[100,171559,2213],{"class":117},[100,171561,166997],{"class":258},[100,171563,171564,171566],{"class":102,"line":659},[100,171565,702],{"class":117},[100,171567,171568],{"class":258},"(word, count)\n",[14,171570,171572],{"id":171571},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[73,171574,171576],{"className":249,"code":171575,"language":251,"meta":79,"style":79},"import json\nfrom pathlib import Path\n\nDATA_FILE = Path(\"students.json\")\n\n\ndef load_students():\n    if not DATA_FILE.exists():\n        return []\n\n    with open(DATA_FILE, \"r\", encoding=\"utf-8\") as file:\n        return json.load(file)\n\n\ndef save_students(students):\n    with open(DATA_FILE, \"w\", encoding=\"utf-8\") as file:\n        json.dump(students, file, ensure_ascii=False, indent=2)\n\n\nstudents = load_students()\nstudents.append({\"name\": \"小明\", \"age\": 18, \"score\": 95})\nsave_students(students)\nprint(\"保存成功\")\n",[32,171577,171578,171584,171594,171598,171610,171614,171618,171626,171636,171642,171646,171676,171686,171690,171694,171702,171732,171756,171760,171764,171772,171801,171806],{"__ignoreMap":79},[100,171579,171580,171582],{"class":102,"line":103},[100,171581,548],{"class":471},[100,171583,148333],{"class":258},[100,171585,171586,171588,171590,171592],{"class":102,"line":188},[100,171587,32301],{"class":471},[100,171589,109553],{"class":258},[100,171591,548],{"class":471},[100,171593,109558],{"class":258},[100,171595,171596],{"class":102,"line":199},[100,171597,570],{"emptyLinePlaceholder":569},[100,171599,171600,171602,171604,171606,171608],{"class":102,"line":532},[100,171601,153066],{"class":117},[100,171603,583],{"class":471},[100,171605,109787],{"class":258},[100,171607,153073],{"class":110},[100,171609,809],{"class":258},[100,171611,171612],{"class":102,"line":577},[100,171613,570],{"emptyLinePlaceholder":569},[100,171615,171616],{"class":102,"line":589},[100,171617,570],{"emptyLinePlaceholder":569},[100,171619,171620,171622,171624],{"class":102,"line":595},[100,171621,678],{"class":471},[100,171623,153090],{"class":106},[100,171625,33510],{"class":258},[100,171627,171628,171630,171632,171634],{"class":102,"line":601},[100,171629,4702],{"class":471},[100,171631,40484],{"class":471},[100,171633,153101],{"class":117},[100,171635,153104],{"class":258},[100,171637,171638,171640],{"class":102,"line":606},[100,171639,16333],{"class":471},[100,171641,53392],{"class":258},[100,171643,171644],{"class":102,"line":612},[100,171645,570],{"emptyLinePlaceholder":569},[100,171647,171648,171650,171652,171654,171656,171658,171660,171662,171664,171666,171668,171670,171672,171674],{"class":102,"line":618},[100,171649,35733],{"class":471},[100,171651,148033],{"class":117},[100,171653,713],{"class":258},[100,171655,153066],{"class":117},[100,171657,14017],{"class":258},[100,171659,148043],{"class":110},[100,171661,14017],{"class":258},[100,171663,148048],{"class":6812},[100,171665,472],{"class":471},[100,171667,148053],{"class":110},[100,171669,15295],{"class":258},[100,171671,561],{"class":471},[100,171673,149395],{"class":6812},[100,171675,696],{"class":258},[100,171677,171678,171680,171682,171684],{"class":102,"line":623},[100,171679,16333],{"class":471},[100,171681,149406],{"class":258},[100,171683,46908],{"class":6812},[100,171685,809],{"class":258},[100,171687,171688],{"class":102,"line":629},[100,171689,570],{"emptyLinePlaceholder":569},[100,171691,171692],{"class":102,"line":635},[100,171693,570],{"emptyLinePlaceholder":569},[100,171695,171696,171698,171700],{"class":102,"line":641},[100,171697,678],{"class":471},[100,171699,153200],{"class":106},[100,171701,153203],{"class":258},[100,171703,171704,171706,171708,171710,171712,171714,171716,171718,171720,171722,171724,171726,171728,171730],{"class":102,"line":647},[100,171705,35733],{"class":471},[100,171707,148033],{"class":117},[100,171709,713],{"class":258},[100,171711,153066],{"class":117},[100,171713,14017],{"class":258},[100,171715,153218],{"class":110},[100,171717,14017],{"class":258},[100,171719,148048],{"class":6812},[100,171721,472],{"class":471},[100,171723,148053],{"class":110},[100,171725,15295],{"class":258},[100,171727,561],{"class":471},[100,171729,149395],{"class":6812},[100,171731,696],{"class":258},[100,171733,171734,171736,171738,171740,171742,171744,171746,171748,171750,171752,171754],{"class":102,"line":653},[100,171735,153239],{"class":258},[100,171737,46908],{"class":6812},[100,171739,14017],{"class":258},[100,171741,148379],{"class":6812},[100,171743,472],{"class":471},[100,171745,35542],{"class":117},[100,171747,14017],{"class":258},[100,171749,153254],{"class":6812},[100,171751,472],{"class":471},[100,171753,465],{"class":117},[100,171755,809],{"class":258},[100,171757,171758],{"class":102,"line":659},[100,171759,570],{"emptyLinePlaceholder":569},[100,171761,171762],{"class":102,"line":665},[100,171763,570],{"emptyLinePlaceholder":569},[100,171765,171766,171768,171770],{"class":102,"line":670},[100,171767,160958],{"class":258},[100,171769,472],{"class":471},[100,171771,154284],{"class":258},[100,171773,171774,171777,171779,171781,171783,171785,171787,171789,171791,171793,171795,171797,171799],{"class":102,"line":675},[100,171775,171776],{"class":258},"students.append({",[100,171778,64233],{"class":110},[100,171780,52991],{"class":258},[100,171782,151130],{"class":110},[100,171784,14017],{"class":258},[100,171786,70678],{"class":110},[100,171788,52991],{"class":258},[100,171790,2417],{"class":117},[100,171792,14017],{"class":258},[100,171794,152714],{"class":110},[100,171796,52991],{"class":258},[100,171798,2755],{"class":117},[100,171800,166394],{"class":258},[100,171802,171803],{"class":102,"line":699},[100,171804,171805],{"class":258},"save_students(students)\n",[100,171807,171808,171810,171812,171815],{"class":102,"line":708},[100,171809,1195],{"class":117},[100,171811,713],{"class":258},[100,171813,171814],{"class":110},"\"保存成功\"",[100,171816,809],{"class":258},[14,171818,171820],{"id":171819},"_814-易错点","8.14 易错点",[26,171822,171823,171827,171833,171838,171845,171852],{},[29,171824,171825,170086],{},[32,171826,2561],{},[29,171828,171829,171830,233],{},"读写中文要指定 ",[32,171831,171832],{},"encoding=\"utf-8\"",[29,171834,171835,171836,233],{},"打开文件后要关闭，推荐使用 ",[32,171837,109075],{},[29,171839,171840,171841,171844],{},"读取大文件不要直接 ",[32,171842,171843],{},"read()"," 全部内容。",[29,171846,171847,171848,171851],{},"Windows 写 CSV 时建议加 ",[32,171849,171850],{},"newline=\"\"","，避免空行。",[29,171853,171854],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,171856,171858],{"id":171857},"_815-本章练习","8.15 本章练习",[26,171860,171861,171868,171873,171876,171879],{},[29,171862,171863,171864,171867],{},"写入一个 ",[32,171865,171866],{},"students.txt","，每行保存一个学生姓名。",[29,171869,52,171870,171872],{},[32,171871,171866],{}," 并输出所有学生。",[29,171874,171875],{},"把学生列表保存为 JSON 文件。",[29,171877,171878],{},"从 JSON 文件读取学生数据，计算平均分。",[29,171880,171881,171882,171885,171886,171889],{},"写一个日志函数 ",[32,171883,171884],{},"write_log(message)","，每次调用向 ",[32,171887,171888],{},"app.log"," 追加一行。",[1677,171891,171892],{},"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":79,"searchDepth":188,"depth":188,"links":171894},[171895,171896,171900,171901,171907,171908,171909,171910,171911,171912,171913,171914,171915,171916,171917],{"id":169406,"depth":188,"text":169407},{"id":169447,"depth":188,"text":169448,"children":171897},[171898,171899],{"id":169451,"depth":199,"text":169452},{"id":169485,"depth":199,"text":169486},{"id":169599,"depth":188,"text":169600},{"id":169692,"depth":188,"text":169693,"children":171902},[171903,171904,171905,171906],{"id":169696,"depth":199,"text":169697},{"id":169783,"depth":199,"text":169784},{"id":169853,"depth":199,"text":169854},{"id":169947,"depth":199,"text":169948},{"id":170017,"depth":188,"text":170018},{"id":170080,"depth":188,"text":170081},{"id":170241,"depth":188,"text":170242},{"id":170304,"depth":188,"text":170305},{"id":170420,"depth":188,"text":170421},{"id":170630,"depth":188,"text":170631},{"id":170942,"depth":188,"text":170943},{"id":171353,"depth":188,"text":171354},{"id":171571,"depth":188,"text":171572},{"id":171819,"depth":188,"text":171820},{"id":171857,"depth":188,"text":171858},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":169398,"description":24958},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":171924,"title":171925,"body":171926,"description":24958,"extension":1708,"meta":174112,"navigation":569,"path":174113,"seo":174114,"stem":174115,"__hash__":174116},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":171927,"toc":174079},[171928,171931,171935,171938,171941,172033,172035,172054,172059,172063,172066,172069,172098,172105,172108,172112,172115,172144,172146,172198,172204,172257,172261,172359,172362,172429,172433,172490,172492,172498,172502,172507,172513,172604,172609,172613,172616,172694,172697,172735,172739,172857,172860,172864,172867,172912,172915,172919,172924,172930,172980,172983,173014,173018,173022,173052,173056,173091,173095,173130,173170,173174,173190,173193,173197,173201,173280,173284,173325,173329,173384,173388,173422,173426,173456,173465,173472,173478,173535,173538,173546,173549,173553,173560,173563,173569,173572,173589,173594,173598,173604,173617,173620,173657,173660,173671,173674,173688,173691,173705,173709,173716,173749,173752,173754,173760,173763,173767,173769,173775,173780,173953,173957,174020,174024,174048,174052,174076],[10,171929,171925],{"id":171930},"_9-异常模块与包",[14,171932,171934],{"id":171933},"_91-什么是异常","9.1 什么是异常",[19,171936,171937],{},"异常是程序运行过程中出现的错误。",[19,171939,171940],{},"常见异常：",[319,171942,171943,171952],{},[322,171944,171945],{},[325,171946,171947,171950],{},[328,171948,171949],{},"异常",[328,171951,27444],{},[339,171953,171954,171964,171974,171983,171993,172003,172013,172023],{},[325,171955,171956,171961],{},[344,171957,171958],{},[32,171959,171960],{},"NameError",[344,171962,171963],{},"使用了未定义变量",[325,171965,171966,171971],{},[344,171967,171968],{},[32,171969,171970],{},"TypeError",[344,171972,171973],{},"类型不匹配",[325,171975,171976,171980],{},[344,171977,171978],{},[32,171979,156076],{},[344,171981,171982],{},"值不合法",[325,171984,171985,171990],{},[344,171986,171987],{},[32,171988,171989],{},"IndexError",[344,171991,171992],{},"列表索引越界",[325,171994,171995,172000],{},[344,171996,171997],{},[32,171998,171999],{},"KeyError",[344,172001,172002],{},"字典 key 不存在",[325,172004,172005,172010],{},[344,172006,172007],{},[32,172008,172009],{},"FileNotFoundError",[344,172011,172012],{},"文件不存在",[325,172014,172015,172020],{},[344,172016,172017],{},[32,172018,172019],{},"ZeroDivisionError",[344,172021,172022],{},"除数为 0",[325,172024,172025,172030],{},[344,172026,172027],{},[32,172028,172029],{},"ImportError",[344,172031,172032],{},"导入失败",[19,172034,16716],{},[73,172036,172038],{"className":249,"code":172037,"language":251,"meta":79,"style":79},"num = int(\"abc\")\n",[32,172039,172040],{"__ignoreMap":79},[100,172041,172042,172044,172046,172048,172050,172052],{"class":102,"line":103},[100,172043,157029],{"class":258},[100,172045,472],{"class":471},[100,172047,3993],{"class":117},[100,172049,713],{"class":258},[100,172051,157122],{"class":110},[100,172053,809],{"class":258},[19,172055,172056,172057,233],{},"会触发 ",[32,172058,156076],{},[14,172060,172062],{"id":172061},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,172064,172065],{},"如果不处理异常，程序会直接终止。",[19,172067,172068],{},"例如用户输入年龄：",[73,172070,172072],{"className":249,"code":172071,"language":251,"meta":79,"style":79},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[32,172073,172074,172092],{"__ignoreMap":79},[100,172075,172076,172078,172080,172082,172084,172086,172088,172090],{"class":102,"line":103},[100,172077,147788],{"class":258},[100,172079,472],{"class":471},[100,172081,3993],{"class":117},[100,172083,713],{"class":258},[100,172085,55375],{"class":117},[100,172087,713],{"class":258},[100,172089,153636],{"class":110},[100,172091,751],{"class":258},[100,172093,172094,172096],{"class":102,"line":188},[100,172095,1195],{"class":117},[100,172097,157003],{"class":258},[19,172099,172100,172101,172104],{},"用户输入 ",[32,172102,172103],{},"abc","，程序就会报错退出。",[19,172106,172107],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,172109,172111],{"id":172110},"_93-try-except","9.3 try except",[19,172113,172114],{},"基础语法：",[73,172116,172118],{"className":249,"code":172117,"language":251,"meta":79,"style":79},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[32,172119,172120,172127,172132,172139],{"__ignoreMap":79},[100,172121,172122,172125],{"class":102,"line":103},[100,172123,172124],{"class":471},"try",[100,172126,696],{"class":258},[100,172128,172129],{"class":102,"line":188},[100,172130,172131],{"class":258},"    可能出错的代码\n",[100,172133,172134,172137],{"class":102,"line":199},[100,172135,172136],{"class":471},"except",[100,172138,696],{"class":258},[100,172140,172141],{"class":102,"line":532},[100,172142,172143],{"class":258},"    出错后的处理代码\n",[19,172145,16716],{},[73,172147,172149],{"className":249,"code":172148,"language":251,"meta":79,"style":79},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[32,172150,172151,172157,172175,172181,172187],{"__ignoreMap":79},[100,172152,172153,172155],{"class":102,"line":103},[100,172154,172124],{"class":471},[100,172156,696],{"class":258},[100,172158,172159,172161,172163,172165,172167,172169,172171,172173],{"class":102,"line":188},[100,172160,153628],{"class":258},[100,172162,472],{"class":471},[100,172164,3993],{"class":117},[100,172166,713],{"class":258},[100,172168,55375],{"class":117},[100,172170,713],{"class":258},[100,172172,153636],{"class":110},[100,172174,751],{"class":258},[100,172176,172177,172179],{"class":102,"line":199},[100,172178,702],{"class":117},[100,172180,157003],{"class":258},[100,172182,172183,172185],{"class":102,"line":532},[100,172184,172136],{"class":471},[100,172186,696],{"class":258},[100,172188,172189,172191,172193,172196],{"class":102,"line":577},[100,172190,702],{"class":117},[100,172192,713],{"class":258},[100,172194,172195],{"class":110},"\"年龄必须是数字\"",[100,172197,809],{"class":258},[19,172199,172200,172201,172203],{},"不建议裸写 ",[32,172202,172136],{},"，最好指定异常类型。",[73,172205,172207],{"className":249,"code":172206,"language":251,"meta":79,"style":79},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[32,172208,172209,172215,172233,172239,172247],{"__ignoreMap":79},[100,172210,172211,172213],{"class":102,"line":103},[100,172212,172124],{"class":471},[100,172214,696],{"class":258},[100,172216,172217,172219,172221,172223,172225,172227,172229,172231],{"class":102,"line":188},[100,172218,153628],{"class":258},[100,172220,472],{"class":471},[100,172222,3993],{"class":117},[100,172224,713],{"class":258},[100,172226,55375],{"class":117},[100,172228,713],{"class":258},[100,172230,153636],{"class":110},[100,172232,751],{"class":258},[100,172234,172235,172237],{"class":102,"line":199},[100,172236,702],{"class":117},[100,172238,157003],{"class":258},[100,172240,172241,172243,172245],{"class":102,"line":532},[100,172242,172136],{"class":471},[100,172244,153468],{"class":117},[100,172246,696],{"class":258},[100,172248,172249,172251,172253,172255],{"class":102,"line":577},[100,172250,702],{"class":117},[100,172252,713],{"class":258},[100,172254,172195],{"class":110},[100,172256,809],{"class":258},[14,172258,172260],{"id":172259},"_94-捕获多个异常","9.4 捕获多个异常",[73,172262,172264],{"className":249,"code":172263,"language":251,"meta":79,"style":79},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[32,172265,172266,172272,172293,172313,172320,172328,172339,172348],{"__ignoreMap":79},[100,172267,172268,172270],{"class":102,"line":103},[100,172269,172124],{"class":471},[100,172271,696],{"class":258},[100,172273,172274,172277,172279,172281,172283,172285,172287,172289,172291],{"class":102,"line":188},[100,172275,172276],{"class":258},"    nums ",[100,172278,472],{"class":471},[100,172280,53780],{"class":258},[100,172282,1985],{"class":117},[100,172284,14017],{"class":258},[100,172286,465],{"class":117},[100,172288,14017],{"class":258},[100,172290,1849],{"class":117},[100,172292,34802],{"class":258},[100,172294,172295,172298,172300,172302,172304,172306,172308,172311],{"class":102,"line":199},[100,172296,172297],{"class":258},"    index ",[100,172299,472],{"class":471},[100,172301,3993],{"class":117},[100,172303,713],{"class":258},[100,172305,55375],{"class":117},[100,172307,713],{"class":258},[100,172309,172310],{"class":110},"\"请输入索引:\"",[100,172312,751],{"class":258},[100,172314,172315,172317],{"class":102,"line":532},[100,172316,702],{"class":117},[100,172318,172319],{"class":258},"(nums[index])\n",[100,172321,172322,172324,172326],{"class":102,"line":577},[100,172323,172136],{"class":471},[100,172325,153468],{"class":117},[100,172327,696],{"class":258},[100,172329,172330,172332,172334,172337],{"class":102,"line":589},[100,172331,702],{"class":117},[100,172333,713],{"class":258},[100,172335,172336],{"class":110},"\"索引必须是整数\"",[100,172338,809],{"class":258},[100,172340,172341,172343,172346],{"class":102,"line":595},[100,172342,172136],{"class":471},[100,172344,172345],{"class":117}," IndexError",[100,172347,696],{"class":258},[100,172349,172350,172352,172354,172357],{"class":102,"line":601},[100,172351,702],{"class":117},[100,172353,713],{"class":258},[100,172355,172356],{"class":110},"\"索引越界\"",[100,172358,809],{"class":258},[19,172360,172361],{},"多个异常使用相同处理逻辑：",[73,172363,172365],{"className":249,"code":172364,"language":251,"meta":79,"style":79},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[32,172366,172367,172373,172391,172404,172418],{"__ignoreMap":79},[100,172368,172369,172371],{"class":102,"line":103},[100,172370,172124],{"class":471},[100,172372,696],{"class":258},[100,172374,172375,172377,172379,172381,172383,172385,172387,172389],{"class":102,"line":188},[100,172376,47147],{"class":258},[100,172378,472],{"class":471},[100,172380,3993],{"class":117},[100,172382,713],{"class":258},[100,172384,55375],{"class":117},[100,172386,713],{"class":258},[100,172388,157038],{"class":110},[100,172390,751],{"class":258},[100,172392,172393,172395,172397,172399,172401],{"class":102,"line":199},[100,172394,702],{"class":117},[100,172396,713],{"class":258},[100,172398,2213],{"class":117},[100,172400,157288],{"class":471},[100,172402,172403],{"class":258}," num)\n",[100,172405,172406,172408,172410,172412,172414,172416],{"class":102,"line":532},[100,172407,172136],{"class":471},[100,172409,3283],{"class":258},[100,172411,156076],{"class":117},[100,172413,14017],{"class":258},[100,172415,172019],{"class":117},[100,172417,865],{"class":258},[100,172419,172420,172422,172424,172427],{"class":102,"line":577},[100,172421,702],{"class":117},[100,172423,713],{"class":258},[100,172425,172426],{"class":110},"\"输入不合法\"",[100,172428,809],{"class":258},[14,172430,172432],{"id":172431},"_95-获取异常信息","9.5 获取异常信息",[73,172434,172436],{"className":249,"code":172435,"language":251,"meta":79,"style":79},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[32,172437,172438,172444,172458,172469],{"__ignoreMap":79},[100,172439,172440,172442],{"class":102,"line":103},[100,172441,172124],{"class":471},[100,172443,696],{"class":258},[100,172445,172446,172448,172450,172452,172454,172456],{"class":102,"line":188},[100,172447,47147],{"class":258},[100,172449,472],{"class":471},[100,172451,3993],{"class":117},[100,172453,713],{"class":258},[100,172455,157122],{"class":110},[100,172457,809],{"class":258},[100,172459,172460,172462,172464,172466],{"class":102,"line":199},[100,172461,172136],{"class":471},[100,172463,153468],{"class":117},[100,172465,66158],{"class":471},[100,172467,172468],{"class":258}," e:\n",[100,172470,172471,172473,172475,172477,172480,172482,172484,172486,172488],{"class":102,"line":532},[100,172472,702],{"class":117},[100,172474,713],{"class":258},[100,172476,1830],{"class":471},[100,172478,172479],{"class":110},"\"出错了:",[100,172481,2662],{"class":117},[100,172483,1852],{"class":258},[100,172485,2712],{"class":117},[100,172487,2019],{"class":110},[100,172489,809],{"class":258},[19,172491,147699],{},[73,172493,172496],{"className":172494,"code":172495,"language":78,"meta":79},[76],"出错了:invalid literal for int() with base 10: 'abc'\n",[32,172497,172495],{"__ignoreMap":79},[14,172499,172501],{"id":172500},"_96-else和finally","9.6 else和finally",[19,172503,172504,172506],{},[32,172505,3322],{},"：没有异常时执行。",[19,172508,172509,172512],{},[32,172510,172511],{},"finally","：无论是否异常都会执行。",[73,172514,172516],{"className":249,"code":172515,"language":251,"meta":79,"style":79},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[32,172517,172518,172524,172542,172550,172560,172566,172587,172593],{"__ignoreMap":79},[100,172519,172520,172522],{"class":102,"line":103},[100,172521,172124],{"class":471},[100,172523,696],{"class":258},[100,172525,172526,172528,172530,172532,172534,172536,172538,172540],{"class":102,"line":188},[100,172527,47147],{"class":258},[100,172529,472],{"class":471},[100,172531,3993],{"class":117},[100,172533,713],{"class":258},[100,172535,55375],{"class":117},[100,172537,713],{"class":258},[100,172539,157038],{"class":110},[100,172541,751],{"class":258},[100,172543,172544,172546,172548],{"class":102,"line":199},[100,172545,172136],{"class":471},[100,172547,153468],{"class":117},[100,172549,696],{"class":258},[100,172551,172552,172554,172556,172558],{"class":102,"line":532},[100,172553,702],{"class":117},[100,172555,713],{"class":258},[100,172557,154456],{"class":110},[100,172559,809],{"class":258},[100,172561,172562,172564],{"class":102,"line":577},[100,172563,3322],{"class":471},[100,172565,696],{"class":258},[100,172567,172568,172570,172572,172574,172577,172579,172581,172583,172585],{"class":102,"line":589},[100,172569,702],{"class":117},[100,172571,713],{"class":258},[100,172573,1830],{"class":471},[100,172575,172576],{"class":110},"\"输入正确:",[100,172578,2662],{"class":117},[100,172580,3290],{"class":258},[100,172582,2712],{"class":117},[100,172584,2019],{"class":110},[100,172586,809],{"class":258},[100,172588,172589,172591],{"class":102,"line":595},[100,172590,172511],{"class":471},[100,172592,696],{"class":258},[100,172594,172595,172597,172599,172602],{"class":102,"line":601},[100,172596,702],{"class":117},[100,172598,713],{"class":258},[100,172600,172601],{"class":110},"\"程序结束\"",[100,172603,809],{"class":258},[19,172605,172606,172608],{},[32,172607,172511],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,172610,172612],{"id":172611},"_97-抛出异常","9.7 抛出异常",[19,172614,172615],{},"程序可以主动抛出异常。",[73,172617,172619],{"className":249,"code":172618,"language":251,"meta":79,"style":79},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[32,172620,172621,172630,172642,172655,172675,172679,172683],{"__ignoreMap":79},[100,172622,172623,172625,172628],{"class":102,"line":103},[100,172624,678],{"class":471},[100,172626,172627],{"class":106}," set_age",[100,172629,162657],{"class":258},[100,172631,172632,172634,172636,172638,172640],{"class":102,"line":188},[100,172633,4702],{"class":471},[100,172635,17288],{"class":258},[100,172637,2676],{"class":471},[100,172639,5692],{"class":117},[100,172641,696],{"class":258},[100,172643,172644,172646,172648,172650,172653],{"class":102,"line":199},[100,172645,104906],{"class":471},[100,172647,153468],{"class":117},[100,172649,713],{"class":258},[100,172651,172652],{"class":110},"\"年龄不能为负数\"",[100,172654,809],{"class":258},[100,172656,172657,172659,172661,172663,172665,172667,172669,172671,172673],{"class":102,"line":532},[100,172658,702],{"class":117},[100,172660,713],{"class":258},[100,172662,1830],{"class":471},[100,172664,163225],{"class":110},[100,172666,2662],{"class":117},[100,172668,71775],{"class":258},[100,172670,2712],{"class":117},[100,172672,2019],{"class":110},[100,172674,809],{"class":258},[100,172676,172677],{"class":102,"line":577},[100,172678,570],{"emptyLinePlaceholder":569},[100,172680,172681],{"class":102,"line":589},[100,172682,570],{"emptyLinePlaceholder":569},[100,172684,172685,172688,172690,172692],{"class":102,"line":595},[100,172686,172687],{"class":258},"set_age(",[100,172689,2299],{"class":471},[100,172691,1985],{"class":117},[100,172693,809],{"class":258},[19,172695,172696],{},"调用者可以捕获：",[73,172698,172700],{"className":249,"code":172699,"language":251,"meta":79,"style":79},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[32,172701,172702,172708,172719,172729],{"__ignoreMap":79},[100,172703,172704,172706],{"class":102,"line":103},[100,172705,172124],{"class":471},[100,172707,696],{"class":258},[100,172709,172710,172713,172715,172717],{"class":102,"line":188},[100,172711,172712],{"class":258},"    set_age(",[100,172714,2299],{"class":471},[100,172716,1985],{"class":117},[100,172718,809],{"class":258},[100,172720,172721,172723,172725,172727],{"class":102,"line":199},[100,172722,172136],{"class":471},[100,172724,153468],{"class":117},[100,172726,66158],{"class":471},[100,172728,172468],{"class":258},[100,172730,172731,172733],{"class":102,"line":532},[100,172732,702],{"class":117},[100,172734,68553],{"class":258},[14,172736,172738],{"id":172737},"_98-自定义异常","9.8 自定义异常",[73,172740,172742],{"className":249,"code":172741,"language":251,"meta":79,"style":79},"class BalanceNotEnoughError(Exception):\n    pass\n\n\ndef withdraw(balance, money):\n    if money > balance:\n        raise BalanceNotEnoughError(\"余额不足\")\n    return balance - money\n\n\ntry:\n    balance = withdraw(100, 200)\nexcept BalanceNotEnoughError as e:\n    print(e)\n",[32,172743,172744,172758,172762,172766,172770,172778,172788,172799,172809,172813,172817,172823,172840,172851],{"__ignoreMap":79},[100,172745,172746,172748,172751,172753,172756],{"class":102,"line":103},[100,172747,16275],{"class":471},[100,172749,172750],{"class":106}," BalanceNotEnoughError",[100,172752,713],{"class":258},[100,172754,172755],{"class":117},"Exception",[100,172757,865],{"class":258},[100,172759,172760],{"class":102,"line":188},[100,172761,150779],{"class":471},[100,172763,172764],{"class":102,"line":199},[100,172765,570],{"emptyLinePlaceholder":569},[100,172767,172768],{"class":102,"line":532},[100,172769,570],{"emptyLinePlaceholder":569},[100,172771,172772,172774,172776],{"class":102,"line":577},[100,172773,678],{"class":471},[100,172775,151428],{"class":106},[100,172777,164054],{"class":258},[100,172779,172780,172782,172784,172786],{"class":102,"line":589},[100,172781,4702],{"class":471},[100,172783,151384],{"class":258},[100,172785,2726],{"class":471},[100,172787,163831],{"class":258},[100,172789,172790,172792,172795,172797],{"class":102,"line":595},[100,172791,104906],{"class":471},[100,172793,172794],{"class":258}," BalanceNotEnoughError(",[100,172796,151479],{"class":110},[100,172798,809],{"class":258},[100,172800,172801,172803,172805,172807],{"class":102,"line":601},[100,172802,5689],{"class":471},[100,172804,164061],{"class":258},[100,172806,2299],{"class":471},[100,172808,151417],{"class":258},[100,172810,172811],{"class":102,"line":606},[100,172812,570],{"emptyLinePlaceholder":569},[100,172814,172815],{"class":102,"line":612},[100,172816,570],{"emptyLinePlaceholder":569},[100,172818,172819,172821],{"class":102,"line":618},[100,172820,172124],{"class":471},[100,172822,696],{"class":258},[100,172824,172825,172827,172829,172832,172834,172836,172838],{"class":102,"line":623},[100,172826,163732],{"class":258},[100,172828,472],{"class":471},[100,172830,172831],{"class":258}," withdraw(",[100,172833,2078],{"class":117},[100,172835,14017],{"class":258},[100,172837,3343],{"class":117},[100,172839,809],{"class":258},[100,172841,172842,172844,172847,172849],{"class":102,"line":629},[100,172843,172136],{"class":471},[100,172845,172846],{"class":258}," BalanceNotEnoughError ",[100,172848,561],{"class":471},[100,172850,172468],{"class":258},[100,172852,172853,172855],{"class":102,"line":635},[100,172854,702],{"class":117},[100,172856,68553],{"class":258},[19,172858,172859],{},"入门阶段大多数情况使用内置异常即可。",[14,172861,172863],{"id":172862},"_99-traceback","9.9 traceback",[19,172865,172866],{},"调试时可以输出完整异常堆栈。",[73,172868,172870],{"className":249,"code":172869,"language":251,"meta":79,"style":79},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[32,172871,172872,172879,172883,172889,172899,172907],{"__ignoreMap":79},[100,172873,172874,172876],{"class":102,"line":103},[100,172875,548],{"class":471},[100,172877,172878],{"class":258}," traceback\n",[100,172880,172881],{"class":102,"line":188},[100,172882,570],{"emptyLinePlaceholder":569},[100,172884,172885,172887],{"class":102,"line":199},[100,172886,172124],{"class":471},[100,172888,696],{"class":258},[100,172890,172891,172893,172895,172897],{"class":102,"line":532},[100,172892,3596],{"class":117},[100,172894,713],{"class":258},[100,172896,157122],{"class":110},[100,172898,809],{"class":258},[100,172900,172901,172903,172905],{"class":102,"line":577},[100,172902,172136],{"class":471},[100,172904,153468],{"class":117},[100,172906,696],{"class":258},[100,172908,172909],{"class":102,"line":589},[100,172910,172911],{"class":258},"    traceback.print_exc()\n",[19,172913,172914],{},"日志系统中常把异常堆栈记录到文件。",[14,172916,172918],{"id":172917},"_910-什么是模块","9.10 什么是模块",[19,172920,172921,172922,127225],{},"模块就是一个 ",[32,172923,147594],{},[19,172925,172926,172927,1646],{},"例如创建 ",[32,172928,172929],{},"my_math.py",[73,172931,172933],{"className":249,"code":172932,"language":251,"meta":79,"style":79},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[32,172934,172935,172943,172953,172957,172961,172970],{"__ignoreMap":79},[100,172936,172937,172939,172941],{"class":102,"line":103},[100,172938,678],{"class":471},[100,172940,6805],{"class":106},[100,172942,152335],{"class":258},[100,172944,172945,172947,172949,172951],{"class":102,"line":188},[100,172946,5689],{"class":471},[100,172948,12451],{"class":258},[100,172950,2248],{"class":471},[100,172952,152346],{"class":258},[100,172954,172955],{"class":102,"line":199},[100,172956,570],{"emptyLinePlaceholder":569},[100,172958,172959],{"class":102,"line":532},[100,172960,570],{"emptyLinePlaceholder":569},[100,172962,172963,172965,172968],{"class":102,"line":577},[100,172964,678],{"class":471},[100,172966,172967],{"class":106}," sub",[100,172969,152335],{"class":258},[100,172971,172972,172974,172976,172978],{"class":102,"line":589},[100,172973,5689],{"class":471},[100,172975,12451],{"class":258},[100,172977,2299],{"class":471},[100,172979,152346],{"class":258},[19,172981,172982],{},"在另一个文件中导入：",[73,172984,172986],{"className":249,"code":172985,"language":251,"meta":79,"style":79},"import my_math\n\nprint(my_math.add(1, 2))\n",[32,172987,172988,172995,172999],{"__ignoreMap":79},[100,172989,172990,172992],{"class":102,"line":103},[100,172991,548],{"class":471},[100,172993,172994],{"class":258}," my_math\n",[100,172996,172997],{"class":102,"line":188},[100,172998,570],{"emptyLinePlaceholder":569},[100,173000,173001,173003,173006,173008,173010,173012],{"class":102,"line":199},[100,173002,1195],{"class":117},[100,173004,173005],{"class":258},"(my_math.add(",[100,173007,1985],{"class":117},[100,173009,14017],{"class":258},[100,173011,465],{"class":117},[100,173013,751],{"class":258},[14,173015,173017],{"id":173016},"_911-import导入","9.11 import导入",[305,173019,173021],{"id":173020},"_9111-导入模块","9.11.1 导入模块",[73,173023,173025],{"className":249,"code":173024,"language":251,"meta":79,"style":79},"import random\n\nprint(random.randint(1, 10))\n",[32,173026,173027,173033,173037],{"__ignoreMap":79},[100,173028,173029,173031],{"class":102,"line":103},[100,173030,548],{"class":471},[100,173032,46882],{"class":258},[100,173034,173035],{"class":102,"line":188},[100,173036,570],{"emptyLinePlaceholder":569},[100,173038,173039,173041,173044,173046,173048,173050],{"class":102,"line":199},[100,173040,1195],{"class":117},[100,173042,173043],{"class":258},"(random.randint(",[100,173045,1985],{"class":117},[100,173047,14017],{"class":258},[100,173049,2213],{"class":117},[100,173051,751],{"class":258},[305,173053,173055],{"id":173054},"_9112-导入指定内容","9.11.2 导入指定内容",[73,173057,173059],{"className":249,"code":173058,"language":251,"meta":79,"style":79},"from random import randint\n\nprint(randint(1, 10))\n",[32,173060,173061,173072,173076],{"__ignoreMap":79},[100,173062,173063,173065,173067,173069],{"class":102,"line":103},[100,173064,32301],{"class":471},[100,173066,59350],{"class":258},[100,173068,548],{"class":471},[100,173070,173071],{"class":258}," randint\n",[100,173073,173074],{"class":102,"line":188},[100,173075,570],{"emptyLinePlaceholder":569},[100,173077,173078,173080,173083,173085,173087,173089],{"class":102,"line":199},[100,173079,1195],{"class":117},[100,173081,173082],{"class":258},"(randint(",[100,173084,1985],{"class":117},[100,173086,14017],{"class":258},[100,173088,2213],{"class":117},[100,173090,751],{"class":258},[305,173092,173094],{"id":173093},"_9113-起别名","9.11.3 起别名",[73,173096,173098],{"className":249,"code":173097,"language":251,"meta":79,"style":79},"import random as rd\n\nprint(rd.randint(1, 10))\n",[32,173099,173100,173111,173115],{"__ignoreMap":79},[100,173101,173102,173104,173106,173108],{"class":102,"line":103},[100,173103,548],{"class":471},[100,173105,59350],{"class":258},[100,173107,561],{"class":471},[100,173109,173110],{"class":258}," rd\n",[100,173112,173113],{"class":102,"line":188},[100,173114,570],{"emptyLinePlaceholder":569},[100,173116,173117,173119,173122,173124,173126,173128],{"class":102,"line":199},[100,173118,1195],{"class":117},[100,173120,173121],{"class":258},"(rd.randint(",[100,173123,1985],{"class":117},[100,173125,14017],{"class":258},[100,173127,2213],{"class":117},[100,173129,751],{"class":258},[73,173131,173133],{"className":249,"code":173132,"language":251,"meta":79,"style":79},"from random import randint as rint\n\nprint(rint(1, 10))\n",[32,173134,173135,173151,173155],{"__ignoreMap":79},[100,173136,173137,173139,173141,173143,173146,173148],{"class":102,"line":103},[100,173138,32301],{"class":471},[100,173140,59350],{"class":258},[100,173142,548],{"class":471},[100,173144,173145],{"class":258}," randint ",[100,173147,561],{"class":471},[100,173149,173150],{"class":258}," rint\n",[100,173152,173153],{"class":102,"line":188},[100,173154,570],{"emptyLinePlaceholder":569},[100,173156,173157,173159,173162,173164,173166,173168],{"class":102,"line":199},[100,173158,1195],{"class":117},[100,173160,173161],{"class":258},"(rint(",[100,173163,1985],{"class":117},[100,173165,14017],{"class":258},[100,173167,2213],{"class":117},[100,173169,751],{"class":258},[305,173171,173173],{"id":173172},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[73,173175,173177],{"className":249,"code":173176,"language":251,"meta":79,"style":79},"from random import *\n",[32,173178,173179],{"__ignoreMap":79},[100,173180,173181,173183,173185,173187],{"class":102,"line":103},[100,173182,32301],{"class":471},[100,173184,59350],{"class":258},[100,173186,548],{"class":471},[100,173188,173189],{"class":471}," *\n",[19,173191,173192],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,173194,173196],{"id":173195},"_912-常用内置模块","9.12 常用内置模块",[305,173198,173200],{"id":173199},"_9121-random","9.12.1 random",[73,173202,173204],{"className":249,"code":173203,"language":251,"meta":79,"style":79},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[32,173205,173206,173212,173216,173230,173249],{"__ignoreMap":79},[100,173207,173208,173210],{"class":102,"line":103},[100,173209,548],{"class":471},[100,173211,46882],{"class":258},[100,173213,173214],{"class":102,"line":188},[100,173215,570],{"emptyLinePlaceholder":569},[100,173217,173218,173220,173222,173224,173226,173228],{"class":102,"line":199},[100,173219,1195],{"class":117},[100,173221,173043],{"class":258},[100,173223,1985],{"class":117},[100,173225,14017],{"class":258},[100,173227,2213],{"class":117},[100,173229,751],{"class":258},[100,173231,173232,173234,173237,173239,173241,173243,173245,173247],{"class":102,"line":532},[100,173233,1195],{"class":117},[100,173235,173236],{"class":258},"(random.choice([",[100,173238,151130],{"class":110},[100,173240,14017],{"class":258},[100,173242,152178],{"class":110},[100,173244,14017],{"class":258},[100,173246,160973],{"class":110},[100,173248,34699],{"class":258},[100,173250,173251,173253,173256,173258,173260,173262,173264,173266,173268,173270,173272,173274,173276,173278],{"class":102,"line":577},[100,173252,1195],{"class":117},[100,173254,173255],{"class":258},"(random.sample([",[100,173257,1985],{"class":117},[100,173259,14017],{"class":258},[100,173261,465],{"class":117},[100,173263,14017],{"class":258},[100,173265,1849],{"class":117},[100,173267,14017],{"class":258},[100,173269,748],{"class":117},[100,173271,14017],{"class":258},[100,173273,2086],{"class":117},[100,173275,113444],{"class":258},[100,173277,465],{"class":117},[100,173279,751],{"class":258},[305,173281,173283],{"id":173282},"_9122-time","9.12.2 time",[73,173285,173287],{"className":249,"code":173286,"language":251,"meta":79,"style":79},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[32,173288,173289,173295,173299,173306,173314],{"__ignoreMap":79},[100,173290,173291,173293],{"class":102,"line":103},[100,173292,548],{"class":471},[100,173294,33387],{"class":258},[100,173296,173297],{"class":102,"line":188},[100,173298,570],{"emptyLinePlaceholder":569},[100,173300,173301,173303],{"class":102,"line":199},[100,173302,1195],{"class":117},[100,173304,173305],{"class":258},"(time.time())\n",[100,173307,173308,173310,173312],{"class":102,"line":532},[100,173309,96623],{"class":258},[100,173311,1985],{"class":117},[100,173313,809],{"class":258},[100,173315,173316,173318,173320,173323],{"class":102,"line":577},[100,173317,1195],{"class":117},[100,173319,713],{"class":258},[100,173321,173322],{"class":110},"\"1秒后执行\"",[100,173324,809],{"class":258},[305,173326,173328],{"id":173327},"_9123-datetime","9.12.3 datetime",[73,173330,173332],{"className":249,"code":173331,"language":251,"meta":79,"style":79},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[32,173333,173334,173346,173350,173360,173367],{"__ignoreMap":79},[100,173335,173336,173338,173341,173343],{"class":102,"line":103},[100,173337,32301],{"class":471},[100,173339,173340],{"class":258}," datetime ",[100,173342,548],{"class":471},[100,173344,173345],{"class":258}," datetime\n",[100,173347,173348],{"class":102,"line":188},[100,173349,570],{"emptyLinePlaceholder":569},[100,173351,173352,173355,173357],{"class":102,"line":199},[100,173353,173354],{"class":258},"now ",[100,173356,472],{"class":471},[100,173358,173359],{"class":258}," datetime.now()\n",[100,173361,173362,173364],{"class":102,"line":532},[100,173363,1195],{"class":117},[100,173365,173366],{"class":258},"(now)\n",[100,173368,173369,173371,173374,173377,173379,173382],{"class":102,"line":577},[100,173370,1195],{"class":117},[100,173372,173373],{"class":258},"(now.strftime(",[100,173375,173376],{"class":110},"\"%Y-%m-",[100,173378,157933],{"class":117},[100,173380,173381],{"class":110}," %H:%M:%S\"",[100,173383,751],{"class":258},[305,173385,173387],{"id":173386},"_9124-os","9.12.4 os",[73,173389,173391],{"className":249,"code":173390,"language":251,"meta":79,"style":79},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[32,173392,173393,173399,173403,173410],{"__ignoreMap":79},[100,173394,173395,173397],{"class":102,"line":103},[100,173396,548],{"class":471},[100,173398,46859],{"class":258},[100,173400,173401],{"class":102,"line":188},[100,173402,570],{"emptyLinePlaceholder":569},[100,173404,173405,173407],{"class":102,"line":199},[100,173406,1195],{"class":117},[100,173408,173409],{"class":258},"(os.getcwd())\n",[100,173411,173412,173414,173417,173420],{"class":102,"line":532},[100,173413,1195],{"class":117},[100,173415,173416],{"class":258},"(os.listdir(",[100,173418,173419],{"class":110},"\".\"",[100,173421,751],{"class":258},[305,173423,173425],{"id":173424},"_9125-sys","9.12.5 sys",[73,173427,173429],{"className":249,"code":173428,"language":251,"meta":79,"style":79},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[32,173430,173431,173438,173442,173449],{"__ignoreMap":79},[100,173432,173433,173435],{"class":102,"line":103},[100,173434,548],{"class":471},[100,173436,173437],{"class":258}," sys\n",[100,173439,173440],{"class":102,"line":188},[100,173441,570],{"emptyLinePlaceholder":569},[100,173443,173444,173446],{"class":102,"line":199},[100,173445,1195],{"class":117},[100,173447,173448],{"class":258},"(sys.version)\n",[100,173450,173451,173453],{"class":102,"line":532},[100,173452,1195],{"class":117},[100,173454,173455],{"class":258},"(sys.path)\n",[14,173457,173459,173460,173462,173463,2019],{"id":173458},"_913-if-name-main","9.13 if ",[1921,173461,81364],{}," == \"",[1921,173464,103549],{},[19,173466,173467,173468,173471],{},"模块被直接运行和被导入时，",[32,173469,173470],{},"__name__"," 的值不同。",[19,173473,173474,173475,1646],{},"创建 ",[32,173476,173477],{},"my_module.py",[73,173479,173481],{"className":249,"code":173480,"language":251,"meta":79,"style":79},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[32,173482,173483,173491,173501,173505,173509,173521],{"__ignoreMap":79},[100,173484,173485,173487,173489],{"class":102,"line":103},[100,173486,678],{"class":471},[100,173488,6805],{"class":106},[100,173490,152335],{"class":258},[100,173492,173493,173495,173497,173499],{"class":102,"line":188},[100,173494,5689],{"class":471},[100,173496,12451],{"class":258},[100,173498,2248],{"class":471},[100,173500,152346],{"class":258},[100,173502,173503],{"class":102,"line":199},[100,173504,570],{"emptyLinePlaceholder":569},[100,173506,173507],{"class":102,"line":532},[100,173508,570],{"emptyLinePlaceholder":569},[100,173510,173511,173513,173515,173517,173519],{"class":102,"line":577},[100,173512,958],{"class":471},[100,173514,961],{"class":117},[100,173516,964],{"class":471},[100,173518,967],{"class":110},[100,173520,696],{"class":258},[100,173522,173523,173525,173527,173529,173531,173533],{"class":102,"line":589},[100,173524,702],{"class":117},[100,173526,167842],{"class":258},[100,173528,1985],{"class":117},[100,173530,14017],{"class":258},[100,173532,465],{"class":117},[100,173534,751],{"class":258},[19,173536,173537],{},"作用：",[26,173539,173540,173543],{},[29,173541,173542],{},"直接运行该文件时，执行测试代码。",[29,173544,173545],{},"被其他文件导入时，不执行测试代码。",[19,173547,173548],{},"这是写模块时很常用的习惯。",[14,173550,173552],{"id":173551},"_914-包","9.14 包",[19,173554,173555,173556,173559],{},"包是包含 ",[32,173557,173558],{},"__init__.py"," 的目录，用于组织多个模块。",[19,173561,173562],{},"目录结构：",[73,173564,173567],{"className":173565,"code":173566,"language":78,"meta":79},[76],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[32,173568,173566],{"__ignoreMap":79},[19,173570,173571],{},"导入：",[73,173573,173575],{"className":249,"code":173574,"language":251,"meta":79,"style":79},"from utils.file_utils import read_file\n",[32,173576,173577],{"__ignoreMap":79},[100,173578,173579,173581,173584,173586],{"class":102,"line":103},[100,173580,32301],{"class":471},[100,173582,173583],{"class":258}," utils.file_utils ",[100,173585,548],{"class":471},[100,173587,173588],{"class":258}," read_file\n",[19,173590,173591,173593],{},[32,173592,173558],{}," 可以为空，也可以写包初始化逻辑。",[14,173595,173597],{"id":173596},"_915-第三方包","9.15 第三方包",[19,173599,173600,173601,173603],{},"第三方包通过 ",[32,173602,146],{}," 安装。",[73,173605,173607],{"className":94,"code":173606,"language":96,"meta":79,"style":79},"pip install requests\n",[32,173608,173609],{"__ignoreMap":79},[100,173610,173611,173613,173615],{"class":102,"line":103},[100,173612,146],{"class":106},[100,173614,114],{"class":110},[100,173616,147340],{"class":110},[19,173618,173619],{},"使用：",[73,173621,173623],{"className":249,"code":173622,"language":251,"meta":79,"style":79},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[32,173624,173625,173631,173635,173650],{"__ignoreMap":79},[100,173626,173627,173629],{"class":102,"line":103},[100,173628,548],{"class":471},[100,173630,147340],{"class":258},[100,173632,173633],{"class":102,"line":188},[100,173634,570],{"emptyLinePlaceholder":569},[100,173636,173637,173640,173642,173645,173648],{"class":102,"line":199},[100,173638,173639],{"class":258},"response ",[100,173641,472],{"class":471},[100,173643,173644],{"class":258}," requests.get(",[100,173646,173647],{"class":110},"\"https:\u002F\u002Fwww.example.com\"",[100,173649,809],{"class":258},[100,173651,173652,173654],{"class":102,"line":532},[100,173653,1195],{"class":117},[100,173655,173656],{"class":258},"(response.status_code)\n",[19,173658,173659],{},"查看已安装包：",[73,173661,173663],{"className":94,"code":173662,"language":96,"meta":79,"style":79},"pip list\n",[32,173664,173665],{"__ignoreMap":79},[100,173666,173667,173669],{"class":102,"line":103},[100,173668,146],{"class":106},[100,173670,120197],{"class":110},[19,173672,173673],{},"导出项目依赖：",[73,173675,173676],{"className":94,"code":147535,"language":96,"meta":79,"style":79},[32,173677,173678],{"__ignoreMap":79},[100,173679,173680,173682,173684,173686],{"class":102,"line":103},[100,173681,146],{"class":106},[100,173683,147544],{"class":110},[100,173685,27796],{"class":471},[100,173687,147549],{"class":110},[19,173689,173690],{},"安装项目依赖：",[73,173692,173693],{"className":94,"code":147555,"language":96,"meta":79,"style":79},[32,173694,173695],{"__ignoreMap":79},[100,173696,173697,173699,173701,173703],{"class":102,"line":103},[100,173698,146],{"class":106},[100,173700,114],{"class":110},[100,173702,120881],{"class":117},[100,173704,147549],{"class":110},[14,173706,173708],{"id":173707},"_916-模块搜索路径","9.16 模块搜索路径",[19,173710,173711,173712,173715],{},"Python 导入模块时会在 ",[32,173713,173714],{},"sys.path"," 中查找。",[73,173717,173719],{"className":249,"code":173718,"language":251,"meta":79,"style":79},"import sys\n\nfor path in sys.path:\n    print(path)\n",[32,173720,173721,173727,173731,173743],{"__ignoreMap":79},[100,173722,173723,173725],{"class":102,"line":103},[100,173724,548],{"class":471},[100,173726,173437],{"class":258},[100,173728,173729],{"class":102,"line":188},[100,173730,570],{"emptyLinePlaceholder":569},[100,173732,173733,173735,173738,173740],{"class":102,"line":199},[100,173734,1051],{"class":471},[100,173736,173737],{"class":258}," path ",[100,173739,854],{"class":471},[100,173741,173742],{"class":258}," sys.path:\n",[100,173744,173745,173747],{"class":102,"line":532},[100,173746,702],{"class":117},[100,173748,170471],{"class":258},[19,173750,173751],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,173753,158865],{},[73,173755,173758],{"className":173756,"code":173757,"language":78,"meta":79},[76],"random.py\njson.py\ntime.py\n",[32,173759,173757],{"__ignoreMap":79},[19,173761,173762],{},"这些文件名可能导致导入异常。",[14,173764,173766],{"id":173765},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,173768,173562],{},[73,173770,173773],{"className":173771,"code":173772,"language":78,"meta":79},[76],"student_system\u002F\n  main.py\n  services\u002F\n    __init__.py\n    student_service.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n",[32,173774,173772],{"__ignoreMap":79},[19,173776,173777,1646],{},[32,173778,173779],{},"utils\u002Ffile_utils.py",[73,173781,173783],{"className":249,"code":173782,"language":251,"meta":79,"style":79},"import json\nfrom pathlib import Path\n\n\ndef read_json(path):\n    path = Path(path)\n    if not path.exists():\n        return []\n\n    with open(path, \"r\", encoding=\"utf-8\") as file:\n        return json.load(file)\n\n\ndef write_json(path, data):\n    with open(path, \"w\", encoding=\"utf-8\") as file:\n        json.dump(data, file, ensure_ascii=False, indent=2)\n",[32,173784,173785,173791,173801,173805,173809,173819,173829,173837,173843,173847,173874,173884,173888,173892,173902,173928],{"__ignoreMap":79},[100,173786,173787,173789],{"class":102,"line":103},[100,173788,548],{"class":471},[100,173790,148333],{"class":258},[100,173792,173793,173795,173797,173799],{"class":102,"line":188},[100,173794,32301],{"class":471},[100,173796,109553],{"class":258},[100,173798,548],{"class":471},[100,173800,109558],{"class":258},[100,173802,173803],{"class":102,"line":199},[100,173804,570],{"emptyLinePlaceholder":569},[100,173806,173807],{"class":102,"line":532},[100,173808,570],{"emptyLinePlaceholder":569},[100,173810,173811,173813,173816],{"class":102,"line":577},[100,173812,678],{"class":471},[100,173814,173815],{"class":106}," read_json",[100,173817,173818],{"class":258},"(path):\n",[100,173820,173821,173824,173826],{"class":102,"line":589},[100,173822,173823],{"class":258},"    path ",[100,173825,472],{"class":471},[100,173827,173828],{"class":258}," Path(path)\n",[100,173830,173831,173833,173835],{"class":102,"line":595},[100,173832,4702],{"class":471},[100,173834,40484],{"class":471},[100,173836,170552],{"class":258},[100,173838,173839,173841],{"class":102,"line":601},[100,173840,16333],{"class":471},[100,173842,53392],{"class":258},[100,173844,173845],{"class":102,"line":606},[100,173846,570],{"emptyLinePlaceholder":569},[100,173848,173849,173851,173853,173856,173858,173860,173862,173864,173866,173868,173870,173872],{"class":102,"line":612},[100,173850,35733],{"class":471},[100,173852,148033],{"class":117},[100,173854,173855],{"class":258},"(path, ",[100,173857,148043],{"class":110},[100,173859,14017],{"class":258},[100,173861,148048],{"class":6812},[100,173863,472],{"class":471},[100,173865,148053],{"class":110},[100,173867,15295],{"class":258},[100,173869,561],{"class":471},[100,173871,149395],{"class":6812},[100,173873,696],{"class":258},[100,173875,173876,173878,173880,173882],{"class":102,"line":618},[100,173877,16333],{"class":471},[100,173879,149406],{"class":258},[100,173881,46908],{"class":6812},[100,173883,809],{"class":258},[100,173885,173886],{"class":102,"line":623},[100,173887,570],{"emptyLinePlaceholder":569},[100,173889,173890],{"class":102,"line":629},[100,173891,570],{"emptyLinePlaceholder":569},[100,173893,173894,173896,173899],{"class":102,"line":635},[100,173895,678],{"class":471},[100,173897,173898],{"class":106}," write_json",[100,173900,173901],{"class":258},"(path, data):\n",[100,173903,173904,173906,173908,173910,173912,173914,173916,173918,173920,173922,173924,173926],{"class":102,"line":641},[100,173905,35733],{"class":471},[100,173907,148033],{"class":117},[100,173909,173855],{"class":258},[100,173911,153218],{"class":110},[100,173913,14017],{"class":258},[100,173915,148048],{"class":6812},[100,173917,472],{"class":471},[100,173919,148053],{"class":110},[100,173921,15295],{"class":258},[100,173923,561],{"class":471},[100,173925,149395],{"class":6812},[100,173927,696],{"class":258},[100,173929,173930,173933,173935,173937,173939,173941,173943,173945,173947,173949,173951],{"class":102,"line":647},[100,173931,173932],{"class":258},"        json.dump(data, ",[100,173934,46908],{"class":6812},[100,173936,14017],{"class":258},[100,173938,148379],{"class":6812},[100,173940,472],{"class":471},[100,173942,35542],{"class":117},[100,173944,14017],{"class":258},[100,173946,153254],{"class":6812},[100,173948,472],{"class":471},[100,173950,465],{"class":117},[100,173952,809],{"class":258},[19,173954,173955,1646],{},[32,173956,155849],{},[73,173958,173960],{"className":249,"code":173959,"language":251,"meta":79,"style":79},"from utils.file_utils import read_json, write_json\n\nstudents = read_json(\"students.json\")\nstudents.append({\"name\": \"小明\", \"score\": 95})\nwrite_json(\"students.json\", students)\n",[32,173961,173962,173973,173977,173990,174010],{"__ignoreMap":79},[100,173963,173964,173966,173968,173970],{"class":102,"line":103},[100,173965,32301],{"class":471},[100,173967,173583],{"class":258},[100,173969,548],{"class":471},[100,173971,173972],{"class":258}," read_json, write_json\n",[100,173974,173975],{"class":102,"line":188},[100,173976,570],{"emptyLinePlaceholder":569},[100,173978,173979,173981,173983,173986,173988],{"class":102,"line":199},[100,173980,160958],{"class":258},[100,173982,472],{"class":471},[100,173984,173985],{"class":258}," read_json(",[100,173987,153073],{"class":110},[100,173989,809],{"class":258},[100,173991,173992,173994,173996,173998,174000,174002,174004,174006,174008],{"class":102,"line":532},[100,173993,171776],{"class":258},[100,173995,64233],{"class":110},[100,173997,52991],{"class":258},[100,173999,151130],{"class":110},[100,174001,14017],{"class":258},[100,174003,152714],{"class":110},[100,174005,52991],{"class":258},[100,174007,2755],{"class":117},[100,174009,166394],{"class":258},[100,174011,174012,174015,174017],{"class":102,"line":577},[100,174013,174014],{"class":258},"write_json(",[100,174016,153073],{"class":110},[100,174018,174019],{"class":258},", students)\n",[14,174021,174023],{"id":174022},"_918-易错点","9.18 易错点",[26,174025,174026,174029,174034,174039,174042,174045],{},[29,174027,174028],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[29,174030,174031,174032,233],{},"能指定异常类型就不要裸写 ",[32,174033,172136],{},[29,174035,174036,174038],{},[32,174037,172511],{}," 无论是否出错都会执行。",[29,174040,174041],{},"模块文件名不要和标准库重名。",[29,174043,174044],{},"导入自己写的模块时，要注意运行目录。",[29,174046,174047],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,174049,174051],{"id":174050},"_919-本章练习","9.19 本章练习",[26,174053,174054,174057,174060,174066,174073],{},[29,174055,174056],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[29,174058,174059],{},"写函数读取文件，如果文件不存在则返回空字符串。",[29,174061,173474,174062,174065],{},[32,174063,174064],{},"math_utils.py","，实现加减乘除函数并导入使用。",[29,174067,174068,174069,174072],{},"创建一个 ",[32,174070,174071],{},"utils"," 包，把 JSON 读写函数放进去。",[29,174074,174075],{},"写一个程序，捕获除零异常和输入格式异常。",[1677,174077,174078],{},"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":79,"searchDepth":188,"depth":188,"links":174080},[174081,174082,174083,174084,174085,174086,174087,174088,174089,174090,174091,174097,174104,174106,174107,174108,174109,174110,174111],{"id":171933,"depth":188,"text":171934},{"id":172061,"depth":188,"text":172062},{"id":172110,"depth":188,"text":172111},{"id":172259,"depth":188,"text":172260},{"id":172431,"depth":188,"text":172432},{"id":172500,"depth":188,"text":172501},{"id":172611,"depth":188,"text":172612},{"id":172737,"depth":188,"text":172738},{"id":172862,"depth":188,"text":172863},{"id":172917,"depth":188,"text":172918},{"id":173016,"depth":188,"text":173017,"children":174092},[174093,174094,174095,174096],{"id":173020,"depth":199,"text":173021},{"id":173054,"depth":199,"text":173055},{"id":173093,"depth":199,"text":173094},{"id":173172,"depth":199,"text":173173},{"id":173195,"depth":188,"text":173196,"children":174098},[174099,174100,174101,174102,174103],{"id":173199,"depth":199,"text":173200},{"id":173282,"depth":199,"text":173283},{"id":173327,"depth":199,"text":173328},{"id":173386,"depth":199,"text":173387},{"id":173424,"depth":199,"text":173425},{"id":173458,"depth":188,"text":174105},"9.13 if name == \"main\"",{"id":173551,"depth":188,"text":173552},{"id":173596,"depth":188,"text":173597},{"id":173707,"depth":188,"text":173708},{"id":173765,"depth":188,"text":173766},{"id":174022,"depth":188,"text":174023},{"id":174050,"depth":188,"text":174051},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":171925,"description":24958},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":174118,"title":174119,"body":174120,"description":174283,"extension":1708,"meta":174284,"navigation":569,"path":174285,"seo":174286,"stem":174287,"__hash__":174288},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":174121,"toc":174278},[174122,174125,174128,174131,174142,174144,174218,174221,174224,174227,174230,174233,174236,174239,174242,174245,174248],[10,174123,174119],{"id":174124},"python教程",[19,174126,174127],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,174129,174130],{},"建议学习环境：",[26,174132,174133,174136,174139],{},[29,174134,174135],{},"Python 版本：Python 3.10 及以上。",[29,174137,174138],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[29,174140,174141],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,174143,118320],{"id":118320},[26,174145,174146,174152,174158,174164,174170,174176,174182,174188,174194,174200,174206,174212],{},[29,174147,174148],{},[2006,174149,174151],{"href":174150},".\u002Fch1-Python","Python环境与第一个程序",[29,174153,174154],{},[2006,174155,174157],{"href":174156},".\u002Fch2","基础语法、变量与字符串",[29,174159,174160],{},[2006,174161,174163],{"href":174162},".\u002Fch3","判断语句",[29,174165,174166],{},[2006,174167,174169],{"href":174168},".\u002Fch4","循环语句",[29,174171,174172],{},[2006,174173,174175],{"href":174174},".\u002Fch5","函数基础",[29,174177,174178],{},[2006,174179,174181],{"href":174180},".\u002Fch6","数据容器",[29,174183,174184],{},[2006,174185,174187],{"href":174186},".\u002Fch7","函数进阶",[29,174189,174190],{},[2006,174191,174193],{"href":174192},".\u002Fch8","文件操作",[29,174195,174196],{},[2006,174197,174199],{"href":174198},".\u002Fch9","异常、模块与包",[29,174201,174202],{},[2006,174203,174205],{"href":174204},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[29,174207,174208],{},[2006,174209,174211],{"href":174210},".\u002Fch11","面向对象基础",[29,174213,174214],{},[2006,174215,174217],{"href":174216},".\u002Fch12","综合案例与复习路线",[14,174219,174220],{"id":174220},"学习路线",[19,174222,174223],{},"第一阶段：能运行程序。",[19,174225,174226],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,174228,174229],{},"第二阶段：能组织数据。",[19,174231,174232],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,174234,174235],{},"第三阶段：能封装逻辑。",[19,174237,174238],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,174240,174241],{},"第四阶段：能做小项目。",[19,174243,174244],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,174246,174247],{"id":174247},"参考资料",[26,174249,174250,174257,174264,174271],{},[29,174251,174252,174253],{},"黑马程序员 Python 入门教程推荐：",[2006,174254,174255],{"href":174255,"rel":174256},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[25442],[29,174258,174259,174260],{},"Python 官方中文教程：",[2006,174261,174262],{"href":174262,"rel":174263},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[25442],[29,174265,174266,174267],{},"Python 标准库文档：",[2006,174268,174269],{"href":174269,"rel":174270},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[25442],[29,174272,174273,174274],{},"pyecharts 文档：",[2006,174275,174276],{"href":174276,"rel":174277},"https:\u002F\u002Fpyecharts.org\u002F",[25442],{"title":79,"searchDepth":188,"depth":188,"links":174279},[174280,174281,174282],{"id":118320,"depth":188,"text":118320},{"id":174220,"depth":188,"text":174220},{"id":174247,"depth":188,"text":174247},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":24960},"\u002Fwiki\u002F2024-10-10-python",{"title":174119,"description":174283},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331469677]